Xin chào các bạn, hôm nay cuối tuần rảnh rỗi mới nhớ ra thời gian gần đây, có rất nhiều trường hợp khách hàng của các ngân hàng báo với cơ quan chức năng rằng không thao tác chuyển tiền nhưng tài khoản ngân hàng bỗng dưng mất tiền, trường hợp mất nhiều có thể lên tới hàng tỷ đồng, vậy thì nguyên nhân đến từ đâu? Mời các bạn cùng tôi tìm hiểu trong bài viết này!
Nếu các bạn có theo dõi tin tức thì các nạn nhân mất tiền trong tài khoản ngân hàng đều sử dụng ANDROID và nhận được các cuộc gọi hướng dẫn cài đặt các phần mềm không nằm trong chợ ứng dụng, mà từ các đường link tải và cài đặt file APK từ bên ngoài. Ví dụ ở đây, tháng trước fanpage của WhiteHat cũng có bạn nhờ tôi kiểm tra một ứng dụng tương tự, khi cài đặt vào có tên: “THUẾ ĐIỆN TỬ”. Dựa vào các thông tin tôi biết thì đây là chiến dịch lừa đảo giả mạo các ứng dụng Chính Phủ, Tổng cục Thuế, các ứng dụng tiện ích, quản lý dữ liệu nhắm vào Việt Nam.
Điều quan trọng nhất ở đây đó là sau khi được cài đặt vào máy, ứng dụng giả mạo này sẽ liên tục yêu cầu người dùng kích hoạt quyền “Trợ Năng” – Accessbility. Tôi đã thử cấp quyền này cho ứng dụng, thì phát hiện ứng dụng này có rất nhiều điều bất thường:
- Luôn hiển thị thông báo trên thanh thông báo
- Khi vào phần Cài đặt -> Ứng dụng và bấm vào ứng dụng giả mạo (mục đích là để xem thông tin) thì màn hình tự động quay trở về màn hình chính (home).
- Liên tục kết nối tới một địa chỉ IP.
- Máy hoạt động liên tục, rất nóng, hao pin.
Đến đây đã có rất nhiều điểm đáng ngờ, vì vậy tôi bắt đầu phân tích ứng dụng giả mạo này.
Sử dụng công cụ JADX để decompile ứng dụng android giả mạo này, tôi phát hiện 4 payload, bao gồm 3 payload có tên bắt đầu bằng ký tự “o” và kết thúc bằng 2 ký tự “bf”, 1 payload có tên “tg.iapk”.
Những gì ứng dụng giả mạo này thực hiện đó là lấy đường dẫn hiện tại và tạo thư mục “newobfs“, sau đó trích xuất thông tin từ resource file, giải mã 3 payload (sử dụng thuật toán xor) trên thành 0.pobfs, 1.pobfs, 2.pobfs ra thư mục này và thực thi trên bộ nhớ.
Sau khi giải mã bằng thuật toán của ứng dụng giả mạo này, tôi thu được 3 file có định dạng “dex”:
Những payload này chủ yếu có các chức năng liên quan đến xử lý hình ảnh, xử lý database sql, kiếm tra quyền root của thiết bị, gửi và nhận dữ liệu thông qua nhiều giao thức khác nhau: HTTP, UDP, TCP…
Kiểm tra quyền accessbility và thu thập các thông tin deviceNo, deviceId, osVersion, imei … của thiết bị:
Sau đó, ứng dụng giả mạo gửi các thông tin này đến C&C, địa chỉ C&C được mã hóa bằng RSA:
Ứng dụng giả mạo giải mã các domain, URL:
Kết quả giải mã thu được 2 domain: “myecat1[.]ieasyclick[.]net” và “myecat1[.]ieasytest[.]net”.
Ngoài ra, các payload này còn thu thập thêm nhiều thông tin và ứng dụng khác trên máy, nhưng tôi sẽ tập trung vào phân tích payload thứ 4: tg.iapk.
Payload này được trích xuất từ resource, extract sau đó giải mã bằng thuật toán XOR:
Thuật toán giải mã:
Khi được cấp quyền trợ năng – accessbility, ứng dụng giả mạo này sẽ tự động cấp cho chính nó các quyền thông thường khác, ví dụ: danh bạ, bộ nhớ, tin nhắn, cuộc gọi… Ứng dụng này sẽ tạo một cửa sổ hiển thị dạng overlay, có nghĩa là hiển thị lên trên tất cả các ứng dụng khác.
Mục đích của cửa sổ này rất rõ ràng đó là:
- Đọc nội dung từ màn hình của bất kỳ ứng dụng nào
- Đọc nội dung từ nút mà người dùng chạm vào
- Tìm một nút, trường thông tin mong muốn để thực hiện một hành động, vd: ấn nút
- Mô phỏng thao tác chạm vào màn hình
Tiếp theo, ứng dụng giả mạo này sẽ chờ lệnh và thực thi rất nhiều chức năng độc hại khác nhau, sau khi phân tích, tôi phát hiện khoảng 90 lệnh độc hại.
Danh sách các lệnh và chức năng cụ thể như sau:
STT | Lệnh | Mô tả/Chức năng |
1 | accStatus | Trạng thái của Accessibility |
2 | appDetail | Thay đổi các thiết đặt setting của app |
3 | permission | Xin tất cả các quyền |
4 | openMe | Mở lại app |
5 | capturePermission | Xin quyền chụp ảnh màn hình |
6 | floatPermission | Xin quyền hiển thị trên các cửa sổ app khác |
7 | autoBoot | Tắt tính năng khởi động lại |
8 | allPermission | Chưa xác định chức năng |
9 | closePlay | Đóng GooglePlay |
10 | installApk | Cài đặt Apk |
11 | startCam | Mở camera |
12 | setCam | Chụp ảnh |
13 | stopCam | Đóng camera |
14 | readContactList | Đọc danh bạ |
15 | readAlbumList | Đọc danh sách album các file names |
16 | readAlbumLast | Đọc danh sách album các file names đã xóa |
17 | readAlbumThumbnail | Đọc album thumbnails |
18 | readSmsList | Đọc các tin nhắn và gửi cho server |
19 | showShortcuts | Thêm biểu tượng ở màn hình chính |
20 | callAcc | Kiểm trả xem dịch vụ Android Accessibility đã được kích hoạt |
21 | callAppSetting | Mở settings |
22 | openIntent | Chưa xác định |
23 | backstage | Kiểm tra dịch vụ backstage |
24 | requestFloaty | Yêu cầu quyền cửa sổ động trên Android |
25 | permission | Yêu cầu toàn quyền |
26 | autoBoot | Tự động reboot lại máy |
27 | permissionB | Tự động phê duyệt quyền |
28 | reqFloaty | Tự động phê duyệt quyền cửa sổ động |
29 | releaseScreenCapture | Chụp màn hình |
30 | reqScreenPermission | Yêu cầu quyền chụp màn hình |
31 | reqPerList | Yêu cầu danh sách quyền |
32 | updateApk || install | Cập nhật và cài đặt Apk |
33 | update | Cập nhật Easyclick scripts |
34 | power | Chưa xác định (có thể là tắt máy) |
35 | capture | Chụp màn hình và gửi đi |
36 | screen_relay | Thông tin ảnh chụp màn hình |
37 | logMode | Mở trạng thái ghi log |
38 | capturePic | Bật tính năng chụp màn hình |
39 | home | Nhấp vào nút ‘Home’ qua dịch vụ accessibility |
40 | back | Nhấp vào nút ‘Back’ qua dịch vụ accessibility |
41 | recent | Nhấp vào nút ‘Recent’ qua dịch vụ accessibility |
42 | restartSc | Khởi động lại dịch vụ easyclick script |
43 | restartMe | Tự động khởi động lại ứng dụng |
44 | restartApp | Khởi động lại ứng dụng |
45 | reConn | Kết nối lại đến C&C |
46 | Awake | Giữ thiết bị luôn hoạt động |
47 | cancelAwake | Dừng thiết bị không cho tự đánh thức. |
48 | wakeup | Mở màn hình |
49 | cancelWakeup | Giữ màn hình mờ |
50 | setWakeup | Hẹn giờ hoạt động |
51 | swipePwdScreenOn | Bật chế độ bắt buộc dùng mật khẩu |
52 | swipePwdScreenOff | Tắt chế độ bắt buộc dùng mật khẩu |
53 | catAllViewSwitch | Hiện thị thông tin UI |
54 | reOpenMe | Mở lại ứng dụng |
55 | setDebugOn | Bật chế độ gỡ lỗi |
56 | setDebugOff | Tắt chế độ gỡ lỗi |
57 | autoRequestPerm | Tự động yêu cầu quyền |
58 | antiDeleteOn | Bật chế độ anti-delete |
59 | antiDeleteOff | Tắt chế độ anti-delete |
60 | lockScreen | Khóa màn hình |
61 | closeEnv | Đặt cờ trạng thái trợ năng thành false |
62 | screenshot | Chụp ảnh màn hình và tải lên |
63 | black | Thiết lập màn hình overlay màu đen |
64 | doNotDisturb | Bật chế độ không làm phiền |
65 | realtimeSet | Đặt gửi dữ liệu thời gian thực |
66 | closeProtect | Tắt chế độ bảo vệ GooglePlay Protect |
67 | installPermission | Cài đặt quyền người dùng |
68 | transparent | Làm cho màn hình trong suốt |
69 | light | Đóng cửa sổ Overlay màu đen (closeBlackScreen) |
70 | lightT | Đóng cửa sổ Overlay trong suốt (closeTransparentScreen) |
71 | inputSend | Thu thập các văn bản được nhập |
72 | touchDown | Thực hiện thao tác vuốt xuống |
73 | touchMove | Thực hiện thao tác vuốt chạm và giữ |
74 | touchUp | Thực hiện thao tác vuốt lên |
75 | rightClick | Ấn phím quay lại (back) |
76 | clickInput | Ấn vào phần giao diện nhập |
77 | gestureUnlock | Thực hiện hành động “vuốt để mở khóa” (swipeForUnlockScreen) |
78 | gestureCapture | Thực hiện hành động “vuốt để chụp ảnh màn hình” |
79 | gestureB | Thực hiện một loạt các cử chỉ |
80 | clickPoint | Thực hiện nhấp vào một điểm trên giao diện |
81 | stopHereTest | Dừng tác vụ |
82 | closeNewWin | clearNewWin |
83 | clickB | Bấm vào một phần tử trong giao diện (Image, Text, Button…) |
84 | clear | Xóa thông tin package khỏi danh sách ứng dụng sử dụng gần đây |
85 | wallpaper | Hành vi chưa xác định |
86 | googleAuth | Thu thập thông tin mã xác thực 2FA của google và gửi cho server |
87 | emailList | Thu thập và gửi danh sách ứng dụng email đã cài đặt |
88 | walletList | Thu thập và gửi danh sách ứng dụng ví điện tử đã cài đặt |
89 | fetchIcon | Thay đổi biểu tượng ứng dụng |
90 | walletSend | Tự động chuyển tiền số (tự động mở ứng dụng và thao tác chuyển tiền) |
Ứng dụng giả mạo này sẽ kiểm tra ngôn ngữ của máy và thiết lập C&C tùy vào ngôn ngữ của máy. C&C mã độc sử dụng là: “*.unixpop.xyz” cùng với các subdomain khác gồm test, jump, với các subdomain chia theo khu vực (sg, sg1, sg2, kr, hk, us, eu, ca, au, za, ru, uss, usn).
Kèm theo rất nhiều các chức năng phụ trợ khác để lấy cắp thông tin.
Tổng kết lại, đây là một ứng dụng giả mạo, một phần mềm độc hại khi được cấp quyền trợ năng – Accessbility của các thiết bị Android, mã độc hoàn toàn có thể kiểm soát thiết bị và thao tác điều khiển từ xa, từ đó có thể đánh cắp thông tin tài khoản, mật khẩu và thao tác mở ứng dụng ngân hàng để chuyển tiền. Mọi người nên thường xuyên theo dõi tin tức, cảnh giác với các chiêu trò gọi điện giả mạo cơ quan chức năng, yêu cầu tải và cài đặt các ứng dụng từ các trang không rõ nguồn gốc để tránh rủi ro đáng tiếc.
IOCs:
sha256:
c5de22493ed0112aa28ea1bf1cae63e33b5fe68f1ebe08f3d41093fda7913ac2 – file signed10310c.apk
5014c054aaf2d18f77c598fb6b015d3ecf23996db86c48b64822913d1f0cf65e – payload tg.iapk
e91d268ffd0675b1b916e01326288d3054cefd6717fed84bb0912fe5539194cd – payload ocRgbQOtbf
4134682c329689a678797bc0bb5425a2f080ae831292ec5f33129d88554a7af3 – payload ocgpRVawbf
1bad2304c958a7d1fdb8ba07cd38e4577dc14f2f90b50c9098338f9cfda5eb2d – payload oixN6vtJbf
C&C:
myecat1[.]ieasyclick[.]net
myecat1[.]ieasytest[.]net
*.unixpop[.]xyz
38[.]54[.]17[.]46
Cảm ơn các bạn đã theo dõi bài viết, nếu thấy bài viết hữu ích đừng quên like và chia sẻ nhé!