Мен тамырмын. Linux ОЖ артықшылықтарын арттыруды түсіну

Мен 2020 жылдың бірінші тоқсанын OSCP емтиханына дайындалумен өткіздім. Google-дан ақпарат іздеу және көптеген «соқыр» әрекеттер менің барлық бос уақытымды алды. Әсіресе, артықшылықтарды арттырудың тетіктерін түсіну қиын болды. PWK курсы бұл тақырыпқа көп көңіл бөледі, бірақ оқу материалдары ешқашан жеткіліксіз. Интернетте пайдалы командалары бар көптеген нұсқаулықтар бар, бірақ мен бұл не әкелетінін түсінбей, ұсыныстарды соқыр орындауды жақтамаймын.

Емтиханға дайындалу және сәтті тапсыру кезінде білгенімді сіздермен бөліскім келеді (соның ішінде Hack The Box бағдарламасына мерзімді түрде кіру). Тренинг жолында саналы жүруге көмектескен әрбір ақпарат үшін мен қатты ризашылық сезімін сезіндім, енді менің қоғамға қайтаратын уақытым келді.

Мен сізге Linux OS жүйесінде артықшылықтарды қалай арттыруға болатыны туралы нұсқаулықты бергім келеді, ол сізге ең көп таралған векторлар мен қатысты мүмкіндіктерді талдауды қамтиды, олар сізге сөзсіз пайдалы болады. Көбінесе артықшылықтарды ұлғайту механизмдерінің өзі өте қарапайым, ақпаратты құрылымдау және талдау кезінде қиындықтар туындайды. Сондықтан мен «экскурсиялық турдан» бастауды шештім, содан кейін әрбір векторды жеке мақалада қарастыру керек. Тақырыпты зерттеуге уақытыңызды үнемдеймін деп үміттенемін.

Мен тамырмын. Linux ОЖ артықшылықтарын арттыруды түсіну

Неліктен 2020 жылы артықшылықтарды арттыру мүмкін, егер әдістер өте ұзақ уақыт бойы белгілі болса? Шын мәнінде, егер пайдаланушы жүйені дұрыс басқарса, ондағы артықшылықтарды арттыру мүмкін болмайды. Мұндай мүмкіндіктерді тудыратын басты жаһандық проблема болып табылады қауіпсіз конфигурация. Жүйеде осалдықтары бар бағдарламалық жасақтаманың ескірген нұсқаларының болуы да қауіпті конфигурацияның ерекше жағдайы болып табылады.

Қауіпсіз конфигурация арқылы артықшылықты арттыру

Біріншіден, қауіпті конфигурациямен айналысайық. бастайық АТ мамандары stackoverflow сияқты нұсқаулықтар мен ресурстарды жиі пайдаланады, олардың көпшілігінде қауіпті пәрмендер мен конфигурациялар бар. Керемет мысал - жаңалықтар stackoverflow ішінен ең көп көшірілген кодта қате бар. Тәжірибелі әкімші кептелісті көреді, бірақ бұл тамаша әлемде. Тіпті білікті мамандар жұмыс жүктемесінің артуы қателесуге қабілетті. Елестетіп көріңізші, әкімші келесі тендерге құжаттаманы дайындап, үйлестіреді, сонымен бірге келесі тоқсанда енгізілетін жаңа технологияны зерттеп жатыр, сонымен бірге пайдаланушыларды қолдау мәселелерін кезеңді түрде шешеді. Содан кейін оған бірнеше виртуалды машиналарды жылдам орнату және оларда қызметтерді шығару тапсырмасы беріледі. Сіздің ойыңызша, админ жай ғана кептелісті байқамай қалу ықтималдығы қандай? Содан кейін мамандар өзгереді, бірақ балдақтар қалады, ал компаниялар әрқашан шығындарды азайтуға тырысады, соның ішінде IT қызметкерлері үшін.

Псевдо-шелл және джейлбрейк

Пайдалану кезеңінде алынған жүйе қабығы жиі шектеледі, әсіресе оны веб-сервердің пайдаланушысын бұзу арқылы алған болсаңыз. Мысалы, қабық шектеулері 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 пәрмендерін жинауға кеңес беретін көптеген нұсқаулықтар бар, бірақ сирек мақалада осы бағдарламалармен не істеу керектігі туралы нақты мәліметтер берілген. Эксплуаттарды пайдалануды ескермейтін артықшылықтарды арттыру нұсқаларын табуға болады. осында. Сондай-ақ, бірқатар орындалатын файлдардың ОЖ нұсқасы үшін арнайы осалдықтары бар, мысалы.

Керемет әлемде сіз барлық орнатылған бумаларды кем дегенде searchsploit арқылы іске қосасыз. Іс жүзінде мұны sudo сияқты ең танымал бағдарламалармен жасау керек. Сондай-ақ әрқашан артықшылықты арттыру тұрғысынан, suid/sgid биттері бар орындалатын файлдарды ерекшелейтін автоматтандырылған құралдарды әзірлеуді пайдалану және қолдау мүмкіндігі бар. Мен мақаланың тиісті бөлімінде осындай құралдардың тізімін беремін.

Root контекстінде Cron немесе Init басқаратын жазылатын сценарийлер

Cron тапсырмаларын әр түрлі пайдаланушы контекстінде, соның ішінде root арқылы іске қосуға болады. Егер cron тапсырмасы орындалатын файлға сілтемемен орнатылса және ол сізге жазуға қолжетімді болса, оны зиянды және артықшылықты арттырумен оңай ауыстыруға болады. Дегенмен, әдепкі бойынша cron тапсырмалары бар файлдарды кез келген пайдаланушы оқи алады.

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

Бастапқыда жағдай ұқсас. Айырмашылығы мынада, 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 қызметтері root ретінде жұмыс істейді. Оларды ps aux | командасы арқылы табуға болады grep тамыры. Бұл жағдайда қызмет Интернетте жарнамаланбауы және жергілікті жерде қолжетімді болуы мүмкін. Егер оның жалпыға бірдей эксплуатациялары болса, оларды қауіпсіз пайдалануға болады: сәтсіздікке ұшыраған жағдайда қызметтің бұзылуы ОЖ апатына қарағанда әлдеқайда маңызды емес.

ps -aux | grep root # Linux

Ең сәтті жағдайды түбірлік пайдаланушы контекстінде бұзылған қызметтің жұмысы деп санауға болады. SMB қызметінің жұмысы Windows жүйелерінде ЖҮЙЕге артықшылықты рұқсат береді (мысалы, ms17-010 арқылы). Дегенмен, бұл Linux жүйелерінде кең таралған емес, сондықтан артықшылықтарды арттыруға көп уақыт жұмсай аласыз.

Linux ядросының осалдықтарын пайдалану

Бұл сіз ең соңғы жолмен жүруіңіз керек. Сәтсіз операция жүйенің бұзылуына әкелуі мүмкін және қайта жүктелген жағдайда кейбір қызметтер (соның ішінде бастапқы қабықша алынған қызметтер) іске қосылмауы мүмкін. Әкімші systemctl enable пәрменін пайдалануды ұмытып кеткен. Операция келісілмеген болса, бұл сіздің жұмысыңызға көп наразылық тудырады.
Exploitdb бастапқы кодтарын пайдалануды шешсеңіз, сценарийдің басындағы түсініктемелерді оқып шығыңыз. Басқа нәрселермен қатар, әдетте берілген эксплуаттты қалай дұрыс құрастыру керектігін айтады. Егер сіз тым жалқау болсаңыз немесе белгіленген мерзімге байланысты «кеше» істеуге тура келсе, сіз бұрыннан құрастырылған эксплуатациялары бар репозиторийлерді іздей аласыз, мысалы. Дегенмен, сіз бұл жағдайда шошқаны шошқа алатыныңызды түсінуіңіз керек. Екінші жағынан, егер бағдарламашы компьютердің қалай жұмыс істейтінін және ол қолданатын бағдарламалық жасақтаманы байтына дейін түсінсе, ол өмір бойы бір жолдық код жазбас еді.

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

Метпаспол

Қосылымды ұстап тұру және өңдеу үшін әрқашан эксплоит/мульти/өңдеуші модулін қолданған дұрыс. Ең бастысы, пайдалы жүктемені дұрыс орнату, мысалы, 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 арқасында, кеңейтілген артықшылықтар кейде қажетті модульді іске қосуға дейін жетеді, бірақ қақпақ астында не болып жатқанын түсінбей бұзу «шындық» емес (сіз әлі де есеп жазуыңыз керек).

Құралдар

Жергілікті ақпарат жинауды автоматтандыру құралдары сізге көп күш пен уақытты үнемдейді, бірақ олар өз бетінше артықшылықтарды кеңейту жолын толық анықтай алмайды, әсіресе ядроның осалдықтарын пайдалану жағдайында. Автоматтандыру құралдары жүйе туралы ақпаратты жинау үшін барлық қажетті пәрмендерді орындайды, бірақ сонымен қатар білу маңызды. талдау жасау алынған деректер. Менің мақалам осыған байланысты сізге пайдалы болады деп үміттенемін. Әрине, мен төменде тізімдейтін құралдардан әлдеқайда көп құралдар бар, бірақ олардың барлығы шамамен бірдей нәрсені жасайды - бұл талғамға қатысты мәселе.

Линбұршақ

Жақында болған Тула, бірінші міндеттеме 2019 жылдың қаңтарынан басталады. Қазіргі уақытта менің сүйікті құралым. Мәселе мынада, ол артықшылықты арттырудың ең қызықты векторларын көрсетеді. Келісіңіз, монолитті бастапқы деректерді талдаудан гөрі осы деңгейде сараптамалық бағалауды алу ыңғайлы.

LinEnum

Менің екінші сүйікті құралым, ол сонымен қатар жергілікті санау нәтижесінде алынған деректерді жинайды және ұйымдастырады.

Linux-эксплоит-ұсынатын (1,2)

Бұл эксплойт жүйені пайдаланудың қолайлы жағдайларына талдайды. Іс жүзінде ол Metasploit модулімен бірдей тапсырманы орындайды local_exploit_suggester, бірақ Metasploit модульдерінен гөрі exploit-db бастапқы кодтарына сілтемелер ұсынады.

Linuxprivchecker

Бұл сценарий артықшылықтарды ұлғайту векторын қалыптастыру үшін пайдалы болуы мүмкін ақпараттың үлкен көлемін жинап, бөлімдерге бөледі.

Басқа жолы мен егжей-тегжейлі айтып беремін suid/sgid арқылы Linux ОЖ-де артықшылықтарды жоғарылату.

Ақпарат көзі: www.habr.com

пікір қалдыру