Đánh hơi gói mạng
Đánh hơi hoặc đánh hơi gói mạng là quá trình theo dõi và nắm bắt tất cả các gói đi qua một mạng nhất định bằng các công cụ đánh hơi. Đó là một hình thức trong đó, chúng ta có thể "chạm vào dây điện thoại" và làm quen với cuộc trò chuyện. Nó còn được gọi làwiretapping và có thể được áp dụng cho các mạng máy tính.
Có rất nhiều khả năng là nếu một tập hợp các cổng chuyển mạch doanh nghiệp đang mở, thì một trong các nhân viên của họ có thể đánh hơi toàn bộ lưu lượng của mạng. Bất kỳ ai ở cùng một vị trí thực tế đều có thể cắm vào mạng bằng cáp Ethernet hoặc kết nối không dây với mạng đó và đánh hơi tổng lưu lượng.
Nói cách khác, Sniffing cho phép bạn xem tất cả các loại lưu lượng truy cập, cả được bảo vệ và không được bảo vệ. Trong các điều kiện thích hợp và với các giao thức phù hợp, một bên tấn công có thể thu thập thông tin có thể được sử dụng cho các cuộc tấn công tiếp theo hoặc gây ra các vấn đề khác cho mạng hoặc chủ sở hữu hệ thống.
Cái gì có thể đánh hơi được?
Người ta có thể đánh hơi thông tin nhạy cảm sau đây từ một mạng:
- Lưu lượng email
- Mật khẩu FTP
- Lưu lượng truy cập web
- Mật khẩu Telnet
- Cấu hình bộ định tuyến
- Phiên trò chuyện
- Lưu lượng DNS
Đánh hơi hoạt động như thế nào?
Một trình thám thính thường chuyển NIC của hệ thống sang chế độ quảng bá để nó lắng nghe tất cả dữ liệu được truyền trên phân đoạn của nó.
Chế độ quảng bá đề cập đến cách thức duy nhất của phần cứng Ethernet, cụ thể là các thẻ giao diện mạng (NIC), cho phép NIC nhận tất cả lưu lượng trên mạng, ngay cả khi nó không được định địa chỉ tới NIC này. Theo mặc định, NIC bỏ qua tất cả lưu lượng không được định địa chỉ đến nó, điều này được thực hiện bằng cách so sánh địa chỉ đích của gói Ethernet với địa chỉ phần cứng (MAC) của thiết bị. Mặc dù điều này có ý nghĩa hoàn hảo cho việc kết nối mạng, nhưng chế độ không quảng cáo gây khó khăn cho việc sử dụng phần mềm giám sát và phân tích mạng để chẩn đoán các sự cố kết nối hoặc tính toán lưu lượng.
Một trình thám thính có thể liên tục theo dõi tất cả lưu lượng truy cập vào máy tính thông qua NIC bằng cách giải mã thông tin được gói gọn trong các gói dữ liệu.
Các kiểu đánh hơi
Đánh hơi có thể là Chủ động hoặc Bị động. Bây giờ chúng ta sẽ tìm hiểu về các kiểu đánh hơi khác nhau.
Đánh hơi thụ động
Trong đánh hơi thụ động, lưu lượng truy cập bị khóa nhưng nó không bị thay đổi theo bất kỳ cách nào. Đánh hơi thụ động chỉ cho phép nghe. Nó hoạt động với các thiết bị Hub. Trên thiết bị trung tâm, lưu lượng được gửi đến tất cả các cổng. Trong một mạng sử dụng các trung tâm để kết nối các hệ thống, tất cả các máy chủ trên mạng đều có thể nhìn thấy lưu lượng. Do đó, kẻ tấn công có thể dễ dàng nắm bắt được lưu lượng đi qua.
Tin tốt là các trung tâm gần như đã trở nên lỗi thời trong thời gian gần đây. Hầu hết các mạng hiện đại đều sử dụng thiết bị chuyển mạch. Do đó, đánh hơi thụ động không còn hiệu quả.
Đánh hơi tích cực
Trong hoạt động đánh hơi tích cực, lưu lượng truy cập không chỉ bị khóa và giám sát mà còn có thể bị thay đổi theo một cách nào đó do cuộc tấn công xác định. Đánh hơi tích cực được sử dụng để đánh hơi một mạng dựa trên chuyển mạch. Nó liên quan đến việc đưa các gói phân giải địa chỉ (ARP) vào một mạng đích để làm tràn ngập trên bảng nội dung bộ nhớ định địa chỉ (CAM) của switch. CAM theo dõi máy chủ nào được kết nối với cổng nào.
Sau đây là các kỹ thuật đánh hơi chủ động -
- MAC Flooding
- Tấn công DHCP
- Ngộ độc DNS
- Tấn công giả mạo
- Ngộ độc ARP
Hiệu ứng đánh hơi trên giao thức
Các giao thức như tried and true TCP/IPkhông bao giờ được thiết kế với tính bảo mật. Các giao thức như vậy không cung cấp nhiều khả năng chống lại những kẻ xâm nhập tiềm năng. Sau đây là các giao thức khác nhau giúp bạn dễ dàng tìm hiểu -
HTTP
Nó được sử dụng để gửi thông tin dưới dạng văn bản rõ ràng mà không có bất kỳ mã hóa nào và do đó trở thành mục tiêu thực.
SMTP (Giao thức truyền thư đơn giản)
SMTP được sử dụng để chuyển email. Giao thức này hiệu quả, nhưng nó không bao gồm bất kỳ biện pháp bảo vệ nào chống lại việc đánh hơi.
NNTP (Giao thức truyền tin tức mạng)
Nó được sử dụng cho tất cả các loại giao tiếp. Một nhược điểm lớn của điều này là dữ liệu và thậm chí cả mật khẩu được gửi qua mạng dưới dạng văn bản rõ ràng.
POP (Giao thức Bưu điện)
POP được sử dụng nghiêm ngặt để nhận email từ máy chủ. Giao thức này không bao gồm bảo vệ chống đánh hơi vì nó có thể bị bẫy.
FTP (Giao thức truyền tệp)
FTP được sử dụng để gửi và nhận tệp, nhưng nó không cung cấp bất kỳ tính năng bảo mật nào. Tất cả dữ liệu được gửi dưới dạng văn bản rõ ràng có thể dễ dàng nhận ra.
IMAP (Giao thức truy cập tin nhắn Internet)
IMAP giống như SMTP trong các chức năng của nó, nhưng nó rất dễ bị đánh cắp.
Telnet
Telnet gửi mọi thứ (tên người dùng, mật khẩu, tổ hợp phím) qua mạng dưới dạng văn bản rõ ràng và do đó, nó có thể dễ dàng bị phát hiện.
Sniffers không phải là tiện ích ngu ngốc cho phép bạn chỉ xem giao thông trực tiếp. Nếu bạn thực sự muốn phân tích từng gói, hãy lưu bản chụp và xem lại bất cứ khi nào thời gian cho phép.
Triển khai bằng Python
Trước khi triển khai trình kiểm tra ổ cắm thô, hãy để chúng tôi hiểu struct như mô tả bên dưới -
struct.pack (fmt, a1, a2,…)
Như tên cho thấy, phương thức này được sử dụng để trả về chuỗi, được đóng gói theo định dạng đã cho. Chuỗi chứa các giá trị a1, a2, v.v.
struct.unpack (fmt, string)
Như tên cho thấy, phương thức này giải nén chuỗi theo một định dạng nhất định.
Trong ví dụ sau về tiêu đề IP của trình thám thính thô socket, là 20 byte tiếp theo trong gói và trong số 20 byte này, chúng ta quan tâm đến 8 byte cuối cùng. Các byte sau hiển thị nếu địa chỉ IP nguồn và đích đang phân tích cú pháp -
Bây giờ, chúng ta cần nhập một số mô-đun cơ bản như sau:
import socket
import struct
import binascii
Bây giờ, chúng ta sẽ tạo một socket, có ba tham số. Tham số đầu tiên cho chúng ta biết về giao diện gói - PF_PACKET cho Linux cụ thể và AF_INET cho windows; tham số thứ hai cho chúng ta biết rằng đó là một ổ cắm thô và tham số thứ ba cho chúng ta biết về giao thức mà chúng ta quan tâm —0x0800 được sử dụng cho giao thức IP.
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
Bây giờ, chúng ta cần gọi recvfrom() phương thức nhận gói tin.
while True:
packet = s.recvfrom(2048)
Trong dòng mã sau, chúng tôi đang trích xuất tiêu đề Ethernet:
ethernet_header = packet[0][0:14]
Với dòng mã sau, chúng tôi đang phân tích cú pháp và giải nén tiêu đề với struct phương pháp -
eth_header = struct.unpack("!6s6s2s", ethernet_header)
Dòng mã sau sẽ trả về một bộ giá trị có ba giá trị hex, được chuyển đổi bởi hexify bên trong binascii mô-đun -
print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])
Bây giờ chúng ta có thể lấy tiêu đề IP bằng cách thực thi dòng mã sau:
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])
Tương tự, chúng ta cũng có thể phân tích cú pháp tiêu đề TCP.