English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

konuk
1 / ?
derslere geri dön

Başlıklar Çanta Olarak

HTTP günlük çerçeveleri istek başlıklarını anahtar-değer çiftlerinden oluşan bir çanta gibi ele alır. Günlük API'si tüm çantayı açığa çıkarır. Operatörler hata ayıklama amacıyla başlık günlüğünü etkinleştirir: bir istek başarısız olduğunda, başlıklar hikayeyi anlatır. Yerleşik bir kara liste yoktur. Belgelerde kimlik bilgisi filtreleme bulunmaz. Tüm başlıklar diske yazılır.

Tipik bir istekteki kimlik bilgisi başlıkları:

- Authorization: Bearer eyJhbGciOiJIUzI1NiJ9... (JWT veya OAuth belirteci)

- Cookie: session=abc123; auth=xyz789

- X-API-Key: sk-live-abc123...

- X-Auth-Token: ghp_abc123... (GitHub kişisel erişim belirteci deseni)

Bu değerler isteği doğrular. Bir günlük dosyasına yazıldığında, herhangi bir isteği doğrularlar.

Kimlik Bilgisi Hattı

Günlük dosyasına yazılan bir kimlik bilgisi tek bir yerde kalmaz. Şöyle dolaşır:

1. Web sunucusu /var/log/nginx/access.log dosyasına yazar

2. Günlük döndürme aracı (logrotate) /var/log/nginx/access.log.1 dosyasına kopyalar

3. Günlük taşıyıcı (Fluentd, Filebeat, Logstash) okur ve toplayıcıya gönderir

4. Log toplayıcı (Elasticsearch, Splunk, Datadog) indeksler ve depolar

5. Varsayılan politika altında 30-90 gün saklanır

Kimlik bilgisi aynı anda beş konumun tamamında bulunur. Oturum belirtecini iptal etmek, kimlik bilgisini log toplayıcısından kaldırmaz. Tam saklama süresi boyunca log erişimi olan herkes tarafından aranabilir, dışa aktarılabilir ve erişilebilir durumda kalır.

Maruziyet Penceresi

Bellekteki bir kimlik bilgisinin maruziyet penceresi: max(oturum süresi, süreç ömrü). Oturum: saatler ile günler arası. Süreç: saatler ile haftalar arası.

Logdaki bir kimlik bilgisinin maruziyet penceresi: max(oturum süresi, log saklama süresi). Oturum: saatler ile günler arası. Saklama: 30-90 gün.

Bellekten çalınan bir kimlik bilgisi için saldırganın oturum penceresi sırasında mevcut olması gerekir. Logdan çalınan bir kimlik bilgisi ise yalnızca log toplayıcısına erişim gerektirir ve bu erişim, tam saklama süresi boyunca geriye dönük olarak kullanılabilir.

MOAD-0003 vs MOAD-0004

MOAD-0003 (Bellekte Sızan Bağlam): bir kimlik bilgisi bellekte yanlış istek işleyicisine sızar. Yalnızca işlem penceresi sırasında, iş parçacığı havuzu üzerinden erişilebilir. Geçici.

MOAD-0004 (Günlüğe Kaydedilen Gizli): bir kimlik bilgisi diskte günlük rotasyonu, günlük nakliyesi ve günlük toplama yoluyla kalıcı hale gelir. Geriye dönük olarak, günlük erişimine sahip herkese, 30-90 gün boyunca erişilebilir. Kalıcı.

Yapısal fark: geçici ve kalıcı. Düzeltme farklı bir katmanda çalışır.

Geçici vs Kalıcı

Geçici/kalıcı ayrımı risk yüzeyini, düzeltme katmanını ve olay müdahale gereksinimlerini belirler.

MOAD-0004 neden MOAD-0003'ten daha yüksek risk taşır? Her kimlik bilgisinin nerede yaşadığını ve ne kadar süreyle kaldığını karşılaştırın.

Serileştirme Katmanında Kimlik Bilgisi Denylist'i

Düzeltme: serileştirme katmanında bir kimlik bilgisi denylist'i. Herhangi bir başlık değeri günlük çıktısına ulaşmadan önce, başlık adını denylist ile karşılaştırın. Değeri [REDACTED] ile değiştirin.

CREDENTIAL_HEADERS = {
'authorization',
'cookie',
'x-api-key',
'x-auth-token',
'x-csrf-token',
'proxy-authorization',
}

def sanitize_headers(headers: dict) -> dict:
return {
k: '[REDACTED]' if k.lower() in CREDENTIAL_HEADERS else v
for k, v in headers.items()
}

Denylist serileştirme katmanında olmalıdır, log sorgu katmanında değil. Log sorgu redaksiyonu: kimlik bilgisi diske ulaştıktan sonra uygulanır; ham değer hâlâ mevcuttur, yalnızca görüntülemeden gizlenir. Serileştirme katmanı redaksiyonu: kimlik bilgisi asla diske ulaşmaz. Ham değer hiçbir zaman log dosyasına, log göndericisine veya log toplayıcısına girmez.

Denylist'i Test Etme

Üç test deseni:

- Pozitif: Authorization: Bearer token123 içeren bir istek, Authorization: [REDACTED] içeren bir log girdisi üretir

- Negatif: Content-Type: application/json içeren bir istek, değeri olduğu gibi koruyan bir log girdisi oluşturur

- Büyük/küçük harfe duyarsız: AUTHORIZATION: Bearer token123 da [REDACTED] üretir (HTTP başlık adları büyük/küçük harfe duyarsızdır)

Denylist bakımı gerektirir: yeni kimlik doğrulama başlığı desenleri (örneğin özel X-Service-Auth başlıkları) açıkça eklenmelidir. Düzeltme yapısaldır ancak kendi kendini sürdürmez.

Denylist'i Uygula

Bir ekip, üretimdeki bir olayı hata ayıklamak için Nginx erişim log formatını tüm istek başlıklarını içerecek şekilde yapılandırır. Yapılandırma:

log_format debug_format '$remote_addr - $request - $http_authorization - $http_cookie';
access_log /var/log/nginx/debug.log debug_format;

Olayı çözüyorlar ve hata ayıklama yapılandırmasını kaldırmayı planlıyorlar, ancak değişiklik bir sonraki dağıtım döngüsünden (7 gün sonra) önce üretime ulaşmıyor.

Hatayı belirleyin. Hangi kimlik doğrulama başlıkları açığa çıkabilir? Denylist yaklaşımını açıklayın: nerede uygulanır, neyi kontrol eder ve ne üretir?