SAST Tek Başına Yeterli mi? Otomatik Tarama ve Manuel Kaynak Kod Analizi
SAST otomasyonu neyi görür, neyi göremez? Business logic açıkları, false positive/negative ve manuel kod analizinin rolü.

SAST, modern yazılım güvenliği programlarının en önemli araçlarından biridir.
Kaynak kod içerisindeki veri akışlarını analiz edebilir.
SQL Injection, Cross-Site Scripting, Command Injection, Path Traversal ve benzeri birçok güvenlik problemini daha yazılım production ortamına ulaşmadan tespit edebilir.
CI/CD pipeline'larına entegre edilebilir.
Her commit sonrasında otomatik çalışabilir.
Geliştiricilere kod yazarken güvenlik geri bildirimi verebilir.
Bütün bunlar SAST'ı son derece güçlü bir teknoloji haline getirir.
Ancak burada kritik bir soru vardır:
Bir kurum güçlü bir SAST ürünü satın aldığında ve bütün kaynak kodunu taradığında artık uygulamanın güvenli olduğunu söyleyebilir mi?
Cevap:
Hayır.
Çünkü SAST kaynak kod güvenliğinin çok önemli bir parçasıdır ancak bütün güvenlik problemlerini tek başına göremez.
Bir otomatik analiz motoru kaynak kod içerisindeki pattern'leri, fonksiyonları, veri akışlarını ve potansiyel güvenlik risklerini analiz edebilir.
Fakat uygulamanın gerçek iş mantığını her zaman anlayamaz.
Bir bankacılık uygulamasında belirli kullanıcının hangi işlemleri yapması gerektiğini bilemez.
Bir e-ticaret platformunda indirim kodunun hangi şartlarda kullanılabileceğini anlayamayabilir.
Bir insan kaynakları sisteminde hangi yöneticinin hangi personel dosyasına erişmesi gerektiğini kurumun iş kurallarını bilmeden değerlendiremez.
Bu nedenle uygulama güvenliğinde en güçlü yaklaşım:
Otomasyon + İnsan Uzmanlığı
kombinasyonudur.
Modern Application Security programlarında SAST önemli bir ilk savunma katmanı olarak kullanılmalı ancak manuel kaynak kod analizi, business logic değerlendirmesi ve sızma testi gibi yöntemlerle desteklenmelidir.
1. SAST'ın Güçlü Olduğu Alanlar
Öncelikle SAST'ın neden bu kadar önemli olduğunu doğru anlamak gerekir.
SAST sistemlerinin en büyük avantajlarından biri çok büyük kod tabanlarını kısa süre içerisinde analiz edebilmesidir.
Bir uygulamada milyonlarca satır kaynak kod bulunabilir.
Bütün bu kodun insan tarafından satır satır incelenmesi hem çok uzun sürer hem de ekonomik olarak sürdürülebilir değildir.
SAST otomasyon sayesinde bu yükün önemli bölümünü üstlenir.
Özellikle belirli güvenlik problemlerinde oldukça başarılı olabilir.
Örneğin:
- SQL Injection
- Command Injection
- Path Traversal
- Cross-Site Scripting
- Güvensiz kriptografi kullanımı
- Riskli fonksiyon çağrıları
- Hard-coded credential
- Hata yönetimi problemleri
- Güvensiz veri akışları
gibi birçok alan otomatik analiz için uygundur.
SAST ayrıca tekrar eden güvenlik problemlerinin sistematik şekilde tespit edilmesini sağlar.
Örneğin bir kurumun 200 farklı repository'si bulunuyorsa her repository üzerinde aynı güvenlik kuralları otomatik olarak uygulanabilir.
Bu, manuel analiz ile sağlanması zor olan önemli bir standardizasyon avantajıdır.
2. Otomatik Güvenlik Analizinin Temel Sınırı
SAST sistemlerinin temel problemi teknolojinin kötü olması değildir.
Asıl problem kaynak kod güvenliğinin yalnızca teknik pattern'lerden oluşmamasıdır.
Bir güvenlik açığı bazen bir fonksiyon çağrısından veya yanlış API kullanımından kaynaklanır.
Böyle durumlarda otomatik sistem oldukça başarılı olabilir.
Ancak bazı açıklar uygulamanın işleyişinden kaynaklanır.
Bu tür güvenlik açıklarını anlamak için yalnızca kodun syntax'ını değil, uygulamanın ne yapmak istediğini de bilmek gerekir.
Örneğin uygulamada şu kod olabilir:
if user.isAuthenticated():
transferMoney()
Kodda authentication kontrolü vardır.
SAST sistemi bunun güvenli olduğunu düşünebilir.
Ancak gerçek iş kuralı şu olabilir:
Bir kullanıcının yalnızca kendi hesabından para transferi yapabilmesi gerekir.
Kod kullanıcının login olduğunu doğruluyor ancak transfer yapılan hesabın gerçekten kullanıcıya ait olup olmadığını kontrol etmiyorsa ciddi Broken Access Control problemi bulunmaktadır.
Buradaki açık syntax hatası değildir.
İş mantığı hatasıdır.
3. Business Logic Açığı Nedir?
Business Logic Vulnerability, uygulamanın iş kurallarının yanlış veya eksik uygulanması sonucunda ortaya çıkan güvenlik problemidir.
Bu tür açıklar klasik güvenlik açıklarından farklı olabilir.
Bir SQL Injection saldırısında saldırgan zararlı SQL payload gönderir.
Business Logic saldırısında ise saldırgan uygulamanın normal fonksiyonlarını kötüye kullanabilir.
Örneğin bir e-ticaret uygulamasında indirim kodunun yalnızca bir kez kullanılması gerekiyor olabilir.
Ancak backend indirim kodunun kullanım sayısını kontrol etmiyorsa saldırgan aynı kodu tekrar tekrar kullanabilir.
Burada saldırgan zararlı kod çalıştırmamıştır.
SQL Injection yapmamıştır.
XSS payload göndermemiştir.
Sadece sistemin normal fonksiyonunu beklenmeyen şekilde kullanmıştır.
Bu nedenle Business Logic açıkları otomatik güvenlik araçlarının en zorlandığı alanlardan biridir.
4. Business Logic Açıklarına Örnekler
Business Logic güvenlik problemleri sektör ve uygulamaya göre değişebilir.
Örneğin bir finans uygulamasında:
- transfer limitinin aşılması,
- negatif tutarla işlem yapılması,
- farklı müşterinin hesabından işlem başlatılması,
- onay sürecinin atlanması
gibi problemler oluşabilir.
Bir e-ticaret uygulamasında:
- indirim kodunun sınırsız kullanılması,
- ürün fiyatının client tarafından değiştirilmesi,
- negatif ürün adedi gönderilmesi,
- ödeme tamamlanmadan sipariş oluşturulması
gibi açıklar bulunabilir.
Bir rezervasyon sisteminde:
- başka kullanıcının rezervasyonunun iptal edilmesi,
- ücretsiz rezervasyon oluşturulması,
- tarih kısıtlamalarının atlanması
gibi güvenlik problemleri ortaya çıkabilir.
Bu açıkların ortak özelliği uygulamanın iş kurallarına bağlı olmalarıdır.
Dolayısıyla otomatik SAST motorunun bunları anlaması her zaman mümkün değildir.
5. Manuel Kaynak Kod Analizi Nedir?
Manuel kaynak kod analizi, güvenlik uzmanının uygulamanın kaynak kodunu güvenlik perspektifinden incelemesidir.
Bu süreç yalnızca satır satır kod okumak değildir.
Uzman öncelikle uygulamanın mimarisini anlamaya çalışır.
Örneğin:
- uygulamanın hangi modüllerden oluştuğu,
- authentication mekanizmasının nasıl çalıştığı,
- authorization yapısının nasıl uygulandığı,
- kullanıcı rollerinin nasıl tanımlandığı,
- verilerin hangi sistemlerde tutulduğu,
- kritik iş fonksiyonlarının neler olduğu,
- dış servis entegrasyonlarının nasıl gerçekleştiği
analiz edilir.
Ardından güvenlik açısından kritik kod bölgelerine odaklanılır.
Bu yaklaşım SAST'ın ürettiği genel görünürlüğü insan uzmanlığıyla derinleştirir.
6. Manuel Kod Analizinin Avantajı Nedir?
Manuel kaynak kod analizinin en büyük avantajı context, yani bağlamı anlayabilmesidir.
Bir güvenlik uzmanı kodu yalnızca programlama dili açısından değerlendirmez.
Şu soruları da sorabilir:
Bu fonksiyon ne yapıyor?
Kimler bu fonksiyonu çağırabilir?
Bu veri neden burada kullanılıyor?
Yetkilendirme gerçekten doğru kullanıcıya uygulanıyor mu?
Bir saldırgan bu akışı farklı sırada çalıştırabilir mi?
Birden fazla fonksiyon bir araya geldiğinde güvenlik problemi oluşuyor mu?
Bu tür değerlendirmeler otomatik sistemlerin sınırlı olduğu alanlardır.
7. SAST ve Manuel Analiz Birbirinin Alternatifi midir?
Hayır.
Bu iki yöntem birbirinin alternatifi değil tamamlayıcısıdır.
SAST çok büyük miktarda kodu hızlı şekilde analiz eder.
Manuel analiz ise kritik noktaları daha derin değerlendirir.
En güçlü model şu şekilde çalışır:
SAST → Otomatik Bulgular → Triaging → Manuel Analiz → Risk Doğrulama
Bu yaklaşım güvenlik ekibinin verimliliğini önemli ölçüde artırabilir.
SAST binlerce kod satırı içerisindeki potansiyel risk noktalarını belirler.
Güvenlik uzmanı ise bu noktalarda gerçek güvenlik riskinin bulunup bulunmadığını değerlendirir.
8. False Positive Problemi
SAST sistemlerinde en çok karşılaşılan problemlerden biri False Positive yani yanlış pozitif sonuçlardır.
False Positive, aracın güvenlik açığı olduğunu düşündüğü ancak gerçekte istismar edilebilir olmayan durumları ifade eder.
Örneğin SAST sistemi kullanıcı girdisinin SQL sorgusuna ulaştığını görebilir.
Ancak uygulama framework seviyesinde otomatik parameterization kullanıyor olabilir.
Araç framework davranışını doğru anlayamazsa SQL Injection bulgusu oluşturabilir.
Bu durumda raporda güvenlik açığı görünür ancak gerçekte sistem güvenlidir.
False Positive sayısı arttıkça güvenlik operasyonu zorlaşır.
Çünkü ekip zamanını gerçek olmayan bulguları araştırmak için harcamaya başlar.
9. False Positive Neden Tehlikelidir?
İlk bakışta False Positive yalnızca zaman kaybı gibi görünebilir.
Ancak uzun vadede daha ciddi bir problem oluşturabilir.
Eğer geliştiriciler sürekli yanlış güvenlik uyarıları alırsa araçlara olan güven azalır.
Bu duruma bazen Alert Fatigue denir.
Geliştirici her gün onlarca önemsiz uyarı görüyorsa zamanla uyarıları dikkate almamaya başlayabilir.
Sonuçta gerçek kritik güvenlik açığı da aynı liste içerisinde kaybolabilir.
Bu nedenle başarılı bir SAST programının amacı maksimum sayıda bulgu üretmek değildir.
Amaç:
yüksek doğrulukta ve uygulanabilir güvenlik bulguları üretmektir.
10. False Negative Problemi
False Negative, gerçek bir güvenlik açığının SAST tarafından tespit edilememesidir.
Bu durum False Positive'den daha kritik olabilir.
Çünkü sistem herhangi bir uyarı üretmez.
Ekip kodun güvenli olduğunu düşünebilir.
Ancak gerçek güvenlik problemi production ortamına ulaşmış olabilir.
Örneğin karmaşık bir authorization problemi SAST tarafından görülemeyebilir.
Business Logic açığı tespit edilmeyebilir.
Framework'e özgü özel bir güvenlik problemi analiz motorunun kurallarında bulunmayabilir.
Bu nedenle SAST raporunda kritik bulgu bulunmaması:
“Uygulama güvenlidir.”
anlamına gelmez.
11. Neden Hiçbir Araç %100 Güvenlik Sağlayamaz?
Yazılım güvenliği deterministik bir problem değildir.
Bir uygulamanın güvenliği yalnızca kullanılan fonksiyonların listesiyle belirlenemez.
Uygulama mimarisi,
iş kuralları,
kullanıcı rolleri,
deployment ortamı,
veri akışları,
harici entegrasyonlar,
network erişimleri
birlikte değerlendirilmelidir.
Bu nedenle SAST dahil hiçbir otomatik güvenlik aracı %100 güvenlik garantisi veremez.
Amaç zaten bütün güvenliği tek bir ürüne yüklemek değildir.
Modern güvenlik mimarisinde farklı güvenlik katmanları birlikte çalışır.
12. Security Triaging Nedir?
SAST tarafından bulunan bulguların güvenlik uzmanları tarafından incelenerek gerçek risklerin belirlenmesi sürecine genellikle Security Triaging denir.
Triaging sırasında güvenlik uzmanı bulguyu değerlendirir.
Örneğin:
- Kod gerçekten erişilebilir mi?
- Kullanıcı girdisi gerçekten kontrol edilebilir mi?
- Güvenlik kontrolü başka katmanda uygulanıyor mu?
- Bulgu production ortamında geçerli mi?
- Saldırgan hangi şartlarda istismar edebilir?
- Gerçek iş etkisi ne olabilir?
Bu değerlendirme sonucunda bulgu;
- True Positive
- False Positive
- Accepted Risk
- Not Exploitable
- Needs Investigation
gibi kategorilere ayrılabilir.
Bu süreç SAST operasyonlarının en önemli aşamalarından biridir.
13. True Positive Nedir?
True Positive, SAST aracının tespit ettiği bulgunun gerçekten güvenlik açığı olmasıdır.
Ancak burada da önemli bir ayrım vardır.
Her True Positive aynı risk seviyesine sahip değildir.
Örneğin iki farklı SQL Injection bulgusu olabilir.
Birincisi internet üzerinden erişilebilen kritik ödeme sisteminde bulunabilir.
İkincisi yalnızca lokal test ortamında kullanılan bir araçta olabilir.
Teknik zafiyet aynı olsa bile iş riski tamamen farklıdır.
Bu nedenle profesyonel güvenlik değerlendirmesinde yalnızca teknik severity yeterli değildir.
14. Risk = Teknik Açık Değildir
Application Security programlarında sık yapılan hatalardan biri teknik severity ile gerçek riski aynı kabul etmektir.
Gerçek risk değerlendirmesinde farklı faktörler birlikte ele alınmalıdır.
Örneğin:
Risk = Teknik Etki × İstismar Edilebilirlik × Erişilebilirlik × İş Kritikliği
şeklinde düşünülebilir.
Bir güvenlik açığı teknik olarak kritik olabilir.
Ancak ilgili kod production ortamında kullanılmıyorsa gerçek risk daha düşük olabilir.
Buna karşılık teknik olarak Medium görünen bir authorization problemi çok hassas müşteri verilerine erişim sağlıyorsa iş etkisi kritik olabilir.
Bu nedenle SAST skorları kör şekilde kabul edilmemelidir.
15. Reachability Analysis Neden Önemlidir?
Bir kod tabanında güvenlik açısından riskli kütüphane veya fonksiyon bulunması her zaman o zafiyetin istismar edilebilir olduğu anlamına gelmez.
Örneğin riskli fonksiyon hiç çağrılmıyor olabilir.
Sadece eski test kodunda bulunabilir.
Uygulamanın dışarıdan erişilemeyen bir bölümünde olabilir.
Bu nedenle modern güvenlik programlarında Reachability Analysis giderek daha önemli hale gelmektedir.
Temel soru şudur:
Saldırgan bu güvenlik problemine gerçekten ulaşabilir mi?
Reachability değerlendirmesi hem False Positive sayısını azaltır hem de gerçek risklerin daha doğru önceliklendirilmesini sağlar.
16. Kodun Çalışma Ortamı Neden Önemlidir?
Statik analiz kaynak kodu inceler.
Ancak gerçek güvenlik riski bazen çalışma ortamına bağlıdır.
Örneğin bir fonksiyon teorik olarak SSRF açığı içeriyor olabilir.
Ancak production ortamındaki network policy nedeniyle sunucu hiçbir internal sisteme erişemiyor olabilir.
Risk hâlâ vardır ancak etkisi farklı olabilir.
Tersi de mümkündür.
Kodda küçük görünen SSRF problemi cloud ortamında metadata servislerine erişim sağlayabiliyorsa çok kritik hale gelebilir.
Dolayısıyla kod güvenliğini değerlendirirken deployment context önemlidir.
17. Runtime Güvenlik Problemleri
Bazı güvenlik problemleri uygulama çalışmadan tam olarak değerlendirilemez.
Örneğin:
- Session yönetimi
- Cache davranışı
- HTTP güvenlik header'ları
- CORS yapılandırması
- TLS ayarları
- Reverse proxy davranışı
- WAF etkisi
- Authentication token yaşam döngüsü
runtime ortamında daha iyi değerlendirilebilir.
Bu nedenle SAST'ın yanında DAST ve manuel pentest gibi dinamik test yöntemleri önemlidir.
18. SAST ve DAST Arasındaki Tamamlayıcı İlişki
SAST uygulamanın içini görür.
DAST ise uygulamaya dışarıdan bakar.
Bu iki perspektif birbirini tamamlar.
Örneğin SAST kaynak kod içerisinde potansiyel XSS bulabilir.
DAST çalışan uygulamada bu XSS'nin gerçekten tetiklenip tetiklenmediğini test edebilir.
SAST SQL sorgusuna ulaşan riskli veri akışını gösterebilir.
DAST gerçek HTTP request üzerinden saldırı davranışını değerlendirebilir.
Dolayısıyla güvenlik programında:
SAST + DAST
kombinasyonu güçlü bir temel oluşturur.
Ancak business logic ve ileri seviye saldırı senaryoları için yine manuel pentest gerekir.
19. Manuel Pentest Neden Hâlâ Gereklidir?
Otomasyonun hızla gelişmesine rağmen manuel sızma testi önemini korumaktadır.
Çünkü saldırganlar yalnızca bilinen pattern'leri kullanmaz.
Birden fazla fonksiyonu zincirleyebilir.
Uygulamanın iş mantığını manipüle edebilir.
Kullanıcı rollerini karşılaştırabilir.
API çağrı sırasını değiştirebilir.
Bir düşük seviye açığı başka bir açıkla birleştirerek kritik saldırı oluşturabilir.
Bu tür senaryolara Attack Chaining denebilir.
SAST tek bir kod bölgesindeki güvenlik problemini görebilir.
Pentest uzmanı ise farklı zafiyetleri bir araya getirerek gerçek saldırı etkisini değerlendirebilir.
20. Attack Chaining Nedir?
Attack Chaining, birden fazla güvenlik probleminin birlikte kullanılmasıyla daha ciddi saldırı oluşturulmasıdır.
Örneğin tek başına düşük riskli bilgi ifşası bulunabilir.
Başka bir noktada zayıf authorization problemi olabilir.
Üçüncü noktada tahmin edilebilir identifier yapısı bulunabilir.
Bu üç problem birlikte kullanıldığında saldırgan hassas verilere erişebilir.
Otomatik araçlar bu bulguları ayrı ayrı raporlayabilir.
Ancak insan uzman saldırı zincirini görebilir.
Bu nedenle manuel güvenlik testinin değeri yalnızca yeni bulgu bulmak değildir.
Bulgular arasındaki ilişkiyi anlamaktır.
21. Code Review ile Security Code Review Aynı Şey midir?
Hayır.
Normal Code Review genellikle;
- kod kalitesi,
- okunabilirlik,
- performans,
- naming convention,
- mimari standartlar
üzerine odaklanabilir.
Security Code Review ise saldırgan perspektifinden değerlendirme yapar.
Örneğin:
- kullanıcı kontrollü veri nereden geliyor?
- authorization atlanabilir mi?
- hassas bilgi loglanıyor mu?
- güvenli olmayan kriptografi var mı?
- yarış durumu oluşabilir mi?
- dosya işlemi manipüle edilebilir mi?
gibi sorular sorulur.
Dolayısıyla klasik Code Review süreçlerine güvenlik kontrol listelerinin eklenmesi önemlidir.
22. Peer Review Güvenlik İçin Yeterli midir?
Peer Review oldukça faydalıdır.
Bir geliştiricinin yazdığı kodun başka geliştirici tarafından incelenmesi birçok hatanın erken yakalanmasını sağlar.
Ancak güvenlik uzmanlığı ayrı bir yetkinliktir.
Geliştiriciler uygulamanın fonksiyonel ve mimari yapısını çok iyi bilir.
Güvenlik uzmanları ise saldırgan davranışları ve güvenlik zafiyetleri konusunda uzmanlaşır.
En güçlü model bu iki bakış açısını birleştirir.
Bu nedenle kritik uygulamalarda:
Developer Peer Review + SAST + Security Code Review
birlikte kullanılabilir.
23. Güvenlik Uzmanı Kaynak Kodda Nereye Bakar?
Manuel kaynak kod analizi bütün kodu eşit derinlikte incelemek anlamına gelmez.
Risk bazlı yaklaşım kullanılır.
Özellikle aşağıdaki bölgeler daha kritik olabilir:
- Authentication modülleri
- Authorization kontrolleri
- Payment işlemleri
- Dosya yükleme fonksiyonları
- SQL ve database erişimi
- Cryptography kullanımı
- API endpoint'leri
- Admin fonksiyonları
- Password reset akışları
- Token üretimi
- External service çağrıları
- Serialization işlemleri
Bu alanlar saldırgan açısından daha yüksek değer taşıdığı için daha detaylı analiz edilebilir.
24. Authentication Kodunun Manuel İncelenmesi
Authentication güvenlik sisteminin en kritik bölümlerinden biridir.
Manuel analiz sırasında örneğin şu kontroller yapılabilir:
- Parolalar nasıl saklanıyor?
- Password hashing güvenli mi?
- Brute force koruması var mı?
- MFA bypass mümkün mü?
- Session ID güvenli üretiliyor mu?
- Password reset tokenları tahmin edilebilir mi?
- Token süresi doğru mu?
- Logout gerçekten session'ı geçersiz kılıyor mu?
Bu kontrollerin bazıları SAST tarafından sınırlı ölçüde analiz edilebilir.
Ancak bütün authentication yaşam döngüsünün değerlendirilmesi insan analizi gerektirebilir.
25. Authorization Kodunun Manuel İncelenmesi
Authorization, manuel analiz açısından en kritik alanlardan biridir.
Güvenlik uzmanı farklı kullanıcı rollerini anlamaya çalışır.
Örneğin:
- User
- Manager
- Administrator
- Auditor
- API Service Account
gibi roller olabilir.
Ardından kritik endpoint ve fonksiyonların hangi rollere açık olduğu değerlendirilir.
Özellikle Object Level Authorization kontrolleri incelenir.
Şu soru önemlidir:
Kullanıcının sisteme giriş yapmış olması dışında, ilgili nesneye erişim hakkı gerçekten doğrulanıyor mu?
Bu kontrol BOLA ve IDOR gibi güvenlik problemlerinin tespitinde kritik rol oynar.
26. Race Condition ve İşlem Sırası Problemleri
Bazı business logic açıkları eşzamanlı işlemlerden kaynaklanır.
Örneğin bir kullanıcının kuponu yalnızca bir kez kullanması gerekiyor olabilir.
Ancak aynı anda iki HTTP request gönderildiğinde her iki işlem de kuponu kullanılmamış olarak görebilir.
Sonuçta kupon iki kez kullanılır.
Bu tür durumlara Race Condition denir.
SAST bazı teknik yarış durumlarını tespit edebilir.
Ancak gerçek iş etkisinin anlaşılması çoğu zaman dinamik test gerektirir.
Bu örnek SAST + manuel pentest kombinasyonunun neden güçlü olduğunu gösterir.
27. Mass Assignment Problemleri
Modern API uygulamalarında kullanıcı tarafından gönderilen JSON verisinin doğrudan model nesnesine bağlanması yaygındır.
Örneğin kullanıcı profil güncellemesi için şu veri gönderilebilir:
{"name":"Ali","surname":"Yılmaz"}
Ancak backend bütün alanları otomatik olarak kabul ediyorsa saldırgan şu alanı eklemeyi deneyebilir:
{"name":"Ali","role":"admin"}
Eğer uygulama role alanını da model içerisine bind ediyorsa ciddi authorization problemi oluşabilir.
Bu tür açıklar framework davranışına ve business logic'e bağlı olduğundan otomatik analiz sistemleri tarafından her zaman doğru tespit edilemeyebilir.
28. Second-Order Vulnerability Nedir?
Bazı güvenlik açıklarında zararlı veri sisteme girdiği anda saldırı gerçekleşmez.
Veri önce veritabanına kaydedilir.
Daha sonra farklı bir fonksiyon tarafından kullanıldığında güvenlik açığı tetiklenir.
Buna Second-Order Vulnerability denebilir.
Örneğin kullanıcı girdisi veritabanına kaydedilir.
Aylar sonra admin panelinde bu veri güvenli olmayan şekilde SQL sorgusunda veya HTML çıktısında kullanılır.
Bu tür uzun veri akışlarını otomatik analiz etmek oldukça zordur.
Gelişmiş SAST sistemleri bazı durumlarda tespit edebilir ancak manuel analiz hâlâ değerli olabilir.
29. Framework Güvenlik Özellikleri SAST'ı Yanıltabilir mi?
Evet.
Modern framework'ler birçok güvenlik özelliğini otomatik uygular.
Örneğin:
- otomatik output encoding,
- CSRF protection,
- parameterized ORM query,
- authentication middleware
gibi kontroller bulunabilir.
SAST motoru framework davranışını doğru modellemiyorsa False Positive oluşturabilir.
Tersi de mümkündür.
Framework varsayılan olarak güvenli olabilir ancak geliştirici güvenlik kontrolünü manuel olarak devre dışı bırakmış olabilir.
Bu nedenle teknoloji stack'ini anlayan güvenlik uzmanının analizi önemlidir.
30. Custom Framework ve Internal Library Problemi
Büyük kurumlar çoğu zaman kendi geliştirdikleri framework ve internal library sistemlerini kullanır.
SAST ürünü bu özel kütüphanelerin güvenlik davranışlarını bilmeyebilir.
Örneğin kurumun kendi sanitization fonksiyonu bulunabilir.
Araç bunu tanımadığı için binlerce False Positive üretebilir.
Bu durumda SAST çözümünde custom rule veya custom sanitizer tanımları oluşturulması gerekir.
Bu ayarlar profesyonel SAST operasyonunun önemli parçalarındandır.
31. SAST Tuning Nedir?
SAST aracı kurulduktan sonra doğrudan binlerce repository üzerinde çalıştırmak ideal yaklaşım değildir.
Sistem kurumun teknoloji yapısına göre optimize edilmelidir.
Bu sürece SAST Tuning denebilir.
Tuning kapsamında:
- False Positive kuralları,
- custom source tanımları,
- custom sink tanımları,
- sanitizer fonksiyonları,
- framework davranışları,
- severity mapping,
- exclusion listeleri
gibi ayarlar yapılabilir.
Amaç aracın kurumun gerçek yazılım yapısını daha iyi anlamasını sağlamaktır.
32. SAST Politikaları Nasıl Oluşturulmalıdır?
SAST bulgularının nasıl yönetileceği açık politikalarla belirlenmelidir.
Örneğin kurum şöyle bir politika oluşturabilir:
Critical: Release engellenir.
High: Release öncesi remediation gerekir.
Medium: Belirlenen SLA içerisinde düzeltilir.
Low: Backlog'a alınır.
Ancak bu politika yalnızca araç severity değerine bağlı olmamalıdır.
İş kritikliği ve gerçek istismar koşulları da dikkate alınmalıdır.
33. Security Quality Gate Her Bulguda Pipeline'ı Durdurmalı mı?
Hayır.
Bu sık yapılan DevSecOps hatalarından biridir.
Eğer her düşük seviyeli SAST uyarısı build'i durdurursa geliştiriciler güvenlik sistemini bir engel olarak görmeye başlar.
Bu durum zamanla kontrollerin bypass edilmesine yol açabilir.
Quality Gate risk bazlı olmalıdır.
Örneğin:
- yeni Critical bulgu,
- doğrulanmış High severity güvenlik açığı,
- hard-coded production credential,
- internet-facing uygulamada kritik Injection
gibi durumlarda pipeline durdurulabilir.
Daha düşük riskli bulgular ticket sistemine aktarılabilir.
34. Legacy Kodlarda SAST Nasıl Uygulanmalıdır?
Yıllardır geliştirilen büyük bir uygulamada SAST ilk kez çalıştırıldığında binlerce bulgu çıkabilir.
Bu durumda bütün açıkları bir anda düzeltmeye çalışmak gerçekçi olmayabilir.
Daha uygulanabilir yaklaşım New Code Policy kullanmaktır.
Mevcut teknik borç backlog olarak yönetilir.
Ancak yeni yazılan kodun güvenlik standardını düşürmesine izin verilmez.
Temel prensip:
Yeni güvenlik açığı üretme.
Ardından eski güvenlik borcu risk bazlı şekilde azaltılır.
35. Security Debt Nedir?
Security Debt, geçmişten gelen ve henüz giderilmemiş güvenlik problemlerini ifade eder.
Technical Debt kavramına benzer.
Örneğin eski uygulamada yüzlerce düşük ve orta seviyeli güvenlik problemi bulunabilir.
Bunların tamamını aynı anda düzeltmek mümkün olmayabilir.
Bu nedenle Security Debt ölçülmeli ve yönetilmelidir.
Kritik riskler önceliklendirilmeli,
tekrar eden güvenlik hatalarının kök nedeni belirlenmeli
ve zaman içerisinde borç azaltılmalıdır.
36. SAST Bulguları Geliştiriciye Nasıl Sunulmalıdır?
Güvenlik ekibinin başarısı yalnızca güvenlik açığını bulmasına bağlı değildir.
Bulgunun geliştirici tarafından anlaşılması da gerekir.
Kötü bir bulgu:
“CWE-89 bulundu. Düzeltin.”
şeklinde olabilir.
İyi bir bulgu ise:
- riskli kod satırını,
- Source noktasını,
- Sink noktasını,
- saldırı senaryosunu,
- güvenli alternatif kodu
gösterir.
Geliştiricinin problemi birkaç dakika içerisinde anlayabilmesi remediation süresini önemli ölçüde azaltır.
37. Developer Experience Neden Önemlidir?
DevSecOps programlarının başarısında geliştirici deneyimi kritik öneme sahiptir.
Güvenlik sistemi sürekli yanlış alarm üretirse,
tarama çok uzun sürerse,
raporlar anlaşılmazsa,
geliştirici güvenlik ekibine sürekli ticket açmak zorunda kalırsa
sistem sürdürülebilir olmaz.
İyi AppSec programı güvenliği geliştirici workflow'una entegre eder.
Örneğin bulgu doğrudan Pull Request içerisinde gösterilebilir.
Güvenli kod önerisi aynı ekranda sunulabilir.
Geliştirici başka bir platforma geçmeden problemi çözebilir.
38. İnsan Uzmanlığı Nerede En Değerlidir?
Otomasyon özellikle ölçek ve hız konusunda güçlüdür.
İnsan uzmanlığı ise bağlam ve yaratıcılık konusunda güçlüdür.
Manuel güvenlik uzmanının en fazla değer sağladığı alanlar genellikle şunlardır:
- Business Logic
- Authorization
- Authentication
- Attack Chaining
- Complex Data Flow
- Race Condition
- Custom Cryptography
- Kritik mimari kararlar
- Uygulamaya özgü güvenlik modeli
Bu nedenle en iyi güvenlik programı otomasyon ile insanı karşı karşıya getirmez.
İkisini birlikte kullanır.
39. İdeal Kaynak Kod Güvenliği Modeli
Modern kurumsal kaynak kod güvenliği modeli şu şekilde kurgulanabilir:
Katman 1 – Developer Controls
Secure Coding
IDE Security Plugin
Peer Review
Katman 2 – Automated Security
SAST
SCA
Secret Scanning
Katman 3 – Security Review
SAST Triaging
Manual Code Review
Architecture Review
Katman 4 – Runtime Testing
DAST
API Security Testing
Pentest
Katman 5 – Continuous Improvement
Retest
Metrics
Secure Coding Training
Security Champion
Bu yaklaşım güvenliği tek bir üründen çıkararak bütün yazılım yaşam döngüsüne yayar.
40. SAST + Manuel Kod Analizi + Pentest Modeli
Pratik açıdan en güçlü yaklaşımlardan biri üç farklı bakış açısını birleştirmektir.
SAST
Kodun tamamında geniş ölçekli otomatik analiz sağlar.
Manuel Kaynak Kod Analizi
Kritik kod bölgelerinde bağlamsal ve derin analiz gerçekleştirir.
Pentest
Çalışan uygulamayı gerçek saldırgan perspektifinden değerlendirir.
Bu üç yöntem bir araya geldiğinde farklı güvenlik kör noktaları önemli ölçüde azalır.
SAST kodu görür.
Pentest uygulamanın davranışını görür.
Manuel uzman ise ikisi arasındaki ilişkiyi yorumlayabilir.
SecureSys SAST ve Manuel Kaynak Kod Analizi Yaklaşımı
SecureSys olarak kaynak kod güvenliği çalışmalarında yalnızca otomatik tarama çıktılarının raporlanmasını yeterli bir güvenlik yaklaşımı olarak değerlendirmiyoruz.
SAST büyük kod tabanlarında görünürlük sağlamak ve güvenlik problemlerini erken aşamada belirlemek açısından kritik öneme sahiptir.
Ancak gerçek güvenlik riskinin ortaya çıkarılması için bulguların uygulama bağlamında değerlendirilmesi gerekir.
Bu nedenle proje kapsamına göre;
SAST + Security Triaging + Manuel Kaynak Kod Analizi + SCA + Secret Scanning + DAST + Pentest
katmanları birlikte kullanılabilir.
Özellikle;
- kritik authentication fonksiyonları,
- authorization mekanizmaları,
- finansal işlem akışları,
- hassas veri işlemleri,
- API servisleri,
- dosya işlemleri,
- admin fonksiyonları
gibi yüksek riskli alanlar daha derin manuel değerlendirmeye alınabilir.
Temel hedefimiz mümkün olan en fazla güvenlik bulgusunu üretmek değildir.
Gerçek, istismar edilebilir ve iş açısından önemli güvenlik risklerini ortaya çıkarmaktır.
Çünkü güvenlik raporunun değeri sayfa sayısıyla veya bulgu sayısıyla ölçülmez.
Gerçek değer;
kurumun hangi riskleri önce çözmesi gerektiğini doğru gösterebilmesidir.
Sık Sorulan Sorular
SAST tek başına yeterli midir?
Hayır. SAST güçlü bir otomatik güvenlik kontrolüdür ancak Business Logic, karmaşık authorization problemleri ve runtime güvenlik problemleri gibi bazı açıkları tespit edemeyebilir.
Manuel kaynak kod analizi gerekli midir?
Özellikle kritik uygulamalarda önerilir. Manuel analiz uygulamanın iş mantığı, authentication, authorization ve karmaşık veri akışlarının güvenlik uzmanı tarafından değerlendirilmesini sağlar.
False Positive nedir?
SAST aracının gerçekte istismar edilebilir olmayan bir durumu güvenlik açığı olarak raporlamasıdır.
False Negative nedir?
Gerçek bir güvenlik açığının SAST tarafından tespit edilememesidir.
SAST ile pentest arasındaki fark nedir?
SAST kaynak kodu analiz eder. Pentest çalışan uygulamaya saldırgan perspektifinden yaklaşır. İki yöntem birbirini tamamlar.
Business Logic açığı nedir?
Uygulamanın iş kurallarının yanlış veya eksik uygulanması sonucunda ortaya çıkan güvenlik açığıdır. Otomatik güvenlik sistemleri tarafından tespit edilmesi zor olabilir.
SAST bulgularının manuel doğrulanması gerekir mi?
Özellikle kritik bulgularda önerilir. Böylece False Positive sonuçlar ayıklanabilir ve gerçek risk seviyesi daha doğru belirlenebilir.
SAST bütün kaynak kodu manuel analiz etmenin yerine geçebilir mi?
SAST manuel analizin ihtiyaç duyduğu kod miktarını önemli ölçüde azaltabilir ancak kritik iş fonksiyonlarında insan uzmanlığının tamamen yerini alamaz.
Sonuç: Otomasyon Hızı Sağlar, İnsan Bağlamı Anlar
SAST modern Application Security programlarının vazgeçilmez teknolojilerinden biridir.
Milyonlarca satır kaynak kodu analiz edebilir.
Güvenlik kontrollerini CI/CD pipeline'ına taşıyabilir.
Geliştiricilere kod yazarken geri bildirim verebilir.
Bilinen güvenlik problemlerini sistematik şekilde tespit edebilir.
Ancak bir uygulamanın gerçekten güvenli olup olmadığını anlamak yalnızca pattern matching veya data flow analizi ile mümkün değildir.
Çünkü yazılım güvenliği aynı zamanda;
iş mantığıdır.
kullanıcı yetkisidir.
mimaridir.
veri akışıdır.
saldırgan davranışıdır.
Bu nedenle güçlü güvenlik yaklaşımı:
İnsan mı, otomasyon mu?
sorusunu sormaz.
Doğru soru şudur:
İnsan uzmanlığı ve otomasyon birlikte nasıl en verimli şekilde kullanılabilir?
Modern Application Security'nin cevabı da burada yatmaktadır:
Otomasyon ölçek sağlar.
Manuel analiz bağlam sağlar.
Pentest saldırgan perspektifi sağlar.
Bu üç yaklaşım birlikte kullanıldığında güvenli yazılım geliştirme yolculuğu çok daha güçlü hale gelir.
İlgili Makaleler
Kaynak Kod Analizi (Kod Güvenliği)

Kaynak Kod Analizi Nedir? SAST ve Kod Güvenliği Rehberi
Kaynak kod analizi nedir, SAST nasıl çalışır ve kod güvenliği neden altyapıdan önce gelir? Kavramlar, yöntemler ve kurumsal yaklaşım.

Güvenlik Açıkları Daha Kod Yazılırken Başlar: Secure Coding ve Secure SDLC Rehberi
Güvenlik açığı üretimde doğmaz; tasarım ve kod aşamasında oluşur. Secure Coding, Shift Left, DevSecOps ve Secure SDLC rehberi.

SAST Nedir? Static Application Security Testing Nasıl Çalışır?
SAST nedir, nasıl çalışır? Source-Sink, taint analysis, false positive, CI/CD entegrasyonu ve araç seçimi tek rehberde.

Kod İçindeki Kritik Güvenlik Açıkları: CWE ve OWASP Perspektifi
Kaynak kodda en kritik güvenlik açıkları: Injection, XSS, Broken Access Control, SSRF ve daha fazlası — CWE ve OWASP perspektifiyle.

Secret, API Key ve Hassas Veri Sızıntıları: Kod Depolarında Görünmeyen Tehlike
Kod depolarındaki görünmeyen tehlike: secret, API key ve credential sızıntıları — tespit, rotation ve Secrets Management.

Açık Kaynak Kütüphaneler ve Software Supply Chain Güvenliği: SCA ve SBOM Rehberi
Açık kaynak bağımlılıkları uygulamanın saldırı yüzeyinin parçasıdır: SCA, SBOM, transitive dependency ve tedarik zinciri saldırıları.
Bu konuda profesyonel destek mi arıyorsunuz?
Uzman ekibimiz ücretsiz danışmanlık için sizi en kısa sürede arasın.