Ես արմատ եմ: Հասկանալով Linux OS-ի արտոնությունների աճը

2020 թվականի առաջին եռամսյակն անցկացրել եմ OSCP քննությանը նախապատրաստվելով։ Google-ում տեղեկությունների որոնումն ու բազմաթիվ «կույր» փորձերը խլեցին իմ ողջ ազատ ժամանակը։ Հատկապես դժվար էր հասկանալ արտոնությունների սրման մեխանիզմները։ PWK դասընթացը մեծ ուշադրություն է դարձնում այս թեմային, սակայն մեթոդական նյութերը միշտ բավարար չեն: Ինտերնետում կան բազմաթիվ ձեռնարկներ՝ օգտակար հրամաններով, բայց ես առաջարկություններին կուրորեն հետևելու կողմնակից չեմ՝ չհասկանալով, թե դա ուր կտանի:

Ցանկանում եմ կիսվել ձեզ հետ, թե ինչ եմ հասցրել սովորել քննությունը նախապատրաստվելու և հաջող հանձնելու ընթացքում (ներառյալ Hack The Box-ի պարբերական արշավները): Ես երախտագիտության խոր զգացում էի զգում ամեն մի կտոր տեղեկատվության համար, որն օգնեց ինձ ավելի գիտակցաբար քայլել «Դժվար փորձիր» ճանապարհը, այժմ իմ ժամանակն է վերադարձնելու համայնքին:

Ես ուզում եմ ձեզ ուղեցույց տալ OS Linux-ում արտոնությունների ընդլայնման վերաբերյալ, որը ներառում է ամենատարածված վեկտորների և հարակից հատկանիշների վերլուծությունը, որոնք ձեզ անպայման պետք կգան: Հաճախ արտոնությունների ընդլայնման մեխանիզմներն իրենք բավականին պարզ են, դժվարություններ են առաջանում տեղեկատվության կառուցվածքի և վերլուծության ժամանակ: Ուստի, ես որոշեցի սկսել «տեսարժան վայրերի շրջագայությունից», իսկ հետո յուրաքանչյուր վեկտոր դիտարկել առանձին հոդվածում: Հուսով եմ՝ կխնայեմ ձեր ժամանակը թեման ուսումնասիրելու համար։

Ես արմատ եմ: Հասկանալով Linux OS-ի արտոնությունների աճը

Այսպիսով, ինչո՞ւ է արտոնությունների սրումը նույնիսկ հնարավոր 2020 թվականին, եթե մեթոդները շատ վաղուց հայտնի են: Փաստորեն, եթե օգտատերը ճիշտ վարի համակարգը, իսկապես հնարավոր չի լինի դրանում արտոնություններ ավելացնել։ Հիմնական գլոբալ խնդիրը, որը ծնում է նման հնարավորություններ անապահով կոնֆիգուրացիա. Անվտանգ կոնֆիգուրացիայի հատուկ դեպք է նաև համակարգում խոցելիություններ պարունակող ծրագրային ապահովման հնացած տարբերակների առկայությունը:

Արտոնությունների ընդլայնում անապահով կոնֆիգուրացիայի միջոցով

Նախ, եկեք զբաղվենք անապահով կոնֆիգուրացիայից: Սկսենք նրանից ՏՏ մասնագետները հաճախ օգտագործում են ձեռնարկներ և ռեսուրսներ, ինչպիսիք են stackoverflow-ը, որոնցից շատերը պարունակում են ոչ անվտանգ հրամաններ և կազմաձևեր: Վառ օրինակ է լուրերը որ stackoverflow-ից ամենաշատ պատճենված կոդը սխալ է պարունակում: Փորձառու ադմինը կտեսնի ջամբը, բայց սա իդեալական աշխարհում է: Նույնիսկ իրավասու մասնագետներ ավելացել է ծանրաբեռնվածությունը ընդունակ է սխալվել. Պատկերացրեք, որ ադմինիստրատորը նախապատրաստում և հաստատում է փաստաթղթերը հաջորդ մրցույթի համար՝ միաժամանակ խորանալով հաջորդ եռամսյակում ներդրված նոր տեխնոլոգիայի մեջ՝ պարբերաբար լուծելով օգտատերերի աջակցության խնդիրները։ Եվ հետո նրան տրվում է մի քանի վիրտուալ մեքենաներ արագ բարձրացնելու և դրանց վրա ծառայություններ մատուցելու խնդիր: Ի՞նչ եք կարծում, ինչքա՞ն է հավանականությունը, որ ադմինը պարզապես չի նկատում ջամբը։ Հետո մասնագետները փոխվում են, բայց հենակները մնում են, մինչդեռ ընկերությունները միշտ ձգտում են նվազագույնի հասցնել ծախսերը, այդ թվում՝ ՏՏ մասնագետների համար:

Կեղծ կեղև և jailbreak

Արտադրության փուլում ձեռք բերված համակարգի կեղևը հաճախ սահմանափակ է, հատկապես, եթե այն ձեռք եք բերել վեբ սերվերի օգտագործողին կոտրելու միջոցով: Օրինակ, կեղևի սահմանափակումները կարող են խանգարել ձեզ օգտագործել sudo հրամանը սխալմամբ.

sudo: no tty present and no askpass program specified

Շելլ ստանալուց հետո խորհուրդ եմ տալիս ստեղծել լիարժեք տերմինալ, օրինակ Python-ով։

python -c 'import pty;pty.spawn("/bin/bash")'

Դուք հարցնում եք. «Ինչու՞ ինձ պետք են հազար հրամաններ, եթե ես կարող եմ օգտագործել մեկը, օրինակ, ֆայլեր փոխանցելու համար»: Փաստն այն է, որ համակարգերը այլ կերպ են կազմաձևված, հաջորդ հոսթի վրա Python-ը կարող է չտեղադրվել, բայց Perl-ը կարող է հասանելի լինել: Հմտությունը համակարգում ծանոթ բաներ անելն է՝ առանց ծանոթ գործիքների: Հատկությունների ամբողջական ցանկը կարելի է գտնել այստեղ.

Ցածր արտոնությունների պատյան կարելի է ձեռք բերել օգտագործելով թիմեր 1 и թիմեր 2 (Զարմանալիորեն նույնիսկ GIMP):

Դիտեք հրամանների պատմությունը

Linux-ը ֆայլում հավաքում է բոլոր կատարված հրամանների պատմությունը ~ / .բաշ_պատմություն. Եթե ​​սերվերը ակտիվորեն օգտագործվում է, և դրա պատմությունը մաքրված չէ, մեծ հավանականություն կա, որ հավատարմագրերը գտնվեն այս ֆայլում: Պատմությունը մաքրելը բանականորեն անհարմար է։ Եթե ​​ադմինիստրատորը ստիպված լինի ընտրել տասը մակարդակի հրամաններ ի միջոցով, իհարկե, նրա համար ավելի հարմար կլինի զանգահարել այս հրամանը պատմությունից, քան նորից մուտքագրել այն։ Բացի այդ, շատերը չգիտեն այս «հակի» մասին: Եթե ​​համակարգում կան Zsh-ի կամ Fish-ի նման այլընտրանքային պատյաններ, նրանք ունեն իրենց պատմությունը: Ցանկացած վահանակում հրամանների պատմությունը ցուցադրելու համար պարզապես մուտքագրեք հրամանի պատմությունը:

cat ~/.bash_history
cat ~/.mysql_history
cat ~/.nano_history
cat ~/.php_history
cat ~/.atftp_history

Կա համօգտագործվող հոսթինգ, որում սերվերն օգտագործվում է մի քանի կայքեր հոսթինգի համար։ Սովորաբար, այս կոնֆիգուրացիայի դեպքում յուրաքանչյուր ռեսուրս ունի իր սեփական օգտվողը՝ առանձին տնային գրացուցակով և վիրտուալ հոսթով: Այսպիսով, եթե սխալ կազմաձևված է, դուք կարող եք գտնել .bash_history ֆայլը վեբ ռեսուրսի արմատական ​​գրացուցակում:

Ֆայլային համակարգում գաղտնաբառերի որոնում և հարակից համակարգերի վրա հարձակումներ

