1 puan yazan GN⁺ 5 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • Kanada’daki bir geliştirici, sahte bir VC görüşmesi kılığına sokulmuş arka kapı kurma saldırısına maruz kaldı; saldırı akışı, crates.io paket yöneticisini hedeflediğinden şüphelenilecek kadar geliştirici iş akışına uyarlanmıştı
  • Yem depo “Ticket Harbor” adlı bir TypeScript uygulaması gibi görünüyordu, ancak patch-package ve typescript+5.9.2.patch ile TypeScript çalıştırma yoluna kötü amaçlı kod gizlenmişti
  • Enjekte edilen stub, base64 ve XOR obfuscation’ını çözüp new Function(...) ile çalışıyor; operators/3.png içindeki gizli chunk ve bir WASM stub’ı üzerinden 1,68 MB’lık ikinci aşama payload’u ayrı bir Node süreci olarak başlatıyordu
  • Nihai payload “PinpinRAT”, RSA-2048 anahtar çifti ve AES-256-CBC oturum anahtarı oluşturuyor; host parmak izi toplama, dosya yükleme·indirme, süreç çalıştırma, dosya sistemi işlemleri, DNS sorgusu ve kendini kaldırmayı destekliyor
  • Depoyu çalıştırdıysanız hemen ağı kesin ve kimlik bilgilerinizi başka bir cihazdan değiştirin; çerezlerin ve parola korumalı sırların dahi çalınmış olabileceği varsayımıyla müdahale edin

Sahte görüşmeyle başlayan geliştirici hedefli saldırı

  • Saldırgan, “Lua Ventures” mensubu olduğunu iddia eden sahte bir kişi olarak yaklaştı
    • Lua Ventures, Singapur merkezli DeFi alanında bir VC olarak tanıtıldı; ancak gerçekte faaliyetlerini zaten durdurmuştu
    • Kişi adı, aynı ada sahip gerçek kişilerle karıştırılabileceği için açıklanmadı
  • E-posta inandırıcıydı ve sıradan ama normal görünen bir LinkedIn profili bağlantısı da içeriyordu
  • Danışman arayan yatırım şirketleri olarak Lyrasing ve Roadpay’den söz edildi
    • İki şirketin de temel düzeyde web varlığı vardı; sahte olmaktan çok erken aşama şirketler gibi görünüyorlardı
    • Roadpay sitesinin archive.org anlık görüntüsü de mevcut
  • E-posta yazışmalarının ardından Google Meet görüşmesine kadar ilerlendi
    • Görüşmedeki kişi Alman aksanlı bir erkekti ve yolda olduğunu söyledi
    • Görüşmenin kendisinde belirgin biçimde tuhaf bir şey yoktu

“Test görevi” kılığına sokulmuş çalıştırma tetikleyicisi

  • Görüşmeden sonra saldırgan bir “test” önerdi ve bir depo gönderdi
  • Depo, “Ticket Harbor” adlı bir feribot biletleme uygulaması gibi tasarlanmıştı
  • İçindeki task.txt, sıkıcı ama inandırıcı bir görev listesi içeriyor; en sonda çalıştırma talimatı yer alıyordu
    • Deponun typecheck’ini, test suite’ini ve ilgili desktop/server build komutlarını çalıştırma talimatı veriliyordu
  • Bu talimat gerçek enfeksiyon tetikleyicisiydi
    • npm run typecheck, build, dev gibi TypeScript’in çalıştırıldığı veya typescript.js’in import edildiği anda payload çalışabiliyordu

TypeScript patch’ine gizlenmiş çalıştırma zinciri

  • İlk uyarı işareti, deponun TypeScript görevi gibi görünmesiydi
    • İstenen şey, mimari analizden çok TypeScript işe alım görevine yakındı
    • Depoyu hızlıca kontrol etmek için Claude’a verince patch-package ile ilgili anormallikler ortaya çıktı
  • patches/ dizini olağandışı derecede kalabalıktı
    • Bazı patch’ler normal görünerek asıl payload’u gizleyen gürültü işlevi görüyordu
    • Örneğin sumchecker+3.0.1.patch, @electron+get+2.0.3.patch, extract-zip+2.0.1.patch içeriliyordu
  • Asıl kötü amaçlı kod typescript+5.9.2.patch içindeydi
    • typescript.js ve _tsc.js dosyalarının en üstüne hemen çalışan bir stub enjekte ediyordu
    • Stub bir base64 dizgesini decode ediyor, her baytı 73 anahtarıyla XOR ile decrypt ediyor, ardından new Function(...) ile çalıştırıyordu
    • Çalıştırma fonksiyonuna require, Buffer, WebAssembly, process, __dirname aktarılıyordu
  • Çalıştırma zinciri birkaç aşamadan geçiyordu
    • Dört postinstall hook’u patch-package çalıştırıyordu
    • Bunlardan biri, patch dosyasını git status içinde gizlemek için ona git update-index --skip-worktree uyguluyordu
    • Loader, operators/3.png dosyasının arkasına eklenmiş gizli chunk’ı okuyordu
    • Özel wAsm chunk’ındaki küçük WASM stub’ını çalıştırıyordu
    • 1,68 MB’lık obfuscate edilmiş ikinci aşama payload’u sessiz, ayrı bir Node süreci olarak çalıştırıyordu
  • Saldırı kodu, çalıştıktan sonra izleri azaltacak şekilde tasarlanmıştı
    • git skip-worktree ile patch’i gizliyordu
    • Dropper, ilk çalıştırmadan sonra patch dosyasından kendi enjekte ettiği satırları siliyordu
    • İkinci aşama geçici dizini çalıştırma sırasında kendini siliyordu

PinpinRAT’in yetenekleri

  • Nihai payload “PinpinRAT” olarak adlandırılıyor
    • Ad, iç dizgeler nedeniyle verilmiş; başka bir adla biliniyor olma olasılığı dışlanmıyor
    • Çevrim içinde başka referans bulunamadı
  • Payload birkaç obfuscation katmanının içindeydi
    • obfuscator.io
    • İki ek base64 katmanı
  • RAT, başlangıçta host parmak izini toplayıp dışarı sızdırıyor
    • Birincil IP adresi ve tam IP listesi
    • os.userInfo().username içindeki kullanıcı adı
    • Host adı
    • OS type, release, platform, architecture
    • Süreç PID’si ve tam process.argv
    • Node sürümü
  • Şifreleme yapısı da içeriyor
    • Yerelde RSA-2048 anahtar çifti oluşturma
    • Rastgele AES-256 oturum anahtarı aes_psk oluşturma
    • Sonraki trafik AES-256-CBC ile şifreleniyor ve HMAC-SHA256 bütünlük etiketi ekleniyor
  • Desteklenen komutlar uzaktan erişim truva atı düzeyinde işlevler sunuyor
    • env: process.env’i JSON dizgesine dönüştürüp gönderme
    • upload: Rastgele bir dosya yolunu okuyup dışarı sızdırma
    • download: Saldırganın sağladığı baytları yazılabilir bir yola kaydetme
    • spawn: İsteğe bağlı shell genişletmesiyle rastgele süreç çalıştırma
    • ls, cd, pwd, cp, mv: Genel dosya sistemi işlemleri
    • dns: Belirtilen resolver üzerinden rastgele ad çözümleme
    • dismantle: Kendini kaldırma

İhlal göstergeleri ve acil müdahale

  • Payload içeren görüntü, VirusTotal üzerinde hiçbir AV motoru tarafından tespit edilmedi
  • Çalıştırdıysanız sistemi hemen ağdan ayırmalısınız
  • Kimlik bilgileri başka bir cihazdan değiştirilmelidir
    • Çerezlerin ve parolayla korunan sırların da ihlal edildiği varsayılmalıdır
  • PinpinRAT ile ilgili ihlal göstergeleri şunlardır
    • C2: 89.124.107.161:80
    • Windows zamanlanmış görevi: PinpinWrappedJs
    • macOS süreç kılığı: com.apple.WebKit.Networking
    • Ortam değişkenleri: NODT_PAYLOAD_PATH, NODT_PAYLOAD_ARGS
    • PNG chunk guard’ı: WASMPACK (wAsm)
    • PINPIN_NO_AUTOSTART=1: persistence’ı durdurur
    • mutex.js içeren cronjob: Yalnızca RAT yetkisi olduğunda var olabilir ve macOS’ta bulunmayabilir
    • typescript.js anchor dizgesi: 12ff4b51, ticket-harbor-tsc-shim-anchor
    • Payload içeren typescript+5.9.2.patch
    • Artifact dizinleri:
      • macOS: ~/Library/Caches/runtime-cache/.cache-<randomhex>/
      • Linux: /tmp/.cache-<randomhex>/
      • Windows: %TEMP%\.cache-<randomhex>\
      • İçinde payload.js ve mutex.js bulunur

