이 프로젝트의 목표는 pcap
파일을 구문 분석하여 TCP 패킷에서 발견된 모호성을 반환하는 사용하기 쉬운 도구를 구축하는 것입니다. 현재 UDP 및 ARP 분석 구현 작업도 진행 중입니다.
개요:
기여: 어떤 의견/아이디어/기여도 환영합니다.
make
./p2a -v ./pcap_files/some_pcap_file.pcap -s results.json
$ ./p2a -h
Usage: ./p2a [OPTIONS] FILE
-h,--help: display this help message
-v,--verbose: verbose option
-d,--debug: debug option
-x,--exclude OPTIONS: exclude some possible ambiguities from analysis
--exclude ret,mac,ttl
ret: exclude retransmission analysis
mac: exclude MAC addresses analysis
ttl: exclude TTL analysis
-s,--save FILENAME: saves results to file FILENAME
JSON format - FILENAME should contain the JSON extension
Examples:
./p2a -v ./pcap_files/some_pcap_file.pcapng
./p2a --exclude mac,ttl --verbose my-pcap-file.pcap -s results.json
방금 모든 결과를 JSON 파일에 저장하는 옵션을 추가했습니다. 그렇게 하려면 --save file.json
옵션을 사용할 수 있습니다. 모호성이 발견되었는지 여부에 관계없이 모든 세션을 이 파일에 저장합니다. 현재 JSON 파일을 HTML 파일로 멋지게 렌더링하는 방법을 연구 중입니다(일부 JavaScript 사용).
SHA(IP, Port)
디버그 목적으로 sha
스크립트를 사용할 수 있도록 만들었습니다. IP 주소와 포트 번호를 인수로 사용하고 (IP|포트)의 SHA1 해시를 반환합니다. 이 값은 p2a
스크립트에서 세션 식별자 로 사용됩니다.
make sha
./sha -h
Usage:
./sha IP PORT
./sha 127.0.0.1 12345
IP: 127.0.0.1
Port: 12345
SHA1: 21bf549a8095063f49cff573e689b6b10365f4c8
IP 주소 및 whois
한 세션이 의심스러운 경우 해당 세션과 관련된 내용을 아는 것이 유용할 수 있습니다. 그렇게 하려면 Wireshark를 사용하고 디스플레이 필터를 적용하여 주어진 세션만 표시할 수 있습니다.
더 간단한 접근 방식은 whois
를 사용하여 누가 IP 주소를 소유하고 있는지 알아내는 것입니다.
캡처 파일의 모든 IP 주소와 함께 whois
사용하려면:
for ip in $( tshark -r file.pcapng -T fields -e ip.dst -e ip.src | egrep -o " [0-9]+.[0-9]+.[0-9]+.[0-9]+ " | sort | uniq ) ; do whois $ip | egrep " ^[Oo]rgani[sz]ation " ; done
tshark
작동하지 않는 경우 동일한 작업을 수행하는 C 스크립트가 있습니다.
IP 패킷의 TTL( Time To Live ) 필드는 해당 패킷이 라우터에 의해 삭제되기 전에 네트워크를 통해 이동하는 것이 '허용되는' 시간에 해당합니다. 일반적으로 매 홉마다 1씩 감소하는 8비트 값입니다.
TTL Expiry Attack에 대한 Cisco의 페이지에 따르면:
"IOS 장치가 TTL 값이 1보다 작거나 같은 패킷을 수신하면 ICMPv4 Type 11, Code 0 메시지가 IOS 장치에서 전송되어 CPU에 해당 영향을 미칩니다. 이러한 영향은 CPU가 더 많아지기 때문에 발생합니다. TTL 값이 1보다 큰 패킷을 단순히 전달하는 것보다 TTL 값이 1보다 작은 패킷에 응답(TTL 초과 패킷 사용)하려면 처리가 필요합니다."
"TTL 만료 동작은 네트워크 장비에 대한 DoS(서비스 거부) 공격 벡터를 생성합니다. 네트워크 장치는 일반 패킷을 가능한 한 빨리 전달하도록 특별히 제작되었습니다. 만료되는 TTL 값이 있는 예외 패킷과 같은 예외 패킷이 발생하면 다양한 양이 발생합니다. 라우터는 적절하게 응답하기 위해 많은 노력을 기울입니다."
분석/코드:
utils.c
에서 TTL_THRESHOLD
(현재는 10)를 정의했습니다. 패킷의 TTL이 이 값보다 낮으면 TTL이 낮음을 나타내는 플래그가 발생합니다. 이러한 플래그가 너무 많이 발생하면 TTL 만료 공격일 수 있습니다.
샘플 pcap 파일(낮은 TTL의 패킷 포함)은 ./attack_scripts/low_ttl
디렉터리에 있는 스크립트를 사용하여 캡처되었습니다.
ARP 중독은 우리가 기본 게이트웨이 라고 믿도록 호스트를 속이는 것입니다. 피해자는 정기적으로 기본 게이트웨이에 MAC 주소(ARP 프로토콜)를 묻습니다. 그러나 공격자는 기본 게이트웨이가 다른 MAC 주소(예: 공격의 MAC 주소)에 있다는 내용의 패킷을 피해자에게 보낼 수 있습니다. 공격자는 피해자가 기본 게이트웨이 에서 보낸 실제 메시지를 "삭제"할 수 있도록 해당 패킷을 "정기적으로" 보내면 됩니다.
이를 통해 공격자는 중간자, DoS, 블랙홀 등 다양한 방법으로 피해자를 공격할 수 있습니다.
예:
피해자의 IP 주소는 192.168.10.2
이고 기본 게이트웨이 는 192.168.1.1
입니다.
sudo arpspoofing -i wlan0 -t 192.168.10.2 192.169.1.1
공격자는 192.168.1.1
공격자의 MAC 주소에 있음을 알리는 피해자 ARP 패킷을 계속해서 보냅니다. 그런 식으로 피해자는 패킷(인터넷을 목표로 함)을 공격자에게 보내지만 공격자는 패킷을 리디렉션하지 않습니다( -r
옵션을 사용하여 리디렉션).
분석/코드:
분석을 위해 현재는 IP 패킷만 보고 있으므로 p2a
만나는 모든 쌍 (MAC address, IP address)
을 연결 목록 에 저장합니다. 주어진 새로운 쌍을 확인할 때 연결된 목록을 살펴보고 IP 주소가 이미 다른 MAC 주소에 연결되어 있으면 오류를 반환합니다.
위의 예에서 우리 스크립트는 공격자가 들어와 피해자에게 192.168.1.1
기본 게이트웨이 이고 MAC 주소가 (피해자의 관점에서) 기본 게이트웨이 와 연결됩니다.
TCP 연결로 전송된 데이터의 각 바이트에는 연관된 시퀀스 번호가 있습니다. 이는 TCP 헤더 의 시퀀스 번호 필드에 표시됩니다.
수신 소켓이 들어오는 데이터 세그먼트를 감지하면 TCP 헤더의 승인 번호를 사용하여 수신을 나타냅니다. 데이터 패킷을 보낸 후 보낸 사람은 가변 길이의 재전송 타이머를 시작합니다. 타이머가 만료되기 전에 승인을 받지 못하면 보낸 사람은 세그먼트가 손실되었다고 가정하고 다시 전송합니다.
다른 패킷이 현재 패킷과 동일한 승인 및 시퀀스 번호를 소유하면 TCP 재전송을 볼 수 있습니다.
TCP 재전송은 매우 일반적이며 완전히 정상일 수 있지만(한 패킷이 합법적으로 손실되었기 때문에 재전송되는 경우) 네트워크나 통신에 문제가 있다는 신호일 수도 있습니다.
IP 조각 겹침 공격은 동일한 IP 패킷 내에 포함된 두 조각이 패킷 내 위치 지정에서 서로 겹치는 것을 나타내는 오프셋을 가질 때 발생합니다. 이는 조각 A가 조각 B에 의해 완전히 덮어쓰여지거나 조각 A가 조각 B에 의해 부분적으로 덮어쓰여지고 있음을 의미할 수 있습니다. 일부 운영 체제는 이러한 방식으로 겹치는 조각을 적절하게 처리하지 못하여 예외를 발생시키거나 다른 바람직하지 않은 방식으로 동작할 수 있습니다. 중복된 조각을 받은 경우. 이것이 눈물방울 공격 의 기본이다. ( 위키피디아에서 )
침입 탐지 시스템을 우회하려는 시도에서 중복되는 조각이 사용될 수도 있습니다. 이 공격에서는 공격의 일부가 추가 무작위 데이터와 함께 조각으로 전송됩니다. 향후 조각은 공격의 나머지 부분으로 임의의 데이터를 덮어쓸 수 있습니다. 완성된 패킷이 IDS에서 적절하게 재조립되지 않으면 공격은 탐지되지 않습니다.
Teardrop 공격: 중첩되고 크기가 큰 페이로드가 포함된 손상된 IP 조각을 대상 시스템으로 보내는 작업이 포함됩니다.
아직 구현되지 않음
특정 세션에 대해 여러 TTL 값이 관찰되면 경로가 변경되었음을 의미할 수 있습니다. 즉, 패킷이 처음과 마찬가지로 연결이 끝날 때와 동일한 경로를 따르지 않는다는 의미입니다. 이는 외부의 실제 변경으로 인한 것일 수도 있지만 공격자가 패킷이 취하는 경로를 변경한다는 의미일 수도 있습니다(예를 들어 MiTM 공격을 수행하기 위해).
그러나 대부분의 경우 하나의 세션에는 전체 연결에 걸쳐 2~3개의 서로 다른 TTL 값이 있습니다. 대부분의 경우 클라이언트와 서버는 동일한 초기 TTL 값을 사용하지 않습니다.
특정 세션에 서로 다른 TTL 값이 3개 이상 있으면 스크립트는 오류를 반환합니다.
예배 규칙서 | 설명/내용 |
---|---|
./attack_scripts | 일부 TCP 모호성(스푸핑, 낮은 TTL)을 테스트하고 기록하는 간단한 스크립트 |
./pcap_files | p2a 테스트하기 위한 PCAP 파일 |
./tests_libpcap | libpcap 사용하여 테스트하고 시작하는 두 개의 스크립트 |
libpcap
pcap
앱pcap
샘플 파일tcpdump
필터libpcap
튜토리얼libpcap
사용pcap.h
매뉴얼 페이지