
Güvenli Kod İncelemesi, üretim ortamlarına ulaşmadan önce güvenlik açıklarını tanımlamak ve düzeltmek için yazılım kaynak kodunu sistematik olarak inceleyen kritik bir güvenlik uygulamasını temsil eder.
Bu kapsamlı inceleme, geliştirme ekiplerinin yazılım geliştirme yaşam döngüsünde (SDLC) erken güvenlik kusurlarını tespit etmesini ve duyarlı verileri veya sistem bütünlüğünü tehlikeye atabilecek olası ihlalleri önlemelerini sağlayan proaktif bir savunma mekanizması olarak hizmet eder.
Penetrasyon testi gibi reaktif güvenlik önlemlerinin aksine, güvenli kod incelemesi kaynak kod düzeyinde çalışır, güvenlik açıklarının bağlamsal olarak anlaşılması ve daha etkili iyileştirme stratejileri sağlayarak.
Güvenli Kod İnceleme Temellerini Anlama
Güvenli Kod İncelemesi, genel kod kalitesi veya işlevselliği yerine özellikle güvenlik sonuçlarına odaklanarak geleneksel kod incelemesinden temel olarak farklıdır.
Süreç hem otomatik hem de manuel muayene tekniklerini içerir ve yazılımın güvenlik en iyi uygulamalarına ve endüstri standartlarına uygun olmasını sağlamak için birincil hedefi içerir.
Manuel Güvenli Kod İncelemesi, güvensiz kodla ilişkili “gerçek risk” hakkında önemli bir fikir sağlar ve otomatik araçların sıklıkla kaçırdığı bağlamsal anlayış sunar.
Sistematik yaklaşım, mimari tasarımı, algoritmaları, veri yapılarını ve güvenlik açıklarını getirebilecek kodlama kalıplarını incelemeyi kapsar.
Bu kapsamlı değerlendirme, geliştiricilerin sadece güvenlik kusurlarının varlığını değil, aynı zamanda onları yaratan temel kalıpları ve uygulamaları da anlamalarına yardımcı olur ve gelecekteki kalkınma çabalarında daha bilinçli karar vermeyi sağlar.
Statik Uygulama Güvenlik Testi (Sast) Araçları
Sast araçları, uygulamayı yürütmeden kaynak kodunu inceleyerek otomatik güvenlik kodu analizinin omurgasını oluşturur.
Önde gelen SAST çözümleri arasında büyük kod tabanları için Sonarqube, 30’dan fazla dilde hızlı, hafif analiz için SEMGREP ve GO geliştiricileri için GOSEC gibi özel araçlar yer alıyor.
Bu araçlar, güvenlik açıkları hakkında anında geri bildirim sağlayarak CI/CD boru hatlarına sorunsuz bir şekilde entegre olur.
GitHub Eylemlerinde Semgrep için Yapılandırma Örneği:
textname: Semgrep Security Scan
on: [push, pull_request]
jobs:
semgrep:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: returntocorp/semgrep-action@v1
with:
config: >-
p/security-audit
p/secrets
Dinamik Uygulama Güvenlik Testi (DAST) Araçları
Dast araçları, özellikle giriş doğrulama sorunları, kimlik doğrulama sorunları ve sunucu yapılandırma hatalarını tespit etmek için etkili olan güvenlik güvenlik açıkları için çalışan uygulamaları test ederek SAST’ı tamamlar.
OWASP ZAP kapsamlı bir açık kaynaklı Dast çözümü olarak öne çıkarken, ticari seçenekler Acunetix ve Netsparker’ı içeriyor.
GitLab CI/CD’de OWASP ZAP entegrasyonu:
textdast:
stage: security
image: owasp/zap2docker-stable
script:
- mkdir -p /zap/wrk/
- zap-baseline.py -t $TARGET_URL -g gen.conf -r zap-report.html
artifacts:
reports:
dast: zap-report.html
Yazılım Kompozisyon Analizi (SCA) Araçları
SCA araçları, bilinen güvenlik açıkları için üçüncü taraf bileşenleri ve bağımlılıkları analiz ederek, açık kaynaklı yazılımla ilişkili riskler.
Bu araçlar, yazılım bağımlılıklarını güvenlik açığı veritabanlarına karşı tarar, yazılım Materyalleri Yasası (SBOM) oluşturur. Tüm bileşenleri ve güvenlik durumlarını izleyen raporlar.
Gizli tarama araçları
Gizli tarama, kaynak kodu depolarındaki hassas kimlik bilgilerinin, API anahtarlarının ve diğer sırların maruz kalmasını önler. GitLeaks ve Tespit Sikeler gibi araçlar, potansiyel olarak maruz kalan sırları tanımlamak için normal ifadeler ve entropi analizi kullanır.
GitLeaks Yapılandırma Örneği:
text- name: Run Gitleaks
uses: actions/checkout@v3
- uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }}
Aşama 1: Hazırlık ve Planlama
Net inceleme hedefleri oluşturarak başlayın projenizin güvenlik gereksinimleriyle uyumlu. Kapsamlı kapsama alanı sağlamak için geliştiriciler, güvenlik uzmanları ve KG mühendisleri de dahil olmak üzere çeşitli bir inceleme ekibi kurun.
İnceleme ortamını uygun erişim kontrolleri ve gerekli araçlarla hazırlayın.
Temel Hazırlık Kontrol Listesi:
- Kapsamı ve hedefleri tanımlayın
- Güvenli İnceleme Ortamı
- Tarama araçlarını yükleyin ve yapılandırın
- İletişim protokolleri oluşturun
- İnceleme yönergeleri ve kontrol listeleri hazırlayın
Aşama 2: Otomatik analiz
Ortak güvenlik açıklarını ve kod kalitesi sorunlarını tanımlamak için SAST araçlarını kullanarak statik analiz yürütmek. Bu ilk otomatik tarama, dikkat gerektiren alanları vurgulayarak daha ayrıntılı bir manuel inceleme için bir temel sağlar.
Örnek C/C ++ Sast taraması Flawfinder kullanılarak:
bash# Install Flawfinder
pip install flawfinder
# Run security scan
flawfinder --html --context ./src/ > security-report.html
Aşama 3: Manuel Kod İncelemesi
Otomatik araçların kaçırabileceği güvenlik açısından kritik alanlara odaklanan sistematik bir manuel inceleme yapın. Kimlik doğrulama mekanizmalarına, giriş doğrulaması, hata işleme ve veri koruma uygulamalarına özellikle dikkat edin.
Manuel inceleme için kilit alanlar şunları içerir:
Giriş Doğrulama: Tüm harici girdilerin uygun şekilde doğrulandığını, sterilize edildiğini ve kaçtığını doğrulayın. Dinamik sorgu yapısını inceleyerek SQL enjeksiyon güvenlik açıklarını kontrol edin:
java// Vulnerable code
String query = "SELECT * FROM users WHERE id = " + userId;
// Secure alternative using prepared statements
String query = "SELECT * FROM users WHERE id = ?";
PreparedStatement stmt = connection.prepareStatement(query);
stmt.setString(1, userId);
Kimlik Doğrulama ve Yetkilendirme: Oturum yönetimi, şifre politikaları ve erişim kontrol mekanizmalarını gözden geçirin. Hata mesajlarının hassas bilgileri sızdırmadığından ve geçersiz giriş girişimlerinin hız sınırlama ile doğru bir şekilde ele alındığından emin olun.
Hata İşleme: Hata mesajlarını doğrulayın Sistem iç kısımlarını veya hassastır bilgi. Hassas güvenlik verilerini ifşa etmeden kapsamlı bir günlüğü uygulayın.
Aşama 4: Güvenlik Açığı Değerlendirmesi
OWASP Top 10 gibi yerleşik çerçeveleri kullanarak tanımlanmış güvenlik açıklarını sistematik olarak kategorize edin.
- SQL enjeksiyonu: Parametreli sorguları ve saklı yordamları kullanın
- Siteler Arası Komut Dosyası (XSS): Çıktı kodlama ve giriş doğrulamasını uygulayın
- Güvensiz Doğrudan Nesne Referansları: Tüm nesne erişimi için yetkiyi doğrulayın
- Güvenlik yanlış yapılandırması: Sunucuyu ve uygulama yapılandırmalarını inceleyin
Güvenli giriş doğrulaması örneği:
pythonimport re
def validate_email(email):
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if re.match(pattern, email) and len(email) <= 254:
return True
return False
def validate_alphanumeric(input_string):
pattern = r'^[a-zA-Z0-9]+$'
return bool(re.match(pattern, input_string))
Faz 5: Üçüncü taraf bileşen analizi
Üçüncü taraf kütüphanelerinde ve bileşenlerindeki güvenlik açıklarını tanımlamak için SCA araçlarını kullanarak tüm harici bağımlılıkları değerlendirin. Lisanslama uyumluluğunu gözden geçirin ve dış bağımlılıkların güvenlik duruşunu değerlendirin.
Aşama 6: Test ve doğrulama
Hem güvenlik sorunlarının varlığını hem de önerilen iyileştirme önlemlerinin etkinliğini teyit ederek, açık iyileştirme rehberliği ve öncelik düzeyleri olan belgeler bulgularını doğrulayarak hedeflenen test yoluyla tanımlanan güvenlik açıklarını doğrulayın.
Geliştirme iş akışı ile entegrasyon
Güvenlik araçlarını CI/CD boru hatlarına entegre ederek geliştirme sürecinizin ayrılmaz bir parçası olarak güvenli kod incelemesini uygulayın. Otomatik taramaları kod taahhütlerini tetikleyecek şekilde yapılandırın ve geliştirme süreci boyunca sürekli güvenlik değerlendirmesi sağlayarak.
Örnek GitHub Eylemleri İş Akışı Birden Çok Güvenlik Aracını Birleştirme:
textname: Security Pipeline
on: [push, pull_request]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run SAST
uses: github/super-linter@v4
- name: Secret Scanning
uses: trufflesecurity/[email protected]
- name: Dependency Check
uses: dependency-check/Dependency-Check_Action@main
Çözüm
Etkili Güvenli Kod İncelemesi, şeffaf süreçler ve ekip hizalaması ile desteklenen otomatik araçların ve manuel uzmanlığın bir kombinasyonunu gerektirir.
Geliştirme ekipleri, geliştirme hızını korurken güvenlik risklerini önemli ölçüde azaltabilir.
Başarının anahtarı, güvenliğin, sonradan düşünülmeden ziyade geliştirme sürecinin ayrılmaz bir parçası olarak ele alınmasında yatmaktır ve güvenlik hususlarının yazılım geliştirme yaşam döngüsü (SDLC) boyunca yerleşik olmasını sağlamaktır.
Bu tekniklerin düzenli uygulaması, ortaya çıkan tehditler ve güvenlik en iyi uygulamaları hakkında sürekli öğrenme ile birleştiğinde, ekiplerin daha esnek ve güvenli yazılım sistemleri oluşturmalarını sağlar.
Find this News Interesting! Follow us on Google News, LinkedIn, & X to Get Instant Updates!