[Вопросы и ответы] Почему ваш Charles не может перехватывать пакеты?

HTTP
[Вопросы и ответы] Почему ваш Charles не может перехватывать пакеты?

Как инженер веб-разработки, и сеть посвящена каждый день. Чарльз в качестве сетевых инструментов захвата пакетов, веб-разработка стала почти стандартной.

Эта статья яОбобщено после подробного использования Чарльза, В отличие от других статей, которые вводят Чарльз, эта статья не будет в подробности о различных особенностях Чарльза (таких как удаленное и переписать), но будет сосредоточиться на анализе проблемы:При каких обстоятельствах Чарльзу не удастся перехватить пакеты?

Чтобы решить эту проблему, я проанализирую принцип Чарльза и объединим его с официальными политиками Android/iOS, чтобы последовательно проанализировать проблемы сбоев в пакете захвата Чарльза. Если вы найдете это полезным после прочтения,Обязательно поставь лайк 🌟, спасибо, это действительно много значит для меня!

1. Принцип захвата пакетов Чарльза

Большинство программ для захвата пакетов на рынке основаны на следующем принципе:Атака «человек посередине» (аббревиатура: MITM).

Википедия определяет MITM следующим образом:

В области криптографии и компьютерной безопасности атака «человек посередине» означает, что злоумышленник устанавливает независимое соединение с обоими концами связи и обменивается полученными данными, так что два конца связи думают, что они непосредственное общение друг с другом через приватное соединение.диалог,Но на самом деле вся сессия полностью контролируется злоумышленником.

Приведенное выше определение написано очень четко.Я нарисовал картинку с Чарльзом, и в сочетании с направлением стрелки я могу понять поток HTTP-пакетов:

MITM

Просто смотреть на теорию немного сухо, мы можем использовать пример, чтобы увидеть внутреннюю работу Чарльза. Я посещаю браузер моего компьютераcdn.staticfile.orgHTTP-ресурс, я использовал Wireshark для захвата определенных сетевых пакетов:

Объединив захват пакетов Wireshark и сетевой анализ Чарльза, мы можем увидеть поток сообщений этого HTTP-запроса:

  1. браузер (Client) от номера порта56075Инициировать запрос, запрос отправляется на прослушивание локального Чарльза8888порт(MITM Server), это подключение осуществляется непосредственно на машине

  2. Получив запрос браузера, Чарльз начинает с номера порта56076(MITM Client), чтобы инициировать новый запрос, потому что этот сетевой пакет будет поступать в общедоступную сеть, поэтому IP-адрес192.168.31.44(IP-адрес моего компьютера, который будет представлен в следующем разделе);cdn.staticfile.org(Server) ИП есть111.63.183.223, так как это HTTP-запрос, номер порта80

  3. 111.63.183.223:80Возвращает HTTP-ответ прокси-клиенту Чарльза.192.168.31.44:56076

  4. Чарльз делает некоторую обработку внутренне (Capture & Analysis), а затем передать ответное сообщение через8888порт отправлен в127.0.0.1:56075, здесь браузер получает ответ

На втором и третьем шагах сообщение проходит через Чарльза, и Чарльз затем может выполнить некоторую обработку сообщения, например удаленное перенаправление, перезапись, кэширование и визуализацию сообщения и другие операции.

Во-вторых, конфигурация захвата Чарльза

Для продолжения статьи здесь я кратко объясню настройку прокси-сервера захвата пакетов Чарльза. Если вы знакомы с этим местом, вы можете пропустить его.Если вы не знакомы с ним, вы можете сохранить статью для последующего поиска.


Прежде чем приступить к настройке, давайте рассмотрим базовые знания о сети.Если сетевые данные должны быть переданы от A к B, необходимо определить пять ключевых элементов информации, чтобы определить соединение:源 IP 地址,源端口,传输层协议,目的 IP 地址а также目的端口. Эти 5 ключевых элементов информации также называются五元组, Quintuple может определить соединение.

五元组

