Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

articles:hw-kaleidoscope-hasp [2017/09/05 02:55] (текущий)
Строка 1: Строка 1:
 +====== hw-kaleidoscope-hasp ======
 +<​sub>​{{hw-kaleidoscope-hasp.odt|Original file}}</​sub>​
 +
 +====== электронные ключи — камень на шее ======
 +
 +крис касперски,​ no-email
 +
 +**электронные ключи (в просторечии именуемые "​хаспами"​) пользуются огромной популярностью у разработчиков программного обеспечения и яростной ненавистью у конечных пользователей и не за их стойкость ко взлому (все защищенные "​хаспами"​ пакеты давно поломаны),​ а за проблемы,​ которые они создают. есть ли достойная альтернатива "​железкам",​ устраивающая всех — как по одну строну прилавка,​ так и по другую?​ попробуем ответить на этот вопрос!**
 +
 +===== введение =====
 +
 +Электронный ключ в общем случае представляет собой устройство,​ подключаемое к компьютеру по LPT-или USB-порту и содержащее несколько микросхем,​ функции которых варьируются в зависимости от категории ключа. В простейшем случае,​ ключ может хранить определенные данные,​ записанные в энергонезависимую (изменяемую) память или даже в однократно программируемое ПЗУ. В настоящее время такие ключи практически полностью вышли из употребления и потому не рассматриваются.
 +
 +Типичный ключ содержит микроконтроллер,​ поддерживающий различные функции шифрования или способный выполнять другие преобразования данных. Рекламные проспекты поражают нас открывающимися перспективами. Дамп ключа получить невозможно ни программным,​ ни аппаратным путем. Даже сканирование с помощью электронного микроскопа приведет к неудаче. Каждый ключ уникален и двух одинаковых ключей в природе не существует.
 +
 +В общем, читая весь этот, извиняюсь за выражение,​ псевдонаучный бред (который пересказывать просто нет смысла) у всякого нормально специалиста по безопасности создается стойкое впечатление,​ что сломать электронный ключ невозможно в принципе. Тем больше поражает факт, что они все-таки ломаются,​ а факт этот известный и легко проверяемый. Эмуляторы электронных ключей периодически выкладываются хакерами в открытый доступ. Единственная _практическая_ польза от электронного ключа – упрощение проверки лицензионной чистоты продукта. Если у тебя ключа нет, а защищенная им программа — работает,​ значит,​ ты вот и сейчас ответишь по всей строгости закона.
 +
 +Сами же разработчики электронных ключей во всем винят программистов,​ использующих малую толику предоставляемых ими возможностей и зачастую ограничивающиеся простой проверкой наличия электронного ключа, что ломается заменой одного условного перехода на другой безусловный переход на "​правильную"​ ветку программы (конечно,​ это немного утрировано,​ но суть передана верно).
 +
 +К сожалению,​ _надежно_ защитить программу с помощью электронного ключа невозможно в принципе. Даже если использовать весь спектр предоставляемых им функций. И сейчас мы доказательно выясним почему,​ познакомившись с хорошо отработанными хакерскими технологиями.
 +
 +===== на подступах крепости =====
 +
 +Дано: электронный ключ, шифрующий критические данные и/или код программы криптостойким (в идеале) алгоритмом. В отсутствии ключа программа не запускается или работает в режиме ограниченной функциональности. Самостоятельно расшифровать зашифрованные данные (код) программы — нет никакой возможности. Запросы на расшифровку и проверки на наличие ключа следуют из разных мест программы с различной периодичностью — от нескольких часов (минут,​ секунд) до сотен или даже тысяч лет (в идеале).
 +
 +Доказать:​ что этот ключ легко взломать. Начнем с того, что "​взломать программу в отсутствии ключа"​ чисто абстрактная задача,​ которой хакеры не занимаются. Хакеров куда больше интересует отвязка программы от ключа, то есть как сделать так, чтобы купив всего один экземпляр программы с ключом,​ отучить ее от этого ключа раз и навсегда,​ растиражировав неограниченным числом экземпляров.
 +
 +Существует огромная разница между "​снять дамп с ключа"​ (т. е. получить его копию, оперируя непосредственно с самим ключом) и, врезавшись между программой и ключом,​ перехватить протокол обмена,​ расшифровать его, создав программный эмулятор,​ ведущий себя практически так же, как и оригинальный электронный ключ. "​Практически"​ — потому,​ что хакеру доступны для анализа только те данные,​ которыми обменивается с ключом защищенная программа,​ а они (как утверждает реклама) могут происходить с предательски низкой частой.
 +
 +Скажем сразу, проверки,​ "​выскакивающие"​ раз в несколько лет, никого не интересуют. Даже если хакер не реализовал их в эмуляторе — не велика беда. Подумаешь,​ защищенная программа откажет через ~666 дней. Она и просто так отказать может. Из-за сбоя самого ключа или программной ошибки. К тому же, наивно думать,​ что хакер будет тупо "​грабить"​ обмен программы с ключом. Скорее всего, он возьмет дизассемблер и, заглянув внутрь кода, обнаружит _все_ проверки,​ какие там только есть, независимо от их дислокации и периодичности. Анализ можно затруднить,​ но полностью воспрепятствовать ему никто не в силах. Следовательно,​ на фундаментальном уровне,​ электронные ключи уязвимы.
 +
 +Если у хакера есть электронный ключ и есть экземпляр программы,​ он может выявить _все_ проверки,​ _все_ зашифрованные фрагменты и расшифровать их, после чего ключ уже не понадобиться (или, как вариант,​ можно создать эмулятор ключа, не требующий вмешательства в код программы).
 +
 +===== плохие хорошие электронные ключи =====
 +
 +И все-таки в борьбе с электронными ключами хакеры обречены если не на поражение,​ то на вечную гонку вооружений. Как уже было сказало выше — снять полный дамп с ключа невозможно при условии его правильной аппаратной реализации. Если первая версия защищенной программы использует только часть существующих проверок (например,​ 10%), то об остальных хакеру остается только гадать. Заложить их в эмулятор он _никак_ не может.
 +
 +Теперь представим,​ что выходит новая версия программы,​ которая использует уже 20% проверок. Со старым электронным ключом она заработает без вопросов,​ а вот с эмулятором нет. И хакерам вновь придется садится за дизассемблер. А дизассемблирование — процесс долгий,​ особенно если ему всячески препятствуют с помощью обсускации (т. е. запутывания) кода или создания различных виртуальных машин. В результате,​ поклонники пиратской продукции получат новую версию с некоторым запозданием. Если же новые версии (или небольшие обновления) выходят постоянно,​ то возникает мощная мотивация перестать каждый раз ждать у моря погоды,​ плюнуть на все и приобрести легальную версию продукта. Хакеры же они ведь не святые. Очень часто они требуют за взлом денежку,​ и не факт, что сохранят интерес к "​трепанации"​ свежих версий… Однако,​ если речь идет о широко распространенных программных пакетах,​ то свой хакер на них всегда найдется.
 +
 +Разработчики программного обеспечения не раз и не два пытались реализовать концептуально неломаемый электронный ключ. В теории все выглядит предельно просто. Берем микропроцессор (благо они сейчас очень дешевые),​ засовываем в него ядро программы и защищаем прошивку от "​грабежа"​ на аппаратном уровне. И ву-а-ля! Программа как бы реализуется в железе,​ сложность эмуляции которого превышает трудоемкость написания аналогичной программы с нуля, что делает взлом экономически невыгодным. Правда,​ и производство подобных защит экономически невыгодно тоже.
 +
 +Во-первых,​ микроконтроллеры не такие уж дешевые и мощные. Чтобы втиснуть в них заданный функционал нужны грамотные специалисты. Причем,​ программирование и отладка прошивок для микроконтроллеров — это уже высший пилотаж. К тому же, если мы не запретим "​заливку"​ новых прошивок,​ хакер запросто напишет тривиальный код, загружаемый внутрь микроконтроллера и считывающий все остальное. Если же заливка прошивок запрещена,​ как выпускать новые версии и исправлять ошибки?​ Заставлять клиентов покупать новый ключ?! Негуманно… и опасно для здоровья. В общем, от этой (внешне весьма привлекательной) идеи в конечном счете все отказались.
 +
 +{{hw-kaleidoscope-hasp_Image_0.jpg}}
 +
 +Рисунок 1 электронный ключ на LPT
 +
 +{{hw-kaleidoscope-hasp_Image_1.jpg}}
 +
 +Рисунок 2 электронный ключ на USB
 +
 +{{hw-kaleidoscope-hasp_Image_2.jpg}}
 +
 +Рисунок 3 электронный ключ на PCMCIA
 +
 +