โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อสร้างเครื่องมือที่ใช้งานง่ายซึ่งจะแยกวิเคราะห์ไฟล์ 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 และหมายเลขพอร์ตและส่งคืนแฮช SHA1 ของ (IP|พอร์ต) ค่านี้ใช้เป็น ตัวระบุเซสชัน ในสคริปต์ 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
วิธีใช้ whois
กับที่อยู่ IP ทั้งหมดจากไฟล์จับภาพ:
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 ที่จะทำสิ่งเดียวกัน
ฟิลด์ Time To Live (TTL) สำหรับแพ็กเก็ต IP สอดคล้องกับระยะเวลาที่แพ็กเก็ต 'อนุญาต' ให้เดินทางรอบเครือข่ายก่อนที่เราเตอร์จะทิ้ง เป็นค่า 8 บิตที่ปกติจะลดลงหนึ่งตัวในทุก ๆ การกระโดด
ตามหน้าของ Cisco เกี่ยวกับ TTL Expiry Attack:
“เมื่ออุปกรณ์ IOS ได้รับแพ็กเก็ตที่มีค่า TTL น้อยกว่าหรือเท่ากับหนึ่ง อุปกรณ์ IOS จะส่งข้อความ ICMPv4 Type 11, Code 0 ส่งผลให้เกิด ผลกระทบต่อ CPU ที่สอดคล้องกัน ผลกระทบนี้เกิดขึ้นเนื่องจากมี CPU มากขึ้น จำเป็นต้องมีการประมวลผลเพื่อตอบสนอง (โดยใช้แพ็กเก็ตที่เกิน TTL) กับแพ็กเก็ตที่มีค่า TTL น้อยกว่าหนึ่งมากกว่าการส่งต่อแพ็กเก็ตที่มีค่า TTL มากกว่าหนึ่ง"
"พฤติกรรมการหมดอายุของ TTL จะสร้าง เวกเตอร์การโจมตีแบบปฏิเสธการบริการ (DoS) กับอุปกรณ์เครือข่าย อุปกรณ์เครือข่ายถูกสร้างขึ้นโดยมีจุดประสงค์เพื่อส่งต่อแพ็กเก็ตธรรมดาโดยเร็วที่สุด เมื่อพบแพ็กเก็ตข้อยกเว้น เช่น แพ็กเก็ตที่มีค่า TTL ที่หมดอายุ จำนวนจะแตกต่างกันไป เราเตอร์จะใช้ความพยายามในการตอบสนองอย่างเหมาะสม"
การวิเคราะห์/รหัส:
ใน utils.c
เรากำหนด TTL_THRESHOLD
(=10 ในตอนนี้) หาก TTL สำหรับแพ็กเก็ตต่ำกว่าค่านี้ ธงจะถูกยกขึ้นเพื่อระบุว่า TTL ต่ำ หากมีการยกธงดังกล่าวมากเกินไป อาจเป็นการโจมตีแบบ TTL Expiry Attack
ไฟล์ pcap ตัวอย่าง (ประกอบด้วยแพ็กเก็ตที่มี TTL ต่ำ) ถูกจับโดยใช้สคริปต์ที่อยู่ในไดเร็กทอรี ./attack_scripts/low_ttl
ARP Poisoning ประกอบด้วยการหลอกโฮสต์โดยเชื่อว่าเราเป็น เกตเวย์เริ่มต้น เหยื่อจะถาม เกตเวย์เริ่มต้น ถึงที่อยู่ MAC (โปรโตคอล ARP) เป็นประจำ แต่ผู้โจมตีสามารถส่งแพ็กเก็ตของเหยื่อโดยแจ้งว่า เกตเวย์เริ่มต้น อยู่ที่ที่อยู่ MAC อื่น (เช่น ที่อยู่ MAC ของการโจมตี เป็นต้น) ผู้โจมตีเพียงแค่ต้องส่งแพ็กเก็ตเหล่านั้น "สม่ำเสมอเพียงพอ" เพื่อให้เหยื่อ "ละทิ้ง" ข้อความจริงจาก เกตเวย์เริ่มต้น
สิ่งนี้สามารถช่วยให้ผู้โจมตีดำเนินการและโจมตีเหยื่อได้หลายวิธี: man-in-the-mide, DoS, black-hole, ...
ตัวอย่าง:
ที่อยู่ IP ของเหยื่อคือ 192.168.10.2
และ เกตเวย์เริ่มต้น คือ 192.168.1.1
:
sudo arpspoofing -i wlan0 -t 192.168.10.2 192.169.1.1
ผู้โจมตีจะส่งแพ็กเก็ต ARP ของเหยื่อต่อไปโดยแจ้งว่า 192.168.1.1
อยู่ที่ที่อยู่ MAC ของผู้โจมตี ด้วยวิธีนี้เหยื่อจะส่งแพ็กเก็ต (มุ่งเป้าไปที่อินเทอร์เน็ต) ไปยังผู้โจมตีซึ่งจะไม่เปลี่ยนเส้นทางพวกเขา ( -r
ตัวเลือกในการเปลี่ยนเส้นทางพวกเขา)
การวิเคราะห์/รหัส:
สำหรับการวิเคราะห์ เนื่องจากเราดูเฉพาะแพ็กเก็ต IP เท่านั้น (ในตอนนี้) p2a
จะบันทึกคู่ทั้งหมด (MAC address, IP address)
ที่พบใน รายการเชื่อมโยง เมื่อตรวจสอบคู่ที่กำหนดใหม่ มันจะผ่านรายการที่เชื่อมโยงและส่งกลับข้อผิดพลาดหากที่อยู่ IP เชื่อมโยงกับที่อยู่ MAC อื่นอยู่แล้ว
สำหรับตัวอย่างข้างต้น สคริปต์ของเราจะตรวจพบว่า 192.168.1.1
( เกตเวย์เริ่มต้น ) เชื่อมโยงกับที่อยู่ MAC ที่แตกต่างกันสองแห่ง: ที่อยู่จริง จนกว่าผู้โจมตีจะเข้ามาและบอกเหยื่อว่าเป็น เกตเวย์เริ่มต้น และที่อยู่ MAC ของมันได้รับ เชื่อมโยงกับ เกตเวย์เริ่มต้น (จากจุด vue ของเหยื่อ)
แต่ละไบต์ของข้อมูลที่ส่งในการเชื่อมต่อ TCP มี หมายเลขลำดับ ที่เกี่ยวข้อง ซึ่งระบุไว้ในฟิลด์หมายเลขลำดับของ ส่วนหัว TCP
เมื่อซ็อกเก็ตรับตรวจพบเซ็กเมนต์ข้อมูลที่เข้ามา ระบบจะใช้ หมายเลขการตอบรับ ในส่วนหัว TCP เพื่อระบุการรับ หลังจากส่งแพ็กเก็ตข้อมูลแล้ว ผู้ส่งจะเริ่มจับเวลาการส่งสัญญาณซ้ำตามความยาวผันแปรได้ หากไม่ได้รับการตอบรับก่อนที่ตัวจับเวลาจะหมดอายุ ผู้ส่งจะถือว่าเซ็กเมนต์นั้นหายไปและจะส่งอีกครั้ง
เราสามารถเห็น การส่งข้อมูล TCP ซ้ำได้ เมื่อแพ็กเก็ตอื่นเป็นเจ้าของการตอบรับและหมายเลขลำดับเดียวกันกับแพ็กเก็ตปัจจุบัน
การส่งสัญญาณ TCP ซ้ำเป็นเรื่องปกติและอาจเป็นเรื่องปกติโดยสิ้นเชิง (หากมีการส่งข้อมูลแพ็กเก็ตหนึ่งซ้ำเนื่องจากสูญหายไปอย่างถูกกฎหมาย) แต่ก็อาจเป็นสัญญาณของปัญหาบนเครือข่ายหรือในการสื่อสารได้เช่นกัน
การใช้ประโยชน์ จากส่วนที่ทับซ้อนกันของ IP เกิดขึ้นเมื่อสองแฟรกเมนต์ที่อยู่ภายใน แพ็กเก็ต IP เดียวกัน มีออฟเซ็ตที่บ่งชี้ว่าส่วนเหล่านั้น ทับซ้อน กันในการวางตำแหน่งภายในแพ็กเก็ต นี่อาจหมายความว่าแฟรกเมนต์ A ใดกำลังถูกเขียนทับโดยแฟรกเมนต์ B อย่างสมบูรณ์ หรือแฟรกเมนต์ A นั้น บางส่วน ถูกเขียนทับด้วยแฟรกเมนต์ B ระบบปฏิบัติการบางระบบไม่จัดการแฟรกเมนต์ที่ทับซ้อนกันในลักษณะนี้อย่างเหมาะสม และอาจทำให้เกิดข้อยกเว้นหรือทำงานในลักษณะที่ไม่พึงประสงค์อื่น ๆ เมื่อได้รับชิ้นส่วนที่ทับซ้อนกัน นี่คือพื้นฐานสำหรับ การโจมตีด้วยหยดน้ำตา ( จากวิกิพีเดีย )
แฟรกเมนต์ที่ทับซ้อนกันอาจถูกนำมาใช้เพื่อพยายาม เลี่ยงผ่านระบบตรวจจับการบุกรุก ในการใช้ประโยชน์นี้ ส่วนหนึ่งของการโจมตีจะถูกส่งไปเป็นชิ้น ๆ พร้อมกับข้อมูลสุ่มเพิ่มเติม แฟรกเมนต์ในอนาคตอาจเขียนทับข้อมูลสุ่มด้วยส่วนที่เหลือของการโจมตี หากแพ็กเก็ตที่เสร็จสมบูรณ์ไม่ได้รับการประกอบกลับอย่างถูกต้องที่ IDS การโจมตีจะไม่ถูกตรวจพบ
การโจมตีแบบ Teardrop: เกี่ยวข้องกับการส่งชิ้นส่วน IP ที่เสียหายโดยมีการทับซ้อนกันและเพย์โหลดขนาดใหญ่ไปยังเครื่องเป้าหมาย
ยังไม่ได้ดำเนินการ
หากเราสังเกตค่า TTL หลายค่าสำหรับเซสชันที่กำหนด อาจหมายความว่าเส้นทางมีการเปลี่ยนแปลง ซึ่งหมายความว่าแพ็กเก็ตไม่เป็นไปตามเส้นทางเดียวกันกับจุดสิ้นสุดของการเชื่อมต่อเหมือนที่เคยทำเมื่อเริ่มต้น นี่อาจเป็นเพราะการเปลี่ยนแปลงภายนอกที่แท้จริง แต่ยังอาจหมายถึงผู้โจมตีเปลี่ยนเส้นทางที่แพ็กเก็ตใช้ (เช่น ทำการโจมตี MiTM เป็นต้น)
อย่างไรก็ตาม โดยส่วนใหญ่แล้ว เซสชันหนึ่งจะมีค่า TTL ที่แตกต่างกันสองหรือสามค่าตลอดการเชื่อมต่อทั้งหมด โดยส่วนใหญ่ ไคลเอ็นต์และเซิร์ฟเวอร์ไม่ได้ใช้ค่า TTL เริ่มต้นเดียวกัน
สคริปต์ส่งคืนข้อผิดพลาดหากมีค่า TTL ที่แตกต่างกันมากกว่าสองค่าสำหรับเซสชันที่กำหนด
ไดเรกทอรี | คำอธิบาย/เนื้อหา |
---|---|
./attack_scripts | สคริปต์ง่ายๆ สำหรับทดสอบและบันทึกความคลุมเครือ TCP บางอย่าง (การปลอมแปลง, TTL ต่ำ) |
./pcap_files | ไฟล์ PCAP เพื่อทดสอบ p2a |
./tests_libpcap | สคริปต์สองตัวสำหรับทดสอบและเริ่มใช้ libpcap |
libpcap
pcap
pcap
ที่ส่วนท้ายของหน้าเว็บtcpdump
libpcap
libpcap
ใน Cpcap.h