Как аутентифицировать клиентское приложение для доверия отправленных с него сообщений - PullRequest
2 голосов
/ 16 июля 2009

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

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

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

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

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

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

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

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

Любые мысли или помощь будут с благодарностью!

Ответы [ 3 ]

3 голосов
/ 16 июля 2009

невозможно.

Вы можете аутентифицировать пользователей, но не приложение.

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

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

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

1 голос
/ 16 июля 2009

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

1 голос
/ 16 июля 2009

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

...