Danh mục OWASP: MASVS-CODE: Chất lượng mã
Tổng quan
Việc phát hành các bản dựng chính thức bao gồm các tính năng Kiểm thử hoặc Gỡ lỗi có thể tác động tiêu cực đến tình trạng bảo mật của ứng dụng. Các chức năng này dùng để giúp nhà phát triển phát hiện và xác định lỗi trong các trường hợp sử dụng dự kiến của ứng dụng trước hoặc sau khi phát hành phiên bản mới, đồng thời không thể truy cập công khai.
Ví dụ về các tính năng Kiểm thử/Gỡ lỗi:
- Các trình đơn ẩn
- Các tuỳ chọn bật nhật ký gỡ lỗi
- Các tuỳ chọn thay đổi luồng ứng dụng
- Các tuỳ chọn tránh né quy trình thanh toán hoặc đăng ký
- Các tuỳ chọn tránh né việc xác thực
- Các tính năng kiểm thử cho những hoạt động dành riêng cho ứng dụng
Người dùng độc hại có thể tận dụng tất cả những tính năng nêu trên để thay đổi quy trình dự định của ứng dụng hoặc truy xuất thông tin hệ thống nhằm điều chỉnh các cuộc tấn công khác.
Rủi ro gặp phải khi tiết lộ các tính năng Kiểm thử hoặc Gỡ lỗi có thể khác nhau tuỳ theo hành động liên quan đến chính các tính năng gỡ lỗi đó.
Một vấn đề rủi ro khác đối với ứng dụng là thuộc tính android:debuggable được đặt trong phần tử AndroidManifest.xml <application>
. Theo báo cáo trong bài viết android:debuggable, việc triển khai ứng dụng chính thức với tập hợp giá trị nêu trên sẽ cho phép người dùng độc hại truy cập vào các tài nguyên quản trị thường không thể truy cập.
Mức độ tác động
Người dùng độc hại tương tác với một tính năng Kiểm thử hoặc Gỡ lỗi trong bản dựng chính thức có thể dẫn đến các kết quả không mong muốn. Tác động của bất kỳ hành động nào đều liên quan trực tiếp đến các quyền được cấp cho tính năng đó. Quyền càng cao thì tác động của một hành động khai thác đang diễn ra càng lớn. Các chức năng như vậy trong ứng dụng có thể dùng để tránh né một số biện pháp bảo vệ, bỏ qua tường phí, truy xuất thông tin liên quan đến hệ thống/người dùng, hoặc kích hoạt các hoạt động kiểm thử.
Giải pháp giảm thiểu
Tránh sử dụng các thành phần gỡ lỗi
Tuyệt đối không được triển khai các chức năng kiểm thử hoặc gỡ lỗi trong các thành phần của ứng dụng chính thức, chẳng hạn như các hoạt động, broadcast receiver, dịch vụ hoặc nhà cung cấp nội dung vì nếu được xuất, bất kỳ quy trình nào khác trên thiết bị đều có thể chạy các chức năng kiểm thử hoặc gỡ lỗi. Việc đặt thành phần gỡ lỗi là chưa xuất (android:exported="false") không cấu thành biện pháp bảo vệ hợp lệ cho các tính năng vì mọi thiết bị bị can thiệp hệ thống vẫn có thể thực thi quá trình này thông qua công cụ Cầu gỡ lỗi Android (ADB) nếu tuỳ chọn gỡ lỗi được bật.
Chỉ dùng các tính năng gỡ lỗi hoặc kiểm thử cho các bản dựng đang thử nghiệm
Việc thực thi chức năng kiểm thử/gỡ lỗi bất kỳ trong ứng dụng chỉ nên diễn ra với một nhóm nhỏ các Bản dựng đang thử nghiệm. Như vậy, chỉ nhà phát triển mới có thể gỡ lỗi hoặc kiểm thử các tính năng của ứng dụng trong một môi trường được kiểm soát. Bạn có thể thực hiện việc này bằng cách tạo một bản dựng kiểm thử hoặc gỡ lỗi riêng của ứng dụng và các hoạt động kiểm thử đo lường nâng cao cho ứng dụng đó để đảm bảo rằng mọi tính năng kiểm thử hoặc gỡ lỗi đều chạy trên một phiên bản riêng biệt.
Triển khai quy trình tự động kiểm thử giao diện người dùng
Khi thực hiện quy trình kiểm thử trên một ứng dụng, hãy chọn các quy trình tự động kiểm thử giao diện người dùng vì các quy trình này có thể thực thi nhiều lần trong một môi trường riêng biệt và ít có khả năng xảy ra lỗi do con người.
Tài nguyên
- Hướng dẫn cho nhà phát triển về cách thiết lập quy trình kiểm thử nâng cao
- Hướng dẫn cho nhà phát triển về cách tự động hoá quy trình kiểm thử giao diện người dùng
- android:debuggable
- android:exported
- Ứng dụng có thể gỡ lỗi trong Android Market
- Mã gỡ lỗi có thể gây ra lỗ hổng bảo mật không?