Насколько безопасна эта архитектура? - PullRequest
4 голосов
/ 21 сентября 2009

Я создаю систему, которая должна собирать некоторые конфиденциальные данные пользователя через защищенное веб-соединение, надежно хранить их на сервере для последующей автоматической расшифровки и повторного использования. Система также должна позволять пользователю просматривать некоторую часть защищенных данных (например, *****ze) и / или полностью изменять их через Интернет. Система должна обеспечивать разумный уровень безопасности.

Я думал о следующей инфраструктуре:

Сервер приложений (Web) 1

  1. Веб-сервер с надлежащей поддержкой TLS для защищенных веб-соединений.

  2. Использовать алгоритм открытого ключа (например, RSA) для зашифровывать введенные пользователем конфиденциальные данные и отправить его на Сервер приложений 2 через односторонний исходящий защищенный канал (например, ssh-2) без сохранения в любом месте на сервере приложений 1 или БД Сервер 1 .

  3. Использовать в зависимости от пароля пользователя алгоритм симметричного ключа для шифрования некоторая часть введенных данных (например, последние несколько букв / цифр) и магазин это на БД Сервер 1 на потом поиск по серверу приложений 1 во время веб-сессия пользователя.

  4. Повторно использовать шаг 2 для изменения данных пользователем через Интернет.

БД Сервер 1

  1. Хранить незащищенного нечувствительного пользователя данные.
  2. Храните часть чувствительных пользовательские данные, зашифрованные на сервере приложений 1 (см. шаг 3 выше)

Сервер приложений 2

  1. Do NOT EVER отправить что-нибудь TO Сервер приложений 1 или Сервер БД 1 .
  2. Получать зашифрованные, чувствительные к пользователю данные с сервера приложений 1 и сохраните их в БД Сервер 2 .
  3. Получить зашифрованный конфиденциальные данные от БД Сервер 2 в соответствии с местным графиком, расшифровать его с помощью закрытого ключа (см. Сервер приложений 1 , шаг 2) сохранено локально на сервере приложений 2 с правильным управлением ключами.

БД Сервер 2

  1. Хранить зашифрованные конфиденциальные данные пользователя (см. Сервер приложений 2 , шаг 2)

Если Сервер приложений (Web) 1 или Сервер БД 1 или оба скомпрометированы, злоумышленник не сможет получить какие-либо конфиденциальные данные пользователя (зашифрованные или нет). У злоумышленника есть доступ к открытым ключам и алгоритмам шифрования, которые в любом случае хорошо известны. Тем не менее, злоумышленник сможет изменить веб-сервер так, чтобы он в настоящее время регистрировал пароли зарегистрированных пользователей в незашифрованном виде и расшифровывал часть конфиденциальных данных, хранящихся на сервере БД 1 (см. Сервер приложений 1 , шаг 3), которые я не делаю. рассмотреть как большое дело. Злоумышленник сможет (посредством модификации кода) также перехватывать конфиденциальные данные, вводимые пользователями через Интернет во время потенциальной атаки. Позже я рассматриваю это как более высокий риск, но при условии, что злоумышленнику трудно (не так ли) изменить код, чтобы никто не заметил, что, думаю, мне не стоит об этом беспокоиться.

Если Сервер приложений 2 и закрытый ключ скомпрометированы, то злоумышленник будет иметь доступ ко всему, но Сервер приложений 2 или Сервер БД 2 не являются веб-ориентированными. так что это не должно быть проблемой.

Насколько безопасна эта архитектура? Правильно ли я понимаю, как работают алгоритмы шифрования и защищенные протоколы?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 21 сентября 2009

Я не думаю, что могу дать правильный ответ, потому что я не уверен, что цель вашей системы ясна. Хотя я ценю, что вы получаете отзывы о дизайне, это немного сложно без цели.

Я бы предложил вам это:

Сначала тщательно документируйте и анализируйте модель угроз

Вам необходимо составить фиксированный жесткий список всех возможных сценариев атаки. Местных злоумышленников и т. Д. От кого вы пытаетесь защитить? Вы также говорите что-то вроде «с надлежащим управлением ключами»; но это одна из самых сложных вещей. Так что не просто предполагайте , вы можете сделать это правильно; полностью спланируйте, как вы будете это делать, с конкретной ссылкой на то, кто будет предотвращать атаки.

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

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

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

1 голос
/ 21 сентября 2009

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

Что бы я был наиболее осторожен, так это направление передачи данных с вашего сервера в вашей DMZ, которая должна быть только вашим веб-сервером, в те блоки, которые находятся внутри вашей сети. Все более распространенными являются случаи, когда законные домены подвергаются риску для распространения вредоносного ПО среди посещающих пользователей. Это плохо, но если бы вредоносная программа обратилась в вашу сеть, а не только наружу для ваших пользователей, тогда ваш бизнес был бы полностью скрыт.

Я также не видел ничего о предотвращении внедрения SQL-кода или усиления / исправления системы для предотвращения распространения вредоносных программ. Это должно быть вашим первым и самым важным соображением. Если бы безопасность была важна для вас, ваша архитектура была бы гибкой для незначительных настроек межсерверного взаимодействия и частых исправлений. Большинство веб-сайтов, даже крупные законные компании, никогда не исправляют свои дыры в безопасности, даже если они скомпрометированы. Вы должны постоянно исправлять дыры в безопасности и менять вещи, чтобы предотвратить возникновение дыр, если вы хотите избежать компрометации.

Чтобы не стать распространителем вредоносного ПО, я бы предложил установить жесткие и быстрые правила, касающиеся обслуживания мультимедиа, содержащего любые виды сценариев на стороне клиента. Сценарии на стороне клиента можно найти в JavaScript, ActiveX, Flash, Acrobat, Silverlight и других кодах или плагинах, которые выполняются в клиентской системе. Должны существовать политики для обслуживания этого контента, чтобы можно было сразу идентифицировать аномальные фрагменты кода. Я рекомендую НИКОГДА не вставлять код на стороне клиента непосредственно в браузер, но всегда ссылаться на какой-нибудь внешний файл. Я бы также предложил использовать единомышленники для лучшего управления активами и экономии трафика, например, обслуживать один большой файл JavaScript вместо 8 маленьких. Я бы также порекомендовал форсировать все такие носители во внешней системе распространения контента, которая ссылается на ваш домен в своей структуре каталогов. Таким образом, мультимедиа не доставляется напрямую с ваших серверов, и если оно доставляется напрямую от вас, вы можете быстро идентифицировать его как потенциально вредоносное и требующее проверки безопасности.

1 голос
/ 21 сентября 2009

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

...