#114 Kali Linux для продвинутого тестирования на проникновение. Встроенные устройства и RFID-хакинг.
Здравствуйте, дорогие друзья.
Рынок встраиваемых систем получил настоящий импульс, благодаря принятию потребителями Интернета вещей (IoT). Современные подключенные встраиваемые устройства становятся все более привлекательными и широко используются во многих крупных корпорациях, малых и домашних офисах (SOHO), а также на малых и средних предприятиях (SMB), и напрямую используются бытовыми потребителями по всему миру. По данным www.statista.com, количество подключенных устройств Интернета вещей выросло с 15,41 миллиарда устройств в 2015 году до 35,82 миллиарда устройств в 2021 году, а к 2025 году ожидается, что их будет 75,44 миллиарда устройств. Таким же образом выросли угрозы и повысилась безопасность этих устройств, стало самой большой проблемой для производителей и потребителей. Недавним хорошим примером этого являются уязвимости, обнаруженные в чипсетах Realtek (CVE-2021-35395), которые затронули более 65 поставщиков, производящих интеллектуальные устройства. То, как начались атаки, указывает на то, что они могли быть совершены теми же злоумышленниками, которые организовали атаку ботнета Mirai, в результате которой большая часть восточного побережья США осталась без Интернета в 2016 году.
В этом разделе мы рассмотрим основы встроенных систем и роль периферийных устройств, а также рассмотрим различные инструменты и методы, которые можно использовать для выполнения традиционного теста на проникновение оборудования/прошивки или оценки продукта данного устройства с использованием Kali Linux. Мы также настроим ChameleonMini для эмуляции карты NFC и воспроизведения сохраненного содержимого памяти, чтобы обойти любой контроль физического доступа во время упражнений красной команды или тестирования на физическое проникновение.
В этом разделе Вы узнаете о следующем:
- Встроенные системы и аппаратная архитектура.
- Последовательные шины UART
- USB-JTAG
- Распаковка прошивки и общих загрузчиков
- Взлом RFID с помощью ChameleonMini
Встроенные системы и аппаратная архитектура
Встроенная система — это комбинация аппаратного и программного обеспечения, предназначенная для выполнения конкретной задачи. Встроенное оборудование обычно основано на микроконтроллере и микропроцессорах. В этом разделе мы кратко рассмотрим различные архитектурные элементы встроенной системы, включая память и связь между этими устройствами. Практически все, что мы используем изо дня в день, — это встроенные устройства, включая мобильные телефоны, DVD-плееры, системы GPS и интеллектуальные голосовые помощники, такие как Alexa, и другие аппаратные решения.
Базовая архитектура встроенной системы
Базовая архитектура встроенной системы обычно включает в себя аппаратный и программный компонент. На рисунке ниже изображены типичные компоненты архитектуры простого встроенного устройства:
Компоненты встроенной системы следующие:
- Программное обеспечение: это специальное приложение для управления устройством и его функциями; в основном веб-приложение для настройки или обновления устройства.
- Микропроцессор или микроконтроллер. Типичные встроенные устройства основаны на микропроцессоре и микроконтроллере. Единственная разница между микроконтроллером и микропроцессором заключается в том, что микропроцессоры не имеют RAM/ ROM, которые необходимо добавлять извне. Сегодня большинство встроенных устройств/систем используют микроконтроллеры с ЦП и фиксированным объемом RAM/ ROM.
- Аппаратное обеспечение: сюда входят периферийные устройства с наборами микросхем, процессорами, такими как ARM (наиболее широко распространенные), MIPS, Ambarella, Axis CRIS, Atmel AVR, Intel 8051 или силовыми микроконтроллерами Motorola.
- Встроенная операционная система. Большинство встроенных систем основаны на Linux и представляют собой операционные системы реального времени (RTOS), настроенные для устройства. У тестировщика могут возникнуть некоторые вопросы, например, в чем разница между операционной системой и прошивкой? Прошивка позволяет производителям устройств использовать программируемые микросхемы общего назначения вместо специализированного оборудования.
Разбираемся с прошивкой
В электронных системах и вычислительной технике прошивка — это программное обеспечение, которое может подключаться к определенному оборудованию, обеспечивающему низкоуровневый контроль. Каждое устройство поставляется со своей прошивкой от производителя продукта.
В следующем списке категорий и типов устройств представлены устройства, которые обычно поставляются со специальной прошивкой, и в основном это Linux. Следующий список никоим образом не является исчерпывающим:
Разные типы прошивок
Практически все встраиваемые устройства имеют разные прошивки в зависимости от их сложности. Встроенным системам, выполняющим тяжелые задачи, обязательно нужна полноценная операционная система, например Linux или Windows NT. Ниже приведен неисчерпывающий список операционных систем, которые обычно обнаруживаются при анализе встроенного ПО:
- Ambarella: встроенная операционная система, которая чаще всего используется в видеокамерах, дронах и т. д.
- Cisco IOS: межсетевая операционная система Cisco.
- DOS: дисковая операционная система, которая считается устаревшей. Но тестировщики никогда не знают, что они найдут во время оценки.
- eCos (встроенная настраиваемая операционная система): это операционная система реального времени с открытым исходным кодом, разработанная сообществом eCos.
- Junos OS или JunOS: это специальная операционная система Juniper Networks, основанная на FreeBSD, для ее маршрутизаторов.
- Семейство микроядер L4: это микроядра второго поколения, похожие на Unix-подобные операционные системы.
- VxWorks/Wind River: популярная проприетарная операционная система реального времени.
- Windows CE/NT: операционная система для встраиваемых компактных устройств с поддержкой Microsoft.
Важно понимать разницу между прошивкой и операционной системой. В Таблице ниже представлены основные различия:
Понимание загрузчиков
Каждое устройство имеет загрузчик. Загрузчики — это не что иное, как первая часть программного обеспечения, которая загружается и запускается после загрузчика маски ROM. В первую очередь они используются для загрузки частей операционной системы в память и обеспечения загрузки системы в состоянии, определенном для ядра. Некоторые загрузчики имеют двухэтапный подход; в этих сценариях только первый шаг будет знать, как загрузить второй шаг, тогда как второй шаг предоставит доступ к файловым системам и так далее. Ниже приводится список загрузчиков, с которыми мы столкнулись во время оценки продукта:
- U-Boot: означает универсальную загрузку — это программа с открытым исходным кодом, доступная практически для всех архитектур (68k, ARM, Blackfin, MicroBlaze, MIPS, Nios, SuperH, PPC, RISC-V и x86).
- RedBoot: использует уровень абстракции аппаратного обеспечения операционной системы реального времени eCos для обеспечения начальной загрузки встроенного ПО для встроенных систем.
- BareBox: еще один основной загрузчик с открытым исходным кодом, используемый во встраиваемых устройствах. Он поддерживает RM, Blackfin, MIPS, Nios II и x86.
Общие инструменты
Следующий список инструментов можно использовать при отладке или обратном проектировании прошивки устройства. Некоторые из этих инструментов доступны в виде наборов инструментов вместе с Kali Linux:
- binwalk: это инструмент обратного проектирования, который может выполнять анализ и извлечение любых изображений или двоичных файлов. Он доступен для сценариев, и Вы можете добавлять собственные модули конкретной прошивки.
- Firmware-mod-kit: это набор наборов инструментов, включающий множество сценариев и утилит, которые могут пригодиться во время оценки для извлечения и восстановления образов встроенного ПО на базе Linux. Тестировщики также могут реконструировать или деконструировать образ прошивки.
- Платформа ERESI: это программный интерфейс с мультиархитектурным бинарным анализом. Фреймворк для выполнения обратного проектирования и манипулирования программами.
- cnu-fpu: пакет/распаковщик встроенного ПО IP-телефонов Cisco. Это можно найти на https://github.com/kbdfck/cnu-fpu.
- ardrone-tool: Этот инструмент обрабатывает все файлы формата Parrot, а также позволяет пользователям прошивать через USB и загружать новую прошивку. Он доступен по адресу https://github.com/scorp2kk/ardrone-tool.
Распаковка и обновление прошивки
Имея базовое представление о загрузчиках и различных типах прошивки, мы рассмотрим, как распаковать некоторые прошивки и обновить их нашей специальной прошивкой на беспроводной точке доступа Cisco Meraki MR18 (встроенное устройство с прошивкой Cisco). В большинстве случаев во время тестирования на проникновение оборудования образы прошивки не включают в себя все файлы, необходимые для создания полноценной встроенной системы. Обычно в каждом встроенном устройстве мы обнаруживаем следующее:
- Загрузчик (1/2 этап)
- Ядро
- Образы файловой системы
- Бинарные файлы пользовательской земли
- Ресурсы и файлы поддержки.
- Веб-сервер/веб-интерфейс
- Современные встроенные устройства предотвращают установку различных операционных систем с использованием собственной прошивки, поэтому для обновления устройства до настраиваемой операционной системы мы будем использовать OpenWRT — прошивку с открытым исходным кодом для домашних шлюзов, изначально созданную для беспроводных маршрутизаторов Linksys WRT54G. Он превратился во встроенный дистрибутив Linux и теперь поддерживает широкий спектр устройств. Учитывая ограничения устройства, для выполнения обновления или обновления требуется JTAG (что означает Joint Test Action Group, отраслевой стандарт для проверки проектов и тестирования печатных плат после производства).
JTAG можно использовать в большей степени с точки зрения TAP (порта тестового доступа), независимо от того, насколько ограничено устройство. Производитель обычно оставляет либо последовательный порт, либо несколько TAP. По нашему опыту, если последовательный доступ не дает хороших результатов или устройство слишком заблокировано, возможно, будет проще использовать порт JTAG (но это не всегда так, поскольку устройство может быть полностью заблокировано). Архитектура JTAG определяется производителем чипа и, в большинстве случаев, даже при последовательном подключении JTAG. JTAG соответствует спецификациям основного набора микросхем для управления и контроля. Всем продуктам присвоен идентификатор FCC, в котором указаны сведения об устройстве. Идентификатор FCC можно найти, посетив https://www.fcc.gov/oet/ea/fccid. Мы должны получить правильное напряжение, иначе мы либо сломаем устройство, либо выведем из строя оборудование. После того, как тип архитектуры JTAG определен, мы можем приступить к рассмотрению спецификаций и команд, необходимых для настройки соединения.
Мы будем использовать инструмент USB JTAG NT, в котором предварительно настроен список устройств различных категорий и типов. Этот инструмент можно загрузить напрямую с https://www.usbjtag.com/filedownload/, и для этого примера мы будем использовать кабель USB JTAG NT. В качестве первого ключевого шага USB-конец кабеля USB JTAG необходимо подключить к нашему Kali Linux, а конец JTAG — к печатной плате устройства (дополнительную информацию о том, как найти правильные контакты для подключения, см. на https: //blog.senr.io/blog/jtag-explained). Физическое подключение к роутеру будет выглядеть, как на рисунке ниже:
Поскольку USB JTAG NT в значительной степени полагается на библиотеки QTLib, для успешного запуска этого инструмента в Kali Linux включаются следующие шаги:
- Загрузите USB JTAG NT с https://www.usbjtag.com/filedownload/usbjtagnt-
для-linux64.php. - Загрузите QTLib с https://www.usbjtag.com/filedownload/library-for-.
linux64.php. - Разархивируйте файлы архива, запустив:
tar xvf <имяфайла.tar>
. - Убедитесь, что вы установили путь к библиотеке QT, запустив команду Export LD_LIBRARY_PATH=/home/kali/ Downloads/QtLib (если Вы загрузили файлы в другую папку, убедитесь, что это отражено в пути).
- Наконец, запустите приложение, запустив ./USBJTAGNT в терминале. После этого вы сможете без проблем запустить приложение, как показано на рисунке ниже:
После того, как Вы выберете категорию, тип протокола и выбор цели, мы установим маршрутизатор в качестве категории, EJTAG в качестве протокола, а затем выберем модель маршрутизатора для цели. Мы будем использовать OpenWRT для загрузки в оборудование. Если подключенный JTAG физически работает нормально, то можно провести отладку устройства, как показано на рисунке ниже:
Программная команда используется для очистки операционной системы OEM (производителя оригинального оборудования). После завершения работы программы мы можем загрузить на устройство новый файл .bin, который загрузит OpenWRT на выбранный маршрутизатор и получит полные привилегии.
После завершения очистки и загрузки OpenWRT мы можем проверить связь с устройством, используя root-привилегии прямого доступа по SSH, запустив: ssh root@192.168.1.1
из терминала Kali Linux.
В Windows Вы можете использовать PuTTY для доступа к устройству с IP-адресом шлюза по умолчанию (192.168.1.1), как показано на рисунке ниже (убедитесь, что у Вас есть физический кабель Ethernet, подключенный к маршрутизатору и ноутбуку, и установите статический IP-адрес для вашего устройства):
На этом все. Всем хорошего дня!
Полный цикл статей по Kali Linux для продвинутого тестирования на проникновение.