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.
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 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 tidak gagal, tetapi hasil apa pun dari build yang dijalankan dengan tugas saat 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.
Bagian | Penjelasan |
---|---|
Lokasi | Bagian Lokasi merinci instans tertentu 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 | 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:
- Navigasi ke pemberitahuan yang ingin Anda tutup dan pilih pada pemberitahuan.
- Pilih menu drop-down Tutup pemberitahuan.
- Jika belum dipilih, pilih Risiko diterima atau Positif palsu 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 hanya menutup pemberitahuan untuk cabang yang Anda pilih. Cabang lain yang berisi kerentanan yang sama tetap aktif hingga diberhentikan. Setiap pemberitahuan yang sebelumnya 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 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 lebih banyak kueri 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.
Langkah selanjutnya adalah membuat qlpack.yml
file. File ini mendeklarasikan paket CodeQL dan informasi tentang hal itu. File apa pun *.ql
dalam direktori yang sama (atau sub-direktori) sebagai qlpack.yml
dianggap sebagai bagian dari paket.
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.
Jika Anda menggunakan kueri kustom apa pun, berikut adalah contoh qlpack.yml
yang ditempatkan di direktori kueri kustom Anda:
version: 1.0.1
dependencies:
codeql/javascript-all: "*"
codeql/javascript-queries: "*"
Variabel dependencies
berisi semua dependensi paket ini dan rentang versi yang kompatibel. Setiap dependensi dirujuk sebagai scope/name
paket pustaka CodeQL. Saat menentukan dependencies
, Anda qlpack.yml
bergantung pada salah satu paket bahasa inti (misalnya, JavaScript, C#, Ruby, dll.), yang menentukan bahasa yang dapat dianalisis kueri Anda.
Untuk saran dan opsi konfigurasi yang lebih spesifik dengan file konfigurasi Anda, lihat Menyesuaikan penyiapan tingkat lanjut Anda untuk pemindaian kode atau untuk qlpack.yml
penyiapan, lihat Struktur paket CodeQL.
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 informasi 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:
- Verifikasi kode ada dan dikompilasi
- Untuk bahasa yang dikompilasi, verifikasi bahwa proses build mengkompilasi kode dan sedang terjadi antara
AdvancedSecurity-Codeql-Init
tugas danAdvancedSecurity-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.
- Untuk bahasa yang dikompilasi, verifikasi bahwa proses build mengkompilasi kode dan sedang terjadi antara
- 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.
- 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:
- Mengonfigurasi langkah-langkah build
- Hapus langkah AutoBuild dan sebagai gantinya konfigurasikan langkah-langkah build tertentu untuk bahasa yang dikompilasi di alur Anda.
- Lihat panduan penyiapan yang disediakan di Mengonfigurasi GitHub Advanced Security untuk Azure DevOps.
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:
- 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 saat mencoba menjalankan CodeQL tanpa mengatur variabel alur yang menentukan bahasa mana yang akan dipindai.
Langkah-Langkah Pemecahan Masalah:
- Mengatur variabel alur bahasa
- Pastikan variabel alur bahasa dikonfigurasi dengan benar. Lihat panduan penyiapan yang disediakan di Mengonfigurasi GitHub Advanced Security untuk Azure DevOps.
- Bahasa yang didukung meliputi
csharp
, ,go
cpp
,java
,javascript
,python
,ruby
, danswift
.
CodeQL tidak mengembalikan hasil
Bagian ini menyediakan panduan untuk situasi di mana analisis CodeQL tidak menghasilkan hasil.
Langkah-Langkah Pemecahan Masalah:
- 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.
- 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.
- 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.
Waktu codeQL habis
AdvancedSecurity-Codeql-Analyze@1
Jika tugas ditampilkan dan Anda menggunakan agen Microsoft yang dihostingThis job was abandoned ... we lost contact with the agent
, tugas mencapai batas waktu enam jam bawaan untuk agen yang dihosting berbayar. Anda dapat mencoba menjalankan analisis pada agen yang dihost sendiri sebagai gantinya.
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 izin ini dihapus 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
danAdvanced 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 adalahProject Collection Build Service ([Organization Name])
.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk