Kod tarama

Azure DevOps için GitHub Advanced Security'de kod tarama, güvenlik açıklarını ve kodlama hatalarını bulmak için bir Azure DevOps deposundaki kodu analiz etmenizi sağlar. Analiz sonucunda tespit edilen tüm sorunlar uyarı olarak bildirilir. Kod tarama, güvenlik açıklarını belirlemek için CodeQL kullanır.

CodeQL, GitHub tarafından güvenlik denetimlerini otomatikleştirmek için 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 Advanced Security, Azure Repos ile çalışır. GitHub depolarıyla GitHub Gelişmiş Güvenlik'i kullanmak istiyorsanız bkz . GitHub Gelişmiş Güvenlik.

Kod tarama için ek 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ı İsteğe bağlı alternatif tanımlayıcılar (varsa)
C/C++ c-cpp c veya cpp
C# csharp
Go go
Java/Kotlin java-kotlin
JavaScript/TypeScript javascript
Python python
Ruby ruby
Swift swift

İpucu

  • C, C++ veya her ikisinde yazılmış kodu analiz etmek için kullanın c-cpp .
  • Java, Kotlin veya her ikisinde yazılmış kodu analiz etmek için kullanın java-kotlin .
  • 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.

Derleme günlüğünde CodeQL tarafından yürütülen belirli sorguları ve görev ayrıntılarını görüntüleyebilirsiniz.

Kod tarama sonuçları yayımlama görevinin ekran görüntüsü.

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 desteklenir ve C# ve Java için de desteklenir).
  • 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.

Azure DevOps için GitHub Gelişmiş Güvenliği aracılığıyla kod tarama analizi çalıştırmak için derleme autobuild modu bunun yerine ayrı bir derleme görevidir. AdvancedSecurity-CodeQL-Autobuild@1

İpucu

Derleme modu none diğer yorumlanmış dillerle (javascript, Python, Ruby gibi) birlikte kullanılabilir. Derleme modunu desteklemeyen diğer derlenmiş dillerle birlikte C# veya Java için derleme nonemodu none belirtilirse işlem hattı görevi başarısız olur.

Birden çok dil ve none derleme modu içeren geçerli bir yapılandırma örneği aşağıda verilmiştir:

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

Birden çok dil ve none derleme modu içeren geçersiz yapılandırma örneği aşağıda verilmiştir:

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ı

Azure DevOps için GitHub Gelişmiş Güvenlik kod tarama uyarıları, kod düzeyinde uygulama güvenlik açıkları uyarısı veren depoya göre kod tarama bayrakları içerir.

Kod taramayı kullanmak için önce Azure DevOps için GitHub Gelişmiş Güvenliği'ni yapılandırmanız gerekir.

Azure DevOps'ta Depolar altındaki Gelişmiş Güvenlik sekmesi, kod tarama uyarılarınızı görüntüleme hub'ıdır. 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ı hub'ı çekme isteği dallarında tamamlanan tarama uyarıları görüntülemez.

İş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.

Bir depo için kod tarama uyarılarının ekran görüntüsü.

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.

Kod tarama uyarı ayrıntılarının ekran görüntüsü.

Section 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 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.
Önem Ö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, Depolar 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 bağımlılık tarama sonuçları gösterilir.

Belirli bir uyarının durumu, uyarı diğer dallarda ve işlem hatlarında mevcut olsa bile varsayılan dalın ve en son çalıştırma 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:

  1. Kapatmak istediğiniz uyarıya gidin ve uyarıyı seçin.
  2. Uyarıyı kapat açılan listesini seçin.
  3. Henüz seçili değilse, kapatma nedeni olarak Risk kabul edildi veya Hatalı pozitif seçeneğini belirleyin.
  4. Açıklama metin kutusuna isteğe bağlı bir açıklama ekleyin.
  5. Uyarıyı göndermek ve kapatmak için Kapat'ı seçin.
  6. Uyarı durumu Açık olan Kapalı olarak değişir ve kapatma nedeniniz görüntülenir.

Kod tarama uyarısını kapatma ekran görüntüsü.

Bu eylem yalnızca seçtiğiniz dalın uyarısını kapatıyor. Aynı güvenlik açığını içeren diğer dallar kapatılana kadar etkin kalı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.

Etkin kod çekme isteği ek açıklamasının ekran görüntüsü.

Ç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 değiştirilmesi (1) ek açıklamayı çözer, ancak temel alınan uyarıyı kapatmaz veya düzeltmez.

Kapalı kod çekme isteği ek açıklamasının ekran görüntüsü.

Çekme isteği dalınızın tüm sonuç kümesini görmek için Repos>Advanced Security'ye 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.