Модуль корпоративной безопасности¶
Содержание¶
- Обзор
- Возможности
- 1. Логирование запросов/ответов LLM
- 2. Интеграция с SIEM
- 3. DLP (предотвращение утечки данных)
- 4. Интеграция с HashiCorp Vault
- Архитектура
- Конфигурация
- Включение модуля безопасности
- Полная конфигурация (config.yaml)
- Переменные окружения
- Примеры использования
- Базовое использование (автоматическое)
- Ручная обертка безопасности
- Только сканирование DLP
- Отправка событий в SIEM
- Шаблоны DLP
- Встроенные шаблоны
- Пользовательские шаблоны
- Таблицы базы данных
- llm_audit_log
- dlp_events
- Форматы событий SIEM
- SysLog (RFC 5424)
- CEF
- LEEF
- Интеграция через вебхуки
- Рекомендации по безопасности
- Соответствие требованиям
- Расширенные функции безопасности
- 5. Сканер безопасности на основе файлов
- 6. Сканер с проверкой заражения данных
- 7. Проверки укрепления безопасности по MITRE D3FEND
- 8. Генератор отчетов по безопасности
- 9. Решатель контекста CPG
- 10. Движок автоисправлений
- Структура модуля безопасности
- Краткое руководство
- 1. Включение функций безопасности
- 2. Запуск аудита безопасности
- 4. Интеграция с CI/CD
- См. также
Обзор¶
CodeGraph включает модуль безопасности корпоративного уровня для защиты конфиденциальных данных при использовании внешних поставщиков LLM (GigaChat, Yandex AI, OpenAI). Этот модуль обеспечивает соответствие требованиям защиты данных и предоставляет расширенные возможности аудита.
Возможности¶
1. Журналирование запросов и ответов LLM¶
- Полная аудиторская запись всех взаимодействий с LLM
- Настройка маскирования промптов перед записью в лог
- Метрики использования токенов и задержки
- Хранение в базе данных с политиками хранения
2. Интеграция с SIEM¶
Потоковая передача логов в корпоративные системы SIEM в реальном времени: - SysLog (RFC 5424) — Стандартный syslog со структурированными данными - CEF (Common Event Format) — Для интеграции с ArcSight - LEEF (Log Event Extended Format) — Для интеграции с IBM QRadar
3. DLP (предотвращение утечки данных)¶
Сканирование по шаблонам для предотвращения утечек данных: - Обнаружение учётных данных — Ключи API, пароли, приватные ключи - Обнаружение персональных данных (ПДн) — Электронная почта, телефоны, номера кредитных карт, ИНН/СНИЛС - Пути к исходному коду — Внутренние пути, строки подключения - Пользовательские ключевые слова — Чёрные списки, специфичные для организации
Настройка действий для каждой категории:
- BLOCK — Полностью отклонить запрос
- MASK — Заменить конфиденциальные данные на [REDACTED]
- WARN — Зарегистрировать предупреждение, но разрешить запрос
- LOG_ONLY — Записать в лог только для аудита
4. Интеграция с HashiCorp Vault¶
Безопасное управление секретами: - Динамическое получение учётных данных - Поддержка нескольких методов аутентификации (Token, AppRole, Kubernetes) - Автоматическая ротация секретов - Кеширование с ограничением времени жизни (TTL)
Архитектура¶
┌─────────────────────────────────────────────────────────────────┐
│ Пользовательский запрос │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ SecureLLMProvider │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ Сканер DLP │ │ Фильтр │ │ Журнал запросов к │ │
│ │ (до/после) │ │ контента │ │ LLM (БД + SIEM) │ │
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐
│ Действия DLP│ │ BaseLLMProv. │ │ Отправка в SIEM │
│ BLOCK/MASK │ │ (GigaChat) │ │ ┌────┐┌────┐┌────┐ │
│ /WARN/LOG │ │ │ │ │Sys ││CEF ││LEEF│ │
└──────────────┘ └──────────────┘ │ │Log ││ ││ │ │
│ │ └────┘└────┘└────┘ │
▼ └──────────────────────┘
┌──────────────┐ │
│ Вебхук DLP │ ▼
│ (внешний) │ ┌──────────────┐
└──────────────┘ │ SIEM │
│ (Splunk/ │
┌──────────────┐ │ QRadar) │
│ HashiCorp │◄── Ротация секретов └──────────────┘
│ Vault │
└──────────────┘
Конфигурация¶
Включение модуля безопасности¶
Установите переменные окружения или обновите файл config.yaml:
export SECURITY_ENABLED=true
export SIEM_ENABLED=true
export DLP_ENABLED=true
Полная конфигурация (config.yaml)¶
security:
# Главный переключатель
enabled: true
# Логирование LLM
llm_logging:
enabled: true
log_prompts: true
redact_prompts: true
max_prompt_length: 2000
log_responses: true
log_token_usage: true
log_latency: true
log_to_database: true
# SIEM
siem:
enabled: true
syslog:
enabled: true
protocol: "tls" # udp, tcp, tls
host: "siem.company.com"
port: 6514
facility: 16 # local0
app_name: "codegraph"
cef:
enabled: true
host: "arcsight.company.com"
port: 514
leef:
enabled: false
# DLP
dlp:
enabled: true
pre_request:
enabled: true
default_action: "WARN"
post_response:
enabled: true
default_action: "MASK"
categories:
credentials:
enabled: true
action: "BLOCK"
severity: "critical"
pii:
enabled: true
action: "MASK"
severity: "high"
webhook:
enabled: true
endpoint: "https://dlp.company.com/api/alerts"
notify_on: ["BLOCK", "WARN"]
# Vault
vault:
enabled: true
url: "https://vault.company.com:8200"
auth_method: "approle"
secrets_mount_point: "secret"
llm_secrets_path: "codegraph/llm"
Переменные окружения¶
| Переменная | Описание | По умолчанию |
|---|---|---|
| SECURITY_ENABLED | Включить модуль безопасности | false |
| SIEM_ENABLED | Включить интеграцию с SIEM | false |
| SIEM_SYSLOG_HOST | Хост сервера SysLog | localhost |
| SIEM_SYSLOG_PORT | Порт сервера SysLog | 514 |
| SIEM_CEF_HOST | Хост сервера CEF | localhost |
| SIEM_LEEF_HOST | Хост сервера LEEF | localhost |
| DLP_ENABLED | Включить сканирование DLP | true |
| DLP_WEBHOOK_URL | Конечная точка вебхука DLP | — |
| DLP_WEBHOOK_AUTH | Заголовок авторизации вебхука DLP | — |
| VAULT_ENABLED | Включить интеграцию с Vault | false |
| VAULT_ADDR | URL сервера Vault | http://localhost:8200 |
| VAULT_TOKEN | Токен Vault | — |
| VAULT_ROLE_ID | Идентификатор роли AppRole | — |
| VAULT_SECRET_ID | Секретный идентификатор AppRole | — |
Примеры использования¶
Базовое использование (автоматическое)¶
Безопасность обеспечивается автоматически при включении:
from src.llm import create_llm_provider
# Поставщик автоматически оборачивается в защитный слой {#provider-is-automatically-wrapped-with-security-layer}
provider = create_llm_provider()
# Теперь все запросы фильтруются и записываются в лог {#all-requests-are-now-filtered-and-logged}
response = provider.generate(
system_prompt="Вы — аналитик кода",
user_prompt="Проанализируйте эту функцию",
)
Ручная обертка безопасности¶
from src.llm import GigaChatProvider
from src.security import get_security_config, SecureLLMProvider
# Создание базового поставщика {#create-base-provider}
base_provider = GigaChatProvider(config)
# Оборачивание в защитный слой {#wrap-with-security}
secure_provider = SecureLLMProvider(
wrapped_provider=base_provider,
config=get_security_config()
)
# Использование защищённого поставщика {#use-secure-provider}
response = secure_provider.generate(
system_prompt="Проанализируй код",
user_prompt="def process_payment(card_number='4111111111111111')...",
_user_id="user-123", # Необязательно: контекст пользователя
_ip_address="192.168.1.100", # Необязательно: IP для аудита
)
Только сканирование DLP¶
from src.security.dlp import ContentScanner
from src.security.config import get_security_config
config = get_security_config()
scanner = ContentScanner(config.dlp)
# Сканирование содержимого {#scan-content}
result = scanner.scan_request("API_KEY=sk-1234567890abcdef")
if result.blocked:
print(f"Контент заблокирован! Совпадения: {result.matches}")
elif result.has_matches:
print(f"Обнаружены конфиденциальные данные: {result.matches}")
# Использовать замаскированный контент
safe_content = result.modified_content
Отправка событий в SIEM¶
from src.security.siem import (
SecurityEvent, SecurityEventType,
init_siem_dispatcher
)
from src.security.config import get_security_config
# Инициализация диспетчера {#initialize-dispatcher}
dispatcher = init_siem_dispatcher(get_security_config().siem)
# Создание и отправка события {#create-and-dispatch-event}
event = SecurityEvent.create(
event_type=SecurityEventType.DLP_BLOCK,
message="Учётные данные обнаружены в запросе LLM",
severity=3, # Ошибка
user_id="user-123",
request_id="req-456",
details={"pattern": "aws_key", "category": "credentials"}
)
dispatcher.dispatch(event)
Шаблоны DLP¶
Встроенные шаблоны¶
Учётные данные¶
api_key- Общие ключи APIaws_key- Идентификаторы ключей доступа AWS (AKIA…)aws_secret- Секретные ключи AWSprivate_key- Закрытые ключи в формате PEMpassword- Шаблоны паролейjwt_token- JSON Web Token (JWT)bearer_token- Токены аутентификации Bearerbasic_auth- Base64 строки аутентификации Basic
Персональные данные (русская локаль)¶
email- Адреса электронной почтыphone_ru- Российские номера телефоновcredit_card- Номера кредитных картinn- Российский ИННsnils- Российский СНИЛСpassport_ru- Номера российских паспортов
Исходный код¶
connection_string- Строки подключения к базам данныхinternal_path- Внутренние пути к файламip_address- IP-адреса
Пользовательские шаблоны¶
Добавьте пользовательские шаблоны через конфигурацию:
dlp:
categories:
custom:
enabled: true
action: "WARN"
severity: "medium"
patterns:
- name: "project_code"
regex: "PROJECT-[A-Z]{2,4}-\d{4,6}"
mask_with: "[PROJECT-ID]"
Таблицы базы данных¶
llm_audit_log¶
Содержит все взаимодействия с LLM:
| Столбец | Тип | Описание |
|---|---|---|
| request_id | UUID | Уникальный идентификатор запроса |
| user_id | UUID | Пользователь, отправивший запрос |
| provider | VARCHAR | Название поставщика LLM |
| model | VARCHAR | Название модели |
| system_prompt_hash | VARCHAR | SHA256 системного промпта |
| user_prompt_preview | TEXT | Предварительный просмотр промпта (с отредактированными данными) |
| response_preview | TEXT | Предварительный просмотр ответа |
| prompt_tokens | INT | Количество токенов в промпте |
| completion_tokens | INT | Количество токенов в ответе |
| latency_ms | FLOAT | Задержка запроса (в миллисекундах) |
| dlp_action | VARCHAR | Применённое действие DLP |
| dlp_categories | ARRAY | Категории DLP, совпавшие с запросом |
| timestamp | TIMESTAMP | Время запроса |
dlp_events¶
Детальные события срабатывания DLP:
| Столбец | Тип | Описание |
|---|---|---|
| request_id | UUID | Идентификатор запроса |
| action | VARCHAR | Принятое действие |
| category | VARCHAR | Категория DLP |
| pattern_name | VARCHAR | Имя совпавшего шаблона |
| severity | VARCHAR | Уровень серьёзности совпадения |
| timestamp | TIMESTAMP | Время события |
Форматы событий SIEM¶
SysLog (RFC 5424)¶
<134>1 2024-12-09T10:30:00.000Z codegraph.company.com codegraph - llm.dlp.block [llm@12345 requestId="req-123" userId="user-456" provider="GigaChat" action="BLOCK" category="credentials"] DLP BLOCK: 2 patterns in request
CEF¶
CEF:0|CodeGraph|CodeAnalysis|1.0|llm.dlp.block|DLP Block|7|rt=Dec 09 2024 10:30:00 src=192.168.1.100 suser=user-456 cs1=req-123 cs1Label=RequestID cs2=GigaChat cs2Label=Provider act=BLOCK cat=credentials
LEEF¶
LEEF:2.0|CodeGraph|CodeAnalysis|1.0|llm.dlp.block| devTime=Dec 09 2024 10:30:00 src=192.168.1.100 usrName=user-456 requestId=req-123 provider=GigaChat action=BLOCK category=credentials
Интеграция через вебхук¶
Формат полезной нагрузки вебхука DLP:
{
"alert_id": "a1b2c3d4e5f6",
"timestamp": "2024-12-09T10:30:00.000Z",
"action": "BLOCK",
"match_count": 2,
"categories": ["credentials"],
"patterns": ["api_key", "aws_key"],
"request_id": "req-123",
"user_id": "user-456",
"ip_address": "192.168.1.100",
"severity": "critical",
"context": {}
}
Рекомендации по обеспечению безопасности¶
- Включите TLS для подключений SIEM в рабочей среде
- Используйте AppRole или аутентификацию через Kubernetes для Vault (а не простые токены)
- Настройте соответствующие действия DLP — БЛОКИРОВКА для учетных данных, МАСКИРОВАНИЕ для персональных данных
- Настройте хранение логов в вашей системе SIEM для соответствия требованиям
- Мониторьте события DLP_BLOCK на предмет попыток несанкционированного копирования данных
- Регулярно обновляйте шаблоны для обнаружения новых форматов учетных данных
- Тестируйте шаблоны DLP перед развертыванием в рабочей среде
Соответствие требованиям¶
Модуль безопасности помогает выполнить требования следующих нормативных актов: - 152-ФЗ «О персональных данных» — обнаружение и маскировка персональных данных (ПДн) - ГОСТ Р 57580 — аудит действий и контроль доступа для финансовых организаций - PCI DSS — обнаружение номеров кредитных карт - Требования ФСТЭК — защита информации ограниченного доступа (с использованием пользовательских шаблонов)
Расширенные функции безопасности¶
5. Сканер безопасности на основе файлов¶
Быстрое сканирование на уровне файлов для оперативной оценки безопасности без построения CPG.
Использование¶
from src.security.file_scanner import FileSecurityScanner
scanner = FileSecurityScanner()
result = scanner.scan("/путь/к/проекту")
print(f"Критические: {result.critical_count}")
print(f"Высокий уровень: {result.high_count}")
for finding in result.findings:
print(f"{finding.severity}: {finding.description}")
print(f" Файл: {finding.file_path}:{finding.line_number}")
Использование через CLI¶
# Быстрое сканирование {#quick-scan}
python -m src.cli.security_audit quick --path ./myproject
# Полное сканирование с отчётом {#full-scan-with-report}
python -m src.cli.security_audit full --path ./myproject --format all
6. Сканер с проверкой заражения данных¶
Снижает количество ложных срабатываний за счёт анализа потока данных от источников к уязвимым местам с использованием CPG.
Концепция¶
Традиционное сопоставление шаблонов приводит к большому количеству ложных срабатываний. Сканер с проверкой заражения данных: 1. Выявляет потенциальные уязвимости с помощью шаблонов 2. Отслеживает путь данных от источников заражения (ввод пользователя) к уязвимым функциям (sink) 3. Сообщает только о проблемах, для которых подтверждён путь заражения
Источники заражения данных (Python/Django)¶
# Данные запроса Django {#django-request-data}
request.GET, request.POST, request.data
request.body, request.FILES, request.META
# Данные запроса Flask {#flask-request-data}
request.args, request.form, request.json
# Обычный ввод {#generic-input}
input(), raw_input(), sys.stdin, os.getenv()
# Ввод из файлов или сети {#filenetwork-input}
open(), read(), recv(), urlopen()
Опасные уязвимые места (sinks) по категориям¶
| Категория | Уязвимые места |
|---|---|
| SQL-инъекция | execute,raw,cursor.execute,RawSQL |
| Инъекция команд | os.system,subprocess.run,eval,exec |
| Обход пути (Path Traversal) | open,os.path.join,send_file |
| XSS | mark_safe,HttpResponse |
| Десериализация | pickle.loads,yaml.load,marshal.loads |
Использование¶
from src.security.taint_verified_scanner import TaintVerifiedScanner
from src.project_manager import ProjectManager
scanner = TaintVerifiedScanner(duckdb_path=ProjectManager.get_active_db_path())
# Проверка результатов, связанных с SQL-инъекцией {#verify-sql-injection-findings}
verified = scanner.verify_sql_injection_findings(raw_findings)
for finding in verified:
print(f"Подтверждено: {finding['description']}")
print(f"Путь заражения: {finding['taint_path']}")
7. Проверки усиления безопасности по MITRE D3FEND¶
Реализует все методы усиления безопасности исходного кода из MITRE D3FEND.
Поддерживаемые проверки¶
| D3FEND ID | Название | Описание |
|---|---|---|
| D3-VI | Инициализация переменных | Обнаружение неинициализированных переменных |
| D3-CS | Очистка учётных данных | Гарантия удаления учётных данных из памяти |
| D3-IRV | Проверка диапазона целых чисел | Проверка рисков переполнения целых чисел |
| D3-RN | Обнуление ссылок | Проверка очистки указателей после освобождения памяти |
| D3-TL | Проверка доверенных библиотек | Проверка использования безопасных функций библиотек |
| D3-VTV | Проверка типов переменных | Проверка безопасности типов |
| D3-MBSV | Проверка начала блока памяти | Проверка границ блоков памяти |
| D3-NPC | Проверка на null-указатели | Обнаружение отсутствующих проверок на null |
| D3-DLV | Проверка бизнес-логики | Проверка валидации бизнес-логики |
| D3-OLV | Проверка операционной логики | Проверка операционных ограничений |
Использование¶
from src.security.hardening import HardeningScanner
from src.project_manager import ProjectManager
scanner = HardeningScanner(duckdb_path=ProjectManager.get_active_db_path())
results = scanner.run_all_checks()
for result in results:
print(f"[{result.check.d3fend_id}] {result.check.d3fend_name}")
print(f" Нарушения: {len(result.violations)}")
print(f" Рекомендации: {result.check.remediation}")
Конфигурация¶
security:
hardening:
enabled: true
checks:
D3-VI: true # Инициализация переменных
D3-CS: true # Очистка учётных данных
D3-NPC: true # Проверка на null-указатели
severity_threshold: "medium" # Пропускать низкий уровень угроз
8. Генератор отчётов по безопасности¶
Генерация комплексных отчётов по безопасности в различных форматах.
Поддерживаемые форматы¶
| Формат | Назначение |
|---|---|
| JSON | Интеграция в CI/CD, программный доступ |
| Markdown | Документация, ручной анализ |
| SARIF | Оповещения безопасности GitHub, интеграция в IDE |
Языки¶
Поддержка локализации отчётов:
- Английский (en)
- Русский (ru)
Использование¶
from src.security.report_generator import SecurityReportGenerator
generator = SecurityReportGenerator(language="en")
# Генерация отчёта на основе результатов сканирования {#generate-report-from-scan-results}
report = generator.generate(
project_name="MyProject",
project_path="./myproject",
file_findings=file_scan.findings,
cpg_findings=cpg_scan.findings,
hardening_findings=hardening_results,
)
# Экспорт в разные форматы {#export-to-different-formats}
generator.export_json(report, "report.json")
generator.export_markdown(report, "report.md")
generator.export_sarif(report, "report.sarif")
Разделы отчёта¶
- Резюме — общее количество выявленных проблем
- Критические уязвимости — требуют немедленного устранения
- Высокий уровень угроз — необходимо устранить до развёртывания
- Соответствие D3FEND — результаты проверок усиления безопасности
- Соответствие OWASP Top 10 — статус pass/fail по категориям с тегами
OWASP-Axx - Пути потока заражения — Mermaid-диаграммы путей эксплуатации (источник → санитайзер → приёмник)
- Подробные уязвимости — полный список с OWASP-бейджем и рекомендациями по устранению
- Метрики — покрытие, точность, полнота
Возможности SARIF 2.1.0¶
codeFlowsсогласно SARIF 2.1.0 §3.36 для визуализации путей зараженияOWASP-Axxтеги на правилахreportingDescriptorдля маппинга соответствия- Таксономии инструмента ссылаются на таксономию OWASP Top 10 2021
9. Резолвер контекста CPG¶
Обогащает результаты анализа безопасности контекстом CPG для лучшего понимания.
Возможности¶
- Контекст вызовов (вызывающие/вызываемые функции)
- Пути потока данных
- Анализ потока управления
- Границы модулей
Использование¶
from src.security.cpg_context_resolver import CPGContextResolver
from src.project_manager import ProjectManager
resolver = CPGContextResolver(duckdb_path=ProjectManager.get_active_db_path())
# Обогащение результата контекстом {#enrich-finding-with-context}
enriched = resolver.enrich_finding(finding)
print(f"Вызывающие: {enriched['callers']}")
print(f"Поток данных: {enriched['data_flow_path']}")
print(f"Модуль: {enriched['module']}")
10. Движок автоисправлений¶
Автоматическая генерация исправлений безопасности для уязвимостей, обнаруженных анализом заражения данных. Сочетает шаблонные regex-исправления с генерацией кода через LLM.
Архитектура¶
Движок использует стратегию «сначала шаблон, затем LLM»:
- Шаблонное исправление — Сопоставление на основе регулярных выражений для 6 типов уязвимостей (SQL-инъекция, инъекция команд, переполнение буфера, форматная строка, обход пути, XSS). Уверенность: 0.7–0.9.
- Резервный вызов LLM — Когда шаблоны не совпадают, строится промпт с контекстом уязвимости (CWE, поток заражения, исходный код) и вызывается настроенный поставщик LLM. Уверенность ограничена на уровне 0.6.
- Валидация —
DiffValidatorпроверяет, что оригинальный код присутствует в реальном исходном файле и коэффициент изменений ниже 50%.
Маппинг CWE¶
| Категория приёмника | CWE ID | Тип уязвимости |
|---|---|---|
sql |
CWE-89 | SQL-инъекция |
command |
CWE-78 | Инъекция команд ОС |
file |
CWE-22 | Обход пути (Path Traversal) |
xss |
CWE-79 | Межсайтовый скриптинг (XSS) |
buffer |
CWE-120 | Переполнение буфера |
null |
CWE-476 | Разыменование NULL-указателя |
Использование через CLI¶
# Полный аудит с предложениями по исправлению
python -m src.cli.security_audit full --path ./myproject --autofix
Флаг --autofix запускает анализ заражения после сканирования и генерирует предложения по исправлению, отображаемые в виде таблицы Rich с диффами.
Инструмент MCP¶
Инструмент codegraph_autofix доступен для интеграции с IDE:
# Вызывается через протокол MCP
codegraph_autofix(
method_name="process_query", # Необязательно: фокус на конкретном методе
vulnerability_type="sql_injection", # Необязательно: фильтр по типу
cwe="CWE-89", # Необязательно: фильтр по CWE
)
Программное использование¶
from src.analysis.autofix.engine import AutofixEngine
engine = AutofixEngine(source_root="/path/to/project", dry_run=True)
results = engine.generate_fixes(taint_paths=paths)
for result in results:
print(f"[{result.strategy}] {result.cwe_id}: {result.fix.file_path}:{result.fix.line_number}")
print(f" Валидировано: {result.validated}, Уверенность: {result.fix.confidence}")
Конфигурация¶
# config.yaml → workflows.handlers.autofix
autofix:
enabled: true
context_lines_before: 10
context_lines_after: 10
llm_max_confidence: 0.6
llm_temperature: 0.1
llm_max_tokens: 2048
max_fixes_per_run: 20
Структура модуля безопасности¶
src/security/
├── __init__.py # Экспорты модуля
├── _base.py # Базовые классы (Severity, Category)
├── config.py # Конфигурация безопасности
│
├── dlp/ # Предотвращение утечки данных (DLP)
│ ├── patterns.py # Шаблоны DLP (учетные данные, персональные данные)
│ ├── scanner.py # Сканер содержимого
│ ├── actions.py # Действия DLP (BLOCK, MASK, WARN)
│ └── webhook.py # Вебхуки оповещений
│
├── siem/ # Интеграция с SIEM
│ ├── base_handler.py # Базовый класс обработчика
│ ├── syslog_handler.py
│ ├── cef_handler.py
│ ├── leef_handler.py
│ ├── buffer.py # Буферизация событий
│ └── dispatcher.py # Диспетчеризация между несколькими обработчиками
│
├── vault/ # HashiCorp Vault
│ ├── client.py # Клиент API Vault
│ └── secret_manager.py
│
├── llm/ # Безопасность LLM
│ ├── secure_provider.py # Обёртка SecureLLMProvider
│ └── request_logger.py # Аудит и логирование запросов
│
├── hardening/ # Усиление безопасности (D3FEND)
│ ├── base.py # Определения проверок
│ ├── d3fend_checks.py # Все проверки D3FEND
│ └── hardening_scanner.py
│
├── patterns/ # Шаблоны уязвимостей
│ ├── injection.py # Инъекции SQL/команд
│ ├── memory.py # Безопасность работы с памятью
│ ├── crypto.py # Криптографические проблемы
│ ├── auth.py # Ошибки аутентификации
│ ├── concurrency.py # Гонки данных (race conditions)
│ └── python_django.py # Специфичные для Python/Django
│
├── file_scanner.py # Сканирование на основе файлов
├── taint_verified_scanner.py # Анализ загрязнения (taint analysis)
├── cpg_context_resolver.py # Обогащение CPG
├── report_generator.py # Генерация отчётов
└── report_localizer.py # Поддержка интернационализации (i18n)
Краткое руководство по началу работы¶
1. Включение функций безопасности¶
# Переменные окружения {#environment-variables}
export SECURITY_ENABLED=true
export DLP_ENABLED=true
export SIEM_ENABLED=true
2. Запуск аудита безопасности¶
# Полный аудит со всеми проверками
python -m src.cli.security_audit full \
--path ./myproject \
--format all \
--verbose
# Полный аудит с предложениями по автоисправлению
python -m src.cli.security_audit full \
--path ./myproject \
--autofix
3. Просмотр отчётов¶
# Отчёты сохраняются в ./security_reports/ {#reports-are-saved-to-security-reports}
ls security_reports/
# security_audit_20241209_103000.json {#security-audit-20241209-103000json}
# security_audit_20241209_103000.md {#security-audit-20241209-103000md}
# security_audit_20241209_103000.sarif {#security-audit-20241209-103000sarif}
4. Интеграция с CI/CD¶
# .github/workflows/security.yml {#githubworkflowssecurityyml}
- name: Security Audit
run: |
python -m src.cli.security_audit full \
--path . \
--format sarif \
--output security.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: security.sarif
Смотрите также¶
- Руководство по CLI — использование CLI для аудита безопасности
- Руководство пользователя TUI — интерактивный сценарий безопасности
- Документация по API — конечные точки безопасности