paint-brush
Cách giải quyết các lỗ hổng web bằng cổng API APISIX của Apachetừ tác giả@nfrankel
302 lượt đọc
302 lượt đọc

Cách giải quyết các lỗ hổng web bằng cổng API APISIX của Apache

từ tác giả Nicolas Fränkel9m2024/02/10
Read on Terminal Reader

dài quá đọc không nổi

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.
featured image - Cách giải quyết các lỗ hổng web bằng cổng API APISIX của Apache
Nicolas Fränkel HackerNoon profile picture


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.

-- Trang web OWASP


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 .

Top 10 OWASP 2021

Vào năm 2021, báo cáo đề cập đến:


  • A01:2021-Kiểm soát truy cập bị hỏng
  • A02:2021-Lỗi mật mã
  • A03:2021-Tiêm
  • A04:2021-Không an toàn
  • A05:2021-Cấu hình bảo mật sai
  • A06:2021-Các thành phần dễ bị tổn thương và lỗi thời
  • A07:2021-Lỗi nhận dạng và xác thực
  • A08:2021-Lỗi về tính toàn vẹn của phần mềm và dữ liệu
  • A09:2021-Lỗi giám sát và ghi nhật ký bảo mật
  • A10:2021-Giả mạo yêu cầu phía máy chủ


Để 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ủ .

Không ai quan tâm đến an ninh

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.

-- ModSecurity trên Wikipedia


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.

Bộ quy tắc cốt lõi của OWASP và Coraza

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

-- Trang web Bộ quy tắc cốt lõi ModSecurity của OWASP®


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.

Để tất cả chúng cùng nhau

Hãy tóm tắt:


  1. OWASP cung cấp danh sách 10 lỗ hổng bảo mật web hàng đầu
  2. Nó triển khai chúng cho ModSecurity thông qua Bộ quy tắc cốt lõi
  3. Coraza là một cổng ModSecurity, có sẵn dưới dạng triển khai proxy-wasm


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
  1. Xác định các biến để bảo trì tốt hơn
  2. Nhận bản phát hành Coraza Wasm
  3. Trong các phiên bản APISIX gần đây, người dùng được 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 .
  4. Cài đặt 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én
  5. Chuyển về apisix 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
  1. Tên bộ lọc được đặt trong mã Wasm
  2. Đặt mức độ ưu tiên cao nhất để nó chạy trước bất kỳ plugin nào khác
  3. Đường dẫn đến file giải nén, xem 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
  1. Định cấu hình plugin coraza-filter hiện có sẵn
  2. Xác định các cấu hình. Ở đây, chúng tôi xác định một cái duy nhất, default , 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 nhau
  3. Tăng cấp độ nhật ký để xem điều gì xảy ra trong nhật ký
  4. Bật động cơ
  5. Sử dụng thiết lập Coraza
  6. Sử dụng tất cả các quy tắc. Chúng tôi có thể chọn những thứ chúng tôi muốn để kiểm soát chi tiết hơn
  7. Sử dụng cấu hình default đượ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!

Phần kết luận

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