Wireshark 악성코드 분석
설명
이 실습에서는 Log4j 취약점을 악용한 알려진 악성 패킷 캡처를 분석했습니다. 패킷 캡처 분석 시 사용하는 동일한 플레이북으로 조사를 시작했습니다. 즉, 통계를 확인하고 엔드포인트 간 통신량을 살펴보는 것입니다. 엄청난 수의 IP 주소를 발견하고 이를 지도에 표시하기 위해 Max Mind의 GEOIP 데이터베이스를 설치 및 구성하여 IP 주소를 국가와 도시로 변환했습니다. 이 많은 IP 주소는 Log4j 취약점이나 기타 악성 스캐닝을 위한 봇넷의 잠재적 공격을 의미합니다. 캡처된 트래픽이 http(암호화되지 않음)를 사용했기 때문에 "jndi"(Java Naming and Directory Interface) 필터로 평문에서 취약점을 식별할 수 있었습니다. 이 필터의 첫 번째 패킷은 HTTP POST 요청이었고, User-Agent 필드를 검사한 결과 IP 주소 뒤에 인코딩된 텍스트가 포함된 ldap 요청이 드러났습니다. CyberChef에서 텍스트를 디코딩한 결과, 셸 스크립트를 다운로드하기 위한 wget 요청, chmod 명령으로 실행 권한을 부여한 후 스크립트를 실행하는 코드임을 확인했습니다. 또한 호스트 머신이 명령 및 제어(C2) 서버를 나타내는 공인 IP로의 아웃바운드 연결 시도를 했는지 확인하기 위해, 호스트를 출발지 주소로 하고 TCP 연결 시작을 나타내는 SYN 패킷으로 필터링한 결과 연결이 없음을 확인했습니다. 이는 머신이 패치되었거나 방화벽 규칙이 아웃바운드 연결을 차단했기 때문일 수 있습니다. 공격이 실패했음을 확인한 후, wget 명령의 IP에 대해 추가 위협 인텔리전스를 수행한 결과 해당 IP가 악성으로 알려져 있으며 VirusTotal의 커뮤니티 탭에서 Log4Shell 공격과 연관되어 있음을 발견하여 공격을 추가로 확인했습니다. 저의 접근 방식은 먼저 대상 서버와 통신하는 주체를 확인한 후, 공격받은 서버(198.71.247.91)가 새로운 아웃바운드 연결을 시작했는지 여부를 판단하는 것이었습니다.
사용된 도구
- Wireshark
- VirusTotal
- CyberChef
- Max Mind GEOIP 데이터베이스
사용된 환경
- Oracle Virtual Box를 통한 Kali Linux
실습 개요:
PCAP를 열면 가장 먼저 통신 중인 장치의 수와 종류를 확인합니다 (Statistics -> Endpoints)
비정상적으로 많은 트래픽과 여러 국가에서 시작된 다양한 IPv4 대화를 발견한 후, Max Mind의 GEOIP 데이터베이스를 사용하여 엔드포인트를 전 세계 지도에 표시하기 위해 내보냈습니다. (Endpoints -> Map -> Open in Browser)
Log4j 취약점 PCAP을 다루고 있음을 알았기에, 이 취약점은 Java Naming and Directory Interface(jndi) 취약점을 악용하므로 "jndi"로 시작하는 필터가 좋은 출발점이라고 생각했습니다. (ip contains "jndi")
"jndi" 필터가 잘 작동했고, 첫 번째 패킷(HTTP POST 요청)을 확장하여 User-Agent 필드를 검사한 결과 IP 주소 뒤에 base64로 인코딩된 텍스트가 있는 ldap 요청이 나타났습니다.
공격의 초기 POST 요청 끝부분을 디코딩하면, IP 주소로 웹 요청을 보내 셸 스크립트 lh[.]sh를 다운로드하는 wget과 권한을 변경하여 실행 권한(x)을 추가하는 chmod 명령이 나타납니다. 마지막으로 셸 스크립트를 실행합니다.
그런 다음 호스트 서버(198.71.247.91)가 외부 서버, 특히 디코딩된 문자열의 wget IP 주소로 연결을 시도했는지 확인했습니다. TCP 연결을 설정하는 SYN 패킷으로 필터링한 결과 서버가 외부 주소와 연결되지 않았음을 발견했으며, 이는 서버가 패치되어 공격이 실패했음을 의미합니다.
디코딩된 스크립트를 VirusTotal을 사용하여 추가 조사한 결과, 스크립트가 호출하는 IP가 악성임을 확인했습니다.
VirusTotal의 커뮤니티 섹션에서는 해당 IP가 과거에 Log4j 취약점을 시도한 것으로 알려져 있어 Log4j 공격임을 추가로 증명했습니다.
소감
이 실습은 실제 유선에서의 실시간 분석이 아닌 패킷 캡처(.pcapng 파일)를 분석하는 실무 경험을 제공했습니다. 실제 악성 공격 시도의 패킷 캡처를 확보하여 분석하는 것은 매우 흥미로웠으며, 특히 암호화되지 않고 http 포트 80을 통한 평문이었다는 점이 인상적이었습니다. 이전 실습과 워크스루에서 VirusTotal과 CyberChef를 사용해본 적이 있지만, pcap에서 추출한 인공물이 실제였다는 점을 알게 되면서 사이버보안 커뮤니티의 다른 사람들이 공격 IP 주소와 취약점 자체에 대해 정리한 자료를 더 깊이 파고들고 싶게 만들었습니다. 또한 Wireshark를 이전에 사용해본 적이 있지만, Max Mind의 GEOIP 데이터베이스를 구성하여 IP 주소로 위치를 확인하고 지도로 내보내는 것은 이번이 처음이었으며, 이 실습의 또 다른 하이라이트였습니다.