Пример Secure Login демонстрирует использование паттерна Information Obscurity. Пример демонстрирует возможность передачи критической для системы информации через недоверенную среду.
Архитектура примера
В примере имитируется получение удаленного доступа к IoT-устройству посредством передачи этому устройству учетных данных пользователя (имени пользователя и пароля). Недоверенной средой внутри IoT-устройства является веб-сервер, который обслуживает запросы пользователей. Практика показывает, что такой веб-сервер является легко обнаруживаемым и зачастую успешно атакуемым, так как IoT-устройства не имеют встроенных средств защиты от проникновения и других атак. Кроме того, пользователи получают доступ к IoT-устройству через недоверенную сеть. Очевидно, что в таких условиях для защиты учетных данных пользователя от компрометации необходимо использовать криптографические алгоритмы.
С точки зрения архитектуры в таких системах можно выделить следующие субъекты:
При этом для использования криптографической защиты необходимо выполнить следующие шаги:
Пример Secure Login включает следующие компоненты:
Civetweb (недоверенный компонент, программа WebServer).AuthService).TlsEntity). Этот компонент поддерживает транспортный механизм TLS (transport layer security). TLS-терминатор совместно с веб-сервером поддерживают протокол HTTPS на стороне устройства (веб-сервер взаимодействует с браузером через TLS-терминатор).Процесс аутентификации пользователя происходит по следующей схеме:
https://localhost:1106 (при запуске примера на QEMU) или по адресу https://<IP-адрес Raspberry Pi>:1106 (при запуске примера на Raspberry Pi 4 B). HTTP-трафик между браузером и TLS-терминатором будет передаваться в зашифрованном виде, а веб-сервер будет работать с открытым HTTP-трафиком.В примере используется самоподписанный сертификат, поэтому большинство современных браузеров сообщит о незащищенности соединения. Нужно согласиться использовать незащищенное соединение, которое тем не менее будет зашифрованным. В некоторых браузерах возможно возникновение сообщения "TLS: Error performing handshake: -30592: errno = Success".
Civetweb, запущенный в программе WebServer, отображает страницу index.html, содержащую приглашение к аутентификации.Log in.WebServer обращается к программе AuthService по IPC для получения страницы, содержащей форму ввода имени пользователя и пароля.AuthService выполняет следующие действия:auth.html с формой ввода имени пользователя и пароля (код страницы содержит открытые параметры и открытый ключ);WebServer по IPC.Civetweb, запущенный в программе WebServer, отображает страницу auth.html с формой ввода имени пользователя и пароля.Submit (корректные данные для аутентификации содержатся в файле secure_login/auth_service/src/authservice.cpp).auth.html, который исполняется на стороне браузера, осуществляет следующие действия:XOR с использование общего секретного ключа;WebServer обращается к программе AuthService по IPC для получения страницы, содержащей результат аутентификации, передавая имя пользователя, зашифрованный пароль и открытый ключ.AuthService выполняет следующие действия:result_err.html или страницу result_ok.html в зависимости от результата аутентификации.Civetweb, запущенный в программе WebServer, отображает страницу result_err.html или страницу result_ok.html.Таким образом, конфиденциальные данные передаются через сеть и веб-сервер только в зашифрованном виде. Кроме того, весь HTTP-трафик передается через сеть в зашифрованном виде. Для передачи данных между компонентами используются взаимодействия по IPC, которые контролируются модулем Kaspersky Security Module.
Unit-тестирование с использованием фреймворка GoogleTest
Помимо паттерна Information Obscurity пример Secure Login демонстрирует использование фреймворка GoogleTest для выполнения unit-тестирования программ, разработанных под KasperskyOS (KasperskyOS Community Edition содержит в своем составе этот фреймворк).
Исходный код тестов находится по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/secure_login/tests
Эти unit-тесты предназначены для верификации некоторых cpp-модулей подсистемы аутентификации и веб-сервера.
Чтобы запустить тестирование, выполните следующие действия:
Secure Login.build с результатами предыдущей сборки, выполнив команду:sudo rm -rf build/
cross-build.sh в текстовом редакторе.-D RUN_TESTS="y" \ (например, после флага сборки -D CMAKE_BUILD_TYPE:STRING=Release \).$ sudo ./cross-build.sh
Тесты выполняются в программе TestEntity. Программы AuthService и WebServer не запускаются, поэтому при выполнении тестирования пример нельзя использовать для демонстрации паттерна Information Obscurity.
После завершения тестирования выводятся результаты выполнения тестов.
Файлы примера
Код примера и скрипты для сборки находятся по следующему пути:
/opt/KasperskyOS-Community-Edition-<version>/examples/secure_login
Сборка и запуск примера
Чтобы запустить пример на QEMU, перейдите в директорию с примером, соберите пример и выполните следующие команды:
$ cd build/einit
# Перед выполнением следующей команды убедитесь, что путь к
# директории с исполняемым файлом qemu-system-aarch64 сохранен в
# переменной окружения PATH. В случае отсутствия
# добавьте его в переменную PATH.
$ qemu-system-aarch64 -m 2048 -machine vexpress-a15 -nographic -monitor none -net nic,macaddr=52:54:00:12:34:56 -net user,hostfwd=tcp::1106-:1106 -sd sdcard0.img -kernel kos-qemu-image
Также см. "Сборка и запуск примеров".
В начало