На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Восстановление исходного кода

Инженерный анализ представляет собой процесс воссоздания принципиальной схемы машины с помощью изучения только самой машины и характеристик ее рабо­ты. На самом высоком уровне это может означать изучение механизма, принцип действия которого сначала неясен, но начинает проясняться по ходу дальнейшего анализа. Грамотный инженер по восстановлению исходного кода сначала стремится понять детали программного обеспечения, что, с другой стороны, предполагает понимание всей системы в целом. Он должен хорошо разбираться как в программном обе­спечении, так и в аппаратных средствах, и иметь истинное представление о том, как эти средства взаимодействуют друг с другом.
Рассмотрим, как внешние данные обра­батываются программой. Внешний пользо­ватель может вводить данные и команды. Каждый выбор ветви кода является ре­зультатом нескольких решений, которые принимаются на основе входных данных. Иногда канал исполнения кода может быть "широким" и успешно пропускать неогра­ниченное количество сообщений. Но он бывает и "узким", что приводит к замедле­нию или даже зависанию программы, если входные данные сформированы некор­ректно. На 1 изображена блок-схема программы стандартного FTP-сервера. На этом рисунке хорошо видно, насколько сложны взаимосвязи между участками программы. Каждый фрагмент кода изо­бражен в виде блока, содержащего соответ­ствующие машинные команды.
Вообще, чем больше углубляться в про-грамку, тем большее количество переходов будет между местом "старта" и конечной точкой. Чтобы получить доступ к конкрет­ной точке в нашем "доме", придется снача­ла пройти через многие "комнаты" (и наде­яться, что там есть полезные данные). Каж­дая внутренняя "дверь" имеет свои правила относительно того, какие данные разрешено пропускать. Поэтому очень сложно создать "правильные" вредоносные данные, ко­торые бы прошли сквозь все "двери", как внешние, так и внутренние. В общем, входные данные становятся все более лако­ничными и специфическими по мере углубления в программу. Вот почему для взло­ма программы недостаточно прямолинейных попыток подбора. Простая подача на вход программы случайных данных практически никогда не приводит к перебору всех возможных маршрутов исполнения кода. Поэтому многие возможные пути в программе остаются неизученными (и неиспользованными при взломе) как хакера­ми, так и специалистами по обеспечению безопасности.
Зачем это нужно?
Восстановление исходного кода позволяет узнать об оригинальной структуре программы и том, как вообще работают программы. Это просто необходимые сведе­ния при взломе программного обеспечения. Например, можно узнать, какие систем­ные функции использует атакуемая программа, к каким файлам она обращается, на основе каких протоколов работает и как взаимодействует с другими компьютерами локальной сети.
Основное преимущество восстановления исходного кода программы состоит в воз­можности изменить структуру программы и повлиять на ход ее выполнения. С техни­ческой точки зрения это создание заплаты (patching), поскольку добавляются за­платы к оригинальному программному коду. Заплаты позволяют добавить команды или изменить метод работы конкретного вызова функции, а значит, добавить потай­ные возможности, удалить или деактивировать функции и исправить в исходном коде ошибки, связанные с системой безопасности. В среде хакеров заплаты часто ис­пользуются для уничтожения механизмов защиты от копирования.
Как и любое средство, восстановление исходного кода можно использовать и в благих, и в дурных целях.
Насколько это легально?
Восстановление исходного кода затрагивает вопросы, описанные в законе об ин­теллектуальной собственности. Во многих лицензиях на использование программ­ного обеспечения жестко запрещается восстановление исходного кода. Компании по разработке программного обеспечения опасаются (и абсолютно справедливо), что с помощью восстановления исходного кода будут раскрыты алгоритмы и методы, ис­пользованные в их программах, которые являются их собственностью. Однако нет никакого прямого закона, запрещающего восстановление исходного кода.
Поскольку восстановление исходного кода является основным действием для устранения механизма защиты от копирования, то возникают определенные сомне­ния насчет его легальности. Безусловно, применение восстановления исходного ко­да для уничтожения защиты от копирования является незаконным. Однако само по себе восстановление исходного кода не является незаконным. Если появится закон, запрещающий восстановление исходного кода, то это создаст массу проблем для ря­довых пользователей программного обеспечения. Подобный запрет будет напоми­нать запрет на открытие капота вашего автомобиля для его ремонта, т.е. пользовате­лю, согласно такому закону, при каждом ремонте и техническом обслуживании при­дется обращаться к дилеру.
Поставщики программного обеспечения запрещают восстановление исходного кода в своих лицензиях по многим причинам. Одна из очевидных причин заключа­ется в том, что восстановление исходного кода позволяет раскрыть секретные мето­ды и алгоритмы. Однако фокусировать всевозможные проблемы на самой идее вос­становления исходного кода было бы довольно глупо. Для опытного программиста обладание двоичным машинным кодом не менее полезно, нежели самим исходным кодом. Таким образом, секреты уже раскрыты, хотя только специалисты способны "прочесть" код. Не забывайте, что секретные методы можно защитить другими пу­тями, без попыток их скрыть от всех, кроме специалистов, в скомпилированном про­граммном коде. Для этой цели существуют патенты и закон по защите авторских прав. Хорошим примером защиты авторских прав являются алгоритмы шифрова­ния. Мощность и распространенность этих алгоритмов возможно обеспечить только при общедоступности этих алгоритмов для их оценки специалистами по шифрова­нию. Однако разработчик алгоритма может запатентовать свои авторские права. Так произошло для популярной схемы шифрования RSA.
Второй причиной противодействия восстановлению исходного кода является желание разработчиков программ закрыть свои программы от исследователей, кото­рые могут найти ошибки в системе защиты. Довольно часто специалисты по безо­пасности находят такие ошибки в программах и сообщают о них с помощью фору­мов, например, в bugtraq. Это вредит репутации поставщиков программного обеспе­чения (и одновременно заставляет улучшать несовершенные программы). Значи­тельно лучше, если специалист по обеспечению безопасности спешит уведомить разработчика программы о выявленной проблеме, но ожидает определенное время до выхода исправления, прежде чем сообщать о ней всем пользователям. Обратите внимание, что в период внесения исправлений уязвимое место остается доступным для использования всеми желающими. Если восстановление исходного кода будет запрещено, специалисты не смогут проверять качество программного кода. Пользо­вателям придется верить на слово поставщикам программ, заявляющим о высочай­шем качестве их продукта. При этом не забывайте, что ни один поставщик не несет финансовой ответственности за выявление недостатков в своем программном обес­печении.
В контексте закона об авторских правах в цифровую эпоху (DCMA), восстановле­ние исходного кода и структуры программы рассматривается с точки зрения наруше­ния прав собственности и взлома программного обеспечения. С очень интересной точ­кой зрения относительно того, как этот закон влияет на свободу личности, можно оз­накомиться на сайте Эда Фелтена (http: //www. freedomtotinker. com).
При интерактивной покупке или установке программного обеспечения пользова­телю обычно выводится окно лицензионного соглашения с конечным пользователем (EULA). Это соглашение о правилах использования программного обеспечения, ко­торое надо прочесть и принять. Во многих случаях даже вскрытие контейнера с па­кетом программного обеспечения (например, коробки) означает согласие с условия­ми лицензии. При загрузке программного обеспечения по Internet, как правило, от пользователя требуется щелкнуть на кнопке "I AGREE" ("Я согласен") при появле­нии окна, содержащего текст лицензии. При этом часто запрещается восстановление исходного кода и структуры программы.
Еще более строгие ограничения относительно восстановления исходного кода и структуры программы (вплоть до криминальной ответственности) накладывает стандарт UCITA (Uniform Computer Information Transaction Act), который уже при­нят в нескольких штатах США.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика