Как сделать дамп роутера

Обновлено: 21.11.2024

У меня есть Comcast (Xfinity) для доступа в Интернет, кабельного телевидения и стационарного телефона. Я арендовал у них маршрутизатор в течение двадцати лет и подумываю о покупке собственного, чтобы сократить расходы. Не уверен, что мне нужно и что я заменяю.

От Comcast у меня есть маршрутизатор (с семью мигающими лампочками) и кабельная приставка (?) (которая показывает текущее время). У меня есть возможность говорить со своим кликером, чтобы переключать каналы или искать программу.

Что именно я покупаю и что сохраняю? Если я куплю новый маршрутизатор, оставлю ли я приставку для кабеля? Есть ли серьезный недостаток в том, чтобы оборудовать собственный маршрутизатор?

Спасибо за помощь.

BC AdBot (войдите для удаления)

Лучше его купить, а не арендовать.

У меня есть кабельный модем Motorola 16x4 DOCSIS 3.0

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

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

Ой, невнимательно прочитал тему, не увидел телефонную часть.

Отредактировано ET_Explorer, 29 января 2020 г., 19:27.

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

Жесткая линия; интересно. Мне только что сообщили, что моя "жесткая линия" через Comcast на самом деле не жесткая линия - вместо этого это VOIP. Это означает, что если отключится электричество, телефон не будет работать. По определению старомодная жесткая линия Bell South продолжает работать во время отключения электроэнергии. Так что не уверен, какая польза от этой жесткой линии для меня в ситуации с отключением питания.

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

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

После сборки домашнего сервера я решил реструктурировать свою сеть на базе недавно приобретенного оборудования. Мне захотелось заменить маршрутизатор, предоставленный провайдером, на компьютерный, а также заменить компонент Wi-Fi на более надежный.

Мое подключение к Интернету дома обеспечивает BT. Он приходит ко мне домой в виде соединения VDSL через стандартную телефонную линию с медной парой. Для использования соединения BT предоставляет единый объект, похожий на маршрутизатор («Домашний концентратор»), который объединяет NAT, брандмауэр, Wi-Fi и сам модем VDSL в одном устройстве. Он предназначен для удовлетворения большинства основных потребностей ежедневного использования. Он предоставляет некоторые базовые функции, такие как переадресация портов, DMZ, настраиваемый Wi-Fi (с защитой WPA2/PSK) и остальные. Обычные вещи. К сожалению, он более примечателен с точки зрения того, чего ему не хватает, чем того, что он предлагает.

Во-первых, нет возможности изменить DNS-серверы. Это массовая проблема. Я не думаю, что интернет-провайдерам следует разрешать блокировать пользователей от этой важной опции конфигурации на их маршрутизаторах в комплекте. По умолчанию Home Hub будет разрешать DNS-запросы, отправленные ему через интерфейс LAN. Он будет использовать DNS-серверы, предоставленные BT. Они не настраиваются. Их поведение полностью контролируется BT. Они могут регистрировать запросы, которые вы делаете. Они могут возвращать рекламные перенаправления вместо ответов NXDOMAIN (угон опечаток). Хотя вы можете установить DNS-серверы на каждом из своих устройств вручную, гораздо проще изменить сервер, выдаваемый DHCP-сервером, или изменить сервер, используемый распознавателем на самом устройстве.

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

Итак, я решил выбросить его и заменить чем-то более подходящим для моих требований.

Настройка уровня 1 и уровня 2

Исторически сложилось так, что до развертывания предоставляемых интернет-провайдером похожих на маршрутизатор объектов, таких как «BT Home Hub», абоненты VDSL в Великобритании получали две штуки. оборудования.Во-первых, устройство CPE, предоставленное Openreach, которое фактически преобразовало физический уровень из телефонной линии POTS с витой парой на стороне BT в Ethernet на стороне клиента. Для настройки я приобрел один из этих модемов Openreach VDSL на eBay примерно за 20 фунтов стерлингов.

Вторым устройством был маршрутизатор/брандмауэр, предоставленный их настоящим интернет-провайдером, который служил нескольким целям. Во-первых, он прервал сервисное соединение PPP. Во-вторых, он обеспечивал IP-маршрутизацию между сетью клиента и сетью BT. Он также предоставлял NAT, брандмауэр, DMZ и другие стандартные функции, ожидаемые от маршрутизаторов, предоставляемых интернет-провайдером.

Я подключил телефонную линию к модему Openreach и подключил соединение Ethernet к порту 1 на своем коммутаторе. Я установил PVID этого порта равным 999 . Это означает, что пакеты, поступающие на этот порт от модема Openreach, будут помечены VLAN 999.

Я подключил хост виртуальной машины к порту 2. Я настроил коммутатор на транковую VLAN 10 и 999 на этом порту.

Я подключил свою точку доступа Ubiquiti Unifi Wi-Fi к порту 3. Я настроил коммутатор на магистральную сеть VLAN 10 на этом порту.

Настройка подключения к Интернету

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

После того как я запустил ESXi, я установил pfSense в качестве виртуальной машины, чтобы заменить компонент маршрутизации Home Hub. pfSense — это фантастическое решение для межсетевого экрана с открытым исходным кодом. Обеспечивает маршрутизацию, межсетевой экран, NAT, VPN; а с помощью подключаемых модулей он может обеспечить расширенную безопасность на основе DPI, аналогичную той, которую предлагают высокопроизводительные коммерческие брандмауэры. Опять же, существует масса информации об основных сетевых задачах с помощью pfSense, поэтому я не буду описывать здесь действительно базовые вещи — только каверзные вещи, связанные с работой соединения PPPoE.

С точки зрения ресурсов, pfSense можно считать довольно легким для большинства целей домашнего использования. Моя виртуальная машина pfSense имеет два VCPU и 2 ГБ оперативной памяти. Я не видел, чтобы он использовал хотя бы 30 % от этого объема, а у меня запущено довольно много подключаемых модулей и дополнительных служб.

Создайте виртуальную локальную сеть PPPoE

Первым шагом было создание виртуального сетевого порта для VLAN, который будет передавать соединение PPPoE в Interfaces → VLANs → New.

Я также создал еще одну сеть VLAN — 10 — для пользователей Wi-Fi в доме.

Одно замечание, всем этим вполне можно управлять на уровне ESXi (по сути, с появлением виртуальных сетевых интерфейсов для каждой из нужных вам VLAN). Я решил не идти по этому пути, потому что он требует перезагрузки виртуальной машины pfSense каждый раз, когда вы хотите добавить VLAN. Было проще объединить все VLAN в виртуальную машину pfSense, а затем отсортировать их там.

Создайте соединение PPPoE

После создания VLAN я создал соединение PPPoE поверх новой 999 VLAN.

Подробности для вашего широкополосного подключения могут отличаться, BT, похоже, это не волнует в моем случае. Можно использовать любое имя пользователя и пароль.

Назначить интерфейсы

Затем я назначил интерфейс (в Интерфейсы → Назначение интерфейсов) только что созданному сетевому порту PPPoE. Я просто выбрал новое соединение PPPoE из раскрывающегося списка рядом с уже существующим интерфейсом WAN и нажал «Сохранить».

Если все настроено, на этом этапе должен появиться интерфейс PPPoE! Вы можете проверить статус в разделе Статус → Интерфейсы.

Я также назначил новый интерфейс для сетевого порта VLAN 10, созданного для пользователей Wi-Fi. Позже в Брандмауэр → Правила я также создал необходимые правила, чтобы разрешить маршрутизацию между подсетью пользователей Wi-Fi и основной локальной сетью, а также Интернетом. Кроме того, я настроил DHCP-сервер на интерфейсе «Пользователи Wi-Fi» для выдачи IP-адресов в отдельную подсеть. Я сделал то же самое с другой VLAN для наших VoIP-телефонов и IP-камер видеонаблюдения (чтобы изолировать их от остальной сети).

Моя окончательная настройка VLAN/подсети была следующей:

  • 999 – PPPoE
  • 10 ( 192.168.10.0/24 ) – пользователи Wi-Fi.
  • 20 ( 192.168.20.0/24 ) – IP-телефония
  • 30 ( 192.168.30.0/24 ) — видеонаблюдение

Еще

Также стоит рассмотреть Snort IDS — систему обнаружения вторжений.У pfSense есть пакет для этого, который работает очень хорошо. Кроме того, OpenVPN Server особенно легко настроить с помощью pfSense (также поддерживаются IPSec и L2TP VPN).

Кроме того, вы можете рассмотреть возможность настройки DNS и DDNS с использованием собственного (суб)домена, чтобы все было немного аккуратнее.

Xbox One и NAT

Прежде чем я переключился на pfSense и выбросил маршрутизатор BT, у меня был настоящий кошмар, когда я поддерживал требование моей второй половинки запускать две консоли Xbox One с открытым NAT (особенно расплывчатый термин, который Microsoft и другие используют для описания ситуации с полным конусом NAT, иногда с дополнительным требованием статических номеров исходных портов). Требование к статическим номерам портов в основном означает, что NAT не должен не перезаписывать исходные номера портов.

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

В итоге было решено добавить правило NAT для исходящего трафика для каждой консоли Xbox с включенным параметром Статический порт. Легкий. В остальном дополнительной настройки NAT не требовалось, кроме разрешения консолям перенаправлять порты через UPnP с использованием соответствующих правил ACL в Сервисы → UPnP и NAT-PMP → Списки управления доступом UPnP. .

Мне 30 лет, я выпускник факультета компьютерных наук, работаю в сфере разработки программного обеспечения и электроники. Мне нравится электроника, программирование, разнообразная странная музыка, а также мотоциклы.

Поделиться этой публикацией

Безопасность самостоятельных инструментов DevOps

Динамические конференции с Asterisk

Недавно я играл с конференц-связью в Asterisk. Он довольно прост в использовании.

Я работаю в ИТ-индустрии уже несколько лет, а еще дольше баловался Linux (Ubuntu). Я решил, что пора начать документировать некоторые вещи, которые я делаю. Таким образом, этот блог существует как место, где я могу записывать различные небольшие проекты, которые я предпринимаю, чтобы я мог найти их позже и чтобы другие также могли извлечь из них пользу.

Прошивка маршрутизатора -- сброс и перепрошивка

  • Получить ссылку
  • Фейсбук
  • Твиттер
  • Pinterest
  • Электронная почта
  • Другие приложения

Введение

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

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

Помимо этих сложностей, у меня не было кастомного файла прошивки, необходимого для перепрошивки. Видите ли, прошивка, которую я хотел залить на свое устройство, представляет собой настроенную версию dd-wrt, и она доступна только в предустановленном виде на маршрутизаторах, продаваемых третьей стороной, которую я не буду здесь называть. Я связался с их техподдержкой и спросил, могу ли я получить копию прошивки. Они отказались. Итак, теперь, в дополнение к моей первой проблеме, связанной с невозможностью прошить кастомную прошивку, у меня осталась вторая проблема, заключающаяся в том, что кастомную прошивку все равно не прошить.

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

Маршрутизатор, о котором идет речь

Указанное устройство представляет собой карманный маршрутизатор TP-Link TL-WR703N. Этот маленький драгоценный камень неоднократно упоминался на Hackaday. Учитывая тот факт, что есть сборка dd-wrt, и поскольку она такая вонючая дешевка, это сделка, которую трудно превзойти. Это роутер для путешествий, поэтому он подойдет только для одной комнаты или очень маленькой квартиры.

На момент написания статьи он продавался на Amazon по цене около 26 долларов США. В Китае он продается на таобао за 99 юаней (около 15 долларов США). Это же устройство, продаваемое неназванной третьей стороной с кастомной прошивкой, стоит 50 долларов США! Вы понимаете, почему было бы выгодно купить и прошить самому! Серьезно, устройство за 15 долларов за 50 долларов только для того, чтобы получить слегка модифицированную версию dd-wrt?

На устройстве, которое я купил, указано, что это аппаратное обеспечение версии 1.7, но я разобрал его и сравнил с маршрутизатором версии 1.6, полученным от третьей стороны, и, хотя я не смотрел на каждый маленький компонент, оказалось, что такая же машина. На самом деле сайт TP-Link не публикует разные прошивки для разных аппаратных версий, поэтому можно с уверенностью сказать, что они почти одинаковы.

Чтобы это произошло

К настоящему моменту вы, вероятно, бормочете: "Давай уже к делу! Что ты на самом деле сделал?" Я рад, что вы спросили. Первым делом я сбросил кастомную прошивку с роутера, который у меня уже был. Затем, вооружившись кастомной прошивкой, я смог сбросить ее на свой роутер со стоковой прошивкой. Все это стало возможным благодаря последовательному интерфейсу на плате маршрутизатора.

