Skip to main content

OWASP Dependency-Check

Giới thiệu

OWASP Dependency-Check là một công cụ phân tích sự phụ thuộc phần mềm (SCA) cố gắng phát hiện các lỗ hổng được tiết lộ công khai có trong các phụ thuộc của dự án. Điều này được thực hiện bằng cách xác định xem một phụ thuộc cụ thể có một định danh Common Platform Enumeration (CPE) không. Nếu tìm thấy, nó sẽ tạo ra một báo cáo liên kết đến các mục Common Vulnerabilities Enumeration (CVE) liên quan. Báo cáo sẽ cung cấp mô tả về từng lỗ hổng cụ thể và gợi ý các phương pháp vá lỗ hổng đó.

Cách hoạt động của công cụ này là thông qua việc kiểm tra xem một phần mềm phụ thuộc cụ thể có một định danh Common Platform Enumeration (CPE) không. Nếu có, Dependency-Check sẽ tạo ra các báo cáo chi tiết liên quan đến các lỗ hổng đã được công bố (CVE) và liên kết với chúng. Điều này giúp đội phát triển có thể hiểu rõ hơn về các vấn đề bảo mật và đưa ra các biện pháp cần thiết.

Tích hợp với Gitlab CI

Tạo request cấp phát CICD trước nếu project chưa sử dụng quy trình CICD. https://jira8.runsystem.info/plugins/servlet/desk/portal/1/create/470

Cấu hình file .gitlab-ci.yml cho dependency check (tích hợp chung với sonarqube, đặt phía trước sonarqube stage)

stages:
- dependencycheck # dòng này phải đặt trước sonarqube ở phần stage
- sonarqube

dependencycheck:
stage: dependencycheck
image:
name: mannk98/dependency-check:latest
entrypoint: [ "" ]
script:
- /usr/share/dependency-check/bin/dependency-check.sh --project Project --out . --scan . --format "HTML" --format "CSV" --format "JSON" --enableExperimental --failOnCVSS 4 --noupdate
allow_failure: true
artifacts:
when: always # or 'on_failure'
paths:
- ./dependency-check-report.html
- ./dependency-check-report.csv
- ./dependency-check-report.csv
expire_in: 1 week

sonarqube:
stage: sonarqube
image:
name: sonarsource/sonar-scanner-cli:latest
entrypoint: [ "" ]
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"
SONAR_HOST_URL: https://sq.runsystem.info
SONAR_TOKEN: "${SONAR_TOKEN}"
SONAR_SCANNER_OPTS: "-Dsonar.projectKey=${SONAR_PROJECT_KEY}"
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner -Dsonar.sources=. -Dsonar.dependencyCheck.htmlReportPath=./dependency-check-report.html -Dsonar.exclusions=**/dependency-check-report.html,**/*.java,**/*.yml -Dsonar.dependencyCheck.severity.critical=4.0
allow_failure: true
  • Tên dự án trên sonarqube SONARPROJECT_KEY có dạng: [Tên chi nhánh].[Tên bộ phận].[Mã dự án trên jira]<Tên dự án trên jira>_Git_Branch ví dụ: HN.BSD.[OPS]OnePageShop_buyer_master
  • Lưu ý: với project Java, cần build trước khi quét, script của sonar trong file gitlab.ci đuợc thay bằng:
script:
- sonar-scanner -Dsonar.sources=. -Dsonar.dependencyCheck.htmlReportPath=./dependency-check-report.html -Dsonar.exclusions=**/dependency-check-report.html,**/*.yaml,**/*.yml,**/*.sh -Dsonar.java.binaries=. -Dsonar.dependencyCheck.severity.critical=7.0

Truy cập kết quả quét

Cách 1

Kết quả của quá trình quét sẽ được đẩy lên sonar project tương ứng. Vào mục More → Dependency-Check để xem kết quả.

Trang kết quả sẽ có dạng như hình bên duới, trang này bao gồm tóm tắt về các lỗ hổng của những phụ thuộc của project. Xem mục bôi đỏ để hiểu cách đọc report.

Cách 2

Có thể xem kết quả thông qua file CSV bằng cách download artifact của CICD Pipeline:

Đọc kết quả

Mục summary tổng hợp kết quả test repo bao gồm:

  • Vulnerable Dependencies: số thư viện, package có lỗ hổng
  • Vulnerabilities Found: tổng số lỗ hổng tìm được.
  • Highest Severity: xếp hạng mức độ nghiêm trọng của lỗ hổng.
  • CVE Count(common vulnerability enumeration): số lỗ hổng của từng thư viện.

Tham khảo cách đọc report: https://jeremylong.github.io/DependencyCheck/general/thereport.html

Mục dependency mô tả chi tiết về từng lỗ hổng, và cách fix với từng lỗ hổng cụ thể. Click vào các mã lỗ hổng (khoanh đỏ) để biết chi tiết hơn về mô tả và cách fix.

Lưu ý: Đôi khi sẽ xuất hiện những phần phụ thuộc không thể tìm thấy trong dự án (được lưu trong cache hoặc text file do được add vào trước đó, nhưng không còn dùng nữa). Hãy dùng trình quản lý package (tương ứng với từng ngôn ngữ) để dọn dẹp repo, clear package không sử dụng và cập nhật các package đang sử dụng lên phiên bản mới nhất.