Skip to main content

Command Palette

Search for a command to run...

ZBT: ba implant, một chuỗi cung ứng, và 392 thiết bị gọi về một tên miền bị bỏ quên

Updated
25 min readView as Markdown
ZBT: ba implant, một chuỗi cung ứng, và 392 thiết bị gọi về một tên miền bị bỏ quên

Tóm tắt

VulnCheck mua một router giá 88 USD trên Amazon, từ một công ty nhỏ ở New York. Nhãn ghi Deep Orange. Bên dưới lớp vỏ là ZBT-WE826-T2 của Shenzhen Zhibotong Electronics, và bên trong firmware là hai implant chưa từng được công bố.

Đây không phải lỗ hổng phần mềm. Đây là mã được xuất xưởng có chủ đích:

  • DARKLANTERN (service infosrvd) — backdoor lắng nghe trên UDP/9992, thực thi lệnh tùy ý với quyền root, không cần xác thực. Firewall mặc định của router cho phép kết nối vào cổng này từ bất kỳ đâu trên internet.

  • SPEAKINGSTONE (service yunmgrd) — implant phone-home beacon ra UDP/10000, hỗ trợ hijack DNS, đánh cắp thông tin đăng nhập PPPoE, và mở reverse SSH tunnel. Cả hai đều viết bằng Nim, giao tiếp qua UDP, và được khởi chạy bởi cùng một binary watchdog kết nối tên inetdetect.

VulnCheck phát hiện SPEAKINGSTONE có một tên miền C2 dự phòng chưa ai đăng ký. Họ đăng ký nó. Beacon đổ về ngay lập tức: 392 thiết bị, 390 trong số đó ở Trung Quốc, 83% trên mạng China Mobile, và thiết bị chạy lâu nhất đã beacon liên tục gần hai năm.

Hành động ưu tiên: kiểm tra xem tổ chức có thiết bị mạng nào mang địa chỉ MAC bắt đầu bằng 78:A3:51 hay không — đây là dải OUI cấp cho ZBT, và là cách nhanh nhất để nhận ra phần cứng ZBT dưới bất kỳ nhãn thương hiệu nào.


Bối cảnh và timeline

Đây là implant thứ hai và thứ ba được phát hiện trên cùng một nhà sản xuất, qua nhiều thế hệ firmware khác nhau.

Thời điểm Sự kiện
05/08/2026 VulnCheck công bố ENDLESSDOORS — implant phone-home đầu tiên tìm thấy trong firmware ZBT
06/08/2026 ZBT tuyên bố tạm dừng bán các model bị ảnh hưởng và gỡ firmware liên quan khỏi website chính thức
18–21/08/2026 VulnCheck quét internet bằng DARKLANTERN info probe, xác định 203 instance ở 22 quốc gia
21/08/2026 Sinkhole SPEAKINGSTONE thu được 392 thiết bị báo về
27/08/2026 VulnCheck công bố DARKLANTERNSPEAKINGSTONE, kèm hai CVE

Hai CVE được cấp, cả hai đều CVSS 9.3 (Critical) và đều đã vào VulnCheck KEV:

CVE Implant Loại
CVE-2026-74233 DARKLANTERN (infosrvd) CWE-321 Hard-coded Cryptographic Key + CWE-78 OS Command Injection
CVE-2026-74232 SPEAKINGSTONE (yunmgrd) CWE-506 Embedded Malicious Code + CWE-300 Channel Accessible by Non-Endpoint

Đáng chú ý về mặt phân loại: CWE-506 nghĩa là "Embedded Malicious Code". Đây không phải cách một tổ chức cấp CVE mô tả một lỗi lập trình.

Quan hệ giữa SPEAKINGSTONE, DARKLANTERN và binary khởi chạy chung inetdetect (nguồn: VulnCheck).


DARKLANTERN: backdoor mở sẵn ra internet

DARKLANTERN chạy dưới dạng service infosrvd, lắng nghe trên UDP port 9992.

Điểm cần đọc kỹ nằm ở firewall mặc định của chính router:

/tmp # iptables -L udp_packets
Chain udp_packets (1 references)
target     prot opt source               destination
ACCEPT     udp  --  anywhere             anywhere             udp dpt:9992

Quy tắc này cho phép kết nối vào cổng 9992 từ bất kỳ đâu trên internet. VulnCheck viết thẳng: theo thiết kế, nó có thể tiếp cận được từ thế giới bên ngoài.

Đây không phải cấu hình sai của người dùng. Đây là cấu hình xuất xưởng.

Giao thức, mà binary gọi nội bộ là revProto, đơn giản, không xác thực và không mã hóa. Có hai loại gói.

Info probe: 19 byte để lộ toàn bộ thiết bị

Một info probe dài đúng 19 byte. Gửi tới UDP/9992, thiết bị trả lời về UDP/8897 kèm model, phiên bản firmware, địa chỉ MAC, uptime và các thông tin định danh khác.

0c 16 1f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01

Không xác thực. Không challenge. Không session.

Đây là một response thật mà VulnCheck thu được từ một thiết bị ở Ukraine — model, MAC, SSID và IP công cộng đều ở dạng rõ:

\0c\16\1fWE826-T2;19.0617;78a35165f294;733752;;0;0;0;0;0;3835201070;2639069874;;;
295428312;5111713550;47586414082;2534543950;192.168.1.1;;_XPAM_;2;;10;;;;;;;
2018-11-12;ffff;27199800;45.156.37.159;27028260;0;0;0;0;0

Command packet: một gói UDP là một root shell

Gói lệnh (type 0x17) mang một chuỗi shell trong payload. Service truyền nó thẳng vào system("/etc/exec/cmd " + payload).

Một dấu chấm phẩy trong payload là thoát khỏi prefix cố định và thực thi lệnh tùy ý. Không giới hạn độ dài. Không lọc ký tự.

Định dạng gói lệnh của DARKLANTERN (nguồn: VulnCheck).

Hai trường quyết định gói có được chấp nhận hay không — và cả hai đều bị vô hiệu một cách dễ dàng.

Token. Gói lệnh yêu cầu một checksum bốn byte có khóa, tính bằng bốn ký tự hex cuối của md5("mqonu.com" + payload). Khóa "mqonu.com" được hardcode trong backdoor và không thể thay đổi. Ai cũng tính được checksum hợp lệ cho bất kỳ payload nào:

import hashlib
token = hashlib.md5(b"mqonu.com" + payload).hexdigest()[-4:].encode()

Chuỗi mqonu.com không phải URL được liên hệ — nó chỉ là salt tĩnh. Nhưng nó tham chiếu MoreQuick, OEM Trung Quốc phát triển firmware cho ZBT-WE826-T2, và do đó nối trực tiếp việc phát triển implant với MoreQuick.

MAC filter — và bypass được viết sẵn. Gói lệnh mang một trường MAC sáu byte, được đối chiếu với MAC của chính thiết bị trong /tmp/mac.txt. Không khớp thì gói bị bỏ. Về lý thuyết, đây ít nhất là một nỗ lực hợp lý nhằm chặn kẻ tấn công tùy ý — bỏ qua chuyện chính info probe đã trả về MAC của thiết bị.

Trừ một vấn đề: code chứa một bypass hardcode. Nếu trường MAC toàn số 0, kiểm tra được coi là đạt và gói được đưa vào hàng đợi xử lý.

Đây là chi tiết tôi cho là quan trọng nhất trong toàn bộ phân tích DARKLANTERN. Một lỗi logic trong kiểm tra MAC có thể là sơ suất lập trình. Một nhánh xử lý riêng cho giá trị toàn số 0, viết sẵn trong code, thì không.

Quy mô trên internet

Phân bố các instance DARKLANTERN tiếp cận được từ internet (nguồn: VulnCheck).

Trong khoảng 18–21/08/2026, VulnCheck xác định 203 instance DARKLANTERN tiếp cận được từ internet, trải trên 22 quốc gia.

Mỗi thiết bị trong số đó cung cấp một root shell không cần xác thực, tiếp cận được từ internet công cộng, được "bảo vệ" bởi một checksum ai cũng giả được và một MAC filter có bypass cố ý.

16 model tự khai báo trong dữ liệu quét (nguồn: VulnCheck).

Dữ liệu quét cũng cho thấy DARKLANTERN không giới hạn ở ZBT-WE826-T2: các thiết bị phản hồi tự khai báo 16 model khác nhau. Đây không phải một sản phẩm có vấn đề, mà là một backdoor ở tầng firmware được xuất xưởng cùng nhiều dòng sản phẩm.

VulnCheck lưu ý thêm rằng đây là các model cũ và firmware trên thiết bị thử nghiệm được build năm 2019 — nhiều khả năng họ đang bắt được phần đuôi của quá trình triển khai DARKLANTERN, và quy mô lắp đặt thực tế gần như chắc chắn từng lớn hơn.


SPEAKINGSTONE: implant phone-home mạnh hơn nhiều

SPEAKINGSTONE khác DARKLANTERN ở điểm căn bản: nó không lắng nghe, nó chủ động kết nối ra.

VulnCheck giải thích rõ vì sao đây là thiết kế tốt hơn nhiều cho một operator từ xa. Một listener như DARKLANTERN phụ thuộc vào việc router phải tiếp cận được trực tiếp từ internet — đặt thiết bị sau firewall, sau NAT, sau gateway doanh nghiệp là listener trở nên vô dụng. Implant phone-home không quan tâm: nó kết nối ra ngoài như mọi lưu lượng internet khác. Sau năm lớp firewall, sau carrier-grade NAT, trên mạng riêng — nó vẫn hoạt động.

C2 chính trên thiết bị thử nghiệm là ac-link[.]com, phân giải về 47.107.224[.]89 — một địa chỉ Alibaba Cloud tại Thâm Quyến. Đây là domain của chính ZBT, và cũng chính là domain đã xuất hiện trong nghiên cứu ENDLESSDOORS, với cùng địa chỉ IP hardcode trong một init script của ENDLESSDOORS.

Giao thức zbtProtocol

Implant beacon tới C2 trên UDP port 10000. Beacon chứa fingerprint thiết bị đầy đủ: model, phiên bản firmware, MAC, SSID, LAN IP, uptime, tọa độ GPS, và toàn bộ nội dung /tmp/info.txt.

Định dạng gói beacon của SPEAKINGSTONE (nguồn: VulnCheck).

Về bảo vệ: trên WE826-T2, thông điệp đi ra được obfuscate bằng XOR một byte (0x1f) — nhưng không phải thiết bị nào cũng làm vậy, cho thấy việc obfuscate là tùy chọn hoặc được thêm vào về sau. Còn lệnh từ C2 gửi xuống luôn ở dạng plaintext.

Không mã hóa. Không xác thực. Thiết bị không có cách nào xác minh nó đang nói chuyện với một server hợp lệ. Bất kỳ ai trên đường truyền đều có thể chiếm quyền các implant này.

Bộ lệnh

msgType Tên Tác dụng
0x1001 reg Beacon fingerprint thiết bị
0x2507 cmdRun Thực thi lệnh tùy ý
0x2502 pppoe Đánh cắp username và password PPPoE của kết nối WAN
0x230b dnsSet Ghi danh sách hijack DNS, kích hoạt qua /usr/sbin/dns.sh
0x2306 dnsGet Trả về danh sách hijack DNS hiện tại
0x2405 onoff Mở hoặc đóng reverse SSH tunnel
0x2406 sshport Trả về port SSH ngược hiện tại
0x2602 setBackup Cập nhật địa chỉ C2 dự phòng

Trong phản hồi với ENDLESSDOORS, ZBT tuyên bố implant đó là "công cụ hỗ trợ kỹ thuật sau bán hàng". Nhận xét của VulnCheck về SPEAKINGSTONE rất thẳng: công cụ hỗ trợ khách hàng không đánh cắp thông tin đăng nhập ISP, và không hijack DNS.


Sinkhole: 392 thiết bị và một model duy nhất

SPEAKINGSTONE có một domain C2 dự phòng hardcode: www.findmyipaddr[.]com. Đây không phải cơ chế failover — nếu ac-link[.]com được cấu hình nhưng không tiếp cận được, implant không chuyển sang backup, nó chỉ chờ. Thiết bị nào tìm tới backup domain nghĩa là chưa bao giờ được cấu hình C2 chính.

Domain được obfuscate trong binary yunmgrd bằng cách nối chuỗi: "ww"+"w.f"+"indmy"+"ipadd"+"r.co"+"m" — một nỗ lực cơ bản nhằm tránh bị tìm thấy bằng lệnh strings.

Chuỗi domain bị chia nhỏ trong binary (nguồn: VulnCheck).

Tại thời điểm phân tích, findmyipaddr[.]com chưa ai đăng ký. VulnCheck đăng ký nó và dựng một server chạy bản cài đặt zbtProtocol được reverse-engineer.

Quy trình sinkhole SPEAKINGSTONE (nguồn: VulnCheck).

Beacon bắt đầu đổ về ngay lập tức. Tính tới 21/08/2026:

Chỉ số Giá trị
Thiết bị báo về 392 (vẫn đang tiếp tục)
Ở Trung Quốc 390 / 392
Trên mạng China Mobile 83%
Phát SSID bắt đầu bằng "CMCC" 304
Là model L3_V2_8, firmware 3.0.0.4.528 363 / 392
Thiết bị beacon lâu nhất gần hai năm liên tục

Phân bố theo nhà mạng của các thiết bị báo về sinkhole (nguồn: VulnCheck).

VulnCheck đánh giá L3_V2_8 không phải một router bán lẻ trên kệ, mà là một thiết bị CPE của nhà mạng, triển khai trên mạng China Mobile. Cùng model, cùng firmware, cùng nhà mạng, cùng quốc gia.

