Lượt xem: 5195 | Gửi lúc: 03/10/2014 10:19:34
Bookmark and Share

Nghiên cứu và lựa chọn công cụ đánh giá cổng thông tin điện tử

Mất an ninh, an toàn cho cổng thông tin điện tử đang là vấn đề nóng không chỉ của Việt Nam mà của toàn thế giới. Thống kê hàng năm về tình trạng mất an toàn thông tin (ATTT) trong các cổng thông tin điện tử đưa ra con số đáng lo ngại, có tới hơn 2.286 website của các cơ quan, doanh nghiệp Việt Nam bị tấn công trong năm 2013. Các website này đang tồn tại rất nhiều lỗ hổng an ninh chưa được khắc phục. Để phát hiện những lỗ hổng này, có rất nhiều kỹ thuật được sử dụng, về cơ bản được chia làm hai loại là kỹ thuật phân tích tĩnh và kỹ thuật phân tích động dựa trên các công cụ dò quét lỗ hổng. Bài báo này giới thiệu một số công cụ dò quét lỗ hổng bảo mật đang được sử dụng trên thị trường, đưa ra những so sánh, đánh giá và đề xuất lựa chọn công cụ tốt nhất để triển khai ứng dụng trong thực tế.

Kỹ thuật phân tích lỗ hổng trong cổng thông tin điện tử
Kỹ thuật phân tích tĩnh
Đây là kỹ thuật phân tích mã nguồn câu lệnh truy vấn SQL được tạo ra từ thông tin đầu vào của người dùng mà không cần thực thi chương trình. Việc này sẽ giúp lập trình viên hiểu sâu hơn về mã nguồn ứng dụng, kiểm soát được luồng dữ liệu, đồng thời phát hiện và xác định được các lỗ hổng có thể tiềm ẩn trong ứng dụng. Ví dụ, kỹ thuật phân tích tĩnh phát hiện lỗ hổng XSS bao gồm 2 phần: Phần 1 là phân tích chuỗi thích hợp để theo dõi các chuỗi con không đáng tin cậy và Phần 2 là kiểm tra các script không đáng tin cậy sử dụng kỹ thuật ngôn ngữ hình thức.
Kỹ thuật phân tích động
Đây là kỹ thuật phân tích các thông tin nhận được trong quá trình thực thi ứng dụng để phát hiện các lỗ hổng. Các thông tin này có thể bao gồm các phản hồi nhận được từ ứng dụng Web, các thông báo lỗi….
Phân tích động có thể được thực hiện tại thời điểm kiểm thử ứng dụng, trong quá trình phát triển xây dựng, hoặc thời điểm sau đó. Phương pháp này có lợi thế hơn phương pháp phân tích tĩnh vì không phải lúc nào mã nguồn của ứng dụng web cũng được công bố. Tuy nhiên, những lỗ hổng này phải được vá hay sửa chữa bởi các lập trình viên, nhưng không phải tất cả các lập trình viên đều có thể sử dụng phương pháp này để tìm kiếm lỗ hổng trên ứng dụng web của họ. Ví dụ trong kỹ thuật phân tích động dựa trên hướng tiếp cận phỏng đoán, dựa trên cơ sở tri thức heuristics, đầu tiên người ta sẽ phân tích ứng dụng web với mục đích xác định các hình thức đầu vào của nó. Sau đó, sẽ sinh ra một loạt các cuộc tấn công SQL chuẩn với mục tiêu khiến cho các ứng dụng web gửi ra thông báo lỗi.



