<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Windows Internals on Roduygo | Blog</title><link>/categories/windows-internals/</link><description>Recent content in Windows Internals on Roduygo | Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Fri, 08 May 2026 16:00:00 +0700</lastBuildDate><atom:link href="/categories/windows-internals/index.xml" rel="self" type="application/rss+xml"/><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>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>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>