Kết luận của họ: đây là công nghệ giám sát nội địa Trung Quốc, được triển khai bên trong Trung Quốc, trên mạng Trung Quốc, ở quy mô lớn — và cùng implant đó đang chạy trên router bán cho người Mỹ qua Amazon.

Một lưu ý quan trọng về phạm vi con số này: 392 thiết bị chỉ là những thiết bị tìm tới backup domain, tức những thiết bị chưa từng được cấu hình C2 chính. ac-link[.]com vẫn đang hoạt động. Tổng số thiết bị có SPEAKINGSTONE chưa xác định được và gần như chắc chắn lớn hơn nhiều.


Chuỗi cung ứng: phần cứng đi tới đâu, firmware theo tới đó

Toàn bộ những gì mô tả ở trên được tìm thấy trên một chiếc router 88 USD, bán bởi một công ty nhỏ ở New York. Deep Orange không sản xuất nó — họ dán nhãn lại.

Nhãn dưới đáy ghi WE826, khớp với FCC filing của ZBT (nguồn: VulnCheck).

Ba bằng chứng độc lập nối thiết bị này với ZBT: nhãn dưới đáy ghi model WE826, khớp với một FCC filing của Shenzhen Zhibotong Electronics; hình dáng router giống hệt; và địa chỉ MAC bắt đầu bằng 78:A3:51, dải OUI được cấp cho ZBT.

Shenzhen Zhibotong Electronics không được biết đến như một thương hiệu tiêu dùng. Chủ yếu họ sản xuất thiết bị để công ty khác bán dưới tên khác. VulnCheck truy vết qua FCC filing, hồ sơ sáng chế và trang web lưu trữ, và tìm thấy phần cứng ZBT dưới các thương hiệu tại Mỹ, Canada, Úc, Philippines, Đức và Nga.

Một số ví dụ tiêu biểu:

Thương hiệu Thị trường Bằng chứng liên hệ ZBT
Deep Orange Mỹ (Amazon) FCC filing WE826-T; MAC OUI 78:A3:51
WiFlyer Mỹ (Amazon, Newegg) ZBT sở hữu trademark theo hồ sơ USPTO — đây không phải sản phẩm phái sinh từ ZBT, nó ZBT
WORDFI Philippines (Shopee) ZBT đăng ký trademark với USPTO
Cioswi Nga (AliExpress), Mỹ (Amazon) Trang hỗ trợ cũ trỏ tới sales03@zbt-china.com
MOFI4500-4GXeLTE Canada FCC filing chứa schematic tên "ZBT-WE826"; MAC OUI trùng
Digineo AC1200 Pro / ALLNET Đức Nền tảng WG3526 và WG2626 (OpenWrt xác định)
Lippert WiFi On-The-Go / Wave WiFi MBR Mỹ Nền tảng WE826, dùng cho RV và tàu thuyền
OneX RV WIFI Route Úc Rebrand WE826

Cùng một phần cứng ZBT xuất hiện dưới ba tên thương hiệu khác nhau (nguồn: VulnCheck).

Cần giữ một điểm quan trọng để công bằng: VulnCheck nói rõ không phải tất cả thiết bị này đều chứa implant. MOFI phát triển firmware riêng, và firmware MOFI mà họ kiểm tra không chứa implant nào.

Phần cứng ZBT không đồng nghĩa với implant. Firmware mới là thứ quyết định. Nhưng vấn đề là người mua thường không có cách nào biết firmware trên thiết bị của mình đến từ đâu.

Luận điểm mà VulnCheck rút ra, và tôi cho là đúng trọng tâm: chỉ vì bạn chưa bao giờ nghe tới Shenzhen Zhibotong Electronics hay ZBT-WE826 không có nghĩa là bạn chưa từng dùng một chiếc.


Phản hồi của ZBT, và phản bác của VulnCheck

Sau công bố ENDLESSDOORS, ZBT đăng tuyên bố chính thức trên website. Nội dung chính:

  • Component quản lý từ xa được nêu trong báo cáo chỉ là công cụ hỗ trợ kỹ thuật sau bán hàng, nhằm hỗ trợ khách hàng khắc phục sự cố và cấu hình thiết bị, chỉ khi khách hàng yêu cầu và ủy quyền rõ ràng.

  • Component này chưa từng được sử dụng cho mục đích truy cập trái phép.

  • Biện pháp đã thực hiện: tạm dừng bán ngay lập tức các model bị ảnh hưởng, gỡ firmware liên quan khỏi website chính thức, và đang phát triển bản cập nhật firmware. Phản bác của VulnCheck gồm ba luận điểm, và tôi cho là chặt chẽ:

