Cùng với sự phát triển của công nghệ thông tin, công nghệ mạng máy tính và sự phát triển của mạng internet ngày càng phát triển đa dạng và phong phú. Các dịch vụ trên mạng đã thâm nhập vào hầu hết các lĩnh vực trong đời sống xã hội. Các thông tin trên Internet cũng đa dạng về nội dung và hình thức, trong đó có rất nhiều thông tin cần đuợc bảo mật cao hơn bởi tính kinh tế, tính chính xác và tính tin cậy của nó. Bên cạnh đó, các hình thức phá hoại mạng cũng trở nên tinh vi và phức tạp hơn. Do đó đối với mỗi hệ thống, nhiệm vụ bảo mật đuợc đặt ra cho nguời quản trị mạng là hết sức quan trọng và cần thiết. Xuất phát từ những thực tế đó, chúng ta sẽ tim hiểu về các cách tấn công phổ biến nhất hiện nay và các phòng chống các loại tấn công này. Chính vì vậy, thông qua việc nghiên cứu một số phuơng pháp tấn công và cách bảo mật các lọa tấn công này, chúng em mong muốn góp một phần nhỏ vào việc nghiên cứu và tìm hiểu về các vấn đề an ninh mạng giúp cho việc học tập và nghiên cứu. Trong nội dung của bài này, chúng em sẽ trình bày những tìm hiểu về: • SQL Injection (SQLi) • Crosssite Scripting (XSS) • Các phương pháp tấn công khác Trong phần Demo, chúng em sẽ demo về tấn công SQL Injection trên thực tế có Video chứng minh cụ thể.
Trang 1TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM
TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP TĂNG CƯỜNG 1 MÔN PHÁT TRIỂN ỨNG DỤNG WEB
TÌM HIỂU CÁC VẤN ĐỀ BẢO MẬT
TRONG PHP (CÓ DEMO)
Người hướng dẫn: ThS VŨ ĐÌNH HỒNG Người thực hiện: Lưu Đức Thông – 51303407
Trần Ngọc Quốc Phong - 51303365
Lớp : 13050303
Khóa : 17
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2016
Trang 2LỜI CẢM ƠN
Chúng em xin gửi lời cảm ơn chân thành đến ThS Vũ Đình Hồng, giảng
viên môn Phát triển Ứng dụng Web – trường Đại học Tôn Đức Thắng, người đã
tận tình hướng dẫn, chỉ bảo em trong suốt quá trình làm bài tập
Chúng em cũng xin chân thành cảm ơn các thầy cô giáo trong trường Đại học Tôn Đức Thắng nói chung, các thầy cô trong Bộ môn Mạng máy tính nói
riêng đã dạy dỗ cho chúng em kiến thức về các môn đại cương cũng như các môn chuyên ngành, giúp chúng em em có được cơ sở lý thuyết vững vàng và tạo điều kiện giúp đỡ chúng em trong suốt quá trình học tập
Cuối cùng, chúng em xin chân thành cảm ơn gia đình và bạn bè, đã luôn
tạo điều kiện, quan tâm, giúp đỡ, động viên chúng em trong suốt quá trình học tập
và hoàn thành bài tập
Thành phố Hồ Chí Minh, ngày 29 tháng 04 năm 2016
Sinh Viên Thực Hiện
Trần Ngọc Quốc Phong
Lưu Đức Thông
Trang 3ĐỒ ÁN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi / chúng tôi và được
sự hướng dẫn của ThS Vũ Đình Hồng Các nội dung nghiên cứu, kết quả trong
đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo
Ngoài ra, trong đồ án còn sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm về nội dung đồ án của mình Trường đại học Tôn Đức Thắng không liên
quan đến những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có)
TP Hồ Chí Minh, ngày 29 tháng 04 năm 2016
Tác giả (ký tên và ghi rõ họ tên)
Trần Ngọc Quốc Phong
Lưu Đức Thông
Trang 4PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
Phần xác nhận của GV hướng dẫn
_ _ _ _ _ _ _
Tp Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)
Phần đánh giá của GV chấm bài
_ _ _ _ _ _ _
Tp Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)
Trang 5TÓM TẮT
Cùng với sự phát triển của công nghệ thông tin, công nghệ mạng máy tính
và sự phát triển của mạng internet ngày càng phát triển đa dạng và phong phú Các dịch vụ trên mạng đã thâm nhập vào hầu hết các lĩnh vực trong đời sống xã hội Các thông tin trên Internet cũng đa dạng về nội dung và hình thức, trong đó
có rất nhiều thông tin cần đuợc bảo mật cao hơn bởi tính kinh tế, tính chính xác
và tính tin cậy của nó
Bên cạnh đó, các hình thức phá hoại mạng cũng trở nên tinh vi và phức tạp hơn Do đó đối với mỗi hệ thống, nhiệm vụ bảo mật đuợc đặt ra cho nguời quản trị mạng là hết sức quan trọng và cần thiết Xuất phát từ những thực tế đó, chúng
ta sẽ tim hiểu về các cách tấn công phổ biến nhất hiện nay và các phòng chống các loại tấn công này
Chính vì vậy, thông qua việc nghiên cứu một số phuơng pháp tấn công và cách bảo mật các lọa tấn công này, chúng em mong muốn góp một phần nhỏ vào việc nghiên cứu và tìm hiểu về các vấn đề an ninh mạng giúp cho việc học tập và nghiên cứu
Trong nội dung của bài này, chúng em sẽ trình bày những tìm hiểu về:
SQL Injection (SQLi)
Cross-site Scripting (XSS)
Các phương pháp tấn công khác
Trong phần Demo, chúng em sẽ demo về tấn công SQL Injection trên thực
tế có Video chứng minh cụ thể
Trang 6Mục lục
LỜI CẢM ƠN 2
ĐỒ ÁN ĐƯỢC HOÀN THÀNH 3
PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN 4
TÓM TẮT 5
CHƯƠNG 1: SQL INJECTION 8
1.1 Giới thiệu 8
1.2 Một số mệnh đề chung 8
1.2.1 Mệnh đề SQL 8
1.2.2 Mã Injection 9
1.2.3 Gọi hàm Injection 10
1.3 Phương pháp phòng tránh 11
1.3.1 Kết buộc biến 11
1.3.2 Thông qua cổng đăng nhập 11
1.3.3 Hàm bảo mật 11
1.3.4 Các thông điệp báo lỗi 12
1.3.5 Lọc các ký tự đặc biệt 12
1.3.6 Ngăn chặn MySQL Injection trong PHP 13
CHƯƠNG 2: Cross-site Scripting (XSS) 14
2.1 Giới thiệu 14
2.2 Phân tích một kịch bản (scenario) tấn công XSS 14
2.3 Phương pháp phòng tránh 15
CHƯƠNG 3: CÁC HÌNH THỨC TẤN CÔNG KHÁC 16
3.1 Khai thác Cookie 16
3.1.1 Giới thiệu 16
3.1.2 Phương pháp phòng tránh 16
3.2 Duyệt thư mục (Local File Disclosure) 16
3.2.1 Giới thiệu 16
3.2.2 Phương pháp phòng tránh 16
TÀI LIỆU THAM KHẢO 17
Trang 7CHƯƠNG 1: SQL INJECTION
1.1 Giới thiệu
SQL Injection là kiểu tấn công phổ biến hiện nay Bằng cách chèn các mã lệnh SQL vào cổng trước của website, bạn có thể đăng nhập mà không cần username và password Từ đó có thể điều khiển từ xa, dump dữ liệu và lấy root của SQL server Công cụ dùng để tấn công là một trình duyệt web bất kì Ví dụ, Internet Explore, Netscape, Lynx, Moxilla Firefox,Safari…
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 của việc kiểm tra dữ liệu đầu vào 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 trả về để inject (tiêm vào) và thi hành các câu lệnh SQL bất hợp pháp SQL injection có thể cho phép những kẻ tấn công thực hiện các thao tác, delete, insert, update,… trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy, 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, Oracle, DB2, Sysbase
1.2 Một số mệnh đề chung
1.2.1 Mệnh đề SQL
Hầu hết các kiểu tấn công SQL Injection hiện nay đều sử dụng mệnh đề
SQL Attacker kiểm tra SQL bằng các mệnh đề WHERE hoặc kết hợp WHERE với các mệnh đề UNION, INTERSECT, hoặc MINUS.
Trang 8Qúa trình chứng thực đăng nhập trên website thường sử dụng câu lệnh:
Lợi dụng câu lệnh trên, Attacker sử dụng mệnh đề sau:
Attacker lợi dụng lệnh UNION để thực thi mệnh đề SQL trong một hàng
của bảng khác Ứng dụng web sử dụng truy vấn sau để trả về danh sách các mục hiện có:
Attacker biến đổi truy vấn trên thành:
Bạn có thể áp dụng cách tương tự để thực thi cho nhiều ứng dụng khác nhau
1.2.2 Mã Injection
Tấn công bằng mã Injection được thực hiện bằng cách thêm mệnh đề hoặc các lệnh SQL vào đối tượng SQL đang tồn tại Loại tấn công này được áp dụng trên SQL Server Mệnh đề EXECUTE thường được sử dụng cho kiểu tấn công này
SELECT * FROM users WHERE username = ‘bob’ and PASSWORD = ‘mypassword’ or ‘a’ = ‘a’
SELECT * FROM users WHERE username = ‘bob’ and PASSWORD = ‘mypassword’
SELECT product_name FROM all_products WHERE product_name like ‘%Chairs%’
SELECT product_name FROM all_products WHERE product_name like ‘%Chairs%’ UNION SELECT username FROM dba_users WHERE username like
‘%’
Trang 9Nhiều ngôn ngữ lập trình cho phép mệnh đề SQL thực hiện Như PL/SQL hoặc Java, ta có thể thực hiện bằng khối nặc danh PL/SQL Ví dụ sau sứ dụng khối PL/SQL trên ứng dụng Web:
Attacker ứng dụng câu lệnh trên như sau:
1.2.3 Gọi hàm Injection
Phương pháp gọi hàm Injection thường được áp dụng trên cơ sở dữ liệu của Oracle Một số hàm của nó thường chứa những mệnh đề có điểm yếu rất cao
Nó có thể được gọi để sử dụng bằng lời gọi hệ thống hoặc các mệnh đề trên dữ liệu
Các hàm được thực hiện là một phần của mệnh đề SELECT, nó không thể
tự thay đổi cơ sở dữ liệu trừ khi có hàm “PRAGMA TRANSACTION" được sử
dụng Ngoài ra, để kiểm tra dữ liệu, bạn có thể sử dụng mệnh đề INSERT, UPDATE hoặc DELETE
Ví dụ:
‘mypassword’); END;
mypassword’) ; DELETE FROM users WHERE upper(username) = upper(‘admin’); END;
SELECT TRANSLATE (‘user inout’,
‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’,
‘0123456789’) FROM dual;
Trang 10Mệnh đề SQL trên không có điểm yếu để dẫn tới những kiểu tấn công Injection khác, nhưng nó dễ dàng được thực hiện thông qua kiểu tấn công gọi hàm Injection Attacker biến đổi mệnh đề SQL thành:
Mệnh đề SQL được thay đổi, nó yêu cầu một website từ Web Server, Attacker thực hiện trên URL và những hàm khác để tìm thông tin từ server cơ sở
dữ liệu
Ví dụ,một ứng dụng có tên MYAPPADMIN, gọi hàm “PRAGMA TRANSACTION" để ghi thông tin vào cơ sở dữ liệu ngay trong mệnh đề SELECT.
Thực hiện mệnh đề SQL trên,Attacker có thể tạo ra một ứng dụng người dùng mới
1.3 Phương pháp phòng tránh
1.3.1 Kết buộc biến
Cách tốt nhất để loại bỏ SQL Injection là sử dụng sự kết buộc giữa các biến, nó được thực hiện trong việc lập trình ứng dụng Mã ứng dụng chuẩn sẽ yêu cầu sự kết buộc giữa tất cả các biến trong mệnh đề SQL Không được sử dụng mệnh đề SQL khi mà nó chỉ được tạo ra bằng việc ghép nối giữa các chuỗi và các tham số
SELECT TRANSLATE (‘’||
UTL_HTTP.REQUEST(‘http://192.168.1.1/’) ||
‘’,‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’,‘ 0123456789’) FROM dual;
SELECT TRANSLATE (‘’ || myappadmin adduser(‘admin’, ‘newpass’) || ‘’,
‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’,
‘0123456789’) FROM dual;
Trang 11Kết buộc giữa các biến được sử dụng cho mỗi mệnh đề SQL ở bất kỳ khi nào và nơi nào mệnh đề SQL được gọi Một cuộc tấn công SQL Injection phức tạp sẽ có thể khai thác ứng dụng bằng việc lưu trữ một chuỗi tấn công trong cơ sở
dữ liệu mà nó sẽ được thực hiện sau mệnh đề SQL động
1.3.2 Thông qua cổng đăng nhập
Tại mỗi cổng đăng nhập, lập trình viên phải luôn tạo ra các bẫy lỗi để ngăn chặn những đăng nhập không hợp lệ Loại bỏ những trích dẫn đơn Các biến phải được kết buộc chặt chẽ
1.3.3 Hàm bảo mật
Các hàm cơ sở dữ liệu chuẩn có thể bị lợi dụng để tấn công SQL Injection Oracle có nhiều hàm chuẩn, được cung cấp mặc định trong thư viện PUBLIC, các ứng dụng có thể thêm vào những hàm để thay đổi password hoặc tạo ra các users phục vụ cho hình thức xâm nhập và tấn công Ngoài ra, tất cả những chức năng không cần thiết phải được hạn chế trong ứng dụng
1.3.4 Các thông điệp báo lỗi
Nếu một Attacker không xem được mã nguồn của ứng dụng thì những thông báo lỗi sẽ trở nên nguy hiểm và tạo cơ hội cho Attacker tấn công hệ thống Chính vì vậy hầu hết các ứng dụng Java không đưa ra chi tiết những thông báo lỗi
1.3.5 Lọc các ký tự đặc biệt
Sử dụng hàm sau để lọc các ký tự đặc biệt để xử lý đầu vào
Function RemoveBad(strTemp){
strTemp=
strTemp.replace (/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/ g,"");
return strTemp;
}
Trang 121.3.6 Ngăn chặn MySQL Injection trong PHP
Đặc biệt đối với MySQL và PHP, chúng ta có thể xây dựng một hàm riêng
để truyền an toàn hơn các câu truy vấn SQL
Lưu ý: File này đã được đính kèm trong thư mục
SourceCode/sqlsafe.php
<?php
function sql_safe($value,$allow_wildcards = true,
$detect_numeric = true)
{
$return_value = clone $value;
if(get_magic_quotes_gpc()) {
if(ini_get('magic_quotes_sybase')) {
$return_value = str_replace("''","'",
$return_value);
}else{
$return_value = stripslashes($return_value);
} }
if(!$allow_wildcards) {
$return_value = str_replace('%','\%',
$return_value);
$return_value = str_replace('_','\_',
$return_value);
} if($detect_numeric) {
if(!is_numeric($return_value)) {
return "'" mysql_real_escape_string($return_value) "'";
} }
return mysql_real_escape_string($return_value);
}
?>
Trang 13CHƯƠNG 2: Cross-site Scripting (XSS)
2.1 Giới thiệu
Cross-Site Scripting (XSS) là một trong những kĩ thuật tấn công phổ biến nhất hiện nay (theo thống kê OWASP TOP 10 2013), đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển web và cả những nguời sử dụng web Bất kì một website nào cho phép nguời sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS
Mã Cross – Site (Cross –Site Scripting) được viết tắt XSS (thay vì viết tắt
là CSS để tránh nhằm lẫn với CSS-Cascading Style Sheet của HTML) là một kỹ thuật tấn công bằng cách chèn vào Website động (ASP, PHP, CGI, JSP…) các thẻ HTML hay những đoạn mã script nguy hiểm có thể gậy hại cho người sử dụng khác Trong đó, những đoạn mã nguy hiểm được viết bằng các ngôn ngữ như: JavaScript, JScript, DHTML và cũng có thể là cả các thẻ HTML
XSS cho phép Attacker chèn các đoạn mã vào liên kết của đường dẫn, để thực thi trên trình duyệt của người dùng, dẫn đến việc mất cookie, mật khẩu, session hay fishing lừa đảo hay chèn virus,…
Xuất hiện khi Attacker sử dụng ứng dụng Web để gửi các mã nguy hiểm, phương thức thường được sử dụng là JavaScript Các cuộc tấn công được bắt nguồn ở những nơi mà các đoạn mã được chèn vào, ví dụ như: Cơ sở dữ liệu của Server mục tiêu hay thông điệp mail
Từ việc thu thập các thông tin ở Cookie của người dùng, Attacker có thể sẽ lấy được thông tin tài khoản hay phân tích những tập tin được Trojan gửi về từ những người dùng bị theo dõi Attacker sẽ sửa đổi nội dung của các tập tin này và
sử dụng cho mục đích xâm nhập
Kiểu tấn công này thường nhằm vào: Web Server, Server ứng dụng và các ứng dụng Web
2.2 Phân tích một kịch bản (scenario) tấn công XSS
1 Hacker nhận thấy Website xsecurity nào đó đang chứa các lỗi về mã cross – site
Trang 142 Hacker gửi một email và yêu cầu người dùng nhấp vào một liên kết nào đó
để nhận giải thưởng hay một thông tin nào đó đang được quan tâm (sử dụng mồi nhử bằng cách gửi thư rác)
3 Một URL từ xsecurity có thể như sau:
4 Khi người dùng nhấp vào liên kết này Website sẽ rất thân thiện chào đón,
nhưng thay vì hiển thị thông tin, Website hiển thị thông báo “Chào mừng bạn quay lại!”.
5 Chuyện gì đã xảy ra với tên của bạn? Bằng cách nhấp vào liên kết trong mail, bạn đã nói cho Website xsecurity rằng tên của bạn là
6 Web Server đã sinh ra HTML với “tên của bạn” được đính kèm và gửi
đến trình duyệt
7 Trình duyệt biên dịch đúng nội dung của đoạn mã và chạy nó
8 Nếu đoạn mã này bảo trình duyệt gửi những thông tin lưu trong Cookie của người dùng đến máy tính của hacker thì nó cũng thực hiện một cách nhanh chóng
9 Sau cùng,thông tin về Cookie của nạn nhân sẽ được xsecurity sở hữu
2.3 Phương pháp phòng tránh
Bạn phải luôn xác nhận tính hợp lệ của tất cả các headers, cookies, các chuỗi truy vấn,các trường form, các trường ẩn Tuyệt đối không duyệt bất kỳ một thông báo nào nếu không biết rõ nguồn gốc
Áp dụng các chính sách bảo mật nghiêm ngặt
Lọc các Scripts ở đầu ra hay ngăn chặn trực tiếp các XSS truyền tải đến người dùng
xxx.xsecurity.com/default.php?
name=<script>evilScript()</script>
“<script>evilScript()</script>”.