Security Lab

Machine Keys

В ASP.NET Machine Keys – это криптографические ключи, используемые для шифрования и подписи данных, передаваемых между клиентом и сервером. В контексте ViewState, который хранит состояние элементов управления на веб-странице между запросами, Machine Keys играют ключевую роль в обеспечении безопасности.

Как Machine Keys связаны с ViewState?

ViewState в ASP.NET может быть закодирован и подписан, чтобы предотвратить его подделку или модификацию злоумышленниками. Для этого используются Machine Keys, которые обеспечивают:

  • Подпись данных – предотвращает манипуляцию ViewState со стороны клиента (путем HMAC или другого метода хеширования).
  • Шифрование данных – предотвращает утечку чувствительной информации, если ViewState содержит конфиденциальные данные.

Где хранятся Machine Keys?

По умолчанию ASP.NET может автоматически генерировать ключи при каждом запуске приложения, но для обеспечения предсказуемости их можно задать в файле Web.config:

<system.web>
  <machineKey 
    validationKey="C3D8A91E2B59D67F3BFF9A80A5D6F83ABF8129E1BBF0C3E7" 
    decryptionKey="A1B2C3D4E5F678901234567890ABCDEF" 
    validation="SHA256" 
    decryption="AES" />
</system.web>
    

Основные параметры Machine Keys:

  • validationKey – ключ подписи данных (HMAC, SHA1, SHA256).
  • decryptionKey – ключ для шифрования ViewState (AES, DES).
  • validation – алгоритм проверки целостности.
  • decryption – алгоритм шифрования.

Безопасность Machine Keys

  • Используйте надежные ключи, а не AutoGenerate (особенно в серверных фермах).
  • Избегайте слабых алгоритмов (например, MD5, DES).
  • Ограничивайте длину ViewState, чтобы предотвратить атаки (например, ViewState MAC bypass).

Код на автопилоте: ViewState стал новым вектором атак на веб-серверы

Беспечность разработчиков дает удаленный контроль через ViewState.