Доброго времени суток!
Имелось следующее:
Задача
Реализовать систему внутрикорпоративного общения через Интернет, которая обеспечит “безопасное” общение. Рассматривается вариант, который можно создать с минимальными трудозатратами. Корпоративные решения не рассматриваются по причине сложности внедрения и обслуживания.
Требуется
- Текстовое общение
- Голосовое общение (+ возможны видео-звонки)
- Обмен файлами
Рассуждения по теме под «катом».
Требования
Вся информация должна передаваться через Интернет в зашифрованном виде. Информация не должна нигде сохраняться. Исключение составляет устройство, которым пользуется конечный пользователь.
Реализация
Общие идеи
Есть два основных пути решения задачи:
Обеспечить шифрование данных собственными средствами используемого ПО
Создать среду для безопасной передачи данных любыми приложениями (VPN — Virtual Private Network)
Рассматриваются следующие операционные системы: iOS (iPhone / iPad), MacOS, Windows.
Рассматриваем только ПО с открытым исходным кодом. ПО собственной разработки не будем рассматривать в рамках данного исследования в силу трудовых и временных затрат на разработку. ПО с закрытым исходным кодом не рассматриваем, так как существует теоритическая возможность сохранения данных или обеспечения доступа к ним производителями ПО.
Безопасность средствами программного обеспечения
Текстовое общение
Существует огромное количество приложений под Windows, MacOS, которые поддерживают шифрование данных. Например, Adium под MacOS и Psi под Windows. Никаких сложностей с этим нет.
С iOS несколько сложнее. Из тех приложений, что работают с поддержкой шифрования, есть всего несколько достойных вариантов. Но, например, IM+ (можно дополнительно купить модуль, который обеспечит шифрование разговоров), не является ПО с открытым кодом. Шанс того, что они шифруют сообщения так, чтобы сами смогли их прочитать при необходимости, конечно, минимальны, но это не будет 100% надежным решением.
Есть ChatSecure — приложение, которое распространяется с открытым исходным кодом, поддерживает шифрование, совместимо с другими приложениями (использует общепринятый протокол для обмена сообщениями — XMPP). Из минусов последнего только то, что умеет работать “на фоне” не более 10 минут, а потом выключается. Но за минуту до наступления данного события предупреждает сообщением. Если отвлечься от беседы более, чем на 10 минут, то собеседник увидит, что данный человек ушел offline (аналогично ситуации, когда пропадает связь с Интернет).
Изначально я посчитал “отключение” ChatSecure после 10 минут неиспользования чем-то, что не позволяет использовать данное приложение, но после проведения тестов с использованием того же IM+ это перестало казаться “страшным”. Дело в том, что в IM+ можно использовать зашифрованные беседы, но только до тех пор пока оба собеседника находятся online, т. е., если закрыть приложение на те же 10 минут (особенность iOS), то диалог прекратится, так как нельзя отправлять зашифрованные сообщения, когда один из собеседников не открыл приложение (либо оно работает на фоне в течение 10 минут). Нельзя отправить зашифрованное сообщение собеседнику, чтобы у него появилось уведомление на телефоне, открыв которое, он смог бы прочитать сообщение полностью. Обмен зашифрованными сообщениями возможен только в случае нахождения собеседников online с открытыми приложениями. Сообщения в открытом виде в IM+ можно отправлять в любой момент, но ChatSecure требует активного (можно на фоне, но не более 10 минут) приложения в любом случае.
Из этого следует, что функционал ChatSecure аналогичен использованию того же IM+ (или альтернативного мессенджера, который умеет работать с XMPP / Jabber) в режиме передачи зашифрованных сообщений вместе с использованием его же, либо другого приложения для того, чтобы “позвать” собеседника пообщаться по защищенному каналу связи.
Варианты:
В незащищенном виде отправляется сообщение через WhatsUp, Line, IM+ и др. с приглашением перейти в IM+ и общаться в режиме OTR (off-the-record).
Используется WhatsUp, Line, IM+ и приглашается собеседник для приватного разговора в ChatSecure.
Оба варианты абсолютно идентичны, но ChatSecure имеет открытый исходный код, что обеспечивает к данному приложению полное доверие, что там нет “скрытых” опций по чтению чужих разговоров. IM+ по роду своей архитектуры, чтобы поддерживать уведомления на iOS, когда приложение не работает постоянно (если на фоне более определенного интервала времени, то приложение закрывается), хранит пароли для доступа к сервисам общения у себя. А это потенциальная угроза безопасности. ChatSecure нигде, кроме устройства пользователя, пароль не сохраняет, так как не использует никаких внешних сервисов.
Из минусов ChatSecure есть то, что не работает на данный момент отправка файлов, но эту задачу лучше решать отдельно, как и было предложено в самом начале данного документа.
Голосовое общение
Из ПО с открытым исходным кодом под iOS есть только Linphone, но, чтобы обеспечить в нем поддержку шифрования данных, потребуется работа программиста, который ее включит в исходном коде. Далее потребуется заведение учетной записи в AppStore для разработчиков и установка приложения на устройства. Это сложно и долго, так как потребуется все повторять для каждой новой версии. Других программ с открытым исходным кодом и поддержкой шифрования на данный момент в Apple AppStore не было (приложения, которые поддерживают ZRTP / SRTP).
Вывод: для голосового общения потребуется техническое решение на базе обеспечения безопасной среды общения, по которой можно будет безопасно передавать поток данных голосового общения.
Обмен файлами
Средствами ПО потребуется шифрование передаваемых данных. Самый простой способ — это создание архива с паролем (даже в случаях, когда всего один файл). Архив можно отправить по email, либо загрузить на один из сервисов для обмена файлами (например, SendSpace или DropBox).
Можно использовать email, но тогда надо настраивать почтовые клиенты, чтобы они использовали шифрование всех данных, что тоже не во всех случаях является простым решением.
Создание безопасной среды
Текстовое общение
Можно использовать любое приложение даже без поддержки шифрования, которое будет работать без использования сторонних сервисов. В большинстве случаев потребуется установка и довольно базовая настройка собственного сервера для обеспечения работы того же ChatSecure.
Если же использовать шифрование общения, то все становится еще надежнее, но это уже будет несколько “лишним”.
В случае создания собственной среды для безопасной передачи данных будет невозможно использовать приложения, которые используют сторонние сервисы для своей работы (например, IM+), так как среда будет изолирована от внешнего мира, не смотря на то, что будет находиться в Интернет.
Выбор падает на ChatSecure.
Голосовое общение
Любые приложения, которые умеют взаимодействовать напрямую между собой. Например, Linphone. В этом случае не потребуется установка никакого специального ПО на сервер, который будет отвечать за создание безопасной среды. Для обеспечения большей надежности можно установить и базово настроить что-то из сервисов, что умеет работать с SIP (например, Asterisk), но это не является обязательным условием.
Обмен файлами
На сервере, который отвечает за создание безопасной среды обмена данными, устанавливается самое простое ПО, которое доступно из любого браузера (MS IE, Mozilla Firefox, Safari, Chrome, Opera и др.), и позволяет загружать и хранить файлы на сервере, создавая на них уникальную ссылку. Доступ к данным файлам возможен только из созданной безопасной среды. Внешнего доступа к данным файлам нет.
Вывод
Оптимальным решением является создание собственной безопасной среды обмена данными. Использование ПО с открытым исходным кодом.
Создание безопасной среды обмена данными
Текстовое общение
ChatSecure на iOS, Adium на MacOS, Psi на Windows для текстового общения. Договариваться о безопасном сеансе связи можно любым удобным способом, а продолжать общение уже в защищенной среде описанными выше средствами.
Голосовое общение
Linphone на iOS. Linphone и на Windows / Mac, либо любой другой SIP-клиент, включая даже стационарные SIP-телефоны.
Обмен файлами
ПО, которое устанавливается на сервер (отвечающий за создание безопасной среды передачи данных), и поддерживает загрузку, хранение и отдачу документов. Используется либо авторизация по имени пользователя и паролю, либо уникальный случайный адрес документа, который создается при его загрузке.
В предлагаемом решении пользователю будет очень легко ориентироваться. Захотелось пообщаться приватно — сообщил собеседнику и перешел на использование специальной программы, которую в других случаях он не использует.
Конечно, удобно использовать вообще только одно какое-либо ПО для всех задач, но, к сожалению, всегда существует человеческий фактор (пользователи ошибаются). Использование отдельного набора ПО для проведения приватного общения позволяет минимизировать шанс случайного использования незащищенных каналов связи.
Дополнительная техническая информация
Безопасная среда обмена данными
Создается на базе L2TP и PPTP, что обеспечит ее работу практически в любых условиях. Другие протоколы, к сожалению, вряд ли будут работать на WiFi доступе в интернет-кафе, гостиницах и других общественных местах. Мобильный интернет тоже может стать препятствием для их корректной работы. Поэтому изначально надо настроить PPTP, а запасным вариантом (и более совершенным — L2TP).
Использование изолированного окружения (VPN) позволит избежать всевозможных проблем с SIP, которые будут возникать при использовании NAT в сетях, которые использует клиент.
VPN-соединение можно оставлять постоянно включенным на iOS-устройствах, так как большого потока данных от них нет, нагрузки на сервер никакой существенной давать не будут. Это даже обеспечит дополнительную безопасность передаваемых данных в случае использования публичного доступа в Интернет. Можно и использовать VPN только в случае необходимости.
Текстовое общение
Любой XMPP-сервер.
Голосовое общение
Asterisk на сервере, либо вообще связь клиентов (Linphone или другие SIP-клиенты) только непосредственно напрямую между собой.
Обмен файлами
Необходимо подобрать любое ПО с открытым исходным кодом для обмена файлами. Должны быть следующие функции: загрузить файл, удалить, получить файл. Достаточно генерированных случайных ссылок аналогично тем, что используются на файлообменных сервисах. Можно использовать авторизацию (даже из данных L2TP/PPTP соединения определить, кто хочет получить доступ).
Сервер
Потребуется сервер с установленной UNIX-системой. Рекомендую Linux (например, CentOS) или FreeBSD. Для данной задачи достаточно относительно слабого
На сервере обязательно зашифровать полностью раздел диска, на котором будут храниться какие-либо пользовательские данные, включая логи ПО и используемые базы данных. Максимально отключить все логи. Придерживаться политики хранения минимального возможного комплекта данных. Данный раздел диска должен подключаться к серверу только после ввода пароля при перезапуске. Без него на сервере не должно быть никакой информации, которая как-то может идентифицировать людей, которые используют его, или содержать “важные” данные.
Автор: n1k0s