Sonradan fark edilen uyarı işaretleri

  • Mesajlarda dikkatli bakınca LLM izleri gibi görünen ifadeler vardı
  • LinkedIn profili ilk bakışta normal görünüyordu; ancak derece·sertifika sıralaması tuhaftı ve gerçek etkinlik de yoktu
  • Web sitesindeki sosyal medya bağlantılarının gerçek geçmişi vardı, ancak ad Kasım 2025’te değiştirilmişti
    • Paylaşımlar düşük özgüllükteydi ve şirketlere yönelik belirsiz övgülere yakındı
  • Şirket web siteleri gösterişliydi ama gerçek varlıkları neredeyse yoktu
  • Saldırgan resmi takvim daveti göndermedi; yalnızca saat ve Google Meet bağlantısı iletti
    • Görüşme boyunca kamera kapalıydı ve yolda olduğunu söyledi
  • Singapur merkezli VC, CEST saat diliminde faaliyet, Kanadalı geliştiriciyi hedefleme ve ABD’li müşterileri hedefleyen .cc domain’i birlikte ortaya çıktı
    • Uzaktaki bir kuruluşun güvenilirliğini doğrulamak daha zordu
  • Tek tek işaretler net değildi; ancak birden çok sarı ışık bir araya geldiğinde kırmızı ışık sayılabilecek bir örüntüydü

Saldırının arkasındaki aktör ve kapsam

  • Arkadaki aktör kesin olarak belirlenemiyor
  • Saldırı geliştiriciyi hedefliyordu ve sahte kişi, ikna edici kapak hikâyesi, birden çok sahte web sitesi, sabırlı bir zaman çizelgesi ve incelikli git tuzakları içeriyordu
  • 2026’da çeşitli aktörlerin kullandığı “sahte görüşme dolandırıcılığı” akışıyla örtüşüyor
  • Reddit’teki Rust topluluğunda da benzer şekilde hedef alındığı belirtilen bir vaka anıldı
  • Aynı yöntem Rust deposunda tuzak bir build.rs betiğiyle kurulmuş olsaydı, geliştirici iş akışına bu kadar yakın olduğu için kandırıcı olabilirdi

1 yorum

 
GN⁺ 5 시간 전
Lobste.rs yorumları
  • Başlıkta bunun devlet destekli bir saldırgan olabileceğinin varsayılması kafa karıştırıcı. Burada o düzeyde bir hazırlık ya da karmaşıklık gerektiriyor gibi görünen bir şey yok.
    Olasılığı hayal edebilirim, ama diğer senaryolar kadar makul görünüyor ancak.

    • Sanırım bu tür sofistike dolandırıcılıklar çok kaynak gerektirdiği için epey nadir. Sofistike bir dolandırıcılık görünce arkasında devlet olabilir diye hissetmek kolay.
      Yine de neredeyse kesinlikle devlet destekli bir saldırgan olmadığını düşünüyorum. Bu tür saldırılar artık o kadar zor değil.
  • Bir hafta önce blog yazımda anlattığım varsayımsal örnekle bu saldırının benzer olması gerçekten tesadüf: the hypothetical I describe in my blog post from a week ago
    Teknolojiden anlayan uzmanların bile kandırılabileceğine örnek olarak, makul görünen birkaç saldırıdan birini seçmiştim sadece. İnsanları hedef alan çeşitli sofistike dolandırıcılıkların arttığını görmüştüm, ama mülakat dolandırıcılığı diye bir akımın sürdüğünü bilmiyordum. Bu yüzden bu saldırıyı öğrenince biraz ürperdim.

  • Geçen hafta Lua Ventures’tan D____ S_____ tarafından bana da aynı türden bir mülakat teklifi geldi. Çoğu işe alımcı spam’i gibi yok saydım; iyi ki de öyle yapmışım.

    • Rust tarafındaki kişilerden biri misin merak ediyorum. Rust topluluğunun önde gelen isimleri Lua’nın hedefi oldu; bunun yalnızca Rust ile mi sınırlı olduğunu yoksa daha geniş mi olduğunu bilmek isterim.
  • Birkaç gün ya da birkaç hafta önce buna benzer bir gönderi vardı sanki.

  • “Gerçek bir e-posta gibi görünüyordu” denmesine şaşırdım. O kadar bariz LLM tarafından üretilmiş cümleler ki ikinci cümleden itibaren şüphelenirdim.

    • Bana o kadar bariz gelmedi. Sadece LinkedIn tarzı bir üslup gibi hissettirdi. O da sık sık LLM yazmış gibi duyuluyor, ama kokusu o kadar benziyor ki ikisini ayırt edebilecek durumda mıyım emin değilim.