목표: 시뮬레이션된 은행 애플리케이션 환경 내에서 Log4Shell 취약점(CVE-2021-44228)의 악용을 시연합니다.
목표: 시뮬레이션된 금융 애플리케이션 환경에서 Log4Shell 취약점(CVE-2021-44228)의 악용을 시연합니다.
범위:
1: 취약한 금융 애플리케이션을 Apache Log4j를 사용하여 설정합니다. 2:취약점을 악용하여 원격 코드 실행을 달성하는 페이로드를 제작합니다. 3:데이터 유출 및 측면 이동과 같은 사후 악용 기술을 시연합니다. 4:패치 및 네트워크 모니터링을 포함한 탐지 및 완화 전략을 구현하고 문서화합니다. 5:사용된 도구(예: JNDI Exploit Kit, Burp Suite)를 포함한 악용 과정의 상세한 설명.
이제 가상 VM 실습 시나리오 내에서 Log4Shell 취약점(CVE-2021-44228)을 악용하고 원격 코드 실행을 달성하는 페이로드를 제작하는 방법을 자세히 살펴보겠습니다.
페이로드를 제작하려면 취약점의 성격을 이해해야 합니다. Log4Shell 취약점을 통해 공격자는 Log4j 라이브러리의 구성 파일에 악성 코드를 주입할 수 있으며, 이 코드는 취약한 애플리케이션에 의해 실행됩니다. 페이로드는 이 취약점을 트리거하고 대상 시스템에서 임의 코드를 실행하도록 설계됩니다.
페이로드 제작 단계의 기본 개요는 다음과 같습니다:
Log4j 구성 파일 식별: 대상 금융 애플리케이션 환경 내에서 Log4j 구성 파일의 위치를 확인합니다. 일반적으로 이 파일은 log4j2.xml 또는 log4j.properties로 명명됩니다.
악용 페이로드 제작: 임의 코드를 실행하기 위해 JNDI(Java Naming and Directory Interface) 조회를 포함하는 악성 Log4j 구성을 만듭니다. 이 페이로드는 log4j2.xml 파일에 포함될 수 있습니다.
xml
"your-attacker-server"를 포트 4444에서 수신 대기 중인 공격자 시스템의 IP 주소 또는 호스트명으로 바꿉니다.
페이로드 호스팅: 공격자 시스템에서 연결을 수신하고 임의 코드를 실행할 리스너를 설정합니다.
XML 선언:
xml
표준 XML 선언입니다.
Configuration 요소:
xml
Log4j 구성의 루트 요소입니다.
Appenders:
xml
"evil"이라는 이름의 Socket appender를 정의합니다.
host 속성은 공격자의 서버를 지정합니다.
port 속성은 공격자 서버의 포트를 지정합니다.
SerializedLayout은 로그 이벤트가 직렬화되어 네트워크를 통해 전송됨을 나타내며, 이는 역직렬화 공격을 통해 원격 코드 실행(RCE)을 허용할 수 있으므로 보안 위험이 있습니다.
Loggers:
xml
<Loggers>
<Root level="all">
<AppenderRef ref="evil" />
</Root>
</Loggers>
로깅 수준을 all로 정의하여 모든 로그 메시지(디버그, 정보, 경고, 오류 등)가 캡처되도록 합니다.
AppenderRef는 이전에 정의된 "evil" appender를 참조하므로 모든 로그 메시지가 공격자의 서버로 전송됩니다.
피드백
보안 위험:
원격 코드 실행(RCE): 원격 Socket appender와 함께 SerializedLayout을 사용하면 공격자가 서버를 제어하고 악성 페이로드를 전송할 경우 시스템에서 임의 코드를 실행할 수 있습니다. 이는 심각한 보안 취약점입니다.
데이터 유출: 이 구성은 승인되지 않은 원격 서버로 민감한 데이터가 쉽게 전송되어 데이터 유출로 이어질 수 있습니다.
부적절한 로깅 관행:
신뢰할 수 없는 원격 서버에 로깅하는 것은 매우 안전하지 않으며 보안 로깅 모범 사례에 위배됩니다.
프로덕션 환경에서 all 수준으로 로깅하면 로그 플러딩, 성능 문제 및 민감한 정보 노출 가능성이 발생할 수 있습니다.
완화 권장 사항:
직렬화 레이아웃 피하기: 반드시 필요한 경우가 아니면 모든 로깅 구성에서 SerializedLayout을 사용하지 말고, 수신 서버가 신뢰할 수 있고 안전한지 확인하십시오.
로깅 엔드포인트 검증: 모든 로깅 엔드포인트가 신뢰할 수 있고 통제된 환경 내에 있는지 확인하십시오.
안전한 레이아웃 사용: 직렬화 위험이 없는 PatternLayout과 같은 더 안전한 레이아웃을 사용하십시오.
로깅 수준 제한: 적절한 로깅 수준(예: info, warn, error)을 사용하고 특정 디버깅 목적으로 보안 환경에서만 all을 사용하지 마십시오.
더 안전한 구성 예시
다음은 더 안전한 Log4j 구성의 예시입니다:
xml
nc -nlvp 4444
취약점 트리거: 제작된 Log4j 구성 파일을 대상 환경에 배포하여 원래 구성 파일을 대체합니다.
악용 실행: 취약한 Log4j 인스턴스가 악성 구성을 로드하면 공격자 서버에 연결을 시도하여 원격 코드 실행으로 이어집니다.
실행 확인: 공격자 시스템의 리스너를 확인하여 페이로드가 성공적으로 실행되었는지 확인합니다.
이 페이로드는 통제된 환경 내에서 교육 및 테스트 목적으로만 사용된다는 점에 유의해야 합니다. 실제 시나리오에서 Log4Shell과 같은 취약점을 무단으로 악용하는 것은 불법이며 비윤리적입니다. 보안 테스트나 침투 테스트 활동을 수행하기 전에 항상 명시적인 허가와 승인을 받아야 합니다.