AppSECT.A.
378 subscribers
435 photos
9 videos
129 links
Блог Ильи Шмакова

geminishkv.tech

- AppSec Toolchain
- DevOps
- Процессы DevSecOps
- Infosec Risks
- PMI
- Кулуарный ИБ

AppSec Teamlead СберСпасибо @sberbank

Лидер findevsecops.ru @fintechassociation

Преподаватель @bmstu1830, @miptru
Download Telegram
🏆 Информационная безопасность на всех этапах жизненного цикла разработки ПО

Салюты, напомню, что стартует, совсем скоро курс по МФТИ, поделюсь расписанием вот тут.
А пока ты можешь покачаться на лабках, которые скоро получат новый релиз и будут также обкатываться на МФТИ.
Почекай лабки тут.

—————————————————————
🗓 Сроки обучения:
23 марта – 05 мая 2026 г.

⏰ Время занятий:
18:00 – 19:30 / 20:30 / 21:30
—————————————————————

🔰 НЕДЕЛЯ 1 | Основы ИБ и защиты информации ИС

• 23.03 (Пн) | Вводная лекция | 1 ак.ч. | 18:00-18:45 | Zoom
• 24.03 (Вт) | Лекция 1 и 2 | 4 ак.ч. | 18:00-21:30 | Zoom
• 26.03 (Чт) | ПР 1 и Лекция 3 | 2 ак.ч. | 18:00-19:30 | Zoom

🔰НЕДЕЛЯ 2 | Обследование ИС, анализ уязвимостей и угроз

• 31.03 (Вт) | Лекция 4 | 2 ак.ч. | 18:00-19:30 | Zoom
• 02.04 (Чт) | Лекция 5 и ПР 2 | 2 ак.ч. | 18:00-19:30 | Zoom

🔰НЕДЕЛЯ 3 | Формирование и реализация требований по ИБ к ИС
• 07.04 (Вт) | Лекция 6 и 7 | 4 ак.ч. | 18:00-21:30 | Zoom
• 09.04 (Чт) | Лекция 8 и ПР 3 | 2 ак.ч. | 18:00-19:30 | Zoom

—————————————————————
⬅️ НЕДЕЛЯ 4 | Shift-Left: от анализа до требований ИБ

• 15.04 (Ср) | Лекция 9 и ПР 4 | 3 ак.ч. | 18:00-20:30 | Zoom
• 17.04 (Пт) | Лекция 10 и 11 | 3 ак.ч. | 18:00-20:30 | Zoom

⬅️ НЕДЕЛЯ 5 | Жизненный цикл безопасной разработки ПО

• 22.04 (Ср) | Лекция 12 и 13 | 4 ак.ч. | 18:00-21:30 | Zoom
• 24.04 (Пт) | ПР 5 и Лекция 14 | 3 ак.ч. | 18:00-20:30 | Zoom

🎯 НЕДЕЛЯ 6 | Завершение

29.04 (Ср) | Лекция 15 и ПР 6 | 3 ак.ч. | 18:00-20:30 | Zoom
—————————————————————
🏆 Защита итоговой работы
—————————————————————

#course #devsecops #appsec #toolchain
🔥7
🛠 Карта DevSecOps Toolchain

Салют,
Хорошие новости, я как то рассказывал про карту инструментов тут.

Наконец то ее залили в релизе 2.0.1 в репозиторий нашего сообщества findevsecops.ru, почекай.

Сейчас будет буст самой карты инструментов и ты можешь поучаствовать с нами в развитии этого дела, я планирую еще дорабатывать репу и развивать, так как это оч классная штука для твоего роста и отраслевого контроля тулов, которые помогают в достижении целей безопасной разработки ПО.

Сам репозиторий у нас с тобой вот тут для сообщества, а мой корневой, который прям родительский тут - его качаем как dev.

Захотел поделиться с тобой этой инфой, потому что это очень классно для нас с тобой 😉

Всем спасибо

#appsec #toolchain #devsecops #specialty #techdolution
❤‍🔥6🔥5
🏆 Испытания ФСТЭК России ГОСТ 71207

Я как то ранее писал про эти испытания тут, что мы в ЛАНИТ с моими ребятами получили грамоту на нашу компанию за вклад, который внесли, а теперь подьехала очень приятная история, еще одна. Люблю когда так мотивирует, согласись, приятно же?

Очень рад с тобой делиться таким 🙏

#appsec #devsecop #specialty #toolchain #sast #conf #meetup #compliance #gost #paper
🔥11
🏆 geminishkv.tech

UwU, короче сделал тут сайтик для себя, хочу поделиться с тобой, считаю получилось особенно прикольно с глитчем, адаптивка отдельно доставила.

geminishkv.tech - чекай, но конечно простенько, но эффекто для портфолио 🙃

#paper #appsec #devsecops
🔥10❤‍🔥7
🤔 InfoSec Reco СУБД

Салют,
Думаю сегодня классно будет посмотреть, вместе, на то как лучше подойти к защищенности БД, брокеру очередей для записи в БД и, конечно, частично к frontend части при взаимодействии с БД.

Мои реко строятся на базе опыта и того, что я чаще всего замечаю, надеюсь, для твоей практики, это будет полезно и ты сможешь более глубоко и сразу смотреть в правильном направлении, - потому что это важно при анализе и не важно аналитики ты или инженер, главное понимать архитектуру и как это построено. В некоторых пунктах отмечу, что плохо и думаю ты поймешь почему.

Реляционные СУБД

• Плохая практика: выдавать приложению  db_owner,  sysadmin или доступ на всю схему без ограничений
• Чувствительные данные хранить так, чтобы прямой доступ к базовым таблицам был ограничен: использовать views, stored procedures или сервисный слой
• Размещать СУБД в отдельном сетевом сегменте и запрещать прямой доступ из внешних и полупубличных зон
• Плохая практика: использовать plaintext-подключения или отключать проверку сертификата
• Включать аудит критичных операций: чтение, изменение, удаление, DDL-изменения и административные действия
• Строки подключения, ключи и пароли хранить только во внешнем хранилище секретов.
• Использовать отдельные учётные записи для каждого приложения и среды, без shared-паролей между командами
• Никогда не передавать пользовательский JSON напрямую в фильтры запросов без проверки и нормализации
• Использовать типизированные запросы, драйверные API или строго ограниченные схемы фильтрации
• При работе с произвольными документами проверять, что в них нет операторов, начинающихся с $, и других опасных конструкций
• Плохая практика: пропускать $where, $gt, $regex и похожие операторы без whitelist


Redis и in-memory cache

• Привязывать сервис только к внутренним интерфейсам и не публиковать его в публичную сеть
• Плохая практика: слушать  0.0.0.0  и оставлять Redis доступным извне
• Обязать аутентификацию и использовать длинные случайные пароли или эквивалентный механизм авторизации
• Плохая практика: оставлять доступными  FLUSHALL, CONFIG, EVAL, SCRIPT, DEBUG
• Плохая практика: выдавать приложению полный ACL или использовать один пользователь для всех ролей.
• Использовать namespace-префиксы для ключей, чтобы изолировать кэши, сессии и служебные данные
• Не хранить в Redis долгоживущие секреты или критичные данные без дополнительной защиты


Очереди и брокеры сообщений

• Плохая практика: оставлять guest или аналогичные заводские учётки
• Создавать отдельных пользователей для producer, consumer и административных задач
• Изолировать окружения через отдельные virtual host/ namespace/ tenant-механизмы, если они поддерживаются
• Плохая практика: смешивать dev, test и prod в одном пространстве имён
• Producer должен иметь право только на публикацию в разрешённые exchange или topic
• Consumer должен иметь право только на чтение из разрешённых очередей и не должен публиковать сообщения
• Проверять сертификаты клиентов и сервера, если брокер используется в чувствительном контуре
• Ограничивать размер сообщений и задавать квоты, чтобы снизить риск flooding и abuse


JavaScript и frontend

• Не использовать опасные DOM-операции с пользовательским вводом: innerHTML, outerHTML, document.write
• Любой HTML, пришедший извне, санитайзить перед отображением
• Запрещать небезопасные redirect-механизмы на основе пользовательского ввода без whitelist
• Применять CSP с минимально необходимыми источниками и без unsafe-inline, где это возможно
• Для inline-скриптов использовать nonce или hash-подход
• Для внешних библиотек и CDN использовать Subresource Integrity
• Плохая практика: грузить библиотеку с CDN без проверки целостности


#reco #devsecops #appsec #specialty
🔥53
Иногда кажется, что именно так и происходит 🙃

#lol
🤣7
Forwarded from Proxy Bar
When Local AI Becomes an Attack Vector: A Deep Dive into LLM Infrastructure Security

Original text by Charles Senges

The article “Deep dive into the deployment of an on-premise low-privileged LLM server” by Synacktiv examines how organizations deploy internal Large Language Model (LLM) servers and analyzes the security implications of running such systems inside corporate infrastructure. The researchers study a real deployment where an open-source LLM is hosted on-premise…

https://core-jmp.org/2026/03/when-local-ai-becomes-an-attack-vector-a-deep-dive-into-llm-infrastructure-security/
🛠 Security SBOM generator with vulnerability chechup

Салют,
Сегодня хочу поделиться тулой, которую покрутил на выхах. Эта тула помогает быстро и в более удобном виде собирать SBOM для проекта, это будет особенно полезно для сертификации по ФСТЭК России, включая контроля твоего supply-chain.

Тула построена так, что бы ручками не ковыряться в зависимостях, а получать нормальную структурированную картину по составу софта. то есть понятная карта компонентов, версий и метаданных, которая дальше помогает с аудитом, рисками supply chain и проверкой уязвимостей по каждому компоненту.


Именно такой подход хорошо ложится на практики, где SBOM генерится автоматически из репозитория или сборочного артефакта, а потом используется дальше в пайплайнах и системах контроля.

Как работает?

• Генерирует SBOM по проекту в одном из стандартных форматов, чтобы его можно было дальше отдавать в другие инструменты или хранить как артефакт
• Помогает привести результат к более удобному виду, чтобы SBOM не был просто «сырой простынёй», а нормально читался
• Подходит для автоматизации в CI/CD, как постоянная часть supply-chain процесса
• Может использоваться как стартовая точка для дальнейшего анализа зависимостей, лицензий и уязвимостей
• Может использоваться для сертификации во ФСТЭК России по требованиям испытательной лаборатории в том числе
• Нормально ложится в сценарии, где нужно быстро получить экспорт зависимостей и потом прогнать их через security-инструменты или загрузить в внешний контур


Функционально

• Генерирует SBOM из локальной директории или Git-репозитория (GitHub / GitLab)
• Сканирует уязвимости через Trivy, OWASP Dependency-Check, Clair
• Встраивает найденные уязвимости в SBOM (CycloneDX 1.5)
• Экспортирует читаемые отчёты: Excel (.xlsx), Word (.docx), ODT (.odt)
• Подписывает итоговый SBOM (SHA-256)

Зачем?

• Перед релизом, чтобы понимать, из чего состоит и какие зависимости используются
• В CI/CD, чтобы SBOM генерировался автоматически на каждый билд или релиз и можно было сверяться с обходными путями от команд для используемых зависимостей
• Для security review, когда нужно быстро показать состав зависимостей и точки риска
• Для compliance и supply-chain контроля


Планирую докрутить

• Более гибкие режимы генерации под разные типы проектов
• Сделать более удобный post-processing и валидацию результата


Links

• PyPi
• DockerHub
• Github Package

Структура


sbom_genform/
├── src/sbom_pipeline/
│ ├── cli.py # secsbom / secsbom-pipeline (typer)
│ ├── pipeline.py # оркестратор
│ ├── generate.py # генерация SBOM
│ ├── dedup.py # дедупликация
│ ├── sign.py # SHA-256 подпись
│ ├── exporter.py # xlsx / docx / odt
│ ├── vuln_merger.py # встраивание уязвимостей
│ ├── config.py # конфигурация
│ └── scanner/
│ ├── trivy.py
│ ├── depcheck.py
│ └── clair.py
├── docker/
│ └── Dockerfile.secgensbom
├── examples/project_inject/ # уязвимый PHP
├── secgensbom/secgensbom.yml # GitLab CI shared template
├── .github/workflows/
│ ├── ci.yml
│ ├── secgensbom.yml
│ └── publish.yml
├── tests/test_smoke.py
├── pyproject.toml
└── .env.example


#appsec #devsecops #specialty #toolchain #techsolution #paper #sbom
🔥5
🛠🏆 AppSec Labs to pump yourself up Release v.1.5.0

Салюты,
Разместил линк тут - course.geminishkv.tech

Интересный апдейт для тебя про который хотел бы рассказать про лабки, которые делал ранее. Да, именно те лабки, которые покажут тебе основные команды инструментов, как работать с ними, что такое база для работы в AppSec и тд. С ними у тебя получится качать себя и да, в лабах есть намеренные косяки, что бы ты смог разобраться, потому что бездумно копируя и смотря лог - маловероятно, что ты получишь какую то прокачку для себя.

Доработанные материалы в новом релизе

• Добавлено описание и Mermaid-карта лабораторных работ в README.md
• Добавлена информация по pet_project и lab09 в README.md и docs/index.md
• Актуализированы конфиги линтеров и инструментов сборки: .gitattributes, .gitignore, .dockerignore, ruff.toml, mypy.ini, .markdownlint.yaml
• Полностью переписан .dockerignore
• Устранён баг сборки MkDocs: удалена несуществующая страница Metro4Shell.md из навигации mkdocs.yml
• Выровнены отступы в sidebar: переработаны стили sidebar.css
• Обновлены shields на главной странице сайта: добавлены бейджи инструментов безопасности (Semgrep, Checkov, Trivy, OWASP ZAP, Nmap) и GitHub-метрики
• Добавлены тестовые задания по лабораторным работам
• Прочие доработки


Stay Tuned 😉

#appsec #devsecops #roadmap #specialty #toolchain #techsolution #gost #paper #course #reco #sast #sca #dast #sbom #containersecurity #secrets #riskanalys #techsolution
🔥4
🏆 geminishkv.tech

Салют,
UwU, я тут раньше похвастался своим geminishkv.tech и сейчас его доработал, оставлю пока в таком виде, но для тебя вывел специально единые линки контента и классный адаптив (нравится анимация как работает).

Так вот, я добавил:

• линки контента
• линки на пакеты (там пока залит пакет по маппингу в сбом уязвимостей с анализаторов)
• токен сессии с рефрешем для анимации преролла
• моя статистика и опыт
• пара интервью
• skillset и по мелочи


На фоне этого, я думаю, что пора делиться также личными штуками, что бы было поинтереснее и начну в скором времени показывать обратную сторону, которая также является частью меня 🙃

ПС: есть косячки, но с ними же интереснее 😂😁

#paper #appsec #devsecops
🔥4
🤔 I.N.V.E.S.T. как пилюля от боли недопонимания

Сегодня хочу еще немного затронуть проектное управление, давай поговорим с тобой про I.N.V.E.S.T. принцип.

I.N.V.E.S.T. используется как фильтр для задач, чтобы не тащить в текущий спринт «все подряд». По сути это: Independent, Negotiable, Valuable, Estimable, Small, Testable таски, которые помогают градировать нам нагрузку и понимать чего от нас хотят, так как ты постоянно будешь сталкиваться с кейсами: "я не понимаю куда мы движемся", "я хочу все и вся", "не ясно, что надо сделать" и т.д.

В AppSec, как и везде, часто прилетает «сделайте безопасную безопасность». Это не задачи, а реальная головная боль. I.N.V.E.S.T. помогает превратить боль в нормальные user‑story и технические задачи, то есть:

• понятные команде
• дающие измеримый эффект
• которые реально можно закрыть за спринт
• и проверить, что они сработали


Как это работает?

• I — Independent

История должна жить отдельно: можно взять и сделать без половины департамента
Пример плохой: «Сделать безопасный логин, регистрацию, восстановление пароля и профили»
I.N.V.E.S.T.: «Добавить rate limiting на POST /login с логированием блокировок»


• N — Negotiable

История, как приглашение к разговору, где детали можно уточнить с командой до начала спринта
Если задача звучит как «строго по ГОСТу XXX, без вариантов» — это уже скорее политика, а не user story


• V — Valuable

Должно быть понятно, кому и какую ценность даёт история: пользователю, бизнесу, безопасности
Пример: «Включить ещё один сканер» — не ценность.
I.N.V.E.S.T.: «Сократить критические уязвимости в проде, добавив Quality Gate на уровне CI» - становится ценностью


• E — Estimable

Команда должна понимать объём: хотя бы порядок — день, три, спринт
Если история звучит как «внедрить DevSecOps», её сначала нужно дорезать до кусочков, которые можно оценить (например, «подключить SAST к проекту X») и если не провести ревью или анализ, а тебе говорят «посчитай что то там сам и предложи», - это совсем плохо


• S — Small

История должна помещаться в один спринт и, желательно, занимать не больше 25–50% спринта на команду
Всё, что звучит как «переписать модуль авторизации» — режем на отдельные шаги: логин, MFA, блокировки, аудит


• T — Testable

У истории должны быть чёткие критерии приёмки: как поймём, что она сделана - ранее писал про Win Conditions/ Fail Conditions
То есть, - «Сделать безопаснее» - не тестируется, а «при 5 неверных логинах аккаунт блокируется на 15 минут, событие уходит в SIEM» — тестируется


Как корректно подходить к задачам?

Берёшь любую хотелку и прогоняешь через INVEST:

• Независима ли она от всего остального?
• Можно ли её обсудить и переформулировать перед спринтом?
• Понятно ли, какую пользу она приносит?
• Команда может её оценить?
• Влезает ли она в один спринт?
• Можем ли мы чётко тестом/ мониторингом проверить результат?


Если хоть на один пункт ответ «нет» — история ещё сырая, и её лучше дорезать, прежде чем тянуть в спринт

Шаблон



## Заголовок

[AppSec] Кратко и конкретно: что делаем и где

## User story

Как <роль/ клиент> хочу <что именно> чтобы <какая измеримая польза/риск>

Примеры:
- Как владелец сервиса auth-service хочу ограничить число попыток логина чтобы снизить риск перебора паролей и захвата аккаунтов.
- Как AppSec-инженер хочу включить блокирующий Quality Gate по критическим уязвимостям чтобы не выпускать в прод новые критические дыры.

## Контекст (Define)

- Текущее поведение/ проблема:
- Сейчас ...
- Затронутые системы/ сервисы:
- auth-service, gateway, ...
- Риски/ инциденты/ мотивация:
- Были X инцидентов/ найдено Y уязвимостей ...

## Критерии INVEST

- **Independent**
- **Valuable**
- **Estimable & Small**
- **Testable**

## Критерии приёмки (Testable)

Формат Given/ When/ Then или список

## Технические заметки (Negotiable)

- Предлагаемый подход (можно менять по итогам обсуждения):
- Ограничения и допущения:

## Метрики / контроль (Control)

- Что и как измеряем после внедрения:
- Где смотрим:


#pmi #reco #specialty #appsec #humanres #paper
🔥5🤯1
Я тут побаловался с минцифры сертификатами ИТ-компетенций, решил попробовать пройти их тесты, которые так хвалят на hh и тд, в итоге: прикольно, но ничего особенного, пусть полежит тут 🙃

Думаю, что сделаю еще парочкку, для массы, также есть там прикольные вопросы конечно, но мало вообще встречаешь такое, как например git cherry-pick и то только для разрешение конфликтов при rebase через temp ветку 😅

#paper #appsec #devsecops #course
🔥5
This media is not supported in the widget
VIEW IN TELEGRAM
6🔥3
🛠 Hacktrick for Application Security

Салют,
Сегодня хочу поделиться с тобой очень объемным материалом, который залетит (как дети в школу) для твоей прокачки и понимание глубоких принципов работы безопасности - от сокета и TLS до namespaces, cgroups и секьюрных профилей ядра и т.д. Материал с описанием и деталями как ломают и как противодействовать на реальных техниках эскалации, а не только best practices из мануалов.

Что важно тебе сразу взять?

• В разделе Pentesting Methodology расписан весь цикл теста: от сбора активов и сканирования до эксплуатации и пост‑эксплуатации, с конкретными командами и тулзами
• Для Windows и Linux есть чек‑листы локальной привилегии: что смотреть в службах, правах, реестре, драйверах, файловой системе, чтобы быстро найти точку эскалации
• Отдельный раздел по Docker Security: как правильно настраивать engine, какие флаги и security‑опции использовать, как работать с сокетом, capabilities, seccomp/ AppArmor
• Есть практические страницы по Docker breakout / privilege escalation — сценарии, когда у тебя есть доступ к контейнеру или docker.sock, и ты шаг за шагом превращаешь это в root на хосте через mount’ы, привилегированные контейнеры и т.п.
• Для AWS/ GCP/ Azure есть отдельные гайды по перечислению ресурсов, поиску мисконфигов, уязвимых политикам и типовым сценариям атак в облаке
• Обучалки формата AWS Red Team Expert / GCP Red Team Expert
• Большой кусок посвящён специфике отдельных технологий: AD, SQL, веб‑фреймворки, криптопримитивы


То есть, сам HackTricks даёт не теоретическую, а операционную картинку атакующего мышления: «какие команды я запускаю, что именно проверяю, что делаю дальше, если нашёл X».

Из этого удобно собирать свои чек‑листы для ревью инфраструктуры: Docker, Windows, облака и т.д. — буквально адаптируешь под себя.

Смотри, вот пример такого чек листа под Docker Security Checklist (приметив)



**Цель:** быстро проверить, не превращён ли ваш Docker‑хост в лёгкую цель

---

## Docker Engine и daemon

- Не светить `docker.sock` — только HTTPS + клиентские сертификаты
- Не поднимать `-H tcp://0.0.0.0:2375` без TLS
- Включить rootless‑режим и обновлять Docker/ host до актуальных патчей

***

## Образы и registry

- Использовать только официальные или свои базовые образы, не наследоваться от случайных `user/some-ubuntu-with-magic`
- В Dockerfile по возможности использовать **COPY вместо ADD**, чтобы не тянуть внешние URL и не распаковывать архивы
- Настроить регулярный пересбор образов, чтобы тянуть security‑патчи
- Подключить сканирование образов (docker scan / Trivy / Grype) — в CI и по расписанию по registry

***

## Секреты и конфиги

- Не класть токены/ ключи в image или в ENV, использовать секреты оркестратора (docker secrets/ k8s secrets/ vault)
- Проверять сохранённые образы/ слои на наличие секретов (git‑history, слои tar внутри image)

***

## Runtime‑ограничения

- Ограничить ресурсы контейнера (CPU, RAM, IO) через cgroups
- Настроить seccomp/ AppArmor/ SELinux‑профили, сузив доступные syscalls и операции до минимума

***

## Capabilities

- Не использовать `--privileged` в проде: он даёт контейнеру почти полный набор прав ядра и сильно упрощает escape
- Базовый подход: `--cap-drop=ALL` и затем точечно `--cap-add` только тех возможностей, без которых сервис не работает (например, `NET_BIND_SERVICE` для портов 80/443)

> Capabilities позволяют вместо «полного root» выдавать контейнеру только необходимые возможности ядра; чем их меньше, тем сложнее атакующему выйти из контейнера


#appsec #devsecops #course #specialty #containersecurity #mast #dast
🔥7
AppSECT.A.
This media is not supported in the widget
VIEW IN TELEGRAM
🔥7🤯2
Салюты, нашел тут историю, которая показывает восприятие ИБ бизнесом, а именно человек оркестр 😅

#lol
🤣4🤯1😱1
🛠 Docker Level Security

Давай еще поговорим про Docker и посмотрим повнимательнее на namespaces, cgroups, chroot, capabilities, seccomp.

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

Поэтому мы разберем то, на что тебе стоит обратить внимание в первую очередь.

• FS: chroot и mount

Внутри контейнера процессы видят корень как результат mount-операций и chroot. Поэтому следует не монтировать чувствительные директории (/var/run/docker.sock, /etc, /var/lib/docker) внутрь рабочих контейнеров. Тем более для stateful сервисов использовать чётко выделенные volume.



# Смотрим mount-namespace контейнера

pid=$(docker inspect -f '{{.State.Pid}}' my-container)
lsns -t mnt -p "$pid"


• Namespaces: изоляция процессов, сети и хостнейма

Напомню, что контейнер — это набор пространств имён: PID, NET, MNT, UTS, USER. Они отвечают за то, какие процессы ты видишь, какие точки монтирования доступны и т.д. Поэтому никогда не используй --pid=host и --network=host в обычных сервисах, потому что это антипаттерн изоляции. Для отладки следует использовать nsenter, а не пробрасывать сервисы напрямую на хост.



# Сравниваем namespace контейнера с хостом

pid=$(docker inspect -f '{{.State.Pid}}' ns-demo)
lsns -p "$pid"

# Войти в namespace контейнера для отладки
nsenter -t "$pid" -n ip addr


• cgroups лимиты

Они контролируют, сколько CPU/ памяти может потреблять группа процессов. Docker создаёт группы под каждый контейнер автоматически, но лимиты нужно задавать ручками. Поэтому для всех боевых сервисов обязательно задавать лимиты --cpus и -m, иначе один runaway процесс кладёт всю ноду. В мониторинге следить за OOMKilled и CPU throttling и при превышении необходимо пересмотреть лимиты.



# Ограничить контейнер по ресурсам
docker run -d --name web \
--cpus="1.0" \
-m 512m --memory-reservation=256m \
nginx:stable

# Смотреть потребление в реальном времени
docker stats web


• Capabilities

Docker по умолчанию урезает capabilities контейнера и выдает только часть привилегий ядра. Поэтому следует не использовать --privileged в проде ни при каких условиях, а также стартовая формула: --cap-drop=ALL и точечный --cap-add только того, без чего сервис реально не работает, как пример, - NET_BIND_SERVICE для портов 80/ 443.



# Посмотреть набор capabilities
docker run --rm -it alpine sh
apk add libcap && capsh --print | grep cap_

# Дропаем все, добавляем только нужное ручками
docker run --rm -it \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
-p 80:80 nginx:stable


• Seccomp и AppArmor

Даже когда злоумышленник внутри контейнера, - ядро может запретить опасные syscalls или операции с файлами через seccomp/ AppArmor. Docker применяет дефолтный профиль, но для чувствительных сервисов его нужно ужимать под конкретное приложение. Рекомендую включить логирование нарушений профиля, чтобы видеть попытки эскалирований и т.д. до того, как они станут эксплойтом.



# Запустить с кастомным профилем
docker run --rm -it \
--security-opt seccomp=/opt/seccomp/web.json \
alpine sh

# AppArmor
docker run --rm -it \
--security-opt apparmor=docker-default \
alpine sh


• Docker daemon и docker.sock

docker.sock это как root на хосте. Любой, у кого есть доступ к сокету, может запустить привилегированный контейнер и выйти на хост. Поэтому следует:
• не поднимать -H tcp://0.0.0.0:2375 без TLS и mTLS
• не монтировать /var/run/docker.sock в рабочие контейнеры
• для CI-раннеров использовать отдельный нод с отдельными правилами
• доступ к группам docker выдавать только с контролем Segregation-of-Duties



# Кто имеет доступ к сокету
ls -l /var/run/docker.sock
getent group docker

# Минимальный systemd-конфиг: только unix-сокет
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock


#appsec #devsecops #reco #specialty #containersecurity
🔥6