Анализ взаимодействия мобильных Android-приложений с API социальных сетей Facebook, Instagram, ВКонтакте

    Не секрет, что большинство крупных сервисов на серверной стороне используют какой-либо API (Application Programming Interface) для взаимодействия с различными клиентами.

    На «очной ставке» NeoQUEST-2016 Максим Хазов рассказал о различных подходах к определению и использованию скрытого серверного API-функционала на примере таких популярных сервисов, как ВКонтакте, Instagram, Facebook.

    В данной статье остановимся на основных моментах доклада и поделимся всеми электронными материалами: видеозаписью выступления, презентацией, а также демонстрациями атак для каждой рассматриваемой социальной сети (всё под катом).

    Намекнём: «прогулки» по социальным сетям ещё предстоят участникам NeoQUEST-2017, регистрация на online-этап которого идет полным ходом!

    Как это звучало на NeoQUEST?


    Сразу же, как и обещали, делимся презентацией (тык) и докладом:



    Зачем определять API?





    Основных цели в данном случае две:

    1. Искать уязвимости (на серверной стороне или в протоколе взаимодействия).
    2. Автоматизировать действия в социальных сетях (всеми любимые “боты”).

    Подобных ботов можно назвать “хамелеонами”, так как они будут мимикрировать под официальное мобильное приложение сервиса, выполняя такие же запросы с такой же структурой. На серверной стороне будет непросто отличить такого бота от настоящего пользователя мобильного приложения.

    Как изучать API?


    Есть 3 главных направления:

    • Изучение документации (хорошо, если она есть!);
    • Анализ сетевого трафика (наиболее простой способ, далее выбран в качестве основного);
    • Реверс-инжиниринг мобильного приложения (наиболее “хардкорный” способ, но иногда без него не обойтись).

    Примеры и демонстрации




    Для демонстраций была использована контролируемая Wi-Fi точка, а также прокси для HTTP-запросов Burp Suite. В данном случае все тестируемые приложения взаимодействовали с API с помощью протокола HTTP и его модификаций.

    ВАЖНО!


    Исследование проводилось весной-летом 2016 года, на данный момент в архитектуре приложений и протоколов взаимодействия могут быть изменения (например, с ноября 2016 приложение ВКонтакте для Android больше не поддерживает протокол HTTP).

    ВКонтакте и незащищенный протокол HTTP


    Мобильное приложение ВКонтакте под Android по умолчанию использует протокол HTTP, а значит (как было показано в первой части доклада, видеозапись которого в конце статьи):

    1. Приложение уязвимо для атак типа Man in the Middle (MITM). Тем не менее, API предусматривает некоторые меры защиты от модификации и повторения запросов.
    2. Не составляет никакого труда проанализировать API, используемое приложением (хотя к нему и так существует открытая документация).

    В демонстрации показан перехват незашифрованного трафика и нахождение в нем запроса к API, отвечающего за отправку сообщения.



    Instagram и HTTPS


    Во второй части доклада было рассмотрено приложение Instagram под Android, для взаимодействия с API оно использует защищенный протокол HTTPS (HTTP + SSL). Это значит, что в общем случае (при отсутствии доступа к устройству у исследователя и достаточно современной версии TLS) протокол взаимодействия не уязвим к атакам MITM.

    Но, имея доступ к телефону, можно установить на него свой корневой сертификат и легко расшифровывать трафик, подменяя сертификаты для HTTPS соединений (BurpSuite умеет это делать в автоматическом режиме). В демонстрации показаны перехват шифрованного трафика после установки на телефон контролируемого корневого сертификата и нахождение в нем запроса к API, отвечающего за лайк к фотографии.



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

    Чем интересно это приватное API в плане “ботоведения”? Главное отличие приватного API: подпись всех важных запросов секретным ключом (уникальным для версии приложения). Так как ключ хранится внутри приложения, можно достать его с помощью реверс-инжиниринга приложения.

    Facebook и SSL Pinning


    В третьей части доклада было рассмотрено приложение Facebook под Android. Данное приложение для взаимодействия с API использует защищенный протокол HTTPS + надстройку под названием SSL Pinning.

    SSL Pinning – внедрение в код мобильного приложения SSL-сертификата сервера API. Эта технология предназначена для защиты от перехвата трафика путем установки корневого сертификата на устройство и подмены сертификатов.

    Тем не менее, SSL Pinning можно отключить (и даже разными способами):

    1. С помощью декомпиляции и модификации приложения (сложный способ).
    2. Модифицируя низкоуровневые SSL функции на устройстве (требует root-доступ, не всегда работает стабильно). Программы Android SSL Bypass, iOS SSL KillSwitch работают именно по этому принципу.

    В докладе был продемонстрирован способ отключения SSL Pinning в мобильном приложении Facebook под Android (с помощью удаления одной из библиотек, используемых приложением – libsslx.so) и последующий успешный перехват трафика.

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

    Также был найден недокументированный метод API, позволяющий получить ID пользователя Facebook по номеру телефона. Вот как выглядит демонстрация возможного автоматизированного использования полученных недокументированных методов:



    В заключение


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

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

    На «очной ставке» NeoQUEST-2017, которая пройдет 29 июня в Питере, как и всегда, будут классные доклады о самых актуальных тенденциях кибербезопасности, современных механизмах защиты и способах их обхода.

    Если ты не из Питера, смело планируй свой отпуск на июнь и приезжай! Белые ночи, разводные мосты, бесконечные дожди и NeoQUEST-2017 космической тематики с докладами, демонстрациями, конкурсами и призами — все это ждет тебя. Также ты можешь посетить «очную ставку» как участник hackquest и сразиться за главный приз — поездку на одну из международных конференций по информационной безопасности! Для этого — регистрируйся тут и с 1 по 10 марта проходи задания online-этапа. Возможно, именно ты окажешься лучшим? Узнаем 10 марта…
    НеоБИТ
    Компания

    Комментарии 2

      0
      приложение Instagram под Android, для взаимодействия с API оно использует защищенный протокол HTTPS (HTTP + SSL)

      Вроде говорили, что Telegram — защищённый месседжер. Судя по всему он пользуется теми же методами для шифрования, что и XMPP? Однако в XMPP можно использовать свой собственный сервер, который может быть установлен хоть у себя дома. Я правильно понял?
        0
        Вы не спутали Instagram и Telegram? Нет не теми же методами. Алгоритмами — возможно. Протокол Телеграмма подразумевает многоуровневое шифрование https://core.telegram.org/mtproto, у XMPP же просто оборачивается в SSL контейнер.

        У Телеграмма открытый протокол и исходиники клиентов, и хоть нет исходников сервера, но вы можете сами его написать при желании.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое