В декабре 2024 года Microsoft Threat Intelligence зафиксировала ограниченную активность неизвестного злоумышленника, который использовал публично доступный статический ключ ASP.NET для внедрения вредоносного кода и доставки фреймворка для пост-эксплуатации Godzilla. В ходе расследования и разработки мер защиты Microsoft выявила небезопасную практику, при которой разработчики интегрировали публично раскрытые ключи ASP.NET из открытых источников, таких как документация и репозитории кода. Это позволило злоумышленникам совершать атаки на целевые серверы.
Microsoft обнаружила более 3 000 публично доступных ключей, которые могут использоваться для атак путем инъекций кода через ViewState. Ранее подобные атаки основывались на скомпрометированных или украденных ключах, которые часто продаются на теневых форумах. Однако публично раскрытые ключи представляют ещё большую угрозу, так как они широко доступны и могли быть случайно включены в код во время разработки.
Microsoft рекомендует организациям не использовать ключи из публичных источников и регулярно их обновлять. Microsoft Defender for Endpoint помогает снизить риск, выявляя публично раскрытые ключи. Чтобы дополнительно предотвратить эту практику, компания также удалила образцы ключей из ограниченного числа своих публичных документов.
Если ключи становятся доступными злоумышленникам, они могут создать вредоносный ViewState и отправить его через POST-запрос на сайт. ASP.NET обработает этот запрос, так как ключи будут считаться корректными, что позволит загрузить и выполнить вредоносный код в памяти процесса на целевом веб-сервере IIS.
Godzilla предоставляет злоумышленникам возможности выполнения команд, инъекции shell-кодов и другие функции.
Обнаружение публично раскрытых ключей
Microsoft Defender for Endpoint оповещает о наличии публичных ключей, но эти оповещения не обязательно связаны с атаками. Microsoft также предоставила хэш-значения выявленных ключей в своем репозитории GitHub. Рекомендуется проверить ключи с помощью предоставленного скрипта и следовать следующим рекомендациям:
Через IIS Manager:
Через PowerShell:
Microsoft обнаружила более 3 000 публично доступных ключей, которые могут использоваться для атак путем инъекций кода через ViewState. Ранее подобные атаки основывались на скомпрометированных или украденных ключах, которые часто продаются на теневых форумах. Однако публично раскрытые ключи представляют ещё большую угрозу, так как они широко доступны и могли быть случайно включены в код во время разработки.
Microsoft рекомендует организациям не использовать ключи из публичных источников и регулярно их обновлять. Microsoft Defender for Endpoint помогает снизить риск, выявляя публично раскрытые ключи. Чтобы дополнительно предотвратить эту практику, компания также удалила образцы ключей из ограниченного числа своих публичных документов.
Что такое атаки через ViewState-инъекции?
ViewState — это механизм ASP.NET Web Forms для сохранения состояния страницы и элементов управления между запросами. Данные ViewState хранятся в скрытом поле страницы и кодируются в формате Base64. Для защиты ViewState от подделки и утечки информации ASP.NET использует ключи ValidationKey и DecryptionKey.- ValidationKey создаёт код аутентификации сообщений (MAC), который прикрепляется к ViewState.
- DecryptionKey отвечает за опциональное шифрование ViewState.
Если ключи становятся доступными злоумышленникам, они могут создать вредоносный ViewState и отправить его через POST-запрос на сайт. ASP.NET обработает этот запрос, так как ключи будут считаться корректными, что позволит загрузить и выполнить вредоносный код в памяти процесса на целевом веб-сервере IIS.
Инцидент с ViewState-инъекцией и использование фреймворка Godzilla
В декабре 2024 года злоумышленники использовали публично доступный ключ ASP.NET для проведения атаки через ViewState-инъекцию. Вредоносный ViewState загрузил библиотеку assembly.dll (SHA-256: 19d87910d1a7ad9632161fd9dd6a54c8a059a64fc5f5a41cf5055cd37ec0499d), которая связана с фреймворком для пост-эксплуатации Godzilla, а затем подключил дополнительные модули.Godzilla предоставляет злоумышленникам возможности выполнения команд, инъекции shell-кодов и другие функции.
Рекомендации по устранению уязвимостей
Обнаружение публично раскрытых ключей
Microsoft Defender for Endpoint оповещает о наличии публичных ключей, но эти оповещения не обязательно связаны с атаками. Microsoft также предоставила хэш-значения выявленных ключей в своем репозитории GitHub. Рекомендуется проверить ключи с помощью предоставленного скрипта и следовать следующим рекомендациям:
Варианты устранения
- Если используется ASP.NET приложение (.NET Framework)
- Для серверов веб-фермы необходимо заменить ключи на всех серверах с использованием консоли IIS Manager или PowerShell. Убедитесь, что на всех серверах используются одинаковые новые ключи.
- Для одиночного сервера можно удалить элемент <machineKey> из файла конфигурации web.config, чтобы вернуться к автоматически генерируемым значениям ключей.
- Если используются SharePoint или Exchange
Эти приложения имеют собственные механизмы управления ключами. Рекомендуется ознакомиться с документацией по ротации ключей.
Инструкции по смене ключей
Через IIS Manager:
- Выберите веб-сайт или приложение с фиксированными ключами.
- Нажмите Machine Key, затем Generate Keys, чтобы создать новые значения.
- Нажмите Apply, чтобы сохранить изменения.
- Чтобы удалить фиксированные ключи, выберите Automatically generate at runtime и сохраните изменения.
Через PowerShell:
- Создайте файл GenerateKeys.ps1 со следующим содержимым:
PowerShell:
function Generate-MachineKey {
[CmdletBinding()]
param (
[ValidateSet("AES", "DES", "3DES")]
[string]$decryptionAlgorithm = 'AES',
[ValidateSet("MD5", "SHA1", "HMACSHA256", "HMACSHA384", "HMACSHA512")]
[string]$validationAlgorithm = 'HMACSHA256'
)
process {
function BinaryToHex {
[CmdLetBinding()]
param($bytes)
process {
$builder = new-object System.Text.StringBuilder
foreach ($b in $bytes) {
$builder = $builder.AppendFormat([System.Globalization.CultureInfo]::InvariantCulture, "{0:X2}", $b)
}
$builder
}
}
switch ($decryptionAlgorithm) {
"AES" { $decryptionObject = new-object System.Security.Cryptography.AesCryptoServiceProvider }
"DES" { $decryptionObject = new-object System.Security.Cryptography.DESCryptoServiceProvider }
"3DES" { $decryptionObject = new-object System.Security.Cryptography.TripleDESCryptoServiceProvider }
}
$decryptionObject.GenerateKey()
$decryptionKey = BinaryToHex($decryptionObject.Key)
$decryptionObject.Dispose()
switch ($validationAlgorithm) {
"MD5" { $validationObject = new-object System.Security.Cryptography.HMACMD5 }
"SHA1" { $validationObject = new-object System.Security.Cryptography.HMACSHA1 }
"HMACSHA256" { $validationObject = new-object System.Security.Cryptography.HMACSHA256 }
"HMACSHA385" { $validationObject = new-object System.Security.Cryptography.HMACSHA384 }
"HMACSHA512" { $validationObject = new-object System.Security.Cryptography.HMACSHA512 }
}
$validationKey = BinaryToHex($validationObject.Key)
$validationObject.Dispose()
[string]::Format([System.Globalization.CultureInfo]::InvariantCulture,
"<machineKey decryption=`"{0}`" decryptionKey=`"{1}`" validation=`"{2}`" validationKey=`"{3}`" />",
$decryptionAlgorithm.ToUpperInvariant(), $decryptionKey,
$validationAlgorithm.ToUpperInvariant(), $validationKey)
}
}
- Откройте командную строку Windows PowerShell и перейдите в каталог, где находится ваш .ps1 файл. Загрузите этот файл (например, GenerateKeys.ps1), выполнив следующую команду:
.\GenerateKeys.ps1
- Вызовите функцию из скрипта, выполнив команду:
Generate-MachineKey
- Скопируйте полученный элемент machineKey и вставьте его в файл web.config вашего веб-сайта или веб-приложения, заменив существующее значение.
Важно: Если имело место успешное внедрение вредоносного кода, смены ключей недостаточно. Необходимо провести полное расследование и рассмотреть возможность переустановки серверов.
Лучшие практики
- Генерируйте ключи безопасным образом, избегая использования публичных значений.
- Шифруйте конфигурационные файлы, чтобы ключи не хранились в открытом виде.
- Используйте ASP.NET 4.8 для интеграции с интерфейсом AMSI.
- Включите правила снижения площади атаки на серверах.