Tổng hợp top 10 lỗi bảo mật từ OWASP báo cáo năm 2017

Table of contents

Dựa trên báo cáo tổng hợp về các lỗi bảo mật từ OWASP (Open Web Application Security Project) năm 2017, mình xin chia sẻ lại về các lỗi bảo mật thường gặp và phổ biến, cũng như một số từ khóa thường gặp trong lĩnh vực an ninh mạng.

Overview

OWASP (Open Web Application Security Project) là một dự án, một tổ chức công động, phi lợi nhuận, chuyên thu thập, phân tích, tổng hợp và đánh giá các lỗi bảo mật trên nền tảng web. Sau 3-4 năm 1 lần, OWASP đều có những báo cáo về các lỗ hổng bảo mật nghiêm trọng, phổ biến qua từng giai đoạn.

Điểm qua các báo cáo vào các năm 2017 và 2013

Top 10 2017Top 10 2013
InjectionInjection
Broken AuthenticationBroken Authentication and Session Management
Sensitive Data ExposureCross-Site Scripting (XSS)
XML External Entities (XXE)Insecure Direct Object References
Broken Access ControlSecurity Misconfiguration
Security MisconfigurationSensitive Data Exposure
Cross-Site Scripting (XSS)Missing Function Level Access Control
Insecure DeserializationCross-Site Request Forgery (CSRF)
Using Components with Known VulnerabilitiesUsing Known Vulnerable Components
Insufficient Logging & MonitoringUnvalidated Redirects and Forwards

Những thay đổi về độ phổ biến của các lỗi bảo mật

Top 10 Security Risks 2017

1. Injection

Nhúng các đoạn mã hoặc các câu lệnh không mong muốn trong quá trình truy xuất dữ liệu hoặc thực thi hệ thống (SQL, NoSQL, OS, LDAP). Cơ bản mà nói là cần check kỹ input từ người dùng, validate các kiểu trước khi thực thi các lệnh liên quan đến db hoặc system, tránh bị khai thác dữ liệu trái phép hoặc drop/delete dữ liệu.

Ví dụ kinh điển thường được biết đến trong SQL như ' or 1=1

Ngăn chặn

  • Sử dụng các API có sẵn thay vì tự xử
  • Validate input
  • Limit kết quả trả về

2. Broken Authentication

Các lỗi vớ vẩn khiến tạo ra lỗ hổng trong việc xác thực, định danh người dùng, cũng như quản lý session người dùng, từ đó hacker lợi dụng chiếm đoạt session người dùng ngắn hạn hoặc mãi mãi.

Một số cách ngăn chặn

  • Multi-factor authentication
  • Make strong password requirement
  • Limit failed login attempts
  • Strong and secure session management

3. Sensitive Data Exposure

Phơi bày dữ liệu nhạy cảm: Dữ liệu ko đc encrypt đầy đủ, gửi truyền dữ liệu I khiến cho hacker dễ dàng suy đoán định dạng dữ liệu, đọc hoặc khai thác các thông tin nhạy cảm, đặc biệt đối với dữ liệu riêng tư người dùng như tin nhắn chat, hồ sơ bệnh án điện tử, tài chính, thẻ tín dụng, vv…

Ngăn chặn

  • HTTPS là trên hết
  • Có cơ chế mã hóa riêng cho data nhạy cảm
  • Ko gửi các data nhạy cảm ko cần thiết về client
  • Salt cho password, giải thuật hashing ngon

4. XML External Entities (XEE)

Các processors chi việc xử lý XML config (cổ xưa) thực hiện xử lý các tham chiến thực thể bên ngoài, khiến cho các thông tin nhạy cảm trên hệ thống, như các file path, thông tin port, shared files, shared codes, … bị tiết lộ trong các file xml. Từ đó hacker khai thác các thông tin này có thể scan port, remote code execution, DoS hoặc DDoS.

Một số ví dụ

  1. Truy cập resource server: hacker biết được xml format, gửi đường dẫn file muốn truy cập trong XML lên server, ví dụ “file:///etc/passwd”

  2. Hacker đoán private network của server, ví dụ “https://192.168.1.1/private”

  3. Attacker DoS bằng các file vô hạn: “file:///dev/random”

5. Broken Access Control

Quản lý access control của users ko được kiểm soát chặt chẽ, khiến user có thể truy cập được các thông tin nhạy cảm của user khác hoặc sử dụng các quyền trái phép hoặc không mong muốn, chẳng hạn thay đổi thông tin users khác, xóa sửa các thông tin abc, …

Một số tiêu chí

  • Quản lý tốt ownership
  • Disable listing file trên server
  • Monitor và log các failure attempt
  • Rate limit API
  • Quản lý logout trên cả server (xóa session …)

6. Security Misconfiguration

Chưa thực hiện các config về security, thông thường đến từ các default config chưa an toàn hoặc chưa hoàn thiện, mode debug, default key,… dẫn đến hacker khai thác được các thông tin, dữ liệu nhạy cảm, hoặc các tính năng chưa được release, …

7. Cross-Site Scripting (XSS)

Lỗi này khá quen thuộc, tuy nhiên cũng hàn lâm, thuộc loại cổ điển, nên không còn phổ biến trong top 10 nữa. Cơ bản là hacker có thể nhúng các đoạn mã html, css, hoặc thậm chí là js vào máy nạn nhân thông qua hệ thống, do hệ thống chưa làm sạch đoạn dữ liệu này. Từ đó trên máy nạn nhân xuất hiện các đoạn mã hoặc bị thực thi các đoạn mã js, khi victim tương tác thì các đoạn mã js được thực thi, hacker có thể chiếm được thông tin cookie, thông tin nhạy cảm của user, hijacking session của user, redirect users sang các trang web nguy hiểm, …

Cách ngăn chặn phổ biến là sử dụng các frameworks escape XSS

8. Insecure Deserialization

Lỗi này thường dẫn đến lỗi nghiêm trọng hơn là remote code execution. Ngoài ra còn dẫn đến các lỗi bảo mật khác như injection attack, replay attack.

9. Using Components with Known Vulnerabilities

Lỗi này đến từ các thư viện hay các framework được sử dụng trong quá trình phát triển ứng dụng. Một khi các component trong các thư viện này được khai thác, hacker có thể tận dụng để tấn công hệ thống. Do đó dev cần thường xuyên cập nhật bản vá các lỗi bảo mật từ các thư viện để đảm bảo phiên bản mới nhất và an toàn được sử dụng.

10. Insufficient Logging & Monitoring

Các thiếu sót trong việc Monitor và Logging.

11. Cross-Site Request Forgery

Hay CSRF, XSRF, người dùng phải thực hiện các request trên các trang web giả mạo, không mong muốn. Một số rủi ro thường gặp như người dùng thực hiện các thay đổi nguy hại hoặc quan trọng như chuyển khoản, cập nhật profile, …

Các cách ngăn chặn thường được dùng

  • Sử dụng secret cookie khi thực hiện request
  • Sử dụng POST cho các update quan trọng
  • Multi-step transaction: cách này vẫn có rủi ro nếu hacker làm tốt nhiệm vụ ở từng bước
  • HTTPS trước, dù ko hiệu quả cho lỗi này

Other security risks and keywords

Các attack hoặc các keywords attack thường được sử dụng và biết trong ngành bảo mật

1. Rainbow Table Attack

Thường dùng trong việc crack password, sử dụng một bản rainbow hash table được lưu trong db. Cơ bản là lưu các password thường được sử dụng cùng với giá trị hash của nó trong db. Dựa trên giá trị hash password khai thác được từ các lỗ hổng bảo mật (chẳng hạn đọc được từ máy nạn nhân do API trả về, hoặc chiếm đoạt được db trên máy chủ, hoặc db máy chủ bị leak :D) hacker có thể lookup giá trị hash để biết được password mà user sử dụng.

Cách để chống lại attack này là dùng salt cho password, hoặc băm 2-3 lần password để đảm bảo ko lookup được từ rainbow table.

Trang web nổi tiếng cho rainbow table https://crackstation.net/.

2. Hijacking Attack

Hijacking hay chiếm đoạt, hacker chiếm được quyền của người dùng, hoặc hệ thống.

Phổ biến là Session Hijacking Attack - Khai thác được cơ chế quản lý session của ứng dụng, thông thường sử dụng session token. Token này sẽ bị đánh cắp, hoặc dự đoán giá trị, cơ chế, … để tạo ra một token hợp lệ với các quyền cao hơn, nhằm chiếm đoạt và hủy hoại hệ thống.

Một số cách đánh cắp session key thường được biết như Session Sniffing hay XSS. Session Sniffing capture lại gói tin từ người dùng để đánh cắp session key (https thì thua). Còn XSS thì như đã trình bày ở trên, chèn script vô để người dùng tương tác và gửi cookie về máy attacker.

3. Man-in-the-middle attack

Hay viết tắt là MITM attack, là một keyword khá phổ biến trong mật mã an ninh mạng.

Đơn giản là connection bị ngăn chặn bởi hacker, gói tin có thể bị đánh cắp hoặc nguy hiểm hơn là bị thay đổi thông tin gói tin trước khi được gửi đến địa chỉ đích.

Đối với trường hợp 1, tức gói tin bị sniff, chỉ thông tin nhạy cảm của người dùng bị lộ, tuy nhiên cũng có thể tạo ra nhiều rủi ro tiềm tàng nguy hiểm về sau

Đối với trường hợp 2, gói tin bị thay đổi bởi hacker, trường hợp này thì quá nguy hiểm.

Thông thường được biết đến với việc đánh cắp cookie, session info, các thông tin nhạy cảm chưa được encrypt, …

Cách giải quyết thông thường là sử dụng HTTPS để mã hóa hai đầu connection, đảm bảo attacker ko thể sniff hay thay đổi nội dung gói tin.

Tuy nhiên, cao cấp hơn, hackers có thể thiết lập 2 connection riêng biệt trên connection của người dùng, 1 là connection từ browser đến attacker, 2 là connection từ attacker đến máy đích. Vụ này chủ yếu là do user ko quan tâm đến invalid certificate mà browser cảnh báo đến người dùng. Mà nếu hacker đã tạo ra 1 chứng chỉ và được CA duyệt thì browser cũng cho qua luôn, lúc này thì hacker đã ‘mission accomplished’.

4. Trojan Horse

Lấy biểu tượng từ Ngựa thành Troy (che giấu các binh lính trong con ngựa được dâng tặng từ bên thua như một món quà, thực chất là chiến thuật thâm nhập và đánh từ bên trong), các đoạn mã độc được inject vào trong code, trong ứng dụng, trong các đường link, email, file sharing, …

Conclusion

Mình đã tổng hợp và nói sơ lược qua về các lỗi bảo mật nghiêm trọng, phổ biến trích từ tài liệu báo cáo của OWASP. Bài viết hơi sơ sài, tuy nhiên các bạn có thể tìm hiểu kỹ và sâu hơn về các lỗi bảo mật này, cũng như các trường hợp và cách phòng tránh.

References