[syndicated profile] lleo_feed


Хватит глупо хихикать! Рассказываю российские законодательные новости о наркотиках. С давних пор в России жила была статья 46 федерального закона «О наркотических средствах и психотропных веществах», которая запрещала пропаганду наркотиков *  Закон жил, курилка, запрещал рекламировать наркотики и «распространять сведения» об их изготовлении и «использовании». Однако непонятки оставались. Что нам делать с книжкой, где главный бандит, например, нюхает? Это уже сведения про использование? Или, наоборот, антинаркотическая пропагада, ведь бандит плохой, и его вот-вот арестует сыщик? А если это и есть сам сыщик Шерлок Холмс? Который в первоисточнике колет под укоризненные речи доктора Ватсона? Нам теперь запретить Конан Дойля? Поэтому наркоопределение было решено наркорасширить. Так появился Федеральный закон от 08.08.2024 г. № 224-ФЗ о внесении изменений в статью 46: http://www.kremlin.ru/acts/bank/40227 — принятый Госдумой, одобренный Советом Федерации и подписанный лично Путиным год назад * .

Какие изменения произошли? Во-первых, оказалось, что книжки про Холмса можно не сжигать во дворах взрослых библиотек 18+, закон относится только к книгам, обнародованным после 1 августа 1990. Что за судьбоносное литературное событие расгомофобило историю литературы на две эпохи? Об этом мы можем лишь догадываться. Например, примерно с этого года начался приход Пелевина — хоть первые рассказы он публиковал раньше, но основная дурь типа «Хрустальный мир» вышла покурить позже. Кроме того, в 1991 Шульгин обнародовал TiHKAL. Пусть в США, пусть на английском, но обнародовал же, не постеснялся. В общем, Холмсу стало пока еще можно, а вот Пелевину уже облом. Помимо этого, сами определения пропаганды расширились словно зрачки * . Добавили отдельно «Интернет». Пропагандой стало не только любое упоминание «допустимости, привлекательности», но и сравнение вреда разных наркотиков («какие-либо преимущества отдельных наркотических средств») и даже упоминания «об использовании в медицинских целях». И уж тем более наркотики стало нельзя «представлять общепринятой нормой поведения». Вышло в законе и послабление: упоминать наркотики теперь разрешили в медицинской литературе и полицейских протоколах, прошлый закон об этом не думал. В литературе и «произведениях искусства» упоминать тоже разрешили. Разумеется, только в рамках художественного замысла (а он у нас всегда с собой), и без пропаганды, и с маркировкой книг и комиксов прямо на обложке — про вред здоровью, про запрещенность наркотиков и про уголовную ответственность. Чуть позже догнались и выдохнули законопроект этой маркировки: 5% обложки любого неосторожного томика отныне украсит высокохудожественная фраза «Незаконное потребление наркотических средств, психотропных веществ, их аналогов причиняет вред здоровью, их незаконный оборот запрещён и влечет установленную законодательством ответственность», а также будет нарисован «предупреждающий знак в виде равностороннего треугольника с закругленными углами и вписанным в него восклицательным знаком», что бы ни значили эти непременно закругленные углы (результат неправильно понятой команды Солнцеликого «давайте там закругляйтесь»). В общем, я представляю себе обложки новых книг так:



В общем, всё это, придуманное в августе прошлого года, должно было вштырить нас ровно с 1 сентября 2025. Умный Пелевин отреагировал быстрее всех — уже начиная с 2021 его герои перестали употреблять наркотические вещества и приняли употреблять вещества электронные. Маркировать их на обложках пока не требуется. А вот издатели, а особенно музыкальные издатели занервничали — ведь по новому закону ответственность за слово «дунули» полагалась уже не только рэперу Пупкину, но всей цепочке его распространителей, почти что сообщников в составе организованной группы. Поэтому все присели на измену, и к 1 сентября издательства бросились перечитывать, а стримминговые платформы переслушивать всех своих авторов в поисках упоминаний того, о чем писать и петь с 1 сентября грозит бэдтрипом.

Но... нельзя так много думать об употреблении наркотиков без практики. Чувствуя приближение осени, российские законодатели догнались еще одним законом — о внесении изменений во внесение изменений: https://rg.ru/documents/2025/08/07/fz304-dok.html В нем решено было чуток попуститься и борьбу с наркотой отложить на полгодика — до 1 марта 2026. Что мы видели на картинке выше. И если вдруг вам показался серьезным передозом наркозакон о наркопереносе наркопоправок в наркозакон, вы просто новичок в этом деле и не вкуриваете пока современное российское законотворчество. Ведь если наугад потыкать в разные законодательные акты на сайте kremlin.ru, в большинстве случаев вы увидите примерно такой разноцветный психодел:



Где там твоя новая осенняя книга, Пелевин? До марта можно.
[syndicated profile] lleo_feed
Иноагент Василий на запрещённом Ютубе в кратере нежелательного Йеллоустоунского вулкана исполняет старые песни о главном:

[syndicated profile] lleo_feed
Друзья! Пользуясь случаем хочу посетить Германию — побывать на слёте (Подсолнух)[https://podsolnuh.de] памяти Владимира Ланцберга. А по пути почитать вам стихи и в других городах. План такой (подробности ближе к делу):

23 сентября (надеюсь) — Ганновер
25 сентября — Мюнхен
26-28 сентября — слёт
1 октября — Нюрнберг

Вы конечно заметили, что в этом списке нет Берлина. Это потому, что я пока не нашел места, где бы почитать стихи 22 сентября в Берлине (кафе art.city.people, где я всегда это делал раньше, почему-то не на связи). Если у вас есть какие-то возможности или идеи, где можно устроить концертик в Берлине, пишите!

Фотка для привлечения внимания:



[syndicated profile] dxdt_feed

Posted by Александр Венедюхин

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

Насколько подобные дежурные утверждения, – опубликованные, видимо, в качестве ответа на волну в СМИ, – будут соответствовать непростой реальности – это ещё нужно посмотреть, конечно.

[syndicated profile] dxdt_feed

Posted by Александр Венедюхин

В очередной полёт, как пишут, специальный аппарат X-37B повёз экспериментальную инерциальную навигационную систему с квантовыми сенсорами.

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

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

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

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

[syndicated profile] dxdt_feed

Posted by Александр Венедюхин

“Яндекс” через ВШЭ рапортует, что успешно и официально, пусть и в порядке эксперимента, внедрил LLM/ИИ и “промпт-инжиниринг” в процесс подготовки дипломных работ студентами (кстати, почему-то в тексте новости поготовку работы/проекта называют “подготовкой диплома”, но это уже детали, которые не видит LLM).

Вообще, кто бы, как говорится, сомневался, что использование LLM с целями “подготовки диплома” будет не просто приветствоваться, но ещё и прямо рекомендоваться лучшими вузами, тем более, когда речь идёт о коммерческом сервисе “Яндекса”. Тут ведь главное, чтобы изучение арифметики не было, в конечном итоге, заменено на “промпт-инжиниринг” заданий для калькулятора – ну, на это можно только надеяться, да и шансы не велики.

Кстати, наверное, если уж LLM, то в дипломной работе тогда должны бы указываться эти самые “промпты”, которые использовались для генерирования текста. Есть, конечно, проблема в том, что воспроизводимость отсутствует: и сама LLM так устроена, что выдаёт разные тексты, и провайдер LLM-сервиса может что-то подкрутить. С другой стороны, хоть какие-то содержательные элементы останутся.

[syndicated profile] dxdt_feed

Posted by Александр Венедюхин

(Это дополненная и скорректированная версия статьи, которую я некоторое время назад публиковал на “Хабре”.)

Данные в запросах и ответах классической DNS никак не защищены, передаются в открытом виде. DNS-over-TLS (DoT, RFC 7858) предоставляет один из инструментов защиты информации, а именно: защиту DNS-запросов и DNS-ответов от прослушивания на промежуточных узлах.

DoT использует TLS для зашифрования DNS-транзакций, передаваемых между узлами, но не защищает сами DNS-данные. Под “DNS-данными” тут подразумевается состав ответов и запросов DNS: имена и записи. То есть, если ваш локальный компьютер использует DoT для работы с DNS-сервером, то передаваемые DNS-данные не видны “на транзите” (как объясняется ниже, сам факт обмена DNS-данными обычно всё равно виден) и нельзя простым способом узнать, для какого узла и какие DNS-запросы направлялись. Однако, если DNS-сервер, к которому запросы отправлялись с защитой DoT, возвращает неверные, искажённые DNS-данные, – например, подставляет собственный IP-адрес для, условно, example.com, – то DoT ничего с этим поделать не может – тут уже нужно использовать DNSSEC.

На всякий случай, замечу: DoT – это технология, которая никак не связана с DNS-over-HTTPS (DoH). Архитектура DoT довольно логичная: TLS здесь используется в качестве инструмента создания защищённого “сокета” между DNS-клиентом и DNS-сервером. Через “сокет” передаются те же DNS-запросы/DNS-ответы, как они передавались бы на уровне обычного UDP или TCP. То есть “сокет” с TLS тут нужно считать туннелем, работа которого прозрачна для уровня DNS. Естественно, чтобы использовать DoT в таком прозрачном режиме, нужна поддержка TLS и на клиенте, и на сервере. Однако, поскольку спецификация отводит TLS обособленный уровень (в отличие от DoH), ничто не мешает поднять TLS-соединение между узлами какими-то другим способом, установив тем самым туннель, а запросы/ответы от неподдерживающих TLS клиентов/серверов перенаправлять без изменений через этот туннель.

Вспомним самые базовые свойства DNS как сервиса поиска данных. Эти свойства важны для понимания места DoT в уже построенной инфраструктуре. DNS – сложная система, работающая по сложным и, что называется, “развесистым” протоколам (простой эта система только кажется; в чём, надеюсь, можно убедиться даже по результатам чтения данной небольшой статьи). Внедрение TLS в DNS заметно усложняет архитектуру, но конкретно DoT позволяет внести изменения почти оптимальным образом.

Типовой сценарий работы DNS это так называемый рекурсивный опрос, в котором специальный DNS-сервер (резолвер) производит обход других DNS-серверов (которые называются “авторитативными”), следуя по веткам дерева делегирования с целью поиска данных, соответствующих некоторому ключу. Хрестоматийный пример: в качестве ключа выступает имя хоста (example.com), а целевыми данными является IP-адрес (значение адресной A-записи), то есть, “хотим найти IP-адрес для имени сервера”. DNS правильно рассматривать именно как специальную распределённую базу данных и сервис поиска в этой базе данных. Собственно, сама аббревиатура DNS может расшифровываться двумя способами: Domain Name System и Domain Name Service. DoT – относится к транспорту для сервиса поиска и позволяет защитить трафик каждого DNS-запроса на каждом отрезке. (А криптографическая система на уровне базы данных DNS – это как раз DNSSEC, но DNSSEC не зашифровывает данные.)

Рекурсивный DNS-резолвер, если подходящий ответ отсутствует в кеше, обращается к разным авторитативным серверам Интернета по некоторому довольно сложному алгоритму и, при штатной работе системы, либо получает от сервера нужный ответ о целевом имени, либо получает так называемый делегирующий ответ, который содержит имена других авторитативных серверов и позволяет резолверу продолжить поиск, обращаясь уже к каким-то из этих серверов (откуда и появляется “рекурсия” в названии процесса). При этом рекурсивный резолвер обычно находится за пределами “локальной машины”. В качестве рекурсивного резолвера может выступать сервер провайдера интернет-доступа или публичный сервис типа Google Public DNS 8.8.8.8. На локальной машине DNS-запросы обрабатывает более простая программа – stub-резолвер, который только перенаправляет запросы рекурсивному резолверу (иногда его ещё называют “рекурсор”) и принимает от него ответы. DoT может использоваться на любом участке работы DNS: не только на “последней миле”, то есть на отрезке от локального stub-резолвера к рекурсивному резолверу, но и между авторитативными серверами. Кстати, эта “последняя миля” в современных браузерах как раз часто защищена при помощи DNS-over-HTTPS.

Итак, общая логика работы DoT следующая:

1) произвольный DNS-клиент, если он поддерживает TLS, устанавливает TLS-соединение, подключившись по TCP к DNS-серверу (для UDP есть отдельный вариант – DNS-over-DTLS, здесь можно считать, что он работает так же, как и DoT);
2) DNS-клиент может провести аутентификацию сервера различными способами (см. ниже);
3) если TLS-соединение установлено, то DNS-клиент переходит к отправке DNS-запроса обычным способом, но уже через TLS-соединение;
4) ответ DNS-сервера доставляется в рамках того же TLS-соединения; при этом формат DNS-ответа и прочие свойства – не изменяются, если сравнивать с работой DNS непосредственно по UDP или TCP, без TLS-туннеля (см. ниже);
5) TLS-соединение закрывается, если клиент не планирует использовать его далее.

