Pregunta

A los efectos de la revisión de código fuente orientado a la seguridad, estoy interesado en encontrar (integral) todos los comandos ioctl que están registrados en el kernel de Linux. Además, me gustaría para clasificarlos como sea accesible por los administradores (por ejemplo root), y cuáles son accesibles por los usuarios sin privilegios.

No estoy seguro de si sería más fácil de leer el código fuente del kernel o si hay alguna forma de consultar la lista en el espacio de usuario. Si tengo que mirar en el núcleo, lo que sería funciones que hay que buscar para el registro de ioctl?

¿Fue útil?

Solución

ioctl no consigue realmente registrado en el kernel, cada tipo de archivo como objeto tiene un conjunto diferente de ioctls disponibles.

La mayoría de las veces se implementan utilizando una sentencia switch.

Así que lo que realmente necesita hacer es:

  • averiguar qué conjunto de dispositivos / tipos de archivos son relevantes para la seguridad - los dispositivos sólo se puede abrir por la raíz, presumiblemente, no necesitan tales que comprobar para Root-exploits
  • .
  • Calcular lo ioctls están disponibles.

En la práctica, dando cuenta de lo que están disponibles ioctl no es trivial. Muchos dispositivos tienen una página de manual, que las listas de ellos, pero otros no, y la lista pueden estar incompletos.

Por lo general, hay una función en algún lugar con una gran desconexión comunicado. Sin embargo, hay una especie de "herencia" por el que una gran cantidad de dispositivos tienen diferentes tipos de ioctl implementado en diferentes niveles.

El mismo "tipo" del conductor se implementa normalmente en varios tipos diferentes de hardware, y que a menudo comparten un buen montón de código.

Por ejemplo, los puertos serie tienen sus propias ioctls definido en http://lxr.linux.no/#linux+v2.6.35/drivers/serial/serial_core.c#L1107

Pero puertos serie también, potencialmente, tiene ioctls definidos en función de cada conductor, pero como son ttys, sino que también responden a ioctl TTY.

Está estructurado de forma diferente para cada subsistema, ya que tienen un comportamiento diferente.

Otros consejos

hombre ioctl_list también da la lista de comandos ioctl std con pequeña nota y archivo de cabecera asociado.

Para dispositivos de caracteres, es necesario mirar a su estructura file_operations . Hay un puntero de función en esa estructura llamada ioctl que se llama cuando se llama a ioctl en ese dispositivo.

Así que haciendo lo que quiere va a ser difícil, ya que cada dispositivo tiene su propios comandos ioctl.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top