Hướng dẫn kiểm thử bảo mật (Sercurity Testing) bằng tool OWASP ZAP dành cho Pen Testers mới
I. GIỚI THIỆU
Trong thời đại số hóa, các cuộc tấn công mạng (Internet Attack) và vi phạm về an ninh mạng ngày càng tăng về quy mô, số lượng và cách thức, nhu cầu về người kiểm tra bảo mật cũng tăng lên, đặc biệt là những người có nhiều kinh nghiệm. Người kiểm tra bảo mật có trách nhiệm xác định các lỗ hổng và rủi ro tiềm ẩn trong phần mềm và ứng dụng. Trong phạm vi bài viết này, Khiem Mohammad sẽ giới thiệu những kiến thức căn bản nhất để tập tành Kiểm thử bảo mật. Tôi không phải chuyên gia bảo mật, nhưng hi vọng những kiến thức tôi chia sẻ sẽ phần nào bổ sung cho các bạn mới thêm phần tự tin tìm tòi.
An toàn thông tin là bảo vệ thông tin và hệ thống thông tin nói chung khỏi các truy cập trái phép, sử dụng, làm lộ, làm hỏng, chỉnh sửa, ghi chép không được phép…Nhằm đảo bảo 3 tính của an toàn thông tin mạng đó là tính bí mật (confidentiality), toàn vẹn (integrity) và tính sẵn sàng (availability).
>> Khuyến cáo: Những kiến thức này chỉ được áp dụng cho mục đích nghiên cứu và trong phạm vi nội bộ cho phép, không được áp dụng lên môi trường Internet công cộng. Sẽ có thể gây ra hậu quả cho các cá nhân, tổ chức khác, đồng nghĩa với việc vi phạm pháp luật, điều mà bạn và tôi đều không mong muốn. Xin bạn đọc hãy lưu ý.
Dưới đây, chúng ta sẽ tìm hiểu tổng quan và cùng nhau sử dụng OWASP ZAP:
II. ĐỊNH NGHĨA, CÁCH THỨC, CÁCH DÙNG
A. Định nghĩa:
OWASP ZAP (Zed Attack Proxy) là một công cụ kiểm thử bảo mật ứng dụng web mã nguồn mở. Nó được phát triển bởi Open Web Application Security Project (OWASP), một tổ chức phi lợi nhuận nổi tiếng trong lĩnh vực bảo mật ứng dụng web.
OWASP ZAP cung cấp các tính năng mạnh mẽ để phát hiện và kiểm tra các lỗ hổng bảo mật trong ứng dụng web, giúp các nhà phát triển và nhà kiểm thử bảo mật tìm ra các lỗ hổng và vấn đề bảo mật tiềm năng.
Một số tính năng chính của OWASP ZAP bao gồm:
-
Proxy Intercept: OWASP ZAP hoạt động như một proxy server, cho phép bạn chặn và xem các yêu cầu và phản hồi HTTP/S giữa trình duyệt và ứng dụng web. Điều này cho phép bạn kiểm tra và chỉnh sửa các yêu cầu trước khi gửi đến máy chủ.
-
Active Scanning: OWASP ZAP có khả năng quét tự động ứng dụng web để tìm kiếm các lỗ hổng bảo mật phổ biến như XSS (Cross-Site Scripting), SQL Injection, CSRF (Cross-Site Request Forgery), và nhiều lỗ hổng khác. Nó tự động tạo ra các yêu cầu và phản hồi để kiểm tra ứng dụng.
-
Spidering và Crawler: OWASP ZAP có thể tạo ra các yêu cầu tự động để khám phá các liên kết và tài nguyên trong ứng dụng web. Điều này giúp tìm ra các trang ẩn, trang quản trị và các điểm cuối khác trong ứng dụng.
-
Fuzzing: OWASP ZAP cung cấp khả năng thử nghiệm Fuzzing, cho phép bạn gửi các dữ liệu đầu vào không hợp lệ hoặc tương tự nhằm kiểm tra sự ổn định và bảo mật của ứng dụng.
-
Reporting: OWASP ZAP cho phép bạn tạo báo cáo chi tiết về các lỗ hổng bảo mật được tìm thấy trong ứng dụng. Bạn có thể tùy chỉnh định dạng báo cáo và xuất ra các định dạng phổ biến như HTML, XML hoặc JSON.
Trước khi tìm hiểu sâu hơn, tôi muốn giới thiệu cho các bạn các việc cần làm chính của Pen Tester mới nhập môn:
-
Tìm hiểu các nguyên tắc cơ bản: Bước đầu tiên để trở thành người kiểm thử bảo mật là tìm hiểu các nguyên tắc cơ bản của kiểm thử phần mềm, bao gồm các loại thử nghiệm, phương pháp thử nghiệm và khái niệm kiểm thử bảo mật khác nhau.
-
Đạt được trình độ thành thạo về các công cụ kiểm tra bảo mật: Để trở thành người kiểm tra bảo mật, bạn nên thành thạo các công cụ kiểm tra bảo mật như Burp Suite, OWASP ZAP và Nessus.
-
Hiểu kiến trúc ứng dụng web: Hiểu biết sâu sắc về kiến trúc ứng dụng web là rất quan trọng để kiểm tra bảo mật. Bạn nên làm quen với các lớp khác nhau của ứng dụng web, bao gồm lớp trình bày, lớp logic nghiệp vụ và lớp truy cập dữ liệu.
-
Tìm hiểu về các loại tấn công khác nhau: Có nhiều loại tấn công bảo mật khác nhau, chẳng hạn như SQL Injection, XSS...bạn có thể tham khảo thêm tại đây:
-
Thực hành ethical hacking (hack có đạo đức): Đóng vai một Hacker mũ trắng, hack có đạo đức liên quan đến việc xác định các lỗ hổng và rủi ro tiềm ẩn trong phần mềm và ứng dụng bằng cách mô phỏng các cuộc tấn công. Thực hành hack có đạo đức có thể giúp bạn hiểu cách những kẻ tấn công suy nghĩ và xác định các lỗ hổng trước khi chúng có thể bị khai thác.
-
Xây dựng kế hoạch kiểm tra bảo mật: Phát triển kế hoạch kiểm tra bảo mật là điều cần thiết để đảm bảo rằng tất cả các khía cạnh của ứng dụng đều được kiểm tra kỹ lưỡng
-
Luôn cập nhật các xu hướng mới nhất: Lĩnh vực kiểm thử bảo mật liên tục phát triển và việc luôn cập nhật các xu hướng và công nghệ mới nhất là điều quan trọng để thành công.
B. Cách thức hoạt động của các cuộc tấn công OWASP ZAP
I. Tổng quan cách thức hoạt động:
Khi bạn nhấp vào nút Attack, ZAP sẽ bắt đầu thu thập dữ liệu ứng dụng web bằng trình thu thập dữ liệu của nó, quét thụ động từng trang mà nó tìm thấy. Tiếp theo, ZAP sử dụng trình quét đang hoạt động để tấn công tất cả các trang, thông số và chức năng được phát hiện.
ZAP bao gồm hai con nhện (spiders) có thể thu thập dữ liệu các ứng dụng web. Bạn có thể sử dụng một hoặc cả hai con nhện. Dưới đây là những khác biệt chính giữa các loài nhện:
- Một con nhện ZAP truyền thống - Traditional Spider—con nhện này phát hiện các liên kết bằng cách kiểm tra HTML trong các phản hồi từ một ứng dụng web. Nó nhanh nhưng không phải lúc nào cũng hiệu quả khi bạn muốn khám phá các ứng dụng web AJAX tạo liên kết bằng JavaScript.
- Con nhện AJAX của ZAP - Ajax Spider—con nhện này dành cho các ứng dụng AJAX. Nó khám phá một ứng dụng web bằng cách gọi các trình duyệt, sau đó đi theo tất cả các liên kết được tạo ra. Nó chậm hơn nhện truyền thống và yêu cầu cấu hình bổ sung khi sử dụng nó trong môi trường “không đầu”.
1. Quét thụ động và chủ động (Passive vs. active scanning)
ZAP quét thụ động tất cả các phản hồi và yêu cầu được ủy quyền thông qua nó. Kiểu quét này không thay đổi phản hồi, đó là lý do tại sao nó thường được coi là an toàn. Quá trình quét được thực hiện trong một luồng nền để không làm chậm quá trình khám phá. Bạn có thể sử dụng chức năng quét thụ động để tìm các lỗ hổng nhất định, hiểu được trạng thái bảo mật cơ bản của ứng dụng web được thử nghiệm và tìm các vị trí cần điều tra thêm.
Quét thụ động kiểm tra các yêu cầu HTTP và phản hồi của ứng dụng để tìm các dấu hiệu đã biết về lỗ hổng bảo mật và không thể thực hiện thay đổi đối với các yêu cầu. Quét chủ động có thể tạo và sửa đổi các yêu cầu được gửi đến ứng dụng, gửi yêu cầu kiểm tra để phát hiện các lỗ hổng bảo mật mà bạn không thể phát hiện được bằng cách quét thụ động.
2. Chạy quét: Máy tính để bàn và API
Bạn có thể triển khai OWASP ZAP dưới dạng ứng dụng máy tính để bàn hoặc tự động thông qua API, tùy thuộc vào cách bạn định sử dụng ZAP. Các nhà phân tích bảo mật và người kiểm tra thâm nhập thường chạy thử nghiệm một lần bằng ứng dụng máy tính để bàn để phát hiện các lỗ hổng. Các nhóm bảo mật và phát triển phần mềm thường triển khai ZAP thông qua tự động hóa để đảm bảo kiểm tra bảo mật thường xuyên cho ứng dụng và API của nó.
3. Quét bảo mật được xác thực
Nhiều ứng dụng web yêu cầu xác thực. Trong trường hợp này, xác thực phải được cấu hình trong ZAP trước khi chạy quét. Nếu không, quá trình kiểm tra sẽ không kiểm tra bất kỳ đường dẫn hoặc đường dẫn nào nằm sau tính năng bảo vệ xác thực.
4. WebSockets
WebSockets tạo kênh liên lạc không đồng bộ giữa máy khách và máy chủ, truyền dữ liệu ở chế độ song công hoàn toàn. Điều này tạo ra các lỗ hổng bảo mật vì WebSocket giữ kênh mở, cho phép kẻ tấn công nghe lén hoặc chiếm quyền điều khiển phiên. ZAP liên tục quét WebSockets để xác định các lỗ hổng.
II. Thông số hiển thị trên HUD:
- Mục "Sites" trong HUD của ZAP hiển thị danh sách các trang web đã được quét và thông tin liên quan đến mỗi trang.
- Mục "Context" cho phép bạn xác định phạm vi và ngữ cảnh của việc quét và tấn công bảo mật trên một trang web cụ thể.
-
Xác định phạm vi quét: Bằng cách tạo các context riêng biệt, bạn có thể chỉ định các phạm vi riêng biệt để quét bảo mật. Ví dụ, bạn có thể chỉ quét một phần cụ thể của trang web hoặc quét toàn bộ trang web.
-
Quản lý URL và phương thức: Trong mục "Context", bạn có thể thêm, chỉnh sửa và xóa các URL cụ thể mà bạn muốn quét hay tấn công. Bạn cũng có thể chỉ định các phương thức HTTP như GET, POST, PUT, DELETE, vv. mà bạn muốn sử dụng trong quá trình kiểm thử.
-
Tùy chỉnh quy tắc quét: Trong mục "Context", bạn có thể tùy chỉnh các quy tắc quét bảo mật theo nhu cầu của bạn. Bạn có thể kích hoạt hoặc vô hiệu hóa các plugin quét cụ thể, xác định các tham số quét, và tùy chỉnh các cài đặt khác liên quan đến quá trình quét bảo mật.
-
Xem kết quả quét: Mục "Context" cung cấp cái nhìn tổng quan về kết quả quét bảo mật trong ngữ cảnh cụ thể. Bạn có thể xem số lỗ hổng, số cảnh báo và các thông tin khác liên quan đến việc quét và tấn công bảo mật trong ngữ cảnh đó.
II. Cài đặt - Cách dùng:
Cài đặt OWASP ZAP:
- Truy cập trang web chính thức của OWASP ZAP (https://www.zaproxy.org/) và tải xuống phiên bản phù hợp với hệ điều hành của bạn, sau đó cài đặt. Nó chỉ hỗ trợ JDK 11 nhỏ nhất cho nên nếu bạn đang dùng JDK 8 thì sẽ không tương thích cho nên hãy nâng cấp phiên bản Java > 8, sau đó nó sẽ yêu cầu cài biến môi trường.
2. Khởi động OWASP ZAP.
Bạn sẽ thấy giao diện người dùng chính của OWASP ZAP.
3. Thiết lập proxy:
- Để OWASP ZAP hoạt động như một proxy server, bạn cần cấu hình trình duyệt web để sử dụng proxy này.
- Trong OWASP ZAP, điều hướng đến tab "Tools" và chọn "Options".
- Trong cửa sổ "Options", điều hướng đến "Local Proxy" và ghi nhớ cổng proxy được cung cấp (thông thường là 8080).
- Trong trình duyệt web của bạn, điều hướng đến cài đặt proxy và thiết lập địa chỉ proxy thành "localhost" và cổng proxy là cổng OWASP ZAP đã chỉ định.
4. Xác định và quét mục tiêu:
- Trong OWASP ZAP, điều hướng đến tab "Quick Start" như ảnh bên trên.
- Trong phần "URL to attack", nhập URL của ứng dụng web mà bạn muốn kiểm thử. Ở đây tôi dùng URL của blog Wordpress vì nó là blog của tôi. Tôi khuyến nghị các bạn tự chạy trên web của chính bạn hoặc chạy trên local nếu có thể.
- Nhấn nút "Attack" để bắt đầu quét ứng dụng web.
5. Quét và kiểm tra bảo mật:
OWASP ZAP sẽ bắt đầu quét ứng dụng web và tìm kiếm các lỗ hổng bảo mật phổ biến. Bạn có thể theo dõi tiến trình quét trong tab "Alerts", nơi hiển thị các cảnh báo và lỗ hổng bảo mật được tìm thấy.
6. Xem và xử lý kết quả:
- Sau khi quét hoàn tất, bạn có thể xem kết quả quét trong các tab "Alerts", "Sites", "History", và
- Trong tab "Alerts", bạn sẽ thấy danh sách các cảnh báo và lỗ hổng bảo mật đã được tìm thấy.
- Bạn có thể nhấp vào từng mục để xem chi tiết và thông tin liên quan.
1. Alerts (Cảnh báo):
- Mức độ nghiêm trọng (Severity): Đánh giá mức độ nguy hiểm của lỗ hổng bảo mật, thông thường được phân loại thành các mức như Critical, High, Medium, Low.
- Loại lỗ hổng (Vulnerability type): Mô tả loại lỗ hổng bảo mật đã được phát hiện, ví dụ: Cross-Site Scripting (XSS), SQL Injection, Insecure Direct Object References, và nhiều loại khác.
- URL liên quan: Liên kết đến trang web hoặc tài nguyên có chứa lỗ hổng bảo mật.
- Mô tả: Chi tiết về lỗ hổng bảo mật đã được phát hiện, bao gồm cách tấn công có thể được thực hiện và cách khắc phục.
Khi click đường link và mở trình duyệt bằng OWASP. OWASP sẽ thao túng trình duyệt giống như một tool Automation Testing:
2. Sites (Trang web):
- URL: Địa chỉ trang web đã được quét.
- Số lần quét: Số lần trang web đã được quét trong quá trình kiểm tra bảo mật.
- Số lỗ hổng: Số lỗ hổng bảo mật đã được phát hiện trong trang web.
- Trạng thái: Trạng thái hiện tại của trang web, ví dụ: hoạt động, không hoạt động, bị chặn.
3. History (Lịch sử):
- Thời gian quét: Thời điểm và thời gian mà quá trình quét đã diễn ra.
- Số lỗ hổng: Tổng số lỗ hổng bảo mật đã được phát hiện trong quá trình quét.
- Thông tin liên quan: Các thông tin khác liên quan đến quá trình quét, ví dụ: thiết bị hoặc công cụ sử dụng.
4. Statistics (Thống kê):
- Số lượng trang web: Tổng số trang web đã được quét.
- Số lỗ hổng: Tổng số lỗ hổng bảo mật đã được phát hiện trong tất cả các trang web.
- Mức độ nghiêm trọng: Thống kê về số lượng lỗ hổng theo mức độ nghiêm trọng.
- Các thông tin thống kê khác: Có thể bao gồm tỷ lệ lỗ hổng theo loại, biểu đồ thống kê, và thông tin liên quan khác.
C. Phân tích kết quả:
"Absence of Anti-CSRF Tokens" là một cảnh báo (alert) được ZAP tạo ra để chỉ ra rằng một ứng dụng web có sự thiếu hụt các token Anti-CSRF.
- Anti-CSRF tokens (hay còn gọi là CSRF tokens) là cơ chế bảo vệ chống lại các cuộc tấn công CSRF (Cross-Site Request Forgery). CSRF là một loại tấn công mà kẻ tấn công lừa một người dùng đăng nhập vào một trang web và sau đó sử dụng quyền truy cập của người dùng đó để thực hiện các hành động không mong muốn trên trang web đó. Bạn có thể edit các Alert bằng cách click vào chúng:
-
Missing Anti-clickjacking Header: Cảnh báo này xuất hiện khi ứng dụng web thiếu tiêu đề Anti-clickjacking (X-Frame-Options header) hoặc không đặt chính xác. Tiêu đề này được sử dụng để ngăn chặn tấn công clickjacking, trong đó kẻ tấn công đưa nội dung độc hại vào một trang web khác và lừa người dùng nhấp chuột vào nó.
-
Cookie Poisoning: Đây là cảnh báo cho thấy cookie trong ứng dụng web có thể bị tấn công bằng cách thay đổi nội dung của chúng. Cookie là một thành phần quan trọng để duy trì trạng thái và xác thực trong các ứng dụng web, và khi bị nhiễm độc, nó có thể dẫn đến các hành vi không mong muốn hoặc vi phạm bảo mật.
-
Timestamp Disclosure: Cảnh báo này xuất hiện khi ứng dụng web tiết lộ thông tin về thời gian, chẳng hạn như thời gian tạo, sửa đổi hoặc xóa dữ liệu. Thông tin về thời gian có thể cung cấp cho kẻ tấn công các gợi ý về cấu trúc hệ thống và thậm chí giúp tấn công theo thời gian (timing attacks).
-
Cookie without SameSite Attribute: Cảnh báo này cho thấy cookie trong ứng dụng web không đặt thuộc tính SameSite hoặc không đặt chính xác. Thuộc tính SameSite được sử dụng để xác định việc chia sẻ cookie giữa các trang web. Nếu không đặt đúng, có thể có nguy cơ tấn công CSRF hoặc thông tin đăng nhập bị rò rỉ.
-
Cookie Without Secure Flag: Cảnh báo này xuất hiện khi cookie không đặt cờ bảo mật (Secure flag) khi được truyền đi. Cờ bảo mật chỉ ra rằng cookie chỉ được gửi qua kết nối an toàn HTTPS, giúp ngăn chặn tấn công lắng nghe (eavesdropping) và đánh cắp thông tin đăng nhập.
-
Information Disclosure: Cảnh báo này xuất hiện khi ZAP phát hiện thông tin nhạy cảm hoặc thông tin quan trọng được tiết lộ trong phản hồi của ứng dụng web. Ví dụ, nó có thể là hiển thị thông tin về phiên làm việc, lỗi hệ thống, thông tin cấu trúc, hoặc thông tin đăng nhập không được bảo vệ.
-
Directory Listing: Cảnh báo này xuất hiện khi ZAP tìm thấy thư mục trên máy chủ web được cấu hình để hiển thị danh sách các tệp tin bên trong. Điều này có thể tiết lộ thông tin quan trọng về cấu trúc và nội dung hệ thống.
-
Open Redirect: Cảnh báo này xuất hiện khi ứng dụng web cho phép chuyển hướng không an toàn từ một URL đến một URL khác nằm ngoài tầm kiểm soát của ứng dụng. Kẻ tấn công có thể lợi dụng điều này để lừa người dùng truy cập vào các trang web độc hại hoặc nguy hiểm.
-
Server Misconfiguration: Cảnh báo này xuất hiện khi ZAP phát hiện các lỗ hổng bảo mật liên quan đến cấu hình không chính xác của máy chủ web. Điều này có thể bao gồm việc bật các tính năng không cần thiết, thiết lập quyền truy cập không đúng, hay cấu hình SSL/TLS không an toàn.
-
Unvalidated Redirects and Forwards: Cảnh báo này xuất hiện khi ứng dụng web cho phép chuyển hướng hoặc chuyển tiếp yêu cầu người dùng mà không thực hiện kiểm tra đúng đắn. Điều này có thể dẫn đến khả năng tấn công chuyển hướng không an toàn hoặc chuyển tiếp không mong muốn.
Và vô vàn những cảnh báo có thể có, chúng ta tùy cơ ứng biến và tìm hiểu chúng tùy trường hợp.
III. Tạo báo cáo
Bạn có thể tạo báo cáo với tùy biến template của bản report, ở đây tôi dùng định dạng html để xuất file, bạn có thể chọn định dạng khác như XML:
IV. Mở rộng
Một số điểm quan trọng về giao thức TCP/IP liên quan đến công việc của một penetration tester bạn có thể tham khảo:
Port: Port là một số nguyên dương đại diện cho một dịch vụ hoặc ứng dụng cụ thể trên một thiết bị mạng. Giao thức TCP/IP sử dụng các số port để xác định các dịch vụ như HTTP (port 80), HTTPS (port 443), SSH (port 22), và FTP (port 21). Penetration tester cần hiểu về các cổng phổ biến và cách sử dụng chúng để tìm ra các dịch vụ và lỗ hổng bảo mật. Firewall:
Firewall là một thành phần quan trọng trong mạng, giúp kiểm soát và bảo vệ mạng khỏi các mối đe dọa bên ngoài. Firewall có thể sử dụng các quy tắc để cho phép hoặc chặn giao thông dựa trên các thông tin như địa chỉ IP nguồn, cổng đích, hoặc giao thức. Penetration tester cần hiểu về cách hoạt động của firewall để xác định các điểm yếu và lỗ hổng trong quá trình kiểm thử.
TCP Three-Way Handshake: TCP sử dụng một quy trình gọi là "TCP Three-Way Handshake" để thiết lập kết nối đáng tin cậy giữa hai thiết bị mạng. Quá trình này bao gồm ba bước: SYN, SYN-ACK, và ACK. Ba bước này đảm bảo rằng cả người gửi và người nhận đều đã chuẩn bị sẵn sàng để truyền dữ liệu.
TCP và UDP Scanning: Penetration tester thường sử dụng các công cụ quét mạng để phát hiện các cổng mạng mở và xác định các dịch vụ đang chạy trên các cổng đó. Các kỹ thuật quét bao gồm TCP scanning (như TCP Connect, SYN, hoặc FIN scanning) và UDP scanning. Quét cổng giúp penetration tester xác định các dịch vụ đang chạy, tìm ra các lỗ hổng bảo mật và xác định các điểm yếu trong hệ thống. Wireshark:
Wireshark là một công cụ phân tích giao thức mạng mạnh mẽ và phổ biến. Nó cho phép penetration tester theo dõi, ghi lại và phân tích giao thông mạng trong thời gian thực. Wireshark giúp phát hiện các lỗ hổng bảo mật, xem dữ liệu truyền qua mạng và phân tích các giao thức TCP/IP.
Author: PoppinKhiem