Memahami hasil CodeQL

Selesai

Di unit sebelumnya, Anda membuat database dan memindai file yang diekstrak dari kode Anda. Sekarang Anda dapat melihat hasilnya dan menentukan apakah ada kerentanan keamanan untuk ditangani.

Hasil kueri yang ditafsirkan secara otomatis ditampilkan dalam kode sumber di ekstensi CodeQL untuk Visual Studio Code. Hasil output yang dihasilkan CodeQL CLI dapat dalam banyak format untuk digunakan dengan berbagai alat.

Anda dapat mengontrol bagaimana hasil analisis ditampilkan dalam kode sumber dengan memodifikasi pernyataan select kueri. Anda dapat membuat hasilnya jelas dan mudah dipahami pengguna lain saat mengembangkan kueri. Saat Anda menulis kueri Anda sendiri di konsol kueri atau di ekstensi CodeQL untuk Visual Studio Code, tidak ada batasan tentang apa yang dapat dipilih.

Jika Anda ingin menggunakan kueri untuk membuat pemberitahuan dalam pemindaian kode GitHub atau mendapatkan hasil analisis yang valid dengan menggunakan CodeQL CLI, Anda perlu membuat laporan pernyataan select menampilkan hasil dalam format yang dibutuhkan.

Alur kerja remediasi dengan Copilot Autofix

Setelah CodeQL mengidentifikasi masalah, langkah terpenting adalah menyelesaikannya. GitHub mengintegrasikan deteksi dengan remediasi dengan memungkinkan Anda berpindah langsung dari pemberitahuan ke perbaikan yang diusulkan.

Memperbaiki pemberitahuan dengan Copilot Autofix

Saat Anda membuka pemberitahuan CodeQL di tab Keamanan, GitHub menampilkan detail tentang masalah tersebut, termasuk kode yang terpengaruh, tingkat keparahan, dan bagaimana masalah diperkenalkan.

Untuk peringatan yang didukung, Anda juga akan melihat Copilot Autofix.

Copilot Autofix menganalisis pemberitahuan dan menghasilkan perbaikan yang diusulkan. Hal ini mencakup:

  • Perubahan kode yang menyelesaikan masalah
  • Penjelasan tentang mengapa masalah terjadi
  • Panduan tentang cara perbaikan mengatasi masalah

Alih-alih menulis perbaikan secara manual dari awal, Anda mulai dari perubahan yang disarankan.

Alur kerja umum terlihat seperti ini:

  1. CodeQL berjalan di alur kerja Anda dan membuat pemberitahuan.
  2. Anda membuka pemberitahuan dan meninjau kode yang terpengaruh.
  3. Copilot Autofix menghasilkan perbaikan yang disarankan.
  4. Anda meninjau penjelasan dan mengusulkan perubahan.
  5. Anda menerapkan perbaikan, yang akan membuat pull request.
  6. Pull request menjalani serangkaian pemeriksaan dan ditinjau sebelum digabungkan.

Alur kerja ini menghubungkan deteksi langsung ke remediasi tanpa meninggalkan antarmuka GitHub.

Copilot Autofix tidak menerapkan perubahan secara otomatis. Anda bertanggung jawab untuk meninjau dan menyetujui perbaikan. Ini memastikan bahwa:

  • Perbaikan selaras dengan basis kode Anda.
  • Anda dapat menyesuaikan implementasi jika diperlukan.
  • Perubahan melewati proses peninjauan yang ada.

Autofix paling efektif untuk:

  • Pola kerentanan umum, seperti risiko injeksi atau penggunaan API yang tidak aman.
  • Masalah yang dapat diatasi dengan perubahan kode yang jelas dan dilokalkan.

Untuk masalah yang lebih kompleks, Autofix mungkin memberikan panduan, tetapi Anda mungkin perlu memodifikasi perbaikan atau menerapkan solusi kustom.

Perbaikan yang disarankan dalam pemberitahuan

Bahkan ketika Autofix tidak tersedia, beberapa pemberitahuan menyertakan perbaikan yang disarankan.

Saran ini:

  • Sorot bagian kode yang harus berubah.
  • Berikan panduan tentang cara menyelesaikan masalah.

Anda dapat menggunakan saran ini sebagai titik awal saat menulis perbaikan Anda.

Memperbaiki dependensi dengan Dependabot

Tidak semua kerentanan berasal dari kode Anda. Beberapa diperkenalkan melalui dependensi.

Dependabot membantu mengatasi masalah ini secara otomatis dengan:

  • Mendeteksi dependensi yang rentan.
  • Membuat pull request menggunakan versi yang diperbarui.
  • Memungkinkan Anda meninjau dan menggabungkan perbaikan.

Permintaan pull ini mengikuti alur kerja yang sama dengan Autofix:

  1. Perubahan diusulkan.
  2. Pemeriksaan dijalankan.
  3. Pembaruan ditinjau dan digabungkan.

Hal ini membuat remediasi dependensi konsisten dengan cara Anda memperbaiki masalah kode aplikasi.

Mengotomatiskan alur kerja remediasi

Anda dapat menggunakan GitHub Actions untuk mengotomatiskan bagaimana perbaikan ditangani.

Misalnya, alur kerja dapat:

  • Jalankan pengujian pada pull request Autofix atau Dependabot.
  • Terapkan label berdasarkan tingkat keparahan.
  • Memerlukan persetujuan untuk perubahan berisiko tinggi.
  • Gabungkan pembaruan berisiko rendah secara otomatis.

Alur kerja ini memastikan bahwa remediasi adalah:

  • Konsisten di seluruh tim.
  • Divalidasi sebelum menggabungkan.
  • Terintegrasi ke dalam proses pengembangan Anda.

Dari deteksi hingga resolusi

Dalam alur kerja lengkap:

  1. CodeQL mendeteksi kerentanan.
  2. Copilot Autofix menyarankan perbaikan.
  3. Permintaan pull dibuat.
  4. GitHub Actions memvalidasi perubahan.
  5. Perbaikan tersebut telah ditinjau dan digabung.

Dengan menggabungkan analisis CodeQL dengan otomatisasi Copilot Autofix, Dependabot, dan alur kerja, Anda membuat sistem yang tidak hanya menemukan masalah tetapi juga membantu menyelesaikannya secara efisien.

Bertindak berdasarkan pemberitahuan pemindaian kode

Anda dapat menyiapkan pemindaian kode untuk memeriksa kode di repositori. Anda dapat menggunakan analisis CodeQL default, analisis non-Microsoft, atau jenis analisis lainnya. Pemberitahuan yang dihasilkan ditampilkan bersama satu sama lain di repositori.

Analisis CodeQL bawaan GitHub mungkin menyertakan lebih banyak properti untuk peringatan daripada hasil dari alat non-Microsoft atau dari kueri kustom. Dalam alur kerja default, pemindaian kode menganalisis kode Anda secara berkala di cabang default dan selama pull request.

Setiap pemberitahuan mencakup informasi berikut:

  • Masalah dengan kode dan nama alat yang mengidentifikasinya.
  • Baris kode yang memicu pemberitahuan.
  • Properti peringatan, seperti tingkat keparahan.
  • Tingkat keparahan keamanan.
  • Titik ketika masalah dimulai.
  • Sifat masalahnya.

Informasi juga mencakup cara memperbaiki masalah saat analisis CodeQL mengidentifikasi pemberitahuan. Selain itu, pemindaian kode melalui CodeQL dapat mendeteksi masalah aliran data dalam kode Anda.

Cuplikan layar pemberitahuan analisis CodeQL di GHAS.

Selain memperbaiki kerentanan secara manual, Anda dapat mengotomatiskan remediasi dependensi menggunakan pembaruan keamanan Dependabot.

Ketika Dependabot mendeteksi dependensi yang rentan, Dependabot membuat pull request untuk memperbarui dependensi tersebut. Permintaan pull ini dapat diintegrasikan ke dalam alur kerja otomatis untuk menyederhanakan remediasi.

Mengotomatiskan remediasi dependensi dengan Dependabot

Alur kerja otomatisasi umum mengikuti pola ini:

  1. Dependabot membuat permintaan pull untuk memperbarui dependensi yang rentan.
  2. Alur kerja GitHub Actions dipicu pada peristiwa tersebutpull_request.
  3. Alur kerja memeriksa apakah permintaan pull dibuat oleh dependabot[bot].
  4. Metadata tentang pembaruan (seperti jenis dependensi atau perubahan versi) dapat digunakan untuk menentukan tindakan berikutnya.
  5. Alur kerja menjalankan pemeriksaan validasi, menerapkan label, atau mengaktifkan penggabungan otomatis untuk pembaruan berisiko rendah.

Contoh berikut menunjukkan alur kerja GitHub Actions sederhana yang hanya berjalan untuk permintaan pull Dependabot. Ini memvalidasi pembaruan dan dapat mengaktifkan penggabungan otomatis setelah pemeriksaan lulus.

name: Dependabot remediation

on:
  pull_request:
    branches:
      - main

permissions:
  pull-requests: write

jobs:
  dependabot:
    if: github.event.pull_request.user.login == 'dependabot[bot]'
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Run tests
        run: npm test

      - name: Enable auto-merge for approved updates
        if: ${{ success() }}
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_URL: ${{ github.event.pull_request.html_url }}
        run: gh pr merge --auto --merge "$PR_URL"

Pendekatan ini membantu tim mengurangi upaya manual sambil memastikan bahwa pembaruan dependensi divalidasi sebelum digabungkan.

Dalam skenario produksi, penggabungan otomatis biasanya terbatas pada pembaruan berisiko rendah, seperti rilis patch, dan dikombinasikan dengan aturan perlindungan cabang, pemeriksaan status yang diperlukan, dan kebijakan peninjauan.

Memberi tahu tim tentang aktivitas remediasi

Untuk meningkatkan visibilitas ke dalam pembaruan dependensi, tim sering mengintegrasikan Dependabot dengan sistem pemberitahuan eksternal.

Selain pemberitahuan GitHub, Anda dapat menggunakan:

  • Integrasi Slack atau Microsoft Teams untuk kesadaran tim.
  • GitHub webhook untuk integrasi kustom dan alur otomatisasi.

Misalnya, alur kerja atau webhook dapat memberi tahu tim saat:

  • Sebuah pull request Dependabot dibuat.
  • Pemeriksaan validasi gagal.
  • Pembaruan keamanan digabungkan.

Pemberitahuan ini membantu tim merespons dengan cepat ketika remediasi membutuhkan perhatian.

Pemberitahuan aliran data

Analisis aliran data menemukan potensi masalah keamanan dalam kode, termasuk:

  • Menggunakan data dengan cara yang mengorbankan keamanan.
  • Meneruskan argumen berbahaya ke fungsi.
  • Membocorkan informasi sensitif.

GitHub menunjukkan kepada Anda bagaimana data bergerak melalui kode saat kode memindai melaporkan pemberitahuan aliran data. Anda dapat menggunakan pemberitahuan aliran data ini untuk mengidentifikasi area kode Anda yang membocorkan informasi sensitif. Pengetahuan ini dapat membantu Anda mengidentifikasi titik masuk untuk serangan oleh pengguna berbahaya.

Tingkat keparahan

Setiap hasil pemindaian kode yang memiliki tingkat keparahan Kesalahan menyebabkan kegagalan pemeriksaan secara default.

Tingkat keparahan pemberitahuan adalah:

  • Kesalahan
  • Warning
  • Note

Anda dapat menentukan tingkat keparahan di mana permintaan pull yang memicu pemberitahuan pemindaian kode harus gagal.

Tingkat keparahan keamanan

Kueri keamanan yang dihasilkan dari pemindaian kode menampilkan tingkat keparahan keamanan sebagai peringatan.

Tingkat keparahan keamanan adalah:

  • Penting
  • High
  • Medium
  • Low

GitHub menggunakan data Common Vulnerability Scoring System (CVSS) untuk menghitung tingkat keparahan keamanan pemberitahuan.

Setiap hasil pemindaian kode yang memiliki tingkat keparahan keamanan Kritis atau Tinggi menyebabkan kegagalan pemeriksaan secara default. Anda dapat menentukan tingkat keparahan keamanan mana yang harus menyebabkan kegagalan pemeriksaan untuk hasil pemindaian kode.

Menutup pemberitahuan pemindaian kode

Anda memiliki dua cara untuk menutup pemberitahuan:

  • Perbaiki masalah dalam kode.
  • Menutup atau menghapus pemberitahuan.

Menutup pemberitahuan pemindaian kode

Menutup pemberitahuan adalah cara menutup pemberitahuan yang menurut Anda tidak perlu diperbaiki. Misalnya, Anda mungkin menutup pemberitahuan untuk kesalahan dalam kode yang digunakan hanya untuk pengujian. Anda juga dapat menutup pemberitahuan jika upaya yang diperlukan untuk memperbaiki kesalahan lebih besar dari potensi manfaat meningkatkan kode.

Anda dapat menutup pemberitahuan dari anotasi pemindaian kode dalam kode atau dari daftar ringkasan pada tab Keamanan . Untuk menutup pemberitahuan dari daftar, pilih menu Tutup pemberitahuan , pilih alasan pemberhentian, lalu pilih tombol Tutup pemberitahuan .

Animasi yang memperlihatkan menu dropdown dan tombol untuk menutup pemberitahuan pemindaian kode.

Saat Anda menutup pemberitahuan:

  • Alert diabaikan di semua cabang.
  • Pemberitahuan dihapus dari jumlah pemberitahuan saat ini untuk proyek Anda.
  • Pemberitahuan dipindahkan ke daftar Tertutup dalam ringkasan pemberitahuan. Anda dapat membukanya kembali dari sana jika perlu.
  • Alasan mengapa Anda menutup pemberitahuan direkam.
  • Waktu berikutnya pemindaian kode dilakukan, kode yang sama tidak akan menghasilkan peringatan.