HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG ***** PHẠM HOÀNG DUY BÀI GIẢNG AN TOÀN HỆ ĐIỀU HÀNH HÀ NỘI 2017 Lời nói đầu Hệ điều hành phận cấu thành quan trọng hệ thống máy tính giúp cho người khai thác sử dụng hiệu hệ thống máy tính Sự phổ biến máy tính phát triển ứng dụng mạng khiến cho vấn đề an toàn trở nên cấp thiết Bài giảng môn học trước hết giới thiệu yêu cầu kiến trúc đáp ứng mục tiêu an toàn cho hệ điều hành Đồng thời, giảng trình bày số chế phần cứng máy tính cho phép hạn chế, che dấu, kiểm soát việc sử dụng tài nguyên máy tính xử lý, nhớ thiết bị vào/ra để hỗ trợ cho hệ điều hành triển khai dịch vụ quản lý tiến trình cách an tồn Ngồi ra, giảng giới thiệu mơ hình an tồn tắc phục vụ cho yêu cầu an toàn khác hệ thống tính tồn vẹn hay tính bí mật Phần cuối trình bày cách thức mơ tả yêu cầu kỹ thuật kiểm chứng nhằm kiểm tra đánh giá khả đáp ứng yêu cầu an toàn hệ thống Cấu trúc chi tiết giảng sau Chương I giới thiệu vấn đề với an toàn hệ điều hành tập trung chủ yếu vào việc mô tả xác định mục tiêu yêu cầu an toàn với hệ điều hành nói chung Việc xây dựng sách mơ tả xác xác định mục tiêu an tồn phù hợp đóng vai trị then chốt việc phát triển chế bảo vệ đảm bảo an toàn cho hệ điều hành việc đánh giá tính an toàn chế với hệ thống Nhân an tồn tảng tính tốn tin cậy phận quan trọng then chốt việc kiểm sốt đảm bảo an tồn cho chương trình người dùng thân hệ điều hành Chương II trình bày số chế đảm bảo an toàn phần cứng dựa chế bảo vệ theo lớp Trong lớp gắn với mức đặc quyền cho phép tiến trình người dùng phép truy nhập tới thao tác định Cơ chế đóng vai trị cốt lõi cho kiểm soát việc thực thi, sử dụng nhớ tiến trình truy nhập tới thiết bị vào/ra Chương III tập trung vào chế an toàn kiến trúc x86 dịch vụ hệ điều hành quản lý việc thực thi chương trình quản lý nhớ Các u cầu tính tồn vẹn bí mật hệ thống file nhận hỗ trợ đảm bảo tốt so với việc mã hóa thơng thường từ mơ-đun hạ tầng tin cậy TPM nhờ vào việc bảo vệ khóa xác thực đóng gói phần cứng Phần cuối chương giới thiệu cách thức triển khai chế bảo đảm an toàn hệ điều hành sử dụng kiến trúc x86 Windows Unix/Linux Các vấn đề an toàn với hệ điều hành thảo luận chi tiết phần Ngoài ra, phần giới thiệu số cách tiếp cận nhằm đảm bảo yêu cầu an toàn kiểm chứng mức độ cao yêu cầu bao gồm nhân an toàn SCOMP mơ-đun an tồn Linux Chương IV trình bày mơ hình an tồn tắc cho phép mơ tả kiểm chứng yêu cầu cần phải đạt với mơ hình đề xuất Ngồi mơ hình truyền thống dựa máy trạng thái, chương giới thiệu mơ hình cho phép đảm bảo u cầu tính tồn vẹn bí mật hệ thống máy tính Phần trình bày kết thu bỏ qua chi tiết chứng minh kết Chương V giới thiệu cách thức giúp cho việc đánh giá kiểm tra yêu cầu an tồn với hệ thống máy tính thơng qua việc xây dựng đặc tả yêu cầu hệ thống Ngoài ra, phần giới thiệu hai kỹ thuật kiểm chứng mã chương trình có đảm bảo u cầu đặt hay khơng Đó phương pháp phân tích tĩnh phân tích động Về bản, phần đầu chương cho phép đánh giá tính an tồn hệ thống xét mặt thiết kế Phần phân tích mã chương trình nhằm kiểm tra đánh giá việc triển khai hành vi chương trình Mục lục CHƯƠNG TỔNG QUAN AN TOÀN HỆ ĐIỀU HÀNH 1.1 Giới thiệu 1.2 Các vấn đề kiến trúc an toàn 15 1.3 Chính sách an tồn 17 1.4 Nền tảng tính tốn tin cậy 18 1.5 Nhân an toàn 23 1.6 Câu hỏi ôn tập 26 CHƯƠNG CÁC CƠ CHẾ AN TOÀN PHẦN CỨNG 27 2.1 Hỗ trợ tiến trình 27 2.2 Bảo vệ nhớ 29 2.3 Kiểm soát thao tác vào/ra 31 2.4 Ảo hóa 33 2.5 Kết luận 34 2.6 Câu hỏi ôn tập 35 CHƯƠNG AN TOÀN CÁC DỊCH VỤ CƠ BẢN CỦA HỆ ĐIỀU HÀNH 36 3.1 Quản lý tiến trình 36 3.2 Quản lý nhớ 38 3.3 Hệ thống file 42 3.4 Phân tích an tồn dịch vụ hệ điều hành Windows Unix/Linux 48 3.5 Kết luận 65 3.6 Câu hỏi ôn tập 66 CHƯƠNG CÁC MƠ HÌNH AN TỒN 67 4.1 Vai trò đặc trưng mơ hình an tồn 67 4.2 Mơ hình máy trạng thái 69 4.3 Mơ hình Harrison-Ruzzo-Ullman 72 4.4 Các mơ hình khác 74 4.5 Kết luận 79 4.6 Câu hỏi ôn tập 79 CHƯƠNG ĐÁNH GIÁ AN TOÀN 80 5.1 Các đặc trưng đặc tả an toàn 80 5.2 Các kỹ thuật kiểm chứng đặc tả an toàn 82 5.3 Các phương pháp phân rã liệu chương trình 88 5.4 Các kỹ thuật kiểm chứng mã chương trình 91 5.5 Kết luận 99 5.6 Câu hỏi ôn tập 99 Danh mục hình vẽ Hình 1-1 Hệ điều hành điều phối truy nhập tiến trình Hình 1-2 Ma trận truy nhập với hai tiến trình 12 Hình 1-3 Hệ thống bảo vệ bắt buộc 14 Hình 1-4 Mơ đun TPM phần cứng .20 Hình 1-5 Các phận chức TPM .22 Hình 1-6 Tương tác tiến trình giám sát tham chiếu 25 Hình 2-1 Các lớp bảo vệ tiêu biểu .28 Hình 2-2 Cấu trúc mơ tả phần nhớ cổng 29 Hình 2-3 Xung đột nhớ chương trình người dùng 30 Hình 2-4 Ánh xạ từ nhớ ảo tới nhớ vật lý 30 Hình 2-5 Mơ tả chế độ truy nhập nhớ User System 31 Hình 2-6 Ánh xạ thiết bị ảo tới thiết bị vật lý 32 Hình 3-1 Thẻ chọn đoạn liệu lệnh 37 Hình 3-2 Kiểm tra mức đặc quyền đoạn lệnh .38 Hình 3-3 Thẻ mơ tả đoạn 39 Hình 3-4 Thẻ chọn đoạn 39 Hình 3-5 Truy nhập nhớ qua GDT 40 Hình 3-6 Cấu trúc khơng gian nhớ tiến trình thơng tin quản lý nhớ 41 Hình 3-7 Kiểm tra đặc quyền truy nhập nhớ 41 Hình 3-8 Tính tốn sở tin cậy q trình khởi động .43 Hình 3-9 Khởi động bảo vệ Windows với BIOS truyền thống .45 Hình 3-10 Bảo vệ sử dụng khóa mã TPM 47 Hình 3-11 Quá trình giải mã ổ đĩa BitLocker 47 Hình 3-12 Danh sách kiểm soát truy nhập thẻ tiến trình 50 Hình 3-13 Cơ chế bảo vệ bít chế độ 54 Hình 3-14 Kiến trúc giao tiếp LSM 59 Hình 3-15 Kiến trúc SCOMP .62 Hình 3-16 Phần cứng SCOMP 63 Hình 4-1 Tương quan bước phát triển mơ hình an tồn 68 Hình 4-2 Xây dựng luồng thơng tin 75 Hình 4-3 Nguyên tắc an toàn Bell-La Padula 76 Hình 5-1 Giao tiếp hai hệ thống .81 Hình 5-2 Tương quan mơ hình đặc tả an toàn 82 Hình 5-3 Quan hệ đối tượng hệ thống file 86 Hình 5-4 Phản chứng cho thấy lỗi với thư mục tuần hoàn 88 Hình 5-5 Các mức độ chi tiết việc đặc tả mơ hình việc triển khai 89 Hình 5-6 Phân rã thuật toán theo lớp 90 Hình 5-7 Phân rã thuật tốn cho thao tác hệ thống file 91 Hình 5-8 Mơ hình phân tích tĩnh đoạn mã 92 Hình 5-9 Bộ luật sinh phân tích 93 Hình 5-10 Cây cú pháp câu lệnh 94 Hình 5-11 Cây cú pháp khái quát 94 Hình 5-12 Luồng điều khiển 95 Hình 5-13 Đồ thị gọi hàm ba phương thức larry, moe, curly 95 Hình 5-14 Các cơng cụ phân tích tĩnh .96 Các từ viết tắt ACL – Access Control List: Danh sách kiểm soát truy nhập BIOS – Basic Input Output System: Hệ thống vào CPU – Central Processing Unit: Đơn vị xử lý trung tâm DAC – Discretionary Access Control: Kiểm soát truy nhập tùy chọn DEP – Data Execution Prevention: Ngăn chặn thực thi liệu EAL - Evaluation Assurance Levels: Mức độ đánh giá an toàn FAT– File Allocation Table: Bảng cấp phát file GUI – Graphic User Interface: Giao diện người dùng đồ họa IDE – Integrated Development Environment: Môi trường phát triển tích hợp IDS – Intrusion Detection System: Hệ thống phát xâm nhập LSM – Linux Security Module: Mô-đun an ninh Linux MAC – Mandatory Access Control: Kiểm soát truy nhập bắt buộc MLS – Multi-Level Security: An toàn nhiều mức NX – No eXecution: Cấm thực thi OS – Operating System: Hệ điều hành PC – Personal Computer: máy tính cá nhân PCR – Platform Configuration Register: Thanh ghi cấu hình hệ thống POSIX – Portable Operating System Interface: Giao tiếp hệ điều hành khả chuyển RBAC – Role Based Access Control: Kiểm soát truy nhập theo vai trò SCOMP – Secure Communication Processor: Bộ xử lý truyền thơng an tồn SELinux – Secure-Enhanced Linux: Linux với an ninh tăng cường TPM – Trusted Platform Module: Mô-đun hạ tầng tin cậy UEFI – Unified Extensible Firmware Interface: Giao tiếp firmware mở rộng hợp UML – Unified Modeling Language: Ngơn ngữ lập mơ hình hợp CHƯƠNG TỔNG QUAN AN TOÀN HỆ ĐIỀU HÀNH Hệ điều hành phần mềm đặc biệt cho phép người dùng truy nhập tới tài nguyên phần cứng khác mà chúng cấu thành hệ thống máy tính cụ thể bao gồm xử lý, nhớ, thiết bị ngoại vi Bất kỳ phần mềm chạy hệ thống máy tính sử dụng tập lệnh cung cấp xử lý hệ thống phần mềm cần dùng tài nguyên khác truy nhập tới ổ cứng hay mạng Người dùng thơng qua chương trình để sử dụng phần cứng máy tính kết nối mạng, xử lý liệu hay giải trí Một cách khái quát, vấn đề an toàn hệ điều hành liên quan đến an toàn việc chia sẻ hay phân chia tài nguyên mà phần mềm sử dụng trình hoạt động chúng 1.1 Giới thiệu Hệ điều hành đại cần cho phép chạy nhiều chương trình hay người dùng, dạng tiến trình (process), đồng thời chia sẻ sử dụng tài nguyên hệ thống (như hình đây) Như vậy, hệ điều hành phải đảm bảo ba chức sau: Hình 1-1 Hệ điều hành điều phối truy nhập tiến trình Hệ điều hành phải cung cấp chế sử dụng tài nguyên hiệu Nói cách khác, hệ điều hành cần xác định rõ cách thức cách tiến trình sử dụng tài nguyên phần cứng ngăn chặn xung đột sử dụng tài nguyên Các chức tiêu biểu gồm có: quản lý CPU, quản lý nhớ, quản lý hệ thống file, giao thức mạng, ; Hệ điều hành phải cung cấp chế điều độ chương trình người dùng đảm bảo việc sử dụng tài ngun cơng bằng; Hệ điều hành phải kiểm sốt việc truy nhập tới tài nguyên cho chương trình người dùng khơng ảnh hưởng cách vơ tình hay xấu tới chương trình khác Đây vấn đề đảm bảo an tồn cho chương trình chạy hệ thống Việc đảm bảo chương trình hoạt động cách an toàn lệ thuộc vào việc triển khai đắn chế chia sẻ điều độ tài nguyên sau: Các chế truy nhập tài nguyên phải xác định ranh giới tài nguyên đảm bảo thao tác tới tài nguyên không xung đột với Cơ chế điều độ phải đảm bảo tính sẵn sàng tài nguyên cho chương trình để ngăn chặn việc từ chối dịch vụ Một cách lý tưởng chế đảm bảo chương trình hoạt động bình thường không gian nhớ không bị tổn thất cho dù việc xâm phạm nguyên tắc chia sẻ hay phối hợp xảy cách có chủ ý Vấn đề an toàn ngày quan tâm chương trình máy tính đại tương tác với theo nhiều cách việc chia sẻ liệu người dùng hành vi phổ biến với hệ thống máy tính nối mạng gắn kết chặt chẽ Thách thức với việc thiết kế an toàn cho hệ điều hành thiết kế chế an toàn để bảo vệ việc thực thi chương trình liệu chúng mơi trường phức tạp Các chế an tồn tắc (formal security mechanism) giúp chứng minh mặt toán học hệ thống đạt mục tiêu an toàn song khơng tính đến độ phức tạp hệ thống Trong nhiều tình huống, độ phức tạp khiến cho việc chứng minh lý thuyết không khả thi Trên thực tế, an toàn hệ điều hành tiếp cận theo hai hướng chủ yếu Một hệ thống hạn chế (constrained): đảm bảo mục tiêu an toàn thỏa mãn với mức độ cao Hai hệ thống dùng chung (general-purpose): đảm bảo mục tiêu an toàn cách giới hạn với mức độ thấp Các hệ thống hạn chế hỗ trợ ứng dụng chức song đảm bảo mục tiêu chủ yếu tính an tồn Việc hạn chế chức cho phép hệ thống kiểm chứng tính đắn mục tiêu an toàn đề Mặt khác, hệ thống dùng chung hướng tới cung cấp chức mềm dẻo, thân thiện người dùng, dễ triển khai có hiệu cao Các đặc điểm dẫn đến nhiều thách thức với việc đảm bảo an toàn cho hệ thống Hệ điều hành an toàn, cách lý tưởng, hệ điều hành cung cấp chế bảo vệ đảm bảo đạt mục tiêu an toàn hệ thống cho dù hệ thống phải đối mặt với mối đe dọa Các chế an toàn thiết kế ngữ cảnh việc chia sẻ điều độ tài nguyên Các mục tiêu an toàn hệ thống phải trì cách thức sử dụng hệ thống (như bị cơng người bẻ khóa) Thơng thường hệ điều hành đạt mức độ đảm bảo cao coi hệ điều hành an toàn hay gọi hệ thống tin cậy (trusted system) Thực tế, hệ thống đại phức tạp hồn tồn an tồn Những khó khăn việc ngăn ngừa lỗi lập trình thách thức để loại bỏ lỗi dẫn đến không hệ thống phức tạp hệ điều hành hồn tồn an toàn Dù vậy, việc xây dựng hệ điều hành an toàn cần thiết giúp cho người dùng xác định hay đánh giá mức độ an toàn hệ thống họ sử dụng hay theo đuổi Các yếu tố giúp xây dựng hệ điều hành an toàn bao gồm mục tiêu an toàn, mơ hình đe dọa tin cậy, chế bảo vệ a Mục tiêu an toàn Mục tiêu an tồn (security goal) xác định thao tác thực hệ thống ngăn chặn truy nhập trái phép Các mục tiêu cần định nghĩa mức độ khái quát cao Các mục tiêu an toàn xác định yêu cầu mà thiết kế hệ thống cần phải thỏa mãn việc triển khai đắn phải đáp ứng đầy đủ u cầu Mục tiêu an tồn mơ tả truy nhập tới tài nguyên hệ thống mà chúng cần thỏa mãn yếu tố sau: bí mật, toàn vẹn, sẵn dùng Truy nhập hệ thống mơ tả chủ thể (chương trình hay người dùng) thực thao tác (đọc hay ghi) lên đối tượng ( file hay socket) Như vậy, thuộc tính an tồn nêu hiểu sau: Tính bí mật giới hạn đối tượng truy nhập Tính tồn vẹn hạn chế đối tượng mà chủ thể ghi để đảm bảo thao tác đắn quan hệ với thao tác chủ thể khác Tính sẵn dùng hạn chế tài nguyên mà chủ thể sử dụng chủ thể làm cạn kiệt tài nguyên Mục tiêu an tồn xây dựng dựa chức thông qua nguyên tắc: Đặc quyền tối thiểu Các chương trình thực thao tác cần thiết cho hoạt động chúng Tuy nhiên, hạn chế chức khơng làm tăng tính an tồn hệ thống mà làm giảm khả việc cơng b Mơ hình tin cậy Mơ hình tin cậy (Trust model) hệ thống định nghĩa tập phần mềm liệu mà hệ thống dựa vào để đảm bảo thực đắn mục tiêu an toàn hệ thống Với hệ điều hành, khái niệm tương đồng với sở tính tốn tin cậy TCB (trusted computing base) Một cách lý tưởng, hệ thống tin cậy chứa số phần mềm tối thiểu để đảm bảo bắt buộc mục tiêu an toàn Phần mềm tin cậy bao gồm phần mềm xác định yêu cầu an toàn hệ thống phần mềm thực thi yêu cầu Hơn nữa, phần 10 Hình 5-3 Quan hệ đối tượng hệ thống file Hệ thống file có số ràng buộc để chắn đối tượng hoạt động theo cách người dùng kỳ vọng Ví dụ quan hệ cấp (parent) nội dung (content) cần không mang quan hệ với Ngồi ra, có quan hệ ràng buộc tường minh thư mục cấp với thứ bên chứa // Thư mục cấp đối tượng chứa bên fact { all d: Dir, o: d.contents | o.parent = d } Biểu diễn ràng buộc sau với ∀𝑑 ∈ 𝐷𝑖𝑟, 𝑜 ∈ 𝑑 𝑐𝑜𝑛𝑡𝑒𝑛𝑡𝑠 | 𝑜 𝑝𝑎𝑟𝑒𝑛𝑡 = 𝑑 Hay với thư mục d o thuộc nội dung contents d cấp o d Nếu khơng có ràng buộc có tình huống, File có cấp thư mục gốc Root hay thư mục có cấp Phát biểu fact thể ràng buộc tường minh mơ hình Khi Alloy tìm kiếm ví dụ (trạng thái hệ thống thỏa mãn ràng buộc) ví dụ vi phạm ràng buộc bị loại bỏ Nếu ràng buộc bị lỗi khơng thể tìm thấy ví dụ Khi khai báo Dir File thừa kế FSObject nghĩa khơng có đối tượng FSObject vừa File vừa thư mục Dir Nhưng cần có ràng buộc khơng có FSObject không thuộc hai loại đối tượng // Tất đối tượng hệ thống file phải File Dir fact { File + Dir = FSObject } Hệ thống có hhư mục gốc Root định nghĩa // Tồn thư mục gốc Root one sig Root extends Dir { } { no parent } Để chắn hệ thống kết nối cần định nghĩa ràng buộc 86 // Hệ thống file kết nối fact { FSObject in Root.*contents } Toán tử “in” xem ký hiệu “tập của” tốn tử * biểu diễn tập đóng phản xạ bắc cầu Ràng buộc cho biết tập đối tượng hệ thống file tập đối tượng truy nhập từ thư mục gốc Root cách duyệt theo quan hệ contents Bản thân Root khơng chứa trực tiếp hay gián tiếp Để kiểm tra thuộc tính hệ thống cần xây dựng khai báo assert dùng lệnh check để yêu cầu Alloy kiểm tra phản ví dụ cho mệnh đề khẳng định Khai báo fact bắt buộc mệnh đề phải assert cho số thứ phải hành vi mô hình Sẽ khơng có thư mục chứa nghĩa quan hệ thư mục không quay vòng Như quan hệ thể tập đóng bắc cầu khai báo thơng qua toán tử ^ // Đường dẫn hệ thống file khơng tuần hồn assert acyclic { no d: Dir | d in d.^contents } Để kiểm tra mơ hình với tối đa đối tượng FSObject sử dụng câu lệnh check acyclic for Khi kiểm tra, Alloy xem xét trường hợp mà mức cao đối tượng có tối đa Có thể có hai kết quả: “no solution found” nghĩa khơng có phản ví dụ câu khẳng định mơ hình với phạm vi kiểm tra thời “solution found” nghĩa có phản ví dụ Ví dụ biểu diễn dạng đồ họa Người dùng kiểm tra có thư mục gốc với đối tượng file có chỗ hệ thống file // hệ thống file có thư mục gốc assert oneRoot { one d: Dir | no d.parent } // Mối đối tượng có chỗ assert oneLocation { all o: FSObject | lone d: Dir | o in d.contents } Từ khóa one lone giúp định lượng phần tử one có nghĩa cịn lone có nghĩa 87 Giống ngôn ngữ mô tả hành động, Alloy cho phép mô tả thao tác/hành vi hệ thống Thao tác move di chuyển đối tượng file hay thư mục từ chỗ sang chỗ khác cập nhật lại cấu trúc hệ thống file Alloy sử dụng tất tham số làm tham số hàm kể đầu Kết hàm đầu hàm hợp lệ sai ngược lại pred move [fs, fs': FileSystem, x: FSObject, d: Dir] { (x + d) in fs.objects fs'.parent = fs.parent - x->(x.(fs.parent)) + x->d } Mệnh đề move hệ thống file fs’ kết việc chuyển đối tượng x tới thư mục d hệ thống file fs Cũng coi fs trạng thái ban đầu fs’ trạng thái sau thực thao tác Hình 5-4 Phản chứng cho thấy lỗi với thư mục tuần hồn Ví dụ trình bày cách thức lập mơ hình kỹ thuật xây dựng yêu cầu để đảm bảo hệ thống file hoạt động mong muốn người thiết kế (sử dụng Alloy 4.2) Ở mức cao, cách thức xây dựng mơ hình gần với cách thức phân tích thiết kế hướng đối tượng sử dụng phổ biến công nghệ phần mềm Phần mô tả ràng buộc hay thuộc tính mà mơ hình cần phải thỏa mãn hay đảm bảo gần với ngôn ngữ lơ-gíc bậc Tuy nhiên, cốt lõi biểu diễn phép biểu diễn tập hợp Sau xây dựng xong, Alloy cho phép người thiết kế kiểm tra lại mơ hình có đảm bảo thuộc tính (u cầu) đề hay khơng 5.3 Các phương pháp phân rã liệu chương trình Một mặt mong muốn đặc tả khái quát gần với mơ hình an tồn lựa chọn Như vậy, phải đối mặt với khó khăn diễn giải chứng minh chi tiết cách thuyết phục đoạn mã sinh phù hợp với đặc tả Ở mức độ chi tiết hơn, đặc tả gần với thao tác thấy giao tiếp hệ thống Đặc tả phức tạp khó hiểu việc chứng minh tương ứng mơ hình triển khai khơng 88 thực tế Mặt khác, đặc tả biểu diễn thủ tục/hàm bên hệ thống giao tiếp thấy Khi việc chứng minh mơ hình cịn khó khăn Hình 5-5 cho thấy cách tiếp cận khác với mức độ chi tiết đặc tả Như vậy, công việc đặc tả cung cấp thông tin hai mức: Mức trừu tượng gần giống với việc lập mơ hình Mức chi tiết mơ tả thao tác hay hoạt động hệ thống mô tả giao tiếp Hình 5-5 Các mức độ chi tiết việc đặc tả mơ hình việc triển khai Chứng minh việc triển khai phù hợp mơ hình đề vơ khó khăn nhiên việc chứng minh mã chương trình phù hợp với đặc tả đủ sát chấp nhận việc chứng minh phần Phần giới thiệu hai kỹ thuật sử dụng cho việc xây dựng đặc tả tắc bao gồm phân rã cấu trúc liệu thuật toán 5.3.1 Phân rã cấu trúc liệu Kỹ thuật phân rã liệu (data structure refinement) sử dụng nhiều mức trừu tượng với mức độ chi tiết khác Mỗi lớp đặc tả máy trạng thái mơ tả hồn chỉnh hệ thống Vai trò lớp sau: Lớp trừu tượng kết hợp nhiều kiểu liệu, biến hàm vào vài hàm đơn giản Các lớp bổ sung chi tiết phân rã hàm khái quát thành đối tượng hàm cụ thể Các lớp sau mô tả cụ thể hệ thống thảo mãn thuộc tính an tồn giống lớp Sau hồn thành lớp sau lớp đặc tả trước hết vai trò Lớp gần với biến hàm đoạn mã hệ thống Như vậy, lớp đảm 89 bảo mơ tả chi tiết xác giao tiếp hệ thống giúp cho người thiết kế triển khai Kỹ thuật khơng cho biết cách thức thiết kế hệ thống bên Việc kiểm chứng cần sử dụng kỹ thuật công nghệ phần mềm truyền thống kiểm tra mã nguồn kiểm thử 5.3.2 Phân rã thuật toán Kỹ thuật phân rã thuật tốn (Algorithm refinement) cho phép mơ tả phần cấu trúc nội hệ thống Kỹ thuật coi hệ thống chuỗi máy trạng thái có phân lớp Mỗi máy trạng thái sử dụng chức lớp cung cấp Việc triển khai chức (function) bao gồm chương trình khái quát sử dụng chức có máy trạng thái bên Lớp thấp cung cấp chức nguyên thủy hệ thống mà phân rã thêm Hình 5-6 minh họa cho bước khái quát nêu Mỗi bước ứng với lớp người thiết kế mô tả máy trạng thái giống kỹ thuật phân rã liệu, thêm vào đó, bổ sung chương trình khái quát cho chức máy trạng thái Phần bổ sung mô tả thuật toán chức (hàm) theo dạng lời gọi hàm Hình 5-6 Phân rã thuật tốn theo lớp 90 Việc chứng minh đặc tả sử dụng kỹ thuật trước hết cần chứng minh đặc tả mức cao tương ứng với mơ hình xây dựng Tiếp theo, tương tự chứng minh chương trình khái quát lớp cao phù hợp với đặc tả biết đặc tả chức lớp Nhược điểm kỹ thuật việc khó thực chứng minh thuật toán khái quát Một số toán chứng minh thuộc lớp tốn khó (intractable) Vấn đề khác đặc tả mức cao phức tạp biểu diễn giao tiếp thực hệ thống Như việc chứng minh mơ hình mà hệ thống áp dụng với việc triển khai thực tế khó khăn Tuy vậy, việc khơng hạn chế người dùng kết hợp hai kỹ thuật phân rã liệu thuật toán để đạt yêu cầu đảm bảo tính phù hợp mơ hình lựa chọn việc triển khai thực Ví dụ Hình 5-7 cho thấy cách áp dụng kỹ thuật phân rã thuật tốn vào việc mơ tả hệ thống file Ở mức cao (mức 2) người dùng quan tâm tới file thư mục (directories) Các chức tạo, xóa file thư mục chức giám sát truy nhập Mức (mức 1) mô tả thao tác với file mơ tả file Nói cách khác mức đề cập tới cách thức xử lý cấu trúc lưu trữ file thiết bị lưu trữ làm việc với thẻ file, đơn vị cấp phát file Các chức mức không bị lệ thuộc vào thiết bị lưu trữ vật lý cụ thể Ở mức thấp (mức 0), cách thức làm việc (chức năng) với thiết bị lưu trữ vật lý cụ thể mô tả Khi này, chức thao tác lên liệu khối cụ thể thiết bị lưu trữ Hình 5-7 Phân rã thuật tốn cho thao tác hệ thống file 5.4 Các kỹ thuật kiểm chứng mã chương trình Tất dự án phần mềm hướng tới kết cuối đoạn mã Ở mức đoạn mã, mục tiêu trọng tâm hạn chế giảm thiểu lỗi việc triển khai, lỗi hay lỗ hổng phổ biến phát nhờ cơng cụ qt mã nguồn Các lỗi triển khai vừa nhiều vừa phổ biến gồm lỗi tiếng tràn đệm (bufer-overflow) Việc xác định lỗi đoạn mã phần mềm cho phép xác định mức độ an toàn phần mềm với lỗi khả đáp ứng phần mềm với yêu cầu an toàn với đoạn mã trình xây dựng (viết mã) 91 Quá trình đánh giá mã nguồn thủ công hay tự động nhằm mục đích xác định lỗi liên quan đến an toàn trước phần mềm xuất xưởng Tất nhiên, khơng có phương thuốc trị bách bệnh Việc đánh giá mã nguồn cần thiết chưa đủ để đạt phần mềm an ninh yếu tố sau: Các lỗi an ninh vấn đề hiển (cần phải xử lý) song lỗ hổng thiết kế vấn đề nghiêm trọng Các lỗi thiết kế phát thông qua việc đánh giá mã nguồn Cách tiếp cận đầy đủ để đạt phần mềm an toàn kết hợp hài hòa đánh giá mã nguồn áp dụng quy trình phân tích thiết kế an tồn Việc đánh giá mã nguồn hiển nhiên cần tri thức lập trình Việc hiểu biết chế an tồn hay an tồn mạng khơng có ích nhiều với việc đánh giá mã nguồn Nói cách khác, việc đánh giá mã nguồn tốt người viết chúng chuyên gia an tồn Phần trình bày hai kỹ thuật phân tích chủ yếu phân tích tĩnh phân tích động Phân tích tĩnh khơng cần thực thi chương trình hay đoạn mã cần đánh giá, ngược lại phân tích động thực thi chương trình để đánh giá hành vi chương trình 5.4.1 Phân tích tĩnh Phân tích tĩnh đề cập đến kỹ thuật đánh giá mã nguồn nhằm cảnh báo lỗ hổng an tồn tiềm tàng mà khơng thực thi chúng Một cách lý tưởng công cụ tự động tìm kiếm lỗi an ninh với mức độ đảm bảo định lỗi song việc vượt khả nhiều công cụ thời Các kỹ thuật kiểm tra phần mềm (testing) thông thường nhằm kiểm tra hành vi (chức năng) với người dùng thông thường điều kiện thơng thường nên khó để phát lỗi liên quan đến vấn đề an ninh an tồn Hình 5-8 Mơ hình phân tích tĩnh đoạn mã 92 Việc cơng cụ phân tích tĩnh cần làm chuyển mã chương trình thành mơ hình chương trình (program model) Hình 5-8 Mơ hình chương trình thực chất cấu trúc liệu biểu diễn đoạn mã cần phân tích Việc phân tích tiến hành kết hợp với tri thức vấn đề an toàn biết trước dựa kinh nghiệm Bước cuối biểu diễn kết phân tích theo yêu cầu an toàn đề Dạng cách cảnh báo, cơng cụ cao cấp cung cấp phản ví dụ (khi áp dụng cơng cụ dựa lơ-gíc hay kiểm chứng mơ hình) Các kỹ thuật xây dựng mơ hình phân tích bao gồm: Phân tích từ vựng (lexical analysis) Phân tích câu (parsing) Cú pháp khái quát (astract syntax) Phân tích ngữ nghĩa (semantic analysis) Phân tích luồng điều khiển (control flow) Phân tích luồng liệu (data flow) Phân tích lan truyền lỗi (Taint propagation) a Phân tích từ vựng Chuyển đoạn mã thành chuỗi thẻ (token) nhằm loại bỏ thành phần khơng quan trọng đoạn mã chương trình Các thẻ chứa định danh (biến, tên hàm, ) vị trí chúng đoạn mã Đoạn mã minh họa cho việc chuyển đổi dòng lệnh thẻ b Phân tích câu Bộ phân tích câu sử dụng ngữ pháp phi ngữ cảnh (Context-free Grammar-CFG) để đối sánh chuỗi từ hay thẻ Bộ ngữ pháp sử dụng luật sinh để diễn tả ký hiệu ngơn ngữ (lập trình) Hình 5-9 Bộ luật sinh phân tích Bộ phân tích câu thực việc suy diễn cách đối sánh chuỗi ký hiệu (thẻ) với luật sinh để tạo phân tích Hiện phân tích câu cho ngôn ngữ C, C++, hay Java cung cấp dạng mã nguồn mở hay cách dịch vụ cho phép người phát triển tùy biến theo yêu cầu 93 Hình 5-10 Cây cú pháp câu lệnh c Cú pháp khái quát Việc phân tích phức tạp khơng phù hợp phân tích mục tiêu phân tích nhằm vào việc tách từ Vì cú pháp khái quát cung cấp cấu trúc liệu phù hợp với việc phân tích cách loại bỏ ký hiệu (thẻ) không phù hợp Các ký hiệu cú pháp khái qt so với ngơn ngữ lập trình ban đầu Hình 5-11 Cây cú pháp khái quát d Phân tích ngữ nghĩa Việc phân tích ngữ nghĩa bắt đầu việc phân rã ký hiệu (tên biến hay hàm) kiểm tra kiểu liệu Việc phân tích cho phép lập cấu trúc đoạn mã thông qua việc kiểm tra lớp đối tượng sử dụng, đặc biệt hữu ích với lập trình hướng đối tượng Chức phân tích ngữ nghĩa sử dụng nhiều biên dịch (compiler) môi trường phát triển IDE (Integrated Development 94 Environment) cho phép kiểm tra kiểu liệu, phân rã tên (định danh) chương trình mơ tả hằng, biến hàm e Phân tích luồng điều khiển Mục tiêu kỹ thuật để theo dõi tình thực thi khác đoạn mã thường thực cách xây dựng đồ thị luồng điều khiển ví dụ Việc xây dựng luồng điều khiển giống việc xây dựng lưu đồ chương trình từ đoạn mã, trái ngược với q trình phát triển phần mềm thơng thường (bắt đầu từ xây dựng lưu đồ viết đoạn mã) Việc tái tạo lại luồng điều khiển cho người phân tích hình dung khối đoạn mã cách thức vận hành khối Hình 5-12 Luồng điều khiển Đồ thị gọi hàm biểu diễn luồng điều khiển hàm hay phương thức xây dựng dựa đồ thị có hướng Về bản, đồ thị thể trạng thái hoạt động chương trình thơng qua việc hàm kích hoạt (gọi) Kỹ thuật thường kết hợp với việc phân tích luồng liệu Hình 5-13 Đồ thị gọi hàm ba phương thức larry, moe, curly f Phân tích luồng liệu Kỹ thuật cho phép kiểm chứng cách liệu di chuyển đoạn mã Việc phân tích thường kết hợp với luồng điều khiển để xác định vị trí bắt đầu kết thúc liệu Việc phân tích luồng phát tình sử dụng mật hay khóa cố định (hard-coded) đoạn mã 95 g Phân tích lan truyền lỗi Kỹ thuật sử dụng để tìm hiểu giá trị bên đoạn mã mà người cơng có khả kiểm soát cách sử dụng luồng liệu Việc cần thông tin việc biến chứa lỗi xuất đâu chương trình cách thức di chuyển chương trình Mục đích việc phân tích để hiểu cách thức trỏ tham chiếu đến vị trí nhớ Việc phân tích quan trọng với việc phân tích lan truyền lỗi Việc phân tích tĩnh sử dụng cách rộng rãi người biết Điều phần có nhiều kiểu cơng cụ phân tích tĩnh hướng tới mục tiêu khác Hình liệt kê số cơng cụ phân tích tĩnh hướng tới mục tiêu khác Địa Loại cơng cụ Kiểm tra kiểu lập trình PMD http://pmd.sourceforge.net Parasoft http://www.parasoft.com Kiểm chứng chương trình Praxis High Integrity Systems http://www.praxis-his.com Escher Technologies http://www.eschertech.com Kiểm tra thuộc tính Polyspace http://www.polyspace.com Grammatech http://www.gramatech.com Tìm lỗi FindBugs http://www.findbugs.org Visual Studio 2005 \analyze http://msdn.microsoft.com/vstudio/ Đánh giá an ninh Fortify Software http://www.fortify.com Ounce Labs http://www.ouncelabs.com Hình 5-14 Các cơng cụ phân tích tĩnh Một dạng ứng dụng phân tích tĩnh nhiều người biết tới kiểm tra kiểu liệu sử dụng chương trình Các trình soạn thảo cảnh báo cho người lập trình tình khơng tương hợp kiểu Điều dẫn đến việc mát liệu chí gây an tồn cho chương trình trường hợp kiểm tra độ dài chuỗi Một dạng khác kiểm tra kiểu lập trình (style checking) mà cụ thể yêu cầu người lập trình tuân thủ đầy đủ qui ước viết mã, đặt tên sử dụng cấu trúc điều khiển Kiểm tra thuộc tính kiểm chứng chương trình ứng dụng phức tạp việc phân tích tĩnh Mục tiêu kiểm chứng đoạn mã xây dựng có phù hợp với đặc tả chương trình hay qui định ràng buộc đề (hay thuộc tính an tồn) với đoạn mã 96 Nếu đặc tả chương trình bao trùm tồn chức chương trình, cơng cụ kiểm chứng thực việc kiểm chứng tương đương để chắn đoạn mã chương trình tương ứng xác với Thơng thường, đặc tả (chính tắc) áp dụng cho số chức thiết yếu chương trình (hệ thống) nên áp dụng việc kiểm chứng phần Đơi cịn gọi kiểm tra thuộc tính Đây điều kiện mà chương trình phải tn theo Các cơng cụ phức tạp cho phép phân tích mặt thời gian hay cung cấp ví dụ phản chứng giúp cho người lập trình hình dung tốt vi phạm với yêu cầu đề Tìm lỗi ứng dụng quan trọng phân tích tĩnh Mục tiêu tình mà chương trình hoạt động khơng người lập trình dự định Cơng cụ tìm lỗi lý tưởng chứng minh đủ cần cung cấp phản ví dụ Điều cho biết tình xảy lỗi Đánh giá an ninh mục tiêu thu hút nhiều người ý tới cơng cụ phân tích tĩnh Các công cụ thời kỳ đầu tập trung vào việc quét hàm hay bị lạm dụng strcpy cần tiến hành việc đánh giá an ninh thủ công Điều cho người dùng coi lỗi phát lỗi lập trình vấn đề an ninh cần ý Các cơng cụ thường kết hợp việc tìm lỗi kiểm tra thuộc tính Việc kiểm tra tràn đệm diễn giải yêu cầu lập trình cho chương trình khơng truy nhập ngồi khơng gian nhớ cấp phát Thách thức lớn cho việc phân tích tĩnh lựa chọn cách thức biểu diễn chương trình phù hợp mà cho phép cân đối mức độ xác, khả mở rộng kỹ thuật phân tích nhằm phát vấn đề cần quan tâm Bài toán cho phân tích tĩnh thường sử dụng kỹ thuật áp dụng trình dịch bao gồm việc phân tích luồng điều khiển liệu Các cơng cụ phân tích tĩnh tốt thường sử dụng kiểu luật Điều cho phép cơng cụ phân tích lập mơ hình môi trường hoạt động kết lời gọi hệ thống thư viện lập trình Luật cho phép định nghĩa thuộc tính an tồn cách thuận tiện cơng cụ kiểm chứng Như cơng cụ phân tích tĩnh tốt cần dễ sử dụng với người chun mơn vấn đề an tồn Điều nghĩa kết phân tích cần dễ hiểu với người lập trình thơng thường, khơng hiểu biết sâu an toàn, hướng dẫn người dùng thói quen lập trình an tồn Đặc điểm quan trọng khác dạng tri thức (tập luật) công cụ hỗ trợ Tập luật tốt trợ giúp người dùng đắc lực q trình phân tích đoạn mã Cuối công cụ tốt cho phép phát triệt để lỗi an tồn phổ biến 5.4.2 Phân tích động Q trình phân tích tĩnh đánh giá chương trình giống trình biên dịch đọc chương trình Cách phân tích khác kiểm tra chương trình cách giống mơi trường hoạt động sử dụng chương trình cách xem xét mã thực thi hay bytecode (với ngơn ngữ Java) Q trình phân tích động phần mềm thực cách chạy 97 đoạn mã xử lý vật lý hay ảo Các đoạn mã ngày sử dụng thư viện liên kết động hay theo yêu cầu, việc phân tích tĩnh khơng thể đầy đủ khía cạnh đoạn mã Tuy nhiện, việc phân tích động nên thực sau hồn thành việc phân tích tĩnh việc thực thi đoạn mã làm tổn hại đến hệ thống Trên thực tế, để phân tích đánh giá tính an tồn hệ thống, cần thực thêm: Quét lỗ hổng Kiểm thử xâm nhập Việc phân tích động thực thông qua phần mềm sửa lỗi debugger Sửa lỗi hoạt động mức cao, mức mã nguồn hay mức thấp mã máy Công cụ sửa lỗi cung cấp chế bẫy chạy bước, chạy qua hay lấy thông tin chương trình thời điểm chạy cho phép người dùng kiểm tra hệ phận chương trình phân tích Việc phân tích mã chương trình sau biên dịch có ưu điểm: Người dùng khơng phải dự đốn xem trình biên dịch diễn giải câu lệnh câu lệnh chương trình dịch, Như vậy, việc loại trừ tính mơ hồ Mã nguồn chương trình khơng phải lúc có mã thực thi hay mã bytecode lại có sẵn Tuy nhiên việc phân tích động có nhược điểm: Hiểu đoạn mã biên dịch khó khăn số dạng mã máy khó dịch ngược tập lệnh có độ rộng lệnh thay đổi Intel x86 Điều ý nghĩa đoạn mã thay đổi thay đổi vị trí dịch ngược chuỗi byte biểu diễn mã lệnh Việc sử dụng mã biên dịch khiến cho việc hiểu ngữ nghĩa (ý định ban đầu người lập trình) khó khăn nhiều Đặc biệt trình biên dịch thực việc tối ưu hóa đoạn mã thực thi dẫn đễn đoạn mã khác so với mã nguồn Trong tương lai việc phân tích động tập trung vào nghiên cứu: Khai thác hiệu thơng tin chạy chương trình (run-time) để tối ưu hóa chương trình Trợ giúp người lập trình hiểu, sửa chữa nâng cấp phần mềm đặc biệt khía cạnh an tồn Cải thiện cách thức thu thập thơng tin chạy q trình phân tích động cách kết hợp phần cứng phần mềm nhằm giảm chi phí Với số phần mềm độc hại có khả chống lại việc thu thập thơng tin dạng debug thơng thường chế giải pháp kết hợp có giá trị lớn việc phân tích hành vi phần mềm 98 5.5 Kết luận Từ khía cạnh thiết kế, việc đánh giá an toàn cho biết khả mức độ đáp ứng phần mềm với yêu cầu an toàn toàn đề Các kỹ thuật kiểm chứng giúp phát xác định thiếu sót trình phát triển triển khai phần mềm so với yêu cầu an toàn, hạn chế việc tồn điểm yếu hay lỗ hổng mà bị khai thác cách vơ tình hay có chủ đích Việc đánh giá an tồn cần thực với đoạn mã khơng có thơng tin đặc tả đoạn mã cách áp dụng kỹ thuật phân tích tĩnh động Việc khơng có tác dụng kiểm chứng tính an tồn đoạn mã mà cịn có tác dụng nâng cao chất lượng phần mềm cải thiện thói quen lập trình an tồn Việc đảm bảo an toàn hệ thống (system assurance) hướng đến kiểm chứng hệ thống tuân thủ mục tiêu an tồn mong muốn Các kỹ thuật cơng cụ trình bày phần trước chương hỗ trợ cho việc đảm bảo đánh giá an toàn hệ thống Cách thức mô tả yêu cầu an toàn đặc tả hệ thống giúp cho việc kiểm chứng giới thiệu Qua giúp đánh giá mức độ đáp ứng yêu cầu an toàn hệ thống Trên thực tế, tổ chức quốc gia quốc tế nỗ lực phát triển tiêu chuẩn cho mô tả yêu cầu an toàn/an ninh cách thức đánh giá để kiểm chứng việc triển khai yêu cầu Các tiêu chuẩn bao phủ từ chức xác thực mật giám truy nhập cấu hình hệ thống Các tiêu chuẩn tiêu biểu liên quan đến an tồn hệ điều hành kể đến Tiêu chuẩn đánh giá hệ thống máy tính tin cậy TCSEC (Trusted Computer System Evaluation Criteria) hay Các tiêu chuẩn phổ quát (Common Criteria) Việc áp dụng tiêu chuẩn giúp cho người dùng người thiết kế nắm mức độ an toàn hệ thống dự định sử dụng hay triển khai 5.6 Câu hỏi ôn tập 1) 2) 3) 4) 5) 6) 7) 8) Trình bày đặc trưng đặc tả an tồn? Trình bày khái niệm máy chứng minh (theorem prover)? Trình bày khái niệm kiểm chứng mơ hình (model checking)? Trình bày khái niệm phân rã cấu trúc liệu? Trình bày khái niệm phân rã chương trình? Trình bày cần thiết áp dụng kiểm chứng mã chương trình? Khái niệm phân tích tĩnh? Khái niệm phân tích động? 99 Tài liệu tham khảo [1] [2] Andrew S Tanenbaum, Herbert Bos, Modern Operating Systems 4th Edition, Pearson Education, Inc 2015 Abraham Silberschatz, Peter B Galvin, Greg Gagne, Operating System Concepts Essentials, John Wiley & Sons Inc., 2014 Daniel Jackson, “Alloy: a lightweight object modelling notation,” ACM Transactionson Software Engineering and Methodology (TOSEM), vol 11, no 2, pp 256–290, 2002 [4] Gustavo Duarte, CPU Rings, Privilege, and Protection, 2008 [5] Intel Co., Intel x64 and IA-32 Architectures Software Developer’s Manual, Intel Co 2016 [6] Morrie Gasser, Building a secure computer system, Library of congress, ISBN 0-442-23022-2 [7] Mehedi Al Mamun, Operating Systems Security: Linux, LAP Lambert Acad Publishing, 2011 [8] Seymour Bosworth M.E Kabay, Eric Whyne, Computer Security Handbook 6th Edition, John Wiley & Sons, 2014 [9] Trent Jaeger, Operating System Security, Morgan & Claypool Publishers, 2008 [10] Will Arthur & David Challener, A Practical Guide to TPM 2.0: Using the New Trusted Platform Module in the New Age of Security, © 2015 by Apress Media [3] 100 ... nhân an toàn giống hệ điều hành sơ khai Nhân an toàn thực dịch vụ phục vụ hệ điều hành hệ điều hành thực thi dịch vụ phục vụ ứng dụng Và hệ điều hành thiết lập hạn chế lên ứng dụng, nhân an toàn. .. nhân an toàn, mặt lý thuyết, hệ điều hành lớn phần nhỏ chịu trách nhiệm an toàn Bằng cách cấu trúc lại hệ thống cho toàn phần mềm 25 liên quan đến an toàn tách thành phần nhân tin cậy hệ điều hành. .. (liên quan đến an toàn) nhỏ định nghĩa rõ ràng Điểm then chốt để giảm thiểu phận liên quan tới an toàn hệ điều hành dùng số chế thực thi an toàn Như vậy, bắt buộc hành động liên quan tới an toàn