Phương thức giám sát, phát hiện xâm nhập trái phép 55 3.3.

Một phần của tài liệu Nghiên cứu giải pháp hệ thống phát hiện xâm nhập đảm bảo an toàn thông tin (Trang 116)

3. Thiết kế xây dựng mô hình hệ thống giám sát

3.2.Phương thức giám sát, phát hiện xâm nhập trái phép 55 3.3.

Hệ thống giám sát bao gồm các thành phần chủ yếu như sau: + Bộ phát hiện (Sensor):

Là bộ phận làm nhiệm vụ phát hiện các sự kiện có khả năng đe dọa an ninh của hệ thống mạng, Sensor có chức năng rà quét nội dung của các gói tin trên mạng, so sánh nội dung với các mẫu và phát hiện ra các dấu hiệu tấn công.

+ Bộ thiết lập cấu hình và điều khiển sensor:

Là bộ phận làm nhiệm vụ giám sát các sự kiện, các cảnh báo được phát hiện và sinh ra từ các Sensor và điều khiển hoạt động của các bộ Sensor.

+ Bộ xử lý (Webanalyzer):

Có nhiệm vụ ghi lại tất cả các báo cáo về các sự kiện được phát hiện bởi các Sensor trong một cơ sở dữ liệu và sử dụng một hệ thống các luật để đưa ra các cảnh báo trên các sự kiện an ninh nhận được cho hệ thống hoặc cho người quảntrị.

Như vậy, hệ thống hoạt động theo cơ chế "phát hiện và cảnh báo". Các Sensor là bộ phận được bộ trí trên hệ thống tại những điểm cần kiểm soát, Sensor bắt các gói tin trên mạng, phân tích gói tin để tìm các dấu hiệu tấn công, nếu gói tin có dấu hiệu tấn

công, Sensor lập tức đánh dấu đấy là một sự kiện và gửi báo cáo kết quả về cho bộ xử lý. Bộ xử lý ghi nhận tất cả các báo cáo của tất cả các Sensor, lưu các báo cáo vào trong cơ sở dữ liệu của mình và quyết định đưa ra mức cảnh báo đối với sự kiện nhận được. Bộ thiết lập cấu hình và điều khiển giám sát làm nhiệm vụ giám sát các sự kiện và cảnh báo đồng thời điều khiển hoạt động của các Sensor.

Hệ thống giám sát bao gồm thành phần (server) cài đặt trên máy chủ Webserver, và thành phần (Client) đặt tại chính máy chủ đó hoặc một máy trạm, nó xác định các truy nhập trái phép vào hệ thống bằng cách phân tích các trao đổi của hệ thống, các bản ghi của các ứng dụng, sự sửa đổi các tệp tin trên hệ thống (Các file dạng binary, mật khẩu của file, dung lượng và các danh dách truy acl của các cơ sở dữ liệu) các hoạt động và trạng thái khác của hệ thống để từ đó phát hiện ra các dấu hiệu truy nhập trái phép vào hệ thống. Khi phát hiện ra các truy nhập trái phép, server lập tức sinh ra một sự kiện và gửi báo cáo về bộ xử lý. Bộ xử lý tiến hành lưu các báo cáo của server vào cơ sở dữ liệu và tiến hành phân tích thông tin để đưa ra các cảnh báo cho người quản trị hoặc hệ thống.

Khi gắn kèm với một thiết bị tường lửa, có thể coi đây là một hệ thống chủ động, có khả năng phát hiện và ngăn ngừa các truy nhập trái phép, có khả năng ngăn chặn các cuộc tấn công, các nguy cơ tiềm ẩn trong nội dung của gói tin. Vì vậy hình thành lên một thế hệ Firewall mới có khả năng hoạt động ở lớp ứng dụng hay còn gọi là Application Layer Firewall.

Sensor:

Trong hệ thống, các Sensor là một phần mềm trên máy trạm (Software agent), nó giám sát tất cả các hoạt động của máy trạm mà nó nằm trên đó.

Các Sensor hoạt động theo cơ chế "so sánh với mẫu", các Sensor bắt các gói tin trên mạng, đọc nội dung gói tin và so sánh các xâu trong nội dung gói tin với hệ thống các mẫu tín hiệu nhận biết các cuộc tấn công hoặc mã độc gây hại cho hệ thống, nếu trong nội dung gói tin có một xâu trùng với mẫu, Sensor đánh dấu đó là một sự kiện hay đã có dấu hiệu tấn công và sinh ra cảnh báo. Các tín hiệu nhận biết các cuộc tấn công được tổng kết và tập hợp thành một bộ gọi là mẫu hay signatures. Thông thường các mẫu này được hình thành dựa trên kinh nghiệm phòng chống các cuộc tấn công.

Phân tích logfile:

Nhiệm vụ chủ yếu là phân tích các dữ liệu thô lấy được từ logfile, cung cấp cho hệ thống phát hiện xâm nhập.

Quá trình phân tích dữ liệu được tiến hành thông qua việc tách lọc và so sánh thông tin. Vấn đề quan trọng đặt ra cho hệ thống này đó là tốc độ xử lý gói dữ liệu, nếu tốc độ xử lý chậm sẽ làm cho hiệu năng phân tích.

Phân tích xử lý dữ liệu và phát hiện xâm nhập:

Hệ thống dùng các luật (Rules) để đọc và phát hiện ra các xâm nhập trên mạng. Ví dụ một Rule sau:

alert tcp !172.16.1.0/24 any -> any any (flags: SF; msg: "SYN-FIN Scan";) Một rule gồm 2 thành phần chính: Header và Option.

Header: alert tcp !172.16.1.0/24 any -> any any Option: (flags: SF; msg: "SYN-FIN Scan";)

Mỗi dấu hiệu xâm nhập sẽ được thể hiện bằng một rule. Bộ phân tích xử lý dữ liệu dùng cấu trúc dữ liệu để quản lý các rules.

Lưu trữ và cảnh báo:

Dùng để thông báo cho các nhà quản trị mạng và ghi lại các hành động xâm nhập hệ thống. Có thể có các dạng logging và kiểu cảnh báo như sau.

+ Các dạng Logging:

- Dạng Decoder: Đây là dạng log thô nhất, cho phép thực hiện nhanh và thích hợp với các chuyên gia.

- Dạng nhị phân tcpdump: Theo dạng tương tự như tcpdump và ghi vào đĩa nhanh chóng, thích hợp với những đòi hỏi hiệu suất cao.

- Dạng cây thư mục IP: Sắp xếp hệ thống log theo cấi trúc cây thư mục IP, dễ hiểu đối với người dùng.

+ Các dạng Alerting: - Ghi alert vào syslog. - Ghi alert vào file text.

- Gửi thông điệp Winpopup dùng chương trình smbclient. - Full alert: Ghi lại thông điệp cùng với nội dung gói dữ liệu. - Fast alert: Chỉ ghi nhận lại header của gói dữ liệu.

3.3. Mô hình tổng thể của hệ thống 3.3.1. Kiến trúc hệ thống

Hệ thống có tên gọi là LIDS - Log Intrusion Detections System. Mô hình tổng thể chung được thể hiện như hình dưới đây. LIDS được cài đặt trên chính webserver cần giám sát. (adsbygoogle = window.adsbygoogle || []).push({});

Chức năng chính của Firewall là kiểm soát luồng thông tin từ giữa Intranet và Internet, thiết lập cơ chế điều khiển dòng thông tin giữa mạng Internet và Intranet. Cụ

thể là:

- Cho phép hoặc cấm những dịch vụ truy nhập ra ngoài (từ Intranet ra ngoài Internet). - Cho phép hoặc cấm những dịch vụ trái phép truy nhập vào bên trong (từ Internet vào Intranet).

- Theo dõi luồng dữ liệu mạng giữa Internet và Intranet. - Kiểm soát truy nhập, cấm địa chỉ truy nhập.

- Kiểm soát người dùng và việc truy nhập của người sử dụng. Kiểm soát nội dung thông tin lưu chuyển trên mạng.

LIDS

Hình 31. Mô hình client/server của hệ thống

Chặn/cho phép IP truy cập

Firewall

Thiết lập các luật cho firewall IP Controller

Syslog

IP xâm nhập trái phép

Config LIDS

Sensor

Cảnh báo Alert Parselog Pattern

LIDS Interface Logfiles đã được xử lý

Logfiles Weblog Analyzer

Đặt cấu hình

User

Hình 32. Mô hình hoạt động của hệ thống LIDS 3.3.2. Chức năng của từng khối

Hệ thống giám sát gồm 4 khối xử lý chính:

- Khối Sensor:

Khối này sẽ lấy các logfiles từ syslog của hệ thống.

Khối sensor sẽ trực tiếp lấy logfile từ hệ thống webserver. Lưu trữ và chuyển qua khối Weblog analyzer xử lý. Đây là thành phần khá quan trọng trong hệ thống. Tất nhiên, việc các logfiles nào được lấy để giám sát sẽ được cài đặt trong syslogs của hệ thống webserver.

- Khối xử lý logfiles (Weblog analyzer):

Weblog analyzer sẽ lấy logfiles từ Sensor và phân tích các logfiles theo một chuẩn chung . Bao gồm các thành phần sau:

Timestamp: Giờ hệ thống của thiết bị khi ghi nhận log (trường hợp log 1 đăng nhập từ xa) hoặc của thiết bị tạo log (trong trường hợp tự tạo log).

