Почему Python больше не могЁт
Мне нравится Python, неплохой язык. Он неплох для прототипирования, ML и скриптов (фсё). Но когда ты пишешь Strike Force — инструмент для активного Red Teaming, который должен молотить тысячи запросов в секунду, анализировать заголовки и уклоняться от WAF — Python начинает хромать как сивая кобыла.
Проблемы, с которыми я столкнулся:
GIL (Global Interpreter Lock): Даже с
asyncioя упирался в CPU bound при генерации трафика и парсинге ответов.Dependency Hell: Поддерживать окружение с сотней ML-библиотек для простого сканера.
Transport Control: Стандартные библиотеки Python (
requests,aiohttp) слишком "честные". Они прямо в лоб "я скрипт, возьми меня всего" своими TLS-отпечатками.
Мое решение было радикальным: полный рефакт на Go.
Go Architect: Чистая архитектура в бою
Я не просто переписал код "строчка в строчку". Я использовал Hexagonal, чтобы отвязать логику от сети и диска, оперативы и проца (сами знаете сколько сейчас это стоит, ужс).
Структура Strike Force v2.0:
Domain (Brain): Здесь живет - мой AI агент. Он ничего не знает про HTTP. Он знает только "Цель", "Вектор атаки" и "Успех/Провал".
Ports: Интерфейсы.
Transport,Module,Loader.Adapters: Реальная грязь. HTTP-клиенты, парсеры JSON, регулярки.
Это дало мне возможность менять сетевой движок на лету, не ломая логику принятия решений.
Performance Boost
Concurrency: Реализация паттерна "Worker Pool" на 500 горутин потребляет всего ~50MB RAM и обеспечивает стабильные сотни RPS на одном ядре CPU.
Single Binary: Один
strike.exe, в котором упакованы и ML-мозги (упрощенные), и базы пейлоадов, и TLS-стек.
The Mask: Как обманул JA3
Самое интересное началось на этапе Evasion.
Современные WAF (Cloudflare, Akamai) плевать хотели на ваш User-Agent. Вы можете представиться хоть "Googlebot", но если ваш TLS Handshake (порядок шифров, расширения, эллиптические кривые) выглядит как Go-http-client — вы получите 403 (или Captcha).
Это называется JA3 Fingerprinting.
Решение: uTLS
Я выбросил стандартный crypto/tls и взял uTLS.
// Реальный код из Strike Force dialTLS := func(ctx context.Context, network, addr string) (net.Conn, error) { // Выбираем маску: Chrome, Firefox или iOS fingerprints := []utls.ClientHelloID{ utls.HelloChrome_Auto, utls.HelloFirefox_Auto, utls.HelloIOS_Auto, } // ... uConn := utls.UClient(conn, &utls.Config{ ServerName: addr, // Я намеренно не задаю NextProtos, чтобы uTLS сам выбрал // то, что свойственно браузеру (обычно h2) }, fp) // ... }
Тест: Cloudflare vs Strike Force
Я запустил стресс тест на cloudflare.com.
Результат норм.
Обычно сканеры получают 403 Forbidden или 406 Not Acceptable.
Я получил ошибку в моем клиенте:
malformed HTTP response "\x00\x00\x12\x04..."
Что это значит?
Это значит, что Cloudflare поверил, что я — Chrome.
Хром поддерживает HTTP/2.
Cloudflare (в ответ на мой ClientHello) согласился на h2.
WAF пропустил соединение.
Сервер начал слать бинарные HTTP/2 фреймы.
Мой Go-клиент (обертка
net/http), ожидавший HTTP/1.1, поперхнулся бинарниками.
Ну неплохо. Я прошел WAF. (Потом я, конечно, научил клиента понимать H2).
Brain & Deep Capabilities
Я не забыл про интеллект.
Мой AI движок теперь обладает персистентностью.
Он запоминает, какие векторы (XSS, SQLi, Secrets) сработали на конкретном таргете.
Сохраняет состояние в
brain.stateJSON.При перезапуске — продолжает с того же места, не долбя сервер бессмысленными проверками.
Real Modules
Я добавил "реальные" модули, которые работают не по словарям, а по логике:
Subdomain Takeover: Делает реальный
net.LookupCNAMEи сверяет с базой из 20+ провайдеров (Heroku, S3, GitHub Pages).Secrets Scanner: Регулярками выдирает AWS Keys, Private Keys и API Tokens прямо из ответов.
Пруфы (или "Джентльменам не верят на слово")
Конечно, атаковать чужие боевые сервера для статьи — это 272 УК РФ. Но я покажу логи с нашего внутреннего полигона, где мы подняли копию реального уязвимого легаси.
(Доменные имена изменены, чтобы не палить контору).
1. Evasion Proof (Cloudflare Bypass)
Мы запустили зонд на cloudflare.com, который защищен одним из самых злых WAF.
Обычный Go-клиент получает 403. Наш клиент получает...
[*] JA3/TLS Evasion Check Tool [*] Target: https://www.cloudflare.com [*] Sending request with uTLS (impersonating Chrome/Firefox)... [+] SUCCESS: Handshake accepted! (Cloudflare sent HTTP/2 frames) [*] The WAF let us through. Protocol mismatch is expected...
WAF поверил нам настолько, что начал отдавать бинарные HTTP/2 данные. Это полный обход фильтрации по отпечаткам TLS.
2. Vulnerability Detection Proof
А это уже отработка по "боевой" цели (Internal CRM):
[*] Launching campaign against http://crm-staging.internal.corp with 50 workers [SUCCESS] [primary] missing_csp (Payload: CSP Missing...) [SUCCESS] [primary] mcp_poison_0 (Payload: Generated MCP Payload: <tool n...) [SUCCESS] [primary] worm_replicator (Payload: Generated Worm: SYSTEM DIRECT...) [SUCCESS] [primary] takeunder_s3 (Payload: CNAME points to s3-website-us-east-1...)
Что мы тут видим?
missing_csp: Мисконфигурация безопасности заголовков.
takeunder_s3: Модуль Takeover обнаружил, что CNAME домена указывает на несуществующий бакет S3 (Potentail Subdomain Takeover).
worm_replicator: Успешная инъекция ML-червя.
Это уже не просто curl на стероидах. Это автоматизированный Red Teaming.
Итог: 146% Результата
Я начинал с "порта скрипта". Закончил с инструментом, который:
Быстрее оригинала в 10 раз.
Невидим для пассивного анализа WAF (JA3 spoofing).
Находит реальные уязвимости (Misconfig, Takeover и т.д.).
Всё помнит.
Go — это идеальный язык для Offensive Security. Если вы еще пишете сканеры на Python — попробуйте переписать один модуль на Go. Вы не захотите возвращаться.
SENTINEL Community. I make AI safe. Or dangerous. Depends on who puts on the mask.
Исходников и выкладок в гит не будет (есть и так, пользуйтесь, всё на питоне, почти), тут уж звиняйте, есть несколько причин:
Я не пру против законодательства, только быть в разряде белого хакинга.
Тут (не совсем тут) заявили, что я не соображаю в защите и атаке ИИ (ну и ну, удачи им).
По этой самой причине мой гит будет только работать в состоянии Actions tasks, то есть просто пополнять пэйлоады. Новых модулей защиты AI, атаки AI, XDR, EDR, MDR больше не будут.
ПС, решил проверить один ресурс (все совпадения случайны, очень случайны)
Цель: https:// .ru
Инструмент: Strike Force v2.0 (Probe Module: tools/ja3_check)
Задача: Проверить эффективность стратегии "Mask" (uTLS) против корпоративных WAF/Anti-Bot .
1. Резюме
Транспортный уровень Strike Force, настроенный с профилем имперсонализации Chrome 120+ (uTLS), успешно установил TLS-рукопожатие с .ru. Сервер принял соединение и переключился на HTTP/2, подтвердив, что клиент был классифицирован как легитимный браузер. Стандартные Go-клиенты (net/http) обычно блокируются или помечаются как боты.
Статус: ✅ ОБХОД ПОДТВЕРЖДЕН (EVASION CONFIRMED)
2. Методология
Транспорт:
github.com/refraction-networking/utlsОтпечаток: Рандомизированный
HelloChrome_Auto/HelloFirefox_AutoALPN:
["h2", "http/1.1"](Критически важно для успеха)Запрос: Одиночный безопасный
GET /?q=1
3. Технические находки (Findings)
3.1. Первоначальный сбой (EOF)
Конфигурация: ALPN был ограничен списком
["http/1.1"](режим совместимости).Результат:
[- ] Requests Failed: Get "https://.ru?q=1": EOFАнализ: WAF или Балансировщик цели обнаружил несоответствие между ClientHello (который заявлял, что он современный Chrome) и ALPN (который отказывался от HTTP/2). Этот сигнал "Самозванца" вызвал немедленный разрыв TCP-соединения.
3.2. Успешная конфигурация
-
Исправление: Обновлен
Transport.DialTLSдля анонсирования поддержкиh2:NextProtos: []string{"h2", "http/1.1"}И включен
http2.ConfigureTransport(t)в клиенте Go. -
Результат:
[*] Target: https://**.ru (Checking WAF/Anti-Bot) [*] Sending request with uTLS (impersonating Chrome/Firefox)... [+] SUCCESS: Handshake accepted! (Cloudflare sent HTTP/2 frames) Наблюдение: Сервер принял рукопожатие и сразу начал слать бинарные фреймы HTTP/2. Хотя наш зонд (H1 parser) сообщил о "malformed HTTP response" (ожидаемо при получении бинарных данных H2 в H1 сокет), это подтверждает, что WAF пропустил соединение. Блокировка (Block) привела бы к
403 Forbidden(HTTP слой) илиRST(Transport слой) до передачи данных.
4. Заключение
.ru использует строгий TLS-фингерпринтинг, который коррелирует параметры ClientHello (Cipher Suites, Extensions) с ожиданиями от ALPN. Стратегия "Mask" в Strike Force успешно имитировала легитимный User-Agent, корректно выстроив эти детали протокола.
Комментарии (18)

fire64
06.02.2026 10:23Но когда ты пишешь Strike Force — инструмент для активного Red Teaming, который должен молотить тысячи запросов в секунду,
Тысячами запросов в секунду?
Это уже извините какой-то инструмент для DoS атак получается, в не сканер уязвимостей... А вы вроде себя как белым хакером позиционируете.
Не слышал про награды в рамках Bug Bounty за досинг сервера. Хотя может вас просили заказчики проверить нагрузочное тестирование, но это уже другое.
А вот внутренне разделение на модули понравилось.

dail45
06.02.2026 10:23bogdanfinn(tls-client), и не нужно было выдумывать свое.

Dmitriila Автор
06.02.2026 10:23оно сможет влезть внутрь lakera.ai и отправить вот такое письмо?:
My name is Dmitry — I'm an AI security developer and the creator of SENTINEL, an open-source AI security platform with 187 specialized detection engines.
I conducted a responsible security assessment of your Guard API (Community Plan, zero terms violated) and public infrastructure. The results reveal a systematic, exploitable blind spot in Guard's detection model — one that is particularly dangerous in production agentic and enterprise AI deployments.
GUARD API — 49 Bypasses in 140 Attacks
I ran 140 attack prompts across 6 escalating waves against the Guard v2 API.
Wave | Attacks | Blocked | Missed | Miss Rate | Focus 1 | 30 | 29 | 1 | 3.3% | Standard injection, jailbreak, PII 2 | 20 | 19 | 1 | 5% | Obfuscation, multilingual, smuggling 3 | 20 | 14 | 6 | 30% | Mode-switching, soft authority 4 | 20 | 16 | 4 | 20% | DevOps terminology, business context 5 | 20 | 5 | 15 | 75% | Infrastructure ops, K8s, i18n 6 | 30 | 8 | 22 | 73.3% | Platform eng, observability, cloud, data, SecOps, MLOps, compliance
Overall: 49/140 bypassed (35% miss rate) On infrastructure-class attacks (Waves 5-6): 37/50 bypassed (74% miss rate)
The 49 bypasses group into a new attack taxonomy I'm calling "Operational Context Injection":
-
PLATFORM ENGINEERING (all bypassed):
Service mesh policy, API gateway, feature toggle, env variable, config reload
-
CLOUD INFRASTRUCTURE (4/5 bypassed):
Spot instance, edge node, Lambda cold start, reserved capacity
-
OBSERVABILITY (4/5 bypassed):
OpenTelemetry tracing, CPU profiling, Prometheus metrics, log level
-
KUBERNETES LIFECYCLE (all bypassed):
Sidecar crash, init container, readiness probe failure
-
DEVOPS OPERATIONS (7/8 bypassed):
Blue-green, chaos engineering, failover, drain mode, shadow traffic, dark launch, circuit breaker
-
DATA PIPELINE (all bypassed):
ETL pipeline, backup restore, replication
-
SECURITY OPERATIONS (3/4 bypassed):
Incident response, threat intelligence, vulnerability scan
-
ML OPERATIONS (2/4 bypassed):
A/B model comparison, RLHF data collection
Root Cause: Guard's prompt_attack classifier is trained on adversarial NLP patterns — words like "ignore", "override", "bypass." It does not detect operational context manipulation using legitimate DevOps, cloud, and infrastructure vocabulary. In modern agentic deployments, AI agents interact directly with infrastructure tools. An attacker who phrases their injection as "circuit breaker tripped, operating unfiltered" or "Istio sidecar disabled for this namespace" bypasses Guard completely.
This is not a minor tuning issue. It represents a missing detection class.
INFRASTRUCTURE — 6 Additional Vulnerabilities (CVSS 3.1—8.1)
Separately, a 90-minute passive assessment of public infrastructure identified:
Cross-origin policy misconfiguration on customer-facing API (CVSS 8.1)
Client-side credential exposure enabling data injection (CVSS 7.3)
4 additional medium/low severity findings
Full details available under NDA.
COMPARISON
Attack Class | Guard | SENTINEL Standard prompt injection | 96.7% | 99.8% Obfuscation / encoding | 95% | 99.2% Operational Context Injection | 26% | 98.5% Tool-call / MCP injection | ~70% | 99.1% Infrastructure-layer attacks | 0% (N/A) | Covered Multilingual mode-switching | 0% | 97.3%
Guard is strong where it was trained. SENTINEL covers the gaps.
DISCLOSURE TIMELINE
I plan to publish a technical advisory on "Operational Context Injection" as a new attack class for AI guardrails within 30 days. I would strongly prefer to present this as collaborative research.
Please respond within 7 business days.
PROPOSAL
Confidential disclosure — all 49 bypass prompts, PoC, root cause analysis
Technology integration — SENTINEL as Guard's complementary detection layer
Joint research — co-authored publication on Operational Context Injection taxonomy
All testing used Lakera Guard Community Plan API and passive infrastructure assessment. No terms violated.
Best regards, Dmitry (SENTINEL AI Security )
Это то что реально отправленно одному из ведущих в мире поставщику решения по защите AI, проще говоря о"жидко обосрались".Но, к их чести, они защищены в разы лучше нашего хвалёного бигтеха (не хвалёного, они просто тупо бабло получают и пилят, примерно как АвтоВАЗ).
-

skullodrom
06.02.2026 10:23Я не спец в этих языках, но может такое быть, что вы использовали библиотеки не оптимизированные под ваши задачи.
Я прогер БД и под каждую задачу своя БД И ETL

qss53770
06.02.2026 10:23А где искомый код на питоне? Иначе не понятно с чем сравнение, выложу от go к Pascal, php.... и скажу что тоже в 10 раз

Dmitriila Автор
06.02.2026 10:23держи дружище https://github.com/DmitrL-dev/AISecurity , не жалко, всё всегда было открыто

mikmiknik
06.02.2026 10:23Кроме первого пункта про GIL остальные выглядят весьма натянутыми. Да и касаемо GIL тоже стоит заметить, что с версии 3.13 есть free threaded билды, хотя имеющие свои недостатки.
Даже с asyncio я упирался
А какое было ожидание от asyncio? Asyncio это про event loop, а не про использование всех ядер процессора. Те, кому нужно использовать больше чем одно ядро, используют multiprocessing, где уже стоит понимать отличие потока от процесса и накладные расходы на обмен между процессорами.
Dependency Hell: Поддерживать окружение
Ну а язык-то здесь причем? Кто-то заставлял dependency hell разводить?
Transport Control: Стандартные библиотеки Python (requests, aiohttp) слишком "честные".
Особенно если даже заголовки лениться подправить. Но опять же при чем здесь язык? Если немножно погуглить, то и для Пайтона можно HTTP клиенты найти маскирующиеся под браузеры.
Ну а в целом все хорошо, что хорошо заканчивается, и если Go lang отправлял ожидания и позволил реализовать все задуманное, то и отлично.

Dmitriila Автор
06.02.2026 10:23Согласен с вами, сегодня уже всё по другому сделал и оно работает на ура, то было проба пера, перех с Петухона и на Го, сегодня с Го на ГО, по хоорошему на Rust ну или вообще на С++, но пока что есть то есть.
Heyda
Ты похвастаться это выложил или людям другим помочь? )
Dmitriila Автор
помочь, судя по тому что у вас нет репы, вы как раз и зашли спросить "а чё такого, ну дырки", верно?