Введение

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

Обзор

Шаттер-атаки стали темой интенсивных разговоров в сообществе безопасности в августе 2002 года после публикации статьи Криса Пейджета "Использование недостатков дизайна в Win32 API для эскалации привилегий". В статье, в которой был придуман термин "атака скрещивания", объяснялся процесс, посредством которого приложение может выполнять произвольный код в другом приложении. Это может произойти, потому что Windows позволяет непривилегированным приложениям отправлять сообщения в петли сообщений более высокопривилегированного приложения, а некоторые сообщения могут иметь адрес функции обратного вызова в адресном пространстве приложения в качестве своих параметров. Если злоумышленнику удается вставить свою собственную строку в память более привилегированного приложения (скажем, путем вставки шелл-кода в окно редактирования) в известном месте, он может отправить сообщения WM TIMER с параметрами функции обратного вызова, установленными так, чтобы указывать на строку злоумышленника. Через несколько недель после публикации этой статьи Microsoft ответила, отметив, что: "В статье правильно сказано, что такая ситуация существует, и она правильно описывает ее последствия. В статье ошибается утверждение, что это ошибка Windows. На самом деле, недостаток кроется в особом, высоко привилегированном служении. По своей конструкции все сервисы в интерактивном рабочем столе являются одноранговыми и могут обращаться друг к другу с запросами. В результате все сервисы в интерактивном рабочем столе имеют привилегии, соизмеримые с наиболее привилегированной услугой".

Решение

В декабре 2002 года Microsoft выпустила патч для Windows NT 4.0, Windows 2000 и Windows XP, который закрыл некоторые возможности эксплуатации. Однако это было лишь частичным решением, поскольку исправление было ограничено услугами, включенными в Windows, которые можно было использовать с помощью этой техники; основной недостаток конструкции все еще существовал и все еще мог использоваться для нацеливания на другие приложения или услуги третьих сторон. С Windows Vista Microsoft стремилась решить проблему двумя способами: во-первых, локальные пользователи больше не входят в сессию 0, тем самым отделяя цикл сообщений зарегистрированного пользователя от системных услуг с высокими привилегиями, которые загружаются в сессию 0. Во-вторых, была введена новая функция под названием User Interface Privilege Isolation (UIPI), благодаря которой процессы могут быть дополнительно защищены от шаттерных атак путем назначения уровня целостности каждому процессу. Попытки отправки сообщений в процесс с более высоким уровнем целостности потерпят неудачу, даже если оба процесса принадлежат одному и тому же пользователю. Однако не все взаимодействия между процессами на разных уровнях целостности предотвращаются UIPI. Однако это создает проблемы обратной совместимости, поскольку некоторые программы были разработаны с предположением, что служба работает в той же сессии, что и зарегистрированный пользователь. Для поддержки этой точки зрения Windows Vista и Windows Server 2008 представили службу Windows под названием "Определение интерактивных услуг", которая позволяет получить доступ к диалогам, созданным интерактивными службами, когда они появляются. Интерактивному пользователю показывается диалоговое окно и предлагается возможность переключиться на сессию 0 для доступа к диалоговому окну. Эта функция была удалена в обновлении для создателей Windows 10.