CodeGuard: PySec Edition
Канал по ИБ и этичному хакингу. Автор: @Arakcheev_Ruslan Ссылка: @invite_CodeGuard Рекламный менеджер: @Diggsale Биржа: https://telega.in/c/+3X56uL4A-UM3Njgy
نمایش بیشتر📈 تحلیل کانال تلگرام CodeGuard: PySec Edition
کانال CodeGuard: PySec Edition بازیگری فعال است. در حال حاضر جامعه شامل 14 097 مشترک است و جایگاه 8 767 را در دسته فناوری و برنامهها و رتبه 45 898 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 14 097 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 25 سپتامبر, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر 815 و در ۲۴ ساعت گذشته برابر 21 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 10.25% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 5.55% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 1 445 بازدید دریافت میکند. در اولین روز معمولاً 783 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 7 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند codeguard, pysec, docker, grep, контейнер تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“Канал по ИБ и этичному хакингу.
Автор: @Arakcheev_Ruslan
Ссылка: @invite_CodeGuard
Рекламный менеджер: @Diggsale
Биржа: https://telega.in/c/+3X56uL4A-UM3Njgy”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 26 سپتامبر, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
🔵Поддержка устаревших протоколов: Проверяет, отключены ли небезопасные SSLv2, SSLv3, TLS 1.0, TLS 1.1. 🔵Слабые шифры: Ищет использование уязвимых алгоритмов шифрования (например, RC4, DES). 🔵Сертификаты: Проверяет срок действия, соответствие имени хоста (Subject Alternative Names), цепочку доверия и алгоритм подписи (SHA-1 считается сломанным). 🔵Разное: Проверяет уязвимости вроде Heartbleed (CVE-2014-0160) или поддержку сжатия данных (CRIME).Базовый сценарий: Проверка одного веб-сервера Допустим, вы админ и хотите убедиться, что ваш сайт example.com не светит старыми протоколами. 1️⃣Установка и запуск Склонируйте репозиторий и установите зависимости (обычно это просто
socket и ssl из стандартной библиотеки Python).
git clone https://github.com/.../GIDSSL.git
cd GIDSSL
python3 gidssl.py --host example.com --port 443
2️⃣Анализ вывода
Инструмент выдаст структурированный отчет. Смотрите на ключевые пункты.
[-] Checking host: example.com:443 [+] TLS 1.2 supported: YES [!] TLS 1.0 supported: YES - WARNING: Deprecated protocol enabled! [+] Certificate is valid: YES (expires in 89 days) [!] Weak cipher (RC4) found: NO ...Результат (пример):
Scan completed. Found 1 CRITICAL issue (TLS 1.0 enabled) and 3 warnings.Вывод: Обнаружена критическая проблема - поддержка устаревшего TLS 1.0. Это нужно отключить на сервере немедленно. Как это работает изнутри:
🔵Сканирование протоколов: Скрипт пытается установить соединение, используя разные версии протокола (TLS 1.0, 1.1, 1.2, 1.3), и анализирует ответ. 🔵Перебор шифров: Для каждого протокола он пытается использовать разные наборы шифров (cipher suites), предлагаемые библиотекой ssl. 🔵Анализ сертификата: После установки безопасного соединения инструмент получает и парсит сертификат, проверяя его поля и сроки.Профилактика: Как защитить свои сервисы?
🔴Отключите старые протоколы. Оставляйте только TLS 1.2 и TLS 1.3. Конфигурация зависит от вашего веб-сервера (Nginx, Apache). 🔴Настройте строгие наборы шифров. Уберите все, что использует RC4, DES, а также шифры с экспортной стойкостью. 🔴Следите за сроком действия сертификатов. Настройте автоматическое обновление (например, с помощью Certbot). 🔴Используйте инструменты вроде SSL Labs Test для регулярного независимого аудита конфигурации.😈 CodeGuard: CyberSec Edition | Чат
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_11.0.2_build/ghidra_11.0.2_PUBLIC_20231222.zip
unzip ghidra*.zip
cd ghidra_11.0.2_PUBLIC
./ghidraRun
Базовый workflow:
# 1. Создаём проект → File → Import → выбираем бинарник
# 2. Запускаем автоанализ (Analysis → Auto Analyze)
# 3. Ищем entry points через Functions window
# 4. Декомпилируем функцию (Window → Decompile)
# 5. Переименовываем переменные и функции для понимания логики
🔬 Практические сценарии:
1. Анализ ransomware образца:
// Ghidra Script для поиска крипто-функций
void findCryptoPatterns() {
for (Function func : getCurrentProgram().getFunctionManager().getFunctions(true)) {
String name = func.getName().toLowerCase();
if (name.contains("aes") || name.contains("rsa") ||
name.contains("encrypt") || name.contains("decrypt")) {
println("Найдена крипто-функция: " + name + " @ " + func.getEntryPoint());
}
}
}
2. Реверс сетевого протокола:
◻️ Ищем функции с паттернами send/recv
◻️ Анализируем структуры пакетов через Data Type Manager
◻️ Трассируем парсинг входящих данных
3. Поиск уязвимостей в бинарниках:
# Поиск потенциальных buffer overflows
python3 find_vulns.py --binary firmware.bin --check-overflow
📌 Когда использовать Ghidra:
🔴 Анализ малвари — изучение логики шифрования, C2-команд, persistence
🔴 Исследование 0-day уязвимостей — поиск use-after-free, integer overflow
🔴 Реверс драйверов и прошивок — для IoT и embedded security
🔴 Анализ обфусцированного кода — распаковка, декрипт строк
🔴 Подготовка эксплойтов — поиск ROP gadget'ов и примитивов
🛠 Расширенные техники:
Динамический анализ с GDB/GEF:
# Настройка bridge между Ghidra и GDB
gef➤ ghidra connect localhost:1234
# Передача контекста регистров и памяти
Анализ защищённых бинарников:
👉 VMProtect, Themida — анализ виртуальных машин обфускаторов
👉 DRM системы — реверс систем защиты контента
👉 Античит-движки — изучение методов обнаружения
🔗 Интеграции и экосистема:
👉 Ghidra Bridge — связь с динамическими отладчиками (GDB, WinDbg)
👉 Karta — идентификация open-source компонентов в бинарниках
👉 VulnHunter — автоматический поиск уязвимостей
👉 GEF+Ghidra — расширенный отладочный workflow
⚠️ Требования и особенности:
🔴 Минимум 8GB RAM (рекомендуется 16+ для больших бинарников)
🔴 Java 17+ обязательна для последних версий
🔴 Плагины требуют знаний Java для самостоятельной разработки
🔴 Кривая обучения — сложнее, чем у IDA для новичков
🎯 Для кого этот инструмент:
🟢 Малвари-аналитики — исследование вредоносных программ
🟢 Реверс-инженеры — анализ проприетарного ПО и протоколов
🟢 Исследователи уязвимостей — поиск 0-day в бинарниках
🟢 Эксперты по IoT безопасности — анализ прошивок устройств
🟢 CTF-игроки — решение реверс-задач
📚 Официальная документация
💡 Совет: Начинайте с малых бинарников (до 1MB), используйте автоанализ, а затем постепенно углубляйтесь в ручной анализ. Сохраняйте проекты Ghidra - их можно переоткрывать и продолжать анализ.
😈 CodeGuard: CyberSec Edition | Чат🔵Анатомия устройств — из чего реально состоят «чёрные ящики»: платы, микроконтроллеры, порты, шины, память, как читать разводку платы и не пугаться маркировки и даташитов. 🔵Инструменты хардварного хакера — мультиметр, осциллограф, паяльник, программаторы, логические анализаторы, как правильно их использовать и не спалить первую же плату. 🔵Поиск точек входа — последовательные порты, JTAG, UART, скрытые разъёмы, диагностические контакты, как находить и использовать их для доступа к прошивке и отладочной информации. 🔵Прошивки и их взлом — снятие дампов, поиск интересных строк, паролей и ключей, разбор бинарников, модификация поведения устройства без физического «ломания» железа. 🔵Физические модификации — впаивание новых элементов, подмена сигналов, внедрение своих модулей, создание «франкенштейнов» из старой электроники и понимание, где проходит грань между экспериментом и риском.👩💻 Кликай и качай 😈 CodeGuard: CyberSec Edition | Чат
🔵Директории и файлы: Поиск по словарю стандартных и кастомных путей (/admin, /backup, .git/). 🔵GET/POST параметры: Перебор значений параметров (id=, user=) для поиска уязвимостей типа SQLi или LFI. 🔵Хедеры и куки: Фаззинг заголовков (User-Agent, Cookie) для обхода защиты. 🔵Мультипозиционный фаззинг: Одновременный перебор нескольких точек в запросе.Базовый сценарий: Поиск скрытых директорий Допустим, мы тестируем сайт example.com и хотим найти скрытые административные панели. 1️⃣ Простейший фаззинг Используем базовую команду, подставляя слова из списка в указанное место (FUZZ).
wfuzz -c -z file,wordlist/general/common.txt --hc 404 https://example.com/FUZZ-c для цветного вывода, -z задаёт источник данных (файл со словарём), --hc 404 скрывает ответы с кодом 404. 2️⃣ Фаззинг POST-запроса с данными Попробуем подобрать параметр
username в форме входа.
wfuzz -c -z file,users.txt -d "username=FUZZ&password=test" --hc 200 https://example.com/login.php
-d передаёт данные POST-запроса. Мы ищем ответы, где код НЕ 200 (успех), а что-то другое (редирект, ошибка).
3️⃣ Анализ результатов
Смотрим на коды ответов и длину контента. Необычные значения - цель для исследования.
Пример вывода:
Target: https://example.com/FUZZ Total requests: 4714 ================================================================== ID Response Lines Word Chars Payload ================================================================== 000012: C=403 7 L 12 W 168 Ch "admin" 000145: C=301 0 L 0 W 0 Ch "backup"Вывод: Найдена директория
/admin (возвращает 403 - доступ запрещён) и /backup с редиректом 301. Обе - потенциальные цели.
Как это работает изнутри:
🔵Фаззинг (Fuzzing): Автоматическая отправка искажённых или рандомных данных в программу для поиска багов. Wfuzz делает это для веба. 🔵Фильтры: Мощная система фильтрации по коду ответа (--hc, --sc), длине слов/строк (--hw, --hl), чтобы убрать мусор. 🔵Рекурсивный фаззинг: Найдя одну директорию, можно запустить фаззинг внутри неё для углублённого поиска.Профилактика: Как защитить своё приложение?
🔴Не оставляйте на продакшене скрытые тестовые или административные пути. Удаляйте или строго ограничивайте доступ. 🔴Внедряйте корректную обработку ошибок. Возвращайте одинаковые страницы с кодом 404 для всех несуществующих ресурсов. 🔴Используйте WAF (Web Application Firewall) для обнаружения и блокировки подозрительных запросов с паттернами брутфорса. 🔴Регулярно проводите аудит своего веб-приложения с помощью сканеров и инструментов вроде Wfuzz, но на себя.😈 CodeGuard: PySec Edition | Чат
▶️ Изоляция через namespaces (net, pid, user, mount) ▶️ Профили с предустановленными ограничениями для сотен программ ▶️ Ограничение сетевого доступа (можно запретить всё, кроме одного порта) ▶️ Запуск в своей приватной сетевой зоне с помощью --net=none или --net=eth0 ▶️ Блокировка записи в домашнюю директорию или доступ только к одной папке⚡️Быстрый старт с Firejail: Установка (Ubuntu/Debian):
sudo apt update
sudo apt install firejail firejail-profiles
Простой запуск браузера в песочнице:
firejail firefoxЗапуск демона/сервиса в изолированной сети:
# Запускаем simple-http-server без доступа к интернету firejail --net=none -- python3 -m http.server 8080 # Или создаем свою виртуальную сеть для изолированного сервиса firejail --net=eth0 --dns=8.8.8.8 -- /usr/sbin/nginxСоздание и использование своего профиля:
# Копируем шаблон профиля
sudo cp /etc/firejail/nginx.profile /etc/firejail/nginx-custom.profile
# Редактируем, добавляя свои ограничения (например, запрет на запись в /etc)
sudo nano /etc/firejail/nginx-custom.profile
# Запускаем с кастомным профилем
firejail --profile=/etc/firejail/nginx-custom.profile nginx
➡️ GitHub
😈 CodeGuard: PySec Edition | Чат# Классическая дебильная конфигурация:
services:
app:
image: alpine
volumes:
- /:/host # О, БОЖЕ!
# Атакующему достаточно зайти в контейнер:
docker exec -it myapp sh
cd /host
cat /host/etc/shadow
echo 'backdoor' >> /host/root/.bashrc
Фикс (никогда так не делайте):
services:
app:
image: alpine
volumes:
- ./app_data:/var/lib/app # ТОЛЬКО специфичные данные
- config:/etc/config # Используйте именованные тома
2️⃣ cap_add: ALL - суперспособности для контейнера
# Вот эта хрень даёт ядерные привилегии:
services:
pentest:
image: ubuntu
cap_add:
- ALL # SYS_ADMIN, NET_ADMIN, SYS_MODULE...
# После этого внутри можно:
# - Монтировать файловые системы
# - Менять сетевой стек
# - Загружать kernel modules
# Де-факто это root на хосте.
Фикс (минимальные права):
services:
app:
image: nginx
cap_drop:
- ALL # Сбрасываем ВСЁ
cap_add:
- NET_BIND_SERVICE # Добавляем только нужное для nginx (порт < 1024)
3️⃣ Комбинация: корень + все капы = мгновенный взлом
# Апофеоз идиотизма в одном файле:
version: '3'
services:
backdoor:
image: busybox
volumes:
- /:/rootfs
cap_add:
- ALL
command: chroot /rootfs /bin/sh -c "useradd -m -s /bin/bash hacker"
Атакующий просто запускает ваш docker-compose up и становится root на хосте.
4️⃣ privileged: true - это ещё хуже, чем кажется
services:
monitor:
image: some-monitoring
privileged: true # Отключает ВСЕ namespaces и security features
# Это эквивалент запуска процесса прямо на хосте.
# Любая уязвимость в образе = полный контроль над сервером.
Чек-лист "Docker Compose не убил мою систему":
✔️ Тома: Никогда не монтируйте /, /etc, /root. Только конкретные каталоги приложения.
✔️ Capabilities: Всегда cap_drop: ALL, добавлять только явно необходимые капы (список в man capabilities).
✔️ Пользователь: Запускайте от не-root пользователя внутри контейнера (user: "1000:1000").
✔️ Привилегии: Никогда не используйте privileged: true. Почти всегда есть безопасная альтернатива.
✔️ Сеть: Не используйте network_mode: host без крайней необходимости. Изолируйте сервисы.
✔️ Проверка: Запускайте docker scout или trivy config на ваш docker-compose.yml.
Бонус: скрипт для поиска кривых конфигов
#!/bin/bash
echo "🔍 Docker Compose Security Scan"
grep -r "volumes:" . --include="*.yml" --include="*.yaml" | grep -E "\s+-\s+[/][^:]+" && echo "Найдено монтирование корня!"
grep -r "cap_add:.*ALL" . --include="*.yml" --include="*.yaml" && echo "Найдены ALL capabilities!"
grep -r "privileged: true" . --include="*.yml" --include="*.yaml" && echo "Найден privileged mode!"
echo "Пора фиксить этот бардак."
Интересный факт:
В Shodan легко найти Docker API на 2375/tcp без аутентификации, а дальше - просто отправить кривой docker-compose файл и получить shell.
😈 CodeGuard: CyberSec Edition | Чат▶️ Реальное время: блокировка атак до нанесения ущерба. ▶️ Глубокий анализ: проверка пакетов на всех уровнях (L3-L7). ▶️ Множество протоколов: HTTP, DNS, SSH, TLS и другие. ▶️ Поддержка обновляемых правил от ET Open, Emerging Threats. ▶️ Интеграция с NFQUEUE для взаимодействия с iptables/nftables.😈 Главная хрень: Переход из режима IDS в IPS - это одна строчка в конфиге, но нужно правильно настроить правила и сетевой стек. ⚡️ Быстрая настройка IPS на Ubuntu/Debian: Установка:
sudo apt update
sudo apt install suricata jq
Настройка сетевого интерфейса и запуск в IPS-режиме:
# Разрешим использование NFQUEUE для блокировки sudo iptables -I INPUT -j NFQUEUE --queue-num 0 sudo iptables -I OUTPUT -j NFQUEUE --queue-num 0 # Редактируем конфиг Suricata sudo nano /etc/suricata/suricata.yaml # Меняем в разделе 'af-packet' режим на IPS: # - interface: eth0 # copy-mode: ips # copy-iface: eth0Загрузка актуальных правил и запуск:
# Скачиваем и активируем правила (например, от Emerging Threats)
sudo suricata-update
# Запускаем Suricata в режиме IPS
sudo suricata -c /etc/suricata/suricata.yaml --af-packet=eth0
Пример правила для блокировки сканирования портов в реальном времени:
# Правило в файле /etc/suricata/rules/local.rules alert tcp any any -> $HOME_NET any (msg:"ET SCAN Potential Port Scan"; flow:to_server; flags:S; threshold: type both, track by_src, count 10, seconds 30; classtype:attempted-recon; sid:1000001; rev:1;) # Чтобы оно БЛОКИРОВАЛО, а не только логировало, добавляем действие 'drop' или 'reject' в настройки вывода.➡️ Официальный сайт 😈 CodeGuard: PySec Edition | Чат
🔵Bcrypt: Имеет настраиваемый фактор стоимости (work factor), который искусственно замедляет вычисления, потребляя много памяти. Каждое предположение пароля требует много времени. 🔵Argon2 (победитель PHC): Еще более адаптивен. Затрачивает вычислительное время, память и может задействовать несколько потоков/ядер. Создан, чтобы быть устойчивым к специализированным ASIC.Базовый сценарий: Оптимизация атаки на bcrypt для одной карты Допустим, у вас есть хеш bcrypt и вы хотите настроить Hashcat для максимальной скорости на вашей GPU (например, NVIDIA RTX 4090). 1️⃣ Определение формата и запуск бенчмарка Сначала нужно точно узнать формат хеша и протестировать производительность.
# Определяем тип хеша (если не знаем)
hashcat --example-hashes | grep -i bcrypt
# Запускаем бенчмарк для формата bcrypt ($2b$)
hashcat -b -m 3200
Это покажет, сколько хешей в секунду (H/s) может обработать ваша система. Для bcrypt это будут десятки или сотни, а не миллионы.
2️⃣ Настройка параметров атаки для ускорения
Ключевые опции для увеличения скорости - это оптимизация работы с памятью и ядрами GPU.
# Атака по словарю с оптимизацией под GPU (увеличиваем размер рабочей группы, уменьшаем задержки) hashcat -m 3200 -w 4 -O -d 1 target_bcrypt.hash rockyou.txt # Где: # -m 3200 - это режим bcrypt # -w 4 - профиль высокой нагрузки (максимальная производительность, система может стать менее отзывчивой) # -O - включение оптимизированных ядер (критически важно для скорости) # -d 1 - использование только первого GPU (если у вас несколько карт)3️⃣ Стратегия для Argon2 С Argon2 сложнее, так как он зависит от памяти. Нужно подбирать параметры, чтобы не превысить лимиты VRAM вашей видеокарты.
# Бенчмарк для Argon2 (например, Argon2id)
hashcat -b -m 10900
# Атака с ручной настройкой лимитов памяти (если стандартные вызывают ошибки)
hashcat -m 10900 -I --kernel-accel 64 --kernel-loops 128 target_argon2.hash wordlist.txt
Результат (ожидание):
Speed.#1.........: 543 H/s (bcrypt) или 85 H/s (Argon2) - это победа над медленным KDFВывод: Даже с оптимизацией, атака на современные KDF остается крайне медленной, что доказывает их эффективность. Но правильная настройка Hashcat может ускорить процесс в разы по сравнению с дефолтными настройками. Как выжать еще больше скорости:
🔵Разгон GPU: Увеличение частоты ядра и памяти (с осторожностью!). Каждый лишний мегагерц важен для медленных хешей. 🔵Тонкая настройка --kernel-accel и --kernel-loops: Эксперименты с этими параметрами под конкретную карту и хеш могут дать прирост. 🔵Распараллеливание на несколько GPU: Используйте опцию -d 1,2,3 для загрузки всех доступных видеокарт. Важно: для Argon2 убедитесь, что суммарной видеопамяти хватает.Защита: Как сделать пароли неуязвимыми?
🔴Используйте Argon2 или bcrypt с максимально высокими, но практичными настройками стоимости (work factor, memory cost). 🔴Увеличивайте длину соли (salt) и убедитесь, что она уникальна для каждого пароля. 🔴Для веб-приложений внедряйте искусственные задержки, лимиты попыток и обязательную 2FA для критичных операций. 🔴Помните: никакая оптимизация Hashcat не спасет от truly рандомного пароля длиной в 12+ символов.😈 CodeGuard: PySec Edition | Чат
sudo apt-get install krb5-user libpam-krb5 libssh-4
Во время установки укажи realm (домен) и KDC-серверы твоего AD.
3️⃣Настройка /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
Добавь или измени строки:
GSSAPIAuthentication yes GSSAPICleanupCredentials yes PasswordAuthentication no PubkeyAuthentication no # Или оставь как fallback KerberosAuthentication yes4️⃣Создание SPN для хоста в AD Это самая важная часть. На контроллере домена или с утилитами RSAT создай Principal для сервера:
setspn -S host/your-linux-server.your.domain YOURDOMAIN\server-machine-account$
Или через оснастку AD. Без этого - ничего не kinit your_ad_username@YOURDOMAIN.LOCALПроверь:
klistДолжен быть виден билет. 6️⃣Тестирование подключения
ssh -o GSSAPIAuthentication=yes -o GSSAPIDelegateCredentials=yes your-linux-server
Если всё настроено верно, тебя пустит без пароля и ключа. Магия билета Krb5.
✅Проверка и отладка
Включи подробное логирование на сервере в sshd_config:
LogLevel DEBUG3Смотри логи /var/log/auth.log. Ищи строки с GSSAPI. 🔄Перезапуск и применение
sudo systemctl restart sshd
Не забудь про firewall. Открой порт 22 (или свой) для нужных подсетей.
🚨 Важные нюансы
- Reverse DNS должен работать правильно.
- Имя хоста в SSH-команде должно полностью совпадать с именем в SPN (host/...).
- Срок жизни билета Kerberos ограничен. Используй kinit для обновления.
💥 Результат: Единый вход (SSO) в инфраструктуру. Вошел в Windows - получил билет - подключился к любому Linux-серверу в домене. Удобная хрень.
😈 CodeGuard: PySec Edition | Чатapi_key, password, config, .env в публичных репозиториях. Фильтры по языку и дате.
🔴 Shodan (shodan.io) — поисковик для интернета вещей. Находит открытые камеры, базы данных, панели админов без пароля.
🔴 Censys (censys.io) — аналог Shodan, иногда находит то, что пропустил первый. Хорош для обнаружения самописных API.
🔴 GrayHatWarfare — поиск по публичным S3-бакетатам Amazon. Часто находят резервные копии сайтов, логи, файлы с паролями.
🔴 Wayback Machine + urlscan.io — смотрим старые версии сайта, ищем забытые поддомены и тестовые среды.
📍 Простой алгоритм для разведки на уязвимости:
1. Определяем цель (домен, компания). 2. Собираем всё: поддомены (subfinder, assetfinder), связанные домены, IP-адреса. 3. Ищем артефакты: проверяем каждый найденный адрес в Shodan/Censys на наличие открытых портов (особенно 21, 22, 23, 80, 443, 8080, 9000). 4. Смотрим в историю: прогоняем найденные URL через Wayback Machine, ищем старые версии, конфигурационные файлы (robots.txt, sitemap.xml). 5. Чекаем GitHub: ищем по названию компании, домену. Ищем коммиты с названиями fix, hotfix, security.💡 Лайфхак: Комбинируй. Нашёл поддомен
dev.company.com → прогнал через Wayback → увидел старую панель входа 2019 года → проверил её на Shodan → обнаружил, что она до сих пор висит на старом IP и открыта.
😈 CodeGuard: PySec Edition | Чатsudo apt update && sudo apt install -y fail2ban python3-pip
sudo pip3 install python-telegram-bot
sudo systemctl enable --now fail2ban
2️⃣Создаем свой жестокий фильтр для сканеров (autoscan)
Файл: /etc/fail2ban/filter.d/sshd-aggressive.conf
[Definition]
failregex = ^%(__prefix_line)s(?:error: PAM: )?Authentication failure for .* from \s*$
^%(__prefix_line)sFailed (?:password|publickey) for .* from (?: port \d+)?\s*$
^%(__prefix_line)sReceived disconnect from .*: (?:11: )?Bye Bye\s*$
^%(__prefix_line)sConnection closed by (?:authenticating user|invalid user) .*?\s*$
# Особый регекс для ботов, которые быстро сканируют разные логины
^%(__prefix_line)sInvalid user .* from \s*$
ignoreregex =
Этот фильтр ловит не только неудачные попытки, но и быстрые отключения и сканирование несуществующих пользователей.
3️⃣Создаем тюрьму-монстра в /etc/fail2ban/jail.local
[DEFAULT]
bantime = 2592000 # 30 дней, а не 10 минут
findtime = 600 # 10 минут
maxretry = 2 # Всего две ошибки, и ты в бане, сука
[sshd-aggressive]
enabled = true
port = ssh,2222 # Если сменили порт
filter = sshd-aggressive
logpath = /var/log/auth.log
maxretry = 3
bantime = 604800 # Неделя за попытку скана
action = %(action_)s
sendmail-whois[name=SSH, dest=ваш@email.com]
4️⃣Скрипт-убийца для отправки алертов в Telegram
Файл: /usr/local/bin/fail2ban-telegram.sh
#!/bin/bash
TOKEN="YOUR_BOT_TOKEN"
CHAT_ID="YOUR_CHAT_ID"
SERVER=$(hostname)
IP=$(echo $1)
ACTION=$2
if [ "$ACTION" == "ban" ]; then
MESSAGE="🚨 Fail2ban ALERT на $SERVER
🔴 IP $IP забанен.
⏰ Время: $(date)
📁 Jail: $3
Лог: $4"
elif [ "$ACTION" == "unban" ]; then
MESSAGE="🟢 Fail2ban UNBAN на $SERVER
IP $IP разбанен."
fi
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="$MESSAGE" \
-d parse_mode="HTML" \
-d disable_web_page_preview="true" > /dev/null 2>&1
sudo chmod +x /usr/local/bin/fail2ban-telegram.sh
5️⃣Интеграция скрипта в действие fail2ban
Файл: /etc/fail2ban/action.d/telegram.conf
[Definition] actionstart = /usr/local/bin/fail2ban-telegram.sh start actionstop = /usr/local/bin/fail2ban-telegram.sh stop actioncheck = actionban = /usr/local/bin/fail2ban-telegram.sh ban "" actionunban = /usr/local/bin/fail2ban-telegram.sh unban [Init] init = 1Добавляем это действие в нашу тюрьму (в jail.local):
[sshd-aggressive]
action = iptables-multiport[name=SSHAggressive, port="ssh,2222"]
telegram
6️⃣Генерация белого списка доверенных подсетей (чтобы не забанить себя)
# В /etc/fail2ban/jail.local, в секции [DEFAULT]: ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 10.0.0.0/8 Ваш.Домашний.IP7️⃣Финальная проверка и перезапуск
sudo fail2ban-client reload
sudo fail2ban-client status sshd-aggressive
# Проверяем логи
sudo tail -f /var/log/fail2ban.log | grep --color -E "(ban|unban|WARNING)"
✅Тест на живом боте
Попробуй с другой машины (не из ignoreip) ввести пароль неправильно 3 раза. В течение минуты придет сообщение в Telegram, а IP получит недельный бан.
💥Итог: Боты не просто получают временный таймаут. Они попадают в долгий бан, а ты в реальном времени видишь всю эту фигню в мессенджере. Система становится активным защитником.
😈 CodeGuard: PySec Edition | Чатssh-keygen -t ed25519 -f ~/ssh-ca -C "SSH Internal CA"
# Публичную часть (ssh-ca.pub) раскидываем на все серверы
# Закрытый ключ (ssh-ca) храним как зеницу ока
2️⃣Настраиваем серверы: доверяем нашему CA
На каждом сервере в /etc/ssh/sshd_config:
# Отключаем обычные ключи. Да, это страшно. PubkeyAuthentication no # Включаем аутентификацию по сертификатам TrustedUserCAKeys /etc/ssh/ca.pub AuthorizedPrincipalsFile /etc/ssh/auth_principals/%uКладём наш публичный CA-ключ на сервер:
sudo cp ssh-ca.pub /etc/ssh/ca.pub
sudo chmod 644 /etc/ssh/ca.pub
3️⃣Выписываем временный сертификат для пользователя
На машине с CA-ключом. Хотим дать доступ user1 к серверам на 2 часа:
ssh-keygen -s ~/ssh-ca -I "user1_access" -n user1 -V +2h ~/.ssh/id_ed25519.pub
# -n (principals) - кому выдаём. -V +2h - живёт 2 часа.
# Получим файл сертификата: ~/.ssh/id_ed25519-cert.pub
4️⃣На сервере: настраиваем принципалы
Создаём файл, который говорит, какие роли (principals) разрешены пользователю.
sudo mkdir -p /etc/ssh/auth_principals
echo "user1" | sudo tee /etc/ssh/auth_principals/user1
5️⃣Подключаемся с сертификатом
Клиент автоматически использует сертификат (~/.ssh/id_ed25519-cert.pub) вместе с приватным ключом.
ssh -i ~/.ssh/id_ed25519 user1@server
Проверить детали сертификата:
ssh-keygen -L -f ~/.ssh/id_ed25519-cert.pub
6️⃣Автоматизация и отзыв
Весь сброс - это просто перестать выписывать новые сертификаты. Старые сами протухнут. Можно выписывать сертификаты через CI/CD при деплое.
😱Важные нюансы
- Бэкап старого sshd_config! Первый запуск - с параллельной сессией.
- Сертификат - это надстройка к ключу. Приватный ключ всё ещё нужен.
- Для разных целей (деплой, админ) делайте разные принципалы.
💥Итог: authorized_keys - мёртв. Доступ выдаётся централизованно и на время. Потерял ключ? Не страшно - срок действия и так истёк. Это нихуя не сложно, но в разы безопаснее.
😈 CodeGuard: PySec Edition | Чат