Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pemindaian kode di GitHub Advanced Security for Azure DevOps memungkinkan Anda menganalisis kode dalam repositori Azure DevOps untuk menemukan kerentanan keamanan dan kesalahan pengkodean. Anda memerlukan GitHub Advanced Security untuk Azure DevOps atau, jika Anda menggunakan pengalaman mandiri, GitHub Code Security untuk Azure DevOps diaktifkan. 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. Untuk dokumentasi lebih spesifik tentang CodeQL, lihat Dokumentasi CodeQL.
GitHub Advanced Security untuk Azure DevOps berfungsi dengan Azure Repos. Untuk menggunakan GitHub Advanced Security dengan repositori GitHub, lihat GitHub Advanced Security.
Prasyarat
| Kategori | Persyaratan |
|---|---|
| Izin | - Untuk melihat ringkasan semua peringatan untuk repositori: izin Kontributor untuk repositori. - Untuk mengabaikan peringatan di Advanced Security: izin Project administrator. - Untuk mengelola izin di Keamanan Tingkat Lanjut: Anggota Administrator Koleksi Proyek atau Keamanan Tingkat Lanjut: mengelola pengaturan izin diatur ke Izinkan. |
Untuk informasi selengkapnya tentang izin Keamanan Tingkat Lanjut, lihat Mengelola izin Keamanan Tingkat Lanjut.
Tentang jenis penyiapan pemindaian kode
Ada dua cara utama untuk menyiapkan pemindaian kode untuk repositori Anda: penyiapan default dan penyiapan tingkat lanjut.
| Pengaturan default | Penyetelan tingkat lanjut | |
|---|---|---|
| Configuration | Otomatis, tidak diperlukan konfigurasi alur | Manual, memerlukan penambahan tugas CodeQL ke alur |
| Deteksi Bahasa | Secara otomatis mendeteksi dan memindai bahasa yang didukung CodeQL | Anda menentukan bahasa dalam tugas alur kerja |
| Cakupan cabang | Hanya memindai cabang default | Memindai cabang apa pun yang memicu alur |
| Kustomisasi build | Tidak ada langkah kustom build — menggunakan mode build none |
Kontrol penuh atas langkah-langkah build untuk bahasa yang dikompilasi |
| Pilihan terbaik untuk | Pengaktifan cepat, kebutuhan pemindaian standar | Pemindaian multicabang, kumpulan agen kustom, atau frekuensi pemindaian |
Penyiapan default adalah cara tercepat untuk mengaktifkan pemindaian kode. Ini membuat konfigurasi pemindaian terkelola di belakang layar dan tidak memerlukan perubahan alur. Sebaiknya mulai dengan penyiapan default untuk sebagian besar repositori.
Penyiapan tingkat lanjut memberi Anda kontrol penuh dengan menambahkan tugas CodeQL langsung ke Azure Pipelines Anda. Gunakan penyiapan tingkat lanjut saat Anda perlu:
- Mengelola kumpulan agen tertentu untuk berbagai bahasa atau kebutuhan komputasi
- Mengkustomisasi langkah-langkah build untuk bahasa yang dikompilasi
- Memindai cabang selain cabang default
- Mengintegrasikan pemindaian kode ke dalam alur CI/CD yang ada
- Menggunakan rangkaian kueri CodeQL atau kueri kustom tertentu
Kiat
Anda dapat memulai dengan penyiapan default dan beralih ke penyiapan tingkat lanjut nanti jika Anda memerlukan lebih banyak kontrol, atau menggunakan keduanya. Untuk informasi tentang mengonfigurasi penyiapan default, lihat Konfigurasi fitur Keamanan Tingkat Lanjut GitHub.
Mengonfigurasi opsi pengaturan bawaan
Setelah mengaktifkan pengaturan default CodeQL, Anda dapat mengonfigurasi kumpulan agen dan jadwal pemindaian dari pengaturan organisasi Anda. Opsi ini berlaku untuk semua repositori di organisasi yang menggunakan penyiapan default.
Untuk mengakses opsi yang dapat dikonfigurasi, buka pengaturan organisasi>Repositori dan perluas menu opsi konfigurasi penyiapan default CodeQL dropdown.
Kumpulan agen
Pilih kumpulan agen yang digunakan untuk menjalankan pemindaian penyiapan default CodeQL di semua repositori di organisasi. Anda dapat memilih dari:
- Azure Pipelines — menggunakan agen yang dihosting Microsoft. Menggunakan kumpulan agen Azure Pipelines mengonsumsi kemampuan bersamaan alur.
- Kumpulan agen yang di-host sendiri — menggunakan agen milik Anda sendiri. Pilih kumpulan yang dihost sendiri jika repositori Anda memerlukan akses ke jaringan privat, alat build tertentu, atau sumber daya lain yang tidak tersedia di agen yang dihosting.
- Managed DevOps Pools — menggunakan kumpulan yang dikelola Azure dengan gambar VM kustom.
Jadwal pemindaian
Pilih saat pemindaian penyiapan default CodeQL berjalan untuk semua repositori di organisasi. Anda dapat memilih hari tertentu dalam seminggu untuk pemindaian mingguan. Tanggal eksekusi terjadwal berikutnya ditampilkan di bawah menu dropdown.
Batalkan pemindaian yang berjalan atau diantrekan
Jika Anda perlu menghentikan pemindaian penyiapan default yang berjalan secara aktif atau diantri, Anda dapat membatalkannya secara manual melalui pengaturan>Organisasi Repositori. Pengguna dengan Keamanan Tingkat Lanjut: mengelola izin pengaturan pada repositori dapat membatalkan eksekusi atau mengantrekan eksekusi penyiapan default.
Penyiapan tingkat lanjut untuk pemindaian kode
CodeQL adalah alat berbasis alur, di mana hasilnya dikumpulkan per repositori.
Kiat
Pemindaian kode dapat menjadi tugas build yang lebih memakan waktu, jadi kami sarankan Anda menambahkan tugas pemindaian kode ke alur terpisah yang dikloning dari alur produksi utama Anda atau membuat alur baru.
Tambahkan tugas dalam urutan berikut:
- Keamanan Tingkat Lanjut Menginisialisasi CodeQL (AdvancedSecurity-Codeql-Init@1)
- Langkah-langkah bangunan kustom Anda
- Keamanan Tingkat Lanjut Melakukan Analisis CodeQL (AdvancedSecurity-Codeql-Analyze@1)
Selain itu, tentukan bahasa mana yang Anda analisis dalam Initialize CodeQL tugas. Anda dapat menggunakan daftar yang dipisahkan koma untuk menganalisis beberapa bahasa sekaligus. Bahasa yang didukung adalah csharp, cpp, go, java, javascript, python, ruby, swift. Jika Anda menggunakan agen yang dihost sendiri, Anda mungkin juga menambahkan enableAutomaticCodeQLInstall: true variabel untuk menginstal bit CodeQL terbaru secara otomatis untuk agen Anda.
Berikut adalah contoh pipeline awal:
trigger:
- main
pool:
# Additional hosted image options are available: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/hosted#software
vmImage: ubuntu-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
inputs:
languages: "java"
# Supported languages: csharp, cpp, go, java, javascript, python, ruby, swift
# You can customize the initialize task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-init-v1?view=azure-pipelines
# If you're using a self-hosted agent to run CodeQL, use `enableAutomaticCodeQLInstall` to automatically use the latest CodeQL bits on your agent:
enableAutomaticCodeQLInstall: true
# Add your custom build steps here
# - Ensure that all code to be scanned is compiled (often using a `clean` command to ensure you're building from a clean state).
# - Disable the use of any build caching mechanisms as this can interfere with CodeQL's ability to capture all the necessary data during the build.
# - Disable the use of any distributed/multithreaded/incremental builds as CodeQL needs to monitor executions of the compiler to construct an accurate representation of the application.
# - For dependency scanning, ensure you have a package restore step for more accurate results.
# If you had a Maven app:
# - task: Maven@4
# inputs:
# mavenPomFile: 'pom.xml'
# goals: 'clean package'
# publishJUnitResults: true
# testResultsFiles: '**/TEST-*.xml'
# javaHomeOption: 'JDKVersion'
# jdkVersionOption: '1.17'
# mavenVersionOption: 'Default'
# Or a general script:
# - script: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- task: AdvancedSecurity-Dependency-Scanning@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-dependency-scanning-v1?view=azure-pipelines
- task: AdvancedSecurity-Codeql-Analyze@1 # More details on this task: https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/advanced-security-codeql-analyze-v1?view=azure-pipelines
Selain itu, tentukan bahasa mana yang Anda analisis dalam Initialize CodeQL tugas. Jika bahasa yang ditentukan adalah swift, langkah-langkah build kustom diperlukan.
Kiat
- Gunakan
javauntuk menganalisis kode yang ditulis dalam Java, Kotlin, atau keduanya. - Gunakan
javascriptuntuk menganalisis kode yang ditulis dalam JavaScript, TypeScript, atau keduanya.
Jika Anda menjalankan agen yang dihost sendiri, pilih Enable automatic CodeQL detection and installation untuk secara otomatis menggunakan bit CodeQL terbaru pada agen Anda jika Anda tidak menginstal bundel CodeQL terbaru secara manual ke cache alat agen Anda.
Untuk menghasilkan peringatan, jalankan pemindaian pertama Anda dengan alur kerja yang menyertakan tugas pemindaian kode.
Konfigurasi lainnya untuk pemindaian kode
Dukungan bahasa dan kueri
GitHub pakar, 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.
CodeQL mendukung dan menggunakan pengidentifikasi bahasa berikut:
| Bahasa | identifikator |
|---|---|
| C/C++ | cpp |
| C# | csharp |
| Pergi | go |
| Java/Kotlin | java |
| JavaScript/TypeScript | javascript |
| Python | python |
| Ruby | ruby |
| Swift | swift |
Kiat
- Gunakan
cppuntuk menganalisis kode yang ditulis dalam C, C++ atau keduanya. - Gunakan
javauntuk menganalisis kode yang ditulis dalam Java, Kotlin, atau keduanya. - Gunakan
javascriptuntuk menganalisis kode yang ditulis dalam JavaScript, TypeScript, atau keduanya.
Untuk informasi selengkapnya, lihat Bahasa dan kerangka kerja yang didukung.
Anda dapat melihat kueri dan detail tugas tertentu yang dijalankan oleh CodeQL di log build.
Kustomisasi mode pemindaian kode build
Pemindaian kode mendukung dua mode build saat menyiapkan alur untuk pemindaian:
-
none- Database CodeQL dibuat langsung dari basis kode tanpa membangun basis kode (didukung untuk semua bahasa yang ditafsirkan, dan juga didukung untukcpp,java, dancsharp). -
manual- Anda menentukan langkah-langkah build yang akan digunakan untuk basis kode dalam alur kerja (didukung untuk semua bahasa yang dikompilasi).
Untuk informasi selengkapnya tentang berbagai mode build termasuk perbandingan pada manfaat setiap mode build, lihat Pemindaian kode CodeQL untuk bahasa yang dikompilasi.
Kiat
Mode build none dapat digunakan dengan bahasa lain yang ditafsirkan, misalnya, JavaScript, Python, Ruby.
Jika mode build none ditentukan untuk C# atau Java dengan bahasa lain yang dikompilasi yang tidak mendukung mode build none, tugas alur gagal.
Kode berikut menunjukkan contoh konfigurasi yang valid dengan beberapa bahasa dan mode build none:
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
languages: 'csharp, java, javascript'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Kode berikut menunjukkan contoh konfigurasi yang tidak valid dengan beberapa bahasa dan mode build none:
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
languages: 'csharp, swift'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Pemberitahuan pemindaian kode
GitHub Advanced Security untuk Azure DevOps termasuk pemberitahuan pemindaian kode berdasarkan repositori yang memperingatkan tentang kerentanan aplikasi pada 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 Pemeriksaan Kode untuk melihat peringatan pemeriksaan kode. Anda dapat memfilter menurut cabang, status, alur, jenis aturan, dan tingkat keparahan. Saat ini, pusat peringatan tidak menampilkan peringatan untuk pemindaian yang telah diselesaikan pada cabang PR.
Tidak ada efek pada hasil jika alur kerja atau cabang diganti namanya - mungkin perlu waktu hingga 24 jam sebelum nama baru ditampilkan.
Jika Anda memilih untuk menjalankan kueri CodeQL kustom, tidak ada secara default filter terpisah untuk pemberitahuan yang dihasilkan dari paket kueri yang berbeda. Anda dapat memfilter menurut aturan, yang berbeda untuk setiap kueri.
Jika Anda menonaktifkan Keamanan Tingkat Lanjut untuk repositori, Anda akan kehilangan akses ke hasil di tab Keamanan Tingkat Lanjut dan tugas build. Tugas build tetap berhasil, tetapi hasil apa pun dari build yang dijalankan dengan tugas saat Keamanan Tingkat Lanjut dimatikan akan disembunyikan dan tidak dipertahankan.
Detail peringatan
Pilih pemberitahuan untuk detail selengkapnya, termasuk panduan remediasi. Setiap pemberitahuan mencakup lokasi, deskripsi, contoh, dan tingkat keparahan.
| Bagian | Penjelasan |
|---|---|
| Lokasi | Bagian Lokasi menjelaskan contoh spesifik di mana CodeQL 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 | Rekomendasi adalah perbaikan yang disarankan untuk peringatan 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 lebih lanjut tentang bagaimana tingkat keparahan dinilai dalam posting blog GitHub ini. |
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 peringatan 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 memperlihatkan hasil pemindaian kode untuk cabang default repositori.
Status peringatan tertentu mencerminkan kondisi untuk cabang default dan alur eksekusi terbaru, meskipun peringatan tersebut juga ada di cabang dan alur lainnya.
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:
- Arahkan ke pemberitahuan yang ingin Anda tutup dan pilih pemberitahuan tersebut.
- Pilih drop-down Tutup pemberitahuan.
- Jika belum dipilih, pilih Risiko diterima atau Positif salah sebagai alasan penutupan.
- Tambahkan komentar opsional ke dalam kotak teks Komentar .
- Pilih Tutup untuk mengirimkan dan menutup pemberitahuan.
- Status pemberitahuan berubah dari Buka menjadi Tertutup dan alasan pemecatan Anda ditampilkan.
Tindakan ini menghapus peringatan untuk seluruh cabang. Cabang lain yang berisi kerentanan yang sama juga akan diberhentikan. Setiap pemberitahuan yang sebelumnya diberhentikan dapat dibuka kembali secara manual.
Mengelola pemberitahuan pemindaian kode pada permintaan pull
Jika peringatan dibuat untuk perubahan kode baru dalam pull request, peringatan tersebut ditampilkan sebagai anotasi di bagian komentar pada tab Gambaran Umum dari pull request dan sebagai peringatan di tab repositori Keamanan Tingkat Lanjut. Ada pilihan cabang baru untuk cabang pull request.
Anda dapat meninjau baris kode yang terpengaruh, melihat ringkasan temuan, dan menyelesaikan anotasi di bagian Gambaran Umum.
Untuk menutup pemberitahuan pull request, Anda harus masuk ke halaman detail pemberitahuan untuk menutup pemberitahuan dan menyelesaikan anotasi. Jika tidak, hanya mengubah status komentar (1) menyelesaikan anotasi tetapi tidak menutup atau memperbaiki pemberitahuan yang mendasarinya.
Untuk melihat seluruh kumpulan hasil untuk cabang permintaan pull Anda, navigasikan ke Repositori>Keamanan Tingkat Lanjut dan pilih cabang permintaan pull Anda. Memilih Perlihatkan detail selengkapnya (2) pada anotasi mengarahkan Anda ke tampilan detail pemberitahuan di tab Keamanan Tingkat Lanjut.
Kiat
Anotasi hanya akan dibuat ketika baris kode yang terpengaruh sepenuhnya unik terhadap perbedaan dalam permintaan pull dibandingkan dengan cabang target.