15–16 ноября в Москве прошла конференция OFFZONE Moscow, где участникам выдали пластиковые смарт-карты и предложили задания на получение флагов с их помощью. Для решения этих задач требовался картридер, который можно было арендовать или купить за внутреннюю валюту. На сайте мероприятия выложили задания и дали управляющие последовательности, с помощью которых можно выполнять функции апплетов, записанных на карту. Разберем задание по шагам.

 

Почему Clojure?

Для решения таска предлагалось взять Python-библиотеку pyscard. Но решать такого рода задачи гораздо продуктивнее, используя полноценный REPL driven development, с чем нам может помочь Clojure.

 

Рандомный посетитель

Началось все с того, что я узнал о возможности взять картридер и, используя некоторые APDU-команды протокола ISO/IEC 7816, выполнять задания с пластиковой смарт-карты, которая была выдана всем участникам вместе с бейджами. Это мне очень сильно напомнило PHDays V, когда я, как обычный посетитель конференции, просто подошел к стенду с электроподстанцией, поснифал пакеты через Wireshark, за ночь написал наивную имплементацию протокола IEC 61850 на Scapy, а на следующий день устроил с ноутбука DoS-атаку всему стенду SCADA (до плавки электропроводов я тогда, конечно же, не добрался).

В этот раз я решил попробовать пойти тем же путем: в первый день поэкспериментировать с протоколом, попробовать решить хотя бы тренировочную задачу на Python, используя библиотеку pyscard, как рекомендовали организаторы конференции, а ночью порешать все остальные задачи, которые получится. В шестом часу утра я понял, что свернул куда-то не туда, но останавливаться было уже поздно.

В итоге во второй день на моей карте благодаря взятым флагам появилось 500 единиц внутренней валюты, что позволило мне уйти с конференции с толстовкой, картридером и еще некоторым мерчем, а также заопенсорсить библиотеку на Clojure, которую я написал в рамках конференции.

 

Сокобан

Самым красивым заданием (не считая финального с ботом для игры в танки, до которого я добрался, но не успел решить, ибо окирпичил свою карту на запись) с эстетической точки зрения был Vault Warehouse Management System (он же «Кладовщик», он же «Мудрый крот», он же «Сокобан»). Это псевдографическая игра, в которой нужно толкать условные коробки с провиантом таким образом, чтобы они встали на предназначенные для них в бункере-лабиринте места, и при этом не заблокировать эти самые коробки, случайно прижав их к стенам.

Как это работает? В апплете карты предусмотрено восемь команд: одна для получения текущего состояния поля, четыре команды движения кладовщика на одну клетку в любую из сторон, а также дополнительные команды сброса поля, взятия и проверки флага. Посылая эти команды в карту через картридер, нужно дотолкать ящики в нужные позиции. Всего на пластиковой карте было записано два уровня. И если первый несложно решался вручную, то над вторым нужно было хорошо поломать голову либо воспользоваться готовым солвером (о нем я расскажу чуть дальше).


Гораздо веселее рассматривать это задание как игру. Для того чтобы выиграть в нее, я поставил своей целью подготовить окружение, написать код, запустить приложение и немного поиграть.

 

Готовим окружение

Чтобы получить возможность взаимодействовать с картридером и, соответственно, пластиковой смарт-картой, нужно установить необходимое программное обеспечение. В качестве дистрибутива я использую Fedora, поэтому для тебя команды могут отличаться, но смысл остается примерно тот же.

Сначала надо поставить и запустить PCSC Lite — демон и консольную утилиту для управления картой. Делается это как-то так:

sudo dnf install -y pcsc-lite pcsc-tools
sudo service pcscd start

Дополнительные зависимости при установленном Leiningen нам не понадобятся, но если ты собираешься воплотить что-то аналогичное на Python, то рекомендую не заморачиваться с установкой swig, redhat-rpm-config и прочего, а поставить pyscard из пакетного менеджера твоего дистрибутива:

sudo dnf install -y python2-pyscard python3-pyscard

Отлично. Теперь вставим картридер в разъем USB и запустим утилиту для поиска активных смарт-карт:

pcsc_scan

В случае успеха при вставке пластиковой смарт-карты с мероприятия ты увидишь что-то такое:


Закрываем утилиту нажатием C-c и приступаем к написанию кода игры.

Продолжение доступно только подписчикам

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Оставить мнение

Check Also

Задачи на собеседованиях. Задачи от компании Abbyy

Вопросы на собеседовании в стиле «почему крышка от канализационного люка круглая?» — это с…