Для DoT выделен номер порта 853 (классический номер порта DNS – 53). Поэтому клиенты могут сразу пробовать использовать DoT, подключаясь по TCP на номере порта 853. Так как DoT – универсальная спецификация, то такое подключение можно устанавливать и к авторитативным серверам. Но сейчас поддержка DoT на авторитативных серверах является большой редкостью. Тем не менее, DoT поддерживают, например, серверы DNS-зон facebook.com и wikimedia.org.

Практика

Воспользуемся утилитой dig из пакета BIND и посмотрим, как DoT работает вживую на авторитативных серверах. В качестве источника примеров используем зону wikimedia.org, авторитативные серверы имён которой поддерживают DoT.

Утилита dig – это один из типовых инструментов из области DNS. В более или менее современной версии dig умеет в DoT сразу из коробки: нужно просто указывать опцию +tls при вызове. Я здесь использую версию 9.18.33-1 под Raspberry Pi OS (Debian 12).

Сначала определим, на какие серверы делегирована зона wikimedia.org (пока что без DoT), это делается запросом NS-записей (-t NS):

$ dig -t NS +short wikimedia.org
ns1.wikimedia.org.
ns2.wikimedia.org.
ns0.wikimedia.org.

(+short здесь – это краткий формат вывода.)

Наша цель – отправить запрос AAAA-записи (IPv6-адрес) через DoT и получить ответ, посмотрев, с помощью tshark, что происходит в трафике. Кроме того, мы извлечём серверный TLS-сертификат с авторитативного сервера и глянем, что там, в сертификате, написано. Будем использовать авторитативный сервер ns1.wikimedia.org. Однако сначала определим его IPv4-адрес, чтобы DNS-запросы отправлять непосредственно серверу.

