Bruteforce забытого пароля

Иногда сталкиваешься с ситуациями, когда коллеги приходят и просят «хакнуть» документ или архив, который они защитили паролем, но вспомнить его не могут. Иногда эта ситуация подкрепляется руководящими указаниями, поэтому отвертеться нельзя и приходится заниматься этим.

Итак — типичный пациент, документ Microsoft© Word™ в формате MS-DOCX защищенный паролем. Т.к. этот формат — простой контейнер на основе zip-ахива, просто распаковываем его, смотрим внутрь и видим следующее:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<encryption xmlns="http://schemas.microsoft.com/office/2006/encryption" xmlns:p="http://schemas.microsoft.com/office/2006/keyEncryptor/password">
 <keyData saltSize="16" blockSize="16" keyBits="128" hashSize="20" cipherAlgorithm="AES" cipherChaining="ChainingModeCBC" hashAlgorithm="SHA1"
 saltValue="UQsVAfYFNhmrsYsW4gntOA=="/>
  <dataIntegrity encryptedHmacKey="YSYAzlzVYUcAmiYtBW/q5ViSol37B8LNqnpxw3hZVuY=" encryptedHmacValue="FHqD1u7s0k9GA3+Rah2JuMt9b3UI0h9nV3T/ifrPbEg="/>
  <keyEncryptors>
   <keyEncryptor uri="http://schemas.microsoft.com/office/2006/keyEncryptor/password"><p:encryptedKey spinCount="100000" saltSize="16" blockSize="16"
   keyBits="128" hashSize="20" cipherAlgorithm="AES" cipherChaining="ChainingModeCBC" hashAlgorithm="SHA1" saltValue="yJ5+4n+K23xuMtBwmkCqSA=="
   encryptedVerifierHashInput="+EMRMBEPwud6l2XhbaDMeg==" encryptedVerifierHashValue="2dUx52rzyy0kyoiGUKM9YL/xLdtefK3+ZB+NVVWnrmU="
   encryptedKeyValue="qK2kXyKTwYmYoSw7hdVM5Q=="/>
  </keyEncryptor>
 </keyEncryptors>
</encryption>

Согласно спецификациям, это крипто-контейнер MS Office™ 2010, который для шифрования использует AES128, а для хэш-функции — SHA1, которая 100 тыс. раз применяется к парольной фразе. Нехило. Для борьбы с этим есть два варианта, точнее три, но первый — использовать уязвимость в алгоритме шифрования не получится, т.к. таковую пока не нашли. Итак — есть две опции: bruteforce-атака и dictionary-атака. Вариант с перебором оставим на потом, т.к. это малореально подобрать пароль на простом офисном оборудовании. Есть специализированные железки, стоимостью сотни тысяч долларов для брутфорса за конечное время, но как вы понимаете — это не для данной ситуации. Поэтому наиболее оптимальный и эффективный способ — это атака по словарю. Для подбора пароля по словарю есть много замечательного софта, однако наиболее оптимальным в данной ситуации(в основном из-за поддержки огромного количества алгоритмов хэш-функций) является hashcat. Немаловажным преимуществом этой брутилки в том, что она поддерживает работу на GPU, что в десятки раз ускоряет работу по подбору. Для сравнения — перебор на GTX 770 и на Intel i7-4771 со словарем в 10 млн значений составляет в первом случае — 1.5 часа, а во втором — около 10 часов.

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

office2john.py document.docx
document.docx:$office$*2010*100000*128*16*c89e7ee27f8adb7c6e32d0709a40aa48*f8431130110fc2e77a9765e16da0cc7a*d9d531e76af3cb2d24ca888650a33d60bff12ddb5e7cadfe641f8d5555a7ae65

Далее ищем словари для перебора например здесь и натравливаем сам hashcat на этот хэш и ждем:

hashcat -a 0 -m 9500 -w 1 --username -o decrypt.txt hash.txt ./dictionary/wordlist.txt

Где —username, это режим подбора, когда первое значение в hash.txt (файл, куда мы поместили сам хэш) до двоеточия расценивается как имя пользователя, -a 0 — «прямой» или «тупой» режим перебора, -m — тип хэша, который надо подбирать, -w — режим энергопотребления, чем значение выше, тем менее отзывчива ваша система, на последнем 4 уровне система уходит в себя и единственное, что можно сделать, это дождаться окончания перебора или сгорания оборудования от перегрева, если вы заранее не позаботились о хорошем охлаждении, -o — в какой файл выводить результат.

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

Исход дела был тоже интересным — я получил поощрение, а сотруднику была прочитана лекция о необходимости в качестве пароля пользоваться чем-то более безопасным.

Как всегда при подготовке статьи я пользовался опытом зарубежных коллег.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.