означает, что хакер поимел хорошую двухпроцессорную тачку. Только вот ядро у этой машины не такое уж и хорошее. Можно провести атаку эксплоитом isec-ptrace.c и быстро получить рутовые привилегии. Для этого даже не нужен псевдотерминал, который настоятельно требовали предыдущие эксплоиты ptrace- уязвимости. Что касается Solaris, то ее ядро пробивается с одного удара. Существует сплоит, позволяющий подгрузить модуль с произвольным кодом. Подгрузка, как ты уже догадался, производится от обычных юзерских прав, которые ты получил после успешной удаленной атаки.
В случае, когда встречается ядрышко постабильнее, например, 2.6.7 или 2.4.20, но с префиксом – grsecure, можно не питать надежду на то, что кернел возьмется обычным ptrace-эксплойтом. В такой ситуации хакер даже не тратит времени на поиски эксплоита, ибо знает, что патчи и свежие релизы уже не содержат старых багов.
Бывает, что на машине вертится секьюрное ядро, но также очень бажные бинарники. Например, я встречался с Linux RedHat 7.3 с патчем от grsecurity, но уязвимым приложением /usr/sbin/sudo. При таком раскладе я желал получить рута после применения эксплоита hudo.c, но обломался. Дело в том, что сервер, являлся хостингом, поэтому всем юзерам прикрывался доступ к /usr/bin/gcc. Я оценил защиту админа, затем скомпилил эксплоит на другом пингвине и перетащил бинарник на хостинговую машину. Оставалось запустить приложение и наслаждаться рутовыми правами.
Думаю, смысл ты уловил. Если на сервере есть уязвимые бинарники или старое ядро – ноги в руки и бегом на сайты по безопасности за свежими (или чуть протухшими) эксплоитами. На машине свежая система и напрочь отсутствуют суидные приложения? Тогда придется попробовать другой способ локального нападения.
Другой метод повышения привилегий заключается в поиске секретной информации. Нет, совсем необязательно отыскивать различные документы, нужно просто определить наличие в системе парольных хэшей. Часто пароли встречаются в файлах .htpasswd, они находятся в web-зоне. Поиск осуществляется командой locate .htpasswd. Бывает, что документ не только открыт на чтение, но и содержит в себе рутовый хэш, который, легко расшифровать с помощью John The Ripper. Помимо списка .htpasswd можно запросить конфиги .htaccess, а затем прочитать их. Бывает, что юзер сохраняет пароли в файле с произвольным именем. Последнее легко узнать по значению директивы UserFile в httpd.conf.
Конфиги от Web – это лишь верхушка айсберга. Настоящая сила находится в логах! Если поиск по Web ничего не дал, стоит попробовать поискать читабельные файлы .bash_history и.mysql_history. В первом из них можно обнаружить пароль для суперпользователя. Случается, что администратор написал неверную команду su (sy или si), а затем вслепую вбил рутовый пароль. Пароль, конечно же, сохранится в логе команд. Находка для хакера, не так ли? Кроме этого, возможен случай, при котором администратор логинится к MySQL, используя системный пароль. Таких случаев очень много, наверное, каждый третий локальный взлом происходит благодаря хорошему урожаю из лога команд :).
Теперь поговорим о MySQL. Доступ к базе – это тоже своего рода дополнительные права. Ведь в БД могут содержаться таблицы с кредитными картами, аккаунтами на какие-либо сервисы и т.п. Слюнки потекли? Еще бы :). Чтобы достать пароль от базы, особо париться не надо. В первую очередь нужно изучить PHP/CGI-скрипты на предмет конфигурационных файлов. Например, часто переменные доступа записываются в конфиг include.php.inc либо mysql.inc. Второй способ узнать пароль – прочитать .mysql_history. Очень часто администратор светит пассворд в чистом виде после выполнения команды «blabla set password=password(„пароль“)». Наконец, если не повезло, можно заняться локальным брутфорсом: залить на машину hydra и прогнать вордлист для сервиса mysql. Ведь, как известно, надежда умирает последней :).
Итак, настал тот заветный момент, когда получены абсолютные привилегии. Но на этом приключения не закончены. Обычно после взлома хакер определяется с дальнейшей тактикой: либо он троянит машину и «ложится на дно», либо атакует дальше в надежде заполучить более вкусный кусок, чем права рута. Я говорю о взломе локальной сети, которой владеть куда интереснее, чем обитать на маршрутизаторе. Но для того чтобы продвинуться вперед, взломщику необходимо узнать пароли на других серверах. Это проще всего сделать двумя способами:
1. Найти информацию об SSH-соединениях. Эти данные находятся в файле ~user/.ssh/.known_hosts. Пропарсив этот конфиг, можно приконнектиться на любой хост из списка. Пароль на соединение с большой вероятностью совпадет с системным, который можно без проблем расшифровать. А если у юзера имеются SSH-ключики, то с помощью простого суида взломщик способен соединиться с узлом без дополнительной авторизации. Правда, следует помнить, что в случае защиты ключа секретной фразой, ее можно легко расшифровать путем брутфорса по словарному листу. В этом злоумышленнику поможет утилита SSH Crack (http://www.thc.org/root/tools/thc_ssh_crack.c).
2. Установить на сервер снифер или клавиатурный шпион. С помощью сниффинга можно легко отловить пароль на FTP– или POP3-сервис, а затем попробовать аккаунт в качестве системного.
С помощью специального модуля можно перехватить все консольные команды, включая пароли на SSH. Самый лучший клавиатурный логгер – vlogger от THC (http://www.thc.org/download.php?t=r&f=vlogger-2.1.1.tar.gz). После загрузки модуль стирает себя из списка процессов, а затем работает в одном из двух режимов: логирование всего ввода или запись паролей (smart mode). В любом случае взломщику удастся нарыть достаточно информации, которой хватит для взлома всех станций локальной сети!
Вот, собственно, и все основные удаленные и локальные атаки. Обычно именно эти методы и приносят взломщику успех. Ведь он точно знает, что брутфорс намного опаснее, чем сканирование портов, но когда ничего не остается делать, приходится довольствоваться самыми неблагодарными способами взлома. Матерый взломщик с помощью пары команд определит, что система не имеет тривиальных уязвимостей и получить рута в ней будет очень непростым делом. Но после двухчасового поиска злоумышленник быстро найдет пароль суперпользователя, записанный в plain-тексте. Если ты думаешь, что у крутых хакеров дар определять методы взлома, то ошибаешься. В свое время они были скрипткиди, несколько лет, набравшись опыта, человек постиг искусство взлома.
Существуют альтернативные способы взлома сервера. Один из них – социальная инженерия. Ее можно использовать как для удаленного, так и для локального взлома. Допустим, ты знаешь аську админа, и тебе позарез понадобился пароль на его сервер :). Для упрощения задачи предположим, что логин тебе известен. Можно постучаться к админу в асю и интеллигентно попросить пароль :). Правда, скорее всего, тебя пошлют куда подальше. А вот если ты начнешь издалека, подружишься с ним и попросишь помочь с настройкой какого-нибудь конфига, то это другое дело. Скажи, что даешь ему шелл на свою тачку, затем прописывай ему /usr/bin/xpasswd в качестве интерпретатора и устанавливай пустой пароль. Теперь проси его залогиниться. Естественно, что админ попросит тебе поставить нормальный шелл, но ты скажешь, чтобы он установил себе пароль самостоятельно. С большой вероятностью сисадм установит свой родной пароль, ничего не заподозрив (ведь пароли-то криптуются!). Думаю, не стоит говорить, что xpasswd – это ранее написанный тобой скрипт, содержащий в себе логирование пароля, а затем его установку в качестве системного.
Если говорить о применении НЛП к локальному взлому, то на ум приходит одна интересная идея. Проверь, есть ли на сервере антивирус. Если есть, посмотри его название и версию. Теперь пиши админу письмо, мол, найден феноменальный вирус, и его очень рекомендуется отправить на экспертизу. Чтобы подтвердить отправку, запустите файлик /tmp/antivirus-accept и примите все соглашения. Подпиши письмо антивирусом, чтобы админ наверняка поверил в важность этого мыла. Сам файл в /tmp будет представлять собой скомпилированный бэкдор, создающий суидный bash. Вот и все.