Непрерывно нарастающая мощь компьютеров требует все большего внимания к системам защиты информации и ограничения доступа, причем наряду с традиционными паролями все чаще используются альтернативные средства — смарт-карты, различные системы, основанные на получении биометрических данных, и т.д. (см., например, «Мир ПК», 6/03, с. 50). Благодаря своей компактности и богатству возможностей все большее распространение получают USB-ключи. Приятно, что среди компаний, занимающихся производством usb-брелоков, появляются и отечественные разработчики. Так, компания «Актив» с прошлого года начала продажу идентификаторов ruToken. К нам на тестирование попал комплект разработчика ruToken, включающий в себя два USB-токена (емкостью 8 и 16 Кбайт), руководство пользователя и диск с драйверами. Одним словом, все необходимое и ничего лишнего.
Внешне накопитель производит впечатление довольно удобного, судя по всему, он вполне удачно разместится на брелке с ключами. Корпус сделан из прочного красного пластика, в который надежно вмонтирован USB-разъем, правда, немного огорчает отсутствие колпачка на разъеме. С точки зрения операционной системы он выглядит как комбинация смарт-карты и считывателя. В зависимости от версии накопитель содержит от 8 до 128 Кбайт энергонезависимой памяти и поддерживает до 1 млн. циклов записи. Память организована в виде файловой системы, которая позволяет создавать объекты нескольких типов и присваивать им права доступа, при этом прямой доступ к блокам памяти полностью запрещен. Для разграничения прав доступа используются PIN-коды. Всего возможны три уровня доступа: гостя, пользователя и администратора. Также поддерживается алгоритм шифрования по ГОСТ 28147—89 в режимах простой замены, гаммирования и гаммирования с обратной связью. Ключи для шифрования могут создаваться и храниться без возможности экспорта из токена.
Реализована поддержка следующих интерфейсов взаимодействия: PC/SC, PKSC #11, Microsoft Cripto API, а также собственная библиотека функций, облегчающая интеграцию решений на основе ruToken в имеющиеся программы.
Руководство пользователя радует своим объемом. В нем подробно описаны как архитектура ключа, так и все этапы, необходимые для его применения в своем приложении. Установка комплекта разработчика проходит быстро и практически без нареканий, разве что некоторое удивление вызвало предложение разместить установочные файлы в каталоге C:Program Files uToken несмотря на отсутствие диска С: в системе. Будем надеяться, что написанием драйверов и инсталляторов занимались разные люди...
Еще один приятный момент — средства разработки для ruToken постоянно совершенствуются, а в комплекте поставки содержится специальная программа автоматического обновления. Загрузив с сайта разработчика последние изменения, самое время приступать к тестированию.
Первым делом проверим работоспособность основных функций, таких как создание/удаление файлов и каталогов и запись/считывание данных.
Все операции проходят успешно, причем скорость создания и удаления файлов напрямую зависит от их объема. Просмотр созданного файла позволяет выявить некую специфическую периодическую последовательность, чуть позже мы попробуем вмешаться в процесс ее создания и посмотреть, можно ли как-либо получить содержимое уже удаленного файла.
Заполняем память токена до отказа набором данных, удаляем файлы и создаем новые. Как и следовало ожидать, никаких следов предыдущих данных в новых файлах не обнаруживается.
Приступим к более тщательному тестированию и попробуем найти слабые места в защите. В случае несанкционированного доступа к накопителю наиболее вероятными объектами атаки становятся файлы и объекты файловой системы, доступ к которым запрещен ключами шифрования и другими атрибутами безопасности.
Вероятность найти какую-либо уязвимость в штатных режимах довольно невелика, поэтому попробуем создавать нештатные ситуации. Можно попытаться вмешаться в процесс переноса информации из энергонезависимой памяти в микросхему, реализующую внутреннюю логику работы токена. Допустим, можно непрерывно проводить попытки чтения из защищенного файла и вносить небольшие помехи так, чтобы при передаче данных из памяти один или несколько битов в пакете менялись. Не исключено, что в процессе чтения запрещающие атрибуты удастся подменить разрешающими и получить доступ к содержимому защищенного файла. К сожалению, технические возможности не позволяют провести подобный эксперимент, но определенный простор для деятельности у нас все же есть.
Например, попробуем вмешаться в процесс очистки памяти. Создаем большой файл, заполняем его заранее выбранным значением, начинаем удаление и засекаем время, необходимое для завершения операции удаления. Затем опять создадим такой же файл, заполним его и начнем удаление. После того как пройдет приблизительно половина времени, требуемого для удаления файлов, прервем операцию. Причем этого можно добиться как минимум двумя способами: приостановить работу компьютера с помощью отладчика или просто выдернуть токен из компьютера.
Для начала воспользуемся отладчиком. Как и ожидалось, файл создался и очистился. Следов ранее выбранного значения не наблюдается. Похоже, что очистка файла проводится средствами токена, а не драйвера, что не может не радовать потенциальных пользователей.
Снова попробуем прервать операцию удаления, но выдергивая токен из компьютера. Наблюдаемый результат: файл из каталога исчез, но общий объем свободного места не увеличился. Повторяем еще несколько раз, прерывая процесс стирания через различные промежутки времени. Результат: на токене практически не осталось свободного места. Надо признать, что процесс очистки информации сделан довольно надежно.
Теперь попытаемся нарушить структуру файловой системы. Здесь нам тоже может помочь внезапное отключение питания токена.
Коротко поясню основную идею подхода. Токен можно форматировать, при этом удаляются все файлы, в том числе и те, удаление которых запрещено. В процессе инициализации также проводится полная очистка всей памяти и создание системных каталогов/файлов. Если существует возможность прервать процесс форматирования так, чтобы хотя бы часть информации не была удалена, но при этом основные структуры были бы уже созданы, то можно попробовать затем создавать файлы и прерывать процесс их создания в надежде на то, что в их теле останется полезная информация. Правда, следует отметить, что подобная атака требует полномочий администратора и соответственно имеет смысл для достаточно ограниченного круга ситуаций. К тому же в случае неудачной атаки велика вероятность того, что токен будет полностью испорчен. Именно так и получилось с тестируемым образцом. Не успев создать файлы, необходимые для проверки PIN?ов пользователя и администратора, он просто отказался работать, навсегда сохранив в тайне записанную на нем информацию. А наше тестирование на этом пришлось досрочно завершить. Итак, подведем итоги. Реализованное в токене аппаратное шифрование позволяет минимизировать вероятность несанкционированного доступа к данным. Собственная библиотека функций и поддержка API заметно облегчают использование токена с различными приложениями. В общем, итоговая оценка ruToken довольно высока, хотя есть и небольшие недостатки. Надеемся, в следующих версиях они будут устранены. Ну а пока компания «Актив» совершенствует свой продукт, мы поработаем над улучшением методики проверки ключей на прочность.