Danh mục OWASP: MASVS-CODE: Chất lượng mã
Tổng quan
Tính năng sao lưu ứng dụng nhằm mục đích lưu giữ dữ liệu của người dùng để sau này có thể khôi phục dữ liệu đó trên một thiết bị mới hoặc trong trường hợp mất dữ liệu. Các đề xuất bảo mật hiện có về việc sao lưu ứng dụng rất tinh tế, khác nhau giữa các phiên bản Android và nhà sản xuất thiết bị. Điểm chung là các đề xuất này nhằm đảm bảo rằng không có dữ liệu nhạy cảm nào bị rò rỉ.
Hệ thống Sao lưu Android chuẩn cung cấp giải pháp an toàn, mạnh mẽ và dễ dàng nhất cho các ứng dụng để sao lưu dữ liệu lên đám mây hoặc chuyển dữ liệu sang thiết bị mới thông qua tính năng Tự động sao lưu (được bật theo mặc định, không cần triển khai và cũng có thể mở rộng) và sao lưu khoá-giá trị. Bạn nên sử dụng giải pháp này vì giải pháp này lưu trữ dữ liệu sao lưu thu được ở các thư mục mà các ứng dụng bên thứ ba khác không thể truy cập, cũng như hỗ trợ quá trình mã hoá khi lưu trữ, mã hoá trong khi truyền, cũng như các cấu hình cho phép loại trừ dữ liệu nhạy cảm khỏi bản sao lưu.
Thay vào đó, nếu một ứng dụng triển khai giải pháp sao lưu không phụ thuộc vào hệ thống Sao lưu Android chuẩn, thì điều này có thể làm tăng khả năng xảy ra lỗi dẫn đến rò rỉ dữ liệu nhạy cảm. Ví dụ về các giải pháp sao lưu không chuẩn khiến dữ liệu người dùng bị rò rỉ bao gồm các ứng dụng cung cấp tính năng "xuất" hoặc "sao lưu" tạo bản sao dữ liệu ứng dụng trong các thư mục mà các ứng dụng khác có thể đọc được, do đó dễ bị rò rỉ (trực tiếp hoặc thông qua các lỗ hổng khác).
Tác động
Việc làm theo các đề xuất bảo mật khi thiết lập tính năng sao lưu ứng dụng sẽ ngăn chặn việc rò rỉ dữ liệu nhạy cảm có thể có trong bản sao lưu. Tuỳ thuộc vào dữ liệu thực tế và ý định của kẻ tấn công, việc rò rỉ dữ liệu nhạy cảm có thể dẫn đến việc tiết lộ thông tin, mạo danh người dùng và tổn thất tài chính.
Giải pháp giảm thiểu
Sử dụng hệ thống Sao lưu Android chuẩn
Hệ thống Sao lưu Android tiêu chuẩn luôn mã hoá dữ liệu sao lưu khi truyền và khi lưu trữ. Phương thức mã hoá này được áp dụng bất kể phiên bản Android đang sử dụng và thiết bị của bạn có màn hình khoá hay không. Kể từ Android 9, nếu thiết bị đã đặt màn hình khoá, thì dữ liệu sao lưu sẽ không chỉ được mã hoá mà còn được mã hoá bằng một khoá mà Google không biết (mã bí mật màn hình khoá sẽ bảo vệ khoá mã hoá, từ đó cho phép mã hoá hai đầu).
Nhìn chung, hãy nhớ tuân thủ nguyên tắc lưu trữ dữ liệu và nguyên tắc bảo mật.
Nếu bản sao lưu của bạn chứa dữ liệu đặc biệt nhạy cảm, bạn nên loại trừ dữ liệu này hoặc yêu cầu mã hoá đầu cuối (nếu không thể loại trừ dữ liệu này) như mô tả trong phần sau.
Loại trừ dữ liệu khỏi bản sao lưu
Bạn có thể chỉ định dữ liệu cần loại trừ khỏi bản sao lưu bằng cách sử dụng tệp quy tắc, thường được gọi là backup_rules.xml
và được đặt trong thư mục ứng dụng res/xml
.
Có một số điểm khác biệt về cách định cấu hình quy tắc sao lưu tuỳ vào phiên bản Android được sử dụng:
- Đối với Android phiên bản 12 (API cấp 31) trở lên, hãy thêm thuộc tính
android:dataExtractionRules
vào phần tử<application>
trongAndroidManifest.xml
: - xml
xml <application android:name="com.example.foo" android:dataExtractionRules="@xml/backup_rules_extraction"> … </application>
Sau đó, hãy định cấu hình tệp backup_rules.xml
theo yêu cầu về bảo mật và tính ổn định của dữ liệu của ứng dụng, tuân theo định dạng cấu hình đã cập nhật.
Định dạng bắt buộc cho cấu hình tệp backup_rules.xml
cho phép nhà phát triển xác định các quy tắc sao lưu tuỳ chỉnh cho cả hoạt động chuyển trên đám mây và chuyển từ thiết bị này sang thiết bị khác (D2D). Nếu bạn không đặt thuộc tính <device-transfer>
, tất cả dữ liệu ứng dụng sẽ được chuyển trong quá trình di chuyển D2D. Điều quan trọng là phải nhấn mạnh rằng ngay cả khi ứng dụng mục tiêu nhắm đến Android 12 trở lên, bạn phải luôn chỉ định một tệp riêng có một bộ quy tắc sao lưu bổ sung cho các thiết bị chạy Android 11 (API cấp 30) trở xuống.
- Đối với Android phiên bản 11 trở xuống, hãy thêm thuộc tính
android:fullBackupContent
vào phần tử<application>
trongAndroidManifest.xml
: - xml
xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>
Sau đó, hãy định cấu hình tệp backup_rules.xml
theo yêu cầu về bảo mật và tính ổn định của dữ liệu của ứng dụng bằng cách sử dụng cú pháp được báo cáo trong bài viết duy trì dữ liệu người dùng.
Yêu cầu mã hoá hai đầu
Nếu không thể loại trừ dữ liệu nhạy cảm khỏi bản sao lưu, bạn nên yêu cầu mã hoá hai đầu, tức là chỉ cho phép sao lưu trên Android 9 trở lên và chỉ khi màn hình khoá được thiết lập. Bạn có thể thực hiện việc này bằng cách sử dụng cờ requireFlags="clientSideEncryption"
. Bạn cần đổi tên cờ này thành disableIfNoEncryptionCapabilities
và đặt thành true
kể từ Android 12.
Nếu bạn không thể sử dụng hệ thống Sao lưu tiêu chuẩn của Android
Nếu bạn không thể sử dụng hệ thống Sao lưu Android tiêu chuẩn, thì việc lưu trữ an toàn dữ liệu sao lưu cũng như chỉ định dữ liệu nào sẽ bị loại trừ khỏi bản sao lưu sẽ phức tạp hơn. Bạn cần chỉ định điều này ở cấp mã và do đó dễ gặp lỗi, có nguy cơ rò rỉ dữ liệu. Trong trường hợp này, bạn cũng nên thường xuyên kiểm thử phương thức triển khai của mình để đảm bảo không có sự thay đổi nào đối với hành vi sao lưu dự kiến.
Tài nguyên
- Nội dung mô tả thuộc tính allowBackup
- Mã hoá dựa trên tệp
- Các thay đổi trong hoạt động chuyển dữ liệu từ thiết bị sang thiết bị
- Sao lưu dữ liệu người dùng bằng tính năng Tự động sao lưu
- Sao lưu các cặp khoá-giá trị bằng Android Backup Service
- 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
- Kiểm thử chức năng sao lưu và khôi phục
- Mật mã học
- Hệ thống Kho khoá Android
- ADB
- Tuỳ chọn cho nhà phát triển