Không tìm thấy cơ chế yêu cầu hay ủy quyền. VulnCheck nói rõ họ không tìm thấy bất kỳ cơ chế nào để khách hàng yêu cầu hoặc ủy quyền truy cập. ENDLESSDOORS được thiết kế như một implant, và một số biến thể dựa vào các nhà cung cấp dynamic DNS — hạ tầng thường gắn với mã độc hơn là với hỗ trợ khách hàng.

Tuyên bố "chưa từng bị dùng trái phép" là vô nghĩa về mặt logic. Không implant nào trong ba implant hỗ trợ giao tiếp an toàn. Bất kỳ ai trên đường truyền đều có thể chiếm quyền ENDLESSDOORS hoặc SPEAKINGSTONE. ZBT không thể biết các implant này đã từng bị dùng cho truy cập trái phép hay chưa, vì quyền truy cập vào chúng không nằm trong tầm kiểm soát của ZBT.

Và VulnCheck đã chứng minh điều đó. Họ đăng ký một backup domain của SPEAKINGSTONE, và hàng trăm thiết bị báo về. Với DARKLANTERN, chỉ cần tìm ra một khóa tĩnh.


IOC

IOC lấy từ báo cáo VulnCheck ngày 27/08/2026. Domain đã defang.

Hash file (SHA-256)

b77811db4d218c65670a6c9a5b33c30ff81c6d779e15d658643138771178a818    yunmgrd     (SPEAKINGSTONE)
7e2e036fec2fe7ab4bbd43978d9296563894c92a112f5ac2f39957f12108e245    infosrvd    (DARKLANTERN)
ae6c356f1f09260b859f84d994ef8423540a6c0bdf98510d86b85834283e4926    inetdetect  (binary khởi chạy)

Domain C2

www.ac-link[.]com          # C2 chính của SPEAKINGSTONE → 47.107.224[.]89 (Alibaba Cloud, Thâm Quyến)
www.findmyipaddr[.]com     # C2 dự phòng của SPEAKINGSTONE (hiện do VulnCheck sinkhole)

Cổng và giao thức

UDP/9992     DARKLANTERN — listener, mở sẵn từ internet theo firewall mặc định
UDP/8897     DARKLANTERN — cổng đích cho response của info probe
UDP/10000    SPEAKINGSTONE — beacon đi ra tới C2

Artifact nhận diện thiết bị ZBT

# MAC OUI
78:A3:51                                    Dải cấp cho Shenzhen Zhibotong Electronics
 
# Telnet banner
0;0HWelcome to MQWrt@
 
# Web interface (body)
wk-login-html
 
# SSH host key fingerprint (SHA-256)
e0ac6c083497d19e5ab3d28f9354e7d84b30793eba720c7f793aeb1ca9be9a41
 
# SSH banner đi kèm
SSH-2.0-dropbear_2014.63
 
# Salt hardcode trong DARKLANTERN
mqonu.com                                   Tham chiếu MoreQuick, OEM firmware

Đường dẫn trên thiết bị

/usr/bin/yunmgrd          SPEAKINGSTONE
/usr/bin/infosrvd         DARKLANTERN
/etc/exec/cmd             Điểm thực thi lệnh của cả hai implant
/etc/exec/sysinfo
/tmp/yunclient.conf       Cấu hình SPEAKINGSTONE
/tmp/info.txt             Fingerprint thiết bị
/tmp/mac.txt              Dùng cho MAC filter của DARKLANTERN
/tmp/cmd.log
/usr/sbin/dns.sh          Script kích hoạt hijack DNS

Model bị ảnh hưởng — DARKLANTERN (CVE-2026-74233)

ZBT     WE1326           18.1218, 19.0717, 19.1101
ZBT     WE2426-C         19.0412, 19.0626, 19.0829, 19.1101, 19.1112
ZBT     WE357            19.1101
ZBT     WE5926           18.0904, 19.0617, 19.1101
ZBT     WE5926-EC_QP     20.0516
ZBT     WE5926-WD        19.1009, 19.1101
ZBT     WE826-Q          19.1101
ZBT     WE826-T2         19.0226, 19.0617, 19.0809, 19.1101
ZBT     WE826-WD         19.0426, 19.0625, 19.0809, 19.1023, 19.1101
ZBT     WF3526-P         19.051
ZBT     WG108            19.0809, 19.1101
ZBT     WG3526           19.0809, 19.1101
—       CTN720-W1        19.0522, 19.1101
—       LF-1541          19.1101
—       MT7620N          19.0412, 19.0809, 19.1101
—       WRC1             20.0622

Model bị ảnh hưởng — SPEAKINGSTONE (CVE-2026-74232)

ZBT         WE826-T2       19.1101
ZBT         L3_V2_8        3.0.0.4.528      ← 363/392 thiết bị trong sinkhole
ZBT         ZBT-7628       1.0.0.2.007
ZBT         ZBT-ZBT7621    1.0.0.3.001
MoreQuick   MQAC-7620      1.0.0.2.000
MoreQuick   MQAC-7620A     1.0.0.2.000
MoreQuick   MQAP-7620      1.0.0.2.000
MoreQuick   MQAP-7620A     1.0.0.2.000
MoreQuick   MQAP-7628      1.0.0.2.000
—           AP522          1.0.0.2.014
—           AP7628         3.0.0.4.380
—           APG721B        19.0809
—           HC5661A        3.0.0.4.380
—           HK300          1.0.0.2.032
—           MAP-N10        1.0.0.2.044

Detection rule

VulnCheck công bố sẵn bộ rule dưới đây trong phụ lục báo cáo. Chúng dùng được ngay, không cần chỉnh sửa.

Suricata

alert udp any any -> any 9992 ( \
    msg:"VULNCHECK Zbt/MoreQuick DARKLANTERN Wildcard-MAC Root Command Execution"; \
    dsize:>27; content:"|0c 17 1f 12 34 56 00 00 00 00 00 00|"; offset:0; depth:12; \
    pcre:"/^\x0c\x17\x1f\x12\x34\x56\x00{6}[0-9a-f]{4}.{2}[\x20-\x7e]{10}/s"; \
    xbits:set,darklantern.cmd_injected,track ip_pair,expire 120; \
    classtype:attempted-admin; sid:12800030; rev:1; \
    metadata: deployment Datacenter, impact compromised;)
 
alert udp any any -> any 9992 ( \
    msg:"VULNCHECK Zbt/MoreQuick DARKLANTERN Info Probe"; \
    dsize:19; content:"|0c 16 1f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 78|"; offset:0; depth:19; \
    classtype:attempted-recon; sid:12800031; rev:1; \
    metadata: deployment Datacenter;)
 
alert udp any 9992 -> any 8897 ( \
    msg:"VULNCHECK Zbt/MoreQuick DARKLANTERN Command Output Exfil"; \
    content:"|0c 17 1f|"; offset:0; depth:3; \
    xbits:isset,darklantern.cmd_injected,track ip_pair; \
    classtype:successful-admin; sid:12800032; rev:2; \
    metadata: deployment Datacenter, impact compromised;)
 
alert dns any any -> any any ( \
    msg:"VULNCHECK Zbtlink Router SPEAKINGSTONE C2 Domain Lookup (www.ac-link.com)"; \
    dns.query; content:"www.ac-link.com"; nocase; \
    pcre:"/^www\.ac-link\.com$/i"; \
    classtype:trojan-activity; sid:12800020; rev:1; \
    metadata: deployment Datacenter, impact compromised;)
 
alert dns any any -> any any ( \
    msg:"VULNCHECK Zbtlink Router SPEAKINGSTONE C2 Domain Lookup (www.findmyipaddr.com)"; \
    dns.query; content:"www.findmyipaddr.com"; nocase; \
    pcre:"/^www\.findmyipaddr\.com$/i"; \
    classtype:trojan-activity; sid:12800021; rev:1; \
    metadata: deployment Datacenter, impact compromised;)
 
alert udp $HOME_NET any -> any 10000 ( \
    msg:"VULNCHECK Zbtlink Router SPEAKINGSTONE zbtProtocol reg Beacon"; \
    dsize:>60; \
    content:"|00 00 00 00|"; offset:9; depth:4; \
    content:"|10 01|"; distance:4; within:2; \
    byte_jump:2,0,big,from_beginning,post_offset 2; \
    isdataat:!1,relative; \
    classtype:trojan-activity; sid:12800022; rev:2; \
    metadata: deployment Datacenter, impact compromised;)
 
alert udp any 10000 -> $HOME_NET any ( \
    msg:"VULNCHECK Zbtlink Router SPEAKINGSTONE zbtProtocol Command Injection"; \
    dsize:>21; \
    content:"|78 22 3b|"; fast_pattern; \
    content:"|00 00 00 00|"; offset:9; depth:4; \
    content:"|25 07|"; distance:4; within:2; \
    content:"|78 22 3b|"; distance:0; within:3; \
    byte_jump:2,0,big,from_beginning,post_offset 2; \
    isdataat:!1,relative; \
    classtype:trojan-activity; sid:12800023; rev:2; \
    metadata: deployment Datacenter, impact compromised;)
 
alert udp any 10000 -> $HOME_NET any ( \
    msg:"VULNCHECK Zbtlink Router SPEAKINGSTONE zbtProtocol Credential/Hijack Op"; \
    dsize:>18; \
    content:"|00 00 00 00|"; offset:9; depth:4; \
    pcre:"/^.{9}\x00{4}.{4}(\x25\x02|\x23\x0b)/s"; \
    byte_jump:2,0,big,from_beginning,post_offset 2; \
    isdataat:!1,relative; \
    classtype:trojan-activity; sid:12800024; rev:2; \
    metadata: deployment Datacenter, impact compromised;)

YARA

rule Zbtlink_Router_SPEAKINGSTONE_Implant
{
  meta:
    description = "MoreQuick/Zbtlink yunmgrd cloud-C2 implant (SPEAKINGSTONE)"
    author = "vulncheck"
 
  strings:
    $proto = "zbtProtocol.c" ascii
    $run   = "zbt protocol running" ascii
    $conf  = "/tmp/yunclient.conf" ascii
    $cmcc  = "cmcc_server" ascii
    $dns   = "dnshack" ascii
    $cmd   = "/etc/exec/cmd" ascii
    $back  = "setBackServer" ascii
    $reg   = "regMsg" ascii
 
  condition:
    uint32(0) == 0x464C457F and 4 of them
}
 
rule Zbtlink_Router_DARKLANTERN_Implant
{
  meta:
    description = "MoreQuick/Zbtlink infosrvd backdoor (DARKLANTERN)"
    author = "vulncheck"
 
  strings:
    $cmd      = "/etc/exec/cmd " ascii
    $sysinfo  = "/etc/exec/sysinfo" ascii
    $cmdlog   = "/tmp/cmd.log" ascii
    $infotxt  = "/tmp/info.txt" ascii
    $local    = "startlocalserve" ascii
    $salt     = "Salt_171006_808290505" ascii
    $allmac   = "Allmac_171007_808290505" ascii
    $validpkt = "invalid request pkt" ascii
    $shell    = "nosexecShellCmd" ascii
 
  condition:
    uint32(0) == 0x464C457F and 2 of ($salt, $allmac, $local, $validpkt)
      and 3 of ($cmd, $sysinfo, $cmdlog, $infotxt, $shell)
}

Ngoài ra VulnCheck còn công bố một scanner DARKLANTERN tối giản viết bằng Python trong phụ lục báo cáo gốc — gửi info probe 19 byte và parse response để lấy model, firmware và MAC. Đây là công cụ hữu ích để kiểm tra nhanh một dải IP nội bộ; xem trực tiếp trong bài viết của VulnCheck.


Nhận định

Đây không phải bài toán vá lỗi, mà là bài toán tin cậy chuỗi cung ứng.

Một CVE có thể vá. Nhưng ba implant qua nhiều thế hệ firmware, trên một nhà sản xuất, với một tuyên bố chính thức mô tả chúng là công cụ hỗ trợ khách hàng — đó không còn là vấn đề kỹ thuật để xử lý bằng bản cập nhật.

Chi tiết đắt nhất về mặt phân tích là MAC filter có bypass all-zeros hardcode. Nếu chỉ có checksum với salt tĩnh, người ta có thể lập luận đó là thiết kế bảo mật kém. Nhưng một nhánh xử lý riêng cho giá trị MAC toàn số 0, viết sẵn trong code, cho phép bất kỳ ai gửi lệnh — đó là một quyết định, không phải một sơ suất. Việc VulnCheck yêu cầu CWE-506 (Embedded Malicious Code) cho SPEAKINGSTONE phản ánh cùng đánh giá.

Về mặt thiết kế implant, SPEAKINGSTONE là bài học đáng ghi nhớ hơn DARKLANTERN. DARKLANTERN là backdoor kiểu cũ: mở cổng, chờ kết nối. Nó chỉ hoạt động khi thiết bị tiếp cận được từ internet — nghĩa là đặt sau NAT hoặc firewall là vô hiệu hóa được. SPEAKINGSTONE thì không quan tâm tới điều đó. Nó kết nối ra ngoài như mọi lưu lượng bình thường, và hoạt động sau bao nhiêu lớp firewall cũng được.

Với đội phòng thủ, hệ quả là: kiểm soát chiều vào không đủ. Điều duy nhất bắt được SPEAKINGSTONE là giám sát chiều ra — cụ thể là truy vấn DNS tới hai domain trong danh sách IOC, và lưu lượng UDP đi ra cổng 10000 từ thiết bị mạng.

Về sự trung thực của con số 392. Cần đọc con số này đúng cách: nó không phải tổng số thiết bị nhiễm SPEAKINGSTONE, mà chỉ là số thiết bị chưa từng được cấu hình C2 chính. Đây là một tập con, và VulnCheck nói rõ tổng số thật gần như chắc chắn lớn hơn nhiều. Trong báo cáo nội bộ, nên trình bày 392 như một sàn dưới có thể chứng minh được, không phải một ước lượng.

Liên hệ Việt Nam

Cần ghi rõ trước: VulnCheck nêu 22 quốc gia có instance DARKLANTERN nhưng không công bố danh sách đầy đủ; các quốc gia họ nhắc tên gồm Israel, Ukraine, Trung Quốc, Hong Kong, Thổ Nhĩ Kỳ và Đài Loan. Việt Nam không được nêu tên trong báo cáo.

Tuy nhiên, liên hệ với thị trường trong nước rất trực tiếp, và không phụ thuộc vào việc VN có trong danh sách hay không.

Mô hình phân phối trùng khớp hoàn toàn. Thị trường Việt Nam có rất nhiều router 4G/LTE giá rẻ nguồn Trung Quốc, bán qua Shopee, Lazada, TikTok Shop và các cửa hàng thiết bị mạng nhỏ. Phần lớn được bán dưới thương hiệu mà người mua chưa từng nghe tới, hoặc không có thương hiệu rõ ràng. Đây chính là mô hình white-label mà VulnCheck truy vết — và người mua gần như không có cách nào biết ai thực sự sản xuất thiết bị.

Use case cũng trùng khớp. VulnCheck chỉ ra sức hấp dẫn của WE826 nằm ở kết nối di động: cắm SIM là có internet ở gần như mọi nơi — đường ống dẫn dầu, biển quảng cáo ven đường, tàu hỏa, xe RV, hoặc làm đường dự phòng khi kết nối chính hỏng. Trong nước, đây đúng là các tình huống mà router 4G được dùng: xe khách và xe du lịch, camera giám sát ngoài trời, POS di động, backup WAN cho cửa hàng và chi nhánh, công trường xây dựng.

Điểm chung của tất cả các tình huống đó: thiết bị được lắp một lần rồi không ai đụng tới nữa. Không có ai kiểm tra firmware, không có ai xem thiết bị đang mở cổng gì.

Một hạng mục kiểm tra làm được ngay, không cần công cụ: đọc địa chỉ MAC trên nhãn thiết bị hoặc trong trang quản trị. Nếu bắt đầu bằng 78:A3:51, đó là phần cứng ZBT, bất kể trên vỏ ghi thương hiệu gì. Việc này mất vài phút và không đòi hỏi năng lực kỹ thuật nào.

Cuối cùng, nếu tổ chức bạn có thiết bị như vậy làm đường dự phòng WAN, cần nhớ rằng SPEAKINGSTONE hỗ trợ đánh cắp credential PPPoE và hijack DNS. Một thiết bị đứng ở vị trí đó không chỉ là một endpoint bị nhiễm — nó là điểm mà toàn bộ lưu lượng của chi nhánh đi qua.


Khuyến nghị

  • Kiểm kê thiết bị theo MAC OUI 78:A3:51 trên toàn bộ hạ tầng mạng, kể cả các thiết bị mang thương hiệu không liên quan tới ZBT — đây là cách nhận diện nhanh nhất và không cần công cụ.

  • Chặn UDP/9992 chiều vào tại biên và kiểm tra xem có thiết bị nào trong tổ chức đang mở cổng này ra internet hay không; đây là hành vi không bao giờ hợp lệ.

  • Giám sát chiều ra: cảnh báo trên truy vấn DNS tới ac-link[.]comfindmyipaddr[.]com, và trên lưu lượng UDP đi ra cổng 10000 từ thiết bị mạng — kiểm soát chiều vào không bắt được SPEAKINGSTONE.

  • Triển khai bộ Suricata rule của VulnCheck trên IDS/IPS ở biên và trước phân đoạn thiết bị mạng; chúng dùng được ngay và bao phủ cả hai implant.

  • Đối chiếu model và phiên bản firmware với hai bảng trong mục IOC; nếu khớp, coi thiết bị là đã bị xâm phạm và thay thế thay vì cập nhật — ZBT đã gỡ firmware khỏi website và bản vá vẫn đang được phát triển tại thời điểm viết bài.

  • Đưa yêu cầu về nguồn gốc phần cứng vào quy trình mua sắm: với thiết bị mạng, yêu cầu nhà cung cấp cung cấp thông tin OEM thực tế và nguồn firmware, thay vì chỉ dựa vào tên thương hiệu trên vỏ hộp.


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.