สามารถใช้พอร์ตใหม่เพื่อตรวจสอบไฟร์วอลล์เพื่อระบุกฎการบล็อกขาออกหรือขาเข้า ใช้อย่างถูกต้องและคุณจะสามารถรับการกำหนดค่าไฟร์วอลล์ได้
ฉันพัฒนามันขึ้นมาเป็นหลักเพื่อช่วยฉันในการแก้ไขปัญหาเกี่ยวกับเครื่องสแกนเครือข่ายแบบกระจายที่ฉันกำลังพัฒนาอยู่
โค้ดชิ้นนี้เป็นเพียงตัวแยกวิเคราะห์ PCAP ซึ่งหมายความว่าคุณต้องจัดเตรียมการถ่ายโอนข้อมูลแพ็กเก็ตเครือข่ายที่ได้รับอย่างเหมาะสมเพื่อให้มันทำงานได้ เครื่องมือจะพิมพ์พอร์ตที่ (ตาม PCAP) ถูกบล็อกโดยไฟร์วอลล์
เพื่อที่จะใช้งาน คุณต้องเข้าถึงเครื่องอย่างน้อยสองเครื่อง อันหนึ่งอยู่ด้านหลังไฟร์วอลล์ที่คุณต้องการทดสอบ และอีกอันอยู่อีกด้านหนึ่ง
มีสองกรณีการใช้งานที่เป็นไปได้:
คุณจะต้องมีเครื่องมือเช่น tcpdump, tshark หรือ wireshark เพื่อจับภาพและบันทึกการรับส่งข้อมูลเครือข่าย (หรือการดมกลิ่นอื่น ๆ ) และเครื่องมือเช่น nmap หรือ Masscan เพื่อสร้างและส่งแพ็คเก็ตการตรวจสอบ ในตัวอย่างต่อไปนี้ ฉันจะใช้ Masscan และ tcpdump
ในกรณีที่มีไฟร์วอลล์เพิ่มอีกตัวหนึ่งก่อนเครื่องภายนอก (ไม่ใช่ไฟร์วอลล์ที่คุณกำลังทดสอบ) จะเป็นการดีกว่าหากทราบว่ามีกฎอะไรบ้าง แต่นั่นไม่ได้บังคับ คุณยังสามารถคิดการทดสอบเพิ่มเติมจากสถานที่ต่างๆ ได้
การทำตามขั้นตอนด้านล่างจะช่วยให้คุณได้ผลลัพธ์ที่แม่นยำ
สมมติว่าเราต้องการแจกแจงกฎขาออกเนื่องจากเราวางแผนที่จะเรียกใช้เครื่องสแกนเครือข่ายในภายหลังบนเครื่องนั้น ดังนั้นเราจึงต้องการให้แน่ใจว่าไม่มีการบล็อกการรับส่งข้อมูลขาออกโดยไฟร์วอลล์ขาออกของเรา
เครื่องที่อยู่ด้านหลังไฟร์วอลล์มี ip aaaa
ในขณะที่เครื่องภายนอกมี bbbb
เครื่องที่สองนี้จะเป็นเครื่องที่เราจะเรียกใช้แพ็คเก็ตดมกลิ่น (ในกรณีนี้ tcpdump
) และเครื่องแรกที่เราจะกำหนดค่า
การเข้าซื้อกิจการ PCAP
เราจำเป็นต้องเริ่มการดมกลิ่นแพ็คเก็ตที่นี่ เพื่อดูว่าแพ็กเก็ตการตรวจสอบใดที่จะไม่ไปถึงปลายทาง เมื่อพิจารณาว่าเครื่องนี้มี ip สาธารณะ bbbb
เชื่อมโยงกับอินเทอร์เฟซเครือข่าย eth0
และ ไม่มีไฟร์วอลล์ทำงานอยู่ เรารัน tcpdump ดังนี้
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
ไฟล์ re-port.pcap
จะถูกสร้างขึ้น และหลังจากที่เราทดสอบเสร็จแล้ว ไฟล์จะถูกส่งต่อไปยังเครื่องมือนี้ แต่เราจะได้เห็นส่วนนี้ในภายหลัง
การตรวจสอบการจราจร
เราจะสร้างแพ็กเก็ต SYN
65535 จากเครื่องที่อยู่ด้านหลังไฟร์วอลล์และส่งไปที่ bbbb
เพื่อทำเช่นนั้นฉันใช้ masscan
ช่วยให้เราสามารถกำหนดอัตราด้วยตัวเลือก --rate
และจำนวนแพ็กเก็ตที่ประดิษฐ์สำหรับแต่ละพอร์ตที่ระบุด้วยตัวเลือก --retries
ตัวเลือกทั้งสองนี้มีความสำคัญสำหรับเราเพราะเราต้องแน่ใจว่าแพ็กเก็ตทั้งหมดที่สามารถเข้าถึงปลายทางจะไปได้ ขึ้นอยู่กับแบนด์วิดท์ที่คุณมีในแพ็กเก็ตต้นทาง/ปลายทางอาจสูญหายเนื่องจากอัตราการส่งที่สูง สำหรับการทดสอบนี้ เราต้องดำเนินการอย่างช้าๆ และปลอดภัย ในอิตาลีเรามีสุภาษิตที่ว่า ใครไปช้าๆ ไปไกล ซึ่งดูเหมือนเหมาะกับฉันที่นี่
masscan -Pn -n -p 1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
จากการทดสอบบางอย่าง ฉันคิดว่า 350 แพ็กเก็ตต่อวินาทีส่งสองครั้งต่อพอร์ต รวมเป็น 131072 (128k) แพ็กเก็ต ใช้เวลาประมาณเก้านาทีโดยไม่สูญเสียแพ็กเก็ต
แจกแจงกฎไฟร์วอลล์
ณ จุดนี้เราสามารถใช้ Re-port
เพื่อรับรายการพอร์ตที่ปิดได้ กลับไปที่เครื่องแรก หยุดการดมกลิ่นแพ็กเก็ต CTRL+C
และคัดลอก re-port.pcap
ไปยังไดเร็กทอรีที่คุณมีเครื่องมือ Re-port ตอนนี้คุณสามารถรันได้ดังต่อไปนี้:
./enumerate.py re-port.pcap
ตัวอย่างก่อนหน้านี้กำลังแจกแจงกฎการบล็อก TCP หากคุณต้องการรายการพอร์ต UDP ที่ถูกบล็อกทั้งหมด ให้ทำตามขั้นตอนข้างต้นโดยเปลี่ยนคำสั่งดังนี้:
# Machine with b.b.b.b IP
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
# Machine with a.a.a.a IP
masscan -Pn -n -p U:1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
# Re-port
./enumerate.py re-port.pcap --udp
เรียกใช้ ./enumerate.py --help เพื่อแสดงตัวเลือกทั้งหมด
$./enumerate.py --help
usage: enumerate.py [-h] [--address ADDRESS] [--open] [--version] [-u] [-v] pcap
Re-port is a tool to actively enumerate firewall rules.
positional arguments:
pcap PCAP dump of receiving scan traffic
optional arguments:
-h, --help show this help message and exit
--address ADDRESS scanners's IP address. If unset, all the packets in the
PCAP will be used to enumerate closed ports
--open print open ports instead of closed ones
--version show program's version number and exit
-u, --udp search for UDP open ports instead of TCP
-v, --verbose increase output verbosity
Report เป็นคลาส Python และคุณสามารถใช้/ขยายได้ตามต้องการ
มันสามารถทำซ้ำได้และคุณใช้มันภายในคำสั่ง with
with Report('dump.pcap') as r:
r.enumerate_ports('tcp', '127.0.0.1')
r.print_ports()
หรือ
r = Report('dump.pcap')
r.enumerate_ports('tcp', '127.0.0.1')
for port in r:
print('Open %d' % port)
@ r4d10n: สำหรับแนวคิดง่ายๆ ที่อยู่เบื้องหลังเครื่องมือนี้