Различия

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

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

articles:java-smart [2017/09/05 02:55] (текущий)
Строка 1: Строка 1:
 +====== java-smart ======
 +<​sub>​{{java-smart.odt|Original file}}</​sub>​
 +
 +====== java на smart-картах ======
 +
 +крис касперски ака мыщъх, no-email
 +
 +**java ****проникла и на ****smart-****карты,​ используемые во многих организациях в качестве электронных "​пропусков"​ и ключей доступа к секретным объектам,​ что предъявляет чрезвычайно высокие требования к их безопасности,​ но требования эти, увы, не соблюдаются,​ а мы еще удивляется почему самолеты падают!**
 +
 +===== введение =====
 +
 +Физически smart-карта представляет собой кусок пластика в который конструктивно вмонтирован микроконтроллер,​ немного оперативной и энергонезависимой памяти,​ интерфейс ввода/​вывода. За сим все. Остальные компоненты устанавливаются опционально. Питание обычно поступает от внешнего источника через интерфейс,​ однако,​ может быть и внутренним. Некоторые smart-карты держат весь код жестко прошитым в ПЗУ, но таких встречается все меньше и меньше. Технологически намного проще помешать управляющий код и идентификационные данные в энергонезависимую память,​ программируемую через внешний интерфейс. А чтобы туда не заслали зловредного троянского коня, используется "​абсолютно безопасная"​ Java!
 +
 +До этого smart-карты программировались на Ассемблере,​ Си и прочих "​правильных"​ языках,​ отработанных десятилетиями и справляющихся со своей задачей на все 100%. С переходом же на Java количество атак на smart-карты резко возросло и многие виды атак уже просочились в открытую печать,​ в результате чего о них узнали не только специалисты (высокой моральной закалки),​ но и воинствующие "​пионеры"​ анархического толка, ломающие все подряд.
 +
 +===== источники угрозы =====
 +
 +Можно выделить три следующие источника угрозы:​
 +
 +  - клонирование smart-карты (злоумышленник изготавливает точную копию smart-карты на основе данной,​ например,​ "​позаимствованной"​ на время у жертвы);​
 +  - клонирование идентификационных данных (используя подлинную smart-карту,​ изменить идентификационные данные,​ скопированные с другой карты);​
 +  - перезапись идентификационных данных с увеличением уровня привилегий (например,​ если smart-карта обеспечивает доступ к объекту A — minimum security unit, хакер может "​вслепую"​ модифицировать идентификационные данные так, чтобы получить доступ ко всем объектам,​ даже не имея соответствующих smart-карт на руках);​
 +===== арсенал хакерских методов исследования smart-карт =====
 +
 +Smart-карты первых поколений держали весь код и идентификационные данные в ПЗУ микроконтроллера,​ конструктивно недоступные по внешним интерфейсам ни на чтение,​ ни на запись,​ а потому надежно защищенные от злоумышленников. В то время хакеры развлекались тем, что перехватывали обмен между картой и ридером,​ расшифровывали протокол и создавали программно/​аппаратные эмуляторы smart-карт,​ ведущие себя в точности как настоящие.
 +
 +Микроконтроллеры тогда были маломощные и протоколы обмена крайне простые. Проницательному кодокопателю ничего не стоило их взломать,​ однако,​ для этого требовалось получить доступ к ридеру,​ чтобы вставить в него имитатор карты, с выводами,​ подключенными к настоящей smart-карте,​ плюс несколько микросхем для считывания и запоминания сигналов и питание к ним. В лучшем случае вся конструкция размещалась в коробке из-под сигарет,​ что делало ее достаточно заметной,​ особенно если охраняемые объекты контролировались видеокамерами или визуально (охранником или проходящими мимо людьми,​ которые тут же "​стучали"​ если видели что-то подозрительное),​ так что количество успешных атак исчислялось единицами.
 +
 +Похитить чужую smart-карту было можно, но бессмысленно,​ ибо без ридера она представляла собой "​мертвый"​ кусок пластика,​ а ридеры тогда были разными и совершенно не стандартизированными. К тому же, чуть позже разработчики smart-карт заложили в них криптографический протокол,​ устойчивый к перехвату. Работал он приблизительно так. Центральный компьютер,​ управляющий системой доступа,​ при вставке карты в ридер посылал ей случайным образом сгенерированный ключ, которым карта была должна зашифровать свой секретный ID, и возвратить результат компьютеру. Компьютер (имея ID всех карт) проделывал ту же самую операцию и сравнивал свой результат с откликом карты. Если он совпадали — идентификация считалось пройденной успешно и, соответственно,​ наоборот.
 +
 +Допустим,​ хакер перехватит сеанс обмена карты с компьютером. Ну и что он получит?​ В следующий раз компьютер сгенерирует другой ключ и чтобы возвратить правильный ответ, необходимо знать секретный ID, которых к тому же может быть и не один! Короче,​ без метода перебора (или сканирующего туннельного микроскопа) здесь не обойтись. Проще высадить дверь динамитом (подкупить охранника и т. д.). В общем, smart-карты ломать перестали…
 +
 +…так продолжалось до тех пор, пока в целях удешевления,​ в smart-картах не появилась возможность записи идентификационных данных и микрокода (!) по внешнему интерфейсу. Действительно,​ закладывать всю эту информацию в ПЗУ на стадии производства экономически невыгодно и вообще не целесообразно. Согласитесь,​ что иметь "​программируемую"​ smart-карту намного более заманчиво. Считалось,​ что возможность "​заливки"​ микрокода без возможности чтения существующей прошивки гарантирует абсолютную безопасность данных. Но вот тут-то создатели smart-карт жестоко просчитались и хакеры быстро написали атакующий код, считывающий содержимое памяти микроконтроллера и выдающий его через внешний интерфейс. Самое сложное — идентифицировать микроконтроллер,​ поскольку каждый микроконтроллер понимает только "​свой"​ машинный код, который,​ кстати говоря,​ достаточно часто отдается только под подписку о неразглашении,​ да и то не всем.
 +
 +Тем не менее, после нескольких успешных взломов,​ разработчики отказались от Ассемблера и перешли на Java. Хотели как лучше, а получилось как всегда — байт-код JVM достаточно подробно специфицирован и хотя не имеет доступа к физической памяти,​ хакерам этого и не требовалось — ведь идентификационные данные хранятся в памяти виртуальной Java-машины и доступны для чтения всем классам (в том числе и untrusted) через низкоуровневые JVM-команды,​ без которых она бы просто не смогла функционировать!
 +
 +Написать зловредный байт-код,​ заливаемый в карту и читающий идентификационные данные,​ может даже начинающий хакер. Достаточно заполучить эту карту хотя бы на несколько секунд. Стационарный ридер уже не нужен, ведь здесь перехватывается не протокол обмена,​ а сами идентификационные данные,​ которые с помощью все того же зловредного байт-кода могут быть "​зашиты"​ в другую smart-карту.
 +
 +Первые попытки взлома были не очень удачными и заливаемый байт-код затирал оригинальную прошивку,​ в результате чего карта умирала безвозвратно,​ поэтому ее требовалось похитить,​ что намного сложнее,​ чем "​позаимствовать"​ на время, а потом незаметно вернуть на место. Однако,​ очень скоро в JVM удалось обнаружить множество дыр (подробно описанных в статье "​атака на java"​),​ позволяющих считывать не затертый байт-код оригинальной прошивки. Правда,​ содержимое ячеек памяти,​ поверх которых записывался атакующий байт-код,​ терялось безвозвратно и их приходилось реконструировать с нуля на основе анализа оставшегося кода, что по силам далеко не каждому.
 +
 +Но время шло, smart-карты стремительно "​совершенствовались"​ и в последние несколько лет обзавелись встроенной операционной системой и даже научились поддерживать модульность,​ представляющую до предела упрощенную файловую систему. Как следствие — у хакеров появилась возможность не затирать прошивку,​ а добавлять новые модули,​ что существенно упростило взлом и количество атак вновь резко возросло.
 +
 +Наличие же Интернета позволило хакерам обмениваться прошивками,​ идентификационными данными и другой информацией,​ устраивая настоящий мозговой штурм, против которого современным защитам,​ увы, не устоять.
 +
 +===== заключение =====
 +
 +Smart-карты очень удобны и призывать к отказу от них никто не собирается. Во всяком случае,​ механические замки еще менее надежны и замена замков (в случае хищения ключей) обойдется намного дороже,​ чем смена кодов доступа smart-карт. Однако,​ следует помнить,​ что smart-карты не панацея! Как и ключи они могут быть похищены,​ с них легко снять "​слепок",​ и что самое нехорошее — smart-карты допускают "​клонирование"​ даже без наличия оригинала на руках — а все потому,​ что они становятся все более и более универсальными и стандартизированными.
 +
 +