Domanda

Ai fini della revisione del codice fonte della sicurezza-oriented, sono interessato a trovare (completo) tutti i comandi ioctl che sono registrati nel kernel di Linux. Inoltre, mi piacerebbe classificarli come sia accessibile da parte degli amministratori (per esempio root), e quelli che sono accessibili agli utenti non privilegiati.

Non sono sicuro se sarebbe più facile da leggere il codice sorgente del kernel o se c'è qualche modo per interrogare l'elenco in user-space. Se ho bisogno di guardare nel kernel, quali funzioni dovrebbe ho bisogno di cercare di registrazione di ioctls?

È stato utile?

Soluzione

ioctls non realmente ottenere registrato nel kernel, ogni tipo di file-come oggetto ha un diverso insieme di ioctls disponibili.

La maggior parte delle volte sono realizzati tramite uno switch.

Così che cosa si ha realmente bisogno di fare è:

  • capire cosa insieme di dispositivi / tipi di file sono rilevanti per la sicurezza - questi dispositivi apribile solo da root presumibilmente non hanno bisogno ad essere controllati per root-exploit
  • .
  • capire cosa sono disponibili ioctls.

In pratica scoprire quali sono disponibili ioctls non è banale. Molti dispositivi hanno una pagina man, che li elenca, ma altri non lo fanno, e la lista potrebbe essere incompleta.

Di solito c'è un qualche funzione con un grande switch-dichiarazione. Tuttavia, v'è una sorta di "eredità" per cui un sacco di dispositivi hanno diversi tipi di ioctl attuate a diversi livelli.

Lo stesso "tipo" di conducente di solito è implementato in diversi tipi di hardware, e spesso condividono un bel po 'di codice.

Per esempio, le porte seriali hanno i loro propri ioctl definito in http://lxr.linux.no/#linux+v2.6.35/drivers/serial/serial_core.c#L1107

Ma porte seriali anche potenzialmente avere ioctls definite su una base per-pilota, ma come sono ttys, hanno anche rispondere a ioctls TTY.

E 'diverso strutturato per ogni sottosistema perché hanno un comportamento diverso.

Altri suggerimenti

man ioctl_list dà anche l'elenco dei comandi ioctl std con piccola nota e file di intestazione associato.

Per i dispositivi di carattere, è necessario guardare a loro struttura file_operations . V'è un puntatore a funzione in quella struttura chiamata ioctl che viene chiamata quando si ioctl chiami in quel dispositivo.

Quindi, fare quello che vuoi sarà difficile, come ogni dispositivo ha le sue proprie comandi ioctl.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top