역대급 핫 이슈였던 `Log4J(Log4Shell) 역대 최악 보안 취약점(CVE-2021-44228)` 외 8개까지 정리해봅니다.(`22.01.24 업데이트). 한번 터지더니 최근 계속해서 이슈가 되고 있는 것 같습니다.
아예 log4j 취약점을 찾는 사람들이 계속해서 파고 있는 느낌? 나름 IT 밥을 먹고 있는 사람으로 정리를 하지 않고 넘어가면 안될것 같아서 남들이 정리한걸 다시 재정리하는 느낌으로 정리해봅니다.
Log4J(Log4Shell) 어떤 취약점인데?
Log4J는 프로그램 언어 자바 기반에 로깅 유틸리티 라고 할수 있습니다. 전산 시스템에 여러가지 기록들을 남길때 사용하는 라이브러리라고 생각하면 되는데요.
이 라이브러리에 보안 취약점은 원격코드 실행(RCE : Remote Code Execution ) 로 CVSS 스코어 10점으로 가장 높은 심각도 단계입니다.
공격자(해커)가 원하는 코드를 Log4J2를 사용하고 있는 서버에서 실행할 수 있다는건데요. 마스터 권한을 얻었다고 생각하시면 됩니다. 그래서 최고 등급을 받은거구요.
정식 명칭은 Log4J 인데 2 버전에서 발생해서 Log4J2 에 원격코드 실행이 뚫렸다고 해서 쉘(shell)을 실행하는것과 같다고 해서 Log4Shell 이라는 치욕적인 별명이 생겨버렸습니다.
쉘은 명령어를 입력하여 실행할 수 있는 프로그램을 말하죠?
12월 24일 벨기에 국방부는 log4j 취약성을 이용한 사이버 공격을 받았다고 발표했습니다. 이로 인해 국방부 업무가 일시적으로 중단되었다고 하네요.
`22.01.24 업데이트 추가
`22.01.20 세개 취약점에 대한 아파치 발표가 있었습니다. log4j 는 계속해서 나오는군요.
Issue Date |
CVE | E T C |
`21.12.13 | CVE-2021-4104 | Log4J 1.2.X 로그 메세지를 통한 원격 코드 실행 가능 - JMSAppender 기능을 사용하는 경우에 발생 - Log4J 2.17.1로 패치 필요 |
`21.12.06 | CVE-2021-44228 | Log4J 2.0X ~2.14 → 2.15 패치 CVSS 심각도 점수: 10 / 10 |
`21.12.13 | Log4J 2.16 JNDI 기본 사용하지 않음으로 변경 |
|
`21.12.14 | CVE-2021-45046 | Log4j 2.0-beta9 ~ 2.12 및 2.15.0 log4j 2.x 버전에서 Pattern Layout에 Context Lookup 또는 Thread Context Lookup 패턴을 사용하는 경우에 발생 CVSS 점수: 9.0/10 |
`21.12.18 | CVE-2021-45105 | CVSS 점수: 7.5 Log4J 2.17로 패치 필요 |
`21.12.28 | CVE-2021-44832 |
Log4j 2.0-beta9 ~ 2.17 심각도 6.6 : 원격에 있는 환경 설정 파일을 로딩하는 기능을 통한 원격 조정 Log4j 2.3.2(Java 6용), 2.12.4(Java 7용) 또는 2.17.1(Java 8 이상용)으로 업데이트 필요. |
`22.01.20 | CVE-2022-23302 | Apache log4j JMSSink 역직렬화 취약점 - JMSSink 를사용하지않으면 취약점없음 공격자가 Log4j 설정에 대해 수정 권한을 갖고있거나 구성이 공격자가 엑세스 할 수 있는 LDAP 서비스를 참조하는 경우 모든 Log4j 1.x 버전 중 JMSSink가 데이터 역직렬화에 취약합니다. 공격자는 TopicConnectionFactoryBindingName 설정을 전달하여 JMSSink로 하여금 JNDI request를 실행하도록 할 수 있습니다. 이는 CVE-2021-4104와 유사한 방식으로 동작합니다. 다만, 기본값이 아닌 JMSSink를 사용하도록 특별히 구성된 경우에만 Log4j 1.x 버전에서 해당 취약점의 영향을 받습니다. Apache Log4j 2.x 버전으로 업데이트 |
`22.01.20 | CVE-2022-23305 | Apache log4j JDBCAppender SQL인젝션 취약점 - JDBCAppender 사용하지않으면취약점없음 Log4j 1.2.x 중의 JDBAppender은 SQL 문을 매개변수로 허용하며, PatternLayout의 message converter는 해당 입력값에 대한 검증을 진행하지 않아 SQL 인젝션 취약점이 유발됩니다. 공격자가 해당 취약점을 악용하면 응용 프로그램의 입력 필드 또는 헤더에 조작된 문자열을 입력하여 의도하지 않은 SQL 쿼리를 실행할 수 있습니다. 해당 취약점은 기본값이 아닌 JDBCAppender를 사용하도록 특별히 구성된 경우에만 Log4j 1.x 버전에서 해당 취약점의 영향을 받습니다. Apache Log4j 2.x 버전으로 업데이트 |
`22.01.20 | CVE-2022-23307 | Apache log4j Chainsaw 역직렬화 코드실행 취약점 - Chainsaw 를사용하지않으면취약점없음. Chainsaw v2는 Log4j의 XMLLayout 형식의 로그 파일을 읽을 수 있는 GUI 기반의 로그 뷰어입니다. 해당 취약점은 Chainsaw에 존재하며, 임의코드실행을 허용하는 역직렬화 취약점으로, 이 취약점의 이전에 CVE-2021-9493로 명명되었습니다. Apache Log4j 2.x 버전으로 업데이트 |
Log4Shell 정식 명칭은 CVE-2021-44228
정식명칭은 미국 국토안보국 CISA에서 정하는 기준으로 CVE-2021-44228 입니다. CVE ( Common Vulnerabilities and Exposures)로 공개된 보안 결함 목록 정도라고 보면 됩니다.
CVE 목록은 아래 사이트에서 검색해서 찾을 수 있구요.
https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=2021-44228
제로데이 취약점( 0 Day Vulnerability )
공격자(해커)가 먼저 발견한 취약점으로 Log4J 패치도 하기 전에 공격할 수 있는 취약점이라는 뜻입니다.
개발과 보안 관련 담당자들은 1. 해당 취약점을 최대한 빠른 시간 내에 조치해야하고, 2. 취약점이 존재하는 버전이 배포된 시점 이후에 로그를 확인해서 공격 여부를 확인하여 필요한 조치를 추가적으로 취해야 합니다. ( 여기서 Log4J를 통해 장기간 서비스를 운영했다면 이미 사라진 로그들이 많고 분석 범위가 너무 넓어 제대로 된 분석도 나오기가 힘들겠죠. )
CVSS(Common Vulnerability Scoring System)
공통 취약성 점수 매기기 시스템 정도로 풀이 되는데요 점수가 0부터 10까지 있습니다. 이번 Log4Shell 보안 취약점은 최고 등급인 10을 받았습니다.
그래서 Log4J 다 뚫렸나?
아닙니다. 이번 공격은 원격 코드를 실행하기 위해서 해당 서버(컴퓨터)에서 다시 원격지 코드를 불러와야 하는데 대부분의 서버는 원격지에 대한 인터넷 연결이 막아놓는 것이 기본 보안 정책입니다.
네트워크 아웃바운드가 가능한 서버(컴퓨터)가 다시 공격자 서버에 접근을 해야 하므로 국내 기사들에서 언급되었던 것들처럼 모든 서버가 뚫렸을 것이다 라는 추측은 거의 사실이 아닙니다. (반대로 그런식으로 운영되는 서버는 거의 없을거라고 장담할수 있습니다.)
그림판으로 몹쓸 표현을 해보자면 해커 서버나 단말을 통해서 공격 트래픽이 들어오면 우리 서비스하는 서버에서 다시 해커 서버를 접근하여 원격코드를 받아와야 하는데 대부분의 서버는 공격을 당했다고 하더라도 원격코드를 받아오기 위한 시도에서 차단 되는 곳이 대부분이었을 거란 말입니다.
물론 ② 원격코드 접근이 가능한 서버 환경이었다면 정말 참담한 결과가 바로 나왔을 거구요.
Log4Shell 보안 취약점 해결 방법은?
해결 방법은 KISA에서 Apache Log4j 2 보안 업데이트 권고로 알려주는 내용이 있습니다. 정리가 잘 되어있어서 이 내용을 그대로 읽어보시는 것을 추천합니다. kisa 취약점 대응 가이드 내용도 좋습니다.
추천 - KISA - QnA 형식으로 알아보는 Apache Log4j 취약점 대응 가이드.pdf
Apache Log4j 보안 업데이트 권고(CVE-2021-45105, 44832) (Update. 21-12-31 11:00)
□ 주요 내용
o Apache Log4j 2에서 발생하는 서비스 거부 취약점(CVE-2021-45105)[2]
o Apache Log4j 2에서 발생하는 원격코드 실행 취약점(CVE-2021-44832)[4]
※ Log4j : 프로그램 작성 중 로그를 남기기 위해 사용되는 자바 기반의 오픈소스 유틸리티
□ 영향을 받는 버전
o CVE-2021-45105
- 2.0-alpha1 ~ 2.16.0 버전 (Log4j 2.3.1, 2.12.3 제외)
o CVE-2021-44832
- 2.0-beta7 ~ 2.17.0 버전 (Log4j 2.3.2, 2.12.4 제외)
□ 대응방안
o 제조사 홈페이지를 통해 최신버전으로 업데이트 적용[3]
※ 제조사 홈페이지에 신규버전이 계속 업데이트되고 있어 확인 후 업데이트 적용 필요
- Java 8 이상 : Log4j 2.17.1으로 업데이트
- Java 7 : Log4j 2.12.4으로 업데이트[5]
- Java 6 : Log4j 2.3.2으로 업데이트[5]
※ log4j-core-*.jar 파일 없이 log4j-api-*.jar 파일만 사용하는 경우 위 취약점의 영향을 받지 않음
o 신규 업데이트가 불가능할 경우 아래의 조치방안으로 조치 적용(CVE-2021-45105)
- PatternLayout에서 ${ctx:loginId} 또는 $${ctx:loginId}를 (%X, %mdc, or %MDC)로 변경
- ${ctx:loginId} 또는 $${ctx:loginId}를 제거
□ 침해사고 신고
o 한국인터넷진흥원 인터넷침해대응센터 종합상황실(02-405-4911~5, certgen@krcert.or.kr)
o 'KISA 인터넷보호나라&KrCERT' 홈페이지(www.boho.or.kr) → 상담및신고 → 해킹 사고
□ 기타 문의사항
o 한국인터넷진흥원 사이버민원센터: 국번없이 118
참고사이트
[1] apache 보안업데이트 현황 : https://logging.apache.org/log4j/2.x/security.html
[2] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2021-45105
[3] 신규버전 다운로드 : https://logging.apache.org/log4j/2.x/download.html
[4] 취약점 정보 : https://nvd.nist.gov/vuln/detail/CVE-2021-44832
[5] Log4j 2.12.4, 2.3.2 다운로드 : https://archive.apache.org/dist/logging/log4j/
https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=36397
잡담
지난 금요일 '21.12.10일 부터 해서 개발 관련 커뮤니티들이 시끌시끌 했어서 모를 수가 없는 내용이긴 했는데요. 이것때문에 금요일에 늦게까지 남아서 야근했다는 분들도 있었고 좀 뒤늦게 토요일에 조치하러 출근한다는 분들도 많았습니다.
제가 대부분 서버에서는 문제가 되지 않을거란 말을 했지만 이런 엄청난 보안 취약점을 안고 있는 버전을 그대로 둘수가 없는 거니까요.
log4j2 버전을 가이드대로 2.5 버전으로 올리는 방법을 쓰는 곳도 있었고 ( 현재 취약점 원인인 jndi 를 아예 제거한 2.6으로 나와서 그걸로 패치하기를 권고한다고 하네요. ) 자바 버전이 1.8도 되지 않아서 우회적인 방법을 사용하는 사이트도 여럿 보였습니다. ....
보안 담당자는 해당 공격 패턴을 웹 방화벽에 업데이트하고 공격이 들어오는대로 IP 차단과 모니터링을 ... 개발 운영 관련 담당자는 직접 패치를 진행하기도 하고 여러 솔루션이나 써드파티 쪽에 연락해서 긴급 패치를 요청하기도 하고요.
이런 긴급한 상황에서도 불철주야 노력하는 보안관련 개발관련 담당자들을 보니 저도 더 열심히 해야겠단 생각이... 들었습니다.
참고자료
https://devocean.sk.com/blog/techBoardDetail.do?ID=163523
https://cselabnotes.com/kr/2021/12/12/210/
https://nvd.nist.gov/vuln/detail/CVE-2021-44228
https://www.hahwul.com/2021/12/11/log4shell-internet-is-on-fire/
https://www.boannews.com/media/view.asp?idx=103443
'dev' 카테고리의 다른 글
중첩 if 문 대신 Guard Clause (0) | 2023.01.17 |
---|---|
Base64 이해와 Base62 비교 (0) | 2022.12.20 |
ChatGPT 으로 작성해본 ChatGPT 장점, 단점, 후기 (1) | 2022.12.19 |
letsencrypt ssl 인증서 : There were too many requests of a given type :: too many failed authorizations recently (0) | 2022.06.12 |
NETSTAT 상태 LISTEN, ESTABLISHED, CLOSE_WAIT, TIME_WAIT, FIN_WAIT_2 (0) | 2021.09.08 |
OWASP top 10대 웹 보안 취약점 (0) | 2021.08.17 |
ftp, ftps, sftp(ssh) 개념 정리 (0) | 2021.07.26 |
GitHub Copilot - AI 페어 프로그래머, 코딩을 자동으로? (2) | 2021.07.18 |