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

AN TOÀN DỊCH VỤ WEB

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 (1.04 MB, 42 trang )

20/04/2014

BÀI 7.

AN TOÀN 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

1

Nội dung
• Tổng quan về hoạt động của dịch vụ Web
• Giao thức HTTPS và các lỗ hổng
• Tấn công dạng Command Injection
• Tấn công Cross Site Scripting
• Tấn công Cross Site Request Forgery

2

1


20/04/2014

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



Word 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 nguyên 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

2


20/04/2014

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)

IE

HTTP Request

Web
server

HTTP Response

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

3


20/04/2014

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

4


20/04/2014

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 serlet, 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
URL/Form
Browser

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

command.php?
arg1=x&arg2=y

Trang web có
nội dung
tương ứng với
các tham số đã
truyền qua
URL


Thực thi kịch
bản (servlet)
Web server

Kết quả
truy vấn

Truy vấn
CSDL
theo
tham số

Database
server

10

5


20/04/2014

HTTP Cookie
• Đoạn dữ liệu được chuyển từ Web server cho trình duyệt
• Chứa một số thông tin về phiên truy cập
• Cookie được trình duyệt sử dụng lại trong các phiên truy

cập sau
• Cũng áp dụng chính sách same-origin

GET …
Browser

Server

HTTP Header:
Set-cookie: NAME=VALUE ;
domain = ;
scope
path = ;
secure = ; //chỉ sử dụng cho HTTPS?
expires = ;…
11

Javascript
• Ngôn ngữ cho phép xây dựng các script để trình duyệt

thực thi
• Được nhúng vào các trang web mà server trả về cho
client
• Khi được thực thi, Javascrip có thể:
 Thay đổi nội dung trang web
 Theo dõi các sự kiện trên trang web (bao gồm cả hành vi của

người dùng: rê chuột, nhấp chuột, gõ phím)
 Đọc, thiết lập cookie
 Sinh các HTTP Request khác và đọc HTTP Response trả về

• Khả năng truy cập các đối tượng DOM của Javascript


được giới hạn bởi chính sách cùng nguồn (Same Origin
Policy – SOP)
12

6


20/04/2014

Chính sách cùng nguồn (SOP)
• DOM: Document Object

Window Obj

Model
 Tổ chức các đối tượng, sự kiện

của trang HTML thành kiến trúc
cây
 Cung cấp các hàm cho phép
tương tác với các đối tượng, sự
kiện

• SOP: các DOM có cùng (URI

scheme, domain, port) có thể
truy cập lẫn nhau.
URI_scheme://domain:port/path
• Lưu ý: SOP là chính sách cho
trình duyệt Web, không phải

cho server

Document Obj
Event
Frame
History
Location
Navigator
Screen
13

SOP – Ví dụ
Kiểm tra khả năng truy cập từ
/>Compared URL

Outcome

httpː//www.example.com/dir/page2.html

Success

httpː//www.example.com/dir2/other.html

Success

httpː//username:/dir2/other.html

Success

httpː//www.example.com:81/dir/other.html


Failure

/>
Failure

/>
Failure

/>
Failure

/>
Failure

httpː//www.example.com:80/dir/other.html

Depends

14

7


20/04/2014

Các nguy cơ đối với dịch vụ web
• Nghe lén, đánh cắp thông tin
• Thay đổi nội dung thông điệp
• Giả mạo (người dùng với dịch vụ và ngược lại)

• Tấn công chèn mã thực thi (Command Injection)
• Tấn công qua lỗ hổng của cơ chế thực thi kịch bản
• Phát tán mã độc, phần mềm độc hại
• Tấn công từ chối dịch vụ

15

1. GIAO THỨC HTTPS
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

8


20/04/2014

Giới thiệu chung về HTTPS
• Hạn chế của HTTP:
 Không có cơ chế để người dùng kiểm tra tính tin cậy của Web
server  lỗ hổng để kẻ tấn công giả mạo dịch vụ hoặc chèn mã
độc vào trang web HTML
 Không có cơ chế mã mật  lỗ hổng để kẻ tấn công nghe lén đánh
cắp thông tin nhạy cảm
• Secure HTTP: Kết hợp HTTP và SSL/TLS:
 Xác thực
 Bảo mật


17

Thiết lập liên kết SSL/TLS
Chứng thư số
server

browser
client-hello

cert

Xác minh server-hello + server-cert (chứa khóa KUS)
servercert

Private
key

Thỏa thuận thông số trao đổi khóa
Sinh
khóa bí
mật KS

Trao đổi khóa: E(KUS, KS)

KS

Thiết lập xong kết nối TLS
Thông điệp HTTP được mã hóa với KS
18


9


20/04/2014

HTTP trên trình duyệt Web
Truy cập dịch vụ Web với HTTP

Khi click vào liên kết...

19

HTTPS trên trình duyệt Web
Truy cập Web với HTTPS

- Toàn bộ nội dung website (bao gồm
hình ảnh, CSS, Flash, scripts...) đã
được trình duyệt thẩm tra tính toàn vẹn
và nguồn gốc tin cậy.
- Mọi thông tin trao đổi giữa trình duyệt
và Amazon được giữ bí mật.

20

10


20/04/2014

Tại sao HTTPS an toàn?

• Chặn bắt dữ liệu
• Chèn mã độc vào nội dung website khi truyền từ server

tới trình duyệt web
• Tấn công DNS cache poisioning
 Client truy cập vào Web server của kẻ tấn công

• Tấn công DHCP Spoofing
 Client truy cập vào Web server của kẻ tấn công
• Tấn công định tuyến để chuyển hướng truy cập
• Tấn công man-in-the-middle
• Tấn công phát lại

21

Quá trình xác minh chứng thư số
• Bước 1: Trình duyệt so sánh tên miền trong chứng thư số

và tên miền trên địa chỉ URL
• Bước 2: Trình duyệt kiểm tra thời gian hiệu lực của chứng
thư số
• Bước 3: Trình duyệt kiểm tra chứng thư số gốc của CA
chứng thực cho server
 Để xem các chứng thư số gốc trên trình duyệt Firefox
OptionsAdvancedView CertificatesAuthorities

• Bước 4: Trình duyệt sử dụng chứng thư số gốc của CA

để thẩm tra chữ ký số trên chứng thư của server


22

11


20/04/2014

Không tìm thấy chứng thư số gốc

Còn an toàn
không khi người
dùng chấp nhận
cảnh báo?

23

Tấn công vào HTTPS
• Tấn công sslstrip: lợi dụng lỗ hổng chuyển từ truy cập

qua HTTP sang truy cập qua HTTPS (như thế nào?)
Truy cập dịch vụ Web với HTTP

Khi click vào liên kết để chuyển
sang trang truy cập bằng HHTPS

24

12



20/04/2014

Tấn công sslstrip
HTTP

SSL
attacker

web
server

<a href=https://…>

<a href=http://…>
Location: https://...

Location: http://... (redirect)
<form action=https://… >  <form action=http://…>
• Các trang có lỗ hổng này: amazon.com, ebay.com, 8/10 ngân
hàng lớn nhất Việt Nam (Agribank, Vietinbank, Vietcombank,
BiDV, ACB bank...)

25

Tấn công sslstrip
• Thậm chí, trên các website hỗ trợ đầy đủ HTTPS, nhưng

có thể lợi dụng người dùng không cập nhật trình duyệt
phiên bản mới
• Xóa cookie bằng cách chèn header “set-cookie”  người

dùng bắt buộc đăng nhập lại
 Phần lớn không phát hiện HTTPS  HTTP

26

13


20/04/2014

Tấn công vào HTTPS
• Tấn công lợi dụng website không được chứng thực đầy

đủ: trong nội dung trang web truy cập qua HTTPS chứa
nội dung có thể truy cập qua HTTP. Ví dụ:
<script src=“http://.../script.js>
<img src=“http://.../script.gif>
• Sửa như thế nào?

27

Tấn công lợi dụng website không được
chứng thực đầy đủ-Ví dụ

28

14


20/04/2014


Tấn công vào HTTPS
• Người dùng sử dụng phiên bản trình duyệt không an toàn

 chứng thư gốc bị thay thế
• Sử dụng CA giả mạo để phát hành chứng thư giả mạo
GET

BadguyCert

ClientHello

attacker

BankCert
ClientHello

bank

ServerCert (Bank)

ServerCert (rogue)
(cert for Bank by a valid CA)
SSL key exchange

k1

SSL key exchange

k1

HTTP data enc with k1

k2

k2
HTTP data enc with k2

29

Phòng chống chứng thư số giả mạo
• Sử dụng hệ thống công bố chứng thư số gốc tin cậy:
 Google lưu trữ trên DNS Google
• Giao thức “Certificate Transparency” cho phép CA công

bố toàn bộ bản ghi nhật ký (log) về các chứng thư đã phát
hành
• Giao thức OCSP (Online Certificate Status Protocol)

30

15


20/04/2014

Tấn công phishing
• Homograph attack: Lợi dụng hình dáng giống nhau của

một số ký tự. Ví dụ: vvesternbank, paypai, paypail,
paypa1...

• Semantic attack: lợi dụng các trình duyệt cũ không phân
biệt các dấu đặc biệt trên tên miền. Ví dụ: Kẻ tấn công có
thể mua tên miền badguy.cn và sử dụng tên miền con
www.bank.com/accounts/login.php?q=me.badguy.cn
• Phòng chống: sử dụng chứng thư hỗ trợ chứng thực mở
rộng (Extended validation certificate)

31

Semantic attack (ví dụ)

32

16


20/04/2014

Tấn công phishing (tiếp)
• Picture-in-picture attack: dựng một frame chứa cửa sổ

giao diện của một website đã được chứng thực lợi
dụng người dùng bất cẩn không quan sát khi duyệt web

33

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

34

17


20/04/2014

Command Injection
• Lợi dụng lỗ hổng không kiểm soá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 toá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 *.*’)”
35

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
36

18


20/04/2014

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?
Luôn 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ó quá nhiều

quyền thực thi.

 Không hiệu quả với SQL Injection

37

SQL Injection
• Mục tiêu: các website sử dụng CSDL ở back-end
• Lỗ hổng SQL Injection: không kiểm soá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

38

19


20/04/2014

SQL Injection – Ví dụ
• 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);
• 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
39

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
40

20


20/04/2014

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

41

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


?recipient=foo’ OR 1 = 1 -• Câu truy vấn được thực thi:
SELECT AcctNum FROM Customer WHERE Balance < 100
AND Username=‘foo’ 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=‘foo’ OR 1 = 1
luôn trả về giá trị TRUE

42

21


20/04/2014

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

AcctNum

Customer

OR

AND

<


Balance

100

=

=

Username

1

1

‘foo’
43

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

?recipient=foo’; DROP TABLE Customer -• Câu truy vấn được thực thi:
SELECT AcctNum FROM Customer WHERE Balance < 100
AND Username=‘foo’; 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)
44


22


20/04/2014

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()
45

Phòng chống SQL Injection
• Hầu hết các ngôn ngữ lập trình, DBMS hỗ trợ kiểm soá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);
$stmt->execute();
s: tham số kiểu xâu ký tự
i: tham số kiểu số nguyên
d: tham số kiểu số thực
46

23


20/04/2014

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

SELECT / FROM / WHERE

AcctNum

Customer

AND


<

Balance

=

100

Username

?
47

Cây cú pháp truy vấn SQL
?recipient=foo’ OR 1 = 1 -$stmt->bind_param(“s”, $recipient);
SELECT / FROM / WHERE

AcctNum

Customer

AND

<

Balance

=

100


Username

? 1 = 1 -foo’ OR
48

24


20/04/2014

3. TẤN CÔNG VÀO CƠ CHẾ
DÙNG COOKIE
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

49

Nhắc lại về cookie
• Đoạn dữ liệu được chuyển từ Web server cho trình duyệt
• Chứa một số thông tin về phiên truy cập
• Cookie được trình duyệt sử dụng lại trong các phiên truy

cập sau
• Cũng áp dụng chính sách same-origin
GET …
Browser

Server


HTTP Header:
Set-cookie: NAME=VALUE ;
domain = ;
scope
path = ;
secure = ; //chỉ sử dụng cho HTTPS?
expires = ;…
50

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×