Lời nói đầu
Digital Forensic – Điều tra số là là một ngành khoa học điều tra dựa trên những dữ liệu được lưu trữ trên thiết bị số nhằm mục đích tìm kiếm, thu thập các bằng chứng và tiến hành phân tích các bằng chứng đó để phục vụ công tác điều tra, truy vết tội phạm công nghệ cao.
Qua một thời gian được học hỏi và xử lý các case thực tế, mình xin chia sẻ những kiến thức hạn hẹp đó qua loạt bài về Digital Forensic này và mình xin bắt đầu bằng series bài Windows Registry.
Trong điều tra số, việc hiểu, nắm được cấu hình, cài đặt của hệ thống, hay xác định được một số hành vi của người dùng trên máy tính đó là một việc rất quan trọng. Và trên hệ điều hành Windows, những thông tin hữu ích này có thể được tìm thấy tại Registry.
Trước khi đi vào tìm kiếm và phân tích các bằng chứng hữu ích trong Registry chúng ta cần phải biết được Registry là gì? Nó nằm ở đâu? Cấu trúc của nó như thế nào?. Và ở phần đầu tiên này, chúng ta sẽ bắt đầu tìm hiểu những điều cơ bản về Registry để trả lời cho câu hỏi đó, nó cung cấp cho bạn nền tảng cần thiết để hiểu cách đọc thông tin từ Registry.
Lưu ý rằng, đối với những bạn mới bắt đầu tìm hiểu về registry hay forensic để hiểu được những phần lý thuyết ban đầu sẽ khá khô khan này không có gì tốt hơn là tiến hành thực nghiệm và gần gũi nhất là ngay trên máy tính (Windows OS) của bạn! Vì bạn có thể đã hiểu hơn về máy tính của bạn hay thói quen sử dụng của bản thân trên máy đó một phần nào đó rồi.
1. Registry là gì?
Registry có thể được coi như một cơ sở dữ liệu có cấu trúc của Windows. Registry được sử dụng để lưu trữ thông tin cấu hình, cài đặt của hệ điều hành và cả của các services và ứng dụng. Vì vậy, nó là một nguồn thông tin hữu ích của các chứng cứ trên máy tính.
Nhưng có một lưu ý rằng không phải là tất cả các ứng dụng đều sử dụng registry để lưu cấu hình, cài đặt của nó, một số chương trình sử dụng tập tin .XML hay .INI để lưu cấu hình.
Ngoài ra Registry còn hỗ trợ cấu trúc mutil-profile lưu trữ cài đặt của người dùng, mỗi người dùng sẽ có cấu hình khác nhau dành riêng cho tài khoản của họ, một ví dụ đơn giản như là UserA cài đặt Unikey khởi động cùng Windows còn UserB thì không cài chương trình đó, Registry sẽ ghi lại những điều này và lưu vào thư mục riêng của mỗi người dùng. Chúng ta đi sẽ thảo luận chi tiết hơn về điều này ở phần sau.
2. Registry Strucure
Trên HĐH Windows bạn có thể sử dụng Registry Editor:
Registry có cấu trúc cụ thể, được chia thành 2 thành phần: key và value. Trong đó key giống như folder, một key có thể chứa thêm nhiều key hoặc chứa các value. Đường dẫn đi từ key cha sang key con hơi giống với đường dẫn của thư mục trong Windows và tên của nó không quan trọng có viết hoa hay thường. Có một số thuật ngữ cần lưu ý:
- Root key: Trong Windows từ Win8.1 có năm root keys, mỗi root key có một mục đích cụ thể. Nó còn có tên khác như là HKEY hay hive.
- Subkey: subkey giống như một thư mục con trong một thư mục.
- Key: Key là một thư mục trong registry có thể chứa các giá trị hoặc thư mục bổ sung. Cả root key và subkey đều là key.
Ví dụ:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run, chứa một loạt các giá trị là file thực thi được khởi động tự động khi người dùng đăng nhập. Root key là HKCU (HKEY_CURRENT_USER), key này lưu trữ các Subkey: SOFTWARE, Microsoft, Windows, CurrentVersion và Run. Và Key Run chứa các Value.
Với mỗi root key nói riêng và các key nói chung, sẽ chỉ có những phần mềm nhất định được truy cập vào vì lý do bảo mật. Chính vì thế mà mỗi người dùng, phần mềm, dịch vụ sẽ chỉ thấy những key mà chúng được phép xem mà thôi.
Mỗi value có ba thành phần: Name, Type và Data, ví dụ như trong hình trên. Tiếp theo là một số Type của value:
- REG_NONE: Không có loại
- REG_SZ: Chuỗi kí tự bất kì
- REG_BINARY: Dữ liệu dạng nhị phân
- REG_DWORD: Một số 32-bit
Ngoài ra còn một số value types khác các bạn có thể tìm đọc tại: https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry-value-types
3. Registry Root Keys
Registry được chia thành 5 root key:
- HKEY_LOCAL_MACHINE (HKLM)
- HKEY_CURRENT_USER (HKCU)
- HKEY_CLASSES_ROOT
- HKEY_CURRENT_CONFIG
- HKEY_USERS
Hai root key được sử dụng phổ biến nhất là HKLM và HKCU. Một số key là khóa ảo cung cấp cách tham chiếu thông tin registry.
a) HKEY_CLASSES_ROOT
Rootkey này chứa các subkey, mỗi subkey được đặt tên theo một extention có thể được tìm thấy trong hệ thống, chẳng hạn nhu .exe hay .evxt, … Dựa vào những key này chúng ta có thể biết được chương trình nào được sử dụng để mở một định dạng file cụ thể, ví dụ như với file có .evxt extention sau đây:
Như trong hình tên, keyname .evtx có value data là “evtxfile”. Sau đó chúng ta tìm kiếm subkey có subkey name liên quan đến “evtxfile”:
Kết quả cho ta một key có tên evtxfile nằm trong cùng rootkey HKCR. Với kết quả tìm được, có thể xác định chương trình nào đã được sử dụng để chạy file dạng .evxt và ở trường hợp này chính là Event Viewer, nó còn cho biết vị trí trong filesystem:
Thực chất, những thông tin trong rootkey HKCR này được lấy từ hai nguồn:
- HKEY_LOCAL_MACHINE\Software\Classes
- HKEY_CURRENT_USER\Software\Classes
Thông thường HKCR chỉ ánh xạ từ HKLM\Software\Classes, đây có thể coi như là mặc định nhưng nếu user cụ thể nào đó sử dụng một chương trình khác để mở một định dạng file HKCU\Software\Classes sẽ được sử dụng và chỉ liên kết với user cụ thể đó.
Ví dụ khi user sử dụng chương trình khác nhau để mở file PDF, khi user đăng nhập vào hệ thống, hệ điều hành sẽ load profile của user đó bao gồm cả tùy chọn chương trình để mở file PDF mà họ đã cài đặt và lúc này chính là trong HKCU\Software\Classes.
b) HKEY_LOCAL_MACHINE
Chứa thông tin cấu hình, cài đặt của máy tính. Rootkey này dùng cho bất kỳ user nào. Rootkey này có 5 subkeys chính:
- System: Chứa cấu hình hệ thống, chẳng hạn như computer name, system time zone, network interfaces.
- Software: Chứa cài đặt, cấu hình về những ứng dụng được cài đặt trên hệ thống và những services của hệ điều hành.
- SAM: Security Account Manager, chứa thông tin bảo mật về user và group.
- Security: Chứa chính sách bảo mật của hệ thống.
- Hardware: Thông tin về thiết bị hardware kết nối tới hệ thống. Những thông tin này được lưu trữ trong suốt quát trình hệ thống khởi động.
c) HKEY_USERS
Lưu những thông tin của tất cả các user, mỗi user là một nhánh với tên là số ID của user đó. Hãy cùng xem ví dụ sau đây:
- Default: Đây là cấu hình mặc định cho bất ký user nào và nó nằm tại
%SystemDriver%\Users\Default
- S-1-5-18: Đây là system profile và nó nằm tại
%systemroot%\system32\config\systemprofile
- S-1-5-19: Liên quan đến LocalService nằm tại
%systemroot%\C:\Windows\Serviceprofiles\LocalService
- S-1-5-20: Liên quan đến NetworkService tại
%systemroot%\C:\Windows\Serviceprofiles\NetworkService
- S-1-5-21-3482516662-285582109-1244947143-1001: Đây chính là người dụng hiện đăng đăng nhập với SID đầy đủ của họ. Và nó nằm tại C:\User\[username].
- Còn mục S-1-5-21-3482516662-285582109-1244947143-1001-Classes chính là phần chúng ta đã nhắc tới trong HKEY_CLASSES_ROOT.
d) HKEY_CURRENT_USER
Lưu những thông tin cho người dùng đang đăng nhập. Các thư mục, màu màn hình, cài đặt Control Panel được lưu trữ tại đây. Thông tin này được liên kết với profile của user. Nó là nhánh con của HKEY_USERS.
Và rootkey cuối cùng HKEY_CURRENT_CONFIG: Lưu thông tin về phần cứng hiện tại đang dùng.
4. System hives
Ở phần trên, chúng ta đã quyết được vấn đề Registry là gì và cấu trúc của nó. Đây là những gì thể hiện trên Registry editor để dễ dàng đọc và chỉnh sửa nhưng thực chất dữ liệu nằm ở đâu, phần tiếp theo chúng ta sẽ đi tìm hiểu vị trí lưu registry.
Windows Registry không đơn giản là một file mà là một tập hợp các file riêng lẻ, gọi là hive. Mỗi hive chứa một nhánh Registry. Hầu hết được lưu trong thư mục “Windows\System32\Config”. Cụ thể:
HKEY_LOCAL_MACHINE\SYSTEM: \system32\config\system
HKEY_LOCAL_MACHINE\SAM: \system32\config\sam
HKEY_LOCAL_MACHINE\SECURITY: \system32\config\security
HKEY_LOCAL_MACHINE\SOFTWARE: \system32\config\software
Các registry hives này là DEFAULT, SAM, SECURITY, SOFTWARE và SYSTEM. Các tệp tương ứng với ý nghĩa của chúng trong registry.
Tất cả các tệp hệ thống sẽ nằm trong HKEY _LOCAL_MACHINE, chúng chứa thiết lập hệ thống, tệp khởi động, cấu hình máy và các tệp mặc định khác.
SYSTEM, SOFTWARE, SAM, SECURITY hive mình đã đề cập ở phần trên.
Còn AMCACHE.HVE là một hive mới, hive này xuất hiện bắt đầu từ Windows 8 và nó cũng được cập nhật trên Windows 7. Hive này chứa thông tin liên quan đến việc theo dõi các tệp thực thi, nơi thực thi và một số thông tin liên quan.
5. User Registry Hives
- Đối với hệ thống máy tính có nhiếu user. Mỗi user đều sẽ có một registry hive riêng.
- Registry hive theo từng cá nhân sẽ cung cấp cho chúng ta thông tin về hoạt động của họ trên máy tính và đây là một thông tin rất quan trọng trong điều tra số.
NTUSER.DAT
Ví trí của file trên các OS:
- C:\Documents and Settings\<username>\NTUSER.dat (XP)
- C:\Users\<username>\NTUSER. dat (Win7-Win10)
Như đã đề cập, trong mỗi tài khoản người dùng là một file có tên NTUSER.DAT. File này chứa các cài đặt và tùy chọn cho mỗi người dùng riêng biệt. Mỗi khi bạn có thao tác nào đó cài đặt chương trình mới nào đó, hay các tùy chọn như đặt mặc định cho một máy in mới, Windows sẽ cần ghi nhớ tùy chọn đó của bạn vào lần tải tiếp theo.
Đầu tiên những thông tin mới này sẽ được lưu vào HKEY_CURRENT_USER. Và sau đó, khi bạn tắt máy hay đăng xuất, những thông tin đó sẽ được lưu vào file NTUSER.DAT. Và vào lần đăng nhập sau đó, Windows sẽ tải NTUSER.DAT vào bộ nhớ và tất cả các tùy chọn của bạn sẽ tải lại vào Registry.
Registry có thể được sử dụng để liệt kê các tệp được sử dụng gần đây nhất, các tệp cuối cùng đã tìm kiếm trên ổ cứng, các URL được nhập cuối cùng mà người dùng đã nhập vào windows trình duyệt của mình. Nó cũng có thể hiển thị các lệnh cuối cùng được thực thi trên hệ thống cũng như các tệp đã được mở, …
USRCLASS.DAT
Trong Win7-Win10, file này nằm tại:
C:\Users\<username>\AppData\Local\Microsoft\Windows\USRCLASS.DAT
Hive chứa một số thông tin chính liên quan đến thông tin thực thi của chương trình. Key này sẽ cho chúng ta cho biết rằng liệu người dùng đã mở hay đóng thư mục nào đó chưa?.
Mục đích chính của UsrClass.dat là hỗ trợ registry root ảo hóa cho User Account Control (UAC).
Tổng kết
Bài viết này mình đã trình bày về khái niệm, cấu trúc của Registry và vị trí lưu của chúng. Việc hiểu được vị trí lưu trữ và cách đọc Registry sẽ cần thiết cho việc đi phân tích chúng dõ hơn. Hẹn các bạn ở phần tiếp theo
By,
T4fi_RE_Team