OpenSSL 취약점 확인 방법 - OpenSSL chwiyagjeom hwag-in bangbeob

OpenSSL 취약점이 다시금 10월 31일 발표되어 OpenSSL은 대부분의 플랫폼에서 사용되는 만큼 수집한 정보들을 정리해본다.

이번에 발표된 취약점은 X.509 Email Address Buffer Overflow 와 관련되어 있다.

다만 처음 발표되었을 때에는 Critical 로 발표되어, 심각한 취약점으로 빠른 조치가 필요해 보였으나, 11월 1일 High로 낮추어졌는데 이유를 확인해보면, REC(Remote Command Execution, 원격 실행)보다는 DoS(서비스 거부) 취약점에 가까운 것으로 확인되어 위험도가 낮아졌다고 할 수 있다.

분석

CVE-2022-3786 및 CVE-2022-3602는 OpenSSL에서 X.509 인증서 확인의 이름 제약 조건 검사 기능을 하던 중 버퍼 오버 플로우가 발생할 수 있다.

인증서에 버퍼 오버플로우을 트리거하도록 설계된 특수하게 조작된 퓨니코드(Punycode)로 인코딩된 이메일 주소가 포함되어 있을 때 발생할 수 있는 것으로 확인된다. 악용에 성공하면 DoS(서비스 거부) 조건이 발생할 수 있다.

퓨리 코드란?

비 지원 언어(한국어, 중국어등)를 공통적으로 표현하기 위해서 유니코드를 ASCII 문자 집합으로 인코딩에 사용할 때 사용할 수 있다. 퓨니코드 문자열에는 예약된 접두어 xn-- 를 이용해서 퓨니코드임을 알 수 있다.
예) 한국.kr 의 한국은 해외에서는 인식이 되지 않기 때문에, 퓨리 코드를 이용해서 ASCII로 변환이 가능하다. 이경우 한국은  3e0b707e으로, xn--3e0b707e.kr 이 된다. 

퓨리코드 변환기를 통해 손쉽게 인코딩 디코딩이 가능하다.

Download Punycode Converter 1.0.1 (softpedia.com)

Chrome 웹 스토어 - 확장 프로그램 (google.com)

CVE-2022-3602는 원래 RCE(원격 코드 실행) 가능성으로 인해 중요한 것으로 간주되었으나 OpenSSL은 최신 플랫폼에 스택 오버플로 방지 기능이 포함되어 있고 일부 Linux 배포판에서는 RCE와 DoS가 모두 실현 가능하지 않은 것으로 확인되어, 등급을 변경한 것으로 확인된다.

취약한 버전

OpenSSL versions 3.0.0 부터 3.0.6 까지

확인 방법

Linux(Ubuntu) 기준 패키지 관리 명령인 apt  list, show명령을 이용하여 가능하다.

apt list openssl
OpenSSL 취약점 확인 방법 - OpenSSL chwiyagjeom hwag-in bangbeob

그외 취약한 플랫폼 리스트도 함께 공개 되었으므로 해당 버전의 플랫폼을 사용하는지 확인하기 바란다.

OpenSSL-2022/software at main · NCSC-NL/OpenSSL-2022 · GitHub

조치 방안

현재 OpenSSL versions 3.0.7 버전으로 업그레이드 가능하다.

Tags · openssl/openssl · GitHub

GitHub - openssl/openssl: TLS/SSL and crypto library

TLS/SSL and crypto library. Contribute to openssl/openssl development by creating an account on GitHub.

github.com

OpenSSL 취약점 확인 방법 - OpenSSL chwiyagjeom hwag-in bangbeob

참조

New OpenSSL v3 vulnerability: prepare with Microsoft Defender for Cloud - Microsoft Community Hub

https://www.openssl.org/news/secadv/20221101.txt

CVE-2022-3786 and CVE-2022-3602: OpenSSL Patches Two High Severity Vulnerabilities - Blog | Tenable®

안녕하십니까? 아이네트호스팅 기술지원센터(TAC)입니다.

항상 저희 아이네트호스팅의 서비스를 이용해주셔서 감사합니다.
 

OpenSSL  1.0.1 - 1.0.1f  버전에서 심각한 보안 취약점이 발견되었기에 관련 정보를 공지해드리오니, 해당 환경/솔루션을 이용하시는 고객님께서는 속히 본 공지사항의 방법으로 조치를 하시어 부득이한 피해를 겪지 않도록 조치하시기 바랍니다.


------------------------------------------------------------------------------------------------

OpenSSL 취약점(CVE-2014-0160(OpenSSL HeartBleed 취약점)) 관련 조치 권고
 

[취약점 요약]

OpenSSL의 Heartbeat bound check 미비로 인하여 64K 분량의 정보들이 덤프로 채워져서 노출되고 있음. 64K 정보내에서 Private Key를 뽑아 내면 암호화는 그대로 풀려지게 되고 또한 정보를 64k씩만 계속 뽑아내도록 하면 필요한 정보를 계속 획득할 수 있다는 이슈


[상세 내용]
- OpenSSL의 RFC6520 TLS/DTLS Heartbeat extension 구현이 표준을 따르지 않고 구현된 사실이 밝혀짐. 이 버그는 1.0.1부터 1.0.1f까지의 버전에 분포.

- Heartbeat는 TLS/DTLS 상에서 renegotiation 없이 keep-alive 통신을 가능하게 하고, DTLS 상에서 Path MTU를 측정할 수 있게 하는 확장 규격. Heartbeat 규격에서 클라이언트는 payload와 함께 payload length를 제시하게 되어 있는데, 서버는 실제 서버에 도달한 payload의 길이가 payload length와 맞지 않을 경우 메시지를 무시해야 함. (RFC6520 Section 4) 그러나 OpenSSL이 그 조건을 체크하지 않고 memcpy를 수행했기 때문에, 클라이언트가 서버의 힙 영역 내에서 무작위 64KB 데이터를 읽어들일 수 있었음. 이는 서비스 유저 데이터는 물론, 운이 좋으면 몇 번의 시도로 서버로부터 X.509 cert의 비밀키를 취득할 수 있는 중대한 취약점.

-  발견자들([agl] Adam Langley, [bmoeller] Bodo Moeller)은 이 버그를 발표하고 (CVE-2014-0160) OpenSSL 측에 패치를 제공했으며 (96db902) Heartbleed Bug라 이름붙임.

-  Fedora 20에서는 openssl-1.0.1e-37.fc20.1로 패치된 버전 배포. Ubuntu 12.04 LTS에서는 openssl1.0.1-4ubuntu25로 패치된 버전 배포.

-  모든 서버는 지금 신속히 새로 배포되는 openssl 1.0.1g 또는 각 배포판 보안 패치 버전을 적용해야 하며, 인증서도 재발급 받고 관리자 패스워드도 교체하는 것이 보다 안전.

-  Go 1.2가 있다면 클라이언트에서 임의의 SSL/TLS 서버를 테스트해 볼 수 있음. (https://github.com/titanous/heartbleeder)

-  임의의 서버를 테스트할 수 있는 웹사이트도 있음. (https://github.com/FiloSottile/Heartbleed) 테스트는 HTTPS가 열린 443 포트로 시도하면 됨.


[해결방법]
1. OpenSSL 버전 확인 후 패치 .

* 참고 : OpenSSL 버전 확인 방법

version 옵션을 사용하면 현재 설치되어 있는 OpenSSL 의 버전을 쉽게 확인할 수 있습니다.

# openssl version
OpenSSL 0.9.8y-fips 5 Feb 2013

- OpenSSL 1.0.1 - 1.0.1f 사이의 버전은 취약.
- OpenSSL 1.0.1g 는 취약하지 않음.
- OpenSSL 1.0.0 관련 버전은 취약하지 않음.
- OpenSSL 0.9.8 관련 버전은 취약하지 않음.

OpenSSL 1.0.1 ~ 1.0.1f 을 사용하지 않으면 안전하다.



2. 다음 옵션으로 재 컴파일 해 사용하여 문제를 일시적으로 해결 가능 .

-DOPENSSL_NO_HEARTBEATS

------------------------------------------------------------------------------------------------

[내 사이트가 영향이 있는지 체크하는 방법]

 아래의 사이트에서 해당 웹서버가 영향을 받는지 아닌지 테스트할 수 있다.

http://filippo.io/Heartbleed/#github.com
  
이 사이트의 소스코드는 https://github.com/FiloSottile/Heartbleed 여기 있는데, go로 작성되어 있다. 사이트의 입력창에 웹서버 정보를 입력하기 부담스러운 경우는, 소스를 받아 직접 웹서버에서 테스트 할수 있다.

[AWS EC2 에서 대응하는 방법]

Amazon Linux에서 아래의 명령 후 서비스 restart
sudo yum clean all
sudo yum update OpenSSL




[Ubuntu 에서 대응하는 방법]

참고 URL : http://www.ubuntu.com/usn/usn-2165-1/

sudo apt-get update
sudo apt-get upgrade


또는


sudo apt-get update
sudo apt-get install libssl1.0.0



[CentOS(6.X) 에서 대응하는 방법]

참고 URL : http://lists.centos.org/pipermail/centos-announce/2014-April/020248.html
                 http://www.centosblog.com/critical-openssl-vulnerability-heartbleed-openssl-1-0-1-1-0-1f-patch-bug-centos-system/


상기 정보를 참고하여 openssl yum update 실시.
 

yum clean all && yum update "openssl*"
 


[Node.js 에서 대응]

참고 URL : https://twitter.com/nodejs/status/453298698714230784
                 https://github.com/joyent/node/commit/28c6e42e


 Node.js v0.10.2 이상, v0.8 이라면 취약성 없음.

OPENSSL_NO_HEARTBEATS 이 설정된 상태로 heartbeat기능이 disable 상태.



[Reference]
http://heartbleed.com/
https://www.openssl.org/news/secadv_20140407.txt
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2014-0160
https://access.redhat.com/security/cve/CVE-2014-0160
https://blog.ipredator.se/2014/04/how-to-test-if-your-openssl-heartbleeds.html
http://www.zdnet.co.kr/news/news_view.asp?artice_id=20140409105002


------------------------------------------------------------------------------------------------


해당 솔루션을 이용하시는 고객님께서는 본 공지사항을 확인하시어, 피해를 미연에 방지하시기 바랍니다.
 

기타 문의사항이 있으시면 전화 1566-6757 또는 로 문의하여 주시기 바랍니다.


항상 최선을 다하는 아이네트호스팅이 되겠습니다.


감사합니다.