chương 1 luận văn sẽ trình bày một số phương pháp và công cụ phòng chống tấn công web. Top 10 lỗ hổng bảo mật ứng dụng web theo OWASP Ngày nay nguy cơ mất an toàn thông tin ngày càng xảy ra nhiều và dẫn đến các hậu quả nghiêm trọng mà người quản trị website không thể lường trước được. Đặc biệt là đối với các cuộc tấn công web ngày càng tinh vi và khó lường. Chính vì vậy, trong mục này luận văn sẽ khảo sát các phương thức tấn công lỗ hổng bảo mật Website dựa trên khuyến nghị của OWASP (The Open Web Application Security Project- dự án mở về bảo mật ứng dụng Web) [12].
SQL injection SQL injection là một kĩ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng trong việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu để "tiêm vào" (inject) và thi hành các câu lệnh SQL bất hợp pháp (không được người phát triển ứng dụng lường trước). Hậu quả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh,… do có toàn quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy. Lỗi này thường xảy ra trên các ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase. Có 4 dạng tấn công kiểu SQL injection sau: - Vượt qua kiểm tra lúc đăng nhập; - Sử dụng câu lệnh SELECT; - Sử dụng câu lệnh INSERT; 5 - Sử dụng các Stored-Procedures.
Broken Authentication And Session Management Đây là kiểu tấn công lỗi xác thực và quản lý phiên làm việc (Broken Authentication And Session Management), bao gồm những đoạn chương trình kiểm tra danh tính và quản lý phiên làm việc của ngƣời sử dụng thường hay được làm qua loa không đúng cách. Điều này giúp kẻ thâm nhập có thể ăn cắp mật mã, khóa, mã của các phiên làm việc {session token} hoặc tận dụng những lỗi khác để giả mạo danh tính các người dùng khác. Quản lý xác thực và phiên bao gồm tất cả các khía cạnh xử lý xác thực và quản lý phiên làm việc. Xác thực là một khía cạnh quan trọng của quá trình này, nhưng ngay cả các cơ chế xác thực vững chắc cũng có thể bị suy yếu do chức năng quản lý có khe hở, bao gồm thay đổi mật khẩu, ghi nhớ mật khẩu, thay đổi tài khoản và nhiều chức năng khác.
Vì các cuộc tấn công có thể xảy ra với nhiều ứng dụng web nên chức năng quản lý tài khoản yêu cầu xác thực lại ngay cả khi người sử dụng có phiên làm việc hợp lệ. Một phương pháp xác thực mạnh mẽ hơn là sử dụng phần mềm và phần cứng tuy nhiên phương pháp này rất tốn kém. Các ứng dụng web thường phải thiết lập phiên để theo dõi các luồng yêu cầu từ người dùng, giao thức HTTP không hỗ trợ khả năng này vì vậy các ứng dụng web phải tự tạo ra nó. Thông thường môi trƣờng ứng dụng web cung cấp khả năng phiên nhưng nhiều nhà phát triển thích tự họ tạo ra một thẻ phiên của riêng họ.
Tuy nhiên, chức năng ứng dụng liên quan đến quản lý xác thực và phiên làm việc thường thực hiện một cách chính xác, điều này cho phép kẻ tấn công lấy được mật khẩu, khóa, thẻ phiên hoặc khai thác lỗ hổng để thực hiện các giả mạo danh tính người dùng. Cross Site Scripting (XSS) Kiểu tấn công thực thi mã script xấu Cross-Site Scripting (XSS) là một trong những kĩ thuật tấn công phổ biến nhất hiên nay, đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển web và cả những người sử dụng 6 web. Bất kì một website nào cho phép người sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS. Cross-Site Scripting hay còn được gọi tắt là XSS (thay vì gọi tắt là CSS để tránh nhầm lẫn với CSS-Cascading Style Sheet của HTML) là một kĩ thuật tấn công bằng cách chèn vào các website động (ASP, PHP, CGI, JSP .) những thẻ HTML hay những đoạn mã script nguy hiểm có thể gây nguy hại cho những người sử dụng khác.
Trong đó, những đoạn mã nguy hiểm được chèn vào hầu hết được viết bằng các Client-Site Script như JavaScript, JScript, DHTML và cũng có thể là cả các thẻ HTML. Kĩ thuật tấn công XSS đã nhanh chóng trở thành một trong những lỗi phổ biến nhất của Web Applications và mối đe dọa của chúng đối với người sử dụng ngày càng lớn. Insecure Direct Object References Kiểu tấn công đối tượng tham chiếu trực tiếp không an toàn (Insecure Direct Object References), xảy ra khi người phát triển để lộ một tham chiếu đến những đối tượng trong hệ thống như các tập tin, thư mục hay chìa khóa dữ liệu. Nếu chúng ta không có một hệ thống kiểm tra truy cập, kẻ tấn công có thể lợi dụng những tham chiếu này để truy cập dữ liệu một cách trái phép.
Việc phân quyền yếu cho phép người dùng có thể truy cập dữ liệu của người khác. Hacker có thể xác định được cấu trúc truy vấn gửi đến server và có thể nhanh chóng thu nhập dữ liệu như Credit Card, mã khách hàng, thông tin cá nhân. Security Misconfiguration Kiểu tấn công sai sót trong cấu hình bảo mật (Security Misconfiguration), như là một cơ chế an ninh tốt cần phải định nghĩa những hiệu chỉnh về an ninh và triển khai nó cho các ứng dụng, máy chủ ứng dụng, máy chủ web, máy chủ dữ liệu và các ứng dụng nền tảng. Tất cả những thiết lập nên được định nghĩa, thực hiện và bảo trì bởi vì rất nhiều 7 hệ thống không được triển khai với thiết lập an toàn mặc định.
Các hiệu chỉnh cũng bao gồm cập nhật phần mềm và những thư viện được sử dụng bởi ứng dụng. Sensitive Data Exposure Kiểu tấn công phơi bày các dữ liệu nhạy cảm (Sensitive Data Exposure), bao gồm nhiều ứng dụng web không bảo vệ dữ liệu nhạy cảm nhƣ thẻ tín dụng, mã số thuế và những mã xác thực bí mật bằng các phƣơng thức mã hóa hay băm (hashing). Kẻ tấn công có thể ăn cắp hay thay đổi những dữ liệu nhạy cảm này và tiến hành hành vi trộm cắp, gian lận thẻ tín dụng, v. Missing Function Level Access Control Kiểu tấn công thiếu chức năng điều khiển truy cập (Missing Function Level Access Control) bao gồm gần như tất cả các ứng dụng web kiểm tra quyền truy cập cấp độ chức năng trước khi thực hiện chức năng mà có thể nhìn thấy trong giao diện ngƣời dùng.
Tuy nhiên, các ứng dụng cần phải thực hiện kiểm tra kiểm soát truy cập tương tự trên máy chủ khi mỗi chức năng đƣợc truy cập. Nếu yêu cầu không được xác nhận, kẻ tấn công sẽ có thể giả mạo yêu cầu để truy cập vào chức năng trái phép. Cross-Site Request Forgery (CSRF) Kiểu tấn công giả mạo yêu cầu (CSRF) là kiểu tấn công này ép buộc trình duyệt web của một người dùng đã đăng nhập gửi những yêu cầu các HTTP giả bao gồm cookie của phiên truy cập và những thông tin tự động khác bao gồm thông tin đăng nhập đến một ứng dụng web. Điều này, cho phép kẻ tấn công buộc trình duyệt web tạo ra những yêu cầu đến ứng dụng web mà ứng dụng không thể biết đây là những yêu cầu giả mạo của kẻ tấn công.
Using Components with Known Vulnerabilities Kiểu tấn công sử dụng thành phần đã tồn tại lỗ hổng (Using Components with Known Vulnerabilities) bao gồm các lổ hổng có thể có trong các thành phần (thành phần phát triển ứng dụng) như các thư viện, các framework, và mô-đun phần mềm 8 khác. Các thành phần này gần như luôn luôn chạy với quyền cao nhất trong hệ thống. Vì vậy, nếu bị khai thác, các thành phần này có thể gây mất dữ liệu nghiêm trọng. Các ứng dụng sử dụng các thành phần tồn tại lổ hổng có thể làm suy yếu phòng thủ của hệ thống, cho phép một loạt các cuộc tấn công và ảnh hưởng đến hệ thống.
Unvalidated Redirects and Forwards Kiểu tấn công chuyển hướng và chuyển tiếp thiếu kiểm tra (Unvalidated Redirects and Forwards) là kiểu tấn công ứng dụng web thường chuyển hướng, chuyển tiếp người dùng đến những trang web, website khác và sử dụng những thông tin thiếu tin cậy để xác định trang đích đến. Nếu không được kiểm tra một cách cẩn thận, kẻ tấn công có thể lợi dụng để chuyển hướng nạn nhân đến các trang web lừa đảo hay trang web chứa phần mềm độc hại, hoặc chuyển tiếp để truy cập các trang trái phép. Phương pháp phòng chống tấn công trên web 1. Các phương pháp phòng chống tấn công web phổ biến ❖ Phương pháp phòng chống tấn công SQL injection SQL Injection attack [13] gây ra nhiều tác hại tùy thuộc vào môi trường và cách cấu hình hệ thống.
Nếu ứng dụng sử dụng quyền dbo (quyền của người sở hữu CSDL - owner) khi thao tác dữ liệu, nó có thể xóa toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới,… Nếu ứng dụng sử dụng quyền sa (quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị CSDL và với quyền hạn rộng lớn như vậy nó có thể tạo ra các tài khoản người dùng bất hợp pháp để điều khiển hệ thống của bạn. Để phòng tránh các nguy cơ có thể xảy ra, cần bảo vệ các câu truy vấn SQL là bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ đối tượng Request (Request, Request.Cookies, and Request. 9 Trong trường hợp dữ liệu nhập vào là chuỗi, lỗi xuất phát từ việc có dấu nháy đơn trong dữ liệu. Để tránh điều này, thay thế các dấu nháy đơn bằng hàm Replace để thay thế bằng 2 dấu nháy đơn: p_strUsername = Replace(Request.Form("txtUsername"), "'", "''") p_strPassword = Replace(Request.Form("txtPassword"), "'", "''") Trong trường hợp dữ liệu nhập vào là số, lỗi xuất phát từ việc thay thế một giá trị được tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp.
Để tránh điều này, đơn giản hãy kiểm tra dữ liệu có đúng kiểu hay không: p_lngID = CLng(Request("ID")) Như vậy, nếu người dùng truyền vào một chuỗi, hàm này sẽ trả về lỗi ngay lập tức. Ngoài ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thông tin kĩ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống.