OWASP là gì?
OWASP là viết tắt của Open Web Application Security Project là một tổ chức phi lợi nhuận quốc tế chuyên về bảo mật ứng dụng web. Một trong những nguyên tắc cốt lõi của OWASP là tất cả các tài liệu của tổ chức đều miễn phí và dễ dàng truy cập trên trang web chính thức http://owasp.org, giúp mọi người đặc biệt là ngành an ninh mạng có thể cải thiện tính bảo mật của ứng dụng web. Các tài liệu OWSAP cung cấp bao gồm tài liệu, công cụ, video và diễn đàn. OWASP được biết đến nhiều nhất qua OWASP Top 10.
Đang xem: Owasp là gì?
OWASP Top 10 là gì?
OWASP Top 10 là một báo cáo được cập nhật thường xuyên về các nguy cơ bảo mật đối với bảo mật ứng dụng web, tập trung vào 10 rủi ro/lỗ hổng quan trọng nhất. Báo cáo được tổng hợp bởi một nhóm các chuyên gia bảo mật từ khắp nơi trên thế giới. OWASP đề cập đến Top 10 như một “tài liệu nâng cao nhận thức” và họ khuyến nghị tất cả các công ty nên kết hợp báo cáo này vào các quy trình của họ để giảm thiểu rủi ro bảo mật.
Dưới đây là các rủi ro bảo mật được báo cáo trong OWASP Top 10:
Injection
Injection attack xảy ra khi dữ liệu không đáng tin cậy được gửi đến trình thông dịch mã (code interpreter) thông qua việc điền các form (biểu mẫu) hoặc một số dữ liệu khác gửi đến ứng dụng web. Ví dụ, kẻ tấn công có thể nhập SQL databasecode vào một biểu mẫu yêu cầu username ở dạng plaintext. Nếu việc điền các biểu mẫu đó không được bảo mật đúng cách, điều này sẽ dẫn đến việc SQL code đó được thực thi. Đây được gọi là một cuộc tấn công SQL injection.
Các cuộc tấn công injection có thể được ngăn chặn bằng cách xác thực và / hoặc “khử trùng” dữ liệu do người dùng gửi. (Xác thực nghĩa là từ chối các dữ liệu đáng ngờ, trong khi “khử trùng” nghĩa là làm sạch các phần dữ liệu có vẻ đáng ngờ.) Ngoài ra, quản trị viên cơ sở dữ liệu có thể thiết lập các biện pháp kiểm soát để giảm thiểu lượng thông tin bị lộ ra qua một cuộc tấn công injection.
Broken Authentication
Các lỗ hổng trong hệ thống xác thực (login) có thể cho phép kẻ tấn công truy cập vào tài khoản người dùng và thậm chí có khả năng xâm nhập toàn bộ hệ thống bằng tài khoản quản trị viên. Ví dụ: kẻ tấn công có thể lấy một danh sách chứa hàng nghìn tổ hợp tên người dùng / mật khẩu đã biết có được trong một lần vi phạm dữ liệu và sử dụng tập lệnh để thử tất cả các tổ hợp đó trên hệ thống đăng nhập để xem có tổ hợp nào hoạt động không.
Một số chiến lược để giảm thiểu lỗ hổng xác thực là sử dụng xác thực 2 yếu tố two-factor authentication (2FA) cũng như hạn chế hoặc trì hoãn các nỗ lực đăng nhập lặp lại bằng cách sử dụng giới hạn về số lần đăng nhập & thời gian giãn cách giữa các lần đăng nhập sai.
Sensitive Data Exposure
Nếu các ứng dụng web không bảo vệ dữ liệu nhạy cảm như thông tin tài chính và mật khẩu, hacker có thể giành quyền truy cập vào dữ liệu đó và sử dụng cho các mục đích bất chính. Một phương pháp phổ biến để lấy cắp thông tin nhạy cảm là sử dụng một cuộc tấn công on-path attack.
Nguy cơ lộ dữ liệu có thể được giảm thiểu bằng cách mã hóa (encypt) tất cả dữ liệu nhạy cảm cũng như vô hiệu *cache của bất kỳ thông tin nhạy cảm nào. Ngoài ra, các nhà phát triển ứng dụng web nên cẩn thận để đảm bảo rằng họ không lưu trữ bất kỳ dữ liệu nhạy cảm nào một cách không cần thiết.
*Cache lưu trữ tạm thời dữ liệu để sử dụng lại. Ví dụ: trình duyệt web thường sẽ lưu vào bộ nhớ cache các trang web để nếu người dùng truy cập lại các trang đó trong một khoảng thời gian cố định, trình duyệt không phải tìm nạp các trang web đó từ đầu.
XML External Entities (XEE)
Đây là một cuộc tấn công ứng dụng web bằng phân tích cú pháp đầu vào XML * (parses XML* input). Input này có thể tham chiếu đến một thực thể bên ngoài (external entity), đang cố gắng khai thác lỗ hổng trong trình phân tích cú pháp (parser). External entity có thể là một đơn vị lưu trữ, chẳng hạn như ổ cứng. XML parsercó thể bị lừa để gửi dữ liệu đến một thực thể bên ngoài trái phép và chuyển trực tiếp dữ liệu nhạy cảm cho kẻ tấn công.
Các cách tốt nhất để ngăn chặn các cuộc tấn công XEE là để các ứng dụng web chấp nhận một loại dữ liệu ít phức tạp hơn, chẳng hạn như JSON **, hoặc vô hiệu hóa việc sử dụng các thực thể bên ngoài trong một ứng dụng XML.
*XML hay Extensible Markup Language là một markup language nhằm mục đích cho phép cả người & máy đều có thể đọc hiểu được. Do tính phức tạp và lỗ hổng bảo mật, XML hiện đang bị loại bỏ dần trong nhiều ứng dụng web.
** Java
Script Object Notation (JSON) là một loại ký hiệu đơn giản được sử dụng để truyền dữ liệu qua internet. Mặc dù ban đầu được tạo cho Java
Script, JSON là ngôn ngữ có thể được thông dịch bởi nhiều ngôn ngữ lập trình khác nhau.
Broken Access Control
Access Control hay kiểm soát truy cập đề cập đến một hệ thống kiểm soát quyền truy cập vào thông tin hoặc chức năng. Access Control chứa lỗ hổng cho phép kẻ tấn công bỏ qua ủy quyền (authorization) và thực hiện các tác vụ như thể là người dùng có đặc quyền, chẳng hạn như quản trị viên (admin). Ví dụ: một ứng dụng web có thể cho phép người dùng thay đổi tài khoản mà họ đã đăng nhập chỉ bằng cách thay đổi một phần của url mà không cần bất kỳ xác minh nào khác.
Kiểm soát truy cập có thể được bảo mật bằng cách đảm bảo rằng ứng dụng web sử dụng authorization tokens* và đặt các kiểm soát chặt chẽ đối với các token này.
Xem thêm: Nghĩa Của Từ Điển Anh Việt “Patented”, Bản Dịch Của Patent Trong Việt Là Gì
*Nhiều dịch vụ cho phép sử dụng authorization tokens khi người dùng đăng nhập. Mọi yêu cầu đặc quyền mà người dùng đưa ra sẽ yêu cầu phải có authorization tokens. Đây là một cách an toàn để đảm bảo rằng đúng người dùng với đúng đặc quyền.
Security Misconfiguration
Security misconfiguration hay lỗi cấu hình sai bảo mật là lỗ hổng phổ biến nhất trong danh sách và thường là kết quả của việc sử dụng cấu hình mặc định hoặc thông báo hiển thị lỗi quá nhiều thông tin. Ví dụ: một ứng dụng có thể hiển thị lỗi mô tả quá nhiều thông tin có thể tiết lộ các lỗ hổng trong ứng dụng. Điều này có thể được giảm thiểu bằng cách loại bỏ bất kỳ tính năng không sử dụng nào trong code và đảm bảo rằng các thông báo lỗi sẽ mang tính tổng quát chung chung hơn.
Cross-Site Scripting
Cross-Site Scripting xảy ra khi các ứng dụng web cho phép người dùng thêm code tùy chỉnh vào đường dẫn url hoặc vào một trang web mà những người dùng khác sẽ nhìn thấy. Lỗ hổng này có thể bị khai thác để chạy mã Java
Script độc hại (malicious Java
Script code) trên trình duyệt của nạn nhân. Ví dụ: kẻ tấn công có thể gửi email cho nạn nhân có vẻ là từ một ngân hàng đáng tin cậy, với một liên kết đến trang web của ngân hàng đó. Tuy nhiên, liên kết này có thể có một số mã Java
Script độc hại được gắn thẻ vào cuối url. Nếu trang web của ngân hàng không được bảo vệ thích hợp chống lại Cross-Site Scripting, thì mã độc hại đó sẽ được chạy trong trình duyệt web của nạn nhân khi họ nhấp vào liên kết.
Các chiến lược giảm thiểu tấn công Cross-Site Scripting bao gồm thoát các yêu cầu HTTP không đáng tin cậy cũng như xác thực và / hoặc loại bỏ các nội dung do người dùng thêm vào. Sử dụng các web development frameworks hiện đại như React
JS và Ruby on Rails cũng cung cấp một số tính năng bảo vệ khỏi các cuộc tấn công Cross-Site Scripting.
Insecure Deserialization
Tấn công này bao gồm Serialization & Deserialization.
Serialization có nghĩa là lấy các đối tượng (object) từ mã ứng dụng (application code) và chuyển đổi chúng thành một định dạng có thể được sử dụng cho mục đích khác, chẳng hạn như lưu trữ dữ liệu vào đĩa hoặc phát trực tuyến dữ liệu đó. Deserialization thì ngược lại với Serialization.
Serialization giống như đóng gói đồ đạc vào các hộp trước khi chuyển đi, và deserialization giống như mở hộp và lắp ráp đồ đạc sau khi chuyển đi. Một cuộc tấn công deserialization giống như việc xáo trộn nội dung của các hộp trước khi chúng được giải nén trong quá trình di chuyển.
Sử dụng các thành phần có lỗ hổng đã biết
Nhiều nhà phát triển (developer) web hiện nay sử dụng các thành phần như thư viện (libraries) và framework trong các ứng dụng web của họ. Những thành phần này là những phần mềm giúp các nhà phát triển tránh công việc thừa và cung cấp chức năng cần thiết; ví dụ phổ biến bao gồm các framework front-end như React và các thư viện nhỏ hơn được sử dụng để thêm các biểu tượng chia sẻ hoặc a/b testing. Một số kẻ tấn công tìm kiếm các lỗ hổng trong các thành phần này mà sau đó chúng có thể sử dụng để điều phối các cuộc tấn công. Một số thành phần phổ biến hơn được sử dụng trên hàng trăm nghìn trang web; kẻ tấn công tìm thấy lỗ hổng bảo mật trong những thành phần này có thể khiến hàng trăm nghìn trang web bị khai thác.
Các nhà phát triển các thành phần này thường cung cấp các bản vá bảo mật và cập nhật để bổ sung các lỗ hổng đã biết, nhưng các nhà phát triển ứng dụng web không phải lúc nào cũng có các phiên bản được vá hoặc cập nhật mới nhất. Để giảm thiểu rủi ro khi chạy các thành phần có lỗ hổng đã biết, các nhà phát triển nên xóa các thành phần không sử dụng khỏi dự án, cũng như đảm bảo rằng đang nhận các thành phần từ một nguồn đáng tin cậy và đảm bảo chúng được cập nhật.
Kiểm tra log & giám sát không hiệu quả
Nhiều ứng dụng web không thực hiện đủ các bước để phát hiện vi phạm dữ liệu. Thời gian phát hiện trung bình cho một vi phạm là khoảng 200 ngày sau khi đã xảy ra. Điều này cho phép những kẻ tấn công có nhiều thời gian để gây ra thiệt hại trước khi có bất kỳ phản ứng nào. OWASP khuyến nghị rằng các nhà phát triển web nên thực hiện ghi log và giám sát (monitor) cũng như lên các kế hoạch ứng phó sự cố để đảm bảo rằng họ nhận thức được các cuộc tấn công vào các ứng dụng.
Số là ngày đầu tiên đi làm, CCO (Chief Consulting Officer) xếp mình vào một dự án nội bộ của công ty. Trước đây đã có source code, tuy nhiên để kịp demo hay sao ấy, họ chỉ có mainflow và không tuân thủ theo tiêu chuẩn của OWASP. Họ mong muốn mình làm lại giao diện cho gọn gàng hơn và áp dụng tiêu chuẩn OWASP. Trong quá trình tìm hiểu, mình chia sẻ với mọi người luôn.
Giới thiệu về OWASP
OWASP là một tiêu chuẩn để phục vụ việc kiểm thử của Penetration Testing (Pentest) do tổ chức Open Web Application Security Project(OWASP) đề xuất. OWASP là tổ chức phi lợi nhuận và đưa ra chuẩn OWASP phục vụ cho công việc pentest hiệu quả và chi tiết. Tuy nhiên, để rõ hơn, mình xin giới thiệu sơ qua Pentest là gì.
Pentest là gì?
Penetration Testing hay thường gọi là “pentest” hoặc “security testing” có thể hiểu đơn giản là đánh giá độ an toàn bằng cách tấn công vào hệ thống (gọi là đánh trận giả). Người thực hiện một thử nghiệm xâm nhập được gọi là kiểm tra xâm nhập hoặc pentester. Có một khái niệm khác mà đôi khi ta thường nhầm lẫn với Penetration Testing (PT) đó là Vulnerability Assessment (VA). Vậy VA là gì và nó khác gì so với PT? Thực chất VA là quá trình rà soát lại các dịch vụ và hệ thống để tìm ra các vấn đề an ninh tiềm tàng hoặc dò tìm các dấu vết khi hệ thống bị tổn thương. Ngược lại PT thực hiện khai thác và tấn công thử nghiệm (POC attack) nhằm để tìm ra vấn đề an ninh tồn tại. Do đó PT đi xa hơn VA một bước bằng cách dựa theo các hoạt động thực sự của một hacker. Thâm nhập thử nghiệm có một yêu cầu là bạn phải nhận được sự cho phép của người sở hữu hệ thống. Nếu không, bạn sẽ được coi như là đang hack hệ thống, đó là bất hợp pháp ở hầu hết các quốc gia. Nói cách khác: Sự khác biệt giữa thử nghiệm thâm nhập và hack là bạn có sự cho phép của chủ sở hữu hệ thống.
OWASP là 1 trong một số tiêu chuẩn để đánh giá bảo mật. Ngoài ra, còn có các tiêu chuẩn khác như:
Nội dung
Bạn có thể tham khảo nhanh OWASP Secure Coding Practices – Quick Reference Guide. Ở đây, mình xin liệt kê một số thành phần trong tiêu chuẩn này.
Xem thêm: Phân biệt ngành physiotherapy therapy và occupational therapy
Input Validation Bạn phải kiểm tra format, min, max, độ dài cho phép của các ô nhập liệu. Ngoài ra, bạn nhớ mã hoá các ký tự đặc biệt. Không bao giờ tin tưởng hoàn toàn người dùng, đó là một phương châm rất quan trọng đối với lập trình viên. Việc kiểm tra dữ liệu được nhập vào từ người dùng là công việc vô cùng quan trọng. Mục đích để tránh những sai sót không đáng có và các kiểu tấn công XSS, CSRF.
Output Encoding Mã hoá các giá trị được nhận từ các nguồn đến trang web. Đôi khi, ở client được nhận những giá trị không đáng có như đoạn mã liên quan đến XSS, nếu không có những biện pháp xử lý trước khi hiển thị sẽ vô tình kích hoạt bẫy của hacker.
Authentication and Password Management Kiểm tra bảo mật với chức năng đăng nhập là vấn đề cực kỳ quan trọng, bạn phải đảm bảo việc đăng nhập cần sự an toàn và đúng với ý định của nhà phát hành ứng dụng.
Session Management Kiếm tra phiên đăng nhập để tránh các lỗi tấn công như Session Hijacking, Man in the Middle,… Bạn có thể tìm đọc qua bài viết sau
Access Control Khi người dùng bị hạn chế kiểm soát truy cập, hacker có thể khai thác và truy cập các chức năng hoặc dữ liệu trái phép. Kiểm soát truy cập nhằm mục đích kiểm soát người dùng được ủy quyền được phép hay không được phép làm gì trong một ứng dụng và để thiết lập quyền kiểm soát truy cập một cách hợp lí, ứng dụng phải đảm bảo rằng nó đang nghiêm túc thực hiện kiểm tra ủy quyền và xác thực hợp lệ để xác định người dùng được đặc quyền, thực tế là những người dùng Internet ngẫu nhiên.
Cryptographic Practices Kiểm tra mã hóa thông tin trên đường truyền. Đối với đối thượng là những website thương mại điện tử hay giao dịch thì việc kiểm tra, mã hóa đường truyền là một vấn đề hết sức quan trọng. Phần này sẽ gợi ý bạn một số lời khuyên hữu ích.
Error Handling and Logging Kiểm tra cách xử lý lỗi của ứng dụng thông tin về lỗi cũng là một nguồn thu thập dữ liệu cho hacker có thể tấn công vào website. Những lúc đó ứng dụng cần có cơ chế xử lý để không gặp phải hiện tượng tự nhiên lăn đùng ra chết mà quản trị chẳng hay chết khi nào và vì sao lại chết. Để biết điều, đó ta phải ghi Log các hoạt động của hệ thống. Tuy nhiên, hacker có thể khai thác log để đánh hệ thống.
Communication Security Bạn nên kiểm soát chặt chẽ quá trình giao tiếp với các thành phần khác như API, server khác thông qua giao thức kết nối, VPN,… Chẳng hạn như HTTPS không được thực hiện chính xác và để lại lỗ hổng, giúp tin tặc có thể ăn cắp thông tin tài khoản, mật khẩu, địa chỉ hay bất cứ thông tin có giá trị nào khác.
System Configuration Cần đánh giá về hệ thống máy chủ, không chỉ dừng ở bước đánh giá ứng dụng, bạn cần phải đánh giá cả nền tảng mà các ứng dụng chạy trên đó bởi nó có thể gây nguy hại không chỉ đến web mà còn đến cả hệ thống server. Hình thức kiểm tra được sử dụng là whitebox và graybox. Ngoài ra, do cấu hình an ninh lỏng lẻo tại các tầng kiến trúc của web như nền tảng, framework, máy chủ, cơ sở dữ liệu và mã tùy chỉnh nên tin tặc có thể khai thác tấn công và có quyền truy cập dữ liệu. Vì thế, tất cả các tầng kiến trúc của web phải được cập nhật thường xuyên.
Tài liệu liên quan
Khoảng vài năm, OWASP có công bố các lỗi bảo mật thường hay gặp. Bạn có thể tham khảo tại Official OWASP Top 10 Document Repository.