$ dig -t A +short ns1.wikimedia.org.
208.80.153.231

Запросили A-запись – получили IPv4-адрес в ответ. Теперь включаем DoT (и тут вообще будет опций побольше, но все они объяснены ниже):

$  dig -t AAAA @208.80.153.231 +tls +nocookie +norec wikimedia.org

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> -t AAAA @208.80.153.231 +tls +nocookie +norec wikimedia.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44438
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; TCP KEEPALIVE: 157.0 secs
; PAD: (388 bytes)
;; QUESTION SECTION:
;wikimedia.org.			IN	AAAA

;; ANSWER SECTION:
wikimedia.org.		300	IN	AAAA	2a02:ec80:300:ed1a::1

;; Query time: 300 msec
;; SERVER: 208.80.153.231#853(208.80.153.231) (TLS)
;; WHEN: Sun Mar 16 18:18:01 MSK 2025
;; MSG SIZE  rcvd: 468

(Опции: +tls - используем DoT, +nocookie - без куки-меток, чтобы не перегружать вывод (DNS-куки не относятся к DoT и тут не рассматриваются: про них планирую отдельную записку опубликовать), +norec - не устанавливаем флаг рекурсии.)

Здесь уже в нижнем информационном блоке видно, что запрос и ответ передавались с использованием TLS, через TCP-соединение на номере порта 853. То есть, это DoT.
Дополнительно подтвердить, что трафик ходил через TLS, можно при помощи tshark, посмотрев в дамп, записанный tcpdump (это два основных инструмента).

Для записи дампа трафика (может потребоваться root-доступ, см. также про экспорт сессионных ключей TLS ниже):

# tcpdump -i eth0 -w pcap-dns.pcap

Парсинг дампа при помощи tshark:

$ tshark -r pcap-dns.pcap -o tls.keylog_file:keylog.log -O tls,dns -S "-----PACKET-----" -x

Здесь: -r - входной PCAP-файл; -o tls.keylog_file:keylog.log - это импорт сессионных ключей TLS, они потребуются для раскрытия DNS-трафика (про способ экспорта кратко рассказано ниже); -O tls,dns - перечень протоколов для парсера; -S "..." - разделитель "пакетов" в распечатке дампа, можно использовать любую удобную строку; -x - выводить hex-дамп тоже.

В распечатке дампа находим примерно следующее:

Internet Protocol Version 4, Src: 192.168.1.13, Dst: 208.80.153.231
Transmission Control Protocol, Src Port: 36461, Dst Port: 853, Seq: 1, Ack: 1, Len: 303
Transport Layer Security
    TLSv1 Record Layer: Handshake Protocol: Client Hello
        Content Type: Handshake (22)
        Version: TLS 1.0 (0x0301)
        Length: 298
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello (1)
            Length: 294
            Version: TLS 1.2 (0x0303)

Это часть сообщения ClientHello, направленного утилитой dig авторитативному DNS-серверу. Соответствующее серверное сообщение ServerHello, которое можно найти в дампе, вместе с возможностью расшифровывать трафик, означает, что узлы успешно установили соединение TLS 1.3. Внутри TLS-соединения передан DNS-запрос и получен DNS-ответ.

Чтобы посмотреть прикладной трафик внутри TLS, нужно экспортировать сессионные ключи - то есть, симметричные секреты, которые стороны использовали для зашифрования трафика. Конкретный способ экспорта зависит от параметров сборки dig и системного окружения, но обычно достаточно установить переменную окружения SSLKEYLOGFILE, чтобы dig, при использовании TLS, выводила ключи в файл или в STDERR (откуда их можно точно так же скопировать). Механика экспорта TLS-ключей не относится к теме данной статьи, поэтому детали остаются за скобками. А вот выдачу tshark для расшифрованного DNS-трафика - посмотрим. Запрос:

Transport Layer Security
    TLSv1.3 Record Layer: Application Data Protocol: Domain Name System
        Opaque Type: Application Data (23)
        Version: TLS 1.2 (0x0303)
        Length: 61
        [Content Type: Application Data (23)]
        Encrypted Application Data: [...]
        [Application Data Protocol: Domain Name System]
Domain Name System (query)
    Length: 42
    Transaction ID: 0xad96
    Flags: 0x0020 Standard query
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...0 .... .... = Recursion desired: Don't do query recursively
        .... .... .0.. .... = Z: reserved (0)
        .... .... ..1. .... = AD bit: Set
        .... .... ...0 .... = Non-authenticated data: Unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 1
    Queries
        wikimedia.org: type AAAA, class IN
            Name: wikimedia.org
            [Name Length: 13]
            [Label Count: 2]
            Type: AAAA (IPv6 Address) (28)
            Class: IN (0x0001)
[...]

Здесь и далее часть данных (опции EDNS и пр.) удалена, чтобы не слишком растягивать распечатку. В блоке Flags можно видеть параметры запроса, как его сформировала утилита dig. А в блоке Queries (сам запрос) - имя wikimedia.org. и состав запроса IN AAAA. Обратите внимание на поле [Application Data Protocol: Domain Name System]. Вообще, то, что TLS-сессия используется для DoT, видно не только по номеру порта, но и по идентификатору протокола уровня приложений, который dig передаёт в составе начального TLS-сообщения ClientHello. Выглядит это вот так:

Extension: application_layer_protocol_negotiation (len=6)
  Type: application_layer_protocol_negotiation (16)
   Length: 6
    ALPN Extension Length: 4
    ALPN Protocol
     ALPN string length: 3
     ALPN Next Protocol: dot

ALPN - это Application Layer Protocol Negotiation, расширение ClientHello, которое позволяет сразу сообщить серверу, какой именно прикладной протокол будет использован поверх этого соединения. Для DoT зарезервирован идентификатор 0x646F74 (то есть, строка "dot" в ASCII). Расширение передаётся в открытом виде, поэтому системе, инспектирующей трафик, нетрудно классифицировать TLS-сессию как сессию DNS: номер порта и идентификатор протокола - этого вполне достаточно. Понятно, что ни TLS, ни DoT и не ставят своей целью сокрытие факта соединения.

Просматривая выдачу tshark далее, находим DNS-ответ:

Transport Layer Security
    TLSv1.3 Record Layer: Application Data Protocol: Domain Name System
        Opaque Type: Application Data (23)
        Version: TLS 1.2 (0x0303)
        Length: 487
        [Content Type: Application Data (23)]
        Encrypted Application Data: [...]
        [Application Data Protocol: Domain Name System]
Domain Name System (response)
    Length: 468
    Transaction ID: 0xad96
    Flags: 0x8400 Standard query response, No error
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .1.. .... .... = Authoritative: Server is an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...0 .... .... = Recursion desired: Don't do query recursively
        .... .... 0... .... = Recursion available: Server can't do recursive queries
        .... .... .0.. .... = Z: reserved (0)
        .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
        .... .... ...0 .... = Non-authenticated data: Unacceptable
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 1
    Authority RRs: 0
    Additional RRs: 1
    Queries
        wikimedia.org: type AAAA, class IN
            Name: wikimedia.org
            [Name Length: 13]
            [Label Count: 2]
            Type: AAAA (IPv6 Address) (28)
            Class: IN (0x0001)
    Answers
        wikimedia.org: type AAAA, class IN, addr 2a02:ec80:300:ed1a::1
            Name: wikimedia.org
            Type: AAAA (IPv6 Address) (28)
            Class: IN (0x0001)
            Time to live: 300 (5 minutes)
            Data length: 16
            AAAA Address: 2a02:ec80:300:ed1a::1
    Additional records
        : type OPT
            Name: 
            Type: OPT (41)
[...]
            Option: EDNS TCP Keepalive
                Option Code: EDNS TCP Keepalive (11)
                Option Length: 2
                Option Data: 0622
                Timeout: 1570
            Option: PADDING
                Option Code: PADDING (12)
                Option Length: 388
                Option Data: 00…
                Padding: 00…

Это исходник DNS-ответа, который был отображён dig (см. распечатку выше). Обратите внимание на секцию "опций", вот её копия из выдачи dig:

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; TCP KEEPALIVE: 157.0 secs
; PAD: (388 bytes)

Здесь мы, например, без труда видим, что параметр TCP Keepalive имеет значение 157 секунд, как и в распечатке tshark, а дополнение (padding) совпадает по длине (388 октетов). Как нетрудно догадаться по названию, TCP Keepalive содержит указание на интервал времени, в течение которого сервер (в данном случае) готов поддерживать контекст TCP-соединения, чтобы клиент мог реализовать конвейеризацию запросов. К DoT это относится весьма косвенно, но зато служит прекрасным примером реальной сложности современных DNS-протоколов (про Keepalive в DNS тоже можно написать отдельную статью, как ни странно).

А вот дополнение (padding) к DoT относится в большей степени, чем Keepalive, хоть и так же находится за пределами конкретно DoT. Идея использования дополнения здесь в том, чтобы можно было изменять длину блоков данных, содержащих DNS-транзакции, не влияя на сами транзакции. Если длину блоков выравнивать, то это позволяет сделать семантически разные блоки неразличимыми по длине. Что, кстати, особенно важно, если блоки зашифрованы. Проще говоря, наблюдая трафик, состоящий из разных по длине блоков данных, где длина определяется форматом, можно выстроить корреляцию с конкретными DNS-запросами и ответами по порядку их следования. Ведь параметры известны: длина доменного имени, длина "флагов" и заголовков, количество DNS-записей в ответах и т.д. Это позволит сделать предположения о составе наблюдаемого трафика, даже без раскрытия самого его содержания. Если же вы наблюдаете только ровный конвейер блоков одинаковой длины, в стиле "запрос-ответ, всё в одинаковых коробках", то извлечь дополнительную информацию гораздо сложнее. Естественно, можно при помощи дополнения варьировать длину и так, чтобы, напротив, блоки не были одинаковыми по количеству байтов. Заметьте, что аналогичный механизм выравнивания длины записей с помощью дополнения есть и в TLS 1.3.

TLS-сессия использует серверный сертификат. Для авторитативного сервера ns1.wikimedia.org. TLS-сертификат можно получить из дампа трафика (но, так как там TLS 1.3, придётся расшифровать отдельно), а можно воспользоваться утилитой s_client из OpenSSL: TLS в DoT точно такой же, как и в других случаях, так что s_client сработает прекрасно, нужно лишь подключиться по номеру порта 853, вот так:

$ openssl s_client -connect 208.80.153.231:853

Cертификаты в TLS нужны для аутентификации узлов, то есть для установления подлинности этих узлов. Однако в DoT с сертификатами связаны свои особенности.

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

Технически, ничто не мешает выпустить сертфикат для IP-адреса. Если говорить про имеющиеся "хорошо известные УЦ", то сертификаты для IP-адресов пока что выпускают неохотно, так как есть трудности с надёжной проверкой права управления адресом, а также с сопровождением. Впрочем, Let's Encrypt обещают довольно скоро сделать автоматические короткоживущие TLS-сертификаты на IP-адреса для всех, используя механизм подтверждения управления адресом чисто по TLS. Это должно позволить в прозрачном режиме привязать ACME-проверку к DoT, не поднимая ненужного, в данном случае, веб-сервера.

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

В-третьих, DoT использует "приспособительный" подход и к аутентификации, и к TLS в целом. Это то, что в англоязычной традиции называется Opportunistic Security - "если удалось, то обязательно будем аутентифицировать и зашифровывать, а если нет - тогда ладно".

Может показаться, что если серверный сертификат не проверять, то от TLS для DNS нет никакого толку: промежуточный узел может перехватить соединение и подставить свой, произвольный сертификат, подходящий по формату. Однако в случае DoT схема, как минимум, всегда защищает от пассивного прослушивания трафика. Пассивное прослушивание реализовать гораздо проще, чем активный перехват, а защита от утечек через "пассивные" каналы и является основной для DoT. Тем более, если речь идёт о работе с авторитативными DNS-серверами. Защита же от активной атаки может быть реализована на "последней миле", где клиенту, обычно, заранее известны некоторые данные о сервере: имя, ключ и так далее.

Кстати, посмотрим на имена и на интервал валидности сертификата, который вернул сервер ns1.wikimedia.org.:

        Serial Number:
            05:f7:71:aa:08:8e:32:88:0a:71:9c:2d:f3:98:17:e1:d6:aa
        Signature Algorithm: ecdsa-with-SHA384
        Issuer: C = US, O = Let's Encrypt, CN = E5
        Validity
            Not Before: Mar 16 05:02:56 2025 GMT
            Not After : Jun 14 05:02:55 2025 GMT
        Subject: CN = ns0.wikimedia.org

[...]
            X509v3 Subject Alternative Name: 
                DNS:ns0.wikimedia.org, DNS:ns1.wikimedia.org, DNS:ns2.wikimedia.org

Это сертификат, выпущенный Let's Encrypt. Subject пропускаем, смотрим в Subject Alternative Name, где указаны все три имени для трёх авторитативных серверов зоны wikimedia.org., которые мы нашли в самом начале этого экскурса в DoT силами dig.

DoT уже поддерживается основными программными пакетами авторитативных серверов и рекурсивных резолверов. Например, BIND и Unbound. Так что протокол можно внедрять не только на "последней миле", но и на авторитативных серверах, защищая трафик резолверов к этим серверам (и обратно).

Подведём итог. DoT, используя TLS, защищает данные от пассивного прослушивания третьей стороной. Если клиент применяет тот или иной метод аутентификации сервера, то DoT может защитить от активного перехвата и подмены данных. Но всё это работает только на том отрезке, где применяется DoT, а защита TLS не распространяется на сам состав DNS-данных. Чтобы защитить содержательную часть DNS, необходимо использовать DNSSEC, а эту технологию тоже можно изучать при помощи dig на практических DNS-зонах.

[syndicated profile] dxdt_feed

Posted by Александр Венедюхин

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

Способ первый – это требование наличия адресных записей в апексе почтовой зоны. Речь вот о чём: представьте, что доставляющий релей принёс письмо из домена example.com, а принимающий почтовый сервер требует, чтобы для этого example.com была указана A-запись (либо AAAA – не важно). То есть, принимающий сервер смотрит в DNS, обнаруживает, что в example.com нет A-записи и отбрасывает письмо. (Просто закрыть SMTP-сессию в самом начале этот сценарий не позволяет: нужно дождаться, когда клиент скажет, из какого домена, – якобы! – он принёс письмо.) Очевидно, данный способ предполагает, что “настоящие” доменные зоны не могут работать без адресных записей, а если такой записи нет, то и письмо – “подспуфлено”. Но это далеко не всегда так. Почтовый домен – это почтовый домен. Необязательно держать под тем же именем веб-сайт, предположим. Конечно, способ обоснован: пусть спецификация такого и не предписывает, но ведь можно потребовать, чтобы в почтовом домен был опубликован какой-то способ доставки почты, однако просто требовать наличия адресных записей – это слишком строго. Да, при отсутствии MX-записей почта может доставляться по A-записям. Это верно, но это не означает, что наличие Α-записи обязательно, если есть MX-записи. А вот легитимные письма, приходящие из чисто почтового и корректно настроенного домена, оказываются отброшены. Это плохо.

Данная проверка при фильтрации разумна только в том случае, если для почтового домена-отправителя не удалось найти MX-ы. Но обратите внимание, что, вообще говоря, наличие MX-записей, технически, не является обязательным при отправке сообщений: логика фильтрации тут строится на том, что если для почтового домена, из которого, якобы, пришло письмо, не опубликовано методов доставки сообщений, то и письмо-то какое-то липовое. Но наличие DNS-записей не гарантирует, что письма будут приняты. Есть и специальные адреса в стиле no-reply, и прочий /dev/null. Как говорится, ладно, допустим – однако отсутствие-то A-записи при наличии MX уж точно не может служить основанием для отбрасывания письма.

Вообще, изобретательная защита от нежелательных сообщений – мера вполне оправданная. Главное, не переусердствовать. Особенно, в эпоху развитого DKIM и SPF. Эти две упомянутых технологии вполне себе позволяют предоставить достаточные доказательства того, что письмо отправлено с привязкой именно к тому домену, который указан в качестве “источника”. “Источника” тут в кавычках потому, что схема доставки сообщений электронной почты вообще не подразумевает доменов-источников – источником всегда является ближайший к получателю почтовый релей, который, что называется, “приносит письмо по SMTP”. В этом сила email. И этот же момент приводит к перегибам, с которыми приходится встречаться на практике. Всё дело в разнообразных дополнительных проверках, применяемых SMTP-сервером получателя к SMTP-клиенту, который принёс письмо.

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

В только что описанной схеме фильтрации может ещё проверяться состав IP-адресов, полученных в результате резолвинга имён из MX-записей. И если адреса – это какой-нибудь localhost или 0.0.0.0, то письмо, опять же, отбрасывается.

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

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

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

Заметьте, что упомянутые выше SPF и DKIM уже дают довольно строгое “подтверждение домена”. Оно уж точно строже, чем состав списка MX-ов и, тем более, наличие A-записей.

[syndicated profile] lleo_feed
Иногда в Гугле случается сбой и он показывает новости из будущего, хотя когда я пишу этот пост, две подводные лодки с мигалками ещё даже не выехали на вызов к пациенту:



Если бы не мы, это кино сейчас снимали бы солдаты НАТО про небинарную персону Женю:



А это вчерашние РИА Новости. Какая эпоха, такие и новости, такое и РИА. Мне кажется или это распространение фейков про российскую армию?




А вот мировые новости. Мы гуляли с пацанами возле моря у воды, если б вылезло цунами, получило бы пизды:



Ну и наконец, секта свидетелей бытия американцев на Луне представляет новое фото. Но мы легко разоблачим подделку: примерно в те годы, когда на флаге США могло быть 39 звёздочек, был построен первый автомобиль с двигателем внутреннего сгорания. Об остальном вам сейчас расскажут в комментах трудолюбивые разоблачатели.

[syndicated profile] lleo_feed
Чего-то меня переклинило сегодня, отвлекся от работы на несколько часов и повысил квалификацию: разобрался с React, разобрался, как писать мобильные приложения на React под Андроид и [написал](https://github.com/lleokaganov/radio-rj) приложение, играющее [радио Рыбий жир оно же Радио без башни](https://lleo.me/radio). Раньше когда-то на Cordova писал, но это было десять лет назад. В Гуглплее apk не появится, потому что Гугль мой аккаунт удалил за бездействие, насилие над котятами и всякое там отсутствие подписанной рекламной политики для несовершеннолетних геев Эритреи. И больше я аккаунтов у Гугля создавать не желаю. Но приложение вот, можно ставить:

https://lleo.me/radio/rj.apk

Что там звучит на радио — я без понятия, оно живёт под столом своей рандомной жизнью.

Единственное что — если выключить экран или уйти на другой, то при смене песни оно уснет и играть перестанет. Но это уже какие-то глубинные глюки React, которые за один день я решать не готов.

Да, ну и в России работать не будет без ВПН, как и весь мой сайт, потому что он за CloudFlare, а его (не меня) баннят. Нельзя просто так в России взять и послушать какое-то радио с музыкой, Россия не для этого. Но если вы его как-то скачали, значит, у вас все норм с VPN.
[syndicated profile] lleo_feed
Нашел в старых записях [O2TV](https://lleo.me/o2) от 18.02.2008 года песни Евгения Шестакова и сохранил в mp3, пусть будут. Особенно моя любимая «Муха», но и остальные прекрасны. Классика, конечно, но вдруг кто не слышал?

Евгений Шестаков — Хромал Казак
Евгений Шестаков — 01 Дали по носу
Евгений Шестаков — 02 Муха
Евгений Шестаков — 03 Чупа-чупс
Евгений Шестаков — 04 Басня
Евгений Шестаков — 05 Летели люди самолетом
Евгений Шестаков — 06 Летают в небе птички
Евгений Шестаков — 07 Штирлиц
Евгений Шестаков — 08 На Второй советской
Евгений Шестаков — 09 Домой с полученькой
Евгений Шестаков — 10 Гаи
[syndicated profile] lleo_feed




Господи, как это прекрасно. Браво, Герман, вот что значит школа! Государственный VPN, который поможет обходить блокировки других государственных VPN, как нашего собственного, так и вражеских, не наших пока государств! Также предлагаю создать на Госуслугах раздел разблокировки экстремистского контента, заблокированного в странах Запада. И организовать государственный круглосуточный доступ без плашки к материалам лиц, признанных иноагентами в странах НАТО. А там недалеко и до господдержки закладок с наркотиками, запрещенными в недружественных нам странах, но разрешенных в дружественных КНДР и Афганистане. Наш ответ на постоянно выявляемые угрозы должен быть антиасимметричным, противозазеркальным, взаимоабсурдным и обоюдоневменяемым, вплоть до обратного ответа всему миру на любые враждебные действия с нашей стороны!

Profile

jegjj: (Default)
jegjj

August 2025

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-Aug-11, Monday 21:57
Powered by Dreamwidth Studios