Shatter attack (Shatter attack)
«Подрывная атака» (англ. shatter attack) — программная технология, которая используется хакерами для обхода ограничений безопасности между процессами одного сеанса в операционной системе Microsoft Windows. Она опирается на недостаток архитектуры системы передачи сообщений и позволяет одному приложению внедрить произвольный код в любое другое приложение или службу, работающие в том же сеансе. В результате может произойти несанкционированное повышение привилегий.
Описание
[править | править код]Новый тип атак стал темой горячих обсуждений среди специалистов в сфере безопасности после публикации в августе 2002 года статьи Криса Паже[1], независимого консультанта по защите данных. В этом документе впервые появился термин «shatter attack», описывающий процесс, с помощью которого приложение может выполнить произвольный код в другом приложении. Это возможно благодаря тому, что Windows позволяет приложениям с низкими привилегиями отправлять сообщения приложениям, имеющим более высокие привилегии. В сообщении в качестве параметра может содержаться адрес функции обратного вызова из адресного пространства приложения. Если злоумышленник сумеет внедрить свои данные в память другого приложения (например, вставив шелл-код в окно редактирования или с помощью функций VirtualAllocEx и WriteProcessMemory), то он может послать ему сообщение WM_TIMER и указать адрес функции обратного вызова, который ссылается на эти данные.
Спустя несколько недель после публикации статьи компания Microsoft согласилась с тем, что проблема существует, но в то же время пояснила[2], что называть это недоработкой Windows ошибочно, так как проблема кроется в самой службе с высокими привилегиями.
Решение
[править | править код]В декабре 2002 года Microsoft выпустила патч для систем Windows NT 4.0, Windows 2000 и Windows XP, предотвращающий использование «shatter attack»[3]. Но это было частичное решение проблемы, так как исправление касалось служб, поставляемых вместе с Windows. Однако сама архитектура не претерпела изменений, и для остальных приложений и служб угроза продолжала существовать.
В Windows Vista проблему решили комплексно, внеся два существенных изменения. Во-первых, сеанс 0 выделен исключительно для системных процессов, и пользователь больше не осуществляет вход в этот сеанс[4]. Во-вторых, большая часть сообщений теперь не отправляется от процессов с низкими привилегиями процессам с высокими привилегиями (User Interface Privilege Isolation, UIPI)[5]. К примеру, Internet Explorer 7 использует это нововведение для ограничения взаимодействия компонентов визуализации с остальной системой.
Примечания
[править | править код]- ↑ Chris Paget. Exploiting design flaws in the Win32 API for privilege escalation (англ.) (август 2002 г.). Архивировано из оригинала 4 сентября 2006 года.
- ↑ Information About Reported Architectural Flaw in Windows (англ.). TechNet. Microsoft Corporation (сентябрь 2002 г.). Архивировано из оригинала 1 мая 2012 года.
- ↑ Microsoft Security Bulletin MS02-071 (англ.). Microsoft Corporation (11 декабря 2002). Архивировано из оригинала 1 мая 2012 года.
- ↑ Внутреннее устройство ядра Windows Vista: часть 2 . TechNet Magazine (март 2007). Архивировано из оригинала 1 мая 2012 года.
- ↑ Работа с контролем учетных записей в приложениях Windows Vista . MSDN Magazine (январь 2007). Архивировано из оригинала 1 мая 2012 года.
Ссылки
[править | править код]- «Дефект» Windows API вызвал дебаты о надежности защиты. CNET Networks, Inc