# Chapter 5: User Environment and Interaction Dectection

Khi các sandbox phân tích phần mềm độc hại tự động ngày cành giỏi hơn trong việc tự ẩn mình khỏi malware né tránh, các tác giả malware phải thích nghi. Một chiến thuật họ sử dụng là liệt kê môi trường người dùng và sự tương tác của người dùng với môi trường đó. Như đã đề cập từ chương trước, thiết lập của người dùng thông thường có các tab trình duyệt mở, nhiều cửa sổ mở và ứng dụng đang sử dụng, và tương tác chuột và bàn phím thường xuyên, làm cho nó khá khác biệt so với môi trường sandbox. Một sandbox phân tích malware tự động được thiết kế để khởi động, kích hoạt một mẫu malware và sau đó nhanh chóng tắt. Nó có thể không thể hiện bất kỳ hành vi người dùng bình thường nào hoặc các chỉ báo khác cho thấy đó là một hệ thống người dùng cuối hợp lý.

Malware hiện đại có thể tìm kiếm bằng chứng về một người dùng thực bằng cách tìm kiếm các hành vi người dùng điển hình, chẳng hạn như cookie trình duyệt đã tải xuống và cài đặt hình nền máy tính hoặc tương tác chuột và bàn phím.

## 5.1 Browser Cookies, Cache, and Browsing History

Một số malware có thể truy xuất cookie internet, bộ nhớ đệm và lịch sử duyệt web của host. Cookie là các tệp nhỏ mà các trang web lưu vào đĩa, thường để lưu trữ cấu hình và tùy chọn trang web của người dùng. Tùy thuộc vào trình duyệt và phiên bản, cookie có thể được lưu trữ trong các tệp riêng lẻ hoặc trong một cơ sở dữ liệu nhỏ, chẳng hạn như SQLite.&#x20;

Bộ nhớ đệm là một tệp hoặc nhóm tệp lưu trữ tài nguyên trang web như hình ảnh để trang tải nhanh hơn vào lần tiếp theo người dùng truy cập. Giống như cookie. bộ nhớ đệm có thể được lưu trữ trong nhiều tệp hoặc trong một cơ sở dữ liệu. Cuối cùng, lịch sử duyệt web đơn giản là danh sách các trang web đã truy cập trước đó, thường được lưu trữ dưới dạng một hoặc nhiều tệp cơ sở dữ liệu.

Người dùng cuối điển hình có thể có hàng trăm hoặc hàng nghìn tệp cookie và bộ nhớ đệm được lưu trữ và lịch sửa duyệt internet lớn, trong khi một hệ thống sandbox hoặc phân tích malware điển hình có thể không có bất kỳ tệp nào. Malware có thể lợi dụng sự khác biệt này bằng cách đếm số lượng cookie, mục nhập bộ nhớ đệm hoặc các trang web đã truy cập trước đó và kiểm tra nó so với một giá trị ngưỡng. Ví dụ, nếu máy nạn nhân chỉ có 5 mục trong lịch sử duyệt web, malware có thể giả định rằng nó đang chạy trong môi trường sandbox sạch.

Mỗi trình duyệt đều có vị trí tiêu chuẩn cho cookie, tệp bộ nhớ đệm và lịch sử duyệt web mà malware có thể cố gắng truy xuất. Dưới đây là một số vị trị phổ biến nhất:

* Chrome
  * `C:\Users<user>\AppData\Local\Google\Chrome\User Data\Default`
  * `C:\Users<user>\AppData\Local\Google\Chrome\User Data\Default\Cache`
  * `C:\Users<user>\AppData\Local\Google\Chrome\User Data\Default\History`
* Firefox
  * `C:\Users<user>\AppData\Local\Mozilla\Firefox\Profiles`
  * `C:\Users<user>\AppData\Roaming\Mozilla\Firefox\Profiles`
* Internet Explorer
  * `C:\Users<user>\AppData\Roaming\Microsoft\Windows\Cookies`
  * `C:\Users<user>\AppData\Local\Microsoft\Windows\Temporary Internet Files`
  * `C:\Users<user>\AppData\Local\Microsoft\Windows\WebCache`
  * `C:\Users<user>\AppData\Local\Microsoft\Internet Explorer\Recovery`
* Edge
  * `C:\Users<user>\AppData\Local\Packages<package name>\AC\MicrosoftEdge\User`
  * `C:\Users<user>\AppData\Local\Packages<package name>\AC\MicrosoftEdge\Cache\`

Danh sách trên là không đầy đủ, và vị trí có thể thay đổi, tất nhiên, tùy thuộc vào hệ điều hành Windows và phiển bản trình duyệt đang sử dụng.

Nếu phát hiện malware truy xuất qua các tệp này (có thể bằng cách gọi các hàm Windows như `FindFirstFile` và `FindNextFile`), nó có thể đang cố gắng phát hiện môi trường phân tích. Malware cũng có thể sử dụng `FindFirstUrlCacheEntry` và `FindNextUrlCacheEntry`, truy xuất tuần tự các mục nhập bộ nhớ đệm trình duyệt. Tuy nhiên, các API này chỉ dành riêng cho bộ nhớ đệm trình duyệt Microsoft. Một lần nữa, phương pháp truy xuất sẽ phụ thuộc phần lớn vào trình duyệt và phiên bản đang được sử dụng.

Các trình duyệt và phiên bản cũ hơn thường sử dụng nhiều tệp nhỏ để lưu trữ cookie, bộ đệm và lịch sử, trong khi các trình duyệt hiện đại sử dụng cơ sở dữ liệu. Nếu cookie, bộ đệm và lịch sử trình duyệt được lưu trữ trong các tệp cơ sở dữ liệu, malware có thể cố gắng tương tác trực tiếp với chúng. Ví dụ, trong tệp thực thi malware hoặc không gian địa chỉ bộ nhớ quy trình của nó, bạn có thể phát hiện các chuỗi tĩnh tham chiếu đến thư mục trình duyệt nhất định (chẳng hạn như `C:\Users\AppData\Local\Google\Chrome\User Data\Default\History`), tiếp theo là một truy vấn cơ sở dữ liệu như:

```sql
SELECT title FROM urls
```

Lệnh này có thể được sử dụng để liệt kê tất các lịch sử web trong cơ sở dữ liệu lịch sử.

## 5.2 Recent Office Files

Sử dụng các tệp Office gần đây là một cách tốt nhất để malware xác định liệu nó có đang chạy trong phòng thí nghiệm phân tích hay không. Một người dùng cuối thực sự có thể đã mở nhiều tệp với các ứng dụng Microsoft Office, và Windows theo dõi những tệp đó. Khi bạn mở một tài liệu trong Word, ví dụ, tệp sẽ được thêm vào danh sách tệp gần đây của Office.

Thông tin về các tệp Office gần đây của bạn được chứa trong khóa registry `HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office<Office_Version_Number>`, dưới một khóa con cụ thể có tên Excel, Word,... Thông tin thêm có thể được lưu trữ trong thư mục hệ thống tệp `C:\Users\AppData\Roaming\Microsoft\Office\Recent`. Nếu bạn phát hiện malware truy xuất khóa registry hoặc đường dẫn thư mục này (sử dụng bất kỳ hàm Windows nào đã đề cập trước đó để liệt kê tệp và registry), rất có thể nó đang cố gắng xác định các tài liệu Office gần đây để xác định liệu host của nạn nhân có đang sử dụng bởi một người dùng thực hay không.

## 5.3 User Files and Directories

Một người dùng điển hình có thể có nhiều tệp trên hệ thống trong các thư mục người dùng khác nhau, chẳng hạn như Documents, Pictures, Desktop,... Sử dụng các phương pháp truy xuất tệp được mô tả ở chapter 4, malware có thể truy xuất các thư mục này để cảm nhận liệu host có phải alf người dùng thực hay không. Nếu malware phát hiện thiếu hoạt động của người dùng trong các thư mục này, nó có thể kết luận rằng nó đang chạy trong môi trường sandbox hoặc phân tích và thực hiện các hành động né tránh.

## 5.4 Desktop Wallpaper

Một phương pháp đặc biệt sáng tạo mà phần mềm độc hại sử dụng để phát hiện máy phân tích là kiểm tra hình nền đang được cấu hình, vì người dùng thực thường thay đổi nền máy tính của họ từ mặc định của Windows. Để làm điều này, malware có thể đơn giản kiểm tra giá trị của registry Wallpaper: `HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Desktop\General\WallpaperSourcee`. Nếu người dùng vẫn sử dụng nền Window mặc định, giá trị WallpaperSource sẽ chứa đường dẫn cảu hình nền đó, nằm ở đâu đó trong thư mục `C:\Windows`. Mặt khác, nếu người dùng đã cấu hình nền máy tính tùy chỉnh, giá trị có thể chứa chẳng hạn: `C:\Users\Pictures\my_wallpaper.jpg`.

## 5.5 Desktop Windows

Một số biến thể phần mềm độc hại đếm số lượng cửa sổ máy tính đang hoạt động hoặc tìm kiếm các cửa sổ cụ thể. Chúng có thể sử dụng hàm GetForegroundWindow để kiểm tra xem cửa sổ nổi bật (nghĩa là cửa sổ hiện đang hoạt động) có thay đổi không. Trong môi trường sandbox phân tích phần mềm độc hại tự động, cửa sổ đang hoạt động có thể sẽ không thay đổi nhiều. Một số biến thể malware biết điều này và có thể sử dụng nó chống lại hệ thống phân tích để phát hiện. Trong ví dụ này, malware đang kiểm tra xem cửa sổ nổi bật có thay đổi sau 5 giấy hay không:

```nasm
loc_34E642:
call GetForegroundWindow
mov dword ptr ds:[ebx+WindowHandle], eax
push 1388h ; "5s"
call Sleep
call GetForegroundWindow
cmp dword ptr ds:[ebx+WindowHandle], eax
je loc_34E642
```

Đầu tiên, malware gọi hàm `GetForegroundWindow`, hàm trả về một handle đến cửa sổ nổi bật hiện tại và lưu trữ nó trong bộ đệm tại đại chỉ `[ebx+WindowHandle]`. Tiếp theo, malware gọi hàm `Sleep`, hàm này sẽ tạm dừng mẫu trong 5 giây. Malware thực hiện cuộc gọi thứ 2 đến `GetForegroundWindow` và sau đso so sánh các giá trị handle của 2 cuộc gọi `GetForegroundWindow` bằng lệnh `cmp dword ptr ds:[ebx+WindowHandle], eax`. Nếu các handle khớp nhau (có nghĩa là cửa sổ nổi bật không thay đổi), quy trình này sẽ lặp lại. Mẫu malware này có thể tiếp tục lặp vô hạn, có thể hoàn toàn tránh được phân tích trong sandbox tự động, hoặc nó có thể lặp lại vài lần và sau đó tự kết thúc. Cả 2 kịch bản đều đưa ra một thách thức thú vị cho một sandbox phân tích phần mềm độc hại.

May mắn thay, nhiều sandbox hiện đại mô phỏng hoạt động của người dùng để chống lại kỹ thuật này. Một số sandbox thậm chí có thể chạy ở chế độ tương tác, cho phép bạn tương tác trực tiếp với phần mềm độc hại bên trong sandbox, cũng giúp vượt qua loại chiến thuật này.

Ngoài ra, một mẫu phần mềm độc hại có thể sử dụng hàm `EnumWindows`, hàm này trả về số lượng cửa sổ mở trên màn hình của người dùng. Windows tạo ra nhiều đối tượng cửa sổ vì nhiều lý do khác nhau, vì vậy trong một môi trường người dùng bình thường, số lượng này sẽ khá cao.

```nasm
push ebx
call EnumWindows
pop eax
cmp eax, 20
jle terminate_process
```

Hàm `EnumWindows` nhận một tham số mà về cơ bản đóng vai trò như một con trỏ đến một bộ đệm sẽ lưu trữ kết quả của cuộc gọi hàm (`push ebx`). Sau khi `EnumWindows` được gọi, lệnh `pop eax` sẽ lấy con trỏ từ bộ đệm `ebx` ra khỏi stack và đưa vào eax. Phần mềm độc hại so sánh giá trị `EnumWindows` (hiện đã được lưu trong `eax`) với 20, và nếu số lượng cửa sổ mở ít hơn hoặc bằng giá trị này, mẫu sẽ tự kết thúc. Mẫu này giả định rằng một sandbox phân tích phần mềm độc hại sẽ có 20 cửa sổ hoặc ít hơn được kích hoạt tại một thời điểm.

Ngoài việc liệt kê số lượng cửa sổ đang hoạt động trên hệ thống nạn nhân hoặc cảm nhận xem cửa sổ nổi bật có đang thay đổi hay không, phần mềm độc hại cũng có thể tìm kiếm một cửa sổ ứng dụng cụ thể. Điều này hữu ích vì hai lý do. Đầu tiên, mẫu phần mềm độc hại có thể tìm kiếm các cửa sổ mở chạy các ứng dụng thường được sử dụng bởi người dùng cuối điển hình: các sản phẩm Microsoft Office, chương trình email, trình duyệt, v.v. Nếu đủ các ứng dụng này đang mở, phần mềm độc hại có thể hợp lý giả định rằng nó không đang chạy trong phòng thí nghiệm của nhà phân tích phần mềm độc hại. Thứ hai, mẫu phần mềm độc hại có thể tìm kiếm một số công cụ phân tích phần mềm độc hại, tương tự như những gì tôi đã mô tả trong phần "Process" ở Chapter 4.

Ví dụ, phần mềm độc hại có thể tìm kiếm các cửa sổ mở chứa thuật ngữ Procmon, Fiddler hoặc Wireshark, thường bằng cách gọi hàm `EnumWindows` hoặc `FindWindow`. Cũng như việc tìm kiếm một quy trình cụ thể, nó sẽ lặp qua các cửa sổ mở và so sánh tiêu đề của từng cửa sổ với một chuỗi, và kết quả có thể cho thấy rằng nó đang bị phân tích.

## 5.6 Mouse and Keyboard Interaction

Người dùng hàng ngày gần như luôn sử dụng chuột để di chuyển con trỏ xung quanh màn hình, cho dù họ đang duyệt internet, chỉnh sửa tài liệu, hay chơi trò chơi điện tử. Một số phần mềm độc hại có thể phát hiện hoạt động này bằng cách sử dụng hàm `GetCursorPos`, hàm này trả về tọa độ của con trỏ chuột của người dùng. Đoạn mã giả sau đây cho thấy cách thức hoạt động của kỹ thuật này:

```c
GetCursorPos(&CursorPos1)
Sleep(30)
GetCursorPos(&CursorPos2)
if (CursorPos1 == CursorPos2)
    TerminateProcess()
```

Đầu tiên, phần mềm độc hại gọi hàm `GetCursorPos` và lưu trữ tọa độ con trỏ chuột kết quả trong bộ đệm `CursorPos1`. Tiếp theo, nó gọi hàm `Sleep`, hàm này tạm dừng việc thực thi của phần mềm độc hại trong 30 giây, và sau đó gọi `GetCursorPos` một lần nữa. Cuối cùng, nó so sánh hai giá trị tọa độ con trỏ kết quả, và nếu chúng giống nhau (có nghĩa là con trỏ không di chuyển), mẫu sẽ tự kết thúc. Bạn có thể thấy đây là một phương pháp hiệu quả để né tránh các sandbox tự động, vì con trỏ khó có thể tự di chuyển (trừ khi, tất nhiên, sandbox được thiết kế để mô phỏng người dùng thực).

Một kỹ thuật tương tự khác liên quan đến việc phần mềm độc hại chờ đợi một số nút chuột được nhấn hoặc một số lần nhấp chuột nhất định trước khi thực thi mã độc của nó. FireEye đã viết một bài báo nghiên cứu vào năm 2012, “Hot Knives Through Butter: Evading File-based Sandboxes,” về kỹ thuật này được sử dụng bởi một gia đình phần mềm độc hại gọi là Upclicker. Để theo dõi các hành động chuột này, Upclicker đã thiết lập một hook trên chuột, cho phép phần mềm độc hại chặn và theo dõi tất cả hoạt động chuột và chờ đợi các sự kiện nhất định xảy ra. Đây là cách nó có thể hoạt động trong mã phần mềm độc hại:

```nasm
push offset jump_location
push 0Eh
call SetWindowsHookExA
--snip--
loc jump_location:
call do_evil_things
```

Mẫu phần mềm độc hại này đầu tiên đẩy tham số `jump_location` vào stack; đây là nơi phần mềm độc hại sẽ nhảy đến khi một sự kiện chuột nhất định xảy ra. Một tham số khác, `0E` ở dạng thập lục phân (hoặc 14 ở dạng thập phân), cho biết `SetWindowsHookExA` để hook các hành động chuột. Cuộc gọi đến `SetWindowsHookExA` yêu cầu chương trình nhảy đến mã được chỉ định trong `jump_location` khi người dùng nạn nhân nhấp vào nút chuột.

Mã này được đơn giản hóa để giữ ngắn gọn. Trên thực tế, phần mềm độc hại có thể sẽ triển khai thêm logic để thực hiện hành động chỉ khi có sự kiện chuột nhất định xảy ra, chẳng hạn như nhấp chuột trái (như trong trường hợp của Upclicker). Để tìm hiểu thêm về Upclicker và cũng có được cái nhìn tổng quan tốt về việc né tránh sandbox, hãy xem báo cáo của FireEye tại đường[ link](https://media.blackhat.com/us-13/US-13-Singh-Hot-Knives-Through-Butter-Evading-File-based-Sandboxes-WP.pdf) này.

Kỹ thuật hook này không chỉ hoạt động cho chuột. Phần mềm độc hại cũng có thể hook bàn phím bằng cách truyền `0Dh` (13 ở dạng thập phân) cho hàm `SetWindowsHookEx`, sau đó chờ đợi một phím nhất định được nhấn trước khi thực thi hoàn toàn.

Theo dõi các tương tác chuột và bàn phím có thể là một phương pháp rất hiệu quả để phát hiện và vượt qua một sandbox phân tích phần mềm độc hại tự động. Trừ khi sandbox hoặc nhà phân tích phần mềm nhấn các phím hoặc nút chuột cụ thể, mẫu phần mềm độc hại có thể trông hoàn toàn vô hại trong bối cảnh của môi trường sandbox.

{% hint style="success" %}
LƯU Ý: Để mô phỏng môi trường người dùng thực, hãy làm cho các máy ảo và sandbox phân tích của bạn trông giống như một người dùng thực càng nhiều càng tốt. Thay đổi hình nền và truy cập một số trang web (để làm đầy các thư mục cookie và bộ nhớ đệm của bạn) có thể mang lại hiệu quả lớn. Ngay cả việc mở thêm các cửa sổ và di chuyển chuột quanh màn hình cũng có thể giúp tránh một số kỹ thuật phát hiện này, ngay cả khi bạn cảm thấy có phần ngớ ngẩn khi làm điều đó.
{% endhint %}

## 5.7 System Uptime

Thời gian hoạt động của hệ thống là khoảng thời gian mà hệ thống đã được bật nguồn, và nó có thể là một chỉ báo tuyệt vời cho phần mềm độc hại rằng nó đang ở trong một môi trường phân tích. Một thiết bị người dùng điển hình có thể đã được bật nguồn trong nhiều giờ, nếu không muốn nói là nhiều ngày. Các máy chủ có thể được bật trong nhiều tháng hoặc nhiều năm mà không cần khởi động lại. Vì các nhà phân tích phần mềm độc hại thường khởi động máy ảo và sandbox của họ để phân tích một mẫu phần mềm độc hại theo yêu cầu, thời gian hoạt động hệ thống ngắn có thể là một gợi ý lớn rằng hệ thống là một máy phân tích.

Có nhiều cách để kiểm tra thời gian hoạt động của hệ thống, qua cả API Windows và các lệnh trợ giúp khác. Có lẽ phương pháp phổ biến nhất là hàm `GetTickCount` của Windows API, hàm này trả về thời gian hoạt động của hệ thống tính bằng mili giây. Một tick được tạo ra bởi đồng hồ của bộ xử lý, có trách nhiệm giữ thời gian và phối hợp các lệnh. Khi một hệ thống bị tắt nguồn hoặc khởi động lại, `GetTickCount` cơ bản sẽ đặt lại về 0. Đoạn mã sau sử dụng `GetTickCount` để xem nếu hệ thống đã được bật nguồn trong 20 phút:

```nasm
mov ebx, 124F80h
call GetTickCount
cmp eax, ebx
jb terminate_process
```

Mẫu này đầu tiên di chuyển giá trị 124F80 ở dạng thập lục phân (1200000 ở dạng thập phân) vào thanh ghi `ebx`, đại diện cho 1.200.000 mili giây, hoặc 20 phút. Sau đó, nó gọi `GetTickCount` và so sánh giá trị tick count trả về với giá trị trong `ebx`. Nếu giá trị từ `GetTickCount` thấp hơn giá trị `ebx`, có nghĩa là hệ thống đã được bật nguồn trong ít hơn 20 phút, mẫu phần mềm độc hại sẽ tự kết thúc.

Phần mềm độc hại cũng có thể sử dụng dòng lệnh Windows để lấy thời gian hoạt động của hệ thống. Các tùy chọn bao gồm lệnh `sysinfo`, lệnh này trả về danh sách thông tin về hệ thống, bao gồm cả thời gian hoạt động; `uptime.exe`, một tệp nhị phân đi kèm với hầu hết các phiên bản Windows; và lệnh `net statistics workstation`. Cuối cùng, phần mềm độc hại có thể gọi `WMIC` để trả về thời gian hoạt động của hệ thống bằng lệnh `wmic os get lastbootuptime`.

Một lưu ý quan trọng cuối cùng ở đây là `GetTickCount` và các phương pháp khác được đề cập thường được sử dụng trong cả ứng dụng lành tính và độc hại, không chỉ để phơi bày các môi trường phân tích và sandbox. Chỉ vì một mẫu phần mềm độc hại đang kiểm tra thời gian hoạt động của hệ thống không có nghĩa là nó đang hành động né tránh, nhưng bạn nên coi hành vi này là một dấu hiệu cảnh báo.

**Trong chương này, chúng ta đã đề cập đến một số cách sáng tạo và tinh vi mà phần mềm độc hại có thể sử dụng để liệt kê môi trường và tìm kiếm bằng chứng về hoạt động của người dùng thực sự. Bạn có thể ngăn chặn nhiều kỹ thuật phát hiện người dùng này đơn giản bằng cách thiết kế môi trường phân tích của bạn để nó trông hợp pháp đối với phần mềm độc hại. Một số thay đổi này, chẳng hạn như thay đổi hình nền Windows mặc định và đảm bảo rằng bạn có một số mục trong lịch sử duyệt web của mình, rất dễ thực hiện. Lưu ý rằng một số sandbox tiên tiến có các biện pháp bảo vệ tích hợp chống lại nhiều kỹ thuật này.**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://viettaliii.gitbook.io/home/mal/evasive-malware/chapter-5-user-environment-and-interaction-dectection.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
