Truyền thông với TCP – UDP

Trong phạm vi bài viết tôi chỉ xin phép chỉ trình bày về các thiết lập flag (cờ) trong gói tin TCP.  Bạn có thể tìm hiểu thêm các kiến thức về TCP/IP tại đây: http://www.faqs.org/rfcs/rfc793.html. Các thông số Flag trong TCP

  • Thông số SYNchronize: Yêu cầu kết nối giữa 2 máy.
  • Thông số ACKnowledgement: Trả lời kết nối giữa 2 máy có thể bắt đầu thực hiện
  • Thông số FINal: Kết thúc quá trình kết nối giữa 2 máy.
  • Thông số RST (reset): Khởi động lại kết nối.
  • Thông số PSH ( push): Thực hiện chức năng đẩy trong bộ đệm trong TCP – thường sử dụng cho các gói tin ưu tiên.
  • Thông số URG (Urgent): Thông số nhằm thiết lập độ ưu tiên cần xử lý ngay cho gói tin.

Các thông số này trong TCP Header có giá trị là 0 (Không thiết lập) hoặc 1 (Được thiết lập) và nằm trong 8 bít trong phần Flag của TCP Header.

1. Thực hiện bắt tay 3 bước

  • Bước 1: Host A gửi một gói tin SYN. Host B nhận gói tin SYN
  • Bước  2: Host B gửi về Host Amột gói tin SYN/ACK. Host A nhận gói tin SYN/ACK
  • Bước 3: Host A gửi gói tin ACK tới Host B. Host B nhận gói tin ACK
  • Kết nối TCP được thiết lập.
Các kỹ thuật quét cổng cơ bản

2. Kết thúc một kết nối

  • Bước 1: Client gửi đến Server một gói tin FIN ACK
  • Bước 2: Server gửi lại cho Client một gói tin ACK
  • Bước 3: Server lại gửi cho Client một gói FIN ACK
  • Bước 4: Client gửi lại cho Server gói ACK và quá trình ngắt kết nối giữa Server và Client được thực hiện.
Các kỹ thuật quét cổng cơ bản

3. UDP 

Nếu như gói tin truyền bằng TCP để đảm bảo sự toàn vẹn của gói tin sẽ luôn được truyền tới đích. Gói tin truyền bằng UDP sẽ đáp ứng nhu cầu truyền tải dữ liệu nhanh với các gói tin nhỏ. 

Hướng dẫn các kỹ thuật quét cổng cơ bản

Nguyên tắc quét cổng dịch vụ trên hệ thống

Trên gói TCP/UDP có 16 bit dành cho Port Number điều đó có nghĩa nó sẽ có từ 1 – 65535 cổng. Các cổng cổng thường chia thành 3 phạm vi

  • Well Known Ports (0 – 1023): các cổng phổ biến, đã biết, nó thường đi kèm với các chuẩn dịch vụ trên hệ thống. Ví dụ: telnet (23/tcp), www-http (80/tcp), ftp (21), ssh (22/tcp)…
  • Registered Ports (1024 – 49151): Các cổng được sử dụng riêng cho từng chương trình, dịch vụ cụ thể. Radius  – RADIUS Authentication Protocol (1812), Microsoft Internet Name Server
  • Dynamic and/or Private Ports (49152 – 65535): Các cổng động hoặc không công khai.

Kỹ thuật đơn giản nhất của quét các cổng từ 1 -> 65535 và lấy ra các cổng đã mở. Thông thường chúng ta sẽ không quét toàn bộ 65535  mà chỉ tập trung vào các cổng phổ biến hoặc các phạm vi quét cổng hẹp hơn. 

Công cụ quét cổng Nmap

Sau đây tôi sẽ trình bày các kỹ thuật quét cổng cơ bản đi kèm với các ví dụ sẽ được thực hiện cùng với công cụ Nmap, bạn có thể thực hành để hiểu rõ hơn. Chúng ta sẽ sử dụng 2 khái niệm chính là kẻ tấn công (người scan, máy scan) và mục tiêu (máy mục tiêu). Download Nmap tại đây: http://nmap.org/download.html 

TCP Connect() Scan

Trong kiểu scan này, kẻ tấn công sẽ gửi một gói tin SYN đến tất cả các cổng của máy mục tiêu.nếu một hoặc nhiều cổng được mở nó sẽ trả về một gói tin SYN|ACK, và kẻ tấn công sẽ hoàn thành một quá trình bắt tay bằng việc gửi lại gói tin ACK, Nếu các cổng đều đóng thì mục tiêu sẽ trả về gói tin RST để khởi động lại kết nối.

[root@localhost ~]# nmap -sT 192.168.1.22

SYN Scan

Đây là một kiểu scan khác với TCP Connect() Scan vì quá trình bắt tay 3 bước sẽ không được hoàn thành. Kẻ tấn công sẽ gửi một gói tin SYN đến tất cả các cổng của mục tiêu. Trong trường hợp các cổng tương ứng mở nó sẽ gửi trả lại một gói tin SYN | ACK. Tại điểm này kẻ tấn công sẽ kết thúc bằng một gói tin RST. Nếu cổng đóng mục tiêu sẽ gửi trở lại một gói tin RST. Trong cả 2 trường hợp quá trình bắt tay 3 bước đều sẽ không được hoàn thành.

[root@localhost ~]# nmap -sS 192.168.1.22

FIN Scan

Kẻ tấn công sẽ gửi một gói tin với cờ FIN tới tất cả các cổng của mục tiêu. Với các cổng được mở, mục tiêu sẽ bỏ qua gói tin và không phản hồi về cho kẻ tấn công. Các cổng đóng sẽ gửi về gói tin RST để khởi tạo kết nối.

[root@localhost ~]# nmap -sF 192.168.1.22

XMAS Scan

Gần giống như FIN scan nhưng trong kiểu scan này kẻ tấn công sẽ gửi một gói tin FIN|URG|PSH.

[root@localhost ~]# nmap -sX 192.168.1.22

NULL Scan

Kiểu scan này tương tự như FIN scan và XMAS scan nhưng  kẻ tấn công sẽ gửi một gói tin mà không thiết lập bất cứ cờ nào trong Header của TCP.

[root@localhost ~]# nmap -sX 192.168.1.22

UDP Scan

Đây là kiểu scan để phát hiện một cổng UDP đang mở. Gói tin UDP sẽ được gửi tới tất cả các cổng của mục tiêu, nếu cổng mở mục tiêu sẽ không gửi lại gì, nếu cổng là đóng mục tiêu sẽ gửi lại một gói tin ICMP Port Unreachable.

[root@localhost ~]# nmap -sU 192.168.1.22

Một số kỹ thuật quét cổng nâng cao

Decoy Scan

Decoy Scan là một kỹ thuật thực hiện một IP Spoofing (giả mạo). Mục đích nhằm ấn địa chỉ thực sự của kẻ tấn công (scanner). Ta xét ví dụ sau.

[root@localhost ~]# nmap -sS 192.168.1.22 -D 1.2.3.4, 5.6.7.8

Sau tham số “-D” là các giá trị IP cụ thể, với mỗi cổng khi scan mục tiêu sẽ nhận đồng thời 3 gói tin (một từ kẻ tấn công, một từ IP: 1.2.3.4, và một từ IP: 5.6.7.8). Kết quả là mục tiêu sẽ phản hồi với cả 3 địa chỉ IP và có sẽ nghĩ rằng cả 3 IP đang scan mình. Tuy nhiên, khi ta tăng giá trị IP lên hàng trăm IP thì việc tìm ra kẻ tấn công thực sự là rất khó khăn.

Idle Scan

Idel Scan là một kỹ thuật phức tạp cho phép ẩn hoàn toàn kẻ tấn công. trong Scan này sẽ có 3 thành phần: 1 là kẻ tấn công, một Zombie (một máy bị kẻ tấn công lợi dụng) và một là mục tiêu cần quét cổng. Điều kiện là máy Zombie không thực hiện các hoạt động khác ngoại trừ việc giao tiếp với Kẻ tấn công. IPID: Mỗi IP packet được gửi trên mạng có một số duy nhất được gọi là fragment identification (hay gọi là IPID)

Các kỹ thuật quét cổng cơ bản
Bước 1 của Idle Scan
Các kỹ thuật quét cổng cơ bản
Bước 2 của Idle Scan
  1. Kẻ tấn công sẽ gửi một gói tin SYN|ACK đến một cổng của Zombie và sẽ phản hồi một gói tin RST chứa 1 IP ID
  2. Kẻ tấn công tiếp tục gửi một gói tin SYN giả mạo IP của Zombie đến cổng của mục tiêu.
  3. Nếu cổng đó đóng mục tiêu sẽ phản hồi đến Zombie một RST packet và zombie sẽ không tăng giá trị IP ID, nếu cổng là mở, mục tiêu sẽ gửi một gói tin SYN|ACK đến zombie và zombie sẽ tăng giá trị IP ID lên 1.
  4. Kẻ tấn công sẽ gửi một gói tin SYN|ACK khác tới Zombie và kiểm tra nếu IP ID tăng hoặc không tăng tương ứng với cổng được mở hoặc đóng trên Mục tiêu.

Bài viết sau tôi sẽ giới thiệu các công cụ phổ biến và hướng dẫn sử dụng Nmap cho việc quét cổng và pentest hệ thống. Nếu có bất kỳ câu hỏi, góp ý nào cho bài viết, mời bạn để lại comment bên dưới.

Chia sẻ bài viết này