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