Tiếng Việt

Rà soát thay đổi mã nguồn về bảo mật

Rà soát các pull request và thay đổi cục bộ để phát hiện lỗi bảo mật tái phát theo cách thủ công hoặc trong CI/CD.

Chạy quy trình rà soát thay đổi bảo mật để tìm lỗi tái phát trong một tập hợp thay đổi được Git quản lý. Codex rà soát từng tệp tương tự mã nguồn đã thay đổi và mã hỗ trợ trực tiếp cho tệp đó. Quy trình này không mở rộng thành một cuộc kiểm tra toàn bộ kho lưu trữ.

Nếu muốn quét toàn bộ kho lưu trữ thay vì một thay đổi cụ thể, hãy xem Chạy quy trình quét bảo mật.

Chạy rà soát thủ công

Trong ứng dụng máy tính, mở Security, chọn Scans, rồi chọn + Scan. Chọn kho lưu trữ, sau đó chọn Changes. Rà soát các thay đổi chưa commit, một commit duy nhất hoặc một bản sửa đổi cơ sở và bản sửa đổi đầu. Deep scan không khả dụng cho quy trình quét thay đổi.

Bạn cũng có thể yêu cầu Codex rà soát các thay đổi chưa commit trong một cuộc trò chuyện:

Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.

Đối với một commit hoặc phạm vi nhánh, hãy xác định cả hai đầu khi cần:

Use $codex-security:security-diff-scan to review the changes from origin/main to HEAD for security regressions. Focus on authentication, authorization, input handling, filesystem access, network requests, and secrets.

Bạn cũng có thể nêu tên một pull request khi các bản sửa đổi cơ sở và đầu của nó có sẵn trong bản checkout cục bộ.

Xác nhận thay đổi trong bước thiết lập

  1. Chọn Changes.
  2. Xác nhận kho lưu trữ đã checkout, nhánh hiện tại và commit mới nhất.
  3. Trong Changes to review, chọn:
    • Uncommitted changes cho cây làm việc hiện tại.
    • Commit mới nhất để rà soát một commit duy nhất.
    • Một bản sửa đổi cơ sở và bản sửa đổi đầu cho phạm vi nhánh hoặc pull request.
  4. Xác nhận rằng phần tóm tắt mô tả đúng thay đổi bạn định rà soát.
  5. Chọn Start scan.

Quy trình làm việc không checkout nhánh khác hoặc thay đổi cây làm việc đã chọn. Nếu một bản sửa đổi được yêu cầu không có sẵn cục bộ, hãy fetch bản sửa đổi đó trước khi rà soát hoặc cung cấp bản sửa đổi cơ sở và đầu có sẵn cục bộ.

Xử lý các phát hiện

Sau khi rà soát kết quả, hãy khắc phục và xác minh một phát hiện đã được chấp nhận hoặc xuất và theo dõi các phát hiện.

Tự động hóa rà soát trong CI/CD

Chạy cùng kỹ năng $codex-security:security-diff-scan từ CI khi runner có thể gọi Codex CLI mà không cần tương tác. Trước tiên, hãy cài đặt CLI và plugin mà không làm lộ thông tin xác thực dùng để quét:

npm install --global @openai/codex

Cài đặt plugin Codex Security trong CLI:

codex plugin add codex-security@openai-curated

Lệnh cài đặt sử dụng chợ plugin Codex CLI công khai, nơi có thể cung cấp phiên bản khác với danh mục ứng dụng máy tính được lưu trữ. Hãy kiểm tra nhật ký thay đổi của plugin trước khi phụ thuộc vào một phiên bản hoặc tính năng plugin cụ thể trong CI.

Sau đó, chỉ cung cấp một OpenAI API key từ kho bí mật CI dưới dạng CODEX_SECURITY_API_KEY trong thời gian quét:

CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
  --sandbox workspace-write \
  "Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."

Quy trình quét ghi đầu ra vào $TMPDIR/codex-security-scans/<repository>/<scan-id>/:

Tệp Nội dung
report.md Điểm vào chính, dễ đọc, dẫn đến toàn bộ thư mục quét.
findings/<slug>/ Một báo cáo lỗ hổng chi tiết cho mỗi phát hiện cần báo cáo, kèm các tệp bằng chứng khái niệm hỗ trợ khi có.
hardening/ Danh mục củng cố cấu trúc cùng các đề xuất hoặc sơ đồ hỗ trợ khi quy trình quét có phát hiện cần báo cáo.
findings.json Các phát hiện kèm mã định danh ổn định, mức độ nghiêm trọng, độ tin cậy, vị trí nguồn và biện pháp khắc phục. Dùng cho các quy trình bảo mật nội bộ đã được phê duyệt hoặc công cụ hạ nguồn.
scan-manifest.json Biên nhận quét đã niêm phong, chứa mục tiêu được rà soát, các bản sửa đổi và hàm băm của artifact.
coverage.json Các bề mặt đã rà soát và hoãn lại, trường hợp loại trừ và mức độ đầy đủ của phạm vi.

Lược đồ findings.json định nghĩa cấu trúc đầy đủ. Lược đồ bao gồm các trường sau:

Trường Kiểu Mô tả
documentType Chuỗi Xác định tài liệu là codex-security.findings.
schemaVersion Chuỗi Xác định phiên bản lược đồ phát hiện.
scanId Chuỗi Xác định quy trình quét đã tạo ra các phát hiện.
findings Mảng Chứa không hoặc nhiều đối tượng phát hiện.
findings[].findingId Chuỗi Mã định danh phát hiện ổn định được tạo từ dấu vân tay của phát hiện.
findings[].occurrenceId Chuỗi Xác định lần xuất hiện này của phát hiện trong một quy trình quét cụ thể.
findings[].ruleId Chuỗi Xác định họ lỗ hổng.
findings[].identity Đối tượng Chứa điểm neo ngữ nghĩa và mã định danh phiên bản cùng cấp không bắt buộc.
findings[].fingerprints Đối tượng Chứa thuật toán dấu vân tay và dấu vân tay chính.
findings[].title Chuỗi Cung cấp tiêu đề ngắn của phát hiện.
findings[].summary Chuỗi Tóm tắt lỗ hổng và tác động của nó.
findings[].severity Đối tượng Chứa mức độ nghiêm trọng và thông tin chấm điểm không bắt buộc.
findings[].confidence Đối tượng Chứa mức độ tin cậy và cơ sở lý giải.
findings[].taxonomy Đối tượng Chứa danh mục lỗ hổng và các mã định danh CWE.
findings[].locations Mảng Liệt kê các tệp bị ảnh hưởng, số dòng và vai trò vị trí.
findings[].remediation Chuỗi Mô tả cách khắc phục được đề xuất.
findings[].provenance Đối tượng Xác định nguồn của phát hiện.

Ví dụ, lệnh này in một hàng được phân tách bằng tab cho mỗi phát hiện:

jq -r '
  .findings[] |
  [.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
  @tsv
' findings.json

Các ví dụ này giả định một runner Linux đáng tin cậy có Node.js và npm, Git, Python 3, jq và các công cụ dòng lệnh của nhà cung cấp. Tiền tố gói toàn cục npm phải có quyền ghi.

Chọn ví dụ dành cho nhà cung cấp CI của bạn. Kết quả quét có thể chứa chi tiết nhạy cảm về lỗ hổng. Hãy giữ artifact ở chế độ riêng tư và chỉ công bố phát hiện sau khi rà soát đối tượng, nội dung và các phê duyệt bắt buộc.

name: Codex Security review

on:
  pull_request:

jobs:
  security-review:
    if: github.event.pull_request.head.repo.full_name == github.repository
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v5
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          fetch-depth: 0
          persist-credentials: false

      - name: Install Codex Security
        env:
          CODEX_HOME: ${{ runner.temp }}/codex-home
        run: |
          npm install --global @openai/codex
          codex plugin add codex-security@openai-curated

      - name: Review code changes
        env:
          CODEX_SECURITY_API_KEY: ${{ secrets.CODEX_SECURITY_API_KEY }}
          CODEX_HOME: ${{ runner.temp }}/codex-home
          TMPDIR: ${{ runner.temp }}/codex-security
          BASE_SHA: ${{ github.event.pull_request.base.sha }}
          HEAD_REVISION: ${{ github.event.pull_request.head.sha }}
        run: |
          BASE_REVISION="$(git merge-base "$BASE_SHA" "$HEAD_REVISION")"
          CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
            --sandbox workspace-write \
            "Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."

      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: codex-security-review
          path: ${{ runner.temp }}/codex-security/codex-security-scans

Các ví dụ bỏ qua pull request từ fork. Chỉ chạy các tác vụ có thông tin xác thực từ một định nghĩa pipeline được bảo vệ và chỉ cho những người đóng góp được tin cậy sử dụng thông tin xác thực quét. Lưu trữ codex-security-scans để giữ các phát hiện có cấu trúc, manifest, artifact phạm vi, report.md cùng các đầu ra findings/hardening/ được liên kết với nó. Hãy bắt đầu với kết quả mang tính tư vấn và rà soát phạm vi cũng như thời gian chạy trước khi đặt tác vụ thành bước kiểm tra bắt buộc.

Để biết cách xử lý API key và kiểm soát sandbox, hãy xem Chế độ không tương tác. Nếu tổ chức của bạn cho phép Codex GitHub Action, công cụ này có thể cài đặt CLI khi chạy, nhưng bạn vẫn phải cài đặt plugin trước và trỏ đầu vào codex-home của action tới chính CODEX_HOME đó.