Средства противодействия крэкеруDelphi , Программа и Интерфейс , Исследование программСредства противодействия крэкеру
Это документ является теоретическим и обозревает общий подход к противодействию исследования защиты ПО и обходу этого противодействия. До недавнего времени исследование функционирования программы, задаваемой ее исполняемым кодом (и ничем более) называлось "вскрытием" (cracking) и являлось уделом хакеров, и, естественно, не могло не быть связано с нарушением авторских прав или каким-либо другим нанесением ущерба компьютерной системе. С появлением в последнее время вредного программного обеспечения (badware) ситуация, очевидно, изменилась. Многие вирусологи теперь только и заняты тем, что изучают алгоритмы все новых и новых вирусов - и эта работа для них из безусловно творческой превратилась в рутинную. Известно, что при обезвреживании знаменитого вируса Морриса самая важная часть работ легла на плечи специалистов по дизассемблированию, причем выполнить они ее должны были в кратчайшее время - когда вирус еще распространялся, и не было известно, что он не содержит функции разрушения. Именно дизассемблирование могло дать тогда ответ на три главных вопроса: что это такое, чем это грозит и как с этим бороться [2]. Таким образом, одна из задач теории компьютерной безопасности определение, содержит ли данная программа функцию разрушения (нанесения ущерба) - сводится, по сути дела, к задаче исследования программы, задаваемой ее объектным или исполняемым кодом. При постановке последней должны разделяться два вопроса:
Хотя обе эти задачи принципиально разрешимы, можно высказать сомнение в получении сколь-нибудь достоверных результатов при использовании автоматических методов. Более того, даже имея стопроцентную уверенность в отсутствии ненадежного (untrusted) кода в исходном тексте программы, нельзя гарантировать отсутствие ошибок или троянских коней в программе, которая будет его интерпретировать (для исполняемого кода это происходит на уровне микрокода) или во внешних вызываемых функциях (в частности, операционной системы). Этот аспект рассматривался К.Томпсоном в [5]: "Никакой уровень верификации или исследований исходного текста не защитит вас от исполнения ненадежного кода... По мере того, как уровень языка программирования снижается, находить такие ошибки становится все труднее и труднее. Хорошо продуманную "ошибку" в микрокоде найти почти невозможно". В дальнейшем, если не будет специально оговорено, под исследованием программы будем понимать именно процесс получения ее алгоритма. Все средства исследования ПО можно разбить на два класса: статические и динамические. Первые оперируют исходным кодом программы как данными и строят ее алгоритм без исполнения, вторые же изучают программу, интерпретируя ее в реальной или виртуальной вычислительной среде. Отсюда сразу следует, что первые являются более универсальными в том смысле, что теоретически могут получить алгоритм всей программы, в т.ч. и тех блоков, которые никогда не получат управления, вторые же могут строить этот алгоритм только на основании конкретной трассы (trace) программы, полученной при определенных входных данных. Поэтому задача получения полного алгоритма программы в этом случае эквивалентна построению исчерпывающего набора тестов для подтверждения правильности программы, что практически невозможно, и вообще при динамическом исследовании можно говорить только о построении некоторой части алгоритма. Два наиболее известных типа программ, предназначенных для исследования ПО, как раз и относятся к разным классам: это отладчик - динамическое средство и дизассемблер - средство статического исследования. Если первый широко применяется пользователем для отладки собственных программ и задачи посторения алгоритма для него вторичны и реализуются самим пользователем, то второй предназначен исключительно для их решения и формирует на выходе ассемблерный текст алгоритма. Таким образом, если принять во внимание то, о чем говорилось в начале статьи, создание дизассемблеров можно объяснить только научными и "хакерными" целями, и остается поблагодарить пытливых ученых и неутомимых хакеров, что для них (или они сами) создали средство статического исследования программ задолго до того, как появились реально нуждающиеся в этом программы. Помимо этих двух основных программных продуктов можно предложить:
Естественно, после создания средств исследования не могли не появиться программы, им противодействующие, так что задача получения алгоритма может быть столь же трудноразрешимой, как и задача его анализа. Будем называть такие программы противодействующими исследованию или защищенными, а алгоритмы, реализующее это противодействие - системой защиты. В этом случае задача исследования защищенного ПО сводится в первую очередь к исследованию самой системы защиты и ее анализу. Естественно, что система защиты сама может быть защищена на более высоком уровне и так далее, но в любом случае можно начать исследование одним из методов, описанных выше, с самого верхнего уровня. Более того, динамические методы в этом случае оказываются по крайней мере не хуже статических (как будет показано ниже, на самом деле они являются основными), т.к. система защиты должна получать управление при любом наборе входных данных и ее трасса может быть получена всегда. Как ни странно, программами, противодействующими их исследованию, являются как средства, обеспечивающие безопасность компьютерной системы (системы разделения доступа, защиты от несанкционированного копирования и т.п.), так и программы, направленные на ее нарушение (компьютерные вирусы, троянские кони и т.п.). (Кстати, и необходимость в их исследовании испытывают люди, стоящие по разные стороны баррикад первые вскрывают хакеры, а вторые - специалисты по защите компьютерных систем). Средства противодействия оказываются краеугольным камнем в таких системах, т.к. при их отсутствии квалифицированый специалист сможет очень быстро разобратся в их логике. Методы, используемые программами для собственной защиты, также хорошо известны, и большинство из них базируется на использовании того принципа фон Неймана, что программы и данные выглядят и хранятся одинаково, в результате чего программа может модифицировать саму себя. Этого бывает достаточно для подавления средств статического анализа (поэтому они обычно и непригодны для исследования защищенных программ). В случае защиты от динамических средств может быть использован тот факт, что изучаемая программа запускается в возмущенной самим средством операционной среде и может это распознать. Для системы MS-DOS описаны [3, 4] конкретные приемы защиты от исследования, базирующиеся на описанных принципах :
1) от дизассемблера и дискомпилятора К счастью для исследователя, истинными оказывается утверждение, что любую систему защиты можно вскрыть за конечное время - это следует из того, что ее команды однозначно интерпретируются процессором. При этом время, необходимое для вскрытия хорошей системы защиты, оказывается сравнимым с написанием защищенной программы заново. Однако не все программы (особенно badware) пишут профессионалы, поэтому часто можно вскрыть или обойти защиту, найдя ее слабейшее звено, сократив время вскрытия на несколько порядков. Для этого, в частности, можно рекомендовать следующие достаточно универсальные методы:
Естественно, что в профессиональных системах защиты [4] все эти приемы не проходят, и потребуются многие дни или месяцы кропотливой работы в отладчике, чтобы разобраться в их функционировании. Для исследования таких систем необходимы специальные средства (естественно, их с успехом можно применять и для любых других программ). Можно предложить следующие перспективные направления:
Оба этих перспективных средства исследования должны иметь очень сложную логику, которую невозможно реализовать без интеграции со средствами искусственного интеллекта. Именно такие средства в сочетании с автоматизированной системой семантического анализа предполагается использовать для исследования программ в рамках антивирусной лаборатории (АВЛ) [1]. Литература.
Средства противодействия крэкеру: исследование программного обеспечения как теоретическая задача и практическая реальность. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Исследование программ ::
|
||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |