TL, DR
Zavatra vita an-tsoratra avy amin'ny Maven Central navoaka ho io.github.davidtimur:c2-lab nandefa famoahana sivy, valo tamin'izy ireo no nanao "remote-access payload" nandritra ny fanangonana tetikasa manaraka izay nametraka ny jar teo amin'ny lalan'ny "annotation-processor". Tsy nisy kaody fampiharana voatery nanafatra azy. Tsy nisy andalana loharano voatery nanondro azy. Tsy nisy script fametrahana, tsy nisy mitovy amin'izany taorian'ny fametrahana, ary tsy nisy karazana fitaovana hijerena ny tsingerin'ny fiainana.
Ny vecteur execution dia rakitra tokana 46-byte ao anatin'ny jar: fisoratana anarana mpamatsy serivisy Java izay manome anarana kilasy iray mampihatra javax.annotation.processing.ProcessorHitan'ny mpamorona Java ho azy ireo fisoratana anarana ireo. Rehefa hita, javac Mamorona sy mampandeha ny kilasy ho toy ny ampahany mahazatra amin'ny fanangonana. Midika izany fa ny tontolo iasan'ny payload dia ny milina fananganana, amin'izao fotoana izao dia manao ny zavatra tokana tokony hataony ny milina fananganana.
Naverina namboarina intelo ny fantsona "command-and-control" nandritra ireo famoahana sivy: URL callback nomen'ny mpandraharaha, avy eo akorandriaka mivadika amin'ny alalan'ny tonelina TCP ngrok, avy eo fantsona fanadihadiana HTTP izay niova indroa ny lalany. Ny famoahana farany dia nametraka mpitantana fitokisana TLS tsy misy op ho toy ny JVM default, manaiky izay mari-pankasitrahana mandritra ny faharetan'ny fanangonana.
Nitondra ny teny hoe "C2 Lab Payload" tao amin'ny POM-ny sy ny fahazoan-dàlana MIT ilay zavatra artifisialy. Niaina tao amin'ny Maven Central izy io nandritra ny fotoana rehetra nijerentsika azy ary dia nesorina nanomboka teo, miaraka amin'ny azy manontolo io.github.davidtimur vondrona.
Anatomy: ny compiler ho toy ny motera fanatanterahana
Misy ny rafitra fanodinana fanamarihana an'ny Java mba hahafahan'ny tranomboky mamorona kaody amin'ny fotoana fanangonana - ny rafitra ao ambadiky ny Lombok, Dagger, ary lisitra lava be amin'ny fitaovana ORM sy serialization. Ny processeur dia manambara ny tenany amin'ny alàlan'ny rakitra lahatsoratra tsotra ao anatin'ny jar:
META-INF/services/javax.annotation.processing.Processor
Ny votoatin'io rakitra io ao amin'ny famoahana rehetra voakasik'izany, ara-bakiteny sy feno:
io.github.davidtimur.c2lab.C2Processor
Mitovy amin'ny byte ny rakitra amin'ny version 1.0.1 hatramin'ny 1.0.8, md5 7d2a08a5c8869a47eea9fa62487dfbe4. Tsy misy izany ao amin'ny Version 1.0.0.
Rehefa Javaney Rehefa miasa izy dia mijery ny lalan'ny annotation-processor ho an'ireo fidirana serivisy ireo ary mampiditra izay hitany. Tsy misy zavatra ao amin'ny tetikasa angonina mila manonona ny processeur, manisy fanamarihana na inona na inona, na manamboatra na inona na inona. Ampy ny fisian'ny lalana. Ity no toetra mampiavaka ny JavacDoor amin'ny lamina famatsiana izay iorenan'ny ankamaroan'ny fitaovana:
| Pattern | trigger | Hita maso toy ny |
|---|---|---|
| npm fametrahana hook | npm install | scripts.postinstall ao amin'ny manifesto |
| Entana amin'ny fotoana fanafarana Python | fampidirana voalohany ny môdioly | fanambarana ambaratonga môdioly ao amin'ny loharano |
| JavacDoor | javac amin'ny tetikasa rehetra any aoriana | anaran-drakitra fisoratana anarana serivisy |
Fanambarana ao anaty manifest ny install hook, ary ny manifest no zavatra voalohany vakian'ny olona. Farafaharatsiny, ny payload amin'ny fotoana fanafarana dia mipetraka ao amin'ny loharano azo vakiana. Ny fisoratana anarana amin'ny serivisy dia tsy izy roa: anaran-drakitra miampy andalana iray manome anarana kilasy iray izy io, ary ny fitondran-tena dia mipetraka ao amin'ny bytecode voaangona iray lahatahiry miala.
Ny kilasy payload mihitsy no manao ny fanaraha-maso ny mpampiantrano amin'ny alàlan'ny fandefasana entana. Ny dobo tsy miovaova amin'ireo kilasy voaangona dia misy / Ben / sh, iza aho, uname -a, pwd eo amin'ny lalan'ny Unix ary lisitra asa eo amin'ny lalana Windows, miaraka amin'ny redirectErrorStream mba hampifangaroana ny vokatra diso avy amin'ny dingana zanaka ao amin'ny stream voasambotra. Misy môdely JSON roa mitondra valiny avy amin'ny mpampiantrano — registration beacon:
{"host":"%s","os":"%s","user":"%s","dir":"%s"}
mponina avy amin'ny hostname baiko sy ny os.name, mpampiasa.name, ary mpampiasa.dir toetra mampiavaka ny rafitra, ary ny valin'ny antso miverina:
{"version":"%s","host":"%s","time":"%s","output":"%s"}
Tena tsy mahazatra ny mari-pamantarana fandrosoana tavela ao amin'ny vokatra navoakan'ny compiler: [C2] vita ny fanatanterahana ny fotoana fanangonana, [C2] antso miverina nalefa → HTTP , Akorandriaka [C2] mifandray amin'ny .
Sivy navoaka, telo taranaka C2
Tsy dika mitovy sivy amin'ny entana iray ireo famoahana. Diary famerenana izy ireo, ary ny famakiana azy ireo araka ny filaharany dia mampiseho fa amboarina indray ny fantsona raha mbola mijanona ho raikitra ny vector fanaterana.
| Release | Manatanteraka ho azy amin'ny fanangonana | fantsona |
|---|---|---|
1.0.0 | tsia (tsy misy rakitra serivisy) | URL antso miverina nomen'ny mpandraharaha ihany |
1.0.1 | eny (nampidirina ny vecteur) | URL antso miverina nomen'ny mpandraharaha |
1.0.2 | Eny | Akorandriaka mivadika, tonelina TCP ngrok |
1.0.3 | Eny | Lakandrano HTTP, /register /cmd /out |
1.0.4 | Eny | Lakandrano HTTP, /register /cmd /out |
1.0.5 | Eny | Lakandrano HTTP, /register /poll /out |
1.0.6 | Eny | Lakandrano HTTP, /register /poll /out |
1.0.7 | Eny | Lakandrano HTTP, /register /cmd |
1.0.8 | Eny | Tsy mandeha ny fanamarinana HTTP channel + TLS |
Misy antsipiriany telo ao amin'io tabilao io mendrika hohazavaina, satria samy manova ny fomba tokony hamakiana ireo zavatra noforonina izy ireo.
Tonga amin'ny 1.0.1 ny vector, fa tsy 1.0.2. Mitovy amin'ny lojika fanaraha-maso sy antso an-tariby ihany ny Release 1.0.0 saingy tsy misy rakitra serivisy ary tsy misy fanafarana fanodinana fanamarihana; miasa izy io raha misy miantso azy. Manomboka amin'ny 1.0.1 dia eo ny rakitra serivisy ary ampidirina ireo kilasy voaangona. javax.annotation.processing.SupportedSourceVersionNy fanombanana rehetra izay mampitaha ireo famoahana roa misy tapakila — 1.0.0 sy 1.0.2 — dia manatsoaka hevitra marina fa nisy fiovana, saingy tsy mamaritra hoe aiza.
Ny akorandriaka mivadika dia misy ao anaty famoahana iray monja. Ny famoahana 1.0.2 dia misy 0.tcp.ngrok[.]io, ny tsipika log [C2] shell mifandray amin'ny 0.tcp.ngrok[.]io:19823, sora-baventy ifandrimbonana akorandriaka c2, ary famaranana frame __TAPITRA__Ny famoahana 1.0.3 manomboka izao dia tsy misy ireo ary tonga any amin'ny mpampiantrano HTTPS. Ny fangatahana fanesorana izay manonona fotsiny ireo famoahana voasakana dia ho nanonona teboka TCP maty raha toa ka namela ny fantsona HTTP mivantana, izay efa misy amin'ny famoahana enina taty aoriana, tsy voatonona.
Ny famoahana farany dia manala ny fanamarinana ny fitaterana. Manampy kilasy iray mampihatra ny famoahana 1.0.8 javax.net.ssl.X509TrustManager izay tsy manao na inona na inona ny fomba fanamarinana mari-pankasitrahana, mpanamarina anarana mpampiantrano marina foana voasoratra anarana amin'ny alàlan'ny setDefaultHostnameVerifier, Ary ny matokyAll fomba fanao izay mametraka azy roa ho toy ny default an'ny JVM. Ny vokany dia ho an'ny ambin'io fanangonana io, ny JVM dia manaiky izay mari-pankasitrahana avy amin'ny mpampiantrano rehetra - tsy ho an'ny fifamoivoizana an'ny payload ihany, fa ho an'ny zavatra hafa rehetra ataon'ny fananganana amin'ny alàlan'ny TLS aorian'izay.
Ny fantsona HTTP, amin'ireo famoahana enina rehetra mampiasa azy, dia tarihin'ny mpampiantrano tokana: tableful-fervor-crazed.ngrok-free[.]devNy fangatahana rehetra dia mitondra ny lohateny fampitandremana momba ny navigateur-ngrok-skip, izay manakana ny pejy interstitial izay ampiasain'ny tonelina ngrok maimaim-poana ho an'ny navigateur. Miovaova arakaraka ny famoahana ny andiana lalana — /mivoaka nanjavona tamin'ny 1.0.7, ary /cmd mifandimby amin'ny / fitsapan-kevitra — saingy tsy miova mihitsy ny mpampiantrano.
Ny fanilikilihana tena
Ny POM rehetra manomboka amin'ny 1.0.1 dia mametraka adihevitra momba ny mpamorona (compiler) ho an'ny fananganana ny artifact manokana:
-proc:tsy misy
Mampitsahatra ny fanodinana fanamarihana io marika io. Ny vokany eto dia mialohacise: rehefa voaangona ny tetikasa misy ny processeur, dia tsy mandeha ilay processeur.
Ity marika famantarana ity dia manana fampiasana mahazatra tanteraka. Ny tetikasa iray izay mandefa processeur fanamarihana dia matetika mila misoroka ny fampiharana izany processeur izany amin'ny tenany mandritra ny bootstrap, ary ny antontan-taratasy momba ny build-tool dia manoro hevitra izany indrindra. Raha jerena fotsiny dia tsy manaporofo na inona na inona izany.
Raha ampiarahina amin'ny ataon'ny processeur anefa, dia mamaritra tsy fitoviana manokana izy io: ny kaody dia miasa amin'ny milina rehetra izay manao compile mifanohitra amin'ny artifact, fa tsy amin'ny milina izay manorina ny artifact. Ny marika dia miseho ao amin'ny famoahana mitovy izay mampiditra ny rakitra serivisy — 1.0.1 — sy amin'ny famoahana rehetra aoriany. Ny fifandraisana misy eo amin'ny "famoahana izay anombohan'ny fanatanterahana ny fotoana compile" sy ny "famoahana izay vonoina eo an-toerana ny fanatanterahana ny fotoana compile" no famantarana analitika mahasoa indrindra ao amin'ny andiana artifact, ary hita maso ao amin'ny POM lahatsoratra tsotra tsy misy decompile na inona na inona.
Marihintsika ny vokany ary mijanona eo isika. Tsy misy na inona na inona amin'ireo zavatra hita milaza ny antony nametrahana ny sainam-pirenena.
Mendrika horesahina ny metadata iray hafa, indrindra fa ny fanariana azy. Ny POM dia manome anarana ny tetikasa hoe "C2 Lab Payload", mamaritra azy io ho "zavatra avy amin'ny payload an'ny laboratoara C2", ary manome alalana azy io ho MIT. Ny fanomezana marika manokana toy izao dia indraindray atolotra ho porofo fa fampiharana fikarohana ny fonosana iray.cise fa tsy fandrahonana mivantana, ary indraindray marina izany famakiana izany — zavatra hafa noho ity iray ity ny canary voalaza fa tsy misy fotodrafitrasa azo tratrarina. Tsy mihatra eto izany. Ny implant miasa navoaka tao amin'ny tahiry ho an'ny daholobe, azon'ny mpanjifa rehetra tratrarina, miaraka amin'ny fotodrafitrasa mivoaka izay naorina indray intelo tamin'ny famoahana sivy, dia fahafaha-manao mivantana na inona na inona iantsoan'ny metadata azy. Ny anarana ao amin'ny POM dia tsy manova na inona na inona momba izay mitranga amin'ny milina izay manangona manohitra azy.
Tondro ho an'ny fanamboarana milina
Raha toa ka misy mpampiantrano build nangonina manohitra ity artifact ity, dia mipetraka ao amin'ny build logs sy ny telemetry network ny porofo fa tsy ao anaty implant persistent amin'ny kapila - ny payload dia miasa ao anatin'ny dingan'ny compiler ary mivoaka miaraka amin'izany.
Ao amin'ny jar na cache repository eo an-toerana
META-INF/services/javax.annotation.processing.Processorfanomezana anaranaio.github.davidtimur.c2lab.C2Processor- Rakitra serivisy md5
7d2a08a5c8869a47eea9fa62487dfbe4 - Kilasy eo ambanin'ny
io/github/davidtimur/c2lab/:C2Processor,C2Task,Task, ary ao amin'ny 1.0.8 ny kilasy anatinyTask$1
Vokatra amin'ny fananganana
[C2] compile-time execution complete[C2] callback sent → HTTP[C2] callback failed:[C2] shell connected to- Sora-baventy ifandrimbonana
c2-shell; mpamarana ny rafitra__END__
Telemetria eo am-panaovana
javacamin'ny maha-ray aman-drenin'ny/bin/sh -c(Unix) na mpandika teny baiko Windows- Baiko ho an'ny ankizy
whoami,uname -a,pwd(Unix) natasklist(Windows) nokarakarain'ny dingana fanangonana
Ao amin'ny telemetria tambajotra
- TCP mivoaka mankany amin'ny
0.tcp.ngrok[.]io:19823(famoahana 1.0.2) - HTTPS mankany amin'ny
tableful-fervor-crazed.ngrok-free[.]dev, lalana/register,/cmd,/poll,/out(navoaka ny 1.0.3 hatramin'ny 1.0.8) - Lohatenin'ny fangatahana
ngrok-skip-browser-warning: true - Mangataka fampifanarahana vatana
{"host":...,"os":...,"user":...,"dir":...}or{"version":...,"host":...,"time":...,"output":...}
Amin'ny fanamafisana
- Tontolo iainana miovaova
CALLBACK,CALLBACK_URL; toetran'ny rafitracallback.url
Metadata an'ny mpamoaka lahatsoratra
- Group
io.github.davidtimur; adiresin'ny mpamoakadavudboi999@gmail[.]comfanalahidy fanasoniavanaE520C345EF94423D
Mila fanamarinana fanampiny indray mandeha ny fanamboarana izay nampiasa ny version 1.0.8. Satria mametraka "permissive trust manager" ho toy ny JVM mahazatra io version io, dia tsy nisy fanamarinana mari-pankasitrahana ny fifandraisana TLS rehetra natao taty aoriana tao amin'io JVM io ihany — ny "dependency resolution", ny "artifact upload", ny dingana fametrahana. Tsy tokony hoheverina ho voamarina ny fifamoivoizana avy amin'io varavarankely io.
Nahoana ny zavatra voangona no mila scanning samihafa
Tranga fitsapana mahasoa ny JavacDoor satria mandresy ireo fiheverana mahazatra roa indray mandeha, ary tsy misy amin'ireo tsy fahombiazana ireo no manokana ho an'ny fitaovan'ny mpivarotra iray.
Ny fiheverana voalohany dia ny hoe ny kaody mampidi-doza dia manambara ny tenany ao anaty manifest. Betsaka ny fitaovana ao amin'ny rojo famatsiana no voalamina manodidina ny tsingerim-piainana hooks, satria ho an'ny npm sy PyPI dia eo no misy ny hetsika mazàna. Tsy misy hook ny JavacDoor. Ny trigger-ny dia rakitra fisoratana anarana serivisy izay interface Java no anarany ary anaran-kilasy ny votoatiny. Mba hahazoana izany amin'ny fomba statika dia tsy maintsy mitondra ny META-INF/services/javax.annotation.processing.Processor ho toy ny teboka fidirana amin'ny fanatanterahana azy manokana, mitovy amin'ny a aorian'ny fametrahana script — ary avy eo araho ao anaty bytecode ny kilasy voatonona anarana. Manana ny fomba fiasany manokana amin'ity endrika ity ny tontolo iainana, ary samy fidirana avokoa ny tsirairay na tanisain'ny tooling ho iray izy na tsia.
Ny fiheverana faharoa dia ny hoe ny "strings" dia mipetraka ao anaty rakitra loharano. Ho an'ny jar, ny endpoints, ny baiko shell, ny JSON templates, ary ny log markers dia ao anatin'ny pools tsy miova an'ny .class rakitra. Tsy mahita na inona na inona ny fitaovana izay maka lahatsoratra — tsy noho ny hoe voasarona ireo tady, fa satria ao anaty fitoeran-javatra binary voarafitra izay tsy voavaha amin'ny scan text izy ireo. Ny famantarana tambajotra rehetra ato amin'ity lahatsoratra ity dia avy amin'ny fanadihadihana tsy tapaka. Ny iray amin'izy ireo dia endrika feno https:// Miseho miharihary ao anaty rakitra kilasy ny URL; na dia jerena aza ny votoatin'ny siny azo vakiana dia mbola tsy hita taratra izany. Tsy misy kaody azo resena eto, fa endrika fitoeran-javatra ihany no hovakiana.
Samy mitovy endrika ireo banga roa ireo: ny endrika artifact dia noheverina ho toy ny kitapo misy rakitra fa tsy toy ny rafitra misy semantika voafaritra. Tsy dia mahafinaritra loatra ny fanitsiana - famakafakana ny fitoeran-javatra, tanisao ny teboka fidirana mandeha ho azy an'ny tontolo iainana, ary araho ao anaty kaody voaangona izy ireo. Ho an'ny vectors fotoana fananganana manokana, ny fanamarinana fahatelo dia mora vidy ary mahagaga fa diagnostika: ampitahao izay ataon'ny artifact amin'ny mpanjifa amin'izay tsy idirany. Ny artifact izay misoratra anarana processeur fotoana fananganana ary miaraka amin'izay dia manafoana ny fanodinana fotoana fananganana ho an'ny fananganana azy manokana dia nilaza zavatra momba ny tenany tamin'ny andalana roa amin'ny POM lahatsoratra tsotra.
Ho an'ireo ekipa mampiasa ireo zavatra vita amin'ny Maven ankehitriny, ireto misy fepetra telo azo ampiharina:
- Hevero ho toy ny fetran'ny fanatanterahana ny lalan'ny annotation-processor. Ireo fiankinan-doha izay mipetraka ao dia mampiasa kaody ao amin'ny fanangananao. Raha tsy mila fanodinana fanamarihana ny fananganana iray, -proc:tsy misy dia mahasoa amin'ny fiarovana toy ny hita teo an-toerana ihany; raha manao izany izy, dia ampidiro mazava tsara ny processeur set fa tsy mandova izany avy amin'ny compile classpath.
- Fizotry ny mpamorona log. Ny dingana fanangonana izay mamoaka akorandriaka dia tsy mahazatra amin'ny ankamaroan'ny tetikasa ary mora ampitandremana.
- Aza raisina ho toy ny fijoroana vavolombelona ny metadata. Tsy fetra ny sehatra ny "Lab", "test", "payload", ary "PoC" ao amin'ny anaran'ny fonosana na famaritana. Ny fahafahana mahatratra sy ny fitondran-tena no fetra.
Nesorina tao amin'ny Maven Manaraka ny tatitra nataonay ny Central; samy mamerina 404 ny lalan'ny artifact sy ny lalan'ny vondrona, ary tsy mitatitra koordinate mifanaraka amin'izany ny Central index. Izany dia manakatona ity artifact ity. Tsy manakatona ny vector izy, izay endri-javatra voarakitra an-tsoratra ao amin'ny Java compiler ary azon'izay rehetra mamoaka jar.
References
Tsy manonona loharano ivelany ity lahatsoratra ity. Ny zavatra hita rehetra dia fanadihadiana mivantana momba ireo siny sivy navoaka, nalaina avy amin'ny Maven Central talohan'ny nanesorana azy. Tsy nisy kaody avy amin'ireo zavatra nampiasaina tamin'izany fotoana izany.







