Pemindaian kode

Pemindaian kode di GitHub Advanced Security untuk Azure DevOps memungkinkan Anda menganalisis kode di repositori Azure DevOps untuk menemukan kerentanan keamanan dan kesalahan pengodean. Setiap masalah yang diidentifikasi oleh analisis akan ditampilkan sebagai peringatan. Pemindaian kode menggunakan CodeQL untuk mengidentifikasi kerentanan.

CodeQL adalah mesin analisis kode yang dikembangkan oleh GitHub untuk mengotomatiskan pemeriksaan keamanan. Anda dapat menganalisis kode menggunakan CodeQL dan menampilkan hasilnya sebagai pemberitahuan pemindaian kode.

GitHub Advanced Security untuk Azure DevOps berfungsi dengan Azure Repos. Jika Anda ingin menggunakan GitHub Advanced Security dengan repositori GitHub, lihat GitHub Advanced Security.

Pemberitahuan CodeQL

Pakar GitHub, peneliti keamanan, dan kontributor komunitas menulis dan memelihara kueri CodeQL default yang digunakan untuk pemindaian kode. Kueri diperbarui secara teratur untuk meningkatkan analisis dan mengurangi hasil positif palsu. Kueri sumber terbuka, sehingga Anda dapat melihat dan berkontribusi pada kueri di repositori github/codeql.

Untuk dokumentasi yang lebih spesifik tentang CodeQL, kunjungi dokumentasi CodeQL di GitHub.

CodeQL mendukung bahasa yang dikompilasi dan ditafsirkan dan dapat menemukan kerentanan dan kesalahan dalam kode yang ditulis dalam bahasa yang didukung.

  • C/C++
  • C#
  • Go
  • Java
  • JavaScript/TypeScript
  • Kotlin (beta)
  • Python
  • Ruby
  • Swift

Untuk informasi selengkapnya, lihat dokumentasi di situs web CodeQL di Bahasa dan kerangka kerja yang didukung.

Anda dapat melihat kueri dan detail tugas tertentu yang digunakan oleh CodeQL dengan melihat log build, mirip dengan pemindaian dependensi.

Cuplikan layar tugas hasil penerbitan pemindaian kode

Pemberitahuan pemindaian kode

Pemberitahuan pemindaian kode GitHub Advanced Security for Azure DevOps mencakup bendera pemindaian kode berdasarkan repositori yang memperingatkan kerentanan aplikasi tingkat kode.

Untuk menggunakan pemindaian kode, Anda harus terlebih dahulu mengonfigurasi GitHub Advanced Security untuk Azure DevOps.

Tab Keamanan Tingkat Lanjut di bawah Repositori di Azure DevOps adalah hub untuk melihat pemberitahuan pemindaian kode Anda. Pilih tab Pemindaian kode untuk melihat pemberitahuan pemindaian. Anda dapat memfilter menurut cabang, status, alur, jenis aturan, dan tingkat keparahan. Saat ini, hub pemberitahuan tidak menampilkan pemberitahuan untuk pemindaian yang diselesaikan pada cabang PR.

Tidak ada efek untuk menghasilkan jika alur atau cabang diganti namanya - mungkin perlu waktu hingga 24 jam sebelum nama baru ditampilkan.

Jika Anda memilih untuk menjalankan kueri CodeQL kustom, tidak ada filter terpisah secara default untuk pemberitahuan yang dihasilkan dari paket kueri yang berbeda. Anda dapat memfilter menurut aturan, yang berbeda untuk setiap kueri.

Cuplikan layar pemberitahuan pemindaian kode untuk repositori

Jika Anda menonaktifkan Keamanan Tingkat Lanjut untuk repositori, Anda akan kehilangan akses ke hasil di tab Keamanan Tingkat Lanjut dan tugas build. Tugas build tidak akan gagal, tetapi hasil apa pun dari build yang dijalankan dengan tugas sementara Keamanan Tingkat Lanjut dinonaktifkan disembunyikan dan tidak dipertahankan.

Detail peringatan

Pilih pemberitahuan untuk detail selengkapnya, termasuk panduan remediasi. Setiap pemberitahuan mencakup lokasi, deskripsi, contoh, dan tingkat keparahan.

Cuplikan layar detail pemberitahuan pemindaian kode

Bagian Penjelasan
Lokasi Bagian Lokasi merinci instans tertentu di mana CodeQL telah mendeteksi kerentanan. Jika ada beberapa instans kode Anda yang melanggar aturan yang sama, pemberitahuan baru dibuat untuk setiap lokasi yang berbeda. Kartu Lokasi berisi tautan langsung ke cuplikan kode yang terpengaruh sehingga Anda dapat memilih cuplikan yang akan diarahkan ke antarmuka pengguna web Azure DevOps untuk pengeditan.
Deskripsi Deskripsi disediakan oleh alat CodeQL berdasarkan masalah.
Rekomendasi Rekomendasinya adalah perbaikan yang disarankan untuk pemberitahuan pemindaian kode tertentu.
Contoh Bagian contoh menunjukkan contoh kelemahan yang disederhanakan dalam kode Anda.
Tingkat keparahan Tingkat keparahan bisa rendah, sedang, tinggi, atau kritis. Skor tingkat keparahan didasarkan pada skor Common Vulnerability Scoring System (CVSS) yang diberikan untuk Enumerasi Kelemahan Umum (CWE) yang diidentifikasi. Pelajari selengkapnya tentang bagaimana tingkat keparahan di posting blog GitHub ini.

Mengelola pemberitahuan pemindaian kode

Menampilkan pemberitahuan untuk repositori

Siapa pun dengan izin kontributor untuk repositori dapat melihat ringkasan semua pemberitahuan untuk repositori di tab Keamanan Tingkat Lanjut di bawah Repositori. Pilih tab Pemindaian kode untuk melihat semua pemberitahuan pemindaian rahasia.

Untuk menampilkan hasil, tugas pemindaian kode perlu dijalankan terlebih dahulu. Setelah pemindaian pertama selesai, kerentanan apa pun yang terdeteksi ditampilkan di tab Keamanan Tingkat Lanjut.

Secara default, halaman pemberitahuan menunjukkan hasil pemindaian dependensi untuk cabang default repositori.

Status pemberitahuan tertentu mencerminkan status untuk cabang default dan alur eksekusi terbaru, bahkan jika pemberitahuan ada di cabang dan alur lain.

Menutup pemberitahuan pemindaian kode

Untuk menutup pemberitahuan, Anda memerlukan izin yang sesuai. Secara default, hanya administrator proyek yang dapat menutup pemberitahuan Keamanan Tingkat Lanjut.

Untuk menutup pemberitahuan:

  1. Navigasi ke pemberitahuan yang ingin Anda tutup dan pilih pada pemberitahuan.
  2. Pilih menu drop-down Tutup pemberitahuan.
  3. Jika belum dipilih, pilih Risiko diterima atau Positif palsu sebagai alasan penutupan.
  4. Tambahkan komentar opsional ke dalam kotak teks Komentar .
  5. Pilih Tutup untuk mengirimkan dan menutup pemberitahuan.
  6. Status pemberitahuan berubah dari Buka menjadi Tertutup dan alasan pemecatan Anda ditampilkan.

Cuplikan layar cara menutup pemberitahuan pemindaian kode

Ini hanya menutup pemberitahuan untuk cabang yang Anda pilih. Cabang lain yang berisi kerentanan yang sama tetap aktif hingga diberhentikan. Pemberitahuan apa pun yang sebelumnya telah diberhentikan dapat dibuka kembali secara manual.

Menggunakan kueri kustom dengan CodeQL

Secara default, jika Anda tidak memiliki file konfigurasi kustom yang ditentukan dalam penyiapan alur Anda, CodeQL akan menjalankan security-extended paket kueri untuk menganalisis kode Anda. Anda dapat menggunakan kueri CodeQL kustom untuk menulis kueri Anda sendiri untuk menemukan kerentanan dan kesalahan tertentu. Anda juga perlu membuat file konfigurasi kustom untuk memodifikasi analisis default CodeQL.

Untuk menemukan kueri kustom yang sudah ada atau untuk menyumbangkan kueri kustom Anda sendiri, lihat Berkontribusi ke CodeQL.

Analisis dengan kueri kustom

Cara tercepat untuk memulai dengan kueri kustom adalah dengan menulis kueri dan menyimpannya di repositori Azure DevOps lokal Anda. Anda bisa mengkustomisasi detail kueri kustom sesuai dengan kebutuhan Anda, tetapi harus memiliki setidaknya ID aturan. Untuk mempelajari selengkapnya tentang cara menulis kueri CodeQL Anda sendiri, lihat Menulis kueri CodeQL. Anda juga dapat menggabungkan beberapa kueri bersama-sama ke dalam rangkaian kueri, atau menggunakan paket yang diterbitkan oleh orang lain. Untuk mempelajari selengkapnya, lihat Menerbitkan dan menggunakan paket CodeQL.

Menggunakan file konfigurasi khusus

File konfigurasi kustom adalah cara untuk mengelola kueri apa yang dijalankan selama analisis CodeQL terhadap kode Anda. Anda dapat menentukan kueri tambahan atau paket kueri yang akan dijalankan, dan mengubah atau menonaktifkan kueri CodeQL default.

Untuk menyertakan kueri tertentu yang ingin Anda sertakan, tentukan kueri dengan nama dan jalur ke lokasi file kueri (.ql) di repositori Anda.

Untuk menyertakan paket tertentu yang ingin Anda sertakan, tentukan nama paket. Anda dapat menentukan sejumlah paket kueri CodeQL untuk dijalankan dalam file konfigurasi Anda.

Tip

Filter packs dari file konfigurasi mendukung pengunduhan paket dari repositori yang dihosting di GitHub, meskipun filter queries tidak. Jika paket bersifat privat di GitHub, maka Anda perlu memberikan token akses GitHub melalui AdvancedSecurity-Codeql-Init@1 tugas sebagai variabel lingkungan dan nama variabel sebagai GITHUB_TOKEN, dengan cakupan token menjadi read:packages.

Berikut adalah contoh file konfigurasi:

name: "Run custom queries"

# When using a configuration file, if you do not disable default queries,
# then the default CodeQL queries in the `code-scanning` query suite will also execute upon analysis.
disable-default-queries: true
 
# To reference local queries saved to your repository,
# the path must start with `./` followed by the path to the custom query or queries.
# Names for each query referenced is optional.
queries:
  - name: Use security-extended query suite
    uses: security-extended
  - name: Use local custom query (single query)
    uses: ./customQueries/javascript/FindTestFunctions.ql
  - name: Use local custom query (directory of queries)
    uses: ./customQueries/javascript/MemoryLeakQueries  
 
packs:
 - mygithuborg/mypackname
 
paths:
 - src
 
paths-ignore:
  - src/node_modules
  - '**/*.test.js'
 
query-filters:
 - include:
    kind: problem
 - include:
     precision: medium
 - exclude:
    id:
      - js/angular/disabling-sce
      - js/angular/insecure-url-allowlist

Tip

Spesifikasi file konfigurasi mengabaikan dan lebih diutamakan daripada konfigurasi tingkat alur untuk tugas tersebut AdvancedSecurity-Codeql-Init@1 . includepaths / ignorepaths akan diabaikan atau, jika paths/paths-ignore ada, ditimpa dengan nilai dari paths/paths-ignore. querysuite akan ditimpa dengan nilai yang ditentukan dalam queries atau packs dalam file konfigurasi.

Untuk saran dan opsi konfigurasi yang lebih spesifik dengan file konfigurasi Anda, lihat Menyesuaikan penyiapan tingkat lanjut Anda untuk pemindaian kode.

Setelah memiliki file konfigurasi, Anda kemudian perlu menyesuaikan alur yang menjalankan analisis CodeQL untuk menggunakan file baru Anda. Berikut adalah contoh alur yang menunjuk ke file konfigurasi:

trigger: none
 
pool:
  vmImage: windows-latest

# You can either specify your CodeQL variables in a variable block... 
variables:
# `configfilepath` must be an absolute file path relative to the repository root
  advancedsecurity.codeql.configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml' 

# Or you can specify variables as variables for the task. You do not need both definitions. 
steps:
- task: AdvancedSecurity-Codeql-Init@1
  displayName: Initialize CodeQL
  inputs:
    languages: 'javascript'
    loglevel: '2'
    configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# If downloading a pack from GitHub,
# you must include a GitHub access token with the scope of `read:packages`.
  env:
    GITHUB_TOKEN: $(githubtoken)
 
- task: AdvancedSecurity-Codeql-Autobuild@1
  displayName: AutoBuild
 
- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

Pemecahan masalah pemindaian kode

Umumnya, jika Anda mengalami kesalahan dengan eksekusi CodeQL, CodeQL CLI melaporkan status setiap perintah yang dijalankannya sebagai kode keluar. Kode keluar menyediakan informasi untuk perintah berikutnya atau untuk alat lain yang mengandalkan CodeQL CLI. Untuk detail selengkapnya tentang detail kode keluar, lihat Kode keluar.

