Aracılığıyla paylaş


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.

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.

CodeQL uyarıları

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 hakkında daha ayrıntılı belgeler için GitHub'da CodeQL belgelerini ziyaret edin.

CodeQL hem derlenmiş hem de yorumlanmış dilleri destekler ve desteklenen dillerde yazılmış kodda güvenlik açıklarını ve hataları bulabilir.

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

Daha fazla bilgi için Desteklenen diller ve çerçeveler hakkındaki CodeQL web sitesindeki belgelere bakın.

Bağımlılık taramaya benzer şekilde derleme günlüğüne bakarak CodeQL tarafından kullanılan 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 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.

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 derlemelerin görevle çalıştırdığı sonuçlar gizlenir 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ısı 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.

Kod tarama uyarılarını yönetme

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.

CodeQL ile özel sorgular kullanma

Varsayılan olarak, işlem hattı kurulumunuzda belirtilen özel bir yapılandırma dosyanız yoksa CodeQL kodunuzu analiz etmek için sorgu paketini çalıştırır security-extended . Belirli güvenlik açıklarını ve hataları bulmak için kendi sorgularınızı yazmak için özel CodeQL sorgularını kullanabilirsiniz. Ayrıca CodeQL'in varsayılan çözümlemesini değiştirmek için özel bir yapılandırma dosyası oluşturmanız gerekir.

Mevcut özel sorguları bulmak veya kendi özel sorgunuza katkıda bulunmak için bkz . CodeQL'e Katkıda Bulunma.

Özel sorgularla analiz

Özel sorguyla başlamanın en hızlı yolu, bir sorgu yazmak ve bunu yerel Azure DevOps deponuza kaydetmektir. Özel sorgunun ayrıntılarını ihtiyacınıza göre özelleştirebilirsiniz, ancak en azından bir kural kimliği olmalıdır. Kendi CodeQL sorgunuzu yazma hakkında daha fazla bilgi edinmek için bkz . CodeQL sorguları yazma. Ayrıca birden çok sorguyu bir sorgu paketinde paketleyebilir veya başkaları tarafından yayımlanan paketleri kullanabilirsiniz. Daha fazla bilgi edinmek için bkz . CodeQL paketlerini yayımlama ve kullanma.

Özel yapılandırma dosyası kullanma

Özel yapılandırma dosyası, CodeQL'in kodunuz üzerinde çözümlemesi sırasında çalıştırılacak sorguları yönetmenin bir yoludur. Çalıştırılacak daha fazla sorgu veya sorgu paketi belirtebilir ve varsayılan CodeQL sorgularını değiştirebilir veya devre dışı bırakabilirsiniz.

Eklemek istediğiniz belirli bir sorguyu eklemek için, sorguyu deponuzdaki sorgu dosyasının (.ql) konumunun adını ve yolunu belirtin.

Eklemek istediğiniz belirli bir paketi eklemek için paket adını belirtin. Yapılandırma dosyanızda çalıştırılacak herhangi bir sayıda CodeQL sorgu paketi belirtebilirsiniz.

Sonraki adım bir qlpack.yml dosya oluşturmaktır. Bu dosya CodeQL paketini ve bu paketle ilgili bilgileri bildirir. ile aynı dizindeki (veya alt dizindeki) qlpack.yml tüm *.ql dosyalar paketin bir parçası olarak kabul edilir.

İpucu

Yapılandırma dosyasındaki packs filtresi, GitHub'da barındırılan depolardan paketleri indirmeyi destekler, ancak queries filtresi desteklemez. Paket GitHub'da özelse, görev aracılığıyla AdvancedSecurity-Codeql-Init@1 ortam değişkeni ve değişken adı olarak GITHUB_TOKENbir GitHub erişim belirteci sağlamanız ve belirtecin kapsamının olması read:packagesgerekir.

Aşağıda örnek bir yapılandırma dosyası verilmiştir:

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

İpucu

Yapılandırma dosyası belirtimleri görevin işlem hattı düzeyindeki yapılandırmalarını yoksayar ve öncelik kazanır AdvancedSecurity-Codeql-Init@1 . includepaths / ignorepaths yoksayılır veya varsa paths/paths-ignore , içindeki değerlerle paths/paths-ignoreüzerine yazılır. querysuite veya yapılandırma dosyasında belirtilen queriespacks değerlerle üzerine yazılır.

Herhangi bir özel sorgu kullanıyorsanız, özel sorgularınızın dizinine yerleştirilen bir örnek qlpack.yml aşağıda verilmiştir:

version: 1.0.1
dependencies:
  codeql/javascript-all: "*"
  codeql/javascript-queries: "*"

