BẢO MẬTCĂN BẢNTUẦN 01 & 02
BÀI 06

Hành trình một lần mở trang: từ HTTP chữ rõ đến HTTPS

Câu hỏi xuyên suốt: một thành viên mở trang đóng lệ phí của câu lạc bộ. Trên đường từ trình duyệt đến máy chủ, ai nhìn thấy được gì, ai có thể sửa gì, và ta chặn bằng cách nào?

Thời lượng: khoảng 90 phút (giảng và thực hành xen kẽ, 9 bài tập, bài cuối làm ở nhà)

Bốn phần của bài: nội dung gửi đi, đường đi, bảo vệ bằng TLS, rồi chẩn đoán lỗi. Mỗi phần có bài tập.
Bốn phần của bài: nội dung gửi đi, đường đi, bảo vệ bằng TLS, rồi chẩn đoán lỗi. Mỗi phần có bài tập.
01

Mạch bài: một câu hỏi, bốn phần

5 phút

Bài 5 cho biết mỗi kết nối có IP và port ở hai đầu. Bài này đi tiếp với một tình huống cụ thể:

Tình huốngThành viên Lan mở trang đóng lệ phí của câu lạc bộ, nhập tên và số tiền, rồi bấm gửi. Dữ liệu đó đi qua router nhà Lan, qua nhà mạng, qua nhiều thiết bị trung gian, rồi mới đến máy chủ. Ai trên đường đi đọc được tên, số tiền và mã phiên đăng nhập của Lan? Ai sửa được số tài khoản trong trang trả về?

Để trả lời, bài đi theo thứ tự "nhìn vấn đề trước, tìm cách chặn sau":

PhầnViệc làmTrả lời câu hỏi nàoThời gian
A. Nội dungĐọc HTTP, tự bắt gói trong máyDữ liệu gửi đi trông thế nào? (kết quả: chữ rõ, ai thấy cũng đọc được)20 phút
B. Đường điDNS, router và NAT, firewall, TCPDữ liệu đi qua những điểm nào, mỗi điểm thấy gì và có thể làm gì?30 phút
C. Bảo vệTLS và HTTPS, chứng chỉLàm sao biến chữ rõ thành chữ mã và chắc rằng đang nói đúng máy chủ?20 phút
D. Chẩn đoánTìm lớp bị lỗi, rà soát websiteKhi hỏng, lỗi ở lớp nào? Website của mình đã đủ các lớp chưa?15 phút

Cần chuẩn bị

  • Python 3 (chạy web server thử), trình duyệt, terminal.
  • Wireshark đã cài và cấp quyền bắt gói. Nếu chưa có, vẫn làm được phần lớn bài tập bằng cách đọc dữ liệu mẫu.
  • curl (có sẵn trên macOS, Linux; Windows dùng curl.exe).
Quy tắc an toàn khi thực hànhChỉ dùng dữ liệu giả. Không nhập tài khoản, mật khẩu hay số điện thoại thật khi đang bắt gói. Chỉ bắt gói trên máy và mạng của chính bạn hoặc nơi được cho phép. Chỉ kết nối tới máy của mình và tới example.com.
02

A1. HTTP: nội dung mà trình duyệt gửi đi

8 phút
Trình duyệtGửi request
MạngMang các gói tin
Web serverTrả response

là ngôn ngữ giữa trình duyệt và website. Trình duyệt gửi một , server trả một . Khi Lan bấm "Đóng phí", trình duyệt gửi khoảng như sau (đã trình bày lại cho dễ đọc):

REQUEST MINH HỌA
POST /dong-phi HTTP/1.1
Host: clb.example
Cookie: phien=a1b2c3d4
Content-Type: application/x-www-form-urlencoded
Content-Length: 29

ten=Lan&so_tien=200000&ghi=ok
  • Dòng đầu: (POST = gửi dữ liệu lên; GET = lấy tài nguyên; còn PUT, DELETE), đường dẫn /dong-phi trên server, và phiên bản giao thức.
  • Các dòng Tên: giá trị là . Host là tên đích. Cookie mang mã phiên đăng nhập (bài 3). Content-Length là số byte của body.
  • Dòng trống kết thúc header. Phần sau đó là body: dữ liệu Lan nhập.

Server trả lời bằng một response:

RESPONSE MINH HỌA
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 14

