Lưu thông tin mật trong ứng dụng Android như thế nào?
Một trong những nguyên tắc lập trình an toàn là không lưu thông tin mật trong ứng dụng hay các tệp cấu hình. Vì thế các thông tin mật của ứng dụng Android không nên lưu ở SharedPreferences hay cơ sở dữ liệu SQLite.
Cả hai cách lưu trữ này đều có cơ chế phân quyền dựa trên hệ thống quyền của Linux, tương tự như hệ thống tệp. SharedPreferences trong Android gần tương tự như tệp INI trong Windows, vì dù đặt thuộc tính cấm đọc (ứng dụng khác) thì cũng chỉ là "phòng người ngay". Tin tặc có thể dùng lệnh run-as của adb (nếu ứng dụng có thể debug) hay sao lưu dữ liệu ra thẻ nhớ (nếu trong tệp manifest có dòng android:allowBackup="true") để đọc dữ liệu trong SharedPreferences. Ngay cả nếu lập trình viên đã dập các cờ debug và backup thì vẫn còn một lỗ hổng khác: với điện thoại đã bị root, phân quyền của Android là vô nghĩa. Google khuyến cáo nên dùng KeyStore để lưu trữ các giá trị bí mật của ứng dụng. KeyChainAPI được giới thiệu từ Android 4.0 đã cho phép các ứng dụng nhập khóa vào kho lưu trữ thông tin của hệ thống, nhưng những khóa đó thuộc sở hữu của hệ thống và các ứng dụng chỉ có thể yêu cầu truy cập. Android 4.3 bổ sung hỗ trợ cho khóa bí mật của ứng dụng, cho phép bất kỳ ứng dụng nào sinh và lưu khóa bí mật sao cho chỉ mình nó có thể truy cập. Hướng dẫn lập trình với KeyStore có thể xem tại đây.
Các tin đã đăng
|