Опубликовано

Новинка: “Windows глазами хакера”

Windows глазами хакера

Рассмотрена внутренняя архитектура Windows и Active Directory, подробно описаны доверенные отношения доменов и лесов, особенности работы Read-only Domain Controllers, уязвимости групповых политик и принципы управления привилегиями. Рассказывается о работе с Kerberos, инжекте и дампе, билетов, угоне пользовательских сессий, использовании WinAPI, COM и Named Pipes в пентесте, а также об обращении к нативному коду из C#. Описаны методы обхода средств защиты информации, включая анхукинг ntdll.dll, предотвращение подгрузки DLL, лазейки для исполнения стороннего кода, применение аппаратных точек останова, обход AMSI и написание раннеров для шелл-кода на .NET. Приводятся практические рекомендации по обфускации вызовов WinAPI и защите корпоративных сетей от атак.

Для пентестеров, реверс-инженеров, специалистов по информационной безопасности и защите данных

Вы узнаете

  • Пентест Active Directory
  • Поиск и эксплуатация уязвимостей в сетях Windows
  • Трюки с групповыми политиками и привилегиями
  • Kerberos и атаки на билеты
  • Практические методы кражи учетных данных
  • Инжекты и исполнение кода нестандартными способами
  • Современные методы обхода средств защиты информации
  • Практические техники пентеста Windows

Windows и Active Directory — сердце корпоративных сетей по всему миру. На этом фундаменте держатся домены, учетные записи сотрудников, базы данных и конфиденциальные ресурсы компаний. А значит, именно они всегда находятся в прицеле атакующих. Эта книга — практическое руководство для тех, кто хочет понять, как на самом деле взламывают Windows и AD: от простых методов обхода UAC и AMSI до эксплуатации доверенных отношений между доменами и написания собственных утилит с WinAPI. Здесь собраны конкретные техники и приемы, используемые пентестерами и настоящими хакерами — только практика. На страницах книги подробно разобрано, как происходит взлом корпоративных сетей, что можно выжать из архитектурных особенностей Windows, почему эта ОС содержит больше уязвимостей, чем кажется, и каким образом даже новые механизмы защиты превращаются в удобные ступеньки на пути к цели. Книга будет полезна пентестерам, реверс-инженерам, системным администраторам и специалистам по информационной безопасности, а также всем, кто хочет глубже понять внутреннее устройство Windows и научиться защищать свои сети от современных атак.
Валентин Холмогоров, ведущий редактор журнала «Хакер»

Жмайло Михаил Александрович

Жмайло Михаил Александрович — исследователь безопасности систем, пентестер, автор статей в журнале «Хакер», докладчик на многочисленных конференциях по информационной безопасности, создатель более десяти инструментов для атак на Windows.

Книгу “Windows глазами хакера” можно купить в нашем интенет-магазине.

Предисловие…………………………………………………………………………………………….. 9

От автора………………………………………………………………………………………………………………………………………. 9

От редакции………………………………………………………………………………………………………………………………… 10

Часть I. Пентест Active Directory…………………………………………… 11

Глава 1. Как работают атаки на доверенные отношения доменов и лесов AD       13

Разведка………………………………………………………………………………………………………………………………………. 14

Леса……………………………………………………………………………………………………………………………………… 14

Домены………………………………………………………………………………………………………………………………… 15

Trust Keys……………………………………………………………………………………………………………………………………. 17

Домены………………………………………………………………………………………………………………………………… 17

Леса……………………………………………………………………………………………………………………………………… 19

Выдаем себя за контроллер домена…………………………………………………………………………………. 20

Неограниченное делегирование……………………………………………………………………………………….. 20

Между доменами………………………………………………………………………………………………………. 21

Между лесами…………………………………………………………………………………………………………… 21

Ограниченное делегирование…………………………………………………………………………………………… 22

PAM Trust……………………………………………………………………………………………………………………………………. 23

Обнаружение………………………………………………………………………………………………………………………. 23

Проверка, не в бастионном лесе ли мы…………………………………………………………………………….. 24

Проверяем, не управляется ли текущий лес каким-то другим по PAM Trust………………… 25

Дополнительные проверки и новые угрозы…………………………………………………………………….. 26

Эксплуатация…………………………………………………………………………………………………………………………….. 27

Заключение………………………………………………………………………………………………………………………………… 28

Глава 2. Эксплуатируем небезопасные групповые политики…………………. 29

Структура…………………………………………………………………………………………………………………………………… 29

Обнаружение……………………………………………………………………………………………………………………………… 30

Эксплуатация…………………………………………………………………………………………………………………………….. 35

mmc……………………………………………………………………………………………………………………………………… 35

Файл .ini………………………………………………………………………………………………………………………………. 36

Создание GPO…………………………………………………………………………………………………………………….. 37

Перемещение через GPO……………………………………………………………………………………………………. 38

Заключение………………………………………………………………………………………………………………………………… 39

Глава 3. Пентестим Read-only Domain Controllers…………………………………… 40

Теория…………………………………………………………………………………………………………………………………………. 40

Определения и особенности……………………………………………………………………………………………… 40

Атрибуты…………………………………………………………………………………………………………………………….. 42

managedBy………………………………………………………………………………………………………………… 42

msDS-RevealOnDemandGroup, msDS-NeverRevealGroup………………………………………. 42

msDS-AuthenticatedToAccountList…………………………………………………………………………… 43

msDS-Revealed*………………………………………………………………………………………………………… 43

Аутентификация пользователей……………………………………………………………………………………….. 43

Поиск RODC……………………………………………………………………………………………………………………………….. 44

Получение кешированных паролей с RODC…………………………………………………………………………… 46

DSRM………………………………………………………………………………………………………………………………………….. 48

Особенности работы Kerberos с RODC……………………………………………………………………………………. 48

Key List………………………………………………………………………………………………………………………………………… 50

Контроль над объектом RODC…………………………………………………………………………………………………. 52

Заключение………………………………………………………………………………………………………………………………… 53

Часть II. Системное программирование для хакеров…….. 55

Глава 4. Изучаем возможности WinAPI для пентестера………………………….. 57

SID и токены……………………………………………………………………………………………………………………………….. 57

Токен и процесс………………………………………………………………………………………………………………………….. 58

Приступаем к работе…………………………………………………………………………………………………………………. 59

Получаем токен………………………………………………………………………………………………………………….. 59

Проверка наличия привилегии в токене…………………………………………………………………………… 60

Изменение информации токена…………………………………………………………………………………………. 61

Выполнение кода с использованием токена……………………………………………………………………………. 63

Создание процесса…………………………………………………………………………………………………………….. 63

Применение к потоку…………………………………………………………………………………………………………. 65

Заимствование прав подключенного пользователя……………………………………………………………….. 65

Без установления соединения…………………………………………………………………………………………… 65

Именованные каналы………………………………………………………………………………………………………… 66

Сокеты или другой механизм взаимодействия……………………………………………………………………….. 67

Начало работы…………………………………………………………………………………………………………………… 67

Роль клиента……………………………………………………………………………………………………………………….. 69

Роль сервера……………………………………………………………………………………………………………………….. 73

Использование полного контекста…………………………………………………………………………………… 75

Имперсонация…………………………………………………………………………………………………………………….. 75

RevertSecurityContext()……………………………………………………………………………………………… 76

Получение токена из контекста……………………………………………………………………………….. 76

Заключение………………………………………………………………………………………………………………………………… 76

Глава 5. Получаем билеты TGT методом GIUDA……………………………………. 77

Logon Session………………………………………………………………………………………………………………………………. 77

Как LSA запрашивает билеты Kerberos…………………………………………………………………………………… 84

Крадем билет……………………………………………………………………………………………………………………………… 85

TGT — это TGS…………………………………………………………………………………………………………………………… 91

Заключение………………………………………………………………………………………………………………………………… 92

Глава 6. Управляем привилегиями в Windows……………………………………….. 93

Добавляем привилегии аккаунту……………………………………………………………………………………………… 93

Запускаем процесс с привилегией………………………………………………………………………………………….. 102

Удаляем привилегию из аккаунта………………………………………………………………………………………….. 105

Ищем объекты с привилегией…………………………………………………………………………………………………. 107

Смотрим привилегии объекта…………………………………………………………………………………………………. 110

Заключение………………………………………………………………………………………………………………………………. 111

Глава 7. Поставщик небезопасности. Как Windows раскрывает
пароль пользователя…………………………………………………………………………….. 112

Компоненты безопасности……………………………………………………………………………………………………… 112

Security Package………………………………………………………………………………………………………………… 113

SSP/AP (или же просто AP)………………………………………………………………………………………………. 113

Security Providers………………………………………………………………………………………………………………. 114

Credential Providers…………………………………………………………………………………………………………… 115

Password Filters………………………………………………………………………………………………………………….. 115

Как происходит вход пользователя в систему………………………………………………………………. 115

Инициализация LSA…………………………………………………………………………………………………………. 119

Эксплуатация…………………………………………………………………………………………………………………………… 123

Как дебажить?………………………………………………………………………………………………………………….. 123

Перехват пароля с помощью внедрения Security Package……………………………………………. 125

Требования………………………………………………………………………………………………………………. 125

Загрузка в систему………………………………………………………………………………………………….. 125

Проверка………………………………………………………………………………………………………………….. 126

Перехват пароля……………………………………………………………………………………………………… 126

Перехват пароля с помощью внедрения Password Filter……………………………………………….. 130

Требования………………………………………………………………………………………………………………. 130

Загрузка в систему………………………………………………………………………………………………….. 130

Перехват пароля……………………………………………………………………………………………………… 130

Запрещаем пользователям менять пароль……………………………………………………………. 132

Перехват пароля с помощью диспетчера учетных данных…………………………………………. 133

Теория………………………………………………………………………………………………………………………. 133

Добавление в систему…………………………………………………………………………………………….. 133

Перехват пароля……………………………………………………………………………………………………… 135

Заключение………………………………………………………………………………………………………………………………. 138

Глава 8. Долой Mimikatz! Инжектим тикеты своими руками……………….. 139

Получение тикета…………………………………………………………………………………………………………………….. 139

Подключение к LSA…………………………………………………………………………………………………………………. 141

Обнаружение AP………………………………………………………………………………………………………………………. 143

Внедрение билета……………………………………………………………………………………………………………………. 144

Проверка…………………………………………………………………………………………………………………………………… 146

Заключение………………………………………………………………………………………………………………………………. 146

Глава 9. Как дампить тикеты Kerberos на C++……………………………………. 149

Kerberos AP……………………………………………………………………………………………………………………………….. 149

Начало работы………………………………………………………………………………………………………………………… 150

Особенности дампа…………………………………………………………………………………………………………………. 155

Подключение к LSA…………………………………………………………………………………………………………………. 156

Получение ID……………………………………………………………………………………………………………………………. 161

Перечисляем все LUID…………………………………………………………………………………………………………….. 162

Изучение кеша………………………………………………………………………………………………………………………….. 166

Дамп тикета……………………………………………………………………………………………………………………………… 171

Заключение………………………………………………………………………………………………………………………………. 179

Глава 10. Как злоупотреблять хендлами в Windows……………………………… 180

Интересные хендлы…………………………………………………………………………………………………………………. 180

Изучение хендлов процесса……………………………………………………………………………………………………. 181

Handle Duplicating……………………………………………………………………………………………………………………. 181

Leaked Handle………………………………………………………………………………………………………………………….. 192

Handle Hijacking………………………………………………………………………………………………………………………. 193

Заключение………………………………………………………………………………………………………………………………. 204

Глава 11. Достаем учетные данные Windows, не трогая LSASS…………….. 205

Реквизиты, контекст и блобы………………………………………………………………………………………………….. 206

Известные атаки………………………………………………………………………………………………………………………. 207

Внутренний монолог……………………………………………………………………………………………………………….. 209

Заключение………………………………………………………………………………………………………………………………. 217

Глава 12. Ищем способы обращения к нативному коду из C#……………… 218

Platform Invoke………………………………………………………………………………………………………………………… 218

Dynamic Invoke………………………………………………………………………………………………………………………… 221

Parasite Invoke………………………………………………………………………………………………………………………….. 227

Dynamic PInvoke……………………………………………………………………………………………………………………… 230

Hash Invoke………………………………………………………………………………………………………………………………. 234

Заключение………………………………………………………………………………………………………………………………. 236

Глава 13. Как работает угон пользовательских сессий в Windows………… 237

Поиск сессий пользователей…………………………………………………………………………………………………… 237

WinAPI………………………………………………………………………………………………………………………………. 238

Реестр………………………………………………………………………………………………………………………………… 241

Через SCCM………………………………………………………………………………………………………………………. 243

Через RDP-сессии……………………………………………………………………………………………………………… 244

Логи…………………………………………………………………………………………………………………………………… 244

Процессы…………………………………………………………………………………………………………………………… 248

Кража сессий……………………………………………………………………………………………………………………………. 248

Воруем TGS………………………………………………………………………………………………………………………. 248

Манипуляции с токенами………………………………………………………………………………………………… 250

RemotePotato0………………………………………………………………………………………………………………….. 251

Запрос чужих сертификатов…………………………………………………………………………………………… 251

SeMishaPrivilege………………………………………………………………………………………………………………… 252

Leaked Wallpaper……………………………………………………………………………………………………………… 253

Заключение………………………………………………………………………………………………………………………………. 255

Глава 14. Используем Named Pipes при атаке на Windows…………………….. 256

Что такое Pipe…………………………………………………………………………………………………………………………… 256

Пример клиента и сервера………………………………………………………………………………………………………. 258

Изучение доступных пайпов…………………………………………………………………………………………………… 259

Process Hacker…………………………………………………………………………………………………………………… 259

C++…………………………………………………………………………………………………………………………………….. 260

PowerShell………………………………………………………………………………………………………………………….. 262

IO Ninja……………………………………………………………………………………………………………………………… 263

PipeViewer………………………………………………………………………………………………………………………….. 263

Имперсонация клиентов………………………………………………………………………………………………………….. 263

Чейн с SeImpersonate……………………………………………………………………………………………………………….. 268

Скрытое чтение данных………………………………………………………………………………………………………….. 271

Гонка пайпов……………………………………………………………………………………………………………………………. 272

Заключение………………………………………………………………………………………………………………………………. 278

Глава 15. Исследуем обход UAC на примере Elevation Moniker…………….. 279

Моникеры…………………………………………………………………………………………………………………………………. 279

Подвиды моникеров…………………………………………………………………………………………………………………. 281

Регистрация Elevation Moniker……………………………………………………………………………………………….. 281

Использование Elevation Moniker…………………………………………………………………………………………… 286

Примеры COM-объектов…………………………………………………………………………………………………………. 287

ICMLuaUtil……………………………………………………………………………………………………………………….. 287

IFileOperation…………………………………………………………………………………………………………………….. 289

Заключение………………………………………………………………………………………………………………………………. 290

Глава 16. Как работает кража сессии через механизм COM…………………. 291

Logon Sessions…………………………………………………………………………………………………………………………… 291

Session Moniker…………………………………………………………………………………………………………………………. 295

Запуск процесса в чужой сессии……………………………………………………………………………………………. 301

Утечка хеша пароля при смене обоев……………………………………………………………………………………. 302

Заключение………………………………………………………………………………………………………………………………. 304

Часть III. Способы обхода средств защиты информации 305

Глава 17. Познаем анхукинг ntdll.dll…………………………………………………….. 307

Снятие хука через чтение библиотеки с диска……………………………………………………………………… 308

Снятие хука через KnownDlls………………………………………………………………………………………………….. 321

Снятие хука через приостановленный процесс……………………………………………………………………. 329

Снятие хука через подгрузку ntdll.dll с удаленного веб-сервера…………………………………………. 335

Заключение………………………………………………………………………………………………………………………………. 345

Глава 18. Изучаем методы предотвращения подгрузки DLL………………… 346

UpdateProcThreadAttribute………………………………………………………………………………………………………. 346

SetProcessMitigationPolicy………………………………………………………………………………………………………… 353

Включение ACG……………………………………………………………………………………………………………………….. 355

Запуск процесса с DEBUG………………………………………………………………………………………………………. 359

Хук на NtCreateSection…………………………………………………………………………………………………………….. 362

Простой вариант………………………………………………………………………………………………………………. 362

Модифицированный вариант…………………………………………………………………………………………. 363

WMI…………………………………………………………………………………………………………………………………………… 364

DLL Notification Callbacks………………………………………………………………………………………………………. 367

ETW (Kernel Provider)……………………………………………………………………………………………………………….. 370

Заключение………………………………………………………………………………………………………………………………. 373

Глава 19. Ищем в Windows лазейки для исполнения стороннего кода….. 374

DLL Redirection………………………………………………………………………………………………………………………… 375

Для обычных исполняемых файлов……………………………………………………………………………….. 375

Сборки .NET……………………………………………………………………………………………………………………… 381

Image Path Name Spoofing………………………………………………………………………………………………………. 383

Теория……………………………………………………………………………………………………………………………….. 383

Реализация………………………………………………………………………………………………………………………… 384

WinSxS………………………………………………………………………………………………………………………………………. 387

svchost.exe………………………………………………………………………………………………………………………………… 391

LSASS Driver……………………………………………………………………………………………………………………………… 391

Заключение………………………………………………………………………………………………………………………………. 392

Глава 20. Используем хардверные брейк-пойнты в пентестерских целях 393

Обработка исключений…………………………………………………………………………………………………………… 394

Установка hardware breakpoint………………………………………………………………………………………………. 402

Обход AMSI……………………………………………………………………………………………………………………………… 406

Извлечение номеров сисколов………………………………………………………………………………………………… 408

Анхукинг…………………………………………………………………………………………………………………………………… 412

Пишем кастомный GetThreadContext()………………………………………………………………………………….. 413

Ставим хуки……………………………………………………………………………………………………………………………… 416

Заключение………………………………………………………………………………………………………………………………. 416

Глава 21. Изучаем новый способ обхода AMSI в Windows……………………. 417

Становимся дебаггером…………………………………………………………………………………………………………… 417

Избегаем использования функции DebugActiveProcess………………………………………………………… 423

Заключение………………………………………………………………………………………………………………………………. 424

Глава 22. Замена для WinAPI. Пишем раннер для шелл-кода
на чистом .NET…………………………………………………………………………………….. 425

Синхронизация через Sleep…………………………………………………………………………………………………….. 427

Поток без CreateThread()…………………………………………………………………………………………………………. 429

Копируем память ручками……………………………………………………………………………………………………… 433

Выделяем исполняемую память без WinAPI…………………………………………………………………………. 436

Делегаты…………………………………………………………………………………………………………………………… 436

EmitAlloc()…………………………………………………………………………………………………………………………. 437

Заключение………………………………………………………………………………………………………………………………. 440

Глава 23. Обфусцируем вызовы WinAPI новыми способами………………… 441

Проксирование вызовов………………………………………………………………………………………………………….. 442

Теория……………………………………………………………………………………………………………………………….. 442

Обнаружение прокси-функций……………………………………………………………………………………….. 443

Таблица экспортов/импортов………………………………………………………………………………… 443

Бинарный анализ……………………………………………………………………………………………………. 443

Пример с DphCommitMemoryFromPageHeap……………………………………………………………….. 450

Через RPC………………………………………………………………………………………………………………………….. 453

Используем альтернативные функции…………………………………………………………………………………… 455

Теория……………………………………………………………………………………………………………………………….. 455

Замена CRT………………………………………………………………………………………………………………………. 455

Через ссылки на структуры Windows……………………………………………………………………………… 456

Изучаем COM…………………………………………………………………………………………………………………… 460

Замена ReadProcessMemory()…………………………………………………………………………………………. 460

Замена WriteProcessMemory()…………………………………………………………………………………………. 461

Где искать альтернативы………………………………………………………………………………………………… 461

Заключение………………………………………………………………………………………………………………………………. 461

Предметный указатель…………………………………………………………………………. 462

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