GitHub'da bulunan enfekte depo sayısı 100 bini aştı
(apiiro.com)- 2023 ortasında başlayan depo karışıklığı (repo confusion) kampanyası yeniden yayılırken, GitHub'da benzer kötü amaçlı yükler içeren 100 binden fazla depo tespit edildi
- Saldırganlar, meşru depolara benzeyen kötü amaçlı kopyalar oluşturarak geliştiricilerin hata yapmasını hedefliyor; klonlama, yükleyici ekleme, yeniden yükleme, toplu fork ve gizli tanıtımı birleştiriyor
- Kötü amaçlı depo çalıştırıldığında 7 aşamalı obfuscation sonrasında Python kodu ve ikili dosyalar indiriliyor, oturum açma bilgileri, tarayıcı parolaları, çerezler ve diğer hassas veriler çalınıyor
- GitHub fork'ların çoğunu otomatik silse de tespitten kaçan depolar ve elle yüklenen kopyalar kalıyor; toplamın yalnızca %1'i hayatta kalsa bile binlerce kötü amaçlı depo varlığını sürdürüyor
- Saldırı akışı, PyPI kötü amaçlı paketlerinden GitHub depolarına kayarken, paket yöneticilerinin dışındaki yazılım tedarik zinciri de doğrudan saldırı yüzeyi haline geliyor
Depo karışıklığı saldırısı nasıl işliyor
- Depo karışıklığı, kullanıcının meşru depo yerine kötü amaçlı bir depoyu indirmesini sağlaması bakımından dependency confusion'a benziyor
- Fark, istismar noktasında ortaya çıkıyor
- dependency confusion, paket yöneticisinin çalışma biçimini kullanır
- depo karışıklığı, insanın benzer görünen depoyu yanlış seçmesine dayanır
- Bu kampanya, GitHub'a çok sayıda kötü amaçlı depo yayarak enfeksiyon olasılığını artırıyor
TwitterFollowBot,WhatsappBOT,discord-boost-tool,Twitch-Follow-Botgibi mevcut depoları kopyalıyor- Kopyalara malware loader ekliyor
- Aynı adla GitHub'a yeniden yüklüyor
- Her depoyu otomatik olarak binlerce kez fork'luyor
- Forumlar ve Discord gibi yerlerde gizlice tanıtıyor
Kötü amaçlı depo çalıştırıldıktan sonraki akış
- Kullanıcı kötü amaçlı depoyu kullandığında gizli yük 7 aşamalı obfuscation çözme sürecinden geçiyor
- Ardından kötü amaçlı Python kodu ve ikili yürütülebilir dosyalar getiriliyor
- Kötü amaçlı kod, büyük ölçüde BlackCap-Grabber'ın değiştirilmiş bir sürümüne dayanıyor
- Toplanan veriler arasında çeşitli uygulamaların oturum açma bilgileri, tarayıcı parolaları ve çerezleri ile diğer gizli veriler bulunuyor
- Çalınan veriler saldırganın C&C (command-and-control) sunucusuna gönderiliyor ve ek kötü amaçlı faaliyetler devam ediyor
- İlgili kod analizi Trend Micro'nun technical analysis yazısında görülebilir
GitHub'ın otomatik silmeleri ve geride kalan depolar
- GitHub otomasyonu tespit ederek fork'lanan depoların çoğunu hızla kaldırıyor
- Ancak otomasyon tespiti birçok depoyu kaçırıyor ve elle yüklenen depolar yaşamaya devam ediyor
- Saldırı zinciri büyük ölçüde otomatikleştirildiği için yalnızca %1'i kalsa bile bu, binlerce kötü amaçlı depo anlamına geliyor
- GitHub'da
🔥 2024 language:pythonaraması yaparak şu anda yayılan bazı depolar görülebilir - Silinmiş depolar da dahil edildiğinde toplam ölçek milyonlara ulaşıyor
- Silme işlemi genellikle yüklemeden birkaç saat sonra gerçekleştiği için belgelemesi zor oluyor
- Birçok özgün depo yerinde kalıyor ve silmeler esas olarak fork bomb örneklerini hedef alıyor
- Örneğin Mattia69 depo listesi özet bölümünde binlerce fork gösterirken, fork ayrıntıları kısmında bunlar görünmüyor
- Bazı kullanıcılar kötü amaçlı depoları bilmeden fork'layarak ikincil sosyal mühendislik ağ etkisi de yaratıyor
Kampanyanın ilerleyiş zaman çizelgesi
- Mayıs 2023: Phylum, PyPI'ye yüklenen kötü amaçlı paketleri raporladı
- Bu paketler mevcut yükün ilk bölümlerini içeriyordu
chatgpt-apigibi popüler GitHub depolarının fork'larına yerleştirilenos.system("pip install package")çağrılarıyla yayıldılar
- Temmuz-Ağustos 2023: GitHub'a çeşitli kötü amaçlı depolar yüklendi ve PyPI paketlerini çekmek yerine yükü doğrudan dağıttılar
- Bu değişim, PyPI'nin kötü amaçlı paketleri kaldırması ve güvenlik topluluğunun ilgisinin artmasından sonra geldi
- Trend Micro'dan Aliakbar Zahravi ve Peter Girnus, teknik analizi yayımladı
- Kasım 2023-günümüz: Benzer kötü amaçlı yükler içeren 100 binden fazla depo tespit edildi ve sayı artmaya devam ediyor
- Bu yöntemin saldırganlar için neden avantajlı olduğu açık
- GitHub'ın ölçeği çok büyük olduğu için yüksek sayıdaki örnekler bile göreli olarak küçük kalıyor ve tespit edilmesi zorlaşıyor
- Önceki durumun aksine paket yöneticisi devrede olmadığı için açık kötü amaçlı paket adları bir gösterge olarak kalmıyor
- Hedef depolar küçük niş alanlarda ve düşük popülerlikte olduğundan, geliştiricilerin kötü amaçlı taklit depoları yanlışlıkla klonlaması kolaylaşıyor
Paket yöneticilerinden SCM'e kayış
- PyPI kötü amaçlı paketlerinden GitHub kötü amaçlı depolarına geçiş, çeşitli paket yöneticileri ve SCM platformlarında gözlenen eğilimle örtüşüyor
- Güvenlik topluluğu paket yöneticilerine daha fazla odaklandıkça, saldırı yolu başka yerlere kaymış görünüyor
- GitHub ve benzeri platformlarda hesap ve depo otomatik oluşturmak kolay; ayrıca kullanışlı API'ler ve aşılması nispeten kolay gevşek rate limit'ler sunuluyor
- Sayısız depo arasında saklanabildiği için SCM, yazılım tedarik zincirini gizlice enfekte etmek için uygun bir hedef haline geliyor
- dependency confusion kampanyaları, paket kayıtlarındaki kötü amaçlı kodlar ve SCM üzerinden kötü amaçlı kod yayılması; çok sayıda araç ve güvenlik mekanizmasına rağmen yazılım tedarik zinciri güvenliğinin zayıf kaldığını gösteriyor
Enfeksiyonun doğrulanması için göstergeler
- Python kodunda aşağıdaki kalıplar aranmalı ve eşleşen öğeler incelenmeli
exec(Fernetexec(requestsexec(__importexec(bytesexec("""\nimportexec(compile__import__("builtins").exec(
- Yerelde sosyal platform otomasyonu, bot veya oyunla ilgili depolar olup olmadığı kontrol edilmeli ve kaldırılmalı
- Mutlaka kullanılmaları gerekiyorsa yeniden kurulmalı; ancak kaynak dikkatle doğrulanmalı veya sandbox içinde çalıştırılmalı
- Bu tür depoları klonlamış olma ihtimali varsa aşağıdaki çerez, kimlik bilgisi ve anahtarların ele geçirildiği varsayılarak hareket edilmeli
- Tarayıcı: finansal hizmetler, e-posta servisleri, kripto para servisleri, Amazon, eBay, AliExpress, Facebook, Instagram, Twitter, Youtube, Discord, TikTok, Telegram, Twitch, Steam, Yahoo, ExpressVPN, Spotify, yayın platformları
- Uygulamalar: Exodus, Atomic Wallet, Guarda, Coinomi, Ethereum
- Dosya checksum'larının tam listesi pratikte yönetilmesi zor olsa da bazı ortak öğeler VirusTotal graph üzerinde görülebilir
- Cloudflare, bildirim aldıktan sonra tespit edilen kötü amaçlı adreslerin DNS kayıtlarını devre dışı bıraktı
Savunma ve müdahale
- GitHub bilgilendirildi ve kötü amaçlı depoların çoğunu sildi, ancak kampanya sürüyor
- Tedarik zincirine kötü amaçlı kod enjekte etmeye yönelik saldırılar giderek daha yaygın hale geliyor
- Sistem ve ağ düzeyinde malware yakalayan pek çok çözüm var, ancak tedarik zinciri saldırganlar için hâlâ büyük ve kârlı bir saldırı yüzeyi
- Kötü amaçlı bir depo tespit edilirse, bu kampanyanın parçası olup olmadığına bakılmaksızın GitHub'ın abuse or spam report kanalı üzerinden bildirilebilir
- Apiiro, bağlı kod tabanlarını izleyen bir kötü amaçlı kod tespit sistemi kurdu
- LLM tabanlı kod analizi
- Kodun tam yürütme akışı grafiğine ayrıştırılması
- Heuristik motor
- Dinamik çözme, şifre çözme ve obfuscation kaldırma
- Enjekte edilmiş kötü amaçlı yükler izlenmezse kurum güvenliği; geliştiricilerin neredeyse aynı görünen yanlış depoyu seçmemesine, CI/CD yapılandırmalarında hiç hata olmamasına ve üçüncü taraf kodun %100 güvenli olmasına bağımlı hale gelir
- Yaygın zafiyet tespiti ve toplamanın ötesinde, yeni nesil yazılım tedarik zinciri ve uygulama risklerini ortaya çıkaran bir yaklaşıma ihtiyaç var
1 yorum
Hacker News yorumları
Genel olarak herkese açık depolardan veya harici kaynaklardan alınan kodlara dikkat edilmesi ve bağımlılık ağacının doğrulanması gerektiği uyarısının ötesinde, herkese açık depolarda büyük miktarda kötü amaçlı kod varsa bunun bu içeriklerle eğitilmiş LLM'ler ve otomasyon araçları üzerinde nasıl bir etkisi olacağını merak ediyorum
Copilot gibi araçlar uzun kod yanıtları üretirken kötü amaçlı bölümlerin tesadüfen araya karışma ihtimali de var gibi görünüyor
Basit enjeksiyon açıkları gibi şeyler zaten sıkça görülüyor
Şu an olmayabilir ama birkaç yıl içinde gayet mümkün görünüyor
Yapay zeka doğruluk konusunda hiçbir garanti vermiyor
Saldırganın Hugging Face Safetensors dönüşüm alanı ile bağlantılı hizmet botunu ele geçirebildiğini gösterdi; bu, ekosistem içindeki güvenli olmayan makine öğrenimi modellerini daha güvenli sürümlere dönüştüren popüler bir hizmet
LLM kullanacaksanız kod incelemesine daha fazla emek ayırmanız gerekir ve bence bu ödün buna değer
Yine de bunun gerçek bir olaya dönüşmesi için başlıca iki engel var: üreticinin böyle kodlardan kaçınması yönünde iç talimat almış olması ve LLM'nin doğası gereği gerçek saldırganın adresini birebir tekrar etme olasılığının düşük olması
Buna rağmen bind shell, hizmet reddi ve sahadan veri sızdırma gibi çeşitli saldırı vektörleri hâlâ mevcut
GitHub, Usenet'in başarısız olduğu biçime benzer şekilde başarısız oluyor
Herkes depo oluşturabiliyor ve resmi depolarla spam depoları ayırt eden bir şey yok
Amazon, “her şeyin mağazası” olmayı hedeflerken “her şeyin %90'ı çöp” durumuna çarpıp çoğu çöp olan bir mağazaya dönüştüğü gibi, GitHub da ürününün “herkes için depo” mu yoksa “güvenilir kod” mu olduğuna karar vermeli
Örneğin resmi PG JDBC için bile bir spamcının taklit edemeyeceği bir unsur yok gibi görünüyor; bunun enfekte bir depo olmadığını nasıl güvenle söyleyebiliriz: https://github.com/pgjdbc
Sonatype,
groupIdiçinde kullanılan ters alan adının sahipliğinin kanıtlanmasını ister; bu örnekteorg.postgresqlYöntem burada anlatılıyor: https://central.sonatype.org/faq/how-to-set-txt-record/
Daha da emin olmak isterseniz Maven Central'da yayımlanan tüm çıktılar imzalandığı için GPG imzasını da doğrulayabilirsiniz, ancak bunun dezavantajı Postgres'in imzada kullandığı anahtarı Sonatype'ten bağımsız bir kanaldan edinmeniz gerekmesidir
PG için hızlı bir aramada bile anahtarı bulamadım
GitHub'da yaklaşık 500 milyon depo var, yani bu oran aslında oldukça iyi
Böyle depoları alıp kullanacak bir geliştirici, GitHub'da bunlar olmasa bile güvensiz ürünler yapmak için pek çok başka yol bulabilir
Örnek verilen organizasyonun bunu yapmamış olduğu anlaşılıyor
Tedarik zinciri sorunu gerçekten tam bir baş belası
npm sürümlerini doğrudan hedef almıyorlar, ancak BrowserBox adlı hafif sanallaştırılmış web tarayıcısı projesini izlemek için npm sürümleri oluşturup socket.dev kullanıyorum
Bu proje de tüm alt bağımlılıklarıyla birlikte yaklaşık 800 paket içeriyor ve yalnızca 19 üst seviye bağımlılık kullanmasına rağmen, toplam yığın ölçeğinde bakınca nispeten hafif sayılır
Şimdi bu 800 bağımlılığın tamamını npm'de
@browserboxnamespace'i altında snapshot olarak saklayıp, tespit edilen açıkları izleyerek yamamayı düşünüyorumKulağa çılgınca geliyor ama durum şu anda böyle ve en azından bunu yaparsam Node/JS tarafındaki tedarik zinciri açıklarını şirketin güvenlik seviyesi içinde doğrudan garanti edebilirim
https://socket.dev
https://github.com/BrowserBox/BrowserBox
Kilit dosyası tüm ağacın sha256 değerini tuttuğu için, depo ele geçirilse bile değişiklikleri önlemek amacıyla ayrıca mirror almaya gerek yok
En güncel sürüm yerine birkaç ay geriden gelen bir sürüme sabitlemek, yeni CVE'lerden kaçınırken aynı anda büyük bir düzeltme yapmak zorunda kalacak kadar eski sürümlere saplanmamak arasında makul bir denge gibi görünüyor
İndirme sayısı, benzer amaca sahip üst seviye bağımlılıklarla karşılaştırıldığında fena olmayan bir ölçü gibi duruyor, ama bu öznel bir değerlendirme
Austral, lineer tipler ile bağımlılıklara ayrıntılı yetkiler veriyor
Örneğin bir grafik kütüphanesinin dosya G/Ç'ye ihtiyacı yoktur ve bir ağ aktarım kütüphanesinin mikrofona erişime ihtiyacı yoktur
Bu yalnızca bir hafifletme önlemi ama başka dillerde de görmek isterim
Yaklaşık 10 yıl önce .NET'ten Java'ya geçtikten sonra bağımlılık cehennemine harcadığım zamanın ciddi biçimde arttığını fark edip şaşırmıştım; bugünlerde de hem Java hem Python projelerinde açık güncellemeleri ve bağımlılık sorunlarına giden zaman korkutucu derecede fazla
Bunun .NET'te daha az sorun olmasının nedeni muhtemelen otomatik paket yönetiminin nispeten geç gelmesi ve NuGet'in de daha genç olmasıydı; o dönemde birçok proje bunu henüz benimsememişti ve devasa geçişli bağımlılık ağaçlarından kaçınma kültürü daha güçlüydü
Boeing'in son sorunları da benzer görünüyor
Son birkaç on yılda üretimin daha büyük kısmı dış tedarikçilere verildi ve maliyet optimizasyonuna odaklanıldıkça tedarik zinciri yönetimi giderek zorlaştı; büyük resimde bu, modern yazılım mühendisliğinin tedarik zinciri kültürüne benziyor
Tedarik zinciri güvenliği nedeniyle paket yöneticilerini yasaklayan bir finans şirketinde çalıştığımda, bağımlılık yönetimi en az can sıkıcıydı ve kalite sorunları da en azdı
Siz açıkça değiştirmediğiniz sürece asla değişmeyen kodun avantajları var
Başkalarının paket olarak kullanacağı kısımların çoğunu da doğrudan kendimiz yazıyorduk; yalnızca ihtiyaç duyulanı yapıp daha yüksek kod standartları uygulayınca anlamak, debug etmek ve düzeltmek daha kolay oluyordu
İlk yazım maliyeti tek seferliktir ve iyi amorti edilir, ama herkes için her şeyi yapmaya çalışan kodla uğraşmanın tekrar eden maliyeti uzun vadede daha büyüktür ve genelde birikir
Rich Hickey'nin “Simple Made Easy” konuşması bunu iyi anlatıyordu; basit olmakla kolay olmak aynı şey değil ve basit seçenekler başlangıçta daha zor görünse de ikinci dereceden etkiler biriktikçe uzun vadede daha kolay hale geliyor
Benzer depoları tesadüfen görünce bunu zaten fark etmiştim
Zaten herhangi bir deponun kodunu çalıştırmıyorum ama artık depo ve sahibi güvenilir görünse bile sandbox VM açıyorum
Bugünün geliştiricisi için iş, hobi ve kişisel kullanımın en az üç ayrı ortamda net biçimde ayrılması gerekiyor gibi görünüyor
Kötü niyetli olmasa bile tasarım olarak gevşek ya da aptalca yazılmış projeler var
Yakın zamanda çalıştırdığım bir program, ben hiçbir şey istemeden
~/.bashrcdosyama 3 satır ekledi; bunu ancak günler sonra fark ettimBir geliştiricinin bunu nasıl iyi bir fikir olarak görebildiğini anlayamıyorum; bu yüzden artık dışarıdan gelen kodu her çalıştırdığımda sandbox kullanıyorum
Benim günlük kullandığım OS bu
Buna izin veren işverenler gerçekten var mı?
İşte bu tür sorunlardan kaçınmak için iş yerinde hangi araçları kullandıklarını ve mevcut kurulumlarından memnun olup olmadıklarını merak ediyorum
Oldukça küçük bir ekiple haftalık indirme sayısı yüksek bir SDK geliştiriyoruz; snyk, aikido.dev, renovate tabanlı çözümler gibi seçenekleri değerlendirdik ama bunların bu tür sorunlara yardımcı olup olmadığı net değil
Ekip hâlâ küçük olduğu için snyk gibi yanlış pozitif oranı yüksek araçlarla uğraşmak da yük
Sonatype tüm paketleri analiz edip çeşitli metadata ekliyor ve Firewall'da kullanılabilecek politikalar tanımlayarak geri kalanını filtreliyor
Yalnızca herkese açık bağımlılıklar için geçerli ama bunu birkaç yıldır kullanıyoruz ve oldukça iyi çalışıyor
Şimdiye kadar kötü amaçlı yazılım sorunu yaşamadık; bilinen zafiyetleri olan paketler kod tabanına giremiyor ve kullanmakta olduğumuz bir pakette zafiyet bulunursa bildirim alıyoruz
Tespit edilen tedarik zinciri zafiyetlerini ulaşılabilir, ulaşılamaz ve belirsiz diye ayırması sınıflandırmayı çok kolaylaştırdı ve yeni zafiyetleri değerlendirme süresini büyük ölçüde azalttı
Bahsedilen satıcılar kötü amaçlı kodu değil, yalnızca zafiyetleri tespit ediyor
Zafiyet tespitinde iyi olsalar bile, kod tabanına yerleştirilmiş kötü amaçlı yazılımlara karşı hâlâ koruma sağlamıyorlar
Statik, dinamik ve metadata analizi yapıyor; shell çalıştırma, SSH anahtarı kullanımı, ağ iletişimi, decode+eval kullanımı gibi 40'tan fazla özelliği denetleyerek riskli paketleri işaretliyor
https://github.com/ossillate-inc/packj
Şimdiye kadar oldukça iyi çalıştı
https://trivy.dev/
curlile shell kurulum betiği indirip bunusudoile çalıştırma pratiğinin yakında sona erip ermeyeceğini merak ediyorum“Yazılımımızı kurmak için
curl [https://somesite/install.sh](<https://somesite/install.sh>)' | sudo shçalıştırın” türü yöntemler, makalede bahsedilen enfekte kodla fazlasıyla uyumlu görünüyorSistemimiz her hafta bahsedilen kalıba uyan yaklaşık 100 örnek listeliyor ve bunların yaklaşık %3'ü kötü amaçlı
Bu pratiğin sona erdiğini görmek isterim
npm ide aynı yetkilere sahipŞu an yaygın bağımlılık indirme araçları arasında kurulum veya derleme aşamasında düşmanca kod çalıştırmayan tek örneğin
go getolduğunu biliyorumEn azından patlamanın etkisini sınırlamak için sandbox içinde çalışmaya yönelik daha iyi araçlara ihtiyacımız var
ChromeOS'taki “sanal makinenin ana masaüstünde Wayland pencereleri açabilmesi” yaklaşımı temiz görünüyor ama en son baktığımda o kod pek temiz ya da yeniden kullanılabilir değildi
Bu amaç için ayrılmış bir alan adıdır: https://www.rfc-editor.org/rfc/rfc2606.html#section-3
.deb/.rpm/kurulum programını indirin” ya da en kötü ihtimalle “yayıncı yerine üçüncü bir tarafın paketlediğine güvenin” seçeneklerinden belirgin biçimde daha kötü olduğu da söylenemeznpm'de
--ignore-scriptsile kötü amaçlı kod çalıştırmayı hafifletmek mümkünhttps://blog.uirig.com/getting-rid-of-npm-scripts
Şanslıysanız CI'da anormal davranış gösterip yakalanabilir
Gerçek çözüm, https://github.com/crev-dev/cargo-crev gibi bir itibar sistemi, ama ne yazık ki neredeyse hiç kullanılmıyor
Makefile gerektiğine dair yorum da dikkate değer
Bu tür haberler gelmeye devam ettikçe son birkaç aydır geliştirme ortamı güvenliğini yavaş yavaş iyileştiriyorum
Geliştirmede VSCode dev containers kullanıyorum: https://code.visualstudio.com/docs/devcontainers/create-dev-...
Bir kez kurduktan sonra Docker bilgisi çok fazla olmasa da kullanması kolay; web/konsol uygulamalarını çalıştırmak için iyi, ama Flutter ya da Electron gibi şeylerde zorlandım
Küçük projelerde GitHub Codespaces'e de alıştım: https://github.com/codespaces
Eskiden mülakatta basit bir Node projesini düzenlemeye yönelik canlı kodlama yapmıştım; bugün olsa böyle bir durumda mutlaka container ya da Codespaces kullanırdım: https://www.welivesecurity.com/en/eset-research/lazarus-luri...
npm, Node ve Docker en iyi uygulamaları için OWASP yönergelerini düzenli okuyorum; Docker tarafında da mümkün olduğunca küçük image'lar ve açık image tag'leri kullanmak gibi pratikleri uyguluyorum: https://cheatsheetseries.owasp.org/cheatsheets/NodeJS_Docker...
npm/python paketlerinde kurmadan önce socket.dev üzerinden ortam değişkeni erişimi, ağ çağrıları, tedarik zinciri saldırıları ve yakın dönemdeki kod sahipliği değişikliklerini kontrol ediyorum; ayrıca OWASP'ın önerdiği gibi
postinstallscript'lerini global olarak devre dışı da bırakabilirsiniz: https://cheatsheetseries.owasp.org/cheatsheets/NPM_Security_...1 yıldan bile yeni bir örnekte Truva atı virüsü içeren bir depo vardı: https://github.com/orgs/community/discussions/63603
Yani deponun iddia ettiği gibi çalışmış
Resmî depo olduğunu yalnızca göstermek bile belli ölçüde dikkat çekebilir
Ne olabilir ki zaten /s
Yine de GitHub'ın hangi deponun bir projenin resmî deposu olduğunu daha iyi göstermesi gerektiğine katılıyorum