Атаки на память

Что можно украсть в атаках на память и при чем тут hiberfil.sys?

Защита информации в памяти от перехвата и кражи

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

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

Как можно изучить память компьютера?

Участки оперативной памяти, используемые разными приложениями, в значительной мере изолированы друг от друга средствами ОС и гипервизора. Поэтому просто вдруг прочитать фрагмент памяти, в котором работает постороннее приложение, не получится. Впрочем, на это способны процессы с привилегиями ядра (system в Windows, root в *nix). А способов повышения привилегий до нужного уровня существует немало — чаще всего для этого используются различные уязвимости в ОС или драйверах устройств.

Еще один вариант того, как можно добраться до памяти работающего компьютера, — DMA-атаки. Они основаны на том, что высокоскоростные интерфейсы (USB 4.0, Thunderbolt, Firewire и другие) ради ускорения процессов ввода-вывода имеют прямой доступ к памяти. Специально спроектированное устройство может злоупотреблять этой особенностью для считывания любых фрагментов памяти. Это не гипотетическая угроза, известны реальные случаи подобных атак (FinFireWire).

Но можно обойтись и без сложных устройств и уязвимостей! Доступ к содержимому памяти возможен и в том случае, если просто считать с диска один из файлов, в которые ОС записывает ее содержимое.

Таких файлов в Windows несколько:

  • временный файл подкачки (pagefile.sys);
  • файл сохранения для режима гибернации (hiberfil.sys);
  • аварийные и отладочные дампы памяти (memory.dmp, minidump). Генерацию таких файлов можно запустить вручную.

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

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

Как можно предотвратить атаку на память?

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

  • Внедрите принцип наименьших привилегий. Все пользователи должны работать без прав администратора. Даже сами администраторы должны получить необходимые привилегии только на время выполнения процедур обслуживания.
  • Используйте системы защиты на каждом физическом и виртуальном компьютере. Компании обязательно нужны системы класса EDR. Убедитесь, что политики защиты предотвращают запуск сотрудниками легитимных, но потенциально опасных программ, которые могут использоваться для эскалации привилегий и снятия дампов памяти (утилиты sysinternals, powershell, лишние или устаревшие драйверы и тому подобное).
  • Своевременно обновляйте ОС и все ключевые приложения.
  • Убедитесь, что компьютеры загружаются в режиме UEFI, а не BIOS. Поддерживайте прошивки UEFI на всех компьютерах в актуальном состоянии.
  • Установите безопасные настройки UEFI. Включите Input/Output Memory Management Unit (IOMMU), что позволит исключить DMA-атаки. Поставьте пароль на UEFI и определите верный порядок загрузки ОС — это позволит снизить риски запуска системы с вредоносного носителя и изменения настроек на небезопасные. Функции Secure Boot и Trusted Boot также предотвращают запуск непроверенного кода ОС.

Неоднозначные меры

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

  • Аппаратное хранение ключей на базе TPM0. Trusted Platform Module позволяет обезопасить аутентификацию в ОС, использовать биометрию для входа в учетную запись и усложняет извлечение ключей. TPM значительно усиливает защиту, которую дает полнодисковое шифрование, поскольку его ключи тоже хранятся в модуле TPM. Возможные «подводные камни»: отсутствие на некоторых компьютерах модуля TPM, несовместимые комбинации ОС и оборудования, сложности централизованного управления ключами (из-за разных систем и версий TPM).
  • Полнодисковое шифрование. Эта мера радикально снижает риски утечки данных, особенно с забытых или украденных ноутбуков, поэтому она рекомендуется даже тем, кто не очень боится атак на память. Штатная реализация от Microsoft — Bitlocker, но есть и сторонние решения. В Linux-системах FDE (full disk encryption) также стало частью ОС (например, в Ubuntu — с версии 20), во многих дистрибутивах оно основано на LUKS. Наиболее надежно использовать комбинацию TPM и FDE. Подводные камни: при серьезных сбоях на компьютере с диска невозможно вытащить ничего. Поэтому критически важно наличие отлаженной системы резервного копирования. Иногда заметно снижение производительности дисковых операций, особенно при запуске компьютера.
  • Отключение спящего режима (sleep, standby). Если запретить «сон» и оставить только «гибернацию», ситуация, когда загруженный и частично расшифрованный компьютер доступен злоумышленникам для DMA-атак и прочих упражнений, станет крайне редкой. Недостаток решения тоже очевиден, ведь спящий режим — это самый быстрый и удобный способ «выключить» компьютер после рабочего дня или при смене дислокации в офисе. Если вы решите пойти по этому пути для части пользователей, важно внедрить полнодисковое шифрование, иначе файл гибернации будет беззащитен для атак.
  • Отключение режима гибернации. Если отключить гибернацию, то образ памяти нельзя будет скопировать из файла с выключенного компьютера. Для самых важных компьютеров можно запретить и гибернацию, и сон, их можно будет только полностью выключить. В комбинации с полнодисковым шифрованием, TPM и прочими мерами это оставляет очень мало места для атак на память, но неудобства для пользователей будут значительны, поэтому стоит серьезно задуматься, в каких случаях это оправданно.

Разговор начистоту

Если вы решите, что безопасность стоит того, чтобы отключить спящий режим или гибернацию, тщательно продумайте, каким именно пользователям нужно внедрять такую политику. Вряд ли это будет 100% сотрудников, скорее речь пойдет о тех, кто работает с критически важной информацией. Важно объяснить им, что кража паролей и других данных возможна многими способами, поэтому недостаточно «просто антивируса» или «просто не ходить на всякие там сайты», чтобы предотвратить серьезные инциденты безопасности. Про каждую из защитных мер имеет смысл сказать несколько слов, объясняя их смысл. Полнодисковое шифрование — защита от простейшего копирования данных с забытого или украденного компьютера, защита от «злой горничной», то есть от посторонних с физическим доступом к компьютеру. Отключение сна и гибернации продолжает и усиливает эти защитные меры, поэтому лишние 5 минут на включение и выключение компьютера внесут важный вклад в то, чтобы сотрудник потом не стал «крайним», если его паролем воспользуются для кибератаки.

Советы