Скрипт сбора и просмотра сведений из хранилища о загруженных антивирусных базах с 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.