Основное преимущество исследователя перед разработчиком — неограниченность времени. В распоряжении разработчика есть период с момента запуска проекта и до момента выхода готовой программы. Этот период может длиться 2 недели, а может 3 года. Но именно за это время необходимо продумать и реализовать все необходимые средства защиты.
Исследователь получает систему защиты в свое распоряжение после того, как разработка завершена. И, начиная с этого момента, он может пробовать самые разные подходы для того, чтобы найти в защите слабое место. Исследователь не ограничен во времени — с программой ничего не случится ни через год, ни через 10 лет. В крайнем случае, всегда можно отключить компьютер от сети, отвести часы назад и восстановить конфигурацию системы с предварительно сохраненной резервной копии.
Разработчик может выпускать новые версии программ, добавляя или модифицируя их защитные механизмы, но он не может исправить уже существующую версию программы. А его противник, исследователь, имеет возможность обновлять свой инструментарий и навыки до тех пор, пока не найдет правильный подход.
То есть, несмотря на то, что разработчик всегда может оказаться впереди исследователя (о чем очень любят заявлять некоторые производители средств защиты от несанкционированного тиражирования программного обеспечения), их преимущество всегда носит локальный, временный характер. Для каждой защиты рано или поздно отыскивается метод противодействия, а программы, использующие такую защиту, оказываются взломаны.
И если разработчиком зачастую руководят только материальные стимулы, то исследователи почти всегда движимы любопытством, интересом. А для увлеченного человека это очень сильный мотив. Так что новые методы анализа будут появляться ничуть не медленнее, чем методы защиты.
С учетом всего вышесказанного, хочется пожелать удачи тем, кто пытается найти свое место в сфере информационной безопасности. По большому счету, стать специалистом по защите информации не так уж и сложно. Достаточно понимать, что можно делать с информацией, владеть современными технологиями безопасности, знать методы работы противника (независимо от того, на какой вы стороне) и никогда не переставать изучать, исследовать, докапываться до сути.
К счастью, все больше компаний приходят к пониманию того, что в современном информационном мире обеспечение информационной безопасности является очень важной задачей. Возможно, этому способствует тот факт, что все больше инцидентов, связанных с нарушением защиты, становятся известными широкой аудитории. И в этом довольно большая заслуга средств массовой информации, которые стали уделять внимание подобным вопросам.
Правда, иногда возникает ощущение, что средства массовой информации намеренно забывают некоторые факты, стремясь раздуть скандал. Иначе как объяснить, что очень много кричат о компьютерном вирусе, вызвавшем эпидемию, хотя заплатка для уязвимости, использованной вирусом, была доступна за несколько месяцев до появления вируса. То есть эпидемия случилась исключительно из-за халатности системных администраторов, не установивших вовремя обновление системы безопасности.
В любом случае, очень многие люди, соприкасающиеся с информационной безопасностью не только как пользователи, имеют недостаточный багаж знаний в этой области. И прежде чем вкладывать весьма значительные средства в разработку или приобретение средств защиты, стоит обучить людей хотя бы основным принципам безопасности, т. к. без этого даже самая надежная техническая система будет давать сбои в самом слабом звене — человеческом факторе.
Поскольку хороших универсальных решений не бывает, ограничим класс программных продуктов, для которых будет проводиться реконструкция протокола. Исследуемая программа должна удовлетворять следующим требованиям:
та часть программы, в которой реализован криптографический протокол, скомпилирована в машинный код, т. е. выполняться напрямую процессором, а не виртуальной машиной. Это позволит использовать эвристики, которые плохо работают (или не работают вообще), если прлменяют-ся к псевдокоду. Но данное ограничение нельзя назвать очень строгим, т. к. криптографические примитивы, полностью реализованные на базе виртуальной машины, выполняются очень медленно и неприменимы для большинства практических задач;
О программа выполняется под одной из версий 32-битовой операционной системы Windows на процессоре х86. Это также не очень сильно сужает область возможного применения, ведь большинство персональных компьютеров сейчас имеют именно такую конфигурацию. К тому же почти все эвристики могут быть адаптированы к другим операционным системам и аппаратным платформам;
исполняемый модуль, подвергаемый анализу, не запакован и не зашифрован. Если это не так, распаковку необходимо выполнить до того, как приступать к исследованиям;
в программе используются опубликованные в открытых источниках криптографические алгоритмы. Данное требование будет удовлетворено с очень большой вероятностью, т. к. большинство разработчиков предпочитают использовать надежные алгоритмы, а надежность криптографического алгоритма подразумевает открытость его спецификации;
программа разработана в рамках обычного процесса проектирования программного обеспечения, т. е. код оптимизирован с целью упрощения или повышения скорости выполнения, а не написан специально таким образом, чтобы усложнить его анализ;
• программа создана и распространяется с соблюдением всех законов, патентов и лицензий, под действие которых она попадает.
Несмотря на большое количество перечисленных требований, им удовлетворяет подавляющее большинство программ под Windows, использующих криптографию.
Инструменты можно классифицировать по-разному. Например, на пассивные и активные.
Пассивные инструменты не оказывают никакого воздействия ни на саму исследуемую программу, ни на ее окружение. Активные инструменты, наоборот, взаимодействуют с программой во время ее выполнения. Из этого следует два важных замечания:
• активный инструментарий может дать гораздо больше информации, чем пассивный, т. к. позволяет оценивать состояние программы в динамике;
присутствие активных инструментов может быть обнаружено защитой и может привести к ответным действиям. Обнаружить или предотвратить применение пассивных средств программа не в состоянии.
Активные инструменты, в свою очередь, могут использоваться только для протоколирования (мониторинга) хода выполнения программы или для явного воздействия на ход выполнения программы: подмены данных, исправления результатов проверки условий и т. д.
Также активный инструментарий может производить виртуализацию среды выполнения программы. То есть программа находится в полной уверенности, что выполняется в самых обычных условиях, а на самом деле каждый ее шаг, включая действия по поиску активных средств анализа, находится под полным контролем исследователя.
Еще один способ классификации инструментов — по области применения, т. е. что именно подвергается исследованию:
исполняемый код;
ресурсы приложения; дисковые файлы;
записи в реестре;
информация в оперативной памяти; информация, получаемая от устройств ввода; информация, посылаемая на устройства ввода;
сообщения и данные, пересылаемые между процессами и внутри процесса; данные, передаваемые по сети; вызовы библиотечных функций. Рассмотрим несколько наиболее мощных инструментов исследования.
Как правило, любая система защиты до того, как становится достаточно популярной, чтобы привлечь интерес исследователей, проходит весьма длинный путь развития. И очевидно, что большинство продуктов при переходе к следующей версии изменяется в сторону усложнения. Ведь сначала разработчики создают защиту в таком виде, в котором они считают ее работоспособной. Но, столкнувшись с некоторыми типами атак, которые не были предусмотрены в существующей версии, программисты включают в код новые элементы защиты.
Следовательно, можно предположить, что провести исследование более ранних версий той же системы, а потом перенести полученные знания на актуальную версию будет проще, чем сразу браться за самую свежую версию программы. А значит, необходимо найти предыщущие версии, и чем больше, тем лучше.
Иногда разработчики защиты, сами того не понимая, публикуют информацию, помогающую противнику найти уязвимость. Поэтому очень важно внимательно изучить всю доступную документацию и информацию, приводимую разработчиком в Интернете.
Но нередки случаи, когда, вовремя опомнившись, разработчик удаляет опасные факты из всех описаний. Поэтому желательно просматривать не
Именно с помощью The Wayback Machine иногда удается получить информацию, которая сначала была опубликована разработчиками какой-нибудь программы, а затем удалена. Ведь Wayback Machine хранит копии 30 миллиардов интернет-страниц, собранных с 1996 года.
Кроме того, старые версии страничек хранят ссылки на файлы предыдущих версий программы. И, хотя сами файлы недоступны, можно выяснить их точные имена и попытаться выполнить поиск другими средствами.
Раньше The Wayback Machine позволяла производить поиск только по адресам страниц, но не по их содержимому. Зато для каждого адреса показывалось, когда была сохранена копия страницы и отличалась ли она от предыдущей версии. Но сейчас в рамках Wayback Machine появился сервис Recall (находящийся пока в стадии бета-тестирования), позволяющий выполнять полноценный текстовый поиск по миллиардам сохраненных страниц.
Когда перед аналитиком ставится задача провести исследование определенного программного комплекса, необходимо с чего-то начать. Разумеется, можно сразу вооружиться отладчиком и дизассемблером и попытаться вникнуть во все детали, но для современных программ такой подход малопригоден — уж слишком велик их объем.
Однако очень много полезной информации об исследуемой программе может быть найдено в Интернете. Главное — знать, что, где и как искать.
За разработку своей защиты имеет смысл браться в трех случаях, когда:
□ система защиты разрабатывается как коммерческий проект;
• существующие средства защиты не способны обеспечить необходимую функциональность;
□ существующие средства защиты не подходят по соображениям безопасности.
Первый случай, когда защита разрабатывается с целью извлечения прибыли, особого интереса не представляет — это обыкновенный коммерческий проект, в котором обеспечение надежности защиты вполне может не играть никакой роли. Единственная цель разработчика — извлечь максимум прибыли.
Во втором случае пользователю необходимо защищать информацию в некоторых уникальных условиях, для которых ни одна из существующих систем не была предназначена. Подобные ситуации появляются регулярно как прямое следствие развития технологий. Пока не было дисков, пригодных для записи фильмов с хорошим качеством изображения, не стоял вопрос и об их защите. Пока не получили широкое распространение мобильные технологии, не требовалось реализовывать стойкие криптографические алгоритмы на процессорах, используемых в телефонах. Разработка новых технологий в любой области — весьма рискованное занятие, но при защите информации риск увеличивается многократно. Опасности подвергаются не только данные, обрабатываемые в период после обнаружения ошибки противником и до исправления этой ошибки, но и вообще вся информация, защищенная в то время, когда ошибка существовала.
Третий случай занимателен тем, что, несмотря на наличие средств обеспе- чения безопасности, внешне пригодных для решения поставленных задач, нет никакой уверенности в надежности существующих решений. А если стоимость потери целостности или информации очень
велика (что вполне реально, например, для банковских данных и государственных секретов), имеет смысл затратить ресурсы на разработку собственной реализации защиты. Ведь достичь рациональной уверенности в том, что средства зашиты, созданные кем-то другим, не содержат случайных или намерено внесенных уязвимостей, очень сложно.
Когда над каким-либо проектом работает группа программистов и выясняется, что в существующей системе необходимо предусмотреть функции защиты, чаще всего руководитель проекта возлагает реализацию защиты на плечи одного из имеющихся исполнителей.
Или представим ситуацию, когда программист-одиночка разрабатывает программу, основная функциональность которой относится к той области, в которой он является высококлассным специалистом. И вот, появляется идея защитить часть данных при помощи шифрования. Неужели человек станет тратить время на поиск специалиста по безопасности, а потом изыскивать деньги на оплату его услуг? Скорее всего, нет.
Стоит ли привлекать новых людей, если существующие программисты пре- красно знают свою работу? Надо ли тратить деньги на оплату услуг специа- листа по безопасности? Ведь в защите информации нет ничего сложного! С помощью функции из трех строк можно перевести пароль в такой вид, что никто никогда не сможет отгадать, что это за пароль. А еще три строки позволят зашифровать данные. И вот защита готова и даже работает. Ведь если ввести неправильный пароль, то программа ничего не покажет. И при просмотре файла с защищенной информацией редак-
торе не видно ни пароля, ни самих данных.
При таком подходе к разработке защиты обычно удается сэкономить некоторое количество денег и времени. Правда потом, когда защита будет взломана, за построение нормальной защиты (если разработчики дорожат своей репутацией) все равно придется заплатить.
Может получиться и по-другому. Иногда человек, перед которым ставят задачу реализовать, например, цифровую подпись, обращается к поисковой системе Google, находит криптографическую библиотеку с подходящей лицензией и использует реализованный в ней механизм подписи “как есть”. С чувством хорошо выполненного долга он сдает работу и очень сильно удивляется, когда даже стойкий криптографический алгоритм не смог предотвратить
Защита информации — это такая область, где нельзя быть специалистом частично. Если в других отраслях возможность применения 90 % существующих технологий приводит к результату, который на 10 % хуже идеального, то в защите информации проценты не играют никакой роли. Полученное решение будет или защищенным, или незащищенным.
Но, к сожалению, понимание того, что специалисты по защите информации не зря едят свой хлеб, ко многим приходит даже не с первого раза. Иначе чем можно объяснить многократные попытки улучшения защиты, конечным результатом которых является легко уязвимая система?
Как было рассказано в предьгдущих главах, криптографии, опирающейся на методы, имеющие математическое обоснование стойкости, обычно достаточно для обеспечения секретности, но уже не хватает для обеспечения БИУТ А еще существуют ситуации, в которых оказываются неприменимы даже методы защиты, основанные на принципе “черного ящика”. И в таких ситуациях на помощь может прийти стеганография.
Стеганография позволяет скрыть сам факт передачи сообщения. Для этого используется так называемый стеганографический контейнер, в котором передаваемое сообщение размещается таким образом, чтобы его было очень трудно извлечь или разрушить.
В качестве стеганографического контейнера может выступать почти все что угодно: газетная заметка, точка в конце предложения, картинка и даже лист белой бумаги. Главное — чтобы существовал способ незаметно разместить в этом контейнере некоторый объем информации.
Не останавливаясь подробно на истории применения стеганографии в разные эпохи, трудно удержаться от упоминания нескольких исторических фактов. Так, во время второй мировой войны в США предпринимались серьезные меры по предотвращению утечки информации за рубеж. Были запрещены к международной почтовой пересылке шахматные партии, детские рисунки и инструкции по вязанию. Также не допускались международные телеграммы, в которых речь шла про заказ и доставку цветов. Существовал даже специальный фонд бумаги, откуда брались чистые листы, чтобы заменить листы, отправляемые жителями США родственникам, проживающим в странах, где с бумагой были проблемы. Все это делалось для того, чтобы помешать передаче скрытых сообщений.
В информационном мире стеганография также получила развитие. Были разработаны методы, позволяющие использовать в качестве стеганографиче-ского контейнера многие популярные форматы данных. Лучше всего для этих целей подходят звуковые файлы и графические изображения, т. к. правильно внесенные искажения не обнаруживаются визуально или слух вследствие особенностей строения органов чувств. Исследования в области цифровой стеганографии продолжаются до сих пор.
Компанией Infraworks, занимающейся вопросами борьбы с воровством ин- теллектуальной собственности, была разработана технология (на привязи), которую сами разработчики предпочитают называть не DRM, a DPP — Digital Property Protection (защита цифровой собственности). Воз- можно, разница между DPP и DRM — это всего лишь игра терминов, по- зволяющая не бояться обвинений в нарушении патентов на системы DRM. Во всяком случае, у DRM и DPP очень много общего.
Отличительная особенность InTether заключается в том, что эта технология может применяться для защиты документов практически любого типа — совершенно не обязательно знать, с чем именно будет иметь дело защита.
После установки InTether на компьютер у конечного пользователя появляет- ся возможность получать из Интернета или другого источника защищенные документы и размещать их на диске. На самом деле, в файловую систему будет помешен только файл нулевого размера, а содержимое окажется спря- танным в защищенном хранилище. Но когда загружены драй- вера защиты, создается ощущение, что файлы действительно существуют и имеют ненулевой размер.
При попытке открытия защищенного документа любой программой в ход вступает модуль защиты, предупреждающий пользователя о том, какие ограничения наложены на этот документ. Набор поддерживаемых ограничений довольно широк и включает в себя такие возможности, как уничтожение документа через 10 минут после открытия, запрет на сохранение копии документа, запрет на использование буфера обмена и многое другое.
Если пользователь подтверждает свое желание открыть документ, то программа, используемая для этого, попадает как бы в изолированный мир. Для пользователя все будет работать практически как обычно: можно сохранять файл, можно копировать выделенный текст в буфер обмена. Но ни один другой процесс не увидит результатов этих действий, т. к. защита лишь эмулирует их для процесса, открывшего защищенный файл.
По утверждению главного администратора компании Infraworks, защита, на разработку которой ушло более 3-х лет, состоит из 11 слоев, каждьш из которых контролирует целостность всех остальных. И если противнику удастся нейтрализовать один из слоев, это обнаружится в другом слое и защищаемая информация будет уничтожена.
Действительно, защита устанавливает около 10 драйверов в ядро операционной системы, что само по себе выглядит устрашающе. Но ведь общая стойкость защиты определяется самым слабым звеном. А слабое звено, в данном случае, не в драйверах, а в самой операционной системе.
Дело в том, что Windows поддерживает огромное количество различных способов для передачи информации от одного процесса к другому, например:
□ COM (Component Object Model, модель компонентных объектов);
• Data Сору (сообщениеWM_COPYDATA);
□ DDE (Dynamic Data Exchange, динамический обмен данными);
File Mapping (файлы, отображаемые в память); О Mailslots (почтовые ящики);
Pipes (каналы);
RPC (Remote Procedure Call, удаленный вызов процедур).
И, используя любой из этих методов, программа, открывшая защищенный файл, может передать его содержимое другому процессу, на функционирование которого не будет наложено никаких ограничений.
Разработчики InTether были поставлены в известность относительно найденной уязвимости, и в последней версии программы используется понятие “trusted applications” — приложения, которым разрешено открывать защищенные документы.
Но, скорее всего, проблема осталась, ведь, например, Microsoft Word должен оказаться в списке “trusted applications” для DOC-файлов. Но Word позволяет выполнять программы, написанные на VBA (Visual Basic for Applications). А средствами VBA можно читать и записывать файлы, обращаться к СОМ-объектам, вызывать функции из динамически загружаемых библиотек и делать многое другое. Следовательно, с большой вероятностью отыщется и простой в реализации способ использования одного из механизмов цессного взаимодействия (Interprocess communication, 1PC).
Хорошо было бы запретить выполнение всех видов в IPC в приложении, открывшем защищенный документ, но такой метод вряд ли позволит достичь желаемого результата. Ведь многие современные программы активно средства IPC, и их блокировка, скорее всего, приведет к потере работоспособности.