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

geminishkv.tech

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

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

Лидер findevsecops.ru @fintechassociation

Преподаватель @bmstu1830, @miptru
Download Telegram
Салют, пока предлагаю изучить тебе эту тему, очень интересно то, что сейчас происходит вокруг RedHat и этого стоит опасаться, на самом деле.

А пока я бегаю тут, готовлю для тебя материалы - это поможет быть нам вместе ближе
🔥4
Forwarded from SecAtor
В результате атаки на цепочку поставок скомпрометированы npm-пакеты в экосистеме Red Hat, распространивших новый вариант вредоносного ПО Shai-Hulud, получившего название Miasma.

Инцидент был обнаружен Aikido и OX Security (1 и 2), которые выявили десятки версий пакетов, содержащих бэкдоры с вредоносным ПО, предназначенным для кражи учетных данных разработчиков, секретов из облачных сервисов, ключей SSH, токенов CI/CD и другой конфиденциальной информации.

По данным Aikido, взломанные пакеты скачиваются примерно 117 000 раз в неделю. Как отметили в Red Hat, затронутые пакеты были удалены после того, как ей стало известно об инциденте.

Скомпрометированные пакеты предназначены исключительно для внутренней разработки, вредоносный код не получил распространения среди клиентов через систему console.redhat.com.

Расследование инцидента продолжается, но, предварительно, влияния на среды клиентов или партнеров, а также на производственные системы Red Hat выявлено не было.

По данным Aikido, злоумышленники, по всей видимости, взломали учетную запись GitHub сотрудника Red Hat и использовали ее для прямой отправки вредоносных коммитов в несколько репозиториев.

Инициированные изменения добавили рабочий процесс GitHub Actions и скрипт, который использовал механизм публикации npm для выпуска пакетов с бэкдорами.

Когда запускался рабочий процесс, он устанавливал Bun и выполнял команду  _index.js, передавая ей список целевых пакетов через переменную среды OIDC_PACKAGES.

Скрипт использует id-token: разрешение на запись для запроса кратковременного токена OIDC от GitHub, затем использует этот токен для прямой аутентификации с доверенной конечной точкой публикации npm и публикации версий каждого пакета из списка с бэкдорами.

Скомпрометированные пакеты содержали вредоносный скрипт предварительной установки, который автоматически запускал сильно обфусцированный вредоносный файл index.js при установке пакетов разработчиками.

Размер полезной нагрузки в файле index.js составлял приблизительно 4,2 МБ и использовался для кражи секретов GitHub Actions, учетных данных AWS, учетных данных Google Cloud и Docker, субъекта службы Azure, токенов HashiCorp Vault, записи службы Kubernetes, публикации npm и PyPI, ключей SSH и GPG и файлов .env.

Исследователи утверждают, что вредоносная ПО, использованная при взломе Red Hat, имеет много общего с Mini Shai-Hulud, но теперь использует строку «Miasma: The Spreading Blight» в качестве комментариев во взломанных репозиториях GitHub.

Вредоносная ПО хоть и напоминает Mini Shai-Hulud от TeamPCP, но неясно, проводилась ли кампания именно этим злоумышленником либо другим, который модифицировал исходный код просочившейся вредоносной ПО.

OX Security полагает, что вредоносная ПО сохраняет ту же функциональность по краже учетных данных, что и Mini Shai-Hulud, но добавляет дополнительные уровни обфускации, многоступенчатые механизмы доставки полезной нагрузки, а также расширенные функции кражи данных и сбора учетных данных.

На текущий момент вредоносной ПО Miasma были скомпрометированы 309 репозиториев GitHub. Установившим затронутые версии вредоносного ПО рекомендуется немедленно обновить все учетные данные, секреты и токены.
🔥4
Простите, но это забавно. «Своровано»

#lol
🤣5😱3
🛠 Коды ошибок и утечка информации через HTTP-методы

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

Сегодня хочу поговорить с тобой о тематике с HTTP-методами, поэтому начнём с того, что DAST — это не только поиск XSS и инъекций, а именно когда приложение само отдаёт конфиденциалку в ответах на кривые или нестандартные запросы.

Пример: GET с избыточной инфой, POST без тела, TRACE — и сервер начинает рассказывать о себе больше, чем должен

Что утекает и откуда

• Коды ошибок — 500 Internal Server Error со stack trace в теле ответа является именем фреймворка, версии, пути к файлам, иногда строка подключения к БД. А допустим 403 Forbidden отличается от 404 Not Found, где мы можем перебором найти закрытые endpoints. А 405 Method Not Allowed прямо говорит, что эндпоинт существует
• Verbose-ошибки в теле — например ASP.NET в режиме разработки отдаёт полный stack trace в HTML. А Spring Boot без server.error.include-stacktrace=never делает то же самое в JSON. К тому же Django с DEBUG=True — отдельная история и очен геморройная
• Заголовки ответа — Server: Microsoft-IIS/10.0, X-Powered-By: ASP.NET, X-AspNet-Version: 4.0.30319 дают нам понимание стека, версии рантайма и саму платформу, то есть самое первое перед эксплойтом
• TRACE-метод — отражает запрос обратно целиком, включая заголовки, где можно увидеть внутренние заголовки, которые добавляет reverse proxy или балансировщик, иногда токены (вот тут я рассмотрел подробнее)


Потыкаем curl


# GET с несуществующим путём — смотрим что в теле ошибки
curl -i https://example.com/api/v1/doesnotexist123

# POST без тела и Content-Type — триггерим ошибку парсинга
curl -i -X POST https://example.com/api/v1/orders

# POST с кривым JSON — часто вытаскивает stack trace
curl -i -X POST https://example.com/api/v1/orders \
-H "Content-Type: application/json" \
-d '{"broken json'

# TRACE — проверяем включён ли метод
curl -i -X TRACE https://example.com

# Смотрим только заголовки — ищем Server, X-Powered-By, X-AspNet-Version
curl -s -D - https://example.com -o /dev/null | grep -iE \
"server:|x-powered|x-aspnet|x-generator|x-runtime"


Что видим?


# verbose error с деталями стека
HTTP/1.1 500 Internal Server Error
X-Powered-By: ASP.NET

{
"message": "Object reference not set to an instance of an object",
"stackTrace": "at ProjectQueryRepository.GetById(Int32 id)\r\n
at C:\\inetpub\\b2b\\src\\Repositories\\ProjectQueryRepository.cs:75"
}

# TRACE отражает запрос обратно
HTTP/1.1 200 OK
TRACE /api/test HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGc... ← токен в отражении

# А вот тут ничего лишнего
HTTP/1.1 500 Internal Server Error

{ "error": "Internal server error", "requestId": "a3f9c2" }


Итого

• 500 с телом ошибки — первое что проверяет DAST
• Разница между 403 и 404 на закрытых эндпоинтах — это enumeration, несуществующее и недоступное должны быть неразличимы снаружи
• Server: и X-Powered-By: убрать на уровне nginx/ IIS — они не нужны клиенту
• Единственное что отдаём при ошибке — requestId, всё остальное во внутренние логи прячем
• Всплески 500 и нестандартных методов — детектируемый паттерн активного поиска
• Единообразие кодов ответа - несуществующий ресурс и ресурс, к которому нет доступа, должны быть неразличимы снаружи — оба возвращают 404
• Server:, X-Powered-By:, X-AspNet-Version:, X-AspNetMvc-Version:, X-Generator:, X-Runtime: убирать на уровне веб-сервера или reverse proxy, так как не несёт никакой ценности при бизнес функции
• Сделать Whitelist разрешённых методов: GET, HEAD, POST, PUT, DELETE, PATCH в зависимости от API, сам TRACE отключается везде
• Content-Security-Policy, X-Content-Type-Options: nosniff, X-Frame-Options и остальные заголовки безопасности — отдельный слой, который закрывает эксплуатацию даже если часть информации всё-таки утекла. Без них утечка версии фреймворка в связке с известным CVE и отсутствием CSP превращается в цепочку за один шаг


#appsec #devsecops #reco #specialty #dast
🔥7
А еще жалуются на рождаемость 😅🙃

#lol
🤣8
Я должен поделиться этим 😅

#lol
🤣8❤‍🔥3
🛠 Terrascan IaC policy для конфигураций

Инструмент анализирует шаблоны инфраструктуры как кода (IaC) и проверяет их на соответствие встроенным политикам безопасности. Сканирует конфиги HCL, YAML и JSON, на предмет ошибок, недостаток архитектуры, нарушений практик и проблем с соответствием требованиям.

Основной маппинг на CIS Benchmarks, NIST, SOC2, GDPR, HIPAA из коробки.


Метаданные: Apache 2.0. Форматы отчетов: CLI, JSON, YAML, XML, JUnit-xml, SARIF. Поддерживает Terraform, Kubernetes, Helm, Dockerfile, CloudFormation и т.д. Содержит предопределенные политики для провайдеров: AWS, Azure, GCP, Kubernetes и Docker. Политики написаны на Rego (Open Policy Agent), что позволяет создавать собственные правила.


# Сканирование текущей директории с автоопределением типа IaC
terrascan scan
 
# Сканирование с указанием типа IaC и облачного провайдера
terrascan scan -i terraform -t aws
 
# Вывод результатов в формате JSON
terrascan scan -o json
 
# Фильтрация по severity
terrascan scan --severity "High"
 
#Dockerfile
terrascan scan -i docker
 
# Отображение уязвимостей в образах, упомянутых в IaC-файлах
terrascan scan -i terraform --find-vuln


Типовые находки



# root пользователь
FROM node:18
COPY . /app
RUN npm install
CMD ["node", "server.js"]

# ADD на extrnl URL
ADD https://example.com/script.sh /tmp/


Кастомная политика для обазов без явного тега версий



# policy/no_latest_tag.rego
package accurics.docker.image.latest

deny[msg] {
input.type == "dockerfile"
instruction := input.instructions[_]
instruction.cmd == "from"
contains(instruction.value, ":latest")
msg := sprintf("Image uses ':latest' tag: %v", [instruction.value])
}


CI/CD интеграция



terrascan:
image: tenable/terrascan:latest
stage: security
script:
- terrascan scan -t terraform -d ./infra -o sarif > terrascan.sarif
- terrascan scan -t docker -f Dockerfile -o json > docker.json
artifacts:
reports:
sast: terrascan.sarif
allow_failure: false # блокируем pipeline при HIGH/CRITICAL


pre-commit hook



# .git/hooks/pre-commit
#!/bin/bash
terrascan scan -t terraform -d . --severity HIGH --exit-code 1
if [ $? -ne 0 ]; then
echo "BLOCKED: Terrascan found HIGH/CRITICAL violations"
exit 1
fi


Итого:

• Единый IaC для Terraform, Kubernetes и Helm из коробки
• Возможность написания кастомных правил на Rego для внутренних требований
• Инструмент анализирует код до его развертывания и не отслеживает runtime-угрозы в работающей инфраструктуре. Параметризованные ресурсы проверяются по тому значению, что видно в конфиге
• Подходит больше для кластеров Kubernetes и связанных с ними технологий
• Можно указывать, какие правила игнорировать (--skip-rules)
• Позволяет настраивать критерии QG исходя их severity


#appsec #toolchain #devsecops #sast #techsolution
🔥8😱1
Жиза от РП/ПМ 😅😁

#lol
🤣8
🤔 MultiSig для blockchain: реальный кейс

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

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

Задача: необходимо обеспечить безопасность 800+ BTC в день проходящих через криптопул. Без seed phrase на одном устройстве, без единой точки отказа, без возможности вывести всё одной скомпрометированной подписью.


Как устроена транзакция

BTC на адресе всегда тратится целиком — разбивается на несколько исходящих адресов, остаток уходит на новый адрес (change output), разница между входящей и исходящей суммой — комиссия. Адрес содержит хеш в цепи и позволяет разрешить трату конкретных coin. Мультиподпись меняет этот хеш: вместо «одна подпись» становится «M из N подписей»

Схемы M-of-N

• 2/3 — горячий кошелёк биржи. Биржа держит один ключ, второй резервный, третий — у команды кибербезопасности. Для подтверждения транзакции нужно минимум два. Security-команда подписывает только после проверки на AML и kill-switch
• 3/5 — кошелёк с низким уровнем доверия. Тратить могут любые трое из пяти владельцев. Инициировать перевод может любой, но исполнить — только при достижении необходимого количества подписей. Снижает одновременно три риска: растрату одним участником, взлом, потерю доступа
• 2/3 — эскроу схема. Покупатель, продавец, арбитр. В норме сделка закрывается подписями двух сторон без арбитра. При споре — арбитр подписывает в пользу одной из сторон. Платформа физически не может забрать деньги в одностороннем порядке


Решение для кейса — как это реализовано на практике?

• Схема подписи: 2/3 с разделением ролей — автоматический сервис подписывает рутинные выплаты, security-ключ изолирован и подключается только для нестандартных операций или крупных выводов выше порога AML
• Проверки перед подписанием: валидация адреса получателя по whitelist, проверка суммы, проверка что change output возвращается на наш контролируемый адрес, а не уходит куда-то третьему
• Хранение ключей: hot key в HSM на сервере, backup key offline в физически изолированном хранилище, security key у команды ИБ с hardware token PKCS#11 (на то время). Никаких seed phrase в plaintext, никаких ключей в ENV переменных
• Мониторинг: каждая подписанная транзакция логируется с метаданными — кто подписал, в какое время, сумма, адрес получателя. Алерт при подписании выше порога и иные проверки AML


Почему это важнее чем кажется?

• Большинство взломов — это не взлом блокчейна, а компрометация одного ключа: утечка из ENV, взлом сервера, инсайдер и тд. Поэтому Multisig переводит вопрос в плоскость скомпрометируй M из N одновременно — это принципиально другой уровень атаки
• Для финтех-продуктов это ещё и архитектурный аргумент: если платформа физически не может подписать транзакцию в одностороннем порядке — это не только безопаснее, но и юридически чище в плане ответственности

Итого (полный кейс с разбором транзакций и схемами почитай тут)

• Multisig — не фича, а архитектурный принцип: M из N владельцев должны согласовать операцию
• 2/3 — минимальный разумный порог для горячего кошелька с реальными деньгами
• 5/7 - рекомендуемый порог для холодного хранения и распределения средств с нод
• Разделение ролей, как автоматический сервис/ security/ backup снижает и операционный, и риски ИБ одновременно
• Whitelist адресов с пороговыми проверками, подключенными к мониторингу являются независимыми слоями поверх самой мультиподписи
• Скомпрометировать один ключ при схеме 2/3, а особенно Эскроу - проблематично


Сноска

• Хеш адреса (locking script) — каждый непотраченный выход транзакции защищён условием
• M-of-N (пороговая подпись) — схема где N — общее количество участников с ключами, M — минимальное количество подписей для совершения операции
• Эскроу (escrow) — механизм условного хранения: средства блокируются у нейтральной третьей стороны до выполнения условий сделки


#devsecops #pmi #reco #research #pmcases #techsolution #term
🔥7
🛠 Security SBOM generator with vulnerability chechup v2.2.0

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

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

Что делает?

• Генерирует SBOM двумя генераторами (cdxgen + syft) и объединяет результат — из локальной директории, Git-репозитория (GitHub / GitLab) или контейнерного образа
• Дедуплицирует компоненты по PURL и уязвимости по CVE и компонент
• Создаёт два подписанных SBOM: без уязвимостей и с ними
• Сканирует уязвимости параллельно через Trivy, OWASP Dependency-Check, Clair
• Встраивает найденные уязвимости в SBOM (CycloneDX)
• Опционально обогащает уязвимости идентификаторами БДУ ФСТЭК России
• Экспортирует читаемые отчёты: Excel (.xlsx), Word (.docx), ODT (.odt)
• Готовит SBOM под требования ФСТЭК (`secsbom cert` — поля GOST)


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

Реко по прогону



$ pip install sbom-pipeline # 1. поставить
$ cd /path/to/project # 2. зайти в КОРЕНЬ проекта
$ secsbom status # 3. проверить окружение
$ secsbom gen-sbom --path . # 4. собрать SBOM (только компоненты)
$ secsbom scan secgensbom_out/app-bom-dedup-signed.json --path . --bdu # 5. смапить уязвимости
$ secsbom info secgensbom_out/merged-bom-signed.json # 6. сводка: компоненты и CVE по severity
$ secsbom verify secgensbom_out/merged-bom-signed.json # 7. проверить целостность



Links

• PyPi
• DockerHub
• Github Package

#appsec #devsecops #specialty #toolchain #techsolution #paper #sbom
🔥6
Родной(ая), с праздником 🫶🙏 спасибо, что рядом со мной
🔥96
Салют, для инфо,
Теперь SOTA среди открытых моделей ИИ, ну что бы ты понимал(а) - это от госструктур Рио-де-Жанейро.

Моделька Rio 3.5 Open 397B на базе Qwen. По бенчмаркам типо лучше Qwen 3.7 Plus, DeepSeek V4 Pro и Kimi-K2.6. Лицензия MIT.

Пользуйся 😅😁

#lol
🔥7
🙃 Новая точка роста канала

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

Нас сейчас больше 400, что меня дико радует, а тебя я обнял-приподнял, безумно рад тебе тут 🫶🙏

#paper
🔥105
Сообщество FinDevSecOps представило Карту инструментов безопасной разработки ПО.

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

Среди DevSecOps-инструментов, представленных в Карте: статический анализатор, анализ поверхности атаки, DAST (Dynamic Application Security Testing) и др. Для каждого инструмента приведены метаданные, включающие такие сведения как тип лицензии, наличие сертификата ФСТЭК, доступность на территории РФ, используемые методы обнаружения уязвимостей, форматы отчетов. Приведены определения классов и описания лицензий. В Также Карте представлены MlSecOps-инструменты для организации безопасного жизненного цикла ИИ-систем.

Обновленная Карта дает возможность подбирать инструменты по любой комбинации значений параметров.
🔥8
Со вторником дорогой(ая)

#lol
🔥7
Кстати, роднуля, смотри че тут есть ;)

#appsec #devsecops #toolchain #specialty
🔥7
Актуалочка для многих 😅🙃🫡

#lol
🤣9
🛠 Understand-Anything граф знаний AppSec

Салют,
Сегодня хочу поделиться инфой о интересном проекте, который позволяет разобрать проект в понятной картинке для тебя. Итого, это Understand-Anything — плагин для Claude Code, который через LLM строит интерактивный knowledge graph: узлы, связи, архитектурные слои и гайд-тур по кодовой базе проекта.

По сути, это прикольная фишка, где ты можешь поставил плагин, прогнать и получить вот это:

• Скан репо с определением языков, фреймворков, импортов
• Семантические батчи
• Собирать граф: узлы (файлы, функции, классы, конфиги, сервисы, схемы) и связи (imports, calls, depends_on, deploys, tested_by)
• Раскладывает по архитектурным слоям, строит тур гид (смотри обрезом в .mmd), то есть на выходе knowledge-graph.json, из которого можно собрать High level Arhitecture всей системы
• Поднимает локальный дашборд для визуализации и навигации


Зачем в AppSec?

• Быстрое обследование кодовой базы — за минуты видишь точки входа, потоки данных, внешние интеграции и все внешние вызовы без ручного grep
• Готовый onboarding для нового человека на security review
• .understandignore — сразу выкидываешь секреты, lock-файлы и мусор из анализа (ну мы же знаем, что лучше воткнуть в Vault)
• knowledge-graph.json коммитится в репо — любой следующий аудитор получает карту сразу после git clone
• HTTP-связи фронта и бэка в граф не попадают: видит статические импорты, не сетевые вызовы


Команды:



# Node ≥22 и pnpm, далее собрать ядро
npm install -g pnpm
cd ~/.understand-anything/repo/understand-anything-plugin
pnpm install && pnpm --filter @understand-anything/core build

# Построить граф
/understand --language ru

# Поднять интерактивный дашборд
/understand-dashboard

# флаги:

--full (полный пересбор) 
--review (LLM-ревью графа)


Итого:

• Не серебряная пуля, но как карта местности для незнакомого кода — очень бодро
• Граф и в .mmd для архитектуры или security самое то, когда надо вьехать сразу, ну а дальше, по старинке, уже ручки и голова
• Attack surface mapping с нуля (API endpoints, webhooks, очереди), внешние интеграции, публичные vs внутренние интерфейсы.
• Scope для пентеста. Из графа сразу видно что тестировать: все внешние API-вызовы, все обработчики входящих данных, все места где user input попадает в систему
• Буквально guided walkthrough по архитектуре
• Видишь границы доверия


#appsec #devsecops #toolсhain #techsolution #reco #reserch
🔥7