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