понедельник, 23 июня 2008 г.

О вреде полезного или не делает ли защита нас уязвимее?

У меня недавно в двух обсуждениях возникли схожие разногласия с аудиторией.

Однажды я посмел высказаться в том ключе, что, мол, UAC это не так уж плохо, а скорее даже (крамола-то какая ;) ) хорошо. В ответ мне пояснили возразили, что если какой-то сторонний софт сможет подделать окно запроса UAC (что несложно), то этот самый софт сможет легко собирать пароли пользователя (причем, не только с администраторскими правами, поскольку многие пользователи будут, получив отказ, судорожно перебирать все свои учетные данные).

Вторая встреча с подобным аргументом была на крайнем моем выступлении в MCP Клубе. Мне сказали, что NAP клиент создает, по большому счету, единую точку управления безопасностью клиента и, таким образом можно, внедрившись в систему на уровне NAP EC или SHA, управлять этой самой безопасностью, направо и налево выключая файрволлы, антивирусы и всячески компрометируя добрых людей. Говорить о том ужасе, который начнется, если мы внедрим наш код на уровне ES или SHV мы просто не стали. ;)

Собственно, возразить-то мне нечего - все так. Кроме одного. Есть 10 непреложных правил безопасности. Первые два из них и применимы в данной ситуации:

1) Если вы запустили на своем компьютере приложение злоумышленника, это больше не ваш компьютер
2) Если злоумышленник внес изменения в операционную систему вашего компьютера, это больше не ваш компьютер

Поэтому я пока настаиваю на том, чтобы добавление какого-то софта, направленного на изменение поведения системы безопасности или на обман пользователя (социальный инжиниринг) в систему считалось его заражением. По сути это зловред - вредоносный код. И после этого, поведение NAP или UAC нас уже будет мало волновать. Потому что, какая разница, будет ли антивирус отключен напрямую или посредством NAP и уйдет ли пароль администратора или просто будет создан процесс с административными правами и повышенными привилегиями. Это, по сути, уже не наш компьютер и мы не имеем над ним контроля. Вот такое вот мое мнение. Артем и остальные телезрители читатели - приглашаю к дискуссии, на этот раз обещаю не разгонять демонстрацию не ругаться и отвечать по существу с применением всех возможных цитат ;)

6 комментариев:

Анонимный комментирует...

Твоя позиция понятна:

1) Если вы запустили на своем компьютере приложение злоумышленника, это больше не ваш компьютер
2) Если злоумышленник внес изменения в операционную систему вашего компьютера, это больше не ваш компьютер

С моей точки зрения, это мнение сильно отдаёт этаким максимализмом. Этак можно объяснить, что любые меры безопасности избыточны:

зачем вам RMS? Неблагонадёжных сотрудников должен отсеивать отдел кадров. А если уж заведётся инсайдер — он всё равно найдёт при желании возможность слить информацию, тут будет уже поздно бороться. Это больше не ваша информация.
Зачем вам IPsec? Хакеров должен остановить межсетевой экран. А уж если он не смог этого сделать — дальше защищаться бесполезно. Это больше не ваша сеть.
Зачем вам UAC? Злонамеренное ПО должен заблокировать антивирус. А уж если он не помог — пользователь и так сможет запустить всё, что захочет. Это уже не ваш компьютер.
Продолжать можно бесконечно.

Польза от мер безопасности может быть достигнута только в комплексе. Поэтому и изобретаются новые технологии, а не бесконечно совершенствуются старые. Тот же UAC предназначен именно для того, чтобы уже запущенное приложение не смогло тебе навредить. Заметь: уже запущенное! UAC не делает запуск вредоносного кода невозможным (т.е. стоит в «пищевой цепи» ниже антивируса). UAC сработает только в том случае, если зловред надумает пакостить — а если он не полезет вносить изменения в систему, то UAC и не сработает. Но это же не повод отказываться от него! (Приведённые рассуждения — не мои досужие домыслы, чтобы специально довести довести твою позицию до абсурда. Это вполне реальная точка зрения, которую всерьёз высказывает автор сайта TweakUAC.com). В данном случае, само существование UAC служит опровержением пункта (1).

Отключение UAC — не более, чем последовательное продолжение «пищевой цепи», которая состоит из различных средств защиты. Мы включили UAC — и тем самым не дали зловредам внести изменения без ведома пользователя. Хорошо! Но будет только ещё лучше, если мы не дадим им сделать этого даже с разрешения пользователя! И вот для этого мы выключаем UAC у стандартного пользователя. Таким образом мы сохраняем положительный эффект UAC, так как пользователь работает с ограниченными правами. Но плюс к этому мы получаем защиту от некоторых других типов атак (когда зловред — вместо того, чтобы вносить изменения в систему сам, — провоцирует пользователя ввести пароль в «липовое» окно или захватывает контроль над легитимным приложением, которое на законных основаниях получило повышенные права с помощью UAC).

P.S. Кстати, на возражение насчёт NAP ответ очень простой. Насколько я понимаю, NAP работает только в одну сторону: т.е. проверяет, чтобы настройки были не ниже определённого уровня. И в случае необходимости, требует их усиления. Т.е. даже если злоумышленник получит контроль над механизмом NAP, он сможет только снизить или отменить требования. Допустим, он установит политику, которая не будет требовать запущенного межсетевого экрана и свежих баз у антивируса. Но это отнюдь не значит, что дабы соответствовать политике, все межсетевые экраны разом выключатся, а антивирусы перестанут обновляться. Ведь такой политике будет соответствовать и выключенный, и включенный межсетевой экран. То есть те клиенты, которые уже работали с включённым межсетевым экраном и исправно обновляли антивирус, не будут принудительно переведены в более уязвимое состояние. Таким образом, будет скомпрометирован только сам механизм проверки — но полностью сохранится полезный эффект от него, достигнутый на момент начала атаки. Впрочем, здесь я уже не уверен — так как реализацию NAP представляю себе только по обзорным документам.

Alexander Trofimov комментирует...

Ух, сколько написал. =)
Ну, опустим пассаж про оправдание "избыточности" - это, помнится, ты убеждал меня в избыточности именно UAC. ;)
Про комплексность мер - тоже не по адресу. Я в курсе, уж можешь не сомневаться. А вот по поводу того, что "UAC предназначен именно для того, чтобы уже запущенное приложение не смогло тебе навредить" позволь возразить: оно зачастую не дает ему инсталлироваться. Кроме того, у меня нет мнения, что UAC защищает систему. Он всего лишь помогает осуществлять принцип наименьших полномочий. Все остальное - побочные эффекты. (И это мнение подтверждается одним из товарищей, цитировавшихся в моем предыдущем посте по поводу UAC ;) )Зачастую очень полезные, как показал тот самый обзор по RootKit'ам. Но это именно побочный эффект.
Далее, следуя твоей логике, мы отключим UAC, но при этом оставим пользователю административную учетку. Ты ведь это предлагаешь? Или я опять чего-то недопонимаю? Так он превосходно перелогинится под ней, установит вредоноса и вуаля... Какой тогда прок в отключении UAC? Моё мнение: если мы так печемся о безопасности, то нужно просто не предоставлять ему административных прав и, при этом, просто делать UAC silently deny. Тем самым мы не выключили UAC и он защитит меня, если мне захочется для произведения административных действий что-то поделать, но не будет никому мешать и, уж тем более, никого компрометировать. Пользователь о нем даже не узнает. В любом случае, UAC в упомянутой мной конфигурации никому не мешает, а потому смысл его выключать?
И последнее - по поводу максимализма - это не максимализм, это жизнь. Последним рубежом обороны всегда будет конечный пользователь. И не потому, что он идиот, а потому, что он имеет физический доступ к компьютеру. Он не всегда (почти всегда не) достаточно образован в вопросах безопасности, чтобы понять, что и какю угрозу несет его данным. Он, зачастую, считает, что все, что написано в интернете правда. Он даже верит, что зеленая полоска вверху браузера при посещении HTTPS сайта делает сайт легитимным, черт возьми =) И потому нужно помогать пользователю быть безопасным для и от самого же себя.

G14 комментирует...

Саш, под фразой "отключим UAC" он имеет в виду именно UAC silently deny. Правильно читать "отключим предложение повысить привилегии UAC". :)

Alexander Trofimov комментирует...

Ага, только после этого Вы продолжаете со мной спорить, что он зло. Зло не он, а его неправильная настройка. Правильной настройкой там, где действительно нужна безопасность является:
1) отсутствие у пользователя административных прав
2) Silently Deny для UAC.
Согласимся с этим?
А вот при наличии у пользователя административных прав (читай, учетной записи с административными правами) UAC обязан быть включен. Потому что он предупреждает меня, что что-то идет не так. Не всегда и не везде, но предупреждает хоть иногда. И меня всякими окошками нарисованными провести несколько сложнее, чем пользователя, у которого не должно быть административной учетки, потому что я еще, зараза такая, и alt-tab нажимаю каждый раз, когда запрос UAC вижу. Понятия не имею, откуда у меня эта привычка, но так сложилось =)

Alexander Trofimov комментирует...

По поводу NAP: ам все не так просто, Артем. На самом деле, SHV просто получает команду: сделать о-то. Он ничего не знает о "хорошо" или "плохо". Потому, чисто теоретически, при подмене SHV, например, его легко можно заставить отключить все, что угодно =)
Теоретически...

Clevelus комментирует...

Долго думал что ответить. Написать хотелось многое. В результате написал много и не все конкретно по NAP. Прочитать можно тут: статья: Законы безопасности.