CHƯƠNG 1: TỔNG QUAN VỀ AN TOÀN BẢO MẬT TRÊN HỆ ĐIỀU HÀNH ANDROID Android là một hệ điều hành có mã nguồn mở dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng (của Samsung, LG, HTC, Motorola …). Ngôn ngữ chính thức để phát triển Android là Java. Phần lớn Android được viết bằng Java và các hàm API của nó được thiết kế để được gọi chủ yếu từ Java. Logo Android Ban đầu, Android được phát triển bởi Tổng công ty Android, với sự hỗ trợ tài chính từ Google, sau này được Google mua lại vào năm 2005.
Vào ngày 5 tháng 11 năm 2007, hệ điều hành Android chính thức ra mắt. Hệ quả là sự thành lập của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đính tạo nên một chuẩn mở cho điện thoại di động trong tương lai. Chiếc điện thoại đầu tiên chạy Android là HTC Dream được bán vào ngày 22 tháng 10 năm 2008. Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.1 Kiến trúc hệ điều hành Android Để nghiên cứu được về sự an toàn bảo mật trên hệ điều hành Android, trước tiên ta cần phải nắm được kiến trúc hệ điều hành này.
Từ đó có thể hiểu sâu hơn về hệ điều hành Android và nghiên cứu các mặt khác trong hệ điều hành dành cho đa số điện thoại thông minh này. Trong chương này, chúng ta sẽ tập trung vào nghiên cứu kiến trúc hệ thống cấp thấp Android và các thành phần bên trong. Dưới đây là sơ đồ mô tả nền tảng và kiến trúc hệ thống Android (Hình 1. Hệ thống gồm 5 phần, 4 lớp.
Mỗi phân vùng được đại diện bằng 1 màu. Vùng màu đỏ nằm ở lớp cuối cùng, đây là lớp Linux. Lớp này cung cấp 1 cập độ trừu tượng giữa phần cứng của thiết bị và các thành trình điều khiển phần cứng thiết yếu như máy ảnh, bàn phím, màn hình hiển thị … Vùng thứ hai là vùng màu xanh lá cây, bao gồm tập các thứ viện viết bằng ngôn ngữ C hoặc C++ như WebKit, libc, SQLite, …. Cùng một lớp với vùng này, là phần Android Runtime (Tiến trình Android).
Phần này cung cấp 1 bộ phận quan trọng là Dalvik Virtual Machine - là 1 loại Java Virtual Machine được thiết kế đặc biệt để tối ưu cho Android. Ngoài ra, nó cũng cung cấp 1 tập các thư viện chính giúp các nhà phát triển ứng dụng Android có thể viết ứng dụng Android bằng Java. Vùng màu xanh lam gồm hai lớp trên cùng, vùng này đại diện cho các ứng dụng cài đặt trên điện thoại cũng như các dịch vụ được cung cấp cho những ứng dụng đó. Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.1:Sơ đồ kiến trúc hệ thống cấp thấp Android Các phần dưới đây sẽ phân tích kỹ hơn về từng phần trong hệ thống Android để làm rõ hơn về cấu trúc và chức năng của mỗi phần.1 Tầng hạt nhân Linux (Linux Kernel) Mã nguồn của Linux được sử dụng trong nhiều hệ điều hành mã nguồn mở như Ubuntu, Fedora, OpenSUSE,… Mã nguồn Linux là mã nguồn cho phép mọi người sử dụng mà không phải trả phí bản quyền, bên cạnh đó người dùng được phép tùy ý sửa chữa theo ý mình thích.
Giống các hệ điều hành trên, Android sử dụng một phiên bản đặc biệt của hạt nhân Linux với một vài bổ sung, thay đổi đặc biệt để phù hợp chạy trên điện thoại, từ đó tạo nên những chiếc điện thoại thông minh. Tầng hạt nhân Linux là tầng nằm dưới cùng trong kiến trúc hệ thống Android, có trách nhiệm quản lý tất cả các hoạt động của điện thoại: Quản lý bộ nhớ điện thoại. Giao tiếp với phần cứng. Thực hiện bảo mật.
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.vn c 9 Quản lý tiến trình. Các thành phần chủ yếu trong tầng hạt nhân Linux: Trình điều khiển hiện thị (Display Driver): điều khiển hiện thị trên màn hình điện thoại, cũng như thu nhận tín hiệu điệu khiển của người dùng thông qua màn hình cảm ứng. Trình điều khiển máy ảnh (Camera Driver): Điều khiển hoạt động của máy ảnh và nhận dữ liệu từ máy ảnh. Trình điều khiển bộ nhớ Flash (Flash Memory Driver): Quản lý việc đọc ghi dữ liệu lên bộ nhớ flash.
Trình điều khiển kết nối mạng (Blinder (IPC) Driver): Chịu trách nhiệm về kết nối liên lạc mạng vô tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo chức năng truyền thông của điện thoại. Trình điều khiển bàn phím (Keypad Driver): Điều khiển bàn phím. Trình điều khiển mạng wifi (Wifi Driver): Điều khiển hoạt động thu phát sóng wifi. Trình điều khiển âm thành (Audio Driver): Điều khiển hoạt động thu phát âm thanh, giải mã từ các tín hiệu âm thanh sang tín hiệu số để ghi và từ tín hiệu số sang tín hiệu âm thanh để phát.
Trình quản lý hiệu năng (Power Management): Giám sát và quản lý tiêu thụ điện năng.2 Tầng Thư viện (Libraries) và Tiến trình Android (Android Runtime) a) Tầng Thư viện (Libraries) Thư viện nằm trong phân vùng màu xanh lá cây của kiến trúc hệ thống Android. Vùng Thư viện chứa tất cả các thư viện cơ sở của hệ điều hành Android. Như đã nói ở trên, các thư viên này được viết bằng ngôn ngữ lập trình C hoặc C++. Bằng những định nghĩa có sẵn trong các thư viện, phần mềm có thể dễ dàng sử dụng để hoạt động trên hệ điều hành Android.
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.vn c 10 Các thư viện trong phân vùng này được chia làm nhiều nhóm thư viên, mỗi nhóm cùng định nghĩa cho một loại thư viện khác nhau. Thư viện hệ thống (System C Library): đây là nhóm thư viện được viết theo chuẩn C. Nhóm thư viện này được thiết kế cho hệ điều hành và chỉ duy nhất hệ điều hành sử dụng nó. Thư viện phương tiện truyền thông (Media Libraries): nhóm thư viện này hỗ trợ việc phát hoặc ghi các tập tin.
Thư viện đồ họa 2D và 3D: Nhóm này hỗ trợ về vấn đề đồ họa. Trong Android, với OpenGL Lib, bạn có thẻ kết hợp cả 2D và 3D trong một giao diện người dùng. Thư viện cơ sở dữ liệu SQL: Hỗ trợ về việc lưu trữ và sử dụng các cơ sở dữ liệu. Hệ điều hành Android có một công cụ cơ sở dữ liệu có tên là SQLite, công cụ này cho phép bạn sử dụng để lưu trữ dữ liệu về ứng dụng.
Thư viện Web: Đây là một thư viện quan trong, nó giúp các thiết bị di dộng có thể hiện thị nhanh chóng các trang web gồm nhiều phần được viết với ngôn ngữ khác nhau như HTML, Java Script, CSS, … Để làm được điều này, hệ điều hành Android sử dụng thư viện Web Kit, giống với thư viện sử dụng trên Google Chrome và Safari. b) Tiến trình Android (Android Runtime) Như đã nói ở trên, trong hệ điều hành Android, để chạy một ứng dụng trên Android bạn cần sử dụng máy ảo Dalvik. Quá trình chạy Android chính là phần chứa máy ảo Dalvik và các thư viện giúp các chương trình viết bằng ngôn ngữ Java có thể hoạt động trên điện thoại. Để làm được điều này, Quá trình chạy Android chứa hai phần chính: Thư viện lõi (Core Libraries) : gồm các lớp JavaIO, collections, File access.
Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.vn c 11 Máy ảo Java : máy ảo được sử dụng trong hệ điều hành Android chính là máy ảo Dalvik. Chúng ta sẽ nói rõ hơn về máy ảo Dalvik vào phần sau.3 Tầng Khung ứng dụng (Application Framework) Tầng Khung ứng dụng cung cấp các dịch vụ cấp độ cao hơn cho các ứng dụng dưới dạng các lớp Java. Nói theo cách khác, các thành phần trong tầng này đều được viết bằng ngôn ngữ Java. Với tầng Khung ứng dụng của Android, các lập trình viên có thể dễ dàng sử dụng và xây dựng những ứng dụng cho điện thoại.
Có được điều đó bởi vì tầng này cung cấp các khối xây dựng mức độ cao, giúp hỗ trợ tạo nên các ứng dụng trong các dạng gói Android khác nhau. Hầu hết các phần trong tầng khung ứng dụng được thực thi như các ứng dụng và được chạy như các tiến trình nền trên thiết bị điện thoại. Tầng này có nhiệm vụ quản lý các chức năng cơ bản như thực hiện cuộc gọi, nhận cuộc gọi, gửi và nhận tin nhắn và giám sát hiệu năng sử dụng. Bên cạnh đó, ở đây còn có một số thành phần nắm giữ những chức năng đáng chú ý khác: Khối quản lý hoạt động (Activity Manager – AM): AM kiểm soát tất cả khía cạnh của vòng đời ứng dụng và ngăn xếp các Activity.
Khối quản lý giúp hệ điều hành có thể quản lý các tiến trình bằng cách theo dõi các ứng dụng đang hoạt động. Cùng với đó, AM thực hiện đóng các tiến trình nền nếu thiết bị hết bộ nhớ. Trong khi theo dõi các ứng dụng, AM có thể phát hiện ra các ứng dụng không phản hồi với một tác động đầu vào trong 5 giây, AM sẽ quyết định đó là một Ứng dụng không phản hồi và sẽ có trách nhiệm tả về một hộp thoại nhắc nhở người dùng có một ứng dụng không phản hồi. Đồng thời, nó cho phép người dùng lựa chọn đóng ứng dụng hoặc đợi ứng dụng phản hồi (Hình 1.2) Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.2: Hộp thoại ứng dụng không phản hồi Khối cung cấp nội dung (Content providers) : Đây là một khối xây dưng cơ bản của tầng khung ứng dụng.
Khối này có trách nhiệm giúp chia sẻ dữ liệu giữa các ứng dụng với nhau, giúp cùng một dữ liệu có thể được truy cập bởi nhiều ứng dụng. Mặc dù phải tạo ra một nơi để lưu trữ dữ liệu để cung cấp nội dung, nhưng giúp cho giảm đáng kể bộ nhớ cần sử dụng. Khối quản lý tài nguyên (Resource Manager) : Cung cấp quyền truy cập vào các tài nguyên như các chuỗi, màu sắc, các layout giao diện người dùng. Khối quản lý thông báo (Notifications Manager) : Cho phép các ứng dụng hiển thị thông báo các sự kiện.
Đây là hình thức truyền tải cho người dùng biết những thông tin, hoạt động chạy nền đang xảy ra. Có rất nhiều kiểu thông báo, bao gồm : đèn nháy, chế độ rung, âm thanh hay những thanh báo hiện thị trên màn hình (Hình 1. Số hóa bởi Trung tâm Học liệu và Công nghệ thông tin – ĐHTN http://lrc.