мен тамырмын. Linux OS Privilege Escalation түшүнүү

Мен 2020-жылдын биринчи чейрегинде OSCP экзаменине даярдандым. Google'дан маалымат издөө жана көптөгөн "сокур" аракеттер менин бош убактымдын баарын алды. Айрыкча артыкчылыктарды жогорулатуунун механизмдерин түшүнүү кыйынга турду. PWK курсу бул темага көп көңүл бурат, бирок окуу материалдары эч качан жетишсиз. Интернетте пайдалуу буйруктары бар көптөгөн колдонмолор бар, бирок мен бул эмнеге алып келерин түшүнбөй туруп, сунуштарды сокур ээрчүүнү жактырбайм.

Мен сиз менен экзаменге даярдануу жана ийгиликтүү тапшыруу учурунда үйрөнгөнүмдү бөлүшкүм келет (анын ичинде Hack The Box программасына мезгил-мезгили менен киришүү). Try Harder жолунда көбүрөөк аң-сезимдүү басып өтүүгө жардам берген ар бир маалымат үчүн мен терең ыраазычылык сезимин сездим, азыр коомчулукка кайтарым бере турган убактым.

Мен сизге OS Linux'та артыкчылыктарды кантип жогорулатуу боюнча окуу куралын бергим келет, анда эң кеңири таралган векторлордун жана ага байланыштуу функциялардын талдоосу камтылган, алар сиз үчүн сөзсүз пайдалуу болот. Көбүнчө артыкчылыктарды жогорулатуу механизмдери абдан жөнөкөй, маалыматты түзүүдө жана талдоодо кыйынчылыктар пайда болот. Ошондуктан, мен "экскурсиялык турдан" баштоону чечтим, андан кийин ар бир векторду өзүнчө макалада карап чыгууну чечтим. Мен сизге теманы изилдөө үчүн бир аз убакытты үнөмдөйм деп үмүттөнөм.

мен тамырмын. Linux OS Privilege Escalation түшүнүү

Эгерде методдор көптөн бери белгилүү болсо, эмне үчүн 2020-жылы артыкчылыктарды жогорулатуу мүмкүн? Чындыгында, эгерде колдонуучу системаны туура иштетсе, анда анда артыкчылыктарды көбөйтүү мүмкүн эмес. Мындай мүмкүнчүлүктөрдү пайда кылган негизги глобалдык көйгөй болуп саналат кооптуу конфигурация. Системада кемчиликтерди камтыган программалык камсыздоонун эскирген версияларынын болушу да кооптуу конфигурациянын өзгөчө учуру болуп саналат.

Кооптуу конфигурация аркылуу артыкчылыктарды жогорулатуу

Биринчиден, кооптуу конфигурацияны чечели. менен баштайлы IT адистери көбүнчө stackoverflow сыяктуу колдонмолорду жана ресурстарды колдонушат, алардын көбү кооптуу буйруктарды жана конфигурацияларды камтыйт. Кереметтүү мисал - жаңылык stackoverflow'тан эң көп көчүрүлгөн код катаны камтыган. Тажрыйбалуу админ жамбы көрөт, бирок бул идеалдуу дүйнөдө. Ал тургай компетенттүү адистер жумуш жүгүн жогорулатуу ката кетирүүгө жөндөмдүү. Элестеткиле, администратор кезектеги тендерге документтерди даярдап, координациялап жатат, ошол эле учурда кийинки кварталда ишке ашырыла турган жаңы технологияны изилдеп, ошол эле учурда колдонуучуларды колдоо көйгөйлөрүн мезгил-мезгили менен чечип жатат. Анан ага бир нече виртуалдык машиналарды тез орнотуу жана аларга кызмат көрсөтүү тапшырмасы берилет. Сиздин оюңузча, админ жөн эле тыгынды байкабай калуу ыктымалдыгы кандай? Андан кийин адистер алмашат, бирок балдак калат, ал эми компаниялар ар дайым чыгымдарды, анын ичинде IT кызматкерлеринин чыгымдарын азайтууга умтулушат.

Pseudo-shell жана 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 файлдагы бардык аткарылган буйруктардын тарыхын чогултат ~ / .bash_history. Эгерде сервер активдүү колдонулса жана анын тарыхы тазаланбаса, бул файлдан эсептик дайындарды табуу ыктымалдыгы жогору. Тарыхты тазалоо жөн эле ыңгайсыз. Эгер администратор аркылуу он кабаттуу командаларды тандоого мажбур болсо, албетте, ага кайра киргизгенден көрө тарыхтан бул команданы чакыруу ыңгайлуураак болот. Кошумчалай кетсек, көптөр бул "хакердик" жөнүндө билишпейт. Системада 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'тагы көптөгөн операциялар тамыр артыкчылыктарын талап кылат, бирок тамыр катары иштетүү абдан жаман практика болуп эсептелет. Анын ордуна, түпкү контекстте буйруктарды аткаруу үчүн тандоо уруксатын колдонуу жакшы. Бирок, көптөгөн 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

Интернетте бардык suid/sgid буйруктарын чогултууга кеңеш берген көптөгөн окуу куралдары бар, бирок сейрек кездешүүчү макалада бул программалар менен эмне кылуу керектиги айтылган. Эксплуатацияларды колдонууну эске албаган артыкчылыктарды жогорулатуунун варианттарын табууга болот бул жерде. Ошондой эле, бир катар аткарылуучу файлдардын OS версиясы үчүн өзгөчө кемчиликтери бар, Мисалы,.

Идеалдуу дүйнөдө сиз бардык орнотулган пакеттерди жок дегенде searchsploit аркылуу иштетмексиз. Иш жүзүндө муну sudo сыяктуу эң популярдуу программалар менен жасоо керек. Ошондой эле ар дайым артыкчылыктарды жогорулатуу, suid/sgid биттери менен аткарылуучу файлдарды баса белгилеген автоматташтырылган куралдарды иштеп чыгууну колдонуу жана колдоо мүмкүнчүлүгү бар. Мен макаланын тиешелүү бөлүмүндө мындай куралдардын тизмесин берем.

Root контекстинде Cron же Init тарабынан башкарылуучу жазылуучу скрипттер

Cron жумуштары ар кандай колдонуучунун контекстинде, анын ичинде root менен иштетилиши мүмкүн. Эгерде cron тапшырмасы аткарылуучу файлга шилтеме менен орнотулган болсо жана ал сиз үчүн жеткиликтүү болсо, аны зыяндуу жана артыкчылыктарды жогорулатуу менен оңой алмаштырууга болот. Бирок, демейки боюнча, cron тапшырмалары бар файлдарды каалаган колдонуучу окуй алат.

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

Init менен абал окшош. Айырмачылыгы, cronдогу тапшырмалар мезгил-мезгили менен аткарылып турат, ал эми init - системаны ишке киргизүүдө. Иштөө тутумдун кайра жүктөлүшүн талап кылат жана кээ бир кызматтар иштебей калышы мүмкүн (эгерде алар ишке киргизүүдө катталбаган болсо).

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

Башка колдонуучуларга кабык мүмкүнчүлүгүн алуу

Биз /etc/passwd ичиндеги колдонуучулардын тизмесин карайбыз. Бизде кабыгы барларга көңүл бурабыз. Сиз бул колдонуучуларга катаал мамиле кыла аласыз - натыйжада пайда болгон колдонуучу аркылуу акыр аягында артыкчылыктарды жогорулатууга болот.

Коопсуздукту жакшыртуу үчүн мен сизге ар дайым эң аз артыкчылык принцибин карманууну сунуштайм. Мүчүлүштүктөрдү жоюудан кийин кала турган кооптуу конфигурацияларды текшерүүгө убакыт коротуунун мааниси бар - бул система администраторунун "техникалык милдети".

