JAVA на smart-картах
JAVA на smart-картах
Крис Касперски
Источники угрозы
Java
проникла и на smart-карты, используемые во многих организациях в качестве
электронных «пропусков» и ключей доступа к секретным объектам, что предъявляет
чрезвычайно высокие требования к защите хранимых на них данных. Физически
smart-карта представляет собой кусок пластика, в который конструктивно
вмонтирован микроконтроллер, немного оперативной и энергонезависимой памяти и
интерфейс ввода/вывода. Остальные компоненты устанавливаются опционально.
Питание обычно поступает от внешнего источника через интерфейс, но может быть и
внутренним. Некоторые smart-карты держат весь код жестко прошитым в ПЗУ, но
таких встречается все меньше и меньше. Технологически намного проще помещать
управляющий код и идентификационные данные в энергонезависимую память,
программируемую через внешний интерфейс.
До
этого smart-карты программировались на Ассемблере, Си и прочих «правильных»
языках, отработанных десятилетиями и справляющихся со своей задачей. С
переходом на Java количество атак на smart-карты резко возросло и информация о
многих атаках уже просочилась в открытую печать...
Источники угрозы
Можно
условно выделить следующие три источника угрозы:
1.
Клонирование smart-карты (злоумышленник изготавливает точную копию smart-карты
на основе, например, «позаимствованной» на время у жертвы);
2.
Клонирование идентификационных данных (идентификационные данные подлинной smart-карты
меняются на скопированные с другой карты);
3.
Перезапись идентификационных данных с увеличением уровня привилегий (например,
если smart-карта обеспечивает доступ к объекту А — minimum security unit, хакер
может «вслепую» модифицировать идентификационные данные так, чтобы получить
доступ ко всем объектам, даже не имея соответствующих smart-карт на руках).
Хакерские методы исследования smart-карт
Smart-карты
первых поколений держали весь код и идентификационные данные в ПЗУ
микроконтроллера, конструктивно недоступные по внешним интерфейсам ни на
чтение, ни на запись, а потому надежно защищенные от злоумышленников. В то
время хакеры развлекались тем, что перехватывали обмен между картой и ридером,
расшифровывали протокол и создавали программно-аппаратные эмуляторы smart-карт,
ведущие себя в точности как настоящие.
Микроконтроллеры
тогда были маломощные, а протоколы обмена крайне простые. Проницательному
кодокопателю ничего не стоило их взломать, однако для этого требовалось
получить доступ к ридеру, чтобы вставить в него имитатор карты с выводами,
подключенными к настоящей smart-карте. Плюс несколько микросхем для считывания
и запоминания сигналов и питание к ним. В лучшем случае вся конструкция
размещалась в коробке из-под сигарет, что делало ее достаточно заметной,
особенно если охраняемые объекты контролировались видеокамерами или визуально
(охранником или проходящими мимо людьми, которые тут же «стучали», если видели
что-то подозрительное), поэтому количество успешных атак исчислялось единицами.
Похитить
чужую smart-карту было можно, но бессмысленно, так как без ридера она
представляла собой «мертвый» кусок пластика, а ридеры тогда были разными и
совершенно нестандартизированными. К тому же чуть позже разработчики smart-карт
заложили в них криптографический протокол, устойчивый к перехвату. Работал он
приблизительно так. Центральный компьютер, управляющий системой доступа, при
вставке карты в ридер посылал ей случайным образом сгенерированный ключ,
которым карта была должна зашифровать свой секретный ID и возвратить результат
компьютеру. Компьютер, имея ID всех карт, проделывал ту же самую операцию и
сравнивал свой результат с откликом карты. Если они совпадали — идентификация
считалась пройденной успешно.
Допустим,
хакер перехватит сеанс обмена карты с компьютером. В следующий раз компьютер
сгенерирует другой ключ, и, чтобы возвратить правильный ответ, необходимо знать
секретный ID, которых к тому же может быть и не один. Без метода перебора (или
сканирующего туннельного микроскопа) здесь не обойтись. В общем, smart-карты
ломать перестали...
Так
продолжалось до тех пор, пока в целях удешевления в smart-картах не появилась
возможность записи идентификационных данных и микрокода по внешнему интерфейсу.
Действительно, закладывать всю эту информацию в ПЗУ на стадии производства
экономически невыгодно и вообще нецелесообразно. Согласитесь, что иметь
«программируемую» smart-карту более заманчиво. Считалось, что возможность
«заливки» микрокода без возможности чтения существующей прошивки гарантирует
абсолютную безопасность данных. Но тут создатели smart-карт жестоко
просчитались, а хакеры быстро написали атакующий код, считывающий содержимое
памяти микроконтроллера и выдающий его через внешний интерфейс. Самое сложное —
идентифицировать микроконтроллер, поскольку каждый микроконтроллер понимает
только «свой» машинный код, который, кстати говоря, достаточно часто отдается
только под подписку о неразглашении, да и то не всем.
Тем
не менее после нескольких успешных взломов, разработчики отказались от
Ассемблера и перешли на Java. Хотели как лучше, а получилось как всегда...
Байт-код JVM достаточно подробно специфицирован и хотя не имеет доступа к
физической памяти, хакерам этого и не требовалось, ведь идентификационные
данные хранятся в памяти виртуальной Java-машины и доступны для чтения всем
классам (в том числе и untrusted) через низкоуровневые JVM-команды, без которых
она бы просто не смогла функционировать. Написать зловредный байт-код,
заливаемый в карту и читающий идентификационные данные, может даже начинающий хакер.
Достаточно заполучить эту карту. Стационарный ридер уже не нужен, ведь здесь
перехватывается не протокол обмена, а сами идентификационные данные, которые с
помощью все того же зловредного байт-кода могут быть «зашиты» в другую
smart-карту. Первые попытки взлома были не очень удачными, и заливаемый
байт-код затирал оригинальную прошивку. В результате чего карта умирала
безвозвратно, поэтому ее требовалось похитить, что намного сложнее, чем
«позаимствовать» на время. Но скоро в JVM удалось обнаружить множество дыр,
позволяющих считывать незатертый байт-код оригинальной прошивки. Правда,
содержимое ячеек памяти, поверх которых записывался атакующий байт-код,
терялось безвозвратно и их приходилось реконструировать с нуля на основе
анализа оставшегося кода, что по силам далеко не каждому.
Время
шло, smart-карты стремительно «совершенствовались» и в последние несколько лет
обзавелись встроенной операционной системой и даже научились поддерживать
модульность, представляющую до предела упрощенную файловую систему. Как
следствие, у хакеров появилась возможность не затирать прошивку, а добавлять
новые модули, что существенно упростило взлом, и количество атак вновь резко
возросло. Наличие же Интернета позволило хакерам обмениваться прошивками,
идентификационными данными и другой информацией, устраивая настоящий мозговой
штурм, против которого современным защитам, увы, не устоять.
Заключение
Smart-карты
очень удобны, и призывать к отказу от них никто не собирается. Во всяком
случае, механические замки еще менее надежны и замена замков (в случае хищения
ключей) обойдется намного дороже, чем смена кодов доступа smart-карт. Однако
следует помнить, что smart-карты — не панацея. Как и ключи, они могут быть
похищены, с них легко снять «слепок», и что самое нехорошее — smart-карты
допускают «клонирование» даже без наличия оригинала на руках. А все потому, что
они становятся все более универсальными и стандартизированными.
Список литературы
IT
спец № 07 ИЮЛЬ 2007