LinkedIn iş teklifine gizlenmiş arka kapı
(roman.pt)- Bir işe alım uzmanının LinkedIn mesajı üzerinden ulaşıp lead engineer alımı bahanesiyle herkese açık bir GitHub deposunun incelenmesini istediği bir sosyal mühendislik saldırısı vakası
- İnceleme için gönderilen kodda test paketi gibi gizlenmiş bir arka kapı bulunuyordu; "deprecated Node modules sorununa bakar mısın" isteği ise
npm installçalıştırmayı hedefleyen bir yemdi - Şüphelenip yerelde çalıştırmak yerine tek kullanımlık bir VPS üzerinde salt okunur bir ajanla kodu inceleyince, sorunlu dosya birkaç saniye içinde tespit edildi
- Hem depo commit’lerinin hem de işe alım uzmanı profilinin gerçek kişilerin kimliklerini suistimal ettiği, sırasıyla gerçek bir geliştiriciyle sanat alanında çalışan bir gazeteciyi taklit ettiği ortaya çıktı
- Şüphecilik, güvenlik hijyeni (security hygiene) ve salt okunur ajan kullanımının, kodu doğrudan elle okumaktan daha etkili olduğuna dair pratik savunma dersleri sunuluyor
Nasıl temas kuruldu
- Geçen hafta küçük bir kripto girişimindeki bir işe alım uzmanından LinkedIn mesajı aldım
- Birkaç gün boyunca birkaç kez mesajlaştık ve lead engineer gerektiren bozuk bir proof-of-concept anlattı
- İnceleme için herkese açık bir GitHub deposu gönderip "deprecated Node modules sorununa bakar mısın" dedi
- Mevcut bir kod tabanını inceleme isteği başlı başına yaygın olsa da, içime bir tuhaflık hissi doğduğu için daha dikkatli davrandım
İnceleme yöntemi
- Klonlayıp bağımlılık kurmak yerine, Hetzner üzerinde tek kullanımlık bir VPS açıp depoyu orada klonladım
- Pi’yi salt okunur modda ayarlayıp yalnızca dosya okuma araçlarını etkinleştirerek çalıştırdım
- Kullanılan komut:
pi --tools read,grep,find,ls
- Kullanılan komut:
- Ajandan kod tabanını inceleyip şüpheli noktaları işaretlemesini isteyince, neredeyse anında
app/test/index.jsdosyasında durdu
Arka kapının yapısı
- Depo, React frontend + Node backend yapısındaydı
- Tuzak, yaklaşık 250 satırlık
app/test/index.jsdosyasıydı ve test paketi gibi gizlenmişti - İçeride URL, parçalara bölünüp yeniden birleştirilerek saklanmıştı
- protocol, domain, separator, path, token, subdomain gibi değişkenler birleştirilerek
https://rest-icon-handler.store/icons/77oluşturuluyordu
- protocol, domain, separator, path, token, subdomain gibi değişkenler birleştirilerek
- Yorum satırına alınmış test kuklaları arasına gizlenen payload, sunucunun gönderdiği her şeyi kullanıcının makinesinde çalıştırıyordu
- Payload 225. satırda yer alıyordu
Tetikleme mekanizması
- Dosya, testlerin çalıştırılmasını beklemiyordu
app/index.js,const test = require('./test')çağrısıylaapp/test/index.jsdosyasını yükleyip çalıştırıyordu
package.json,app/index.jsdosyasını başlatma aşamasına bağlıyordu- Asıl kritik nokta
preparescript’iydi; npm,npm installsonrasındapreparescript’ini otomatik çalıştırır- Yani yalnızca bağımlılıkları kurmak bile arka kapıyı tetikliyordu
- "deprecated Node modules sorununa bak" talimatı sonuçta
npm installçalıştırmayı amaçlayan bir yemdi - Payload’u sandbox içinde çalıştırıp ikinci aşama payload gözlemlenebilirdi, ancak sunucudan gelen kodun çalıştırıldığına dair kanıt yeterli olduğu için burada durdum
İlk suistimal edilen kimlik
- Commit’ler, gerçek bir full-stack geliştiricinin adı ve e-posta adresiyle atılmıştı
- Sıradan bir LinkedIn profili, kişisel web sitesi ve uzun geçmişe sahip bir GitHub hesabı vardı
- Kod tabanını ondan devralmışım gibi davranarak geliştiriciye ulaştım
- O kişinin bu şirkette hiç çalışmadığını, daha önce de GitHub üzerinde taklit edildiğini ve depoların kaldırıldığını, bu depoyla ise ilgisinin olmadığını söyledi
- Bu tür depoları kendisinin de raporladığını belirtti
- Tüm commit geçmişindeki 39 commit’in tamamı, bu depoya hiç dokunmamış tek bir geliştiricinin adına yazılmıştı
İkinci suistimal edilen kimlik
- İşe alım uzmanı profili, gerçek bir sanat gazetecisine aitti; geçmişi tamamen kültür alanındaydı ve teknik hiçbir unsur içermiyordu
- Kurulumun çalışmadığını söyleyince, teknik olmayan bu gazeteci bir anda npm ve Node sürümü uzmanına dönüşüp
npm installçalıştırmam için baskı yapmaya başladı
Herkesin başına gelebilir
- Bu tür saldırıları daha önce duymuş, HN’de de okumuştum; ama doğrudan hedef olunca yine de hazırlıksız yakalandım
- İlk mesajdan itibaren şüphelenmiştim ama yorgun ya da acele bir günümde olsaydı, fazla düşünmeden
npm installçalıştırmış olabilirdim
- İlk mesajdan itibaren şüphelenmiştim ama yorgun ya da acele bir günümde olsaydı, fazla düşünmeden
- Depo inceleme talebi içeren LinkedIn mesajlarına karşı bir miktar temkin ve güvenlik hijyeni gerekli
- Kodu salt okunur bir ajanla incelemek, doğrudan kendim okumaktan daha etkili oldu
- Arka kapı amatörce yazılmış acemi kod gibi gizlenmişti, fakat ajan bunu birkaç saniye içinde tespit etti
- Depoyu GitHub’a, işe alım uzmanını da LinkedIn’e bildirdim; ancak şu ana kadar bir değişiklik olmadı ve kod hâlâ yayında
1 yorum
Hacker News görüşleri
Küçük bir kripto startup’ındaki bir işe alımcı, bozuk bir proof-of-concept deposunu incelemesini isteyerek herkese açık bir GitHub deposu gönderdi ve “deprecated Node modules issue”yu kontrol etmesini söyledi; olayın akışı aslında
npm installyaptırmaya yönelik bir phishingmişpreparebetiğinpm installdan sonra otomatik çalışıyor, sunucunun indirdiği rastgele kodu yerelde çalıştıran bir arka kapı görevi görüyordu; bunun LinkedIn üzerinden yapılabilmesi şaşırtıcı derecede ciddi görünüyor$company'de çalıştığını iddia eden kullanıcıları şirketin yalanlayabilmesi için bir yol sunmuyor; kişi bunu sadece profiline yazsa bile resmî şirket sayfasında görünüyorBizim şirkette de aynı dolandırıcılığı yapan sahte işe alımcılar oldu; LinkedIn Premium’da ilgili gönderileri de bulunan, oldukça inandırıcı sahte profillerdi ama gerçek çalışan değillerdi
Ne kadar şikâyet etsek de kaldırılmadılar; sonunda LinkedIn’de çalışan bir tanıdığa içki ısmarlayıp çözdük ama her startup’ın böyle bir bağlantısı yok
İnsanlar hâlâ bu kadar kolay avlanırken, PNPM gibi araçlar kullanıp kod indirme sürecindeki en bariz ve en sık kötüye kullanılan rastgele kod çalıştırma açığını kapatmıyor olmalarını anlamıyorum
Kodu indirmek istediğiniz anda rastgele kod çalıştıran araçların artık durması gerek
En son hatırladığım örnek, Windows
.screkran koruyucu dosyası gibi gizlenmiş bir indirmeydi; bunun LinkedIn’e kadar gelmesi daha da kötü bir aşamaPlatform muhtemelen bunu “iş ilanı artışı” gibi göreceği için pek umursamayacaktır; bu da Google veya Meta gibi reklam ağlarının dolandırıcı reklamları çok da umursamamasına benziyor
bullshitpowershellladendoucument.pdf.docxgibi şeyler gönderen phishing’i gördüm ama bunu doğrudan LinkedIn DM ile yapmak oldukça cüretkâr bir stratejiBu kesinlikle suç olmalı ama neden bunu bildirebileceğimiz ve yardım alabileceğimiz, siber suçlar için 911 benzeri iyi bilinen bir kanal olmadığını anlamıyorum
Toplumun gerçek tehlikeyi yakalayıp hızla bir destek ağı kurması gerekiyor; organize suça karşı organize savunma gerekir
Muhtemelen yanıt alamazsınız ama ABD vatandaşları için, hatta belki herkes için, bildiğim kadarıyla internetin 911’ine en yakın yer burası
İkinci sorun ise bu dolandırıcılıkları üretmenin neredeyse sıfır çaba gerektirmesi ama yakalayıp dava açmanın büyük emek ve astronomik maliyet istemesi gibi asimetri
Yaşlıları hedef alan, Microsoft desteğiymiş gibi davranan dolandırıcılık aramalarıyla benzer bir yerde duruyor
Şüphelileri yakalamak neredeyse imkânsız; ya izlerini çok iyi gizliyorlar ya da daha sık görüldüğü üzere, Batılıları dolandırmalarını hükümetlerin umursamadığı hatta göz yumduğu ülkelerde yaşıyorlar
Suçu bildirseniz bile size yardım etmeleri veya sizinle iletişime geçmeleri pek olası değil
Bu artık sıradan mülakat ödeviyle rahatsız edici derecede yakın
Birinin size depo gönderip kurulumun bozuk olduğunu ve bakmanızı istemesi doğal bir durum; birçok geliştirici, yorgunsa ya da iş arıyorsa, çok düşünmeden
npm installçalıştırabilirYavaş görünmek istemediğiniz için, en başta bunu çalıştırmanın uygun olup olmadığını sorma adımını atlıyorsunuz
“Depoyu GitHub’a, işe alımcıyı LinkedIn’e bildirdim ama hâlâ hiçbir şey değişmedi ve kod olduğu gibi duruyor” ha, ah, Microsoft
Kanada başbakanının tüm Kanadalılar için bir kripto yatırım planı açıkladığı sahte bir videoya ve kayıt bağlantısına gidiyordu; şikâyet ettiğimde ise inceleme sonucunda politika ihlali bulunamadığı yanıtı geldi
Üçünde de güvenlik veya istikrar sorunları var ve Microsoft yapay zekâya daha da derin girdikçe durum düzeleceğine kötüleşiyor gibi görünüyor
Şirket içindeki o yapay zekâ üretkenliği, bazılarına göre 10 kat üretkenlik, nereye gidiyor bilmiyorum
O zaman hemen kaldırılırdı
Görünüşe göre aynı alan adını birden çok hedef için kullanıyorlar
3 ay önceki bir Reddit başlığında da benzer şeyler var: https://www.reddit.com/r/openclaw/comments/1rlet0h/someone_t...
Hâlâ neden dünyadaki tüm işletim sistemlerinin npm’i engellemediğini anlamıyorum
Bunlar asla ders almayacak gibi görünüyor
Bu tür dolandırıcılıklar başka teknolojilerle de mümkündü, hatta Makefile ile bile işe yarardı
Mac için sonunda düzgün bir sanallaştırma çatısı olmasını isterdim
İnternetten korunmasız biçimde rastgele betikler indirmek artık 1995’te değiliz; iyice bıktırdı
Tanımadığınız insanlarla karşılaşıp onların eşyalarını bilgisayarınızın derinliklerine sokarken koruyucu ekipman kullanmayı unutmamalısınız
curl | bashbetikleri çalıştırmak da aynı derecede kötü ama buradaki birçok geliştirici bu kötü uygulama hakkında hâlâ şüpheli varsayımlara sahipSon birkaç haftada dolaşan çeşitli küçük Shai-Hulud tarzı olaylar bunun ne kadar kötü olduğunu gösteriyor
IntelliJ’de npm komutlarını bir Docker container içinde çalışacak şekilde ayarlayabilirsiniz
LinkedIn’den aldığım iş tekliflerinin hepsi fazlasıyla şüpheliydi
Ya platform üzerinden başvurmanızı istiyorlardı ya da tanıtım videosu kaydetmenizi, ya da bir kod platformunun arkasına saklanmış makyajlanmış bir kodlama testi çözmenizi
Şirket dizüstü bilgisayarının depozitosu bahanesiyle çek yazmasını istediler; dışarıdan bakınca saçmaydı ama uzun süredir iş aradığı için çaresizdi ve sonunda iş bulduğunu düşündüğü için gerçekten çok sevinmişti
Uzun süre işsiz kalan insanlar, yeterli birikimi olan ya da sadece iş değiştirmek isteyen çalışanların asla kanmayacağı ciddi kırmızı bayrakları bile gözden kaçıracak kadar çaresizleşebiliyor
Bugünlerde çoğu NPM paket yazarı bu şekilde hacklenmiyor mu zaten?
Görünüşe göre axios’un bakımcısı da LinkedIn üzerinden aynı yaklaşımla kandırılmıştı
LinkedIn’i sadece iş ilanları için kullanıyorum ama son birkaç aydır gereksiz ilanlar çok arttı
Ladders, Swooped ve benzeri şirketlerden tonla ilan görüyorum; sanırım artık LinkedIn’i tamamen bırakmanın zamanı geldi