Kesalahan: Perintah CodeQL 'finalisasi database' (32)

Kesalahan ini menunjukkan masalah dengan menyelesaikan pembuatan database CodeQL, berpotensi karena kesalahan ekstraksi atau langkah build yang hilang.

Langkah-Langkah Pemecahan Masalah:

  1. Verifikasi kode ada dan dikompilasi
    • Untuk bahasa yang dikompilasi, verifikasi bahwa proses build mengkompilasi kode dan sedang terjadi antara AdvancedSecurity-Codeql-Init tugas dan AdvancedSecurity-Codeql-Analyze . Perintah build umum dan bendera yang diperlukan (seperti clean no-cache/no-daemon) dapat ditemukan di sini di Menentukan perintah build.
    • Untuk bahasa yang ditafsirkan, konfirmasikan bahwa ada beberapa kode sumber untuk bahasa yang ditentukan dalam proyek.
  2. Periksa kesalahan ekstraksi
    • Verifikasi apakah kesalahan ekstraksi memengaruhi kesehatan database CodeQL.
    • Tinjau file log untuk kesalahan ekstraksi dan peringatan untuk menilai kesehatan database secara keseluruhan.
  3. Menyelidiki kesalahan yang luar biasa
    • Jika sebagian besar file mengalami kesalahan ekstraktor, selidiki lebih lanjut untuk memahami akar penyebab ekstraksi yang tidak tepat.

Kesalahan: skrip pembuatan otomatis (1)

Kesalahan ini menjelaskan kegagalan build otomatis, menyarankan masalah dengan penyiapan atau konfigurasi pemindaian kode.

Langkah-Langkah Pemecahan Masalah:

  1. Mengonfigurasi langkah-langkah build

Kesalahan: Direktori CodeQL tidak ditemukan di cache alat agen

Kesalahan ini menunjukkan masalah saat menginstal CodeQL untuk agen yang dihost sendiri.

Langkah-Langkah Pemecahan Masalah:

  1. Lihat panduan penyiapan atau skrip konfigurasi yang disediakan di Mengonfigurasi GitHub Advanced Security untuk Azure DevOps.

Kesalahan: variabel alur bahasa tidak diatur

Kesalahan ini terjadi ketika mencoba menjalankan CodeQL tanpa mengatur variabel alur yang menentukan bahasa mana yang akan dipindai.

Langkah-Langkah Pemecahan Masalah:

  1. Mengatur variabel alur bahasa

CodeQL tidak mengembalikan hasil

Bagian ini menyediakan panduan untuk situasi di mana analisis CodeQL tidak menghasilkan hasil.

Langkah-Langkah Pemecahan Masalah:

  1. Periksa kerentanan yang terdeteksi
    • Pertimbangkan kemungkinan bahwa kode Anda mungkin benar-benar tidak memiliki kerentanan. Jika kerentanan diharapkan tetapi tidak terdeteksi, lanjutkan untuk memverifikasi lebih lanjut.
  2. Meninjau konfigurasi rangkaian kueri
    • Konfirmasikan rangkaian kueri yang digunakan dan pertimbangkan untuk beralih ke rangkaian yang lebih komprehensif jika perlu.
    • Atau, suite kueri kustom dapat dibuat untuk analisis yang disesuaikan.
  3. Menyesuaikan izin untuk menampilkan hasil
    • Pastikan izin yang tepat, setidaknya di tingkat kontributor, diberikan untuk mengakses hasil analisis. Untuk informasi selengkapnya, lihat Izin Keamanan Tingkat Lanjut.

Izin tugas pemindaian kode

Tugas build pemindaian kode menggunakan identitas alur untuk memanggil API REST Keamanan Tingkat Lanjut. Secara default, alur dalam proyek yang sama memiliki akses untuk mengunggah file SARIF yang dihasilkan dengan menjalankan analisis CodeQL. Jika Anda menghapus izin tersebut dari akun layanan build atau jika Anda memiliki penyiapan kustom (misalnya, alur yang dihosting dalam proyek yang berbeda dari repositori), Anda harus memberikan izin ini secara manual.

Langkah-Langkah Pemecahan Masalah:

  • Berikan Advanced Security: View alerts dan Advanced Security: Manage and dismiss alerts izin ke akun layanan build yang digunakan dalam alur Anda, yang untuk alur cakupan proyek adalah [Project Name] Build Service ([Organization Name]), dan untuk alur cakupan koleksi adalah Project Collection Build Service ([Organization Name]).