Giải ngố Kali Linux – Phần 13: Giảm nguy cơ bị bóc phốt việc rình mò, đánh hơi packet với text-based network sniffer Tcpdump

Tiếp theo nội dung Phần 12: Bí thuật rình mò, đánh hơi packet với cá mập Wireshark, hôm nay tôi tiếp tục giới thiệu một nhân vật có tên tuổi trong làng rình mò, đánh hơi packet là text-based network sniffer Tcpdump.

Trong kỳ này, ngoài việc demo giới thiệu như thông thường, tôi sẽ sử dụng thêm Tcpdump examples của Offensive Security để nội dung múa lửa minh họa thêm phần đặc sắc.

#1 Tcpdump làm được cái vẹo gì?

Về nguyên tắc, việc rình mò, đánh hơi càng kín càng tốt. Do vậy, dù graphical interface của Wireshark rất thân thiện, dễ dùng nhưng cũng sẽ dễ bị tăm tia bởi cặp mắt soi mói của mấy mặt nồi ngồi lân cận. Để vô hiệu hóa mấy “máy quét” không mời mà đến này, bạn có thể lựa chọn triển khai công việc mần ăn sang dạng command line với Tcpdump.

Tcpdump là dạng text-based network sniffer, nghĩa là nó có nội công tương đồng với cá mập Wireshark nhưng sẽ kém thân thiện với người dùng hơn vì không có graphical interface. Với Tcpdump, bạn có thể soạn sẵn các command tương tự đám Tcpdump examples tôi demo bên dưới sau đó chơi trò copy/paste vào Kali Linux terminal thì lúc này có là thánh soi (với các kỹ năng cần thiết) cũng khó lòng nắm bắt được ý đồ chiến thuật của bạn.

Lưu ý: Thực tế Wireshark cũng cho phép bạn sử dụng một số tính năng dạng command line tuy nhiên, để đáp ứng việc che đậy mưu đồ như tôi nói trên, giải pháp thuần command line như Tcpdump sẽ ăn tiền hơn.     

Về vấn đề cài đặt, Tcpdump có sẵn trên hầu hết các Linux/Unix OS nên bạn có thể “ăn ngay” với Kali Linux. Tuy nhiên, nếu muốn biết thêm chi tiết bạn có thể mò vào trang chủ của nó ở https://www.tcpdump.org.

Tcpdump page
Tcpdump page

#2 Bắt gói tin và lưu dữ liệu với Tcpdump

Cũng giống như Wireshark, bạn có thể chọn Network Interface để bắt gói tin với command:

sudo tcpdump -c 5 -i eth0

Tcpdump capture example
Tcpdump capture example

Lưu ý:

  • Tương tự như Wireshark, bạn có thể cần chạy quyền superuser (sudo trong command nói trên) để có thể tung tóe trên các interface cụ thể;
  • Option -c 5: Để đếm đủ 5 packet thì nghỉ. Cái này tôi dùng để minh họa cho nhanh chứ không có ý đồ gì cao siêu cả;
  • Option -i: Dễ thấy, cái này tương ứng việc chọn Network Interface (eth0 trong ví dụ trên).

Nếu có hứng thú với các Network Interface khác, bạn có thể kiểm nhanh danh sách Network Interface với command:

tcpdump -D

Tcpdump check Network Interface
Tcpdump check Network Interface

Nếu bạn muốn ghi đám thông tin bắt được ra file thì có thể dùng command như sau với việc bổ sung option -wfilename (test_tcpdump.pcap trong ví dụ bên dưới):

sudo tcpdump -w test_tcpdump.pcap -c 5 -i eth0

Tcpdump write option
Tcpdump write option

Kiểm tra nhanh kết quả với command “ls -l | grep tcpdump” tôi thấy file test_tcpdump.pcap đã có mặt như mong đợi.

