OpenSSL 취약점 확인 - OpenSSL chwiyagjeom hwag-in

OpenSSL 취약점 확인 - OpenSSL chwiyagjeom hwag-in
CVE-2022-0788 OpenSSL

KISA에서 최근에 Openssl관련 문제가 발견돼 조치사항이 나왔다.

자세한 내용은 아래에서 확인 가능하며.

https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36498 

KISA 인터넷 보호나라&KrCERT

KISA 인터넷 보호나라&KrCERT

www.boho.or.kr

OpenSSL 내 BN_mod_sqrrt()함수에서 연산 시 무한 루프로 인해 발생하는 서비스거부 취약점 이슈이다.

(CVE-2022-0778)

영향받는 받는 버전

 o OpenSSL 1.0.2 및 이전 버전
 o OpenSSL 1.1.1 및 이전 버전
 o OpenSSL 3.0 및 이전 버전

해결 방법

 o 해당 취약점에 영향 받는 버전의 사용자는 아래 버전으로 업데이트[2]
  - OpenSSL 1.0.2 버전 사용자 : 1.0.2zd 버전으로 업데이트
  - OpenSSL 1.1.1 버전 사용자 : 1.1.1n 버전으로 업데이트
  - OpenSSL 3.0 버전 사용자 : 3.0.2 버전로 업데이트
※ OpenSSL 1.0.2 버전(Premium Level Support 사용자 제외) 및 1.1.0 버전은 더 이상 업데이트가 지원되지 않으니 OpenSSL 1.1.1n 또는 3.0.2 버전으로 변경할 것을 권고

OpenSSL 취약점 확인 - OpenSSL chwiyagjeom hwag-in
최근 CentOS7.9를 설치시 기본 설치된 openssl version이다.

그에 앞서 보통 고객사는 폐쇄망으로 사전에 패키지를 받아 테스트를 하고 yum은 사용할수 없다.

openssl을 설치하기 위해서는 gcc 컴파일러가 필욯다.

그래서 

#rpm패키지를 설치하지 않고 해당 특정디렉토리에 다운받는다.
yum install --downloadonly --downloaddir=/package/gcc gcc 
#해당 디렉토리에 다운받는다.
cd /package/gcc

rpm -Uvh *.rpm

gcc를 다운받고 다운 받은 모든 rpm을 설치 진행해준다.

mkdir /package/openssl

cd /package/openssl
#다운 받기
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz
#압축해제한다. 
tar -xvzf openssl-1.1.1b.tar.gz

cd openssl-1.1.1b

#source 컴파일 실행한다.


./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared
make
make install

vi /etc/ld.so.conf.d/openssl-1.1.1b.conf
   /usr/local/ssl/lib

ldconfig -v

ln -s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

mv /usr/bin/openssl /usr/bin/openssl1.0.1(업데이트 전 버전)

ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

openssl version
OpenSSL 취약점 확인 - OpenSSL chwiyagjeom hwag-in

위와 같이 패치 진행하면 된다. 

회사명:한국IDG 제호: ITWorld 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아00743 등록일자 : 2009년 01월 19일

발행인 : 박형미 편집인 : 박재곤 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2023 International Data Group. All rights reserved.

다만 처음 발표되었을 때에는 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

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

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.

이 정보는 OpenSSL 1.0.2f/1.0.1r 이전 버전과 정적으로 연결된 앱의 개발자를 대상으로 합니다.  이전 버전에는 보안 취약점이 있습니다. 최대한 빨리 앱을 OpenSSL 1.0.2f/1.0.1r 이상으로 이전하고 업그레이드된 APK의 버전 번호를 올리시기 바랍니다.

현재 상태

2016년 7월 11일부터 Google Play에서는 이전 버전의 OpenSSL을 사용하는 새로운 앱이나 업데이트의 게시를 차단했습니다. Play Console의 공지를 참조하세요. Play Console에 표시된 기한이 지난 후에도 보안 취약점이 수정되지 않은 앱은 모두 Google Play에서 삭제될 수 있습니다.

필요한 조치​

  1. Play Console에 로그인한 후 알림 섹션으로 이동하여 영향을 받는 앱과 문제 해결 기한을 확인합니다.
  2. 앱을 OpenSSL 1.0.2f/1.0.1r 이상으로 이전하고 버전 번호를 올립니다.
  3. 영향을 받는 앱의 업데이트된 버전을 제출합니다.

추가 세부정보

이 취약점은 OpenSSL 1.0.2f/1.0.1r에서 해결되었습니다. 최신 버전의 OpenSSL은 여기에서 다운로드할 수 있습니다. 사용 중인 OpenSSL 버전은 ($ unzip -p YourApp.apk | strings | grep "OpenSSL")을 grep 검색하여 확인할 수 있습니다.

OpenSSL을 번들로 제공하는 타사 라이브러리를 사용 중인 경우 OpenSSL 1.0.2f/1.0.1r 이상을 번들로 제공하는 버전으로 업그레이드해야 합니다.

이러한 취약점에는 'logjam' 및 CVE-2015-3194가 있습니다. Logjam 공격을 통해 중간자 공격자는 취약한 TLS 연결을 512비트 내보내기 등급의 암호화로 다운그레이드할 수 있게 됩니다. 공격자는 이를 통해 해당 연결을 통과하는 모든 데이터를 읽고 수정할 수 있습니다. 여기에서 다른 취약점을 자세히 알아볼 수 있습니다. 다른 기술 관련 질문이 있으면 Stack Overflow에 'android-security' 및 'OpenSSL' 태그를 추가하여 게시하세요.

이러한 문제가 OpenSSL 1.0.2f/1.0.1r 이전 버전을 사용하는 모든 앱에 영향을 주는 것은 아니지만 모든 보안 패치를 최신 상태로 유지하는 것이 가장 좋습니다. 사용자를 보안 위험에 노출시키는 취약점이 있는 앱은 Google의 악의적 행위 정책 및 개발자 배포 계약의 섹션 4.4를 위반하는 것으로 간주될 수 있습니다.

앱을 게시하기 전에 개발자 배포 계약 및 콘텐츠 정책을 준수하는지 검토하시기 바랍니다. 

도움이 필요하신가요?

취약점에 관한 기술적인 문의사항이 있다면 'android-security' 태그를 사용하여 Stack Overflow에 게시해 주시기 바랍니다. 문제 해결 절차에 관해 궁금하신 점이 있으면 Google 개발자 지원팀에 문의하세요.