JavacDoor, нармафзори зараровари Maven, ки дар вақти компилятсия кор мекунад

JavacDoor: Артифакти Maven, ки ҳангоми тартибдиҳӣ кор мекунад, на ҳангоми насбкунӣ

ХИБ; DR

Як артефакти Maven Central нашр шудааст, ки ҳамчун io.github.davidtimur:c2-lab нӯҳ нашрияро фиристоданд, ки ҳашттои онҳо ҳангоми тартиб додани ҳама гуна лоиҳаҳои поёноб, ки jar-ро дар роҳи коркардкунандаи аннотатсия ҷойгир мекарданд, боркунии дастрасии дурдастро иҷро карданд. Ҳеҷ рамзи барнома маҷбур набуд, ки онро ворид кунад. Ҳеҷ як сатри манбаъ маҷбур набуд, ки ба он истинод кунад. На скрипти насб, на муодили пас аз насб ва на ягон намуди қалмоқи давраи ҳаёт барои санҷиши асбобҳо вуҷуд надошт.

Вектори иҷро як файли ягонаи 46-байтӣ дар дохили jar аст: бақайдгирии провайдери хидматрасонии Java, ки синфи иҷрокунандаро номгузорӣ мекунад javax.annotation.processing.ProcessorКомпилятори Java чунин сабтҳоро ба таври худкор муайян мекунад. Пас аз ёфтан, javac синфро ҳамчун қисми муқаррарии компиляция эҷод ва иҷро мекунад. Ин маънои онро дорад, ки муҳити вақти кори боркунӣ мошини сохташаванда аст, дар айни замон мошини сохташаванда ягона кореро, ки вуҷуд дорад, иҷро мекунад.

Дар тӯли нӯҳ нашрия, канали фармон ва идоракунӣ се маротиба аз нав сохта шуд: URL-и бозгашти оператор, сипас қабати баръакс дар болои нақби TCP ngrok, сипас канали пурсиши HTTP, ки масирҳояш ду маротиба бештар тағйир ёфтанд. Дар нашри ниҳоӣ мудири эътимоди TLS-и ғайри-оптивӣ ҳамчун пешфарзи JVM насб карда шуд, қабули ҳама гуна сертификат дар тӯли тамоми давраи компиляция.

Ин артефакт дар POM-и худ ва иҷозатномаи MIT калимаҳои "C2 Lab Payload"-ро дошт. Он дар тамоми давраи мушоҳидаи мо дар Maven Central фаъол буд ва аз он вақт инҷониб, якҷоя бо тамоми он хориҷ карда шудааст io.github.davidtimur гурӯҳ

Анатомия: компилятор ҳамчун муҳаррики иҷро

Чаҳорчӯбаи коркарди аннотатсияҳои Java вуҷуд дорад, то китобхонаҳо метавонанд рамзро дар вақти компилясия тавлид кунанд - механизми паси Lombok, Dagger ва рӯйхати тӯлонии асбобҳои ORM ва силсиласозӣ. Протсессор худро бо файли матни оддӣ дар дохили jar эълон мекунад:

META-INF/services/javax.annotation.processor.Processor

Мундариҷаи он файл дар ҳар як нашри зарардида, айнан ва пурра:

io.github.davidtimur.c2lab.C2Processor

Файл дар версияҳои 1.0.1 то 1.0.8, md5 аз ҷиҳати байт якхела аст. 7d2a08a5c8869a47eea9fa62487dfbe4. Нашри 1.0.0 онро дар бар намегирад.

Кай ёвонӣ Вақте ки он кор мекунад, он роҳи коркардкунандаи аннотатсияро барои ин вурудоти хидматӣ скан мекунад ва он чизеро, ки меёбад, бор мекунад. Ҳеҷ чиз дар лоиҳаи тартибдодашаванда набояд протсессорро зикр кунад, чизеро шарҳ диҳад ё чизеро танзим кунад. Ҳузур дар роҳ кофӣ аст. Ин хосиятест, ки JavacDoor-ро аз намунаҳои занҷираи таъминот, ки аксари абзорҳо дар атрофи он сохта шудаанд, ҷудо мекунад:

намунаТриггерНамуди зоҳирӣ
қалмоқи насби npmnpm installscripts.postinstall дар манифест
Бори иловагӣ дар вақти воридоти Pythonаввалин воридоти модулизҳороти сатҳи модул дар манбаъ
JavacDoorjavac дар ҳама гуна лоиҳаи поёнобноми файли бақайдгирии хидмат

Қалмоқи насбкунӣ як эъломия дар манифест аст ва манифест аввалин чизест, ки касе мехонад. Боркунии вақти воридот ҳадди аққал дар манбаи хондашаванда ҷойгир аст. Бақайдгирии хидмат ҳеҷ яке аз инҳо нест: он номи файл ва як сатрест, ки синфро номгузорӣ мекунад ва рафтор дар рамзи байтии компилятсияшуда дар як директория дуртар ҷойгир аст.

Худи синфи боркашӣ кашфи мизбонро тавассути тирпарронӣ анҷом медиҳад. Ҳавзҳои доимии синфҳои тартибдодашуда иборатанд аз /бин/ш, кй?, uname-а, pwd дар роҳи Unix ва рӯйхати вазифаҳо дар роҳи Windows, якҷоя бо Ҷараёни Хатои равонакунӣ барои муттаҳид кардани натиҷаи хатогии раванди кӯдак ба ҷараёни сабтшуда. Ду шаблони JSON натиҷаҳоро аз хост мебаранд - маяки бақайдгирӣ:

{"host":"%s","os":"%s","user":"%s","dir":"%s"}

аҳолии аз номӣ фармон ва номи OS, номи корбарва корбар.dir хосиятҳои система ва натиҷаи занги бозгашт:

{"version":"%s","host":"%s","time":"%s","output":"%s"}

Нишондиҳандаҳои пешрафт, ки дар натиҷаи худи компилятор гузошта шудаанд, ғайриоддӣ самимӣ мебошанд: [C2] иҷрои вақти компилятсия ба анҷом расид, [C2] занги бозгашт фиристода шуд → HTTP , [C2] пӯст пайваст карда шудааст ба .

Нӯҳ нашр, се насли C2

Релизҳо нӯҳ нусхаи як боркунии муфид нестанд. Онҳо як сабти такрорӣ мебошанд ва хондани онҳо бо тартиб нишон медиҳад, ки канал аз нав сохта мешавад, дар ҳоле ки вектори интиқол собит боқӣ монд.

озод карданҲангоми компиляция худкор иҷро мешавадканал
1.0.0не (файли хидматрасонӣ нест)Танҳо URL-и бозхонди аз ҷониби оператор пешниҳодшуда
1.0.1ҳа (вектор муаррифӣ шудааст)URL-и бозхонди аз ҷониби оператор пешниҳодшуда
1.0.2ҳаҚабати баръакс, нақби TCP ngrok
1.0.3ҳаКанали HTTP, /register /cmd /out
1.0.4ҳаКанали HTTP, /register /cmd /out
1.0.5ҳаКанали HTTP, /бақайдгирӣ /пурсиш /баромад
1.0.6ҳаКанали HTTP, /бақайдгирӣ /пурсиш /баромад
1.0.7ҳаКанали HTTP, /register /cmd
1.0.8ҳаТасдиқи канали HTTP + TLS ғайрифаъол аст

Се тафсилот дар ин ҷадвал арзандаанд, зеро ҳар яки онҳо тарзи хондани маҷмӯи артефактро тағйир медиҳанд.

Вектор ба 1.0.1 мерасад, на ба 1.0.2. Нусхаи 1.0.0 ҳамон мантиқи кашф ва занги бозгаштро дорад, аммо файли хидматӣ ва воридоти коркарди аннотатсия надорад; он танҳо дар сурате кор мекунад, ки чизе онро даъват кунад. Аз 1.0.1 файли хидматӣ мавҷуд аст ва синфҳои тартибдодашуда ворид карда мешаванд. javax.annotation.processing.SupportedSourceVersionҲар гуна арзёбӣ, ки ду нашри сабтшударо - 1.0.0 ва 1.0.2 - муқоиса мекунад, дуруст хулоса мекунад, ки чизе тағйир ёфтааст, аммо нодуруст муайян мекунад, ки дар куҷо.

Қабати баръакс маҳз дар як нашр мавҷуд аст. Нашри 1.0.2 дорои 0.tcp.ngrok[.]io, хати логарифмӣ [C2] пӯст ба 0.tcp.ngrok[.]io:19823 пайваст карда шудааст, баннери интерактивӣ c2-shellва терминатори чаҳорчӯба __ПОЁН__Версияҳои баъдӣ аз 1.0.3 ҳеҷ яке аз инҳоро дар бар намегиранд ва ба ҷои ин ба мизбони HTTPS мерасанд. Дархости несткунӣ, ки танҳо версияҳои тасдиқшударо номбар мекард, метавонист нуқтаи ниҳоии мурдаи TCP-ро зикр кунад ва дар айни замон канали HTTP-и зиндаро, ки дар шаш версияҳои баъдӣ мавҷуд аст, бе зикр тарк кунад.

Нусхаи ниҳоӣ тасдиқи интиқолро нест мекунад. Нашри 1.0.8 синфи татбиқкунандаро илова мекунад javax.net.ssl.X509TrustManager ки усулҳои санҷиши сертификаташ ҳеҷ кор намекунанд, тасдиқкунандаи номи мизбони ҳамеша дуруст тавассути setDefaultHostnameVerifierВа боварӣҲама рутин, ки ҳардуро ҳамчун танзимоти пешфарзии JVM насб мекунад. Натиҷа дар он аст, ки барои боқимондаи ин компиляция, JVM ҳама гуна сертификатро аз ҳар як хост қабул мекунад - на танҳо барои трафики худи боркунӣ, балки барои ҳама чизи дигаре, ки сохташуда баъдтар тавассути TLS анҷом медиҳад.

Канали HTTP, дар ҳамаи шаш нашрияе, ки онро истифода мебаранд, аз ҷониби як мизбон пешкаш карда мешавад: пур аз шӯру шавқ девона.бе нгрок[.]девҲар як дархост сарлавҳаро дар бар мегирад. огоҳии ngrok-гузариш аз браузер, ки саҳифаи байнишабакавиеро, ки нақбҳои ройгони ngrok барои браузерҳо хидмат мерасонанд, пахш мекунад. Маҷмӯи роҳҳо дар байни нашрияҳо тағйир меёбад — /берун дар 1.0.7 нопадид мешавад ва /cmd бо иваз мешавад /пурсиш — аммо мизбон ҳеҷ гоҳ тағйир намеёбад.

Худтанзимкунӣ мегӯяд

Ҳар як POM аз версияи 1.0.1 ба баъд як аргументи компиляторро барои сохтани худи артефакт муқаррар мекунад:

-proc:ҳеҷ кас

Ин парчам коркарди эзоҳро ғайрифаъол мекунад. Таъсири он дар ин ҷо пеш аз он аст.cise: вақте ки лоиҳаи дорои протсессор худаш тартиб дода мешавад, протсессор кор намекунад.

Ин парчам истифодаи комилан муқаррарӣ дорад. Лоиҳае, ки протсессори аннотатсияро мефиристад, аксар вақт бояд ҳангоми bootstrap аз истифодаи он протсессор худдорӣ кунад ва ҳуҷҷатҳои build-tool маҳз ҳаминро тавсия медиҳанд. Танҳо бо назардошти он, ин ҳеҷ чизро исбот намекунад.

Аммо, бо назардошти он чизе, ки протсессор мекунад, он як нобаробарии мушаххасро тавсиф мекунад: рамз дар мошинҳои ҳар касе, ки бар зидди артефакт тартиб медиҳад, иҷро мешавад, на дар мошине, ки артефактро месозад. Парчам дар ҳамон версияе, ки файли хидматрасониро муаррифӣ мекунад - 1.0.1 - ва дар ҳар версияи баъд аз он пайдо мешавад. Ҳамбастагии байни "версияе, ки дар он иҷрои вақти компилятсия оғоз мешавад" ва "версияе, ки дар он иҷрои вақти компилятсия дар маҳал хомӯш карда мешавад" ягона сигнали таҳлилии муфидтарин дар маҷмӯи артефакт аст ва он дар POM-и матни оддӣ бе декомпиляцияи чизе намоён аст.

Мо таъсирро мушоҳида мекунем ва дар он ҷо меистем. Дар ягон ашёи дигар дар бораи сабаби гузоштани парчам чизе гуфта нашудааст.

Як қисми дигари метамаълумот сазовори зикр аст, асосан барои нест кардани он. POM лоиҳаро "C2 Lab Payload" номгузорӣ мекунад, онро ҳамчун "артефакти C2 lab payload" тавсиф мекунад ва онро MIT иҷозатнома медиҳад. Худнишонгузории ин навъ баъзан ҳамчун далели он пешниҳод карда мешавад, ки баста як кори тадқиқотӣ аст.cisна таҳдиди зинда ва баъзан ин хониш дуруст аст - канарейкаи эълоншуда бе инфрасохтори дастрас аз ин объект фарқ мекунад. Ин дар ин ҷо татбиқ намешавад. Импланти функсионалӣ, ки дар анбори оммавӣ нашр шудааст ва барои ҳар як истеъмолкунанда дастрас аст, бо инфрасохтори берунӣ, ки се маротиба дар тӯли нӯҳ нашр аз нав сохта шудааст, қобилияти зинда аст, новобаста аз он ки метамаълумоти он онро чӣ меномад. Ном дар POM дар бораи он чизе, ки дар мошине, ки бар зидди он тартиб медиҳад, рӯй медиҳад, ҳеҷ чизро тағйир намедиҳад.

Нишондиҳандаҳо барои мошинҳои сохтмонӣ

Агар хости сохташуда бар зидди ин артефакт компиляция карда шавад, далелҳо дар гузоришҳои сохташуда ва телеметрияи шабакавӣ ҷойгиранд, на дар як импланти доимӣ дар диск - боркунӣ дар дохили раванди компилятор кор мекунад ва бо он мебарояд.

Дар jar ё кэши анбори маҳаллӣ

  • META-INF/services/javax.annotation.processing.Processor Рӯйхат io.github.davidtimur.c2lab.C2Processor
  • Файли хидматрасонӣ md5 7d2a08a5c8869a47eea9fa62487dfbe4
  • Синфҳо дар зери io/github/davidtimur/c2lab/: C2Processor, C2Task, Taskва дар 1.0.8 синфи дохилӣ Task$1

Дар натиҷаи сохтмон

  • [C2] compile-time execution complete
  • [C2] callback sent → HTTP
  • [C2] callback failed:
  • [C2] shell connected to
  • Баннери интерактивӣ c2-shell; терминатори чаҳорчӯба __END__

Телеметрияи дар ҳоли раванд

  • javac ҳамчун волидайн аз /bin/sh -c (Unix) ё тарҷумони фармонҳои Windows
  • Фармонҳои кӯдак whoami, uname -a, pwd (Unix) ё tasklist (Windows) аз ҷониби қадами компилятсионӣ сохта шудааст

Дар телеметрияи шабакавӣ

  • TCP-и содиротӣ ба 0.tcp.ngrok[.]io:19823 (нашри 1.0.2)
  • HTTPS ба tableful-fervor-crazed.ngrok-free[.]dev, роҳҳо /register, /cmd, /poll, /out (аз 1.0.3 то 1.0.8 бароварда мешавад)
  • Сарлавҳаи дархост ngrok-skip-browser-warning: true
  • Дархости мувофиқати баданҳо {"host":...,"os":...,"user":...,"dir":...} or {"version":...,"host":...,"time":...,"output":...}

Дар конфигуратсия

  • Тағйирёбандаҳои муҳити зист CALLBACK, CALLBACK_URL; хосияти система callback.url

Метамаълумоти ношир дар бораи маълумот

  • гурӯҳ io.github.davidtimur; суроғаи ношир davudboi999@gmail[.]comкалиди имзо; E520C345EF94423D

Сохтани версияи 1.0.8 як санҷиши иловагиро талаб мекунад. Азбаски ин версия мудири эътимоди иҷозатдодашударо ҳамчун пешфарзии JVM насб мекунад, ҳама гуна пайвасти TLS, ки баъдтар дар ҳамон JVM сохта шудааст - ҳалли вобастагӣ, боргузории артефакт, қадами ҷойгиркунӣ - бе тасдиқи сертификат идома ёфт. Трафики он тиреза набояд тасдиқшуда ҳисобида шавад.

Чаро артефактҳои тартибдодашуда ба сканкунии гуногун ниёз доранд

JavacDoor як ҳолати санҷишии муфид аст, зеро он якбора ду фарзияи маъмулро мағлуб мекунад ва ҳеҷ яке аз ин нокомиҳо ба абзорҳои як фурӯшанда хос нест.

Фарзияи аввал ин аст, ки рамзи хатарнок худро дар як манифест эълон мекунад. Қисми зиёди абзорҳои занҷираи таъминот дар атрофи давраи ҳаёт ташкил карда шудаанд hooks, зеро барои npm ва PyPI амал одатан дар ҳамин ҷост. JavacDoor ягон қалмоқ надорад. Триггери он файли бақайдгирии хидмат аст, ки номаш интерфейси Java ва мундариҷааш номи синф аст. Барои он ки онро статикӣ дастгир кунед, шумо бояд коркард кунед META-INF/services/javax.annotation.processor.Processor ҳамчун нуқтаи вуруди иҷроия мустақилона, дар баробари пас аз насб кардан скрипт — ва сипас синфи номбаршударо ба байткод пайравӣ кунед. Экосистемаҳо механизмҳои кашфи худкори худро дар ин шакл доранд ва ҳар яки онҳо нуқтаи вуруд мебошанд, новобаста аз он ки асбобҳо онро ҳамчун як номбар мекунанд ё не.

Фарзияи дуюм ин аст, ки сатрҳо дар файлҳои сарчашма зиндагӣ мекунанд. Барои jar, нуқтаҳои ниҳоӣ, фармонҳои shell, қолибҳои JSON ва нишонаҳои лог ҳама дар ҳавзҳои доимии .синф файлҳо. Асбобҳое, ки матнро greps мекунанд, ҳеҷ чизро намеёбанд - на аз он сабаб, ки сатрҳо печидаанд, балки аз он сабаб, ки онҳо дар як контейнери дуӣ сохторӣ ҳастанд, ки сканкунии матн онро таҷзия намекунад. Ҳар як нишондиҳандаи шабака дар ин паём аз таҷзияи доимии пул баромадааст. Яке аз онҳо пурра шаклгирифта аст. https:// URL дар дохили файли синфӣ дар намуди оддӣ қарор дорад; сканкунии матнии мундариҷаи хондашавандаи jar ҳанӯз онро ошкор намекунад. Дар ин ҷо ягон рамзгузорӣ барои шикастан вуҷуд надорад, танҳо формати контейнер барои хондан вуҷуд дорад.

Ҳарду фосила шакли якхела доранд: формати артефакт ҳамчун як халтаи файлҳо, на ҳамчун сохторе бо семантикаи муайяншуда, баррасӣ мешуд. Ислоҳкунанда ноҷолиб аст - контейнерро таҳлил кунед, нуқтаҳои вуруди худкори кашфи экосистемаро номбар кунед ва онҳоро ба рамзи компилятсияшуда пайравӣ кунед. Барои векторҳои вақти сохтан, санҷиши сеюм арзон ва ба таври ҳайратангез ташхисӣ аст: муқоисаи он чизе, ки артефакт бо истеъмолкунандагон мекунад, бо он чизе, ки худро аз он озод мекунад. Артефакте, ки протсессори вақти компилятсияро сабт мекунад ва ҳамзамон коркарди вақти компилятсияро барои сохтани худ ғайрифаъол мекунад, ба шумо дар ду сатри POM-и матни оддӣ дар бораи худ чизе гуфтааст.

Барои дастаҳое, ки имрӯз артефактҳои Maven-ро истеъмол мекунанд, се чораи амалӣ инҳоянд:

  • Масири протсессори аннотатсияро ҳамчун сарҳади иҷро баррасӣ кунед. Вобастагиҳое, ки дар он ҷо ҷойгиранд, рамзро дар сохтори шумо иҷро мекунанд. Дар ҷое, ки сохтор ба коркарди аннотатсия ниёз надорад, -proc:ҳеҷ кас аз нигоҳи дифоӣ ҳамон қадар муфид аст, ки зоҳиран дар ин ҷо ба таври маҳаллӣ муфид буд; дар ҷое, ки ин корро мекунад, маҷмӯи протсессорро ба таври возеҳ пин кунед, ба ҷои мерос гирифтани он аз роҳи синфи компилятсионӣ.
  • Зерравандҳои компилятори лог. Қадами компилятсионӣ, ки пӯстро ба вуҷуд меорад, дар аксари лоиҳаҳо ғайримуқаррарӣ аст ва ба таври ночиз огоҳкунанда аст.
  • Метадатаҳоро ҳамчун шаҳодат қабул накунед. «Лаборатория», «озмоиш», «бори корӣ» ва «PoC» дар ном ё тавсифи баста маҳдудиятҳои фарогирӣ нестанд. Дастрасӣ ва рафтор маҳдудиятҳои фарогир мебошанд.

Артефакт ва тамоми гурӯҳи он аз он хориҷ карда шуданд Maven Central пас аз гузориши мо; ҳам роҳи артефакт ва ҳам роҳи гурӯҳ ҳоло 404-ро бармегардонанд ва индекси Central ягон координатаи мувофиқро нишон намедиҳад. Ин ин артефактро мепӯшонад. Он векторро намепӯшад, ки хусусияти ҳуҷҷатгузории компилятори Java аст ва барои ҳар касе, ки jar нашр мекунад, дастрас аст.

Адабиёт

Дар ин паём ягон манбаъи беруна зикр нашудааст. Ҳамаи бозёфтҳо таҳлили статикии дасти аввалаи нӯҳ кӯзаи нашршуда мебошанд, ки пеш аз нест кардан аз Maven Central гирифта шудаанд. Дар ягон лаҳза ягон рамз аз артефактҳо иҷро нашудааст.

асбобҳои sca-tools-нармафзор-таҳлили таркиб
Хатарҳои нармафзори худро афзалият диҳед, ислоҳ кунед ва бехатар созед
Ҳисоби ройгони худро дастрас кунед.
Корти кредитӣ лозим нест.

Таҳия ва интиқоли нармафзори худро таъмин кунед

бо маҷмӯи маҳсулоти Xygeni