Nedir bu CVE ve Neden Önemli ?
Selam! Bugün sizlere “CVE” (Common Vulnerabilities and Exposures) kavramını detaylı bir şekilde anlatmak istiyorum. Bu yazı hem yeni başlayanlar hem de ileri düzey güvenlik profesyonelleri için detaylı bilgiler sunacak şekilde hazırlanmıştır.
CVE Nedir ve Nasıl Oluşur?
CVE (Common Vulnerabilities and Exposures), dünya çapında güvenlik açıklarını tanımlayan ve standartlaştıran bir sistemdir. Bu sistem, 1999 yılında MITRE Corporation tarafından geliştirilmiş ve 2005 yılından itibaren NIST (National Institute of Standards and Technology) ile birlikte sürdürülmektedir.
CVE Nedir?
CVE, her güvenlik açığı için benzersiz bir kimlik numarası (identifier) verir. Her CVE numarası şu formatta olur:
- CVE-YYYY-NNNNN
- CVE: Sistem adı
- YYYY: Açığın raporlandığı yıl
- NNNNN: Yıl içindeki sıralı numara
Örnek: CVE-2023-12345
Bu örnek, 2023 yılında kaydedilen ve sıralı numarası 12345 olan bir güvenlik açığını temsil eder.
CVE Nasıl Oluşur?
- Güvenlik araştırmacıları ya da yazılım geliştiricileri, sistemlerdeki açıkları fark eder.
- Bir CVE Numbering Authority (CNA) tarafından bu açıklar CVE numarası ile kaydedilir.
- MITRE ve NIST bu açıkları merkezi veritabanında (NVD) yayımlar ve güncel tutarlar.
CVE’nin Ana Bileşenleri
Her CVE girdisi şu unsurları içerir:
{
"cve": {
"id": "CVE-2023-12345",
"description": {
"lang": "en",
"value": "A critical vulnerability in Apache Struts allows remote code execution..."
},
"references": [
{
"source": "mitre.org",
"tags": ["External-Authority"],
"url": "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-12345"
}
],
"cvss": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"baseScore": 9.8,
"baseSeverity": "Critical"
}
}
}
CVE Veritabanının Yapısı
1. Vulnerability Data Format
Her CVE girdisi şu yapıya sahiptir:
{
"cve": {
"id": "CVE-2021-44228",
"sourceIdentifier": "cve@mitre.org",
"published": "2021-12-10T17:30:00.000Z",
"lastModified": "2022-01-05T12:45:00.000Z",
"vulnStatus": "Analyzed",
"descriptions": [
{
"lang": "en",
"value": "Apache Log4j 2.x through 2.14.1 has a critical vulnerability that allows remote code execution via a specially crafted log message."
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "nvd@nist.gov",
"type": "Primary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "HIGH",
"baseScore": 10.0,
"baseSeverity": "CRITICAL"
}
}
]
},
"weaknesses": [
{
"source": "nvd@nist.gov",
"type": "Primary",
"description": [
{
"lang": "en",
"value": "CWE-20: Improper Input Validation"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:apache:log4j:2.0:*:*:*:*:*:*:*",
"matchCriteriaId": "E3F9B2C7-6C4A-4D3B-8E1A-F3B9C2A7E8F5"
}
]
}
]
}
],
"references": [
{
"source": "apache.org",
"url": "https://logging.apache.org/log4j/2.x/security.html"
}
]
}
}
CVE’nin Teknik Detayları
CVSS Skorlama Sistemi
CVSS (Common Vulnerability Scoring System), bir güvenlik açığının riskini sayısal olarak ifade eder. Skorlama şu kriterlere göre yapılır:
CVSS 3.1 Vektör Örneği:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Açıklama:
- AV:N: Uzaktan erişim (Network)
- AC:L: Kolay saldırı (Low Complexity)
- PR:N: Giriş izni gerekmez (None)
- UI:N: Kullanıcı etkileşimi gerekmez (None)
- S:U: Etki alanı sınırlı (Unchanged)
- C:H: Yüksek hassasiyet (High Confidentiality)
- I:H: Yüksek bütünlük (High Integrity)
- A:H: Yüksek erişilebilirlik (High Availability)
CVE Tarama Yöntemleri
1. NIST NVD (National Vulnerability Database)
NIST NVD, CVE veritabanının resmi ve en kapsamlı kaynağıdır. NIST, her yıl milyonlarca güvenlik açıklarını takip etmektedir.
NVD Kullanım Özellikleri:
- CVE numarası ile arama yapma
- Yazılım sürümleri için filtreleme
- CVSS puanına göre sıralama
- Filtreleme: Yılına, cihaz türüne göre
Web sitesi: https://nvd.nist.gov
NVD Arama Örneği:
Arama: “Log4j 2.0 – 2.15.0”
Sonuç: CVE-2021-44228 ve diğer ilgili açıklar listelenir.
2. CVE Search (Açık Kaynak)
CVE Search, açık kaynaklı bir araçtır ve aşağıdaki özellikleri sunar:
- CVE veritabanı sorgulama
- Otomatik tarama (CLI ve web arayüzü)
- Filtreleme: Sürüm, sistem türü, CVSS skoru
GitHub: https://github.com/cve-search/cve-search
3. Yazılım Geliştirme Sürecinde CVE Tarama
CI/CD Zincirlerinde CVE Kontrolü:
- OWASP Dependency-Check: Geliştirilen yazılımdaki bağımlılıklar için CVE taraması yapar.
- Snyk: Geliştiricilerin projelerindeki güvenlik açıklarını tespit eder.
- GitHub Security Scanning: GitHub reposundaki güvenlik açıklarını otomatik olarak tespit eder.
Örnek: OWASP Dependency-Check Kullanımı
dependency-check.sh --project "MyProject" --scan /path/to/project.jar --outputFormat ALL
4. Sistem Tarama Araçları ile CVE Tarama
Nessus:
- Nessus, Cisco tarafından geliştirilen güvenlik tarama aracıdır.
- CVE veritabanı ile entegre çalışır ve sistemlerdeki açıkları tespit eder.
- Nessus Scanner ile tarama yapıldığında sistemdeki CVE’ler listelenir.
OpenVAS:
- OpenVAS, açık kaynaklı güvenlik tarama sistemidir.
- CVE veritabanı ile entegre çalışarak açıkları tespit eder.
Qualys:
- Qualys, bulut tabanlı güvenlik tarama platformudur.
- CVE veritabanı ile entegre çalışır ve sistemlerin güvenlik durumunu raporlar.
CVE Tarama Raporu Örnekleri
Örnek 1: Log4Shell (CVE-2021-44228) Tarama Raporu
Tarama Tarihi: 15 Ocak 2023
Hedef Sistem: Apache Tomcat 9.0.58
Taranan Yazılım: Log4j 2.14.1
# CVE-2021-44228 - Log4Shell Tarama Raporu
## Temel Bilgiler
- **CVE ID**: CVE-2021-44228
- **CVSS Skoru**: 10.0 (Kritik)
- **Etki Alanı**: Apache Log4j
- **Tarih**: 2021-12-10
## Açığın Tanımı
Apache Log4j 2.x sürümünde, uzaktan kod çalıştırma (RCE) açıkları mevcuttur.
Bu açığa bağlı olarak saldırganlar sistemdeki herhangi bir komutu çalıştırabilir.
## Etkilenen Sistemler
- Apache Log4j 2.0 - 2.14.1
- Apache Tomcat 9.0.58
- WildFly 24.0.1
## Risk Değerlendirmesi
- **CVSS Vektör**: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- **Risk Seviyesi**: Kritik (10.0/10)
- **Etki**: Tam sistem kontrolü, veri sızdırma
## Tarama Sonuçları
- **Log4j Sürümü**: 2.14.1 (Etkilenen)
- **Yükleme Yolu**: /opt/tomcat/lib/log4j-core-2.14.1.jar
- **Güvenlik Açığı**: CVE-2021-44228
## Önerilen Çözüm
1. Log4j 2.15.0 veya üzeri sürümlere güncelleme yapın
2. Uygulama düzeyinde log4j konfigürasyonlarını kontrol edin
3. Uygulama güvenlik testlerini tekrarlayın
## Tarama Detayı
Örnek 2: Apache Struts (CVE-2021-41938) Tarama Raporu
# CVE-2021-41938 - Apache Struts Tarama Raporu
## Temel Bilgiler
- **CVE ID**: CVE-2021-41938
- **CVSS Skoru**: 9.8 (Kritik)
- **Etki Alanı**: Apache Struts
- **Tarih**: 2021-09-23
## Açığın Tanımı
Apache Struts 2.x sürümlerindeki güvenlik açıkları, uzaktan kod çalıştırma ve dosya erişimi izni sağlar.
## Etkilenen Sistemler
- Apache Struts 2.0.0 - 2.5.30
- Tomcat 9.0.45
- JBoss EAP 7.2
## Risk Değerlendirmesi
- **CVSS Vektör**: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
- **Risk Seviyesi**: Kritik (9.8/10)
- **Etki**: Uzaktan kod çalıştırma, sistem erişimi
## Tarama Sonuçları
- **Struts Sürümü**: 2.5.20 (Etkilenen)
- **Yükleme Yolu**: /opt/webapps/struts-app/WEB-INF/lib/struts2-core-2.5.20.jar
- **Güvenlik Açığı**: CVE-2021-41938
## Önerilen Çözüm
1. Apache Struts 2.5.30 veya üzeri sürümlere güncelleme
2. Uygulama güvenlik kontrollerini yeniden yapın
3. Gerekli güvenlik duvarı ayarlarını uygulayın
## Tarama Detayı
CVE Uygulama Senaryoları
1. Kurumsal Güvenlik Politikası Uygulaması
Senaryo: Finansal Kurum Güvenlik Taraması
# Güvenlik Politikası - CVE Tarama Süreci
security_policy:
name: "Kurumsal CVE Tarama Politikası"
version: "1.0"
effective_date: "2023-01-01"
scope:
- "Tüm üretim sistemleri"
- "Geliştirme ortamları"
- "Bulut tabanlı uygulamalar"
cve_treatment:
critical_cves:
- "CVSS Score > 9.0"
- "Acil güncelleme gerekliliği"
- "Sistem durdurulabilir"
high_cves:
- "CVSS Score 7.0-8.9"
- "Günlük kontrol"
- "2 hafta içinde güncelleme"
medium_cves:
- "CVSS Score 4.0-6.9"
- "Aylık kontrol"
- "3 ay içinde güncelleme"
automated_scanning:
tools:
- "Nessus"
- "OWASP Dependency-Check"
- "Snyk"
frequency: "Günlük"
reporting: "Haftalık"
compliance:
standards:
- "ISO 27001"
- "NIST SP 800-53"
- "PCI DSS"
2. DevSecOps Entegrasyonu
CI/CD Pipeline CVE Kontrolü
# GitHub Actions Workflow - CVE Tarama
name: Security Scan
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Run OWASP Dependency Check
uses: dependency-check-action@v2.0.0
with:
project: "MyProject"
scan: "./target/*.jar"
format: "ALL"
outputDirectory: "./reports"
- name: Upload Security Report
uses: actions/upload-artifact@v2
with:
name: security-report
path: ./reports/
- name: Fail on Critical CVEs
run: |
if grep -q "CRITICAL" ./reports/dependency-check-report.html; then
echo "Critical CVEs found - Build failed"
exit 1
fi
3. Konteyner Tabanlı CVE Tarama
Docker Image CVE Kontrolü
#!/bin/bash
# Docker Image CVE Tarama Script
IMAGE_NAME="nginx:1.21.6"
SCAN_RESULT="/tmp/scan_result.json"
# Trivy ile tarama
trivy image --format json --output $SCAN_RESULT $IMAGE_NAME
# CVE kontrolü
echo "=== CVE Tarama Sonuçları ==="
cat $SCAN_RESULT | jq '.Vulnerabilities[] | select(.VulnerabilityID != null) | .VulnerabilityID + " - " + .Severity'
# Kritik CVE kontrolü
CRITICAL_CVES=$(cat $SCAN_RESULT | jq -r '.Vulnerabilities[] | select(.Severity == "CRITICAL") | .VulnerabilityID')
if [ -n "$CRITICAL_CVES" ]; then
echo "Kritik CVE'ler bulundu:"
echo "$CRITICAL_CVES"
exit 1
fi
echo "Güvenlik taraması tamamlandı - Hiç kritik CVE bulunamadı"
CVE Kod Örnekleri ve Uygulamalar
1. Python ile CVE Tarama Araçları
#!/usr/bin/env python3
# CVE Tarama Araçları
import requests
import json
from datetime import datetime
class CVETrapper:
def __init__(self):
self.nvd_api_url = "https://services.nvd.nist.gov/rest/json/cves/2.0"
def search_cve_by_id(self, cve_id):
"""CVE ID ile arama"""
url = f"{self.nvd_api_url}?cveId={cve_id}"
response = requests.get(url)
return response.json()
def search_cve_by_keyword(self, keyword, max_results=10):
"""Anahtar kelime ile arama"""
url = f"{self.nvd_api_url}?keywordSearch={keyword}&resultsPerPage={max_results}"
response = requests.get(url)
return response.json()
def get_cve_details(self, cve_id):
"""CVE detaylarını alma"""
cve_data = self.search_cve_by_id(cve_id)
if 'vulnerabilities' in cve_data:
vuln = cve_data['vulnerabilities'][0]
return {
'id': cve_id,
'description': vuln['cve']['descriptions'][0]['value'],
'cvss_score': vuln['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseScore'],
'severity': vuln['cve']['metrics']['cvssMetricV31'][0]['cvssData']['baseSeverity'],
'published_date': vuln['cve']['published'],
'last_modified': vuln['cve']['lastModified']
}
return None
# Kullanım Örneği
if __name__ == "__main__":
trapper = CVETrapper()
# CVE-2021-44228 taraması
cve_details = trapper.get_cve_details("CVE-2021-44228")
if cve_details:
print(f"CVE ID: {cve_details['id']}")
print(f"CVSS Skoru: {cve_details['cvss_score']}")
print(f"Ağırlık: {cve_details['severity']}")
print(f"Yayımlanma Tarihi: {cve_details['published_date']}")
2. Docker Compose ile CVE Tarama Ortamı
# docker-compose.yml - CVE Tarama Ortamı
version: '3.8'
services:
cve-scanner:
image: aquasec/trivy:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /tmp/trivy-report:/tmp/trivy-report
command: image --format json --output /tmp/trivy-report/report.json nginx:latest
nvd-api:
image: node:16-alpine
volumes:
- ./nvd-api.js:/app/nvd-api.js
working_dir: /app
command: node nvd-api.js
vulnerability-reporter:
image: python:3.9-alpine
volumes:
- ./report_generator.py:/app/report_generator.py
working_dir: /app
command: python report_generator.py
networks:
cve-network:
driver: bridge
3. Shell Script ile Otomatik CVE Tarama
#!/bin/bash
# Otomatik CVE Tarama Scripti
# Ayarlar
LOG_FILE="/var/log/cve_scanner.log"
REPORT_DIR="/reports"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
# CVE tarama fonksiyonu
scan_cve() {
local target=$1
echo "[$(date)] Taranıyor: $target" >> $LOG_FILE
# OWASP Dependency Check
if command -v dependency-check &> /dev/null; then
echo "OWASP Dependency Check çalıştırılıyor..." >> $LOG_FILE
dependency-check.sh --project "$target" --scan "./$target.jar" --outputFormat ALL --out $REPORT_DIR
fi
# Trivy ile konteyner taraması
if command -v trivy &> /dev/null; then
echo "Trivy taraması başlatılıyor..." >> $LOG_FILE
trivy image --format json --output "$REPORT_DIR/trivy_$DATE.json" "$target"
fi
echo "[$(date)] Tarama tamamlandı: $target" >> $LOG_FILE
}
# Ana tarama döngüsü
for target in "$@"; do
scan_cve "$target"
done
# Kritik CVE raporlama
echo "=== Kritik CVE Raporu ===" > "$REPORT_DIR/critical_cves_$DATE.txt"
grep -r "CRITICAL" $REPORT_DIR/*.json | tee -a "$REPORT_DIR/critical_cves_$DATE.txt"
echo "Tarama raporları oluşturuldu: $REPORT_DIR"
CVE Tarama Süreci Adımları
1. CVE Veritabanına Erişim
# NVD API ile CVE taraması
curl "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228" | jq '.'
2. Yazılım Sürüm Kontrolü
# Docker konteynerlarında sürüm kontrolü
docker run --rm alpine:latest sh -c "apk info | grep log4j"
3. Risk Değerlendirmesi
# Risk değerlendirme fonksiyonu
def evaluate_cve_risk(cve_data):
cvss_score = cve_data.get('cvss_score', 0)
if cvss_score >= 9.0:
return "CRITICAL"
elif cvss_score >= 7.0:
return "HIGH"
elif cvss_score >= 4.0:
return "MEDIUM"
else:
return "LOW"
4. Güncelleme ve Patch Uygulama
# Güvenlik güncellemesi uygulama
sudo apt-get update && sudo apt-get install --only-upgrade apache2
CVE’nin Önemi: Gerçek Hayat Örneği
Örnek 1: Log4Shell (CVE-2021-44228)
Açığın Tanımı: Apache Log4j kütüphanesindeki bir güvenlik açığı, uzaktan kod çalıştırma (RCE) izni sağlar.
Etki Alanı:
- Java tabanlı uygulamalar
- Web sunucuları (Tomcat, WildFly)
- Mobil uygulamalar
CVSS Skoru: 10.0 (Kritik)
Etki:
- Sistemlerin tamamen kontrol altına alınması
- Veri sızdırılması
- Sistemlerin tamamen çökmesi
Güncelleme: Apache Log4j 2.15.0 ve üzeri sürümlerde bu açık kapatılmıştır.
Örnek 2: Heartbleed (CVE-2014-0160)
Açığın Tanımı: OpenSSL kütüphanesindeki bir hafıza okuma hatası, sistemdeki hassas verilerin çalınmasına neden olur.
CVSS Skoru: 7.5 (Yüksek)
Etki:
- SSL/TLS bağlantısında veri sızdırma
- Kullanıcı kimlik bilgilerinin çalınması
Güncelleme: OpenSSL 1.0.1g ve üzeri sürümlerde düzeltildi.
CVE’nin Geliştirici ve Geliştirme Süreci Rolü
1. Geliştirme Sürecinde CVE Entegrasyonu
CI/CD Pipeline ile CVE Kontrolü
# Jenkins Pipeline - CVE Kontrolü
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Security Scan') {
steps {
sh '''
# OWASP Dependency Check çalıştırma
dependency-check.sh --project "MyApp" --scan ./target/*.jar --outputFormat ALL --out ./security-reports
'''
script {
def reportFile = file('./security-reports/dependency-check-report.html')
if (reportFile.exists()) {
// Kritik CVE kontrolü
sh '''
if grep -q "CRITICAL" ./security-reports/dependency-check-report.html; then
echo "Kritik güvenlik açıkları tespit edildi!"
exit 1
fi
'''
}
}
}
}
stage('Deploy') {
steps {
echo "Güvenlik kontrolleri tamamlandı, deployment yapılıyor..."
}
}
}
}
2. DevSecOps Süreci
{
"devsecops_pipeline": {
"name": "Security Pipeline",
"stages": [
{
"name": "Code Analysis",
"tools": ["SonarQube", "ESLint"],
"cve_check": true
},
{
"name": "Dependency Scan",
"tools": ["OWASP Dependency-Check", "Snyk"],
"cve_check": true
},
{
"name": "Container Scan",
"tools": ["Trivy", "Clair"],
"cve_check": true
},
{
"name": "Runtime Scan",
"tools": ["Falco", "Sysdig"],
"cve_check": true
}
],
"alerting": {
"critical_alerts": "Email + Slack",
"high_alerts": "Email",
"medium_alerts": "Weekly Report"
}
}
}
CVE’nin Teknik Kaynakları ve Araçları
1. Ana Kaynaklar
- MITRE CVE Database: https://cve.mitre.org
- NIST NVD: https://nvd.nist.gov
- GitHub CVE Search: https://github.com/cve-search
2. Geliştirme Araçları
- OWASP Dependency-Check: https://owasp.org/www-project-dependency-check/
- Snyk: https://snyk.io
- Trivy: https://github.com/aquasecurity/trivy
3. API Kullanımı
NVD API:
curl "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2021-44228"
MITRE API:
curl "https://cve.mitre.org/api/cve/2.0?query=CVE-2021-44228"
CVE’nin Teknik Uygulama Senaryoları
1. Kurumsal Güvenlik Politikaları
- Güvenlik politikalarında CVE taraması zorunludur
- Sistemlerdeki açıkların tespit edilmesi ve giderilmesi
2. Bulut Altyapı Güvenliği
- AWS, Azure, GCP gibi bulut platformlarında CVE taramaları
- Container tabanlı sistemlerde güvenlik açıkları
3. Yazılım Geliştirme Süreçlerinde CVE Kontrolü
- Geliştirme aşamasında güvenlik açıklarının tespiti
- Test aşamasında otomatik CVE taramaları
CVE, güvenlik dünyasında temel bir araçtır. Sadece bir numara değil; her sistemdeki güvenlik açıklarını tanımlayan ve yöneten standart bir sistemdir. CVE’lerin anlaşılması ve tespit edilmesi, hem bireysel kullanıcılar hem de kurumsal sistemler için kritik öneme sahiptir.
CVE’nin Ana Önemleri:
- Bilgi Paylaşımı: Güvenlik açıkları paylaşılarak tüm sistemler korunur.
- Sistem Güvenliği: Sistemlerin güvenliğini artırır.
- Risk Yönetimi: Açıkların risk değerlendirmesi yapılır.
- Standartlaştırma: Güvenlik süreçlerinde ortak bir referans noktası sağlar.
İstersen bu yazıya daha fazla örnek CVE tarama raporu, uygulama senaryoları veya kod örnekleri ekleyebilirim. Ayrıca başka bir konuda da detaylı açıklama yapabilirim!
