# NTLM-хеши

## **Что такое NTLM**

NTLM (NT LAN Manager) — это протокол аутентификации, разработанный Microsoft для проверки подлинности пользователей в Windows-средах. Он используется для подтверждения личности пользователей при доступе к сетевым ресурсам, таким как файловые серверы, принтеры или другие службы. NTLM считается менее безопасным по сравнению с Kerberos.&#x20;

{% hint style="info" %}
Если обратиться к сетевому ресурсу по доменному имени, то для авторизации будут использоваться билеты Kerberos.&#x20;

При обращении по IP, то NTLM.&#x20;
{% endhint %}

NTLM состоит из нескольких версий:

* **LM-хеш (LAN Manager)**: устаревший и небезопасный хеш, разработанный для совместимости с очень старыми системами. Использует алгоритм DES и имеет множество уязвимостей.
* **NTLM-хеш**: более современный хеш, использующий алгоритм MD4. Хотя он безопаснее LM, он всё ещё уязвим к атакам.
* **NTLMv2**: улучшенная версия, которая включает защиту от replay-атак и использует HMAC-MD5 для создания хешей. Это наиболее безопасная версия протокола

<details>

<summary><strong>Downgrade-атаки</strong></summary>

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

Например, заставляет клиента использовать NTLMv1 вместо NTLMv2.&#x20;

Downgrade-атаки становятся возможными из-за обратной совместимости. Многие системы поддерживают устаревшие версии протоколов для совместимости с более старыми клиентами или серверами.

**Пример downgrade-атаки на NTLM**

1. Злоумышленник перехватывает трафик между клиентом и сервером.
2. Он изменяет запрос клиента, указывая, что поддерживается только NTLMv1.
3. Сервер, видя, что клиент "поддерживает" только NTLMv1, соглашается на эту версию.
4. Атакующий получает NTLMv1 хеш, уязвимый к атакам, таким как brute force и rainbow tables&#x20;

В домене групповыми политиками можно запретить использовать NTLMv1.&#x20;

</details>

### **Где хранятся NTLM-хеши**

NTLM-хеши хранятся в нескольких местах в зависимости от конфигурации системы:

1. **SAM (Security Account Manager)**:
   * База данных на локальных машинах, где хранятся хеши паролей локальных пользователей.
   * SAM защищён с помощью системного ключа (Syskey), но может быть извлечён с помощью инструментов, таких как Mimikatz.
2. **LSASS (Local Security Authority Subsystem Service)**:
   * Процесс, который хранит хеши в памяти.
   * Популярная цель для атак, так как злоумышленники могут извлекать хеши из памяти.

{% content-ref url="lsass" %}
[lsass](https://vasilisa-l.gitbook.io/blue-team-cookbook/windows/lsass)
{% endcontent-ref %}

3. **Active Directory**:
   * В доменных средах хеши паролей хранятся в Active Directory в файле NTDS.dit.
   * Хеши могут быть извлечены с помощью атак, таких как DCSync.

## Атаки c использованием NTLM-хешей

* **Обычные NTLM-хеши** используются для атак Pass-the-Hash, так как они эквивалентны паролям.
* **Сетевые хеши (NetNTLM)** не могут быть использованы для PtH, но они уязвимы к атакам, таким как  NTLM Relay.

### **Обычные NTLM-хеши и Pass-the-Hash (PtH)**

Под обычными  NTLM-хешами я понимаю хеши паролей, которые хранятся в локальных или доменных системах.&#x20;

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

1. **Извлечение хеша**:
   * Злоумышленник получает NTLM-хеш с помощью инструментов, таких как Mimikatz, или извлекает его из памяти (LSASS) или базы данных (SAM).
2. **Использование хеша для аутентификации**:
   * Злоумышленник использует хеш для аутентификации на другой системе, имитируя легитимного пользователя.
   * Например, с помощью инструментов, таких как Impacket, Crack Map Exec.
3. **Получение доступа**:
   * Если аутентификация успешна, злоумышленник получает доступ к системе с правами пользователя, чей хеш был использован.

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

{% hint style="info" %}
Именно поэтому обнаружить использование хеша вместо пароля по логам практически невозможно. \
Тут работают только механизмы профилирования и отслеживания авторизаций пользователей с необычных узлов.&#x20;
{% endhint %}

### **Сетевые хеши, Responder и Relay (почему тут не получится сделать PtH)**

#### **Что такое сетевые хеши (NetNTLM)?**

Сетевые хеши (NetNTLM) — это хеши, которые используются в процессе аутентификации по протоколу NTLM в сетевых запросах. Они создаются на основе:

* Хеша пароля пользователя.
* Случайного значения (challenge), отправленного сервером.

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

***

#### **Что такое Responder?**

**Responder** — это инструмент, который используется для перехвата NetNTLM-хешей. Он работает, имитируя сетевые службы (например, SMB, HTTP, FTP) и заставляя клиентов отправлять свои NetNTLM-хеши в ответ на фишинговые запросы или в результате MiTM-атак.

***

**Как работает Responder?**

1. **Подделка сетевых служб**:
   * Responder запускается в сети и начинает отвечать на запросы, например, на запросы SMB или HTTP.
2. **Фишинг NetNTLM-хешей**:
   * Когда клиент пытается подключиться к поддельной службе, Responder отправляет challenge и получает NetNTLM-хеш в ответ.
3. **Перехват хеша**:
   * Злоумышленник получает NetNTLM-хеш, который может быть использован для дальнейших атак, таких как brute force или relay.

***

**Что такое NTLM Relay?**

**NTLM Relay** — это атака, при которой злоумышленник перехватывает NetNTLM-хеш и перенаправляет его на другой сервер для аутентификации. В отличие от PtH, здесь используется не обычный NTLM-хеш, а NetNTLM-хеш.

***

**Почему нельзя сделать PtH с NetNTLM-хешами?**

* **NetNTLM-хеши не являются эквивалентом пароля**:
  * Они создаются на основе хеша пароля и случайного значения (challenge), отправленного сервером.
  * Без знания challenge невозможно восстановить исходный NTLM-хеш.
* **Одноразовость**:
  * NetNTLM-хеши используются только для одного сеанса аутентификации и не могут быть повторно использованы для аутентификации на других системах.

***

**Как работает NTLM Relay?**

1. **Перехват NetNTLM-хеша**:
   * Злоумышленник перехватывает NetNTLM-хеш с помощью инструментов, таких как Responder.
2. **Перенаправление хеша**:
   * Злоумышленник перенаправляет хеш на другой сервер, который принимает NTLM-аутентификацию.
3. **Аутентификация на целевом сервере**:
   * Если аутентификация успешна, злоумышленник получает доступ к целевому серверу.

Классическим методом защиты от Relay-атак является включение подписи пакетов SMB (SMB Signing)

## **Обнаружение NTLM Relay**

Обнаружение Relay-атак является нетривиальной задачей и подразумевает коррелирование событий из нескольких источников данных.

Один из способов - это сопоставление IP-адреса и имени узла в событии 4624 (успешная авторизация) на узле, куда происходит перенаправление аутентификации. Назовем его атакуемый узел. \
Узлом источником назовем тот узел, который попался на уловку Responder и направил NTLM-хеш атакующему узлу. Например, он имеет имя ws-1743 и IP 10.0.0.1 \
Атакующий узел тут - это тот, кто осуществил атаку MiTM, находится между источником и атакуемым. Имеет имя kali и IP 10.0.0.2

Так вот, в событии 4624 на атакуемом узле в поле IPAddress будет IP атакующего (10.0.0.2), а имя узла источника (ws-1743), то есть будет несоответсвие информации, откуда произошла авторизация.&#x20;

{% hint style="info" %}
Такое несоответсвтие также актуально при авторизации на третьем узле через туннель. Но там наоборот имя узле будет атакующего, а IP - того узла, где проброшен туннель. \
Или если авторизация произошла через балансировщик - в этом случае такое правило может порождать ложные срабатывания.&#x20;
{% endhint %}
