Исследования являются неотъемлемой частью моего рабочего процесса.
Я исследую программное обеспечение, исходные коды, ОС, железо — все, что попадется мне в руки (или руки начальства, в зависимости от моей удачи).
Но не все исследования проводятся по запросу; иногда просто делаешь что-то для души (что в нашей компании вообще поощряется).
Это исследование началось с разговора о шифровании, а закончилось обходом DLP и перемещением данных за пределы контролируемого периметра.
Мне очень не нравятся DLP-системы.
Моя неприязнь основана на маркетинговой стратегии продуктов, представляющей их решения как своего рода «серебряную пулю», способную предотвратить любые утечки данных в любой компании.
Не могу.
На мой взгляд DLP реально помогает в 2-х случаях - предотвратить утечку данных из-за кривых рук (типа отправка платежных данных вместо [email protected] на [email protected]) и помочь провести расследование того, кто украл данные (конечно, постфактум).
Я изначально был уверен, что специалист с достаточным знанием Windows, например, сможет преодолеть практически любые фильтры.
Мотивированный инсайдер сможет найти такого специалиста и научиться нескольким хитростям.
Но тестировать разные трюки на конкретных комплексах довольно скучно, поэтому пришлось придумывать, как обойти их все сразу.
Мне близки идеи криптоанархизма и я люблю криптографию.
Даже за пределами Интернета нас окружает очень много вещей, которые им пользуются – от банальных пропусков и билетов на транспорт до пластиковых карт, которыми мы расплачиваемся.
Я был бы рад подписывать свои сообщения в социальных сетях и мессенджерах, если бы это было сделано удобно — отдельное поле для указания электронной подписи, автоматическая проверка, удобный экспорт подписей и публичных ключей для внешней проверки.
У меня нет иллюзий – такие изменения никогда не будут массовыми.
Мы должны начать с себя.
Так или иначе, это кривая тропа мечтаний о том, как создай себе больше проблем ради сомнительного чувства безопасности , навел на забавную мысль - а что если с помощью катапульты.
встроить шифрование в клавиатуру? Мне пришла в голову идея добавить на клавиатуру несколько дополнительных кнопок.
Один, например, провоцирует клавиатуру сразу «напечатать» публичный ключ или даже сертификат. Другой переводит клавиатуру в режим шифрования — набранный текст не передается на компьютер, он сначала шифруется, а уже зашифрованный текст «печатается на экране».
Даже принимая во внимание мою большую любовь к разбрасыванию граблей по дорожке, по которой мне предстояло бежать в ближайшем будущем, я понимал нежизнеспособность такой клавиатуры.
Осознание это пришло где-то сразу после необходимости наличия у такой клавиатуры собственного экрана — без него нельзя посмотреть текст до шифрования и отредактировать его тоже, только вслепую.
Также в голову пришел вопрос: как компьютер может передавать информацию на такую «клавиатуру» ? Решение этого вопроса необходимо для ввода ключей и сертификатов.
Есть много вариантов:
- внешний usb на клавиатуре для флешки;
- специальный режим, в котором клавиатура распознается не только как клавиатура, но и, например, как запоминающее устройство;
- указание пользователю ввести специальную комбинацию клавиш (да, пусть пользователь распечатывает сертификат в base64, я не против) и многие другие способы.
Именно компьютер контролирует состояние светодиодов на клавиатуре и передает ему инструкции по включению тех или иных светодиодов.
Вы можете использовать этот канал передачи информации в своих целях.
Именно об этом мы и поговорим дальше.
На этом этапе я понял, что мне больше не интересно делать криптографическую клавиатуру.
Напротив, очень интересно реализовать атаку на DLP-системы.
Прощай криптографическая клавиатура, здравствуй устройство поиска информации.
Мы чиним то, что не сломано
Передача информации с компьютера посредством мигания светодиодов — идея не новая.Я даже затрудняюсь указать самый ранний источник.
Например, этот метод был увековечен в литературе в «Криптономиконе» Нила Стивенсона в 1999 году.
Пост находится по ссылке от 29 октября 2012 года.
Тем не менее, я пошел по пути изобретения собственного ремесла, так как художественное описание было недостаточно точным, и ссылку на подобную моей идее я нашел гораздо позже создания готовых прототипов.
Задача ясна и состоит из двух частей.
Самое простое — написать программу, которая будет представлять данный файл в виде мигающих светодиодов клавиатуры.
Самое сложное — сделать что-то, что будет выглядеть как клавиатура и перехватывать «сообщения» от программы.
Я решил не слишком усложнять программу и начать с создания максимально простого метода кодирования.
Num lock и Caps Lock кодировали два бита (светодиод включен - 1, светодиод выключен - 0), Scroll Lock служил маркером сохранения, каждый байт был разделен на 4 группы по 2 бита.
Предполагалось, что будущий приемник, получив данные о нажатии Scroll Lock, сохранит следующие 2 бита.
Нам нужно было сделать ресивер.
Тут мне на помощь пришел один из клонов Малинки, а именно nano pi m1. Заказывал заранее - просто побаловаться, и так уж получилось, что нашел ему применение.
В качестве ОС я использовал Armbian, который довольно хорошо работал на железе.
Сам проект предоставляет достаточно простые и удобные скрипты для построения образов.
Я потратил пару дней на анализ работы USB-гаджетов и тестирование гаджета HID-клавиатуры, входящего в комплект ОС.
Гладко было только в манах.
m1 успешно выдавал себя за клавиатуру и корректно эмулировал нажатия кнопок.
Но прочитать статус светодиода не получилось.
HID-пакеты прибыли, но содержали неверные данные.
USB-сниффер на стороне обычного компьютера показывал, что пакеты отправляются корректно, но что с ними происходит в «железе» уже не понятно.
Я потратил около недели, пытаясь отладить драйверы, связанные с USB, но безуспешно.
Возможно, если бы я взял обычный Raspberry Pi, все сразу запустилось бы.
А может в Армбиане все уже поддерживается костылями и сейчас работает. Уточню, что с момента экспериментов прошло около полутора лет и проверок текущей версии я не проводил.
Основная причина, по которой я перестал ломать железо, головку и исходники ОС, заключалась в том, что я нашел решение своих проблем.
Забавно, что это нашлось на Хабре — Пастильда .
Вдвойне забавно, что моя идея так сильно перекликалась с идеей аппаратного менеджера паролей.
Правда, я считаю, что такой менеджер обречен на небытие в той же степени, что и первоначальная идея шифрующей клавиатуры.
Ну да не беда.
Ребята собрали плату и написали прошивку.
90% необходимой мне работы уже сделано.
Попытки добраться до Пастилды не сразу увенчались успехом.
Директор «Третьего контакта» потерял ко мне интерес сразу после того, как я сказал, что мне нужна только одна доска.
И я не могу его в этом винить - штучное производство крайне дорогое, я надеялся, что в наличии будут хотя бы опытные образцы.
Так или иначе, железяка у меня все-таки осталась.
Я никогда не занимался написанием прошивок для устройств, видел это только издалека.
Но писать с нуля мне не пришлось — код прошивки был на Github. Собрать его и запихнуть в железку меня научил коллега (#яжнепрограммист, хотя еще точнее было бы: «Как я перестал быть программистом и начал программировать в два раза больше»).
Дальше все было просто — я нашел код, отвечающий за обработку HID-пакетов, и написал сборку битовых последовательностей для записи во внутреннюю память.
И вот долгожданный момент проверки основного функционала! Мне удалось корректно «мигать» светодиодами не очень длинные последовательности байтов.
В ходе функционального теста несколько тестируемых DLP и систем информационной безопасности не увидели в моих действиях ничего интересного и спокойно выпустили данные за пределы периметра.
На этом этапе я решил назвать эту атаку Сияние , от английского «сияние», «светимость».
Награждение невиновных
Как только эйфория от успешных испытаний прошла, пришло время провести статистические измерения.Тут я уже расстроился, потому что скорость и надежность моего решения были весьма посредственными.
Я предполагал 5 байт за 4 секунды, т.е.
1,25 бит/с.
Этот Очень медленно.
Лучше, чем ничего, но таким образом можно удалить только небольшие файлы, например документы.
Пришло время вспомнить исследователи, которые утверждают , что можно мигать светодиодами и фиксировать эти моргания фототехникой так, что скорость будет более 1000 бит в секунду.
Даже без аналоговых преобразований (хоть я везде и говорю «мигайте светодиодом», на самом деле обрабатываются только цифровые данные) я не увидел возможности теоретически увеличить скорость выше 10 байт в секунду.
Причём, чем меньшую задержку между миганиями светодиодов я делал, тем больше ошибок кодирования я получал — возможно, сработали какие-то ограничения операционной системы и часть «миганий» пропала, а может пакеты формировались как-то иначе или ещё что-то.
это вариант. Это неудивительно, но все же неприятно.
В конце концов я решил оставить задержку на уровне тех самых 5 байт и на этом успокоиться — эксперимент длительностью в час показал, что на такой скорости ошибок нет. Но установление паузы между сигналами не означало, что я не буду бороться за скорость.
Одним из факторов замедления, который я заметил, был тот факт, что для передачи даже двух битов требовалось несколько команд. Представим, что мне нужно передать два бита 1, а все светодиоды изначально выключены.
В моей системе кодирования, чтобы их передать, нужно зажечь все 3 светодиода клавиатуры.
Мне потребовалось три раза вызвать функцию, которая зажигает светодиод, имитируя нажатие кнопки на клавиатуре.
Если бы можно было сразу отправлять состояние всех светодиодов сразу, это была бы существенная экономия времени.
Причем HID-пакет передает состояние не 3-х светодиодов, а целых 5. Реально я увидел прирост скорости до 10 байт/секунду — никакой промежуточной настройки светодиодов и передачи 5 бит в одном пакете.
Но проверить эту оптимизацию у меня не было времени.
Потому что он придумал ещё сильнее! Забегая вперед, похвастаюсь, что скорость достигла 600 байт в секунду без ошибок кодирования.
Оказалось, что состояние всех светодиодов действительно можно задавать программно, отправляя HID-пакеты.
Почему бы не отправить HID-пакет в вашем собственном формате? На самом деле все не так просто.
Есть такая штука — «дескриптор отчета».
Это специальная структура, передаваемая клавиатурой при инициализации устройства.
Он определяет описание формата связи между клавиатурой и компьютером.
В общем, это указывает на то, что с клавиатуры на компьютер будут отправляться пакеты по 6 байт, а на него будут приниматься пакеты по 1 байту, а 3 бита будут зафиксированы.
Чтобы не нарушать баланс вселенной отправкой пакетов, не предусмотренных в дескрипторе, я просто добавил в дескриптор указание, что иногда на клавиатуру будут приходить пакеты по 32 байта.
Ну, я начал их отправлять.
Этого было достаточно для достижения вышеупомянутых 600 байт в секунду.
Потенциально DLP-системы могли проверить изменение HID-дескриптора и тем самым обнаружить атаку, но основные дескрипторы usb я не трогал - с точки зрения всех систем, какая бы клавиатура ни была, осталась прежней - серийный номер и остальные идентификаторы остались прежними.
Новый подход порадовал не только своей скоростью, но и стабильностью: не было ошибок в кодировании, можно было спокойно пользоваться клавиатурой даже во время передачи данных (в предыдущем методе это тоже было возможно, но это сопровождалось спецэффектами).
).
Потом пришло время Zeronights 2016 (да, мне было лень писать эту статью за полтора года), на которой я продемонстрировал всем работу устройства.
Там представители некоторых DLP посмотрели и вроде бы даже пообещали добавить защиту.
Надо будет проверить, когда будет возможность.
В заключение хотелось бы добавить еще несколько слов о разработке данного устройства, чего я делать не буду (конечно не буду, прошло полтора года - хотелось бы, уже сделал ).
К оборудованию можно подключить что-нибудь беспроводное для передачи сигнала — Wi-Fi, Bluetooth или даже 3G-модем.
Это значительно упростило бы удаление информации.
Еще одно улучшение заключается в совершенно особой плоскости – а что, если я вам скажу, что для проведения такой атаки вообще не нужно отдельное устройство? Ни малины, ни Пастилды.
У каждого из нас есть мобильный телефон.
Для некоторых это даже телефон Android. Которая, кстати, является близким родственником ОС Linux. Скажу больше, вспоминая свои эксперименты с nano pi m1, на Android (рутованном, конечно) можно установить модуль ядра, который будет представлен клавиатурой.
Похожий модуль есть в версии Кали для мобильных телефонов, так что все реально.
Теперь атака почти бесплатна и я не представляю, как еще ее улучшить.
Страшная история на ночь
Хотелось бы отвлечься от основной темы статьи и немного углубиться в теории заговора и паранойю.Давайте зададим себе очень простой вопрос – что первое, что мы набираем на клавиатуре после включения компьютера? Некоторые люди время от времени заходят в BIOS для настройки UEFI, другим необходимо выбрать операционную систему из списка, но большинство пользователей все равно вводят учетные данные для входа в ОС.
Что, если производители клавиатур добавят в прошивку своих устройств код, который будет собирать статистику о пользователе? Довольно легко такая клавиатура получит данные о том, как загрузить ОС и войти в систему под пользователем.
Потенциально нажатия клавиш могут сделать существенные предположения об операционной системе.
Условно говоря, нажатия типа ctrl+alt+f1 и частые нажатия caps lock ( о, ирония ) типичны для Linux, а win+m, win+d — для Windows. Анализируя время, когда компьютер включен, но клавиатура не используется, устройство может сделать предположения о том, когда компьютер остается без присмотра.
Вместе с такими знаниями уже все подготовлено к атаке - компьютер без присмотра, если он заблокирован, то мы его разблокируем - учетные данные известны, ОС известна - можно выбрать подходящую полезную нагрузку для присоединения к системе .
И даже если нападение будет замечено, вряд ли в этом будут винить клавиатуру; скорее всего все спишут на «вирус».
Почти идеальная атака.
То, что написано выше, выглядит как вполне теоретические домыслы.
Но как долго сохранится такая практика?
Другие статьи в блоге
→ Обход UAC или история трех эскалаций Исследование механизмов безопасности Windows в обход запроса UAC. → Жизнь без SDL. Зима 2017 Пока разработчики не используют SDL повсюду, у меня всегда будет работа.Теги: #утечка информации #исследования #dlp #dlp #аппаратное обеспечение #защита информации #сито #утечка данных #Caps Lock #информационная безопасность #Разработка систем связи #Программирование микроконтроллеров
-
Почему Оригинальные Картриджи Hp Практичны
19 Oct, 24 -
Навык Для Алисы «Стойка»
19 Oct, 24 -
Почему Я Ушел Из Ubisoft — Работа Моей Мечты
19 Oct, 24