Рубрика:
Карьера/Образование /
Книжная полка
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
ВАЛЕНТИН СИНИЦЫН, разработчик ПО, автор курсов по Linux и веб-технологиям. Кандидат физико-математических наук, доцент УрФУ
Червь под микроскопом
Изучение этого животного организма – увлекательное занятие, до тех пор, пока он копошится не в вашей серверной. Но одна хорошая книга поможет быстро избавиться от таких непрошеных гостей
В прежние времена, когда «Матрица» еще не вышла на большие экраны (они тогда тоже были больше) и самым культовым фильмом ИТ-тематики считались «Хакеры», когда Интернет, по крайней мере в этой части света, был в диковинку, а онлайн-платежи – доступны лишь немногим, когда слово «спам» вызывало чувство легкого аппетита и никому не казалось странным отвезти в банк бумажный документ, написание вирусов считалось чем-то вроде искусства.
Нельзя сказать, что программы, получившие позднее общее имя «вредоносный код», в те славные годы были совсем уж безобидными (читайте интервью Игоря Данилова [1]), но по большей части их разработчиков интересовал вопрос, как «переиграть» антивирус, чтобы попросить печенья, сказать «бебе» или напеть гимн Советского Союза (который еще не успел стать гимном Российской Федерации). Некоторые вирусы, скажем, тот же «Чернобыль», грозили последствиями посерьезнее, однако никому не приходило в голову требовать отправить «SMS на короткий номер», чтобы разблокировать зараженные файлы, – в основном потому, что SMS было трудно набирать на дисковом телефоне, а самым известным коротким номером был 02.
С повсеместным распространением компьютеров, Интернета и мобильной связи многое изменилось. Стало ясно, что самое ценное в доме (не говоря уж об офисе) – не телевизор и ноутбук, а информация на жестком диске, и, значит, найдется немало желающих ее украсть. Вирусы, с одной стороны, упростились, а с другой, стали опаснее и циничнее. Антивирусы же, казавшиеся некогда неприступным рубежом на пути распространения всякой заразы, сегодня все чаще пасуют перед новыми или «мутировавшими» ее экземплярами – что неудивительно, если учесть, что счет последним давно перевалил за миллионы.
Все это привело к тому, что сегодня с задачей противодействия неизвестному и от этого еще более неприятному противнику может столкнуться не только специалист антивирусной лаборатории, но и обычный администратор. В мире, где, к сожалению, существуют эксплойты нулевого дня и, к счастью, IDS, IPS и прочие средства защиты периметра, умение «найти и обезвредить» выходит на первый план – в какой-то степени ореол романтики переместился от создателей вирусов к борцам с ними.
Куда пойти учиться?
Правда, анализ вредоносного кода с целью понять, что он делает, и найти действенные способы защиты от него – не тот навык, который можно приобрести за дождливое воскресенье, тем более что учебников – раз-два и обчелся. Из русскоязычных изданий на ум приходят «Записки исследователя компьютерных вирусов» Криса Касперски [2] (написанные, кстати, на основе статей, опубликованных автором в «СА»), хотя это скорее теория, отвечающая на вопрос, как оно работает, чем практика. Разумеется, на тематических ресурсах можно найти горы информации, но она не всегда актуальна, не обязательно структурирована – в общем, не особенно подходит для быстрого введения в предмет.
Видимо, все эти обстоятельства и подтолкнули североамериканское издательство No Starch Press к выпуску Practical Malware Analysis (http://nostarch.com/malware или http://practicalmalwareanalysis.com) – увесистого 800-страничного фолианта, посвященного основным вопросам анализа «зловредов» в целях противодействия им. Авторы книги Майкл Сикорски (Michael Sikorski) и Андрью Хониг (Andrew Honig) знакомы с предметом не понаслышке. Оба имеют опыт сотрудничества с такими организациями, как Агентство национальной безопасности и Министерство обороны США. По вполне понятным причинам книга ориентирована в первую очередь на ОС семейства Microsoft Windows, хотя предлагаемые авторами подходы остаются применимыми и для разновидностей UNIX.
Книга состоит из 21 главы, которые объединены в шесть частей, охватывающих статический и динамический анализ (как на базовом, так и на продвинутом уровне), инструментарий (например, сборку тестового стенда на базе виртуальных машин VMware, работу в дизассемблере IDA Pro и отладчиках OllyDbg и WinDbg), основы ассемблера x86, чтение дизассемблированных листингов и различные специальные вопросы, например, анализ shell-кода или вредоносные программы для архитектуры x64.
Во всех случаях авторы стараются придерживаться единого подхода: сперва общие техники (например, просмотр импортируемых функций или создание DNS-сервера-«обманки»), затем инструменты, пригодные для их реализации, и, наконец, пример использования. Кстати, в предлагаемом инструментарии (полный алфавитный список которого со ссылками и кратким описанием каждой программы можно найти в Приложении B) довольно часто фигурируют свободное ПО и специализированные дистрибутивы Linux. Это в определенной мере подтверждает тезис о популярности Open Source в кругах ИТ-профессионалов (пусть даже ориентирующихся на другие ОС).
Как можно видеть, перечень обсуждаемых вопросов довольно внушительный: читателя научат, как понять, что делает вредоносный код, не запуская программу (и в первом приближении даже не дизассемблируя ее) или, наоборот, выполняя код в изолированной среде и следя за тем, какие изменения он вносит в систему, с отладчиком или без оного. Ему придется даже «нырнуть в мрачные глубины ядра Windows NT, куда не проникает свет GUI» и освоить методы, применяемые авторами вредоносных кодов для защиты от анализа (то есть отладки, дизассемблирования, запуска в виртуальной машине и т.п.). Тем удивительнее то, что авторы не предъявляют особых требований к подготовке читателя. Можно сказать, что книга ориентирована на ИТ-специалиста в широком смысле этого слова. Чтобы понимать ее, по замыслу авторов, важно представлять лишь, как в принципе устроены компьютер и операционная система: все необходимые детали, включая уже упомянутые выше основы ассемблера x86, будут сообщены на ходу. До определенных пределов это действительно работает, но иногда бывает довольно странно видеть рядом пояснение, зачем в принципе программисты используют цикл for, и ассемблерные инструкции, реализующие последний: обычно люди, способные понять второе, уже знают первое.
Все это накладывается на традиции американской школы – сообщать теорию лишь в объеме, необходимом для решения практических задач. В результате читатель, не сталкивавшийся ранее с программированием на языке низкого уровня, конечно, получит некоторый набор рецептов и общее представление о способах их применения, но едва ли заложит прочный фундамент в понимание происходящих процессов. Practical Malware Analysis прекрасно справляется со своей целью – обучить анализу вредоносного кода на практике. Но для лучшего усвоения материала не помешает иметь под рукой что-то вроде Windows Internals (в русском переводе «Внутреннее устройство Microsoft Windows») [3, 4] или Windows via C/C++ («Windows via C++. Программирование на языке Visual C++») [5].
Производственная практика
Возможно, авторы и не ставили перед собой цели заложить пресловутый фундамент – все-таки книга имеет отнюдь не теоретическую направленность. А в том, что касается практики, Сикорский и Хониг постарались на славу. Для каждой главы придумано несколько (как правило, три-четыре) лабораторных работ, отличающихся по уровню сложности, – исключения составляют лишь главы, носящие ознакомительно-справочный характер. Более того, едва ли не половина объема книги приходится на подробный разбор этих лабораторных, где представлены не только правильные ответы на поставленные вопросы, но и приводящие к ним рассуждения по схемам (и с использованием инструментов), предложенным в основном содержании главы. Последовательность – вообще одна из ключевых сильных сторон Practical Malware Analysis, и авторам удается донести до читателя концепцию «думай так и придешь к ответу», не скатываясь в сборники рецептов и HOWTO.
Лабораторные работы проводятся в условиях, максимально приближенных к боевым. Вредоносные (действительно вредоносные – не запускайте их на реальной машине!) программы доступны лишь в виде скомпонованных двоичных файлов с ничего не значащими именами. От настоящей работы подобную лабораторную отличает лишь то, что объекты, содержащие вредоносный код, известны заранее, их не надо вычленять из зараженной системы. Впрочем, в различных местах по тексту есть указания на то, как это делается, а основным средствам, используемым «зловредами» для собственного запуска, даже посвящена специальная глава (12).
Кстати, именно ее можно скачать бесплатно в качестве «пробника», что само по себе довольно полезно: можно хранить как шпаргалку по уголкам Windows, которые в случае чего надо проверить в первую очередь. Если вы следуете авторским указаниям буква в букву, для выполнения лабораторных работ может потребоваться коммерческое ПО (в частности, VMware Workstation и IDA Pro); к счастью, в большинстве случаев можно обойтись бесплатными версиями и программами-аналогами (например, VirtualBox и IDA Free).
Итак, Practical Malware Analysis – хорошее практическое введение в анализ самых разных вредоносных программ. Не стоит ожидать, что, прочитав его, вы станете глубоко понимать устройство Windows или программировать на ассемблере – для всего этого есть другие не менее хорошие книги. Однако если во вверенной вам сети в один не очень прекрасный день что-то пойдет не так, вы сможете установить «причину» и минимизировать последствия от ее деятельности. Книгу можно читать и просто из спортивного интереса – вирусы, трояны и черви зарываются куда глубже, чем обычно, приходится работать прикладным программистам и системным администраторам, так что их изучение – хороший повод узнать что-то новое или по-другому взглянуть на старое. Сейчас Practical Malware Analysis доступна только на английском языке и стоит недешево ($60 без доставки), но, возможно, на нее со временем обратит внимание какое-нибудь российское издательство.
- Данилов И. Если человек хочет, он добьется всего. //«Системный администратор», №11, 2011 г. – С. 6-10 (http://samag.ru/archive/article/1458).
- Касперски К. Записки исследователя компьютерных вирусов. – ИД «Питер», 2005.
- Руссинович М. Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000. – ИД «Питер», 2005.
- Mark Russinovich, D. Solomon, A. Ionescu. Windows Internals, Fifth Edition. – Microsoft Press, 2009.
- Рихтер Дж., Назар К. Windows via C/C++. Программирование на языке Visual C++. – ИД «Питер», 2009.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|