Tải bản đầy đủ (.pdf) (21 trang)

Bài giảng An ninh mạng: Bài 6 - Bùi Trọng Tùng

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 (578.99 KB, 21 trang )

BÀI 6.

AN TỒN DỊCH VỤ WEB
SQL INJECTION
Bùi Trọng Tùng,
Viện Cơng nghệ thông tin và Truyền thông,
Đại học Bách khoa Hà Nội

1

Nội dung
• Tổng quan về hoạt động của dịch vụ Web
• Tấn cơng dạng Command Injection
• SQL Injection
• XSS
• CSRF
• Quản lý phiên

2

CuuDuongThanCong.com

/>
1


1. TỔNG QUAN VỀ DỊCH VỤ WEB
Bùi Trọng Tùng,
Viện Công nghệ thông tin và Truyền thông,
Đại học Bách khoa Hà Nội


3

World Wide Web
• Ra đời năm 1990
• Hệ thống các siêu văn bản trình bày bằng ngơn ngữ






HTML được liên kết với nhau
Cho phép truy cập đến nhiều dạng tài ngun thơng tin
khác nhau (văn bản, hình ảnh, âm thanh, video...) qua
URL (Uniform Resource Location) và URI (Uniform
Resource Identifier)
Đang được điều hành bởi W3C
Các công nghệ liên quan: CSS, XML, JavaScrips, Adobe
Flash, Silverlight...
Hiện tại đã trở thành nền tảng (Web-based service)

4

CuuDuongThanCong.com

/>
2


Giao thức HTTP

• Sử dụng TCP, cổng 80

Web clients

• Trao đổi thông điệp HTTP

(giao thức ứng dụng)
HTTP Request

IE

Web

HTTP Response

server

Firefox

Navigator

5

Thông điệp HTTP Request
• Mã ASCII (dễ dàng đọc được dưới dạng văn bản)

request line
(GET, POST,
HEAD commands)


GET /dccn/index.html HTTP/1.1
Host: www.it-hut.edu.vn
User-agent: Mozilla/4.0
header Connection: close
lines Accept-language:en-us

CR, LF

(extra carriage return, line feed)

indicates end
of message

6

CuuDuongThanCong.com

/>
3


Thông điệp HTTP Response
status line
(protocol
status code
status phrase)
header
lines

data, e.g.,

requested
HTML file

HTTP/1.1 200 OK
Connection close
Date: Tue, 16 Mar 2008 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 15 Mar 2008 …...
Content-Length: 8990
Content-Type: text/html
data data data data data ...

7

Tương tác với web server
• Địa chỉ URL

/>Giao thức

Tên miền(sẽ được phân
giải thành địa chỉ IP)
Đường dẫn tới tài nguyên (nội
dung tĩnh, thường là file HTML)

8

CuuDuongThanCong.com

/>
4



Tương tác với web server (tiếp)
• Tương tác với các kịch bản được thực thi trên server

(servlet)
/>Đường dẫn tới servlet, cho phép
server sinh nội dung trang web tùy
thuộc các tham số:
CGI: Common Gateway Interface
PHP, JSP, ASP: ngôn ngữ kịch bản
(scrips)

Các tham số cho quá
trình sinh nội dung

9

Kiến trúc chung của các dịch vụ web
subdomain.mysite.com/folder/page?id=5
HTML Page, JS file, CSS file, image, etc.

run code
Database Queries

Người dùng có thể
tương tác với các tài
nguyên khác thông
qua dịch vụ web
10


CuuDuongThanCong.com

/>
5


Các nguy cơ đối với dịch vụ web

• Tấn cơng server từ phía client
 Tấn cơng dạng Injection
 File System Traversal
 Broken Access Control

11

Các nguy cơ đối với dịch vụ web

• Tấn cơng từ phía server:
 Clickjacking
 HistoryProbing
 Phishing

12

CuuDuongThanCong.com

/>
6



Các nguy cơ đối với dịch vụ web

• Tấn cơng người dùng khác:
 XSS
 CSRF
 Remote Script Inclusion
13

Top 15 lỗ hổng(2015 White Hat Security)
80
70
60
50
40
30
20
10
0

70
56
47
29 26
24
16 15
11

8


6

6

6

5

14

CuuDuongThanCong.com

/>
7


2013 OWASP Top10 Project


Tên

Mô tả

A-1

Injection

Cho phép chèn dữ liệu ác tính vào câu lệnh hoặc
truy vấn


