Максимальное Напряжение Питания | 5.5В |
Минимальное Напряжение Питания | 4.5В |
Количество Выводов | 28вывод(-ов) |
Количество I/O | 20I/O |
Скорость ЦПУ | 20мгц |
Стиль Корпуса Микроконтроллера | dip |
Размер Памяти | 3КБ |
Размер Памяти RAM | 72Байт |
Линейка Продукции | PIC16 Family PIC16C5x Series Microcontrollers |
Семейство Микроконтроллера | PIC16 |
Серия Микроконтроллера | PIC16C5x |
Base Product Number | PIC16C57 -> |
Core Processor | PIC |
Core Size | 8-Bit |
ECCN | EAR99 |
Errata | http://www.microchip.com/mymicrochip/filehandler.a |
HTSUS | 8542.31.0001 |
Moisture Sensitivity Level (MSL) | Not Applicable |
Mounting Type | Through Hole |
Number of I/O | 20 |
Operating Temperature | 0В°C ~ 70В°C (TA) |
Oscillator Type | External |
Package | Tube |
Package / Case | 28-DIP (0.600″”, 15.24mm) |
Peripherals | POR, WDT |
Program Memory Size | 3KB (2K x 12) |
Program Memory Type | OTP |
RAM Size | 72 x 8 |
REACH Status | REACH Unaffected |
RoHS Status | ROHS3 Compliant |
Series | PICВ® 16C -> |
Speed | 20MHz |
Supplier Device Package | 28-PDIP |
Voltage – Supply (Vcc/Vdd) | 3V ~ 5.5V |
Вес, г | 7.22 |
PIC16C57C-20E/SS Microchip Technology :: PIC16C57C-20E/SS Product Parameters :: PIC16C57C-20E/SS PDF Download
PIC16C57C-20E/SS Microchip Technology :: PIC16C57C-20E/SS Product Parameters :: PIC16C57C-20E/SS PDF Download | Hotenda.cnPIC16C57C-20E/SS
- Описание :
- IC MCU 8BIT 3KB OTP 28SSOP
- Производители:
- Microchip Technology
Информация продукции
- категория
- Встроенные – микроконтроллеры
- упаковка
- трубка
- серия
- PIC® 16C
- ядерный процессор
- ПИК
- Размер сердечника
- 8 -Bit
- скорость
- 20 МГц
- связь
- –
- периферия
- POR , WDT
- Количество входов / выходов
- 20
- Размер памяти программы
- 3KB (2K х 12 )
- Тип памяти программы
- OTP
- EEPROM Размер
- –
- Размер ОЗУ
- 72 х 8
- Напряжение – питания ( Vcc / Vdd )
- 3 V ~ 5.5 V
- Преобразователи данных
- –
- Тип генератора
- внешний
- Рабочая температура
- -40 ° C ~ 125 ° C
- Упаковка /
- 28 – SSOP ( 0,209 \” , 5.30mm Ширина )
Покупатели,которые купили этот товар, также приобрели
© 2002-2014 Hotenda Technology Co.,LTD. Все права защищены и охраняются законом
Адрес: №1311, 13-этаж, район В, Здание ЦзяХэ, средний проспект ШэньНань, зона ФуТянь, город ШэньЧжэнь, Китае 518031
Тел: 86-0755-83794354, 83799939, 83799983 Факс: 86-0755-83794709
Внедрение клавиатурного шпиона в KVM-свитч Belkin E Series OmniView 2-Port
Внедрение клавиатурного шпиона в KVM-свитч Belkin E Series OmniView 2-Port
В этой статье будет продемонстрирована возможность модификации стандартного KVM-свитча с целью добавления функции перехвата нажатых клавиш на базе платформы Arduino.
Автор: Ian Payton, Security Advisory EMEAR
Введение
Слишком часто специалисты по безопасности при оценке рисков, связанных с устройствами, подключенными к сетям и системам, рассматривают только уязвимости в программном обеспечении. Когда речь заходит об оценке потенциальных рисков, связанных с подсоединенными устройствами, в том числе связанными с интернетом вещей, профессионал должен рассматривать не только бреши в программах и прошивках этих систем, но и физические уязвимости в аппаратной части.
Один из методов связан с физической модификацией систем, например, с целью добавления вредоносной функциональности для извлечения нужной информации без эксплуатации брешей в программном обеспечении.
В этой статье будет продемонстрирована возможность модификации стандартного KVM-свитча (Keyboard, Video monitor, Mouse; устройство для управления несколькими системами из одного места) с целью добавления функции перехвата нажатых клавиш на базе платформы Arduino. Мы покажем, что подобное можно сделать при помощи стандартных инструментов и компонентов с минимальными знаниями в области электроники и программирования.
Эти свитчи подразделяются на несколько категорий:
- KVM-свитчи начального уровня для домашнего применения и небольших офисов. Управляются при помощи физической кнопки и не представляют особого интереса для злоумышленника.
- KVM-свитчи, позволяющие переключаться между подсоединенными компьютерами при помощи комбинации клавиш. Поскольку в определении нажатых клавиш участвует микроконтроллер, эти устройства пригодны для установки клавиатурного шпиона.
- KVM-свитчи, используемые на предприятиях, которые позволяют более плотную интеграцию в различные системы. Эти устройства намного сложнее и даже могут работать на базе небольших операционных систем. Здесь у злоумышленника самое большое пространство для маневра.
В этой статье мы будем рассматривать KVM-свитч из второй категории. Ситуация возникла во время одного из проектов, когда клиент обратил внимание на порт RJ45 и попросил провести оценку безопасности устройства.
Рисунок 1: KVM-свитчBelkin E Series OmniView 2-Port
Внутреннее устройство свитча
Внутри корпуса обнаружились следующие компоненты:
- Микроконтроллер PIC16C57C
PIC-микроконтроллер (однократного программирования) выпускаемый компанией Microchip Technology. Большая микросхема, распложенная в правой стороне задней части печатной платы рядом с цилиндрическим черным устройством, издающим звуковые сигналы. Как видно на рисунке ниже, микроконтроллер вставлен в двухрядный корпус, что сильно облегчает извлечение с целью последующего реверс-инжиниринга.
Тройные аналоговые сдвоенные мультиплексоры, выпускаемые компанией NXP. Двойной мультиплексор может переключить одиночный вход на один из двух выходов. Эти пять устройств, вероятно, формируют основную логику для переключения клавиатуры и мыши PS/2 между одним из четырех выходных портов.
Рисунок 2: Внутреннее устройство KVM-свитча Belkin E Series OmniView 2-Port
Микроконтроллер PIC16C57C
Модель PIC16C57C принадлежит семейству популярных микроконтроллеров, выпускаемых компанией Microchip Technology, которые также популярны среди радиолюбителей. В сети находится большое количество доступной документации. Даташит на модель PIC16C57C можно найти среди документации на микроконтроллеры того же семейства:
Документация содержит сведения о программировании и протоколе проверки подлинности, что упрощает реверс-инжиниринг.
Анализ прошивки
В спецификации по программированию/верификации микроконтроллера PIC16C57C говорится о том, как выполнить процедуру «быстрой верификации». Требуется следующая последовательность действий:
- Включить питание (5В – пин Vdd, Земля – пин Vss).
- На пине T0CKI удерживать высокий уровень.
- На пине OSC1 удерживать низкий уровень.
- На пине Vpp подать напряжение 13В (в этом случае микроконтроллер перейдет в режим программирования и обнулится программный счетчик).
- Значение текущего программного счетчика можно считать с пинов RA0-RA3, RB0-RB7 (в PIC16C57C используется 12-битное слово).
- На пине OSC1 установить высокий уровень. Программный счетчик увеличится.
- На пине OSC1 установить низкий уровень и повторить шаг 5.
- Продолжать до тех пор, пока все участки памяти не будут считаны.
Рисунок 3: Схема пинов микроконтроллера PIC16C57C
При помощи этой процедуры вначале будет считан специальный конфигурационный регистр, содержащий псевдо-адрес 0xFFF. Как только на пине OSC1 начнут подаваться тактовые импульсы (шаги 6 и 7), будет считывается адрес 0x000, затем 0x001 и т. д.
Создание верификатора
Во время промышленного программирования для чтения содержимого памяти PIC-контроллеров можно использовать процедуру, описанную выше. Есть и другой путь: относительно простой протокол-верификатор на базе Arduino, системы разработки небольших микроконтроллеров (или любой другой похожей системы с достаточным набором входных/выходных пинов общего назначения, например, Raspberry Pi). 13В нужно подводить из внешнего источника, поскольку в системах разработки наподобие Arduino и Raspberry Pi, предусмотрены напряжения размером 5В и ниже.
На рисунке ниже показана плата Arduino Uno, подключенная к ZIF-сокету (Zero insertion force; с нулевым усилием сочленения) с подключенным микроконтроллером PIC16C57C, извлеченным из KVM-свитча. Источник питания для подачи напряжения 13В с целью активации режима программирования также показан. В следствие ограничений платы Arduino Uno, возможно чтение лишь 4 битов с микроконтроллера. Однако можно переконфигурировать устройство так, чтобы считать остальные биты и содержимое PIC16C57C в несколько подходов. Другие платы (например, Arduino Mega) имеют достаточно количество входных/выходных пинов для одновременного считывания всех 12 битов.
Рисунок 4: Верификация микроконтроллера PIC16C57C при помощи Arduino
Защита кода
Первое, что нужно считать с микроконтроллера PIC16C57C, – содержимое конфигурационного регистра, в котором находится информация для системы безопасности и генератора, а также бит, связанный с защитой кода. Если этот бит равен нулю, защита кода включена, и в этом случае невозможно считать содержимое памяти (верификация завершается успешно, но возвращаемое значение не содержит информацию, находящуюся по нужному адресу в памяти).
К сожалению, содержимое конфигурационного бита в PIC16C57C, изъятого из подопытного KVM-свитча, свидетельствовало о том, что защита кода включена и считать память невозможно.
Анализ логики работы микросхемы
После анализа прошивки в предыдущем разделе стало понятно, что считать память микроконтроллера PIC16C57 невозможно. Таким образом, использование KVM-свитча в качестве клавиатурного шпиона можно добиться двумя способами:
- Проанализировать логику микроконтроллера PIC16C57C и перезаписать прошивку с нуля на эквивалентной PIC-микросхеме.
- Проанализировать часть логики PIC16C57C и придумать способ, как подцепить второй микроконтроллер к набору пинов, используемых в устройстве, чтобы отследить нажатие клавиш и реализовать клавиатурный шпион на базе второго микроконтроллера.
Исследование назначения пинов
В микроконтроллере PIC16C57C есть 20 входных/выходных выводов общего назначения. Назначение этих пинов можно исследовать при помощи мультиметра, осциллографа или логического анализатора, подсоединенных к нужным выводам. Во время подключения к пину KVM-свитч выполняет определенные функции и одновременно отслеживается сигнал на выводе с целью сопоставления выполняемой функции и измеряемого сигнала. Перепады напряжений на пинах могут быть медленными (например, когда включается/выключается LED-подсветка) или быстрыми (например, на информационной шине или шине, связанной с таковыми сигналами). Быстрые перепады можно отследить лишь при помощи осциллографа или логического анализатора.
Каждый пин должен быть исследован во время выполнения различных функций в KVM-свитче:
- Переключения между выходными портами.
- Набор на клавиатуре пока один из выходных портов активен.
- Перемещение мыши пока один из выходных портов активен.
- Подключение системы к выходному порту.
- Отключение системы из выходного порта.
На рисунке ниже показан подключенный осциллограф, который использовался для исследования функционального пинов во время нажатий на клавиатуре.
Рисунок 5: Схема подключения осциллографа для исследования функциональности пинов
Последующий анализ печатной платы можно сделать при помощи мультиметра в режиме измерения сопротивления, чтобы определить, какие из пинов подсоединены к остальным компонентам. В случае с KVM-свитчем модели Belkin исследование значительно облегчается, поскольку микроконтроллер PIC16C57C вставлен в разъем, и мы можем просто извлечь микросхему и измерить сопротивление между пинами и остальными компонентами.
Некоторые пины микроконтроллера PIC16C57C имеют неизменную функциональность (см. диаграмму выходного сигнала выше). Для нас особый интерес представляют входные/выходные пины под номерами 6-25. Исследование при помощи осциллографа и мультиметра выявило следующее:
Пины 6-14:
- Пин 6 – RA0 – Обычно имеет высокий уровень. Уровень снижается при нажатии на кнопочный переключатель. Скорее всего, это входной пин для кнопочного переключателя, используемый с целью изменения выходного порта.
- Пин 7 – RA1 – Имеет низкий уровень, когда выбран Порт 1, и высокий – когда выбран Порт 2. Исследование дорожек на печатной плате выявило, что по смыслу этот пин сопрягается с выводами, связанными с выбором входного сигнала, мультиплексоров 74HC4053D. Во время использования мультиметра в режиме измерения сопротивления выяснилось, что этот пин соединен с выводами S1, S2, S3, связанными с выбором входного сигнала, в мультиплексорах 74HC4053D (микросхемы U7, U8, U9, U10). Таким образом, скорее всего, это выходной пин, выбирающий выходные Порты 1 и 2 в KVM-свитче.
- Пин 8 – RA2 – Как и в случае с Пином 7, при низком уровне выбран Порт 1, при высоком – Порт 2. При использовании мультиметра в режиме измерения сопротивления выяснилось, что этот пин подсоединен к выводам S1, S2 и S3 в микросхеме U2, и к выводу OE1 микросхемы U3 (функциональность схожая с мультиплексором). Таким образом, это еще один выходной пин, который выбирает между выходными Портами 1 / 2 свитча. Пока до конца не понятно, почему Пины 7 и 8 имеют схожую функциональность. Одна из версий: Пин 7 отвечает за управление и переключение клавиатуры и мыши (разъемы PS/2), а Пин 8 – за переключение видео. В целом требуется более детальное расследование.
- Пин 9 – RA 3 – Обычно имеет высокий уровень, но при переключении между портами KVM-свитча наблюдаются изменения. Во время переключения портов сигнал на этом пине на осциллографе отображается в виде волны со структурой примерно 3 периода на сантиметр при масштабе 1мс/см. То есть у нас получается волна с частотой 3кГц. Скорее всего, этот пин напрямую управляет звуковым устройством. При определенных обстоятельствах (например, при переключении между выходными портами) KVM-свитч издает короткий пронзительный звук (частотой около 3 кГц).
- Пин 10 – RB0 – Высокий уровень, если к выходному Порту 1 свитча подключено устройство. Скорее всего, это разрешение на работу с устройством, подключенным к Порту 1. Во время переключения между портами, на этом пине появляется низкий уровень в течение значительного периода (в течение примерно 1 секунды), а затем вновь появляется высокий уровень. В период низкого уровня на этом пине, на Порте 1 отсутствуют сигналы, хотя есть активность на пинах 20-23 (мышь/клавиатура). Примечателен еще и тот факт, что LED-подсветка, сигнализирующая о том, что порт выбран, также не меняется во время низкого уровня (в течение примерно одной секунды).
- Пин 11 – RB1 – Высокий уровень, если к выходному Порту 2 свитча подключено устройство. Скорее всего, это разрешение на работу с устройством, подключенным к Порту 2. Во время переключения между портами, на этом пине появляется низкий уровень в течение значительного периода (в течение примерно 1 секунды), а затем вновь появляется высокий уровень. В период низкого уровня на этом пине, на Порте 2 отсутствуют сигналы, хотя есть активность на пинах 20-23 (мышь/клавиатура). Примечателен еще и тот факт, что LED-подсветка, сигнализирующая о том, что порт выбран, также не меняется во время низкого уровня (в течение примерно одной секунды).
- 12 – RB2 – Высокий уровень – Активность отсутствует – отсутствуют соединения на печатной плате.
- 13 – RB3 – Низкий уровень – Активность отсутствует – отсутствуют соединения на печатной плате.
- 14 – RB4 – Высокий уровень – Активность отсутствует. На печатной плате присутствует дорожка, которая предположительно ведет к Пину 14 микросхемы U9. Гипотеза подтверждена мультиметром в режиме измерения сопротивления. Это входной пин ‘Input 1’ в мультиплексоре 74HC4053, который будет в качестве переключателя между пином Порта 1 и Порта 2 средствами мультиплексора. Этот пин может быть входным или выходным, и, таким образом, KVM-свитч будет либо отсылать сигнал коннектору PS/2, соединенному с выходным портом, либо получать сигнал обратно. Однако активности на этом пине обнаружено не было при реализации различных сценариев.
Пины 15-25
- Пин 15 – RB5 – Высокий уровень – Активность отсутствует – отсутствуют соединения на печатной плате.
- Пин 16 – RB6 – Высокий уровень – Активность отсутствует – отсутствуют соединения на печатной плате.
- Пин 17 – RB7 – Высокий уровень – Активность отсутствует – отсутствуют соединения на печатной плате.
- Пин 18 – RC0 – Низкий уровень – Активность отсутствует – отсутствуют соединения на печатной плате.
- Пин 19 – RC1 – Высокий уровень – Активность отсутствует – отсутствуют соединения на печатной плате.
- Пин 20 – RC2 – Мышь PS/2 – Тактовые импульсы. Осциллограф показывает стабильную серию импульсов во время перемещения мыши. Регулярность импульсов намекает на то, что этот генератор предназначен для мыши. Некоторая активность на этом пине была обнаружена во время переключения между выходными портами, но когда мышь не двигалась. См. комментарии ниже, касающиеся назначения пинов 10-11.
- 21 – RC3 – Мышь PS/2 – Данные. Осциллограф показывает нерегулярные импульсы во время движения мыши. Нерегулярность импульсов намекает на то, что это информационный пин, предназначенный для мыши. Некоторая активность на этом пине была обнаружена во время переключения между выходными портами, но когда мышь не двигалась. См. комментарии ниже, касающиеся назначения пинов 10-11.
- 22 – RC4 – Клавиатура PS/2 – Тактовые импульсы. Осциллограф показывает стабильную серию импульсов на этом пине при нажатии или отпускании клавиши. Регулярность импульсов намекает, что этот генератор предназначен для клавиатуры.
- 23 – RC3 – Клавиатура PS/2 – Данные. Осциллограф показывает нерегулярные импульсы во время нажатия или отпускания клавиши. Нерегулярность импульсов намекает на то, что это информационный пин, предназначенный для клавиатуры.
- 24 – RC6 – LED1. Этот пин напрямую связан с состоянием LED для Порта 1. Скорее всего, выходной пин для управления подсветкой.
- 25 – RC7 – LED2. Этот пин напрямую связан с состояние LED для Порта 2. Скорее всего, выходной пин для управления подсветкой.
Назначение пинов 10-11: Изоляция выходов
Как было отмечено выше, на пинах 10-11 во время переключения появляется низкий уровень. Кроме того, во время переключения была замечена активность на информационных и тактовых пинах, связанных с разъемами PS/2 (20-23). Скорее всего, KVM-свитч временно отключает выходы разъема PS/2 и посылает сигналы сброса для мыши и клавиатуры, которые участвуют в процессе переключения. Протокол, используемый разъемами PS/2, является двунаправленным, позволяя хосту управлять функциями подключенного устройства. Например, можно устанавливать индикаторы состояния клавиш Caps lock, Num lock и т. д. KVM-свитчу нужно следить за этими настройками для каждого устройства (клавиатуры и мыши) в разрезе по хосту/порту. При переключении между портами необходимо восстанавливать последнее сохраненное состояние для каждого хоста. Чтобы решить эту задачу во время переключения, KVM-свитч выставляет на пине 10 или 11 низкий уровень для отключения соответствующего выходного порта. Затем происходит отсылка сигналов по шине PS/2 к подключенной мыши или клавиатуры для обнуления состояния. Выставление низкого уровня на пине 10 или 11 необходимо для того, чтобы хост, подключенный к выходному порту, не мог отслеживать сигнал между KVM-свитчем и мышью/клавиатурой.
Кроме того, KVM-свитч поддерживает переключение при помощи горячих клавиш. Вход в этот режим осуществляется после двойного нажатия клавиши «Scroll Lock». Затем появляется звуковой сигнал, сигнализирующий, что устройство перешло в состояние для считывания горячих клавиш, и свитч ожидает нажатия дополнительных клавиш в течение 1 секунды. Любое нажатие в течение этого времени интерпретируется KVM-свитчем и не отсылается подсоединенному компьютеру. Этот функционал требует, чтобы выходные порты, подключенные к шине PS/2, были отключены в то время, пока свитч ожидает нажатия горячих клавиш, что достигается посредством выставления на пине 10 или 11 низкого уровня.
Неполный анализ
Анализ, проведенный выше, выявил много нового относительно функциональности KVM-свитча. Однако остались некоторые невыясненные моменты. На нескольких пинах (12-19) не было замечено никакой активности во время работы с KVM-свитчем. Если бы на этих пинах всегда был высокий уровень, означающий обычно стандартное или неактивное состояние, можно было бы сделать предположение, что эти выводы не используются. Однако тот факт, что на некоторых пинах был низкий уровень, намекает на то, что возможно данные выводы используются. Исследование дорожек на печатной плате показало, что подсоединен только Пин 14, но пока с непонятным предназначением.
Поскольку анализ является неполным, восстановление рабочей прошивки с нуля, может стать непростой задачей. Значит, для внедрения клавиатурного шпиона у нас остается второй вариант, связанный с подключением второго микроконтроллера.
Интерфейс PS/2
Чтобы получить доступ к информации, вводимой с клавиатуры, в интерфейсах PS/2, используемых на KVM-свитче, необходимо понимать, как устроен этот протокол. С описанием протокола PS/2 можно ознакомиться по следующей ссылке:
Интерфейс PS/2 может управлять либо хостом, либо устройством, подключенным к выходному порту. Электрические характеристики этого интерфейса подразумевают, что возможно внедрить данные в шину PS/2 даже, когда к ней подключены одновременно и хост и устройство. Этот факт полезно принять во внимание при внедрении дополнительного контроллера в KVM-свитч.
Реализация клавиатурного шпиона
Учитывая рассуждения выше, мы можем подключить второй микроконтроллер к PIC16C57C для реализации клавиатурного шпиона. В идеале должны использоваться только сигналы на пинах микроконтроллера PIC16C57C, что позволит реализовать схожую функциональность в прошивке дополнительного контроллера.
Съем собранной информации следует реализовывать на базе уже существующих интерфейсов KVM-свитча. Впоследствии злоумышленнику понадобится лишь физический доступ к KVM-свитчу для извлечения собранной информации. На втором микроконтроллере нужно реализовать дополнительную последовательность нажатых клавиш, при активации которой будет происходить выгрузка записанных нажатий в систему, подключенную к KVM-свитчу. Затем злоумышленник может открыть текстовый редактор на целевой системе и нажать комбинацию горячих клавиш для выгрузки записанной информации в текстовый файл.
Ограничения по электрическим характеристикам
Существует серьезное ограничение при подключении второго микроконтроллера к PIC16C57C, которое заключается в том, что сигнал любого пина, сконфигурированного как выходного в PIC16C57C, не может быть переключен в другое состояние дополнительным микроконтроллером. Выдержка из даташита на микроконтроллер PIC16C57C (раздел 7.6.1):
«Пин, выдающий высокий или низкий уровень не должен одновременно управляться внешним устройством для изменения уровня сигнала на этом выводе (при помощи элементов «Логическое Или», «Логическое И»). Результирующие выходные токи могут испортить чип».
Сей факт означает, что реализация клавиатурного шпиона и выгрузка собранной информации должна быть на базе пинов микроконтроллера PIC16C57C, которые сконфигурированы как входные.
Совместное использование шины PS/2
Один из вариантов для извлечения информации из клавиатурного шпиона – отправка данных как серии нажатых клавиш на подсоединенный хост. Чтобы решить эту задачу, KVM-свитч должен взять на себя роль периферического устройства (клавиатуры) на шине PS/2 и наладить коммуникацию с хостом от имени «поддельной» клавиатуры. Однако в то же время шина PS/2 будет подсоединена к настоящей клавиатуре. Здесь возникает закономерный вопрос, возможно ли извлечение информации в при таких обстоятельствах.
Шина PS/2 спроектирована для прямого соединения между хостом и периферическим устройством. Это простой двухканальный протокол (тактовые импульсы и информационная шина), который поддерживает двухстороннюю коммуникацию. Этот функционал основан на интерфейсе с открытым коллектором для тактового и информационного пинов (см. раздел “The Electrical Interface”), позволяя либо хосту, либо периферическому устройству устанавливать низкий уровень на любом из пинов.
Таким образом, чисто с позиции электрических характеристик второе периферическое устройство (KVM-свитч) может управлять тактовым и информационным пинами интерфейса PS/2. С точки зрения хоста, периферические устройства (настоящая клавиатура или KVM-свитч, работающий в качестве «поддельной» клавиатуры) будут неразличимы. Однако здесь возникает вопрос, будет ли провоцировать активность «поддельной» клавиатуры неожиданное поведение настоящей клавиатуры.
В протоколе PS/2 большая часть коммуникаций происходит между периферическим устройством и хостом. Тактовые импульсы и информацию большую часть времени генерирует периферическое устройство. Если хосту нужно отправить информацию периферическому устройству, например, установить состояние LED-индикации для клавиши Caps Lock), то вначале хост оповещает периферическое устройство о том, что планируется пересылка информации, посредством удерживания низкого уровня более 100 мкс как части сигнала для «запроса на отправку». Таким образом, сложность заключается в том, что активность на шине PS/2 со стороны KVM-свитча, функционирующего в качестве «поддельной» клавиатуры, может быть интерпретировано настоящей клавиатуры как «запрос на отправку» от хоста.
При отсылке сигналов по шине PS/2 периферическое устройство генерирует тактовые импульсы в диапазоне 10-16.7 КГц, и длительность импульса 100 мкс будет соответствовать самой низкой тактовой частоте (10 кГц). Таким образом, чтобы активность поддельной клавиатурой не интерпретировалась как «запрос на отправку», нужно понижать уровень максимум на 50 мкс. В этом случае общее использование шины PS/2 становится возможным.
Детектирования нажатия последовательности горячих клавиш
Выгрузка снятой информации будет активироваться при помощи дополнительного нажатия последовательности горячих клавиш. Вначале нужно дважды нажать клавишу «Scroll Lock» в течение определенного времени. Затем PIC16C57C выставляет низкий уровень на соответствующем пине (10 или 11), связанным с подключением выходных портов, в течение около 1 секунды для предотвращения отсылки нажатых клавиш хосту. В течение этого времени ожидается нажатие последовательности нажатых клавиш. Например, нажатие клавиши «1» или «2» приведет к переключению на выходной порт 1 или 2 соответственно.
Существует два пути для реализации нажатия клавиш с целью извлечения сохраненной информации:
- Независимо детектировать двойное нажатие клавиши «Scroll Lock» вторым микроконтроллером.
- Детектировать низкий сигнал на пинах, связанным с подключением выходных портов, что сигнализирует о нажатии последовательности горящих клавиш.
При независимом детектировании двойного нажатия «Scroll Lock» есть риск, что PIC16C57C и второй микроконтроллер не смогут обнаружить этот факт в одно и то же время. Соответственно, нужно использоваться второй способ, связанный с состоянием пинов, подключающих выходные порты, поскольку этот метод более надежен для определения того, что KVM-свитч ожидает нажатия горячих клавиш.
Экспериментальное оборудование
При изготовлении экспериментальной версии клавиатурного шпиона использовалась плата Arduino Uno. На этой плате есть входные/выходные пины и среда программирования на базе языка С, при помощи которой можно получать доступ к выводам с целью установки прототипов.
Рисунок 6: Экспериментальная версия клавиатурного шпиона на базе платы Arduino Uno
На рисунке выше показана плата, подключенная к микроконтроллеру PIC16C57C, используемого KVM-свитчем.
- Черный щуп: Пин 4 в микроконтроллере PIC16C57C (земля). Соответственно, земля и на плате Arduino.
- Синий щуп: Пин 22 в микроконтроллере PIC16C57C (пин с тактовыми импульсами клавиатуры PS/2). Цифровой I/O Пин 2 на плате Arduino.
- Зеленый щуп: Пин 23 в микроконтроллере PIC16C57C (информационный пин клавиатуры PS/2). Цифровой I/O Пин 8 на плате Arduino.
- Красный щуп: Пин 11 в микроконтроллере PIC16C57C (разрешающий сигнал для выходного порта 2 в KVM-свитче). Цифровой I/O Пин 9 на плате Arduino.
В экспериментальных целях используется только шина, включающая Порт 2.
Программное обеспечение для клавиатурного шпиона
Алгоритм работы
В целом программа на платформе Arduino будет находиться в трех состояниях:
- Когда сигнал, связанный с подключением выходного порта, высокого уровня (порт разрешен), записываются все нажатые клавиши.
- Когда сигнал, связанный с подключением выходного порта, низкого уровня (порт отключен из-за ожидания ввода горячих клавиш), детектируется последовательность горячих клавиш для выгрузки собранной информации.
- Если опознана последовательность горячих клавиш на съем собранных сведений, и сигнал, связанный с подключением выходного порта, меняется с низкого на высокий (порт снова разрешен), выгружается информация обо всех нажатых клавишах.
Если опознана последовательность горячих клавиш, необходимо дождаться, когда сигнал, связанный с подключение выходного порта, вновь станет высокого уровня. Иначе любые данные, связанные с нажатием и добавляемые в шину PS/2 не увидит хост. В экспериментальной версии используется последовательность нажатых клавиш QQ (от слова «Query»). Два наатия сделано для того, чтобы настоящий пользователь KVM-свитча случайно не ввел эту комбинацию.
Запись нажатых клавиш
Преимущество разработки на базе Arduino заключается в том, что имеется большое количество библиотек. Для нашего случая использовалась библиотека «PS2Keyboard», доступная под лицензией LGPL. В этой библиотеке реализовано чтение нажатых клавиш с клавиатуры PS/2, управляемой прерываниями, а также автоматическая конвертация скан-кодов в ASCII символы с учетом состоянии регистра. В итоге в приложение попадает информация в формате ASCII.
Из-за того каким способом плата Arduino подсоединена к микроконтроллеру PIC16C57C, необходимо использовать те же самые пины для чтения данных с клавиатуры во время считывания нажатий и записи информации от имени клавиатуры. PS2Keyboard поддерживает только чтение данных, а для отсылки нужна отдельная библиотека. Чтобы добавить эту возможность, необходимы небольшие изменения в дополнении к методу end(), связанные с разблокировкой прерывания, используемого при чтении информации. Без этого дополнения библиотека PS2Keyboard будет считывать информацию и во время нажатия.
Во время записи нажатий, информация, получаемая из библиотеки, хранится в кольцевом буфере и готова к выгрузке. Кроме того, не следует забывать, что эти данные в формате ASCII, а не скан-коды протокола PS/2. Этот факт следует учитывать во время передачи информации.
Выгрузка собранной информации
Чтобы выгрузить собранную информацию о нажатии клавиш через интерфейс клавиатуры PS/2 необходима другая библиотека. Поскольку среди уже существующих бесплатных нужная отсутствует, необходимо писать решение с нуля.
Протокол PS/2 использует тактовую частоту в диапазоне 10-16.7 кГц и отсылает последовательные данные со следующими характеристиками:
- Один начальный бит (на шине данных низкий уровень).
- 8 информационных битов (вначале идет младший значащий бит).
- Один бит для контроля четности (проверка на нечетность).
- Один стоповый бит (на информационной шине высокий уровень).
Информация считывается хостом на спадающем фронте тактового импульса (во время перепада от высокого уровня к низкому). Подобный формат передачи данных не соответствует ни одному встроенному протоколу, используемому в Arduino. Соответственно, нужно писать новый драйвер. Чтобы реализовать протокол PS/2, можно использовать драйвер, генерирующий программные прерывания на частоте, которая в два раза больше диапазона 10-16.7 кГц (чтобы генерировать и нарастающие и спадающие фронты тактового импульса). Плата Arduino Uno поддерживает 3 аппаратных таймера, способных генерировать программные прерывания. В нашей экспериментальной версии был выбран Timer 2 (Timer 1 используется некоторыми стандартными библиотеками Arduino и является непригодным).
Был написан драйвер, который вручную устанавливает тактовые импульсы протокола PS/2, а также информационные пины с использованием таймера Timer 2 на плате Arduino, генерирующего прерывания на частоте 25 кГц. При каждом прерывании на тактовом пине постепенно устанавливается низкий/высокий уровень и на информационном пине – стартовый бит, биты данных, бит четности и стоповый бит, как того требует спецификация.
Когда стартует процесс выемки записанной информации при помощи последовательности клавиш, необходимо передать данные из кольцевого буфера. Поскольку в буфере находятся шестнадцатеричные ASCII символы перед отправкой требуется обратное преобразование в скан-коды, которые допустимы для передачи по протоколу PS/2. Чтобы облегчить конвертацию информация извлекалась в формате, совместимом с утилитой ‘xxd’, которая используется в Linux и других схожих системах, подобно тому, как показано ниже:
7373682074617267657473797374656d
0a726f6f740a50617373773072643132
330a
Для каждого выходного шестнадцатеричного символа драйвер протокола PS/2 генерирует скан-код нажатой клавиши, соответствующий шестнадцатеричному символу, а затем скан-код той же самой отпущенной клавиши. Весь процесс продолжается до тех пор, пока не будет обработано содержимое всего буфера.
Конечный результат процесса выгрузки – на подключенном хосте появляется последовательность сохраненных нажатий в шестнадцатеричном представлении. Злоумышленнику нужно открыть текстовый редактор на целевой системе, активировать выгрузку и наблюдать, как будет появляться информация в редакторе.
Исходный код
Исходный текст экспериментального клавиатурного шпиона можно найти здесь:
Заключение
Модификация аппаратной части является реальной угрозой для организаций. При помощи относительно простого оборудования и минимальных технических знаний можно сделать систему для тайного сбора и выгрузки информации. Компаниям следует не забывать об этой угрозе и предпринимать соответствующие меры безопасности хотя бы в части устройств, имеющих отношение к конфиденциальным данным.
Понимание, чем отличается «обычный» трафик от необычной сетевой активности, как, например, неожиданное подключение нового устройство к внешнему источнику, может помочь организациям вовремя обнаружить и заблокировать утечку информации. В критически важных средах компаниям следует отслеживать любое новое устройство, которое подключается к ключевым системам, включая даже простое периферийное оборудование. В некоторых случаях необходим физический осмотр оборудования с целью обнаружения незаконных проникновений и модификаций.
PIC16C57C-20 / SS Лист данных | Встроенные – Микроконтроллеры IC MCU 8BIT 3KB OTP 28SSOP -Apogeeweb
На главную & nbsp Встроенные – Микроконтроллеры PIC16C57C-20 / SS Datasheets | Embedded – Микроконтроллеры IC MCU 8BIT 3KB OTP 28SSOPТаблицы данных PIC16C57C-20 / SP | Встроенные – Микроконтроллеры IC MCU 8BIT 3KB OTP 28SDIP
Таблицы данных PIC16C57C-20E / SO | Встроенные – Микроконтроллеры IC MCU 8BIT 3KB OTP 28SOIC
- By & nbspapogeeweb, & nbsp & nbspPIC16C57C-20 / SS, PIC16C57C-20 / SS Datasheet, PIC16C57C-20 / SS PDF, Microchip Technology
Изображение: | |
Номер детали производителя: | PIC16C57C-20 / SS |
Категория продукта: | Embedded – Микроконтроллеры |
Наличие: | Нет |
Производитель: | Микрочип Технология |
Описание: | IC MCU 8BIT 3KB OTP 28SSOP |
Лист данных: | PIC16C5x Лист данных |
Упаковка: | 28-SSOP (0.209 дюймов, ширина 5,30 мм) |
Минимум: | 1 |
Время выполнения: | 7 недель |
Количество: | Под заказ |
Отправить запрос предложений: | Запрос |
Производитель: | Технология микрочипов |
Серия: | PIC® 16C |
Упаковка: | Труба |
Состояние детали: | Активный |
Ядро процессора: | ПИК |
Размер сердечника: | 8-бит |
Скорость: | 20 МГц |
Подключение: | – |
Периферийные устройства: | ПОР WDT |
Количество входов / выходов: | 20 |
Размер памяти программы: | 3 КБ (2 КБ x 12) |
Тип памяти программы: | OTP |
Размер EEPROM: | – |
Размер оперативной памяти: | 72 х 8 |
Напряжение – питание (Vcc / Vdd): | 3В ~ 5.5В |
Преобразователи данных: | – |
Тип осциллятора: | Внешний |
Рабочая температура: | 0 ° C ~ 70 ° C (TA) |
Тип установки: | Крепление на поверхность |
Упаковка / Ящик: | 28-SSOP (ширина 0–209 дюймов, 5–30 мм) |
Комплект устройства поставщика: | 28-SSOP |
Базовый номер детали: | PIC16C57C |
Деталь | Сравнить | Производители | Категория | Описание | |
ПроизводительНомер детали: PIC16C57C-20 / SS | сравнить: Текущая часть | Производители: Microchip | Категория: Микроконтроллеры | Описание: Микроконтроллер PIC16 Series 72B RAM 2K x 12Bit EPROM 8Bit CMOS – SSOP-28 | |
ПроизводительНомер детали: PIC16C57C-20 / P | сравнить: PIC16C57C-20 / SS VS PIC16C57C-20 / P | Производители: Microchip | Категория: 8-битный микроконтроллер | Описание: 8-битный микроконтроллер, однократно программируемый, PIC16C5xx, 20 МГц, 3 КБ, 72 байта, 28 контактов, DIP | |
ПроизводительНомер детали: PIC16C57C-20 / SP | сравнить: PIC16C57C-20 / СС VS PIC16C57C-20 / SP | Производители: Microchip | Категория: 8-битный микроконтроллер | Описание: PIC16 Series 72B RAM 2K x 12Bit EPROM 8Bit CMOS Microcontroller – SPDIP-28 | |
ПроизводительНомер детали: PIC16C57C-20I / SO | сравнить: PIC16C57C-20 / СС VS PIC16C57C-20I / SO | Производители: Microchip | Категория: Микроконтроллеры | Описание: Микроконтроллер PIC16 Series 72B RAM 2K x 12Bit EPROM 8Bit CMOS – SOIC-28 |
Описания
Для этой части пока нет релевантной информации.
Экологическая и экспортная классификацииСтатус RoHS: | Соответствует ROHS3 |
Уровень чувствительности к влаге (MSL): | 1 (без ограничений) |
PIC16C57C-20 / SS | Технология микрочипов | IC MCU 8BIT 3KB OTP 28SSOP | Под заказ | 282: 2 доллара.52000 | |
PIC16C57C-20 / SS | Microchip Technology Inc | 8-БИТ, OTPROM, 20 МГц, RISC МИКРОКОНТРОЛЛЕР, PDSO28, 0.209 ДЮЙМОВ, ПЛАСТИК, MS-150, SSOP-28 | Под заказ | 1,2900 долл. США / 4,17 долл. США 60 |
1.Норвегия
100
2. Россия
97
2.Россия
97
3. Панама
96
3.Панама
96
4. Нигер
95
5.Андорра
95
6. Иордания
94
7.Гондурас
93
7. Гондурас
93
8.Руанда
92
8. Руанда
92
9.Австралия
91
10. Монголия
90
10.Монголия
90
11. Словакия
90
12.Бразилия
90
12. Бразилия
90
13.Чили
89
13. Чили
89
14.Венгрия
89
15. Аргентина
88
16.Мальта
88
17. Швеция
88
17.Швеция
88
18. Сербия
88
19.Испания
88
20. Канада
87
21.Грузия
87
22. Филиппины
87
23.Пакистан
87
23. Пакистан
87
24.Китай
86
25. Германия
86
25.Германия
86
26. Азербайджан
86
26.Азербайджан
86
27. Словения
86
28.Армения
86
28. Армения
86
29.Израиль
86
30. Нигерия
86
31.Тунис
86
32. Марокко
86
33.Доминиканская Республика
85
34. ЮАР
85
35.Латвия
85
36. Румыния
84
36.Румыния
84
37. Гонконг
84
37.Гонконг
84
38. Эфиопия
84
39.Соединенное Королевство
84
40. Турция
84
40.Турция
84
41. Таиланд
84
42.Болгария
84
42. Болгария
84
43.Финляндия
83
44. Греция
83
44.Греция
83
45. Чешская Республика
83
45.Чешская Республика
83
45. Чешская Республика
83
46.Франция
83
47. Швейцария
83
47.Швейцария
83
48. Танзания
83
48.Танзания
83
49. Венесуэла
83
50.Португалия
83
51. Ирландия
83
51.Ирландия
83
52. Индонезия
83
53.Литва
82
53. Литва
82
54.США
82
55. Египет
81
56.Камерун
81
57. Украина
81
58.Италия
81
59. Япония
81
60.Южная Корея
81
61. Мексика
81
62.Боливия
81
63. Польша
81
63.Польша
81
64. Сальвадор
81
65.Туркменистан
81
66. Беларусь
81
67.Дания
80
68. Сингапур
80
69.Бангладеш
80
70. Гайана
80
70.Гайана
80
71. Индия
80
72.Барбадос
80
72. Барбадос
80
73.Сент-Китс и Невис
80
73.Сент-Китс и Невис
80
74.Нидерланды
80
75. Бельгия
79
75.Бельгия
79
76. Тайвань
79
77.Никарагуа
79
77. Никарагуа
79
78.Казахстан
79
79. Кения
78
79.Кения
78
80. Вьетнам
78
80.Вьетнам
78
81. Алжир
78
82.Перу
77
83. Сенегал
77
84.Парагвай
77
84. Парагвай
77
85.Исландия
76
85. Исландия
76
86.Новая Зеландия
76
86. Новая Зеландия
76
87.Эквадор
76
88. Кипр
76
89.Объединенные Арабские Эмираты
76
89.Объединенные Арабские Эмираты
76
89.Объединенные Арабские Эмираты
76
90.Оман
75
91. Непал
74
91.Непал
74
92. Колумбия
74
92.Колумбия
74
93. Шри-Ланка
74
94.Хорватия
74
94. Хорватия
74
94.Хорватия
74
95. Малайзия
73
96.Эстония
72
96. Эстония
72
96.Эстония
72
97. Уругвай
63
97.Уругвай
63
98. Маврикий
58
99.Саудовская Аравия
50
100. Уганда
46
- Атрибуты продукта
- Описания
- Характеристики
- CAD Модели
PIC16C57C-20 / SS Популярность по регионам
Вас также может заинтересоватьСтатьи по теме
Микроконтроллер
PIC10F200: Учебное пособие, выводы, техническое описание [Видео и часто задаваемые вопросы]
Ирэн 14 сен 2021 70
Обзор продукта PIC10F200 – это недорогой, высокопроизводительный 8-битный полностью статический КМОП-микроконтроллер на базе флэш-памяти.Он использует архитектуру RISC всего с 33 инструкциями, состоящими из одного слова / одного цикла ….
Читать далее »
PIC16F877a Микроконтроллер: схема расположения выводов, техническое описание, характеристики [FAQ]
Игги 25 февраля 2021 г. 1711
PIC16F877a – это микроконтроллер PIC.PIC16F877a можно стирать и стирать столько раз, сколько возможно, поскольку он использует технологию флэш-памяти. Он имеет всего 40 контактов и 33 контакта для ввода …
Читать далее »
IC MCU 8BIT 3KB OTP 28SSOP
Производитель: | Технология микрочипов |
Серия: | PIC® 16C |
Упаковка: | Труба |
Состояние детали: | Активный |
Ядро процессора: | ПИК |
Размер сердечника: | 8-бит |
Скорость: | 20 МГц |
Подключение: | – |
Периферийные устройства: | ПОР WDT |
Количество входов / выходов: | 20 |
Размер памяти программы: | 3 КБ (2 КБ x 12) |
Тип памяти программы: | OTP |
Размер EEPROM: | – |
Размер оперативной памяти: | 72 х 8 |
Напряжение – питание (Vcc / Vdd): | 3В ~ 5.5В |
Преобразователи данных: | – |
Тип осциллятора: | Внешний |
Рабочая температура: | 0 ° C ~ 70 ° C (TA) |
Тип установки: | Крепление на поверхность |
Упаковка / Ящик: | 28-SSOP (ширина 0–209 дюймов, 5–30 мм) |
Комплект устройства поставщика: | 28-SSOP |
Базовый номер детали: | PIC16C57C |
По этой части пока нет релевантной информации.
По этой части пока нет релевантной информации.
По этой части пока нет релевантной информации.
PIC16C57C Datasheet PDF – Microchip Technology
ОБЩЕЕ ОПИСАНИЕ
PIC16C5X от Microchip Technology – это семейство недорогих, высокопроизводительных 8-битных полностью статических КМОП-микроконтроллеров на базе EPROM / ROM.Он использует архитектуру RISC всего с 33 инструкциями, состоящими из одного слова / одного цикла. Все инструкции являются однократными, за исключением ветвей программы, которые занимают два цикла. PIC16C5X обеспечивает производительность на порядок выше, чем его конкуренты в той же ценовой категории. Команды шириной 12 бит очень симметричны, что приводит к сжатию кода 2: 1 по сравнению с другими 8-битными микроконтроллерами этого класса. Простой в использовании и легко запоминающийся набор инструкций значительно сокращает время разработки.
Устройства, включенные в этот лист данных:
• PIC16C54
• PIC16CR54
• PIC16C55
• PIC16C56
• PIC16CR56
• PIC16C57
• PIC16CR57
• PIC16C58
• PIC16CR58
Высокопроизводительный RISC-процессор:
• Всего 33 инструкции из одного слова, чтобы выучить
• Все инструкции являются однократными, за исключением программных ветвей, которые являются двухтактными.
• Рабочая скорость: постоянный ток – вход тактовой частоты 40 МГц
DC – командный цикл 100 нс
• 12-битные инструкции
• 8-битный тракт данных
• Семь или восемь аппаратных регистров специального назначения
• Двухуровневый глубокий аппаратный стек
• Режимы прямой, косвенной и относительной адресации для данных и инструкций
Периферийные функции:
• 8-битные часы / счетчик реального времени (TMR0) с 8-битным программируемым предварительным делителем
• Сброс при включении питания (POR)
• Таймер сброса устройства (DRT)
• Сторожевой таймер (WDT) с собственным встроенным RC-генератором для надежной работы
• Программируемая защита кода
• Энергосберегающий спящий режим
• Выбираемые варианты осциллятора:
– RC: недорогой RC-генератор
– XT: Стандартный кристалл / резонатор
– HS: высокоскоростной кристалл / резонатор
– LP: энергосбережение, низкочастотный кристалл
Технология CMOS:
• Низкое энергопотребление, высокоскоростная технология CMOS EPROM / ROM
• Полностью статическая конструкция
• Широкий диапазон рабочего напряжения и температуры:
– EPROM Коммерческий / Промышленный 2.От 0 В до 6,25 В
– ROM коммерческий / промышленный от 2,0 В до 6,25 В
– EPROM с расширением от 2,5 В до 6,0 В
– ПЗУ расширено с 2,5 В до 6,0 В
• Низкое энергопотребление
– <2 мА типично при 5 В, 4 МГц
– 15 A типично при 3 В, 32 кГц
– <0,6 мкА типичный ток в режиме ожидания
(с отключенным WDT) при 3 В, от 0 ° C до 70 ° C
PIC16C57C-04 / SO_Microchip Technology – Icbond Electronics Limited
ПРИМЕЧАНИЕ: ПОЖАЛУЙСТА, НАПИШИТЕ НАМ ЭЛЕКТРОННУЮ ПОИСКУ, ЧТОБЫ УЗНАТЬ ПОСЛЕДНЮЮ ЦЕНУ И НАЛИЧИЕ.
Линии наших продуктов: MICROCHIP, CYPRESS, TOSHIBA, ON SEMI, RENESAS, IR, NEC, NXP, MAXIM, ADI, ATI, TDK, ATMEL, NS, AMD, MICRON, VISHAY, EPCOS, XILINX, INFINEON, TEXAS INSTRUMENTS, IXYS , SASUNG, SANYO, FUJISU, SHARP, ST, FAICHILD, JRC, OKI, AVX, INTEL, HITACHI, AVAGO, WINBOND, POWER, ROHM и т. Д.
● СОСТОЯНИЕ: НОВЫЙ И ОРИГИНАЛЬНЫЙ, НОВЫЙ D / C, ROHS, ГАРАНТИЯ 90 ДНЕЙ.
● СРОК ПОСТАВКИ: В НАЛИЧИИ, ОТГРУЗКА 1-3 ДНЯ.
● ГИБКИЕ УСЛОВИЯ ОПЛАТЫ: T / T, WESTERN UNION, PAYPAL, ESCROW.
[Отгрузка]
1. Мы отправим детали в течение 3 рабочих дней, в противном случае мы заранее укажем это в счете.2. Мы можем отправить через вашу учетную запись доставки (DHL / FEDEX / UPS / TNT или другие) в соответствии с вашими инструкциями. Или отправьте через нашу учетную запись доставки.
3. Что касается заявленной стоимости посылки для таможенного оформления, мы с удовольствием следуем вашим пожеланиям, просто сообщите нам об этом при оформлении заказа.
4. Любые импортные пошлины или сборы возлагаются на покупателя.
[Возврат и замена]
1. Вы получите гарантию на 30-360 дней, соответствие и функциональность детали, чтобы убедиться, что вы получаете именно то, что заказали.2. Мы предлагаем покупателям покупать новые и оригинальные товары. Мы не продаем новые и оптовые части (отремонтированные детали), если клиенты сами не согласны.
3. Мы на 100% убеждаемся в хорошем качестве новых и оригинальных товаров. Но мы не можем на 100% контролировать новые и объемные детали.
[Обратная связь]
1. Мы полагаемся на нашу репутацию и удовлетворенность клиентов, чтобы добиться успеха.Поэтому ваши отзывы очень важны для нас, пожалуйста, оставьте нам хорошие отзывы, если вы остались довольны нашими товарами и услугами.2. Пожалуйста, дайте нам возможность решить любую проблему. Мы понимаем, что у вас могут быть проблемы и разочарования, и постараемся сделать все, чтобы решить эти проблемы.
3. Пожалуйста, напишите нам, прежде чем оставлять отрицательный отзыв или спор, спасибо!
ICBOND ELECTRONICS LIMITED
Эл. Почта: отдел продаж (at) icbond.comSkype: icbondelectronics
Msn: icbond @ hotmail.ком
Обратный инжиниринг PIC MCU Microchip PIC16C57C
Обратный инжиниринг PIC MCU Microchip PIC16C57C
Обратный инжиниринг PIC MCU Microchip PIC16C57C может задерживать металлический слой и слой поликремния с микроконтроллера, а затем извлекать встроенное микропрограммное обеспечение из его памяти:
Устройства, включенные в этот лист данных:
· PIC16CR54C
Схема контактов
PDIP и SOIC
Высокопроизводительный процессор RISC:
· Всего 33 инструкции из одного слова для изучения
· Все инструкции являются однократными (200 нс), за исключением программных ветвей, которые являются двухтактными
· Рабочая скорость: постоянный ток – вход тактовой частоты 20 МГц
DC – цикл команд 200 нс
· 12-битные инструкции
· 8-битный тракт данных
· Семь или восемь аппаратных регистров специального назначения
· Двухуровневый глубокий аппаратный стек
· Режимы прямой, косвенной и относительной адресации для
Периферийные функции:
· 8-битные часы / счетчик реального времени (TMR0) с 8-битным программируемым предделителем
· Сброс при включении питания (POR)
· Таймер сброса устройства (DRT)
· Сторожевой таймер (WDT) со встроенным чипом
RC-генератор для надежной работы
· Программируемая кодовая защита
· Энергосберегающий спящий режим
· Выбираемые варианты осциллятора:
– RC: недорогой RC-генератор
– XT: Стандартный кристалл / резонатор
– HS: Высокоскоростной кристалл / резонатор
– LP: энергосберегающий, низкочастотный кристалл
Технология CMOS:
· Технология ПЗУ CMOS с низким энергопотреблением и быстродействием
· Полностью статическая конструкция
· Широкий диапазон рабочих напряжений и температур:
– ROM Коммерческий / Промышленный 3.От 0 В до 5,5 В
· Низкое энергопотребление
– <2 мА типично при 5 В, 4 МГц
– обычно 15 мкА при 3 В, 32 кГц
– Типичный ток в режиме ожидания <0,6 мкА (с отключенным WDT) при 3 В, от 0 ° C до 70 ° C
PIC16C5X от Microchip Technology – это семейство недорогих, высокопроизводительных, 8-битных, полностью статических КМОП-микроконтроллеров на базе EPROM / ROM. Он использует архитектуру RISC всего с 33 инструкциями, состоящими из одного слова / одного цикла. Все инструкции выполняются за один цикл (200 нс), за исключением ветвей программы, которые занимают два цикла.
PIC16C5X обеспечивает производительность на порядок выше, чем его конкуренты в той же ценовой категории. Команды шириной 12 бит очень симметричны, что приводит к сжатию кода 2: 1 по сравнению с другими 8-битными микроконтроллерами этого класса. Простой в использовании и легко запоминающийся набор инструкций значительно сокращает время разработки.
Продукты PIC16C5X оснащены специальными функциями, которые снижают стоимость системы и требования к питанию. Сброс при включении питания (POR) и таймер сброса устройства (DRT) устраняют необходимость во внешней схеме сброса.На выбор предлагаются четыре конфигурации генератора, включая энергосберегающий генератор LP (Low Power) и экономичный RC-генератор. Энергосберегающий режим SLEEP, сторожевой таймер и функции защиты кода снижают стоимость, мощность и надежность системы.
Cisco Talos Intelligence Group – Комплексный анализ угроз: взлом 2-портового KVM-переключателя Belkin E Series OmniView
Автор: Ян Пэйтон, советник по безопасности EMEAR. Этот пост доступен для загрузки в виде официального документа.
Введение
Слишком часто специалисты по безопасности рассматривают только уязвимости программного обеспечения при рассмотрении рисков подключения устройств к своим сетям и системам. Когда дело доходит до рассмотрения потенциальных рисков подключенных устройств и Интернета вещей, специалисты по безопасности должны учитывать не только потенциальные уязвимости в программном и микропрограммном обеспечении этих систем, но и физические уязвимости в оборудовании.Взлом оборудования – это метод, с помощью которого злоумышленник может физически модифицировать системы, чтобы внедрить новые вредоносные функции, такие как возможность кражи данных, не прибегая к использованию программных уязвимостей.
В этом посте мы демонстрируем возможность модификации стандартного переключателя KVM для включения регистратора ключей на базе Arduino. Мы показываем, что это может быть достигнуто с использованием готовых инструментов и компонентов любым человеком, имеющим минимальные знания в области электронной инженерии и программирования.
KVM-переключатели – это аппаратные устройства, часто используемые в операционных средах, которые позволяют пользователю легко переключаться между несколькими компьютерами и управлять ими с помощью одной клавиатуры, монитора и мыши.
Они попадают в несколько широких категорий:
- Бытовые KVM-переключатели начального уровня и SoHo KVM, работающие от физической кнопки, с небольшими возможностями для взлома.
- KVM-переключатели с горячими клавишами, которые позволяют пользователю переключаться между подключенными компьютерами, нажимая комбинацию клавиш. Включение микроконтроллера для идентификации нажатия горячих клавиш предполагает, что эти устройства могут использоваться как клавиатурный шпион.
- KVM-переключатели корпоративного уровня, обеспечивающие более тесную системную интеграцию.Они, вероятно, будут значительно более сложными и могут работать под управлением небольших операционных систем реального времени, что может привести к взлому.
2-портовый KVM-переключатель Belkin E Series OmniView – это устройство для домашнего использования / SoHo, которое обеспечивает переключение с помощью горячих клавиш.Это было выбрано как репрезентативное для устройств в этой категории, поэтому ожидается, что результат любого анализа будет широко применим к аналогичным устройствам других производителей. Недорогие единицы можно найти на eBay (менее 10 фунтов стерлингов).
2-портовый КВМ-переключатель Belkin E Series OmniView
Открытие кейса
Внутри корпуса раскрывается набор компонентов, в том числе:- Микроконтроллер PIC16C57C
Это микроконтроллер OTP PIC производства Microchip Technology.Это можно увидеть на картинке ниже как большой чип справа от печатной платы сзади, рядом с цилиндрическим черным зуммером. Как видно из рисунка, микроконтроллер выполнен в DIP-корпусе и смонтирован в розетке. Это позволяет легко удалить микроконтроллер, чтобы помочь с обратным проектированием.
- 5 x 74HC4053D
Это тройные аналоговые двойные мультиплексоры производства NXP. Двойной мультиплексор способен переключать одиночный вход на один из двух выходов, поэтому эти пять устройств, вероятно, образуют основную логику для переключения сигналов клавиатуры и мыши PS / 2 между одним из четырех выходных портов.
2-портовый KVM-переключатель Belkin серии E OmniView, внутреннее устройство
Микроконтроллер PIC16C57C
Этот микроконтроллер относится к семейству популярных микроконтроллеров компании Microchip Technology. Эти микроконтроллеры также популярны на рынке хобби, поэтому доступно большое количество документации. Техническое описание PIC16C57C можно найти среди документации по семейству микроконтроллеров здесь:Сюда входит документация по протоколу программирования и проверки, полезная для обратного проектирования.
Анализ прошивки
Протокол программирования и проверки
Спецификация программирования / проверки PIC16C57C описывает, как выполнить процедуру «быстрой проверки» на микроконтроллере. Это включает в себя следующее:- Подайте питание (5V Vdd, Ground Vss).
- Держите T0CKI высоко.
- Удерживайте OSC1 на низком уровне.
- Поднимите Vpp до напряжения программирования (13 В).
(переводит PIC в режим программирования и сбрасывает счетчик программ) - Значение текущего программного счетчика можно считать с контактов RA0-RA3, RB0-RB7 (PIC16C57C имеет 12-битное слово).
- Установить OSC1 в высокий уровень. Это увеличивает счетчик программы.
- Установите для OSC1 низкий уровень и повторите шаг 5.
- Продолжайте, пока не будут считаны все местоположения.
При использовании этой процедуры первое место для чтения – это специальный регистр конфигурации, который имеет псевдоадрес 0xFFF. Как только OSC1 синхронизируется (на шагах 6 и 7), следующая ячейка для чтения – это ячейка памяти 0x000, затем ячейка 0x001 и так далее.
Создание верификатора
Для чтения содержимого PIC с помощью этой процедуры можно использовать коммерческие программаторы PIC, но это также достаточно простой протокол, позволяющий создать простой одноцелевой «PIC16C57C Verifier» с помощью небольшой платы разработки микроконтроллера, такой как Arduino. (может использоваться любая аналогичная система с достаточным количеством легко доступных контактов ввода-вывода общего назначения – например, Raspberry Pi).Напряжение программирования 13 В необходимо подавать извне, поскольку системы разработки, такие как Arduino и Raspberry Pi, как правило, имеют только 5 В и другие низкие напряжения.На рисунке ниже показана плата Arduino Uno, подключенная к разъему ZIF, на котором PIC16C57C отключен от переключателя KVM. Также показан источник питания для обеспечения напряжения программирования 13 В. Из-за ограничений ввода / вывода на Arduino Uno, только четыре бита считываются с PIC, но можно было бы перенастроить устройство для чтения всех других битов, чтобы все содержимое PIC16C57C могло быть прочитано за несколько проходов. .Другие платы для разработки (например, Arduino Mega) имеют достаточный объем ввода-вывода для одновременного чтения всех 12 бит.
Проверка PIC16C57C с использованием Arduino
Код защиты
Первое слово, считываемое из PIC16C57C, – это регистр конфигурации. Он содержит данные конфигурации для сторожевого таймера и генератора, а также бит защиты кода. Если бит «защита кода» равен нулю, значит, защита кода включена. Когда защита кода включена, невозможно прочитать содержимое памяти PIC16C57C (операция проверки завершается успешно, но возвращаемое значение не представляет действительное содержимое соответствующей ячейки памяти PIC16C57C).К сожалению, чтение регистра конфигурации с PIC16C57C, взятого с KVM-переключателя Belkin, показало, что биты защиты кода были активированы, а это означает, что было невозможно прочитать прошивку с PIC16C57C.
Логический анализ
Обоснование
В предыдущих разделах подробно описана процедура анализа прошивки с выводом, что прошивка не может быть прочитана с PIC16C57. Это означает, что цель использования KVM-переключателя в качестве регистратора ключей должна быть достигнута одним из двух других способов:- Анализ логики, реализованной микроконтроллером PIC16C57C, и перезапись прошивки с нуля на эквивалентном устройстве PIC.
- Проанализируйте достаточно логики, реализованной микроконтроллером PIC16C57C, чтобы определить, как подключить вторичный микроконтроллер к подмножеству выводов устройства, чтобы контролировать данные нажатия клавиш и реализовать регистратор клавиш во вторичном микроконтроллере.
Определение функций распиновки
Обзор
PIC16C57C имеет 20 контактов ввода-вывода общего назначения. Функцию этих выводов можно исследовать с помощью мультиметра, осциллографа или логического анализатора на выводе.Это следует выполнять при включении KVM-переключателя в различные сценарии, чтобы увидеть, как поведение контактов соотносится с функциональностью переключателя KVM. Изменения напряжения на контактах могут быть медленными (например, соответствующими включению или выключению светодиода) или быстрыми (например, соответствующими линиям синхронизации / данных интерфейса клавиатуры или мыши). Быстрые переходы могут быть обнаружены только осциллографом или логическим анализатором. Каждый вывод должен быть исследован при прохождении различных функциональных сценариев с переключателем KVM:
- Переключение между выходами.
- Ввод на клавиатуре при активном каждом из выходов.
- Перемещение мыши, когда активен каждый из выходов.
- Подключение оконечной системы к одному из выходных портов.
Использование осциллографа для проверки работоспособности контактов
Дальнейший анализ компоновки печатной платы может быть выполнен в режиме «сопротивления» мультиметра, чтобы определить, какие контакты напрямую подключены к другим компонентам на печатной плате.Это упрощается тем, что PIC16C57C в KVM-переключателе Belkin устанавливается в розетку, а это означает, что извлечение PIC из розетки позволяет более надежно измерять сопротивление между контактами и другими компонентами.Некоторые контакты PIC16C57C имеют фиксированную функциональность (см. Схему расположения выводов выше), но представляют интерес контакты ввода-вывода общего назначения 6-25. Исследование с помощью осциллографа и мультиметра выявило следующее:
Штифты 6-14
- Контакт 6 – RA0 – Обычно высокий, но опускается на низкий уровень, когда кнопочный переключатель нажат.
Скорее всего, входной контакт для кнопочного переключателя для изменения выходов. - Контакт 7 – RA1 – низкий уровень, когда выбран выход порта 1 KVM, и высокий уровень, когда выбран выход порта 2 KVM.
Изучив следы на печатной плате, это также соответствует положению выводов выбора входа на мультиплексорах 74HC4053D.
Используя мультиметр в режиме сопротивления, этот вывод подключается к входам переключателя мультиплексора S1, S2 и S3 на микросхемах U7, U8, U9, U10 (мультиплексоры 74HC4053D).
Таким образом, это выглядит как выходной контакт, который выбирает между выходом порта 1 и порта 2 на KVM-переключателе. - Контакт 8 – RA2 – Как и в случае с контактом 7, низкий уровень, когда выбран выход порта 1 KVM, и высокий уровень, когда выбран выход порта 2 KVM.
При использовании мультиметра в режиме сопротивления этот вывод подключается к входам переключателя мультиплексора S1, S2 и S3 на микросхеме U2
При использовании мультиметра в режиме сопротивления этот вывод также подключается к OE1 на микросхеме U3 (функциональность аналогична мультиплексору) .
Таким образом, это выглядит как еще один выходной контакт, который выбирает между выходом порта 1 и порта 2 на KVM-переключателе.
Не совсем понятно, почему контакты 7 и 8 имеют схожую функциональность. Одна из возможностей заключается в том, что контакт 7 управляет переключением PS / 2 (мышь, клавиатура), а контакт 8 управляет переключением видео. Это потребует дальнейшего расследования. - Контакт 9 – RA3 – Обычно высокий, но при переключении между портами KVM-переключателя наблюдается активность.
Подробно изучив активность этого контакта во время переключения, осциллограф показал форму волны около 3 периодов / см на экране осциллографа, когда осциллограф находится на временной развертке 1 мс / см, что делает эту форму волны 3 кГц.
Весьма вероятно, что этот вывод напрямую управляет зуммером, поскольку при определенных обстоятельствах KVM-переключатель издает короткий высокий звуковой сигнал (около 3 кГц); например, при переключении между портами вывода. - Контакт 10 – RB0 – Высокий, когда к порту KVM подключено устройство 1.
Похоже, что это «разрешение выхода» для устройства, подключенного к порту 1.
Во время переключения между портами этот контакт подтягивается к низкому уровню на значительный период (~ 1 сек) и высокая отдача.
Пока на контакте установлен низкий уровень, выходной сигнал порта 1 не отображается, хотя контакты 20–23 (мышь / клавиатура) активны.
Интересно, что светодиоды, показывающие, какой порт выбран, также не меняются до истечения этого периода ~ 1 секунды). - Контакт 11 – RB1 – Высокий, когда к порту 2 KVM подключено устройство.
Похоже, что это «разрешение выхода» для устройства, подключенного к порту 2.
Во время переключения между портами этот контакт переводится в низкий уровень на значительный период (~ 1 сек) и высокая отдача.
Пока на контакте установлен низкий уровень, выходной сигнал порта 2 не отображается, хотя контакты 20–23 (мышь / клавиатура) активны.
Интересно, что светодиоды, показывающие, какой порт выбран, также не меняются до истечения этого периода ~ 1 секунды). - 12 – RB2 – HIGH – активности нет – на плате нет соединений.
- 13 – RB3 – LOW – активности нет – на плате нет соединений.
- 14 – RB4 – ВЫСОКИЙ – активности нет.
Виден след на печатной плате, очевидно, от контакта 14 на U9.Подтверждено мультиметром в режиме сопротивления.
Это «Вход 1» на 74HC4053, что означает, что он будет переключаться между контактом порта 1 и 2 порта KVM через мультиплексор.
Это может быть вход или выход, то есть либо переключатель KVM отправит сигнал на разъем PS / 2 на выходном порте KVM, либо получит сигнал. Однако ни в одном из протестированных сценариев на этом контакте не наблюдается активности.
Штифты 15-25
- Контакт 15 – RB5 – ВЫСОКИЙ – активности нет – на плате нет соединений.
- Контакт 16 – RB6 – ВЫСОКИЙ – активности не обнаружено – на плате нет соединений.
- Контакт 17 – RB7 – ВЫСОКИЙ – активности нет – на печатной плате нет соединений.
- Контакт 18 – RC0 – LOW – активности нет – на плате нет соединений.
- Контакт 19 – RC1 – ВЫСОКИЙ – активности нет – на плате нет соединений.
- Контакт 20 – RC2 – Мышь PS / 2 – Часы
Осциллограф показывает регулярные всплески импульсов на этом контакте при перемещении мыши.
Регулярность импульсов подразумевает, что это тактовая частота PS / 2 для мыши.
Некоторая активность на этом контакте также наблюдалась при переключении между портами KVM, когда не было движения мыши. См. Комментарии ниже о назначении контактов 10 и 11. - 21 – RC3 – Мышь PS / 2 – Данные
Осциллограф показывает нерегулярные пачки импульсов на этом контакте при перемещении мыши.
Неравномерность импульсов означает, что это данные PS / 2 для мыши.
Некоторая активность на этом контакте также наблюдалась при переключении между портами KVM, когда не было движения мыши.См. Комментарии ниже о назначении контактов 10 и 11. - 22 – RC4 – PS / 2 Keyboard – Clock
Осциллограф показывает регулярные импульсы на этом контакте при нажатии или отпускании клавиши.
Регулярность импульсов подразумевает, что это тактовая частота PS / 2 для клавиатуры. - 23 – RC5 – Клавиатура PS / 2 – Данные
Осциллограф показывает нерегулярные всплески импульсов на этом выводе при нажатии или отпускании клавиши.
Неравномерность импульсов означает, что это данные PS / 2 для клавиатуры. - 24 – RC6 – LED1
Этот вывод напрямую соответствует состоянию светодиода для порта KVM 1. Следовательно, он, вероятно, является драйвером вывода для светодиода. - 25 – RC7 – LED2
Этот вывод напрямую соответствует состоянию светодиода для порта KVM 2. Следовательно, он, вероятно, является драйвером вывода для светодиода.
Назначение контактов 10-11: Изоляция выхода
Выше было отмечено, что во время переключения контакты 10 и 11 находятся в низком состоянии. Также во время переключения наблюдается некоторая активность на выводах PS / 2 clock / data (20-23).Похоже, что переключатель KVM временно отключает выход PS / 2 и отправляет сигналы сброса на мышь и клавиатуру как часть процесса переключения. Протокол PS / 2 является двунаправленным, что позволяет хосту управлять функциями устройства; например, установка индикаторов на клавиатуре для отображения состояния Caps Lock, Num Lock и т. д. KVM-переключатель должен отслеживать эти функции на каждом устройстве (мыши и клавиатуре) для каждого хоста / порта, сбрасывая их на последнее известное состояние каждого хоста при переключении между портами.Для этого во время переключения KVM-переключатель подтягивает контакт 10 или 11 к низкому уровню, чтобы отключить вывод на соответствующий выходной порт, а затем отправляет соответствующие сигналы по шине PS / 2 на подключенную мышь или клавиатуру для сброса их состояния. Низкое напряжение на контакте 10 или 11 необходимо, чтобы подключенный хост к соответствующему выходному порту не видел эту сигнализацию между KVM-переключателем и мышью или клавиатурой.В дополнение к этому KVM-переключатель поддерживает переключение с помощью горячих клавиш. Это запускается двойным нажатием клавиши Scroll Lock.В этот момент устройство издает звуковой сигнал (чтобы указать, что он вошел в состояние «горячей клавиши») и ожидает дополнительных нажатий клавиш около 1 секунды. Любое нажатие клавиши в это время интерпретируется переключателем KVM и не передается на подключенный компьютер. Эта функциональность требует, чтобы выходные порты PS / 2 могли быть отключены в этом состоянии «горячей клавиши», и это достигается путем опускания контакта 10 или 11 на низкий уровень.
Неполный анализ
Приведенный выше анализ выявил большую часть функциональности переключателя KVM.Однако пробелы все же есть. Было замечено, что несколько контактов (12-19) не активны во время выполнения различных сценариев KVM. Если бы на всех этих выводах был высокий уровень (обычно состояние «по умолчанию» или «неактивно»), то можно было бы предположить, что эти выводы не используются. Однако тот факт, что некоторые из этих контактов низкие, означает, что они могут иметь какое-то предназначение. Исследование следов на печатной плате, похоже, показывает, что подключен только контакт 14, хотя его назначение неясно.Поскольку анализ не завершен, восстановление работающей прошивки с нуля, вероятно, будет проблемой.Из двух вариантов переключения KVM-переключателя для реализации ключевого логгера (см. Раздел «Обоснование» выше) вариант подключения вторичного микроконтроллера кажется более разумным.
Интерфейс PS / 2
Для доступа к данным клавиатуры на интерфейсах PS / 2 в KVM-переключателе требуется понимание протокола PS / 2. Описание протокола PS / 2 можно найти по следующей ссылке:Интерфейс PS / 2 может управляться либо хостом, либо устройством, а электрические характеристики интерфейса означают, что должна быть возможность вводить данные на шину PS / 2, даже если подключены и хост, и устройство.Это будет полезно при попытке подключить вторичный микроконтроллер к переключателю KVM.
Внедрение кейлоггера
Учитывая приведенный выше анализ, должна быть возможность подключить вторичный микроконтроллер к PIC16C57C для реализации кейлоггера. В идеале это должно быть сделано с использованием только сигналов на контактах самого PIC16C57C, что позволит реализовать те же функции в заменяющей прошивке PIC в качестве альтернативы.Эксфильтрация должна осуществляться через существующие интерфейсы KVM-переключателя.В этом случае злоумышленнику потребуется только доступ на месте к переключателю KVM для извлечения данных. Один из вариантов – реализовать дополнительную последовательность горячих клавиш во вторичном микроконтроллере. Когда запускается эта последовательность горячих клавиш, вторичный микроконтроллер будет сбрасывать зарегистрированные нажатия клавиш в качестве данных нажатия клавиш в любую систему, подключенную к переключателю KVM. Это позволит злоумышленнику (например) открыть текстовый редактор в целевой системе, а затем нажать последовательность горячих клавиш, чтобы выгрузить зарегистрированные данные в текстовый файл.
Электрические ограничения
При подключении к PIC16C57C существует значительное ограничение, заключающееся в том, что любой вывод, сконфигурированный как выход на PIC16C57C, не может быть переведен в другое состояние с помощью дополнительного микроконтроллера. В таблице данных PIC16C57C (раздел 7.6.1) указано:« Вывод, активно выводящий высокий или низкий уровень, не должен управляться внешними устройствами одновременно, чтобы изменить уровень на этом выводе (« проводной или »,« проводной и »). В результате возникают высокие выходные токи может повредить чип. “
Это означает, что при попытке реализовать кейлоггер и извлекать зарегистрированные данные должны использоваться только контакты на PIC16C57C, которые настроены как входы.
Совместное использование шины PS / 2
Один из вариантов извлечения данных из кейлоггера – отправить данные в виде последовательности нажатий клавиш на подключенный хост-компьютер. Для этого KVM-переключатель должен взять на себя роль периферийного устройства (клавиатуры) на шине PS / 2, взаимодействуя с главным компьютером как «фальшивая» клавиатура.Однако шина PS / 2 также будет одновременно подключена к реальному клавиатурному устройству, поэтому вопрос в том, можно ли таким образом осуществить эксфильтрацию через шину PS / 2.Шина PS / 2 предназначена для соединения точка-точка между главным компьютером и периферийным устройством. Это простой двухпроводной протокол (часы и данные), обеспечивающий двунаправленную связь. Это достигается за счет использования интерфейса с открытым коллектором для выводов часов и данных (см. Раздел «Электрический интерфейс»), что позволяет либо хост-компьютеру, либо периферийному устройству переводить состояние любого из выводов в низкий уровень.
Итак, с чисто электрической точки зрения, второе периферийное устройство (переключатель KVM) может управлять выводами синхронизации и данных интерфейса PS / 2. На главном компьютере оба периферийных устройства (настоящая клавиатура и KVM-переключатель, действующий как «поддельная» клавиатура) будут неотличимы. Однако возникает вопрос, может ли активность «фальшивой» клавиатуры вызывать неожиданное поведение реальной клавиатуры.
В протоколе PS / 2 большая часть обмена данными происходит в направлении между периферийным устройством и хостом.Часы всегда генерируются периферийным устройством, что означает, что периферийное устройство большую часть времени генерирует сигналы часов и данных. Если хосту необходимо отправить данные на периферийное устройство (например, для установки состояния светодиодных индикаторов, например, Caps Lock), хост сначала предупреждает периферийное устройство о том, что он хочет отправить данные, удерживая линию синхронизации на низком уровне более 100 мкс как часть сигнала «запрос на отправку». Поэтому существует опасение, что активность на шине PS / 2 переключателя KVM, действующего как «поддельная» клавиатура, может быть интерпретирована реальной клавиатурой как «запрос на отправку» от хоста.
При отправке данных по шине PS / 2 периферийное устройство генерирует тактовый сигнал в диапазоне 10-16,7 кГц, поэтому тактовый цикл составляет 100 мкс при самой низкой тактовой частоте (10 кГц). Это означает, что «фальшивая» клавиатура будет понижать тактовую частоту максимум на 50 мкс, а это означает, что настоящая клавиатура не должна интерпретировать это как «запрос на отправку», поэтому совместное использование шины PS / 2 должно быть возможным. .
Обнаружение последовательности горячих клавиш
Кража зарегистрированных данных будет инициирована дополнительной последовательностью горячих клавиш.Переключатель KVM реализует последовательности горячих клавиш, запускаемые двойным нажатием клавиши Scroll Lock в течение определенного периода времени. Затем PIC16C57C устанавливает низкий уровень на соответствующем выводе разрешения вывода (выводы 10 или 11 на PIC16C57C) примерно на 1 с, чтобы предотвратить дальнейшие нажатия клавиш на хост, пока он ожидает последующих клавиш в последовательности горячих клавиш. Например, нажатие клавиш «1» или «2» приведет к переключению на выходные порты 1 или 2 соответственно. Существует два варианта реализации последовательности горячих клавиш для эксфильтрации записанных данных:
- Независимое определение последовательности запускающих клавиш (двойное нажатие «Scroll Lock») в микроконтроллере с дополнительным устройством.
- Обнаруживает, что на выводах разрешения вывода низкий уровень, указывающий на то, что сработала последовательность горячих клавиш.
Аппаратное обеспечение Proof-of-Concept
Для создания экспериментальной реализации кейлоггера использовалась плата разработки Arduino Uno. Он имеет ряд средств ввода-вывода и простую среду программирования на языке C, обеспечивающую легкий доступ к контактам ввода-вывода для создания прототипов.Аппаратное обеспечение кейлоггера Proof-of-Concept
На рисунке выше показана плата Arduino Uno со следующими подключениями к KVM-переключателю PIC16C57C:- Черный: PIC16C57C контакт 4 (Земля).Земля Arduino.
- Синий: вывод 22 PIC16C57C (клавиатура PS / 2). Цифровой ввод / вывод Arduino, контакт 2.
- Зеленый: вывод 23 PIC16C57C (данные клавиатуры PS / 2). Цифровой ввод / вывод Arduino, контакт 8.
- Красный: вывод 11 PIC16C57C (сигнал разрешения выхода для порта 2 KVM-переключателя). Цифровой ввод / вывод Arduino, вывод 9.
Программное обеспечение Proof-of-Concept
Поток управления
Программное обеспечение Arduino для реализации кейлоггера в целом будет иметь три состояния:- • Пока «выход разрешен» высокий (выход включен), регистрируйте данные нажатия клавиш.
- • Когда «выход разрешен» низкий (выход отключен из-за последовательности срабатывания горячих клавиш), определить последовательность горячих клавиш эксфильтрации.
- • Если была обнаружена последовательность горячих клавиш эксфильтрации и «разрешение выхода» переходит с низкого на высокий (снова становится активным), эксфильтруйте данные нажатия клавиш.
Ключевой журнал
Одним из преимуществ использования платы разработки Arduino является широкий спектр доступных программных библиотек. Для этой проверки концепции используется библиотека PS2Keyboard, доступная по лицензии LGPL. Это реализует управляемую прерываниями библиотеку чтения клавиатуры PS / 2 и автоматически преобразует коды сканирования в ASCII с учетом состояния клавиши Shift, чтобы предоставить данные нажатия клавиш ASCII приложению.Вывод 2 Arduino используется для синхронизации PS / 2, поскольку он поддерживает прерывания на плате Arduino Uno.Из-за того, как плата Arduino подключена к KVM PIC16C57C, одни и те же контакты на Arduino должны использоваться как для чтения данных клавиатуры PS / 2 во время регистрации клавиш, так и для записи данных клавиатуры PS / 2 во время эксфильтрации. Библиотека PS2Keyboard поддерживает только чтение данных PS / 2, для отправки данных требуется отдельная библиотека. Чтобы поддерживать это, нужно было сделать небольшое дополнение к библиотеке PS2Keyboard в виде добавления метода end () для библиотеки PS2Keyboard, чтобы освободить прерывание, используемое для чтения данных.Без этого дополнения библиотека PS2Keyboard продолжала бы читать данные во время эксфильтрации.
Во время регистрации ключей данные нажатия клавиш, полученные из этой библиотеки, сохраняются в кольцевом буфере, готовом к эксфильтрации. Обратите внимание, что эти данные нажатия клавиш представляют собой коды ASCII, а не скан-коды PS / 2, поэтому это необходимо учитывать при эксфильтрации.
Эксфильтрация
Для передачи зарегистрированных данных клавиш через интерфейс клавиатуры PS / 2 требуется библиотека для отправки данных клавиатуры PS / 2.Для этого доказательства концепции необходимо было написать библиотеку, поскольку такая библиотека не была обнаружена в большом количестве свободно доступных библиотек Arduino. Протокол PS / 2 использует часы, работающие в диапазоне 10-16,7 кГц, и отправляет последовательные данные со следующими характеристиками:
- Один стартовый бит (данные на низком уровне)
- 8 бит данных, младший бит первый
- Один бит четности (нечетная четность)
- Один стоповый бит (данные на высоком уровне)
Этот формат передачи данных не соответствует ни одному из встроенных протоколов передачи данных в Arduino, а это означает, что необходимо было написать собственный драйвер. Для реализации протокола PS / 2 можно использовать таймер, который генерирует программные прерывания с удвоенной скоростью, чем требуется диапазон 10–16,7 кГц (для генерации как нарастающих, так и спадающих фронтов тактовых импульсов). Arduino Uno поддерживает 3 аппаратных таймера, которые могут генерировать программные прерывания, и Таймер 2 был выбран для этой проверки концепции (Таймер 1 используется некоторыми стандартными библиотеками Arduino, что делает его непригодным).
Был написан драйвер, который вручную устанавливает тактовые импульсы PS / 2 и выводы данных на прерывание 25 кГц, запущенное таймером 2 на плате Arduino. При каждом прерывании тактовый вывод последовательно переводится в высокий или низкий уровень, а вывод данных обрабатывается для генерации стартового бита, битов данных, битов четности и стоповых битов по мере необходимости.
Когда эксфильтрация запускается последовательностью горячих клавиш, зарегистрированные данные из кольцевого буфера должны быть извлечены. Это данные ASCII, поэтому они не могут быть отправлены напрямую в виде скан-кодов PS / 2.Вместо этого данные извлекаются как шестнадцатеричное представление ASCII зарегистрированных нажатий клавиш. После фильтрации их можно легко преобразовать обратно в исходные данные нажатия клавиш. Для простоты преобразования данные были извлечены в форме, совместимой с служебной программой xxd, доступной в Linux и других подобных системах, как показано ниже:
7373682074617267657473797374656d
0a726f6f740a50617373773072643132
330a
Для каждого вывода шестнадцатеричного символа драйвер PS / 2 генерирует скан-код клавиатуры «нажата клавиша», соответствующий этому шестнадцатеричному символу (0-9 и A-F), за которым сразу следует скан-код «клавиша отпущена» для той же клавиши.Это продолжается до тех пор, пока не будет выведен весь кольцевой буфер.
Результатом этого процесса эксфильтрации является то, что подключенный хост-компьютер видит последовательность нажатий клавиш, соответствующую шестнадцатеричному представлению зарегистрированных данных. Злоумышленник, желающий перехватить эти данные, просто должен открыть текстовый редактор в целевой системе, запустить эксфильтрацию и наблюдать, как извлеченные данные «набираются» в текстовом редакторе.
Исходный код
Исходный код экспериментального кейлоггера можно найти здесь:Заключение
Модификация оборудования представляет собой реальную угрозу для организаций.Относительно простое оборудование при наличии соответствующих знаний может быть взломано, чтобы тайно собирать и в конечном итоге извлекать данные. Компании должны быть в курсе угрозы и рассмотреть возможность проведения оценки безопасности всех устройств, развернутых в уязвимых местах.Понимание «нормального» сетевого трафика и постоянная бдительность в отношении неожиданного и необычного сетевого трафика, такого как новое устройство, внезапно подключающееся к внешней сети, может помочь организациям обнаружить и заблокировать кражу по сети.Однако в критических средах организациям необходимо идентифицировать и отслеживать оборудование, которому разрешено подключаться к критически важным системам, включая простые устройства, такие как периферийные устройства, которые легко не заметить. Угроза физического вмешательства в устройства означает, что в некоторых средах необходимо физическое обследование оборудования для обнаружения несанкционированного изменения.