Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps için GitHub Gelişmiş Güvenlik'te kod tarama, güvenlik açıklarını ve kodlama hatalarını bulmak için Azure DevOps deposundaki kodu analiz etmenizi sağlar. Azure DevOps için ya GitHub Gelişmiş Güvenlik'i etkinleştirmeniz ya da bağımsız deneyimi kullanıyorsanız GitHub Kod Güvenliği'ni etkinleştirmeniz gerekecek. Analiz sonucunda tespit edilen tüm sorunlar uyarı olarak bildirilir. Kod tarama, güvenlik açıklarını belirlemek için CodeQL kullanır.
CodeQL, güvenlik denetimlerini otomatikleştirmek için GitHub tarafından geliştirilen kod analizi altyapısıdır. CodeQL kullanarak kodunuzu analiz edebilir ve sonuçları kod tarama uyarıları olarak görüntüleyebilirsiniz. CodeQL hakkında daha ayrıntılı belgeler için Bkz . CodeQL belgeleri.
Azure DevOps için GitHub Gelişmiş Güvenlik, Azure Repos ile çalışır. GitHub Gelişmiş Güvenliği GitHub depolarla kullanmak için bkz. GitHub Advanced Security.
Önkoşullar
| Kategori | Gereksinimler |
|---|---|
| İzinler | - Depoya yönelik tüm uyarıların özetini görüntülemek için: Katkıda Bulunan depo izinleri. - Gelişmiş Güvenlik'te uyarıları kapatmak için: Project administrator izinleri. - Gelişmiş Güvenlik izinlerini yönetmek için: Proje Koleksiyonu Yöneticileri grubu veya Gelişmiş Güvenlik: ayarları yönet izni İzin Ver olarak ayarlanmalıdır. |
Gelişmiş Güvenlik izinleri hakkında daha fazla bilgi için bkz. Gelişmiş Güvenlik izinlerini yönetme.
Kod tarama kurulum türleri hakkında
Deponuz için kod taramayı ayarlamanın iki ana yolu vardır: varsayılan kurulum ve gelişmiş kurulum.
| Varsayılan kurulum | Gelişmiş kurulum | |
|---|---|---|
| Configuration | Otomatik, pipeline yapılandırması gerekmez. | Manuel, bir işlem hattına CodeQL görevleri eklenmesini gerektirir. |
| Dil algılama | Desteklenen dilleri otomatik olarak algılar ve tarar | İşlem hattı görevinde dilleri belirtirsiniz |
| Dal kapsamı | Yalnızca varsayılan dalı tarar | İşlem hattını tetikleyen tüm dalları tarar |
| Derleme özelleştirmesi | Özel derleme adımı yok — none derleme modunu kullanır |
Derlenmiş diller için derleme adımları üzerinde tam denetim |
| Şunun için en uygun | Hızlı etkinleştirme, standart tarama gereksinimleri | Birden fazla dal içeren tarama, özel ajan havuzu veya tarama sıklığı |
Varsayılan kurulum , kod taramasını etkinleştirmenin en hızlı yoludur. Arka planda yönetilen bir tarama yapılandırması oluşturur ve işlem hattı değişikliği gerektirmez. Çoğu depo için varsayılan kurulumla başlamanızı öneririz.
Varsayılan kurulum şu dilleri tarar: C#, C/C++, Java, JavaScript/TypeScript, Python, Ruby ve Rust. Go ve Swift şu anda varsayılan kurulum tarafından desteklenmiyor. Bu dilleri taramak için gelişmiş kurulumu kullanın.
C/C++ içeren bir depoda varsayılan kurulumu etkinleştirdiğinizde, C/C++ ek ayrıntılar panelinde desteklenen bir dil olarak görünür ve yapılandırılmış varsayılan kurulum çalıştırmalarınızın bir parçası olarak taranır.
Gelişmiş kurulum, CodeQL görevlerini doğrudan Azure Pipelines'e ekleyerek tam denetim sağlar. Aşağıdaki durumlarda gelişmiş kurulumu kullanın:
- Farklı diller veya işlem gereksinimleri için belirli aracı havuzlarını yönetme
- Derlenmiş diller için derleme adımlarını özelleştirme
- Varsayılan dalı aşan dalları tarama
- Kod taramayı mevcut bir CI/CD işlem hattıyla tümleştirme
- Belirli bir CodeQL sorgu paketini veya özel sorguları kullanma
İpucu
Varsayılan kurulumla başlayabilir ve daha sonra daha fazla denetime ihtiyacınız varsa gelişmiş kuruluma geçebilir veya her ikisini de kullanabilirsiniz. Varsayılan kurulumu yapılandırma hakkında bilgi için bkz. Gelişmiş Güvenlik özelliklerini GitHub yapılandırma.
Note
CodeQL varsayılan kurulumunu kuruluş veya proje düzeyinde etkinleştirdiğinizde, ilk tarama otomatik olarak tüm etkilenen depolar için kuyruklar çalıştırır. Bir sonraki zamanlanmış çalıştırmayı beklemeden her deponun taraması tamamlandıktan sonra sonuçlar aşamalı olarak görünmeye başlar.
Varsayılan kurulum seçeneklerini yapılandırma
CodeQL varsayılan kurulumunu etkinleştirdikten sonra kuruluş ayarlarınızdan aracı havuzunu yapılandırabilir ve zamanlamayı tarayabilirsiniz . Bu seçenekler kuruluştaki varsayılan kurulumu kullanan tüm depolar için geçerlidir.
Yapılandırılabilir seçeneklere erişmek için Kuruluş ayarları>Depoları'na gidin ve CodeQL varsayılan kurulumu yapılandırılabilir seçenekler açılan listesini genişletin.
Aracı kümesi
Kuruluştaki tüm depolarda CodeQL varsayılan kurulum taramalarını çalıştırmak için kullanılan aracı havuzunu seçin. Aşağıdaki seçeneklerden birini belirleyebilirsiniz:
- Azure Pipelines — Microsoft barındırılan aracıları kullanır. Azure Pipelines aracı havuzunun kullanılması işlem hattı eşzamanlılığını tüketir.
- Kendi kendine barındırılan aracı havuzları — kendi aracılarınızı kullanır. Depolarınız özel ağlara, belirli derleme araçlarına veya barındırılan aracılarda bulunmayan diğer kaynaklara erişim gerektiriyorsa, kendi kendine barındırılan bir havuz seçin.
- Managed DevOps Havuzları — özel VM görüntüleriyle Azure yönetilen havuzları kullanır.
Tarama zamanlaması
CodeQL varsayılan kurulum taramalarının kuruluştaki tüm depolar için ne zaman çalıştırıldığından emin olun. Haftalık taramalar için haftanın belirli bir gününü seçebilirsiniz. Zamanlanmış bir sonraki çalıştırma tarihi, açılan listenin altında görüntülenir.
Note
Kuruluş veya proje düzeyinde varsayılan kurulumu etkinleştirdiğinizde, ilk çalıştırma otomatik olarak kuyruğa alınır, böylece ilk sonuçları almak için zamanlanmış haftalık çalıştırmayı beklemeniz gerekmez.
Çalışan veya kuyruğa alınan taramaları iptal etme
Etkin olarak çalışan veya kuyruğa alınan varsayılan kurulum taramalarını durdurmanız gerekiyorsa, bunları Kuruluş ayarları>Depoları aracılığıyla el ile iptal edebilirsiniz. Gelişmiş Güvenlik: depodaki ayarları yönetme iznine sahip kullanıcılar, çalıştırılan veya kuyruğa alınan varsayılan kurulum çalıştırmalarını iptal edebilir.
Varsayılan kurulum çalıştırmalarını izleme
CodeQL varsayılan kurulum çalıştırmalarınızı aracı havuzu iş günlüğü görünümünden izleyebilir ve bulabilirsiniz.
Gelişmiş günlük görüntüleyicisi — varsayılan kurulum çalıştırması başarısız olduğunda, hata günlük görüntüleyicisinin en üstünde görünür. Günlüğün tamamında tarama yapmadan neyin yanlış gittiğini hızla araştırabilirsiniz.
Adlandırmayı çalıştırma — varsayılan kurulum çalıştırmaları, aracı havuzu iş günlüğü görünümünde bir bakışta tanımlanmasını kolaylaştıran bir adlandırma kuralına uyar.
Durum ve depo filtreleri — aracı havuzunuzda bir işe ne olduğunu daha iyi görmek için işleri State ve Repository'e göre filtreleyin. Bu filtreler yalnızca varsayılan kurulum çalıştırmalarına değil görünümdeki tüm işlere uygulanır.
Kod tarama için gelişmiş kurulum
CodeQL, sonuçların depo başına toplandığı işlem hattı tabanlı bir araçtır.
İpucu
Kod tarama daha yoğun bir derleme görevi olabileceğinden, kod tarama görevini ana üretim işlem hattınızın ayrı, kopyalanmış bir işlem hattına eklemenizi veya yeni bir işlem hattı oluşturmanızı öneririz.
Görevleri aşağıdaki sırayla ekleyin:
- Gelişmiş Güvenlik CodeQL Başlatma (AdvancedSecurity-Codeql-Init@1)
- Özelleştirilmiş derleme adımlarınız
- Gelişmiş Güvenlik CodeQL Çözümlemesi Gerçekleştirme (AdvancedSecurity-Codeql-Analyze@1)
Ayrıca, görevde hangi dili analiz ettiğinizi Initialize CodeQL belirtin. Birden çok dili aynı anda çözümlemek için virgülle ayrılmış bir liste kullanabilirsiniz. Desteklenen diller şunlardır: csharp, cpp, go, java, javascript, python, ruby, swift. Kendi barındırdığınız aracıları kullanıyorsanız, aracınız için en son CodeQL bitlerini otomatik olarak yüklemek amacıyla enableAutomaticCodeQLInstall: true değişkenini de ekleyebilirsiniz.
İşte bir örnek başlangıç işlem hattı:
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
Ayrıca, görevde hangi dili analiz ettiğinizi Initialize CodeQL belirtin. Belirtilen dil ise swift, özel derleme adımları gereklidir.
İpucu
- Java, Kotlin veya her ikisinde yazılmış kodu analiz etmek için
javakullanın. - JavaScript, TypeScript veya her ikisinde yazılmış kodu analiz etmek için kullanın
javascript.
Kendi barındırdığınız bir aracıda çalıştırıyorsanız ve en son CodeQL paketini aracı araç önbelleğinize manuel olarak yüklemediyseniz, aracınızdaki en son CodeQL parçalarını otomatik olarak kullanmak için Enable automatic CodeQL detection and installation öğesini seçin.
Uyarı oluşturmak için, kod tarama görevlerini içeren bir işlem hattıyla ilk taramanızı çalıştırın.
Kod tarama için diğer yapılandırmalar
Dil ve sorgu desteği
GitHub uzmanlar, güvenlik araştırmacıları ve topluluk katkıda bulunanları kod tarama için kullanılan varsayılan CodeQL sorgularını yazar ve korur. Sorgular, analizi geliştirmek ve hatalı pozitif sonuçları azaltmak için düzenli olarak güncelleştirilir. Sorgular açık kaynak, böylece github/codeql deposundaki sorguları görüntüleyebilir ve bu sorgulara katkıda bulunabilirsiniz.
CodeQL aşağıdaki dil tanımlayıcılarını destekler ve kullanır:
| Dil | Tanımlayıcı |
|---|---|
| C/C++ | cpp |
| C# (programlama dili) | csharp |
| Başlayın | go |
| Java/Kotlin | java |
| JavaScript/TypeScript | javascript |
| Python | python |
| Ruby programlama dili | ruby |
| Rust | rust |
| Hızlı | swift |
İpucu
- C, C++ veya her ikisinde yazılmış kodu analiz etmek için kullanın
cpp. - Java, Kotlin veya her ikisinde yazılmış kodu analiz etmek için
javakullanın. - JavaScript, TypeScript veya her ikisinde yazılmış kodu analiz etmek için kullanın
javascript.
Daha fazla bilgi için bkz . Desteklenen diller ve çerçeveler.
CodeQL'in derleme günlüğünde yürüttüğü belirli sorguları ve görev ayrıntılarını görüntüleyebilirsiniz. Varsayılan kurulumu kullandığınızda, gelişmiş günlük görüntüleyicisi, Azure DevOps aracı havuzu iş günlüğü görünümünde belirli tarama çalıştırmalarını bulmanıza ve gözden geçirmenize yardımcı olmak için daha net çalıştırma adlandırması ve yeni durum ve depo filtreleri sağlar.
Kod tarama derleme modunu özelleştirme
Kod tarama, tarama için bir işlem hattı ayarlarken iki derleme modunu destekler:
-
none- CodeQL veritabanı, kod tabanı oluşturulmadan doğrudan kod tabanından oluşturulur (tüm yorumlanan diller için ve ayrıca ,cppvejavaiçincsharpdesteklenir). -
manual- iş akışındaki kod tabanı için kullanılacak derleme adımlarını tanımlarsınız (tüm derlenmiş diller için desteklenir).
Her derleme modunun avantajlarıyla ilgili bir karşılaştırma da dahil olmak üzere farklı derleme modları hakkında daha fazla bilgi için bkz . Derlenmiş diller için CodeQL kod tarama.
İpucu
Derleme modu none JavaScript, Python, Ruby gibi diğer yorumlanmış dillerle kullanılabilir.
C# veya Java için derleme modu none belirtilirse ve bu modları desteklemeyen diğer derlenmiş dillerle birlikte kullanılırsa, işlem hattı görevi başarısız olur.
Aşağıdaki kodda birden çok dil ve none derleme modu içeren geçerli bir yapılandırma örneği gösterilmektedir:
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
Aşağıdaki kodda birden çok dil ve none derleme modu içeren geçersiz yapılandırma örneği gösterilmektedir:
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
Kod tarama uyarıları
GitHub Advanced Security for Azure DevOps kod tarama uyarıları, depo bazında kod tarama bayraklarını içerir ve bunlar, kod düzeyindeki uygulama güvenlik açıklarını bildirir.
Kod taramayı kullanmak için önce Azure DevOps için
Azure DevOps'daki Repos altındaki Gelişmiş Güvenlik sekmesi, kod tarama uyarılarınızı görüntülemek için merkezdir. Tarama uyarılarını görüntülemek için Kod tarama sekmesini seçin. Dal, durum, işlem hattı, kural türü ve önem derecelerine göre filtreleyebilirsiniz. Şu anda, uyarı merkezi PR dallarında tamamlanan tarama uyarılarını göstermez.
İşlem hatları veya dallar yeniden adlandırılırsa sonuçların bir etkisi olmaz. Yeni adın görüntülenmesi 24 saat kadar sürebilir.
Özel CodeQL sorguları çalıştırmayı seçerseniz, farklı sorgu paketlerinden oluşturulan uyarılar için varsayılan olarak ayrı bir filtre yoktur. Her sorgu için ayrı olan kurala göre filtreleyebilirsiniz.
Deponuz için Gelişmiş Güvenlik'i kapatırsanız, Gelişmiş Güvenlik sekmesinde ve derleme görevinde sonuçlara erişimi kaybedersiniz. Derleme görevi başarısız olmaz, ancak Gelişmiş Güvenlik devre dışı bırakıldığında derlemelerden elde edilen sonuçlar gizlidir ve korunmaz.
Uyarı ayrıntıları
Düzeltme kılavuzu da dahil olmak üzere daha fazla ayrıntı için bir uyarı seçin. Her uyarı bir konum, açıklama, örnek ve önem derecesi içerir.
| Bölüm | Açıklama |
|---|---|
| Konum | Konumlar bölümünde CodeQL'in bir güvenlik açığı algıladığı belirli bir örnek ayrıntılı olarak açıklanmıştır. Kodunuzun aynı kuralı ihlal eden birden çok örneği varsa, her farklı konum için yeni bir uyarı oluşturulur. Konumlar kartı, etkilenen kod parçacığına doğrudan bir bağlantı içerir, böylece düzenlemek üzere Azure DevOps web kullanıcı arabirimine yönlendirilecek kod parçacığını seçebilirsiniz. |
| Açıklama | Açıklama, sorundan yola çıkarak CodeQL aracı tarafından sağlanır. |
| Öneri | Öneri, belirli bir kod tarama uyarısı için önerilen düzeltmedir. |
| Örnek | Örnek bölümde, kodunuzda tanımlanan zayıflık basitleştirilmiş bir örnek gösterilmektedir. |
| Ciddiyet | Önem düzeyleri düşük, orta, yüksek veya kritik olabilir. Önem derecesi, belirlenen Ortak Zayıflık Numaralandırması (CWE) için verilen Ortak Güvenlik Açığı Puanlama Sistemi (CVSS) puanına göre belirlenir. Bu GitHub blog gönderisinde önem derecelerinin nasıl puanlanmış olduğu hakkında daha fazla bilgi edinin. |
Depo için uyarıları görüntüleme
Depo için katkıda bulunan izinleri olan herkes, Repos altındaki Gelişmiş Güvenlik sekmesinde bir depo için tüm uyarıların özetini görüntüleyebilir. Tüm gizli dizi tarama uyarılarını görüntülemek için Kod tarama sekmesini seçin.
Sonuçları görüntülemek için önce kod tarama görevlerinin çalıştırılması gerekir. İlk tarama tamamlandıktan sonra, algılanan tüm güvenlik açıkları Gelişmiş Güvenlik sekmesinde görüntülenir.
Varsayılan olarak, uyarılar sayfasında deponun varsayılan dalı için kod tarama sonuçları gösterilir.
Belirli bir uyarının durumu, uyarı diğer dallarda ve işlem hatlarında bulunsa bile varsayılan dalın ve en son çalıştırılan işlem hattının durumunu yansıtır.
Kod tarama uyarılarını kapatma
Uyarıları kapatmak için uygun izinlere sahip olmanız gerekir. Varsayılan olarak, yalnızca proje yöneticileri Gelişmiş Güvenlik uyarılarını kapatabilir.
Uyarıyı kapatmak için:
- Kapatmak istediğiniz uyarıya gidin ve uyarıyı seçin.
- Uyarıyı kapat açılır menüsünü seçin.
- Henüz seçili değilse, kapatma nedeni olarak Risk kabul edildi veya Hatalı pozitif seçeneğini belirleyin.
- Açıklama metin kutusuna isteğe bağlı bir açıklama ekleyin.
- Uyarıyı göndermek ve kapatmak için Kapat'ı seçin.
- Uyarı durumu Açık olan Kapalı olarak değişir ve kapatma nedeniniz görüntülenir.
Bu eylem uyarıyı tüm dallarda kaldırır. Aynı güvenlik açığını içeren diğer dallar da kapatılır. Daha önce kapatılan tüm uyarılar el ile yeniden açılabilir.
Çekme isteklerinde kod tarama uyarılarını yönetme
Çekme isteğinde yeni kod değişiklikleri için uyarılar oluşturulursa, uyarı, çekme isteğinin Genel Bakış sekmesinin açıklama bölümünde ek açıklama olarak ve Gelişmiş Güvenlik deposu sekmesinde bir uyarı olarak bildirilir. Çekme isteği dalı için yeni bir dal seçici girdisi var.
Etkilenen kod satırlarını gözden geçirebilir, bulmanın özetini görebilir ve Genel Bakış bölümünde ek açıklamayı çözümleyebilirsiniz.
Çekme isteği uyarılarını kapatmak için uyarı ayrıntı görünümüne gidip hem uyarıyı kapatmanız hem de ek açıklamayı çözümlemeniz gerekir. Aksi takdirde, açıklama durumunun (1) değiştirilmesi ek açıklamayı çözer, ancak altta yatan uyarıyı kapatmaz veya düzeltmez.
Çekme isteği dalınızın tüm sonuç kümesini görmek için Repos>Gelişmiş Güvenlik gidin ve çekme isteği dalınızı seçin. Ek açıklama üzerinde Daha fazla ayrıntı göster (2) seçeneğinin seçilmesi sizi Gelişmiş Güvenlik sekmesindeki uyarı ayrıntı görünümüne yönlendirir.
İpucu
Ek açıklamalar yalnızca etkilenen kod satırları çekme isteğinin hedef dalı ile karşılaştırıldığında çekme isteği farkı için tamamen benzersiz olduğunda oluşturulur.