Network Packet Sniffing
การดมกลิ่นหรือการดมแพ็กเก็ตเครือข่ายเป็นกระบวนการตรวจสอบและจับแพ็กเก็ตทั้งหมดที่ส่งผ่านเครือข่ายที่กำหนดโดยใช้เครื่องมือดมกลิ่น เป็นรูปแบบที่เราสามารถ "แตะสายโทรศัพท์" และทำความรู้จักกับบทสนทนา เรียกอีกอย่างว่าwiretapping และสามารถนำไปใช้กับเครือข่ายคอมพิวเตอร์
มีความเป็นไปได้มากที่หากชุดของพอร์ตสวิตช์ขององค์กรเปิดอยู่พนักงานคนหนึ่งของพวกเขาจะสามารถสูดดมปริมาณการใช้งานทั้งหมดของเครือข่ายได้ ทุกคนที่อยู่ในสถานที่ตั้งเดียวกันสามารถเสียบเข้ากับเครือข่ายโดยใช้สายอีเทอร์เน็ตหรือเชื่อมต่อแบบไร้สายกับเครือข่ายนั้นและดักจับปริมาณการใช้งานทั้งหมด
กล่าวอีกนัยหนึ่ง Sniffing ช่วยให้คุณเห็นการจราจรทุกประเภททั้งที่มีการป้องกันและไม่มีการป้องกัน ในสภาวะที่เหมาะสมและด้วยโปรโตคอลที่เหมาะสมฝ่ายที่ถูกโจมตีอาจสามารถรวบรวมข้อมูลที่สามารถใช้สำหรับการโจมตีเพิ่มเติมหรือก่อให้เกิดปัญหาอื่น ๆ สำหรับเครือข่ายหรือเจ้าของระบบ
ดมแล้วได้อะไร?
เราสามารถดมข้อมูลที่ละเอียดอ่อนต่อไปนี้จากเครือข่าย -
- การรับส่งอีเมล
- รหัสผ่าน FTP
- การเข้าชมเว็บ
- รหัสผ่าน Telnet
- การกำหนดค่าเราเตอร์
- เซสชันการแชท
- การรับส่งข้อมูล DNS
การดมกลิ่นทำงานอย่างไร?
โดยปกตินักดมกลิ่นจะเปลี่ยน NIC ของระบบเป็นโหมดสำส่อนเพื่อให้มันรับฟังข้อมูลทั้งหมดที่ส่งในเซ็กเมนต์ของมัน
โหมดสำส่อนหมายถึงวิธีการเฉพาะของฮาร์ดแวร์อีเทอร์เน็ตโดยเฉพาะอย่างยิ่งการ์ดเชื่อมต่อเครือข่าย (NIC) ที่ช่วยให้ NIC สามารถรับทราฟฟิกทั้งหมดบนเครือข่ายแม้ว่าจะไม่ได้ส่งถึง NIC ก็ตาม ตามค่าเริ่มต้น NIC จะละเว้นการรับส่งข้อมูลทั้งหมดที่ไม่ได้ถูกส่งถึงซึ่งทำได้โดยการเปรียบเทียบที่อยู่ปลายทางของแพ็กเก็ตอีเทอร์เน็ตกับที่อยู่ฮาร์ดแวร์ (MAC) ของอุปกรณ์ แม้ว่าสิ่งนี้จะเหมาะสมอย่างยิ่งสำหรับระบบเครือข่าย แต่โหมดที่ไม่สำส่อนทำให้ยากที่จะใช้ซอฟต์แวร์การตรวจสอบและวิเคราะห์เครือข่ายสำหรับการวินิจฉัยปัญหาการเชื่อมต่อหรือการบันทึกการรับส่งข้อมูล
นักดมกลิ่นสามารถตรวจสอบการรับส่งข้อมูลทั้งหมดไปยังคอมพิวเตอร์ผ่าน NIC ได้อย่างต่อเนื่องโดยการถอดรหัสข้อมูลที่ห่อหุ้มอยู่ในแพ็กเก็ตข้อมูล
ประเภทของการดมกลิ่น
การดมกลิ่นอาจเป็นแบบ Active หรือ Passive ก็ได้ ตอนนี้เราจะเรียนรู้เกี่ยวกับการดมกลิ่นประเภทต่างๆ
การดมกลิ่นเรื่อย ๆ
ในการดมกลิ่นแบบพาสซีฟการจราจรจะถูกล็อค แต่จะไม่เปลี่ยนแปลง แต่อย่างใด Passive sniffing อนุญาตให้ฟังเท่านั้น ทำงานร่วมกับอุปกรณ์ Hub บนอุปกรณ์ฮับการรับส่งข้อมูลจะถูกส่งไปยังพอร์ตทั้งหมด ในเครือข่ายที่ใช้ฮับในการเชื่อมต่อระบบโฮสต์ทั้งหมดบนเครือข่ายสามารถมองเห็นการรับส่งข้อมูล ดังนั้นผู้โจมตีจึงสามารถดักจับการเข้าชมได้อย่างง่ายดาย
ข่าวดีก็คือฮับเกือบจะล้าสมัยในช่วงไม่กี่ปีที่ผ่านมา เครือข่ายสมัยใหม่ส่วนใหญ่ใช้สวิตช์ ดังนั้นการดมกลิ่นเฉยๆจึงไม่ได้ผลอีกต่อไป
Active Sniffing
ในการดมกลิ่นการจราจรไม่ได้ถูกล็อคและตรวจสอบเท่านั้น แต่ยังอาจมีการเปลี่ยนแปลงบางอย่างตามที่กำหนดโดยการโจมตี Active sniffing ใช้เพื่อสูดดมเครือข่ายที่ใช้สวิตช์ มันเกี่ยวข้องกับการฉีดแพ็กเก็ตความละเอียดที่อยู่ (ARP) ลงในเครือข่ายเป้าหมายเพื่อให้ท่วมบนตารางหน่วยความจำแอดเดรส (CAM) ของสวิตช์เนื้อหา CAM ติดตามว่าโฮสต์ใดเชื่อมต่อกับพอร์ตใด
ต่อไปนี้เป็นเทคนิคการดมกลิ่นที่ใช้งานอยู่ -
- MAC น้ำท่วม
- การโจมตี DHCP
- DNS เป็นพิษ
- การโจมตีด้วยการปลอมแปลง
- ARP เป็นพิษ
ผลกระทบจากการดมกลิ่นต่อโปรโตคอล
โปรโตคอลเช่น tried and true TCP/IPไม่เคยออกแบบโดยคำนึงถึงความปลอดภัย โปรโตคอลดังกล่าวไม่สามารถต้านทานผู้บุกรุกที่อาจเกิดขึ้นได้มากนัก ต่อไปนี้เป็นโปรโตคอลต่างๆที่ช่วยให้ดมกลิ่นได้ง่าย -
HTTP
ใช้เพื่อส่งข้อมูลในรูปแบบข้อความที่ชัดเจนโดยไม่ต้องเข้ารหัสใด ๆ จึงเป็นเป้าหมายที่แท้จริง
SMTP (Simple Mail Transfer Protocol)
SMTP ใช้ในการโอนอีเมล โปรโตคอลนี้มีประสิทธิภาพ แต่ไม่รวมถึงการป้องกันการดมกลิ่น
NNTP (Network News Transfer Protocol)
ใช้สำหรับการสื่อสารทุกประเภท ข้อเสียเปรียบที่สำคัญคือข้อมูลและแม้แต่รหัสผ่านจะถูกส่งผ่านเครือข่ายเป็นข้อความที่ชัดเจน
POP (โพรโทคอลที่ทำการไปรษณีย์)
POP ถูกใช้อย่างเคร่งครัดเพื่อรับอีเมลจากเซิร์ฟเวอร์ โปรโตคอลนี้ไม่รวมถึงการป้องกันการดมกลิ่นเนื่องจากสามารถดักจับได้
FTP (โปรโตคอลการถ่ายโอนไฟล์)
FTP ใช้ในการส่งและรับไฟล์ แต่ไม่มีคุณสมบัติด้านความปลอดภัยใด ๆ ข้อมูลทั้งหมดจะถูกส่งเป็นข้อความที่ชัดเจนซึ่งสามารถดมได้ง่าย
IMAP (โปรโตคอลการเข้าถึงข้อความอินเทอร์เน็ต)
IMAP เหมือนกับ SMTP ในการทำงาน แต่มีความเสี่ยงสูงต่อการดมกลิ่น
Telnet
Telnet ส่งทุกอย่าง (ชื่อผู้ใช้รหัสผ่านการกดแป้นพิมพ์) ผ่านเครือข่ายเป็นข้อความที่ชัดเจนดังนั้นจึงสามารถดมได้ง่าย
Sniffers ไม่ใช่ยูทิลิตี้โง่ ๆ ที่อนุญาตให้คุณดูเฉพาะการจราจรสด หากคุณต้องการวิเคราะห์แต่ละแพ็กเก็ตจริง ๆ ให้บันทึกการจับภาพและตรวจสอบทุกครั้งที่มีเวลา
การใช้งานโดยใช้ Python
ก่อนที่จะใช้ Raw socket sniffer ให้เราทำความเข้าใจกับไฟล์ struct วิธีการตามที่อธิบายไว้ด้านล่าง -
โครงสร้าง. แพ็ค (fmt, a1, a2, ... )
ตามชื่อที่แนะนำวิธีนี้ใช้เพื่อส่งคืนสตริงซึ่งบรรจุตามรูปแบบที่กำหนด สตริงประกอบด้วยค่า a1, a2 และอื่น ๆ
Struct.unpack (fmt, สตริง)
ตามชื่อที่แนะนำวิธีนี้จะคลายสตริงตามรูปแบบที่กำหนด
ในตัวอย่างต่อไปนี้ของส่วนหัว IP sniffer ของซ็อกเก็ตดิบซึ่งเป็น 20 ไบต์ถัดไปในแพ็คเก็ตและในบรรดา 20 ไบต์เหล่านี้เราสนใจ 8 ไบต์สุดท้าย ไบต์หลังแสดงว่าที่อยู่ IP ต้นทางและปลายทางกำลังแยกวิเคราะห์ -
ตอนนี้เราต้องนำเข้าโมดูลพื้นฐานดังต่อไปนี้ -
import socket
import struct
import binascii
ตอนนี้เราจะสร้างซ็อกเก็ตซึ่งจะมีสามพารามิเตอร์ พารามิเตอร์แรกบอกเราเกี่ยวกับอินเทอร์เฟซแพ็คเก็ต - PF_PACKET สำหรับ Linux เฉพาะและ AF_INET สำหรับ windows พารามิเตอร์ที่สองบอกเราว่าเป็นซ็อกเก็ตดิบและพารามิเตอร์ที่สามบอกเราเกี่ยวกับโปรโตคอลที่เราสนใจ --0x0800 ที่ใช้สำหรับโปรโตคอล IP
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
ตอนนี้เราต้องเรียกไฟล์ recvfrom() วิธีการรับแพ็คเก็ต
while True:
packet = s.recvfrom(2048)
ในโค้ดบรรทัดต่อไปนี้เรากำลังริปส่วนหัวอีเธอร์เน็ต -
ethernet_header = packet[0][0:14]
ด้วยโค้ดบรรทัดต่อไปนี้เรากำลังแยกวิเคราะห์และคลายส่วนหัวด้วยไฟล์ struct วิธีการ -
eth_header = struct.unpack("!6s6s2s", ethernet_header)
โค้ดบรรทัดต่อไปนี้จะส่งคืนทูเพิลที่มีค่าฐานสิบหกสามค่าโดยแปลงเป็น hexify ใน binascii โมดูล -
print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])
ตอนนี้เราสามารถรับส่วนหัว IP ได้โดยเรียกใช้โค้ดบรรทัดต่อไปนี้ -
ipheader = pkt[0][14:34]
ip_header = struct.unpack("!12s4s4s", ipheader)
print "Source IP:" + socket.inet_ntoa(ip_header[1]) + " Destination IP:" + socket.inet_ntoa(ip_header[2])
ในทำนองเดียวกันเราสามารถแยกวิเคราะห์ส่วนหัว TCP