Gli attacchi sferrati sono ancora possibili nei giorni di isolamento dei privilegi dell'interfaccia utente?

28

Prima che Windows introducesse l'isolamento dei privilegi dell'interfaccia utente, qualsiasi applicazione poteva inviare tutti i tipi di messaggi della finestra a qualsiasi finestra sullo stesso desktop (un attacco sferrato), consentendo l'elevazione dei privilegi.

Ora, UIPI arresta le applicazioni con privilegi limitati dall'invio di molti messaggi della finestra a applicazioni con privilegi più elevati. Wikipedia dice :

User Interface Privilege Isolation (UIPI) is a technology introduced in Windows Vista/2008 Server to combat shatter attack exploits. By making use of Mandatory Integrity Control, it prevents processes with a lower "integrity level" (IL) from sending messages to higher IL processes (except for a very specific set of UI messages).

Sembra che dovrebbe affrontare il problema - secondo questo PDF collegato in quell'articolo, solo WM_NULL , WM_MOVE , WM_SIZE , WM_GETTEXT , WM_GETTEXTLENGTH , WM_GETHOTKEY , WM_GETICON , WM_RENDERFORMAT , WM_DRAWCLIPBOARD , WM_CHANGECBCHAIN , WM_THEMECHANGED e% co_de non documentato e 0x313 sono consentiti. (Il PDF menziona un possibile attacco denial-of-service, a partire da pagina 57, ma mentre un problema non è l'elevazione dei privilegi. Ho anche fatto un controllo superficiale della DLL responsabile, e sembra che su Windows 8 non funzioni in realtà registra il messaggio che porta al problema.)

Non sembra che nessuno di questi abbia problema creato da 0x31B , che ha portato il processo di destinazione a passare a un indirizzo arbitrario. Tuttavia, questo articolo di un blogger Microsoft (Raymond Chen) insinua strongmente gli attacchi in frantumi sono ancora un problema:

What you can do is have a service inject the program into the session, and let it run as the logged-on user. (You have to make it run as the logged-on user in order to avoid a shatter attack.)

Questo documento Microsoft su Controllo dell'account utente rileva che alcune risorse "sono ancora condivise tra i processi a diversi livelli di privilegio ":

  • Desktop window, which actually owns the screen surface.
  • Desktop heap read-only shared memory.
  • Global atom table.
  • Clipboard

Tuttavia, il semplice fatto di avere quelle cose accessibili da processi con livelli di privilegio diversi non sembra consentire il salto effettivo che causa l'elevazione dei privilegi. E anche se fosse stato fatto il salto, pensavo che Data Execution Prevention avrebbe impedito l'esecuzione effettiva del codice iniettato.

Quindi, avere una finestra da un processo eseguito come WM_TIMER sul desktop di un utente con privilegi limitati offre comunque a quell'utente l'opportunità di elevare i privilegi?

    
posta Ben N 08.05.2016 - 18:42
fonte

1 risposta

1

UIPI impedisce a un processo con un livello di integrità inferiore di inviare un messaggio WM_TIMER o EM_GETLINE a un processo di livello di integrità superiore. Questi erano i due tipi di messaggi che potevano essere sfruttati per elevare i privilegi su un sistema. I processi di livello di integrità inferiore possono ancora inviare tipi di messaggi limitati a processi di alto livello, ma non possono essere utilizzati per assumere il controllo dell'esecuzione dei processi. Per quanto riguarda DEP che può essere salvato, puoi usare WM_TIMER o EM_GETLINE per avviare l'esecuzione di una catena ROP . In questo caso dovresti trovare opcode che ti permetteranno di ruotare lo stack (questo è dove il callback WM_TIMER invierà l'esecuzione a) in una nuova posizione contenente gli indirizzi nella tua catena ROP .

    
risposta data 12.04.2017 - 20:48
fonte

Leggi altre domande sui tag