Զեկուցեք PHP նախագծի git պահեստի և օգտագործողների բազայի փոխզիջման մասին

Հրապարակվել են միջադեպի վերլուծության առաջին արդյունքները, որոնք կապված են PHP նախագծի Git պահոցում երկու վնասակար commit-ների նույնականացման հետ, որի հետին դռան ակտիվացված է հատուկ մշակված User Agent վերնագրով հարցում ուղարկելիս: Հարձակվողների գործունեության հետքերը ուսումնասիրելու ընթացքում եզրակացություն է արվել, որ git.php.net սերվերը, որի վրա գտնվում էր git պահեստը, չի կոտրվել, այլ վնասվել է ծրագրի մշակողների հաշիվներով տվյալների բազան: .

Հնարավոր է, որ հարձակվողները կարողացել են ներբեռնել DBMS-ում պահվող օգտատերերի տվյալների բազան master.php.net սերվերի վրա։ master.php.net-ի բովանդակությունն արդեն տեղափոխվել է զրոյից տեղադրված նոր main.php.net սերվեր: Բոլոր ծրագրավորողների գաղտնաբառերը, որոնք օգտագործվում էին php.net ենթակառուցվածք մուտք գործելու համար, զրոյացվեցին, և դրանք փոխելու գործընթացը սկսվեց գաղտնաբառի վերականգնման հատուկ ձևի միջոցով: git.php.net և svn.php.net պահեստները մնում են միայն կարդալու համար (մշակումը տեղափոխվել է GitHub):

PHP-ի հիմնադիր Ռասմուս Լերդորֆի հաշվի միջոցով կատարված առաջին չարամիտ կատարման հայտնաբերումից հետո ենթադրվում էր, որ նրա հաշիվը կոտրվել է, և Նիկիտա Պոպովը՝ PHP-ի հիմնական մշակողներից մեկը, հետ է կանչել փոփոխությունները և արգելափակել commit իրավունքները։ խնդրահարույց հաշիվը. Որոշ ժամանակ անց հասկացվեց, որ արգելափակումն անիմաստ է, քանի որ առանց թվային ստորագրության միջոցով կատարվող պարտավորությունների ստուգման, php-src պահոց մուտք գործած ցանկացած մասնակից կարող էր փոփոխություն կատարել՝ փոխարինելով հորինված հեղինակի անունը:

Այնուհետև հարձակվողները չարամիտ հայտարարություն են ուղարկել հենց Նիկիտայի անունից: Վերլուծելով gitolite ծառայության տեղեկամատյանները, որոնք օգտագործվում են պահեստների մուտքը կազմակերպելու համար, փորձ է արվել պարզել իրականում փոփոխություններ կատարած մասնակցին: Չնայած բոլոր պարտավորությունների հաշվառման ներառմանը, երկու վնասակար փոփոխությունների գրանցամատյանում գրառումներ չկային: Պարզ դարձավ, որ տեղի է ունեցել ենթակառուցվածքի փոխզիջում, քանի որ commit-ները ուղղակիորեն ավելացվել են՝ շրջանցելով կապը gitolite-ի միջոցով։

git.php.net սերվերն անմիջապես անջատվել է, և առաջնային պահոցը տեղափոխվել է GitHub: Շտապելով, մոռացվեց, որ պահեստ մուտք գործելու համար, բացի gitolite-ի օգտագործմամբ SSH-ից, կար ևս մեկ մուտք, որը թույլ էր տալիս ուղարկել commit-ներ HTTPS-ի միջոցով: Այս դեպքում, git-http-backend-ը օգտագործվել է Git-ի հետ փոխազդելու համար, իսկ իսկությունը կատարվել է Apache2 HTTP սերվերի միջոցով, որը ստուգել է հավատարմագրերը՝ մուտք գործելով master.php.net սերվերի DBMS-ում տեղակայված տվյալների բազա: Մուտքը թույլատրվում էր ոչ միայն ստեղներով, այլև սովորական գաղտնաբառով։ http սերվերի մատյանների վերլուծությունը հաստատեց, որ վնասակար փոփոխություններն ավելացվել են HTTPS-ի միջոցով:

Լոգանները ուսումնասիրելիս պարզվել է, որ հարձակվողները ոչ թե առաջին անգամ են միացել, այլ սկզբում փորձել են գտնել աքաունթի անունը, սակայն այն բացահայտելուց հետո առաջին իսկ փորձից մուտք են գործել, այսինքն. նրանք նախապես գիտեին Ռասմուսի և Նիկիտայի գաղտնաբառերը, բայց չգիտեին նրանց մուտքերը։ Եթե ​​հարձակվողները կարողացել են մուտք գործել DBMS, անհասկանալի է, թե ինչու նրանք անմիջապես չեն օգտագործել այնտեղ նշված ճիշտ մուտքը: Այս անհամապատասխանությունը դեռ հավաստի բացատրություն չի ստացել։ Master.php.net-ի կոտրումը համարվում է ամենահավանական սցենարը, քանի որ այս սերվերն օգտագործում էր շատ հին կոդ և հնացած ՕՀ, որը երկար ժամանակ չէր թարմացվել և ուներ չփակված խոցելիություններ։

Ձեռնարկված գործողությունները ներառում են master.php.net սերվերի միջավայրի վերատեղադրումը և սկրիպտների փոխանցումը PHP 8-ի նոր տարբերակին: DBMS-ի հետ աշխատելու ծածկագիրը փոփոխվել է՝ օգտագործելու պարամետրացված հարցումներ, որոնք բարդացնում են SQL կոդի փոխարինումը: Bcrypt ալգորիթմը օգտագործվում է տվյալների բազայում գաղտնաբառերի հեշերը պահելու համար (նախկինում գաղտնաբառերը պահվում էին անվստահելի MD5 հեշի միջոցով): Գոյություն ունեցող գաղտնաբառերը վերակայվում են, և գաղտնաբառի վերականգնման ձևի միջոցով ձեզ կառաջարկվի նոր գաղտնաբառ սահմանել: Քանի որ HTTPS-ի միջոցով git.php.net և svn.php.net պահոցներ մուտքը կապված էր MD5 հեշերի հետ, որոշվեց git.php.net-ը և svn.php.net-ը թողնել միայն կարդալու ռեժիմում, ինչպես նաև տեղափոխել բոլորը: մնացածները նրանց համար PECL ընդլայնման պահոցներ GitHub-ում, որոնք նման են հիմնական PHP պահեստին:

Source: opennet.ru

Добавить комментарий