Ի՞նչ է անում JavaScript-ի խցանիչը։
JavaScript-ի խցանիչը նախատեսված է մաքուր, մարդու կողմից ընթեռնելի կոդը վերցնելու և այն հազիվ ընթեռնելիի վերածելու համար, ինչը դժվարացնում է դրա հասկացողությունը կամ հակադարձ ինժեներիան: Այս գործիքները վերանվանում են փոփոխականներն ու ֆունկցիաները, հեռացնում են սպիտակ տարածությունները, հարթեցնում կոդի կառուցվածքները և կիրառում են տողերի բաժանման, տասնվեցական կոդավորման կամ կառավարման հոսքի հարթեցման տեխնիկաներ: Չնայած նպատակը հաճախ մտավոր սեփականության պաշտպանությունն է կամ ֆայլի չափը նվազեցնելը, արդյունքում առաջացող բարդությունը նաև իդեալական պաշտպանություն է ապահովում JavaScript-ի վնասակար ծրագրերի համար: Ահա թե ինչու շատ անվտանգության թիմեր դիմում են JavaScript-ի խցանման գործիքներին՝ վերափոխված կոդը վերլուծելու և թաքնված վարքագիծը բացահայտելու համար:
Օրինակ՝ մի բան, ինչպիսին է.
function greet(name) { return `Hello, ${name}`; } Might become: function _0x1a2b(_0x3c4d){return'Hello, '+_0x3c4d;} Հաճախորդային կողմի տրամաբանություն առաջարկող մշակողների համար (պատկերացրեք բրաուզերի վրա հիմնված SaaS-ը), JavaScript-ի խցանիչը գործիքակազմի մի մասն է։ Սակայն այս նույն փոխակերպումը այն դարձնում է JavaScript-ի վնասակար ծրագրերի կատարյալ քողարկում։
Ինչպես են հարձակվողները չարաշահում խեղաթյուրումը JavaScript վնասակար ծրագիրը թաքցնելու համար
Հարձակվողները չարաշահում են JavaScript-ի խեղաթյուրող գործիքները՝ քողարկելու համար բաց կոդով գրադարաններում ներարկված վնասակար ծրագրեր, npm փաթեթներկամ անմիջապես զննարկչի սկրիպտների մեջ։ Տարածված օրինաչափություն է օգտակար բեռների թաքցնելը խճճված ֆունկցիաների ներսում, որոնք ակտիվանում են աշխատանքի ընթացքում որոշակի պայմաններում։
Դիտարկենք խախտված npm փաթեթը։ Առաջին հայացքից ամեն ինչ օրինական է թվում։ Սակայն ավելի խորը ուսումնասիրությունը բացահայտում է կոդավորված տողերի, հեռակա URL-ների կամ դինամիկ հղումներ կատարող խճճված JavaScript-ը։ գնահատում() զանգեր՝
(function(_0xa1b2c){var _0xd3e4=['/(function(_0xa1b2c){var _0xd3e4=['\x2fapi/(function(_0xa1b2c){var _0xd3e4=['\x2fapi\x2fsteal','...']; ...eval(atob(_0xd3e4[0]));})(this); Սա սեղմում չէ։ Սա քողարկում է։ JavaScript վնասակար ծրագիրը թաքնվում է այստեղ՝ սպասելով տոկեններ արտաքսելուն, ֆիշինգային ձևեր ներարկելուն կամ հավելվածների ներսում թույլտվությունները մեծացնելուն։
Իրական ռիսկեր AppSec-ում և մատակարարման շղթայում
Ժամանակակից ծրագրային ապահովում pipelines-ը կառուցված են երրորդ կողմի կոդի վրա: JavaScript վնասակար ծրագիրը, որը ներդրված է խճճված սկրիպտների միջոցով, ոչ միայն անվտանգության անցք է, այլև մատակարարման շղթայի խախտում: Երբ խճճված վնասակար ծրագիրը հայտնվում է համատեղ գրադարանում, այն տարածվում է.
- CI-ի մեջ կառուցվում է package.json
- Մուտք դեպի առջևի փաթեթներ Webpack/Rollup-ի միջոցով
- Արտադրության մեջ CDN-ների կամ սկրիպտների ներարկումների միջոցով
Օրինակ, իրադարձությունների հոսքի միջադեպը ցույց տվեց, թե ինչպես են հարձակվողները օգտագործում խեղաթյուրումը լայնորեն օգտագործվող փաթեթներում օգտակար բեռներ տեղադրելու համար: Մշակողները հազվադեպ են ստուգում խորը խեղաթյուրված կոդը, ինչը այն դարձնում է կատարյալ թաքստոց:
Ռիսկը տեսական չէ։ Այն արդեն իսկ ձեր կոդում է, եթե ձեր կախվածությունները չեն սկանավորվել։
Խճճված կոդի հայտնաբերում JavaScript Deobfuscator գործիքներով
Թաքնված սպառնալիքները հայտնաբերելու համար թիմերը օգտագործում են JavaScript-ի ապախցանող գործիքներ: Դրանք վերլուծում են խցանված կոդի ձևանմուշները, վերծանում տողերը և բացահայտում կարմիր դրոշներ, ինչպիսիք են դինամիկները: գնահատում(), խճճված ցիկլեր և ավելորդ բարդություն։
Օգտակար դեֆֆուսկատորները ոչ միայն վերաձևաչափում են կոդը, այլև նշում են՝
- օգտագործումը ֆունկցիա, գնահատել, եւ սահմանելժամանակի ավարտ կոդավորված օգտակար բեռներով
- Base64 կամ տասնվեցական տողերի երկար հաջորդականություններ
- Կառավարման հոսքի հարթեցում կամ մեռյալ կոդի ներարկում
Ավտոմատացված գործիքները, ինչպիսիք են ստատիկ վերլուծիչները կամ AST վերլուծիչները, օգնում են հայտնաբերել այս օրինաչափությունները: Դրանք առաջին պաշտպանության գիծն են կախվածությունները վերանայելիս կամ փաթեթների թարմացումները վավերացնելիս:
Օրինակ՝ միաձուլումից առաջ ստուգումներում ինտեգրեք ապախավարկման սկանավորումը՝ թաքնված սպառնալիքների միաձուլումից խուսափելու համար։
Հայտնաբերման ինտեգրումը CI/CD Pipelines
Հայտնաբերումը տեղակայումից հետո կատարվող խնդիր չէ։ Մշուշոտման սկանավորումը պետք է լինի դրա մի մասը։ CI/CD pipeline: Օգտագործում GitHub գործողություններ, GitLab CIԿամ Jenkins ակտիվացնել սկանավորումները յուրաքանչյուր սեղմման կամ միաձուլման ժամանակ։
Տիպիկ pipeline հոսքը:
jobs: security-check: steps: - uses: actions/checkout@v2 - name: Scan for Obfuscation run: node scripts/deobfuscate-scan.jsՔաղաքականության կիրառման միջոցով դուք կարող եք արգելափակել ռիսկային, խճճված կոդ պարունակող կառուցվածքները: Միացրեք սա SCA գործիքներ npm փաթեթներում հայտնի վնասակար ծրագրերի ստորագրություններին խաչաձև հղումներ կատարելու համար։
Մի սպասեք կատարման ժամանակի անակնկալների։ Դարձրեք այն կառուցման ժամանակի մերժում։
Մշուշոտման թաքնված արժեքը. JavaScript վնասակար ծրագրի դեմ պայքար՝ Deobfuscators-ի միջոցով
JavaScript-ի խեղաթյուրող գործիքներն ունեն օրինական կիրառություն։ Սակայն հարձակվողները ապավինում են դրանց՝ JavaScript-ի վնասակար ծրագրերը թաքցնելու և բաց կոդով էկոհամակարգի վստահությունը շահագործելու համար։ AppSec-ի իրական ռիսկը ոչ միայն այն է, թե ինչ եք գրում, այլև այն, թե ինչ եք ներմուծում։ JavaScript-ի deobfuscator սկանավորումները և ստատիկ վերլուծությունը ներկառուցելով CI/CD pipelines, մշակողների թիմերը կարող են վաղ հայտնաբերել սպառնալիքները: Կախվածություններում առկա խճճված կոդին վերաբերվեք կասկածանքով, հատկապես, երբ դա անսպասելի է:
Գործիքներ, ինչպիսիք են Քսիգենի մշակված են DevSecOps թիմերին օգնելու համար տեսնել JavaScript էկոհամակարգերի խճճվածության և մատակարարման շղթայի ռիսկերը։ Օգտագործեք դրանք ձեր pipeline և հայտնաբերել, թե ինչ է թաքնված ձեր կոդում, նախքան այն արտադրության մեջ մտնելը։
Քսիգենի անցնում է սովորական սկանավորումից այն կողմ՝ վերլուծելով JavaScript-ի խեղաթյուրման օրինաչափությունները, նշելով JavaScript-ի հնարավոր վնասակար ծրագրերը և հետևելով ձեր ծրագրային ապահովման մատակարարման շղթայի փաթեթներում առկա ռիսկային վարքագծին։ Այն անխափան ինտեգրվում է CI/CD pipelines, որը հնարավորություն է տալիս ավտոմատ կերպով կառավարել կոդի որակը և անվտանգությունը։
Մնացեք պարանոյիկ։ Սկանավորեք ամեն ինչ։ Եվ հիշեք. եթե դա անհեթեթություն է թվում, ապա հավանաբար արժանի է երկրորդ անգամ նայելու։






