Возможно ли из PCI/USB платы/устройства с realtime ОС получить доступ к другому оборудованию?
Здравствуйте.
Допустим я планирую сделать устройство в виде платы, подключаемой через PCI или USB. На плате будет крутиться реалтайм ОС.
Возможно ли будет получить доступ к другому оборудованию компьютера? (процессор, жёсткий диск, оперативная память и т.д.)
Под компьютером может быть:
- ATX (Mini-ATX) материнская плата под процы x86
- одноплатник/SOC под процы x86, arm
Устройство может генерировать прерывания. https://ru.wikipedia.org/wiki/Прерывание
Как реагировать на эти прерывания - зависит от драйвера устройства. Если драйвера нет, то, возможно, никакой реакции и не будет. Или будет какой-то стандартный обработчик-"заглушка".
Для PCI можно использовать механизм DMA https://ru.wikipedia.org/wiki/Прямой_доступ_к_памяти
Но и в этом случае управление осуществляет CPU. Устройство на PCI не может получать доступ куда угодно по своему желанию. Только с высочайшего позволения CPU.
Константин, какая разница, недокументированные инструкции всё равно должен выполнить CPU, а чтобы он их выполнил, они должны содержаться в какой-то программе.
Впрочем, самое близкое к тому, о чём вы спрашиваете - это Intel ME: https://habr.com/ru/company/dsec/blog/282546/
hint000, ну если уж зашла речь про intel me, тогда в моём случае речь идёт о функционировании реалтайм ос в GSM/LTE модемах, подключаемых через слот mini-PCIe или m.2 в одноплатниках.
Хочу понять до куда можно достать из данной ОС модема? (процессор, оперативная память, флеш память, sd карта, sata диск, usb диск, микрофон, камера).
По умолчанию предполагаем что к модему можно подключиться со стороны базовой станции.
Как уже было сказано, без драйвера - нидокуда не достать (при должной подготовке устройства можно попытаться физически спалить железо, пример). С драйвером, установленным в системе - вплоть до неограниченного доступа.
Да, уязвимости есть. Самая большая дыра - это USB HID. Ситуация как в сказке "Волк и семеро козлят". Устройство, подключенное по USB (волк) может сказать системе "я - клавиатура". Система не нуждается в стороннем драйвере клавиатуры, стандартный драйвер в системе есть всегда, так что козлята открывают дверь. https://habr.com/ru/post/153571/ https://habr.com/ru/post/407337/
Но это про USB.
PCI-устройство не имеет такой халявы, придётся встраивать вредоносный код в драйвер устройства; пользователь Windows должен своими руками установить (дать разрешение на установку) такого драйвера. На одноплатниках обычно Linux, там большинство драйверов уже включено в ядро; мало шансов, что кто-то прохлопает ушами и пропустит вредоносный код в ядро (хотя прецедент был, но там не совсем вредоносный код, лишь намеренно внесённые в код ошибки).
PCI-устройству пришлось бы прикинуться контроллером USB, да ещё и эмулировать HID, якобы подключенный через этот контроллер. Чисто теоретически попытаться можно. Но слишком сложно для реальной атаки; обычные хакеры не ищут сложных путей, когда есть множество простых. Сложные методы могут применить в целевых атаках (когда есть заказ на взлом конкретной компании или VIP).
Да, уязвимости есть. Самая большая дыра - это USB HID
Поизучав как изолируют LTE модемы сейчас, я пришёл к выводу, что работа модема на USB шине - сейчас один из самых безопасных вариантов.
Примеры:
PinePhone - смартфон от компании Pine64. Смартфон изначально создавался как "открытый смартфон", для ОС с открытым исходным кодом Linux.
Модем Quectel EG25-G
Модем распаян на плате по USB шине.
На текущий момент 21 дистрибутив Linux - https://wiki.pine64.org/wiki/PinePhone_Software_Re...
Librem 5 - смартфон от компании Purism - https://puri.sm/products/librem-5/
Модем внешний, подключается через слот m.2.
Можно подключить один из двух модемов на выбор:
Broadmobi BM818
Gemalto PLS8
Оба модема работают по USB шине.
Поэтому особой большой опасности USB HID не представляет.
Как правильно сказано выше, без драйвера - нидокуда не достать.
При правильном программировании, устройство, висящее на PCI-e, может напрямую общаться с ОЗУ (по DMA) и напрмямую с другим устройством (например, так могут общаться Ethernet- и дисковый контроллеры) на той же шине.
Добавлю, что в современных системах доступ к физическому адресному пространству со стороны PCI может регулироваться системным MMU, и свободного доступа ко всем PCI-устройствам и памяти у данного устройства может не быть.
А так же выдача запросов к устройствам без ведома и без синхронизации с управляющими ими драйверами ОС может иметь интересные последствия.
jcmvbkbc, надо мне было явно дописать, что под "правильным программированием" имеется в виду в том числе и драйвер в ОС той системы, куда это устройство хотят впихнуть