AWS AccessKeyId и SecretKey в мобильном приложении - PullRequest
0 голосов
/ 08 января 2020

У меня вопрос безопасности при настройке мобильного приложения с AWS в качестве бэкэнда. Чтобы начать работу с мобильным SDK, вам нужна конфигурация aws. json, которая содержит AppClientId и AppClientSecret. Хотя в соответствии с документацией говорится, что лучшие практики заключаются в том, чтобы "управлять ключами доступа так же надежно, как вы используете свое имя пользователя и пароль". Кроме того, если бы вы заглянули внутрь файла IPA / APK, вы легко могли бы извлечь эти ключи. Мой вопрос - это действительно имеет значение? Каковы риски безопасности? Я знаю, что они используются для подписи запросов, поэтому кто-нибудь может использовать эти ключи для подписи произвольных запросов? У меня есть настройка пула пользователей, позволяющая только аутентифицированному пользователю вызывать лямбда-функцию.

Ответы [ 3 ]

1 голос
/ 10 января 2020

ВАШИ ВОПРОСЫ

Чтобы начать работу с мобильным SDK, вам нужна конфигурация aws. json, которая содержит AppClientId и AppClientSecret.

С того момента, как вы отправили секрет в двоичном файле мобильного приложения, вы должны рассматривать его как принадлежащий домену publi c, то есть больше не секрет, потому что он может быть захвачен злоумышленники, и могут подвергаться повторному использованию и злоупотреблению для отправки запросов к вашему бэкэнду от имени вашего мобильного приложения, what в запросе и вашего аутентифицированного пользователя, who в запрос.

Список открытых и платных инструментов, позволяющих легко атаковать ваше мобильное приложение, бесконечен, но список некоторых из них можно найти в моем личном Github gist,

Более того, если бы вы заглянули внутрь файла IPA / APK, вы легко могли бы извлечь эти ключи. Мой вопрос - действительно ли это важно?

Зависит от того, насколько вы цените данные, которые могут быть доставлены через ваши конечные точки бэкэнда, и сколько денег вы готовы заплатить в счетах AWS.

Вы сказали, что секреты легко найти с помощью анализа c бинарного кода вашего мобильного приложения, но вы можете сделать их гораздо труднее найти, и в этом Github репо для простое демонстрационное приложение Android, вы можете увидеть здесь использование собственного C кода для скрытия ключа API. Вы можете найти больше информации в официальных документах Google, здесь и здесь .

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

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

У меня есть настройка пула пользователей, позволяющая только аутентифицированному пользователю вызывать лямбда-функцию.

Этот пул пользователей будет идентифицировать аутентифицированного пользователя, другими словами who в запросе, но он не сможет идентифицировать / аутентифицировать , что такое выполнение запроса.

Подумайте о what , как если бы запрос был сделан вашим подлинным мобильным приложением, точно так же, как вы загрузили его в магазин приложений, или это его модифицированная версия. один из них инструктируется Frida или подобной платформой, или это запрос от Postman или Curl.

ВОЗМОЖНОЕ РЕШЕНИЕ

Я бы порекомендовал вам использовать шлюз API AWS в сочетании с решением для аттестации мобильных приложений для идентификации / аутентификации , что делает запрос в От имени who , вашего аутентифицированного пользователя, и, как уже предлагалось, я бы использовал токены AWS STS для аутентифицированного пользователя:

Вы можете используйте AWS Security Token Service (AWS STS) для создания и предоставления доверенным пользователям временных учетных данных, которые могут контролировать доступ к вашим AWS ресурсам.

GOING EXTRA MILE

Я всегда хотел бы порекомендовать отличную работу и усилия, которые OW ASP вкладывает в помощь разработчикам в обеспечении безопасности их приложений, поэтому я бы порекомендовал вам Github repo OW ASP - Руководство по тестированию мобильной безопасности :

Руководство по тестированию мобильной безопасности (MSTG) - это всеобъемлющее руководство по разработке, тестированию и реверс-инжинирингу безопасности мобильных приложений.

0 голосов
/ 09 января 2020

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

Реальный ответ - использовать AWS идентификаторы Cognito для генерации токенов STS для данной роли и иметь роль с разрешениями, которые вы нужно. Это позволяет вам иметь контрольный журнал (своего рода) для каждого отдельного пользователя. Это позволяет отключить регистрацию или убить разрешения отдельных пользователей, не нарушая приложение для всех остальных. Это позволяет иметь разных пользователей с разными разрешениями гораздо более контролируемым и масштабируемым образом.

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

Здесь приведена документация с примерами приложений и краткими руководствами по началу работы с Cognito: https://aws.amazon.com/cognito/dev-resources/

0 голосов
/ 08 января 2020

Вам нужно защитить его в два этапа

1) вам нужно создать логи c для кодирования и декодирования ваших учетных данных

Лучшее место для хранения включено AWS Учетные данные в iOS приложении

2) теперь SDK позволяет передавать JSONObject, содержащий конфигурацию, из файла awsconfiguration. json. Вы можете хранить информацию в JSONObject в своем собственном механизме безопасности и предоставлять ее во время выполнения через конструктор.

https://github.com/aws-amplify/aws-sdk-android/issues/711

...