Право на root. Как повышают привилегии в Linux

С правами рута ты можешь делать в системе что угодно: закрепиться на будущее, оставив бэкдор, внедрить руткит или троян, забрать, изменить или уничтожить любую информацию — хоть разместить задницу на главной странице сайта, если захватил веб-сервер. Поэтому повышение привилегий в системе — один из важнейших шагов при атаках. В этой статье мы посмотрим, как это делается в системах с Linux.

В общем случае эскалация привилегий — это получение прав в системе выше, чем у тебя уже есть. Но чаще всего имеется в виду получение доступа к учетной записи root в Linux или system/administrator в Windows.

Почему становится возможным повысить права в системе, казалось бы призванной предотвращать подобное? Причин много. Вот, как мне кажется, основные:

  • уязвимости в приложениях/скриптах;
  • неверная конфигурация ОС и приложений;
  • забытые критически важные данные (пароли, логины, бэкапы и прочее);
  • уязвимости в ядре ОС.

Ну а основная причина всегда одна и та же — людские ошибки. В идеальной вселенной, скорее всего, повысить привилегии не удалось бы. Но человеческий фактор делает это возможным, поэтому наслаждаемся.

 

С чего начать?

Прежде чем что-то делать, нужно понять, с чем мы будем иметь дело. Конечно, кое-что мы узнаем о системе, изучив ее на этапе проникновения, но теперь нужно подробнее выяснить, что именно нам может помочь подняться до root.

Какие-то вещи мы можем узнать вручную. Например, получить сведения о ядре:

uname -a 2>/dev/null

Или о процессоре:

cat /proc/cpuinfo 2>/dev/null

Или релиз ОС:

cat /etc/*-release 2>/dev/nul

Можно, конечно, и дальше собирать информацию с помощью терминала, но это долго. Гораздо проще и эффективнее использовать специальные тулзы. Самые распространенные из них:

  • privilege-escalation-awesome-scripts-suite (linPEAS);
  • LinEnum;
  • PXEnum;
  • linuxprivchecker;
  • SysEnum;
  • linux-smart-enumeration.

Все они работают примерно по одному принципу: последовательно запускают команды bash или короткие скрипты, а вывод отправляют в stdout или лог-файл в зависимости от параметров.

Так примерно выглядит вывод подобной тулзы.

LinEnum
 

Куда смотреть?

Давай теперь разберем несколько примеров уязвимостей и посмотрим, как можно их эксплуатировать.

 

Всякое забытое

Первое, что стоит проверить, — это забытые критические данные. Ничего не стоит заглянуть в домашние папки юзеров и посмотреть, не хранит ли кто-то на рабочем столе файл с паролем или ключами от чего-нибудь нужного. Это случается редко, но все же случается. Иногда учетные данные хардкодят в скриптах и конфигах. Стоит также проверить историю шелла, там тоже могут найтись длинные команды, содержащие учетные данные. А иногда бывает, что пользователь набрал пароль, когда консоль его не запрашивала, и он тоже сохранится в истории.

 

SUID/GUID

Флаги setuid и setgid позволяют пользователю запускать программы от имени владельца. Например, когда надо запускать программу от рута, а пользователь рутом не является. Чаще всего встречается SUID. Устанавливается этот бит легко:

chmod +s /bin/script

Подразумевается, что программа с таким флагом не сможет делать ничего, кроме того, для чего она предназначена. Но так как все мы люди и ошибаемся, то это хорошо порой ошибки позволяют скомпрометировать систему. Чаще всего к возможности повысить привилегии приводит возможность программы производить запись в файловую систему или каким-то образом выполнять код.

В первую очередь нас интересуют файлы, владелец которых — root. Найти их можно руками, такой командой:

find / -user root -perm -u=s -type f 2>/dev/null

Как вариант — можно поискать в выводе тулз, которые я перечислил выше. Так или иначе, если найдешь файлы с подобными разрешениями, значит, у тебя есть шанс подняться до максимальных привилегий.

Вот вывод таких файлов из LinEnum.sh.

Из интересных файлов — find. LinEnum даже услужливо его подсветил отдельно.

Это позволит довольно легко получить привилегии.

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *