System configuration

Phần trước mình đã trình bày về phân tích user information thông qua registry. Phần này mình sẽ phân tích những cấu hình, cài đặt của hệ thống (System configaration).

Khi tiến hành phân tích một hệ thống, người điều tra cần phải hiểu được hệ thống đó để không mắc những sai lầm cơ bản nhất. Nắm được những thông tin cơ bản của hệ thống như múi giờ, version hệ điều hành, network interface, … sẽ giúp chúng ta phân tích hệ thống một cách chính xác hơn. Những thông tin này nằm tại các registry hive SYSTEM và SOFTWARE tại C:\Windows\System32\Config.

1. Xác định phiên bản Microsoft OS

Vì các phiên bản hệ điều hành khác nhau thì Registry cũng có sự khác biệt nhất định, các đường dẫn thư mục, các artifacts (hiện vật) và thậm chí các chương trình mặc định cũng có thể khác nhau. Nên việc xác định phiên bản hệ điều hành windows hiện tại rất quan trọng.

Và để xác định được điều đó, ta kiểm tra registry key:

Key: SOFTWARE\Microsoft\Windows NT\CurrentVersion

Key này sẽ cho chúng ta thông tin về hệ điều hành như Install Date, Current Version, Current Build,… . Dưới đây là ví dụ (sử dụng Registry Explorer):

Như trong hình trên, có thể xác định được Windows OS version là Windows 10 Ver 2009. InstallDate là 1619410410, chuyển sang định dạng Unix hex 32 bit, nếu như sử dụng Registry Explorer, bạn có thể nhấn chuột phải và chọn Data Interpreter và sẽ cho kết quả như sau:

Còn đối với InstallTime là một giá trị mới xuất hiện kể từ Windows 10, được lưu dưới dạng Windows 64-bit time:

Một ví dụ khác với Windows 7 cho thấy sự khác nhau của key này giữa các OS:

2. Current ControlSet

Trước khi đi vào phân tích, chúng ta nhắc lại một chút về quá trình khởi động của máy tính. Ngay sau khi khởi động nguồn, chương trình đầu tiên chạy là BIOS – Basic Input Output System kiểm tra các thiết bị phần cứng (như CPU, RAM, video card, disk driver và adapter). Sau đó xác định thiết bị lưu trữ nơi chứa OS để khởi động (chẳng hạn như từ HDD hay từ USB) và đọc MBR (Master Boot Record), chạy OS loader (đối với windows 10 là Winload.exe) tải các driver cần thiết để khởi động windows Kernel. Và cuối cùng là quá trình tìm các thiết lập Registry, các driver bổ sung thêm, … .

Và ControlSet là gì? ControlSet chính là một registry subkey, nó chứa các cài đặt cấu hình của hệ thống, những cài đặt cấu hình này được sử dụng và rất cần thiết trong quá trình khởi động của hệ thống (system boot). Chẳng hạn như trong subkey này chứa thông tin về driver và service.

Trong trường hợp như hình trên, ControlSet001 chính là CurrentControlSet. Nhưng cũng có thể xuất hiện tới hai ControlSet chẳng hạn như ControlSet001 và ControlSet002, vậy điều này có ý nghĩa gì? Ví dụ như hình dưới đây:

Câu trả lời là ControlSet001 thường là ControlSet mà bạn vừa khởi động vào máy tính. Đây thường là phiên bản cập nhật mới nhất của ControlSet. Còn ControlSet002 là phiên bản “Last Known Good”, phiên bản này là phiên bản đã khởi động thành công trước đó và được coi là “good”. Nếu trong trường hợp có điều bất thường gì đó xảy ra trong chu kỳ khởi động hiện tại (Controlset001) thì nó sẽ load ControlSet002. Vậy ControlSet00l sẽ là lần khởi động thành công gần nhất và ControlSet002 sẽ là lần khởi động thành công trước đó.

Một số người hiểu sai hai ControlSet00x này là một phiên bản “bình thường” và phiên bản “dự phòng”. Điều này đúng theo một nghĩa nào đó, tuy nhiên trên thực tế, bạn có thể đang khởi động từ một trong hai ControlSet này. Không có ControlSet chính hoặc phụ mà chúng có thể được thay phiên tuần hoàn. Có nghĩa là, nếu bạn thường sử dụng ControlSet001, sau đó khởi động không thành công, thì bây giờ bạn có thể đang sử dụng ControlSet002/003 cho đến khi bạn khởi động không thành công lần tiếp theo, lúc đó bạn sẽ chuyển trở lại. Khi bạn khởi động đúng cách, các thay đổi sẽ được ghi vào bản sao khác, do đó giữ cho nó được cập nhật.

Vậy làm sao để biết hiện tại ControlSet nào được sử dụng? Chúng ta sẽ cần phân tích key HKLM\SYSTEM\Seclect để biết câu trả lời:

Trong key này có các Value Name:

  • Default: Controlset Number (ví dụ: 001 = ControlSet001) mà hệ thống đã chỉ định để sử dụng ở lần khởi động tiếp theo.
  • Current: ControlSet cuối vừa sử dụng để khởi động hệ thống.
  • Failed: ControlSet không khởi động Windows thành công. Giá trị này được cập nhật khi tùy chọn LastKnownGood được sử dụng để khởi động hệ thống
  • LastKnownGood: trỏ đến ControlSet đã được sử dụng trong phiên người dùng cuối cùng. Khi người dùng đăng nhập, ControlSet LastKnownGood được cập nhật với thông tin cấu hình từ phiên người dùng trước.

Như trong ví dụ trên, bản ControlSet vừa được sử dụng để khởi động hệ thống là ControlSet001. Bản ControlSet mặc định mà sẽ được sử dụng khởi động ở lần tiếp theo là ControlSet001. Và ControlSet002 là bản LastKnownGood.

3. ComputerName

Để xác định được Computer Name khá đơn giản, đôi khi việc này không được để ý tới nhưng nó cũng có ích để có thêm thông tin khi được liên kết với log files, network connections, và các hành vi khác… hay là để ghi chép lại báo cáo.

Để xác định ComputerName, chúng ta tìm đến registry key:

SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

Computer Name cũng sẽ xuất hiện ở các vị trí khác trong toàn bộ hệ thống, nhưng mình thường sử dụng tên này là để đảm bảo đang điều tra đúng PC.

4. TimeZone

Khi phân tích Registry hay log nào đó, có rất nhiều dữ liệu liên quan đến thời gian, nhưng có điều thường xảy ra là việc xác định các thời gian này bị sai lệch và có thể dẫn tới những nhận định, kết luận sai. Đó có thể là do việc chưa xác định được time zone (múi giờ) của hệ thống đang điều tra dẫn tới sự sai lệch này.

Vì vậy bạn cần phải xác định được time zone của hệ thống. Hầu hết registry times and last write times sẽ được ghi lại theo giờ UTC, nhưng thời gian tổng thể của hệ thống chẳng hạn như log file và time-based information lại gắn với múi giờ cụ thể (Local Time).

Xác định time zone dựa vào key:

SYSTEM\CurrentContro1Set\Control\TimeZoneInformation

Bạn nên đặt thời gian máy phân tích hoặc cài đặt thời gian trong công cụ phân tích (nếu có) của mình thành UTC để tránh bất kỳ sai lệch nào từ một công cụ forensic và có khả năng dẫn đến việc hiểu sai dữ liệu liên quan đến thời gian. ActiveTimeBias là độ lệch múi giờ của LocalTime so với UTC được tính bằng phút. Ví dụ như trong hình trên, Time Zone được đặt là SE Asian Standard Time (UTC +7). Có thể tính toán Localtime bằng cách UTC time trừ đi ActiveTimeBias.

Một số công thức trong việc chuyển đổi thời gian:

UTC = Local Time + ActiveTimeBias

Local Time = UTC – ActiveTimeBias

Standard Time = Bias + StandardBias

Daylight Time = Bias + DaylightBias

Các bạn có thể tham khảo thêm về các trường khác tại: https://docs.microsoft.com/en-us/windows/win32/api/timezoneapi/ns-timezoneapi-time_zone_information.

Cũng có một số trường hợp  khá thú vị do sự chênh lệch giữa thời gian sáng, tối vào các thời điểm khác nhau trong năm mà quốc gia, khu vực đó sẽ có sự điều chỉnh khác nhau về thời gian chẳng hạn như đặt lại thời gian đi làm sớm hơn 1 h vào mùa hè và đặt lại lùi đi 1 h vào mùa đông, điều này cũng có thể sẽ làm ảnh hưởng đến việc xác định time zone của hệ thống.

Phần System configuration này mình sẽ tiếp tục trình bày ở phần tiếp theo!

By,

T4fi, RE_TEAM

594 lượt xem