Академический Документы
Профессиональный Документы
Культура Документы
хостинга
оглавление
Что такое rootkits, и как с ними бороться Почтовый сервер с защитой от спама
Современный вариант троянского коня: набор утилит и вирусов на основе FreeBSD
rootkits. Как защититься?
Геннадий Дмитриев
Сергей Яремчук stranger03@mail.ru 68
grinder@ua.fm 24
Безопасный удаленный доступ
Безопасность беспроводных сетей к консолям оборудования
Методы атак на беспроводные сети. Рекомендации по
обеспечению безопасности. Дмитрий Ржавин
d.rzhavin@rtcomm.ru
Виктор Игнатьев Рафаэль Шарафутдинов
n4vy@nm.ru 28 rafael@soft-tronik.ru 74
ИТОГИ SYSM.02
20 декабря 2003 года портал SysAdmins.RU при инфор-
мационной поддержке журнала «Системный администра-
тор» и журнала «UPGRADE» провел второй Семинар си-
стемных администраторов и инженеров, SYSM.02, в рам-
ках которого, помимо основной программы, состоялось
учредительное собрание Профсоюза специалистов в об-
ласти информационных технологий.
Более 160 человек собрались из разных городов Рос-
сии и СНГ, чтобы принять участие в Семинаре.
Безусловно, SYSM.02 удался, организаторы Семинара
создали дружественную и позитивную атмосферу, благопри-
ятную для общения, обмена опытом, знаниями и идеями.
В первой части Семинара было представлено четыре
обширных информационных доклада. В перерывах меж-
ду выступлениями продолжались дискуссии. Участники
Семинара – Дмитрий Головин и Алексей Костромин де-
лятся своими впечатлениями и дают краткий обзор каж-
дого выступления: Ìèõàèë Òîð÷èíñêèé, ôîòî Àëåêñåÿ Êîñòðîìèíà
половому, национальному и прочим признакам, положе-
ние на рынке труда в целом – острые и актуальные темы
для сферы IT. После окончания доклада, который, по сути,
прошел как диалог с залом, Михаила Торчинского еще
долго не отпускали, и некоторые наши коллеги пожертво-
вали обедом ради интересного и живого общения с ним.
Выступление Игоря Ляпунова состояло из двух час-
тей: первая – о возможных путях построения безопаснос-
ти в локальной сети для начинающих системных админи-
страторов. Вторая часть выступления «Решения
NetScreen: архитектура, применение, администрирование,
перспективы» носила скорее рекламный характер.
2
календарь событий
профсоюза, привлечение региональных компаний IT-рын-
ка к реализации программ профсоюза в регионах.
По всем пунктам, представленным в программе, есть
договорённости с компаниями, которые сотрудничают с
профсоюзом. По социальному направлению разработана
программа страхования: каждый член профсоюза с фев-
раля 2004 года будет застрахован от несчастных случаев,
которые могут повлечь за собой потерю трудоспособнос-
ти. Всероссийское молодежное аэрокосмическое общество
«Союз» предоставляет бесплатные путёвки для детей чле-
нов профсоюза в детские лагеря отдыха. Основная идея
учебного направления – предоставить члену профсоюза
возможность получить специальные знания и навыки, ко-
торые помогут ему успешно спланировать свою карьеру.
Программа профсоюза весьма обширна, здесь представ-
Îëåã Âëàñåíêî, ôîòî Àëåêñåÿ Êîñòðîìèíà лена только малая толика того, что запланировано.
Во второй части Семинара состоялось учредительное
собрание Профсоюза специалистов в области информа-
ционных технологий.
Подробности – в пресс-релизе, подготовленным Ма-
рией Антоновой:
«Профсоюз представляет собой объединение систем-
ных и сетевых администраторов, программистов, веб-ма-
стеров, контент-редакторов, технических писателей, спе-
циалистов в области информационной безопасности, IT-
менеджеров, IT-аналитиков, руководителей IT-департа-
ментов и всех тех, кто работает в сфере информацион-
ных технологий. Это объединение имеет все шансы стать
действенным инструментом защиты прав своих членов.
Более 100 участников Семинара стали первыми чле-
нами профсоюза. Состоялось собрание, на котором в
результате голосования было избрано Правление и ут-
верждена предложенная Программа работы профсою-
за на 2004 год.
Àëåêñåé Ëèïîâöåâ, îðãàíèçàòîð SYSM.02, ôîòî Àëåêñàíäðà Íåì÷åíêî
По словам Алексея Липовцева, Председателя Прав-
ления профсоюза: «Начало положено, и довольно успеш-
но. В планах – развивать профсоюз в 2004 году, разраба-
тывать и реализовывать программы обучения, трудоуст-
ройства и поддержки членов профсоюза, развивать со-
циальное направление работы.»
Более подробную информацию о деятельности проф-
союза IT-специалистов вы можете найти на официальном
сайте http://ITCU.ru».
ВИРУСЫ В 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 и работают, причем создать виртуального пользова-
чае процесс общения с компьютером из радости рискует теля, изолированного от всех остальных файлов систе-
превратиться в мучение. мы, в некоторых случаях просто не получается. В-треть-
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 язы-
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
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/ не вирус получится, а Троянский Конь!
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, содержащую машинный код. Там
мую вытекает из права чтения. Другие же возбуждают вирус будет не так заметен (он об этом мы поговорим поз-
исключение, аварийно завершая выполнение заражен- же см. «Заражение посредством расширения кодовой
ной программы. Для обхода этой ситуации вирусы мо- секции файла»).
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
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, сдвигая все остальное содержимое файла вниз. ное значение, в результате чего вычисленная степень вы-
Распознать такую заразу значительно сложнее, посколь- равнивания от функции к функции будет варьироваться).
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, чем и выдают себя, однако следует быть гото-
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. Конеч- другие операции – всех не перечислишь!
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. Это вполне нормальное явление. «Вполне» пото- Обо всем этом и многом другом мы поговорим в сле-
му что очень многие вирусы, написанные на ассемблере, дующий раз, если, конечно, к тому времени эта тема ни-
получают в «подарок» от линкера такой же стартовый код. кому не надоест…
СЕРГЕЙ ЯРЕМЧУК
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», и есть информация в следующих
программы, содержащие троян, отличить от оригинальных номерах журнала.
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 изменя- Вывод один – админ должен быть немного параноиком, пото-
ют на свой. му что нападающий всегда идет на шаг впереди. Успехов.
БЕЗОПАСНОСТЬ
БЕСПРОВОДНЫХ СЕТЕЙ
ВИКТОР ИГНАТЬЕВ
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. ми. Для обеспечения роуминга предусмотрены специ-
альные процедуры сканирования и присоединения – ных Заполярного ГКМ для обмена данными с буровыми
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, что и у точки доступа.
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 воору- ние относительно широты и долготы.
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-ключей. вить фальшивку близко к легитимной точке доступа.
Рекомендации по обеспечению
безопасности беспроводных сетей
Подводя итоги, рассмотрим ряд рекомендаций по обес-
печению безопасности беспроводной сети.
Приобретайте 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
безопасность
То, что Интернет является агрессивной средой, уже давно ни для кого не является новостью. Стоимость
информации может быть настолько высока, что с лихвой окупает любые затраты на ее получение.
Кроме того, обострение конкуренции подчас приводит к выбору весьма агрессивных методов борьбы
с «коллегами по цеху», одним из которых является вывод из строя или временная недоступность
сетевого оборудования конкурента. Ну и с каждым днем все острее становится проблема сетевого
хулиганства. Умение защищать сервер и локальную сеть предприятия от подобных атак становится
обязательным требованием к квалификации системного администратора даже на небольших
предприятиях, на которых самая секретная информация – почтовые ящики сотрудников.
СЕРГЕЙ СУПРУНОВ
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-пакета:
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 – минимизирует выводимую информацию. Резуль-
тат будет примерно таким:
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) будут отбрасываться. полнено по отношению к пакету, удовлетворившему дан-
Сканирование с установкой или сбросом всех флагов ному правилу, например:
44
безопасность
МАКСИМ КОСТЫШИН
46
безопасность
Возможности сети Интернет для рекламы, публикации Ни в одном из проанализированных договоров не пред-
необходимой информации или создания собственного полагается какая-либо материальная или моральная ком-
интернет-магазина активно используются частными ли- пенсация в случаях нанесения ущерба Абоненту при ис-
цами, коммерческими компаниями, государственными пользовании услуг хостинга, предоставляемого Провай-
организациями. В ряде случаев для организации соб- дером. Упоминания об этом, вообще говоря, в договорах
ственного сайта или отдельной веб-странички в Интер- встречаются, однако такие моменты не более чем декла-
нете юридическим и физическим лицам приходится об- рация прав Абонента, которые доказать и, естественно,
ращаться за помощью в компании, предоставляющие использовать будет весьма проблематично. В некоторых
услуги так называемого веб-хостинга. Основная при- случаях обещания Провайдеров обеспечить необходимые
чина – финансовая выгодность решения (не надо дер- условия безопасности клиентов носят чисто рекламный
жать специально обученный персонал и беспокоиться характер и ни на чем не основываются.
о поддержании круглосуточного канала в Интернете, об- Попытаемся перечислить те вопросы, которые каса-
ладающего, кроме всего прочего, достаточной пропус- ются обеспечения определенного уровня безопасности
кной способностью). услуг и должны быть подкреплены конкретной, в том чис-
ле финансовой, ответственностью, при соглашениях меж-
Вопросы безопасности в договорных ду Провайдером и Абонентом.
документах на услуги хостинга 1. Доступность канала для обновления сайта (гаранти-
Анализ значительного количества договоров (было изу- рованная возможность выполнения действий по обнов-
чено более двадцати типовых договоров) хостинг-провай- лению Абонентом данных своего сайта).
деров (далее по тексту «Провайдеров») как Российской 2. Конфиденциальность информации учетных записей
Федерации, так и стран СНГ, по вопросам, связанным с Абонента (наличие необходимых условий конфиден-
обеспечением безопасности при оказании хостинг-услуг, циальности при выполнении действий по идентифи-
показал, что в настоящее время эти нюансы практически кации и авторизации Абонента для случаев обновле-
не оговариваются. Требования по безопасности в основ- ния данных сайта).
ном предъявляются к пользователю услуг хостинга (да- 3. Целостность данных сайта Абонента, а также выпол-
лее по тексту «Абоненту»). нение Провайдером работ по восстановлению сайта
Абоненту предписывается: при авариях.
ограничивать содержание информации и перечень 4. Доступность сайта Абонента из Интернета.
программного обеспечения, размещаемых на соб- 5. Надежность функционирования сайта Абонента, в том
ственном сайте, для того, чтобы не нарушать действу- числе с использованием возможностей Провайдера по
ющее законодательство; круглосуточному мониторингу системы.
не предпринимать действий, которые могут повлечь
за собой нанесение ущерба Провайдеру или иным се- Кроме того, обеспечение безопасности клиентов под-
тевым ресурсам при использовании доступа в Интер- разумевает для Провайдера проработку своих внутрен-
нет, включая попытки несанкционированного доступа. них вопросов, связанных с обеспечением собственной бе-
зопасности. В перечень можно включить следующие за-
Требования к Провайдеру обычно ограничиваются дачи:
необходимостью обеспечить конфиденциальность учет- Установка и использование средств антивирусной за-
ных записей Абонента (но даже это не всегда). щиты.
В некоторых договорах Провайдер откровенно снима- Проработка решений по обеспечению средствами за-
ет с себя любую ответственность за риски Абонента, ко- щиты от сканирования.
торому он организует все технические составляющие ра- Возможность выполнения предварительной фильтра-
боты с Интернетом. Если попытаться перечислить возмож- ции трафика от спама в случае оказания услуги по раз-
ные риски, то основные из них следующие: мещению почтового сервера Абонента.
недополученная прибыль и упущенная выгода, а так- Пресечение возможностей несанкционированного до-
же любые косвенные убытки, понесенные Абонентом ступа к программному обеспечению и данным, кото-
в период использования или не использования услуг рые в совокупности обеспечивают работу веб-сайтов
Провайдера; и/или почтовых серверов клиентов.
задержки, перебои в работе и невозможность полно-
ценного использования собственных ресурсов Абонен- При заключении договора услуг хостинга необходимо
та, происходящие прямо или косвенно по причине дей- обращать внимание на дополнительные моменты, такие как:
ствия или бездействия третьих лиц и/или неработос- Максимальный срок восстановления работоспособно-
пособностью транспортно-информационных каналов, сти сайта Абонента в случаях аварий.
находящихся за пределами собственных ресурсов Возможность проведения Абонентом процедур по те-
Провайдера; стированию надежности своего сайта.
ошибки в программном обеспечении, наличие вредо- Получение Абонентом (для возможности контроля) до-
носных компонентов в используемом на серверах Про- стоверной информации о функционировании соб-
вайдера и других серверах сети Интернет, если тако- ственного сайта, а также данных, которые связаны с
вое не разработано самим Провайдером. выполнением сторонами договорных обязательств.
48
администрирование
СЕРГЕЙ ЯРЕМЧУК
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. Основной особеннос-
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
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 – запрещает монтировать устройство.
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).
БЕЗУМНЫЙ ЧЕРТЕНОК
АЛЕКСАНДР БАЙРАК
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.
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 года.
ЭФФЕКТИВНАЯ РАБОТА
С ПОРТАМИ В 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», который находится в каталоге но сначала посмотрим, какие пакеты зависят от него.
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». обязательно выполните команду:
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 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.
Для начала обновим дерево портов: Его конфигурационный файл находится здесь:
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
/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
ДМИТРИЙ РЖАВИН
РАФАЭЛЬ ШАРАФ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. В перечень поддерживаемых карт входили
существования администратора, что заставляет поду- флэш-карты, карты беспроводного доступа, модемы и
мать не только о себе любимом и дорогом. Возникает сетевые карты. Эта опция показалась нам весьма полез-
проблема, как упростить каждодневные операции и мак- ной, поскольку позволяла создавать дополнительное со-
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,
на базе которого, собственно, все и построено.
78
ПРАКТИЧЕСКАЯ КОНФЕРЕНЦИЯ
ОБЕСПЕЧЕНИЕ ИНФОРМАЦИОННОЙ
БЕЗОПАСНОСТИ ПРИ ВЗАИМОДЕЙСТВИИ ГРАЖДАН,
БИЗНЕСА И ОРГАНОВ ГОСУДАРСТВЕННОЙ ВЛАСТИ
С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ИНФОКОММУНИКАЦИЙ
10-11 марта 2004 года г. Москва, отель «Аэростар»
АНДРЕЙ БЕШКОВ
80
администрирование
В тот день, когда администратор настраивает шлюз для симости от операционной системы, используемой на шлю-
доступа работников предприятия в Интернет, он сталки- зовом компьютере, наличия прокси-сервера и типа пре-
вается с необходимостью найти решения для проблем, с доставляемых услуг можно выбрать несколько наиболее
которыми никогда ранее не встречался. Сначала нужно распространенных решений.
обучить всех пользоваться браузером и почтовым клиен- Например, для Unix-платформ характерны решения
том. Потом приходит время бороться с вирусами, троянс- на основе межсетевого экрана и прокси-сервера, кото-
кими программами и прочим мусором, которые между рый может работать как на шлюзе, так и на отдельной
прочими важными делами любопытные пользователи, машине. Самыми часто используемыми прокси-серве-
словно малые дети, тянут из сети. Кажется, что счастли- рами являются Squid, Delegate, Socks. Для каждого из
вая и безмятежная жизнь для администратора наступит них написана большое количество разнообразных скрип-
сразу же, как только с этими проблемами будет поконче- тов, которые анализируют протоколы запросов, посту-
но. К сожалению, в реальном мире все обстоит иначе. павших к прокси-серверу от пользователей, и на их ос-
Очнувшись после первого периода интернет-эйфории и нове строят отчеты. К сожалению, такие подсчеты явля-
разглядывая счета на оплату услуг провайдера, начальство ются весьма приблизительными, так как в них не учиты-
все чаще начинает задавать сакраментальные вопросы ваются сетевые протоколы нижнего уровня. Возьмем, к
«Кто столько скачал и почему мы должны за это платить?». примеру, ситуацию, когда пользователь скачивает из Ин-
В этот момент на сцену выходят программы для учета тернета файл по протоколу HTTP. Предположим, что в
трафика. С их помощью руководство организации, началь- качестве транспорта используется протокол TCP/IP, ко-
ники отдела ИТ или сотрудники службы безопасности мо- торый отвечает за гарантированную доставку пакетов.
гут увидеть достаточно подробную картину того, как со- Если какой-то из пакетов будет испорчен во время путе-
трудники используют Интернет. Административные ме-ры, шествия через сеть, то отправитель по запросу получа-
принятые на основе увиденного, безусловно, повысят про- теля пошлет его заново. И такая ситуация может повто-
изводительность труда и обязательно сэкономят деньги ряться много раз. Испорченные пакеты отбраковывают-
компании. Системному администратору подобный инст- ся раньше, чем попадут к приложению прокси-сервера.
румент тоже пригодится, так как позволит легко обнару- Таким образом, получается, что статистика использова-
жить аномальную активность в повседневных потоках ния канала, выдаваемая прокси-сервером, будет весь-
данных между внутренней сетью и Интернетом. В зави- ма отличаться от количества данных, реально передан-
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, то сразу же после
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
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)
92
образование
дартный порт протокола LDAP), то в случае неудачного ядро базы данных (Extensible Storage Engine, ESE),
поиска запрос будет последовательно передаваться работающее непосредственно с записями хранилища
другим контроллерам домена. В том случае, если об- каталогов, различает объекты по атрибуту относитель-
ращение идет по стандартному порту глобального ка- но составного каталога.
талога (GC) 3268, поиск ведется по всем разделам леса. хранилище данных (файл базы данных Ntds.dit). С этим
Для безопасного доступа к службам следует использо- файлом может работать только ядро базы данных. Об-
вать порты, использующие SSL: ращаться напрямую к этому файлу можно только с
Òàáëèöà 2 помощью программы Ntdsutil, которая находится в пап-
ке Support/Tools на диске с операционной системой
Windows 2000 Server.
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
подписка
Единый
подписной
индекс:
81655
по каталогу
агентства
«Роспечать»
Рады видеть
Вас нашими
читателями!
РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
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