Mitm прокси с приложением сертификата - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь смоделировать MITM-атаку через приложение для передачи сигналов Android.Это открытый исходный код, поэтому я поместил mitmproxy-ca-cert.pem в приложение для Android для закрепления, а также в мобильные доверенные сертификаты.Я все еще не получаю никакого запроса к серверу.Ошибка на стороне клиента:

NonSuccessfulResponseCodeException: Неверный ответ: 502 Bad Gateway

1 Ответ

0 голосов
/ 14 декабря 2018

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

Если это так, то добавления mitmproxy-ca-cert.pem в надежное хранилище для мобильных устройств недостаточно, вам нужночтобы настроить файл безопасности сети res/xml/network_security_config.xml согласно google docs .

Если вы все еще заполняете потерянное, попробуйте следовать статье Руки на Mobile Api Security Pinning , чтобы увидетьесли это поможет вам вернуться на правильный путь.

РЕДАКТИРОВАТЬ

Следующие инструкции действительны для Android API уровня 24 и выше.

Bash script чтобы сгенерировать хеш из открытого ключа сертификата:

#!/bin/bash
# Heavily inspired on:
#   * https://medium.com/@appmattus/android-security-ssl-pinning-1db8acb6621e#ecea

set -eu

Main()
{
    local certificate_path="${1? Missing path to certificate.}"

    local certs="$( cat ${certificate_path} )"
    local rest=$certs

    while [[ "$rest" =~ '-----BEGIN CERTIFICATE-----' ]]; do

        cert="${rest%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
        rest=${rest#*-----END CERTIFICATE-----}

        local certificate_name="$( echo "$cert" | grep 's:' | sed 's/.*s:\(.*\)/\1/' )"

        if [ -n "${certificate_name}" ]; then
            printf "\nCERTIFICATE NAME: \n ${certificate_name} \n"
        fi

        printf "\nCERTIFICATE PUBLIC KEY HASH:\n\n"

        echo "$cert" |
            openssl x509 -pubkey -noout |
            openssl rsa -pubin -outform der 2>/dev/null |
            openssl dgst -sha256 -binary |
            openssl enc -base64

        echo

        exit 0

    done
}

Main ${@}



Сохраните вышеприведенный скрипт bash где-нибудь в пути к корзине, а затем используйте его следующим образом:

$ hash-certificate-public-key.sh ~/path/to/mitmproxy-ca-cert.pem

CERTIFICATE PUBLIC KEY HASH:

gsGj6crKw/RebflwkwGIKxngaZaVxP7UsUtuF71VKDw=

Теперь скопируйте и вставьте хеши добавьте его в этот файл src / main / res / xml / network_security_config.xml :

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>

    <!-- Official Android N API -->
    <!--https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html-->
    <domain-config>
        <domain>the-domain-to-pin.com</domain>
        <trust-anchors>
            <certificates src="user" />
            <!-- <certificates src="system" /> -->
        </trust-anchors>
        <pin-set>
            <!-- THE MITM CERTIFICATE HASH -->
            <pin digest="SHA-256">gsGj6crKw/RebflwkwGIKxngaZaVxP7UsUtuF71VKDw=</pin>
        </pin-set>
    </domain-config>

</network-security-config>

А теперь включите его в AndroidManifest.xml :

<application
        android:allowBackup="true"
        <!--omitted-->
        android:networkSecurityConfig="@xml/network_security_config">

Если еще не сделано, добавьте mitmproxy сертификат для доверенного хранилища пользователя на устройстве Android, затем перекомпилируйте приложение, и теперь вы сможете перехватывать запросы.

NOTE :

Примеры кода были извлечены из репозитория Демонстрационный конвертер валют , который использовался как часть статьи Украсть этот ключ API с атакующим человеком в середине и статьей Защита HTTPS с закреплением сертификата на Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...