A-2

Authentication
and Session
Management

Đánh cắp mật khẩu, khóa, thẻ phiên, hoặc khai
thác lỗ hổng để giả mạo người dùng

A-3

XSS

Ứng dụng Web không kiểm tra mã thực thi nhúng
vào dữ liệu nhận được và gửi lại mã thực thi này
cho trình duyệt



Các lỗ hổng xuất
hiện trong quá
trình triển khai

Để lộ file, thư mục chứa thơng tin cấu hình quan
trọng, phân quyền truy cập khơng hợp lý…

A-8

CSRF


Trình duyệt của nạn nhân gửi thơng điệp HTTP
Request một cách ngồi ý muốn khi nạn nhân
đang ở trạng thái đăng nhập
15

2. TẤN CƠNG DẠNG COMMAND
INJECTION
Bùi Trọng Tùng,
Viện Cơng nghệ thơng tin và Truyền thông,
Đại học Bách khoa Hà Nội

16

CuuDuongThanCong.com

/>
8


Command Injection
• Lợi dụng lỗ hổng khơng kiểm sốt giá trị các đối số khi

thực thi kịch bản (servlet) trên web server
 Không phân biệt các ký hiệu điều khiển (ký hiệu phép toán, dấu ; “

‘...) trong giá trị của đối số và trong câu lệnh

• Ví dụ: Website chứa servlet cung cấp tính năng tính tốn

biểu thức bất kỳ qua hàm eval()


/>$in = $_GET[‘exp'];
Nội dung biểu thức được truyền eval('$ans = ' . $in . ';');
qua đối số exp. Ví dụ:

/>• Servlet thực thi như thế nào nếu truyền đối số như sau:
; system(‘rm *.*’)”
17

Command Injection – Ví dụ khác
1. />
Client

Server

2. Send page

Ping for FREE


Enter an IP address below:


<form name="ping" action="#" method="post">
<input type="text" name="ip" size="30">
<input type="submit" value="submit" name="submit”>
</form>

CuuDuongThanCong.com

Ô nhập dữ
liệu

/>

18

9


Command Injection – Ví dụ khác
Client
Send output

Ping for FREE



Server

$t = $_REQUEST[‘ip'];
$o = shell_exec(‘ping –C 3’ . $t);
echo $o

PHP exec program

Enter an IP address below:


<form name="ping" action="#" method="post">
<input type="text" name="ip" size="30">
<input type="submit" value="submit" name="submit”>
</form>

19

Command Injection – Ví dụ khác
Client
2. Send page


Server

$t = $_REQUEST[‘ip'];
$o = shell_exec(‘ping –C 3’ . $t);
echo $o

PHP exec program

20

CuuDuongThanCong.com

/>
10


Command Injection – Ví dụ khác
127.0.0.1;ls

Client
2. Send page

Server

$t = $_REQUEST[‘ip'];
$o = shell_exec(‘ping –C 3’ . $t);
echo $o

PHP exec program


21

Command Injection – Ví dụ khác
• Thực thi shell

ip=127.0.0.1+%26+netcat+-v+e+'/bin/bash'+-l+-p+31337&submit=submit

netcat –v –e ‘/bin/bash’ –l –p 31337

22

CuuDuongThanCong.com

/>
11


Command Injection – Ví dụ khác
• Mã PHP để gửi email:
$email = $_POST[“email”]
$subject = $_POST[“subject”]
system(“mail $email –s $subject < /tmp/joinmynetwork”)

• Chèn mã thực thi khi truyền giá trị cho đối số:
/>email= &
subject=foo < /usr/passwd; ls

• Hoặc
/>email=&subject=foo;

echo “evil::0:0:root:/:/bin/sh">>/etc/passwd; ls
23

Phịng chống
• Kiểm tra, chỉ chấp nhận giá trị chứa các ký tự hợp lệ
 Ký tự nào là hợp lệ?Phụ thuộc ngữ cảnh
• Sử dụng dấu ‘\’ đặt trước các ký tự đặc biệt
 Nếu kẻ tấn công chèn trước ký tự ‘\’ ?
• Bỏ qua các ký tự đặc biệt
 Nếu kẻ tấn cơng dùng mã ASCII?
Ln có cách vượt qua kiểm tra
• Cách tốt hơn: khơng sử dụng các hàm có q nhiều

quyền thực thi.
 Khơng hiệu quả với SQL Injection

24

CuuDuongThanCong.com

/>
12


SQL Injection
• Mục tiêu: các website sử dụng CSDL ở back-end
• Lỗ hổng SQL Injection: khơng kiểm sốt giá trị đối số

truyền cho các servlet khi thực hiện các truy vấn CSDL
 Web server không phân biệt được các ký tự là của câu truy vấn


hay của giá trị truyền cho đối số

• Mục đích: sửa đổi hoặc chèn truy vấn con vào các truy

vấn thông thường để đọc trái phép hoặc thay thế thơng
tin trên trang web
• Lỗ hổng phổ biến nhất trên các website

25

Kịch bản tấn công SQL Injection
Victim Server
1
2

Attacker

3 Trả lại dữ liệu nằm
ngoài dự kiến

Thực hiện
câu truy
vấn nằm
ngoài dự
kiến

Victim SQL DB
26


CuuDuongThanCong.com

/>
13


SQL Injection – Ví dụ
• Xem xét đoạn mã PHP sau:

$user = $_POST[‘recipient’];
$sql = "SELECT AcctNum FROM Customer WHERE
Balance < 100 AND Username='$recipient'";
$rs = $db->executeQuery($sql);
• Giả sử đối số được truyền như sau “?recipient=Bob” câu
truy vấn được web server chuyển cho DBMS để thực thi
như sau:
SELECT AcctNum FROM Customer WHERE Balance < 100
AND Username=‘Bob’
• Kết quả nào được trả về với truy vấn sau:
SELECT AcctNum FROM Customer WHERE True
27

Phân tích truy vấn trên cây cú pháp
SELECT / FROM / WHERE

AcctNum

Customer

AND


<

Balance

=

100

Username

'Bob'

Kết quả truy vấn: Số tài khoản của tất cả khách hàng có
số dư dưới 100$ và tên khách hàng là Bob
28

CuuDuongThanCong.com

/>
14


SQL Injection – Ví dụ (tiếp)
• Xem xét đoạn mã PHP sau:

$recipient = $_GET[‘recipient’];
$sql = "SELECT AcctNum FROM Customer WHERE
Balance < 100 AND Username='$recipient'";
$rs = $db->executeQuery($sql);

• Điều gì xảy ra nếu đối số được truyền giá trị làm thay đổi
ý nghĩa của câu truy vấn
 Ví dụ truyền vào một giá trị đặc biệt ‘recipient’ để đọc toàn bộ

danh sách khách hàng

29

SQL Injection – Ví dụ (tiếp)
• Truyền đối số như sau:

?recipient=anyone’ OR 1 = 1;#
• Câu truy vấn được thực thi:
SELECT AcctNum FROM Customer WHERE Balance < 100
AND Username=‘anyone’ OR 1 = 1;#’
Dấu # báo hiệu đoạn
chú thích bỏ qua

• Biểu thức điều kiện trở thành

WHERE Balance < 100 AND Username=‘anyone’ OR 1 = 1
luôn trả về giá trị TRUE

30

CuuDuongThanCong.com

/>
15



Cây cú pháp
SELECT / FROM / WHERE

AcctNum

Customer

OR

AND

<

Balance

100

=

=

Username

1

1

‘anyone’
31


Một số kỹ thuật khai thác SQLi
• Mệnh đề ORDER BY sắp xếp kết quả theo một cột nào

đó được liệt kê trong mệnh đề SELECT
• Sử dụng mệnh đề ORDER BY cho phép đoán số cột
được liệt kê trong truy vấn
 Nếu STT của cột ≤ số cột liệt kê trong truy vấn: thực hiện thành

công
 Ngược lại trả về thông báo lỗi

Thông báo lỗi có thể để lộ thơng tin về CSDL!!!

32

CuuDuongThanCong.com

/>
16


Một số kỹ thuật khai thác SQLi(tiếp)
• Mệnh đề UNION cho phép gộp kết quả của các truy vấn
• Yêu cầu: các mệnh đề SELECT phải có cùng số cột, cùng

kiểu dữ liệu (hoặc có thể chuyển đổi nếu kiểu dữ liệu
khác nhau)
• Dùng mệnh đề UNION cho phép:
 Xác định số cột trong mệnh đề SELECT

 Kiểm tra kiểu dữ liệu
 Thực hiện một truy vấn tới bảng khác: trích xuất dữ liệu, đốn tên

bảng, đốn tên cột

Thơng báo lỗi có thể để lộ thơng tin về CSDL!!!
33

Một số kỹ thuật khai thác SQLi(tiếp)
• Sử dụng Batched Query (cịn được gọi là query stack)
• Lợi dụng khả năng hỗ trợ thực thi nhiều câu truy vấn cùng

lúc của một số ngôn ngữ và hệ quản trị CSDL
Support

ASP

ASP.NET PHP

MySQL

No

Yes

No

PostgreSQL

Yes


Yes

Yes

MS SQL

Yes

Yes

Yes

Lưu ý: Ngay cả khi ngôn ngữ và hệ quản trị CSDL
khơng hỗ trợ, vẫn có thể khai thác bằng mệnh đề
UNION

CuuDuongThanCong.com

/>
34

17


Batched Query – Ví dụ
• Truyền đối số như sau:

?recipient=anyone’; DROP TABLE Customer -• Câu truy vấn được thực thi:
SELECT AcctNum FROM Customer WHERE Balance < 100

AND Username=‘anyone’; DROP TABLE Customer --’

Chèn câu lệnh SQL khác để
can thiệp sửa đổi CSDL
Thậm chí có thể chèn vào một đoạn mã thực thi
kịch bản hệ thống (shell code)
35

Blind SQL Injection
• Trong một số trường hợp, hệ thống không trả lại thông

báo lỗi khi thực thi câu lệnh SQL
• Để khai thác các lỗi dạng này, có thể sử dụng 2 kỹ thuật:
 Boolean based Blind SQLi: sử dụng các câu truy vấn trả về

True/False
 Time-based Blind SQLi: kiểm tra thời gian thực thi câu truy vấn

• Cần mất nhiều thời gian để khai thác lỗi Blind SQLi 

thường sử dụng các công cụ hỗ trợ (Ví dụ: sqlmap)

36

CuuDuongThanCong.com

/>
18



Blind SQL Injection
• Ví dụ 1: Boolean-based Blind SQLi

Để tìm thông tin phiên bản của CSDL, chèn lời gọi hàm
vào câu truy vấn:
and substring(version(),i,1)=c;#
Thay i là vị trí ký tự cần kiểm tra, c là giá trị cần so sánh
• Time-based Blind SQLi
 MySQL: sleep(), benchmark()
 MS SQL: waitfor delay

37

Phòng chống SQL Injection
• Thêm ký tự ‘\’ vào trước dấu nháy ‘...’ hoặc “...”
• PHP: addslashes( “ ’ or 1 = 1 --

Đầu ra:

”)

“ \’ or 1=1 -- ”

Hạn chế: tấn công dựa vào mã Unicode của một số ký tự
đặc biệt
0x 5c  \
$user = 0x bf 27
addslashes($user)
0x bf 27  ¿′
Đầu ra: 0x bf 5c 27 


0x bf 5c 
• Hàm tốt hơn: mysql_real_escape_string()
38

CuuDuongThanCong.com

/>
19


Phịng chống SQL Injection
• Hầu hết các ngơn ngữ lập trình, DBMS hỗ trợ kiểm sốt

các tham số trong câu truy vấn không hiểu lầm giá trị
tham số và mã thực thi.
• Ví dụ: PHP và MySQL
$dbh = new mysqli(…);
$stmt = $dbh->prepare(“SELECT AcctNum FROM Customer WHERE
Balance < 100 AND Username= ?”);
$recipient = $_GET[‘recipient’];
$stmt->bind_param(“s”, $recipient);
s: tham số kiểu xâu ký tự
$stmt->execute();
i: tham số kiểu số nguyên
• Sử dụng ORM framework
d: tham số kiểu số thực

39


Cây cú pháp truy vấn SQL

SELECT / FROM / WHERE

AcctNum

Customer

AND

<

Balance

=

100

Username

?
40

CuuDuongThanCong.com

/>
20


Cây cú pháp truy vấn SQL

?recipient=anyone’ OR 1 = 1 -$stmt->bind_param(“s”, $recipient);
SELECT / FROM / WHERE

AcctNum

Customer

AND

<

Balance

=

100

Username

? OR 1 = 1 -anyone’
41

Bài giảng sử dụng một số hình vẽ và ví dụ từ các bài
giảng:
• Computer and Network Security, Stanford University
• Computer Security, Berkeley University
• Introduction to Computer Security, Carnegie Mellon
University

42


CuuDuongThanCong.com

/>
21



×