Տարբեր ծառայությունների համար կազմաձևման ֆայլերը կարող են ընթեռնելի լինել ձեր ընթացիկ օգտագործողի կողմից: Դրանցում դուք կարող եք գտնել հավատարմագրերը հստակ տեքստով՝ գաղտնաբառեր տվյալների բազա կամ հարակից ծառայություններ մուտք գործելու համար: Նույն գաղտնաբառը կարող է օգտագործվել ինչպես տվյալների բազա մուտք գործելու, այնպես էլ արմատային օգտատիրոջը լիազորելու համար (հավատարմագրային անձնակազմ):
Պատահում է, որ հայտնաբերված հավատարմագրերը պատկանում են այլ հոսթերի ծառայություններին: Վտանգված հյուրընկալողի միջոցով ենթակառուցվածքի վրա հարձակման զարգացումը ավելի վատ չէ, քան այլ հյուրընկալողների շահագործումը: Հարակից համակարգերը կարելի է գտնել նաև ֆայլային համակարգում IP հասցեներ փնտրելով:

grep -lRi "password" /home /var/www /var/log 2>/dev/null | sort | uniq #Find string password (no cs) in those directories
grep -a -R -o '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' /var/log/ 2>/dev/null | sort -u | uniq #IPs inside logs

Եթե ​​վտանգված հոսթն ունի համացանցից հասանելի վեբ հավելված, ապա ավելի լավ է նրա տեղեկամատյանները բացառել IP հասցեների որոնումից: Ինտերնետից ռեսուրսներից օգտվողների հասցեները դժվար թե օգտակար լինեն մեզ համար, բայց ներքին ցանցի հասցեները (172.16.0.0/12, 192.168.0.0/16, 10.0.0.0/8) և որտեղ են նրանք գնում, դատելով տեղեկամատյանները, կարող են հետաքրքրել:

Sudo

Sudo հրամանը թույլ է տալիս օգտվողին կատարել հրաման արմատի համատեքստում սեփական գաղտնաբառով կամ ընդհանրապես առանց այն օգտագործելու: Linux-ում շատ գործողություններ պահանջում են արմատային արտոնություններ, սակայն որպես root գործարկումը համարվում է շատ վատ պրակտիկա: Փոխարենը, ավելի լավ է կիրառել ընտրովի թույլտվություն՝ արմատային համատեքստում հրամաններ կատարելու համար: Այնուամենայնիվ, Linux-ի շատ գործիքներ, ներառյալ ստանդարտները, ինչպիսիք են vi-ն, կարող են օգտագործվել արտոնությունները օրինական ձևերով մեծացնելու համար: Ճիշտ ճանապարհը գտնելու համար խորհուրդ եմ տալիս նայել այստեղ.

Համակարգ մուտք գործելուց հետո առաջին բանը, որ պետք է անել, sudo -l հրամանն է: Այն կցուցադրի sudo հրամանն օգտագործելու թույլտվությունը: Եթե ​​առանց գաղտնաբառի օգտատեր ձեռք բերվի (օրինակ՝ apache-ն կամ www-data-ն), ապա sudo-ի արտոնությունների ընդլայնման վեկտորը քիչ հավանական է: Sudo-ն օգտագործելիս համակարգը կպահանջի գաղտնաբառ: Գաղտնաբառ սահմանելու համար passwd հրամանի օգտագործումը նույնպես չի աշխատի, այն կպահանջի ընթացիկ օգտվողի գաղտնաբառը: Բայց եթե sudo-ն դեռ հասանելի է, ապա, ըստ էության, դուք պետք է փնտրեք.

  • ցանկացած թարգմանիչ, յուրաքանչյուրը կարող է ստեղծել կեղև (PHP, Python, Perl);
  • ցանկացած տեքստային խմբագրիչներ (vim, vi, nano);
  • ցանկացած հեռուստադիտող (ավելի քիչ, ավելի շատ);
  • ֆայլային համակարգի հետ աշխատելու ցանկացած հնարավորություն (cp, mv);
  • գործիքներ, որոնք ելք ունեն bash-ում՝ ինտերակտիվ կամ որպես գործարկվող հրաման (awk, find, nmap, tcpdump, man, vi, vim, ansible):

Սուիդ/Սգիդ

Ինտերնետում կան բազմաթիվ ձեռնարկներ, որոնք խորհուրդ են տալիս կառուցել բոլոր suid / sgid հրամանները, բայց հազվագյուտ հոդվածը տալիս է մանրամասներ, թե ինչ անել այս ծրագրերի հետ: Գտնվում են արտոնությունների ընդլայնման տարբերակներ, որոնք հաշվի չեն առնում շահագործումների օգտագործումը այստեղ. Նաև մի շարք գործարկվող ֆայլեր ունեն հատուկ խոցելիություններ ՕՀ տարբերակի համար, օրինակ.

