2009-11-08 4 views
0

есть эта интересная проблема, которую я не могу решить самостоятельно. Я буду очень рад, если вы поможете мне.
Вот он:
Есть много клиентских приложений, которые отправляют записи данных на один сервер MySQL.
Немногие данные не очень важны, но вся база данных. (Вы можете себе представить, что facebook DB :))
Есть ли какой-либо способ гарантировать, чтоСохраните информацию о базе данных

  • данные из БД не будет использоваться кем-либо, кроме истинного владельца
  • DB сохранит основные функции, такие как сортировка и т. д.

Предполагая, что злоумышленник может загадочно получить полный доступ к серверу?
Вы не можете просто шифровать данные на стороне клиента и хранить их зашифрованными, поскольку клиентское приложение широко распространено, и злоумышленник может получить от него ключ.
Возможно, добавление некоторых слоев между приложением и БД или объединение методов шифрования на стороне клиента и на стороне сервера (с использованием встроенных методов mysql) помогут?

ответ

3

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

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

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

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

+0

Спасибо, признав, что эти факты опечалили меня, но я думаю, что так и есть на самом деле. В цепочке передачи данных нет безопасного места. – bizzz

+0

Да, bizzz, у Ремуса есть горчица и картофель.Просто нашел эту цитату (из справки Net Security), в которой цитируется «Интенсер из Funky Business Inspector» -> (вторжения в банковскую систему, которые растут из-за) «уязвимости, возникающие из-за отсутствия контроля в финансовом учреждении или на уровне сторонних поставщиков». Шифрование, шифрование, надежная компартментализация и все остальное, что можно бросить на проблему, работают только в матрице, в том числе и доброжелательных. Единственным решением является ограничение риска для сумм, которые могут быть отнесены к пулу рисков, известному в отрасли страхования. –

0

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

Поэтому, если моему имени/роли разрешено видеть данные, ограниченные каким-либо предложением WHERE, которое может быть добавлено к каждому SELECT, которое появляется в базе данных, независимо от того, приходит ли оно из веб-приложения, инструмент SQL-запросов , или что-то еще.

+1

хорошо, если злоумышленники получают полный доступ на дб (как SYSDBA/SA) это не стоит много .... – Dani

0

Я буду использовать 2-й слой и firwall между ними. , так что у вас есть брандмауэр ---- веб-сервер --- брандмауэр - сервер второго уровня --- firewll --- db

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

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

+0

Сортировка и искать зашифрованные значения: хорошая схема шифрования должна изменить ключ IV используется каждый раз, что означает, что вы не можете сортировать или искать зашифрованные значения, поскольку зашифрованный текст изменяется каждый раз даже для того же четкого текста. Если IV не изменяется каждый раз, когда используется ключ, вы открываете себя для нескольких атак, особенно шпаргалки: http://en.wikipedia.org/wiki/Crib_%28cryptanalysis%29 –

+1

BTW, мой комментарий действителен если вы зашифровываете записи таблицы один за другим. Для массовых схем шифрования (шифрование файлов, шифрование томов или прозрачное шифрование базы данных) все характеристики сортировки и поиска сохраняются после шифрования, поскольку процесс прозрачен для БД. Я думаю, что я неправильно истолковал ваш ответ в первый раз, когда я прокомментировал. –

+0

Таким образом, это было бы основной причиной для NONCE (новый IV для каждой транзакции), слишком много центров обработки данных имеют «жесткую оболочку и мягкий, жевательный центр», но если каждая транзакция имеет заголовок, состоящий из (например, например) [bigFish @ smallpond. data] - тогда даже с cbc или cfc, которые должны предоставлять шаблон в передаче. (Нет?) Кажется, что даже с сломанным корнем единственное решение, даже отдаленное, - это KeyStore (которое, как я полагаю, использует хэширование + кодовая фраза). Даже тогда Human Mind, вероятно, является выбором пути вторжения - db должен использовать только пересылку вперед, не является стиранием. –

2

Я в значительной степени согласен с ответом Ремуса Русану.

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

Если вы можете развернуть физический доступ к ящику злоумышленником, то есть несколько вещей, которые вы можете сделать, чтобы укрепить вашу безопасность. Прежде всего, я настроил бы ssh-доступ только для того, чтобы разрешать соединения только с определенного IP-адреса или IP-диапазона (и, конечно же, без доступа root). Вы также можете сделать это на своем брандмауэре. Это означает, что самым слабым звеном является ваш сервер (приложение, которое получает данные/запросы от клиентов, может быть веб-сервером и любыми сценариями, которые вы используете). Теперь вам просто нужно убедиться, что никто не сможет использовать ваш сервер. Есть намного больше вещей, которые вы могли бы сделать, чтобы ожесточить свою систему, но он считает, что было бы более уместно спросить на ServerFault.

Если вы беспокоитесь о физическом доступе к ПК, на самом деле вы ничего не можете сделать, и большинство вещей уже упоминалось в ответе Ремуса.

Существует еще один вариант. Это, безусловно, самый неэффективный способ от скорости и простоты разработки точки зрения, но он частично защитит вас от любой атаки на вашем сервере (включая физический). На самом деле это довольно просто, но немного сложно реализовать - только хранить зашифрованные данные в базе данных и обрабатывать все клиентские приложения шифрования/дешифрования с помощью javascript или flash. Только у клиента будет ключ, и данные всегда будут передаваться по проводу и сохранены в зашифрованном формате. Самый большой недостаток заключается в том, что, как только клиент забудет ключ, нет пути назад, данные недоступны.

Конечно, все дело в времени, деньгах и усилиях - с достаточным количеством этих вещей можно сломать все.

Смежные вопросы