본문 바로가기

보안/보안기술동향

하트블리드(HeartBleed)' 취약점

하트블리드(HeartBleed)' 취약점


HeartBeat는 OpenSSL에서 사용하는 확장규격중 하나인데, 서버와 클라이언트 사이에 안정적인 연결을 유지하기 위해 클라이언트가 임의의 정보를 정보의 길이와 함께 서버에게 전달하면 서버에서는 수신된 정보를 다시 클라이언트에 응답하여 연결상태를 알려준다.


클라이언트가  서버에게  YES(100글자) --> 를 보내게 되면 서버는 잘못된 정보라고 인식하고 응답을 하지 않아야 하는데  100바이트를 받았으니 100바이트를 응답하게 된다.


이때  메모리에 [YES ID:admin PASSWORD: 1234 ....  ] 와 같이 저장되어 있었다면 서버는 YES를 포함한 100바이트의 정보를 클라이언트에게 전송하게 된다.


클라이언트는 한번에 최대 64KB의 정보를 요청할 수 있다.  실제 64KB에  저장되는 정보는 많은것이 아니지만 지속적으로 정보를 수집하게 되면 의미를 가지는 정보(메모리에 저장되어 있는 개인키나 관리정보와 같은 민감한 데이터)를  얻을 수 있게 될것이다. 


<참고> 64K 까지 요청을 처리하는 이유

struct {

            unsigned short len;   <-- 길이를 저장하는 변수 len이 부호없는 2바이트

            char payload[];                 사용. 2바이트 최대 나타낼수 있는 수가 65536

} packet;



※ 영향을 받는 버전 

OpenSSL 1.0.1 ~ OpenSSL 1.0.1f

OpenSSL 1.0.2-beta, OpenSSL 1.0.2-beta1


※ 영향을 받지 않는 버전 

OpenSSL 0.9.x 버전

OpenSSL 1.0.0 버전

OpenSSL 1.0.1g 



※ 패치방법


1. OpenSSL 버전을 1.0.1g 버전으로 업데이트 한다.


또는 


2. 운영환경의 특수성 때문에 패키지 형태의 업데이트가 어려운 경우, Heartbeat를 사용하지 않도록 컴파일 옵션을 설정하여 재컴파일 해서 사용

# ./config -DOPENSSL_NO_HEARTBEATS

# make depend

# make

# make install


또는


3. 네트워크 보안 장비에서 취약점 탐지 및 차단 패턴을 적용한다.



※ 추가적인 보안 조치


취약한 버전의 OpenSSL을 사용하고 있었다면, 서버측 SSL비밀키가 유출되었을 가능이 있기 때문에 인증서 재발급을 검토해야 하고, 사용자들의 비밀번호도 유출가능성이 있기 때문에 사용자들이 비밀번호를 재설정하도록 유도하여 추가 피해를 방지할 수 있어야 한다.



 http://blog.alyac.co.kr/76   <-- 링크를 클릭하면 더 자세한 정보를 볼 수 있어요 ^^