+2

Bảo mật Dữ Liệu Ứng dụng Android

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ên

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

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

khi sử dụng chúng.

Tài liệu tham khảo:

http://developer.android.com/training/best-security.html


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí