Danh mục OWASP: MASVS-STORAGE: Bộ nhớ
Tổng quan
Các ứng dụng thường lưu trữ dữ liệu để sử dụng, cho dù là cục bộ trên thiết bị, trong bộ nhớ ngoài hay lưu trữ từ xa trong bộ nhớ trên đám mây. Để duy trì trạng thái của ứng dụng, hệ thống sẽ sao lưu ứng dụng để có thể khôi phục trong trường hợp ứng dụng gặp phải sự cố nghiêm trọng hoặc lỗi người dùng dẫn đến việc mất dữ liệu. Khi dữ liệu được lưu trữ liên quan đến thông tin nhạy cảm, chẳng hạn như dữ liệu cá nhân hay mật khẩu và khoá xác thực của người dùng, các biện pháp bảo mật bổ sung có thể sẽ được áp dụng để ngăn chặn việc rò rỉ dữ liệu nhạy cảm này nếu có ai đó không phải là người dùng dự kiến truy cập vào bản sao lưu.
Điều quan trọng bạn cần lưu ý đó là một trong những phương pháp phổ biến nhất để truy xuất dữ liệu sao lưu là sử dụng lệnh sao lưu ADB. Phương pháp này yêu cầu phải bật Tuỳ chọn cho nhà phát triển trên thiết bị. Khi bật Tuỳ chọn cho nhà phát triển, bạn phải sử dụng mã PIN của người dùng. Để truy xuất bất cứ dữ liệu sao lưu nào, trước tiên, kẻ tấn công tiềm ẩn sẽ cần phải có được mã PIN của người dùng.
Mức độ tác động
Kẻ tấn công có quyền truy cập vào tệp sao lưu của một ứng dụng sẽ có thể truy xuất mọi dữ liệu chưa mã hoá mà ứng dụng đó đã sao lưu. Vì vậy, mọi dữ liệu nhạy cảm bị tiết lộ đều có thể bị kẻ tấn công sử dụng trong các cuộc tấn công sau này hoặc dễ dàng bị khai thác.
Rủi ro: Cho phép sao lưu ứng dụng
Bất cứ kẻ tấn công nào có quyền truy cập vào một thiết bị đã mở khoá hoặc quyền truy cập vào một Tài khoản Google bị xâm phạm đều có thể sao lưu ứng dụng và dữ liệu của ứng dụng đó.
Điều quan trọng cần lưu ý đó là kể từ Android 12, dữ liệu ứng dụng sẽ không được đưa vào dữ liệu sao lưu, miễn là thuộc tính android:debuggable
trong Tệp kê khai Android được đặt thành false
. Do đó, mọi dữ liệu ứng dụng chưa mã hoá có trong bản sao lưu đều có thể bị kẻ tấn công tiết lộ và lợi dụng.
Điều quan trọng cần lưu ý là mặc dù các thay đổi về cấu hình sau đây có thể giúp ngăn dữ liệu nhạy cảm trong tệp sao lưu bị rò rỉ, nhưng không phải nhà sản xuất điện thoại nào cũng tuân thủ các chính sách sao lưu của ứng dụng. Do đó, dữ liệu không dành để sao lưu vẫn có thể được sao lưu thông qua một giải pháp sao lưu riêng của nhà sản xuất thiết bị gốc (OEM). Để tính đến những trường hợp như vậy, hãy cân nhắc việc triển khai các biện pháp bổ sung nhằm bảo vệ dữ liệu người dùng, chẳng hạn như mã hoá và xoá hoặc không lưu trữ các dữ liệu không cần thiết có thể được coi là nhạy cảm.
Giải pháp giảm thiểu
Tắt tính năng sao lưu ứng dụng
Nếu ứng dụng vẫn có thể hoạt động bình thường mà không cần đến dữ liệu sao lưu, hãy cân nhắc thêm các quy tắc để ngăn chặn hoạt động sao lưu. Để hạn chế hoạt động sao lưu một ứng dụng, hãy đặt thuộc tính android:allowBackup
trong tệp AndroidManifest.xml
thành false
. Xin lưu ý rằng đối với Android phiên bản 12 trở lên, việc đặt allowBackup
thành false
sẽ hạn chế hoạt động sao lưu trên đám mây và ADB, nhưng vẫn cho phép hoạt động di chuyển từ thiết bị này sang thiết bị khác.
<application android:name="com.example.foo" android:allowBackup="false">
...
</application>
Kiểm soát dữ liệu được sao lưu
Nếu hoạt động sao lưu là cần thiết để dùng ứng dụng một cách bình thường, thì bạn có thể đặt các quy tắc sao lưu để chỉ định dữ liệu nào được sao lưu. Các quy tắc đó được xác định trong tệp backup_rules.xml. Có một số điểm khác biệt về cách định cấu hình các quy tắc này tuỳ vào phiên bản Android được sử dụng:
Đối với Android phiên bản 12 trở lên, hãy thêm thuộc tính android:dataExtractionRules
vào phần tử <application>
trong AndroidManifest.xml như trong ví dụ sau:
<application android:name="com.example.foo"
android:dataExtractionRules="backup_rules.xml">
…
</application>
<application android:name="com.example.foo"
android:fullBackupContent="@xml/backup_rules">
…
</application>
Rủi ro: Lưu trữ dữ liệu nhạy cảm không được mã hoá
Tuỳ vào mục đích của ứng dụng, một số dữ liệu được sao lưu trên thiết bị có thể được coi là nhạy cảm; chẳng hạn như dữ liệu liên quan đến dữ liệu cá nhân và dữ liệu tài chính. Kẻ tấn công tìm cách xâm phạm thiết bị của người dùng có thể truy xuất dữ liệu từ thiết bị đó. Kết quả là mọi dữ liệu văn bản thô bị để lộ cho kẻ tấn công đều có thể bị khai thác.
Giải pháp giảm thiểu
Mã hoá mọi dữ liệu nhạy cảm
Để cải thiện khả năng bảo mật dữ liệu, hãy mã hoá mọi dữ liệu đã lưu trữ có thể được coi là nhạy cảm bằng cách tuân thủ các nguyên tắc mật mã học của Android, đồng thời sử dụng hệ thống Kho khoá Android để bảo vệ các khoá mã hoá.
Nếu cần hỗ trợ hoạt động di chuyển dữ liệu ứng dụng sang thiết bị mới, hãy cân nhắc việc triển khai chế độ chuyển dữ liệu cho ứng dụng, trong đó dữ liệu đã mã hoá được lưu trữ ngắn gọn không mã hoá trong các tệp nội bộ của ứng dụng; cho phép chuyển dữ liệu của ứng dụng sang một thiết bị mới.
Khi triển khai chế độ chuyển dữ liệu, hãy cân nhắc các phương pháp hay nhất sau đây:
- Đảm bảo rằng chỉ người dùng ứng dụng đã được xác thực mới có thể bật chế độ chuyển dữ liệu.
- Lưu trữ dữ liệu chưa mã hoá trên thiết bị trong các tệp nội bộ của ứng dụng chứ không phải trong bộ nhớ ngoài.
- Chỉ cho phép các tệp chưa mã hoá tồn tại trong một khoảng thời gian ngắn; sau đó các tệp này sẽ bị xoá.
- Sau khi chuyển xong các tệp, hãy yêu cầu ứng dụng mã hoá những tệp chưa mã hoá khi khởi động.
Mặc dù chế độ này cũng cho phép sao lưu dữ liệu chưa mã hoá, nhưng việc giới hạn khoảng thời gian có thể sao lưu dữ liệu chưa mã hoá sẽ giúp giảm nguy cơ kẻ tấn công chưa được xác thực giành quyền truy cập vào dữ liệu văn bản thô.
Tài nguyên
- Nội dung mô tả thuộc tính allowBackup
- Các thay đổi trong hoạt động chuyển dữ liệu từ thiết bị sang thiết bị
- Kiểm soát hoạt động sao lưu trên Android 12 trở lên
- Kiểm soát hoạt động sao lưu trên Android 11 trở xuống
- Tìm hiểu về Thông tin nhận dạng cá nhân (PII) trong các hợp đồng và chính sách của Google
- Mật mã học
- Hệ thống Kho khoá Android
- ADB
- Tuỳ chọn cho nhà phát triển