Lưu ý:

  • Việc sử dụng grep piping “|”tôi nói nhiều quá rồi nên xin phép không nhai lại nữa. Nếu không nhớ bạn search lại các bài trước sẽ thấy;
  • Chữ “tcpdump” tôi dùng sau grep là do tôi đặt tên file là pcap có chứa chữ “tcpdump” thôi.

#3 Biểu diễn phân tích dữ liệu với Tcpdump examples

#3.1 Lọc dữ liệu với Tcpdump

Kết thúc bước trên, bạn đã có file *.pcap sẵn sàng cho quá trình phân tích (và chém gió). Tuy nhiên, file ví dụ test_tcpdump.pcap trên của tôi để minh họa là chính chứ thực sự có cái mịa gì trong đó đâu mà phân với chả tích.

Để việc kịch bản demo phân tích dữ liệu mạch lạc và “gay cấn”, tôi có 2 lựa chọn là tự dàn cảnh (như mọi khi) hoặc chạy theo kịch bản thiên hạ đã dựng sẵn. Vì nhận thấy không thể dàn cảnh hay hơn ông Offensive Security (và cũng để đỡ tốn thời gian) nên trong kỳ này tôi sẽ “hốt” trọn cái kịch bản của ông này thông qua việc sử dụng cái Tcpdump examples dựng sẵn với file password_cracking_filtered.pcap. Bạn có thể lượm hàng về theo link https://www.offensive-security.com/pwk-online/password_cracking_filtered.pcap (bạn nhớ kiểm tra lại source trước khi hốt hàng, đừng nhắm mắt hả họng click là có ngày ăn hành sml).

Sau khi đang hốt hàng về con Kali Linux, tôi có thể đọc file bằng cách sử dụng command với option -r (chắc là “read”, tôi đoán vậy):

sudo tcpdump -r password_cracking_filtered.pcap

Tcpdump read option
Tcpdump read option

Như bạn thấy, trích đoạn cải lương phụt ra từ command ở trên quá rối nên bạn cũng sẽ cần trợ giúp với các tính năng Filtering (lọc) như đã làm với Wireshark. Tất nhiên công việc ở đây có “khổ” hơn một chút vì cần sử dụng thêm các option cho command (tuy nhiên khi đã “khổ” quen rồi có thể bạn sẽ không khoái “sướng” kiểu graphical interface nữa vì tốc độ thao tác dạng text-based sẽ nhanh hơn click chuột nhiều). Command để sàng lọc thông tin theo IPPort như sau:

sudo tcpdump -n -r password_cracking_filtered.pcap | awk -F" " '{print $3}' | sort | uniq -c | head

Tcpdump filter example 1
Tcpdump filter example 1

Đừng hoảng, để tôi dịch cái command lằng ngoằng ở trên ra “tiếng người” (thực ra nếu bạn theo dõi Series này từ đầu thì đa phần sẽ toàn là “người quen” kết hợp với nhau qua Piping|”thôi):

Tiếp tục, bạn có thể lọc với source host (src host)destination host (dst host) cũng như port number (port number) như Wireshark để kiểm tra kỹ hơn. Command tương ứng cho source host (IP 172.16.40.10 trong ví dụ sau) là:

sudo tcpdump -n src host 172.16.40.10 -r password_cracking_filtered.pcap

Tcpdump filter example 2
Tcpdump filter example 2

Và cho destination host (IP 172.16.40.10 trong ví dụ sau) là:

sudo tcpdump -n dst host 172.16.40.10 -r password_cracking_filtered.pcap

Tcpdump filter example 3
Tcpdump filter example 3

Và lọc theo port number (port 81 như ví dụ sau) là:

sudo tcpdump -n port 81 -r password_cracking_filtered.pcap

Tcpdump filter example 4
Tcpdump filter example 4

#3.2 Phân tích gói tin với Tcpdump

Nếu có để ý, khi xử lý với Wireshark bạn có thể đọc packet data dạng HEXASCII ở bảng thông tin phía dưới tương ứng cho mỗi packet. Với Tcpdump, bạn cũng có thể làm thế nếu thích. Command cần sử dụng tương ứng là:

sudo tcpdump -nX -r password_cracking_filtered.pcap

Tcpdump option -X
Tcpdump option -X

Lưu ý: Option -X ở đây sẽ thực hiện việc in packet data ra dạng HEXASCII cho bạn

Rà nhanh qua đám output trên bạn sẽ thấy kiểu dữ liệu HTTP trên port 81 của IP 172.16.40.10 xuất hiện khá nhiều với một User agent hơi quái là “Teh Forest Lobster” (cái này tôi nghĩ chắc ông Offensive Security chế ra để minh họa cho vui thôi).

Việc HTTP requests chứa Basic Authentication data và cái User agent quái dị ở trên là dấu hiệu cho thấy có chuyện gì đó mờ ám đã xảy ra. Trong tình huống này, bước đi hợp lý tiếp theo để đánh giá tình hình là phân tích kỹ HTTP requests/responses trong dữ liệu đã thu thập.

Tuy nhiên, việc bạn ngồi đọc thủ công nội dung từng packet sau đó tổng kết chiêm nghiệm ra ý nghĩa tổng thể thì không khả thi về mặt thời gian lắm. Thực tế, bạn cần áp dụng thêm một số “chiến thuật” nhất định dựa vào ngữ cảnh cụ thể để đẩy nhanh tốc độ phân tích (cái này phụ thuộc kinh nghiệm chinh chiến, khả năng tư duy và “độ hên” của bạn). Với kịch bản “dàn dựng” phía trên, để rút ngắn thời gian, bạn có thể lọc các packet chỉ có PSH flagACK flag được bật (turn on).

Lưu ý: Sau quá trình 3-way handshake (bắt tay 3 bước), tất cả packet gửi và nhận sẽ có ACK flagPSH flag được dùng để báo Transport Layer (tầng vận chuyển) đã đủ data để đẩy các packet đi, đừng nằm chờ nữa.

Vấn đề bây giờ là bạn cần định vị thông tin tương ứng của ACK flagPSH flag để tiến hành lọc tương ứng. Nếu mới nghe đến TCP Header lần đầu thì bạn có thể bơi vô Transmission Control Protocol – Wikipedia để đọc.

TCP segment header
TCP segment header

Tôi tua nhanh qua đoạn rị mọ ngồi định vị ACK flagPSH flag trong TCP Header để đi đến ngay phần kết luận là 2 flags này nằm ở vị trí bit thứ 4 và thứ 5 của byte thứ 14 (bạn nhớ kiểm tra lại coi đúng không). Như vậy, để đọc các packet có ACKPSH flag set trong cái Tcpdump example password_cracking_filtered.pcap, bạn có thể dùng command:

sudo tcpdump -A -n 'tcp[13] = 24' -r password_cracking_filtered.pcap

Tcpdump advanced filter
Tcpdump advanced filter

Lưu ý:

  • Option -A là để in thông tin dạng ASCII
  • Tcpdump array index (và phần lớn mấy thằng khác) đánh số từ “0” nên byte thứ 14 sẽ có index là 13 như bạn thấy (tcp[13])
  • Số 24 trong “tcp[13] = 24” là dạng thập phân của 00011000 tương ứng việc bit thứ 4 và thứ 5 (tương ứng vị trí ACK flagPSH flag)

Soi kỹ đám thông tin đã sàng lọc này, bạn sẽ thấy sau nhiều lần bị từ chối truy cập (chỗ 401 – Authorization Required, cuối cùng “ai đó” cũng đã  thành công trong việc truy cập vào vị trí /admin (301 Moved Permanently). Nếu một ngày xấu trời nào mà bạn phân tích dữ liệu thấy cái gì tương tự thế này thì bạn chuẩn bị tinh thần triển khai việc kiểm soát thiệt hại và thu dọn chiến trường đi là vừa.

Leave a Reply

Your email address will not be published. Required fields are marked *