
FATT /fingerprintAllTheThings - pcap 파일 및 실시간 네트워크 트래픽에서 네트워크 메타데이터와 지문을 추출하기 위한 pyshark 기반 스크립트
66 61 74 74 2e
모든 것을 지문인식하세요!
핑거프린팅 방법, 샘플 사용 사례 및 연구 결과에 대한 자세한 내용은 곧 저장소에 추가될 예정입니다. 기대해 주세요!
패킷 캡처 파일(pcap)이나 실시간 네트워크 트래픽에서 JA3 및 HASSH와 같은 네트워크 메타데이터와 핑거프린트를 추출하는 스크립트입니다. 주 사용 사례는 허니팟 모니터링이지만, 네트워크 포렌식 분석과 같은 다른 용도로도 사용할 수 있습니다. fatt는 Linux, macOS, Windows에서 작동합니다.
fatt는 pyshark (tshark의 Python 래퍼)를 사용하므로 성능이 뛰어나지는 않습니다! 하지만 당연히 프로덕션 환경에서 사용할 도구가 아니므로 큰 문제는 아닙니다. 더 진지한 사용 사례에는 Bro/Zeek, Suricata 또는 Netcap과 같은 다른 네트워크 분석 도구를 사용할 수 있습니다. Joy는 네트워크 흐름 데이터를 캡처하고 분석하는 데 사용할 수 있는 또 다른 훌륭한 도구입니다.
그 외에도 더 빠른 Go 기반 버전의 fatt를 개발 중이며, 해당 라이브러리를 packetbeat와 같은 gopacket 기반 도구에서 사용할 수 있습니다. gQUIC 라이브러리(QUICk)의 초기 버전을 출시했습니다.
먼저 tshark를 설치해야 합니다. 버전 v2.9.0 이상인지 확인하세요. Tshark/Wireshark는 v2.9.0부터 'ssl'을 'tls'로 이름을 변경했으며, fatt는 새 버전의 tshark를 기준으로 작성되었습니다.
tshark의 이전 버전(< v2.9.0)을 사용하는 경우 "old-tshark" 브랜치의 fatt 스크립트를 사용할 수 있습니다.
cd fatt/
pip3 install pipenv
pipenv install
또는 가상 환경을 사용하지 않으려면 pyshark만 설치하세요:
pip3 install pyshark==0.4.2.2
가상 환경을 활성화하려면 pipenv shell을 실행하세요:
$ pipenv shell
Launching subshell in virtual environment…
bash-3.2$ . /Users/adel/.local/share/virtualenvs/fatt-ucJHMzzt/bin/activate
(fatt-ucJHMzzt) bash-3.2$ python3 fatt.py -h
또는 가상 환경 내에서 명령을 pipenv run으로 실행하세요:
$ pipenv run python3 fatt.py -h
출력:
usage: fatt.py [-h] [-r READ_FILE] [-d READ_DIRECTORY] [-i INTERFACE]
[-fp [{tls,ssh,rdp,http,gquic} [{tls,ssh,rdp,http,gquic} ...]]]
[-da DECODE_AS] [-f BPF_FILTER] [-j] [-o OUTPUT_FILE]
[-w WRITE_PCAP] [-p]
네트워크 핑거프린트를 추출하는 Python 스크립트
선택적 인수:
-h, --help 이 도움말 메시지를 표시하고 종료
-r READ_FILE, --read_file READ_FILE
처리할 pcap 파일
-d READ_DIRECTORY, --read_directory READ_DIRECTORY
처리할 pcap 파일이 있는 디렉토리
-i INTERFACE, --interface INTERFACE
인터페이스에서 수신
-fp [{tls,ssh,rdp,http,gquic} [{tls,ssh,rdp,http,gquic} ...]], --fingerprint [{tls,ssh,rdp,http,gquic} [{tls,ssh,rdp,http,gquic} ...]]
핑거프린팅할 프로토콜. 기본값: 모두
-da DECODE_AS, --decode_as DECODE_AS
tshark가 일반적으로 디코딩하지 않는 상황에서 프로토콜을 디코딩하도록 지시하는 {디코드_기준_문자열:
디코드_할_프로토콜} 사전
-f BPF_FILTER, --bpf_filter BPF_FILTER
사용할 BPF 캡처 필터 (실시간 캡처 전용).
-j, --json_logging JSON 형식으로 출력 기록
-o OUTPUT_FILE, --output_file OUTPUT_FILE
출력 로그 파일 지정. 기본값: fatt.log
-w WRITE_PCAP, --write_pcap WRITE_PCAP
실시간 캡처된 패킷을 이 파일에 저장
-p, --print_output 출력 출력
$ python3 fatt.py -i en0 --print_output --json_logging
192.168.1.10:59565 -> 192.168.1.3:80 [HTTP] hash=598c34a2838e82f9ec3175305f233b89 userAgent="Spotify/109600181 OSX/0 (MacBookPro14,3)"
192.168.1.10:59566 -> 13.237.44.5:22 [SSH] hassh=ec7378c1a92f5a8dde7e8b7a1ddf33d1 client=SSH-2.0-OpenSSH_7.9
13.237.44.5:22 -> 192.168.1.10:59566 [SSH] hasshS=3f0099d323fed5119bbfcca064478207 server=SSH-2.0-babeld-80573d3e
192.168.1.10:59584 -> 93.184.216.34:443 [TLS] ja3=e6573e91e6eb777c0933c5b8f97f10cd serverName=example.com
93.184.216.34:443 -> 192.168.1.10:59584 [TLS] ja3s=ae53107a2e47ea20c72ac44821a728bf
192.168.1.10:59588 -> 192.168.1.3:80 [HTTP] hash=598c34a2838e82f9ec3175305f233b89 userAgent="Spotify/109600181 OSX/0 (MacBookPro14,3)"
192.168.1.10:59601 -> 216.58.196.142:80 [HTTP] hash=d6662c018cd4169689ddf7c6c0f8ca1b userAgent="curl/7.54.0"
216.58.196.142:80 -> 192.168.1.10:59601 [HTTP] hash=c5241aca9a7c86f06f476592f5dda9a1 server=gws
192.168.1.10:54387 -> 216.58.203.99:443 [QUIC] UAID="Chrome/74.0.3729.169 Intel Mac OS X 10_14_5" SNI=clientservices.googleapis.com AEAD=AESG KEXS=C255
JSON 출력: