<< Предыдущая

стр. 34
(из 39 стр.)

ОГЛАВЛЕНИЕ

Следующая >>

виде, но, безусловно, относится к информационной безопасности самым
прямым образом.


19.3. Синтез и анализ
Как видно, существует довольно много причин заниматься исследованием
средств безопасности. Но проводить анализ защиты способен далеко не ка-
ждый человек.
У разных людей могут быть совершенно разные склонности. Кому-то ближе
естественные науки, общение с природой. Кто-то предпочитает заниматься
социальными вопросами, изучать человека и общество. Кто-то тяготеет
к точным наукам. Вариантов очень много.
Но если рассматривать людей любой профессии, то их можно разделить на
тех, у кого есть способности к программированию, и тех, у кого таких спо-
собностей нет. А что отличает программиста от непрограммиста? Какими
специальными способностями должен обладать человек, чтобы ему хорошо
давалось программирование?
Программист занимается тем, что реализует алгоритмы на заданном языке
программирования. В его распоряжении есть набор кубиков — разрешенных
языком конструкций, и он складывает эти кубики таким образом, чтобы
получилась нужная картинка, представляющая собой алгоритм. А критерий
правильности картинки заключается в том, что для любых входных данных
можно пройти до цепочке от первого до последнего кубика и получить за-
данный результат.
Разумеется, почти всегда существует более одного способа сложить кубики,
но и конечные картинки будут отличаться по многим характеристикам. Бу-
дут расхождения в количестве использованных кубиков (в размере кода) и
длине цепочки от первого до последнего кубика (в быстродействии). Неко-
торые кубики могут стоять неправильно (ошибки). И конечно, в результате
будет различаться время, которое программист потратит на складывание
картинки из кубиков.
Глава 19. Кому это нужно 233

Программистом обычно становится тот, кому быстро удается складывать
кубики. А хороший программист делает это быстро, использует минималь-
ное число кубиков и не допускает при этом ошибок. Программирование —
это умение решать задачи синтеза.
Исследователем тоже может быть не каждый. Исследования — это решение
задач анализа. Когда аналитику показывают целую картинку, он должен
уметь быстро разобрать ее на отдельные кубики. Чаще всего, картинка пред-
ставляется приблизительно — мелкие детали не видны, а некоторых фраг-
ментов просто не хватает. И аналитик додумывает, что должно быть в отсут-
ствующих местах и как именно был реализован тот или иной узел.
И, конечно же, пытается найти ошибки, позволяющие заставить картинку
вести себя не так, как планировал разработчик.
Почти всегда для того, чтобы понять, как работает программа, требуется
начать думать так, как думал программист. И ирония заключается в том, что
если программист был хороший и использовал оптимальные решения, то
эти решения очень легко предсказать, и тогда даже по очень грубой схеме
аналитик будет в состоянии воссоздать все детали. А вот если программу
писал человек, не заботившийся о применении наиболее эффективных ре-
шений (по незнанию или намеренно), анализ становится значительно
сложнее — приходится внимательно разглядывать каждую деталь. Именно
по этому при реализации средств защиты требуется уходить от эффективно-
сти программирования — это затруднит проведение анализа противником.
Кстати, несмотря на то, что исследователь программ должен хорошо пред-
ставлять себе, как работает программист, совершенно не обязательно, что
человеку, склонному к анализу, будет хорошо даваться синтез. Умение хо-
рошо программировать не является обязательным для аналитика.
Точно оценить соотношение людей, способных к синтезу (программистов),
и людей, способных к ан&тазу (исследователей), довольно сложно, но можно
предположить, что на 95 программистов приходится примерно 5 исследовате-
лей. Подобное соотношение неплохо вписывается в существующую индуст-
рию разработки программного обеспечения. Труд программиста требуется
очень часто, а значит, у программиста есть шанс найти работу в огромном
числе мест. Но хороших исследователей мало, и их переизбытка почти нико-
гда не бывает, а значит, у аналитика меньше шансов потерять работу.
Глава 20


Интернет —
кладезь информации
Когда перед аналитиком ставится задача провести исследование определен-
ного программного комплекса, необходимо с чего-то начать. Разумеется,
можно сразу вооружиться отладчиком и дизассемблером и попытаться
вникнуть во все детали, но для современных программ такой подход мало-
пригоден — уж слишком велик их объем.
Однако очень много полезной информации об исследуемой программе мо-
жет быть найдено в Интернете. Главное — знать, что, где и как искать.


20.1. Что искать в Интернете
Как правило, любая система защиты до того, как становится достаточно по-
пулярной, чтобы привлечь интерес исследователей, проходит весьма длин-
ный путь развития. И очевидно, что большинство продуктов при переходе
к следующей версии изменяется в сторону усложнения. Ведь сначала разра-
ботчики создают защиту в таком виде, в котором они считают ее работоспо-
собной. Но, столкнувшись с некоторыми типами атак, которые не были
предусмотрены в существующей версии, программисты включают в код но-
вые элементы защиты.
Следовательно, можно предположить, что провести исследование более
ранних версий той же системы, а потом перенести полученные знания на
актуальную версию будет проще, чем сразу браться за самую свежую версию
программы. А значит, необходимо найти предыдущие версии, и чем больше,
тем лучше.
Иногда разработчики защиты, сами того не понимая, публикуют информа-
цию, помогающую противнику найти уязвимость. Поэтому очень важно
внимательно изучить всю доступную документацию и информацию, приво-
димую разработчиком в Интернете.
Но нередки случаи, когда, вовремя опомнившись, разработчик удаляет
опасные факты из всех описаний. Поэтому желательно просматривать не
238 Часть V. Заметки об исследовании средств защиты


Именно с помощью The Wayback Machine иногда удается получить инфор-
мацию, которая сначала была опубликована разработчиками какой-нибудь
программы, а затем удалена. Ведь Wayback Machine хранит копии 30 милли-
ардов интернет-страниц, собранных с 1996 года.
Кроме того, старые версии страничек хранят ссылки на файлы предыдущих
версий программы. И, хотя сами файлы недоступны, можно выяснить их
точные имена и попытаться выполнить поиск другими средствами.
Раньше The Wayback Machine позволяла производить поиск только по адре-
сам страниц, но не по их содержимому. Зато для каждого адреса показыва-
лось, когда была сохранена копия страницы и отличалась ли она от преды-
дущей версии. Но сейчас в рамках Wayback Machine появился сервис Recall
(находящийся пока в стадии бета-тестирования), позволяющий выполнять
полноценный текстовый поиск по 11 миллиардам сохраненных страниц.
The Wayback Machine можно найти по адресу web.archive.org.

20.2.5. FTP Search
Если известно точное имя файла, то его можно попытаться найти на FTP-
сайтах. Но обходить сайты один за другим — занятие почти безнадежное.
Гораздо эффективнее воспользоваться службой FTP Search, робот которой
с некоторой периодичностью обходит все известные ему FTP-серверы и за-
поминает информацию о найденных файлах.
Таких служб довольно много. Программа ReGet Deluxe, например, умеет
выполнять поиск файлов в семи каталогах FTP-сайтов:
• SunSITE (sunsite.cnlab-switch.ch:8000);
• FileSearch.ru (www.filesearch.ru);
• Lap Link (ftpsearch.laplink.com);
• Rambler (ftpsearch.rambler.ru);
• SUNET (ftp.sunet.se:8000/ftpsearch);
• FtpFind (www.ftpfind.com);
• FileMirro'rs (www.filemirrors.com).

20.2.6. Peer-to-Peer networks
Еще одно место, где можно найти почти все что угодно, — это пиринговые
(Peer-to-Peer) сети. Первым широко известным их представителем был
Napster, предназначенный для обмена музыкальными композициями. Сей-
час существует довольно много разных файлообменных сетей, например
eDonkey2000, iMesh или Kazaa.
Глава 20. Интернет — кладезь информации 239

В пиринговых сетях нет одного конкретного места, где хранится файл. Каж-
дый пользователь делает общедоступной фрагмент своей файловой системы
и передает информацию о находящихся там файлах на сервер. Другой поль-
зователь может обратиться к серверу и узнать, у кого есть интересующий его
файл. После этого устанавливается прямое соединение между двумя пользо-
вателями (без участия сервера), и выполняется передача данных. При этом
разные фрагменты одного и того же файла могут скачиваться сразу у не-
скольких пользователей. И если один из пользователей, у которых этот файл
был в наличии, отключается от сети, фрагмент может быть скачан у кого-то
другого.
Разумеется, в пиринговых сетях можно найти только то, что кто-то из поль-
зователей выложил в открытый доступ. Но старые версии программ там
можно встретить довольно часто.

20.2.7. Распродажи
Еще один способ найти старые версии программ — купить их на распродаже.
Иногда распродажи устраивают сами производители программ и отдают ус-
таревшие версии по символическим ценам, например S 10 за каждую копию
продукта, которая стоила в свое время $ 200.
Другой вариант найти уцененное программное обеспечение — воспользовать-
ся онлайновым аукционом, например eBay. На таком аукционе легальный
пользователь, решивший по каким-то причинам отказаться от использования
программы, продает свою лицензию кому-то другому. И, разумеется, при этом
он просит меньше денег, чем сам заплатил при покупке.


