От Python к Go: Как я ускорил сканер в 10 раз и обошел Cloudflare

Почему Python больше не могЁт

Мне нравится Python, неплохой язык. Он неплох для прототипирования, ML и скриптов (фсё). Но когда ты пишешь Strike Force — инструмент для активного Red Teaming, который должен молотить тысячи запросов в секунду, анализировать заголовки и уклоняться от WAF — Python начинает хромать как сивая кобыла.

Проблемы, с которыми я столкнулся:

  1. GIL (Global Interpreter Lock): Даже с asyncio я упирался в CPU bound при генерации трафика и парсинге ответов.

  2. Dependency Hell: Поддерживать окружение с сотней ML-библиотек для простого сканера.

  3. Transport Control: Стандартные библиотеки Python (requests, aiohttp) слишком "честные". Они прямо в лоб "я скрипт, возьми меня всего" своими TLS-отпечатками.

Мое решение было радикальным: полный рефакт на Go.

Go Architect: Чистая архитектура в бою

Я не просто переписал код "строчка в строчку". Я использовал Hexagonal, чтобы отвязать логику от сети и диска, оперативы и проца (сами знаете сколько сейчас это стоит, ужс).

Структура Strike Force v2.0:

Это дало мне возможность менять сетевой движок на лету, не ломая логику принятия решений.

Performance Boost

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.

  1. Хром поддерживает HTTP/2.

  2. Cloudflare (в ответ на мой ClientHello) согласился на h2.

  3. WAF пропустил соединение.

  4. Сервер начал слать бинарные HTTP/2 фреймы.

  5. Мой Go-клиент (обертка net/http), ожидавший HTTP/1.1, поперхнулся бинарниками.

Ну неплохо. Я прошел WAF. (Потом я, конечно, научил клиента понимать H2).

Brain & Deep Capabilities

Я не забыл про интеллект.
Мой AI движок теперь обладает персистентностью.

Real Modules

Я добавил "реальные" модули, которые работают не по словарям, а по логике:

Пруфы (или "Джентльменам не верят на слово")

Конечно, атаковать чужие боевые сервера для статьи — это 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...)

Что мы тут видим?

  1. missing_csp: Мисконфигурация безопасности заголовков.

  2. takeunder_s3: Модуль Takeover обнаружил, что CNAME домена указывает на несуществующий бакет S3 (Potentail Subdomain Takeover).

  3. worm_replicator: Успешная инъекция ML-червя.

Это уже не просто curl на стероидах. Это автоматизированный Red Teaming.

Итог: 146% Результата

Я начинал с "порта скрипта". Закончил с инструментом, который:

  1. Быстрее оригинала в 10 раз.

  2. Невидим для пассивного анализа WAF (JA3 spoofing).

  3. Находит реальные уязвимости (Misconfig, Takeover и т.д.).

  4. Всё помнит.

Go — это идеальный язык для Offensive Security. Если вы еще пишете сканеры на Python — попробуйте переписать один модуль на Go. Вы не захотите возвращаться.


SENTINEL Community. I make AI safe. Or dangerous. Depends on who puts on the mask.

Исходников и выкладок в гит не будет (есть и так, пользуйтесь, всё на питоне, почти), тут уж звиняйте, есть несколько причин:

  1. Я не пру против законодательства, только быть в разряде белого хакинга.

  2. Тут (не совсем тут) заявили, что я не соображаю в защите и атаке ИИ (ну и ну, удачи им).

По этой самой причине мой гит будет только работать в состоянии 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. Методология

3. Технические находки (Findings)

3.1. Первоначальный сбой (EOF)

3.2. Успешная конфигурация

4. Заключение

.ru использует строгий TLS-фингерпринтинг, который коррелирует параметры ClientHello (Cipher Suites, Extensions) с ожиданиями от ALPN. Стратегия "Mask" в Strike Force успешно имитировала легитимный User-Agent, корректно выстроив эти детали протокола.

@Dmitriila
06.02.2026 13:47 UTC
Первоисточник

Комментарии

@Heyda
06.02.2026 10:23 UTC
+8

Ты похвастаться это выложил или людям другим помочь? )

@Dmitriila
06.02.2026 10:24 UTC
-10

помочь, судя по тому что у вас нет репы, вы как раз и зашли спросить "а чё такого, ну дырки", верно?

@jurikobe
06.02.2026 10:49 UTC
+8

Вам не хватает кармы на это действие. - жаль, очень жаль..

@Dmitriila
06.02.2026 10:53 UTC
-6

своё жаль можете тут написать, если правда есть что разумное сказать, а не как выше Heyda, толком ничего, но зато грд наверное

@BadHat
06.02.2026 13:26 UTC
0

Да.. Эх

@fire64
06.02.2026 10:57 UTC
+1

Но когда ты пишешь Strike Force — инструмент для активного Red Teaming, который должен молотить тысячи запросов в секунду,

Тысячами запросов в секунду?

Это уже извините какой-то инструмент для DoS атак получается, в не сканер уязвимостей... А вы вроде себя как белым хакером позиционируете.

Не слышал про награды в рамках Bug Bounty за досинг сервера. Хотя может вас просили заказчики проверить нагрузочное тестирование, но это уже другое.

А вот внутренне разделение на модули понравилось.

@Dmitriila
06.02.2026 11:08 UTC
-2

я за багунти не гоняюсь

@dail45
06.02.2026 11:55 UTC
0

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

@Dmitriila
07.02.2026 10:21 UTC
0

оно сможет влезть внутрь 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":

  1. PLATFORM ENGINEERING (all bypassed):

    • Service mesh policy, API gateway, feature toggle, env variable, config reload

  2. CLOUD INFRASTRUCTURE (4/5 bypassed):

    • Spot instance, edge node, Lambda cold start, reserved capacity

  3. OBSERVABILITY (4/5 bypassed):

    • OpenTelemetry tracing, CPU profiling, Prometheus metrics, log level

  4. KUBERNETES LIFECYCLE (all bypassed):

    • Sidecar crash, init container, readiness probe failure

  5. DEVOPS OPERATIONS (7/8 bypassed):

    • Blue-green, chaos engineering, failover, drain mode, shadow traffic, dark launch, circuit breaker

  6. DATA PIPELINE (all bypassed):

    • ETL pipeline, backup restore, replication

  7. SECURITY OPERATIONS (3/4 bypassed):

    • Incident response, threat intelligence, vulnerability scan

  8. 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

  1. Confidential disclosure — all 49 bypass prompts, PoC, root cause analysis

  2. Technology integration — SENTINEL as Guard's complementary detection layer

  3. 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 12:22 UTC
0

Я не спец в этих языках, но может такое быть, что вы использовали библиотеки не оптимизированные под ваши задачи.

Я прогер БД и под каждую задачу своя БД И ETL

@Dmitriila
07.02.2026 10:22 UTC
0

всё написано с нуля

@qss53770
07.02.2026 08:50 UTC
0

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

@Dmitriila
07.02.2026 10:23 UTC
+1

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

@mikmiknik
07.02.2026 11:44 UTC
0

Кроме первого пункта про 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
07.02.2026 11:50 UTC
0

Согласен с вами, сегодня уже всё по другому сделал и оно работает на ура, то было проба пера, перех с Петухона и на Го, сегодня с Го на ГО, по хоорошему на Rust ну или вообще на С++, но пока что есть то есть.

@it-infinite
07.02.2026 19:20 UTC
0

То что у вас оно получилось, вы молодец.
Но то что вы не понимаете о чем говорите, это большой минус.. Вы перепутали GIL и CPU-bound, что прям сразу показывает на тот факт, что о программировании вы явно знаете из ИИ.. Как и ваши комментарии о С++ или Rust в будущем..
Аналогично про 50 горутин и 50мб.. Такое наверное даже ИИ не выдаст, ибо знает что этт в вакууме.. 😁

Минусов я никогда не сиавлю, только если не вообще дичь. 😁
Python в сетевых задачах не в 10 раз медленее Go, а в 2-3 всего. 😁 Аналогично как и "сотни RPS", я чуть не подавился кофе в моменте.. Я на Flask недавно показал 90000 на одном ядре! 😁 А вы про сотни.. 20 000 python берет с коробки даже на asyncio.. Почитайте за httpx если вам надо прям серьёзно управлять запросами, есть еще мощнее если что на С++ и уже есть на Rust решения. Так что тут проблема как всегда не в python, а в том что вы в нем не разбираетесь как явно и в Go.

Я не буду сильно душить, обозначил минимум. Если вы в чем-то не очень понимаете, не надо орать во все горло что оно плохое! 😁 Я вообще не понимаю зачем вы взяли python изначально.. Аналогично не совсем понимаю зачем столько RPS.. Верно подметили в комментариях что это похоже больше на DDOS атаки..

Вообще python хорошо справляется с задачами в сети, минус там только стриминг. Блокчейн какой писать на python будет плохой идеей, или стриминговый пориам на миллионы пользователей. Осиальное он хорошо держит, вы все ровно упретесь в какую базу, ожидание отвеиа от сети, от диска и тд.. Но чтоб писать что-то нормальное на python, надо хорошо знать python! Он ошибки не простит как Go, сразу обнулит производительность... 50к RPS на ~98.9-99.9 (зависит от задач) можно брать на python, даже на одном ядре! Но надо уметь это делать. Больше там могут быть посадки. Но и ~98.9-99.9 это очень круто. 😁
Все зависит от задач! Не надо брать python, где можно легко сделать все на Go или Rust.

По поводу "чистая архитектура", читайте книги когда есть опыт, чтоб понимать где оно избытачно! "чисиая архитектура", это не серебренная пуля! Это очень коварная ловушка для не очень опытных. Очень быстро создать overengineering.

А так удачи с проектом. Вещь полезная, уверен пригодиться и не раз.

@sdramare
08.02.2026 08:14 UTC
0

Питон в контексте сколько бы серьёзных нагрузок это просто удобный фронтенд к сишным/растовским либам. А говорить про rps без описания дизайна бенчмарка и тестового стэнда в целом смысла нет.

@rebug
08.02.2026 05:12 UTC
+1

Вижу нейросетевой след тут, подаван.

@IVA48
12.02.2026 05:13 UTC
0

От Go к To: Как я ускорил в 100 раз...