Самостоятельное добавление сканеров
Шерлок предоставляет возможность самостоятельного добавления сканеров пользователем в случае, если нужный сканер не поддерживается "из коробки".
Добавление собственных сканеров возможно для следующих типов сканеров:
- Secrets
- SAST
- SCA
- Image Scan
- IaC
Шерлок сохраняет состояние процесса добавления нового сканера после каждого перехода между этапами. Помимо этого, для сохранения состояния можно нажать на кнопку Сохранить и выйти.
Поэтому, при необходимости, можно будет вернуться к добавлению сканера через некоторое время. Созданные наработки будут доступны в общем перечне сканеров и имеют метку Черновик.
Создание сканера
Основное
Цель этапа: указать общую информацию о добавляемом сканере, предоставить формата отчёта, который он генерирует.-
Для самостоятельного добавления сканера необходимо перейти в раздел Настройки системы -> Сканеры.
-
Выбрать тип сканера, который планируется добавить: Secrets, SAST, SCA, Image Scan или IaC.
к сведениюВыбранный тип можно будет поменять в следующем шаге.
-
Нажать кнопку Добавить:
-
Заполнить необходимые параметры в открывшемся окне:
- Название: название добавляемого сканера
- Тип: проверить, что указан корректный тип сканера: Secrets, SAST, SCA, Image Scan или IaC
- Логотип: выбрать цветовой индикатор для добавляемого сканера. Данный функционал будет реализован в одном из следующих релизов и в настоящее время недоступен
- Отчет: файл формата JSON до 10 МБ, генерируемый сканером
-
Нажать на кнопку Следующий шаг.
Выбор образа (только для Image Scan)
Цель этапа: указать информацию об анализируемом образе контейнера, доступную из отчета.
-
Заполнить необходимые параметры в открывшемся окне:
- Имя образа: путь до имени образа контейнера в отчете (на примере Grype это
source.target.userInput) - Дайджест: путь до уникального идентификатора образа контейнера (дайджеста) в отчете (на примере Grype это
source.target.ImageID)
- Имя образа: путь до имени образа контейнера в отчете (на примере Grype это
-
Нажать на кнопку Следующий шаг.
Путь к ИБ-дефектам
Цель этапа: указать раздел отчета, в котором собрана информация об ИБ-дефектах.
-
Заполнить необходимые параметры в открывшемся окне:
-
Путь к ИБ-дефектам: путь в отчете до массива, в котором содержится информация об ИБ-дефектах (на примере
SARIFэтоruns.0.results)к сведениюЗаписи
runs.[0].resultsиruns.[0].results.[*]являются эквивалентными.
-
-
Нажать на кнопку Следующий шаг.
Обогащение данными
Цель этапа: получить максимально возможное количество информации об ИБ-дефектах для дальнейшей работы с ними.Для примера рассмотрим отчет формата SARIF:
- Информация об ИБ-дефектах хранится по пути
runs.[0].results - У каждого ИБ-дефекта есть поле
ruleId- идентификатор правила, которое было использовано для его нахождения - При этом описание правил хранятся по пути
runs.[0].tool.driver.rules - У каждого правила есть поле
id - Шерлок может "связать"
runs.[0].resultsсruns.[0].tool.driver.rulesчерезruleIdиidсоответственно, чтобы при дальнейшем соотношении полей отчета и полей ИБ-дефекта в Шерлоке можно было получать информацию не только об ИБ-дефекте, но и о правиле
-
При необходимости обогащения данных нажать на кнопку Добавить (в противном случае - нажать кнопку Пропустить):
-
Заполнить необходимые параметры в открывшемся окне:
-
Путь к массиву, откуда забрать информацию: путь в отчете до массива, данные из которого связаны с массивом ИБ-дефектов и потребуются в дальнейшем для соотношения полей отчета и полей ИБ-дефекта в Шерлоке (на примере
SARIFэтоruns.0.tool.driver.rules- в этом массиве указано описание правил, рекомендации, CWE и т.д.):
-
-
Нажать на кнопку Подтвердить:
-
Выбрать поля из массива ИБ-дефектов и массива обогащённого элемента, через которые осуществляется их связь (на примере
SARIFэтоruleIdдля массива ИБ-дефектов иidдля массива правил - обогащённого элемента):
-
Нажать на кнопку Связать:
При необходимости процедуру обогащения можно повторять несколько раз для разных массивов с нужными данными.
- Нажать на кнопку Следующий шаг.
Маппинг полей
Цель этапа: соотнести данные из отчета сканера с полями, необходимыми Шерлоку для отображения их в таблице и карточке ИБ-дефекта.-
Реализовать соотношение полей из отчета с полями ИБ-дефектов в Шерлоке. Наборы полей будут варьироваться в зависимости от типа добавляемого сканера.
к сведениюПосле каждого завершенного соотношения полей необходимо нажать на кнопку Подтвердить.
При необходимости можно воспользоваться регулярными выражениями.
Например, информация о CWE в Шерлоке хранится в числовом формате. Некоторые сканеры возвращают строку вида
CWE-777. Использование регулярных выражений позволит преобразовать ее в777.- Secrets
- SAST
- SCA
- Image Scan
- IaC

Для добавления сканера типа Secrets необходимо реализовать соотношение полей отчета со следующими полями ИБ-дефекта в Шерлоке:
- Уязвимый файл (обязательное поле): файл, в котором был найден ИБ-дефект
- Строка с ИБ-дефектом (обязательное поле): номер строки, где был найден ИБ-дефект
- Фрагмент кода: исходный текст, где был найден ИБ-дефект
- CWE: перечень CWE
- Критичность: уровень критичности ИБ-дефекта. После выбора поля отчета, в котором указан уровень критичности ИБ-дефекта потребуется соотнести данные с уровнями критичности, доступными в Шерлоке:
- По умолчанию Шерлок сам найдет все уровни критичности из предоставленного отчета для соотношения данных. Они будут доступны в выпадающем списке
- Рекомендуется уточнить полный набор доступных значений уровней критичности сканера и в ручном режиме соотнести их с уровнями критичности Шерлока
- В противном случае можно указать уровень критичности "по умолчанию" (если отсутствует явное соответствие с уровнями критичности Шерлока)
- Правило: правило сканера, которое идентифицировало ИБ-дефект
- Описание: описание ИБ-дефекта, получаемое от сканера
- Как исправить: рекомендации по устранению ИБ-дефекта, получаемые от сканера
- Референсы: дополнительная информация об ИБ-дефекте, получаемая от сканера

Для добавления сканера типа SAST необходимо реализовать соотношение полей отчета со следующими полями ИБ-дефекта в Шерлоке:
- Уязвимый файл (обязательное поле): файл, в котором был найден ИБ-дефект
- Строка с ИБ-дефектом (обязательное поле): номер строки, где был найден ИБ-дефект
- Фрагмент кода: исходный текст, где был найден ИБ-дефект
- CWE: перечень CWE
- Критичность: уровень критичности ИБ-дефекта. После выбора поля отчета, в котором указан уровень критичности ИБ-дефекта потребуется соотнести данные с уровнями критичности, доступными в Шерлоке:
- По умолчанию Шерлок сам найдет все уровни критичности из предоставленного отчета для соотношения данных. Они будут доступны в выпадающем списке
- Рекомендуется уточнить полный набор доступных значений уровней критичности сканера и в ручном режиме соотнести их с уровнями критичности Шерлока
- В противном случае можно указать уровень критичности "по умолчанию" (если отсутствует явное соответствие с уровнями критичности Шерлока)
- Правило": правило сканера, которое идентифицировало ИБ-дефект
- Описание: описание ИБ-дефекта, получаемое от сканера
- Как исправить: рекомендации по устранению ИБ-дефекта, получаемые от сканера
- Референсы: дополнительная информация об ИБ-дефекте, получаемая от сканера

Для добавления сканера типа SCA необходимо реализовать соотношение полей отчета со следующими полями ИБ-дефекта в Шерлоке:
- Зависимость (обязательное поле): PURL зависимости, в которой найден ИБ-дефект
- Версия (обязательное поле): версия зависимости, в которой был найден ИБ-дефект
- Уязвимость (обязательное поле): уникальный идентификатор уязвимости
- Описание: описание ИБ-дефекта
- Критичность: уровень критичности ИБ-дефекта. После выбора поля отчета, в котором указан уровень критичности ИБ-дефекта потребуется соотнести данные с уровнями критичности, доступными в Шерлоке:
- По умолчанию Шерлок сам найдет все уровни критичности из предоставленного отчета для соотношения данных. Они будут доступны в выпадающем списке
- Рекомендуется уточнить полный набор доступных значений уровней критичности сканера и в ручном режиме соотнести их с уровнями критичности Шерлока
- В противном случае можно указать уровень критичности "по умолчанию" (если отсутствует явное соответствие с уровнями критичности Шерлока)
- Устранена: версия зависимости, в которой устранен ИБ-дефект
- Опубликована: дата публикации информации об уязвимости
- Изменена: дата изменения информации об уязвимости
- Референсы: дополнительная информация об ИБ-дефекте, получаемая от сканера
- CWE: перечень CWE

Для добавления сканера типа Image Scan необходимо реализовать соотношение полей отчета со следующими полями ИБ-дефекта в Шерлоке:
- Зависимость (обязательное поле): PURL зависимости, в которой найден ИБ-дефект
- Версия (обязательное поле): версия зависимости, в которой был найден ИБ-дефект
- Уязвимость (обязательное поле): уникальный идентификатор уязвимости
- Описание: описание ИБ-дефекта
- Критичность: уровень критичности ИБ-дефекта. После выбора поля отчета, в котором указан уровень критичности ИБ-дефекта потребуется соотнести данные с уровнями критичности, доступными в Шерлоке:
- По умолчанию Шерлок сам найдет все уровни критичности из предоставленного отчета для соотношения данных. Они будут доступны в выпадающем списке
- Рекомендуется уточнить полный набор доступных значений уровней критичности сканера и в ручном режиме соотнести их с уровнями критичности Шерлока
- В противном случае можно указать уровень критичности "по умолчанию" (если отсутствует явное соответствие с уровнями критичности Шерлока)
- Устранена: версия зависимости, в которой устранен ИБ-дефект
- Опубликована: дата публикации информации об уязвимости
- Изменена: дата изменения информации об уязвимости
- Референсы: дополнительная информация об ИБ-дефекте, получаемая от сканера
- CWE: перечень CWE

Для добавления сканера типа IaC необходимо реализовать соотношение полей отчета со следующими полями ИБ-дефекта в Шерлоке:
- Уязвимый файл (обязательное поле): файл, в котором был найден ИБ-дефект
- Строка с ИБ-дефектом (обязательное поле): номер строки, где был найден ИБ-дефект
- Фрагмент кода: исходный текст, где был найден ИБ-дефект
- CWE: перечень CWE
- Критичность: уровень критичности ИБ-дефекта. После выбора поля отчета, в котором указан уровень критичности ИБ-дефекта потребуется соотнести данные с уровнями критичности, доступными в Шерлоке:
- По умолчанию Шерлок сам найдет все уровни критичности из предоставленного отчета для соотношения данных. Они будут доступны в выпадающем списке
- Рекомендуется уточнить полный набор доступных значений уровней критичности сканера и в ручном режиме соотнести их с уровнями критичности Шерлока
- В противном случае можно указать уровень критичности "по умолчанию" (если отсутствует явное соответствие с уровнями критичности Шерлока)
- Правило: правило сканера, которое идентифицировало ИБ-дефект
- Описание: описание ИБ-дефекта, получаемое от сканера
- Как исправить: рекомендации по устранению ИБ-дефекта, получаемые от сканера
- Референсы: дополнительная информация об ИБ-дефекте, получаемая от сканера
-
Нажать на кнопку Следующий шаг.
Предпросмотр
Цель этапа: убедиться в том, что все настроено корректно и получить пример того, как будут отображаться результаты работы добавленного сканера в Шерлоке.
- Нажать на кнопку Обновить данные:
Таблица предварительного просмотра результатов является интерактивной. При нажатии на ИБ-дефект будет открыта его карточка.
Если при предварительном просмотре была найдена ошибка, то всегда можно вернуться на любой из этапов добавления собственного сканера и изменить настройки.
-
Нажать на кнопку Завершить. В случае успеха, Шерлок предложит подключить добавленный сканер:
-
Нажать на кнопку Да. Добавленный сканер отобразится в разделе Подключенные в соответствии с создаваемым типом сканера. У него будет метка Пользовательский сканер.
Изменение сканера
-
Для изменения сканера необходимо нажать на иконку редактирования (), расположенную рядом со сканером, который необходимо изменить.
к сведениюРедактирование сканера полностью аналогично процессу его создания.
вниманиеПосле редактирования сканера в обязательном порядке необходимо нажать на кнопку Завершить на этапе предварительного просмотра.
В противном случае все реализованные изменения не будут сохранены.
Удаление сканера
-
Для удаления сканера необходимо нажать на иконку удаления (), расположенную рядом со сканером, который необходимо удалить.
-
В открывшейся форме нажать на кнопку Да, удалить. В случае успеха Шерлок оповестит о том, что сканер удален и можно продолжать работу.
вниманиеВосстановить удаленный сканер невозможно.
Пример добавления сканера
Для примера возьмем отчет от Semgrep в формате SARIF. Да, Semgrep поддерживается Шерлоком "из коробки", но:
- по умолчанию Шерлок использует JSON-отчет Semgrep (т.к. в нем больше данных)
- SARIF-вариант Semgrep содержит много информации (с точки зрения полей) и отлично подходит для примера
Основное
- Укажем необходимые данные:
- Название: SemgrepSARIF
- Тип: SAST
- Логотип: почему бы и нет?
- Отчет: произвольный отчет Semgrep формата SARIF
Путь к ИБ-дефектам
- В качестве пути к ИБ-дефектам укажем:
runs.0.results.[*]
Обогащение данными
- В качестве массива, откуда забирать информацию, укажем
runs.0.tool.driver.rules.[*], т.к. в нем есть описание, рекомендации, информация по классификациям и т.д.
- Свяжем поля через
ruleID(в массивеruns.0.results.[*]- ИБ-дефект) иid(в массивеruns.0.tool.driver.rules.[*]- Обогащённый элемент)
- Теперь можно использовать данные обоих массивов (
runs.0.results.[*]иruns.0.tool.driver.rules.[*]) для соотношения полей отчета и ИБ-дефектов в Шерлоке.
Маппинг полей
-
Настроим следующее соотношение полей:
- Уязвимый файл (обязательное поле):
locations.0.physicalLocation.artifactLocation.uri
- Строка с ИБ-дефектом (обязательное поле):
locations.0.physicalLocation.region.startLine
- Фрагмент кода:
locations.0.physicalLocation.region.snippet.text
- CWE:
properties.tags.0(данные из массиваrules). CWE хранятся в строке вида "CWE-548: Exposure of Information Through Directory Listing", поэтому добавляем регулярное выражение\d+
-
Критичность:
defaultConfiguration.level(данные из массиваrules). По умолчанию в отчете были найдены уровни критичности: error, warning, note:
Однако, в SARIF доступен еще один уровень критичности - none. Добавляем его "вручную":
-
Правило":
ruleId
- Описание:
fullDescription.text(данные из массиваrules)
- Как исправить:
help.text(данные из массиваrules)
- Референсы: массив с данными отсутствует в отчете в качестве отдельного поля
- Уязвимый файл (обязательное поле):
Предпросмотр
- Нажимаем на кнопку "Обновить данные" и смотрим на результаты
- Таблица ИБ-дефектов
- Карточка (Общая)
- Карточка (Сканер)



- Нажимаем на кнопку Завершить и сканер готов к работе!