SQL Injection (SQLI) là gì?

Một phần của tài liệu bảo mật hệ thống call center (Trang 81 - 177)

2

3.3.1 SQL Injection (SQLI) là gì?

SQL injection là một kĩ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng trong việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu để “tiêm vào” (inject) 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 vì nó cho phép những kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà

ứng dụng đó đang chạỵ 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, Sysbasẹ

CHƯƠNG 3: CÁC NGUY CƠ TẤN CÔNG HỆ THỐNG CALL CENTER 3.3.2 Các dạng tấn công bằng SQL Injection

Có bốn dạng thông thường bao gồm:

 Vượt qua kiểm tra lúc đăng nhập (authorization bypass)

 Sử dụng câu lệnh SELECT

 Sử dụng câu lệnh INSERT

 Sử dụng các stored-procedures.

3.3.2.1 Dạng tấn công vượt qua kiểm tra đăng nhập

Có thể 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ẩụ 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

<form action="ExecLogin.asp" method="post">

Username: <input type="text" name="fUSRNAME"><br>

Password: <input type="password" name="fPASSWORD"><br> <input type="submit">

</form>

execlogin.asp

<%

var vUsrName, vPassword;

var Conn = Server.CreateObject("ADODB.Connection");

Conn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + Server.MapPath("databasẹmdb");

Conn.Open(); var objRS, strSQL;

vUsrName = "" + Request.Form("fUSRNAME"); vPassword = "" +Request.Form("fPASSWORD");

strSQL = "SELECT * FROM T_USERS WHERE USR_NAME='" + vUsrName + and USR_PASSWORD='" + vPassword + "'";

objRS = Server.CreateObject("ADODB.Recordset"); objRS = Conn.Execute(strSQL);

CHƯƠNG 3: CÁC NGUY CƠ TẤN CÔNG HỆ THỐNG CALL CENTER

ResponsẹWrite("Invalid login."); else

ResponsẹWrite("You are logged in as " + objRS("USR_NAME")); Conn.Close();

%>

Đ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àọ 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 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ệ.

3.3.2.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.

- 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àỵ

Ví dụ:

http://www.myhost.com/shownews.asp?ID=123. Mã nguồn cho chức năng này thường

được viết khá đơn giản theo dạng <%

var vNewsID, objRS, strSQL; vNewsID = Request("ID");

strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" + vNewsID; objRS = Server.CreateObject("ADODB.Recordset");

objRS = Conn.Execute(strSQL); Conn.Close();

%>

- 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ỗị Tuy nhiên, giống như

CHƯƠNG 3: CÁC NGUY CƠ TẤN CÔNG HỆ THỐNG CALL CENTER

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ụ:

