Android đã có chức năng bảo mật tích hợp trong hệ điều hành, và dựa vào các chức năng đó, chúng
ta có thể xây dựng ứng dụng với các chế độ bảo mật của android. Các chức năng bảo mật giúp bạn xây dựng bảo mật ứng dụng bao gồm:
ứng dụng Android Sandbox, mà nó cô lập dữ liệu ứng dụng và code thực thi từ các ứng dụng khác.
ứng dụng FrameWork với các chức năng bảo mật như cryptography, permissions, và secure IPC.
Công nghệ như ASLR, NX, ProPolice, safe_iop, OpenBSD dlmalloc, OpenBSD Calloc, và Linux
mmap_min_addr để giảm thiểu các rủi ro liên quan đến các lỗi quản lý bộ nhớ thông thường.
Một hệ thống tập tin được mã hóa có thể được kích hoạt để bảo vệ dữ liệu trên các thiết bị bị
mất hoặc bị đánh cắp.
Cung cấp cho phép người dùng hạn chế truy cập vào các tính năng hệ thống và dữ liệu người dùng.
Cho phép kiểm soát dữ liệu ứng dụng trên mỗi ứng dụng cơ sở.
1. Lưu trữ dữ liệu
Lưu trữ dữ liệu là một trong những tính năng bảo mật quan trọng nhất của ứng dụng trên Android, các dữ liệu được lưu trên thiết bị có thể truy cập vào các úng dụng khác.
Có 3 các cơ bản để lưu trữ dự liệu trên thiết bị:
Sử dụng bộ nhớ trong.
Mặc định, các tập tin bạn tạo ra trên bộ nhớ trong có thể truy cập duy nhất từ ứng dụng của bạn. Đây là chức năng được hỗ trợ bởi tính năng bảo mật Android và có trên hầu hết các ứng dụng.
Thông thường khi lưu trữ dữ liệu, bạn nên tránh sử dụng chế độ MODE_WORLD_WRITEABLE hoặc chế độ MODE_WORLD_READABLE cho các tập tin IPC vì chúng không cung cấp khả năng để hạn chế truy cập dữ liệu cho các ứng dụng cụ thể, và cũng không cung cấp bất kỳ việc kiểm soát trên định dạng dữ liệu. Nếu bạn muốn chia sẻ dữ liệu của bạn với các ứng dụng khác bạn có thể sử dụng Content provider. để bảo vệ các dữ liệu nhạy cảm bạn có thể mã hóa các tập tin sử dụng key mà không thể truy cập trực tiếp vào ứng dụng cụ thể.
Lữu trữ bộ nhớ ngoài.
Các tập tin được lưu trên bộ nhớ ngoài như SD Card, khi lưu trữ trên bộ nhớ ngoài thì người dùng có thể được sửa đổi, xóa, thêm,.. bởi người dùng. Không nên lưu trữ các tập tin thực thi hay lớp dữ liệu trên bộ nhớ ngoài, nếu ứng dụng của bạn không lấy các tập tin thực thi từ lưu trữ ngoài, các tập tin nên được mã hóa trước khi sử dụng.
Sử dụng Content providers.
cung cấp một cơ chế lưu trữ có cấu trúc có thể được giới hạn ứng dụng của riêng bạn hoặc xuất khẩu cho phép truy cập bởi các ứng dụng khác, Nếu bạn không có ý định để cung cấp các ứng dụng khác truy cập vào ContentProvider của bạn, bạn sử dụng thuộc tính: android:exported="false", trong tập tin manifest. nếu android:exported="android:exported" sẽ cho phép các ứng dụng khác truy cập dữ liệu của bạn. Nếu bạn muốn chia sẻ dữ liệu duy nhất trong ứng dụng của bạn thì sử dụng thuộc tính: android:protectionLevel="signature".khi truy cập Content provider, sử dụng các tham số truy vấn dữ liệu như query(), update(), và delete() để tránh truy suất dữ liệu không tin cậy.
2. Sử dụng permission
Chúng ta nên giảm thiểu tối đa số lượng request permission trong ứng dụng. Điều này sẽ làm giảm
thiểu rủi ro mất dữ liệu cho ứng dụng, nếu permission không cần thiết cho ứng dụng thì không nênm cung cấp permisison.ngoài việc yêu cầu permisison, ứng dụng của bạn có thể sử dụng quyền bảo vệ permission này sẽ cho phép ứng dụng của bạn tiếp xúc với cá ứng dụng khác.
3. Sử dụng IP Networking
Chúng ta nên sử dụng HTTPS trên HTTP bất cứ nơi nào mà HTTPS được hỗ trợ trên các máy chủ, vì
thiết bị di động thường xuyên kết nối vào mạng mà không được bảo vệ, chẳng hạn như các điểm nóng
Wi-Fi công cộng. Mã hóa giao tiếp ổ cắm cấp có thể được thực hiện dễ dàng bằng cách sử dụng các
lớp SSLSocket. Với tần suất các thiết bị Android kết nối với mạng không dây không an sử dụng Wi-
Fi, việc sử dụng mạng an toàn được khuyến khích cho tất cả các ứng dụng truyền thông trên mạng.
Chúng ta không nên sử dụng localhost để sử lý dữ liệu.
4. Sử dụng Telephony Networking
Các giao thức tin nhắn SMS được thiết kế chủ yếu để giao tiếp với người sử dụng, do những hạn chế
của SMS nên nên chúng ta nên sử dụng Google Cloud Messaging (GCM) và mạng IP để gửi thông điệp dữ liệu từ một máy chủ web đến ứng dụng của bạn trên thiết bị.
5. Sử dụng Webview
Chúng ta sử dụng Webview để hiện thị nội dung HTML và Javascript, chính vì vậy nếu chúng ta dùng
không đúng cách có thể dẫn đến không an toàn dữ liệu. Nếu ứng dụng của bạn không trực tiếp sử dụng
Javascript trong một Webview thì không nên gọi setJavaScriptEnabled (). Bởi mặc định, webview
không thực thi javascript.nếu ứng dụng của bạn truy cập dữ liệu với webview, bạn nên gọi phương
thức clearCache() để xóa các tập tin đã lưu trữ trên local.
6. Sử dụng mã hóa dữ liệu
Android cung cấp các thuật toán để mã hóa dữ liệu, nếu bạn muốn sử dụng một tập tin an toàn từ
việc kết nối internet bạn nên sử dụng các giao thức HttpsURLConnection hoặc SSLSocket và
các thuật toán mã hóa AES hoặc RSA được cung cấp trong lớp Cipher.
7. Sử dụng Intent
Intent cơ chế ưu tiên cho không đồng bộ IPC trong Android. Tùy thuộc vào yêu cầu của ứng dụng của
bạn, bạn có thể sử dụng sendBroadcast (), sendOrderedBroadcast (), hoặc một Intent rõ ràng để một
thành phần ứng dụng cụ thể. Nếu dữ liệu trong broadcast intent bạn nên áp dụng một permission để
đảm bảo rằng các ứng dụng độc hại không thể đăng ký để nhận được những tin nhắn mà không có quyền
thích hợp, trong trường hợp này nên sử dụng Intent trực tiếp, thay vì gọi broadcast.
8. Sử dụng Service
Service thường được sử dụng để cung cấp các chức năng cho các ứng dụng khác để sử dụng. Mỗi lớp
dịch vụ phải được khai báo tương ứng trong file manifest của nó. Theo mặc định Service không được
gọi bởi các ứng dụng khác, tuy nhiên bạn có thể thêm <ues-permission> trong file manifest để
start, stop or bind tới một dịch vụ.
9. Sử dụng binder and messenger interfaces
Sử dụng Binder hoặc Messenger là các cơ chế ưu tiên cho RPC-style IPC trong Android. Chúng cung
cấp một giao diện được xác định rõ cho phép xác thực lẫn nhau của các thiết bị đầu cuối, nếu có
yêu cầu. Binder và Messenger đối tượng không được khai báo bên trong manifest ứng dụng. Nếu bạn
đang tạo ra một giao diện mà yêu cầu xác thực và / hoặc truy cập điều khiển, những người điều
khiển phải được bổ sung rõ ràng là mã trong giao diện Binder hoặc Messenger. Nếu cung cấp một giao
diện mà không yêu cầu kiểm soát truy cập, sử dụng checkCallingPermission () để xác định người gọi
có permission hay không.
10. Sử dụng broadcast receivers
Một BroadcastReceiver xử lý yêu cầu không đồng bộ khởi tạo bởi một Intent. Receiver có thể được gọi bởi bất kỳ một ứng dụng nào, nếu BroadcastReceiver bạn muốn sử dụng cho ứng dụng khác bạn nên
cung cấp cho nó permisison <receiver> trong tập tin manifest. Điều này sẽ ngăn chặn các ứng dụng
mà không có quyền thích hợp từ việc gửi một Intent đến BroadcastReceiver.
11. Sử lý dữ liệu người dùng
Phương pháp tốt nhất để bảo mật dữ liệu người dùng là để giảm thiểu việc sử dụng các API truy cập
vào dữ liệu người dùng nhạy cảm hoặc cá nhân, Nếu bạn có quyền truy cập vào dữ liệu người dùng và
có thể tránh lưu trữ hoặc truyền thông tin, không lưu trữ hoặc truyền tải dữ liệu.
Bạn cũng nên xem xét liệu ứng dụng của bạn có thể vô tình để lộ thông tin cá nhân cho các bên khác
như thành phần của bên thứ ba cho quảng cáo của bên thứ ba hoặc các dịch vụ được sử dụng bởi ứng
dụng của bạn. Nếu bạn không biết lý do tại sao một phần hoặc dịch vụ đòi hỏi một thông tin cá
nhân, không cung cấp nó. Nói chung, việc giảm các quyền truy cập vào thông tin cá nhân bằng cách
ứng dụng của bạn sẽ làm giảm tiềm năng cho các vấn đề trong lĩnh vực này. Hãy cẩn thận khi viết
cho các bản ghi trên thiết bị. Trong Android, các bản ghi là một nguồn tài nguyên chia sẻ, và có
sẵn cho một ứng dụng với sự cho phép READ_LOGS. Mặc dù các dữ liệu nhật ký điện thoại chỉ là tạm
thời và xóa trên khởi động lại, các thông tin người dùng vô tình có thể rò rỉ dữ liệu người dùng
cho các ứng dụng khác.trên đây là một số thành phần cơ bản của ứng dụng android, và cách bảo mật
No comments:
Post a Comment