Последовательный порт

В Instructables есть отличная статья о подключении к последовательному интерфейсу для этого устройства. Я не заходил так далеко, как Роботанг в своей статье. Я просто припаял провод к контактным площадкам TX и RX (оранжевый и желтый провода в шаге 4 описания Robotang). Я не стал заморачиваться с заземлением или питанием, так как собирался подключить их с помощью USB-кабеля при подключении (обратите внимание, что если вы не питаете маршрутизатор от компьютера, на котором установлено последовательное соединение, вы можете необходимо также подключить к земле). Последовательный USB-адаптер, который я использовал, представляет собой устройство PL2303HX, очень похожее на это. Это устройство позволяет вам обмениваться данными с маршрутизатором через его последовательную консоль.

Я начал с маршрутизатора с пользовательской прошивкой. Я подключил контактную площадку TP_IN на маршрутизаторе к контакту TXD (передача) на моем последовательном USB-адаптере. Я подключил контактную площадку TP_OUT на маршрутизаторе к контакту RXD (получение) на моем последовательном USB-адаптере. Затем я открыл PuTTY и запустил последовательный сеанс на скорости 115200 бод с /dev/ttyUSB0 (у меня Linux, а /dev/ttyUSB0 — мой последовательный USB-адаптер).

Более подробные инструкции по вскрытию корпуса этого роутера и настройке последовательного соединения смотрите в моем отдельном посте на эту тему здесь.

Сброс кастомной прошивки

После того, как все было подключено, я подключил питание к маршрутизатору и начал видеть текст в окне PuTTY. Этот конкретный маршрутизатор (и многие другие маршрутизаторы TP-Link) достигает точки в начале процесса загрузки, когда он ждет 1 секунду, прежде чем продолжить загрузку. Секрет здесь в том, чтобы ввести tpl, прежде чем он продолжится. Это может быть сложно, поэтому я просто настроил макрос клавиатуры, чтобы набирать tpl одним нажатием клавиши. Если время выбрано правильно, маршрутизатор переходит в режим отладки, обозначенный строкой, которая читается как hornet>, и ожидает ввода данных пользователем.

Из этого интерфейса вы можете напрямую считывать и записывать микропрограмму в память, но сначала вам нужно знать, где находится микропрограмма и насколько она велика. Как я уже сказал, этот маршрутизатор — популярный маленький парень, и в Интернете есть всякая информация о нем. Прошивка начинается в памяти с адреса 0x9f020000 байт и имеет длину 0x3c0000 байт.

Когда маршрутизатор находился в режиме отладки, я закрыл PuTTY и открыл обычное окно терминала (терминал A) в Linux. Я запустил терминал, прослушивая /dev/ttyUSB0, чтобы получить и сохранить все выходные данные маршрутизатора с помощью следующей команды:

Затем я открыл отдельный терминал (терминал B), в котором можно отдавать команды последовательной консоли маршрутизатора. В частности, мне нужно было дать команду на сброс установленной прошивки.
В этот момент шестнадцатеричный дамп прошивки начал извергаться в терминале A. Это было идеально, потому что он не только извергался туда, но и сохранялся в /tmp/firmware-dump.hex . Как только текст перестал поступать в терминал А (почти 30 минут), я понял, что дамп готов. В этот момент мне пришлось преобразовать шестнадцатеричный дамп обратно в двоичный. В терминале B я запустил,
Команда grep вырезает строки, которые на самом деле не являются частью шестнадцатеричного дампа, а команда xxd преобразует шестнадцатеричный дамп обратно в двоичный. В этот момент двоичный файл был искусственно больше, чем должен быть, потому что первая строка шестнадцатеричного кода говорила, что он находится на 0x9f02000 байтах в файле, поэтому мне нужно было извлечь последние 0x3c0000 байтов двоичного файла. Поскольку он находится в конце файла, все, что мне нужно сделать, это перепрыгнуть 0x9f020000 (это 2 667 708 416 по основанию 10) байтов в файл и выгрузить все оттуда до конца.
Обратите внимание, что было скопировано 3 932 160 байт. Преобразование этого числа в шестнадцатеричное дало мне 0x3c0000, поэтому я точно знал, что получил правильное количество байтов для моей извлеченной прошивки. Если бы я оставил окно PuTTY открытым, этот номер, скорее всего, был бы неправильным, потому что часть шестнадцатеричного дампа оказалась бы в этом окне, а не в терминале А, а если бы он отсутствовал в терминале А, то он также был бы также отсутствует в файле /tmp/firmware-dump.hex.

Этот файл /tmp/custom-firmware.bin представляет собой пользовательскую прошивку, которую неназванная третья сторона не хотела предоставлять.Имея прошивку на руках, я закрыл клеммы A и B и был готов перейти к следующему большому шагу в моем проекте, прошивке другого маршрутизатора.

Прошивка кастомной прошивки

Как я упоминал ранее, дыры в системе безопасности, которые другие использовали для прошивки сторонних прошивок на этом маршрутизаторе, были исправлены в заводской прошивке, установленной на устройстве, которое я получил. Единственный способ, которым я собирался прошить стороннюю прошивку на свое устройство, — это последовательное соединение, поэтому мне пришлось также открыть это устройство и припаять открытые площадки для последовательного соединения таким же образом, что и Я сделал с первым маршрутизатором. Затем я подключился к своему компьютеру с помощью того же последовательного USB-адаптера. Я загрузил его, прервав последовательность загрузки с помощью команды tpl, как и раньше, и перешел к приглашению hornet>.

Прошивка микропрограммы через последовательное соединение выполняется путем загрузки микропрограммы на маршрутизатор по протоколу TFTP через кабель Ethernet. Я выкопал кабель Ethernet и подключил свой компьютер к маршрутизатору. Затем я установил 192.168.1.100 на своей машине в качестве статического IP-адреса, потому что это то, что ищет маршрутизатор. Чтобы убедиться, что это правильный IP-адрес, я ввел команду printenv в последовательной консоли маршрутизатора.
Переменная serverip обозначает IP-адрес, к которому будет обращаться маршрутизатор при попытке загрузить микропрограмму.

Поскольку маршрутизатор хочет загрузить прошивку по TFTP, мне пришлось установить TFTP-сервер и запустить его. В AskUbuntu есть быстрый ответ о том, как это сделать. Я следовал инструкциям, чтобы настроить и запустить свой TFTP-сервер, а затем поместил файл custom-firmware.bin в каталог /tftpboot.

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

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

Все работает прекрасно, без каких-либо проблем. Я сохранил кастомную прошивку для будущей прошивки, и все готово!

Модификации корпуса для будущей прошивки

Мне не хотелось припаивать контактные площадки каждый раз, когда я хочу работать с маршрутизатором. Для решения этой проблемы я взял сдохший роутер TL-WR703N и прорезал в корпусе дырку над контактными площадками для последовательного интерфейса. Я также вырезал отверстие сбоку от колодок, чтобы видеть, что я делаю. Затем я взяла две швейные иглы и вставила их в отверстие сверху на подушечках. Я приклеил их на место горячим клеем, и теперь я могу прикрепить несколько зажимов типа «крокодил» к иглам, чтобы получить доступ, не припаивая ничего. На фото этого не видно, но часть левой иглы (которая сломалась) торчит из клея. Корпус этих маршрутизаторов очень сложно разобрать, поэтому я также отрезал защелки, чтобы было легче снять верхнюю часть. Я добавил немного мягкой прокладки в нижней части корпуса под тем местом, где должны быть прокладки, чтобы доска всегда прижималась к иглам. Теперь я могу просто положить плату в свой модифицированный корпус и подключиться к последовательной консоли в любое время, когда мне нужно.

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

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

Что такое UART?

Прежде чем мы приступим к взлому устройства и доступу к нему через его интерфейс UART, давайте сначала обсудим, что такое UART и как его использовать.

UART используется для асинхронной последовательной связи для отправки и получения данных от устройств в таких целях, как обновление прошивки вручную, отладка тестов или взаимодействие с базовой системой (что-то вроде открытия нового терминала в Ubuntu). UART работает, связываясь по двум проводам (провод передатчика и провод приемника), чтобы напрямую общаться с микроконтроллером или системой на чипе (по сути, с мозгом устройства).

Приемник и передатчик, помеченные как RX и TX соответственно, должны быть подключены ко второму соответствующему устройству UART TX и RX, чтобы установить связь.

