การดมกลิ่นและการปลอมแปลงแพ็กเก็ตเป็นภัยคุกคามที่กำลังพัฒนาด้านความปลอดภัยเครือข่าย มีเครื่องมือดมกลิ่นและปลอมแปลงแพ็กเก็ตมากมาย เช่น Wireshark, tcpdump, netwox เป็นต้น เครื่องมือเหล่านี้บางส่วนมีการใช้กันอย่างแพร่หลายโดยผู้เชี่ยวชาญด้านความปลอดภัยและผู้โจมตี ความสามารถในการใช้เครื่องมือเหล่านี้เป็นสิ่งสำคัญ แต่สิ่งที่สำคัญกว่าในการรักษาความปลอดภัยเครือข่ายคือการทำความเข้าใจว่าเครื่องมือเหล่านี้ทำงานอย่างไร เช่น วิธีการใช้งานการดมกลิ่นและการปลอมแปลงแพ็กเก็ตในซอฟต์แวร์
ด้านล่างนี้เป็นโปรแกรมดมกลิ่นอย่างง่ายซึ่งใช้ Scapy:
from scapy . all import *
print ( "SNIFFING PACKETS" )
def print_pkt ( pkt ):
print ( "Source IP:" , pkt [ IP ]. src )
print ( "Destination IP:" , pkt [ IP ]. dst )
print ( "Protocol:" , pkt [ IP ]. proto )
print ( " n " )
pkt = sniff ( filter = 'icmp' , prn = print_pkt )
ในโค้ดข้างต้น สำหรับแต่ละแพ็กเก็ตที่จับได้ ฟังก์ชันการเรียกกลับ print_pkt()
จะถูกเรียกใช้ ฟังก์ชั่นนี้จะพิมพ์ข้อมูลบางส่วนของแพ็กเก็ตออกมา
เมื่อดมแพ็กเก็ต แพ็กเก็ตบางประเภทอาจเป็นที่สนใจมากขึ้น คุณสามารถเลือกเฉพาะบางแพ็กเก็ตได้โดยการตั้งค่าตัวกรองเมื่อออกแบบดมกลิ่น การกรองของ Scapy ใช้ไวยากรณ์ BPF (Berkeley Packet Filter)
ตัวอย่างของการกรองที่เป็นไปได้ด้วย Scapy ได้แก่:
128.200.0.0/16
ในฐานะเครื่องมือปลอมแปลงแพ็กเก็ต Scapy ช่วยให้สามารถตั้งค่าต่างๆ ในช่องของส่วนหัวแพ็กเก็ตต่างๆ ได้ ตัวอย่างเช่น การปลอมแปลง IP สามารถถูกใช้โดยฝ่ายที่เป็นอันตรายเพื่อเรียกใช้การโจมตี DDoS กับเป้าหมาย การปลอมแปลง IP คือการสร้างแพ็คเก็ต IP ซึ่งมีที่อยู่ต้นทางที่ถูกแก้ไขเพื่อปกปิดตัวตนของผู้ส่ง หรือปลอมแปลงเป็นหน่วยงานเครือข่ายอื่น (ระบบคอมพิวเตอร์ ศูนย์ข้อมูล ฯลฯ) หรือทั้งสองอย่าง
หลอกลวงแพ็คเก็ต ICMP
from scapy . all import *
print ( "SENDING SPOOFED ICMP PACKET" )
ip = IP ( src = "1.2.3.4" , dst = "93.184.216.34" ) # IP Layer
icmp = ICMP () # ICMP Layer
pkt = ip / icmp # Construct the complete packet
pkt . show ()
send ( pkt , verbose = 0 )
หลอกแพ็กเก็ต UDP
from scapy . all import *
print ( "SENDING SPOOFED UDP PACKET" )
ip = IP ( src = "1.2.3.4" , dst = "10.0.2.69" ) # IP Layer
udp = UDP ( sport = 8888 , dport = 9090 ) # UDP Layer
data = "Hello UDP! n " # Payload
pkt = ip / udp / data # Construct the complete packet
pkt . show ()
send ( pkt , verbose = 0 )
รวมเทคนิคการดมกลิ่นและการปลอมแปลงเพื่อใช้โปรแกรมการดมกลิ่นแล้วหลอก ต้องการ VM สองตัวบน LAN เดียวกัน จาก VM A ให้ Ping IP X การดำเนินการนี้จะสร้างแพ็กเก็ตคำขอ ICMP echo ถ้า X ยังมีชีวิตอยู่ โปรแกรม ping จะได้รับการตอบกลับแบบสะท้อน และพิมพ์การตอบกลับออกมา โปรแกรมดมแล้วปลอมแปลงทำงานบน VM B ซึ่งจะตรวจสอบ LAN ผ่านการดมแพ็กเก็ต เมื่อใดก็ตามที่เห็นคำขอ ICMP echo ไม่ว่าที่อยู่ IP เป้าหมายคืออะไร โปรแกรมจะส่งการตอบกลับ echo ทันทีโดยใช้เทคนิคการปลอมแปลงแพ็กเก็ต ดังนั้นไม่ว่าเครื่อง X ยังมีชีวิตอยู่หรือไม่ก็ตาม โปรแกรม ping จะได้รับการตอบกลับเสมอเพื่อระบุว่า X ยังมีชีวิตอยู่
IP ()
IP (). show ()
IP () / ICMP ()
p = IP () / ICMP ()
p . show ()
p = IP () / UDP ()
p . show ()
p = IP () / UDP () / "This is my UDP packet"
p . show ()
send ( IP () / UDP () / "This is my UDP packet" )
send ( IP ( dst = '10.0.2.7' ) / UDP () / "This is my UDP packet" )
ขอขอบคุณที่ให้ความสนใจ โครงการนี้สนุกและลึกซึ้ง!