Администраторы сталкиваются с совершенно очевидной проблемой: любые вредоносные программы, атакующие пользователей или приложения, с которыми они работают, подчиняют себе 90 процентов компьютера, который они заражают. Управление учетными записями пользователей (UAC) в Windows Vista –– это попытка корпорации Майкрософт решить одну из основных проблем безопасности, а именно то, что более 90 процентов пользователей, работающих с Windows, обладают правами администратора.
Хотя, возможно, работа с Windows® XP в качестве обычного пользователя — а я так и делаю –– может оказаться довольно непростым делом. Например, если вы часто путешествуете и возите с собой компьютер, на котором установлена среда Windows XP, вы заметите, что обычный пользователь не может, например, изменять часовые зоны системы.
UAC – возможность изменить все это. Вот первое заблуждение. UAC – это не просто возможность, это коллекция возможностей, большинство из которых не особенно очевидны. Я не буду предлагать вам глубокий анализ всех деталей работы UAC. Для этого я рекомендую вам прочитать статью Марка Руссиновича в июньском номере TechNet Magazineза 2007 год, которую можно найти на веб-узле technetmagazine.com/issues/2007/06/UAC.
В своей статье я собираюсь беспристрастно объяснить вам, что такое UAC, чем оно не является и как оно влияет на ваши возможности управления системами в операционной среде Windows Vista®.
Что такое UAC
Самой заметной функцией UAC является диалоговое окно повышения прав, показанное на рис. 1. На самом деле, если бы вы спросили у типичных пользователей Windows Vista о том, что такое UAC, большинство, вероятнее всего, ответило бы что-нибудь о раздражающем диалоговом окне повышения прав.
Рис. 1 Диалоговое окно одобрения UAC для администратора в режиме одобрения администратором
Несмотря на видимость и все мнения о UAC, я не верю, что в большинстве обсуждений UAC содержится много сведений о том, чем на самом деле является UAC. В действительности похоже, что здесь присутствует определенная путаница. Эксперты пишут статьи, сообщения в блогах и группах новостей с такими названиями, как «Самая раздражающая функция Vista», и разглагольствуют о том, как много пользователей выключит эту функцию и почему она настолько всех раздражает.
Учитывая то, что совсем немного лиц потрудилось ознакомиться с разумным обоснованием UAC, почему бы мне не начать эту статью с рассмотрения того, что такое UAC?
Что такое UAC
UAC – это попытка увеличить количество пользователей, работающих в качестве обычных. В известном смысле это версия 2.0 такой попытки. Версия 1.0 впервые появилась в Windows NT® 3.1 и позволила пользователю работать как «не администратору». Это был коренной уход от 16-разрядной операционной системы Windows 3.1 и ее преемников, Windows 3.11, Windows 95, Windows 98 и Windows Me, ни одна из которых не имела концепции пользователей с низким уровнем привилегий. Возможность выполнения не администратором что-либо полезного зависела от множества факторов, но до XP и Windows Server® 2003 минимальные привилегии пользователей считались тягостными или даже бесполезными. Windows Vista предлагает первый набор технологий для упрощения работы с привилегиями интерактивных пользователей.
Хотя утверждение, что целью UAC является предоставление приложениям, работающим как администраторы, некоторого уровня защиты от приложений, не являющихся администраторами, верно, это нисколько не было основной целью UAC. Основная цель заключалась в том, чтобы навести нас на путь увеличения количества пользователей, работающих в качестве обычных, что в свою очередь вызвало бы написание разработчиками большего количества программ, работающих в качестве обычных пользователей, и сократило количество ситуаций, в которых необходимо повышение привилегий пользователей. С написанием разработчиками большего числа совместимых с UAC приложений снижается количество запросов пользователя, тем самым улучшая его работу. В идеале этот процесс приведет к тому, что большинство пользователей не будут работать как администраторы, и, надеюсь, начнут с сомнением относиться к получаемым запросам на повышение прав. Чем меньше число запросов, тем более вероятно, что пользователи будут тщательно рассматривать их перед одобрением.
Теория выглядит приблизительно так. Соответственно может уменьшиться количество вредоносных программ, но это будет зависеть от включения пользователями функции UAC, что зависит от написания разработчиками программ для этой функции и от того, перестанут ли пользователи рассматривать запросы в качестве упражнений на быстроту щелчка и будут ли на самом деле выяснять законность запросов на повышение прав.
Для достижения главной цели – увеличения количества пользователей, которые большую часть времени могут работать не как администраторы, – функция UAC разработана так, чтобы достичь ряд отдельных целей.
1...Уменьшение количества ситуаций, требующих повышения прав до учетной записи администратора.
2...Значительное упрощение повышения прав — по возможности автоматическое — по сравнению с предыдущими небрежностями, такими как использование runas.exe или переключение между учетными записями. Другими словами, ликвидация разрыва до исправления независимыми поставщиками программного обеспечения своих программ.
3...Предоставление определенной изоляции для приложений, работающих с правами администратора, чтобы защитить их от приложений, не работающих с правами администратора.
4....Обеспечение возможности выполнения некоторых уязвимых приложений с наименьшими возможными привилегиями.
Две из этих целей предназначены для того, чтобы сделать работу пользователя, не являющегося администратором, максимально удобной. Другие две цели преследуют защиту особенно уязвимых приложений.
Что интересно, так это то, что всего две цели относятся к функции, обычно рассматриваемой как UAC, и только одна цель относится к фактическому повышению прав. Пока повышение прав при запросе приложением дополнительных привилегий – это то, на что жалуются пользователи, поскольку это единственное видимое проявление набора технологий, составляющих UAC. Первая всеобъемлющая цель не имеет совсем никакого отношения к повышению прав. Идея просто состояла в обеспечении работы пользователей без прав администратора большую часть времени. По сути, вы можете возразить, что намерением является уменьшение количества событий повышения прав.
К самой задаче повышения прав относятся цели 2 и 3. Цель номер 2 состоит в упрощении повышения прав во сравнению с Windows XP, а цель номер 3 заключается в предоставлении некоторого уровня защиты приложениям, работающим с повышенными правами. Оставшиеся цели предназначены для решения совсем других проблем. Однако для достижения всех этих целей необходимо изменение операционной системы. Те, кого это интересует, могут ознакомиться с упомянутой выше статьей Марка Руссиновича, в которой рассмотрены эти изменения.
Как было сказано выше, высказывается множество рекомендаций отключить функцию UAC. Весьма вероятно, что ряд пользователей поступит именно так, даже не испытав работу UAC, а множество других получит свои компьютеры из крупных магазинов с установленной сборкой Windows Vista и уже отключенной функцией UAC. Я думаю, то, что розничные продавцы в своих стандартных образах развертывания отключают важные функции безопасности операционной системы, является постыдным.
К несчастью, множество советов отключить функцию UAC основаны на первоначальном опыте. При установке программного обеспечения и внесения необходимых изменений, выполняемых при настройке компьютера, появится довольно много запросов. Следует ожидать, что ваша работа по администрированию компьютера при настройке будет совсем не такой, как работа на компьютере в установившемся состоянии. Первые несколько недель будут значительно отличаться от последующих нескольких недель. Если вы попробуете поработать с функцией UAC на компьютере с относительно установившемся состоянием, я думаю, вы обнаружите, что эта функция совсем не является навязчивой.
Чем не является UAC
UAC не создавалось намеренно как самая раздражающая функция в истории Windows. Скорее, этот набор технологий был предназначен для того, что направить нас на путь, на котором пользователям не требуется подвергать свои системы воздействию потенциально вредоносного кода так часто, как это происходило последние несколько лет.
В своей текущей форме функция UAC не остановит по-настоящему опытных злоумышленников или пользователей, которым они помогают. Если злоумышленники не знают другого способа победить UAC, они почти наверняка будут просить пользователей сделать это за них. При выборе между танцующими свинками и безопасностью мы по опыту знаем, что всегда будут выбираться свинки. Пользователи научились закрывать диалоговое окна, и они будут поступать именно так, пока нам не удастся их переучить. Это обусловлено множеством способствующих факторов, включая факт наличия множества диалоговых окон с предупреждениями, бесполезность этих сообщений, а также то, что во множестве руководств к различным приобретаемым пользователями устройствам содержится указание «нажать на кнопку Да в диалоговом окне с предупреждением безопасности, чтобы закрыть его».
UAC не обеспечивает безопасность путем защиты от неумелого обращения. По существу, она снова делает интересными добрые старые локальные атаки повышения привилегий. Опасность этого класса атак в значительной степени умалялась, поскольку почти все пользователи Windows и так являлись администраторами, поэтому повышение прав до какого-либо иного администратора было довольно бессмысленным. Так или иначе, UAC явно изменяет природу таких атак и изменяет правила игры в сторону ситуации с операционной системой UNIX, существующей уже более 20 лет.
UAC не предотвратит похищение ваших личных данных злоумышленниками. Личные данные доступны пользователю независимо от его привилегий. По существу, приложение, включая вредоносное, имеет доступ к данным. UAC не изменяет и не может изменить это. Оно не устраняет необходимость быть бдительным, недоверчивым и параноиком — качества, которые все мы должны при каждой возможности прививать конечным пользователям.
Функция UAC не предназначалась для защиты приложения, работающего с повышенными правами, от всех атак со стороны приложения, работающего с обычными правами в том же сеансе. Хотя UAC обеспечивает определенную слабую изоляцию процесса, целью проектирования UAC не являлась изоляция приложений друг от друга.
Слухи
Корпорация Майкрософт сама причастна к распространению слухов о UAC и непониманию работы этой функции. Например, в главе «Защита от вредоносных программ» руководства по безопасности Windows Vista функция UAC представлена как основная технология по этому вопросу (microsoft.com /technet/windowsvista/security/guide.mspx). В главе рекомендуется большую часть времени работать с включенной функцией UAC, а также перечисляется ряд моментов, на которые следует обратить внимание при использовании UAC для борьбы с вредоносными программами. Однако один момент грубо пропущен: функция UAC не препятствует работе вредоносных программ и не предназначалась для этого.
Некоторые наиболее светлые умы мира, в настоящее время занимающиеся безопасностью Windows, например, Джоанна Рутковска, понимают цель UAC. 4 февраля 2007 г. в своем блоге она написала, что UAC – «это новый механизм безопасности, представленный в Vista, целью которого является принуждение пользователей работать с ограниченными правами, а не в качестве администраторов» (theinvisiblethings.blogspot.com/2007/02/running-vista-every-day.html). Она выразилась почти правильно, за исключением того, что вместо термина «принуждение» я бы использовал термин «разрешение».
Это, однако, означает существенное изменение природы обычно используемых атак против Windows. Как упоминалось ранее в этой статье, уязвимости повышения локальных привилегий, в которых пользователь может подняться от обычного локального пользователя к локальному администратору, никогда не представляли особенного интереса в платформе Windows.
В операционной системе Windows Vista появилось представление о работе пользователей в качестве обычных, что неожиданно привело к появлению интереса к проблемах повышения локальных привилегий. К несчастью, здесь мы также сталкиваемся с определенными ограничениями UAC. Напомним, что отсутствует эффективная изоляция, отсутствует рубеж безопасности, изолирующий процессы одного компьютера. Операционная система включает некоторые меры защиты для поддержания блокировки очевидных и ненужных каналов связи, но блокировка всех каналов является невозможным и нежелательным. Поэтому корпорация Майкрософт не рассматривает нарушения этого несуществующего рубежа безопасности в качестве нарушений безопасности. Марк Руссинович в реплике в блоге по адресу blogs.technet.com/markrussinovich/archive/2007/02/12/638372.aspx указал именно на это.
Марк абсолютно прав. Корпорация Майкрософт прекрасно осведомлена об отсутствии рубежа безопасности между процессом с низкими правами и процессом с повышенными правами на одном компьютере. Поскольку какая-либо изоляция между процессами на одном компьютере никогда не предусматривалась, обнаружение отсутствия изоляции между процессами на одном компьютере на самом деле не может быть названо уязвимостью безопасности. Очевидно, это снижает ценность UAC как первоочередного механизма борьбы с вредоносными программами, но функция UAC все равно не предназначалась для этого, несмотря на то, что можно прочитать в различных источниках, включая некоторые публикации Microsoft.
Снижает ли этот факт ценность UAC относительно основной цели этой функции — разрешение большему числу пользователей работать в качестве обычных пользователей большее количество времени? Нет. Существование или отсутствие непроницаемого рубежа безопасности между вредоносным приложением с низкими привилегиями и приложением с повышенными правами не устраняет факт того, что большее количество пользователей могут эффективно использовать UAC и работать на компьютерах под управлением Windows Vista в качестве обычных пользователей. В действительности, вопреки тому, во что заставили вас поверить некоторые представители отрасли, я написал эту статью (и если уж на то пошло, всю мою книгу о безопасности Windows Vista), работая в качестве обычного пользователя Windows Vista, и ни разу не получал запрос UAC на одобрение чего-либо, чего я не писал!
Тот факт, что UAC не предотвращает всех проблем безопасности, или что функция не обладает свойством, которые бы хотели иметь многие из вас, включая меня — первоочередная защита от вредоносных программ — не означает, что UAC не является технологией безопасности. Возможность определения пользователей через отдельные учетные записи сама по себе не предотвращает заражение вашей системы вредоносными программами, но из этого нельзя сделать вывод, что учетные записи пользователей не являются технологией безопасности. То, что функция UAC не разрешает всех проблем, которые мы бы хотели, чтобы она решала, не означает, что разрешаемые проблемы являются несерьезными.
UAC оставляет решение остальных проблем другим технологиям, таким как значительно улучшенный брандмауэр Windows, защитник Windows и другие программы защиты от вредоносного ПО, для предотвращения проникновения вредоносного кода и от его выполнения, если он все-таки попал в систему (из-за хитрого программирования или летающих свинок). Хотя ни одна из этих технологий безопасности не обеспечивает стопроцентное выполнение своих задач, все они являются достаточно ценными и занимают свои места в общей системе обеспечения безопасности. Но как я уже много раз говорил, даже если закрыть всех пути атаки, это приведет к невозможности работы пользователя. Если сидящий за клавиатурой пользователь разрешает выполнение вредоносного кода, не поможет никакая техническая защита во всем мире.
Практические рекомендации
Как использовать UAC? Следует ли работать в качестве администратора в режиме одобрения администратором? Как уже несколько раз упоминалось, UAC не предотвращает введение кода из приложения с низкими привилегиями в приложение с более высокими привилегиями на одном компьютере. Это означает, что ни работа в режиме одобрения администратором, ни работа в качестве обычного пользователя с повышением прав в течение сеанса (повышение с помощью запроса на повышение прав) не обеспечивают эффективной изоляции. Однако любое из двух решений гораздо лучше работы в качестве администратора в Windows XP или в Windows Vista с выключенной функцией UAC. Однако в конечном счете, вредоносная программа скорей всего будет написана для использования преимуществ приложений с повышенными правами на интерактивном рабочем столе.
Выбор варианта работы зависит от вашей философии управления рисками. При работе в качестве обычного пользователя и использовании запросов на повышение прав среда пользователя приложения с повышенными правами отличается от среды обычного приложения. Это уменьшает опасность атак путем подделки записей кэша, при которых вредоносное приложение без повышенных права заражает среду пользователя приложения с повышенными правами, но не обязательно приводит к потере возможности приложения без повышенных прав управлять приложением с повышенными правами. Хотя вредоносному приложению, запущенному несколько недель назад, непросто заразить запущенное сегодня приложение с повышенными правами, выполняемое в данный момент вредоносное приложение может управлять приложением с повышенными правами. Необходимо оценить опасность использования режима одобрения администратором или запроса на повышение прав с точки зрения предоставляемой простоты использования.
Это приводит к созданию набора практических рекомендаций для UAC, которые подытожены на рис. 2. На мой взгляд, наилучший вариант является и самым сложным. Однако для настоящих параноиков и беззащитных пользователей лучшим вариантом является работа в качестве обычного пользователя и постоянный отказ от повышения прав. До некоторой степени работа в качестве администратора в Windows XP после выполнения вредоносного кода вела к неизбежному краху. Запуск вредоносного кода в Windows Vista и последующее повышение прав в этом же сеансе могут привести к краху. Вы свободны в выборе подхода, который наиболее вам подходит и предоставляет нужный уровень защиты.
Добавлю, настоящий параноик не доверяет поставщику, когда он говорит, что приложение должно работать с правами администратора! Одним из самых ярких примеров такого утверждения, не соответствующего истине, является Visual Studio® 2005 с пакетом обновления 1 (SP1). При запуске Visual Studio появляется сообщение о необходимости запуска в качестве администратора. Однако это является верным только разработчиков, выполняющих определенные задачи. Дополнительные сведения представлены на веб-узле msdn2.microsoft.com/en-us/vstudio/aa972193.aspx.
Предоставление пользователям прав
Пользователям должна быть предоставлена возможность принятия решений. Существуют специалисты в области безопасности, считающие, что решения относительно безопасности должны быть скрыты от пользователя. Их невысказанное объяснение заключается в том, что пользователям не только не интересна безопасность, но они недостаточно сообразительны, чтобы изучить ее. Они могут быть надежно защищены только с помощью ВставьтеСюдаВашуЛюбимуюАнти-технологию.
Я не видел случаев, чтобы технология могла полностью защитить людей от атак, направленных именно на них. Большинство современных атак, включая практически все атаки с помощью фишинга, направлены в первую очередь на людей и их работу с компьютерами, а не на технологии компьютеров. Наиболее эффективные из этих атак могут сочетать атаки на людей с атаками на технологии, но для них все равно часто необходимо взаимодействие с пользователем. Технология просто не может защитить от атак, направленных не на технологию. Недавно я подробно описал это: technetmagazine.com/issues/2006/07/SecurityWatch.
UAC уже принуждает пользователей к принятию решений относительно безопасности, и поставщики технологий уже обещали выпустить решения, не позволяющие пользователям принимать такие решения. Верно, что пользователи предпочитают не утруждать себя безопасностью. Однако также верно, что ни одного программное обеспечение не может понять намерения другого программного обеспечения. Никакие системы предотвращения вторжения не могут сказать, запрашивает ли веб-узел номер вашей кредитной карточки для того, чтобы отправить вам экземпляр книги «Windows Vista Security» (Безопасность в Windows Vista), или же чтобы отправить этот номер тайной преступной организации. Это может сделать только конечный пользователь, и только если ему предоставлена необходимая информация. Как специалистам по программному обеспечению, нам необходимо убедить пользователей в том, что они должны принимать разумные решения относительно безопасности, обучить их и предоставить всю необходимую информацию.
Если мы будем продолжать использовать текущий подход — препятствование пользователям принимать решения относительно безопасности — мы обнаружим только то, что не смогли их защитить. Со временем пользователи устанут от взломов, краж с банковских счетов, нарушения конфиденциальности и попрания их личности, достоинства и самоуважения. Когда это произойдет, пользователи перестанут использовать продукты, продажа которых поддерживает отрасль. Существуют представители сферы высоких технологий, которые верят, что если скрыть существование проблем безопасности компьютеров, и всего, что с ними связано, пользователи будут слепо использовать то, что мы им кинем. Нет ничего дальше от истины. Когда пользователи наконец-то узнают, что мы не были открыты и честны с ними, они полностью потеряют доверие и откажутся от наших продуктов, что приведет к краху отрасли, защитить которую мы пытаемся, скрывая факты.
UAC – это превосходный шаг к возложению на пользователей ответственности за безопасность своих систем. UAC никоим образом не является полным решением безопасности, но являясь первой попыткой помочь пользователям в работе с минимальными правами, эта функция определенно является значительным шагом в верном направлении.
Йеспер Йохансон (Jesper M. Johansson) является главным инженером группы безопасности программного обеспечения и пишущим редактором журнала TechNet Magazine. Он защитил диссертацию по информационным системам управления и более 20 лет работает в области обеспечения компьютерной безопасности.