Защита системы, развернутой в «враждебной» среде - PullRequest
8 голосов
/ 02 февраля 2011

В моей компании мы разрабатываем большую систему, состоящую из нескольких серверов.Система состоит из примерно 5 логических компонентов.Данные хранятся в XML, MS SQL и SQLite.Это система .Net (в основном), компоненты взаимодействуют с использованием WCF и некоторых пользовательских UDP.Клиенты получают доступ к системе в основном через пользовательский UDP или WEB (ASP.NET и Silverlight).

Защита связи проста, немного SSL и некоторая безопасность на WCF, и мы закончили.

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

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

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

Как вы предлагаете решить такую ​​проблему?


ОБНОВЛЕНИЕ 04 /02 Я ищу практические предложения или советы по продуктам, которые могут мне помочь, поэтому я начинаю вознаграждение ...

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

Также в идеале я бы хотел, чтобы HD-диски и хранилище на всех машинах взорвалось, как только кто-то приблизится к ним с помощью отвертки ... :-), но я думаю, что это зашло бы слишком далеко ...


ОБНОВЛЕНИЕ 10/02 Хорошо после некоторого исследования, я думаю, что мы собираемся попробовать что-то в том же направлении, что и система шифрования PS3, за исключением того, что мы собираемсявведите ключи для расшифровки программного обеспечения и данных с наших серверов.сделав так, мы можем на наших машинах решить, доверяем ли мы серверу, запрашивающему ключи, мы можем получить переключатель уничтожения, просто переустановив машину.это, вероятно, основано на TPM или чем-то подобном, может быть, на Intel TXT ... Я также действительно заинтересован в том, чтобы занавес памяти был важной функцией безопасности ...

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

Ответы [ 7 ]

10 голосов
/ 02 февраля 2011

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

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

С точки зрения обеспечения безопасности существует несколько проблем:

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

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

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

4 голосов
/ 02 февраля 2011

Этот вопрос задается на SO 2-3 раза в неделю, и ответ всегда один и тот же - все, что вы дали пользователю, больше не ваше.

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

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

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

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

Об обфускации : виртуализация фрагментов кода (например, продукта VMProtect) представляется довольно эффективной, однако ее также можно обойти с определенными усилиями.

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

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

4 голосов
/ 02 февраля 2011

... Честно говоря, звучит так, будто вы спрашиваете, как добавить вирус в свое приложение, что заставляет меня думать, что у вашего клиента, скорее всего, больше причин не доверять вам, чем наоборот.Это говорит о том, что это ужасная идея по ряду причин:

  1. Что произойдет, если их интернет-соединение прекратится или они переедут в офис и отключат машину на некоторое время?Вы неправильно его кодируете, и это дает сбой?Удаление данных, даже если клиент использует их правильно?
  2. Я могу только предположить, что ваш запрос подразумевает, что ваше приложение не предоставляет возможности резервного копирования.Я прав?Звучит так же, как продукт, который я бы не купил.
  3. Насколько ценны данные, которыми управляет ваше приложение?Если он будет удален, какие финансовые потери это приведет к клиенту?Ваш юридический отдел подписал это и подтвердил, что вы не можете быть привлечены к ответственности?
2 голосов
/ 01 июня 2012

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

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

  2. Включите TPM на оборудовании и настройте его правильно для своего программного обеспечения.Это поможет прекратить прослушивание оборудования.

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

  4. Чтобы поднятьДля этого требуется техническая панель. Напишите программное обеспечение на C ++ или другом языке, отличном от .Net, поскольку байт-код MSIL легко декомпилируется в исходный код с помощью общедоступных бесплатных инструментов, и для декомпиляции чего-либо в сборке требуются дополнительные технические навыки.даже если это все еще очень выполнимо с правильными инструментами.Убедитесь, что вы включили все инструкции процессора для оборудования, которое вы будете использовать, чтобы еще больше усложнить ситуацию.

  5. Попросите ваше программное обеспечение проверять профиль оборудования (уникальные идентификаторы оборудования) развернутой системы каждый раздовольно часто.Если это не удается (как в случае изменения аппаратного обеспечения), выполните самоуничтожение.

  6. После проверки оборудования загрузите программное обеспечение из зашифрованного двоичного образа, загруженного на зашифрованный диск ОЗУ, которыйзатем сам расшифровывается в (не закрепленный!) памяти.Не закрепляйте его или используйте постоянный адрес памяти, поскольку это плохая идея.

  7. Будьте очень осторожны, так как после расшифровки ключи удаляются из ОЗУ, как некоторые компиляторыбудет тупо оптимизировать незащищенные вызовы bzero / memset0 и оставит ваш ключ в памяти.

  8. Помните, что ключи безопасности могут быть обнаружены в памяти по случайности по отношению к другим блокам памяти,Чтобы помочь смягчить это, убедитесь, что вы используете несколько «фиктивных» ключей, которые, если используются, запускают сценарий обнаружения вторжения и взрыва.Поскольку вам не нужно закреплять память, используемую клавишами, это позволит людям запускать одни и те же фиктивные клавиши несколько раз.Бонусные баллы, если вы можете генерировать все фиктивные ключи случайным образом, а реальный ключ каждый раз будет отличаться из-за # 12 ниже, так что они не могут просто искать ключ, который не меняется .. потому что все они делают.

  9. Использовать полиморфный код сборки.Помните, что сборка - это на самом деле просто числа, которые можно сделать самоизменяющимися в зависимости от инструкций и состояния стека / того, что было вызвано ранее.Например, в простой системе i386 0x0F97 (задайте байт, если указан выше) может быть легко противоположной (задайте байт, если указан ниже) инструкцией, просто вычитая 5. Используйте свои ключи для инициализации стека и используйте кэш L1 / L2 ЦП, если вы действительнохочу пойти в хардкор.

  10. Убедитесь, что ваша система понимает текущую дату / время и проверяет, чтобы текущая дата / время находились в допустимых диапазонах.Начало дня перед развертыванием и ограничение в 4 года совместимо с кривой неисправности оборудования для жестких дисков, на которые распространяется гарантия / поддержка, поэтому вы можете воспользоваться такой защитой и обеспечить хорошее время между обновлениями оборудования.При неудаче этой проверки заставьте ее убить себя.

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

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

  13. Вся криптография должна соответствовать рекомендациям FIPS. Так что используйте надежную криптографию, используйте HMACS и т. Д. Вы должны попытаться использовать спецификации FIPS-140-2-level-4, учитывая вашу текущую ситуацию, но по понятным причинам некоторые из требований могут быть неосуществимы с экономической точки зрения и реалистично, FIPS-140 -2-уровень-2 может быть вашим пределом.

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

И, наконец, некоторые не программные решения:

  1. Если он не может позвонить домой ... в качестве последнего усилия по подключению, пользовательское аппаратное устройство, подключенное к внутреннему последовательному / USB-порту, настроено на активацию реле, которое затем запускает блок Thermite, если он обнаруживает любой случай , аппаратное или программное вмешательство. Поместите его поверх жестких дисков и поместите их на материнскую плату. Тем не менее, вам нужно будет проконсультироваться с юридическим отделом для получения разрешений и т. Д., Если это не является утвержденной в США военной ситуацией, поскольку я предполагаю, что вы находитесь в США.

  2. Чтобы убедиться, что оборудование не взломано, см. Требования к физической безопасности FIPS для более подробной информации о том, как убедиться, что система физически защищена. Бонусные баллы, если, если вы видите о болтах / сварке современных стоек, которые вы используете в старом корпусе AS400 в качестве камуфляжа, чтобы помочь смягчить движение / повреждение оборудования. Младшие парни не будут знать, что делать, и будут беспокоиться о том, чтобы сломать «сосать старые вещи», пожилые парни будут удивляться «невнятно?», И большинство из них оставят кровь, которая может быть использована позже как свидетельство фальсификации, если они будут часто вмешиваться. дело с острыми краями, по крайней мере, исходя из моего собственного опыта.

  3. В случае уведомления о вторжении, сбросить его с орбиты ... это единственный способ быть уверенным. ;) Просто убедитесь, что у вас есть все юридические формы и требования к доступу, чтобы они были довольны, чтобы юридические специалисты были довольны снижением риска или ответственности ... Или вы можете настроить свою систему уведомлений так, чтобы она автоматически отправляла электронные письма / текстовые сообщения / звонки по телефону, как только вы получите уведомление о том, что оно взорвалось.

2 голосов
/ 10 февраля 2011

Как все говорили, волшебной пули нет. Пользователь может выключить компьютер, подключить HD-диск в качестве ведомого устройства к другому компьютеру, создать резервную копию всего, выполнить обратный анализ кода и успешно его взломать. Если у пользователя есть физический доступ к исполняемому файлу, он может быть скомпрометирован, и в 100% случаев ничего не останется, чтобы остановить его.

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

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

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

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

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

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

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

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


НО, ЕСЛИ ВЫ ДЕЙСТВИТЕЛЬНО ХОТИТЕ НЕКОТОРЫХ ИДЕЙ, И ДЕЙСТВИТЕЛЬНО ХОТИТЕ ДЕЛАТЬ, ЗДЕСЬ МЫ ИДЕМ:

Я мог бы предложить вам сделать вашу программу мутантом. И.Е .: Когда вы расшифровываете свой код, зашифруйте его другим ключом и выбросьте старый ключ. Получите новый ключ от сервера и подтвердите, что ключ сам по себе закодирован таким образом, что было бы очень трудно издеваться над сервером чем-то, что дает скомпрометированные новые ключи. Сделайте некоторую гарантию того, что ключ уникален и никогда не используется повторно. Опять же, это не является неразрушимым (и первое, что может сделать взломщик, это атаковать эту самую функцию).

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

РЕДАКТИРОВАТЬ: И, очевидно, сделать часть ненужного кода выглядящей лучше, чем правильную, чтобы взломщик выглядел там в первую очередь, эффективно теряя время и терпение. Излишне говорить, что все запутывают, поэтому, даже если взломщик получит простой незашифрованный исполняемый код, он все равно выглядит запутанным и очень странным.

1 голос
/ 10 февраля 2011

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

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

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

Обычно безопасность - это проблема системного проектирования, и вы не должны ограничиваться только техническими подходами.

1 голос
/ 09 февраля 2011

«Единственный способ получить полностью безопасную систему - разбить ее молотком»

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

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

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

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

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

...