Cuộc tấn công chuẩn sẽ bao gồm một tập hợp các chuỗi truy vấn, không phụ thuộc vào các ứng dụng web. Sau đó, các thông báo trả về của ứng dụng web sẽ được so sánh với một thư viện chuẩn chứa các thông báo lỗi liên quan mà cơ sở dữ liệu có thể trả về. Từ đó, tấn công sử dụng các thông báo lỗi sẽ được thực hiện cho tới khi xác định được tên trường, bảng hoặc cấu trúc cơ sở dữ liệu. Kỹ thuật tiếp cận này bao gồm 4 bước gồm: Phục hồi cấu trúc ứng dụng Web; Xác định các Đầu vào ứng dụng web cũng được gọi là "điểm nóng"; Thực hiện các cuộc tấn công; Báo cáo kết quả thử nghiệm.
Thuật toán phát hiện lỗ hổng trong cổng thông tin điện tử
Để áp dụng hai kỹ thuật phân tích trên, có rất nhiều thuật toán được sử dụng. Kỹ thuật phân tích tĩnh sử dụng hai thuật toán là cây phân tích cú pháp và biểu đồ luồng điều khiển. Còn kỹ thuật phân tích động sử dụng thuật toán Học máy và Fuzzing.
Cây phân tích cú pháp truy vấn
Cây phân tích cú pháp truy vấn SQL là một cấu trúc dữ liệu được sử dụng để phân tích cú pháp của một câu lệnh truy vấn SQL. Người lập trình ứng dụng Web cung cấp phần mã nguồn của cây phân tích cú pháp, còn phần của người dùng cung cấp được biểu diễn như là nút lá trống trong cây phân tích cú pháp. Các nút này đại diện cho các chuỗi rỗng, chủ ý của lập trình viên là muốn người dùng gán các giá trị hợp lệ cho các nút lá này. Mỗi nút lá chỉ có thể đại diện cho một nút trong kết quả truy vấn và nó phải là giá trị của một chuỗi được đặt ở vị trí hợp lệ. Mục tiêu chính của kỹ thuật này là xác định các thông tin đầu vào do người dùng nhập xem có đúng với mong muốn của người lập trình hay không. Đầu tiên, người dùng truyền vào một câu lệnh truy vấn SQL, hoặc đưa vào các tham số để thực hiện câu truy vấn thông qua ứng dụng web sẽ được thu thập bởi “Collector Queries”. Các đầu vào này sẽ được sử dụng trong pha phân tích cú pháp cây truy vấn. Trong pha này, hệ thống sẽ đưa ra các câu truy vấn và gửi nó tới một công cụ phân tích cú pháp. Công cụ này sẽ so sánh cấu trúc của cây phân tích với cấu trúc được sinh ra theo mô hình. Nếu cấu trúc của câu truy vấn được so sánh là phù hợp thì truy vấn là hợp lý và được quyền truy xuất vào CSDL, ngược lại thì sẽ bị từ chối và chặn lại.
Biểu đồ luồng điều khiển
Kỹ thuật này với mục đích là sử dụng biểu đồ luồng điều khiển (CFG) để sinh ra các ca kiểm thử (test case), các ca kiểm thử này được sử dụng cho việc phát hiện lỗ hổng bảo mật. Lộ trình trong CFG với đường đi xuất phát từ đỉnh vào, đi qua các đỉnh và cung trong đồ thị, kết thúc ở đỉnh ra. Chu trình tạo dữ liệu đầu vào kiểm thử cho kiểm thử luồng điều khiển được mô tả trong lưu đồ.


Quá trình sinh ra dữ liệu kiểm thử trong CFG

