An ninh ứng dụng Android

132

Android là một hệ điều hành dựa trên Linux , ban đầu được phát triển bởi Android Inc và sau được mua lại bởi Goole. Nó được thiết kế cho các thiết bị màn hình cảm ứng như điện thoại, máy tính bảng, máy ảnh …

anninhandroid02

Android được xây dựng  để cho phép các nhà phát triển để tạo ra các ứng dụng di động hấp dẫn tận dụng tất cả một chiếc điện thoại đã cung cấp. Nó được xây dựng để được thực sự mở. Ví dụ, một ứng dụng có thể kêu gọi bất kỳ chức năng lõi của điện thoại như thực hiện cuộc gọi, gửi tin nhắn văn bản, hoặc bằng cách sử dụng máy ảnh, cho phép các nhà phát triển để tạo ra phong phú hơn và nhiều hơn nữa những kinh nghiệm cố kết cho người dùng. Nền tảng này sẽ tiếp tục tiến triển như cộng đồng nhà phát triển công việc cùng nhau để xây dựng các ứng dụng di động sáng tạo.

Điện thoại Android đạt đến số lượng hàng trăm triệu người sử dụng, các tin tặc đã chuyển hướng đến các mục tiêu mới này. Các ứng dụng được cài đặt (từ google play hay các nguồn khác) có khả năng phơi bày ID, email, tài khoản của người dùng

Kiến trúc tổng quan Android

Android có một hạt nhân dựa trên nhân Linux phiên bản 2.6, kể từ Android 4.0 trở về sau sử dụng  phiên bản 3.x

anninhandroid03

Linux kernel

Lớp dưới cùng “linux kernel” , lớp này bao gồm các trình điều khiển khác nhau như máy ảnh, âm thanh, wi-fi, trình điểu khiển bàn phím, .. Android dựa trên linux cho hệ thống core như security, quản lý bộ nhớ, quản lý tiến trình, mạng, driver.

Vì linux là trái tim của hệ điều hành Android nên tính năng bảo mật được thừa kế. Mô hình bảo mật của Linux:

Bảo mật linux được dựa trên khái niệm người dùng và nhóm. Linux gắn một UID (user id) khi một user mới được khởi tạo và có thể được thêm vào gropup ( group có một group id, GID ). Mỗi tập tin trên Linux có UID của user được giao và chỉ có user này mới được phép thay đổi tập tin đó.

Với android khi một gói mới được cài đặt, nó được gán một UID mới và toàn bộ file (UID chưa được sử dụng trước đó), database được lưu bởi ứng dụng được gán cùng UID. Linux security ngăn chặn các ứng dụng có UID khác truy cập dữ liệu, tiến trình hay bộ nhớ của ứng dụng khác, dó đó đảm bảo an ninh và tách biệt giữa các ứng dụng trên nền tảng android.

 anninhandroid04

Libraries

Lớp bên trên  Linux kernel là thư viện gốc Android. Các thư viện được viết bằng ngôn ngữ C/C++. Được sử dụng bởi các thành phần khác nhau của hệ thống Android và cũng được dùng qua Android application framework ( lớp bên trên nó). Các thư viên được chạy như các tiến trình bên trong nhân Linux, bản thân các thư viện không là gì cả nhưng nó là tập hợp các hướng dẫn cho các thiết bị xử lý các loại dữ liệu khác nhau ( ví dụ thư viện media hỗ trợ chạy hay ghi lại các định dạng audio). Một só thư viện chính :SQLite ,WebKit ,Surface Manager ,OpenGL .

Android runtime
Nằm cùng một lớp với lớp thư viện,bao gồm các thư viện core JAVA và máy ảo Dalvik. Thư viện core JAVA được sử dụng để phát triển các ứng dụng trên Android. Một máy ảo là một môi trường ảo với hệ điều hành riêng của mình. Android sử dụng các khái niệm về máy ảo Dalvik được thiết kế để chạy nhiều máy ảo hiệu quả. Android OS sử dụng các máy ảo để chạy mỗi ứng dụng cũng như các tiến trình nó sử hữu.

Máy ảo Dalvik giúp

  • Quản lý bộ nhớ tốt hơn
  • Một ứng dụng không thể can thiệp các ứng dụng khác mà không có quyền hỗ trợ
  • Hỗ trợ thread

Hình dưới diễn tả môi trường của Android, có thẻ quan sát thấy mỗi ứng dụng chạy trên máy ảo riêng biệt và mỗi ứng dụng được gắn UID duy nhất

anninhandroid05

 

Application Framework

Lớp tiếp theo là Application framework. Chúng bao gồm cá chương trình quản lý các chức năng cơ bản của điện thoại như phân bổ tài nguyên, quản lý cuộc gọi bằng giọng nói ,.. Lập trình viên có thẻ sử dụng framework APIs để phát triển các ứng dụng phức tạp hơn.

Một số khối quan trọng của framework là quản lý tài nguyên (xử lý quản lý tài nguyên), quản lý vị trí (dịch vụ GPS), quản lý hoạt động, quản lý cuộc gọi thoại, cung cấp  nội dung.

Application

Trên cùng là Application, chúng bao gồm các ứng dụng như email, tin nhắn sms, bản đồ, trình duyệt các ứng dụng được phân phối qua các app store.

anninhandroid06

 

Các lỗi an ninh trên ứng dụng Android

Lưu dữ liệu

Một trong các nguy cơ an ninh phổ biến nhất là việc lưu trữ dữ liệu không an toàn. Có thể phân chia thành 3 mức độ như sau
–          Lưu dữ liệu nhạy cảm trên bộ nhớ trong không mã hóa : Việc lưu dữ liệu trên bộ nhớ trong không mã hóa tiềm tàng những nguy cơ khi người dùng mất máy, các dữ liệu có thể bị đọc được và sử dụng vào mục đích xấu.
Khuyến nghị : Nên mã hóa các dữ liệu trên bộ nhớ trong
–          Lưu dữ liệu nhạy cảm trên bộ nhớ trong không an toàn : Mặc định dữ liệu lưu trên bộ nhớ trong chỉ được truy cập bởi chính ứng dụng đó, về có bản sẽ đáp ứng đủ về vấn đề bảo mật.Tuy nhiên về một số lý do nào đó ứng dụng muốn chia sẻ dữ liệu với ứng dụng khác, MODE_WORLD_WRITABLE & MODE_WORLD_READABLE tạo file đó có thể ghi hay đọc bởi ứng dụng khác. Điều này dẫn tới một ứng dụng khác có thể được cài đặt và khai thác các dữ liệu chia sẻ đó ( mà không cần sự cho phép của người dùng ).
Khuyến nghị : Không sử dụng MODE_WORLD_WRITABLE & MODE_WORLD_READABLE ; nên dùng MODE_PRIVATE
–          Lưu dữ liệu nhạy cảm trên thẻ nhớ : File được tạo và lưu trên Sdcard có thể bị đọc và sửa đổi bởi các ứng dụng khác. :
Khuyến nghị : Không nên lưu dữ liệu quan trọng trên thẻ nhớ, nếu thực sự cần phải mã hóa dữ liệu

Yêu cầu các quyền không cần thiết

Một ứng dụng yêu cầu các quyền không cần thiết ( ví dụ như quyền gửi tin nhắn, gọi điện, truy cập internet …) có thể bị lợi dụng thực hiện các tác vụ ngoài ý muốn của người dùng

Khuyến nghị : Các ứng dụng chỉ nên yêu cầu các quyền cần thiết

An toàn kết nối client-server

Để tránh các nguy cơ nghe lén đường truyền việc tương tác client-server cần phải sử dụng SSL/TLS
Việc sử dụng SSL giúp bảo mật và toàn vẹn dữ liệu

Sử dụng Interprocess communication

Khi một process chia sẻ dữ liệu với một process khác, nó được gọi là INTER-PROCESS COMMUNICATION (IPC). Android cung cấp nhiều cơ chế IPS mới
–          Binder
–          Services
–          Intents
–          ContentProviders
Khi sử dụng IPC việc thiết lập android:exported giúp IPC có thể được sử dụng bởi các ứng dụng khác. Tuy nhiên nguy cơ ứng dụng gọi tới IPC có thể thực hiện các quyền vượt cấp ( vượt các quyền mà ứng dụng này có). Cần đảm bảo IPC không thực hiện các quyền quan trọng như  gửi tin nhắn, gọi điện, cài đặt ứng dụng …

anninhandroid07