
loki-bot(악성코드) 관련 네트워크 트래픽을 탐지하고 파싱할 수 있는 Python 스크립트입니다. 이 스크립트는 C2로 유출되는 데이터가 무엇인지, 봇 추적 등을 알고자 하는 DFIR 분석가와 보안 연구자에게 유용할 수 있습니다.
loki-bot(악성코드)과 관련된, 손상된 호스트와 C2 서버 간의 네트워크 트래픽을 탐지하고 파싱하는 Python 스크립트입니다. 이 스크립트는 C2로 유출되는 데이터가 무엇인지, 봇 추적 등을 알고 싶어하는 DFIR 분석가와 보안 연구자에게 유용할 수 있습니다.
이 스크립트는 스위치 없이 네트워크에서 직접 스니핑하거나(--pcap $pcap_file 사용) 네트워크 트래픽의 PCAP을 읽을 수 있습니다. 스크립트가 loki-bot 관련 네트워크 트래픽을 탐지하면 패킷에 포함된 데이터를 JSON 형식으로 화면에 덤프합니다.
일부 패킷에는 aPLib으로 압축된 유출 데이터가 포함되어 있습니다. 스크립트는 해당 데이터를 압축 해제하여 화면에 표시하지만, 아직 이 스크립트에 통합되지 않은 추가 처리 과정이 있다는 점을 알아두십시오...아직은요. 따라서 aplib.py 스크립트도 다운로드하여 loki-parse.py와 같은 디렉터리에 보관하는 것이 중요합니다. loki-parse가 정상적으로 실행되려면 이 스크립트가 필요합니다.
마지막으로, 네트워크 트래픽 스니핑에 사용되는 코드에는 패킷의 데이터 부분이 잘려 나갈 수 있는 문제가 있습니다. 이는 scapy가 트래픽을 파싱하는 방식과 관련된 것으로 보입니다. 이 문제는 압축된 데이터가 포함된 더 큰 패킷에서 발생할 가능성이 높습니다. 이런 경우 다음과 같은 사전 키(dictionary key)가 생성됩니다:
Decompressed Application/Credential Data': 'ERROR: Incomplete Packet Detected
이 문제는 저장된 PCAP에서는 발생하지 않는 것으로 보입니다. 따라서 이 오류가 발생하면 네트워크 트래픽을 pcap 파일로 저장한 다음 loki-parse를 해당 pcap 파일에 대해 다시 실행해 보세요.
스크립트가 패킷 내 데이터 압축 해제에 성공하면 이 데이터는 단순히 화면에 덤프됩니다(JSON 형식이 아님). 이후 버전에서 이 부분을 개선할 계획입니다.
실습해 볼 수 있도록 예제 pcap으로 loki-bot_network_traffic.pcap을 제공했습니다.
$ sudo ./loki_parse.py
와이어에서 PCAP 스니핑 중
{
"Compromised Host/User Data": {
"Compressed Application/Credential Data Size (Bytes)": 2310,
"Compression Type": 0,
"Data Compressed": true,
"Encoded": false,
"Encoding": 0,
"Original Application/Credential Data Size (Bytes)": 8545
},
"Compromised Host/User Description": {
"64bit OS": false,
"Built-In Admin": true,
"Domain Hostname": "REMWorkstation",
"Hostname": "REMWORKSTATION",
"Local Admin": true,
"Operating System": "Windows 8.1 Workstation",
"Screen Resolution": "3440x1440",
"User Name": "REM"
},
"Malware Artifacts/IOCs": {
"Binary ID": "XXXXX11111",
"Loki-Bot Version": 1.8,
"Mutex": "B7E1C2CC98066B250DDB2123",
"Potential Hidden File [Hash Database]": "%APPDATA%\\C98066\\6B250D.hdb",
"Potential Hidden File [Keylogger Database]": "%APPDATA%\\C98066\\6B250D.kdb",
"Potential Hidden File [Lock File]": "%APPDATA%\\C98066\\6B250D.lck",
"Potential Hidden File [Malware Exe]": "%APPDATA%\\C98066\\6B250D.exe",
"Unique Key": "g5cy2",
"User-Agent String": "Mozilla/4.08 (Charon; Inferno)"
},
"Network": {
"Data Transmission Time": "2017-04-27T15:03:20.921806",
"Destination Host": "185.141.27.187",
"Destination IP": "185.141.27.187",
"Destination Port": 80,
"First Transmission": true,
"HTTP Method": "POST",
"HTTP URI": "/danielsden/ver.php",
"Source IP": "172.16.0.130",
"Source Port": 49344,
"Traffic Purpose": "Exfiltrate Application/Credential Data"
}
}