Wednesday, January 30, 2008

Houla, c'est un bon jour!

http://securitywatch.eweek.com/microsoft_windows/microsoft_adds_new_antiexploit_apis_into_windows.html

"* If you support DEP but want to allow customers to disable DEP if there are serious compatibility issues, then this is the API to use because the argument can be a configuration option."

Prediction pour 2008: SetProcessDEPPolicy() adresse de reference pour les ret2libc sous Windows.

Lien original d'un blog de MS:
http://blogs.msdn.com/michael_howard/archive/2008/01/29/new-nx-apis-added-to-windows-vista-sp1-windows-xp-sp3-and-windows-server-2008.aspx

Merci Microsoft, depuis le temps que je demandais cette 'feature'.

7 comments:

mxatone said...

Etonnant, je pensais que le DEP pourrait plus etre disable. Plutot qu'il pourrait etre active sur des applications tierces. On verra bien ...

newsoft said...

Je ne vois pas trop la différence avec NtSetInformationProcess(0x22, MEM_EXECUTE_OPTION_ENABLE) ... sauf que la nouvelle API est documentée :)

@mxatone: la nouveauté avec Vista c'est le flag "permanent" applicable par processus, qui empêche la désactivation ultérieure.

mxatone said...

oki newsoft, c'est un truc fun que je savais pas ^^. Faudrait que j'ameliore ma culture Vista userland au lieu de regarder le kernel.

Kostya said...

Avec NtSetInformationProcess tu pushes 4 arguments dont un pointeur vers '2'. Le probleme etant les 0, qui font en sorte que tu ne peux generalement pas l'appeler directement, d'ou la combo restauration d'ebp, mov al,1 , saut dans la fonction de desactivation, saut vers le shellcode. Le fait qu'il n'y ait qu'un parametre (helas 0), et pas besoin de sauter au milieu d'une fonction economise 75% du boulot.

mxatone said...

Bien que la technique d'Uniformed soit complete, j'ai jamais eu a utiliser le mov al,1 (je controlais jamais la stack pour le ret vers le cmp). Par contre c'est clair que ca imposera moins de cabriole avec ou sans un ret2libc. Que c'était bon de passer entre 3 / 4 bout de code ou de rediriger esp sur un reg controle ...

Alto said...

NtSetInformationProcess(... 0x22, MEM_EXECUTE_OPTION_ENABLE ..)
not work on DEP = AlwaysOn!

newsoft said...

@alto: SetProcessDEPPolicy() non plus.

http://msdn2.microsoft.com/en-us/library/bb736299(VS.85).aspx

"The system DEP policy setting must be OptIn or OptOut. If the system DEP policy is AlwaysOff or AlwaysOn, SetProcessDEPPolicy returns an error."