değişkeni, dependencies bu paketin tüm bağımlılıklarını ve bunların uyumlu sürüm aralıklarını içerir. Her bağımlılık bir CodeQL kitaplık paketi olarak scope/name başvurulur. öğesini tanımlarken dependencies, sorgunuzun qlpack.yml analiz edebildiği dili belirleyen çekirdek dil paketlerinden birine (örneğin JavaScript, C#, Ruby vb.) bağlıdır.

Yapılandırma dosyanızla ilgili daha ayrıntılı öneriler ve yapılandırma seçenekleri için bkz . Kod tarama veya kurulum için qlpack.yml gelişmiş kurulumunuzu özelleştirme, bkz . CodeQL paket yapısı.

Yapılandırma dosyanızı aldıktan sonra CodeQL analizini çalıştıran işlem hattınızı yeni dosyanızı kullanacak şekilde özelleştirmeniz gerekir. Yapılandırma dosyasına işaret eden örnek bir işlem hattı aşağıda verilmiştir:

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

Kod tarama sorunlarını giderme

Genellikle, CodeQL yürütmesi ile ilgili hatalarla karşılaşıyorsanız, CodeQL CLI bir çıkış kodu olarak çalıştığı her komutun durumunu bildirir. Çıkış kodu, sonraki komutlar veya CodeQL CLI kullanan diğer araçlar için bilgi sağlar. Çıkış kodu ayrıntıları hakkında daha fazla bilgi için bkz . Çıkış kodları.

Hata: 'database finalize' CodeQL komutu (32)

Bu hata, ayıklama hataları veya eksik derleme adımları nedeniyle CodeQL veritabanı oluşturma işlemini sonlandırmayla ilgili bir sorunu gösterir.

Sorun giderme adımları:

  1. Kodun var olduğunu ve derlendiğini doğrulama
    • Derlenmiş diller için derleme işleminin kod derlediğini ve ile görevleri arasında gerçekleştiğini AdvancedSecurity-Codeql-InitAdvancedSecurity-Codeql-Analyze doğrulayın. Yaygın derleme komutları ve gerekli bayraklar (temiz önbellek/no-daemon gibi) derleme komutlarını belirtme bölümünde bulunabilir.
    • Yorumlanan diller için, projede belirtilen dil için bazı kaynak kodu olduğunu onaylayın.
  2. Ayıklama hatalarını denetleme
    • Ayıklama hatalarının CodeQL veritabanının durumunu etkileyip etkilemediğini doğrulayın.
    • Genel veritabanı durumunu değerlendirmek için ayıklama hataları ve uyarıları için günlük dosyasını gözden geçirin.
  3. Ezici hataları araştırma
    • Çoğu dosya ayıklayıcı hatalarıyla karşılaşırsa, yanlış ayıklamanın kök nedenini anlamak için daha fazla araştırma yapın.

Hata: otomatik geliştirme betiği (1)

Bu hata, kod tarama kurulumu veya yapılandırmasıyla ilgili bir sorun öneren otomatik derleme hatasını açıklar.

Sorun giderme adımları:

  1. Derleme adımlarını yapılandırma

Hata: Aracı aracı aracı önbelleğinde CodeQL dizinleri bulunamadı

Bu hata, şirket içinde barındırılan aracılar için CodeQL yüklemeyle ilgili bir sorunu gösterir.

Sorun giderme adımları:

  1. Azure DevOps için GitHub Gelişmiş Güvenliğini Yapılandırma bölümünde sağlanan kurulum yönergelerine veya yapılandırma betiklerine bakın.

Hata: dil işlem hattı değişkeni ayarlanmadı

Bu hata, hangi dillerin taranacağını belirten işlem hattı değişkenini ayarlamadan CodeQL'i çalıştırmaya çalışırken oluşur.

Sorun giderme adımları:

  1. Dil işlem hattı değişkenini ayarlama

Sonuç döndürmeden CodeQL

Bu bölümde CodeQL analizinin sonuç vermediği durumlar için rehberlik sağlanır.

Sorun giderme adımları:

  1. Algılanan güvenlik açıklarını denetleme
    • Kodunuzun gerçekten güvenlik açığı olmaması olasılığını göz önünde bulundurun. Güvenlik açıkları bekleniyorsa ancak algılanmadıysa, daha fazla bilgi edinmek için devam edin.
  2. Sorgu paketi yapılandırmasını gözden geçirme
    • Kullanılan sorgu paketini onaylayın ve gerekirse daha kapsamlı bir pakete geçmeyi göz önünde bulundurun.
    • Alternatif olarak, özel sorgu paketleri özel analiz için oluşturulabilir.
  3. Sonuçları görüntüleme izinlerini ayarlama
    • Analiz sonuçlarına erişmek için en azından katkıda bulunan düzeyinde uygun izinlerin verildiğinden emin olun. Daha fazla bilgi için bkz . Gelişmiş Güvenlik izinleri.

CodeQL zaman aşımına uğradı

Görev görüntüleniyorsa This job was abandoned ... we lost contact with the agent ve barındırılan AdvancedSecurity-Codeql-Analyze@1 bir Microsoft aracısı kullanıyorsanız, görev ücretli barındırılan aracılar için altı saatlik yerleşik zaman aşımına uğrundadır. Bunun yerine şirket içinde barındırılan bir aracıda analiz çalıştırmayı deneyebilirsiniz.

Kod tarama görev izinleri

Kod tarama derleme görevi, Gelişmiş Güvenlik REST API'lerini çağırmak için işlem hattı kimliğini kullanır. Varsayılan olarak, aynı projedeki işlem hatları CodeQL analizi çalıştırılarak oluşturulan SARIF dosyasını karşıya yükleme erişimine sahiptir. Bu izinler derleme hizmeti hesabından kaldırılırsa veya özel bir kurulumunuz varsa (örneğin, depodan farklı bir projede barındırılan bir işlem hattı), bu izinleri el ile vermelisiniz.

Sorun giderme adımları:

  • proje kapsamlı işlem hatları için ve Advanced Security: Manage and dismiss alerts koleksiyon kapsamlı işlem hatları için olan işlem hattınızda [Project Name] Build Service ([Organization Name])kullanılan derleme hizmeti hesabına verin Advanced Security: View alerts ve izin verinProject Collection Build Service ([Organization Name]).