20.3. Саморазвитие
и интеллектуальные игры
Кроме информации о конкретном продукте, в Интернете можно найти и
знания. В своей работе исследователь защиты нередко сталкивается с ранее
не встречавшимся и непонятными ему методами и приемами. И для того
чтобы разобраться в особенностях их реализации, приходится многому
учиться.
К счастью, в сети можно найти несколько сайтов, авторы которых собрали
коллекцию задач разной сложности и организовали конкурс-игру по их ре-
шению. Иногда задания просто выдаются одно за другим, иногда цепь зада-
ний даже связана каким-то сюжетом.
Задания могут относиться к самым разным областям: программированию на
популярных языках (Assembler, С, Haskel, JavaScript, Perl, Python), сетевым
240 Часть V. Заметки об исследовании средств защиты


технологиям, математике, логике, криптографии и стеганографии, умению вы-
полнять поиск в Интернете, работать с отладчиками и дизассемблерами и т. д.
Первые задания обычно очень простые и решаются неподготовленным че-
ловеком за считанные минуты. Решение заданий первого уровня позволяет
получить доступ к следующему уровню и его заданиям. Каждый следующий
уровень становится все труднее и требует все больше знаний, подталкивая
тем самым участников игры к самообразованию.
Часто игре сопутствует форум, в котором разрешено обсуждать вопросы,
касающиеся прохождения того или иного уровня, но нельзя просить и да-
вать прямых подсказок по решению задач. И почти всегда можно узнать, на
каком уровне находится каждый из участников, и понять, что почти всегда
есть к чему стремиться.
Материальных призов в подобных играх почти никогда не бывает. Но уча-
стников, кроме рейтинга в общей таблице конкурсантов, ждет более ценная
награда — знания и навыки, полученные в ходе решения конкурсных задач.
Разумеется, подобные игры интересны далеко не всем. Но, похоже, люди со
склонностью к исследованиям получают огромное удовольствие от решения
таких головоломок.
Тем, кто хочет попробовать свои силы, можно порекомендовать следующие
проекты:
• Electrica the Puzzle Challenge (www.caesum.com/game/index.php);
П Resistor Challenge (resistor.topgamers.net);
Mod-X (www.mod-x.co.uk);

• The Reverse-Engeneering-Academy (www.reverser-course.de).
Иногда и крупные компании организуют конкурсы, причем с настоящими
призами. Много таких конкурсов устраивала RSA Data Security. Приз обыч-
но составлял $ 10 000, а целью конкурса было подобрать ключ шифрования
к данным, защищенным при помощи одного из криптографических алго-
ритмов, разработанных в RSA Data Security.
Производители оборудования и программного обеспечения иногда тоже
объявляют конкурсы, в которых требуется получить контроль над общедос-
тупным сервером, на котором установлен определенный набор программ.
Как правило, набор программ совпадает с тем, что используется в реальных
системах. И если за достаточно длительный период никто не сможет нанес-
ти работе сервера ощутимый урон, значит, подобную конфигурацию можно
смело использовать на практике.
А компания Thawte в ноябре 2003 года объявила о начале четвертого Crypto
Challenge, в рамках которого всем желающим предлагается взломать шифр,
Глава 20. Интернет — кладезь информации 241

разработанный специально для этого конкурса. В качестве награды первый
человек, приславший правильное решение, должен получить цифровую фо-
токамеру Nikon, а десять следующих за ним — книгу Кевина Митника
(Kevin Mitnick) "Искусство обмана" ("Art of Deception").
В целом, несмотря на плохую структурированность Интернета, при желании
там можно почерпнуть практически все необходимые для проведения иссле-
дований знания, получить дополнительную информацию о предмете анали-
за и найти много полезных инструментов.
Глава 21


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


21.1. Классификация инструментов
Инструменты можно классифицировать по-разному. Например, на пассив-
ные и активные.
Пассивные инструменты не оказывают никакого воздействия ни на саму
исследуемую программу, ни на ее окружение. Активные инструменты, на-
оборот, взаимодействуют с программой во время ее выполнения. Из этого
следует два важных замечания:
• активный инструментарий может дать гораздо больше информации, чем
пассивный, т. к. позволяет оценивать состояние программы в динамике;
• присутствие активных инструментов может быть обнаружено защитой и
может привести к ответным действиям. Обнаружить или предотвратить
применение пассивных средств программа не в состоянии.
Активные инструменты, в свою очередь, могут использоваться только для
протоколирования (мониторинга) хода выполнения программы или для яв-
ного воздействия на ход выполнения программы: подмены данных, исправ-
ления результатов проверки условий и т. д.
Также активный инструментарий может производить виртуализацию среды
выполнения программы. То есть программа находится в полной уверенно-
сти, что выполняется в самых обычных условиях, а на самом деле каждый ее
шаг, включая действия по поиску активных средств анализа, находится под
полным контролем исследователя.
244 Часть V. Заметки об исследовании средств защиты

<< Предыдущая

стр. 34
(из 39 стр.)

ОГЛАВЛЕНИЕ

Следующая >>