Իդեալական աշխարհում դուք պետք է գործարկեք բոլոր տեղադրված փաթեթները առնվազն Searchsploit-ի միջոցով: Գործնականում դա պետք է արվի ամենահայտնի ծրագրերով, ինչպիսին է sudo-ն: Այն նաև միշտ հնարավորություն է օգտագործելու և աջակցելու ավտոմատացված գործիքների մշակմանը, որոնք ընդգծում են հետաքրքիր, արտոնությունների ընդլայնման տեսանկյունից, գործադիրները՝ suid/sgid bits հավաքածուով: Նման գործիքների ցանկը կտամ հոդվածի համապատասխան բաժնում։

Գրավոր սկրիպտներ, որոնք աշխատում են Cron-ի կամ Init-ի կողմից Root համատեքստում

Cron-ի աշխատանքները կարող են աշխատել տարբեր օգտատերերի, այդ թվում՝ root-ի համատեքստում: Եթե ​​cron-ում գործարկվող ֆայլի հղումով առաջադրանք կա, և այն հասանելի է ձեզ գրելու համար, կարող եք հեշտությամբ փոխարինել այն վնասակարով և կատարել արտոնությունների ընդլայնում: Միևնույն ժամանակ, լռելյայնորեն, cron առաջադրանքներով ֆայլերը հասանելի են ցանկացած օգտագործողի համար կարդալու համար:

ls -la /etc/cron.d  # show cron jobs 

Նմանատիպ դեպք է init-ի դեպքում: Տարբերությունն այն է, որ cron-ում առաջադրանքները կատարվում են պարբերաբար, իսկ init-ում՝ համակարգի գործարկման ժամանակ: Գործարկման համար ձեզ հարկավոր է վերագործարկել համակարգը, մինչդեռ որոշ ծառայություններ կարող են չբարձրանալ (եթե դրանք գրանցված չեն եղել autoload-ում):

ls -la /etc/init.d/  # show init scripts 

Կարող եք նաև որոնել ցանկացած օգտագործողի կողմից գրվող ֆայլեր:

find / -perm -2 -type f 2>/dev/null # find world writable files

Մեթոդը բավականին հայտնի է, փորձառու համակարգի ադմինիստրատորները զգուշորեն օգտագործում են chmod հրամանը: Այնուամենայնիվ, համացանցում ձեռնարկների ճնշող մեծամասնությունը նկարագրում է առավելագույն իրավունքները սահմանելը: Համակարգի անփորձ ադմինիստրատորների «պարզապես աշխատիր» մոտեցումը սկզբունքորեն հնարավորություններ է ստեղծում արտոնությունների ընդլայնման համար: Հնարավորության դեպքում ավելի լավ է փնտրել chmod-ի ոչ անվտանգ օգտագործումը հրամանների պատմության մեջ:

chmod +w /path 
chmod 777 /path

Այլ օգտատերերի համար shell-ի հասանելիություն ձեռք բերելը

Մենք նայում ենք օգտվողների ցանկին /etc/passwd-ում: Մենք ուշադրություն ենք դարձնում նրանց, ովքեր ունեն կեղև: Դուք կարող եք դաժանորեն վիրավորել այս օգտվողներին. հնարավոր է, որ արդյունքում ստացված օգտվողի միջոցով դուք ի վերջո կարողանաք բարձրացնել արտոնությունները:

Անվտանգությունը բարելավելու համար խորհուրդ եմ տալիս միշտ պահպանել նվազագույն արտոնության սկզբունքը: Նաև իմաստ ունի ժամանակ հատկացնել՝ ստուգելու անապահով կոնֆիգուրացիաները, որոնք կարող են մնալ անսարքությունների վերացումից հետո. սա համակարգի ադմինիստրատորի «տեխնիկական պարտականությունն է»:

Ինքնագրված կոդ

Արժե ուշադիր ուսումնասիրել գործարկվողները օգտագործողի և վեբ սերվերի գլխավոր գրացուցակում (/var/www/, եթե այլ բան նշված չէ): Այս ֆայլերը կարող են լինել լիովին անապահով լուծում և պարունակում են անհավանական հենակներ: Իհարկե, եթե ձեր վեբ սերվերի գրացուցակում ունեք որոշակի շրջանակ, իմաստ չունի դրանում զրոյական օր որոնել որպես pentest-ի մաս, բայց խորհուրդ է տրվում գտնել և ուսումնասիրել մաքսային փոփոխություններ, պլագիններ և բաղադրիչներ:

Անվտանգությունը բարձրացնելու համար ավելի լավ է խուսափել ինքնագրված սկրիպտներում հավատարմագրերի օգտագործումից, ինչպես նաև պոտենցիալ վտանգավոր գործառույթներից, ինչպիսիք են /etc/shadow-ը կարդալը կամ id_rsa-ն շահարկելը, եթե հնարավոր է:

Արտոնությունների բարձրացում՝ խոցելի տեղերի շահագործման միջոցով

Նախքան շահագործման միջոցով արտոնությունները բարձրացնելու փորձը, կարևոր է հասկանալ ֆայլերի փոխանցում թիրախային հյուրընկալողին. Բացի սովորական գործիքներից, ինչպիսիք են ssh, ftp, http (wget, curl), կա մի ամբողջություն. հնարավորությունների «կենդանաբանական այգին»..

Ձեր համակարգի անվտանգությունը բարելավելու համար պարբերաբար թարմացրեք այն մինչև վերջինը կայուն տարբերակները, ինչպես նաև փորձեք օգտագործել Enterprise-ի համար նախատեսված բաշխումներ: Հակառակ դեպքում, հազվադեպ, բայց կան իրավիճակներ, երբ apt upgrade-ը համակարգը դարձնում է անօգտագործելի:

Ծառայությունների շահագործում, որոնք գործում են արմատային օգտագործողի համատեքստում

Linux-ի որոշ ծառայություններ աշխատում են որպես արտոնյալ օգտվողի արմատ: Դրանք կարելի է գտնել օգտագործելով ps aux | grep արմատ. Այս դեպքում ծառայությունը կարող է չհայտարարվել համացանցում և հասանելի լինել տեղում: Եթե ​​այն ունի հանրային շահագործում, դրանք կարող են ապահով օգտագործվել. ծառայության խափանումը ձախողման դեպքում շատ ավելի քիչ կարևոր է, քան ՕՀ-ի խափանումը:

ps -aux | grep root # Linux

Ամենահաջող դեպքը կարելի է համարել կոտրված ծառայության շահագործումը root օգտագործողի համատեքստում։ SMB ծառայության շահագործումը SYSTEM-ին տալիս է արտոնյալ մուտք Windows համակարգերում (օրինակ՝ ms17-010-ի միջոցով): Այնուամենայնիվ, սա սովորական չէ Linux համակարգերում, այնպես որ դուք կարող եք շատ ժամանակ ծախսել արտոնությունների ընդլայնման վրա:

Linux միջուկի խոցելիության շահագործում

Սա վերջին ճանապարհն է, որ պետք է գնալ: Անհաջող շահագործումը կարող է հանգեցնել համակարգի խափանման, իսկ վերագործարկման դեպքում որոշ ծառայություններ (ներառյալ նրանք, որոնց միջոցով հնարավոր է եղել ստանալ սկզբնական կեղևը) կարող են չբարձրանալ: Պատահում է, որ ադմինիստրատորը պարզապես մոռացել է օգտագործել systemctl enable հրամանը։ Բացի այդ, դա մեծ դժգոհություն կառաջացնի ձեր աշխատանքից, եթե շահագործումը համաձայնեցված չէ:
Եթե ​​որոշել եք օգտագործել exploitdb-ի աղբյուրները, համոզվեք, որ կարդացեք սցենարի սկզբում նշված մեկնաբանությունները։ Ի թիվս այլ բաների, այն սովորաբար ասում է, թե ինչպես ճիշտ կազմել այս շահագործումը: Եթե ​​դուք չափազանց ծույլ էիք կամ «երեկ» կարիք ունեիք վերջնաժամկետների պատճառով, կարող եք որոնել պահեստներ արդեն կազմված շահագործումներով, օրինակ. Այնուամենայնիվ, պետք է հասկանալ, որ այս դեպքում դուք կստանաք խոզի խոզուկ: Մյուս կողմից, եթե ծրագրավորողը բայթին հասկանար, թե ինչպես է աշխատում համակարգիչը և ինչ ծրագրային ապահովում, ապա նա իր ամբողջ կյանքում կոդ չէր գրի:

cat /proc/version
uname -a
searchsploit "Linux Kernel" 

Մետփպոլիտ

Կապը բռնելու և կարգավորելու համար միշտ ավելի լավ է օգտագործել exploit/multi/handler մոդուլը: Հիմնական բանը ճիշտ բեռնվածություն սահմանելն է, օրինակ՝ generic/shell/reverce_tcp կամ generic/shell/bind_tcp։ Metasploit-ում ստացված կեղևը կարող է թարմացվել Meterpreter-ի՝ օգտագործելով post/multi/manage/shell_to_meterpreter մոդուլը: Meterpreter-ի միջոցով դուք կարող եք ավտոմատացնել հետշահագործման գործընթացը: Օրինակ՝ post/multi/recon/local_exploit_suggester մոդուլը ստուգում է հարթակը, ճարտարապետությունը և շահագործվող օբյեկտները և առաջարկում Metasploit մոդուլներ՝ նպատակային համակարգում արտոնությունների ընդլայնման համար: Meterpreter-ի շնորհիվ արտոնությունների աճը երբեմն հանգում է ճիշտ մոդուլի գործարկմանը, սակայն կոտրելն առանց հասկանալու, թե ինչ է կատարվում գլխարկի տակ, ճիշտ չէ (դուք դեռ պետք է հաշվետվություն գրեք):

Գործիքներ

Տեղական տեղեկատվության հավաքագրման ավտոմատացման գործիքները ձեզ շատ ջանք և ժամանակ կխնայեն, բայց ինքնին ի վիճակի չեն լիովին բացահայտել արտոնությունների ընդլայնման ուղին, հատկապես միջուկի խոցելիության օգտագործման դեպքում: Ավտոմատացման գործիքները կկատարեն բոլոր անհրաժեշտ հրամանները, որպեսզի դուք հավաքեք տեղեկատվություն համակարգի մասին, բայց նաև կարևոր է, որ կարողանաք վերլուծել ստացված տվյալներ. Հուսով եմ, որ իմ հոդվածը օգտակար կլինի ձեզ համար այս հարցում: Իհարկե, շատ ավելի շատ գործիքներ կան, քան ես կթվարկեմ ստորև, բայց դրանք բոլորն էլ մոտավորապես նույն բանն են անում՝ դա ավելի շատ ճաշակի խնդիր է:

Linpeas

Բավականին թարմ գործիք, առաջին հանձնումը թվագրված է 2019 թվականի հունվարին: Ներկայումս իմ սիրելի գործիքը: Եզրակացությունն այն է, որ այն ընդգծում է արտոնությունների ընդլայնման ամենահետաքրքիր վեկտորները: Համաձայն եմ, այս մակարդակում փորձագիտական ​​գնահատական ​​ստանալն ավելի հարմար է, քան մոնոլիտ չմշակված տվյալները վերլուծելը:

LinEnum

Իմ երկրորդ սիրելի գործիքը, այն նաև հավաքում և կազմակերպում է տեղական թվարկումների արդյունքում ստացված տվյալները։

linux-exploit-suggester (1,2)

Այս շահագործումը կվերլուծի համակարգը շահագործման համար հարմար պայմանների համար: Իրականում, այն կկատարի Metasploit local_exploit_suggester մոդուլի նույնական աշխատանքը, բայց կառաջարկի հղումներ դեպի exploit-db սկզբնաղբյուրային կոդեր, այլ ոչ թե Metasploit մոդուլներ:

Linuxprivchecker

Այս սցենարը կհավաքի և կկազմակերպի ըստ բաժինների մեծ քանակությամբ տեղեկատվություն, որը կարող է օգտակար լինել արտոնությունների ընդլայնման վեկտորի ձևավորման համար:

Մեկ այլ անգամ կմանրամասնեմ Linux-ի արտոնությունների ընդլայնում suid/sgid-ի միջոցով.

Source: www.habr.com

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