카테고리 Archives: linux

CVE-2016-0800 취약점 – DROWN, CVE-2016-0702 취약점 – CacheBleed

SSL 취약점을 이용한 신종 공격 방식인 DROWN, CacheBleed 취약점이 발견 되었습니다.

 

□ 개요

o 3월 1일(현지시간) 오픈SSL은 SSLv2 규격(Protocol)에 대한 긴급 업데이트 발표[1]

o SSL 취약점을 이용한 신종 공격 방식인 DROWN, CacheBleed에 대한 보안 업데이트 등

– DROWN(Decrypting RSA with Obsolete and Weakened eNcryption)

– CacheBleed: 인텔 프로세서의 Cache-bank 충돌로 인한 정보 노출을 이용한 부채널 공격

 

□ 영향 받는 사용자

– OpenSSL 1.0.2 사용자: 1.0.2g로 업데이트
– OpenSSL 1.0.1 사용자: 1.0.1s로 업데이트

 

□ 업데이트 내용

o SSLv2 프로토콜 비활성화 기본 설정 및 SSLv2 EXPORT 암호화 제거 등

 

□ 취약점 내용 및 권고 사항

o DROWN: 낡고 취약한 암호화를 통한 RSA 복호화

– RSA(Rivest Shamir Adleman): 공개키 암호화 알고리즘의 하나

CVEs 심각도 내용 비고
CVE-2016-0800 높음 SSLv2를 이용한 TLS에 대한 프로토콜 간 공격 DROWN
CVE-2016-0705 낮음 DFB, 발생 빈도 낮음
CVE-2016-0798 낮음 SRP 데이터베이스에서의 메모리 누수
CVE-2016-0797 낮음 널 포인터 역참조 및 힙 커럽션
CVE-2016-0799 낮음 고정 메모리 이슈
CVE-2016-0702 낮음 부채널 공격 CacheBleed
CVE-2016-0703 높음 분할 정복 알고리즘
CVE-2016-0704 보통 Bleichenbacher 공격

 

□ 용어 설명

o DFB(Double-Free Bug): 힙 오버플로우에 기반을 둔 공격으로, 원하는 위치의 메모리를 사용하기 위한 방법

o 널 포인터 역참조(Null Pointer Dereference): 널 포인터에 임의의 값을 대입하여 발생하는 에러

o 힙 커럽션(Heap Corruption): 동적 할당한 크기보다 더 큰 영역에 접근함으로써 발생하는 에러

o 부채널 공격(Side Channel Attack): 알고리즘의 약점을 찾거나 무차별 공격을 하는 대신 암호 체계의 물리적인 구현 과정의 정보를 기반으로 하는 공격 방법

o 분할 정복 알고리즘(Divide-and-conquer): 그대로 해결할 수 없는 문제를 작은 문제로 분할하여 문제를 해결하는 방법

o Bleichenbacher 공격: RSA 암호화 메시지 내용을 점차적으로 노출하기 위한 공격

 

□ 문의사항

o 한국인터넷진흥원 인터넷침해대응센터: 국번 없이 ☏118

 

[참고사이트]

[1] https://www.openssl.org/news/secadv/20160301.txt

=====================================================================

openssl 의 취약점이 발생했다.

해결 방법은 openssl 1.0.1 사용자의 경우 1.0.1s 으로 업데이트.

1.0.2 버전 사용자는 1.0.2g 으로 업데이트를 하면 된다.

다만 아직 업데이트 패치가 나오지 않았기 때문에 아래와 같이 httpd.conf 혹은 extra/httpd-ssl.conf 에 설정하여 DROWN 공격을 막을 수 있다.

주의할것은 이는 SMTP , POP , IMAP 등과 같이 SSL을 적용할수 있는 모든 분야에 발생할 수 있기 때문에

위와 같은 임시조치를 하였더라도 업데이트가 나올경우 업데이트를 실시해야 한다.

업데이트 명령어는 아래와 같으며 실행시 openssl, openssl-devel 이 업데이트 된다.

 

아래는 openssl 1.0.2g 를 소스 컴파일로 업그레이드 하는 방법이다.

기존 openssl 이 깔려 있는 상태에서 openssl 을 설치한 경우
–with-ssl=/usr/local/openssl 옵션을 추가하여apache 재컴파일을 해야 한다.

 

아울러 php.ini 의 아래 항목을 찾아 수정 해야 한다.

아니면 아래와 같이 심볼링 링크를 생성한다.

 

Mysql 5.7 에서 sql 복구중 에러.

mysql 5.7 에서 많은 부분이 바뀐거 같다 ‘ㅅ’a

얘를 들어 ‘can\’t’  와 같이 싱글 쿼테이션 안에 존재하는 문자열인 ‘ 의 경우 이스케이프 문자열 \’ 으로 표기하는게 일반적이다.

 

mysql import 과정에서 mysql syntex error 가 발생한다.

공식 메뉴얼에서는 ‘can”t’ 와 같이 실글쿼테이션두개 연속 표기방법으로 바뀌었다.

테스트 해본 결과 “can\’t” 더블 쿼테이션으로 표기를 해도 되는것으로 확인 되었다.

 

또한 mysql.user 테이블의 Password 컬럼의 이름이 authentication_string 으로 변경 되었다.

GRANT 를 이용한 패스워드 지정명령어까지는 삭제 되지 않았으나 추후 삭제된다는 워닝 메세지를 볼수 있다.

차후 GRANT 문이 없어질 경우 DB패스워드 지정은 명령어는 아래와 같다.

ALTER USER user IDENTIFIED BY ‘auth_string’;

 

아래 자세한 메뉴얼 이다.

http://dev.mysql.com/doc/refman/5.7/en/string-literals.html

 

database create 문에서 캐릭터셋 지정하여 생성하기

utf8로 설치된 mysql(mariadb) 에서 euckr용 데이터베이스 생성 >> 생각 보다 쉽다 ‘ㅅ’a

 

변경도 쉽다.

 

1. 일반유저권한의 GRANT
2. root 권한의 user 를 생성하는 GRANT
3. mariadb 에서 원격접속 허용을 위한 GRANT

SRV 레코드 등록

skype ( office365 ) 설정을 할때  아래와 같이 SRV 레코드를 DNS에 선언하라고 한다. 31669755_ebd0bc51_C4B8C3B3   PDNS 에서의 추가 방법은 아래와 같다.

20150916_PicPick_160134   BIND – zone file 에서의 추가 방법은 아래와 같다.

20150916_PicPick_161559   아래는 적용 테스트 명령어(NSLOOKUP) 이다.

 

mysql sleep 자동 킬 스크립트

음 php 프로그래머의 실수에 따라 DB사용을 하지 않으나 장시간 sleep이 나는 경우가 있다.

뭐 프로그램 짜다보면 그럴수 있을것이다 =3=a

  •  프로그램이 mysql_pconnect 을 사용하거나 (apache keepalive 시간 동안 접속을 대기 탈 것이다.)
  • mysql 접속후 mysql.close()를 안했거나
  • 로그테이블 등의 크기가 커져서 lock 걸리는 시간이 증가하면 다른 접속자 로그를 쓰기 위해 wait 가 걸리기 때문에 mysql 커넥션이 과도하게 증가하기도 함..
  • 서버 사양 대비 동시접속자수가 많거나…

서버 관리자 입장에서는 서버 메모리에 부담을 주고 sleep 프로세스의 과다 접속에 의해 my.cnf에서 설정된

max connctions 값 에 의해 추가 신규 접속이 불가능한 상황을 방지 해야 한다.

그리하여 이러한 스크립트를 만들었습니다 🙂 – (mysql.close()가 제대로 되지 않는 경우를 상정.)

all_user_target 값을 Y로 해두면 모든 계정에 대해 kill을 수행합니다만.

ssh 접속해서 mysql 작업하면서 장시간 가만히 있으면 강제적으로 프로세스 종료 까지 될수 있습니다.

그래서 all_user_target=”N” 으로 하고 문제시 되는 계정만 target_id 에 설정하여 운용하도록 합니다. ‘ㅅ’a

 

PS. pconnect 를 사용하면 일반 connect 으로 사용하도록 유도 하고, log 테이블이 커졋다면 일정부분 날려서 정리를 해야 할꺼고 사양이 부족하다면 사양 업그레이드를 하거나 DB query cache 를 구현 하는 방법으로 해결 해야 할꺼 같다 ‘ ‘a 이 스크립트는 임시 방편일 뿐이다.