Если вы попадаете с Чарльзом, мы должны проанализировать контроль Quintuple MITM Server и клиентскую связь между агентом:

  • 源 IP 地址: IP-адрес захваченного приложения, как правило, IP-адрес устройства, как правило, не изменяется.
  • 源端口: номер порта захваченного приложения, который обычно назначается операционной системой и не может быть изменен.
  • 传输层协议: Charles в настоящее время основным прокси является протокол HTTP, обычно TCP
  • 目的 IP 地址: IP-адрес Чарльза, как правило, локальный IP-адрес компьютера, как правило, не изменяется.
  • 目的端口: прокси-порт Чарльза, по умолчанию 8888,Может быть изменен

⚠️ Примечание: Только в вышеприведенном анализе рассматривается только общая ситуация.Если вы действительно хотите измениться, вы можете изменить это, но это HACK-поведение не рассматривается в этой статье.

Из приведенного выше анализа мы видим, что если мы хотим пройти через пятерку, мы в основном фокусируемся на двух моментах:IP-адрес получателяа такжепорт назначения.


Давайте сначала проанализируемIP-адрес получателя. Поскольку Чарльз установлен на компьютере, IP-адрес Чарльза является IP-адресом компьютера. Если вы компьютер Mac, вы можете нажать и удерживатьoption, а затем щелкните значок Wi-Fi в строке меню с помощью мыши, чтобы получить IP-адрес компьютера. можно также посетитьСистемные настройки -> СетьПолучите IP-адрес. Вот мой IP-адрес192.168.31.44, который будет использован позже.

Доступ к номеру прокси-порта Чарльза можно получить изCharles -> Proxy -> Proxy SetttingsОбзор и изменить его. По умолчанию порт8888Обычно не рекомендуется модификация.

Настройка HTTP-прокси

После определения IP-адреса и номера порта Charles мы можем настроить HTTP-прокси для каждого устройства.

1. Конфигурация HTTP-прокси на стороне компьютера

Независимо от того, используете ли вы Windows или Mac, Charles в качестве APP, установленного на компьютере, при проксировании локального запроса сетевые данные пересылаются локально, поэтому, условно говоря, конфигурация на компьютере является самой простой. мы просто идем по путиCharles -> Proxy -> macOS ProxyНажмите, чтобы включить прокси.

Поскольку собственный прокси-сервер по умолчанию отключен, мы также можемProxy Setttingsсредний щелчокmacOS, чек об оплатеEnable macOS proxy on lounch, поэтому каждый раз, когда вы открываете Charles, прокси-сервер будет включен по умолчанию.

2. Настройка прокси iOS

Если вы хотите перехватывать сетевые пакеты iOS, вам нужно только перенаправить сетевые пакеты iOS на IP-адрес и порт прокси-сервера.

Перед настройкой нам нужно убедиться, что мобильный телефон и компьютер находятся в одной локальной сети (как правило, мобильный телефон и компьютер вместе с Wi-Fi), а затем открыть iOSНастройки -> Wi-FiВ страницу настроек соединения Wi-Fi имеет, ужелительно расположен в нижнем выбора агента, а затем вручную настроить прокси.

серверВходными данными является IP-адрес Чарльза, полученный ранее, в данном случае это192.168.31.44;портэто предыдущий порт прокси-сервера Charles, обычно8888.

3.Конфигурация прокси-сервера Android

Конфигурация прокси Android на самом деле похожа на iOS, но производителей Android много, а этапы работы не так унифицированы, как iOS, и нет особого смысла описывать их по одному, поэтому я только продемонстрирую простые шаги:

Настройка HTTPS-прокси

HTTPS — это, по сути, протокол HTTP + протокол TLS. С точки зрения установления соединения четыре рукопожатия TLS добавляются после трехстороннего рукопожатия TCP. Как показано на рисунке ниже, сертификат открытого ключа для шифрования будет проверен во время TLS. процесс рукопожатия, поэтому нам нужно вручную установить и доверять сертификату Чарльза, чтобы достичь цели захвата пакетов HTTPS.

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

