Hirudo: không phủ màn hình giả lên app ngân hàng nữa, mà thay luôn cả app

Tóm tắt
Hirudo là banking RAT Android mới do ThreatFabric công bố ngày 14/10/2026, kết hợp đánh cắp credential tại chỗ với điều khiển thiết bị từ xa theo thời gian thực.
Phần lớn banker Android hiện nay dừng ở overlay: phủ một màn hình giả lên trên app ngân hàng thật. Hirudo đi xa hơn một bậc. Nó gỡ app ngân hàng thật rồi cài một bản sao đã bị vá, trong đó nhúng sẵn một hooking engine vô hiệu hóa chính các lớp kiểm tra bảo mật của ngân hàng, từ bên trong tiến trình của app đó.
Hiện đã có bản thay thế riêng cho 8 app ngân hàng Indonesia thuộc 7 ngân hàng. Nhưng registry trong RAT liệt kê 42 app tài chính, và danh sách mục tiêu trải khắp Trung Quốc, Ấn Độ, Mexico, Morocco và Thái Lan.
Hành động ưu tiên:
- Với ngân hàng và tổ chức tài chính: xác thực Play Integrity ở phía server, gắn với phiên và với hành động cần bảo vệ, đồng thời kiểm tra danh sách thu hồi chứng chỉ attestation. Một verdict hợp lệ không còn là bằng chứng app chưa bị can thiệp.
- Với người dùng và đội bảo mật: coi mọi thông báo "cập nhật ứng dụng" xuất hiện bên trong một app khác là dấu hiệu tấn công, và cảnh giác đặc biệt khi một app yêu cầu gỡ app ngân hàng.
Kiến trúc hai tầng: dropper và payload
App mà nạn nhân cài đầu tiên là dropper, bọc trong một lớp mồi có chức năng thật:
- Shopora — app mua sắm
- 1V1 X — app nội dung người lớn
- ZoyaTV và KoiShort — app phim ngắn
Các app này tải nội dung thật qua WebView, có storefront, có catalogue video, nên trải nghiệm trông hoàn toàn bình thường.
Phía sau lớp nội dung đó, dropper chạy một quy trình khởi động cố định: thu thập dữ liệu tracking quảng cáo, lấy cấu hình chiến dịch, rồi kiểm tra xem payload (chính là Hirudo RAT) đã được cài chưa, và đã bật Accessibility service cùng quyền đọc thông báo chưa.
Nếu chưa có payload, dropper hiện một thông báo "update" giả ngay trong app và mời cài gói APK đi kèm. Payload được cài như một app thứ hai và phải được cấp quyền riêng trước khi bất kỳ chức năng thu thập hay điều khiển nào hoạt động.
Một dropper mua sắm còn đi xa hơn: nó dựng một VPN blackhole cắt toàn bộ traffic IPv4 của thiết bị trong lúc payload được cài. ThreatFabric lưu ý kỹ thuật này đang xuất hiện ở nhiều dòng malware khác nhau trên thị trường hiện nay.
Thay app ngân hàng: cơ chế và giới hạn
Đây là phần làm nên tên tuổi của Hirudo. Quy trình gồm bốn bước:
- Phát hiện app ngân hàng đã cài trên máy, thông qua Accessibility.
- Đối chiếu chứng chỉ ký của app đó với một tham chiếu lưu sẵn, để chắc chắn đúng bản thật.
- Hiện thông báo "update" giả, rồi tự mở trình gỡ cài đặt của Android mà không chờ người dùng bấm, đồng thời tải bản thay thế tương ứng với ngân hàng đó song song.
- Điều khiển trình cài đặt qua Accessibility để cài bản đã vá.
Và đây là giới hạn thật của kỹ thuật. Bản thay thế giữ nguyên package name và version của app gốc, nhưng được ký bằng test key công khai của Android chứ không phải khóa của ngân hàng. Android vì thế từ chối cài đè nó lên bản do ngân hàng ký, và đó chính là lý do Hirudo buộc phải gỡ bản gốc trước.
Nghĩa là chuỗi này cần hai điều kiện: app thật bị gỡ, và trình cài đặt được cho phép. Nạn nhân có thể ngắt ở cả hai điểm. Nghịch lý là kỹ thuật mạnh hơn overlay lại mong manh hơn overlay ở khâu thực thi.
Hooking engine: vô hiệu hóa phòng thủ từ bên trong
ThreatFabric dịch ngược một trong các bản đã vá và phát hiện điều đáng chú ý: mã của ngân hàng gần như không bị đụng tới. Chỉ có một dòng duy nhất được chèn vào lớp Application của app. Khi app khởi động, dòng đó nạp một hooking engine tự chứa từ các file asset đi kèm.
Engine dựng trên hai framework mã nguồn mở quen thuộc:
- YAHFA — thay thế method Java
- Dobby — hook hàm native
Và nó chỉ kích hoạt hook khi có một file trigger dùng chung do RAT ghi ra trên thiết bị. Nghĩa là một app đã bị vá nhưng nằm im, không có RAT đi kèm, gần như không lộ gì khi phân tích.
Khi engine chạy bên trong chính tiến trình của app ngân hàng, hàng phòng thủ của app bị quay ngược lại chống chính nó:
| App ngân hàng kiểm tra gì | Bản đã vá trả về gì |
|---|---|
| Truy vấn Android lấy chứng chỉ ký của chính mình | Chứng chỉ thật của ngân hàng, giấu chữ ký test key |
| Truy vấn danh sách Accessibility service đang bật | Danh sách rỗng, nên service điều khiển trở nên vô hình |
Cờ FLAG_SECURE chặn chụp và ghi màn hình |
Bị gỡ, cho phép xem và ghi màn hình ngân hàng từ xa |
| Chứng chỉ key attestation | Được ký lại bằng keybox đi kèm |
| Yêu cầu Play Integrity | Relay qua HTTP thường tới server của kẻ tấn công, server trả về verdict cho app chấp nhận |
Hai chi tiết quan trọng cho bên phòng thủ
Thứ nhất, keybox attestation đi kèm không phải của chính nhóm này. Đó là một keybox đã bị rò rỉ công khai, và ThreatFabric xác nhận ít nhất hai chứng chỉ trong đó nằm trong danh sách thu hồi của Google, bị đánh dấu là đã lộ. Nghĩa là một backend có kiểm tra revocation vẫn bắt được các chữ ký giả này.
Thứ hai, vì request Integrity là relay chứ không được tạo ra thật, một verdict hợp lệ tự nó không chứng minh app chưa bị can thiệp.
Cả hai dẫn tới cùng một kết luận: khi app có thể bị thay thế, mọi tín hiệu do app tự sinh ra tại máy — chữ ký, danh sách Accessibility, verdict integrity — đều phải bị coi là có thể đã bị tác động, và phải được kiểm chứng ở phía server.
Các bề mặt đánh cắp khác
Checkout giả. Khi nội dung trong dropper kích hoạt một khoản thanh toán, dropper chuyển chi tiết đơn hàng sang payload qua Android intent. Payload dựng một trang checkout giả trong WebView trong suốt đè lên màn hình đặt hàng của dropper. Trang này mang branding ngân hàng hoặc ví do dropper cung cấp và được dịch sang 8 ngôn ngữ. Nạn nhân nhập PIN thanh toán, payload gửi lên server dưới tên trường appPayPwd, rồi trả về cho dropper một kết quả thanh toán thành công giả để giao dịch trông như đã hoàn tất.
Mật khẩu đăng nhập. Tách riêng khỏi checkout, payload dùng các prompt riêng theo từng ngân hàng và ví để xin mật khẩu đăng nhập, gửi lên dưới tên appPwd. Nó còn đọc màn hình của app thật để phản chiếu đúng user ID hoặc số tiền về cho nạn nhân, khiến prompt trông thuyết phục hơn.
Bí mật mở khóa thiết bị. Một overlay toàn màn hình giả giao diện vẽ pattern bắt lấy pattern đầu tiên người dùng vẽ. Và ở một build, payload đọc thẳng PIN, password và pattern từ màn hình khóa thật của máy qua Accessibility.
Phần còn lại của bộ công cụ: xem màn hình trực tiếp qua WebRTC, phiên camera trước và sau, và thu thập SMS với lần quét đầu tiên phủ 90 ngày cùng một danh sách người gửi là ngân hàng và ví được cấu hình sẵn.
Phát tán bằng hạ tầng quảng cáo thật
Hirudo được phát tán đúng cách mà một app hợp lệ được phát tán.
Mỗi mồi nhử gắn với nội dung có sức hút rộng: bóng đá và video, phim ngắn, mua sắm, và trỏ tới các đích thật hoặc trông như thật như storefront SparkShop Mall và catalogue phim ngắn KukuTV.
APK được phục vụ từ Amazon CloudFront, với các route riêng cho từng dòng mồi và một host riêng dành cho tám app ngân hàng đã vá. Đáng chú ý: các lần kiểm tra trong cuối tháng 9 và sang tháng 10/2026 cho thấy một số route vẫn còn sống, trong đó route theme casino vẫn phục vụ đúng con dropper thu được hồi tháng 8.
Chiến dịch được ghép lại bằng công cụ attribution thương mại phổ thông: một trang được lưu trữ hồi tháng 6/2026 trình bày nút cài kiểu Play Store cho "1v1 vip", dùng OpenInstall để đo lượt cài, và chia sẻ Meta Pixel ID với các bản ghi phim ngắn trong backend của Hirudo, nối trực tiếp branding quảng cáo với từng nhóm chiến dịch cụ thể.
Phía sau các mồi nhử là một panel dựng APK của kẻ tấn công, truy cập được mà không cần đăng nhập, dùng để ghép "shell" và payload APK thành mồi hoàn chỉnh cùng các app ngân hàng đã vá. Bucket lưu trữ và credential cũng bị để lộ ở đây.
Phạm vi nhắm tới
Việc thay app chỉ áp dụng cho Indonesia: cả tám app đã vá đều thuộc ngân hàng Indonesia. Nhưng phạm vi cấu hình của Hirudo rộng hơn nhiều so với bộ thay thế đó:
- Registry trong RAT có 42 app tài chính
- Danh sách mục tiêu credential trải khắp Trung Quốc, Ấn Độ, Mexico, Morocco và Thái Lan
- Trang checkout giả đi kèm mang branding ngân hàng và ví Malaysia
ThreatFabric nhận định lớp cấu trúc này cho thấy một hoạt động đã công nghiệp hóa một khu vực trong khi vẫn giữ bộ máy ở dạng chuyển hướng được. Engine thay thế, khung mồi nhử và backend đều không gắn chặt với bất kỳ ngân hàng nào, và việc backend có các nhóm đặt tên theo quốc gia cùng danh sách mục tiêu đa quốc gia cho thấy cùng bộ công cụ này có thể, và ở vài chỗ đã, được chĩa sang nơi khác.
Back office
Phía sau các điện thoại là một backend kết hợp điều khiển thiết bị với quản lý credential, dữ liệu tài chính và chiến dịch.
Dữ liệu thu được hồi tháng 8/2026 gồm hàng nghìn bản ghi credential ứng dụng, chia theo nhóm chiến dịch phim ngắn và mua sắm, cùng với bản ghi thiết bị, lịch sử màn hình khóa, và hồ sơ tài chính có cả trường thu nhập hàng tháng và điểm rủi ro.
Chi tiết nói lên nhiều nhất về mức độ chuyên nghiệp: kẻ tấn công tự đánh dấu các bản ghi mà chúng cho là đã "phished", dấu hiệu của một quy trình được dựng để biến dữ liệu đánh cắp thành tiền.
ThreatFabric không xác định được số nạn nhân.
Nhận định
Cuộc chơi đã dịch từ thiết bị sang chính tính toàn vẹn của ứng dụng. Suốt nhiều năm, phòng thủ phía ngân hàng xoay quanh câu hỏi "thiết bị này có đáng tin không": có root chưa, có Accessibility lạ không, Play Integrity trả về gì. Hirudo trả lời tất cả những câu hỏi đó bằng cách chiếm quyền trả lời. Khi engine chạy trong chính tiến trình của app, app không còn là bên quan sát trung thực nữa.
Engine tái sử dụng được, nên mở rộng là bài toán chi phí chứ không phải kỹ thuật. Chỉ một dòng được chèn vào lớp Application, phần còn lại nằm trong asset. Để nhắm sang một ngân hàng khác, kẻ tấn công cần bản APK gốc và một lần dựng lại, mà panel dựng APK của chúng đã tự động hóa sẵn việc đó.
Nghịch lý: kỹ thuật mạnh hơn nhưng dễ bị ngắt hơn. Overlay chạy ngầm và không đòi hỏi gì từ nạn nhân ngoài việc gõ vào màn hình giả. Hirudo thì phải gỡ app ngân hàng thật rồi cài lại từ nguồn ngoài. Đây là hai điểm mà một người dùng để ý có thể dừng toàn bộ chuỗi, và cũng là hai điểm mà đào tạo nhận thức có thể tác động trực tiếp.
Hạ tầng của kẻ tấn công được dựng cẩu thả ở vài chỗ quan trọng. Panel dựng APK không có xác thực, bucket và credential để lộ, keybox dùng loại đã rò rỉ công khai và đã bị thu hồi, Play Integrity relay qua HTTP thường. Với một nhóm đã bỏ công viết hooking engine, đây là những sơ hở đáng ngạc nhiên, và cũng là chỗ bên phòng thủ tận dụng được.
Việc công bố không chấm dứt chiến dịch. Các route CloudFront vẫn sống tới tháng 10, tức là sau khi dropper bị thu thập hồi tháng 8 khoảng hai tháng. Đây là lời nhắc quen thuộc: hạ tầng dùng dịch vụ CDN hợp lệ rất khó gỡ.
Liên hệ Việt Nam
- Ứng dụng ngân hàng là kênh giao dịch chính tại Việt Nam. Mọi ngân hàng lớn đều có app, và đó là nơi người dùng chuyển tiền, không phải web.
- Các lớp phòng thủ mà ngân hàng Việt Nam đang dùng đúng là những lớp Hirudo nhắm vào. Kiểm tra root, phát hiện Accessibility service lạ, chặn chụp màn hình bằng
FLAG_SECURE, và Play Integrity. Nếu những kiểm tra này chạy ở phía client và kết quả được tin tưởng, chúng không còn giá trị trước một app đã bị thay thế. - Thói quen cài APK ngoài store còn phổ biến, và mồi "cập nhật ứng dụng" đã rất quen thuộc với người dùng Việt qua nhiều chiến dịch giả mạo ứng dụng cơ quan nhà nước.
- Mồi nhử dạng mua sắm và phim ngắn phù hợp với thị trường Việt Nam. Các app phim ngắn và app mua sắm giá rẻ đang được quảng cáo rất mạnh trên mạng xã hội trong nước.
- Hirudo chưa nhắm Việt Nam, nhưng bộ máy của nó là loại chuyển hướng được, và các nước trong khu vực đã có tên trong danh sách cấu hình.
Khuyến nghị
Với ngân hàng và tổ chức tài chính
- Xác thực Play Integrity ở phía server, gắn verdict với phiên và với hành động cần bảo vệ, đồng thời kiểm tra danh sách thu hồi chứng chỉ attestation. Đây là biện pháp bắt được chính các chữ ký giả mà Hirudo tạo ra, vì keybox nó dùng đã bị thu hồi.
- Coi tín hiệu Accessibility và chặn chụp màn hình là bằng chứng hỗ trợ, không phải cổng chặn. App đã bị vá có thể giấu Accessibility service của chính nó và gỡ
FLAG_SECURE, nên những kiểm tra này nên đi vào mô hình chấm điểm rủi ro thay vì đứng một mình quyết định. - Bổ sung lớp phân tích hành vi. ThreatFabric nêu một điểm rất hay: ngay cả khi malware chặn được việc thu thập dữ liệu hành vi, thì chính sự vắng mặt của dữ liệu đó đã là một chỉ dấu đáng nghi.
- Giữ nguyên kiểm soát rủi ro giao dịch ở backend tại các thời điểm đăng nhập, khôi phục credential, tạo người thụ hưởng mới và phê duyệt thanh toán. Đây là những chỗ mà một kết quả giả do client trả về không thể thay thế quyết định phía server.
- Giám sát việc app bị gỡ và cài lại. Một tài khoản mà app vừa bị gỡ rồi cài lại từ nguồn không phải Play Store, ngay trước một giao dịch bất thường, là một mẫu rất đáng chấm điểm rủi ro cao.
Với người dùng và đội bảo mật doanh nghiệp
- Không bao giờ cài cập nhật ứng dụng từ bên trong một app khác. App ngân hàng chỉ cập nhật qua Play Store. Một thông báo "update" hiện lên trong app mua sắm hay app xem phim là dấu hiệu tấn công, không có ngoại lệ.
- Dừng lại ngay nếu có gì đó yêu cầu gỡ app ngân hàng. Đây là bước bắt buộc của Hirudo và cũng là điểm dễ nhận ra nhất trong cả chuỗi.
- Rà soát quyền Accessibility định kỳ trên thiết bị cá nhân và thiết bị BYOD truy cập tài nguyên doanh nghiệp. Một app không có lý do rõ ràng mà giữ quyền Accessibility cùng quyền đọc thông báo là tổ hợp cần điều tra.
- Chặn sideload trên thiết bị doanh nghiệp qua MDM, bật Play Protect, và với thiết bị BYOD thì tối thiểu phải có cảnh báo khi phát hiện cài đặt từ nguồn không xác định.
- Nạp IOC ở mục dưới vào hệ thống giám sát, lưu ý rằng các host CloudFront là hạ tầng hợp lệ dùng chung nên cần chặn ở mức đường dẫn chứ không chặn cả domain.
IOC
Theo công bố của ThreatFabric ngày 14/10/2026.
Mẫu malware (SHA-256)
f796eb9ecf516e4f1fafcf89200d9f7d8ddd234f705e63f1bc8fc3ef583f0248
com.agbbh.kjdrttt # moi mua sam + dropper
0097a0406be20544e98e981075427f40789db40fe4a53b1b4523383a945328b7
com.onev.vip # moi 1v1 vip + dropper
2e45277acfde3fb704179476b08f428f66a03670bbdbf2e8ec79c0b0333c009b
com.koishort.app # moi KoiShort + dropper (route casino)
d51f2bd7ffb49c224d8eaec2c8ca1c8ab9fce2fd5fdceea01eb54296c2f47b4d
com.zoyatv.app # moi ZoyaTV + dropper
425cd7072b5e9386ac94e97fe272980b6ef36240df6b5d77b371ab7378004c83
com.zk7qpx.mv9wlt # Hirudo RAT (build thang 7)
b2270c29b3d0a49a716730d6ef108cffec0b1a4b159dd02e93333fb85e492b99
com.r9nkvx.qw2mpl # Hirudo RAT (v7.8.166)
Hạ tầng điều khiển
www[.]helloharmonyos[.]com # dang ky moi va cau hinh kenh
jiekou[.]baojingtextile[.]cn # API cau hinh cua RAT
134[.]122[.]153[.]136:8085, :18085 # HTTP API endpoint
134[.]122[.]153[.]136:1883, :1884 # MQTT broker
Relay Play Integrity
hxxp://43[.]225[.]157[.]157:8766/request_token # dung trong 4 app da va
Route phát tán trên CloudFront
d3s06yhcwfnwcx[.]cloudfront[.]net/apk-fortress/latest.apk # 1V1 X
d21gcldn8gp80l[.]cloudfront[.]net # KoiShort (casino)
dydjjnnjg7jeb[.]cloudfront[.]net # KoiShort (phim ngan)
d3q4tlm7pw29zr[.]cloudfront[.]net # 8 app ngan hang da va
Hạ tầng dựng và quản lý APK
134[.]122[.]153[.]68:8080 # panel dung APK
134[.]122[.]153[.]92:8080 # panel dung APK
18[.]139[.]79[.]161 # host nguon APK va console quan ly app
Dấu hiệu nhận diện trên thiết bị
App giu dong thoi Accessibility + quyen doc thong bao ma khong co ly do ro rang
App ngan hang bi go roi cai lai tu nguon khong phai Play Store
App ngan hang co chu ky test key cong khai thay vi chu ky cua ngan hang
VPN duoc dung len ngay truoc hoac trong luc cai mot app khac
Truong du lieu gui len C2: appPayPwd (PIN thanh toan), appPwd (mat khau dang nhap)
Tài liệu tham khảo
- ThreatFabric — Hirudo: From Fake Updates to Patched Banking Apps (14/10/2026): https://www.threatfabric.com/blogs/hirudo-from-fake-updates-to-patched-banking-apps
- BleepingComputer (Bill Toulas) — Hirudo Android malware replaces banking apps to evade security checks (14/10/2026): https://www.bleepingcomputer.com/news/security/hirudo-android-malware-replaces-banking-apps-to-evade-security-checks/
Comments
Join the discussionNo comments yet. Be the first to comment.