0 OR 1=1 ( nghĩa là, http://www.myhost.com/shownews.asp?ID=0 or 1=1 )\

-Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽ thực hiện câu lệnh:

-SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1

-- Một trường hợp khác, ví dụnhư trang tìm kiếm. Trang này cho phép người dùng nhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường gặp là:

<%

var vAuthorName, objRS, strSQL;

vAuthorName = Request("fAUTHOR_NAME");

strSQL = "SELECT * FROM T_AUTHORS WHERE AUTHOR_NAME =' " + vAuthorName + " ' "; objRS = Server.CreateObject("ADODB.Recordset"); objRS = Conn.Execute(strSQL); ... Conn.Close(); %>

- 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ữạ

 Tất nhiên các ví dụ trên, dường như không có gì nguy hiểm, nhưng hãy thử trường hợp 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 TABLẸ Ví dụ: ‘ DROP TABLE T_AUTHORS ’

 Làm sao biết được ứng dụng web bị lỗi dạng này được? 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.

 Cũng sẽ có thắc mắc là làm thế nào có thể biết được tên của các bảng dữ liệu mà thực hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection. Cũng rất đơn giản, bởi vì trong SQL Server, có hai đối tượng là sysobjects 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.

CHƯƠNG 3: CÁC NGUY CƠ TẤN CÔNG HỆ THỐNG CALL CENTER

Ví dụ:

‘ UNION SELECT name FROM sysobjects WHERE xtype = ‘U’ là có thể liệt

kê được tên tất cả các bảng dữ liệụ

3.3.2.3 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 giạ 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àọ

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 + " ') "; objRS = Server.CreateObject("ADODB.Recordset"); objRS == Conn.Execute(strSQL); ... Conn.Close(); %>

- Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì nếu ta nhập vào trường thứ nhất như

sau:

‘ + (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ư đã yêu cầu thực hiện thêm một lệnh nữa đó là:

SELECT TOP 1 FieldName FROM TableName 3.3.2.4 Dạng tấn công sử dụng stored-procedures

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ã thê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.exẹ

CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG

CHƯƠNG 4: CÁC GII PHÁP BO MT H THNG CALL CENTER

Có rất nhiều giải pháp và ý tưởng được đưa ra nhằm đối phó với các cuộc tấn

công kiểu ĐoS. Tuy nhiên không có giải pháp và ý tưởng nào là giải quyết trọn

vẹn bài toán Anti-ĐoS. Các hình thái khác nhau của ĐoS liên tục xuất hiện theo

thời gian song song với các giải pháp đối phó, tuy nhiên cuộc đua vẫn tuân theo quy

luật tất yếu của bảo mật máy tính: “Attacker luôn đi trước giới bảo mật một bước”. 4.1 Các giai đoạn chính và giải pháp chi tiết cho từng giai đoạn trong Anti -

ĐoS

4.1.1 Các giai đoạn chính trong quá trình Anti - ĐoS

Có 3 giai đoạn chính trong quá trình Anti-ĐoS:

 Giai đoạn ngăn ngừa: tối thiểu hóa lượng Agent, tìm và vô hiệu hóa các

Handler.

 Giai đoạn đối đầu với cuộc tấn công: Phát hiện và ngăn chặn cuộc tấn công,

làm suy giảm và dừng cuộc tấn công, chuyển hướng cuộc tấn công.

 Giai đoạn sau khi cuộc tấn công xảy ra: thu thập chứng cứ và rút kinh nghiệm.

Các giai đoạn chi tiết trong phòng chống ĐoS:

CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG 4.1.2 Giải pháp chi tiết cho từng giai đoạn Anti - ĐoS

4.1.2.1 Giai đoạn ngăn ngừa

Tối thiểu hóa số lượng Agent

Từ phía User: một phương pháp rất tốt để năng ngừa tấn công ĐoS là từng internet user sẽ tự đề phòng không để bị lợi dụng tấn công hệ thống khác.

Muốn đạt được điều này thì ý thức và kỹ thuật phòng chống phải được phổ biến

rộng rãi cho các internet user. Attack-Network sẽ không bao giờ hình thành nếu

không có user nào bị lợi dụng trở thành Agent. Các user phải liên tục thực hiện các

quá trình bảo mật trên máy vi tính của mình. Họ phải tự kiểm tra sự hiện diện của

Agent trên máy của mình, điều này là rất khó khăn đối với user thông thường. Một số giải pháp tích hợp sẵn khả năng ngăn ngừa việc cài đặt code nguy

hiểm thông vào hardware và software của từng hệ thống. Về phía user họ nên cài

đặt và update liên tục các software như antivirus, anti_trojan và server patch của hệ điều hành.

Từ phía Network Service Provider: Thay đổi cách tính tiền dịch vụ truy cập theo dung lượng sẽ làm cho user lưu ý đến những gì họ gửi, như vậy về mặt ý thức tăng cường phát hiện ĐoS Agent sẽ tự nâng cao ở mỗi User.

Tìm và vô hiệu hóa các Handler

Một nhân tố vô cùng quan trọng trong attack-network là Handler, nếu có thể

phát hiện và vô hiệu hóa Handler thì khả năng Anti-ĐoS thành công là rất caọ

Bằng cách theo dõi các giao tiếp giữa Handler và Client hay handler va Agent ta có thể phát hiện ra vị trí của Handler. Do một Handler quản lý nhiều, nên triệt tiêu

được một Handler cũng có nghĩa là loại bỏ một lượng đáng kể các Agent trong

Attack – Network.

4.1.2.2 Giai đoạn đối đầu với cuộc tấn công

Phát hiện dấu hiệu của một cuộc tấn công

Có nhiều kỹ thuật được áp dụng:

Agress Filtering

Kỹ thuật này kiểm tra xem một packet có đủ tiêu chuẩn ra khỏi một subnet

hay không dựa trên cơ sở gateway của một subnet luôn biết được địa chỉ IP của các

máy thuộc subnet. Các packet từ bên trong subnet gửi ra ngoài với địa chỉ nguồn

không hợp lệ sẽ bị giữ lại để điều tra nguyên nhân. Nếu kỹ thuật này được áp dụng

trên tất cả các subnet của internet thì khái nhiệm giả mạo địa chỉ IP sẽ không còn tồn tạị

MIB statistics

Ttrong Management Information Base (SNMP) của route luôn có thông tin

thống kể về sự biến thiên trạng thái của mạng. Nếu ta giám sát chặt chẽ các thống

kê của protocol mạng. Nếu ta giám sát chặt chẽ các thống kê của Protocol ICMP, UDP và TCP ta sẽ có khả năng phát hiện được thời điểm bắt đầu của cuộc tấn công để tạo “quỹ thời gian vàng” cho việc xử lý tình huống.

CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG

Làm suy giàm hay dừng cuộc tấn công

Dùng các kỹ thuật sau:

Load balancing

Thiết lập kiến trúc cân bằng tải cho các server trọng điểm sẽ làm gia tăng

thời gian chống chọi của hệ thống với cuộc tấn công ĐoS. Tuy nhiên, điều này không có ý nghĩa lắm về mặt thực tiễn vì quy mô của cuộc tấn công là không có giới hạn.

Throttling

Thiết lập cơ chế điều tiết trên router, quy định một khoảng tải hợp lý mà server bên trong có thể xử lý được. Phương pháp này cũng có thể được dùng để ngăn chặn khả năng ĐoS traffic không cho user truy cập dịch vụ. Hạn chế của kỹ

thuật này là không phân biệt được giữa các loại traffic, đôi khi làm dịch vụ bị gián đoạn với user, ĐoS traffic vẫn có thể xâm nhập vào mạng dịch vụ nhưng với số lượng hữu hạn.

Drop request

Thiết lập cơ chế drop request nếu nó vi phạm một số quy định như: thời gian

delay kéo dài, tốn nhiều tài nguyên để xử lý, gây deadlock. Kỹ thuật này triệt tiêu khả năng làm cạn kiệt năng lực hệ thống, tuy nhiên nó cũng giới hạn một số hoạt động thông thường của hệ thống, cần cân nhắc khi sử dụng.

Chuyển hướng của cuộc tấn công

Honeyspots: Một kỹ thuật đang được nghiên cứu là Honeyspots. Honeyspots là một hệ thống được thiết kế nhằm đánh lừa attacker tấn công vào khi xâm nhập hệ

thống mà không chú ý đến hệ thống quan trọng thực sự.

Honeyspots rất hiệu quả trong việc phát hiện và xử lý xâm nhập, vì trên

Honeyspots đã thiết lập sẵn các cơ chế giám sát và báo động.

Ngoài ra Honeyspots còn có giá trị trong việc học hỏi và rút kinh nghiệm từ

Attacker, do Honeyspots ghi nhận khá chi tiết mọi động thái của attacker trên hệ

thống. Nếu attacker bị đánh lừa và cài đặt Agent hay Handler lên Honeyspots thì khả năng bị triệt tiêu toàn bộ attack-network là rất caọ

4.1.2.3 Giai đoạn sau tấn công

Trong giai đoạn này thông thường thực hiện các công việc sau:

Traffic Pattern Analysis

Nếu dữ liệu về thống kê biến thiên lượng traffic theo thời gian đã được lưu

lại thì sẽ được đưa ra phân tích. Quá trình phân tích này rất có ích cho việc tinh

chỉnh lại các hệ thống Load Balancing và Throttling. Ngoài ra các dữ liệu này còn giúp Quản trị mạng điều chỉnh lại các quy tắc kiểm soát traffic ra vào mạng của

mình.

Packet Traceback

Bằng cách dùng kỹ thuật Traceback ta có thể truy ngược lại vị trí của

Attacker (ít nhất là subnet của attacker). Từ kỹ thuật Traceback ta phát triển thêm khả năng Block Traceback từ attacker khá hữu hiệụ gần đây đã có một kỹ thuật

CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG

Traceback khá hiệu quả có thể truy tìm nguồn gốc của cuộc tấn công dưới 15 phút, đó là kỹ thuật XXX.

Bevent Logs

Bằng cách phân tích file log sau cuộc tấn công, quản trị mạng có thể tìm ra nhiều manh mối và chứng cứ quan trọng.

4.2 Sử dụng Load Balancing 4.2.1 Giới thiệu chung 4.2.1 Giới thiệu chung

Một số đơn vị, chẳng hạn như các công ty hàng không hoặc các ngân hàng lớn, mạng máy tính có thể ví như hệ thần kinh điều khiển hoạt động của toàn doanh nghiệp. Sự ngừng hoạt động của mạng máy tính trong những cơ quan này có thể

làm tê liệt các hoạt động chính của đơn vị, và thiệt hại khó có thể lường trước được.

Một phần của tài liệu bảo mật hệ thống call center (Trang 81 - 177)

Tải bản đầy đủ (PDF)

(177 trang)