Выполните атаку по словарю на забытую парольную фразу LUKS для доступа к зашифрованному устройству.
Предпосылки
Сохраните резервную копию заголовка LUKS, так как использование всего устройства может быть очень громоздким.
$ file luks_header_backup
luks_header_backup: LUKS encrypted file, ver 1 [aes, xts-plain64, sha256] UUID: ac32a865-2716-43e3-8db9-798
Для hashcat вам также понадобится первый сектор из полезной нагрузки.
$ sudo dd if=/dev/sdb1 of=extended-luks-header bs=1M count=5 5+0 records in 5+0 records out 5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.0273016 s, 192 MB/s
Создайте файл словаря с каждой возможной комбинацией парольной фразы, по одной на строку.
$ cat passphrases-dictionary
somepasssphrase potentialpasssphrase maybethispassphrase [...]
bruteforce-luks
Установите пакет bruterforce-luks
$ sudo apt-get install bruteforce-luks
Вы всегда можете скачать исходный код непосредственно из GitHub-репозитория bruteforce-luks.
$ bruteforce-luks bruteforce-luks 1.3.1 Usage: bruteforce-luks [options] <path to LUKS volume> Options: -b <string> Beginning of the password. default: "" -e <string> End of the password. default: "" -f <file> Read the passwords from a file instead of generating them. -h Show help and quit. -l <length> Minimum password length (beginning and end included). default: 1 -m <length> Maximum password length (beginning and end included). default: 8 -s <string> Password character set. default: "0123456789ABCDEFGHIJKLMNOPQRSTU VWXYZabcdefghijklmnopqrstuvwxyz" -t <n> Number of threads to use. default: 1 -v <n> Print progress info every n seconds. -w <file> Restore the state of a previous session if the file exists, then write the state to the file regularly (~ every minute). Sending a USR1 signal to a running bruteforce-luks process makes it print progress info to standard error and continue. Error: missing path to LUKS volume.
Чтобы выполнить атаку по словарю с использованием bruteforce-luks версии 1.3.1, вам необходимо определить количество потоков (см. Раздел additional notes), промежуток времени между выводом информации о ходе выполнения, файл сеанса, который можно использовать для продолжения атаки позже, файл, содержащий возможные парольные фразы и резервная копия заголовка LUKS.
$ bruteforce-luks -t 4 -v 60 -w state_file -f passphrases-dictionary luks_header_backup
Warning: using dictionary mode, ignoring options -b, -e, -l, -m and -s. Warning: restoring state, ignoring options -b, -e, -f, -l, -m and -s. Tried passwords: 2858 Tried passwords per second: 1.576393 Last tried password: anypassphrase1 [...]
state_file содержит основную информацию и текущий прогресс
$ cat state_file
luks luks_header_backup time 356922 dictionary passphrases-disctionay 662870
hashcat
Установите пакет hashcat.
$ sudo apt-get install hashcat
Я буду использовать версию 5.1.0.
$ hashcat --version
v5.1.0
Для выполнения атаки по словарю с использованием hashcat версии 5.1.0 необходимо принудительно выполнить (в случае, если OpenCL не имеет доступного графического процессора), определить тип хэша LUKS, режим атаки (straight), файл для хранения найденной парольной фразы, файл, содержащий возможные парольные фразы и расширенное резервное копирование заголовка LUKS.
$ hashcat --force --hash-type 14600 --attack-mode 0 --outfile recovered_passphrase ./extended_luks_header passphrases-dictionary
hashcat (v5.1.0) starting... OpenCL Platform #1: The pocl project ==================================== * Device #1: pthread-Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz, 256/740 MB allocatable, 1MCU Hashes: 2 digests; 2 unique digests, 2 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates Rules: 1 Applicable optimizers: * Zero-Byte * Slow-Hash-SIMD-LOOP Minimum password length supported by kernel: 0 Maximum password length supported by kernel: 256 Watchdog: Hardware monitoring interface not found on your system. Watchdog: Temperature abort trigger disabled. * Device #1: build_opts '-cl-std=CL1.2 -I OpenCL -I /usr/share/hashcat/OpenCL -D LOCAL_MEM_TYPE=2 -D VENDOR_ID=64 -D CUDA_ARCH=0 -D AMD_ROCM=0 -D VECT_SIZE=8 -D DEVICE_TYPE=2 -D DGST_R0=0 -D DGST_R1=1 -D DGST_R2=2 -D DGST_R3=3 -D DGST_ELEM=16 -D KERN_TYPE=14621 -D _unroll' Dictionary cache hit: * Filename..: passphrases-dictionary * Passwords.: 2556 * Bytes.....: 43464 * Keyspace..: 2556 * Runtime...: 0 secs - Device #1: autotuned kernel-accel to 256 - Device #1: autotuned kernel-loops to 256 [s]tatus [p]ause [r]esume [b]ypass heckpoint [q]uit => s Session..........: hashcat Status...........: Running Hash.Type........: LUKS Hash.Target......: /root/new-header.luks Time.Started.....: Sun Jan 6 02:39:52 2019 (8 mins, 42 secs) Time.Estimated...: Sun Jan 6 02:50:22 2019 (1 min, 48 secs) Guess.Base.......: File (/root/notebook/l5) Guess.Queue......: 1/1 (100.00%) Speed.Dev.#1.....: 5 H/s (19.29ms) Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts Progress.........: 2048/2556 (80.13%) Rejected.........: 0/2048 (0.00%) Restore.Point....: 2048/2556 (80.13%) Candidates.#1....: linux@click@2018! -> debian-linux-2018! HWMon.Dev.#1.....: N/A [...]
Используйте опцию -s, чтобы пропустить количество слов.
$ hashcat --force --hash-type 14600 -s 1002 --attack-mode 0 --outfile recovered_passphrase ./extended_luks_header passphrases-dictionary
Дополнительные примечания
Отображение количества процессоров для определения используемых потоков.
$ LC_ALL=C lscpu | awk -F: '/^CPU\(s\):/ { gsub(" ","",$2); print $2}'
4 Если вы не можете принудительно запустить hashcat и не имеете дополнительного графического процессора (ошибка clGetDeviceIDs (): CL_DEVICE_NOT_FOUND), тогда установите «родную» цель, которая позволяет запускать ядра OpenCL на центральном процессоре хоста.
$ sudo apt-get install pocl-opencl-icd
¯\_(ツ)_/¯
Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.