[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


Archivio: Ottobre 2001 ml@sikurezza.org
Soggetto: Re: Kernel capabilities weakness
Mittente: vecna
Data: 8 Oct 2001 11:18:32 -0000
~ non so chi si e' interessato un po delle capabilities, cmq in riferimento ad
~ una mail inviata su bugtraq risulterebbe possibile un exploit per il
~ ripristino globale delle capabilities.
~ 
~ http://www.securityfocus.com/cgi-bin/archive.pl?id=1&mid=67143
visto solo ora...
 
~   if ((fd=open("/dev/mem",O_RDWR | O_SYNC ))<0)
~      {
~    fprintf(stderr,"Error opening /dev/mem.\n");
~    exit(1);
~      }
la vulnerabilita` e` concettualmente simile a quella trovata contro pitbull
linux e gia` discussa in questa lista 2 anni fa'... generalmente potremmo dire
che ogni protezione/linitazione/smistamento dei privilegi e` utile e aumenta
la sicurezza, ma se /dev/mem lo si lascia SCRIVIBILE qualunque cosa puo`
essere bypassata.

anche nell'email su BQ:
--
To make capability bounding sets at all useful, you have to disable
CAP_SYS_RAWIO, which governs access to /dev/mem.  Be advised that doing so
will break X and any other user-space program that needs raw access to
memory or I/O ports.
--
le capabilities prevedono la difesa di /dev/mem appunto con CAP_SYS_RAWIO,
ma il problema che si pone dopo averla attivata e` simile a quello che
si incontra usando X su *BSD una volta alzato il securelevel.
(logicamente va anche levata la cap x i moduli)

idea x nuovo thread:
"ma xke` non si pensa a un modo + fine per X per poter far quello che deve 
fare SENZA dover x forza aprir /dev/mem in lettura/scrittura ?


~    buf = mmap(0,5000,PROT_READ | PROT_WRITE , MAP_SHARED , fd, 0x01f0000);
~    if (buf == (void*)-1 )
~      {
~  printf("MAP_FAILED with %d\n",errno);
~  exit(1);
~      }
~    printf("Mem config regs mapped at address %p.\n",buf);
~ 
~    buf[0x20] &= 0xFFFFEFF0; /* trying disabling SYS_MODULE */
~    printf("Value in 0x01f0080 = 0x%08x \n\n",buf[0x20]);
~ 
~    buf[0x20] &= 0xFFFFFFFF; /* try to set capability back */
~    printf("New value in 0x01f0080 = 0x%08x \n\n",buf[0x20]);
attacchi simili li ho sempre visti fare con fopen() fseek()

~ Non so se le capabilities siano state modificate ( ma non mi risulta ),
~ quindi è piu' probabile un mio errore.
~ Il problema è che a funzionare funziona, solo che riesce solo a droppare le
~ capabilities ma non a 'rialzarle'.
beh il programma li` sopra si limita ad aprire e a cambiare il valore in modo
che non risultino attivate quelle cap, quel codice sicuramente non le
ripristinera` mai (bisognerebbe salvar quel byte buf[0x20] come backup della
kernel memory originale, e dopo aver droppato le capabilities rimettere il
valore che c'era prima, in questo modo si tornerebbe alla situazione 
iniziale)

~ Mi domando come e' possibile visto che sto provando direttamente a scrivere
~ in /dev/mem e che non ho trovato altri riferimenti in memoria a cap_bset.
si in effetti non ce ne sono altri :) ma tutto dipende da cosa metti tu
in memoria, avendo accesso a /dev/mem sei l'equivalente di gesu` cristo in vena
di miracoli su quella box, mettere togliere capabilities si tratta solo di 
aggiungere alle variabili il valore esatto o ripristinar quello precedente

~ Qualche idea ???
non usare X

ciao [Hypo] :)

bye

________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List




[ Home | Liste | F.A.Q. | Risorse | Cerca... ]

www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005