# UAC-0099: Khi Notepad++ trở thành “cửa ngõ” phát tán malware

* * *

## Tóm tắt tổng quan

Không có exploit nào trong chiến dịch này. Không có supply chain compromise. Kẻ tấn công đóng gói nguyên một bản Notepad++ 8.8.3 hợp pháp vào file ZIP, nhét thêm một file DLL độc hại vào thư mục plugin của nó, rồi để chính phần mềm này tự nạp malware theo đúng thiết kế của nhà phát triển.

Chuỗi lây nhiễm bắt đầu từ email lừa đảo, kết thúc bằng MATCHBOIL.V2, một loader viết bằng C# có khả năng cập nhật địa chỉ C2 và tải payload tiếp theo. CERT-UA không công bố payload cuối cùng.

Rủi ro kinh doanh nằm ở chỗ toàn bộ chuỗi này chạy dưới danh nghĩa một công cụ mà gần như mọi lập trình viên và sysadmin đều có trên máy. Nếu tổ chức của bạn dựa vào allowlist theo tên tiến trình hoặc chữ ký số để đánh giá độ tin cậy, chuỗi này đi qua mà không tạo alert nào.

Hành động ưu tiên ngay: hunt scheduled task chạy chu kỳ 3 phút và tiến trình `notepad++.exe` khởi chạy từ `%PUBLIC%` trên toàn bộ endpoint.

* * *

* * *

## Thông tin campaign

| Thuộc tính | Chi tiết |
| --- | --- |
| Threat actor | UAC-0099 (tên tracking của CERT-UA, chưa có alias thống nhất giữa các vendor) |
| Liên kết | Cung cấp initial access cho APT44 / Sandworm, moderate confidence theo CERT-UA |
| Thời gian hoạt động | Giữa 2022 đến hiện tại; chiến dịch Notepad++ ghi nhận mùa hè 2026 |
| Loại tấn công | Cyber espionage, initial access và tiền đề cho hoạt động phá hoại |
| Target sector | Cơ quan chính phủ, lực lượng và công nghiệp quốc phòng Ukraine |
| Target region | Ukraine |
| Công cụ chính | LUNCHPOKE, BURNYBEAR, MATCHBOIL.V2 |
| Phần mềm hợp pháp bị lợi dụng | Notepad++ 8.8.3, WinRAR, schtasks.exe |
| Hạ tầng phân phối | Link shortener, EasySend\[.\]co, Dropbox |
| C2 infrastructure | `[NEEDS VERIFICATION: CERT-UA chưa công bố C2 của chiến dịch 07/2026 trong phần công khai]` |
| Payload cuối | Không được CERT-UA công bố |
| Nguồn phát hiện | CERT-UA, advisory #6318634 |

* * *

## Timeline sự kiện

| Thời điểm | Sự kiện |
| --- | --- |
| Giữa 2022 | UAC-0099 bắt đầu hoạt động nhắm vào Ukraine |
| 05/2023 | CERT-UA công bố advisory đầu tiên về nhóm |
| 08/2023 | Nhóm khai thác CVE-2023-38831 (WinRAR) chỉ vài ngày sau khi lỗ hổng công bố |
| 11-12/2024 | Đợt hoạt động tăng mạnh trở lại |
| 08/2025 | Chiến dịch dùng lure giấy triệu tập tòa án, triển khai MATCHBOIL, MATCHWOK, DRAGSTARE |
| 26/09/2025 | CVE-2025-56383 (DLL hijacking, Notepad++) được công bố |
| ~01/10/2025 | CVE record được bổ sung ghi chú "disputed" sau 5 ngày |
| 14/07/2026 | Notepad++ 8.9.7 phát hành, vá 5 lỗ hổng |
| 21/07/2026 | Mốc phiên bản khuyến nghị: WinRAR 7.23, 7-Zip 26.02, Notepad++ 8.9.7 |
| 23/07/2026 | CERT-UA công bố advisory #6318634 về chiến dịch Notepad++ |

* * *

## Attack chain chi tiết

![Sơ đồ tổng quan chuỗi tấn công của UAC-0099, từ email lừa đảo qua link shortener đến khi Notepad++ nạp plugin độc hại](https://www.bleepstatic.com/images/news/u/1220909/2026/July/email%281%29.jpg align="center")

*Hình 1. Tổng quan chuỗi tấn công UAC-0099: email chứa ảnh có hyperlink, chuyển hướng qua dịch vụ chia sẻ file, dẫn tới ZIP chứa script VBS giả dạng PDF*

### Giai đoạn 1: Email chứa ảnh thay vì file đính kèm

Email lừa đảo không mang file đính kèm độc hại. Nó mang một hình ảnh, và hình ảnh đó là hyperlink trỏ tới link shortener, từ đó chuyển tiếp sang dịch vụ chia sẻ file EasySend\[.\]co để tải về archive ZIP với tên gợi ý công văn hành chính, ví dụ "Attachments to розпорядження.zip".

Thiết kế này nhắm thẳng vào lớp phòng thủ đầu tiên của hầu hết tổ chức. Secure email gateway quét file đính kèm, sandbox detonate file đính kèm, DLP đánh giá file đính kèm. Một email chỉ có ảnh và một link rút gọn thì gần như không có gì để quét. Chuỗi rút gọn URL còn làm hỏng cả reputation lookup, vì domain xuất hiện trong header là domain của dịch vụ shortener chứ không phải đích cuối.

Hệ quả cho giai đoạn sau: file độc hại đến máy nạn nhân qua trình duyệt, tức là qua một đường mà nhiều tổ chức áp policy lỏng hơn hẳn so với đường email.

### Giai đoạn 2: Script VBS đội lốt PDF

Bên trong ZIP là một file VBScript dùng kỹ thuật double extension với khoảng trắng đệm, dạng `Розпорядження.pdf .vbs`. Trên Windows với cấu hình mặc định ẩn phần mở rộng đã biết, và với độ rộng cột tên file thông thường trong Explorer, người dùng nhìn thấy một file PDF.

Kỹ thuật này cũ hơn cả UAC-0099, nhưng nó vẫn được dùng vì tỷ lệ thành công không phụ thuộc vào kỹ năng của nạn nhân mà phụ thuộc vào cấu hình hệ điều hành. Nạn nhân cẩn thận đến mấy cũng chỉ đọc được thứ Explorer hiển thị.

Khi chạy, script làm hai việc song song. Nó tải và mở một file PDF mồi thật, đúng chủ đề công văn, để nạn nhân thấy kết quả như mong đợi. Đồng thời nó tải ngầm `Evernote.zip` xuống nền.

Theo [Hackers Abuse Notepad++ Plugins to Compromise Your System Silently](https://cybersecuritynews.com/hackers-abuse-notepad-plugins/), archive thứ hai được giải nén vào một thư mục có tên ngẫu nhiên dưới `%PUBLIC%`, theo mẫu `%PUBLIC%\Libs_<số ngẫu nhiên>\Notepad\`.

Nội dung `Evernote.zip` mới là phần đáng chú ý:

```plaintext
Evernote.zip
├── notepad++.exe                    # Notepad++ 8.8.3 bản hợp pháp, đầy đủ
├── plugins\NppExport\NppExport.dll  # LUNCHPOKE, DLL độc hại thay thế plugin thật
├── updater.rar                      # archive có mật khẩu
└── WinRAR.exe                       # binary WinRAR hợp pháp
```

Đây là một portable app hoàn chỉnh. Không có installer, không cần quyền admin, không ghi vào Program Files. Chuỗi tấn công tự mang theo mọi thứ nó cần, kể cả công cụ giải nén.

### Giai đoạn 3: Notepad++ tự nạp malware

Script VBS khởi chạy `notepad++.exe`. Notepad++ quét thư mục `plugins\` như nó vẫn luôn làm và nạp `NppExport.dll`. Không có shellcode injection, không có process hollowing, không có API hooking. Ứng dụng chỉ đang thực hiện đúng chức năng plugin của nó.

Điểm tinh vi nằm ở lựa chọn tên file. `NppExport` là plugin thật, đi kèm nhiều bản phân phối Notepad++, chịu trách nhiệm export sang RTF và HTML. Một analyst mở thư mục plugin và thấy `NppExport.dll` sẽ không thấy gì bất thường, vì nó đúng là thứ nên có ở đó. Sự khác biệt chỉ nằm trong nội dung file, không nằm ở tên hay vị trí.

Từ góc độ defender, đây là chỗ chuỗi tấn công thoát khỏi phần lớn detection logic dựa trên parent-child process. Cây tiến trình sau khi lây nhiễm trông như sau: `wscript.exe` sinh ra `notepad++.exe`, và `notepad++.exe` sinh ra `WinRAR.exe`. Nhánh thứ hai là bất thường rõ rệt. Nhánh thứ nhất thì mơ hồ hơn nhiều, vì script tự động mở file trong editor không phải hành vi hiếm trong môi trường có developer.

### Giai đoạn 4: LUNCHPOKE dựng chỗ đứng

`NppExport.dll` được CERT-UA định danh là LUNCHPOKE. Nhiệm vụ của nó gói gọn trong ba việc.

Nó tạo thư mục làm việc ẩn `%PUBLIC%\Libraries\`, dùng WinRAR đi kèm để giải nén `updater.rar` (archive có mật khẩu) và lấy ra `RemoteLibUpdater.exe` cùng `InitTest.dll`. Sau đó nó copy `schtasks.exe` gốc của Windows sang `%PUBLIC%\Wallpapers\Background.exe` rồi dùng bản copy này để đăng ký scheduled task.

Mật khẩu trên `updater.rar` không nhằm bảo vệ bí mật, vì mật khẩu nằm ngay trong DLL. Nó nhằm chặn AV scan nội dung archive ở thời điểm file chạm đĩa. Cho tới khi LUNCHPOKE giải nén, `updater.rar` chỉ là một khối dữ liệu mã hóa với entropy cao và không có chữ ký nào để so khớp.

Việc copy và đổi tên `schtasks.exe` phục vụ mục đích khác. Nhiều detection rule theo dõi `schtasks.exe` theo image path hoặc theo tên tiến trình. Một binary tên `Background.exe` nằm trong `%PUBLIC%\Wallpapers\` không khớp rule nào trong số đó, trong khi vẫn giữ nguyên chữ ký Microsoft và vẫn thực thi được. Đây là kỹ thuật rename legitimate utility, và nó tận dụng đúng khoảng hở giữa "tin binary vì chữ ký" và "tin binary vì đường dẫn".

### Giai đoạn 5: Persistence chu kỳ 3 phút

Scheduled task được đăng ký với tên `\W1n3r-U09oTy-Ap5\Updates`, chạy `RemoteLibUpdater.exe` với tham số `setup nodisplay`, lặp lại mỗi 3 phút.

```plaintext
Task path:   \W1n3r-U09oTy-Ap5\Updates
Binary:      RemoteLibUpdater.exe
Arguments:   setup nodisplay
Interval:    3 phút
Helper:      %PUBLIC%\Wallpapers\Background.exe  (schtasks.exe đổi tên)
```

Chu kỳ 3 phút không phải lựa chọn ngẫu nhiên, và nó lặp lại đúng thói quen của nhóm từ thời LONEPAGE với chu kỳ ba đến bốn phút. Chu kỳ ngắn cho operator gần như tương tác thời gian thực với máy nạn nhân mà không cần duy trì kết nối thường trực. Đồng thời nó tạo ra một dấu vết cực kỳ đều đặn trong log, và đó lại là điểm yếu detection tốt nhất của toàn bộ chiến dịch.

Có một khác biệt nhỏ giữa các nguồn cần lưu ý: [Hackers Weaponize Notepad++ Plugins to Silently Infect Windows Systems](https://gbhackers.com/hackers-weaponize-notepad-plugins/) gán việc copy `schtasks.exe` và tạo task cho BURNYBEAR, trong khi trích dẫn trực tiếp từ CERT-UA cùng phân tích của SecurityAffairs và Cyber Security News đều gán cho LUNCHPOKE. Chúng tôi theo hướng thứ hai vì nó dựa trên câu trích nguyên văn của CERT-UA, nhưng khác biệt này không ảnh hưởng tới detection logic.

* * *

## Phân tích kỹ thuật từng component

### BURNYBEAR: loader có cơ chế tự phá hoại

`RemoteLibUpdater.exe` được định danh là BURNYBEAR. Chức năng chính đơn giản, nó nạp `InitTest.dll`. Chức năng phụ mới là phần đáng phân tích.

Nếu binary được khởi chạy mà không có tham số đúng, thay vì thoát hoặc báo lỗi, nó chuyển sang một routine ngốn sạch RAM và CPU của host. [UAC-0099 Is Now Hiding Malware Inside a Fake Notepad++ Plugin to Target Ukrainian Organizations](https://securityaffairs.com/195923/cyber-warfare-2/uac-0099-is-now-hiding-malware-inside-a-fake-notepad-plugin-to-target-ukrainian-organizations.html) mô tả đây là hành vi chống phân tích tích hợp sẵn.

Cách đọc kỹ thuật này quan trọng hơn bản thân nó. Đa số sandbox tự động detonate mẫu bằng cách chạy binary không tham số, vì đó là mặc định hợp lý khi không biết cách gọi. BURNYBEAR biến chính giả định đó thành cái bẫy: mẫu không crash, không exit, mà treo sandbox cho tới khi hết timeout. Kết quả trả về là "no malicious behavior observed" hoặc "analysis timeout", cả hai đều dễ bị xếp vào hàng chờ ưu tiên thấp.

Đây là execution guardrail chứ không đơn thuần là anti-sandbox. Malware chỉ bộc lộ hành vi thật khi được gọi đúng cách bởi thành phần đứng trước nó trong chain, tức là khi ngữ cảnh thực thi đã được xác thực gián tiếp. Với analyst, hệ quả thực tế là: mẫu BURNYBEAR phải được chạy với tham số `setup nodisplay` thì dynamic analysis mới có ý nghĩa.

### Tại sao chuỗi này khó bị chặn bởi control truyền thống

Điểm chung của cả năm giai đoạn là mọi binary thực thi trên máy nạn nhân đều hợp pháp và đều có chữ ký hợp lệ, trừ hai file DLL. `notepad++.exe`, `WinRAR.exe`, `schtasks.exe` đều là phần mềm thật. Application allowlisting dựa trên publisher certificate cho cả ba đi qua. Reputation service cho cả ba điểm sạch.

Hai file duy nhất mang code độc hại là `NppExport.dll` và `InitTest.dll`, và cả hai đều không bao giờ được thực thi trực tiếp. Chúng được nạp vào không gian địa chỉ của tiến trình khác. Với EDR chỉ theo dõi process creation mà không theo dõi image load, hai file này gần như vô hình.

* * *

## CVE-2025-56383 và cuộc tranh cãi về điểm CVSS

CERT-UA có nhắc CVE-2025-56383, lỗ hổng DLL hijacking trong Notepad++, đúng nhánh phiên bản 8.8.3 được dùng trong chiến dịch. Nhưng liên hệ này cần được đọc cẩn thận, vì nó dễ dẫn tới kết luận sai về việc patch giải quyết được vấn đề.

CVE này công bố ngày 26/09/2025 và bị đưa vào trạng thái disputed chỉ 5 ngày sau. Theo phân tích [Notepad++ DLL Hijacking (CVE-2025-56383): CVSS 8.4 or CVSS 0.0?](https://www.levelblue.com/blogs/spiderlabs-blog/notepad-dll-hijacking-cve-2025-56383-cvss-8-4-or-cvss-0-0/) của LevelBlue SpiderLabs, lý do tranh chấp nằm ở điều kiện tiên quyết: hành vi chỉ xảy ra khi ứng dụng được cài vào một cây thư mục cho phép user không đặc quyền ghi. Notepad++ mặc định cài vào Program Files, nơi cần quyền admin để ghi.

Lập luận của đội Notepad++, do Don Ho đưa ra, là nếu kẻ tấn công đã có quyền ghi vào thư mục tin cậy thì họ cài thẳng malware được rồi, không cần đi vòng qua DLL hijacking. SpiderLabs đồng tình với lập luận này. Đội phát triển tuyên bố rõ không có kế hoạch xử lý.

Điều quan trọng cho bài này: chiến dịch UAC-0099 không khai thác CVE-2025-56383, và không cần nó. Bản Notepad++ trong `Evernote.zip` không được cài vào Program Files. Nó là bản portable nằm trong `%PUBLIC%`, thư mục mà user thường có quyền ghi theo thiết kế của Windows. Kẻ tấn công không phá vỡ mô hình quyền, họ mang theo một môi trường mà mô hình quyền vốn đã cho phép mọi thứ họ cần.

Chính BleepingComputer cũng ghi rõ trong [Hackers abuse Notepad++ plugins to stealthily install malware](https://www.bleepingcomputer.com/news/security/hackers-abuse-notepad-plus-plus-plugins-to-stealthily-install-malware/) rằng "attackers do not exploit any vulnerability or a supply-chain compromise".

Điều này đặt ra một vấn đề thực tế cho khuyến nghị của CERT-UA. Bản 8.9.7 phát hành ngày 14/07/2026 có vá 5 lỗ hổng thật, gồm CVE-2026-52886 (bypass kiểm tra đường dẫn `backupFilePath` trong `session.xml`), CVE-2026-54758 (stack buffer overflow trong `expandNppEnvironmentStrs`), CVE-2026-57233 (Zip Slip path traversal), cùng hai advisory GitHub về bypass HMAC của `shortcuts.xml` và command injection PowerShell lúc cài đặt, theo [Notepad++ v8.9.7 Security Update Fixes 5 Vulnerabilities, Including Stack Buffer Overflow and Zip Slip Flaws](https://gbhackers.com/notepad-v8-9-7-security-update-fixes-5-vulnerabilities/). Nâng cấp là việc nên làm.

Nhưng nâng cấp Notepad++ trên máy trạm của bạn không ngăn được chiến dịch này, vì chiến dịch không dùng bản Notepad++ của bạn. Nó mang bản 8.8.3 riêng.

* * *

## MITRE ATT&CK Mapping

| Tactic | Technique ID | Technique Name | Triển khai trong chiến dịch |
| --- | --- | --- | --- |
| Initial Access | T1566.002 | Phishing: Spearphishing Link | Email không có attachment, chỉ chứa ảnh gắn hyperlink qua link shortener, tránh mọi lớp quét attachment của SEG |
| Command and Control | T1102 | Web Service | Dùng link shortener, EasySend\[.\]co và Dropbox làm kênh phân phối, khiến traffic tải payload trùng với dịch vụ SaaS hợp pháp |
| Execution | T1204.002 | User Execution: Malicious File | Nạn nhân double-click file VBS mà Explorer hiển thị như PDF |
| Defense Evasion | T1036.007 | Masquerading: Double File Extension | Tên file dạng `<tên>.pdf` + nhiều khoảng trắng + `.vbs`, khai thác cấu hình ẩn phần mở rộng mặc định của Windows |
| Execution | T1059.005 | Command and Scripting Interpreter: Visual Basic | Script VBS tải PDF mồi hiển thị cho nạn nhân, đồng thời tải ngầm `Evernote.zip` |
| Defense Evasion | T1574.001 | Hijack Execution Flow: DLL | `NppExport.dll` độc hại đặt trong `plugins\NppExport\`, mang tên plugin export RTF/HTML có thật, được Notepad++ nạp qua cơ chế plugin bình thường |
| Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | `updater.rar` đặt mật khẩu để AV không quét được nội dung khi file chạm đĩa; LUNCHPOKE giải nén bằng WinRAR đi kèm |
| Defense Evasion | T1036.003 | Masquerading: Rename Legitimate Utilities | `schtasks.exe` của Windows được copy sang `%PUBLIC%\Wallpapers\Background.exe`, giữ nguyên chữ ký Microsoft nhưng thoát rule theo tên tiến trình |
| Persistence | T1053.005 | Scheduled Task/Job: Scheduled Task | Task `\W1n3r-U09oTy-Ap5\Updates` chạy `RemoteLibUpdater.exe setup nodisplay` mỗi 3 phút; MATCHBOIL.V2 tạo thêm task thứ hai |
| Defense Evasion | T1480 | Execution Guardrails | BURNYBEAR chỉ nạp payload khi nhận đúng tham số; chạy không tham số thì kích hoạt routine vắt kiệt RAM và CPU, làm sandbox timeout thay vì trả verdict |
| Command and Control | T1105 | Ingress Tool Transfer | MATCHBOIL.V2 tải payload tiếp theo và tự tải WinRAR từ Dropbox nếu host không có sẵn |

* * *

## Detection

Thứ tự dưới đây xếp theo độ tin cậy, tín hiệu đầu tiên có false positive gần bằng không.

### 1\. Scheduled task chu kỳ 3 phút trỏ tới binary ngoài Program Files

Đây là tín hiệu mạnh nhất trong toàn bộ chuỗi. Task lặp mỗi 3 phút gần như không tồn tại trong môi trường doanh nghiệp bình thường, vì phần mềm hợp pháp cần polling thường dùng service chứ không dùng scheduled task với chu kỳ ngắn như vậy.

```powershell
# Liệt kê mọi scheduled task có chu kỳ lặp dưới 10 phút
Get-ScheduledTask | ForEach-Object {
    $task = $_
    $_.Triggers | Where-Object { $_.Repetition.Interval } | ForEach-Object {
        $interval = [System.Xml.XmlConvert]::ToTimeSpan($_.Repetition.Interval)
        if ($interval.TotalMinutes -le 10) {
            [PSCustomObject]@{
                TaskPath   = $task.TaskPath
                TaskName   = $task.TaskName
                Interval   = $interval
                Execute    = ($task.Actions | Select-Object -First 1).Execute
                Arguments  = ($task.Actions | Select-Object -First 1).Arguments
            }
        }
    }
} | Where-Object { $_.Execute -notlike "C:\Windows\*" -and $_.Execute -notlike "C:\Program Files*" } |
  Format-Table -AutoSize
```

Nếu kết quả trả về task nào trỏ vào `%PUBLIC%`, `%APPDATA%` hoặc `%TEMP%`, đó là ứng viên điều tra ngay lập tức, bất kể có liên quan chiến dịch này hay không.

### 2\. Notepad++ chạy từ thư mục người dùng ghi được

Notepad++ cài chuẩn nằm trong `C:\Program Files\Notepad++\`. Một tiến trình `notepad++.exe` khởi chạy từ `%PUBLIC%` là bất thường ngay cả khi không có malware, vì nó có nghĩa ai đó đang chạy bản portable ngoài luồng quản lý.

Query cho Microsoft Defender for Endpoint hoặc Sentinel:

```kusto
DeviceProcessEvents
| where FileName =~ "notepad++.exe"
| where FolderPath has_any ("\\Users\\Public\\", "\\AppData\\", "\\Temp\\", "\\Downloads\\")
| project Timestamp, DeviceName, AccountName, FolderPath, ProcessCommandLine,
          InitiatingProcessFileName, InitiatingProcessCommandLine
| order by Timestamp desc
```

Bổ sung thêm điều kiện `InitiatingProcessFileName in ("wscript.exe","cscript.exe")` sẽ thu hẹp về gần như đúng chuỗi này.

### 3\. Notepad++ sinh ra tiến trình con là công cụ giải nén

Notepad++ là text editor. Nó không có lý do nghiệp vụ nào để spawn WinRAR, 7-Zip hay `schtasks.exe`. Tín hiệu này độc lập với đường dẫn cài đặt, nên nó vẫn bắt được cả biến thể dùng bản Notepad++ đã cài sẵn trên máy.

```kusto
DeviceProcessEvents
| where InitiatingProcessFileName =~ "notepad++.exe"
| where FileName has_any ("WinRAR.exe", "rar.exe", "unrar.exe", "7z.exe",
                          "7za.exe", "schtasks.exe", "powershell.exe", "cmd.exe")
| project Timestamp, DeviceName, AccountName, FileName, FolderPath,
          ProcessCommandLine, InitiatingProcessFolderPath
| order by Timestamp desc
```

### 4\. Image load bất thường trong thư mục plugin

Đây là tín hiệu bắt được bản chất kỹ thuật của chiến dịch, nhưng cần EDR có telemetry image load. So sánh DLL trong thư mục plugin với danh sách plugin đã được duyệt, và chú ý DLL không có chữ ký số.

```powershell
# Kiểm tra chữ ký toàn bộ DLL trong mọi thư mục plugin Notepad++ trên máy
Get-ChildItem -Path C:\ -Filter "*.dll" -Recurse -ErrorAction SilentlyContinue |
  Where-Object { $_.FullName -match '\\Notepad\+\+\\plugins\\' -or $_.DirectoryName -match 'plugins\\Npp' } |
  ForEach-Object {
      $sig = Get-AuthenticodeSignature $_.FullName
      [PSCustomObject]@{
          Path       = $_.FullName
          Signed     = $sig.Status
          Signer     = $sig.SignerCertificate.Subject
          SHA256     = (Get-FileHash $_.FullName -Algorithm SHA256).Hash
          LastWrite  = $_.LastWriteTime
      }
  } | Where-Object { $_.Signed -ne "Valid" } | Format-List
```

Plugin chính thức của Notepad++ thường có chữ ký. Một `NppExport.dll` không chữ ký, hoặc có `LastWriteTime` lệch hẳn so với các file còn lại trong cùng thư mục, là dấu hiệu cần trích xuất mẫu.

### 5\. Binary Microsoft ký hợp lệ nhưng nằm sai chỗ

Bản copy `schtasks.exe` đổi tên thành `Background.exe` bắt được bằng cách đối chiếu publisher với đường dẫn.

```kusto
DeviceProcessEvents
| where FolderPath !startswith "C:\\Windows\\"
| where FolderPath has_any ("\\Users\\Public\\", "\\AppData\\Local\\Temp\\")
| where ProcessCommandLine has_any ("/create", "/sc minute", "/ru ", "/tn ")
| project Timestamp, DeviceName, FileName, FolderPath, ProcessCommandLine
| order by Timestamp desc
```

Bất kỳ binary nào ngoài `C:\Windows\System32\` nhận tham số dòng lệnh kiểu `schtasks` đều đáng nghi, không phụ thuộc tên file.

* * *

## Nhận định

Điều đáng chú ý nhất ở chiến dịch này không phải mức độ tinh vi, mà là hướng đi ngược của nó.

UAC-0099 từng là nhóm khai thác CVE-2023-38831 chỉ vài ngày sau khi lỗ hổng công bố. Đến 2026, họ chọn cách không dùng lỗ hổng nào. Đây không phải dấu hiệu năng lực suy giảm. Đây là kết luận hợp lý sau khi cân nhắc chi phí: exploit hết giá trị khi patch được triển khai, còn cơ chế nạp plugin của Notepad++ thì không bao giờ bị "vá", vì nó là tính năng. Chính đội Notepad++ đã nói thẳng điều đó khi từ chối xử lý CVE-2025-56383. Kẻ tấn công vừa xây một chuỗi lây nhiễm có tuổi thọ dài hơn bất kỳ exploit nào họ từng dùng.

Hệ quả với threat model là khá trực tiếp. Rất nhiều tổ chức vẫn định nghĩa "phần mềm đáng tin" bằng hai tiêu chí: có chữ ký hợp lệ, và có tên nằm trong allowlist. Chiến dịch này thỏa mãn cả hai. Notepad++ có chữ ký. Notepad++ nằm trong allowlist của gần như mọi tổ chức có developer. WinRAR cũng vậy. Kẻ tấn công không cần vượt qua kiểm soát, họ chỉ cần mang theo phần mềm mà kiểm soát đã cho phép sẵn.

Trong bối cảnh Việt Nam, độ liên quan cao hơn mức thoạt nhìn. Notepad++ là editor phổ biến bậc nhất trong giới lập trình viên và quản trị hệ thống trong nước, và văn hóa dùng bản portable từ USB, từ thư mục chia sẻ mạng nội bộ, hoặc từ file ZIP đồng nghiệp gửi vẫn rất phổ biến, đặc biệt ở những môi trường mà quy trình xin cài phần mềm mất vài ngày. Chính thói quen đó là điều kiện đủ để chuỗi này chạy được. Nó không đòi hỏi nạn nhân phải cả tin, chỉ đòi hỏi một môi trường mà việc giải nén và chạy một app portable là chuyện bình thường.

Chi tiết BURNYBEAR tự vắt kiệt tài nguyên khi bị gọi sai tham số đáng để các đội SOC ghi nhớ ngoài phạm vi chiến dịch này. Nó cho thấy giả định mặc định của quy trình triage tự động, chạy mẫu không tham số rồi đọc verdict, đã trở thành một bề mặt bị nhắm tới. Một mẫu trả về "timeout" không tương đương với "sạch", và với các họ malware thiết kế theo kiểu chain có guardrail thì timeout chính là kết quả mà tác giả mong muốn.

Cuối cùng, việc MATCHBOIL.V2 tự cập nhật C2 làm thay đổi thứ tự ưu tiên của công tác phòng thủ. Khi địa chỉ C2 có thể được thay trong vòng ba phút, IOC dạng network chỉ còn giá trị forensic chứ gần như không còn giá trị ngăn chặn. Thứ giữ được giá trị lâu dài là các artifact cấu trúc: cây tiến trình, đường dẫn thực thi, chu kỳ scheduled task. Đó là những thứ kẻ tấn công phải thiết kế lại chứ không thể đổi bằng một lệnh update config.

* * *

## Khuyến nghị

Chạy hunt scheduled task trên toàn bộ fleet, bắt đầu từ máy của developer và sysadmin vì đây là nhóm có xác suất cài Notepad++ cao nhất:

```powershell
# Hunt nhanh theo tên task và binary đã biết của chiến dịch
schtasks /query /fo LIST /v | Select-String -Pattern "W1n3r|RemoteLibUpdater|setup nodisplay"

# Kiểm tra các đường dẫn staging đã biết
$paths = @(
    "$env:PUBLIC\Libraries",
    "$env:PUBLIC\Wallpapers\Background.exe",
    "$env:PUBLIC\Libs_*"
)
foreach ($p in $paths) {
    if (Test-Path $p) { Get-Item $p | Select-Object FullName, CreationTime, LastWriteTime }
}
```

Rà soát toàn bộ tiến trình `notepad++.exe` đang chạy và xác định đường dẫn thực thi của chúng:

```powershell
Get-Process notepad++ -ErrorAction SilentlyContinue |
  Select-Object Id, ProcessName, Path, StartTime |
  Where-Object { $_.Path -notlike "C:\Program Files*" }
```

Chặn ở proxy hoặc secure web gateway các dịch vụ rút gọn URL không phục vụ nghiệp vụ, và bật cảnh báo cho lượt tải file archive từ EasySend\[.\]co.

Triển khai ba detection rule đã nêu ở phần Detection lên SIEM và EDR, ưu tiên rule về scheduled task chu kỳ ngắn vì nó có giá trị vượt ra ngoài chiến dịch này.

Bật hiển thị phần mở rộng file trên toàn bộ endpoint qua Group Policy. Đây là biện pháp một dòng cấu hình, vô hiệu hóa hoàn toàn kỹ thuật double extension mà UAC-0099 đã dùng liên tục từ 2023:

```powershell
# Áp qua GPO hoặc script khởi động
Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" `
  -Name "HideFileExt" -Value 0
```

Chặn thực thi từ các thư mục người dùng ghi được bằng AppLocker hoặc WDAC. Quy tắc tối thiểu: chặn `*.exe` và `*.dll` thực thi từ `%PUBLIC%`, `%TEMP%` và `%USERPROFILE%\Downloads`. Đây là biện pháp cắt đứt chuỗi này ngay tại giai đoạn 3, và nó không phụ thuộc vào việc nhận diện được malware.

Nâng Notepad++ lên 8.9.7, WinRAR lên 7.23, 7-Zip lên 26.02 theo khuyến nghị của CERT-UA. Cần hiểu rõ rằng việc này vá các lỗ hổng khác chứ không ngăn được chiến dịch đang phân tích.

Gửi cảnh báo tới người dùng nội bộ về mẫu email chứa ảnh có hyperlink, kèm ví dụ cụ thể chứ không phải lời nhắc chung chung về phishing.

Xem lại định nghĩa "phần mềm đáng tin" trong chính sách nội bộ. Nếu tiêu chí hiện tại chỉ gồm chữ ký số và tên ứng dụng, chuỗi tấn công này đi qua toàn bộ. Bổ sung tiêu chí đường dẫn cài đặt và nguồn phân phối vào quyết định allowlist.

Xây dựng quy trình cung cấp phần mềm nội bộ đủ nhanh để người dùng không phải tìm bản portable. Đây là biện pháp giảm rủi ro theo hướng loại bỏ động cơ chứ không phải theo hướng cấm đoán, và nó bền hơn.

Bổ sung telemetry image load vào yêu cầu khi đánh giá hoặc gia hạn hợp đồng EDR. Toàn bộ phần độc hại của chiến dịch này nằm trong hai file DLL không bao giờ được thực thi trực tiếp. EDR chỉ theo dõi process creation không nhìn thấy chúng.

Cập nhật quy trình triage malware: mẫu trả về timeout hoặc treo sandbox phải được đưa vào hàng chờ phân tích thủ công, không được xếp cùng nhóm với mẫu có verdict sạch.

* * *

## Indicators of Compromise

```plaintext
# Host artifact — File path
%PUBLIC%\Libs_<RAND_0-999999>\Notepad\        # Thư mục staging Notepad++ portable
%PUBLIC%\Libraries\                            # Thư mục làm việc ẩn của LUNCHPOKE
%PUBLIC%\Wallpapers\Background.exe             # schtasks.exe của Windows được đổi tên

# Host artifact — File name
NppExport.dll                                  # LUNCHPOKE, đặt trong plugins\NppExport\
RemoteLibUpdater.exe                           # BURNYBEAR, loader
InitTest.dll                                   # MATCHBOIL.V2, loader C#
updater.rar                                    # Archive có mật khẩu chứa 2 payload
Evernote.zip                                   # Archive giai đoạn 2

# Host artifact — Scheduled task
\W1n3r-U09oTy-Ap5\Updates                      # Chu kỳ 3 phút
Command line: RemoteLibUpdater.exe setup nodisplay

# Delivery infrastructure
easysend[.]co                                  # Dịch vụ chia sẻ file phát tán ZIP
dropbox[.]com                                  # Kênh tải WinRAR và payload bổ sung
                                               # (dịch vụ hợp pháp, chỉ dùng làm signal khi
                                               #  đi kèm artifact khác, không block trực tiếp)

# Filename pattern — Lure
Attachments to розпорядження.zip               # Chủ đề công văn hành chính
<tên>.pdf<nhiều khoảng trắng>.vbs              # Double extension

# Behavioral IOC
wscript.exe  -> notepad++.exe                  # Parent-child bất thường
notepad++.exe -> WinRAR.exe                    # Editor spawn công cụ giải nén
notepad++.exe thực thi từ %PUBLIC%             # Ngoài đường dẫn cài đặt chuẩn
Scheduled task lặp mỗi 3 phút trỏ tới binary ngoài Program Files
Tiến trình tiêu thụ 100% RAM/CPU ngay sau khi chạy binary lạ không tham số

# C2 lịch sử (chiến dịch 2023 theo Deep Instinct, không còn active, dùng cho retro-hunt)
147[.]78[.]46[.]40
196[.]196[.]156[.]2
2[.]59[.]222[.]98

# Chưa công bố
[NEEDS VERIFICATION: file hash SHA-256 của NppExport.dll, RemoteLibUpdater.exe,
 InitTest.dll và địa chỉ C2 của chiến dịch 07/2026 chưa xuất hiện trong các nguồn
 công khai đã khảo sát. Kiểm tra advisory #6318634 của CERT-UA để lấy bản IOC đầy đủ.]
```

* * *

*Nguồn tham khảo:*

*   [Hackers abuse Notepad++ plugins to stealthily install malware](https://www.bleepingcomputer.com/news/security/hackers-abuse-notepad-plus-plus-plugins-to-stealthily-install-malware/) — Bill Toulas, BleepingComputer
    
*   [CERT-UA advisory #6318634](https://cert.gov.ua/article/6318634) — CERT-UA
    
*   [Fake Notepad++ Plugin Delivers MATCHBOIL.V2 in UAC-0099 Attacks](https://thehackernews.com/2026/07/fake-notepad-plugin-delivers.html) — The Hacker News
    
*   [UAC-0099 Is Now Hiding Malware Inside a Fake Notepad++ Plugin to Target Ukrainian Organizations](https://securityaffairs.com/195923/cyber-warfare-2/uac-0099-is-now-hiding-malware-inside-a-fake-notepad-plugin-to-target-ukrainian-organizations.html) — Pierluigi Paganini, Security Affairs
    
*   [Hackers Abuse Notepad++ Plugins to Compromise Your System Silently](https://cybersecuritynews.com/hackers-abuse-notepad-plugins/) — Cyber Security News
    
*   [Hackers Weaponize Notepad++ Plugins to Silently Infect Windows Systems](https://gbhackers.com/hackers-weaponize-notepad-plugins/) — GBHackers on Security
    
*   [Notepad++ DLL Hijacking (CVE-2025-56383): CVSS 8.4 or CVSS 0.0?](https://www.levelblue.com/blogs/spiderlabs-blog/notepad-dll-hijacking-cve-2025-56383-cvss-8-4-or-cvss-0-0/) — LevelBlue SpiderLabs
    
*   [Notepad++ v8.9.7 Security Update Fixes 5 Vulnerabilities, Including Stack Buffer Overflow and Zip Slip Flaws](https://gbhackers.com/notepad-v8-9-7-security-update-fixes-5-vulnerabilities/) — GBHackers on Security
    
*   [UAC-0099 Attack Detection: Hackers Target Government and Defense Agencies in Ukraine Using MATCHBOIL, MATCHWOK, and DRAGSTARE Malware](https://socprime.com/blog/detect-uac-0099-attacks-against-ukraine/) — SOC Prime
    
*   [Threat Actor 'UAC-0099' Continues to Target Ukraine](https://www.deepinstinct.com/blog/threat-actor-uac-0099-continues-to-target-ukraine) — Deep Instinct