Как только начинается обмен данными по UART, биты считываются с определенной частотой, называемой «скоростью передачи данных», которая может различаться между устройствами примерно на 10 %, прежде чем синхронизация битов будет нарушена.

При правильном подключении кабелей и скорости передачи данных два устройства теперь могут успешно обмениваться данными. Получая доступ к интерфейсу UART устройства, вы, как правило, получаете своего рода терминал bash для доступа к прошивке; которые могут позволить вам перемещаться по файловой системе и выполнять произвольные команды, просматривать веб-файлы, находить 0 дней в двоичных файлах, находить запланированные задачи, лазейки и в целом понимать, как работает устройство.

Зачем использовать UART?

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

Если вы помните в первой части серии статей, пользователи могут иногда сталкиваться с проблемой при попытке сброса микросхемы флэш-памяти SPI: подается слишком много энергии на устройство через соединение VCC, что впоследствии приводит к принудительному использованию микросхемы флэш-памяти. SoC (система на чипе) и не дает нам сбросить прошивку. Одно из решений может состоять в том, чтобы просто выпаять микросхему флэш-памяти и повторить попытку, но для этого потребуются дополнительные инструменты (такие как фен или паяльник), которых у вас может еще не быть. Даже если вы добьетесь успеха, вы можете обнаружить, что только что сбросили зашифрованную прошивку, которую теперь также необходимо расшифровать.

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

На что обращать внимание

В мире встраиваемых устройств интерфейсы UART обычно идентифицируются путем поиска четырех отверстий/соединений рядом с микроконтроллером/системой на кристалле платы. Зачем четыре соединения, когда UART всего два? Два разъема предназначены для TX и RX для связи, один для VCC для отдельного питания UART и один для заземления, используемого для синхронизации соединения между устройствами.

Доступ к UART — процесс

В этом посте мы получим доступ к интерфейсу UART в нашем маршрутизаторе Belkin N300, о котором я упоминал в первой части. Во-первых, прежде чем мы сможем что-то переборщить с нашим Jtagulator, нам нужно определить точки соприкосновения между двумя устройствами, которые можно определить с помощью нашего мультиметра.

Чтобы найти заземление, установите мультиметр в режим непрерывности (см. изображение выше). Затем установите черный щуп на любой экран или металл на устройстве за пределами цепи и устанавливайте красный щуп на каждое соединение, пока не появится значение 0 (или близкое к 0) или не раздастся звуковой сигнал, указывающий на непрерывность. Этот контакт со значением 0/звуковой сигнал – это ваша точка соприкосновения.

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

Теперь мы можем соединить наши кабели и начать перебор с нашим Jtagulator, чтобы идентифицировать кабели RX и TX. Соедините землю, указанную на маршрутизаторе, с землей на Jtagulator и соедините последние три контакта с каналами 0-2 (убедитесь, что не подключаете к VADJ, так как это может привести к дополнительной подаче питания на устройство и может привести к его перегоранию!), как показано на изображении выше, и мы готовы к грубой силе.

Теперь нам нужно получить доступ к нашему Jtagulator с помощью инструмента доступа к последовательной консоли (я фанат picocom). Jtagulator обменивается данными со скоростью 115 200 бод, поэтому мы будем подключаться к его последовательному интерфейсу со скоростью 115 200 бод с помощью picocom и должны быть представлены с оболочкой.

Наконец мы начинаем грубую силу, набрав «u». Прежде чем объяснять параметры, которые мы ввели, я быстро объясню, как работает эта грубая сила.

Способ Jtagulator грубой силы UART заключается в попытке отправлять и считывать данные с каждого контакта и с каждой скоростью передачи и показывать данные пользователю, чтобы пользователь мог определить, какая перестановка, возможно, правильная. Мы можем выбрать, что отправлять через TX (в данном случае возврат каретки или новую строку по умолчанию), а затем мы выбираем отображать только печатные символы ascii, чтобы гарантировать, что на выходе будет правильный текст, читаемый человеком. В этом случае мы надеемся, что отправка новой строки по всем каналам в какой-то момент вернет удобочитаемый вывод. Мы также обязательно сообщаем Jtagulator, что все контакты 0-2 подключены и готовы к грубой силе. Это не всегда будет немедленно возвращать вывод, поэтому рекомендуется также немедленно подключить тестируемое устройство перед запуском перебора, чтобы вы могли просматривать вывод во время его загрузки (также, в случае, если ваш TX не работает по какой-либо причине, вы можете по-прежнему идентифицировать RX, по крайней мере, с помощью этого метода). При этом мы нажимаем Enter, начинаем перебор и обнаруживаем, что, когда контакт 0 — это TXD, 1 — это RXD, а скорость передачи равна 38400, мы получаем то, что кажется удобочитаемым для человека выводом.

Чтобы убедиться, что эти параметры действительны, мы просто переключаемся на транзитную передачу UART с параметром «p», устанавливаем TXD на 0, RXD на 1 и скорость передачи на 38400. Затем мы набираем «help» и нажимаем Enter, чтобы убедиться, что у нас есть правильная оболочка с вводом и выводом.

Успех! Мы успешно идентифицировали контакты UART на нашем устройстве и установили соединение с последовательной консолью. К сожалению, кажется, что наша текущая консоль на самом деле не дает нам доступа ко многим вещам, но исправить это было легко.

Снова перезапустив устройство, чтобы увидеть результат загрузки, мы можем наблюдать загрузку на всем пути к вторичной корневой оболочке, из-за чего кажется, что наша первая оболочка — это оболочка восстановления, которая появляется, когда процесс загрузки прерывается нажатием любой клавиши.< /p>

К сожалению, в этой оболочке мы все еще были ограничены, так как она не представляла собой полноценную оболочку Linux. Трудно было сказать, была ли это какая-то тюрьма или песочница, или же прошивка представляла консоль естественным образом. Играя с различными командами, мы определяем команду «flash» как потенциально допустимый альтернативный механизм для сброса прошивки с устройства.

Мы можем видеть, что «флэш» в основном принимает параметр смещения и параметр количества, что наводит меня на мысль, что его можно использовать для дампа определенного количества байтов флэш-памяти, начиная с любого смещения. Используя это, мы сбросили все байты прошивки, но попали в загвоздку. Похоже, что сброс большого количества байтов с помощью команды flash фактически приводит к сбою устройства и перезагрузке!

Примерно через 2 часа скрипт завершает работу и предоставляет файл output.bin со всеми байтами в виде открытого текста. Используя мой скрипт DumpToBin.py, мы можем преобразовать текстовый файл в действующую корзину прошивки.

Заключение

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

В этом примере UART предоставил нам несколько ограниченную оболочку, которую мы могли использовать для создания дампа прошивки в качестве альтернативы, предоставив нам незашифрованную прошивку устройства во время выполнения для анализа (которая также может предоставить интересные данные, такие как распакованные файловые системы, к которым у нас может не быть доступа в противном случае). Однако на большинстве устройств UART может дать вам полные корневые оболочки для устройства, позволяя вам проходить его, как и любое другое устройство Linux, даже позволяя вам легко устанавливать бэкдоры в ОС без необходимости встраивать их непосредственно в прошивку. поэтому злоумышленнику очень полезно знать, как получить доступ.

Предыдущая статья

За последние несколько недель мы стали свидетелями одной из самых изощренных атак на цепочку поставок с использованием t.

Следующая статья

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

Gartner называет CyberArk лидером магического квадранта 2021 года для PAM

Рекомендуется для вас

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

TL;DR После того, как Docker выпустил исправление [1] для CVE-2021-21284 [2], он непреднамеренно создал новую уязвимость, которая позволяет пользователю с низким уровнем привилегий на хосте выполнять файлы из образов Docker.

Что такое уязвимость PwnKit CVE-2021-4034? 25 января 2022 года была публично раскрыта критическая уязвимость в pkexec polkit (ссылка). Исследовательская группа Qualys назвала эту уязвимость.

Содержание Введение Первое обнаружение Обход модуля Stomp Обход модуля Stomp Detection Заключительные мысли Введение Это второй пост в моей серии, и этим постом мы начнем.

Атака на RDP изнутри: как мы использовали именованные каналы для захвата смарт-карт, несанкционированного доступа к файловой системе на клиентских компьютерах и т. д.

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

Однажды, когда я работал над OpenShift, дистрибутивом Kubernetes от RedHat, ориентированным на удобство разработчиков и безопасность приложений, я заметил, что могу вставлять escape-символы ANSI.

Читайте также: