Как я могу удостовериться, что кто-то не отправляет поддельные данные?

Я читал Переполнение стека в течение достаточно долгого времени, но это - мой первый отправленный вопрос.

Мне записали эту программу отслеживания в C#, который собирает информацию об использовании локального компьютера и отправляет их на сервер. Данные XML-отформатированы, отправлены однажды в ~10 минут.

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

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

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

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

Заранее спасибо.

9
задан casperOne 30 April 2012 в 00:54
поделиться

6 ответов

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

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

1
ответ дан 4 December 2019 в 23:38
поделиться

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

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

Вот список некоторых обфускаторов C#.

1
ответ дан 4 December 2019 в 23:38
поделиться

1.Другой подход: Предполагая, что вы не часто меняете свой исполняемый файл. сделайте DigSig образа исполняемого файла вашего клиента (HASH+Encrypt) и отправьте его вместе с, что позволит аутентифицировать вашего клиента как настоящего клиента, а не модифицированную версию.

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

0
ответ дан 4 December 2019 в 23:38
поделиться

Как однажды выразился Раф Костер , описывая битву с хакерами в онлайн-играх клиент-сервер,

Никогда не доверяйте клиенту. Никогда ничего не кладите на клиента. Клиент находится в руках врага. Никогда не забывай об этом.

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

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

Например: если ваше приложение отправляет свои данные по электронной почте в виде обычного текста, это поможет победить примерно ноль злоумышленников. Отправив его по электронной почте rot13, можно победить, возможно, 5% злоумышленников. Отправка его в зашифрованном виде с использованием имени пользователя в качестве ключа приведет к поражению большего. Обфускация кода отправки с помощью бесплатного обфускатора победит больше. Обфускация с помощью обфускатора коммерческого уровня победит больше. Требование, чтобы у каждого клиента был аппаратный ключ, победило бы «всех, кроме самых решительных» злоумышленников, как люди любят говорить, но это, вероятно, будет недопустимой ценой.

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

2
ответ дан 4 December 2019 в 23:38
поделиться

Это кажется довольно безнадежным. Ваш трекер, вероятно, полагается на Windows для предоставления метрик, например, путем вызова GetUserName () / GetTickCount () / CollectPerformanceData () / и т. Д. Итак, плохой парень просто должен перехватить ваш код (независимо от того, насколько он запутан и не беспокоясь о декомпиляции) в любой интересующей точке входа Windows, подставить поддельные данные и позволить вашему коду продолжать свой веселый путь.

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

1
ответ дан 4 December 2019 в 23:38
поделиться

Будет ли пользователь клиента иметь права администратора компьютера? Это похоже на приложение, которое будет установлено администратором, но используется пользователями, не являющиеся администраторами. Если это так, возможно, вы могли бы сохранить свой ключ или хэш защищенным от обычных пользователей и запустить приложение в контексте пользователя администратора. Я не очень знаком с хранилищем ключей, но я ожидаю, что все версии Windows (по крайней мере, XP +) будут иметь эту функциональность. Если не хранилище ключей, то, возможно, файл, расположенный в зашифрованном каталоге, принадлежащем пользователю admin.

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

1
ответ дан 4 December 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: