
CVE-2018-15473 - Opensshenum is an user enumerator exploiting an OpenSsh bug
Opensshenum — это инструмент для перебора пользователей OpenSSH, позволяющий проверить произвольный список имен пользователей на сервере OpenSSH и определить, какие из них реально присутствуют на удаленной машине. Программа использует уязвимость (исправленную в июле 2018 года), которая, как доказано, работала как минимум с OpenSSH 2.3.0 (выпущенной в ноябре 2000 года).
Я написал эксплойт на основе Tssh — SSH 2 клиента, который я написал на C++11 с нуля, руководствуясь RFC.
Дополнительная информация здесь:
http://seclists.org/oss-sec/2018/q3/124
Эта проблема получила идентификатор CVE-2018-15473.
Этот код опубликован в информационных и образовательных целях. Вторжение в системы и сервисы без разрешения владельца незаконно. Неправильное использование информации и программного обеспечения из этого репозитория может привести к уголовному преследованию нарушителя. Любые действия или деятельность, связанные с материалами, содержащимися в этом Git-репозитории, являются исключительно вашей ответственностью. Автор не несет ответственности в случае предъявления уголовных обвинений лицам, неправильно использующим информацию или программное обеспечение с этого сайта для нарушения закона.
Программа предназначена для использования в среде *nix и протестирована на различных дистрибутивах Linux и OS X:
с использованием одного из следующих компиляторов:
и одного из следующих SSH-серверов:
Единственная внешняя зависимость — библиотека OpenSSL, используемая для криптографических функций. В следующих версиях я могу ввести альтернативы OpenSSL. Эта программа предназначена для использования с версией OpenSSL не ниже:
(Это означает, что в OS X обязательно обновление).
Для компиляции программы необходимы следующие инструменты/библиотеки:
Программа обрабатывает список пользователей, переданный через конвейер, пример:
cat user.txt | ./opensshenum -i dummy_cert target_addr
xxx:NOK
gabriel:OK
где user.txt — файл, содержащий список пользователей, по одному в строке, а dummy_cert — ключ, сгенерированный командой ssh-keygen от OpenSSH (по умолчанию каталог ключей — ~/.ssh).
Программу можно использовать для генерации списка:
printf "xxx\ngabriel" | ./src/opensshenum -i dummy_rsa localhost
xxx:NOK
gabriel:OK
Смотрите man-страницу, включенную в этот релиз.
Добавлена возможность сканирования SSH-портов: теперь opensshenum может сканировать все порты, связанные с адресом, чтобы найти экземпляры SSH, прослушивающие порты, отличные от 22, и выполнить эксплойт только на проверенных портах. Эту функцию можно использовать отдельно, получая только список портов, связанных с SSH, без выполнения атаки.
Пример:
opensshenum -s -n -t2 -m22221 -M22225 -r'.*OpenSSH' -idummy_rsa my_imaginary_website.com
просканирует порты (-s) в диапазоне от 22221 до 22225 (оба включительно), выполняя только сканирование (-n), с таймаутом 2 секунды (-t), ожидая hello-строку, содержащую строку OpenSSH, используя открытый ключ с именем idummy_rsa (рекомендую сгенерировать ключ только для таких операций) и в качестве цели my_imaginary_website.com. Более подробная информация в man-странице.
Включен альфа-скрипт с использованием GNU Parallel (parallenum.sh) в качестве PoC для сокращения времени сканирования путем разделения диапазона сканируемых портов на поддиапазоны, каждый из которых относится к определенному процессу. Это, очевидно, создает много шума. Для уменьшения шума можно использовать параметр -t.
Функция снятия отпечатков, полезная для автоматической идентификации типа ОС (например, если hello-строка опущена) и служб с помощью базы данных пользователей/комбинаций пользователей. База данных создается из файлов *.lst, собранных в каталоге. Каждый файл *.lst имеет имя <os_name_or_service>.lst, примеры:
ubuntu_17_10.lst aix.lst proprietary_ftp.lst
База данных, CSV-файл, имеет формат:
user_1;os_or_service_1; ... ;os_or_service_n ... user_m;os_or_service_1; ... ;os_or_service_n
Базу данных можно создать из файлов *.lst с помощью утилиты createdb, находящейся в каталоге ./utils, указав каталог *.lst, пример:
cd utils make ./createdb ../lists/
Чтобы запросить снятие отпечатков, используйте опцию -F с файлом базы данных, пример:
cat test/scan.sample | opensshenum -p22 -idummy_rsa -Futils/opensshenum.db localhost