Türkçe

Kod değişikliklerini güvenlik açısından inceleme

Kod değişikliklerini güvenlik açısından inceleme

Pull request'leri ve yerel değişiklikleri güvenlik gerilemeleri açısından manuel olarak veya CI/CD içinde inceleyin.

Git tarafından izlenen tek bir değişiklik kümesindeki gerilemeleri bulmak için güvenlik değişikliği incelemesi çalıştırın. Codex, değiştirilen kaynak benzeri her dosyayı ve onu doğrudan destekleyen kodu inceler. İncelemeyi tam bir depo denetimine genişletmez.

Belirli bir değişiklik yerine deponun tamamını taramak istiyorsanız Güvenlik taraması çalıştırma bölümüne bakın.

Manuel inceleme çalıştırma

Masaüstü uygulamasında Security bölümünü açın, Scans öğesini ve ardından + Scan öğesini seçin. Depoyu seçtikten sonra Changes öğesini seçin. Commit edilmemiş değişiklikleri, tek bir commit'i veya bir temel ve uç revizyonu inceleyin. Deep scan, değişiklik taramalarında kullanılamaz.

Bir konuşmada Codex'ten commit edilmemiş değişiklikleri incelemesini de isteyebilirsiniz:

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

Bir commit veya dal aralığı için gerektiğinde her iki ucu da belirtin:

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.

Temel ve uç revizyonları yerel checkout'ta mevcutsa bir pull request'in adını da belirtebilirsiniz.

Kurulumdaki değişikliği doğrulama

  1. Changes öğesini seçin.
  2. Checkout yapılmış depoyu, geçerli dalı ve en son commit'i doğrulayın.
  3. Changes to review altında şunlardan birini seçin:
    • Geçerli çalışma ağacı için Uncommitted changes.
    • Tek commit'lik inceleme için en son commit.
    • Bir dal veya pull request aralığı için temel ve uç revizyon.
  4. Özetin incelemek istediğiniz değişikliği açıkladığını doğrulayın.
  5. Start scan öğesini seçin.

İş akışı başka bir dalı checkout etmez veya seçili çalışma ağacını değiştirmez. İstenen revizyon yerel olarak mevcut değilse incelemeden önce revizyonu getirin ya da yerel olarak mevcut bir temel ve uç sağlayın.

Bulgularla ilgili işlem yapma

Sonuçları inceledikten sonra kabul edilen bir bulguyu düzeltip doğrulayın veya bulguları dışa aktarıp takip edin.

CI/CD içinde incelemeleri otomatikleştirme

Çalıştırıcı Codex CLI'ı etkileşim olmadan çağırabiliyorsa aynı $codex-security:security-diff-scan becerisini CI içinden çalıştırın. Önce tarama kimlik bilgisini açığa çıkarmadan CLI'ı ve eklentiyi kurun:

npm install --global @openai/codex

Codex Security eklentisini CLI'a kurun:

codex plugin add codex-security@openai-curated

Yükleme komutu, herkese açık Codex CLI eklenti pazarını kullanır. CI'da belirli bir eklenti sürümüne veya özelliğine güvenmeden önce eklenti değişiklik günlüğünü kontrol edin.

Ardından CI gizli bilgi deponuzdaki bir OpenAI API key'i yalnızca tarama için CODEX_SECURITY_API_KEY olarak kullanıma açın:

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."

Tarama, çıktısını $TMPDIR/codex-security-scans/<repository>/<scan-id>/ konumuna yazar:

Dosya İçerik
report.md Tam tarama dizininin, okunabilir birincil giriş noktası.
findings/<slug>/ İstendiğinde ayrıntılı güvenlik açığı raporları ve destekleyici kavram kanıtlama dosyaları.
hardening/ İstendiğinde yapısal sağlamlaştırma rehberliği ve destekleyici öneriler.
findings.json Kararlı tanımlayıcılar, önem derecesi, güven düzeyi, kaynak konumları ve giderme bilgileri içeren bulgular. Onaylanmış dâhilî güvenlik iş akışlarını veya sonraki araçları besler.
scan-manifest.json İncelenen hedefi, revizyonları ve yapıt karmalarını içeren mühürlü tarama makbuzu.
coverage.json İncelenen ve ertelenen yüzeyler, hariç tutulanlar ve kapsamın eksiksizlik düzeyi.

findings.json şeması tam yapıyı tanımlar. Şema şu alanları içerir:

Alan Tür Açıklama
documentType Dize Belgeyi codex-security.findings olarak tanımlar.
schemaVersion Dize Bulgular şemasının sürümünü tanımlar.
scanId Dize Bulguları üreten taramayı tanımlar.
findings Dizi Sıfır veya daha fazla bulgu nesnesi içerir.
findings[].findingId Dize Bulgu parmak izinden türetilen kararlı bulgu tanımlayıcısı.
findings[].occurrenceId Dize Bulguyla belirli bir taramada karşılaşılan bu örneği tanımlar.
findings[].ruleId Dize Güvenlik açığı ailesini tanımlar.
findings[].identity Nesne Anlamsal bağlantı noktasını ve isteğe bağlı eş örnek tanımlayıcısını içerir.
findings[].fingerprints Nesne Parmak izi algoritmasını ve birincil parmak izini içerir.
findings[].title Dize Kısa bulgu başlığını sağlar.
findings[].summary Dize Güvenlik açığını ve etkisini özetler.
findings[].severity Nesne Önem derecesini ve isteğe bağlı puanlama ayrıntılarını içerir.
findings[].confidence Nesne Güven düzeyini ve gerekçesini içerir.
findings[].taxonomy Nesne Güvenlik açığı kategorisini ve CWE tanımlayıcılarını içerir.
findings[].locations Dizi Etkilenen dosyaları, satır numaralarını ve konum rollerini listeler.
findings[].remediation Dize Önerilen düzeltmeyi açıklar.
findings[].provenance Nesne Bulguyu oluşturan kaynağı tanımlar.

Örneğin bu komut, her bulgu için sekmeyle ayrılmış bir satır yazdırır:

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

Bu örnekler; Node.js ve npm, Git, Python 3, jq ve sağlayıcının komut satırı araçlarının bulunduğu güvenilir bir Linux çalıştırıcısı varsayar. npm genel paket öneki yazılabilir olmalıdır.

CI sağlayıcınıza uygun örneği seçin. Tarama sonuçları hassas güvenlik açığı ayrıntıları içerebilir. Yapıtları gizli tutun ve bulguları yalnızca hedef kitleyi, içeriği ve gerekli onayları inceledikten sonra yayımlayın.

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

Örnekler, çatallanmış pull request'leri atlar. Kimlik bilgisi gerektiren işleri yalnızca korumalı bir işlem hattı tanımından ve yalnızca tarama kimlik bilgisine erişmesine güvenilen katkıda bulunanlar için çalıştırın. Yapılandırılmış bulguları, manifesti, kapsamı ve report.md öğesini, talep edilen tüm findings/ veya hardening/ çıktılarıyla birlikte tutmak için codex-security-scans öğesini arşivleyin. Önce tavsiye niteliğindeki sonuçlarla başlayın; işi zorunlu bir denetim hâline getirmeden önce kapsamı ve çalışma süresini inceleyin.

API key kullanımı ve korumalı alan denetimleri için Etkileşimsiz mod bölümüne bakın. Kuruluşunuz Codex GitHub Action kullanımına izin veriyorsa CLI'ı çalışma zamanında kurabilir; ancak yine de önce eklentiyi kurmalı ve eylemin codex-home girdisini aynı CODEX_HOME öğesine yönlendirmelisiniz.