В настоящее время я пишу свое первое приложение для Android и решил использовать конечные точки Google. меня защитить мои методы Серверных конечных точек, следуя эту документацию: https://cloud.google.com/appengine/docs/java/endpoints/auth, https://cloud.google.com/appengine/docs/java/endpoints/gen_clients, https://cloud.google.com/appengine/docs/java/endpoints/consume_androidКак избежать атаки «человек-в-середине» при использовании конечных точек Google Cloud?
В основном вы должны генерировать WEB_CLIENT_ID и ANDROID_CLIENT_ID для конечных точек, добавить пары пользователя на каждый метод вы хотите, чтобы обеспечить и, наконец, проверить внутри метода, который пользователь не имеет значение NULL, иначе throw OAuthRequestException.
У меня есть построить клиент андроид библиотеку и настроить его, как это в моем андроиде приложении:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
String accountName = preferences.getString(MainActivity.PREF_ACCOUNT_NAME, null);
GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(context,
"server:client_id:xxxxxxxxx-xxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com");
credential.setSelectedAccountName(accountName);
DataLoaderApi.Builder builder = new DataLoaderApi.Builder(AndroidHttp.newCompatibleTransport(),
new AndroidJsonFactory(), credential);
На первом взгляд кажется, работает очень хорошо, вы не можете использовать методы бэкэнда без удостоверения. (Вы будете иметь 401 сообщение об ошибке)
К сожалению, я заметил, что все еще можно расшифровать запрос HTTPS/ответ серверными конечными точками, если вы используете инструмент, как «Charles Proxy» (https://www.charlesproxy.com/). Вам просто нужно установить сертификат прокси-сервера charles на свой смартфон и настроить прокси-сервер.
Вот еще одно описания тех же проблемы: http://nickfishman.com/post/50557873036/reverse-engineering-native-apps-by-intercepting-network
Теперь у вас есть конечные точки URL, используемое андроид приложение, вы получите все из параметров посланных в каждом запросе и все свойства заголовка даже авторизация свойства с маркером, поэтому в основном все сведения, которые вам нужны для использования моих конечных точек в вашем приложении. :( Я знаю, что маркер истекает через некоторое время, но в то же время вы можете извлечь мои ДАННЫЕ
Google говорит о том, что в Google облако магазина документ:. https://cloud.google.com/storage/docs/concepts-techniques#bestpractices
«Убедитесь, что вы используете Библиотека HTTPS, которая проверяет сертификаты сервера. Отсутствие проверки сертификата сервера делает ваше приложение уязвимым для атак типа «человек в середине» или других атак ».
Отлично, но когда вы используете клиентскую библиотеку конечных точек, сгенерированную с помощью своего инструмента, вы уязвимы также.
Я знаю, что есть решение, чтобы избежать этой проблемы: https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning
Но как я могу использовать сгенерированный оконечные клиента андроид библиотеку и избежать человек-в-середине атаки?