Самостоятельное добавление сканеров
Шерлок предоставляет возможность самостоятельного добавления сканеров пользователем в случае, если нужный сканер не поддерживается "из коробки".
Добавление собственных сканеров возможно для следующих типов сканеров:
- 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 зависимости, в которой найден ИБ-дефект;
- Версия (обязательное поле): версия зависимости, в которой был найден ИБ-дефект;
- Уязвимость (обязательное поле): уникальный идентификатор уязвимости;
- Описание: описание ИБ-дефекта;
- Критичность: уровень критичности ИБ-дефекта. После выбора поля отчета, в котором указан уровень критичности ИБ-дефекта потребуется соотнести данные с уровнями критичности, доступными в Шерлоке:
- По умолчанию Шерлок сам найдет все уровни критичности из предоставленного отчета для соотношения данных. Они будут доступны в выпадающем списке;
- Рекомендуется уточнить полный набор доступных значений уровней критичности сканера и в ручном режиме соотнести их с уровнями критичности Шерлока;
- В противном случае можно указать уровень критичности "по умолчанию" (если отсутствует явное соответствие с уровнями критичности Шерлока).
- CVSS: информация о CVSS-векторе. По умолчанию можно добавить только один тип вектора (v2, v3 или v4)
- Устранена: версия зависимости, в которой устранен ИБ-дефект;
- Опубликована: дата публикации информации об уязвимости;
- Изменена: дата изменения информации об уязвимости;
- Референсы: дополнительная информация об ИБ-дефекте, получаемая от сканера;
- CWE: перечень CWE.

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

Для добавления сканера типа IaC необходимо реализовать соотношение полей отчета со следующими полями ИБ-дефекта в Шерлоке:
- Уязвимый файл (обязательное поле): файл, в котором был найден ИБ-дефект;
- Строка с ИБ-дефектом (обязательное поле): номер строки, где был найден ИБ-дефект;
- Фрагмент кода: исходный текст, где был найден ИБ-дефект;
- CWE: перечень CWE;
- Критичность: уровень критичности ИБ-дефекта. После выбора поля отчета, в котором указан уровень критичности ИБ-дефекта потребуется соотнести данные с уровнями критичности, доступными в Шерлоке:
- По умолчанию Шерлок сам найдет все уровни критичности из предоставленного отчета для соотношения данных. Они будут доступны в выпадающем списке;
- Рекомендуется уточнить полный набор доступных значений уровней критичности сканера и в ручном режиме соотнести их с уровнями критичности Шерлока;
- В противном случае можно указать уровень критичности "по умолчанию" (если отсутствует явное соответствие с уровнями критичности Шерлока).
- Правило: правило сканера, которое идентифицировало ИБ-дефект;
- Описание: описание ИБ-дефекта, получаемое от сканера;
- Как исправить: рекомендации по устранению ИБ-дефекта, получаемые от сканера;
- Референсы: дополнительная информация об ИБ-дефекте, получаемая от сканера.
-
Нажать кнопку Следующий шаг.
Предпросмотр
Цель этапа: убедиться в том, что все настроено корректно и получить пример того, как будут отображаться результаты работы добавленного сканера в Шерлоке.
- Нажать кнопку Обновить данные:
Таблица предварительного просмотра результатов является интерактивной. При нажатии на ИБ-дефект будет открыта его карточка.
Если при предварительном просмотре была найдена ошибка, то всегда можно вернуться на любой из этапов добавления собственного сканера и изменить настройки.
-
Нажать кнопку Завершить. В случае успеха, Шерлок предложит подключить добавленный сканер:
-
Нажать кнопку Да. Добавленный сканер отобразится в разделе Подключенные в соответствии с создаваемым типом сканера. У него будет метка Пользовательский сканер.
Продолжение заполнения
Шерлок сохранят действия, совершенные пользователем. В любой момент можно прервать работу. Для этого надо нажать кнопку Сохранить и выйти.
Пользовательский сканер, настройки которого не были завершены, будет отображен в блоке Можно подключить на соответствующей вкладке (Secrets, SAST, SCA, Image Scan или IaC) и иметь метку Черновик.
Для продолжения настройки сканера необходимо:
- Выбрать сканер, настройки которого нужно завершить, нажать на Меню действий () и выбрать Продолжить заполнение ().
- Воспроизвести необходимые настройки согласно разделу Создание сканера.
Изменение сканера
-
Для изменения настроек сканера необходимо нажать на Меню действий () и выбрать Изменить ().
к сведениюРедактирование сканера полностью аналогично процессу его создания.
вниманиеПосле редактирования сканера в обязательном порядке необходимо нажать кнопку Завершить на этапе предварительного просмотра.
В противном случае все реализованные изменения не будут сохранены.
Удаление сканера
-
Для удаления сканера необходимо необходимо нажать на Меню действий () и выбрать Удалить ().
-
В открывшейся форме нажать кнопку Да, удалить. В случае успеха Шерлок оповестит о том, что сканер удален и можно продолжать работу.
вниманиеВосстановить удаленный сканер невозможно.
Пример добавления сканера
Для примера возьмем отчет от 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);
- Референсы: не совсем то, но пусть это будет
helpUri(из массиваrules).
- Уязвимый файл (обязательное поле):
Предпросмотр
- Нажимаем кнопку "Обновить данные" и смотрим на результаты
- Таблица ИБ-дефектов
- Карточка (Общая)
- Карточка (Сканер)



- Нажимаем кнопку Завершить и сканер готов к работе! Поздравляем! 🌟 🌟 🌟