Chương 3: BẢO MẬT HỆ THỐNG PHẦN MỀM TRONG .NET
3.1. Tổng quan kiến trúc bảo mật hệ thống phần mềm
3.1.4. Đánh giá bảo mật
Trong suốt vòng đời phát triển bảo mật, chúng ta cần luôn ghi nhớ rằng kẻ tấn công sẽ cố gắng khai thác những lỗ hổng trong chương trình của chúng ta. Do đó, sau khi viết code chúng ta cần đánh giá lại code đối với các rủi ro bảo mật. Để thực hiện đánh giá code thì chúng ta cần một nhóm các thành viên có kiến thức về lỗ hổng bảo mật và yêu cầu bảo mật để có thể tìm ra lỗ hổng cần khắc phục. Microsoft đã đề xuất thực hiện đánh giá code theo 4 bước như sau [2]:
3.1.4.1. Bước 1: Xác định các mục tiêu đánh giá bảo mật code
Bước đầu tiên là đặt mục tiêu và các ràng buộc cho đánh giá. Khi chúng ta đặt mục tiêu cho đánh giá bảo mật, chúng ta cần biết các vấn đề bảo mật phổ biến đối với bất kỳ ứng dụng nào cũng như mọi thay đổi code cụ thể cần được xem xét. Các nội dung cần đánh giá bao gồm:
Xác thực các dữ liệu đầu vào
Xác thực, ủy quyền, nhật ký, tài khoản
Các dữ liệu nhạy cảm
Các thông số cấu hình
Các đoạn mã không an toàn, quản lý các ngoại lệ
Mức truy cập dữ liệu
Tiêm mã, cross-site scripting
Quản lý đặc quyền và đặc quyền nâng cao
3.1.4.2. Bước 2: Rà soát sơ bộ
Việc thực hiện rà soát sơ bộ cần được thực hiện theo 2 cách thức là tự động và thông thường. Đối với việc đánh giá code nên đặt các câu hỏi hoặc các tình huống như sau:
Xác định vùng tin tưởng: tất cả các đối tượng trong đó có thể tin cậy được.
Xác định dữ liệu đầu vào: cần xác nhận từng dữ liệu đầu vào hợp lệ cho chương trình và loại bỏ các dữ liệu không hợp lệ.
Code xác thực người dùng: Chương trình có xác thực người dùng không? Kỹ thuật xác thực nào đã sử dụng? Mã xác thực có được chỉnh sửa không?
Code ủy quyền người dùng: Người dùng được tin cậy nhưng có được phép thực hiện các nhiệm vụ đặc quyền không? Vai trò nào được cho phép và làm thế nào để chúng tương tác?
Mã hóa: Ứng dụng có sử dụng mã hóa không? Loại thuật toán nào hệ thống sử dụng, đối xứng hoặc không đối xứng? Kích thước khóa nào đang sử dụng.
Các đoạn mã xử lý ngoại lệ: Chương trình có một kiến trúc xử lý lỗi nhất quán? Chương trình có bắt và đưa ra ngoại lệ có cấu trúc.
Độ đặc quyền sử dụng các chức năng: Có phần nào của chương trình cần được thực thi đặc trong quyền nâng cao không? Nếu có, nó được xử lý như thế nào?
Thư viện bên ngoài: Chương trình có sử dụng thư viện bên ngoài không? Nếu có, nó đáng tin đến mức nào?
3.1.4.3. Bước 3: Đánh giá các vấn đề bảo mật code
Đây là bước quan trọng nhất của tất cả, bước này sử dụng kết quả của bước 2 để phân tích. Đối với việc đánh giá các vấn đề bảo mật code, cần thực hiện:
Đánh giá các vùng tin cậy: Đánh giá mức độ tin cậy của nguồn đầu vào đến từ các nguồn nội bộ hoặc từ code được viết trong tổ chức, không nên tin tưởng bất kỳ đầu vào nào đến từ bên ngoài các thành phần của ứng dụng.
Phân tích luồng thực hiện chức năng: Thực hiện phân tích luồng điều khiển các bước thông qua các điều kiện logic bên trong code.
Phân tích luồng lưu trữ dữ liệu: Thực hiện phân tích luồng dữ liệu để theo dõi vòng đời của dữ liệu từ các điểm đầu vào đến các điểm đầu ra.
Đầu vào/đầu ra: Trong quá trình phân tích luồng dữ liệu, cần thực hiện đánh giá danh sách đầu vào và đầu ra.
Đặc điểm của các ngôn ngữ lập trình: Vẫn có thể có rủi ro bảo mật từ các phân đoạn code và thư viện khác nhau. Các thư viện hoặc code đã được chứng nhận là đáng tin cậy nhưng cũng trở nên không đáng tin cậy do những thay đổi từ môi trường bên ngoài.
3.1.4.4. Bước 4: Đánh giá các vấn đề bảo mật duy nhất trong kiến trúc
Sau khi đã hoàn thành bước 1, 2 và 3, cần thực hiện bước cuối cùng là tìm kiếm các vấn đề bảo mật liên quan đến kiến trúc duy nhất của ứng dụng. Đây là bước cuối cùng xác minh các tính năng bảo mật duy nhất cho kiến trúc ứng dụng.