Bài viết này tổng hợp các cách giúp app android phòng, chống mã độc. Cập nhật liên tục… (khi tác giả có thời gian hoặc tìm ra chiêu thức mới :D)

1. Kiểm tra Accessibility services

Accessibility là một ứng dụng giúp cải thiện giao diện người dùng để hỗ trợ người dùng bị khuyết tật hoặc người dùng tạm thời không thể tương tác đầy đủ với một thiết bị. Ví dụ: những người dùng đang lái xe, chăm sóc trẻ nhỏ, người khuyết tật hoặc tham dự một bữa tiệc có tiếng ồn rất lớn… có thể cần đến phản hồi bổ sung hoặc thay thế trên giao diện.

Trong những năm gần đây, mã độc đã lợi dụng Accessibility services để thực hiện các việc như: Đọc màn hình (đọc văn bản, thông báo..v..v..), nhấp vào một điểm trên giao diện, tự động cấp các quyền nguy hiểm khác như đọc, gửi sms…
Tóm lại là các hành vi độc hại nhằm thu thập thông tin, chôm chỉa tiền bạc của người dùng. Bạn có thể tham khảo bài viết Có gì bên trong mã độc Android đánh cắp tiền ngân hàng tại Việt Nam để xem chi tiết hơn về tác hại.

Vậy thì để bảo vệ người dùng, các app android cần phải phát hiện được các app cài trên thiết bị đang sử dụng Accessibility service. Code đơn giản như sau:

Sau khi có Package Name, App name thì việc còn lại chỉ là hiện thông báo cho người dùng rằng app này đang sử dụng Accessibility services, cảnh báo về các rủi ro có thể xảy ra, hướng dẫn tắt mới cho dùng app nếu cần thiết.

2. Chặn dùng custom keyboard

Khi người dùng sử dụng custom keyboard (hay app keyboard của bên thứ 3), mọi thứ họ nhập đều có thể bị thu thập. Các mã độc lợi có thể giả dạng một custom keyboard, lừa người dùng cài đặt rồi từ đó hoạt động như một keylogger đánh cắp thông tin nhạy cảm của người dùng như tài khoản, mật khẩu…

Để giúp người dùng có thể loại bỏ nguy cơ này, khi người dùng nhập các thông tin nhạy cảm cần check xem máy có đang dùng custom keyboard không và hiện thông báo không cho phép sử dụng custom keyboard để nhập thông tin nhạy cảm. Ý tưởng để thực hiện việc này là lấy ID của input method đang được sử dụng (có dạng packageName/class), sau đó kiểm tra xem packageName có phải là system app không, nếu không thì nó là một bàn phím custom. Code:

3. Chặn quay và chụp ảnh màn hình

Nhiều mã độc hiện nay có tính năng điều khiển điện thoại từ xa, sử dụng tính năng quay màn hình để truyền màn hình của máy nạn nhân về server của attacker. Để ngăn chặn việc này, cần kiểm tra xem máy có đang quay màn hình không, nếu có thì hiển thị một fragment che phủ toàn bộ app, hoặc bật popup cảnh báo người dùng

Theo hướng dẫn của Android, để bắt đầu quay màn hình cần tạo một virtual display để quay lại màn hình thông qua phương thức createVirtualDisplay, có thể truyền flags cho virtualDisplay thông qua tham số thứ 5 của phương thức trên, tuy nhiên virtualDisplay được tạo sẽ luôn có cờ VIRTUAL_DISPLAY_FLAG_PRESENTATION. Do đó, có phát hiện máy đang quay màn hình bằng cách lấy danh sách các màn hình có cờ PRESENTATION, cụ thể như sau:

Một việc nữa là chặn chụp màn hình, làm mờ app ở màn hình đa nhiệm bằng cách set FLAG_SECURE cho window

4. Overlay

Overlay (lớp phủ màn hình) là một tính năng trên Android giúp cho một ứng dụng có thể tạo một màn hình hiển thị đè lên bên trên các ứng dụng khác. Điều này có thể giúp cho các ứng dụng độc hại tạo ra một giao diện giả mạo ứng dụng nhằm lừa người dùng cung cấp thông tin nhạy cảm như tài khoản, mật khẩu…hoặc lừa người dùng click vào các button với các hành động nhạy cảm trên app.

Ví dụ khi user mở app bank X, mã độc có thể tạo một giao diện y hệt bank X để lừa nạn nhân nhập tài khoản mật khẩu (phishing). Hoặc lừa người dùng thực hiện một chuỗi các hành động click để chuyển tiền (tapjacking)
Đề giảm thiểu và ngăn chặn rủi ro đối với phần này, trên trang android.developer.com đã nói rõ, mình lười không nói lại nữa 😁

5. Lưu trữ dữ liệu nhạy cảm

Để tránh việc dữ liệu nhạy cảm của người dùng bị mã độc đánh cắp, phải tránh lưu những dữ liệu này ở các nơi mà các ứng dụng khác đều có thể đọc được ví dụ như external storage, sdcard. Lưu trữ dữ liệu ở internal storage của ứng dụng sẽ giúp ích nhiều cho việc bảo vệ dữ liệu nhạy cảm, nhưng nếu một ngày nào đó hệ điều hành (hoặc app) có lỗi bảo mật cho phép đọc file ở local storage thì dữ liệu cũng sẽ bị xâm phạm. Do vậy cần hạn chế lưu dữ liệu nhạy cảm trên thiết bị của người dùng, nếu bắt buộc cần phải lưu thì phải mã hoá đúng cách trước khi lưu

Tobe continued…

Categorized in: