Компонент TLS Terminator, поставляемый в составе KasperskyOS Community Edition, обеспечивает защищенную передачу данных по сети между клиентом и сервером, используя протокол TLS (Transport Layer Security).
Компонент TLS Terminator встроен в сетевое взаимодействие между клиентом и сетевым VFS-бэкендом. Когда клиент использует сетевые функции из библиотеки libc, вызовы этих функций перенаправляются в компонент TLS Terminator. В компоненте TLS Terminator реализованы функции-обертки над стандартными вызовами сетевого VFS-бэкенда. Эти обертки обеспечивают установку TLS-соединений, шифрование исходящих данных перед их передачей в сетевой VFS-бэкенд и расшифровку входящих данных перед возвратом клиенту. Такая реализация компонента обеспечивает защиту данных при передаче по сети без необходимости изменения клиентского кода.

Принцип работы компонента TLS Terminator
Вызывает функции из библиотеки libc (полный список поддерживаемых функций см. в таблице ниже), как если бы работал напрямую с сетевым VFS-бэкендом.
Перехватывает от клиента вызовы функций из библиотеки libc и заменяет их на функции-обертки, реализующие TLS. Для управления TLS-соединениями используются библиотеки Mbed TLS и OpenSSL, которые реализуют криптографические алгоритмы и протоколы TLS.
Подсистема динамических расширений (плагины) позволяет расширять функциональность компонента TLS Terminator без изменения его исходного кода с использованием разработанных пользователем динамических библиотек.
Реализует сетевой стек.
Реализует файловые системы.
API библиотеки libc, поддерживаемый компонентом TLS Terminator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Функции, отмеченные в таблице знаком *, имеют стандартное POSIX-поведение. Поведение остальных функции модифицируется компонентом TLS Terminator как указано в таблице ниже.
Модификация поведения функций библиотеки libc компонентом TLS Terminator
Функция libc |
POSIX-поведение функции |
Поведение функции при использовании TLS Terminator |
|---|---|---|
|
Принимает запрос на подключение из очереди ожидающих соединений и создает новый дескриптор сокета для взаимодействия |
|
|
Закрывает сокет |
|
|
Инициирует соединение на сокете |
|
|
Получает параметры сокета |
|
|
Получает данные от сервера |
|
|
Отправляет данные серверу |
|
|
Устанавливает параметры сокета |
|
|
Завершает передачу данных по сокету |
|
|
Создает сокет для сетевого взаимодействия |
|
|
Отслеживает состояние файловых дескрипторов |
|
|
Отправляет данные серверу |
|
Для функций getsockopt() и setsockopt() в компоненте TLS Terminator введено значение IPPROTO_TLS для параметра level, которое отсутствует в POSIX. Это значение определено в файле /opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/include/netinet/in.h из состава KasperskyOS Community Edition. Синтаксис функций:
int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
int getsockopt(int socket, int level, int option_name, void *restrict option_value, socklen_t *restrict option_len);
Параметр level определяет уровень на котором задано наименование параметра сокета option_name. Если при вызове функций getsockopt() и setsockopt() параметр level равен IPPROTO_TLS, то компонент TLS Terminator обрабатывает доступные для этого уровня наименования параметра сокета option_name из таблицы ниже.
Наименования параметра сокета и соответствующее им поведение функций
Наименование параметра сокета |
Поведение функции setsockopt() |
Поведение функции getsockopt() |
|---|---|---|
|
Устанавливает имя сервера, к которому осуществляется TLS-соединение. Это имя будет использовано в расширении SNI (Server Name Indication) при выполнении TLS-рукопожатия. |
Получает имя сервера, к которому осуществляется TLS-соединение. |
|
Включает проверку OCSP Stapling (подтверждение актуальности сертификата) для указанного клиентского сокета. |
Параметр не обрабатывается. |
|
Параметр не обрабатывается. |
Получает идентификатор TLS-сеанса. |
|
Параметр не обрабатывается. |
Возвращает результат проверки сертификата сервера в виде комбинации флагов ошибок. |
Если предоставляемая по умолчанию функциональность компонента TLS Terminator недостаточна, то ее можно расширить с помощью механизма плагинов. Подробнее см. "Расширение функциональности TLS Terminator".
Состав компонента TLS Terminator
Компонент представляет собой набор следующих файлов:
/opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/bin/tls;/opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/include/kl/TlsEntity.edl и сгенерированный из него заголовочный файл;/opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/include/kl/TlsEntity.psl.