Могут ли команды ioctl в Linux быть полностью перечислены?

StackOverflow https://stackoverflow.com/questions/3703823

  •  02-10-2019
  •  | 
  •  

Вопрос

В целях обзора исходного кода, ориентированного на безопасность, я заинтересован в том, чтобы найти (всесторонне) все команды IOCTL, которые зарегистрированы в ядре Linux. Кроме того, я хотел бы классифицировать их как доступные для администраторов (например, корень), и какие из них доступны для непривилегированных пользователей.

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

Это было полезно?

Решение

Ioctls на самом деле не зарегистрировано в ядре, каждый тип файлового объекта имеет различный набор IOCTL.

Большую часть времени они реализованы с использованием оператора коммутатора.

Так что вам действительно нужно сделать:

  • Выясните, какой набор устройств / типов файлов является релевантным для безопасности-эти устройства открываются только по root, предположительно, не нужно, чтобы их можно было проверить на корневые эксплуаты.
  • Выработайте то, что доступно ioctls.

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

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

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

Например, в серийных портах есть свои собственные ioctls, определенные в http://lxr.linux.no/#linux+v2.6.35/drivers/serial/serial_core.c#l1107

Но в последовательных портах также потенциально определяются IOCTLS для каждого водителя, но, поскольку они являются TTYS, они также реагируют на TTY IOCTLS.

Это по -разному структурировано для каждой подсистемы, потому что они имеют различное поведение.

Другие советы

Man ioctl_list также предоставляет список команд IOCTL STD с небольшими заметками и соответствующим файлом заголовка.

Для устройств персонажей вам нужно посмотреть на их Структура File_operations. Анкет В этой структуре есть указатель функции, который называется IOCTL, который называется, когда вы называете IOCTL в этом устройстве.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top