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