C8: Повсеместная защита данных

Описание

Конфиденциальные данные, такие как пароли, номера кредитных карт, медицинские записи, персональные данные и коммерческие тайны требуют дополнительной защиты, особенно если они подпадают под действие закона о неприкосновенности данных, например, Общего регламента ЕС по защите данных (GDPR), или закона о защите финансовых данных, например, Стандарта безопасности данных в сфере платежных карт (PCI DSS).

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

Классификация данных

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

Шифрование передаваемых данных

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

Основная польза от протокола TLS — это защита данных веб-приложений от несанкционированного доступа и изменений при их передаче между клиентами (веб-браузерами) и сервером веб-приложения, а также между сервером веб-приложения и внутренним сервером или другими, не относящимися к браузеру, компонентами организации.

Шифрование хранимых данных

Первое правило управления конфиденциальными данными — избегать хранения конфиденциальных данных, когда это возможно. Если сохранять конфиденциальные данные необходимо, то убедитесь в наличии у них криптографической защиты от несанкционированного доступа и изменений.

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

Instead of building cryptographic capability from scratch, it is strongly recommended that peer reviewed and open solutions be used, such as the Google Tink project, Libsodium, and secure storage capability built into many software frameworks and cloud services.

Мобильные приложения: Безопасное локальное хранение данных

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

На мобильных устройствах необходимо хранить минимум данных. Но если вам необходимо хранить конфиденциальные данные на мобильном устройстве, то эти данные должны храниться в специальном каталоге, в каждой мобильной ОС он свой. В Андроиде это будет хранилище ключей Android, а в iOS — связка ключей iOS.

Жизненный цикл ключей

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

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

Управление секретами в приложении

Приложения содержат огромное количество «секретов», необходимых для выполнения проверок безопасности, например, сертификаты, пароли SQL-соединений, учетные данные сторонних служб, пароли, SSH-ключи и ключи шифрования. Несанкционированное разглашение или изменение этих секретов может привести к полной компрометации системы. При управлении секретами в приложениях придерживайтесь следующих правил:

  • не храните секретные ключи в коде, файлах конфигурации, а также не передавайте их через переменные окружения. Используйте GitRob или TruffleHog для поиска секретов в репозиториях;
  • используйте для ключей и прочих секретов уровня приложения специальные хранилища, например, KeyWhiz , проект Vault от компании Hashicorp или Amazon KMS, обеспечивающие безопасность хранения и доступа к секретным ключам во время работы приложения.

Инструменты

  • SSLyze — инструмент командной строки и библиотека для сканирования конфигураций SSL
  • SSLLabs — бесплатная служба для сканирования и проверки конфигураций TLS/SSL
  • OWASP O-Saft TLS Tool — инструмент для тестирования TLS-соединений
  • GitRob — инструмент командной строки для поиска критичных данных в общедоступных файлах на GitHub
  • TruffleHog — инструмент для поиска случайно закоммиченных секретов
  • KeyWhiz — менеджер секретов
  • Hashicorp Vault — менеджер секретов
  • Amazon KMS — инструмент управления ключами на Amazon AWS