2015-02-12 2 views
2

Предположим, у вас есть приложение, которое использует пароли. Во время разработки вы хотите устранить некоторые проблемы и использовать NSLog(), чтобы распечатать пароль, чтобы убедиться, что он работает правильно.Уходит из NSLogs на риск безопасности?

В какой-то момент вы счастливы и все работает. Вы отправляете свое приложение в Apple и, наконец, приложение принимается и отправляется в магазин приложений.

Вы забыли удалить NSLog(), какой выход пароль ....

Есть ли способ, это может быть плохо? Или есть какой-нибудь способ, который хакер может слушать тех NSLogs()?

+1

Можно просмотреть выход NSLog из Xcode. Даже в сборке. Window> устройства. Это плохо, поскольку телефоны можно украсть! – Eyeball

+2

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

+0

Это очень плохая практика. Не используйте NSLogs для отладки. Используйте точки останова, которые выводятся на консоль или, что еще лучше, отслеживание активности. –

ответ

3

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

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

+1

Также любой может скачать бесплатный консольный ридер и подключить устройство во время работы приложение, чтобы увидеть, что выводит NSLog. – ChrisH

+0

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

+0

@ Maarten1909 Это предполагает, что кто-то еще «плохой парень». Я предполагаю, что «плохим парнем» может быть вы (в моем примере это будет Алиса). – dasblinkenlight

1

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

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

1

думаю. журнал устройства будет содержать этот пароль! это можно увидеть в журналах xcode-window-device/device.

+0

Я просто смотрел туда и искал некоторые NSLogs, но не нашел его. – user3892683

+0

Я проверю, что он точно скажет вам –

1

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

NSLog(@"user entered password '%@'", passwordString) 

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

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

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

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

+0

Последний абзац точно. В вашем исходном коде не должно быть NSLog, если только вы не укажете, что пользователь узнает, как открыть файлы журнала, прочитать выход NSLog и действовать на него. – gnasher729

Смежные вопросы