មេរោគ JavacDoor និង Maven ដែលដំណើរការនៅពេលចងក្រង

JavacDoor៖ វត្ថុបុរាណ Maven ដែលដំណើរការកំឡុងពេលចងក្រង មិនមែនការដំឡើងទេ

TL; កុង

វត្ថុបុរាណ Maven Central បានបោះពុម្ពផ្សាយជា io.github.davidtimur:c2-lab បានដឹកជញ្ជូនការចេញផ្សាយចំនួនប្រាំបួន ដែលក្នុងនោះមានប្រាំបីបានដំណើរការ payload ចូលប្រើពីចម្ងាយក្នុងអំឡុងពេលចងក្រងគម្រោង downstream ណាមួយដែលដាក់ jar នៅលើផ្លូវ annotation-processor របស់វា។ គ្មានកូដកម្មវិធីណាមួយត្រូវនាំចូលវាទេ។ គ្មានប្រភពណាមួយត្រូវយោងវាទេ។ មិនមានស្គ្រីបដំឡើងទេ គ្មានសមមូលក្រោយការដំឡើង និងគ្មានទំពក់វដ្តជីវិតណាមួយសម្រាប់ឧបករណ៍ដើម្បីត្រួតពិនិត្យនោះទេ។

វ៉ិចទ័រប្រតិបត្តិគឺជាឯកសារទំហំ ៤៦ បៃតែមួយនៅក្នុង jar៖ ការចុះឈ្មោះអ្នកផ្តល់សេវា Java ដែលដាក់ឈ្មោះថ្នាក់ដែលអនុវត្ត javax.annotation.processing.Processorកម្មវិធីចងក្រង Java រកឃើញការចុះឈ្មោះបែបនេះដោយស្វ័យប្រវត្តិ។ នៅពេលដែលរកឃើញហើយ javac បង្កើត និងដំណើរការថ្នាក់ជាផ្នែកធម្មតានៃការចងក្រង។ នោះមានន័យថា បរិស្ថានដំណើរការរបស់ payload គឺជាម៉ាស៊ីនសាងសង់ នៅពេលនេះ ម៉ាស៊ីនសាងសង់កំពុងធ្វើរឿងមួយដែលវាមានដើម្បីធ្វើ។

នៅទូទាំងការចេញផ្សាយទាំងប្រាំបួន ឆានែលបញ្ជា និងត្រួតពិនិត្យត្រូវបានសាងសង់ឡើងវិញចំនួនបីដង៖ URL ហៅត្រឡប់ដែលផ្គត់ផ្គង់ដោយប្រតិបត្តិករ បន្ទាប់មកសែលបញ្ច្រាសលើផ្លូវរូងក្រោមដី TCP ngrok បន្ទាប់មកឆានែលស្ទង់មតិ HTTP ដែលផ្លូវរបស់វាបានផ្លាស់ប្តូរពីរដងទៀត។ ការចេញផ្សាយចុងក្រោយបានដំឡើងកម្មវិធីគ្រប់គ្រងការជឿទុកចិត្ត TLS ដែលមិនចាំបាច់ដំណើរការជាលំនាំដើមរបស់ JVM។ ទទួលយកវិញ្ញាបនបត្រណាមួយសម្រាប់រយៈពេលនៃការចងក្រង.

វត្ថុបុរាណនេះមានពាក្យថា "C2 Lab Payload" នៅក្នុង POM របស់វា និងអាជ្ញាប័ណ្ណ MIT។ វាបានផ្សាយផ្ទាល់នៅលើ Maven Central សម្រាប់រយៈពេលទាំងមូលដែលយើងបានសង្កេតឃើញវា ហើយ... ត្រូវបានដកចេញចាប់តាំងពីពេលនោះមក រួមជាមួយនឹងទាំងមូលរបស់វា io.github.davidtimur ក្រុម។

កាយវិភាគសាស្ត្រ៖ កម្មវិធីចងក្រងជាម៉ាស៊ីនប្រតិបត្តិ

ក្របខ័ណ្ឌដំណើរការចំណារពន្យល់របស់ Java មានដូច្នេះបណ្ណាល័យអាចបង្កើតកូដនៅពេលចងក្រង - យន្តការនៅពីក្រោយ Lombok, Dagger និងបញ្ជីវែងនៃឧបករណ៍ ORM និងស៊េរី។ ឧបករណ៍ដំណើរការប្រកាសខ្លួនវាជាមួយឯកសារអត្ថបទធម្មតានៅខាងក្នុង jar៖

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

ខ្លឹមសារនៃឯកសារនោះនៅក្នុងការចេញផ្សាយដែលរងផលប៉ះពាល់នីមួយៗ ទាំងពាក្យសំដី និងពេញលេញ៖

io.github.davidtimur.c2lab.C2 ដំណើរការ

ឯកសារនេះមានទំហំដូចគ្នាបេះបិទនៅទូទាំងការចេញផ្សាយ 1.0.1 ដល់ 1.0.8, md5 7d2a08a5c8869a47eea9fa62487dfbe4. ការចេញផ្សាយ 1.0.0 មិនមានវាទេ។

ពេលណា​ ចាវ៉ាក នៅពេលដំណើរការ វាស្កេនផ្លូវរបស់ឧបករណ៍ដំណើរការចំណារពន្យល់សម្រាប់ធាតុសេវាកម្មទាំងនេះ ហើយផ្ទុកអ្វីដែលវារកឃើញ។ គ្មានអ្វីនៅក្នុងគម្រោងដែលកំពុងត្រូវបានចងក្រងដែលត្រូវនិយាយអំពីឧបករណ៍ដំណើរការ ដាក់ចំណារពន្យល់អ្វីទាំងអស់ ឬកំណត់រចនាសម្ព័ន្ធអ្វីទាំងអស់នោះទេ។ វត្តមាននៅលើផ្លូវគឺគ្រប់គ្រាន់ហើយ។ នេះគឺជាលក្ខណសម្បត្តិដែលបំបែក JavacDoor ពីគំរូខ្សែសង្វាក់ផ្គត់ផ្គង់ដែលឧបករណ៍ភាគច្រើនត្រូវបានបង្កើតឡើង៖

លំនាំគន្លឹះអាចមើលឃើញជា
ទំពក់ដំឡើង npmnpm installscripts.postinstall នៅក្នុង​បញ្ជី​បញ្ជាក់
បន្ទុកពេលនាំចូល Pythonការនាំចូលម៉ូឌុលដំបូងសេចក្តីថ្លែងការណ៍កម្រិតម៉ូឌុលនៅក្នុងប្រភព
ទ្វារ Javacjavac លើគម្រោងណាមួយនៅខាងក្រោមឈ្មោះឯកសារចុះឈ្មោះសេវាកម្ម

ទំពក់ដំឡើង (install hook) គឺជាសេចក្តីប្រកាសនៅក្នុង manifest ហើយ manifest គឺជារឿងដំបូងដែលនរណាម្នាក់អាន។ យ៉ាងហោចណាស់ payload ពេលវេលានាំចូល (import-time payload) ស្ថិតនៅក្នុងប្រភពដែលអាចអានបាន។ ការចុះឈ្មោះសេវាកម្មមិនមែនជាទាំងពីរទេ៖ វាជាឈ្មោះឯកសារបូកនឹងបន្ទាត់មួយ ដែលដាក់ឈ្មោះថ្នាក់ ហើយឥរិយាបថស្ថិតនៅក្នុង bytecode ដែលបានចងក្រង និងថតឯកសារមួយនៅឆ្ងាយ។

ថ្នាក់ payload ខ្លួនវាអនុវត្តការឈ្លបយកការណ៍របស់ម៉ាស៊ីនដោយការបាញ់ផ្លោងចេញ។ អាងស្តុកថេរនៃថ្នាក់ដែលបានចងក្រងមាន / bin / sh, តើ​ខ្ញុំ​ជា​អ្នកណា, គ្មានឈ្មោះ -a, pwd នៅលើផ្លូវ Unix និង បញ្ជីភារកិច្ច នៅលើផ្លូវវីនដូ រួមជាមួយ បញ្ជូនបន្តកំហុសស្ទ្រីម ដើម្បីបញ្ចូលលទ្ធផលកំហុសរបស់ដំណើរការកូនទៅក្នុងស្ទ្រីមដែលចាប់យក។ គំរូ JSON ពីរយកលទ្ធផលចេញពីម៉ាស៊ីន — សញ្ញាសម្គាល់ការចុះឈ្មោះ៖

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

មានប្រជាជនមកពី ឈ្មោះម៉ាស៊ីន ពាក្យបញ្ជានិង ឈ្មោះ​ប្រព័ន្ធ​ប្រតិបត្តិការ, ឈ្មោះអ្នកប្រើប្រាស់និង អ្នកប្រើប្រាស់.dir លក្ខណៈសម្បត្តិប្រព័ន្ធ និងការហៅត្រឡប់មកវិញជាលទ្ធផល៖

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

សញ្ញាសម្គាល់វឌ្ឍនភាពដែលបន្សល់ទុកនៅក្នុងទិន្នផលរបស់កម្មវិធីចងក្រងគឺមានលក្ខណៈច្បាស់លាស់មិនធម្មតា៖ [C2] ការប្រតិបត្តិពេលវេលាចងក្រងបានបញ្ចប់, [C2] ការហៅត្រឡប់ត្រូវបានផ្ញើ → HTTP , [C2] សែល​ភ្ជាប់​ទៅ .

ការចេញផ្សាយចំនួនប្រាំបួន ជំនាន់ C2 ចំនួនបី

ការចេញផ្សាយទាំងនេះមិនមែនជាច្បាប់ចម្លងចំនួនប្រាំបួននៃ payload មួយនោះទេ។ ពួកវាជាកំណត់ហេតុនៃការធ្វើឡើងវិញ ហើយការអានពួកវាតាមលំដាប់លំដោយបង្ហាញពីឆានែលដែលកំពុងត្រូវបានសាងសង់ឡើងវិញ ខណៈពេលដែលវ៉ិចទ័រចែកចាយនៅតែថេរ។

ការចេញផ្សាយប្រតិបត្តិដោយស្វ័យប្រវត្តិនៅពេលចងក្រងឆានែល
1.0.0ទេ (គ្មានឯកសារសេវាកម្ម)URL ហៅត្រឡប់ដែលផ្តល់ដោយប្រតិបត្តិករតែប៉ុណ្ណោះ
1.0.1បាទ/ចាស (បានណែនាំវ៉ិចទ័រ)URL ហៅត្រឡប់ដែលផ្តល់ដោយប្រតិបត្តិករ
1.0.2បាទបញ្ច្រាសសែល, ផ្លូវរូងក្រោមដី TCP ngrok
1.0.3បាទឆានែល HTTP, /ចុះឈ្មោះ /cmd /ចេញ
1.0.4បាទឆានែល HTTP, /ចុះឈ្មោះ /cmd /ចេញ
1.0.5បាទឆានែល HTTP, /ចុះឈ្មោះ /ស្ទង់មតិ /ចេញ
1.0.6បាទឆានែល HTTP, /ចុះឈ្មោះ /ស្ទង់មតិ /ចេញ
1.0.7បាទឆានែល HTTP, /ចុះឈ្មោះ /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និងឧបករណ៍បញ្ចប់ស៊ុម __END__ការចេញផ្សាយ 1.0.3 តទៅមិនមានអ្វីទាំងនោះទេ ហើយផ្ទុយទៅវិញវាទៅដល់ម៉ាស៊ីន HTTPS។ សំណើសុំដកចេញដែលដាក់ឈ្មោះតែការចេញផ្សាយដែលមានសំបុត្រនឹងបានលើកឡើងពីចំណុចបញ្ចប់ TCP ដែលងាប់ ខណៈពេលដែលចាកចេញពីឆានែល HTTP ផ្ទាល់ ដែលមានវត្តមាននៅក្នុងការចេញផ្សាយចំនួនប្រាំមួយនៅពេលក្រោយ ដែលមិនបានលើកឡើង។

ការចេញផ្សាយចុងក្រោយលុបការផ្ទៀងផ្ទាត់ការដឹកជញ្ជូន។ ការចេញផ្សាយ 1.0.8 បន្ថែមថ្នាក់មួយដែលកំពុងអនុវត្ត javax.net.ssl.X509 កម្មវិធីគ្រប់គ្រងទំនុកចិត្ត ដែលវិធីសាស្ត្រពិនិត្យវិញ្ញាបនបត្រមិនធ្វើអ្វីទាំងអស់ កម្មវិធីផ្ទៀងផ្ទាត់ឈ្មោះម៉ាស៊ីនដែលតែងតែពិតត្រូវបានចុះឈ្មោះតាមរយៈ កំណត់កម្មវិធីផ្ទៀងផ្ទាត់ឈ្មោះម៉ាស៊ីនលំនាំដើម, និងក ទុកចិត្តទាំងអស់ ទម្លាប់​ដែល​ដំឡើង​ទាំង​ពីរ​ជា​លំនាំដើម​របស់ JVM។ ផលប៉ះពាល់​គឺថា សម្រាប់​ការចងក្រង​ដែល​នៅ​សល់ JVM ទទួលយក​វិញ្ញាបនបត្រ​ណាមួយ​ពី​ម៉ាស៊ីន​ណាមួយ — មិន​ត្រឹម​តែ​សម្រាប់​ចរាចរណ៍​របស់ payload ប៉ុណ្ណោះ​ទេ ប៉ុន្តែ​សម្រាប់​អ្វី​ផ្សេង​ទៀត​ដែល​ការ​បង្កើត​ធ្វើ​លើ TLS បន្ទាប់​មក។

ឆានែល HTTP នៅក្នុងការចេញផ្សាយទាំងប្រាំមួយដែលប្រើប្រាស់វា ត្រូវបាននាំមុខដោយម៉ាស៊ីនតែមួយ៖ tableful-fervor-crazed.ngrok-free[.]devសំណើនីមួយៗមានបឋមកថា ការព្រមានអំពីកម្មវិធីរុករក ngrok-skipដែលទប់ស្កាត់ទំព័រអន្តរកាលដែលផ្លូវរូងក្រោមដី ngrok ឥតគិតថ្លៃបម្រើដល់កម្មវិធីរុករកតាមអ៊ីនធឺណិត។ សំណុំផ្លូវផ្លាស់ប្តូរនៅទូទាំងការចេញផ្សាយ — /ចេញ បាត់នៅ 1.0.7 ហើយ /cmd ឆ្លាស់គ្នាជាមួយ / ការបោះឆ្នោត - ប៉ុន្តែម្ចាស់ផ្ទះមិនដែលផ្លាស់ប្តូរទេ។

ការបដិសេធខ្លួនឯងប្រាប់

POM នីមួយៗចាប់ពី 1.0.1 តទៅកំណត់អាគុយម៉ង់កម្មវិធីចងក្រងសម្រាប់ការបង្កើតរបស់ artifact ផ្ទាល់៖

-proc:គ្មាន

ទង់នោះបិទដំណើរការចំណារពន្យល់។ ឥទ្ធិពលរបស់វានៅទីនេះគឺមុនcisអ៊ី៖ នៅពេលដែលគម្រោងដែលមានឧបករណ៍ដំណើរការត្រូវបានចងក្រងដោយខ្លួនវាផ្ទាល់ ឧបករណ៍ដំណើរការនឹងមិនដំណើរការទេ។

ទង់នេះមានការប្រើប្រាស់ធម្មតាទាំងស្រុង។ គម្រោងដែលបញ្ជូនឧបករណ៍ដំណើរការចំណារពន្យល់ជារឿយៗត្រូវជៀសវាងការអនុវត្តឧបករណ៍ដំណើរការនោះទៅខ្លួនវាក្នុងអំឡុងពេល bootstrap ហើយឯកសារ build-tool ណែនាំយ៉ាងពិតប្រាកដអំពីរឿងនេះ។ បើយកវាតែម្នាក់ឯងវាមិនបង្ហាញអ្វីទេ។

ទោះជាយ៉ាងណាក៏ដោយ ប្រសិនបើយកវាមកពិចារណារួមគ្នាជាមួយនឹងអ្វីដែលឧបករណ៍ដំណើរការធ្វើ វាពិពណ៌នាអំពីភាពមិនស៊ីមេទ្រីជាក់លាក់មួយ៖ កូដដំណើរការលើម៉ាស៊ីនរបស់អ្នកគ្រប់គ្នាដែលចងក្រងប្រឆាំងនឹងវត្ថុបុរាណ មិនមែនលើម៉ាស៊ីនដែលបង្កើតវត្ថុបុរាណនោះទេ។ ទង់ជាតិលេចឡើងនៅក្នុងការចេញផ្សាយដូចគ្នាដែលណែនាំឯកសារសេវាកម្ម — 1.0.1 — និងនៅក្នុងការចេញផ្សាយនីមួយៗបន្ទាប់ពីវា។ ទំនាក់ទំនងរវាង "ការចេញផ្សាយដែលការប្រតិបត្តិពេលវេលាចងក្រងចាប់ផ្តើម" និង "ការចេញផ្សាយដែលការប្រតិបត្តិពេលវេលាចងក្រងត្រូវបានបិទនៅក្នុងមូលដ្ឋាន" គឺជាសញ្ញាវិភាគដែលមានប្រយោជន៍បំផុតនៅក្នុងសំណុំវត្ថុបុរាណ ហើយវាអាចមើលឃើញនៅក្នុង POM អត្ថបទធម្មតាដោយមិនចាំបាច់ឌិគ្រីបអ្វីទាំងអស់។

យើងកត់សម្គាល់ពីឥទ្ធិពល ហើយឈប់ត្រឹមនេះ។ គ្មានអ្វីនៅក្នុងវត្ថុបុរាណដែលបង្ហាញពីមូលហេតុដែលទង់ជាតិត្រូវបានដាក់នោះទេ។

ទិន្នន័យមេតាមួយទៀតសមនឹងទទួលបានការលើកឡើង ភាគច្រើនគឺការបោះចោលវា។ POM ដាក់ឈ្មោះគម្រោងនេះថា "C2 Lab Payload" ពិពណ៌នាវាថាជា "C2 lab payload artifact" និងផ្តល់អាជ្ញាប័ណ្ណដល់វា 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 (យូនីក) ឬអ្នកបកប្រែពាក្យបញ្ជាវីនដូ
  • ពាក្យបញ្ជាកូន whoami, uname -a, pwd (យូនីក) ឬ tasklist (វីនដូ) ត្រូវបានបង្កើតឡើងដោយជំហានចងក្រង

នៅក្នុងទូរមាត្របណ្តាញ

  • 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 គឺជាករណីសាកល្បងដ៏មានប្រយោជន៍មួយ ពីព្រោះវាយកឈ្នះលើការសន្មត់ទូទៅពីរក្នុងពេលតែមួយ ហើយការបរាជ័យទាំងពីរមិនជាក់លាក់ចំពោះឧបករណ៍របស់អ្នកលក់ណាមួយឡើយ។

ការសន្មត់ដំបូងគឺថា កូដគ្រោះថ្នាក់ប្រកាសខ្លួនវានៅក្នុង manifest មួយ។ ឧបករណ៍ខ្សែសង្វាក់ផ្គត់ផ្គង់ជាច្រើនត្រូវបានរៀបចំឡើងជុំវិញវដ្តជីវិត hooksពីព្រោះសម្រាប់ npm និង PyPI នោះជាកន្លែងដែលសកម្មភាពជាធម្មតាស្ថិតនៅ។ JavacDoor មិនមាន hook ទេ។ trigger របស់វាគឺជាឯកសារចុះឈ្មោះសេវាកម្មដែលឈ្មោះរបស់វាជាចំណុចប្រទាក់ Java និងខ្លឹមសាររបស់វាជាឈ្មោះថ្នាក់។ ដើម្បីចាប់យកវាដោយឋិតិវន្ត អ្នកត្រូវតែព្យាបាល META-INF/services/javax.annotation.processing.Processor ជាចំណុចចូលអនុវត្តដោយខ្លួនវាផ្ទាល់ ស្មើនឹង ក្រោយការដំឡើង ស្គ្រីប — ហើយបន្ទាប់មកធ្វើតាមថ្នាក់ដែលមានឈ្មោះទៅជា bytecode។ ប្រព័ន្ធអេកូឡូស៊ីមានយន្តការស្វែងរកដោយស្វ័យប្រវត្តិផ្ទាល់ខ្លួននៃរូបរាងនេះ ហើយប្រព័ន្ធអេកូឡូស៊ីនីមួយៗគឺជាចំណុចចូលមួយថាតើឧបករណ៍រាប់វាថាជាមួយឬអត់។

ការសន្មត់ទីពីរគឺថាខ្សែអក្សររស់នៅក្នុងឯកសារប្រភព។ សម្រាប់ jar មួយ ចំណុចបញ្ចប់ ពាក្យបញ្ជា shell គំរូ JSON និងសញ្ញាសម្គាល់កំណត់ហេតុទាំងអស់ស្ថិតនៅក្នុងអាងថេរនៃ ។ ថ្នាក់ ឯកសារ។ ឧបករណ៍ដែលអត្ថបទ greps រកមិនឃើញអ្វីទាំងអស់ — មិនមែនដោយសារតែខ្សែអក្សរត្រូវបានបិទបាំងនោះទេ ប៉ុន្តែដោយសារតែពួកវាស្ថិតនៅក្នុងធុងគោលពីរដែលមានរចនាសម្ព័ន្ធដែលការស្កេនអត្ថបទមិនវិភាគ។ សូចនាករបណ្តាញនីមួយៗនៅក្នុងការបង្ហោះនេះបានកើតចេញពីការវិភាគអាងថេរ។ មួយក្នុងចំណោមពួកគេគឺជាទម្រង់ពេញលេញ https:// URL ស្ថិតនៅក្នុងទិដ្ឋភាពធម្មតានៅខាងក្នុងឯកសារ class មួយ; ការស្កេនអត្ថបទនៃខ្លឹមសារដែលអាចអានបានរបស់ jar នៅតែមិនបង្ហាញវាទេ។ មិនមានការអ៊ិនកូដដែលត្រូវបរាជ័យនៅទីនេះទេ មានតែទម្រង់កុងតឺន័រដែលត្រូវអាន។

ចន្លោះប្រហោងទាំងពីរមានរាងដូចគ្នា៖ ទម្រង់ artifact ត្រូវបានចាត់ទុកជាថង់ឯកសារជាជាងរចនាសម្ព័ន្ធដែលមានអត្ថន័យដែលបានកំណត់។ ការកែតម្រូវគឺមិនគួរឱ្យចាប់អារម្មណ៍ទេ - វិភាគកុងតឺន័រ រាប់ចំណុចចូលស្វែងរកដោយស្វ័យប្រវត្តិរបស់ប្រព័ន្ធអេកូឡូស៊ី ហើយធ្វើតាមពួកវាទៅក្នុងកូដដែលបានចងក្រង។ សម្រាប់វ៉ិចទ័រពេលវេលាសាងសង់ជាពិសេស ការត្រួតពិនិត្យទីបីគឺថោក និងគួរឱ្យភ្ញាក់ផ្អើលក្នុងការធ្វើរោគវិនិច្ឆ័យ៖ ប្រៀបធៀបអ្វីដែល artifact ធ្វើចំពោះអ្នកប្រើប្រាស់ទល់នឹងអ្វីដែលវាលើកលែងខ្លួនវា។ artifact ដែលចុះឈ្មោះឧបករណ៍ដំណើរការពេលវេលាចងក្រង និងបិទដំណើរការពេលវេលាចងក្រងក្នុងពេលដំណាលគ្នាសម្រាប់ការសាងសង់ផ្ទាល់ខ្លួនរបស់វាបានប្រាប់អ្នកអ្វីមួយអំពីខ្លួនវានៅក្នុងបន្ទាត់ពីរនៃ POM អត្ថបទធម្មតា។

សម្រាប់ក្រុមដែលកំពុងប្រើប្រាស់វត្ថុបុរាណ Maven នាពេលបច្ចុប្បន្ននេះ វិធានការជាក់ស្តែងចំនួនបីដូចខាងក្រោម៖

  • ចាត់ទុកផ្លូវឧបករណ៍ដំណើរការចំណារពន្យល់ជាព្រំដែនប្រតិបត្តិ។ ភាពអាស្រ័យដែលដាក់នៅទីនោះដំណើរការកូដនៅក្នុង build របស់អ្នក។ ក្នុងករណីដែល build មិនត្រូវការដំណើរការ annotation -proc:គ្មាន មានប្រយោជន៍ការពារដូចដែលជាក់ស្តែងនៅក្នុងស្រុកនៅទីនេះដែរ។ កន្លែងដែលវាធ្វើ សូមភ្ជាប់សំណុំឧបករណ៍ដំណើរការយ៉ាងច្បាស់លាស់ ជាជាងទទួលមរតកវាពី classpath ចងក្រង។
  • ដំណើរការរងរបស់កម្មវិធីចងក្រងកំណត់ហេតុ។ ជំហាន​ចងក្រង​ដែល​បង្កើត​ជា​សែល​គឺ​មិន​ប្រក្រតី​នៅ​ក្នុង​គម្រោង​ភាគច្រើន ហើយ​វា​អាច​ត្រូវ​បាន​ជូន​ដំណឹង​តិចតួច។
  • កុំចាត់ទុកទិន្នន័យមេតាជាសក្ខីកម្ម។ “មន្ទីរពិសោធន៍”, “ការធ្វើតេស្ត”, “បន្ទុកការងារ” និង “PoC” នៅក្នុងឈ្មោះកញ្ចប់ ឬការពណ៌នា មិនមែនជាដែនកំណត់វិសាលភាពទេ។ លទ្ធភាពទៅដល់ និងឥរិយាបថគឺជាដែនកំណត់។

វត្ថុបុរាណ និងក្រុមទាំងមូលរបស់វាត្រូវបានដកចេញពី Maven Central ធ្វើតាមរបាយការណ៍របស់យើង; ទាំងផ្លូវសិប្បនិម្មិត និងផ្លូវក្រុមឥឡូវនេះត្រឡប់ 404 ហើយសន្ទស្សន៍កណ្តាលរាយការណ៍ថាគ្មានកូអរដោនេដែលត្រូវគ្នាទេ។ នោះបិទវត្ថុបុរាណនេះ។ វាមិនបិទវ៉ិចទ័រទេ ដែលជាលក្ខណៈពិសេសដែលបានកត់ត្រាទុករបស់កម្មវិធីចងក្រង Java និងអាចរកបានសម្រាប់អ្នកដែលបោះពុម្ពផ្សាយ jar។

ឯកសារយោង

អត្ថបទនេះមិនបានដកស្រង់ប្រភពខាងក្រៅណាមួយឡើយ។ ការរកឃើញទាំងអស់គឺជាការវិភាគឋិតិវន្តដោយផ្ទាល់នៃពាងដែលបានបោះពុម្ពផ្សាយចំនួនប្រាំបួន ដែលទាញយកពី Maven Central មុនពេលដកចេញ។ គ្មានកូដពីវត្ថុបុរាណណាមួយត្រូវបានប្រតិបត្តិនៅចំណុចណាមួយឡើយ។

ឧបករណ៍វិភាគសមាសភាពកម្មវិធី sca
ផ្តល់អាទិភាព ដោះស្រាយ និងធានាសុវត្ថិភាពហានិភ័យផ្នែកទន់របស់អ្នក
ទទួលបានគណនីឥតគិតថ្លៃរបស់អ្នក។
មិនតម្រូវឱ្យមានកាតឥណទានទេ។

ធានាសុវត្ថិភាពនៃការអភិវឌ្ឍន៍ និងការដឹកជញ្ជូនកម្មវិធីរបស់អ្នក

ជាមួយឈុតផលិតផល Xygeni