Как обеспечить подлинность приложения .Net? - PullRequest
4 голосов
/ 23 сентября 2010

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

Ответы [ 5 ]

7 голосов
/ 23 сентября 2010

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

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

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

4 голосов
/ 23 сентября 2010

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

  • Аутентификация. Цифровые подписи, внутренние хэши и данные, предоставленные пользователем, повышают вероятность того, что вы говорите с тем, с чем, по вашему мнению, вы разговариваете. Однако программы могут быть захвачены вредоносным программным обеспечением, которое использует вашу клиентскую сборку в качестве марионетки. Даже если в вашем коде нет общедоступных хуков, фрагмент вредоносного ПО или хак, получивший разрешение на запуск с помощью SkipVerification, может отразиться на вашей сборке и вызвать частных участников.

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

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

2 голосов
/ 23 сентября 2010

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

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

1 голос
/ 23 сентября 2010

Вы не можете аутентифицировать приложения удаленно.

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

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

1 голос
/ 23 сентября 2010

Я согласен с комментариями Hounshell в том, что все данные в Интернете должны рассматриваться как ненадежные. Однако есть шаги, которые вы можете сделать, чтобы увеличить сложность требуемой атаки и предотвратить легкое вмешательство клиента, например, с использованием строгих имен, как было предложено. Сертификаты Authenticode также могут обеспечить защиту от взлома кода и обеспечить подлинность программного обеспечения из определенного источника.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...