Өз алдынча жазылган код

Колдонуучунун жана веб-сервердин башкы каталогундагы (/var/www/, башкасы белгиленбесе) аткарылуучу файлдарды кылдат карап чыгуу зарыл. Бул файлдар толугу менен кооптуу чечим болуп чыгышы мүмкүн жана укмуштуудай балдактарды камтышы мүмкүн. Албетте, эгер сизде веб-сервер каталогунда кандайдыр бир негиз бар болсо, анда пентесттин бир бөлүгү катары андан нөлдүк күндү издөөнүн мааниси жок, бирок ыңгайлаштырылган модификацияларды, плагиндерди жана компоненттерди таап, изилдөө сунушталат.

Коопсуздукту жогорулатуу үчүн, мүмкүн болсо, өз алдынча жазылган скрипттерде эсептик дайындарды, ошондой эле /etc/shadow окуу же id_rsa манипуляциялоо сыяктуу потенциалдуу кооптуу функцияларды колдонуудан качканыңыз жакшы.

Алсыздыктарды пайдалануу аркылуу артыкчылыктарды жогорулатуу

Эксплуатация аркылуу артыкчылыктарды жогорулатууга аракет кылуудан мурун, муну түшүнүү маанилүү файлдарды максаттуу хостко өткөрүп берүү. ssh, ftp, http (wget, curl) сыяктуу кадимки куралдардан тышкары, бир бүтүн бар. мүмкүнчүлүктөрдүн "зоопаркы".

Системанын коопсуздугун жакшыртуу үчүн, аны дайыма эң акыркы версияга жаңыртыңыз туруктуу версияларын, ошондой эле Enterprise үчүн иштелип чыккан бөлүштүрүүнү колдонууга аракет кылыңыз. Болбосо, бул сейрек кездешет, бирок туура жаңыртуу системаны иштебей турган жагдайлар бар.

Колдонуучунун түпкү контекстинде иштеген кызматтарды эксплуатациялоо

Кээ бир Linux кызматтары тамыр катары иштейт. Аларды ps aux | буйругу менен тапса болот grep тамыры. Бул учурда, кызмат Интернетте жарнамаланбайт жана жергиликтүү жеткиликтүү болушу мүмкүн. Эгерде ал коомдук эксплуатацияларга ээ болсо, аларды коопсуз колдонсо болот: иштебей калган учурда кызматтын бузулушу ОСтун бузулушуна караганда бир топ азыраак маанилүү.

ps -aux | grep root # Linux

Эң ийгиликтүү учурду түпкү колдонуучунун контекстинде бузулган кызматтын иштешин кароого болот. SMB кызматынын иштеши Windows системаларында СИСТЕМАга артыкчылыктуу мүмкүнчүлүк берет (мисалы, ms17-010 аркылуу). Бирок, бул Linux системаларында кеңири таралган эмес, андыктан артыкчылыктарды жогорулатууга көп убакыт коротсоңуз болот.

Linux ядросунун аялуу жерлерин пайдалануу

Бул сиз эң акыркы жолу барышыңыз керек. Ийгиликсиз операция системанын бузулушуна алып келиши мүмкүн жана кайра жүктөө учурунда кээ бир кызматтар (анын ичинде баштапкы кабык алынган кызматтар) иштебей калышы мүмкүн. Администратор жөн гана systemctl иштетүү буйругун колдонууну унутуп калган учурлар болот. Андан тышкары, операция макулдашылган эмес болсо, бул сиздин жумушуңузга нааразычылыктарды жаратат.
Эгерде сиз exploitdb булак коддорун колдонууну чечсеңиз, скрипттин башындагы комментарийлерди окуп чыгыңыз. Башка нерселердин арасында, адатта, берилген эксплуатацияны кантип туура компиляциялоо керектиги айтылат. Эгер сиз өтө жалкоо болсоңуз же мөөнөттөрдөн улам "кечээ" жасоого туура келсе, анда буга чейин түзүлгөн эксплуатациялар менен репозиторийлерди издесеңиз болот, Мисалы,. Бирок, бул учурда сиз чочконун чочконун алаарын түшүнүшүңүз керек. Ал эми, эгер программист компьютердин кантип иштээрин жана ал колдонгон программаны байтына чейин түшүнсө, өмүр бою бир да сап код жазбайт.

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

Metasploit

Байланышты кармап туруу жана иштетүү үчүн эксплоит/мульти/иштетүү модулун колдонуу дайыма жакшы. Эң негизгиси, туура жүктөмдү коюу, мисалы, generic/shell/reverse_tcp же generic/shell/bind_tcp. Metasploit тарабынан чыгарылган кабык post/multi/manage/shell_to_meterpreter модулу аркылуу Meterpreterге жаңыртылат. Meterpreter менен сиз эксплуатациядан кийинки процессти автоматташтыра аласыз. Мисалы, post/multi/recon/local_exploit_suggester модулу эксплуатация үчүн талап кылынган платформаны, архитектураны жана объекттерди текшерет жана максаттуу системадагы артыкчылыктарды жогорулатуу үчүн Metasploit модулдарын сунуштайт. Meterpreterдин аркасында, кеңейтилген артыкчылыктар кээде талап кылынган модулду ишке киргизүүгө чейин жетет, бирок капоттун астында эмне болуп жатканын түшүнбөй хакерлик кылуу "чындык" эмес (сиз дагы эле отчет жазышыңыз керек).

аспаптар

Жергиликтүү маалымат чогултууну автоматташтыруу куралдары сизге көп күч-аракетти жана убакытты үнөмдөйт, бирок алар өз алдынча артыкчылыктарды жогорулатуунун жолун толук аныктай алышпайт, өзгөчө ядронун алсыз жактарын пайдаланууда. Автоматташтыруу куралдары тутум жөнүндө маалыматты чогултуу үчүн бардык керектүү буйруктарды аткарат, бирок бул дагы маанилүү: кароо алынган маалыматтар. Менин макалам бул жагынан сизге пайдалуу болот деп ишенем. Албетте, мен төмөндө тизмелеп бере турган куралдардан дагы көп нерселер бар, бирок алардын баары болжол менен бир эле нерсени аткарышат - бул даам маселеси.

Linpeas

Жакында Тула шаарында болгон биринчи милдеттенме 2019-жылдын январь айына туура келет. Учурда менин сүйүктүү куралым. Кеп, ал артыкчылыктарды жогорулатуунун эң кызыктуу векторлорун баса белгилегендигинде. Макулмун, монолиттүү чийки маалыматтарды талдоодон көрө, бул деңгээлде эксперттик баа алуу ыңгайлуу.

LinEnum

Менин экинчи сүйүктүү куралым, ал ошондой эле жергиликтүү эсептөөнүн натыйжасында алынган маалыматтарды чогултат жана уюштурат.

Linux-эксплоит-сунуштоочу (1,2)

Бул эксплуатация системаны колдонуунун ылайыктуу шарттарына талдоо жүргүзөт. Чынында, ал Metasploit модулу local_exploit_suggester менен окшош жумуш аткарат, бирок Metasploit модулдарына эмес, exploit-db булак коддоруна шилтемелерди сунуштайт.

Linuxprivchecker

Бул скрипт артыкчылыктарды жогорулатуу үчүн векторду түзүү үчүн пайдалуу болушу мүмкүн болгон маалыматтын чоң көлөмүн чогултат жана бөлүктөргө бөлөт.

Дагы бир жолу мен майда-чүйдөсүнө чейин айтам suid/sgid аркылуу Linux OSде артыкчылыктарды жогорулатуу.

Source: www.habr.com

Комментарий кошуу