docs/security.md

11 KiB
Raw Permalink Blame History

Концепция обеспечения информационной безопасности

1. Защита инфраструктуры

1.1. Физическая защита компонентов

Серверные компоненты размещаются в центре обработки данных DataPro, который обеспечивает физическую безопасность. ЦОД сертифицирован по уровню TIER III и соответствует стандартам:

  • PCI Data Security 3.2.1
  • ISO/IEC 27001:2013
  • ISO/IEC 20000-1:2011
  • ISO 9001:2015

1.2. Используемое программное обеспечение

Приложение реализуется за счёт использования открытого программного обеспечения. Все серверы работают на операционной системе OpenBSD. В качестве системы управления базой данных используется PostgreSQL. Обратный прокси-сервер реализован с помощью nginx с подключенным модулем naxsi. Приложение работает с использованием Python.

1.3. Виртуализация

Для изоляции компонентов применяется виртуализация, реализуемая встроенным в OpenBSD демоном vmd.

Применение виртуализации позволяет отделить среды исполнения и обеспечить переносимость виртуальных серверов между физическими серверами.

1.4. Управление

Управление инфраструктурой осуществляется централизовано с помощью ПО ansible.

2. Управление доступом

2.1. Идентификация

В качестве идентификаторов пользователей системы используются email адреса. В качестве идентификаторов посетителей могут использововаться email, номер телефона, аккаунт в социальной сети. Токены, назначаемые пользователю, используются только для проведения идентификации и аутентификации и далее не используются в авторизации.

2.2. Аутентификация

Аутентификация осуществляется на сервере приложений. Для аутентификации может использоваться проверка пароля, JWT, Magic-Link, U2F. После выполнения аутентификации идентификатор вместе с ролью и атрибутами пользователя передаётся в систему авторизации.

2.3. Авторизация

Авторизация осуществляется в БД. Разграничение доступа к отдельным данным выполняется с помощью Row Level Security. Для управления доступом применяются роли и политики. Роль пользователя определяет какая политика разграничения доступа должна применяться, а политика определяет необходимые атрибуты пользователя и данных для предоставления доступа.

3. Ограничения программной среды

3.1. Разделение компонентов

Для обеспечения изоляции программного обеспечения с разным уровнем доверия выделяются следующие компоненты:

  1. Прокси-сервер
  2. Сервер приложений
  3. База данных

3.1.1. Прокси-сервер

Прокси-сервер принимает внешние соединения от пользователей и переадресует их серверу приложений. Прокси-сервером реализуется базовая фильтрация и балансировка HTTP соединений.

3.1.2. Сервер приложений

Сервер приложений принимает соединения только от прокси-сервера и осуществляет обработку запросов. Сервер приложений недоступен из Интернета для прямых соединений.

3.1.3. База данных

База данных принимает соединения только от сервера приложений и администраторов системы. База данных недоступна из Интернета для прямых соединений.

3.2. Разделение водоёмов данных

Данные, принадлежащие различным заказчикам, находятся в отдельных независимых друг от друга базах данных или схемах (в зависимости от версии серверного ПО).

3.3. Ограничения возможностей приложений

Для ограничения возможностей программного кода сервера приложений планируется применять механизмы защиты pledge и unveil, реализованные в OpenBSD.

	man 2 pldge
	man 2 unveil

3.4. Отключение неиспользуемого ПО

На серверах системы строго отслеживается используемое программное обеспечение и минимизируется их количество до минимального необходимого для функционирования компонента.

4. Противодействие несанкционированному воздействию

4.1. Регистрация событий безопасности

События безопасности сохраняются в системный журнал каждого сервера, а также пересылаются в центральный сервер сбора событий безопасности для централизованной обработки.

4.2. Обнаружение вторжений

Осуществляется переодическое исследование событий безопасности для выявления возможных вторжений.

4.3. Межсетевое экранирование

На используемых физических серверах используется пакетный фильтр (PF) для открытия только необходимых входящих соединений.

Пакетный фильтр применяется для всего трафика, включая трафик между виртуальными серверами.

4.4. Шифрование

Трафик между конечным пользователем и системой обязательно шифруется криптоусточивыми алгоритмами.

Запрещены подключения внешних пользователей к системе, а также системы к внешним сервисам через нешифрованные соединения.

5. Отказоустойчивость

5.1. Резервное копирование

Резервное копирование осуществляется в соответствии с регламентом резервного копирования. Резервные копии хранятся на отдельном сервере в зашифрованном виде. Ключ шифрации данных доступен только инициатору резервного копирования и неизвестен для сервера бекапов.

5.2. Избыточность компонентов

Компоненты, требующие соблюдения высокой доступности, могут дублироваться.

5.3. Аварийное восстановление

Аварийное восстановление компонентов возможно из резервных копий, а также переключением на запасной компонент, при использовании дублирования.

6. Безопасная разработка

6.1. VCS

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

Импорт кода осуществляется только для подписанного кода.

6.2. Учёт обращений

Все обращения пользователей, идентифицированные ошибки и проблемы безопасности фиксируются в системе управления разработкой через назначение тикета и отслеживание активностей, связанных с тикетом.

6.3. Тесты

По возможности используется методика разработки через тестирование TDD. Программное обеспечение по возможности покрывается тестами, проверяющие нормальную и ошибочную работу приложения.

Тесты используются не только для ПО приложения, но и для структуры базы данных.

Тесты позволяют установить контракт (порядок работы) программного обеспечения и отслеживать не соответствующее контракту поведение ПО.