Куда я попал?
SECURITM это система для корпоративных служб информационной безопасности, которая автоматизирует ключевые процессы управления: контроль соответствия требованиям, управление рисками, учет активов, планирование работ, задачи, технические уязвимости, опросы и т.д.
SECURITM помогает построить и управлять ИСПДн, КИИ, ГИС, СМИБ/СУИБ, банковскими системами защиты.
А еще SECURITM это место для обмена опытом в рамках сообщества служб безопасности.
Для автоматического взаимодействия SECURITM и других приложений, скриптов и коннекторов (например, Apache NiFi), в SECURITM есть JSON REST API

Аутентификация

Для подключения к SECURITM по API используется API-токен.
API токен создается в Профиле команды. Там же его можно удалить и изменить.
Токен передается вместе с запросом в его заголовке:
'Authorization' = "Bearer [TOKEN]"

Управление активами

В отношении объектов типа актив по API можно проводить следующие операции:
  • Импорт активов, включая изменение и обновление
  • Экспорт активов и их полей

Импорт активов

POST запрос для импорта активов
https://service.securitm.ru/api/v1/assets/import

Для проведения импорта активов в SECURITM по API нужно
  1. Создать API токен
    Токен указывается в заголовке запроса
  2. Создать или выбрать шаблон импорта
    Название или UUID шаблона нужно добавить в тело запроса в параметр template
    Шаблоны импорта позволяют провести парсинг и логическую обработку любых данных, связав их с активами в SECURITM. Указание названия или UUID шаблона импорта обязательно в API запросе.
  3. Сформировать набор данных и поместить его в раздел assets API запроса
Примеры скриптов для проведения импорта активов в SECURITM:
  • Скрипт на PowerShell, проводящий импорт активов любых типов. Используется Шаблон SECURITM
  • # Укажите API Token для подключения (создается в профиле команды)
    $token = '[TOKEN]'
    # Укажите Шаблон, который будет использоваться для парсинга данных
    $template = 'Шаблон SECURITM'
    # Если у вас подписка Professional - укажите адрес вашего сервера SECURITM
    $url = 'https://service.securitm.ru/api/v1/assets/import'
    
    $headers = @{
        'Authorization' = "Bearer $token"
    }
    
    $requestBody = [PSCustomObject]@{
        'template' = $template
        'assets' = @(
            [ordered]@{
                'Тип' = 'Работник'
                'Название' = 'Иванов Иван Иванович'
                'Описание' = 'Тестовый пользователь для импорта по API'
                'Приоритет' = 'Низкий'
                'Расположение' = 'Центральный офис'
                'Подразделение' = 'Отдел информационной безопасности'
                'Должность' = 'Специалист'
                'Mail' = 'test@securitm.ru'
            },
            [ordered]@{
                'Тип' = 'Операционная система'
                'Название' = 'myserver.domain.local - 192.168.1.1'
                'Описание' = 'Тестовый сервер для импорта по API'
                'Приоритет' = 'Низкий'
                'Расположение' = 'Центральный офис'
                'Администратор' = 'Иванов Иван Иванович'
                'IP адрес' = '192.168.1.1'
                'Hostname' = 'myserver'
                'Домен' = 'domain.local'
            }
        ) } | ConvertTo-Json -Depth 3
    
    try {
        $response = Invoke-RestMethod -Method Post -Uri $url -ContentType "application/json; charset=utf-8" -Headers $headers -Body $requestBody
        Write-Host ($response | ConvertTo-Json -Depth 10)
    } catch {
        Write-Host 'Status code:' $_.Exception.Response.StatusCode.Value__
        $result = $_.Exception.Response.GetResponseStream()
        $reader = New-Object System.IO.StreamReader($result)
        $reader.BaseStream.Position = 0
        $reader.DiscardBufferedData()
        $responseBody = $reader.ReadToEnd()
    
        Write-Host $responseBody
    } finally {
        if ($result) {
            $result.Close()
        }
        if ($reader) {
            $reader.Close()
        }
    }
  • Скрипт на Python, проводящий импорт активов любых типов. Используется Шаблон SECURITM
  • Скрипт на PowerShell для сбора активов (пользователей, компьютеров, групп, состава групп) из локального Active Directory и импорта по API в SECURITM.
    Перед импортом нужно добавить в команду следующие типы активов: Работник, Группа LDAP, Windows Server (включая подтипы для конкретных версий ОС)
    Используются шаблоны импорта 
    • Active Directory Users
    • Active Directory Computers
    • Active Directory Groups
    • Active Directory Group members
Рекомендация: Если вы планируете регулярный запуск скриптов через планировщик заданий, удобно можно использовать такой запускающий Batch скрипт, который будет инициировать запуск PowerShell скрипта и сохранять все результаты его работы в лог-файл. Скрипты должны находиться в одной папке и одинаково называться, например import.cmd и import.ps1
@echo off

set "log=%~dpn0.log"
chcp 1251 >nul
(echo Start @ %date% %time% & echo ----------) > "%log%"

powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1" >> "%log%" 2>&1

(echo ---------- & echo Finish @ %date% %time%) >> "%log%"
chcp 866 >nul

Экспорт активов

GET запрос для экспорта активов
https://service.securitm.ru/api/v1/assets/[asset type]?[asset fields]
где
  • [asset type] - обозначение типа актива, который будет экспортироваться.
    Узнать обозначение типа актива можно в URL браузера зайдя в соответствующий реестр.
    Пример: os-18, linux-server-8
  • [asset fields] - поля активов, которые будут выгружены
    Указывать не обязательно, по умолчанию будут выгружены все поля.
    Пример: ip&version
Для проведения экспорта активов из SECURITM по API нужно

  1. Создать API токен
    Токен указывается в заголовке запроса
  2. Указать тип активов, которые будут экспортироваться
  3. Если требуется - настроить фильтр полей активов
Пример скрипта на PowerShell для экспорта активов
# Укажите API Token для подключения (создается в профиле команды)
$token = '[TOKEN]'

# Если у вас подписка Professional - укажите адрес вашего сервера SECURITM
# Укажите тип актива который собираетесь экспортировать из SECURITM.
# После "?" укажите поля, которые подлежат экспорту. Если не указывать - будут выгружены все поля.
$url = 'https://service.securitm.ru/api/v1/assets/os-18?ip'

$headers = @{
    'Authorization' = "Bearer $token"
}

try {
    $response = Invoke-RestMethod -Method Get -Uri $url -ContentType "application/json; charset=utf-8" -Headers $headers
    Write-Host ($response | ConvertTo-Json -Depth 10)
} catch {
    Write-Host 'Status code:' $_.Exception.Response.StatusCode.Value__
    $result = $_.Exception.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($result)
    $reader.BaseStream.Position = 0
    $reader.DiscardBufferedData()
    $responseBody = $reader.ReadToEnd()

    Write-Host $responseBody
} finally {
    if ($result) {
        $result.Close()
    }
    if ($reader) {
        $reader.Close()
    }
}