
stride-gpt v0.19.0
Инструмент моделирования угроз на основе ИИ, использующий модели GPT от OpenAI для генерации моделей угроз для заданного приложения на основе методологии STRIDE.
STRIDE GPT — это инструмент моделирования угроз на основе ИИ, который использует большие языковые модели (LLM) для генерации моделей угроз и деревьев атак для заданного приложения, основанных на методологии STRIDE. Пользователи предоставляют детали приложения, такие как тип приложения, методы аутентификации, а также является ли приложение доступным из интернета или обрабатывает конфиденциальные данные. Затем модель генерирует вывод на основе предоставленной информации.
Содержание
- Поддержка проекта
- Возможности
- Корпоративное развертывание
- Выступление на Open Security Summit
- Журнал изменений
- Установка
- Структура репозитория
- Использование
- Пример вывода
- Рекомендации по безопасности
- Вклад в проект
- Лицензия
Поддержка проекта
Если вы считаете STRIDE GPT полезным, пожалуйста, рассмотрите возможность поддержки проекта:
- ⭐ Поставьте звезду репозиторию на GitHub, чтобы помочь большему числу людей узнать об инструменте
- ☕ Купите мне кофе, чтобы поддержать дальнейшую разработку и сопровождение
Возможности
- Агентный анализ кодовой базы: Укажите CLI путь к кодовой базе и получите автономную, глубокую модель угроз STRIDE — агент планирует, исследует и синтезирует результаты по подсистемам.
- CLI и интерактивный REPL: Полнофункциональный терминальный интерфейс с автодополнением, историей и прогрессом в реальном времени — браузер не требуется.
- Простой и удобный веб-интерфейс на Streamlit
- Генерация моделей угроз на основе методологии STRIDE
- Поддержка агентного ИИ: Специализированное моделирование угроз для агентных систем ИИ с интеграцией OWASP Top 10 для агентных приложений (ASI).
- Поддержка генеративного ИИ: Моделирование угроз для приложений GenAI с интеграцией OWASP LLM Top 10.
- Привязка к MITRE ATT&CK и ATLAS: Угрозы снабжаются стандартизированными идентификаторами техник противника (MITRE ATT&CK Enterprise для традиционных атак на инфраструктуру, ATLAS для атак, специфичных для ML/LLM) — отображаются в виде столбцов в Markdown, связанных пилюль в HTML и свойств
mitre_attackв SARIF. - Обнаружение архитектурных шаблонов: Автоматическое обнаружение конвейеров RAG, мультиагентных систем, сред выполнения кода, экосистем инструментов и т.д. из описаний приложений (вдохновлено CSA MAESTRO).
- Встроенный редактор диаграмм draw.io: Создавайте и редактируйте архитектурные диаграммы непосредственно в STRIDE-GPT с помощью встроенного редактора diagrams.net — внешние инструменты не требуются. Диаграммы анализируются как XML для извлечения компонентов, соединений и границ доверия, что обеспечивает значительно более богатый контекст для генерации моделей угроз, чем анализ изображений. Существующий рабочий процесс загрузки изображений не изменяется. По умолчанию редактор загружается из размещенного
embed.diagrams.net; для самостоятельного размещения или развертывания в изолированной среде укажите собственный draw.io через переменную окруженияSTRIDE_GPT_DRAWIO_URL. - Мультимодальность: Используйте архитектурные диаграммы, блок-схемы и т.д. в качестве входных данных для моделирования угроз во всех поддерживаемых моделях с возможностью видения.
- Диаграммы потоков данных (DFD): Генерируйте DFD из описания приложения (или анализируйте загруженное изображение DFD), редактируйте исходный код Mermaid в реальном времени и передавайте подтвержденную диаграмму обратно в запросы на создание модели угроз и дерева атак в качестве авторитетной системной модели. CLI-команда
/analyzeтакже выводит системную DFD вместе с результатами. - Генерация деревьев атак для перечисления возможных путей атак
- Предложение возможных мер по смягчению угроз для выявленных угроз
- Поддержка оценки рисков DREAD для выявленных угроз
- Генерация тестовых сценариев Gherkin на основе выявленных угроз
- Анализ репозиториев GitHub для всестороннего моделирования угроз (включая поддержку GitHub Enterprise)
- Несколько форматов вывода: Markdown, JSON, SARIF (импортируется в GitHub, GitLab, Azure DevOps, IDE) и автономное HTML-представление для обмена с заинтересованными сторонами.
- Поддержка продвинутых моделей рассуждения (серия OpenAI GPT-5.4/5.5, Anthropic Claude 4.6/4.8 с расширенным мышлением, Google Gemini 3, серия Mistral Magistral)
- Всесторонняя поддержка провайдеров LLM через LiteLLM: OpenAI, Anthropic, Google AI, Mistral, Groq, DeepSeek, а также локальное размещение через LM Studio Server
- Отсутствие хранения данных; детали приложения не сохраняются
- Доступен в виде образа контейнера Docker для простого развертывания
- Поддержка переменных окружения для безопасной настройки
Корпоративное развертывание
Хотите настроить STRIDE-GPT под свою организацию? Ознакомьтесь с нашим подробным Руководством по эксплуатации, чтобы узнать, как:
- 🎯 Внедрить организационные средства контроля и стандарты безопасности
- 📋 Настроить модели угроз в соответствии с требованиями соответствия
- 🔧 Сделать форк и развернуть STRIDE-GPT внутри организации
- 📊 Получать контекстно-зависимые, применимые модели угроз, специфичные для вашей среды
Руководство включает пошаговые инструкции, примеры кода и шаблоны развертывания для организаций, желающих масштабировать моделирование угроз с помощью ИИ в своих командах.
Выступление на Open Security Summit
В январе 2024 года я выступил с докладом о STRIDE GPT на Open Security Summit. В ходе выступления я рассказал о зарождении проекта, его основных функциях, последних обновлениях и некоторых планах на будущее. Полную запись презентации можно посмотреть ниже:
Это видео — отличный ресурс для всех, кто хочет понять, как работает STRIDE GPT и как его можно использовать для улучшения моделирования угроз.
Журнал изменений
Версия 0.19 (последняя)
- Флаг
--version(#161):stride-gpt --versionтеперь выводит установленную версию и завершает работу, а баннер интерактивного TUI показывает текущую версию, чтобы вы могли сразу узнать, что у вас установлено. - Управление зависимостями консолидировано на uv (закрывает #155):
uv.lockтеперь является единственным источником истины для всех зависимостей. Дублированные файлыrequirements.txtудалены; образ Docker UI и рабочий процесс проверки безопасности устанавливают зависимости изuv.lockчерезuv export, так что поставляемое и сканируемое больше не может расходиться с зафиксированным. Для пользователейpip install stride-gptизменений нет. - Документация: Добавлен пример вывода модели угроз в Markdown (#151) и шпаргалка по интерактивному REPL (#163) в README.
Версия 0.18
- Встроенный редактор диаграмм draw.io (#132, #138): Вкладка "Модель угроз" в Streamlit теперь включает редактор diagrams.net, позволяющий создавать архитектурную диаграмму прямо в приложении; при сохранении XML диаграммы анализируется (компоненты, соединения, границы доверия) и включается в запрос модели угроз. Анализ GitHub, загрузка изображений, редактор диаграмм и управляемый построитель с помощью ИИ объединены в одну вкладку с разделом "Опишите ваше приложение" над единым полем описания, так что дополнительные входные данные больше не загромождают основное поле. Управляемый построитель теперь вызывает выбранную модель, чтобы составить проект описания и предложить недостающие детали, важные с точки зрения безопасности, заменяя предыдущий статический шаблон и проверки покрытия. Для самостоятельного или изолированного развертывания хост редактора настраивается через
STRIDE_GPT_DRAWIO_URL(по умолчаниюembed.diagrams.net), источникpostMessageв iframe ограничен им, а непроверенный XML диаграмм анализируется с помощьюdefusedxml. - Поддержка провайдера DeepSeek (закрывает #133): DeepSeek теперь является полноценным провайдером моделей как в мастере настройки CLI, так и в веб-интерфейсе Streamlit, предлагая
deepseek-v4-proиdeepseek-v4-flash. Вызовы маршрутизируются через встроенную интеграциюdeepseek/в LiteLLM (хостинговая конечная точка, пользовательский базовый URL не требуется); установите ключ черезDEEPSEEK_API_KEY. - Поддержка диаграмм потоков данных (DFD) (закрывает #56): Новая вкладка "Диаграмма потоков данных" в веб-интерфейсе Streamlit генерирует DFD из описания приложения, анализирует загруженные изображения DFD с помощью моделей, поддерживающих видение, и отображает редактируемую панель исходного кода Mermaid с предварительным просмотром в реальном времени. Установка флажка "Использовать эту DFD для модели угроз" сохраняет подтвержденную диаграмму в состоянии сеанса и вставляет её в последующие запросы на создание модели угроз и дерева атак в качестве авторитетной системной модели — замыкая цикл описание → DFD → проверка → уточненная модель угроз, о которой говорилось в задаче. Агент
/analyzeв CLI также создает системную DFD после синтеза, отображаемую как блок Mermaid в отчете Markdown, передаваемую в поле JSONdata_flow_diagramи показываемую в HTML-представлении через среду выполнения Mermaid, загруженную с CDN. Генерация DFD обернута так, чтобы неудачная диаграмма не приводила к сбою хорошего отчета. - Корректная обработка ошибок анализа репозиториев GitHub (закрывает #92): Веб-интерфейс Streamlit теперь перехватывает сбои API GitHub при анализе репозиториев, вместо того чтобы показывать необработанный стек вызовов, с информативными сообщениями для 404 (включая область действия fine-grained PAT, которая дает 404 даже для публичных репозиториев), 401, 403/превышение лимита и сетевых ошибок. URL репозиториев нормализуются (замыкающий
/и суффикс.gitудаляются) перед парсингом, так что.../repo/и.../repo.gitбольше не дают ложных 404. - Структурированные промежуточные артефакты вместе с отчетами (закрывает #122): При передаче
-o <path>в/analyzeили/quickрядом с отчетом записываются JSON-файлы-потомки:<stem>.plan.json(AnalysisPlan),<stem>.findings.json(результаты подсистем, сквозные угрозы и диаграмма потоков данных) и<stem>.run.json(RunManifest, записывающий модели, хеш конфигурации, версию, тайминги, какие справочные карты были фактически загружены, иrun_summary, отмечающий, завершился ли запуск или был прерван лимитом вызовов). Манифесты не содержат ключей API и конечных точек и скрывают пути файловой системы, поэтому их можно безопасно фиксировать в репозитории или прикреплять к задаче. Флаг-fуправляет только артефактом отчета; потомки всегда в JSON. - Восстановление значений MITRE ATT&CK через запятую (закрывает #134): Когда рабочая модель возвращает
MITRE_ATTACKв виде строки, разделенной запятыми (например,"T1190, T1059, AML.T0053") вместо канонической формы списка, идентификаторы техник теперь восстанавливаются, а не отбрасываются. Ранее в отчетах Markdown/HTML столбец "MITRE ATT&CK" был пуст во всех ячейках, а при экспорте SARIF идентификаторы терялись. Все рендереры (Markdown, HTML-пилюли, SARIF) и проверка видимости столбцов теперь проходят через единый нормализатор, а свободный прозаический текст, не являющийся идентификатором техники, отфильтровывается, чтобы столбец не заполнялся ложными срабатываниями. - Патч 0.18.1 (закрывает #159): Исправлена ошибка вызовов LM Studio с сообщением
The api_key client option must be set, когда в окружении отсутствовал ключ облачного провайдера. LM Studio маршрутизируется через префиксopenai/в LiteLLM, а SDK OpenAI отказывается создавать клиент без ключа, даже еслиapi_baseуказывает на localhost, поэтому CLI теперь передает заполнитель для провайдеров, не требующих аутентификации. Кроме того, сканирование окружения рабочего уровня в последней инстанции больше не применяется к таким провайдерам: ранее настроенныеANTHROPIC_API_KEYилиOPENAI_API_KEYотправлялись на любой хост, указанный вapi_base, что одновременно маскировало эту ошибку и передавало реальный ключ по сети. Если вы используете LM Studio и у вас установлен такой ключ, он больше не передается на вашу конечную точку.
Версия 0.17
- Интеграция с MITRE ATT&CK и ATLAS (закрывает #36): Угрозы, выдаваемые
/analyzeи/quick, теперь могут содержать стандартизированные идентификаторы техник противника из MITRE ATT&CK Enterprise (v17.1) и MITRE ATLAS (2026.05). Две новые справочные карты с прогрессивным раскрытием (mitre_enterprise,mitre_atlas) инструктируют агента использовать только каталогизированные идентификаторы и названия, устраняя галлюцинации идентификаторов. Карты генерируются из исходных STIX/YAML с помощьюscripts/refresh_mitre_cards.py, а не на основе запоминания модели. Техники отображаются в виде столбцаMITRE ATT&CKв таблицах Markdown, кликабельных пилюль небесно-голубого цвета в HTML и массивовproperties.mitre_attackв SARIF. - Сопутствующий HTML-отчет:
/analyzeи/quickтеперь создают автономный, просматриваемый в браузере HTML-отчет вместе с выводами в Markdown, JSON и SARIF, подходящий для обмена с заинтересованными сторонами. - Anthropic Claude Opus 4.8: Добавлена поддержка
claude-opus-4-8, новейшей флагманской модели Anthropic, наряду с существующей Opus 4.7. Любую из них можно выбрать в качестве модели-архитектора или рабочей модели. - Консолидация образов UI: Двойное пространство имен Docker (
mrwadams/stridegpt-ui) удалено; веб-интерфейс Streamlit теперь находится только вmrwadams/stridegpt. Пользователям CLI следует устанавливатьpip install stride-gpt, а не тянуть контейнер. - Гигиена зависимостей: Удален неиспользуемый пакет
mistralai(доступ к Mistral уже осуществляется через LiteLLM). Обновлена базаpython:3.12-slimдля образа UI и удаленcurl, что устраняет 21 предупреждение CVE среднего/высокого уровня в PR #113–#115. - Очистка качества кода: Устранены замечания CodeQL (неиспользуемые импорты, голый
except, мертвый код) (#116).
Версия 0.16
- Автономный CLI: Первый выпуск STRIDE-GPT в виде CLI через
pip install stride-gpt, отделенного от устаревшего веб-интерфейса Streamlit. Две основные команды:/analyze(автономный агентный анализ кодовой базы с планировщиком, циклами агентов, использующих инструменты для каждой подсистемы, и проходом сквозного синтеза) и/quick(одноразовая модель угроз на основе письменного описания приложения). - Справочные карты с прогрессивным раскрытием: Карты
genai(OWASP LLM Top 10),agentic(OWASP ASI Top 10) иinsider_threatсамодокументируются через YAML-заголовки; агент обнаруживает их черезlist_referencesи извлекает содержимое черезload_reference. - Двухуровневая маршрутизация моделей: Разделение на модель-архитектор и рабочую модель для экономически эффективного анализа, при этом флагманские модели резервируются для планирования и синтеза.
- Интерактивный REPL: Полнофункциональный терминальный интерфейс с автодополнением, историей, прогрессом в реальном времени и строкой состояния.
- Многоформатный вывод: Markdown, JSON и SARIF (импортируется в GitHub, GitLab, Azure DevOps, IDE).
- Патч 0.16.1: Уровень логирования LiteLLM повышен до ERROR в
stride_gpt/__init__.py, чтобы предупреждения о предварительной загрузке Bedrock/SageMaker не появлялись при чистых установках безbotocore.
Нажмите, чтобы просмотреть примечания к выпуску более ранних версий (0.15 и старше).
Версия 0.15
-
Поддержка агентных приложений ИИ: Добавлена всесторонняя поддержка моделирования угроз для агентных систем ИИ с интеграцией OWASP Top 10 для агентных приложений (ASI01-ASI10). Просто выберите "Агентное приложение ИИ" и опишите свою систему — LLM автоматически обнаружит архитектурные шаблоны и применит соответствующие категории угроз. Каждый риск ASI сопоставляется с соответствующей категорией STRIDE для единообразного анализа угроз.
-
Поддержка приложений генеративного ИИ: Добавлена поддержка моделирования угроз для приложений GenAI с интеграцией OWASP LLM Top 10 (LLM01-LLM10). Выберите "Приложение генеративного ИИ" и опишите свою систему, чтобы получить специализированный анализ угроз, связанных с LLM. Приложения агентного ИИ включают как категории рисков LLM, так и ASI для всестороннего охвата.
-
Обнаружение архитектурных шаблонов вдохновленное MAESTRO: Улучшенный агентный анализ угроз с автоматическим обнаружением архитектурных шаблонов из описаний приложений, вдохновленный фреймворком Cloud Security Alliance MAESTRO. LLM теперь идентифицирует и применяет специфические для шаблонов угрозы для:
- Систем RAG/Поиска: Отравление векторного хранилища, манипуляция внедрением, межарендаторная утечка
- Мультиагентных систем: Имитация агентов, подделка сообщений между агентами, каскадные компрометации
- Сред выполнения кода: Побег из песочницы, выход из контейнера, генерация вредоносного кода
- Экосистем инструментов/MCP: Мошеннические поставщики инструментов, атаки на цепочку поставок, уязвимости запутанного заместителя
- Постоянной памяти: Отравление памяти, межсеансовая утечка, манипуляция состоянием
- Автономных операций: Постоянство недобросовестного агента, обход контроля человеком, бесконечные циклы
-
Межуровневый анализ угроз: Модели угроз теперь включают межкомпонентные цепочки атак, показывающие, как компрометация одного архитектурного уровня может позволить атаки на другие (например, отравление RAG → захват цели агента → неправильное использование инструмента → утечка данных).
-
Улучшенные предложения по усовершенствованию: Для агентных приложений предложения по усовершенствованию теперь запрашивают конкретные архитектурные детали, такие как фреймворк агента, протоколы межкомпонентного общения, механизмы песочницы и реализации автоматических выключателей.
-
Обновления моделей OpenAI: Обновлено до серии моделей GPT-5.2 (gpt-5.2, gpt-5.2-pro, gpt-5-mini, gpt-5-nano, gpt-5, gpt-4.1). Удалены устаревшие модели (gpt-4o, gpt-4o-mini, o3, o3-mini, o4-mini).
-
Модели Anthropic Claude 4.5: Обновлено до серии Claude 4.5 (claude-sonnet-4-5, claude-haiku-4-5, claude-opus-4-5). Добавлен флажок "Включить расширенное мышление" для расширенных возможностей рассуждения на любой модели Claude. Увеличен максимальный токен до 32k (стандартный) и 48k (режим мышления).
-
Предварительный просмотр Google Gemini 3: Добавлены предварительные модели Gemini 3 (gemini-3-pro-preview, gemini-3-flash-preview) наряду с моделями Gemini 2.5. Поддержка режима расширенного мышления для моделей Gemini 3.
-
Обновления моделей Mistral: Обновлено до последних версионных моделей Mistral, включая Mistral Large 3, Medium 3.1, Small 3.2, Ministral 3 (8B/14B) и Magistral 1.2 (Medium/Small).
-
Новый логотип проекта: Обновлен брендинг с более чистым минималистичным дизайном щита и нейронной сети.
-
Исправление ошибки: Исправлена проблема, из-за которой вывод модели угроз исчезал после нажатия кнопки загрузки.
Версия 0.14.1
- Инфраструктура безопасности: Добавлено всестороннее автоматическое сканирование безопасности и ужесточение, включая:
- Рабочие процессы GitHub Actions для Bandit (безопасность Python), CodeQL (обнаружение уязвимостей), pip-audit (проверка зависимостей), Safety (уязвимости пакетов), Gitleaks (обнаружение секретов) и Trivy (сканирование образов Docker)
- SECURITY.md с процессом уведомления об уязвимостях (SLA подтверждения в течение 48 часов) и лучшими практиками безопасности
- Улучшенная конфигурация Docker с ужесточением безопасности, ограничениями ресурсов и готовым к производству docker-compose.yml
- Конфигурация Dependabot для автоматических еженедельных обновлений зависимостей
- Руководство по управлению секретами, готовое к производству (секреты Docker Swarm, облачные менеджеры секретов)
- Руководство по корпоративной эксплуатации: Добавлено всестороннее руководство по настройке STRIDE-GPT с учетом организационного контекста, включая средства контроля безопасности, требования соответствия, утвержденные технологические стеки и шаблоны развертывания для корпоративного использования.
Версия 0.14- Поддержка серии GPT-5: Добавлена полная поддержка моделей серии GPT-5 от OpenAI (gpt-5, gpt-5-mini, gpt-5-nano) во всех функциях моделирования угроз. Эти продвинутые модели рассуждений обеспечивают расширенные аналитические возможности с правильным выделением токенов как для внутреннего рассуждения, так и для генерации выходных данных.
- Интеграция Anthropic Claude 4: Добавлена поддержка новейших моделей Claude 4 от Anthropic (claude-opus-4-1-20250805, claude-opus-4-20250514 и claude-sonnet-4-20250514) с улучшенными возможностями.
- Поддержка GitHub Enterprise: Добавлена поддержка репозиториев GitHub Enterprise. Инструмент теперь автоматически определяет и настраивает соответствующий конечный точку API на основе URL репозитория, что упрощает анализ репозиториев, размещенных на частных экземплярах GitHub Enterprise. (Спасибо @danielpops за вклад!)
- Улучшенная интеграция моделей рассуждений: Обновлена обработка параметров для использования
max_completion_tokensвместо устаревшегоmax_tokensдля GPT-5 и других моделей рассуждений OpenAI, обеспечивая совместимость с последними требованиями API OpenAI. - Улучшенное отображение оценки DREAD: Убраны ограничения на обрезание описаний сценариев оценки DREAD, позволяя пользователям просматривать полные сценарии угроз в таблице оценки рисков вместо сокращенных версий с "...".
- Обновления безопасности: Обновлены зависимости для устранения уязвимостей безопасности, выявленных Snyk, включая обновления anyio, zipp, tornado, requests и urllib3.
- Обновления моделей Mistral: Добавлена поддержка новейших моделей Mistral, включая Magistral Medium/Small (модели рассуждений), Mistral Medium и Ministral 8B.
- Обновления моделей Groq: Обновлен выбор моделей Groq с OpenAI GPT-OSS (120B, 20B), сохранены Llama 3.3 70B и 3.1 8B, оставлен DeepSeek R1, добавлены Moonshot Kimi K2 и Qwen3 32B.
- Обновление Google Gemini 2.5 GA: Переход на общедоступные версии моделей Gemini 2.5 (Pro, Flash, Flash Lite) вместо предыдущих предварительных версий.
- Поддержка проекта: Добавлена кнопка "Купи мне кофе" на боковой панели, позволяющая пользователям поддержать дальнейшее развитие и сопровождение STRIDE GPT.
Версия 0.13
- Новые модели OpenAI: Добавлена поддержка новейших моделей OpenAI: gpt-4.1, o3 и o4-mini, при сохранении поддержки o3-mini. Эти модели рассуждений обеспечивают детальные аналитические возможности.
- Переход на новый Google GenAI SDK: Полный переход на новый SDK Google GenAI с удалением всех зависимостей от устаревшей библиотеки Google Generative AI. Переработана интеграция моделей Gemini (Google AI) во всех модулях для повышения согласованности и производительности.
- Расширенная поддержка моделей рассуждений: Расширена структура рассуждений для работы со всеми моделями рассуждений OpenAI (o1, o3, o3-mini, o4-mini) во всех функциях моделирования угроз, включая генерацию моделей угроз, деревьев атак, мер смягчения и оценок DREAD.
- Увеличенные лимиты токенов: Обновлены лимиты токенов для новых моделей, чтобы использовать их расширенный контекст, особенно для gpt-4.1, поддерживающего 1 миллион токенов, и o4-mini, поддерживающего 200K токенов.
- Расширенная мультимодальная поддержка: Загрузка и анализ изображений теперь работают с большим количеством моделей, включая Gemini 2.5, Claude 3 и Claude 4. Расширена поддержка анализа различных форматов изображений во всех моделях, способных к распознаванию изображений.
- Обновление до последних предварительных моделей Gemini: Переход на использование последних версий предварительных моделей Gemini для улучшенной производительности и возможностей.
Версия 0.12
- Интеграция Claude 3.7: Добавлена полная поддержка моделей Claude 3.7 от Anthropic во всех функциях моделирования угроз, включая инновационный "режим мышления", обеспечивающий более детальное рассуждение во время анализа.
- Улучшенный анализ репозиториев GitHub: Значительно улучшена функция анализа репозиториев GitHub с интеллектуальным выбором файлов, лучшей поддержкой языков программирования и отслеживанием прогресса во время анализа.
- Поддержка предварительной версии GPT-4.5: Добавлена поддержка предварительной модели GPT-4.5 от OpenAI с улучшенными рекомендациями по выбору модели и описаниями.
- Оптимизация производительности: Улучшена общая производительность приложения с лучшим отслеживанием использования токенов и системами предупреждений о приближении к лимитам токенов.
Версия 0.11
- Поддержка LM Studio Server: Добавлена возможность использования LM Studio Server в качестве провайдера моделей, позволяя пользователям запускать собственные локальные LLM с конечными точками API, совместимыми с OpenAI.
- Поддержка Google Gemini для деревьев атак: Добавлена возможность генерации деревьев атак с использованием моделей Google Gemini, расширяя доступные опции для пользователей.
- Поддержка новых моделей: Добавлена поддержка моделей рассуждений (o1 и o3-mini от OpenAI, DeepSeek R1 через Groq API) и недавно выпущенной Google Gemini 2.0 Flash для более быстрой инференции.
- Улучшенная генерация деревьев атак: Улучшена генерация деревьев атак с надежным парсингом JSON и преобразованием в диаграммы Mermaid, делая вывод более надежным и визуально привлекательным.
- Динамическое обнаружение моделей: Добавлено автоматическое обнаружение моделей для LM Studio Server, позволяя пользователям выбирать из доступных моделей в своих локальных экземплярах.
- Улучшенная генерация моделей угроз: Улучшены инструкции и промпты для генерации моделей угроз для получения более полных и действенных результатов.
- Поддержка структурированного вывода: Улучшена обработка JSON-вывода во всех провайдерах моделей для обеспечения надежной генерации моделей угроз и оценок DREAD.
- Улучшения пользовательского интерфейса: Обновлен пользовательский интерфейс для поддержки новых конфигураций моделей и улучшенных предупреждающих сообщений об ограничениях локальных LLM.
Версия 0.10
- Анализ репозиториев GitHub: STRIDE GPT теперь поддерживает автоматический анализ репозиториев GitHub. Пользователи могут указать URL репозитория GitHub, и инструмент проанализирует README и ключевые файлы для создания более комплексной модели угроз.
- Поддержка переменных окружения: Добавлена поддержка загрузки ключей API и других конфигураций из переменных окружения, повышая безопасность и удобство развертывания.
- Улучшенная обработка ошибок: Улучшены механизмы обработки ошибок и повторных попыток для вызовов API для повышения надежности.
- Улучшения пользовательского интерфейса: Обновлен пользовательский интерфейс для поддержки новых функций и улучшения общего пользовательского опыта.
Версия 0.9
Основные моменты выпуска:
- Mistral Client v1.0: STRIDE GPT теперь использует v1.0 клиента Mistral, что решает критические изменения, внесенные в последней версии API Mistral. Это гарантирует, что пользователи STRIDE GPT могут продолжать использовать API Mistral для задач моделирования угроз.
Версия 0.8.1
Этот выпуск добавил поддержку следующих моделей:
-
GPT4o mini: Я добавил поддержку недавно выпущенной модели GPT4o mini от OpenAI. GPT4o mini — это экономичная небольшая модель, которая по-прежнему обеспечивает высококачественные ответы для задач моделирования угроз.
-
Gemini 1.5 Pro (стабильная): Пользователи теперь могут выбирать между стабильной и предварительной версиями модели Gemini 1.5 Pro.
Версия 0.8
Основные моменты выпуска:
-
Оценка рисков DREAD: STRIDE GPT теперь поддерживает оценку рисков DREAD, позволяя пользователям назначать оценки риска выявленным угрозам на основе модели DREAD. Эта функция обеспечивает более комплексную оценку угроз и помогает расставить приоритеты для мер смягчения.
-
Тестовые сценарии Gherkin: Пользователи теперь могут генерировать тестовые сценарии Gherkin на основе выявленных угроз. Эта функция помогает преодолеть разрыв между моделированием угроз и тестированием, гарантируя, что соображения безопасности интегрированы в процесс тестирования.
-
Улучшения пользовательского интерфейса: Я обновил пользовательский интерфейс, сделав его более удобным для навигации и взаимодействия с приложением и его функциями.
Версия 0.7
Основные моменты выпуска:
- Мультимодальное моделирование угроз: STRIDE GPT теперь поддерживает мультимодальное моделирование угроз с использованием моделей GPT-4o и GPT-4-Turbo от OpenAI. Пользователи могут предоставить изображение диаграммы архитектуры, блок-схемы или других визуальных представлений своего приложения для улучшения процесса моделирования угроз.
- Интеграция Google AI: Я добавил поддержку Gemini 1.5 Pro через Google AI API. Обратите внимание, что Gemini не всегда последовательно генерирует JSON-вывод, поэтому возможно, придется повторить некоторые запросы. Кроме того, деревья атак не могут быть сгенерированы с использованием моделей Google AI из-за ограничений безопасности Google.
- Рефакторинг кодовой базы: Я переработал некоторые части кодовой базы для улучшения сопровождаемости и читаемости. Это должно упростить добавление новых функций и улучшений в будущих выпусках.
- Исправления ошибок: Незначительные исправления ошибок и улучшения обработки ошибок.
Версия 0.6
Основные моменты выпуска:
-
Интеграция Mistral API: Пользователи теперь могут выбирать использование LLM от Mistral AI для генерации моделей угроз, деревьев атак и предложений по смягчению. Это предоставляет альтернативу моделям GPT от OpenAI, предлагая большую гибкость и выбор для пользователей.
-
Уточненные промпты: С увеличением числа людей, использующих STRIDE GPT для работы, я обновил шаблоны промптов для модели угроз, чтобы стимулировать LLM к генерации более полных выходных данных. Теперь пользователи должны видеть множественные угрозы, выявленные в каждой категории STRIDE.
-
Публичная дорожная карта: Я создал публичную дорожную карту для обеспечения видимости предстоящих функций и улучшений.
-
Улучшения пользовательского интерфейса: Я внес небольшие обновления в интерфейс для поддержки новой интеграции Mistral API и улучшения общего пользовательского опыта.
Версия 0.5
Основные моменты выпуска:
- Образ Docker-контейнера: Чтобы упростить развертывание STRIDE GPT в публичных и частных облаках, инструмент теперь доступен как образ Docker-контейнера на Docker Hub.
Версия 0.4
Основные моменты выпуска:
- Интеграция новых моделей GPT: Приложение теперь поддерживает новейшие модели "gpt-4-1106-preview" и "gpt-3.5-turbo-1106", предлагая расширенные возможности и более точные ответы для моделирования угроз и генерации деревьев атак.
- Прямые вызовы OpenAI API: STRIDE GPT теперь делает прямые вызовы к OpenAI API, чтобы использовать недавно введенный JSON-режим. Это должно значительно снизить вероятность синтаксических ошибок при генерации моделей угроз.
- Уточненная генерация деревьев атак: Процесс генерации деревьев атак был переработан для повышения надежности, минимизации синтаксических ошибок при генерации диаграмм Mermaid и улучшения общего качества визуализаций.
- Новый логотип и цветовая схема: Обновленная цветовая схема и новый логотип (сгенерированный DALL·E 3).
- Продолжение исправлений ошибок и улучшений производительности: Я внес небольшое количество дополнительных обновлений для устранения существующих ошибок и оптимизации приложения для лучшей производительности, обеспечивая более плавный и эффективный пользовательский опыт.
Версия 0.3
Основные моменты выпуска:
- Меры смягчения угроз: STRIDE GPT теперь может предлагать потенциальные меры смягчения для угроз, выявленных на этапе моделирования угроз. Это помогает пользователям разрабатывать стратегии предотвращения или минимизации воздействия выявленных угроз.
- Загружаемый вывод: Пользователи теперь могут загружать сгенерированную модель угроз, дерево атак и меры смягчения в виде файлов Markdown непосредственно из приложения. Это упрощает обмен и документирование сгенерированных выходных данных.
- Улучшенный пользовательский интерфейс: Я дополнительно доработал пользовательский интерфейс для обеспечения более плавного и интуитивного пользовательского опыта. Макет приложения был оптимизирован для лучшей читаемости и удобства использования.
- Обновленные модели GPT: STRIDE GPT теперь поддерживает последние версии 0613 моделей GPT-3.5-turbo и GPT-4. Эти обновленные модели обеспечивают улучшенную производительность и повышенный контроль над генерируемым выводом.
- Исправления ошибок и улучшения производительности: Я устранил несколько ошибок и внес улучшения производительности для обеспечения более стабильного и отзывчивого приложения.
Версия 0.2
Основные моменты выпуска:
- Генерация деревьев атак: В дополнение к генерации моделей угроз, STRIDE GPT теперь может генерировать деревья атак для ваших приложений на основе предоставленных данных. Это помогает пользователям лучше понять потенциальные пути атак для своих приложений.
- Визуализация деревьев атак: Это экспериментальная функция, позволяющая пользователям визуализировать сгенерированное дерево атак непосредственно в приложении с помощью Mermaid.js. Это обеспечивает более интерактивный опыт в интерфейсе STRIDE GPT.
- Поддержка модели GPT-4: STRIDE GPT теперь поддерживает использование модели GPT-4 от OpenAI при условии, что у пользователя есть доступ к API GPT-4. Это позволяет пользователям использовать последние достижения технологии GPT для генерации более точных и комплексных моделей угроз и деревьев атак.
- Улучшенная компоновка и организация: Я перестроил макет приложения, чтобы сделать его более удобным для навигации и использования. Ключевые разделы, такие как "Модель угроз" и "Дерево атак", теперь организованы в свертываемые разделы для более чистого и интуитивного пользовательского опыта.
Версия 0.1
Первый выпуск приложения.
Установка
Вариант 1: pip (только CLI)```bash
pip install stride-gpt
Это устанавливает команду `stride-gpt`. CLI и веб-интерфейс Streamlit теперь являются отдельными продуктами — `pip install stride-gpt` даёт вам компактный CLI без компонентов Streamlit. Чтобы запустить веб-интерфейс из исходного кода, смотрите Вариант 2 ниже.
### Вариант 2: Из исходного кода
1. Клонируйте репозиторий:
```bash
git clone https://github.com/mrwadams/stride-gpt.git
cd stride-gpt
```
2. Установите с помощью [uv](https://docs.astral.sh/uv/) (рекомендуется — `uv.lock` является единственным источником истины для зависимостей): ```bash
# CLI plus the Streamlit web UI deps
uv sync
Или установите только CLI с помощью pip: ```bash pip install -e .
3. (Необязательно) Настройте переменные окружения: ```bash
cp .env.example .env
Отредактируйте .env, чтобы добавить ваши API-ключи — или настройте их позже, запустив stride-gpt и используя команду /config в интерактивном REPL, или через Streamlit UI.
Вариант 3: Docker (web UI)
Веб-интерфейс Streamlit поставляется в виде Docker-образа:```bash docker pull mrwadams/stridegpt:latest
Для CLI, используйте `pip install stride-gpt` — нет отдельного образа CLI. Если вам нужна изолированная CLI, создайте свою на основе минимального базового образа Python.
## Структура репозитория
STRIDE-GPT организован как небольшой монорепозиторий: одна общая библиотека Python и одно или несколько приложений, которые её используют.```
stride-gpt/
├── stride_gpt/ # shared library + Python CLI (core, agent loop, prompts, schemas, models)
├── apps/
│ └── web/ # Streamlit web UI
├── tests/ # pytest suite
└── pyproject.toml # single project file; web UI deps live in the `web` dependency-group
Директория apps/ предназначена для дополнительных развертываемых фронтендов — например, будущий CLI на Node/TypeScript будет располагаться рядом с apps/web/. Сам Python CLI находится в stride_gpt/cli.py, так как он тесно связан с общей библиотекой.
Использование
CLI
Агентный анализ кодовой базы — агент автономно исследует код, планирует свой анализ и создает модель угроз STRIDE:```bash
Analyze the current directory
stride-gpt analyze .
Specify a model and auto-approve the analysis plan
stride-gpt analyze ./my-app --worker-model anthropic/claude-sonnet-4-6 -y
Export as JSON, SARIF, or browser-viewable HTML
stride-gpt analyze . -o report.json -f json # also writes report.html alongside stride-gpt analyze . -o report.sarif -f sarif stride-gpt analyze . -o report.html -f html
> Каждый анализ также автоматически сохраняет JSON и HTML-компаньон в `~/.stride-gpt/reports/analyze/`, так что просматриваемый в браузере вид всегда в одном клике, даже если вы запускаете без `-o`.
> **Примечание о стоимости:** Агентный анализ тщателен — агент совершает множество вызовов LLM и читает много файлов по ходу исследования. Использование токенов и стоимость масштабируются в зависимости от размера кодовой базы и выбранной модели, а полный запуск на большом репозитории с использованием передовой модели может быть дорогим. Установите лимиты расходов в панели управления вашего провайдера перед запуском и рассмотрите более быстрые/дешёвые модели для первых проходов.
**Быстрый одноразовый режим** — создайте модель угроз из текстового описания (как в Streamlit UI, но в терминале):```bash
# Read description from a file
stride-gpt quick -i app-description.txt
# Pipe from stdin
echo "A web API that processes payments..." | stride-gpt quick
Интерактивная REPL — запустить интерактивную сессию с автодополнением табуляцией и историей:```bash stride-gpt
В REPL введите `/help`, чтобы увидеть доступные команды и флаги. Версия отображается под ASCII-баннером при запуске. Полный справочник команд и сочетаний клавиш см. в [шпаргалке по интерактивному REPL](#interactive-repl-cheat-sheet) ниже.
#### Шпаргалка по интерактивному REPL
Запустите REPL командой `stride-gpt` (без аргументов), затем используйте эти команды и сочетания клавиш.
**Команды** — введите слеш-команду в приглашении:
| Команда | Что делает |
|---------|------------|
| `/analyze [path]` | Анализирует кодовую базу на угрозы STRIDE (подойдет и просто путь к каталогу) |
| `/quick` | Быстрая модель угроз из текстового описания |
| `/reports` | Список предыдущих отчетов анализа (`/reports <n>` просматривает один) |
| `/config` | Просмотр или изменение настроек (модель, провайдер, ключи API) |
| `/help` | Показывает доступные команды, флаги и примеры |
| `/quit` | Выход (синонимы: `/exit`, `/q`) |
`/analyze`, `/quick` и `/reports` принимают флаги: `-o`/`--output <path>`, `-f`/`--format <markdown\|json\|sarif\|html>`, `-y`/`--yes` и `-i`/`--input <path>` (для `/quick`). Введите `/help` для получения полного списка.
**Сочетания клавиш:**
| Клавиша | Действие |
|---------|----------|
| `Tab` | Завершение слеш-команд и путей к файлам |
| `↑` / `↓` | Прокрутка истории команд |
| `→` / `End` | Принять полупрозрачное предложение из истории |
| `Ctrl+L` | Очистить экран и буфер прокрутки |
| `Ctrl+C` / `Ctrl+D` | Выход из REPL |
**Проверьте установленную версию:**```bash
stride-gpt --version # prints e.g. "stride-gpt 0.19.0" and exits
Общие флаги:
| Флаг | Описание |
|---|---|
--version | Выводит установленную версию (stride-gpt <version>) и завершает работу |
-o, --output | Сохранить отчёт в файл |
-f, --format | Формат вывода: markdown (по умолчанию), json, sarif, html |
-i, --input | Читать описание приложения из файла (только quick) |
-y, --yes | Автоматически утвердить план анализа (только analyze) |
--worker-model | Модель уровня по умолчанию, обрабатывающая основную часть запросов (например, anthropic/claude-sonnet-4-6). Использует сохранённую конфигурацию, если не указан. |
--architect-model | Более мощная модель для планирования/синтеза (например, openai/gpt-5.4). Использует сохранённую конфигурацию, если не указан. |
--no-architect | Пропустить уровень архитектора для этого запуска; все вызовы обрабатывает worker. |
--app-type | Переопределить тип приложения, обнаруженный планировщиком (только analyze): auto (по умолчанию), web, genai, agentic. |
--max-llm-calls | Лимит общего количества вызовов LLM на обоих уровнях (только analyze; 0 = безлимитно). |
--max-tool-calls | Лимит общего количества выполнений инструментов (только analyze; 0 = безлимитно). |
Каждый уровень также принимает --worker-api-key / --worker-api-base / --worker-max-tokens (и их аналоги --architect-*). Выполните stride-gpt analyze --help или stride-gpt quick --help для получения полного списка.
Структурированные промежуточные артефакты — при использовании -o <path> вместе с отчётом записываются три JSON-файла для возможности аудита запуска или использования последующими инструментами:
| Файл | Содержимое |
|---|---|
<stem>.plan.json | AnalysisPlan, созданный архитектором — подсистемы, фокусные области, обнаруженный тип приложения (только analyze). |
<stem>.findings.json | Список SubsystemFinding по каждой подсистеме, сквозные угрозы и диаграмма потоков данных на уровне системы (только analyze). |
<stem>.run.json | RunManifest — модели, хэш промпта + конфигурации, ссылки, которые фактически загрузил агент, git SHA, версия, тайминги. Создаётся как для analyze, так и для quick. |
Флаг формата (-f) управляет только артефактом отчёта; сопутствующие файлы всегда в JSON. Пути к файлам в манифесте и результатах поиска заменяются (./… для файлов в рабочем каталоге, ~/… для файлов в $HOME), поэтому манифест можно безопасно передавать. Автоархив в ~/.stride-gpt/reports/{analyze,quick}/ не затрагивается — сопутствующие файлы создаются только при указании -o.
Просмотр предыдущих отчётов:```bash stride-gpt reports # List recent reports stride-gpt reports 1 # View report #1 stride-gpt reports 1 -o r.json -f json # Export a report
### Веб-интерфейс Streamlit
Веб-интерфейс является отдельным приложением от CLI. Запустите его с помощью:```bash
streamlit run apps/web/main.py
Откройте указанный URL в вашем браузере и следуйте инструкциям на экране.
Docker```bash
docker run -p 8501:8501 --env-file .env mrwadams/stridegpt
## Пример вывода
Каждый запуск `stride-gpt analyze` и `stride-gpt quick` по умолчанию создаёт отчёт в формате markdown (с JSON, SARIF и самостоятельным HTML-представлением, доступным через `-f`). Markdown группирует угрозы по подсистемам в таблицы STRIDE, добавляет сквозной раздел для угроз, охватывающих несколько компонентов, и завершается сводкой по запуску. Дополнительные столбцы (OWASP LLM/ASI, категория инсайдера, MITRE ATT&CK) отображаются только в том случае, если запуск их заполняет.
Ниже приведён markdown из запуска против вымышленного API платежей, чтобы вы могли увидеть формат вывода до запуска инструмента. Это реальная визуализация из движка отчётов, а не макет.
<details>
<summary>Образец модели угроз в markdown (нажмите, чтобы развернуть)</summary>````markdown
# STRIDE Threat Model: acme-payments-api
> Generated by STRIDE-GPT on 2026-07-16T09:42:00Z
## Overview
A Python FastAPI service that accepts card payments, stores customer profiles in PostgreSQL, and calls a third-party payment processor. Authentication is handled by JWT bearer tokens issued by an internal auth service; the API is internet-facing behind an API gateway.
## Data Flow Diagram
```mermaid
flowchart LR
Client[Client App] -->|HTTPS + JWT| Gateway[API Gateway]
Gateway --> API[Payments API]
API -->|SQL| DB[(PostgreSQL)]
API -->|HTTPS| Processor[Payment Processor]
Authentication & Authorization
Files Analyzed
app/auth/jwt.pyapp/auth/dependencies.py
Threats
| Threat Type | Scenario | Potential Impact | MITRE ATT&CK |
|---|---|---|---|
| Spoofing | An attacker forges a JWT using a weak or leaked signing secret to impersonate another customer. | Full account takeover and unauthorized access to stored payment methods. | T1550.001 (Application Access Token) |
| Elevation of Privilege | A standard user calls an admin-only refund endpoint that only checks authentication, not role. | Unauthorized refunds and financial loss. | T1068 (Exploitation for Privilege Escalation) |
Recommendations
- Enforce role checks on every privileged route via a shared dependency, not per-handler logic.
- Rotate and store the JWT signing secret in a managed secrets store rather than an env file.
Payments & Data Storage
Files Analyzed
app/payments/routes.pyapp/db/models.py
Threats
| Threat Type | Scenario | Potential Impact | MITRE ATT&CK |
|---|---|---|---|
| Information Disclosure | Full card numbers are logged in request debug logs when a payment fails. | PCI-DSS violation and exposure of cardholder data to anyone with log access. | T1552.001 (Credentials In Files) |
| Tampering | The payment amount is taken from a client-supplied field and not re-validated server-side against the order. | A user pays less than the order total by editing the request body. |
Recommendations
- Redact PANs before logging and route logs through a PCI-scoped sink.
- Derive the charge amount from the server-side order record, never the request body.
Cross-Cutting Threats
| Threat Type | Scenario | Potential Impact | MITRE ATT&CK | Affected Subsystems |
|---|---|---|---|---|
| Denial of Service | No rate limiting on the payment endpoint lets an attacker exhaust the processor quota and DB connections. | Legitimate payments fail during the attack; possible processor throttling. | T1499 (Endpoint Denial of Service) | Authentication & Authorization, Payments & Data Storage |
Summary
- Total threats identified: 5
- Subsystems analyzed: 2
- Cross-cutting threats: 1
- LLM calls: 34
- Tool calls: 58
- Architect model: OpenAI API/gpt-5.4
- Worker model: Anthropic API/claude-sonnet-4-6
</details>
`stride-gpt quick` создаёт ту же форму таблицы по текстовому описанию, свёрнутую в единую подсистему **Application** вместо результатов для каждой подсистемы.
## Рекомендации по безопасности
STRIDE GPT предназначен для локального однопользовательского развёртывания. При использовании инструмента:
### Защита ваших ключей API
**Ваши ключи API являются чувствительными учётными данными, которые могут повлечь расходы на вашем аккаунте.**
✅ **ДЕЛАЙТЕ:**
- Вводите ключи API через интерфейс (они остаются в вашей сессии браузера)
- Используйте файл .env для удобства на вашем личном компьютере
- Устанавливайте лимиты расходов в панели управления вашего LLM-провайдера
- Регулярно проверяйте использование API и расходы
- Очищайте сессию при работе на общих компьютерах
❌ **НЕ ДЕЛАЙТЕ:**
- Не помещайте файлы .env в систему контроля версий (они уже в .gitignore)
- Не делитесь скриншотами с видимыми ключами API
- Не запускайте STRIDE GPT на недоверенных/скомпрометированных системах
- Не передавайте свои ключи API другим
- Не игнорируйте неожиданные списания за API
### Вопросы конфиденциальности данных
Когда вы генерируете модели угроз, STRIDE GPT отправляет данные вашему LLM-провайдеру:
- Детали приложения (тип, методы аутентификации, архитектура)
- Описания системной архитектуры
- Загруженные диаграммы/изображения архитектуры
- Сгенерированные модели угроз и меры по их устранению
**Что это означает:**
- OpenAI, Anthropic, Google и др. могут записывать эти данные согласно своей политике конфиденциальности
- Рассмотрите возможность использования общих/вымышленных деталей системы для демонстраций
- Ознакомьтесь с политикой хранения данных и конфиденциальности вашего LLM-провайдера
- Для чувствительных систем рассмотрите:
- Использование локальных моделей (LM Studio)
- Использование провайдеров с более строгими гарантиями конфиденциальности
- Очистку описаний системы перед вводом
### Развёртывание для команды/организации
Если вы развёртываете STRIDE GPT для нескольких пользователей (не по умолчанию):
- Добавьте аутентификацию/авторизацию (не входит в базовую поставку)
- Используйте службу управления секретами для ключей API
- Размещайте за VPN или во внутренней сети
- Ознакомьтесь с документом [SECURITY.md](https://github.com/mrwadams/stride-gpt/blob/master/SECURITY.md) для дополнительных рекомендаций
- Учитывайте требования к местонахождению данных и соответствию нормативным требованиям
- Внедрите соответствующие средства контроля доступа для сгенерированных моделей угроз
### Безопасность зависимостей
Мы поддерживаем зависимости и отслеживаем уязвимости:
- Зависимости регулярно обновляются через Dependabot
- Автоматическая проверка безопасности выполняется при каждом коммите
- Уведомления о безопасности отслеживаются на вкладке GitHub Security
- Запустите `pip-audit` для проверки известных уязвимостей локально
См. [SECURITY.md](https://github.com/mrwadams/stride-gpt/blob/master/SECURITY.md) для полной информации о безопасности, включая автоматическое сканирование безопасности, отчётность об уязвимостях и практики безопасной разработки.
### Сообщение о проблемах безопасности
Нашли проблему безопасности? Пожалуйста, сообщите о ней ответственно:
- Создайте консультацию по безопасности через [личный репортаж об уязвимостях GitHub](https://github.com/mrwadams/stride-gpt/security/advisories/new)
- Не публикуйте проблемы безопасности в открытом доступе
- Мы подтвердим получение в течение 48 часов
- Исправления будут иметь приоритет и выпускаться быстро
## Вклад
Пулы запросов (pull requests) приветствуются. Для существенных изменений сначала откройте issue, чтобы обсудить, что вы хотите изменить.
## Лицензия
[MIT](https://choosealicense.com/licenses/mit/)
