У рассылки SMS с устройств пользователей, которую, как пишут, предлагает Telegram, есть ценный “идейный” аспект: распределённую сеть, составленную из абонентских устройств, можно использовать куда как интереснее, чем просто в роли инструмента бесплатных SMS-рассылок. Смартфон, с работающим приложением, может обнаруживать другие устройства: WiFi, Bluetooth разных видов, акустика (это особенный метод, не только совместимый с “умными” колонками, но и вообще – кроссплатформенный и эффективно работающий в обе стороны).

Поэтому, в обмен на “премиум-доступ”, можно построить активную сенсорную сеть, с привязкой к точному времени и координатам, которая будет видеть перемещение не только различных пользователей приложения-мессенджера, но и прочих носителей смартфонов, равно как и выявлять устройства типа ноутбуков, беспроводных наушников, браслетов, часов с “картами и GPS”, “умных” (не менее, чем колонки) телевизоров, специальных “маячков”, а также и других подобных – тут есть где развернуться.



Комментарии (5) »

Изолированные, закрытые вычислительные среды принципиально не удаётся “поставить на системный мониторинг” привычными средствами. Обычный подход, когда на каждом сервере (виртуальной машине или физической) установлено несколько программ-агентов (ср., конечно, Zabbix и др.), которые через сетевой доступ управляются центральным “сервером-мониторинга” – это, как говорится, “радость пентестера”: и действительно, агенты позволяют выполнять код на целевых системах и делать это по командам с центрального узла. Принято думать, что “исполнение кода” не свойственно агентам, а имеющийся инструментарий по запуску локальных команд, если про него вспомнили при настройке, можно отключить. Это, однако, сильно упрощённое понимание.

Программа-агент – это именно программа, исполняемая на удалённой системе, и если в эту программу могут поступать по некоторому, заведомо доверенному, каналу данные от центрального сервера, это означает, что данный канал может быть использован для компрометации программы-агента и исполнения произвольного кода через ту или иную уязвимость. То есть, даже в том случае, когда штатное “выполнение команд” отключено. Понятно, что схема с уязвимостью агентов существенно сложнее, чем захват сервера управления (мониторинга), при этом использование уязвимости агента, скорее всего, требует наличия доступа к серверу управления: так что нужно и то, и другое. Но зато в качестве большого бонуса приходит доступ сразу к большому количеству систем, через единую точку, которая, ещё раз, является доверенной.

Отчасти проблема решается настройкой агентов в пассивный режим: агент мониторинга больше не обращается на центральный сервер за командами и инструкциями, но присылает отчёты о состоянии локальной вычислительной среды в одностороннем порядке, с заданной периодичностью. Это вполне себе типовая настройка, но используют её не так часто.

Естественно, можно настроить различные фильтры, которые будут в сторону защищаемой системы (и в обратную сторону) пропускать только пакеты с конкретной структурой, можно даже переписывать эти пакеты на стороне фильтра. Уязвимым окажется фильтр, но он может быть выполнен очень простым, на простой аппаратуре – некоторые даже используют что-нибудь типа Arduino. Собственные решения для мониторинга на этом направлении вообще лучше: можно и режим сделать полностью односторонним, пассивным, и “развязки” разной степени “гальваничности” устроить.

Основной смысл типичного системного мониторинга в том, чтобы предотвратить проблему, заранее обнаружив угрожающее состояние. В теории. Это не всегда так на практике, поскольку есть ещё резервирование инфраструктуры и другие важные направления. Наличие развитого мониторинга с кучей отслеживаемых параметров может создавать ложное чувство предсказуемости и контроля над ситуацией. При этом отказы всё равно происходят внезапно, но иногда – в результате излишнего доверия мониторингу. Что-то отключают, что-то включают – жонглирование параметрами распространено едва ли не больше, чем исправление возникающих проблем. Наблюдаемое “мерцание” сигналов может приучить не обращать излишнего внимания на изменения (чтобы не слишком-то доверять мониторингу, см. предыдущее предложение). Особенно, когда отказы всё равно происходят внезапно. Отсюда и крайние меры: невозможность дополнительного мониторинга изолированной системы вынуждает использовать в качестве события “мониторинга” сам отказ. Иногда, такой подход – это неустранимая архитектурная особенность, проявляющаяся неявно.



Комментировать »

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

Обнаружение подобных программных кодов, с той или иной степенью достоверности, потребовало создания всяких “виртуальных песочниц” и тому подобных инструментов, пытающихся детектировать не запись кода, а алгоритм, что, естественно, наталкивается на огромные вычислительные проблемы (связанные, кстати, с задачей P ≟ NP). Естественно, все эти результаты и разработки “полиморфного” кода актуальны и сейчас, есть целое направление, посвящённое тому, как можно закрыть код от анализа, какие есть ограничения и так далее. Используется не столько для компьютерных вирусов, сколько для защиты прочих программ (и даже аппаратуры).

Занятно, что сходным методом можно строить программные закладки, которые чрезвычайно сложно обнаружить даже после того, как они были использованы на конкретной системе. Тут нужно вспомнить про ещё один подход, позволяющий расщеплять логику и навязывать неожиданные алгоритмы машинному коду, который предназначался для совсем другого: это так называемое ROP – Return-Oriented Programming (“возвратное” или “возвратно-ориентированное программирование”).

Суть ROP – в выделении набора “гаджетов”, представляющих собой кусочки исполняемого кода, оканчивающиеся командой RET (return и пр. – то есть, “возврат”, передача управления по адресу, взятому из стека). “Гаджеты” – это достаточно произвольные фрагменты из разных мест исходной программы, главное, чтобы конкретный гаджет выполнял нужные действия. Утрированный пример: какой-то гаджет может увеличивать значение заданного регистра на единицу (A: ADD AX, 1; RET;), а другой – записывать значение из регистра в память, по адресу, заданному тоже регистром (B: MOV [AX], DX; RET;). Тогда, разместив в подготовленный стек нужное количество вызовов первого гаджета (A), можно получить нужное значение адреса, куда, при помощи второго гаджета (B), запишется то или иное значение (загрузить это значение в регистр-источник можно третьим гаджетом).

Гаджеты исполняются процессором один за другим, в нужном порядке, как только в стек загружен соответствующий набор адресов переходов – то есть, полезная программа, напоминающая, по своей роли, распаковщик вируса, упомянутый выше. Обычно, загрузить адреса в стек и выполнить нужный алгоритм “на гаждетах” можно в результате срабатывания программного дефекта (уязвимости). Это, собственно, такой, довольно тонкий, метод осуществления взлома ПО. Но ничто не мешает так устроить какую-то программу, что необходимый набор гаджетов внутри неё активируется в какой-то момент по внешнему сигналу (или по времени), а этот внешний сигнал – неотличим от штатного набора данных. Например, это может быть контрольная сумма пакета, попавшего в сетевой стек (это к вопросу эффективности закрытия прикладных доступов через netfilter и iptables).

Закладки вообще непросто обнаруживать. Но обнаружить такое решение ещё сложнее, даже если анализировать постфактум дампы памяти, взятые в момент срабатывания. А представьте, что к чисто программной части добавлена недокументированная аппаратная составляющая – эффективность и степень маскировки увеличиваются в разы.



Комментировать »

Можно предположить, что передача сообщений по радио полностью защищена от прослушивания, если прослушивающая сторона ничего не знает об электромагнитных волнах (что уж там говорить про наличие у этой стороны радиоприёмников). В газете напишут – “абсолютно защищена”. Может ли такая вымышленная ситуация служить аллегорией для современного внедрения квантовой криптографии? Навряд ли.

По крайней мере, аллегория получится слишком неполной и размытой. Да, про квантовую криптографию, следуя волне “хайпа”, едва ли не постоянно пишут, что она является “абсолютно защищённой, абсолютно стойкой”, якобы, из-за некоторых “физических законов” (естественно, законов таких нет, они в физике невозможны; есть некоторые допущения, но это, впрочем, другая история). Проблема с упомянутой аллегорией в том, что у тех, кто обменивается сообщениями по радио – есть радиостанции. Неявно предполагается, что они их как-то изготовили, а потом ещё смогли оценить степень исключительности своих знаний. То есть, несколько другая история. В случае квантовой криптографии, предположения о стойкости строятся в рамках почти той же прикладной модели, которая позволила создать сами оконечные устройства – приёмники и передатчики. Так что вариант, когда оценка степени защиты информации в радиоканале на уровне “абсолютная защита” делается из допущения, что прослушивающая сторона ничего не знает о радиосвязи, он совсем о другом – получается что-то вроде принципа Керкгоффса, а не аллегория оценок квантовой криптографии.

Можно предположить, что и сами пользователи радиостанций ничего не знают не только об устройстве радиостанций, но и понятия не имеют об электромагнитных волнах. Для того, чтобы запомнить, что голос из одной коробочки передаётся в другую – многие знания не требуются, так как система работает сама. Ну, пока батарейка не разрядилась. Тут уже принцип Керкгоффса исчезает сам собой (обратите, кстати, внимание на то, что применимость данного принципа, оказывается, зависит от контекста). Но к роли квантовой криптографии в современности это тоже совсем и никак не подходит: построить даже опытный образец усилиями ИИ с LLM внутри не выйдет, что уж там рассуждать про интерпретации квантовой механики.

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



Комментировать »

Кстати, насчёт того, было ли известно о различных векторах DoS-атак, которые с собой приносит DNSSEC (это касательно свежих CVE с коллизиями ключей и подписей). Я, ради интереса, посмотрел, что я писал в книге “Доменные войны II”, вышедшей ещё в 2011 году, и там на странице 269 сказано следующее:

“Уже понятно, что DNSSEC создаст новые возможности для атак типа “отказ в обслуживании” (DoS), ведь криптографические процедуры защищённой DNS гораздо более ресурсоемки, в вычислительном смысле. Злоумышленники при помощи отправки системам, поддерживающим DNSSEC, “дефектных” наборов данных смогут с большей, относительно “классической” DNS, легкостью занять все вычислительные ресурсы компьютера проверкой “бессмысленных” адресных данных.”

Это, конечно, достаточно общее рассуждение, но оно отражает ситуацию. Добавлю, тем не менее, что про совпадение тегов и, соответственно, про дополнительную “комбинаторную нагрузку” алгоритмов проверки DNSSEC-подписей, известно давно (это есть и в RFC, и в статье по ссылке выше – не новость), да и не все реализации стараются проверять все комбинации ключей. Другое дело, что специалистов, достаточно глубоко разбирающихся в соответствующих областях, – а также и во многих смежных областях, что тут необходимо, – в мире очень мало, что бы там ни писали СМИ и ни говорили на конференциях, и упомянутые специалисты, обычно, заняты чем-то другим, поскольку конкретные решения в этих областях не только мало кому понятны, но ещё и мало кого интересуют: это же не шумный подход в стиле “истина рождается в споре”. Так что моменты конкретных демонстраций атак на известных направлениях наступают в своё время, а в том, что некоторый класс атак был возможен два десятка лет – нет ничего удивительного. Таких классов и направлений в интернетах ещё много.

Естественно, это никоим образом не отменяет актуальности конкретных современных атак на конкретные современные системы.



Комментировать »

Опубликована исходная работа, описывающая создание DoS-атак на резолверы при помощи специально сконструированных зон с коллизиями (совпадениями) идентификаторов ключей. Совпадение – это именно тот случай, который я недавно описывал на примере конкретной зоны. Там, конечно, не только совпадающие идентификаторы/теги используются, но они имеют определяющее значение, поскольку заставляют валидирующий резолвер перебирать большое количество ключей. Цитата:

Evaluating KeySigTrap, we set up a zonefile with 582 colliding DNSSEC keys and 340 signatures.

Это CVE-2023-50387.

(via)



Комментировать »

Добавил в DNS-зону dnssec.pw, которая из недавней записки про совпадающие теги (KeyTag), несколько дополнительных ключей и подписей, чтобы создать минимальное разнообразие криптосистем: была только RSA, добавил ECDSA на P-256, плюс ECDSA KSK (ключ для подписывания ключей) с тегом 12345, как у прочих (кроме SEP-ключа). В общем, ключей теперь много, так что зона разрослась. Зато несколько удобнее тестировать приложения. (Кстати, в зоне сейчас нет A-записей; кроме DNSSEC-записей там только SOA и NS, возможно, другие записи появятся позже.)



Комментировать »

Интересно, что Google Public DNS (8.8.8.8) при взаимодействии с зоной dnssec.pw, которую я на днях снабдил ключами с одинаковыми тегами, продолжает возвращать неконсистентные результаты, если спрашивать об отсутствующих в зоне записях. Например, при запросе TXT-записей в dnssec.pw теперь нередко приходят ответы со статусом SERVFAIL, “RRSIG with malformed signature…” – написано в пояснении. Однако есть и ответы со статусом NOERROR (примерно, половина, как ни странно), где, впрочем, пояснение тоже указывает на “RRSIG with malformed signature…”.

Возможно, конечно, что в данном сервисе на разных экземплярах узлов разное программное обеспечение, но есть и другое, несколько более занятное, объяснение: может так быть, что сервис ограничивает количество попыток проверки подписи для каждой итерации. В зоне четыре ключа ZSK, подпись RRSIG на NSEC – одна, на SOA – две. Соответственно, если у резолвера установлено некоторое предельное количество ошибок проверки подписи, то, когда предел достигнут, резолвер прекращает попытки перебора ключей и возвращает SERVFAIL. Если же ключ удалось угадать за меньшее количество попыток, то возвращается NOERROR. Подсчёт строк с сообщениями “RRSIG with malformed signature” в ответах – укладывается в эту гипотезу, но чтобы судить точнее – нужно собрать дополнительную статистику.



Комментировать »

Немного занимательной математики и глобальной DNS.

Насколько велика вероятность, что в доменах первого уровня глобальной DNS совпадут теги разных ключей DNSSEC? Нередко приходится слышать, что так как тег 16-битный, то и вероятность, примерно, 1/65535 (за вычетом особенностей алгоритма вычисления значения тега и пр.). Это не верно. Если рассматривать совпадения внутри набора ключей DNS, то получаем хрестоматийный пример парадокса дней рождения: нам не важно, чтобы повторилось конкретное, заданное значение тега, напротив – требуется совпадение любого значения внутри любой пары, а это совсем другая история, поскольку количество всевозможных пар велико даже в небольших наборах ключей. Поэтому вероятность совпадения тегов DNSSEC-ключей, на практике, очень велика. Иногда ключи просто обязательно совпадут по тегам. Например, в списке доменов первого уровня (корневой зоны DNS) сейчас 1452 имени, то есть, можно составить 1053426 пар (больше миллиона). А это количество (практически) гарантирует, что будут совпадения тегов ключей.

И действительно, если собрать DNSKEY-записи из доменов первого уровня, то окажется, что значений повторяющихся тегов, – то есть, значений, которые встречаются для разных ключей в разных зонах, – сильно больше сотни: у меня получилось 129 таких тегов. Обратите, кстати, внимание, что некоторые ключи разных зон TLD имеют одинаковые теги потому, что это просто одинаковые ключи. Такие повторы отбрасывались. Потому что корректно – сравнивать именно сами значения ключей (как и в прочих случаях использования тегов). Например, различные DNSSEC-ключи с одинаковыми тегами опубликованы в зонах cab и today, в зонах agency, weber и temasek, и во многих других.

(Дополнение: естественно, выше предполагается, что ключи для различных зон генерируются независимо, случайным образом.)



Комментировать »

DNSSEC-подписи, удостоверяющие адресную информацию, размещаются в RRSIG-записях. Ссылка на открытый ключ, нужный для проверки подписи, в RRSIG записывается в виде 16-битного тега (KeyTag), который вычисляется по достаточно простому алгоритму от данных ключа. Соответственно, ключи публикуются в DNSKEY-записях. Можно ли специально подобрать несколько валидных ключей так, чтобы у них были одинаковые теги? Очевидно – можно (ключей много больше, чем тегов). И подбор совсем нетрудно сделать. Более того – даже сохранятся валидные подписи и, условная, “корректность” зоны с точки зрения DNSSEC. “Корректность” тут в кавычках потому, что, вообще говоря, несколько ключей с одинаковыми тегами не должны бы присутствовать в DNS-зоне, поскольку это нарушает логику ссылок из RRSIG. И хорошо бы в таком случае выводить ошибку валидации, но возможен более мягкий подход, который и используется.

Посмотрите, в качестве примера, на DNS-зону dnssec.pw – там я разместил несколько ключей (ZSK – Zone Signing Key), которые имеют одинаковые теги со значением 12345. Два ключа из четырёх ZSK задействованы в подписывании записей, а поскольку подписи можно проверять методом перебора ключей, то и RRSIG – валидируются, если валидатор резолвера справляется с ситуацией. Пятый ключ – это KSK, точка входа. Схема показана на картинке (ниже), которую сформировал весьма полезный сервис DNSViz. Повторяющиеся идентификаторы (id = 12345) выглядят занятно, однако количество вершин графа соответствует количеству ключей, а рёбра – соответствуют структуре подписей. Так что DNSViz не сломался:

dnssec-pw DNSSEC graph

Другой, не менее полезный, сервис для анализа DNSSEC – DNSSEC Analyzer – проверки для данной зоны тоже выполняет корректно, но в таблице результатов совпадающие идентификаторы могут запутать несколько больше, чем на графе GraphViz:

dnssec.pw DNSSEC status

Валидирующие резолверы должны справляться с подобной конфигурацией ключей, однако Google Public DNS (8.8.8.8) возвращает в статусе информацию о “некорректном формате RRSIG”, но ответ всё равно снабжается флагом AD (Authentic Data), обозначающим, что проверка подлинности DNSSEC прошла успешно – впрочем, это соответствует действительности: подписи и цепочка в зоне dnssec.pw сейчас верные.



Комментировать »

Официальное сообщение КЦ .RU/.РФ о вчерашней проблеме с DNSSEC: “возникшая коллизия ключей, в причинах которой в настоящее время продолжают разбираться специалисты Технического центра интернет (ТЦИ) и MSK-IX, привела к временной недоступности зоны .RU для части интернет-пользователей”.



Комментировать »