Lỗ hổng trên Android cho phép chèn mã độc vào ứng dụng mà không cần thay đổi chữ ký xác thực

08:50 | 22/12/2017

Hàng triệu thiết bị Android đang bị đe dọa bởi một lỗ hổng bảo mật nghiêm trọng, cho phép tin tặc bí mật chèn mã độc vào các ứng dụng hợp pháp trên smartphone.

Lỗ hổng được đặt tên là Janus, cho phép kẻ tấn công sửa đổi mã ứng dụng Android mà không ảnh hưởng đến chứng thư xác minh của các ứng dụng đó. Từ đó, tin tặc có thể phát tán ứng dụng hợp pháp đã được chèn thêm mã độc.

Lỗ hổng CVE-2017-13156 được các chuyên gia của công ty bảo mật di động GuardSquare (Bỉ) phát hiện, thông báo tới Google và được vá cùng một số lỗ hổng khác trong bản cập nhật tháng 12 của Google.

Tuy nhiên, điều đáng lo ngại là phần lớn người dùng Android chưa nhận được các bản vá này cho đến khi các nhà sản xuất thiết bị đưa ra bản cập nhật. Điều này có nghĩa là, một số lượng lớn người dùng smartphone có thể bị tin tặc tấn công qua khai thác lỗ hổng này.

Lỗ hổng ảnh hưởng đến các ứng dụng sử dụng lược đồ ký số APK v1 được cài đặt trên các thiết bị chạy Android phiên bản 5.0 (Lollipop) và 6.0 (Marshmallow).

Cách thức hoạt động của Janus

Lỗ hổng tồn tại trong cách thức Android xử lý cài đặt APK, cho phép thêm mã vào tệp APK mà không ảnh hưởng đến chữ ký của ứng dụng. Tệp APK hợp lệ là loại tệp lưu trữ (archive) bao gồm mã ứng dụng, tài nguyên, chữ ký, chứng chỉ và tệp kê khai.

Các phiên bản trước của hệ điều hành Android 5.0 (Lollipop) và 6.0 (Marshmallow) cũng hỗ trợ một máy ảo tiến trình giúp thực thi các tệp lưu trữ APK chứa mã và tệp ứng dụng được nén với định dạng DEX (Dalvik Executable).

Khi người dùng cài đặt ứng dụng Android hoặc bản cập nhật, thiết bị sẽ kiểm tra thông tin tiêu đề của APK để xác định xem archive có chứa mã trong tệp DEX đã nén hay không. Nếu tiêu đề archive APK chứa tệp DEX, máy ảo tiến trình sẽ dịch ngược mã và thực hiện, nếu không sẽ chạy mã như tệp APK thông thường. Một archive APK có thể chứa đồng thời các tệp DEX cũng như mã ứng dụng thông thường, mà không ảnh hưởng đến hiệu lực và chữ ký của nó.

Các chuyên gia nhận thấy, việc có thể thêm dung lượng mã do thiếu kiểm tra toàn vẹn tệp tin cho phép kẻ tấn công chèn mã độc vào archive APK, sau đó lừa người dùng cài đặt ứng dụng để thực thi cả hai mã trên thiết bị đích mà không bị phát hiện. Nói cách khác, thay vì phải chỉnh sửa mã ứng dụng hợp pháp, lỗ hổng cho phép kẻ tấn công chèn một số dòng mã độc hại vào ứng dụng ban đầu.

Kịch bản tấn công

Sau khi tạo ra các phiên bản ứng dụng độc hại, tin tặc có thể phát tán bằng các phương thức khác nhau như thư rác, phát tán trên kho ứng dụng bên thứ ba, đưa ra bản cập nhật giả mạo và cả tấn công Man-in-the-Middle (MITM).

Theo các chuyên gia, việc lừa một số người dùng tương đối dễ dàng vì ứng dụng vẫn giống ban đầu và có chữ ký hợp lệ. Cũng theo các chuyên gia, tấn công MITM có vẻ hấp dẫn hơn vì cho phép tin tặc đẩy bộ cài cho các ứng dụng cập nhật thông qua kết nối HTTP không mã hóa.

GuardSquare giải thích rằng: khi người sử dụng tải xuống một bản cập nhật của một ứng dụng, Android runtime sẽ so sánh chữ ký của ứng dụng đó với chữ ký của phiên bản gốc. Nếu chữ ký phù hợp, Android runtime sẽ tiến hành cài đặt bản cập nhật.

Ứng dụng được cập nhật kế thừa quyền của ứng dụng gốc. Do đó, kẻ tấn công có thể sử dụng lỗ hổng Janus để đánh lừa quá trình cập nhật và lấy được mã với các quyền truy cập trên thiết bị mà người dùng không nghi ngờ.

Các công cụ kỹ thuật dịch ngược phổ biến không giải mã được đoạn mã độc. Người dùng nên thận trọng khi tải các ứng dụng và cập nhật.

Vì lỗ hổng không ảnh hưởng đến Android 7.0 (Nougat) và phiên bản mới nhất hỗ trợ định dạng chữ ký APK phiên bản 2, nên người dùng đang chạy các phiên bản Android cũ hơn nên nâng cấp hệ điều hành thiết bị của mình.

Trong trường hợp nhà sản xuất thiết bị chưa cung cấp các bản vá bảo mật, hoặc phiên bản Android mới nhất, thì người dùng không nên cài đặt ứng dụng và bản cập nhật ngoài Google Play để giảm thiểu nguy cơ bị tấn công.

Các chuyên gia cũng khuyến cáo các nhà phát triển Android nên áp dụng ký số v2 để đảm bảo ứng dụng không bị chèn mà độc.