Dự án Bảo mật Ứng dụng Toàn cầu Mở là một cộng đồng trực tuyến tạo ra các bài viết, phương pháp, tài liệu, công cụ và công nghệ có sẵn miễn phí trong lĩnh vực IoT, phần mềm hệ thống và bảo mật ứng dụng web. OWASP cung cấp các tài nguyên mở và miễn phí. Nó được lãnh đạo bởi một tổ chức phi lợi nhuận có tên là The OWASP Foundation. OWASP Top 10 - 2021 là kết quả được công bố của nghiên cứu gần đây dựa trên dữ liệu toàn diện được tổng hợp từ hơn 40 tổ chức đối tác.
OWASP thường xuyên công bố báo cáo Top 10 lỗ hổng bảo mật. Báo cáo nhắm đến các lỗ hổng trong ứng dụng web.
Trong bài đăng này, tôi muốn mô tả cách khắc phục một số lỗi thông qua Cổng API APISIX của Apache .
Vào năm 2021, báo cáo đề cập đến:
Để biết thêm chi tiết, vui lòng kiểm tra báo cáo đầy đủ.
Việc sửa một lỗ hổng phụ thuộc vào bản chất chính xác của nó. Ví dụ: việc sửa các Thành phần dễ bị tổn thương và lỗi thời được thực hiện theo quy trình, đòi hỏi kỷ luật trong việc quản lý các phiên bản và gỡ bỏ các phiên bản cũ hơn. Tuy nhiên, một số mang tính kỹ thuật và chỉ yêu cầu cấu hình phù hợp trong proxy ngược hoặc Cổng API, ví dụ : Giả mạo yêu cầu phía máy chủ .
Bảo mật là một chủ đề nhạy cảm vì việc tăng cường bảo mật không mang lại bất kỳ giá trị nào cho doanh nghiệp. Các nhà quản lý định hướng nghề nghiệp sẽ không quan tâm đến vấn đề bảo mật vì họ sẽ không thể chứng tỏ rằng họ đã tăng lợi nhuận của công ty lên X% trong lần đánh giá hàng năm tiếp theo. Trừ khi hội đồng quản trị xem xét an ninh một cách nghiêm túc, rất có thể sẽ không có ai quan tâm. Vì lý do này, hầu hết các tổ chức đều triển khai bảo mật dựa trên hộp kiểm, hay còn gọi là khả năng từ chối hợp lý. Nếu bạn quan tâm đến việc triển khai bảo mật đúng cách, tôi đã viết một số suy nghĩ trong một bài đăng blog trước đó: Hãy coi bảo mật là một rủi ro .
Nói chung, việc bảo mật các ứng dụng sẽ không nhận được nhiều ngân sách, nếu có. Do đó, chúng ta phải thông minh về nó và tìm kiếm một thành phần hiện có. May mắn thay, OWASP cung cấp một cấu hình sẵn dùng để xử lý Top 10, có thể sửa được cấu hình này thông qua cấu hình có tên Core Rule Set . Thật không may, nó nhắm mục tiêu ModSecurity:
ModSecurity, đôi khi được gọi là Modsec, là tường lửa ứng dụng web nguồn mở (WAF). Ban đầu được thiết kế như một mô-đun cho Máy chủ HTTP Apache, nó đã phát triển để cung cấp một loạt các khả năng lọc phản hồi và yêu cầu Giao thức truyền siêu văn bản cùng với các tính năng bảo mật khác trên một số nền tảng khác nhau bao gồm Máy chủ HTTP Apache, Microsoft IIS và Nginx. Đây là phần mềm miễn phí được phát hành theo giấy phép Apache 2.0.
Mặc dù về mặt lý thuyết có thể định cấu hình Nnginx thông qua cấu hình Apache APISIX, nhưng có một cách khác đơn giản hơn.
Mô tả về Bộ quy tắc cốt lõi khá phù hợp với nhu cầu của chúng tôi:
Bộ quy tắc cốt lõi ModSecurity OWASP® (CRS) là một bộ quy tắc phát hiện tấn công chung để sử dụng với ModSecurity hoặc tường lửa ứng dụng web tương thích. CRS nhằm mục đích bảo vệ các ứng dụng web khỏi một loạt các cuộc tấn công, bao gồm cả Top Ten của OWASP, với mức cảnh báo sai ở mức tối thiểu. CRS cung cấp khả năng bảo vệ chống lại nhiều loại tấn công phổ biến, bao gồm:
- Tiêm SQL (SQLi)
- Tập lệnh chéo trang (XSS)
- Bao gồm tệp cục bộ (LFI)
- Bao gồm tệp từ xa (RFI)
- Chèn mã PHP
- Chèn mã Java
- HTTPoxy
- Shellshock
- Tiêm shell Unix/Windows
- Cố định phiên
- Tập lệnh/Máy quét/Phát hiện Bot
- Rò rỉ siêu dữ liệu/lỗi
OWASP cũng cung cấp Coraza , một cổng ModSecurity có sẵn dưới dạng thư viện Go. Coraza Proxy Wasm được xây dựng dựa trên Coraza và triển khai proxy-wasm ABI , chỉ định một bộ giao diện Wasm cho proxy. Cuối cùng, Apache APISIX cung cấp khả năng tích hợp proxy-wasm.
Hãy tóm tắt:
Chúng ta có thể định cấu hình Apache APISIX với các giá trị mặc định lành mạnh và an toàn theo cách này. Hãy làm nó.
Điều đầu tiên trước tiên: Coraza không phải là một phần của bản phân phối APISIX của Apache. Tuy nhiên, thật đơn giản để thêm nó vào đây bằng Docker:
FROM apache/apisix:3.8.0-debian ENV VERSION 0.5.0 #1 ENV CORAZA_FILENAME coraza-proxy-wasm-${VERSION}.zip #1 ADD https://github.com/corazawaf/coraza-proxy-wasm/releases/download/$VERSION/$CORAZA_FILENAME . #2 USER root #3 RUN <<EOF apt-get install zip -y #4 unzip $CORAZA_FILENAME -d /usr/local/apisix/proxywasm rm $CORAZA_FILENAME apt-get remove zip -y chown -R apisix:apisix /usr/local/apisix/proxywasm EOF USER apisix #5
apisix
để tăng cường bảo mật. Vì cần cài đặt các gói nên chúng ta phải chuyển sang root
.unzip
vì nó chưa được cài đặt, giải nén kho lưu trữ đã tải xuống, xóa kho lưu trữ, gỡ cài đặt unzip
và thay đổi chủ sở hữu của thư mục được giải nénapisix
của người dùng
Bước tiếp theo là tự cấu hình APISIX để sử dụng plugin Coraza Wasm.
wasm: plugins: - name: coraza-filter #1 priority: 7999 #2 file: /usr/local/apisix/proxywasm/coraza-proxy-wasm.wasm #3
Dockerfile
bên trên
Cuối cùng, chúng ta có thể gán plugin cho các tuyến đường hoặc đặt nó làm quy tắc chung để áp dụng cho mọi tuyến đường. Tôi đang sử dụng cấu hình tĩnh:
global_rules: - id: 1 plugins: coraza-filter: #1 conf: directives_map: #2 default: - SecDebugLogLevel 9 #3 - SecRuleEngine On #4 - Include @crs-setup-conf #5 - Include @owasp_crs/*.conf #6 default_directives: default #7
coraza-filter
hiện có sẵndefault
, nhưng chúng tôi có thể xác định một số cái và sử dụng những cái khác nhau trong các tuyến khác nhaudefault
được xác định ở trên
Chúng tôi tiến hành xác định các tuyến đến https://httpbin.org/ để kiểm tra thiết lập của mình. Hãy gọi tuyến đường tới /get
:
curl localhost:9080?user=foobar
Câu trả lời đúng như mong đợi:
{ "args": { "user": "foobar" }, "headers": { "Accept": "*/*", "Host": "localhost", "User-Agent": "curl/8.4.0", "X-Amzn-Trace-Id": "Root=1-65b9fa13-75900dc029e156ec764ae204", "X-Forwarded-Host": "localhost" }, "origin": "192.168.65.1, 176.153.7.175", "url": "http://localhost/get?user=foobar" }
Bây giờ, hãy thử gửi JavaScript trong chuỗi truy vấn. Không thể nào yêu cầu này được mong đợi ở phía máy chủ, vì vậy cơ sở hạ tầng của chúng tôi sẽ bảo vệ chúng tôi khỏi yêu cầu đó.
curl 'localhost:9080?user=<script>alert(1)</script>'
Phản hồi là mã trạng thái HTTP 403. Nếu nhìn vào nhật ký, chúng ta có thể thấy những gợi ý sau:
Coraza: Warning. XSS Attack Detected via libinjection [file "@owasp_crs/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] Coraza: Warning. NoScript XSS InjectionChecker: HTML Injection Coraza: Warning. Javascript method detected Coraza: Access denied (phase 1). Inbound Anomaly Score Exceeded in phase 1
Coraza đã làm được việc!
Hầu hết các tổ chức không khuyến khích bảo mật. Do đó, chúng ta cần phải thông minh về nó và sử dụng các thành phần hiện có càng nhiều càng tốt.
Chúng tôi có thể củng cố Apache APISIX so với Top 10 OWASP bằng cách sử dụng Coraza và Bộ quy tắc cốt lõi.
Để đi xa hơn:
Mã nguồn hoàn chỉnh cho bài đăng này có thể được tìm thấy trên GitHub .
Được xuất bản lần đầu tại A Java Geek vào ngày 4 tháng 2 năm 2024