Perpetuum informatio



Вектор атаки на приложения с помощью активации деактивированных элементов интерфейса

Подавляющее большинство современных windows приложений использует стандартные элементы управления для собственных интерфейсов. Большое число приложений из этой группы реализует механизмы разграничения прав пользователей, выраженные в пользовательском интерфейсе при помощи соответствующих элементов управления. Это всем нам знакомые элементы выбора (radio button), флаги (check box), выпадающие списки (drop down menu) и некоторые другие.

Идея защиты в рассмотренных выше приложениях очень проста, если пользователь работающий с приложением имеет достаточно прав, то элементы интерфейса являются активными и пользователь может с ними взаимодействовать, меняя таким уровнем некоторые “привилегированные” параметры. В случае же если у пользователя таких прав недостаточно, то данные элементы становятся неактивными (визуально выражено, как более тусклая окраска или серый фон) и непривилегированный пользователь лишается возможности взаимодействия с этими элементами интерфейса. Идея элементарна, но в ней существует один очень  серьёзный недостаток.

Использование стандартных элементов управления не только позволяет очень быстро реализовывать пользовательские интерфейсы, но и влечёт за собой наследование всего стандартного функционала, являющегося частью операционной системы. Так неактивность какого-либо элемента является всего-лишь флагом стиля этого элемента. Справка по WinAPI говорит что состояние окна неактивно является следствием выставления флага WS_DISABLED, тут же в справке говорится что для удаления этого стиля необходимо использовать функцию EnableWindow. В качестве параметров эта функция принимает хендл окна или элемента управления (являющийся глобальным) и логическое значение отвечающее, собственно, за включение/отключение элемента. Таким образом мы видим, что функция носит глобальный характер и не выполняет никаких хакерских действий. Такой механизм был создан ещё во времена Windows 2000 и работает по сей день. Тут надо сделать оговорку, что выполнять такие действия пользователь может только с запущенными от его имени процессами, но и с этими процессами можно выполнить множество вредоносных действий.

Таким образом любой пользователь при помощи нехитрых утилит (например являющихся частью Visual Studio или InqSoft Window Scanner) пользователь может активировать функциональность, защищённую только посредством дезактивации элемента управления. В этом случае если при проектировании и создании приложения данная особенность не учитывалась, то у злонамеренного пользователя появляется возможность выполнить некоторые привилегированные действия. Какие – зависит уже от конкретного приложения.

Так например непривелигированный пользовательй службы терминалов Windows Sever 2003 может активировать неактивный по умолчанию для него переключатель “Отображать процессы всех пользователей” в Диспетчере Задач и успешно просмотреть процессы других пользователей (завершить правда он их не сможет, по причине дополнительных проверок прав при попытке закрытия процесса). Данный пример не показывает всей глубины проблемы, но вот следующий пример более нагляден.

Ещё одним примером уязвимой архитектуры может служить Kaspersky Anti-Virus 6.0 for Windows Workstation, входящий в состав Kaspersky EnterpriseSpace Security. С помощью политики устанавливаемой централизованно возможно запретить пользователям самостоятельно останавливать защиту ПК, но при этом такой запрет осуществляется только посредством деактивации флага отвечающего за работу защиты. При помощи указанных выше утилит, совершенно любой пользователь может сделать элемент управления активным и отключить антивирусную защиту своего ПК, а это уже намного более серьёзная брешь в безопасности, по сравнению с просмотром списка чужих процессов.

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

Реклама

Trackbacks & Pingbacks

Комментарии

  1. * Вячеслав says:

    Шикарно! Спасибо, за информацию, будем следить за этим.

    | Ответить Опубликовано 6 years, 9 months ago
  2. * Григорий says:

    Интересно. Я таким образом ставил TeamViewer на Windows 2003 — делал активным radiobutton «Некоммерческое использование» в инсталляторе.

    | Ответить Опубликовано 6 years, 9 months ago
    • Я уверен, что таких ошибок огромное количество в самых неожиданных программах, ведущих даже к более ощутимым уязвимостям, чем описанные здесь. Многие программисты закладывают в поведение своих программ код основанный на простом If checkbox.checked = true then begin, не задумываясь (не зная) об опасности такого подхода.

      | Ответить Опубликовано 6 years, 9 months ago
  3. * Feeble says:

    GUI можно отключить через политики в KIT.

    | Ответить Опубликовано 6 years, 9 months ago
    • * feeblex says:

      Проверил, при защите настроек паролем отключить защиту невозможно.

      | Ответить Опубликовано 6 years, 9 months ago
      • да, защита паролем «обходит» эту проблему, но не решает ошибки допущеной программистами.

        Опубликовано 6 years, 9 months ago
  4. * piroJOKE says:

    Тема не нова. Таким же боком я сносил/ставил TCP в Винде, уже фиг знает сколько лет назад (по умолчанию на этом протоколе не активна кнопка «удалить»).

    | Ответить Опубликовано 6 years, 9 months ago
    • Тема действительно не нова, но появление всё новых программ повторящих такое поведение расстраивает, надеюсь что подробное описание и распространение информации поможет в будущем избежать этой проблемы.

      | Ответить Опубликовано 6 years, 9 months ago


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: