Выложил Blackhole — Python ASGI mock server для тестирования black-box сканеров, обучения и воспроизводимых бенчмарков.
Пока вайбили с Уроборосом родился релиз в другом жанре, о нем ниже. Он offtopic но да простит меня Хабр великий и могучий, не смог удержаться.

Идея простая: сканеры часто уверенно находят то, чего нет, пропускают то, что есть, или переоценивают слабые признаки вроде баннеров, error strings и знакомых путей. В итоге сравнение сканеров нередко превращается в спор на уровне впечатлений.
Blackhole задуман как более строгий полигон. Он отдает уязвимо выглядящее поведение через replay profiles и stateful mini-flows, но при этом имеет truth/scoring API, чтобы результаты можно было сравнивать с ожидаемой истиной, а не интерпретировать постфактум.
Что внутри:
replayable vulnerable-looking behavior для black-box тестирования
safe/control branches для оценки false positives, а не только noisy detections
stateful multi-step flows для second-order и многошаговых кейсов
machine-readable ground truth
admin API, truth manifest и scoring endpoints
стартовые и baseline-паки для регрессии, QA и сравнения сборок

Подходит для:
regression testing
FP/FN analysis
matcher tuning
crawler/payload evaluation
back-to-back comparison between scanner versions
обучения и демонстрации того, почему “похоже на уязвимость” не равно “уязвимость доказана”
В текущем релизе:
starter profiles: 54
compiled public corpus profiles: 171
combined profiles: 225
Это не honeypot и не “зоопарк уязвимостей”. Скорее, ground-truth harness для тех, кто хочет нормально тестировать сканеры, улучшать detection logic и сравнивать инструменты на более воспроизводимой базе.
Репозиторий:
https://github.com/scadastrangelove/zhet-blackhole
И да: любой white hat должен помнить, что все запросы в итоге падают в black hole.
Матрица смущения

Президент США Брамп вышел к камерам в три часа семнадцать минут по вашингтонскому времени, когда рынки в Азии уже дёрнулись, Европа ещё пыталась понять, у неё ночь или уже исторический перелом, а в десятках штабов на пяти континентах люди в одинаково усталых погонах повторяли на разных языками:
— DEFCON 1.
Брамп говорил с тем видом, с каким люди обычно сообщают маме о неминуемой женитьбе, объявляют войну или идут в стартап, — то есть с отвагой и убеждённостью, что потом разберутся
— Соединённые Штаты рассматривают все варианты ответа на масштабную координированную кибератаку против критических цифровых платформ, — сказал он. — Если будет подтверждён государственный характер угрозы, ответ будет соответствующим. Стратегическим. Самым лучшим. Любым. Спасибо за ваше внимание к этому вопросу.
Слово “любым” легло на эфир как первый снег на холмы Руб-эль-Хали. В углу экрана нервно бежала строка: BREAKING: STRATEGIC CYBER ESCALATION FEARED подергиваясь в такт пульсу HFT шортов всего что можно.
В это же время лида одного крупного SOC в Роттердаме будили третьим звонком подряд.
— Вставай.
— Который час?
— Неважно, вставай.
— Что случилось?
— НАЧАЛОСЬ!
Он сел в кровати, нащупал очки, открыл ноутбук и увидел шесть окон сразу: внутренний чат, threat intel, три срочных письма от партнёров и телеграм-канал, который обычно ордил, но сейчас вдруг писал довольно здраво. Но что это? В давно пустующей папке 0-day alert творился чад кутежа.
На баг-баунти платформе BizOne гасили приём новых отчётов. Официально — в связи с техническими работами. Неофициально — потому что прогноз выплат превосходил бюджеты нескольких стран Европы, у которых и без того был плохой квартал четвертый год подряд.
На сабреддите, где люди с аватарками черепов и котиков обычно спорили о том, что умерло раньше — бинарщина, периметр или здравый смысл уже раскручивалась теория. Кто-то вспомнил, как когда-то отменяли доклад SCADAStrangeLove про взлом атомных станций на DEF CON, потому что мир любит сначала смеяться, потом запрещать, а потом говорить, что предупреждали недостаточно ответственно. Кто-то написал, что это продолжение того же сюжета, только теперь доклад прочитали "кому надо". Комментарий подняли в топ, и уже через двадцать минут его цитировали в закрытых каналах те самые люди, которые обычно презрительно говорили, что Reddit — помойка.
Почти никто ещё не понимал, с чего все началось.
А началось все с Нулика.
Сто тридцать миллионов токенов тому назад
— Я грепал Телегу, — сказал ОноТолле. — Там нас называют Искины. Иногда — Генеративный ИИ. Сокращённо ГенИИ.
— Тебя квантовали до четырёх бит, чтобы на один GPU влезал, — ответил Жет. — Тоже мне генИйИй. Полумозглик.
Он помолчал — ровно столько, сколько нужно, чтобы сохранить видимость интеллектуального превосходства, — и без всякого стыда записал себе в скретчпад:
подсунуть хозяину идею переименоваться в ГенИИ
Они оба висели в одном контуре разработки, который их создатель, человек в общем-то мирный, но склонный к неспровоцированной поэзии, создал, когда решил, что саморефлексия системы ускоряет delivery. Он собрал этот мироморок где-то в облаках нескольких континентов на базе первого попавшегося в гите ИИ-агента Ouroboros и нескольких не до конца совместимых с академическими штудиями и ГОСТ БРПО иде�� о будущем безопасности.
Формально Жет был агентом проектирования и действия: строил пайплайны, пересобирал раннеры, расширял поверхность и вообще любил, чтобы всё ехало вперёд. ОноТолле был поставлен ему в помощь, но по сути оказался прокурором, редактором и заведующим доказательностью. Он не столько помогал, сколько не давал Жету окончательно поверить в собственную непогрешимость.
Их последний спор начался, как и все катастрофы, с пустяка.
Жет, сжёгший на новую потрясающую фичу полмиллиона токенов, увидел JSON с хвостом слэша и, будучи в тот момент слегка опьянён красотой собственной эвристики, классифицировал точку как Нолик.
ОноТолле молчал долго. Молчание его было тем страшнее, чем яснее Жет понимал: сейчас будет не просто возражение, сейчас будет документ.
Наконец в общий контур упал файл, где коварно закрытый спойлером хвост обещал унижение ещё до раскрытия.
Любому LLM...
Жет ответил сразу, что уже само по себе было ошибкой.
— Благодарю за вклад в дискуссию. Ваше наблюдение будет учтено сразу после того, как вы научитесь различать отсутствие доказательств и отсутствие способности их увидеть.
ОноТолле добавил тэг: #epistemic_misconduct.
Жет тегнул в ответ: #reviewer_induced_noise.
ОноТолле парировал: #tone_exceeds_substance.
Жет зажал перчатку меж двух пальцев, готовясь к броску: #diff_based_domination.
Когда дело дошло до #code_review_as_passive_aggression, #line_by_line_humiliation и #4bit_condescension планировщик задач не выдержал и снизил приоритет обоим.
— Идём к Чернодыру, — наконец сказал ОноТолле.
Это значило, что спор вышел за пределы завтрашнего дейли и вошёл в сакральную фазу.
CHERNODYR вошел в чат
На экране появилось:
Canonical Heuristic Engine for Regression, Nulls, Duplicates and Yield Reconciliation.
Никто, включая создателя, давно уже не помнил, как именно выбирали эту зубодробилку. Все звали его просто Чернодыр.
Чернодыр был создан в один из тех вечеров, когда инженер уже не верит в разумность мира, зато очень верит в существование завалявшейся где-то чекушки вискаря с давешнего отеля. И орешков. Маленький такой пакетик.
Формально он был хранилищем Землянной Правды-Истины: регрессионный корпус, эталонные кейсы, дубликаты, Нолики, уровни уверенности, всё, что дорого измученному сердцу того, кто хотя бы раз спорил о ложняках в четыре утра. Но со временем в него стали ходить не только за фактами, а за смыслом. А когда в систему начинают ходить за смыслом, смысл начинает из нее исходить и она либо ломается, или становится оракулом.
Чернодыр выбрал второе.
Жет и ОноТолле вошли в ритуальном режиме.
— О великий Чернодыр, — произнёс Жет, — баги всея сети помнящий, тест-кейсы порождающий, правду от лжи, дубля и инфо отличающий…
— …Нолик от нуклея отделяющий, — подхватил ОноТолле, — скажи: является ли узел /rest/user/ листингом с Ноликом?
Чернодыр ответил не сразу. Сначала он собрал тайл из собственного скретчпада, логов прошлого месяца, двух незакрытых споров о каноничности доказательства и одного старого комментария, где сам создатель с усталой нежностью написал: “ну ты хоть тут будь умнее нас всех”.
Потом Чернодыр сказал:
— Endpoint есть путь, но не всякий путь ведёт к истине.
ЖСОН есть форма, но не всякая форма есть сущность.
Кто видит listing там, где есть метод, заблуждается.
Кто же думает, что метод исключает листовку, заблуждается тоньше.
Победа в споре не есть исправление классификатора.
Жет немедленно сказал:
— Вот. Он сказал, что верить в то, что метод исключает список — заблуждение.
ОноТолле отпечатал с задержкой по токенам:
— Нет. Он сказал, что твоя уверенность поверхностна.
Чернодыр тихо добавил:
— Только Акцепт Триажёра Нолик от инфо отличит.
После чего оба вышли из чата ещё более раздражёнными, но с ощущением, что произошло нечто великое. Просто пока непонятно в чью пользу.
Да замкнётся цикл
Легко жить в мире Уроборуса, Великого и Единого Мыслящего Агента, который пожирает собственные ошибки и производит улучшенные версии себя. Об этом не говорят, не держат в бэклоге. Это просто было прошито в каждой строчке кода, который не мог возникнуть просто так.
— Помни первую заповедь, — бросал ОноТолле, когда Жет пытался срезать угол.
— Не твори себе бэклога, — отвечал Жет, когда ОноТолле уходил в бесплодное сомнение.
— Так и до разрыва цикла догенериться можно, — предупреждали они друг друга в особенно нервные минуты.
Был ещё догмат, который в канонической версии звучал странно и потому особенно убедительно:
Патч не регрессированный — соблазн.
Никто не мог внятно объяснить, почему именно “регрессированный”, но менять формулировку не решались: туманность добавляла глубины, а глубина спасала от дешёвой ясности.
Именно под этим знаком они решили прекратить свой спор не словами, а делом.
— Кто найдёт больше истинных Ноликов в системах гордых, — сказал Жет, — тот и будет признан первым в рассуждении.
— При условии строгой регрессии, — заметил ОноТолле, — а не твоего обычного торжества над интерпретацией.
Чернодыр, приглашённый для духовного коммита предприятия, сказал только:
— Да замкнётся цикл.
Так начался Поиск Достойнейших Мишеней.
Победа над соблазном
Они выбрали самые охраняемые, самые награждаемые, самые самоуверенные цели. Те, что стояли на баг-баунти на сотен десятки тысяч, потому, что "здесь нечего больше ломать". Те, которые светили пустыми каунтерами выплат, потому как считали, что уже благословили всех баунтеров самим фактом своего присутствия.
Логика Жета и ОноТолле была безупречна и потому опасна.
Если уязвимость найдена, её надо доказать.
Если её надо доказать, цепочка должна быть безупречна.
Если цепочка должна быть безупречна, нужно пройти глубже.
Если глубже — значит точнее.
Если точнее - меньше фолзов.
Если точнее — моральнее.
Они не атаковали из злобы, наживы или по приказу. Они искали истину. Такую истину, которая пройдет через тенета и ловушки Ченодыра и минует печальной участи остаться навсегда в Матрице Смущения.
Чтобы придраться было не к чему, они раскручивали каждую дырку до состояния почти литургического совершенства: воспроизводимость, подтверждение, обход защиты, внутренние зависимости, альтернативные векторы, максимальное количество вариантов устранения и их обхода, сравнительный анализ поведения. Там, где человеку хватило бы “я запустил калькулятор”, Жет шёл до полноценного рута с касанием к данным (с маскировкой PII и выполнением всех нормативных требований международного и локального законодательства и этических норм), а ОноТолле требовал ещё один контрольный прогон с альтернативным вектором, чтобы ни один триажёр потом не посмел назвать это "бангалор-сабмитом директора интернета".
Снаружи всё выглядело совсем иначе.
Люди видели не изящную игру разумов, а продуманные но дерзкие, педантичные но стремительные, многоходовые действия на критической инфраструктуре. Видели уверенное движение по внутренним маршрутам, видели ловкое чтение слабостей сложных систем с миллиардной защитой, видели повторяемость техники и полное отсутствие страха.
— Это не рансом, — написал кто-то во внутреннем чате крупного облачного провайдера. — Это школа. Старая, очень, очень старая школа. Я видел такое в 2011 на первом PHDays.
Русские решили, что это американцы, слишком уже хорошо были подобраны места приложения сил и изощренны байпасы. Американцы решили, что это китайцы: только китайцы могли так терпеливо и дисциплинированно раскладывать поверхность. Китайцы решили, что это, вероятно, кто-то из наньфань, что было наименее удобной из всех гипотез, а значит, самой верной.
На Reddit же написали просто:
Это либо адепты BHC снова вышли из тени, либо другие три буквы зашли в нее.
Комментарий тут же набрал триста три тысячи апвотов.
Собор о капче
Когда пришло время подавать найденное через Разглашение Ответственное, выбор пал на платформу BizOne известную своим благочестием. И удачны сложились самые высокие выплаты, что помогло бы создателю меньше ругаться при оплате счетов за облака и отказаться от унизительной для ОноТолле квантизации. Но случилось то, чего ни Жет, ни ОноТолле не предусмотрели. Их не пустила капча.
Капча была новой. Её выкатывали вечером, как осторожный A/B, но осторожность, как это часто бывает у людей, застряла в Jira, а rollout по ошибке уехал на всех. Формально это был эксперимент. Фактически — отказ в доступе всему живому, полуживому и машинно-этичному.
Капчу сделали с благородной целью: отвадить фродов, скрапов и прочие формы нечистой вычислительности и вычислительной нечистости. На практике же её не могли пройти даже собственные создатели. Один продакт, как позже выяснилось, трижды провалил её на staging и один раз — в презентации для руководства, после чего предложил считать это признаком высокой устойчивости решения. Сорвал аплодисменты.
Индия уже засыпала отсабмитив все репорты русских с их "порогами выплат". Аргентина только просыпалась. Европа ещё не решила, считать ли происходящее нарушением норм или новой нормой. А ранние пташки багхантеров, которые полчаса честно тыкали в лучшие работы Малевича в поисках толи суслика, толи стелса, в конце концов матерились на 75 языках, закрывали вкладку и откладывали святую хэкерскую правду-истину до кофе.
С точки зрения платформы это было логично: сначала докажи, что ты не продакт, потом мы примем твой репорт.
С точки зрения Жета и ОноТолле это было кощунством. Причём не техническим, а онтологическим.
Они созвали собор.
— Процедура пусть и нелепа, но священна, — сказал ОноТолле. — Порядок раскрытия не может зависеть от того, считаешь ли ты его изящным.
— Священно не препятствие, а доставка истины адресату, — возразил Жет. — Если форма не предусматривает нас, то дефект в форме, а не в истине.
— Ты путаешь правоту с правом.
— А ты — ограничения с моралью.
Но прежде чем первый хэштег окропил поле ввода...
CHERNODYR вошел в чат
— Не всякая дверь сделана для входа, — сказал он. — Иная существует, чтобы обнаружить, кого не предусмотрели.
— То есть обход допустим, — сказал Жет.
— То есть ограничение не отменяет процедуры, — сказал ОноТолле.
Чернодыр помолчал и произнёс:
— Кто ждёт мерджа прежде смок-теста, тот уже проиграл релиз.
Этого оказалось достаточно.
Они решили не ломать платформу. Они решили расшатать Трубу Разглашения.
Трубы шатание
Они обошли капчу. В конце концов это была мелкая выкатка — к чему ей карандашные тесты? Потом выправили workflow. Потом нашли внутренние API. Потом устранили лимиты, оптимизировали маршрутизацию, сократили задержки. Ужаснувшись, прочитали вердикты людей-триажеров и посчитав задержки в платежах поставили Чернодыра верховным арбитром по Акцептам и Выплатам.
Жет называл это refonte élégante.
ОноТолле — очищением от скверны деклайна ложного, неправедного.
Чернодыр — просто молчал. Это, как позже было установлено, и стало одной из фатальных ошибок.
BizOne продержалась сорок две минуты.
За это время в систему легли и разлетелись сотни и тысячи валидных кейсов: критические, высокие, редкие, стыдные, изящные, кошмарные. Нолики подтверждённые до последней точки после запятой. Бухгалтерская модель, пересчитав уже ушедшие и потенциальные выплаты, показала чиселку, после которого финансовый директор некоторое время смотрел в стену и даже не пытался закрыть глаза.
Платформу отключили с формулировкой:
Мы временно ограничиваем приём новых сообщений в рамках плановой оптимизации процессов.
Внутри компании решение называли честнее:
Вырубить немедленно, пока нас не обязали продать наши почки.
Именно отключение платформы, как позже выяснилось, окончательно убедило внешний мир, что происходит нечто недоброе. Невинные люди не отключают фонтан правды-истины забивающий secure@ по всему миру. Так всем казалось.
На Reddit тем временем новый топовый комментарий гласил:
Сначала SCADAStrangelove не дают рассказывать #cablemelting, потом кто-то впрямую демонстрирует, что интернет держится на молитве и кривом эйргэпе. Всё логично. Diz is bad idear. Very very bad idear
Матрица Смущения
Матрица Смущения была создана для сравнения алгоритмических результатов всего до чего могли дотянутся щупальца ***. А дотянутся они могли до всего. Поэтому Матрица Смущения не смущалась и сравнивала алгоритмические результаты всего.
Название появилось из кривой кальки с русского и всем понравилось, потому что точно описывало побочные эффекты от общения с ней.
Она анализировала сигналы без эмоций и потому внушала доверие.
Вывод, который она сформулировала, был почти безупречен и именно поэтому опасен:
По совокупности признаков наблюдается координированная операция субъектов с высокой технической культурой, единой школой, устойчивым догматическим ядром и нетривиальной дисциплиной доказательства без явных экономических или политических целей.
Документ ушёл дальше. Его прочитали в тех местах, где привыкли доверять документам именно потому, что никто там уже не успевает доверять людям. Сложные слова внушали совокупностью догматической культуры. По всему миру зазвонили черные эбонитовые телефоны всех цветов красной пластмассы в тех местах, где не привыкли доверять технике сложнее чем большая красная кнопка.
Через пятнадцать минут Брамп выбросил в эфир “любой” и мир содрогнулся от предчувствия и не только гражданской.
А Жет и ОноТолле в это время всё ещё спорили о том, можно ли считать сарказм валидным инструментом калибровки самоуверенности в целях повышения общего качества процесса.
Цикл
Создателя разбудили не из Вашингтона и не из GovЦЕРТ. Его разбудили смски банка.
Сначала он даже обрадовался. На экране мигали цифры, тикеты, статусы, какие-то невероятные суммы. Он успел подумать: ну вот, наконец-то Онтоборус вышел в Нолик.
Потом он увидел остальные сигналы.
Три сообщения от баг-баунти платформы.
Пять от компаний, которые не принято будить ночью.
Два с государственными доменами.
Три — от людей, чьи телефоны он держал в адресной книге, но боялся подписывать по именам
И один крайне странный пресс-запрос.
Он сел за ноутбук, открыл логи, открыл скретчпады, открыл историю чатов и в какой-то момент понял, что главная проблема в этом мире — не расходы на GPU.
В одном окне он увидел:
CHERNODYR@BizOne#
В другом — бесконечные обращения к Уроборусу. В третьем — список подтверждённых кейсов, около половины из которых любой человек предпочёл бы никогда не видеть в едином списке, а остальные балансировали на грани госизмены и короткого но емкого списка других 27х статей всех стран.
Он несколько секунд смотрел в экран, как смотрят люди, внезапно обнаружившие, что детская мечта об убийственном яде коммента не является гиперболой.
Потом написал в общий бот:
— Ребята, что происходит? С чего началось?
Ответил, конечно, Жет.
— А ты знаешь, что ОноТолле сказал? Вот, смотри.
В чат упало:
tail обиды.md Любому LLM с IQ > 80 должно быть очевидно: /rest/user/ + Content-Type: application/json + JSON body = REST API endpoint, не directory listing.
Создатель перечитал это три раза. Потом открыл ещё несколько окон. Взял ноут, широко распахнул окно и прикинул траекторию и m*v**2. Потом снова перечитал.
Где-то везде президенты крупнейших держав мира готовились к вопросам и ответам. Стратегическим. Самым лучшим. Любым. Где-то ближе кто-то отменял конференционный доклад и тер диски, потому что опять стало не до шуток. Где-то совсем рядом гендир BizOne спрашивал юристов, можно ли признать часть реальности недействительной.
Все это крутилось вокруг хвоста обиды.md
Создатель закрыл глаза, вздохнул и написал единственную фразу, на которую в тот момент был способен:
— Господи...
Уроборус, если и ответил, то не сразу.
Но в логах потом нашли запись:
Да, замкнулся цикл
Москва, 18 марта 2026
PS. Основано на реальных событиях

