[OWASP TOP 10 2017]

◎ A8. 안전하지 않은 역직렬화(Insecure Deserialization)

종종 원격 코드 실행으로 이어집니다. 역직렬화 취약점이 원격 코드실행 결과를 가져오지 않더라도 이는 권한 상승 공격, 주입 공격과 재생 공격을 포함한 다양한 공격 수행에 사용될 수 있습니다.

 

[OWASP(The Open Web Application Security Project)]

◎ 오픈소스 웹 애플리케이션 보안 프로젝트입니다. 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며, 10대 웹 애플리케이션의 취약점 (OWASP TOP 10)을 발표했습니다.
OWASP TOP 10은 웹 애플리케이션 취약점 중에서 빈도가 많이 발생하고, 보안상 영향을 크게 줄 수 있는 것들 10가지를 선정하여 2004년, 2007년, 2010년, 2013년, 2017년, 2021년을 기준으로 발표되었고, 문서가 공개되었습니다.

 

[JAVA Object Deserialization]

◎ 자바 역직렬화 취약점
안전하지 않은 역직렬화는 신뢰할 수없는 데이터가 애플리케이션의 논리를 악용하거나 서비스 거부 (DoS) 공격을 가하거나 역직렬화 과정에서 악의적으로 객체 또는 변수를 추가 작성하여 악성코드를 실행하는데 사용되는 경우 발생하는 취약점입니다. 또한 OWASP TOP 10 2017 목록에서 8 위를 차지했습니다. OWASP TOP 10 2021 목록에서는 A8. 소프트웨어 및 데이터 무결성 오류(Software and Data Integrity Failures)가 새로 등장했고 이 범주에 이전 자바 역직렬화 취약점을 포함합니다.
 > 직렬화(Serialization) : Java 프로그램에서 특정 Class의 현재 인스턴스 상태를 다른 서버로 전달하기 위해서 그 Class의 인스턴스 정보를 Byte Code로 복사하는 작업입니다. 즉, 메모리상에서 실행되고 있는 객체의 상태를 전송/저장 가능한 데이터로 만드는 것입니다.
 > 역직렬화(Deserialization) : 저장된 Byte Code로부터 객체를 불러오는 작업입니다.
 > 자바 바이트 코드(Java Byte Code) : 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스 코드입니다.

 > 클래스(Class) : 객체(Object)를 코드로 구현한 것으로 연관되어 있는 변수와 메소드의 집합입니다. 사용자 정의 데이터 타입을 만드는 것과 같은 의미입니다.

 > 인스턴스(instance) : 객체(Object), 외부에서 클래스를 자유롭게 호출하기 위해 new 연산자를 사용하여 생성된 객체입니다.
  - 변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장합니다.
  - new : 클래스 타입의 인스턴스(객체)를 생성해주는 역할을 담당합니다.
 > 메소드(method) : 코드를 재사용할 수 있게 해주는 함수입니다.
  - 정의와 호출 : 직접 메소드를 만드는 것을 정의라고 하고, 만들어진 메소드를 실행하는 것을 호출(전달 된 값은 인자(argument)) 이라고 합니다.
  - 입력과 출력 : 입력 값은 매개변수(parameter)를 통해서 이루어집니다. 들어온 값이 함수 안에서 처리되고 출력을 통해 값을 내보내는 형태입니다.

 

[History of Deserialization]

◎ First Deserialization Vulnerability (CWE-502)

 > CVE-2007-1701

  - 4.4.5 이전의 PHP 4 및 5.2.1 이전의 PHP 5에서 원격코드 실행 취약점

  - CWE(Common Weakness Enummeration) : 소프트웨어나 하드웨어에서 흔하게 발생할 수 있는 다양한 취약점의 원인이 되는 보안 약점 정보이며, 소스코드의 결함을 파악할 때 이용하는 도구의 기준이 되어 개발자는 해당 약점을 제거함으로써 안전한 소프트웨어를 개발할 수 있습니다.
  - CVE(Common Vulnerabilities and Exposures) : 정보보안 취약점 표준 코드의 약자로 공개적으로 알려진 보안 위협에 대한 식별 코드를 뜻합니다.

◎ First “Gadget Based” Vulnerability

 > CVE-2011-2894

  - Spring framework에 대한 원격코드실행 취약점

  - Gadget : 역직렬화 과정에서 호출되어 잠재적인 위험한 동작을 수행하는 메서드를 가젯(gadget) 이라고 합니다.

  - Gadget Chain : 여러개의 가젯을 함께 사용한다는 표현입니다.

'분석 > 취약점' 카테고리의 다른 글

Log4j 보안 취약점 업데이트 및 대응 방안 정리  (0) 2021.12.29

보호나라 Apache Log4j 보안 업데이트 권고 통합/임시대응 방안 및 없는 내용 추가(굵은 글씨) ver.2022.01.21

□ 개요
o Apache 소프트웨어 재단은 자사의 Log4j 2에서 발생하는 취약점을 해결한 보안 업데이트 권고[1]
o 공격자는 해당 취약점을 이용하여 악성코드 감염 또는 정상 서비스 중지 등의 피해를 발생시킬수 있으므로, 최신 버전으로 업데이트 권고
※ 관련 사항은 참고사이트 [2] 취약점 대응가이드를 참고 바랍니다.
※ 참고 사이트 [3]를 확인하여 해당 제품을 이용 중일 경우, 해당 제조사의 권고에 따라 패치 또는 대응 방안 적용

□ 주요 내용
o Apache Log4j 1.x 에서 발생하는 원격코드 실행 취약점(CVE-2022-23307)[4]
o Apache Log4j 1.x에서 발생하는 SQL Injection 취약점(CVE-2022-23305)[5]
o Apache Log4j 1.x에서 발생하는 원격코드 실행 취약점(CVE-2022-23302)[6]
o Apache Log4j 2에서 발생하는 서비스 거부 취약점(CVE-2021-45105)[7]
o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2021-45046)[8]
o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2021-44832)[9]
o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2021-44228)[10]
o Apache Log4j 1.x에서 발생하는 원격코드 실행 취약점(CVE-2021-4104)[11]
o Apache Log4j 1.x 에서 발생하는 원격코드 실행 취약점(CVE-2020-9493)[12]
o Apache Log4j 1.x, 2에서 발생하는 SMTP 메시지 가로채기(man-in-the-middle) 공격 취약점(CVE-2020-9488)[13]
o Apache Log4j 1.x에서 발생하는 원격코드 실행 취약점(CVE-2019-17571)[14]
o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2017-5645)[15]
※ Log4j : 프로그램 작성 중 로그를 남기기 위해 사용되는 자바 기반의 오픈소스 유틸리티

□ 영향을 받는 버전
o CVE-2022-23307 : 원격 코드 실행 취약점 / CVSS 기준 N/A
- 1.x 버전
※ Chainsaw를 사용하지 않는 경우 취약점 영향 없음
o CVE-2022-23305 : SQL Injectin 취약점 / CVSS 기준 N/A
- 1.x 버전
※ JDBCAppender를 사용하지 않는 경우 취약점 영향 없음
o CVE-2022-23302 : 원격 코드 실행 취약점 / CVSS 기준 N/A
- 1.x 버전
JMSSink를 사용하지 않는 경우 취약점 영향 없음
o CVE-2021-45105 : 디도스 공격 취약점 / CVSS 기준 7.5점
- 2.0-alpha1 ~ 2.16.0 버전
※ 취약점이 해결된 버전 제외(Log4j 2.3.1, 2.12.3 및 이후 업데이트 버전 제외)
o CVE-2021-45046 : 정보 노출 및 원격 코드 실행 취약점 / CVSS 기준 9.0점
- 2.0-beta9 ~ 2.15.0 버전
※ 취약점이 해결된 버전 제외(Log4j 2.3.1, 2.12.2, 2.12.3 및 이후 업데이트 버전 제외)
o CVE-2021-44832 : 임의 코드 실행 취약점 / CVSS 기준 6.6점
- 2.0-beta7 ~ 2.17.0 버전
※ 취약점이 해결된 버전 제외(Log4j 2.3.2, 2.12.4 및 이후 업데이트 버전 제외)
o CVE-2021-44228 : 원격 코드 실행 취약점 / CVSS 기준 10점
- 2.0-beta9 ~ 2.14.1 버전
※ 취약점이 해결된 버전 제외(Log4j 2.3.1, 2.12.2, 2.12.3 및 이후 업데이트 버전 제외)
o CVE-2021-4104 : 원격 코드 실행 취약점 / CVSS 기준 8.1점
- 1.x 버전
※ JMSAppender를 사용하지 않는 경우 취약점 영향 없음
o CVE-2020-9493 : 원격 코드 실행 취약점 / CVSS 기준 9.8점
- 1.x 버전
Chainsaw를 사용하지 않는 경우 취약점 영향 없음
o CVE-2020-9488 : SMTP 메시지 가로채기(man-in-the-middle) 공격 / CVSS 기준 3.7점
- 1.x 버전
- 2.0-alpha1 ~ 2.13.2 버전
※ SmtpAppender를 사용하지 않는 경우 취약점 영향 없음
o CVE-2019-17571 : 임의 코드 실행 취약점 / CVSS 기준 9.8점
- 1.x 버전
※ SocketServer를 사용하지 않는 경우 취약점 영향 없음
o CVE-2017-5645 : 임의 코드 실행 취약점 / CVSS 기준 9.8점
- 2.0-alpha1에서 2.8.1 버전
※ SocketServer를 사용하지 않는 경우 취약점 영향 없음

□ 대응방안
o 제조사 홈페이지를 통해 최신버전으로 업데이트 적용[16]
※ 제조사 홈페이지에 신규버전이 계속 업데이트되고 있어 확인 후 업데이트 적용 필요
- CVE-2021-44228, CVE-2021-45046, CVE-2017-5645
· Java 8 이상 : Log4j 2.17.1 이상 버전으로 업데이트
· Java 7 : Log4j 2.12.4 이상 버전으로 업데이트[17]
· Java 6 : Log4j 2.3.2 이상 버전으로 업데이트[17]
※ log4j-core-*.jar 파일 없이 log4j-api-*.jar 파일만 사용하는 경우 위 취약점의 영향을 받지 않음
o 신규 업데이트가 불가능할 경우 아래의 조치방안으로 조치 적용
- 공통 : log4j*.properties 또는 log4j*.xml 또는 log4j*.yaml 또는 log4j*.yml 또는 log4j*.json 또는 log4j*.jsn 설정파일 또는 DefaultConfiguration 내 코드 삭제
- CVE-2021-45105
· PatternLayout에서 ${ctx:loginId} 또는 $${ctx:loginId}를 (%X, %mdc, or %MDC)로 변경
· ${ctx:loginId} 또는 $${ctx:loginId}를 제거
- CVE-2021-44228, CVE-2021-45046, CVE-2021-44832
· JndiLookup, JdbcAppender 클래스를 경로에서 제거

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/appender/db/jdbc/JdbcAppender.class

- CVE-2021-4104, CVE-2019-17571, CVE-2022-23302, CVE-2022-23305
· JMSAppender, SocketServer, JDBCAppender, JMSSink 클래스를 경로에서 제거

zip -q -d log4j-1.*.jar org/apache/log4j/net/JMSAppender.class
zip -q -d log4j-1.*.jar org/apache/log4j/net/SocketServer.class
zip -q -d log4j-1.*.jar org/apache/log4j/net/JMSSink.class
zip -q -d log4j-1.*.jar org/apache/log4j/jdbc/JDBCAppender.class

※ log4j 1.x버전 사용자의 경우 추가적인 업그레이드 지원 중지로 인해 다른 보안위협에 노출될 가능성이 높아 최신버전(2.x) 업데이트 적용 권고
- CVE-2020-9488
· SmtpAppender 클래스를 경로에서 제거

zip -q -d log4j-1.*.jar org/apache/log4j/net/SMTPAppender.class
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/appender/SmtpAppender.class

- CVE-2017-5645
· SocketServer 클래스를 경로에서 제거

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/net/server/AbstractSocketServer.class
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/net/server/TcpSocketServer.class
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/net/server/UdpSocketServer.class

- CVE-2020-9493, CVE-2022-23307
· Apache Chainsaw를 2.1.0이상 버전으로 업데이트
· Chiansaw를 통해 직렬화 된 로그를 읽지 않도록 설정 (※ XMLSocketReceiver로 대체 가능)
· Chainsaw 클래스를 경로에서 제거

zip -q -d log4j-1.*.jar org/apache/logging/log4j/chainsaw/*
또는
zip -q -d log4j-1.*.jar org/apache/log4j/chainsaw/*


□ 탐지정책
o 참고사이트 [2] 취약점 대응 가이드를 참고하여 탐지정책 적용
※ 본 탐지정책은 내부 시스템 환경에 따라 다르게 동작할 수 있으며, 시스템 운영에 영향을 줄 수 있으므로 충분한 검토 후 적용 바랍니다.
※ 공개된 탐지정책(참고사이트 [18])은 우회가능성이 있으므로 지속적인 업데이트가 필요합니다.

□ 참고사이트
[1] apache 보안업데이트 현황 : https://logging.apache.org/log4j/2.x/security.html
[2] 취약점 대응 가이드 : https://www.boho.or.kr/data/guideView.do?bulletin_writing_sequence=36390
[3] 제조사별 현황 : https://github.com/NCSC-NL/log4shell/tree/main/software
[4-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2022-23307
[4-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23307
[5-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2022-23305
[5-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23305
[6-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2022-23302
[6-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-23302
[7-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2021-45105
[7-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105
[8-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2021-45046
[8-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046
[9-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2021-44832
[9-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44832
[10-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2021-44228
[10-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228
[11-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2021-4104
[11-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-4104

[12-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2020-9493
[12-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-9493
[13-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2020-9488
[13-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-9488
[14-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2019-17571
[14-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-17571
[15-1] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2017-5645
[15-2] 취약점 정보 : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5645
[16] 신규버전 다운로드 : https://logging.apache.org/log4j/2.x/download.html
[17] Log4j 2.12.4, 2.3.2 다운로드 : https://archive.apache.org/dist/logging/log4j/
[18] 탐지정책 : https://rules.emergingthreatspro.com/open/suricata-5.0/rules/emerging-exploit.rules

□ 기타(보호나라 원글)
https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36397
https://www.boho.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36389

'분석 > 취약점' 카테고리의 다른 글

자바 역직렬화 취약점(JAVA Object Deserialization)  (0) 2021.12.30

+ Recent posts