Получение в открытом виде паролей пользователей, авторизованных в Windows | Windows для системных администраторов

Получение в открытом виде паролей пользователей, авторизованных в Windows

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

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

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

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

Так, например, механизм дайджест-аутентификации (HTTP Digest Authentication), используемый для поддержки SSO (Single Sign On), для своей работы требует знания вводимого пароля пользователя, а не только его хеша (о том, почему разработчиками это было сделано именно так, можно только догадываться).  Пароли (именно пароли, а не их хэши) пользователей в зашифрованной форме хранятся в памяти  ОС, а если быть более точным в процессе LSASS.EXE. Проблема в том, что шифрование паролей реализовано с помощью стандартных функций Win32 LsaProtectMemory и LsaUnprotectMemory, которые предназначены для шифрования/расшифровки некоторого участка памяти. Утилита французских разработчиков mimikatz позволяет получать зашифрованные данные из памяти и расшифровывать их с помощью функции LsaUnprotectMemory, позволяя вывести на консоль все учетные записи пользователей, авторизованных в системе,  и их пароли (в открытом, уже расшифрованном виде!). Для эксплуатации уязвимости атакующий должен иметь возможность присоединить специальную библиотеку к процессу lsass.exe.

Скачать утилиту mimikatz можно тут: http://blog.gentilkiwi.com/mimikatz

Инфо. Утилита mimikatz детектируется большинством антивирусов, как потенциально опасное ПО (хакерская утилита).

Утилита mimikatz позволяет извлечь пароли пользователей непосредственно из памяти (путем инъекции  в lsass.exe библиотеки sekurlsa.dll) либо из дампа памяти компьютера.

Извлекаем пароли пользователей из lsass.exe онлайн


  • Скачайте и запустите Mimikatz.exe (есть x86 и x64-версии утилиты для соответствующих систем)
  • В контексте утилиты выполняем команды

mimikatz # privilege::debug
mimikatz # sekurlsa::logonPasswords full
(последняя команда отобразит все учетные записи и пароли пользователей, имеющих сессии в системе).

Mimikatz показать пароли всех пользователей, авторизовавшихся в windows системе

Как вы видите, утилита показала нам пароль пользователя user.

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

Получение пароля пользователя из дампа памяти Windows


Дамп памяти для процесса LSASS можно получить с помощью PowerShell функции Out-Minidump.ps1 . Импортируйте функцию Out-Minidump в PoSh и создайте дамп памяти процесса LSASS:

Get-Process lsass | Out-Minidump

Get-Process-lsass Powershell

Получившийся дамп памяти, в нашем примере это lsass_592.dmp (по умолчанию он сохраняется в каталоге %windir\system32%) нужно скопировать на другую систему, в которой имеется утилита mimikatz и выполнить команду:

Mimikatz “sekurlsa::minidump lsass_592.dmp”

И следующей командой получим список пользователей, работающих в системе и их пароли:

mimikatz # sekurlsa::logonPasswords

windows узнать пароль пользователя из дампа памяти

Как вы видите, ничего сложного.

Получение паролей из файлов виртуальных машины и файлов гибернации

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

Для этого понадобится пакет Debugging Tool for Windows (WinDbg), сам mimikatz и утилита преобразования .vmem в файл дампа памяти (для Hyper-V это может быть vm2dmp.exe или MoonSols Windows Memory toolkit для vmem файлов VMWare).

Например, в случае необходимости преобразовать файл подкачки vmem виртуальной машины VMWare в дамп, выполним команду:

bin2dmp.exe "winsrv2008r2.vmem" vmware.dmp

Полученный дамп загружаем в WinDbg (File -> Open Crash Dump), загружаем библиотеку mimikatz  с именем mimilib.dll (версию выбрать в зависимости от разрядности системы):

.load mimilib.dll

Ищем в дампе процесс lsass.exe:

!process 0 0 lsass.exe

Поиск в дампе памяти процесса lsassИ наконец, набираем

.process /r /p fffffa800e0b3b30
!mimikatz

и получаем список пользователей Windows и их пароли в открытом виде:

Получаем пароль пользователя Windows

Получение паролей пользователей Windows в открытом виде с помощью утилиты Mimikatz работает на следующих системах, в том числе запущенных на гипервизорах Hyper-V 2008/2012 и VMWare различных версий:

  • Windows Server 2008 / 2008  R2
  • Windows Server 2012/ R2
  • Windows 7
  • Windows 8
Примечание. Кстати говоря, функционал mimikatz уже внедрен в Metasploit Framework.

Возможно ли защититься от получения пароля через mimikatz?

В качестве временного решения можно предложить отключить поставщика безопасности wdigest через реестр. Для этого в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa найдите ключ Security Packages и удалить из списка пакетов строку wdigest. Отключаем провайдера wdigest  в ветке LSA системы

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

Выводы. Еще раз напоминаем прописные истины:

  • Не стоит использовать одинаковые пароли для разных сервисов (особенно терминальных, находящихся во владении третьих лиц).
  • Задумайтесь о безопасности ваших паролей и данных, находящихся на виртуальных машинах в столь рекламируемых сейчас облаках, ведь вы не можете быть уверенными в том, у кого еще имеется доступ к гипервизорам и хранилищу, на котором  расположены виртуальные машины.
  • Минимизируйте в своих системах количество учетных записей, обладающих правами локального администратора
  • Никогда не заходите с учетной записью администратора домена на сервера и компьютеры, доступные другим пользователям
Еще записи по теме: Windows 7
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

Комментариев: 12

Оставить комментарий
  1. gentilkiwi | 24.12.2013

    Mimikatz не вводить DLL вообще, начиная с версии 2.0.

    Ответить
    • itpro | 30.12.2013

      Спасибо авторам за утилиту и за уточнение :)

      Ответить
  2. Iva | 14.01.2014

    В 8 не отображает пароли)

    Ответить
    • gentilkiwi | 17.01.2014

      Windows 8.1 не сохраняет пароли в памяти. При активации он находит

      Ответить
  3. Sergey | 16.01.2014

    В Server 2008 R2 тоже не выводит пароли.

    Ответить
    • gentilkiwi | 17.01.2014

      Испытано 64-разрядной версии.
      mimikatz 2.0 alpha (arch x64)
      API    —  Windows NT 6.1 build 7601 service pack 1.0 (arch x64)

      Скриншот из строя?

      Ответить
  4. Sergey | 16.01.2014

    По крайней мере, терминальных пользователей.

    Ответить
  5. Евгений | 26.03.2014

    Спасибо за статью! Подскажите как «Импоровать функцию Out-Minidump в PoSh» ?

    Ответить
    • itpro | 27.03.2014

      Скачайте указанный файл и сохраните на диске. Чтобы импортировать функцию Posh из файла, выполните команду:
      Import-Module C:\Script\Out-Minidump.ps1
      В итоге функция Out-Minidump будет доступна в текущей сессии Posh

      Ответить
  6. gentilkiwi | 27.03.2014

    В «Минидампы» также может быть сделано непосредственно в «Task Manager» или «ProcDump» Microsoft ;)

    Ответить
    • itpro | 27.03.2014

      you’re right. dump can be obtained by such methods too
       

      Ответить
      • gentilkiwi | 28.03.2014

        You rock ! Thank you for great articles and you for the effort to answer me in English!

        Ответить
Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)



MAXCACHE: 0.26MB/0.00116 sec