Modül 4 · Code Security (CodeQL) · ⏱ 12 dakika

Custom queries ve query suites

Custom queries and query suites

Bu derste neler öğreneceksin

  • QL (CodeQL Query Language) temel sözdizimini tanımak
  • Custom query oluşturma ve paketleme yöntemini öğrenmek
  • Query suite ile birden fazla sorguyu gruplamayı kavramak
  • GitHub Code Scanning'e custom query ekleme adımlarını bilmek

Custom query ne zaman gerekir?

GitHub’ın built-in query suite’leri genel güvenlik açıklarını kapsar. Ancak organizasyona özgü güvenlik kuralları için custom query yazman gerekir:

  • Şirket içi API’nin güvensiz kullanımı
  • Özel kriptografi kütüphanesi hataları
  • Compliance gereksinimleri (OWASP Top 10’un organizasyona özgü alt kümeleri)

QL (CodeQL Query Language) temelleri

QL, SQL’e benzer ama kod üzerinde çalışır:

/**
 * @name Hardcoded password
 * @description Finds hardcoded passwords in string assignments
 * @kind problem
 * @problem.severity error
 * @security-severity 9.8
 * @id py/hardcoded-password
 * @tags security
 *       external/cwe/cwe-259
 */

import python

from AssignStmt assign, StrConst password
where
  assign.getATarget().(Name).getId().toLowerCase().matches("%password%")
  and assign.getValue() = password
  and password.getText().length() > 0
select assign, "Hardcoded password found."

Custom query dosya yapısı

.github/
  codeql/
    queries/
      python/
        hardcoded-password.ql
      javascript/
        unsafe-eval.ql
    suites/
      custom-security.yml

Query suite tanımı

Birden fazla sorguyu bir suite olarak grupla:

# .github/codeql/suites/custom-security.yml
- import: codeql-suites/javascript-security.qls
  from: codeql/javascript-all
- queries: queries/javascript/
- exclude:
    id:
      - js/unused-variable  # lint kuralı, güvenlik değil

Workflow’a custom query ekleme

- uses: github/codeql-action/init@v3
  with:
    languages: python
    queries: +security,./.github/codeql/queries/python/
    # '+' prefix: built-in suite'e ek olarak ekle
    # Prefixsiz: sadece belirtilen suite/sorguları kullan

CodeQL paket paylaşımı

Organizasyon genelinde paylaşılacak custom query’ler için CodeQL pack oluştur:

# Pack oluştur
codeql pack init myorg/security-queries

# Pack kullan
codeql pack add myorg/security-queries@1.0.0

Pack’ler GitHub Container Registry (GHCR) veya GitHub Packages üzerinden dağıtılabilir.

Sınavda custom query soruları

  • “Şirketimizdeki özel kütüphanenin güvensiz kullanımını tespit etmek istiyoruz” → Custom CodeQL query + advanced setup

  • “10 farklı repoda aynı custom sorguyu çalıştırmak istiyoruz” → CodeQL pack oluştur, organization genelinde paylaş

  • “Custom query çalışıyor ama default setup’ta kullanamıyoruz” → Default setup custom query desteklemiyor → advanced setup gerekli

Sırada ne var?

CodeQL CLI ve database build — local geliştirme ve CI dışında analiz.