<h1>Hello</h1>

Dòng đầu có . Bảng mã thường gặp:

MãNghĩaKhông được suy ra
200Thành côngDữ liệu chắc chắn đúng
301 / 302Chuyển hướng sang URL khácURL mới là đáng tin
403Từ chối vì không đủ quyềnMật khẩu sai
404Không tìm thấy tài nguyênMạng hỏng
500Lỗi bên trong serverBị tấn công

Một response chứa số tài khoản sai vẫn là 200: HTTP chỉ nói giao thức chạy ổn, tính đúng của dữ liệu là chuyện toàn vẹn (bài 1).

Điểm mấu chốt của phần AToàn bộ request ở trên là văn bản thường. Tên, số tiền và mã phiên nằm ở dạng chữ rõ trong từng gói tin. Phần A2 sẽ chứng minh điều đó bằng cách tự bắt gói.

BÀI TẬP 1 · 5 PHÚT

Đọc một request

Dùng request POST ở trên và trả lời:

  1. Method và đường dẫn là gì?
  2. Phần nào là dữ liệu Lan nhập, phần nào là bằng chứng "đã đăng nhập"?
  3. Content-Length: 29 đếm cái gì? Hãy đếm thử chuỗi ten=Lan&so_tien=200000&ghi=ok.
  4. Nếu request này đi qua HTTP, người ở router nhà Lan đọc được những gì và làm gì được với cookie?
Xem đáp án
  1. Method POST, đường dẫn /dong-phi.
  2. Dữ liệu nhập là body (ten, so_tien, ghi). Bằng chứng đăng nhập là header Cookie: phien=a1b2c3d4.
  3. Số byte của body. Chuỗi có đúng 29 ký tự ASCII (7 + 1 + 14 + 1 + 6) nên 29 byte.
  4. Đọc được toàn bộ: tên, số tiền, cookie. Với cookie còn hiệu lực, người đó gửi request giả danh Lan mà không cần mật khẩu hay MFA. Đây là đánh cắp phiên (session hijacking) đã học ở bài 3.
03

A2. Lab 1: tự bắt gói HTTP trong máy mình

12 phút
Trình duyệt127.0.0.1:51514
Python server127.0.0.1:8000

Để thấy chữ rõ bằng mắt, ta chạy cả client và server trong cùng một máy. Địa chỉ 127.0.0.1 luôn trỏ về chính máy, nên gói không ra router. Dùng của Wireshark để xem các gói.

Bước 1. Dựng server

  1. Tạo thư mục trống network-lab, đừng chọn thư mục chứa dữ liệu cá nhân.
  2. Tạo file index.html trong đó:
NỘI DUNG index.html
<h1>Cau lac bo - Lich sinh hoat</h1>
  1. Mở terminal đúng trong thư mục đó và chạy (giữ cửa sổ này chạy):
macOS / LINUX
python3 -m http.server 8000 --bind 127.0.0.1
WINDOWS POWERSHELL
py -m http.server 8000 --bind 127.0.0.1

8000 là port lắng nghe. --bind 127.0.0.1 chỉ cho máy này truy cập, thói quen tốt để không vô tình mở dịch vụ thử nghiệm ra mạng. Mở http://127.0.0.1:8000/ trong trình duyệt: server in dòng log như "GET / HTTP/1.1" 200 -.

Lỗi thường gặp: "command not found" là chưa cài Python hoặc sai tên lệnh; "Address already in use" là port đang dùng, đổi port và sửa URL cho khớp; server phục vụ file ở thư mục hiện hành nên chạy sai thư mục sẽ ra trang khác.

Bước 2. Bắt gói

Hệ điều hànhGiao diện loopback trong Wireshark
macOSlo0
Linuxlo
WindowsNpcap Loopback Adapter (tên có thể khác)
  1. Chọn giao diện loopback và bấm bắt đầu capture trước khi tạo kết nối.
  2. Trong terminal khác, gửi một request có kèm cookie giả:
TERMINAL
curl -H "Cookie: phien=demo123" http://127.0.0.1:8000/
  1. Dừng capture. Nhập tcp.port == 8000. Filter chỉ ẩn bớt dòng, không xóa gói.
  2. Chuột phải một dòng HTTP, chọn Follow → TCP Stream.

Nếu không thấy gói: kiểm tra đã chọn loopback, server còn chạy, capture bắt đầu trước thao tác. Bảng dưới là dữ liệu minh họa đã giản lược (không phải capture từ máy bạn); bấm một dòng để xem giải thích.

LOOPBACK · 127.0.0.16 dòng minh họa
No.ProtocolSource portDest. portInfo · Chọn để xem

BÀI TẬP 2 · 10 PHÚT

Tìm chữ rõ trong capture của chính bạn

Trong cửa sổ Follow TCP Stream, ghi lại:

  1. Port nguồn (port tạm của client) và port đích.
  2. Dòng request đầu tiên và dòng đầu của response (mã trạng thái).
  3. Dòng Cookie bạn đã gửi: có đọc được không?
  4. Nội dung body của trang.

Sau đó dừng capture và server (Ctrl+C), xóa file capture nếu không cần: file PCAP có thể chứa dữ liệu của luồng khác.

Xem đáp án
  1. Port đích là 8000; port nguồn là số ngẫu nhiên cao (thường trên 49152), mỗi lần chạy khác nhau.
  2. GET / HTTP/1.1 và HTTP/1.0 200 OK (server Python mặc định trả HTTP/1.0; trình duyệt hoặc curl gửi 1.1, hai bên có thể khác phiên bản).
  3. Đọc được nguyên văn Cookie: phien=demo123. Đây chính là điều bất kỳ ai trên đường đi cũng làm được với HTTP.
  4. Đọc được <h1>Cau lac bo - Lich sinh hoat</h1>.

Kết luận phần A: HTTP không mã hóa lộ mọi thứ. Phần B xem ai nằm trên đường đi, phần C cách chặn.

04

B1. Đường đi (1): DNS tìm địa chỉ máy chủ

8 phút
clb.exampleTên người dùng gõ
Bộ phân giải DNSTra hoặc dùng cache
203.0.113.10IP trả về

Phần A dùng địa chỉ số trực tiếp. Trên Internet, Lan gõ tên, nên trước tiên máy phải đổi tên thành IP. Việc này do làm: nhận câu hỏi, dùng kết quả đã lưu () hoặc hỏi tiếp các máy chủ DNS.

Thông tinVí dụÝ nghĩa
Tên hỏiclb.exampleTên đang cần tra
Loại bản ghiA (IPv4), AAAA (IPv6)Loại thông tin cần
Kết quả203.0.113.10Địa chỉ trả về (địa chỉ tài liệu, minh họa)
TTL300 giâyThời gian được phép lưu cache

Rủi ro bảo mật của DNS

  • DNS thông thường không mã hóa và không tự xác thực: ai ở giữa đường nhìn thấy tên website bạn truy cập, và nếu giả được câu trả lời (DNS spoofing) thì đưa được người dùng tới máy chủ giả.
  • Kẻ chiếm được tài khoản nhà đăng ký tên miền (bài 2) sửa được bản ghi A và chuyển cả website sang máy chủ của họ. Cần MFA và quyền tối thiểu cho tài khoản này.
  • Tra được IP chưa chứng minh trang tải được, hay đúng là trang mong muốn.

BÀI TẬP 3 · 5 PHÚT

Quan sát DNS và nghĩ như kẻ tấn công

Chạy hai lần liên tiếp:

TERMINAL
nslookup example.com
dig example.com
  1. Ghi IP và TTL (dig hiện TTL ở cột thứ hai). Lần chạy thứ hai TTL có giảm không? Vì sao?
  2. Nếu kẻ tấn công sửa được bản ghi A của clb.example, Lan gõ đúng tên vẫn thấy gì? Tài khoản nào cần được bảo vệ?
Xem đáp án
  1. TTL thường giảm dần vì kết quả đang nằm trong cache của resolver và đếm ngược tới khi hết hạn. Hết TTL thì tra lại.
  2. Lan vào một máy chủ do kẻ tấn công điều khiển, có thể là bản sao giống hệt trang thật để lấy tiền hoặc mật khẩu. Cần bảo vệ tài khoản ở nhà đăng ký tên miền và DNS (MFA, quyền tối thiểu, theo dõi thay đổi bản ghi). Ngoài ra HTTPS (phần C) giúp trình duyệt nhận ra máy chủ không đúng chủ tên miền.
05

B2. Đường đi (2): router và NAT

10 phút
Laptop192.168.1.10:51514
Router / NAT198.51.100.25:62001
Máy chủ203.0.113.10:443

Biết IP máy chủ rồi, gói tin rời mạng nhà qua . Router có hai việc đáng chú ý về bảo mật.

Việc 1: dịch địa chỉ (NAT)

IP riêng như 192.168.1.10 không dùng trực tiếp trên Internet. Khi gói đi ra, router thực hiện : thay địa chỉ nguồn bằng IP công cộng của router. Nhiều thiết bị chung một IP công cộng nên router còn đổi cả port () và ghi vào bảng ánh xạ:

Kết nối bên trongÁnh xạ bên ngoàiĐích
192.168.1.10:51514198.51.100.25:62001203.0.113.10:443
192.168.1.11:51514198.51.100.25:62002203.0.113.10:443

Hai máy cùng dùng port 51514 vẫn được tách nhờ hai port ngoài khác nhau. Khi server trả lời về 62001 hoặc 62002, router tra bảng và chuyển về đúng máy.

Việc 2: là điểm mọi gói đều đi qua

Router (và mọi thiết bị trên đường: Wi-Fi công cộng, nhà mạng, thiết bị trung gian) thấy được IP, port và với HTTP cả nội dung. Router bị chiếm thì kẻ tấn công đọc và sửa được lưu lượng chưa mã hóa (tấn công kẻ đứng giữa, ). Vì vậy: đổi mật khẩu quản trị mặc định của router, cập nhật firmware, và đừng tin Wi-Fi lạ cho dữ liệu nhạy cảm.

NAT không phải tường lửaHệ quả phụ của NAT là kết nối mới từ ngoài vào thường không có ánh xạ nên bị bỏ, nhưng đó không phải chính sách bảo mật có chủ đích. Mạng nhà còn có thể nằm sau của nhà mạng, và IPv6 thường không dùng NAT. Việc kiểm soát thật sự là của tường lửa (phần B3).

BÀI TẬP 4 · 10 PHÚT

Đọc bảng NAT và đối chiếu với máy bạn

Phần 1 (trên giấy). Dùng bảng NAT ở trên:

  1. Một gói từ 203.0.113.10:443 đến 198.51.100.25:62002. Router chuyển nó về đâu?
  2. Một gói lạ từ 192.0.2.77:4444 đến 198.51.100.25:62999. Chuyện gì xảy ra và vì sao?

Phần 2 (trên máy bạn). Dùng lệnh ở bài 5 để ghi IP riêng và gateway của máy. Tùy chọn: chạy curl https://ifconfig.me để xem IP công cộng của bạn và so với IP riêng.

Xem đáp án

Phần 1.

  1. Về 192.168.1.11:51514, vì bảng ghi 62002 tương ứng với máy .11.
  2. Bị bỏ: không có ánh xạ nào cho port 62999 nên router không biết chuyển cho máy nào. Đây là lý do mạng nhà ít bị "gõ cửa" từ ngoài, nhưng cần firewall để chủ động chặn.

Phần 2. IP riêng thường dạng 192.168.x.x hoặc 10.x.x.x; IP công cộng là địa chỉ khác hẳn và chung cho mọi thiết bị trong nhà (hoặc cả nhiều nhà nếu có CGNAT). Gateway thường là 192.168.x.1.

06

B3. Đường đi (3): firewall và TCP

12 phút
SYNClient xin kết nối
SYN/ACKServer đồng ý
ACKClient xác nhận

Tường lửa

cho phép hoặc chặn lưu lượng theo quy tắc (IP, port, giao thức, trạng thái kết nối). Nguyên tắc: chặn mặc định, chỉ mở thứ cần thiết (default deny). Mỗi port mở ra ngoài là một điểm có thể bị tấn công. Ví dụ quy tắc cho máy chủ của câu lạc bộ:

Thứ tựHành độngĐến portTừ
1Cho phép443 (HTTPS)Mọi nơi
2Cho phép22 (quản trị từ xa SSH)Chỉ 203.0.113.50 (máy của quản trị viên)
3ChặnTất cả port còn lạiMọi nơi

Kết nối chỉ thành công khi nhiều lớp cùng đúng: có đường đi, firewall không chặn, có chương trình đang lắng nghe đúng IP và port, hai bên nói giao thức tương thích, và ứng dụng cho phép yêu cầu. Vì vậy "mở port", "chạy server" và "cấp quyền sửa dữ liệu" là ba việc khác nhau. Mở port 8000 không tạo ra web server; server chỉ lắng nghe 127.0.0.1 thì máy khác không vào được dù firewall đã mở.

TCP: bắt tay ba bước

cho luồng byte đúng thứ tự, truyền lại phần bị mất. Trước khi gửi dữ liệu, hai bên làm : SYN (client xin kết nối) → SYN/ACK (server đồng ý) → ACK (client xác nhận). Chỉ sau đó HTTP mới bắt đầu chạy bên trên.

  • Bắt tay TCP không mã hóa. Kết nối HTTP vẫn dùng TCP, nội dung vẫn là chữ rõ.
  • Server phải giữ trạng thái cho mỗi kết nối đang bắt tay dở. Kẻ tấn công gửi rất nhiều SYN mà không hoàn tất (SYN flood) làm cạn tài nguyên: một dạng . Phòng bằng giới hạn tốc độ và cơ chế chống SYN flood của hệ điều hành hoặc nhà cung cấp.
  • TCP có thể chuyển đúng request mà ứng dụng vẫn trả 403 hay 404. TCP không biết gì về nghiệp vụ.

Ghi chú: gửi từng gói rời, không bảo đảm đủ và đúng thứ tự. chạy trên UDP nhưng có độ tin cậy và TLS tích hợp, là nền của HTTP/3, nên thấy UDP cổng 443 không tự là dấu hiệu tấn công.

BÀI TẬP 5 · 10 PHÚT

Quyết định của firewall và đọc dấu hiệu SYN flood

Phần 1. Dùng bộ quy tắc ở trên, quyết định cho phép hay chặn:

  1. Gói từ 198.51.100.9 đến cổng 443.
  2. Gói từ 198.51.100.9 đến cổng 22.
  3. Gói từ 203.0.113.50 đến cổng 22.
  4. Gói từ 203.0.113.50 đến cổng 3306 (cơ sở dữ liệu).

Phần 2. Đọc đoạn capture phía server (rút gọn) và cho biết đâu là bắt tay bình thường, đâu đáng ngờ:

CAPTURE MINH HỌA
1  192.0.2.10:40001 -> server:443  SYN
2  server:443 -> 192.0.2.10:40001  SYN/ACK
3  192.0.2.10:40001 -> server:443  ACK
4  192.0.2.21:50110 -> server:443  SYN
5  192.0.2.22:50111 -> server:443  SYN
6  192.0.2.23:50112 -> server:443  SYN
7  192.0.2.24:50113 -> server:443  SYN
(... hàng nghìn dòng SYN từ nhiều IP, không có ACK ...)
Xem đáp án

Phần 1.

  1. Cho phép (quy tắc 1).
  2. Chặn (quy tắc 2 chỉ cho 203.0.113.50, rơi xuống quy tắc 3).
  3. Cho phép (quy tắc 2).
  4. Chặn (không có quy tắc cho 3306, rơi xuống chặn mặc định). Cơ sở dữ liệu không nên mở ra ngoài.

Phần 2. Dòng 1 đến 3 là bắt tay bình thường đủ ba bước. Dòng 4 trở đi: rất nhiều SYN từ nhiều IP khác nhau, server trả SYN/ACK nhưng không nhận ACK, kết nối treo dở. Đó là dấu hiệu SYN flood (tấn công từ chối dịch vụ). Cách ứng phó: bật SYN cookies hoặc bảo vệ chống DoS của nhà cung cấp, giới hạn tốc độ, ghi lại thời điểm và log để báo cáo (bài 4).

07

C1. TLS và HTTPS: biến chữ rõ thành chữ mã

8 phút
Kết nối TCPCó luồng dữ liệu
Bắt tay TLSThống nhất khóa, kiểm tra chứng chỉ
HTTP được mã hóaRequest và response

Phần A cho thấy vấn đề (chữ rõ), phần B cho thấy ai nằm trên đường đi. Giải pháp: , cơ chế mã hóa kênh truyền. là HTTP chạy bên trong kênh TLS, thường ở port 443. Sau khi TCP bắt tay xong, hai bên làm bắt tay TLS:

  1. Thống nhất phiên bản và thuật toán.
  2. Server gửi : gắn tên miền với khóa công khai, được ký bởi một tổ chức cấp chứng chỉ (CA) mà trình duyệt tin tưởng.
  3. Client kiểm tra: tên miền khớp, chưa hết hạn, chuỗi chứng chỉ dẫn tới CA tin cậy.
  4. Hai bên tạo khóa phiên chung và dùng khóa đó mã hóa mọi dữ liệu còn lại.

Kênh thiết lập xong cho ba bảo vệ, khớp với bài 1: bí mật (người ngoài không đọc được), toàn vẹn (sửa giữa đường bị phát hiện), xác thực máy chủ (đúng chủ của tên miền). Nhờ đó, request của Lan ở phần A1 đi qua router và nhà mạng dưới dạng dữ liệu mã hóa: người trung gian không đọc được cookie và không sửa được trang trả về mà không bị phát hiện.

HTTPS chưa giải quyết hết

HTTPS bảo vệHTTPS không bảo vệ
Nội dung, header, cookie trên đường truyềnNội dung website có trung thực hay không
Phát hiện bị sửa giữa đườngPhân quyền sai trong ứng dụng
Xác nhận đang nói với chủ của tên miềnDữ liệu đã bị sửa sẵn trên server (bài 4)
Metadata: IP, thời điểm, lượng dữ liệu, thường cả tên miền
Ổ khóa không có nghĩa là an toànKẻ lừa đảo đăng ký tên miền gần giống (ví dụ clb-example.com hay thay l bằng 1) và xin chứng chỉ hợp lệ cho chính tên đó. Kênh vẫn mã hóa nhưng bạn đang nói chuyện với sai bên. Luôn đọc tên miền trong thanh địa chỉ.

Cấu hình HTTPS đúng cho website của bạn

  • Chuyển hướng (301) mọi truy cập HTTP sang HTTPS, và bật header Strict-Transport-Security (HSTS) để trình duyệt tự dùng HTTPS từ lần sau.
  • Đặt cờ Secure cho cookie phiên (chỉ gửi qua HTTPS) và HttpOnly (script trong trang không đọc được cookie).
  • Theo dõi hạn chứng chỉ: hết hạn thì trình duyệt cảnh báo và người dùng không vào được.
  • Khi trình duyệt cảnh báo chứng chỉ, đừng bấm bỏ qua với trang có đăng nhập hay thanh toán.

BÀI TẬP 6 · 5 PHÚT

Phân tích ba cảnh báo chứng chỉ

Cho mỗi trường hợp, nêu: ý nghĩa, rủi ro, quản trị viên nên làm gì, người dùng nên làm gì.

  1. Chứng chỉ chỉ cấp cho clb.example, người dùng vào www.clb.example: "name mismatch".
  2. Chứng chỉ hết hạn hôm qua.
  3. Chứng chỉ tự ký (self-signed), không có CA nào đứng sau.
Xem đáp án
  1. Tên trong chứng chỉ không khớp tên đang truy cập. Có thể chỉ là cấu hình thiếu, cũng có thể là máy chủ khác. Quản trị: cấp chứng chỉ bao gồm cả www.clb.example (hoặc chuyển hướng về tên chuẩn). Người dùng: không nhập thông tin nhạy cảm, báo quản trị.
  2. Hết hạn: kênh vẫn mã hóa được nhưng không còn bảo đảm danh tính; thường do quên gia hạn. Quản trị: gia hạn, bật gia hạn tự động và cảnh báo trước hạn. Người dùng: chờ, đừng bỏ qua cảnh báo với trang thanh toán.
  3. Tự ký: không ai xác nhận chủ tên miền nên kẻ giữa đường tự tạo chứng chỉ giống hệt. Chỉ chấp nhận được trong môi trường thử nghiệm nội bộ. Quản trị: dùng CA công cộng miễn phí như Let's Encrypt cho website thật. Người dùng: không tin.
08

C2. Lab 2: so sánh HTTP và HTTPS bằng capture

12 phút

Lab này chứng minh phần C: cùng một kiểu yêu cầu, HTTP lộ nội dung còn HTTPS thì không. Lần này server ở ngoài máy, nên chọn giao diện Wi-Fi hoặc Ethernet thật thay vì loopback. Đóng ứng dụng không cần thiết và không đăng nhập thứ nhạy cảm trong lúc bắt gói. Dùng example.com làm website mẫu công khai.

  1. Bắt đầu capture trên đúng giao diện.
  2. Tạo truy vấn DNS:
TERMINAL
nslookup example.com
  1. Tạo yêu cầu HTTPS:
TERMINAL
curl --http1.1 -I https://example.com

--http1.1 ép HTTP/1.1 cho dễ quan sát TCP và TLS; -I chỉ lấy header (phương thức HEAD). Trên Windows PowerShell dùng curl.exe.

  1. Dừng capture. Lọc lần lượt dns, tcp, tls. Đối chiếu thời gian, IP và port với thao tác vừa làm.

Bạn sẽ thấy truy vấn DNS, bắt tay TCP, bắt tay TLS (trong gói Client Hello có tên miền ở phần Server Name), sau đó chỉ còn dữ liệu mã hóa ("Application Data"). Bạn không đọc được dòng GET hay header như ở Lab 1.

KẾT QUẢ CURL MINH HỌA · THỰC TẾ CÓ THỂ KHÁC
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1256
...

curl đọc được header vì nó là một đầu của kết nối và tự giải mã TLS. Người chỉ bắt gói từ bên ngoài không có khóa. Truy vấn DNS và kết nối HTTPS có thể ra IP khác nhau (cache, IPv4/IPv6, cân bằng tải), nên đừng ghép hai dòng chỉ vì chúng gần nhau.

BÀI TẬP 7 · 10 PHÚT

Điền bảng "ai thấy gì"

Từ hai lab, điền bảng cho một request HTTP (Lab 1) và một request HTTPS (Lab 2). Mỗi ô ghi "thấy" hoặc "không thấy" đối với người bắt gói ở giữa đường:

Thông tinHTTPHTTPS
IP và port đích??
Tên miền truy cập??
Đường dẫn và method (GET /…)??
Cookie??
Nội dung trang??
Truy vấn DNS (DNS thường)??

Câu hỏi thêm: nếu kẻ giữa đường cố sửa số tài khoản trong trang HTTPS, chuyện gì xảy ra?

Xem đáp án
Thông tinHTTPHTTPS
IP và port đíchThấyThấy
Tên miền truy cậpThấy (Host header, DNS)Thường thấy (DNS, Server Name trong TLS)
Đường dẫn và methodThấyKhông thấy
CookieThấyKhông thấy
Nội dung trangThấyKhông thấy
Truy vấn DNS (DNS thường)ThấyThấy

Sửa giữa đường: TLS kiểm tra toàn vẹn nên dữ liệu bị sửa làm bắt tay hoặc giải mã thất bại, kết nối bị ngắt thay vì hiển thị trang sai. Metadata (IP, tên miền, lượng dữ liệu) vẫn lộ, đó là lý do HTTPS giảm rủi ro chứ không xóa hết.

09

D. Chẩn đoán theo lớp và rà soát website

15 phút
DNSTên → IP
TCPKết nối
TLSKênh bảo vệ
HTTPYêu cầu / phản hồi

Hành trình đi qua nhiều lớp, và mỗi lớp lỗi cho một dấu hiệu khác. Biết thứ tự này, thay vì sửa ngẫu nhiên, bạn đọc dấu hiệu để chọn đúng lớp kiểm tra:

Dấu hiệuLớp nghi ngờKiểm tra tiếp
Không tra được tênDNSTên, resolver, loại bản ghi
Có IP nhưng không kết nối đượcMạng, firewall, dịch vụĐích, port, tuyến, firewall, server có lắng nghe không
TCP có, TLS lỗiChứng chỉ, cấu hình TLSTên khớp, hạn dùng, chuỗi tin cậy
TLS có, HTTP 403Quyền, cấu hình ứng dụngQuy tắc truy cập, đường dẫn
HTTP 200 nhưng dữ liệu saiỨng dụng, dữ liệu, cacheNghiệp vụ, bản ghi, lịch sử sửa (bài 4)

Khi gắn thêm tên miền mới vào cùng máy chủ, phải đúng cả bốn lớp: DNS trỏ đúng máy; web server biết tên mới thuộc website nào; chứng chỉ TLS có tên mới; ứng dụng chỉnh URL chuẩn và cookie. "Đã trỏ A record đúng" chỉ là một quan sát ở lớp DNS, chưa phải kết luận mọi thứ xong.

BÀI TẬP 8 · 8 PHÚT

Chẩn đoán năm tình huống

Với mỗi tình huống, nêu lớp nghi ngờ nhất và việc kiểm tra đầu tiên:

  1. nslookup clb.example báo "NXDOMAIN" (không tồn tại).
  2. Tra DNS ra IP đúng, curl treo rồi báo "connection timed out".
  3. Kết nối được nhưng trình duyệt báo "certificate expired".
  4. Trang mở được nhưng thành viên thường thấy 403 khi vào trang danh sách.
  5. Số tài khoản hiển thị sai nhưng mọi thứ trả mã 200 và có ổ khóa.
Xem đáp án
  1. DNS: bản ghi chưa có hoặc tên miền hết hạn. Kiểm tra bản ghi tại nhà đăng ký và hạn tên miền.
  2. Mạng/firewall/dịch vụ: gói đi mà không có phản hồi nên thường là firewall chặn hoặc server không lắng nghe. Kiểm tra port có mở, server có chạy, bắt gói xem có SYN mà không thấy SYN/ACK.
  3. TLS: chứng chỉ hết hạn. Gia hạn và bật tự động gia hạn.
  4. Ứng dụng: 403 là phân quyền (đúng cho thành viên thường nếu danh sách chỉ dành cho người phụ trách). Kiểm tra quy tắc quyền, không phải router.
  5. Dữ liệu: HTTPS và 200 không bảo đảm toàn vẹn. Xem lịch sử chỉnh sửa, quyền sửa, log (bài 4), đối chiếu bản đã duyệt.

BÀI TẬP 9 · Về nhà, 20 PHÚT

Rà soát một website bằng danh sách kiểm tra

Chọn website của câu lạc bộ (hoặc website bạn có quyền kiểm tra) và điền bảng. Mỗi mục ghi Đạt, Chưa đạt hoặc Chưa biết, kèm bằng chứng (lệnh đã chạy, ảnh chụp):

MụcCách kiểm tra
1. Tài khoản tên miền có MFA, email khôi phục còn thuộc quyềnĐăng nhập nhà đăng ký, xem cài đặt bảo mật
2. Tên miền và chứng chỉ còn hạn trên 30 ngàyXem hạn ở nhà đăng ký; bấm vào ổ khóa xem chứng chỉ
3. HTTP tự chuyển sang HTTPScurl -I http://tên-miền, tìm mã 301 và dòng Location: https://…
4. Có header HSTScurl -I https://tên-miền, tìm Strict-Transport-Security
5. Cookie phiên có Secure và HttpOnlyCông cụ nhà phát triển của trình duyệt, mục Application → Cookies
6. Chỉ mở các port cần thiếtHỏi nhà cung cấp hosting danh sách quy tắc firewall
7. File nhạy cảm không nằm trong thư mục công khaiThử truy cập đường dẫn tới file danh sách thành viên mà không đăng nhập

Chỉ kiểm tra website của mình hoặc nơi được cho phép; các lệnh trên là yêu cầu thông thường, không dò quét.

Xem đáp án

Không có đáp án duy nhất. Một báo cáo tốt: mỗi mục có kết quả và bằng chứng; mục "Chưa đạt" kèm cách sửa và người chịu trách nhiệm; mục "Chưa biết" ghi rõ cần ai xác nhận. Xếp thứ tự xử lý theo rủi ro (bài 2): mất quyền tên miền và lộ dữ liệu thành viên nặng hơn thiếu HSTS.

Tóm tắt

Tự kiểm tra · 5 câu có giải thích +
1. Request HTTP không mã hóa đi qua router của quán cà phê. Người điều khiển router đọc được gì?
2. Firewall chỉ mở 443. Một gói đến cổng 3306 sẽ ra sao?
3. Thấy hàng nghìn SYN từ nhiều IP mà không có ACK. Đây có thể là gì?
4. Trang có ổ khóa HTTPS nhưng tên miền là clb-example.com (giả). Điều gì đúng?
5. Tra DNS ra IP đúng nhưng báo "certificate name mismatch". Nên làm gì?

Ghi chú cá nhân +

Tự lưu trên trình duyệt. Không nhập thông tin bí mật.

Có thể bỏ đánh dấu bất cứ lúc nào.
Tài liệu tham khảo chính thức

Tra thuật ngữ