Hostname: có thể là một tên domain name chất lượng (FQDN) hoặc dns.

Message source: Nguồn có thể là một phần mềm hệ thống (sshd hoặc là named, ) hoặc là 1 bộ phận (ví vụ như PAM_unix) mà sản sinh ra thông báo log.

Log message: Thông báo log có thể có nhiều định dạng khác nhau, thông thường bao gồm tên ứng dụng, các biến tình trạng đa dạng, địa chỉ IP nguồn, giao thức Thỉnh thoảng định danh tiến trình của một tiến trình có thể tạo ra những bản ghi log và được ghi vào các chỗ trống. (adsbygoogle = window.adsbygoogle || []).push({});

- Khối ConfigLIDS:

Đây là khối có nhiệm vụ quan trọng nhất trong chương trình. Khối này gồm ba module chính.

+ Module PaserLog: Module này sẽ đọc các logfiles đưa vào và sẽ phân tích các logfile này, sau đó sẽ đối chiếu với các mẫu (patterns) có sẵn trong module Config.

+ Module Config: Module này sẽ chứa các mẫu - tập luật (Rules): AntiDDOS,

Webattach, Spam mail, Backdoor. Module này sẽ phát hiện các truy cấp có dấu hiệu vi phạm và sẽ được chuyển vào Module Alert.

+ Module Alert sẽ thông báo các truy cập vi phạm tới khối IPController, lưu trữ các logfile dưới dạng text file, và gửi email cảnh báo tới nhà quản trị.

- Khối IPController:

Khối này sẽ kết nối trực tiếp đến Firewall nhằm xử lý các xâm nhập bất hợp pháp. Các truy cập có IP xâm nhập bất hợp pháp này sẽ bị chặn (DROP) trong thời gian nhất định nào đấy. Trong firewall sẽ chứa các tập luật nhằm xử lý các IP có dấu hiệu xâm nhập bất hợp pháp.

3.3.3. Các cách thức hoat động của từng khối

Khối Sensor: Khối này hoạt động theo nguyên tắc đọc những dòng mới nhất được thêm vào trong hệ thống các log file của webserver theo thời gian thực để làm đầu vào cho khối Weblog analyzer phân tích.

Khối Weblog analyzer sẽ dựa vào bộ phân tích log (parser log) của hệ thống, qua đó xác định các thành phần sẽ được đưa vào cho qua trình phân tích và đưa ra cảnh báo.

Sau khi nhận được logfiles từ khối Weblog analyzer, khối ConfigLIDS sẽ dựa vào Module Perl được cài đặt trên hệ thống webserver để phân tích các thành phần của các URI trong các logfile để so sánh với các mẫu. Nguyên tắc chung của phép so sánh này là sử dụng các Regular Expressions (Regex). Các mẫu được viết dưới dạng các Regular Expressions mà Module Perl của hệ thống có thể hiểu và phân tích được.

Ví dụ:

Đoạn Regex sau sẽ phát hiện kiểu attack sql ịnection truyền thống như sử dụng các chuỗi 1'or'1'='1:

/((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3B)|(;))/i Phát hiện một kiểu tấn công CSS <img src=>: /((\%3C)|<)((\%2F)|\/)*[a-z0-9\%]+((\%3E)|>)/ix Các URI có chứa các key có thể lợi dụng để tấn công: Ví dụ như Union:

/((\%27)|(\'))union/ix

Sau khi phát hiện các xâm nhập bất hợp pháp, Module Alert sẽ đưa ra cảnh báo bằng phương thức gửi email và lưu lại theo định dạng như một logfile.

Ví dụ:

Dec 22 13:50:53 myhost sshd[3604]: Did not receive identification string from 1 .2 .3 .4

Dec 22 15:03:31 myhost sshd[4017]: User root from 1.2.3.4 not allowed because not listed in AllowUsers

Dec 22 15:03:31 myhost sshd[4018]: input_userauth_request: invalid user root Dec 22 15:03:31 myhost sshd[4018]: Failed password for invalid user root from 1.2.3.4 port 60651 ssh2

Dec 22 15:03:32 myhost sshd[4018]: Received disconnect from 1.2.3.4: 11: Bye Bye

Dec 22 15:03:37 myhost sshd[4019]: User root from 1.2.3.4 not allowed because not listed in AllowUsers

Dec 22 15:03:37 myhost sshd[4020]: input_userauth_request: invalid user root Dec 22 15:03:37 myhost sshd[4020]: Failed password for invalid user root from 1.2.3.4 port 60703 ssh2

Dec 22 15:03:38 myhost sshd[4020]: Received disconnect from 1.2.3.4: 11: Bye Bye Dec 22 15:03:48 myhost sshd[4023]: Connection closed by 1.2.3.4 Dec 22 15:03:44 myhost sshd[5437]: Connection closed by 1.2.3.4 Dec 22

15:05:49 myhost sshd[5513]: Connection closed by 1.2.3.4

Khối IPController sẽ trực tiếp xử lý các xâm nhập bất hợp pháp, cho các IP có các xâm nhập vào danh sách chặn (list banned) không được phép tiếp tục truy cập. Xác định xâm nhập có IP này sẽ bị block trong bao lâu sẽ do người quản trị xác định trước. 3.4. Nguyên lý giám sát phát hiện xâm nhập

Có rất nhiều cách webattack, tuy nhiên có một số cách cơ bản và thông dụng như dưới đây.

+ Sql Injection Attack:

- Vượt qua các form đăng nhập (adsbygoogle = window.adsbygoogle || []).push({});

Ví dụ: Giả sử ứng dụng web có đoạn mã sau:

SQLQuery= "SELECT tkUsername FROM User WHERE tkUsername= '" & strUsername & "' AND Password= '" & tkPassword & "'"

flag= GetQueryResult (SQLQuery) if flag = "" then

check=FALSE else

check=TRUE end if

Đoạn mã trên kiểm tra chuỗi nhập Username và Password. Nếu tồn tại trong bảng User thì check=true ngược lại check=false.

Giá tri nhập vào là:

Username: ' OR ''=' Password: ' OR ''='

Câu lệnh SQL lúc này như sau:

SELECT tkUsername FROM User WHERE tkUsername= '' OR ''='' AND 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.

Kết hợp với 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 Username: '; drop table User--

Password:

Câu lệnh SQL lúc này như sau:

SELECT tkUsername FROM User WHERE tkUsername= '';drop table User-- AND Password= '" & tkPassword & "'"

Với câu lệnh trên thì bảng User sẽ bị xóa hoàn toàn. Username: admin'--

Password:

Câu lệnh SQL như sau:

SELECT tkUsername FROM User WHERE tkUsername= 'admin'—AND Password= '" & tkPassword & "'"

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.

- Tấn công dưa vào câu lệnh SELECT

Ngoài kĩ thuật đơn giản trên, việc tấn công thường dựa trên những thông báo lỗi để lấy thông tin về bảng cũng như những trường trong bảng. Để làm được điều này, cần phải hiểu những thông báo lỗi và từ đó chỉnh sửa nội dung nhập cho phù hợp.

Khái niệm Direct Injection:

Những đối số được thêm vào trong câu lệnh mà không nằm giữa những dấu nhấy đơn hay dấu ngoặc kép là trường hợp direct injection.

Ví dụ

StrSQL="SELECT tkUsername FROM User WHERE tkUsername="& tName Khái niệm Quote Injection:

Những trường hợp đối số được nhập vào đều được ứng dụng cho vào giữa hai dấu nháy đơn hay ngoặc kép là trường hợp Quote Injection.

StrSQL="SELECT tkUsername FROM User WHERE tkUsername='"& tName &"'" (adsbygoogle = window.adsbygoogle || []).push({});

Để vô hiệu hoá dấu nháy và thay đổi câu lệnh mà vẫn giữ được cú pháp đúng, chuỗi mã chèn thêm vào phải có một dấu nháy đơn trước chuỗi kí tự được chèn vào và

ở cuối câu lệnh phải có một dấu nháy đơn, chẳng hạn như sau:

StrSQL="SELECT tkUsername FROM User WHERE tkUsername='' and''=''" Nếu đã thực hiện như trên mà thông báo lỗi có liên quan đến dấu "(" thì trong chuỗi chèn vào phải có ")":

Ví dụ: Giả sử:

StrSQL="SELECT tkUsername FROM User WHERE (tkUsername='"& tName& " ' ")

Thì cú pháp hợp lệ như sau:

StrSQL="SELECT tkUsername FROM User WHERE (tkUsername='')or''=''" Ngoài ra kí tự % thường được dùng trong những trường hợp tìm kiếm thông tin.

StrSQL="SELECT tkUsername FROM User WHERE tkUsername like '% " &tName & "'"Khoa CNTT

- Tấn công dựa vào câu lệnh HAVING

HAVING sử dụng cùng chung với mệnh đề GROUP BY là phương pháp hữu hiệu để nhận thông tin bảng, trường và sẽ được bàn sâu hơn trong phần 4.

- Tấn công dựa vào câu lệnh kết hợp 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.

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.

Ghi 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à những ví dụ được thực hiện khi không biết nội dung cơ sở dữ liệu dựa vào HAVING, GROUP BY, UNION:

Ví dụ: Nhắc lại câu truy vấn cần để đăng nhập:

SQLQuery="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

Một phần của tài liệu Nghiên cứu giải pháp hệ thống phát hiện xâm nhập đảm bảo an toàn thông tin (Trang 116)