Miércoles, 5 de Septiembre de 2018: Lo lindo de lo simple

Querido Diario…

Haya por los años del quién sabe cuando que no recuerdo, Microsoft, hizo una modificación interesante a la forma en que se venía llamado a los Exceptions Handlers; en Windows XP SP1.

Los Exception Handlers son una cadena de “objetos” (en realidad no son objetos, pero llevo todo el día intentado recordar como se llaman exactamente… creo que estructuras, pero no recuerdo, me quedé dormido en esa clase xD), en donde se tienen dos elementos, uno es un puntero al siguiente Exception Handler, y otro es el puntero hacia la acción que va a ejecutar ese Exception Handler. Lo que inicialmente hacían los hackers para explotar algún fallo que encontraban, era modificar el salto del EIP disparando un Exception Handler, y a su vez el Exception Handler, te mandaba hacia una dirección modificada. Para hacer eso, se tenía que ingresar directamente a la dirección de memoria del Exception Handler.

Lo que hizo Microsoft para evitar fue esto, es extremadamente sencillo. Cada que ntdll.dll dispará el SEH Chain (el inicio de la cadena de Exception Handlers) se “XORean” todas las direcciones, de esa forma antes de usarse tienen un 0x00000000, es decir.. se borra todo y se inutilizan. Y listo, así de sencillo no es posible alocar una shellcode allí. Después en Windows 2003 server implementaron el mismo cambio.

Microsoft… siempre a la vanguardia en seguridad, muy por encima de todos los S.O.’s…. (escuche un par de linuxeros rabiar y llorar por allí coff.. coff… esa cosa que aun tiene BOF’s es 2018 😛 )

Lo interesante de esto… es que es muy limpio y muy sencillo, y totalmente válido hasta la fecha para evitar la alocación directa de algún payload en una dirección de memoria. Lo que evita un clásico pop ret, ret, ret o un pop %eax o un mov directo, etc..

Querido Diario…

Siempre me ha encantado los cíclidos por su temperamento. Adoraba los Oscares, y siempre quise un FH…