Phân loại và phát hiện lỗ hổng của hệ thống thông tin

08:00 | 25/06/2018 | LỖ HỔNG ATTT
Lỗ hổng của hệ thống thông tin (HTTT) là khiếm khuyết của các thành phần phần mềm, phần cứng hoặc của toàn bộ hệ thống có thể bị sử dụng để thực hiện các mối đe dọa an toàn thông tin (ATTT) của hệ thống. Bất kỳ HTTT nào cũng đều có những lỗ hổng nhất định, chúng có thể được sinh ra trong mọi giai đoạn thuộc vòng đời của hệ thống. Lỗ hổng phần mềm có thể xuất hiện khi có những sai sót mà lập trình viên phạm phải ở giai đoạn phát triển phần mềm. Trong một số trường hợp, các lỗ hổng được tạo ra một cách cố ý, thường được gọi là các cổng hậu, chúng cho phép truy cập bất hợp pháp vào các chức năng của chương trình hoặc dữ liệu được lưu trữ trong đó. Những kẻ tấn công có thể sử dụng các lỗ hổng để trục lợi và gây hại cho hệ thống. Do đó, phát hiện và khắc phục lỗ hổng kịp thời là nhiệm vụ hết sức quan trọng trong công tác bảo đảm an toàn các HTTT.

Phân loại lỗ hổng an toàn thông tin

Lỗ hổng của HTTT rất đa dạng và có thể do nhiều nguyên nhân khác nhau, có thể phát sinh từ những yếu tố thuần túy kỹ thuật; cũng có thể do các yếu tố về tổ chức và quản lý như: thiếu hoặc khiếm khuyết trong các các biện pháp bảo vệ thông tin. Do vậy, có khá nhiều phương pháp phân loại lỗ hổng của HTTT.

Theo tài liệu [1], lỗ hổng ATTT của HTTT được chia thành ba loại: lỗ hổng khách quan, lỗ hổng chủ quan và lỗ hổng ngẫu nhiên. Lỗ hổng khách quan xuất phát từ các đặc tính kỹ thuật vốn có của thiết bị và phần mềm của HTTT; Lỗ hổng chủ quan xuất phát từ hành vi của chủ thể, có thể là nhà thiết kế, các quản trị viên và người sử dụng; Lỗ hổng ngẫu nhiên xuất phát từ môi trường của HTTT và những bối cảnh không dự đoán trước được.

Theo tài liệu [2], lỗ hổng ATTT được phân loại theo các giai đoạn trong vòng đời của HTTT, bao gồm: lỗ hổng thiết kế, lỗ hổng chế tạo và lỗ hổng khai thác.

Trong bài báo này, trình bày cách phân loại theo cách tiếp cận được đề xuất trong tiêu chuẩn GOST P56546-2-15 của Liên bang Nga, với 3 tiêu chí: khu vực phát sinh lỗ hổng, các khiếm khuyết của HTTT và vị trí xuất hiện các lỗ hổng.

Lỗ hổng theo khu vực phát sinh

Bao gồm: Lỗ hổng code, lỗ hổng cấu hình, lỗ hổng kiến trúc và lỗ hổng tổ chức.

Lỗ hổng code xuất hiện do lỗi trong quá trình xây dựng phần mềm, gồm các lỗi logic, cú pháp và ở các mức truy cập. Lỗ hổng code còn bao gồm cả những cài đặt cố ý của nhà thiết kế để tiếp cận trái phép vào hệ thống của người dùng phần mềm.

Lỗ hổng cấu hình, xuất hiện trong quá trình cài đặt, cấu hình và các phương tiện kỹ thuật của HTTT, như các tham số cài đặt và thông số kỹ thuật của các thiết bị kỹ thuật.

Lỗ hổng kiến trúc, phát sinh trong quá trình thiết kế HTTT.

Lỗ hổng tổ chức tồn tại do thiếu (hoặc do các khiếm khuyết) của các biện pháp tổ chức bảo vệ thông tin trong các HTTT, hoặc do không tuân thủ các quy tắc khai thác hệ thống bảo vệ thông tin của HTTT.

Lỗ hổng phát sinh do các khiếm khuyết của hệ thống thông tin

Trong HTTT tồn tại những khiếm khuyết sẽ làm xuất hiện nhiều lỗ hổng. Ví dụ: những khiếm khuyết dẫn đến rò rỉ, hoặc lộ thông thông tin tiếp cận hạn chế; khiếm khuyết liên quan đến tràn bộ nhớ (khi phần mềm thực hiện các bản ghi dữ liệu vượt ra ngoài giới hạn của bộ nhớ vùng đệm, kết quả là dữ liệu được ghi phía trước hoặc tiếp sau bộ đệm bị hư hại).

Các khiếm khuyết của HTTT làm phát sinh lỗ hổng ATTT thường liên quan đến các vấn đề như: cài đặt sai tham số trong đảm bảo chương trình; kiểm tra không đầy đủ dữ liệu đầu vào; khả năng giám sát đường tiếp cận các thư mục; phân quyền sử dụng các lệnh của hệ điều hành (ví dụ, lệnh xem cấu trúc thư mục, lệnh sao chép, lệnh loại bỏ tệp từ xa); áp dụng các toán tử tích hợp ngôn ngữ lập trình; sử dụng mã lệnh; rò rỉ thông tin tiếp cận hạn chế; sử dụng các biến đổi mật mã; quản lý tài nguyên; tràn bộ nhớ.

Lỗ hổng theo vị trí xuất hiện

Được phân loại gồm các lỗ hổng sau:

Lỗ hổng trong đảm bảo chương trình toàn hệ thống: lỗ hổng hệ điều hành (lỗ hổng hệ thống tệp, lỗ hổng chế độ tải, lỗ hổng trong các cơ chế quản lý quy trình…), lỗ hổng hệ thống quản lý cơ sở dữ liệu.

Lỗ hổng trong phần mềm ứng dụng.

Lỗ hổng trong phần mềm chuyên dùng, tức là các lỗ hổng đảm bảo chương trình dùng để giải quyết các bài toán đặc thù của HTTT, cụ thể là: lỗi lập trình, sự có mặt các chức năng không công bố có khả năng ảnh hưởng lên các phương tiện bảo vệ thông tin, khiếm khuyết trong các cơ chế hạn chế tiếp cận cho đến các đối tượng đảm bảo chương trình chuyên dùng.

Lỗ hổng tồn tại trong đảm bảo chương trình của các phương tiện kỹ thuật như: phần sụn các thiết bị nhớ, các mạch logic tích hợp, các hệ thống đầu vào/ra, chương trình trong các bộ điều khiển, giao diện….

Lỗ hổng trong các thiết bị cầm tay, như: hệ điều hành các thiết bị di động, giao diện truy cập không dây....

Lỗ hổng trong các thiết bị mạng như: bộ định tuyến, tổng đài, cầu; các trang bị viễn thông khác như: giao thức dịch vụ mạng, giao thức điều khiển thiết bị viễn thông....

Lỗ hổng trong các thiết bị bảo vệ thông tin. Bao gồm lỗ hổng trong các phương tiện quản lý truy cập (kiểm soát tính toàn vẹn, phần mềm chống mã độc, hệ thống phát hiện xâm nhập, tường lửa…).

Bên cạnh đó, GOST P56546-2-15 còn phân loại lỗ hổng dựa trên các tiêu chí tìm kiếm như: tên của hệ điều hành, nền tảng phát triển, tên phần mềm và phiên bản, mức độ nguy hại của lỗ hổng, ngôn ngữ lập trình và dịch vụ sử dụng để vận hành phần mềm.

Lỗ hổng đã biết, lỗ hổng zero-day 

Với những kẻ tấn công, lỗ hổng là những kênh chính để xâm nhập trái phép vào HTTT. Do đó, tìm kiếm lỗ hổng luôn là mối quan tâm hàng đầu. Khi phát hiện được lỗ hổng, kẻ tấn công lập tức tận dụng cơ hội để khai thác. Từ thời điểm phát hiện ra lỗ hổng đến lần vá đầu tiên sẽ mất một khoảng thời gian dài và đây chính là cơ hội để thực hiện lây nhiễm, phát tán mã độc. Còn với các chuyên gia bảo mật thông tin, phát hiện và khắc phục lỗ hổng là nhiệm vụ quan trọng hàng đầu. Việc phát hiện lỗ hổng đã khó khăn, nhưng khắc phục còn khó khăn hơn. Do vậy, để thuận tiện trong quá trình khắc phục, các chuyên gia đã chia lỗ hổng thành hai loại là lỗ hổng đã biết và lỗ hổng zero-day.

Lỗ hổng đã biết, là lỗ hổng đã được công bố, kèm theo các biện pháp thích hợp để bảo vệ HTTT, các bản vá lỗi và bản cập nhật. Như vậy, mỗi khi lỗ hổng được phát hiện thuộc loại này, thì vấn đề cũng coi như đã được giải quyết.

Tuy nhiên, có những lỗ hổng mà chỉ đến thời điểm phát hành bản cập nhật, hoặc phiên bản mới của sản phẩm, nhà sản xuất mới biết về sự tồn tại của nó. Nhà sản xuất không đủ thời gian để nghiên cứu và khắc phục sản phẩm đã phát hành, nên các lỗ hổng loại này được đặt tên là lỗ hổng zero-day. Như vậy, trong suốt thời gian kể từ thời điểm tồn tại đến khi bị phát hiện, lỗ hổng này có thể đã được khai thác trong thực tế và gây ảnh hưởng tới tổ chức, doanh nghiệp, người dùng.

Lỗ hổng zero-day thường tồn tại trong thời gian dài, trung bình khoảng 300 ngày. Một số có “tuổi thọ” cao hơn rất nhiều. Hãng SAP đã công bố rằng, họ từng phát hiện và vá được các lỗ hổng có tuổi thọ 10 năm. Trong đó, nguy hiểm nhất là các lỗ hổng: CVE-2004-308 (làm tổn hại bộ nhớ), CVE-2005-2974 (gây tấn công từ chối dịch vụ) và CVE-2005-3550 (cho phép thực hiện lệnh từ xa).

Ngoài các hãng bảo mật, “hacker” cũng có thể là những người đầu tiên phát hiện ra lỗ hổng. Với các “hacker mũ trắng” thì các lỗ hổng zero-day là đối tượng nghiên cứu hấp dẫn, nếu phát hiện và khắc phục được, họ cũng sẵn sàng thông báo cho nhà sản xuất. Nhưng với các “hacker mũ đen” thì đây là cơ hội tốt để trục lợi. Họ sẽ nghiên cứu phương án khai thác ngay lập tức, thậm chí đưa ra rao bán tại chợ đen với giá cao. Chẳng hạn, lỗ hổng zero-day cho phép chiếm quyền quản trị trên hệ điều hành Windows được rao bán với giá 90 nghìn USD. Tội phạm mạng hay các cơ quan đặc vụ sẵn sàng chi trả khoản tiền lớn để mua lại các lỗ hổng này, tạo nên thị trường chợ đen sôi động trên mạng Internet.

Vì thế, nhiều hãng bảo mật sẵn sàng chi những khoản tiền lớn để trả cho những ai phát hiện được lỗ hổng trong các sản phẩm của họ. Gần đây, Kaspersky Lab đã tăng tiền thưởng lên 100 nghìn USD cho người có thể phát hiện ra những lỗ hổng nghiêm trọng trong các sản phẩm của hãng này.

Phát hiện lỗ hổng của hệ thống thông tin

Để phát hiện, xác định và đánh giá các lỗ hổng của HTTT và loại bỏ chúng, người ta sử dụng các phương tiện phân tích an toàn hệ thống. Các phương tiện này cho phép kiểm tra toàn diện hệ thống, máy chủ mạng, hệ điều hành, phần mềm ứng dụng, bộ định tuyến, tường lửa, giao thức.… Từ đó, xây dựng tài liệu mô tả cho từng lỗ hổng được phát hiện và khuyến cáo cách khắc phục. Các phương tiện phân tích an toàn mạng được chia làm 2 loại [2]: các phương tiện phân tích an toàn mạng thực hiện phân tích từ xa trạng thái các máy chủ được kiểm soát tại mức mạng và các phương tiện phân tích an toàn mức hệ điều hành, thực hiện phân tích cục bộ trạng thái các máy chủ được kiểm soát.


Hình 1. Mô hình phát hiện lỗ hổng tổng quát

Quá trình phát hiện lỗ hổng của HTTT được xây dựng bằng cách thực hiện kiểm tra thụ động và kiểm tra thăm dò tích cực (active probe) các lỗ hổng.

Trong quá trình quét (scan), các phương tiện phân tích an toàn gửi yêu cầu đến địa chỉ của HTTT (lên cổng máy chủ), phân tích các gói dữ liệu nhận được, sau đó đưa ra các kết luận tương ứng về loại HTTT và lỗ hổng có thể tồn tại. Việc quét thụ động thường không đưa ra kết quả chính xác tuyệt đối về sự tồn tại của lỗ hổng.

Phương pháp thăm dò tích cực cung cấp khả năng phân tích dấu vết số đoạn phần mềm của HTTT, thực hiện quá trình so sánh kết quả nhận được với dấu vết số lỗ hổng đã được biết của HTTT đang được kiểm tra. Phương pháp này cung cấp một thủ tục chính xác và đáng tin cậy hơn để xác định các lỗ hổng tiềm ẩn. Trong quá trình kiểm tra thăm dò tích cực, các phương tiện phân tích an toàn mô phỏng các tấn công vào HTTT, sử dụng hình ảnh lỗ hổng nhận được khi quét. Kết quả thu được là các thông tin đáng tin cậy và chính xác nhất về sự hiện diện của lỗ hổng trong HTTT.

Kết quả quét và kiểm tra thăm dò tích cực được đưa vào cơ sở dữ liệu lỗ hổng, trong đó lưu giữ hình ảnh các lỗ hổng của HTTT. Trên cơ sở so sánh hình ảnh lỗ hổng được phát hiện với hình ảnh các lỗ hổng của HTTT, các phương tiện phân tích an toàn hệ thống lập báo cáo về sự vắng mặt hay hiện diện của những trùng hợp trong hình ảnh của các lỗ hổng, báo cáo này được lưu trong cơ sở dữ liệu lỗ hổng.

Quá trình xác định hình ảnh lỗ hổng đã phát hiện của HTTT được thực hiện bằng cách so sánh nó với hình ảnh của các lỗ hổng đã được biết đến và lỗ hổng zero-day (được lưu trữ trong cơ sở dữ liệu lỗ hổng). Mô tả hình ảnh các lỗ hổng đã được biết đến và lỗ hổng zero-day được lưu giữ bằng thông tin về các tính chất đặc thù của từng lỗ hổng cụ thể. Để nhận dạng chính xác hình ảnh lỗ hổng được phát hiện, cơ sở dữ liệu lỗ hổng cần chứa thông tin về tên gọi và phiên bản phần mềm của HTTT, về định danh, tên và lớp của các lỗ hổng được phát hiện.

Dựa trên các thông tin trên, các phương tiện phân tích an toàn sẽ phân loại các mức độ của lỗ hổng. Để đánh giá một cách chính xác thông tin về lỗ hổng bao gồm: loại khiếm khuyết của HTTT, vị trí phát hiện và phương pháp phát hiện lỗ hổng. Quá trình đánh giá lỗ hổng kết thúc bằng các khuyến nghị về việc loại bỏ lỗ hổng hoặc loại trừ khả năng sử dụng chúng.

Trong trường hợp lỗ hổng được phát hiện lần đầu tiên, các phương tiện phân tích sẽ đưa thông tin về nó vào cơ sở dữ liệu lỗ hổng và hình thành cơ sở dữ liệu mới của lỗ hổng zero-day. Khi các nhà phát triển HTTT đưa ra các bản cập nhật và các biện pháp bảo vệ thông tin, thì lỗ hổng zero-day sẽ chuyển thành lỗ hổng đã biết.                  

Trần Đức Lịch

Tổng hợp

Tin cùng chuyên mục

Tin mới