⚠️ Примечание. Перед установкой сертификата убедитесь, что настроен HTTP-прокси.

1. Установите сертификат на компьютер

Установка сертификата на компьютер является самым простым. Нажмите первымCharles -> Help -> SSL Proxying -> Install Charles Root CertificateБоковой сертификат установлен на вашем компьютере, затем щелкните сертификат, который вы только что установили, вручную доверяйте всем правам и, наконец, введите пароль, чтобы сохранить изменения.

2. Сертификат установки iOS

Установка сертификатов для iOS относительно сложна. Нажмите сначалаCharles -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Derive, в это время появится всплывающее окно, а затем мы следуем подсказкам для доступа к мобильному телефонуchls.pro/ssl, загрузите и установите сертификат Charles CA.

После установки необходимо вручную включить разрешения. приходи первымОбщие -> Управление профилями и устройствами -> ДовериеУстановите сертификат, который вы только что скачали, а затем перейдите кОбщие -> Об этом Mac -> Настройки доверия сертификатов -> Включить полное доверие для корневых сертификатовВручную доверяйте сертификату, и после того, как они согласятся, iOS успешно установит сертификат.

3. Сертификат установки Android

Действия по установке сертификата на Android не только хлопотны, но и малоэффективны.

Нажмите сначалаCharles -> Help -> SSL Proxying -> Save Charles Root Certificate, поместите файл сертификата с*.cerсохранить формат.

⚠️ Примечание. Когда Чарльз сохраняет файл сертификата, можно выбрать один из двух форматов:.pemа также.cer. Первый представляет собой формат контейнера сертификата, обычно кодирующий сертификат base64; последний, как правило, представляет собой сертификат двоичного формата, система Android более совместима с сертификатом двоичного формата, поэтому мы выбираем.cerдокумент.

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

3. Анализ случая сбоя захвата пакетов Charles

Этот раздел фактически находится в центре внимания этой статьи.В нем анализируются причины того, что Чарльз не может перехватить пакеты с шести направлений, от прокси-серверов до сертификатов TLS, охватывая все точки знаний о компьютерных сетях, которые очень стоит собрать и изучить.

1. Отключить прокси! Отключите прокси! Отключите прокси!

Как программист, для беспрепятственного доступа к веб-сайтам, таким как GitHub, мы всегда используем некоторые «вспомогательные инструменты». Эти инструменты обычно автоматически открывают прокси-сервер HTTP/HTTPS для захвата порта, что приводит к сбою прокси-сервера Charles.

Решить эту проблему очень просто,, чтобы не было проблем с конфликтом прокси. Мы можем просмотреть интерфейс прокси-сервера Wi-Fi на компьютере и убедиться, что следующие параметры не отмечены, прежде чем разрешить Чарльзу захватывать пакеты.

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

2. Определить протокол HTTP, через который проходят данные?

Прежде чем мы начнем этот раздел, давайте посмотрим, каково официальное определение Чарльза:

Charles is an HTTP proxy / HTTP monitor / Reverse Proxy that enables a developer to view all of the HTTP and SSL / HTTPS traffic between their machine and the Internet.

Из введения мы видим, что Чарльз ориентирован на анализ.HTTPСетевой инструмент сообщения, поэтому поддержка других протоколов очень ограничена. Например, текущие приложения обмена мгновенными сообщениями или аудио- и видеофайлы в основном инкапсулированы сами по себе на основе определенного протокола транспортного уровня из соображений производительности и безопасности, и Чарльз определенно не сможет захватить эти данные.

Прочитав официальную документацию Чарльза и проведя собственное тестирование, Чарльз поддерживает следующие протоколы:

  • HTTP/1.1
  • HTTPS
  • HTTP/2
  • ws(веб-сокет)
  • wss(WebSocket Secure, WebSocket с шифрованием TLS)
  • SOCKS

⚠️ Примечание:Чарльз не поддерживает HTTP/3, но большинство веб-сайтов, поддерживающих HTTP/3, имеют пониженную версию. Например, при обычном использовании Chrome для доступа к Google используется протокол HTTP / 3. После подключения к прокси-серверу Charles протокол будет понижен до HTTP / 2.

Перечисленные выше протоколы на самом деле покрывают 90% прикладных сценариев ежедневной разработки бизнеса.Если вы хотите перехватывать пакеты других протоколов, вам следует честно использовать Wireshark.

3. Перед открытием черного списка снова поймай забыл выключить

Думаю, в своей повседневной работе вы или ваши коллеги наверняка сталкивались с таким сценарием:

Тестовая газета является ошибкой, и долгосрочная проблема заключается в том, что HTTP-отчет должен быть проблемой внешнего или внутреннего интерфейса. Было обнаружено, что запрос был безжалостным. Она обнаружила черный и белый список, запрошенный Блоком.

Черный и белый список в приведенном выше случае — это просто общий термин.В частности, в Чарльзе следующие конфигурации могут вызвать недопонимание:

  • Proxy SettingsНекоторые URL-адреса фильтруются в параметрах
  • SSL Proxying Settingsне соответствует всем URL-адресам
  • Block List/Allow ListСделать настройки черного и белого списка
  • DNS SpoofingОтображение хоста
  • Map Remoteперенаправил запрос
  • Rewriteпереписать запрос
  • ......

Я написал несколько высокочастотных Charles Tools.Эти функции,скорее всего,забудут отключить после включения.Если возникнет проблема,проверить их по одной?

На самом деле у Чарльза есть очень незаметная особенность — его пользовательский интерфейс.В правом нижнем углу будут показаны функции, которые Чарльз включает., если вы подозреваете, что у вашего Чарльза есть ограничения интерфейса, вы можете бросить взгляд на включенные функции в правом нижнем углу, а затем проверить их по очереди.

Чем выше версия 4.Android, тем труднее понять пакеты HTTPS.

В разделе "Сертификат установки Android" я сказал, что этот шаг не имеет большого значения.Основная причина:Сертификат ЦС, установленный пользователем, не имеет разрешения ROOT.

Давайте сначала посмотрим на картинку, это страница доверия сертификатов Android:

Как видно из рисунка выше, система Android делит доверие сертификатов на две части:

  • Сертификат ЦС системы: в основном есть все разрешения
  • Сертификат ЦС пользователя: Пользователь устанавливает его сам, и разрешения очень низкие

Сертификаты Charles, которые мы установили сами, относятся к пользовательским сертификатам CA. В дополнение к проблеме разрешений сертификата, разные версии Android имеют разные правила обработки разрешений:

✅:Андроид 7.0 и ниже: доверяйте сертификату ЦС пользователя, который можно просто понимать как сертификат, который мы установили для прямого получения полномочий ROOT.

✅:Android 7.0 или выше TargetsdkVersion : доверять сертификату ЦС пользователя

❌:Android 7.0 и выше, targetSdkVersion >= 24: не доверять сертификатам ЦС пользователя.


С помощью приведенного выше анализа мы можем нарисовать несколько схем для Android, чтобы доверять сертификату Charles:

1.ROOT

Укореняйте телефон Android напрямую, поместите сертификат Charles в системный сертификат и осуществите отбеливание сертификата.

2. Подготовьте мобильный телефон ниже Android 7.0

Android 7.0 - это система 2016 года, согласно новому поколению телефонов Android, в год двухлетнее обновление расчета скорости, этот телефон трудно найти

3. Подготовьте установочный пакет APP с targetSdkVersion

В 2019 году основные внутренние рынки приложений единообразно требуют, чтобы версия APP API была выше 28. Такой установочный пакет трудно найти, а итерация интернет-продукта происходит настолько быстро, что наличие установочного пакета может быть не гарантировано. .

4. Сан-операция

Нормальной дороги не получается, а андроидовских трасс еще много. В сообществе есть разные способы обойти ограничения, но к Чарльзу это не имеет никакого отношения, поэтому я не буду вдаваться в подробности. Студенты, которые любят бросать, могут изучить его.


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

Android имеетres/xml/network_security_config.xmlфайл, как следует из названия, этот файл конфигурации предназначен для управления сетевой безопасностью.

Например, в следующей конфигурации пакет выпуска доверяет толькоsystemсертификат уровня, пакет отладки также является довереннымsystemа такжеuserСертификат уровня, чтобы мы могли с радостью использовать Чарльза для захвата пакетов в среде отладки. Конечно, конфигурация безопасности должна быть больше.Заинтересованные студенты могут перейти кОфициальный сайт Android-разработчикаНаучитесь понимать.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates overridePins="true" src="system" />
        </trust-anchors>
    </base-config>
    <debug-overrides>
        <trust-anchors>
            <certificates overridePins="true" src="system" />
            <certificates overridePins="true" src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

5. Закрепление сертификата

Закрепление сертификатаЭто означает, что клиент имеет встроенный сертификат реального открытого ключа сервера.

При выполнении HTTPS-запроса сертификат открытого ключа, отправляемый сервером клиенту, должен совпадать со встроенным сертификатом открытого ключа клиента, чтобы запрос был успешным. Как правило, это действие предпринимают компании, которые придают большее значение безопасности.

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

И описано ранее, на самом деле, есть два пути:

  • Один из них — это взлом, рутирование машины и удаление фиксированного сертификата открытого ключа в приложении с помощью инструментов;

  • Другой путь правильный.Если у вас есть право на разработку этого приложения, то, как правило, у вас также есть сертификат открытого ключа и соответствующий закрытый ключ.Мы можем импортировать сертификат и закрытый ключ в Charles, чтобы решить проблему, вызванную фиксацией сертификата. .

Чарльз относительно просто импортирует сертификаты открытых ключей и закрытые ключи, нажмитеCharles -> Proxy -> SSL Proxying Setting -> Root Certificate, затем импортируйте.pemилиp12файл.

⚠️ Примечание:.p12это формат файла, который содержит как сертификат, так и ключ

6. Двусторонняя проверка сертификата

В большинстве случаев TLS является подлинностью сервера аутентификации клиента, но в некоторых сценариях, очень ориентированных на безопасность (таких как анонимные социальные сети), некоторые приложения позволяют выполнять двустороннюю проверку TLS, то есть.

В этом случае клиентнеизбежныйВстроен набор сертификатов открытых ключей и закрытых ключей. По сравнению с сервером, приложение имеет большой риск разбить оболочку, поэтому сертификат открытого ключа и закрытый ключ, как правило, очень скрыты.Например, напишите.soОн спрятан в функции алгоритма случайных чисел, которую сбитая с толку мать не знает, что увеличивает сложность расшифровки.

Я не специалист по безопасности и мало что знаю об этом исследовании, да и в своей обычной работе с такой сложной проблемой не сталкивался. Из панели функций Чарльз также должен поддерживать захват этой экстремальной сцены, но я лично не практиковал, можете попробовать.

4. Резюме

Захват Чарльза является очень распространенным профессиональным навыком, если провести тщательное исследование, вы обнаружите, что когда дело доходит до пятикратного Fi, сообщается об услугах экспедиторского агентства, криптографии и сертификате открытого ключа в знаниях MITM. В целом, только для того, чтобы освоить основы этих относительно низкоуровневых, сталкиваются с работой во всех видах странных проблем тоже, чтобы облегчить.

5. Спасибо

Если вы считаете, что эта статья хороша, пожалуйста, не забудьте поставить лайк 🌟 Поддержите автора, спасибо, для меня это действительно важно!

Приглашаю всех обратить внимание на публичный номер"Лаборатория тушеных яиц», напишите какую-нибудь оригинальную галантерею без воды.

Добро пожаловать на мой личный сайт:supercodepower.com, потому что модифицированные статьи на основных платформах будут пересматриваться, а личные блоги удобнее модифицировать и обновлять.

6. Рекомендуемое чтение

Я уже писал несколько сообщений в блоге, связанных с компьютерной сетью, охватывающих несколько ям, приветствую всех, кому это нравится: