TỔNG QUAN
Bối cảnh các mối đe dọa trên Android có rất nhiều loại phần mềm độc hại đa dạng, mặc dù mỗi phần mềm có chương trình độc hại riêng nhưng mục tiêu điển hình trong hầu hết các trường hợp là đánh cắp dữ liệu người dùng, đặc biệt là dữ liệu cá nhân có thể được sử dụng cho mục đích bất chính hoặc được bán sau đó.
Một số phần mềm độc hại nhất định có thể được phân loại là phần mềm gián điệp vì mục tiêu duy nhất của chúng là theo dõi người dùng bằng cách đánh cắp càng nhiều dữ liệu càng tốt trong khi vẫn lẩn tránh không bị phát hiện. Điều này hơi khác so với mục tiêu của những trình đánh cắp thông tin - thường là nhắm mục tiêu đến thông tin đăng nhập của người dùng và thông tin thẻ tín dụng để bán lại.
Trong số các phần mềm gián điệp đáng chú ý gần đây có thể nhắc đến SpyNote. Phần mềm gián điệp này lây lan qua phương thức smishing (tức là tin nhắn SMS độc hại) bằng cách thúc giục nạn nhân cài đặt ứng dụng từ các liên kết được cung cấp. Việc lưu trữ và tải xuống diễn ra bên ngoài ứng dụng Google Play chính thức nhằm mục đích vượt qua lớp đánh giá bảo mật do Google Play thực hiện, ngăn cản sự lây lan của phần mềm gián điệp này.
Bên cạnh việc yêu cầu quyền xâm phạm để truy cập nhật ký cuộc gọi, camera, tin nhắn SMS và bộ nhớ ngoài, SpyNote còn được biết đến với việc che giấu sự hiện diện của nó khỏi màn hình chính Android và màn hình gần đây nhằm gây khó khăn cho việc tránh bị phát hiện.
PHÂN TÍCH TÍNH NĂNG CHÍNH
Tệp tin Manifest
Manifest hay tệp tin kê khai chứa siêu dữ liệu (metadata) cho một nhóm các tệp tin đi kèm vốn là một phần của một tập hợp các đơn vị có liên kết với nhau.
Giống như phân tích phần mềm độc hại trên Android, các nhà nghiên cứu bắt đầu phân tích bằng cách xem tệp AndroidManifest.xml. Mặc dù danh sách các quyền mà SpyNote yêu cầu không đầy đủ nhưng F-Secure quan sát thấy một số quyền đáng ngờ, bao gồm: READ_SMS, PROCESS_OUTGOING_CALLS, CAMERA, RECORD_AUDIO, WRITE_EXTERNAL_STORAGE và BIND_ACCESSIBILITY_SERVICE.
Mặc dù, yêu cầu về các quyền này không phải lúc nào cũng chỉ ra hành vi nguy hiểm nhưng đây là những quyền điển hình mà phần mềm gián điệp yêu cầu.
Hình 1. Các quyền đáng ngờ được SpyNote yêu cầu
Ứng dụng ẩn
Sau khi cài đặt, ứng dụng không xuất hiện trong Trình khởi chạy ứng dụng (App launcher). Tuy nhiên, một kiểm tra đơn giản trong menu Settings -> Apps sẽ cho thấy ứng dụng đã được cài đặt thành công. Chúng ta có thể suy ra rằng ứng dụng đang ẩn để tránh bị phát hiện.
Hình 2 cho thấy hoạt động của trình khởi chạy trong SpyNote bị thiếu danh mục CATEGORY_LAUNCHER. Điều này làm cho ứng dụng bị ẩn trên điện thoại. Hình 2 cũng hiển thị tên lớp (class) của hoạt động chính.
Hình 2. Thiếu danh mục “Launcher” khiến ứng dụng bị ẩn
Loại trừ “Recents”
Ngoài việc ẩn chính nó, SpyNote còn thực hiện thêm một bước nữa là ẩn các hoạt động của nó khỏi hiển thị trên màn hình “Recents” (màn hình hiển thị các ứng dụng được sử dụng gần đây). Nó đạt được điều này bằng cách xác định thuộc tính android:excludeFromRecents trong Androidmanifest.xml và đặt nó thành “true”.
Khởi chạy ứng dụng ẩn
Có một số cách mà ứng dụng độc hại có thể sử dụng để khởi chạy ứng dụng ẩn:
- Kẻ tấn công gửi lệnh qua tin nhắn SMS. Ứng dụng nhận được thông báo “SMS received” và sau đó hiển thị biểu tượng ứng dụng.
- Khởi chạy ứng dụng khi nhận được kích hoạt bên ngoài, bao gồm: Nhận thông báo cho cuộc gọi đi và kích hoạt ứng dụng; Thêm bộ lọc ý định cho một URL cụ thể trong tệp kê khai. Bất cứ khi nào nạn nhân duyệt đến URL đó, phần mềm độc hại sẽ được khởi chạy. Ví dụ: nạn nhân có thể bị thuyết phục truy cập URL đó bằng cách gửi tin nhắn SMS; Sử dụng một ứng dụng khởi chạy riêng biệt chỉ gửi mục đích mong muốn đến ứng dụng độc hại.
Điều cần thiết đối với phần mềm gián điệp là nó phải được ẩn giấu. Tuy nhiên, điều này đặt ra câu hỏi liệu rằng nạn nhân sẽ khởi chạy ứng dụng độc hại như thế nào?
Hình 3. Màn hình hiển thị các ứng dụng gần đây
SpyNote có thể được khởi chạy thông qua trình kích hoạt bên ngoài. Các nhà nghiên cứu đã tạo một ứng dụng Android theo kiểu “Hello World” tối giản (như trong Hình 4), ứng dụng này chỉ gửi intent cần thiết (đối tượng thông báo có thể sử dụng để yêu cầu một hành động từ một vài thành phần trong ứng dụng). Khi nhận được intent, ứng dụng phần mềm độc hại sẽ khởi chạy hoạt động chính.
Hình 4. Ứng dụng kích hoạt bên ngoài khởi chạy phần mềm độc hại ẩn
Cấp quyền ứng dụng
Khi khởi chạy, SpyNote chủ yếu yêu cầu quyền BIND_ACCESSIBILITY_SERVICE và sau khi nạn nhân cấp quyền đó, ứng dụng sẽ tự cấp cho mình nhiều quyền cần thiết khác (android.permission.PROCESS_OUTGOING_CALLS, android.permission.RECORD_AUDIO, android.permission.WRITE_EXTRENAL,…)
Hình 5. Tự cấp quyền bằng dịch vụ trợ năng
Hình 5 hiển thị các bước sau khi nạn nhân cấp quyền BIND_ACCESSIBILITY_SERVICE:
- Ứng dụng yêu cầu lần lượt tất cả các quyền được đề cập trong tệp kê khai.
- Thay vì đợi nạn nhân cấp các quyền này, nó sẽ tạo ra một hành động “tap” để sao chép thao tác nhấn của người dùng, từ đó tự cấp tất cả các quyền được yêu cầu.
Trang bị cơ chế bảo vệ cứng
Sự nguy hiểm của SpyNote càng trở nên nghiêm trọng khi chúng được trang bị cơ chế tự bảo vệ “cứng” (diehard services). Mục tiêu chính của nó là làm cho việc tắt ứng dụng độc hại trở nên rất khó khăn, thực hiện bởi cả nạn nhân hoặc chính hệ thống Android.
SpyNote đạt được chức năng này bằng cách đăng ký bộ thu phát sóng (một thành phần Android cho phép đăng ký các sự kiện hệ thống hoặc ứng dụng), được gọi là “RestartSensor”. Bộ thu phát sóng này là một bộ thu duy nhất vì không có bộ thu nào khác trên hệ thống có thể xử lý chương trình phát sóng cụ thể mà SpyNote tạo ra khi nó sắp bị tắt.
Bất cứ khi nào dịch vụ SpyNote sắp ngừng hoạt động, phương thức onDestroy của dịch vụ đó sẽ được gọi. Phương thức này sau đó sẽ tự tạo ra một chương trình phát sóng “RestartSensor”. Đây là chương trình phát sóng dành riêng cho ứng dụng này và không thể được tạo bởi bất kỳ ứng dụng nào khác trên hệ thống. Khi nhận được thông báo này, bộ xử lý phát sóng (là bộ thu duy nhất đã đăng ký trước đó) sẽ khởi động lại dịch vụ. Hình 6 mô tả quá trình này.
Hình 6. Diehard services tự khởi động lại
Hình 7 hiển thị quá trình này thông qua ảnh chụp màn hình mã. Ứng dụng phần mềm gián điệp trước tiên khai báo bộ thu quảng bá trong tệp AndroidManifest.xml. Bất cứ khi nào thực hiện nỗ lực tắt máy để tiêu diệt các dịch vụ độc hại, phương thức onDestroy sẽ tạo ra chương trình phát sóng “RestartSensor”. Sau đó, máy thu quảng bá sẽ khởi động lại dịch vụ.
Hình 7. Các bước SpyNote thực hiện để ngăn chặn việc tắt các dịch vụ của mình
Giao tiếp C2
Giống như phần mềm gián điệp điển hình, dữ liệu bị đánh cắp chỉ hữu ích nếu nó được gửi lại cho kẻ tấn công. Quá trình lọc này xảy ra bằng cách thiết lập kết nối với máy chủ chỉ huy và kiểm soát (C2) của kẻ tấn công. Việc xác định máy chủ C2 như vậy và chặn liên lạc với nó có thể giúp ngăn chặn mọi hoạt động đánh cắp dữ liệu cá nhân.
Trong mẫu SpyNote mà các nhà nghiên cứu phân tích, giao tiếp C2 được thiết lập ngay lập tức như một phần của quá trình khởi tạo các dịch vụ phần mềm gián điệp. Một tìm kiếm đơn giản cho cuộc gọi “connect” sẽ tiết lộ sự tồn tại của giao tiếp C2. IP và cổng C2 được mã hóa base64 như trong Hình 8.
Hình 8. Giao tiếp C2
Ghi âm cuộc gọi điện thoại
SpyNote thậm chí còn ghi lại các cuộc gọi điện thoại đến nạn nhân dưới dạng tệp .wav và gửi đến máy chủ C2. Nó thực hiện điều này bằng cách trước tiên tự cấp cho mình quyền READ_CALL_LOG, điều này có thể thực hiện được nhờ vào quyền ACCESSIBILITY_SERVICE đã được cấp trước đó, đồng thời xác định thêm bộ thu phát sóng cho mục đích phát sóng của hệ thống PHONE_STATE.
Khi nạn nhân nhận được cuộc gọi đến, trạng thái điện thoại sẽ thay đổi và bộ thu phát sóng sẽ được kích hoạt. Mã trong bộ thu phát sẽ kiểm tra xem nạn nhân đã trả lời cuộc gọi hay chưa và sau khi được xác nhận, nó sẽ bắt đầu ghi âm. Hình 9 hiển thị các đoạn mã thực hiện hoạt động độc hại này.
Hình 9. Ghi âm cuộc gọi điện thoại
Chụp ảnh màn hình
SpyNote sử dụng API MediaProjection để chụp ảnh điện thoại của nạn nhân. API này cho phép ứng dụng ghi lại nội dung thiết bị có thể được ghi hoặc truyền tới các thiết bị khác như TV.
Để đạt được điều này, SpyNote đăng ký onImageAvailableListener và trình lắng nghe này được gọi bất cứ khi nào có hình ảnh mới. Sau đó, ứng dụng độc hại sẽ gửi trực tiếp dữ liệu hình ảnh đã chụp này dưới dạng tệp JPG đến máy chủ C2. Tất cả điều này được thể hiện trong Hình 10.
Hình 10. Phần mềm gián điệp chụp ảnh màn hình bằng ImageReader
Ghi nhật ký và đánh cắp dữ liệu
Theo dõi, ghi nhật ký và đánh cắp dữ liệu người dùng là một số tính năng cốt lõi của bất kỳ phần mềm gián điệp nào. SpyNote cũng tương tự như vậy. Sau khi khởi chạy thành công, nó sẽ tạo một tệp nhật ký mới và bắt đầu ghi lại nhiều hành động khác nhau do nạn nhân thực hiện.
Keylogging là một tính năng khác của SpyNote và tất cả các khóa mà nạn nhân nhập đều được ứng dụng độc hại ghi lại dưới dạng chuỗi Base64 trong tệp nhật ký của chính nó. Do có tệp nhật ký riêng, ứng dụng có thể dễ dàng lưu dữ liệu người dùng bị thu thập, chẳng hạn như thông tin đăng nhập. Hình 11 hiển thị tệp nhật ký được tạo bởi SpyNote và mật khẩu mở khóa màn hình được ghi trong đó.
Hình 11. Trình ghi thông tin phần mềm gián điệp
Một số ví dụ khác về hành động được ghi lại bao gồm bật/tắt màn hình, mật khẩu mở khóa màn hình, danh sách ứng dụng hiển thị trên màn hình chính, cử chỉ chuyển động,…
KHÓ KHĂN KHI GỠ CÀI ĐẶT
Mục tiêu của tất cả phần mềm gián điệp là tối đa hóa thời gian lưu trú trên thiết bị nạn nhân và trích xuất càng nhiều thông tin càng tốt. SpyNote bắt đầu hoạt động dưới dạng một ứng dụng ẩn, cũng đảm bảo khả năng tồn tại lâu hơn bằng cách gây khó khăn cho quá trình gỡ cài đặt.
Vì ứng dụng bị ẩn nên nạn nhân không thể “Long press (nhấn và giữ)” biểu tượng ứng dụng và gỡ cài đặt nó. Tùy chọn tiếp theo để nạn nhân gỡ cài đặt là vào Setting App và gỡ. Tuy nhiên, SpyNote ngăn chặn điều này bằng cách đóng màn hình menu bất cứ khi nào nạn nhân điều hướng đến ứng dụng thông qua Setting. Điều này có thể thực hiện được nhờ quyền BIND_ACCESSIBILITY_SERVICE mà phần mềm gián điệp có được.
Nạn nhân cũng không thể dừng các dịch vụ của phần mềm gián điệp này thông qua các tùy chọn của nhà phát triển vì phần mềm độc hại có trang bị tính năng “diehard services” đang chạy trên thiết bị, như được mô tả trước đó. Cuối cùng, nạn nhân chỉ còn lại tùy chọn thực hiện khôi phục cài đặt gốc, dẫn đến việc mất tất cả dữ liệu trong quá trình thực hiện.