Как сохранить пароль сервера в клиенте Java для последующего повторного подключения? - PullRequest
5 голосов
/ 10 мая 2011

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

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

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

Наконец, в общем, насколько легко для кого-то подключить отладчик к работающему приложению на рабочем столе Java или Android, когда приложение правильно «очищено» от символов отладки? Мне даже нужно беспокоиться об этом случае, или Java защитит мое приложение доставки от наличия отладчика или другого анализатора памяти, подключенного к нему?

Ответы [ 3 ]

1 голос
/ 10 мая 2011

хакер может получить пароль, если у него есть доступ к приложению в отладчике.

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

И у хакера есть доступ после того, как они сохранили кейлоггер на компьютере пользователя.

Является ли это просто фактом жизни, когда нужно временно хранить пароль на клиенте?

Нет.

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

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

Подумав об единственном сценарии использования, когда пользователь запускает клиентское приложение, запущенное под отладчиком, я не уверен, что безопасность «нарушена», поскольку он уже знал пароль.

Полагаю, Генри Хакер мог бы запустить приложение в отладчике, скрыть это на другом дисплее, отключив питание, затем запустив его, чтобы получить реального пользователя, и заставить его ввести свой пароль на рабочей станции разработки, которая один из мониторов выключен Вы говорите об «доступе к приложению в отладчике»?

Мне даже нужно беспокоиться об этом случае,

Не совсем

или Java защитит мое приложение доставки от наличия отладчика или другого анализатора памяти, подключенного к нему?

Нет, Java не защищает ваших пользователей. Здравый смысл защищает ваших пользователей.

Если отладчик работает, он не должен использовать компьютер.

И в 99% случаев они не запускают отладчик.

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

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


Это полностью отличается от атаки "человек посередине" или атаки с дистанционным управлением.

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


поместите его в хранилище ключей и получите позже для повторного подключения

Это все, что ты можешь сделать. Сценарий «подключить отладчик» не может быть предотвращен вашими приложениями Задача ОС - предупредить пользователя о подключении отладчика.

Если вы беспокоитесь об ответственности, не храните пароли. Окончание ответственности.

0 голосов
/ 10 мая 2011

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

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

0 голосов
/ 10 мая 2011

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

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

...