CodeQL — temel kavramlar
CodeQL — fundamental concepts
Bu derste neler öğreneceksin
- CodeQL'in nasıl çalıştığını ve diğer SAST araçlarından farkını anlamak
- CodeQL database, query, ve suite kavramlarını öğrenmek
- Desteklenen programlama dillerini ve analiz türlerini bilmek
- Code scanning alert'larının nasıl oluştuğunu kavramak
CodeQL nedir?
CodeQL, GitHub’ın geliştirdiği semantic (anlam tabanlı) statik kod analiz aracıdır. Kaynak kodu bir veritabanına dönüştürür, ardından bu veritabanı üzerinde SQL benzeri güvenlik sorguları çalıştırır.
Kaynak kodu
↓ (derleme / analiz)
CodeQL Database (snapshot)
↓ (sorgular)
Query suite (QL)
↓
Güvenlik açığı tespiti
↓
Code scanning alerts
Regex tabanlı SAST’tan farkı
Geleneksel SAST araçları regex veya AST (Abstract Syntax Tree) kullanır. CodeQL’in avantajı: data-flow ve taint analysis.
Örnek: user_input değişkeninin SQL sorgusuna ulaşıp ulaşmadığını takip eder.
Regex tabanlı araç bunu yakalayamaz; CodeQL veri akışını izlediği için yakalar.
# CodeQL bunu yakalar: user_input'dan SQL'e path var
user_input = request.GET["id"]
processed = sanitize_incomplete(user_input) # eksik sanitizasyon
cursor.execute("SELECT * FROM users WHERE id=" + processed) # SQL injection
Desteklenen diller
| Dil | Desteklenen sürümler |
|---|---|
| C / C++ | Tüm sürümler |
| C# | .NET Framework + .NET Core |
| Go | 1.11+ |
| Java / Kotlin | Java 7+ |
| JavaScript / TypeScript | ES2015+ |
| Python | 2.7+ / 3.x |
| Ruby | 2.1+ |
| Swift | 5.4+ |
Query suites
CodeQL, sorgu paketleri (query suites) ile organize edilmiştir:
| Suite | Kapsam | Öneri |
|---|---|---|
security-and-quality | Güvenlik + kalite sorunları | Geniş kapsam, daha fazla sonuç |
security-extended | Güvenlik odaklı, geniş | Default’tan geniş |
security (default) | En yaygın güvenlik açıkları | Düşük noise, hızlı |
Sınavda “daha fazla güvenlik açığı tespit et ama false positive tolere edebiliriz”
→ security-extended doğru cevaptır.
Alert tipleri
CodeQL bulguları alert olarak listelenir:
- Location: hangi dosya, hangi satır
- Description: güvenlik açığı tipi (CWE referansı)
- Severity: critical / high / medium / low / note
- Data flow path: güvenlik açığının kaynaktan hedefe giden yolu
Data flow path, “neden güvenlik açığı var?” sorusunu görselleştirmek için kritiktir.
SARIF formatı
CodeQL sonuçları SARIF (Static Analysis Results Interchange Format) formatında GitHub’a yüklenir. Bu standart format sayesinde üçüncü taraf SAST araçları da GitHub code scanning arayüzüyle entegre olabilir.
# SARIF upload (CodeQL dışı araçlar için)
gh code-scanning upload-results \
--ref=refs/heads/main \
--commit=<sha> \
--sarif=results.sarif
Sırada ne var?
Default setup ve advanced setup arasındaki fark — sınavda en sık sorulan CodeQL konusu.