Thuật toán Học máy
Thuật toán này sử dụng một trình thu thập web để tìm các lỗ hổng trong các ứng dụng web và tạo ra mã tấn công bằng cách sử dụng danh sách mẫu và kỹ thuật tấn công. Phương pháp này hiệu quả hơn so với kiểm thử thâm nhập truyền thống, tuy nhiên, nó không thể phát hiện tất cả các loại lỗ hổng.
Thuật toán Fuzzing
Fuzzing là thuật toán trong kiểm thử tiêu cực, trái ngược với kiểm tra chức năng, kiểm tra khả năng của hệ thống. Trong kiểm thử tiêu cực, thay vì gửi các dữ liệu hợp lý (được xử lý trong mã nguồn), hệ thống kiểm thử sẽ nhận được các đầu vào hoặc chuỗi đầu vào không hợp lệ hoặc bán hợp lệ thông qua giao diện tương tác.
Chương trình hoặc framework tạo ra các kiểm thử fuzz (fuzz test) hoặc thực thi các kiểm thử gọi là fuzzer. Fuzzer có thể được phân loại dựa trên 2 tiêu chí khác biệt nhau: Vector tiêm (injection) hoặc vector tấn công.
Một quy trình fuzzing đơn giản bao gồm một chuỗi các thông điệp được gửi tới SUT (hệ thống được kiểm tra). Các kết quả thay đổi và thông điệp gửi tới có thể được phân tích, trong một số trường hợp có thể bị bỏ qua. Kết quả trả về điển hình của một kiểm thử fuzz bao gồm: Đáp trả hợp lệ (Valid response), đáp trả lỗi (Error response), đáp trả bất thường (Anomalous response), sụp đổ hay thất bại (Crash or other failure).
Quá trình fuzzing không chỉ là việc gửi và nhận các thông điệp. Kiểm thử đầu tiên sẽ được tạo ra và gửi tới SUT. Việc giám sát mục tiêu cần được thực hiện liên tục, tất cả các thất bại đều được ghi lại để đánh giá trong các lần sau. Một phần quan trọng của quá trình fuzzing là giám sát mã lệnh, khi nó xử lý một đầu vào không hợp lệ.
Lựa chọn công cụ đánh giá cổng thông tin điện tử
Các công cụ phân tích, dò quét và đánh giá mức độ an toàn của cổng thông tin điện tử hiện đang được sử dụng rộng rãi như: Bkav Webscan, Acunetix Web Vulnerability Scanner, IBM Rational AppScan…
Bkav WebScan: là công cụ quét lỗ hổng bảo mật, sử dụng công nghệ điện toán đám mây và tiếp cận theo hướng phần mềm như một dịch vụ (Saas). Để thực hiện quét lỗ hổng trên website, người quản trị chỉ cần truy cập vào địa chỉ Webscan.bkav.com.vn và thực hiện quét. Webscan hỗ trợ quét đồng thời nhiều website một lúc, sau khi quét xong, kết quả sẽ được gửi tới địa chỉ email của người quét cùng những chỉ dẫn để khắc phục các lỗ hổng này. BKAV Web Vulns Scanner chia thành hai phần: Vulns Scanner Website (VSW) là website giới thiệu dịch vụ, quản lý thông tin, giao tiếp với người dùng và Vulns Scanner Application (VSA) là chương trình thực hiện quá trình quét các lỗ hổng an ninh của website. Hai thành phần này giao tiếp với nhau thông qua lời gọi chương trình và cơ sở dữ liệu. Webscan sử dụng kỹ thuật phân tích động và tiếp cận dựa trên phỏng đoán để thực hiện dò quét và phát hiện lỗ hổng. Thuật toán mà Webscan sử dụng là fuzzing.
Acunetix Web Vulnerability Scanner (WVS): Công cụ này kiểm tra tất cả các lỗ hổng web, bao gồm SQL Injection, Cross Site Scripting và nhiều lỗ hổng khác. Acunetix sử dụng kỹ thuật phân tích động với hướng tiếp cận dựa trên phỏng đoán, sử dụng thuật toán Fuzzing. Ban đầu Module Crawler phân tích toàn bộ trang web bằng cách làm theo tất cả các liên kết trên trang web. Sau đó, WVS sẽ vạch ra cấu trúc trang web và hiển thị thông tin chi tiết về mỗi tập tin. Sau quá trình thu thập thông tin, WVS tự động hiển thị một loạt các lỗ hổng có thể bị tấn công trên mỗi trang được tìm thấy. Khi các lỗ hổng được tìm thấy, Acunetix WVS báo cáo về lỗ hổng này.
Cả hai công cụ trên đều có thể thực hiện dò quét và phát hiện lỗ hổng của một website khi không được cung cấp mã nguồn của website đó. Do vậy, chúng đều sử dụng kỹ thuật phân tích động và tiếp cận dựa trên phỏng đoán sử dụng thuật toán Fuzzing.
Tuy nhiên, Acunetix được đánh giá là có giao diện trực quan, dễ sử dụng và thân thiện với người dùng. Giao diện trạng thái đồ họa Scan cho người dùng thấy chi tiết quét dạng nút. Ngoài ra, với Acunetix, chỉ tập trung vào một sản phẩm, làm việc trên một sản phẩm chuyên dụng duy nhất. 
Dưới đây là một giao diện của phần mềm Acunetix được đánh giá thử nghiệm:


Thông báo kết quả và mức độ cảnh báo sau khi quét xong

Kết luận
Trên cơ sở phân tích về một số kỹ thuật và một số thuật toán được sử dụng trong các công cụ phân tích, dò quét lỗ hổng trong cổng thông tin điện tử, các tác giả đã so sánh ưu, nhược điểm của các công cụ này. Bên cạnh đó, nhóm tác giả đã giới thiệu thử nghiệm chọn công cụ Acunetix để dò quét và đánh giá mức độ an toàn bảo mật của cổng thông tin điện tử trong thực tế.

 TÀI LIỆU THAM KHẢO
1. Gary Michael Wassermann (2008), Techniques and Tools for Engineering Secure Web Applications, Master’s Thesis, Computer Science, University of California.
2. Ari Takanen, Jared DeMott, Charlie Miller (2008) “Fuzzing for Software Security Testing and Quality Assurance”, ARTECH HOUSE, INC.
3. Ogheneovo, E. E. and Asagba, P. O. “A Parse Tree Model for Analyzing And Detecting SQL Injection Vulnerabilities”. Department of Computer Science, University of Port Harcourt, Nigeria.
4. Debasish Das, Utpal Sharma & D.K. Bhattacharyya (2010), “An Approach to Detection of SQL Injection Attack Based on Dynamic Query Matching”, International Journal of Computer Applications, Volume 1, No. 25,  pp. 28 – 33.

TS. Hồ Văn Hương; CN. Đỗ Thị Huệ; KS. Hoàng Vĩnh Hà