SAST для 1С: статический анализ безопасности кода
- sast
- безопасность
- 1c
- аудит
SAST для 1С в MCP-1C: инструмент bulk_analyze ищет уязвимости 1С по 11 правилам SEC офлайн, расставляет приоритет по CVSS 3.1 с CWE и пишет SARIF для CI.
SAST для 1С это статический анализ исходного кода BSL на предмет уязвимостей без запуска конфигурации. В MCP-1C анализ безопасности 1С выполняет инструмент bulk_analyze: он проходит по всей кодовой базе сразу и среди прочего выдаёт аудит безопасности. Это возможность Профессиональной редакции, на карточке инструмента стоит соответствующий бейдж.
Аудит безопасности BSL опирается на 11 правил SEC: SQL-инъекции, небезопасные вызовы, утечки данных. Каждая находка привязана к объекту и строке кода, получает приоритет по CVSS и выгружается в SARIF для CI.
Что делает bulk_analyze
bulk_analyze это массовый анализ всей кодовой базы, в отличие от разбора одного модуля. У инструмента несколько действий:
| action | Что возвращает |
|---|---|
summary |
сводка по базе, общий балл техдолга |
findings |
антипаттерны и ошибки кода, 30 правил |
duplicates |
дубли кода через MinHash и LSH |
deadcode |
мёртвый код: неиспользуемые процедуры, переменные, параметры |
security |
аудит SEC, устаревший алиас |
metrics |
LOC, цикломатическая сложность, балл техдолга 0-100 |
trends |
динамика показателей между запусками |
Действие security помечено как устаревший алиас. Рекомендуемый способ запросить аудит безопасности это action: findings с category: security.
Какие уязвимости 1С ищет анализатор
Каждое SEC-правило размечено CWE-кодом, чтобы находку можно было связать с публичной классификацией слабостей. Несколько примеров из размеченных правил:
| Правило | CWE | Класс |
|---|---|---|
SEC006 |
CWE-863 | нарушение контроля доступа |
SEC009 |
CWE-943 | инъекция в язык запросов 1С |
SEC013 |
CWE-532 | утечка чувствительных данных в журнал |
TNT002 |
CWE-78 | внедрение команд ОС |
TNT003 |
CWE-22 | path traversal |
Сопоставление с CWE ведётся в коде, а не из внешней базы. Поэтому отчёт работает офлайн и не зависит от доступности NVD или MITRE. CWE (Common Weakness Enumeration) это список типовых слабостей ПО под управлением MITRE при поддержке CISA, OWASP это некоммерческий фонд по безопасности приложений. Рядом с находками приводятся ссылки на обе классификации.
Граница честности: правило SEC006 в версии v2.23.0 переработано так, чтобы давать меньше ложных срабатываний. Ложные срабатывания есть у любого статического анализатора, инструмент видит код, а не намерение, и каждое правило приходится калибровать отдельно.
Приоритизация по CVSS
Список из сотни находок без приоритета бесполезен. Поэтому начиная с v2.23.0 каждая SEC-находка получает CVSS 3.1 Base Score, severity и vector string. Vector привязан к правилу в YAML-метадате, а score вычисляется из vector по формуле CVSS 3.1 Base, без Temporal и Environmental. Если у правила vector не размечен, score не появляется, но находка остаётся с базовой severity по уровню правила.
Качественная шкала severity совпадает с официальной шкалой FIRST:
| Severity | Base Score |
|---|---|
| None | 0.0 |
| Low | 0.1-3.9 |
| Medium | 4.0-6.9 |
| High | 7.0-8.9 |
| Critical | 9.0-10.0 |
Используется именно 3.1, а не 4.0. Причина практическая: многие публичные реестры уязвимостей, статанализаторы и SIEM по-прежнему работают с 3.1-вектором.
Формат отчёта по находкам безопасности задаётся параметром cvss_format при action: findings и category: security:
| Значение | Поведение |
|---|---|
auto |
по умолчанию, группировка по CVSS-критичности |
grouped |
всегда CVSS-группировка |
flat |
плоский список |
Подавление находок
Когда находка разобрана и признана неактуальной, её можно подавить прямо в коде комментарием:
// audit:ignore SEC009 -- параметр приходит из константы, конкатенация безопасна
Запрос.Текст = "ВЫБРАТЬ * ИЗ " + ИмяТаблицы;
Поддерживается блочная форма // audit:ignore-begin ... // audit:ignore-end и срок действия [expires ГГГГ-ММ-ДД]. Подавленные находки по умолчанию не учитываются в сводках. В SARIF они помечаются массивом suppressions[], а по флагу include_suppressed возвращаются в ответе отдельной помеченной секцией, то есть не скрываются совсем, а показываются как осознанно отключённые. Подавление находок появилось в v2.23.0 и доступно в Профессиональной редакции.
Использование suppressions[] соответствует стандарту: SARIF 2.1.0 это формат OASIS, и свойство suppressions на объекте result как раз предназначено для метаданных о намеренно подавленных находках.
Соответствие требованиям: справочно
В аудите безопасности рядом со ссылками на CWE и OWASP приводятся справочные сопоставления находок с мерами ГОСТ Р 57580.1 и приказа ФСТЭК России N 21. ГОСТ Р 57580.1-2017 это национальный стандарт по защите информации финансовых организаций, приказ ФСТЭК N 21 утверждает состав мер по безопасности персональных данных в ИСПДн.
Важно понимать рамки: это справочная информация для оценки и приоритизации, она не является сертификацией или подтверждением соответствия. Сопоставление появилось в v2.22.0 и уточнено в v2.23.0.
SARIF и CI
В SARIF-файле свойство security-severity со строковым значением CVSS Base Score ставится на объект правила. GitHub Code Scanning читает это поле и сам определяет критичность результата, без дополнительной настройки CI. CWE и OWASP попадают в SARIF не отдельными свойствами, а тегами таксономии, например external/cwe/cwe-94 и owasp-top10-2021/a03-injection. Поля cvss_vector и cwe относятся к JSON-ответу с находками, а не к SARIF-файлу.
{
"properties": {
"security-severity": "9.8",
"tags": [
"security",
"external/cwe/cwe-94",
"owasp-top10-2021/a03-injection"
]
}
}
Как запустить
bulk_analyze не работает без предварительно построенного кэша. На карточке инструмента прямо указано требование: --dump плюс --build-bulkanalysis. Поскольку аудит безопасности это функция Профессиональной редакции, запускается он бинарником mcp-1c-pro.
- Построить кэш массового анализа один раз:
mcp-1c-pro --dump /path/to/config-dump --build-bulkanalysis
- Подключить сервер к MCP-клиенту по stdio. Транспорт по умолчанию это stdio: клиент сам запускает бинарник и общается с ним через stdin и stdout, отдельные порты и HTTP не нужны. Формат конфига для Claude Desktop:
{
"mcpServers": {
"mcp-1c": {
"command": "/usr/local/bin/mcp-1c-pro",
"args": [
"--base", "http://localhost:8080/hs/mcp-1c",
"--dump", "/path/to/config-dump",
"--user", "Администратор",
"--password", ""
]
}
}
}
После этого в чате доступен bulk_analyze: запрос аудита это action: findings с category: security, группировку задаёт cvss_format, подавленные находки достаются флагом include_suppressed.
Граница честности: точная CLI-сигнатура --build-bulkanalysis со всеми дополнительными флагами и путём SARIF-файла в наших публичных доках раскрыта не полностью, и отдельного флага экспорта SARIF именно для аудита безопасности там не названо. Конкретные пути и имена флагов сверяйте с актуальной документацией или выводом самого бинарника, не подставляйте наугад.
Один модуль и переиспользование результата
Если нужен глубокий разбор не всей базы, а одного модуля, есть action: explain в инструменте code_analyze с шестью анализаторами: сложность, ошибки, стиль, производительность, безопасность, совместимость.
Результаты аудита безопасности переиспользуются для тестов: команда --build-testgen формирует Vanessa .feature сценарии для taint-находок с критичностью CVSS не ниже Medium по правилу TG020. Это тоже возможность Профессиональной редакции.
Где это в редакциях
В прайсе строка аудита безопасности отмечена для Профессиональной редакции (и для Корпоративной, которая в разработке), у Открытой и Расширенной стоит прочерк. Отдельными строками идут справочные меры ГОСТ Р 57580 и ФСТЭК-21 в аудите, а также подавление находок через audit:ignore, и обе строки доступны в тех же редакциях.
Профессиональную редакцию можно проверить на 14-дневном пробном периоде со всеми функциями тарифа. Полный список инструментов смотрите в документации, сравнение редакций и цены на странице тарифов, а общий обзор продукта на главной.