На кофе

Поиск

Поиск Яндекс

Вход

Kaspersky Security Center OpenAPI [Python] - [Сбор данных с хранилища]

Поделиться статьей

Скрипт сбора и просмотра сведений из хранилища о загруженных антивирусных базах с KSC, как на Windows, так и на Linux с помощью Python.


В связи с импортозамещением и нарастающим уходом от Windows многие начинают переходить на Kaspersky Security Center 15 для Linux, полностью отказавшись от консоли администрирования на Windows.

Но с переходом на KSC 15, я столкнулся с невозможностью просмотреть, какие на данный момент антивирусные базы загружены, а именно дату создания и загрузки. На Windows в консоли администрирования это делалось легко, достаточно было перейти в хранилище — обновление баз - антивирусные базы.

В KSC 15 данного функционала я не нашел, вернее в документации он есть, а на деле его нет. Написав в техническую поддержку Kaspersky, я получил вот такой ответ.

Получается функционал есть, но для Web console он отключен и техническая поддержка предлагает смотреть вручную на сервере в директории Updates. Странно конечно, но мне такой вариант не подходит, я хочу видеть привычные мне две строчки: Получено и Дата создания.

Заберем тогда эти данные с помощью API с KSC, притом как с Windows, так и KSC for Linux.

Использовать я буду Astra Linux Special Edition 1.7.5.16 исполнение "Смоленск", по этому пример буду приводить на нем.

Для этого мы сначала подготовим наш python. Если вы никогда не работали с python на своем арм, то необходимо доустановить виртуальное окружение.

sudo apt install -y python3-venv

Мы поставили пакет для создания виртуальных окружений в python. Теперь давайте создадим директорию с нашим проектом, а в нем мы создадим нашу виртуальную среду.

mkdir ksc_api

cd ksc_api
python3 -m venv venv
source venv/bin/activate

Мы создали директорию ksc_api, второй командой перешли в нее, далее создали виртуальное окружение с названием venv, а так же его активировали командой source.

В директорию ksc_api нам необходимо поместить архив с библиотеками для подключения к API KSC.

Переходим по ссылке https://support.kaspersky.ru/ksc14/211453?ysclid=lz6smypyy3235564471

Либо используем прямую ссылку на загрузку Загрузить библиотеку KlAkOAPI

Находим (Загрузите архив KlAkOAPI.tar.gz. Этот архив включает в себя пакет KlAkOAPI и примеры (их можно скопировать из архива или справочного руководства по OpenAPI). Также архив KlAkOAPI.tar.gz находится в папке установки Kaspersky Security Center Linux.)

Сохраняем данный архив в директорию ksc_api

Теперь вводим команду на установку нашей библиотеки в виртуальное окружение.

pip install KlAkOAPI-14.tar.gz

или командой
python3 -m pip install KlAkOAPI-14.tar.gz

По завершению установки, нам необходимо создать python скрипт.

touch main.py
vim main.py

и вставляем следующий код в файл main.py

from KlAkOAPI.AdmServer import KlAkAdmServer
from KlAkOAPI import Updates
from datetime import timedelta

import urllib3

username = 'KLPythonAPI'
password = 'PASSWORD'

KSC_LIST = {
    'WINDOWS': 'https://IP_KSC_WINDOWS:13299',
    'LINUX': 'https://IP_KSC_LINUX:13299'
}

def ConnectKSC(ip):
    while True:
        try:
            connect = KlAkAdmServer.Create(ip, username, password, verify=False, vserver='')

            if connect:
                print('Успешно подключился к {}'.format(ip))
            else:
                print('Ошибка подключения к {}'.format(ip))
                exit()

            return connect
        except Exception as e:
            print(e)
            return None

def get_status_hosts(server, ip):
        urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
        params = []
        if server is not None:
            straccessor = Updates.KlAkUpdates(server).GetUpdatesInfo(pFilter=params)
            ncount = straccessor.RetVal()
            if ip == KSC_LIST['WINDOWS']:
                data = ncount[1]
                print('')
                print('KSC ======== [ {} ] ========'.format(KSC_LIST['WINDOWS']))
                print('Дата создания: {}'.format(data['Date'] + timedelta(hours=3)))
                print('Дата получения: {}'.format(data['KLUPDSRV_BUNDLE_DWL_DATE'] + timedelta(hours=3)))
                print('============================')
            elif ip == KSC_LIST['LINUX']:
                data = ncount[2]
                print('')
                print('KSC ======== [ {} ] ========'.format(KSC_LIST['LINUX']))
                print('Дата создания: {}'.format(data['Date'] + timedelta(hours=3)))
                print('Дата получения: {}'.format(data['KLUPDSRV_BUNDLE_DWL_DATE'] + timedelta(hours=3)))
                print('============================')
        else:
            print('Ошибка доступа к серверу')

if __name__ == '__main__':
    for ip in KSC_LIST.values():
        server = ConnectKSC(ip)
        get_status_hosts(server, ip)

Сохраняем и выходим (для тех у кого лапки и не знает, как выйти из vim, то ставим : и пишем wq, должно получиться :wq)

В коде вам нужно будет вписать пароль от учетной записи KLPythonAPI в переменную password = ''

Но для начала, давайте создадим учетную запись KLPythonAPI - это учетная запись под которой будет работать наш скрипт. Создадим ее и назначим ей следующие роли:

Теперь, когда мы создали учетную запись KLPythonAPI на KSC и назначили ей роли и пароль, перейдем к созданию аналогичной учетной записи, но уже на KSC Linux.

Для понимания, у нас два сервера KSC (Windows, Linux), нам нужно создать учетную запись KLPythonAPI на KSC Windows и Linux серверах. Под данной учетной записью, Python будет подключаться к серверу и забирать массив данных.

Вернемся к созданию учетной записи на KSC Linux:

1) Заходим на наш созданный KSC Linux развернутый по прошлой статьей -> вот тут.

Переходим слева в меню "Пользователи и роли" - "Добавить"

Задаем имя KLPythonAPI и пароль. Отлично, наш пользователь создан, теперь необходимо накинуть роли для этой учетной записи.

Для этого ставим галочку на учетную запись KLPythonAPI, и нажимаем "Назначить роль". Откроется свойство профиля.

Переходим в "Роли"

Назначаем три роли как на картинке ниже.

Выбираем сервер.

После нажимаем "Назначить роль" и  видим, что у нашей учетной записи "KLPythonAPI" уже есть наши новые роли.

 

Возвращаемся к нашему скрипту main.py

vim main.py

Нам необходимо заменить password = 'PASSWORD' - PASSWORD (заменить на свой пароль), так же нам нужно вписать наш сервер или сервера KSC


KSC_LIST = {
    'WINDOWS': 'https://IP_KSC_WINDOWS:13299',
    'LINUX': 'https://IP_KSC_LINUX:13299'
}

Соответсвенно заменить IP_KSC_WINDOWS и IP_KSC_LINUX на IP адреса ваших серверов.

Как видно, в моем примере я использую два сервера KSC, Windows и Linux, если вам нужен только один, то достаточно закомментировать один, поставив #, пример:


KSC_LIST = {
    'WINDOWS': 'https://IP_KSC_WINDOWS:13299',
    #'LINUX': 'https://IP_KSC_LINUX:13299'
}

Если нужно наоборот добавить, то образец ниже, но так же нужно будет ниже переписать условия или дописать.


KSC_LIST = {
    'WINDOWS': 'https://IP_KSC_WINDOWS:13299',
    'LINUX': 'https://IP_KSC_LINUX:13299',
    'LINUX2': 'https://IP_OTHER:13299',
    'WINDOWS333': 'https://IP_BLABLBABLA:13299',
}

Так же вставить дополнительно блоки elif к условиям 

if ip == KSC_LIST['WINDOWS']:
и
elif ip == KSC_LIST['LINUX']:

elif ip == KSC_LIST['LINUX2']:
  data = ncount[3]
  print('')
  print('KSC ======== [ {} ] ========'.format(KSC_LIST['LINUX2']))
  print('Дата создания: {}'.format(data['Date'] + timedelta(hours=3)))
  print('Дата получения: {}'.format(data['KLUPDSRV_BUNDLE_DWL_DATE'] + timedelta(hours=3)))
  print('============================')
elif ip == KSC_LIST['WINDOWS333']:
  data = ncount[4]
  print('')
  print('KSC ======== [ {} ] ========'.format(KSC_LIST['WINDOWS333']))
  print('Дата создания: {}'.format(data['Date'] + timedelta(hours=3)))
  print('Дата получения: {}'.format(data['KLUPDSRV_BUNDLE_DWL_DATE'] + timedelta(hours=3)))
  print('============================')

После того, как поправили наш скрипт и сохранили, можно его запустить и проверить

python3.7 main.py

Если вы все сделали правильно, вы увидите результат.

Как мы видим, скрипт отработал и забрал информацию о загруженных антивирусных базах. Мы с Вами видим, что "Дата создания" одинаковая, это нормально, а вот "Дата получения" отличается по времени.

KSC Windows у меня 14.2 версии вместе с Web-console, а KSC Linux 15.1 версии.

KSC Windows

 

KSC Linux

Если доработать скрипт, то можно его интегрировать к примеру в Django проект. Вот пример вывода на html странице проекта Django.

Ниже представлен пример на Manjaro Linux (Просто пример на другом дистрибутиве)


В данном случае "Ошибка доступа к серверу" из-за того, что на момент создания этого скриншота, сервера KSC Linux еще не было и был только Windows сервер, а в скрипте стояла заглушка на IP адрес Linux сервера, по этому он и выдает ошибку на подключению к API Linux.