MỤC LỤC
DANH MỤC CÁC HÌNH 4
LỜI NÓI ĐẦU 7
Chương I – TỔNG QUAN VỀ HỆ THỐNG HONEYNET 9
1. HONEYPOT 9
1.1. Khái niệm Honeypot: 9
1.2. Phân loại Honeypot: 11
2. Honeynet 13
2.1. Khái niệm Honeynet : 13
2.2. Các chức năng của Honeynet 15
2.3. Một số mô hình triển khai Honeynet trên thế giới 16
3. Vai trò và ý nghĩa của Honeynet 20
CHƯƠNG II- MÔ HÌNH KIẾN TRÚC HONEYNET 21
1. Mô hình kiến trúc vật lý 21
1.1. Mô hình kiến trúc Honeynet thế hệ I 21
1.2. Mô hình kiến trúc Honeynet II, III 23
1.3. Hệ thống Honeynet ảo 24
2. Mô hình kiến trúc loggic của Honeynet 26
2.1. Module điều khiển dữ liệu (hay kiểm soát dữ liệu) 27
2.1.1. Vai trò - nhiệm vụ của Module điều khiển 27
2.1.2. Cơ chế kiểm soát dữ liệu 29
2.1.3. Kiểm soát dữ liệu trong Honeynet II 31
2.2. Module thu nhận dữ liệu 36
2.2.1. Vai trò - nhiệm vụ của Module thu nhận dữ liệu 36
2.2.2. Cơ chế thu nhận dữ liệu 37
2.3. Modul phân tích dữ liệu 43
2.3.1. Vai trò 43
2.3.2. Cơ chế phân tích dữ liệu 43
Chương III – MỘT SỐ KỸ THUẬT TẤN CÔNG DỊCH VỤ WEB 46
1. Các kỹ thuật tấn công cơ bản. 48
1.1. Các nguy cơ mất an toàn dịch vụ web 48
1.1.1. Chiếm hữu phiên làm việc (Session Mangement) 48
1.1.1.1. Ấn định phiên làm việc( Session Fixation) 48
1.1.1.2. Đánh cắp phiên làm việc (Session Hijacking) 48
1.1.2. Lợi dụng việc thiếu sót trong việc kiểm tra dữ liệu nhập hợp lệ (Input validation) .48
1.1.3. Từ Chối Dịch Vụ (Denial of service (DoS) 49
1.2. Tấn công SQL Injection 49
1.2.1. Khái niệm SQL Injection 49
1.2.2. Các dạng tấn công thường gặp 50
1.2.3. Biện pháp phòng chống 60
1.3. Chèn mã lệnh thực thi trên trình duyệt nạn nhân(Cross-Site Scripting). 63
1.3.1. Giới thiệu về XSS 63
1.3.2. Phương pháp tấn công XSS truyền thống 63
1.3.3. Tấn công XSS bằng Flash 65
1.3.4. Cách phòng chống 65
1.4. Tấn công từ chối dịch vụ (Deny of service - DoS) 66
1.4.1. Khái niệm 66
1.4.2. Các nguy cơ tấn công bằng DOS 67
1.4.3. Một số dạn tấn công thường gặp 67
1.4.4. Biện pháp phòng chống 71
2. Các kỹ thuật tấn công mới nhất. 72
115 trang |
Chia sẻ: Thành Đồng | Ngày: 11/09/2024 | Lượt xem: 15 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Tài liệu Tìm hiểu Honeypot và Honeynet, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ác cuộc tấn công nhằm vào lỗ hổng SQL Injection, 12,58% là XSS. Ngoài ra còn có 8.06% là tấn công từ chối dịch vụ và rất nhiều các cuộc tấn công khác.
Hình 2 17 – Cách phương thức tấn công năm 2011
Trong phạm vi của Đồ án “Nghiên cứu Hệ thống Honeypot, Honeynet nhằm mục đích thu thập các kỹ thuật tấn công dịch vụ Web”, chương này sẽ trình bày một số kỹ thuật tấn công dịch vụ web phổ biến hiện nay để chúng ta có thể dễ dàng hiểu, nhận ra được các kỹ thuật, các thủ thuật tấn công web khi Hacker tấn công vào Hệ thống Honeynet của chúng ta. Qua đó, chúng ta đưa ra các biện pháp phòng chống, bảo vệ cho dịch vụ web.
Các kỹ thuật tấn công cơ bản.
Các nguy cơ mất an toàn dịch vụ web
Dưới đây là giới thiệu sơ lược các nguy cơ mất an toàn, các kĩ thuật tấn công Web đã được phân loại dựa trên mức độ gây tác hại đối với ứng dụng, với người dùng.
Chiếm hữu phiên làm việc (Session Mangement)
Kỹ thuật này được chia làm hai loại :
Ấn định phiên làm việc( Session Fixation)
Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ bằng cách gửi một session ID hợp lệ đến người dùng, sau khi người dùng đăng nhập vào hệ thống thành công, hacker sẽ dùng lại session ID đó và nghiễm nhiên trở thành người dùng hợp lệ.
Đánh cắp phiên làm việc (Session Hijacking)
Là kĩ thuật tấn công cho phép hacker mạo danh người dùng hợp lệ sau khi nạn nhân đã đăng nhập vào hệ thống bằng cách giải mã session ID của họ được lưu trữ trong cookie hay tham số URL, biến ẩn của form.
Lợi dụng việc thiếu sót trong việc kiểm tra dữ liệu nhập hợp lệ (Input validation)
Hacker lợi dụng những ô nhập dữ liệu để gửi đi một đoạn mã bất kì khiến cho hệ thống phải thực thi đoạn lệnh đó hay bị phá vỡ hoàn toàn.
Kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ phía trình duyệt (Client-Side validation)
Do ngôn ngữ phía trình duyệt ( JavaScript, VBScript..) đuợc thực thi trên trình duyệt nên hacker có thể sửa đổi mã nguồn để có thể vô hiệu hóa sự kiểm tra.
Tràn bộ đệm (Buffer OverFlow)
Một khối lượng dữ liệu được gửi cho ứng dụng vượt quá lượng dữ liệu được cấp phát khiến cho ứng dụng không thực thi được câu lệnh dự định kế tiếp mà thay vào đó phải thực thi một đoạn mã bất kì do hacker đưa vào hệ thống. Nghiêm trọng hơn nếu ứng dụng được cấu hình để thực thi với quyền root trên hệ thống.
Vượt qua đường dẫn (Path Traversal)
Là phương pháp lợi dụng đường dẫn truy xuất một tập tin trên URL để trả kết quả về cho trình duyệt mà hacker có thể lấy được nội dung tập tin bất kì trên hệ thống.
Chèn mã lệnh thực thi trên trình duyệt nạn nhân (Cross- Site Scripting)
Đây là kĩ thuật tấn công chủ yếu nhằm vào thông tin trên máy tính của người dùng hơn là vào hệ thống máy chủ. Bằng cách thêm một đoạn mã bất kì ( thường được lập trình bằng ngôn ngữ kịch bản như JavaScript, VBScript), hacker có thể thực hiện việc đánh cắp thông tin quan trọng như cookie để từ đó trở thành người dùng hợp lệ của ứng dụngdựa trên những thông tin đánh cắp này. Cross-Site scripting cũng là một kiểu tấn công “session hijacking”.
Chèn câu truy vấn SQL (SQL Injection)
Trong lập trình với cơ sở dữ liệu, người lập trình đã sai sót trong vấn đề kiểm tra giá trị nhập vào để từ đó hacker lợi dụng thêm vào những câu truy vấn hay những giá trị không hợp lệ để dễ dàng đăng nhập vào hệ thống.
Từ Chối Dịch Vụ (Denial of service (DoS)
Một khối lượng lớn yêu cầu được gửi cho ứng dụng trong một khoảng thời gian nhất định khiến hệ thống không đáp ứng kịp yêu cầu dẫn đến hệ thống bị phá vỡ.
Vì khuôn khổ và thời gian của Đồ án là có hạn nên Đồ án chỉ thực hiện tìm hiểu một số kĩ thuật tấn phổ biến và có khả năng phá hoại một hệ thống mạng với mức độ cao. Và trong các chương ở phần thứ hai, luận văn sẽ trình bày kĩ hơn từng kĩ thuật sau :
Tấn công SQL Injection
Tấn công Cross-site Scripting (XSS)
Tấn công Từ chối dịch vụ (DoS)
Tấn công SQL Injection
Khái niệm SQL Injection
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 bởi 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 để 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 lỗ hổng bảo mật rất lớn. Một trong các lỗ hổng này là SQL Injection. Tại Việt Nam, đã qua thời kỳ các quản trị website lơ là việc quét virus, cập nhật các bản vá lỗi từ các phần mềm hệ thống nhưng việc chăm sóc các lỗi của các ứng dụng lại rất ít được quan tâm. Đó là lý do vì sao trong thời gian vừa qua, không ít các website tại Việt Nam bị tấn công và đa số đều là SQL Injection. Vậy SQL Injection là gì?
SQL injection là một kĩ thuật cho phép những kẻ tấn công ( Hacker) 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" 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 cho phép những kẻ tấn công chiếm quyền kiểm soát web. 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.
Về bản chất, đây là lỗi tồn tại trong Các hệ quản trị cơ sở dữ liệu ( SQL server, MySQL, Oraccle .). Tuy nhiên, chúng ta có thể khắc phục lỗi này bằng cách kiểm tra dữ liệu được nhập vào trên ứng dụng Web.
Các dạng tấn công thường gặp
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.Xét một ví dụ điển hình, thông thường để cho phép người dùng truy cập 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 và 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 và 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 và một trang ASP dùng để xử lí thông tin nhập từ phía người dùng.
Ví dụ:
login.htm
Username:
Password:
execlogin.asp
<%
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
%>
Thoạt nhìn, đoạn mã trong trang execlogin.asp 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 và mật khẩu hợp lệ. Tuy nhiên, đoạn mã này thực sự không an toàn và là tiền đề cho một lỗi SQL injection.
Đặc biệt, chỗ 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 lệnh so sánh trên luôn luôn đúng (vì ‘’ luôn bằng ‘’). Do đó câu điều kiện trong mệnh đề WHERE luôn đúng. Giá trị tên người sử dụng của dòng đầu tiên trong bảng sẽ được chọn.Như vây, câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS và đ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ệ.
Ngoài ra, trong chuỗi SQL-injection được tiêm vào thường chứa chứa các kí tự đặc biệt của SQL :
• kí tự “ ; ” : đánh dấu kết thúc 1 câu truy vấn
• kí tự “--” : ẩn chuỗi kí tự phía sau nó trên cùng 1 dòng
Một ví dụ khác sử dụng kí tự đặc biệt SQL để thâm nhập vào hệ thống như sau:
Username: admin’--
Password:
Câu lệnh SQL như sau:
SELECT tkUsername FROM User WHERE tkUsername= ‘admin’-- AND
Password= ‘” & tkPassword & “’”
Ta thấy, câu lệnh trên cho phép đăng nhập vào hệ thống với quyền admin mà không đòi hỏi password ( Vì phần sau của dấu “ --“ sẽ bị ẩn không được thực thi).
Tóm lại, tấn công vượt qua kiểm tra đăng nhập là dạng tấn công cơ bản nhất giúp Hacker 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.
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 và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò 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.
Ví dụ: Mã nguồn cho chức năng này thường được viết khá đơn giản theo dạng sau :
<%
Dim vNewsID, objRS, strSQL
vNewsID = Request("ID")
strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID
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 và 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, và 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 (nghĩa là, 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à:
<%
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
%>
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 tác giả 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 hãy thử tưởng tượ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ư vậy để biết được ứng dụng web có bị lỗi dạng này hay không ? Rất đơn giản, hãy 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.
Và ta cũng 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 và syscolumns cho phép liệt kê tất cả các tên bảng và cột có trong hệ thống.
Ta chỉ cần chỉnh lại câu lệnh SELECT, ví dụ như:
' 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.
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 và 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 :
<%
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " & strValueTwo & " ', ' " & strValueThree & " ') "
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..."
.................
Set objRS = Nothing
%>
Ta thấy, đoạn code trên đã 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ư ta đã yêu cầu thực hiện thêm một lệnh nữa đó là: SELECT TOP 1 FieldName FROM TableName
Dạng tấn công sử dụng stored-procedures
Stored Procedure được sử dụng trong lập trình Web với mục đích giảm sự phức tạp trong ứng dụng và tránh sự tấn công trong kĩ thuật SQL Injection. Tuy nhiên hacker vẫn có thể lợi dụng những Stored Procedure để tấn công vào hệ thống.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.
Tấn công dựa vào câu lệnh HAVING, GROUP BY, UNION
Lệnh SELECT được dùng để lấy thông tin từ cơ sở dữ liệu. Thông thường vị trí có thể được chèn thêm vào một mệnh đề SELECT là sau WHERE. Để có thể trả về nhiều dòng thông tin trong bảng, thay đổi điều kiện trong mệnh đề WHERE bằng cách chèn thêm UNION SELECT.
Ví dụ : StrSQL=“SELECT tkUsername FROM User WHERE tkUsername like ‘% “ & tName & “’UNION SELECT tkPassword from User”
Câu lệnh trên trả về một tập kết quả là sự kết hợp giữa tkUsername với tkPassword trong bảng User.
Chú ý: Số cột trong hai câu SELECT phải khớp với nhau. Nghĩa là số lượng cột trong câu lệnh SELECT ban đầu và câu lệnh UNION SELECT phía sau bằng nhau và cùng kiểu.Nhờ vào lỗi cú pháp trả về sau khi chèn thêm câu lệnh UNION mà có thể biết kiểu của mỗi trường.
Sau đây là ví dụ qúa trình tấn công của tin tặc để khai thác nội dung cơ sở dữ liệu dựa vào HAVING, GROUP BY, UNION:
Câu truy vấn cần để đăng nhập :
SQL Query=“SELECT tkUsername,tkPassword FROM User WHERE tkUsername= ‘” & strUsername & “’ AND Password= ‘” & tkPassword & “’”
Đầu tiên, để biết tên bảng và tên trường mà câu truy vấn sử dụng, sử dụng câu điều kiện “having” , như ví dụ sau:
Giá trị nhập vào:
Username: ’having 1=1—
Lỗi phát sinh:
[Microsoft][ODBC SQL Server Driver][SQL Server]Column 'User.tkUsername' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
Nhờ vào lỗi phát sinh này mà biết được bảng sử dụng trong câu truy vấn là User
và trong bảng tồn tại một trường tên là tkUsername.
Sau đó sử dụng
Các file đính kèm theo tài liệu này:
- tai_lieu_tim_hieu_honeypot_va_honeynet.doc