Насколько безопасна эта архитектура?

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

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

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

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

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

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

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

Сервер БД 1

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

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

  1. НЕ НИКОГДА отправляйте что-либо НА Сервер приложений 1 или Сервер БД 1.
  2. Получите зашифрованные конфиденциальные данные пользователя с сервера приложений 1 и сохраните их на сервере БД 2.
  3. Получите зашифрованные конфиденциальные данные пользователя с сервера БД 2 в соответствии с локальным расписанием, расшифруйте их с помощью закрытого ключа (см. Сервер приложений 1, шаг 2), хранящегося локально в приложении. Сервер 2 с правильным управлением ключами.

Сервер БД 2

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

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

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

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

Спасибо!


person parxier    schedule 21.09.2009    source источник
comment
Просто очень быстро; Я не уверен, сколько времени мне захочется проверять всю вашу систему, но вы не используете RSA ни для чего, кроме обмена ключами. Это небезопасно для больших объемов данных.   -  person Noon Silk    schedule 21.09.2009
comment
Жаль, что у нас нет фотографии, показывающей эту архитектуру. Думаю, мне придется сначала нарисовать одну. Какую ОС вы используете, базу данных и веб-сервер, а также язык. Это будет иметь значение с точки зрения безопасности.   -  person James Black    schedule 21.09.2009
comment
шелковистый: какой алгоритм с открытым ключом считается безопасным для больших объемов данных?   -  person parxier    schedule 21.09.2009
comment
Симметричные ключи - это то, что вы используете для больших битов данных, таких как AES, IDEA или Twofish. Это можно защитить, имея уникальный симметричный ключ для каждого пользователя, зашифрованный с помощью системного закрытого ключа. Длина ключей шифрования также важна для безопасности.   -  person James Black    schedule 21.09.2009
comment
Джеймс Блэк: Я только начал проектировать систему. Я думал об использовании серверов linux, postgresql db, python, веб-фреймворка django, веб-сервера apache. Любые комментарии / предложения приветствуются.   -  person parxier    schedule 21.09.2009
comment
parxier: вы не используете открытые ключи для больших данных. Вы используете их для обмена симметричными ключами (это то, что делает SSL). Этот процесс называется обменом ключами Диффи-Хеллмана: en.wikipedia.org/wiki/Diffie-Hellman_key_exchange   -  person Noon Silk    schedule 21.09.2009
comment
RSA может использоваться для обмена ключами без Diffie-Hellman, а Diffie-Hellman может использоваться для (неаутентифицированного) обмена ключами без RSA. parxier, вы можете заменить пошаговое шифрование данных открытым ключом RSA с генерацией случайного симметричного ключа; зашифровать данные симметричным ключом; зашифровать симметричный ключ открытым ключом RSA; объединить симметричный ключ, зашифрованный RSA, и данные, зашифрованные симметричным ключом   -  person caf    schedule 21.09.2009
comment
@silky: RSA защищает любой объем данных; это просто ужасно неэффективно для больших объемов данных. Следовательно, имеет смысл использовать RSA для шифрования сеансового ключа, но не всего сеанса.   -  person Jonathan Leffler    schedule 21.09.2009
comment
Джонатан прав. В использовании RSA для многих данных нет уязвимости, но это намного медленнее, чем необходимо. RSA используется в качестве алгоритма шифрования ключей: зашифруйте объемные данные с помощью симметричного алгоритма, затем зашифруйте симметричный ключ с помощью открытого ключа RSA (или ключей, если есть несколько получателей зашифрованных данных).   -  person erickson    schedule 21.09.2009
comment
Джонатон Леффлер и Эриксон. Я думаю, что вы оба ошибаетесь, но я не могу найти документальных подтверждений, подтверждающих мои утверждения; комментирует только криптографические списки рассылки. Тем не менее, я никогда не буду использовать RSA ни для чего, кроме обмена ключами.   -  person Noon Silk    schedule 21.09.2009


Ответы (3)


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

Я бы посоветовал вам вот что:

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

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

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

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

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

person Noon Silk    schedule 21.09.2009
comment
Я бы также добавил, что обзор случайных людей на трубках не является аудитом безопасности. Необходим реальный обзор со стороны людей, которые работают над такими вещами изо дня в день. - person stonemetal; 21.09.2009

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

person Jerry Bullard    schedule 21.09.2009

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

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

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

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

person Community    schedule 21.09.2009