2015-10-13 1 views
1

Мы работаем над мобильным приложением, которое взаимодействует с бэкэнд через REST API через SSL. Мобильное устройство выполняет проверку сертификата при вызове API (используя стандартные библиотеки в мобильных инфраструктурах). Если мы попытаемся подключить мобильное устройство через прокси (например, Charles), мы увидим весь трафик, но он зашифрован - как и ожидалось. Однако, если я разрешаю прокси SSL, создаю корневой сертификат и устанавливаю этот сертификат на моем устройстве, я увижу все данные в ясном тексте через Чарльз - опять же, как и ожидалось.Защита мобильного приложения от атаки «человек-в-середине»

Вопрос в том, как предотвратить это? Основная цель, конечно же, состоит в том, чтобы предоставлять данные ТОЛЬКО, если на устройствах разрешен сервер с допустимым сертификатом для этого сервера.

ответ

0

Единственный способ предотвратить это через certificate pinning, но если злоумышленник может установить корневой сертификат перед подключением в первый раз к вашему API, вы все равно можете быть MiM'ed.

+0

Означает ли это, что нет способа предотвратить это? Независимо от того, насколько сложным является решение. –

+0

Как может быть? Цепочка доверия сертификата сообщает вам, доверять ли серверу, к которому вы подключаетесь. Но если кто-то может установить корневой сертификат перед тем, как вы подключитесь в первый раз, нет способа определить, является ли цепочка доверия подлинной. – MvdD

+0

Для кого-то, кто сможет изменить корневые сертификаты на устройстве, будет означать, что у них уже есть высокий уровень доступа к устройству, и если они действительно хотели, это может повредить, независимо от используемого SSL. – Peter

2

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

Проблема с этим, однако, является накладными расходами при обновлении SSL. Вам нужно будет выпустить обновление для приложения с новым значением отпечатка пальца. Это также остановит пользователей, использующих приложение, до тех пор, пока они не будут обновлены до последней версии.