aRC-FL-Código Fuente 001 (22/03/2006) Acceso desprotegido en Windows XP (por Furious Logic [aRC]) Advertencia ntes de poner en práctica el presente documento y cualquier material asociado al mismo, sea éste de naturaleza tangible o intangible usted debe estar totalmente de acuerdo con todos los términos y condiciones siguientes: Del software Cualquier software se proporciona tal como está, sin ninguna garantía expresa ni implícita de ningún tipo. aRC no garantiza ni asume responsabilidad alguna en cuanto a la integridad o exactitud de cualquier información contenida en el software. Ni los miembros ni los colaboradores ni los invitados aRC se hacen responsables por el uso que se le pueda dar al software. Al examinar, copiar, ejecutar, instalar o utilizar el software, el lector está aceptando su total conformidad con todos los términos y condiciones enunciados. Del documento Al abrir este documento, el lector acepta incondicionalmente su total y exclusiva responsabilidad legal, de acuerdo a las leyes vigentes en su país, por el uso de las técnicas experimentales, educativas y/o de investigación aquí vertidas en materia de programación especializada de computadora s. En caso de discrepar con alguno de los puntos descritos, deberá eliminar inmediatamente el presente documento y todo material asociado al mismo. Agradecimientos A Lotus Word Pro de Lotus Corporation, incluido en la suite de oficina Lotus Millenium 9.7. A FontLab Studio 5.0 de Fontlab Ltd. por permitirnos asignar permiso completo a las fuentes true type protegidas contra copia A Acrobat 7.0 Professional de Adobe Systems Incorporated por su excelente resultado en la creación del documento electrónico en formato PDF. A Corel Corporation por su producto Corel Paint Shop X que nos ha sido imprescindible para la generación de las pantallas que hemos incluido en este documento. Objetivo Demostrar la hipótesis de que la compatibilidad que las aplicaciones recientes de 32 bits arrastran con programas de 16 bits, constituye un enorme forado en la seguridad de nuestros sistemas, porque si bien es cierto que los programas de 32 bits son restringidos, los programas de 16 bits tienen las puertas de acceso abiertas. aRC-FL-Código Fuente 001 A cceso despro tegido en Win dows XP – Página 1 de 11 aDVANCED rESEARCH cOMMUNITY (aRC) http://www.arc666.com A
12
Embed
aRC-FL-Código Fuente 001 Acceso desprotegido en Windows XP
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
5/10/2018 aRC-FL-C digo Fuente 001 Acceso desprotegido en Windows XP - slidepdf.com
ntes de poner en práctica el presente documento y cualquier material asociado al mismo, sea
éste de naturaleza tangible o intangible usted debe estar totalmente de acuerdo con todos los
términos y condiciones siguientes:
Del software
Cualquier software se proporciona tal como está, sin ninguna garantía expresa ni implícita de
ningún tipo.
aRC no garantiza ni asume responsabilidad alguna en cuanto a la integridad o exactitud de
cualquier información contenida en el software.
Ni los miembros ni los colaboradores ni los invitados aRC se hacen responsables por el uso que
se le pueda dar al software.
Al examinar, copiar, ejecutar, instalar o utilizar el software, el lector está aceptando su total
conformidad con todos los términos y condiciones enunciados.
Del documento
Al abrir este documento, el lector acepta incondicionalmente su total y exclusiva
responsabilidad legal, de acuerdo a las leyes vigentes en su país, por el uso de las técnicas
experimentales, educativas y/o de investigación aquí vertidas en materia de programación especializada
de computadoras.
En caso de discrepar con alguno de los puntos descritos, deberá eliminar inmediatamente el
presente documento y todo material asociado al mismo.
Agradecimientos
A Lotus Word Pro de Lotus Corporation, incluido en la suite de oficina Lotus Millenium 9.7.
A FontLab Studio 5.0 de Fontlab Ltd. por permitirnos asignar permiso completo a las fuentes
true type protegidas contra copia
A Acrobat 7.0 Professional de Adobe Systems Incorporated por su excelente resultado en la
creación del documento electrónico en formato PDF.
A Corel Corporation por su producto Corel Paint Shop X que nos ha sido imprescindible para la
generación de las pantallas que hemos incluido en este documento.
Objetivo
Demostrar la hipótesis de que la compatibilidad que las aplicaciones recientes de 32 bitsarrastran con programas de 16 bits, constituye un enorme forado en la seguridad de nuestros sistemas,
porque si bien es cierto que los programas de 32 bits son restringidos, los programas de 16 bits tienen
las puertas de acceso abiertas.
aRC-FL-Código Fuente 001 Acceso desprotegido en Windows XP – Página 1 de 11
aDVANCED rESEARCH cOMMUNITY (aRC) http://www.arc666.com
A
5/10/2018 aRC-FL-C digo Fuente 001 Acceso desprotegido en Windows XP - slidepdf.com
Prueba 2b: Resultado bajo Windows familia NT (NT/2000/XP/2003)
¿Qué sucedió con la memoria protegida? No obtuvimos ningún aviso o advertencia alguna.
¿No hay protección alguna? Es un resultado muy interesante.
Hipótesis
Sabemos que Delphi es un programa de 32 bits.
Sabemos que Debug es un programa de consola de 16 bits.
Al parecer, el arrastrar compatibilidad con programas de 16 bits por parte de windows, crea un
hoyo, o más bien un forado del tamaño de una cantera, dentro de los sistemas operativos Windowsfamilia NT (NT/2000/XP/2003), lo que podría servir para cualquier propósito.
Entonces, ¿es probable que los programas de consola de 16 bits tengan las puertas abiertas,
en tanto que para los programas de 32 bits estas mismas puertas están cerradas? ¿O es que Microsoft
proporciona libre acceso exclusivamente al programa Debug y/o depuradores de su mismo género?
Experimento
Utilizando un compilador de 16 bits tal como Turbo C++ 1.0 o cualquier otro compilador de 16
bits, vamos a intentar acceder a la misma memoria del BIOS bajo Windows familia NT
(NT/2000/XP/2003). Adjuntamos el programa \En Turbo C++\Ejem_002.cpp, realizado bajo Turbo C++,
un compilador de 16 bits. Código:
// Ejemplo 002 por Furious Logic [aRC]#include "stdio.h"
typedef unsigned char byte;
int main (void){ byte far *mem_fecha_bios; char fecha_bios[9]; // 8 caracteres dd/mm/aa + NULL
mem_fecha_bios = (byte far *) 0xF000FFF5; for ( register byte i=0; i<8; i++ )
En este caso estamos utilizando la dirección con segmento y desplazamiento unidos como
F000FFF5h, copiamos 8 caracteres desde esa dirección, agregamos un caracter nulo de terminación de
cadena e imprimimos el resultado copiado.
Experimento: Resultado bajo Windows familia NT (NT/2000/XP/2003)
Resulta innecesario probarlo bajo Windows 9x/ME porque bajo esa plataforma no hay
restricción alguna sea en 32 bits o en 16 bits.
ejem_002.exe es un programa de consola de 16 bits y no debemos confundirlo con los
programas de consola generados por Delphi, Dev-C++, HLA, Visual C++, C++Builder, entre otros.
Estos últimos crean programas de consola de 32 bits (formato ejecutable PE), en cambio ejem_002.exees un programa de consola en formato ejecutable D.O.S. compilado con Turbo C++.
Deducción y tesis 1
Hemos demostrado uno de los problemas que acarrea el mantener compatibilidad con
programas de 16 bits: el libre acceso a lo que pareciera protegido. Utilizando nuestras deducciones
como punto de partida, planteamos la idea de crear un programa de 32 bits que sea capaz de
aprovechar las facilidades que se le otorgan a los programas de 16 bits. Para lograrlo necesitaremos
utilizar ambos 2 compiladores, el de 16 bits y el de 32 bits.
Es posible que esté pensando en unir el código objeto .obj del compilador de 16 bits al
compilador de 32 bits, pero ello lo incorporará automáticamente en el código de 32 bits y nuevamente
el acceso está restringido.
Una solución práctica y fácil de implementar, es crear un programa de 32 bits que capture lasalida de un programa de consola de 16 bits. Es útil cuando necesitamos un resultado.
Utilizando Delphi uniremos nuestro programa de 16 bits con nuestro programa de 32 bits.
Adjuntamos el programa en \tesis 1\project1.dpr cuyo código es:
//... procedure TForm1.SpeedButton1Click(Sender: TObject); var
Y el código mostrado líneas arriba corresponde a la pulsación del botón Función 16 bits. Lo
que hemos hecho es agregar el programa que tiene acceso completo (el de 16 bits en Turbo C++),
como parte de los recursos del programa de 32 bits. Al presionar el botón, extraemos ese pequeño
programa hacia la ruta de archivos temporales de windows, lo ejecutamos y en seguida lo eliminamos.
El hecho particular es que estamos redirigiendo la salida por consola del programa de 16 bits hacia un
archivo que arbitrariamente llamamos 'salida'. El archivo 'salida' contiene la fecha del BIOSdevuelta por nuestro programa de 16 bits. Leemos el archivo 'salida', copiamos su contenido hacia el
campo de texto de nuestro formulario y borramos el archivo 'salida'.
Primero compile los recursos con compilar_recursos.bat y luego compile el código Delphi.
Como se puede apreciar, la técnica es muy sencilla y el poder de nuestro programa se basa
casi exclusivamente en el contenido del programa de 16 bits, el núcleo. En el núcleo podemos incluir
interrupciones, salida/entrada hacia puertos, acceso directo a disco, etc.
Tesis 2: TASM + MASM32
El rendimiento de la aplicación de 16 bits puede ser mejorado si programamos directamente en
ensamblador. En cambio, el rendimiento de la aplicación de 32 bits es de por sí óptimo debido a sureducido código. No obstante, también podríamos migrarla hacia lenguaje ensamblador.
Actualmente el programa de 16 bits ejem_002.exe pesa 8,870 bytes y el programa de 32 bits
project1.exe pesa 404,480 bytes (incluyendo en su sección recursos a ejem_002.exe).
aRC-FL-Código Fuente 001 Acceso desprotegido en Windows XP – Página 6 de 11
aDVANCED rESEARCH cOMMUNITY (aRC) http://www.arc666.com
5/10/2018 aRC-FL-C digo Fuente 001 Acceso desprotegido en Windows XP - slidepdf.com
sig: mov al, es:[bp] mov fecha[bx], al inc bp inc bx cmp bx, 8
jb sig pop es retobtener_fecha_bios endp
mostrar proc mov dx, offset fecha mov ah, 9h int 21h retmostrar endp
end inicio
Compilamos con compilar.bat o si preferimos hacerlo manualmente utilizamos los comandos:
tasm fec_bios.asmetlink fec_bios.obje
No debemos confundir la pareja tasm/tlink con la pareja tasm32/tlink32, ya que estos últimos
son para compilar y obtener programas en 32 bits; en tanto que los primeros son para compilar y
generar un resultado ejecutable de 16 bits.
Al compilar habremos obtenido el archivo ejecutable fec_bios.exe cuyo peso es de 579 Bytes.
Es decir, hemos reducido el programa original en Turbo C++ ejem_002.exe de 8,870 Bytes a tan solo
un 6.5% de su tamaño original utilizando TASM.
El lector puede probar reemplazar Turbo C++ por cualquier otro compilador o intérprete de 16
bits que conozca bien para desarrollar su programa núcleo. En el caso particular de que utilice TurboPascal, asegúrese de que sea la versión 7.1 para evitar un bug que la versiones anteriores presentan
debido a la elevada velocidad de los microprocesadores actuales.
aRC-FL-Código Fuente 001 Acceso desprotegido en Windows XP – Página 7 de 11
aDVANCED rESEARCH cOMMUNITY (aRC) http://www.arc666.com
5/10/2018 aRC-FL-C digo Fuente 001 Acceso desprotegido en Windows XP - slidepdf.com
El programa interfase creado en Delphi para la tesis 1 será mejorado en cuanto a tamaño,
utilizando MASM32 8.2 SP2a en su lugar. Adjuntamos el programa en el directorio \tesis 2\MASM32\que para beneficio del lector está realizado bajo RadAsm 2.2.07. Código fuente central:
.elseif (uMsg==WM_COMMAND)
.if (wParam==BTN_FUNCION); Extraemos el programa de 16 bits en el directorio temporalinvoke FindResource,hInstance,200,RT_RCDATApush EAXinvoke LoadResource,hInstance,EAXinvoke LockResource,EAXmov res,EAXinvoke GetTempPath,MAX_PATH,addr tmpinvoke lstrcat,addr tmp,addr fecha_biosinvoke _lcreat,addr tmp,0mov h_archivo,EAXpop EAXinvoke SizeofResource,hInstance,EAXinvoke _lwrite,h_archivo,res,EAXinvoke _lclose,h_archivo
; Ejecutamos con salida hacia un temporal y borramos el programainvoke RtlZeroMemory,addr sInfo,sizeof STARTUPINFOmov sInfo.cb,sizeof STARTUPINFOmov sInfo.dwFlags,STARTF_USESHOWWINDOWmov sInfo.wShowWindow,SW_HIDEinvoke lstrcpy,addr aux,addr tmpinvoke lstrcat,addr aux,addr canalizarinvoke CreateProcess,NULL,addr aux,NULL,NULL,FALSE,
Tesis final: Mejorar el núcleo de 16 bits utilizando Debug
La tesis final que planteamos nos permitirá reducir los 579 Bytes del programa núcleo de 16
bits a tan solo 49 Bytes de código. Al mismo tiempo, modificaremos ligeramente el código en
MASM32 para evitar utilizar la sección recursos.
Debug: El núcleo de 16 bits
Si migramos nuestro código núcleo en TASM hacia Debug, obtendremos un reducido código
de tan solo 49 bytes. Adjuntamos el programa como \tesis final\nucleo.com escrito íntegramente
con Debug. La forma de codificarlo se muestra aquí:
El comando a proviene de assembly ("ensamblar") y se utiliza para ensamblar directamente.
El comando n de name ("nombre") y se emplea para asignarle un nombre al archivo.
El comando r proviene de registers ("registros") y se utiliza para ver/modificar los registros.
El comando w proviene de write ("escribir") y se utiliza para grabar nuestros cambios. El registro
CX deberá contener la cantidad de bytes a escribir en el archivo especificado por el comando n.
Cuando escribimos en el Debug estamos haciéndolo directamente en el archivo. Es decir, no
hay nada que compilar. Escribimos los mnemónicos y estos serán grabados en su formatohexadecimal como parte del archivo ejecutable que deberá ser .com obligatoriamente. En términos de
porcentajes, el núcleo anterior hecho en TASM ha sido reducido de 579 Bytes a tan solo 49 Bytes lo que
gracias al programa Debug se interpreta como una reducción a un 8.5% de su tamaño previo.
aRC-FL-Código Fuente 001 Acceso desprotegido en Windows XP – Página 9 de 11
aDVANCED rESEARCH cOMMUNITY (aRC) http://www.arc666.com
5/10/2018 aRC-FL-C digo Fuente 001 Acceso desprotegido en Windows XP - slidepdf.com
Con MASM32 ya tenemos un código bastante reducido, pero intentaremos reducirlo un poco
más aplicando una modifición ligera para evitar la necesidad de agregar algo a la sección recursos.
Adjuntamos el programa en el directorio \tesis final\MASM32\interfase.asm cuyo contenido
principal es:
//...; Creamos el archivo a partir de una variableinvoke GetTempPath,MAX_PATH,addr tmpinvoke lstrcat,addr tmp,addr nucleoinvoke _lcreat,addr tmp,0mov h_archivo,EAXinvoke _lwrite,h_archivo,addr programa,49invoke _lclose,h_archivo
; Ejecutamos con salida hacia un temporal y borramos el programainvoke RtlZeroMemory,addr sInfo,sizeof STARTUPINFOmov sInfo.cb,sizeof STARTUPINFOmov sInfo.dwFlags,STARTF_USESHOWWINDOWmov sInfo.wShowWindow,SW_HIDEinvoke lstrcpy,addr aux,addr tmpinvoke lstrcat,addr aux,addr canalizarinvoke CreateProcess,NULL,addr aux,NULL,NULL,FALSE,
Lo que hemos hecho es almacenar los 49 Bytes que componen el programa nucleo.com en una
variable. Es esta variable la que grabamos directamente en un archivo.
Compilamos y obtenermos un archivo ejecutable de 5,120 Bytes. Es decir 1 KiB, 1,024 Bytes,
menos que el programa anterior de 6,144 Bytes.
Conclusiones
Windows XP está totalmente desprotegido, señalándonos una puerta que podemos utilizar para
reingresar al mundo del acceso irrestricto a direcciones de memoria, acceso directo al hardware,
ejecución de interrupciones de software, etc.
Al mismo tiempo hemos aprendido como probar y optimizar la implementación de una técnica
determinada. Tomamos como punto de partida un compilador de alto nivel para probar una técnica sin
tener que preocuparnos demasiado por la sintaxis. Si la técnica funciona, migramos el código hacia un
compilador de nivel más bajo que nos permita mejorar su rendimiento (tamaño del ejecutable y
velocidad de respuesta). Esta técnica robustece nuestros conocimientos en todos los compiladores
involucrados.
Finalmente, hemos aprendido a integrar el contenido de un programa como parte de una
variable para ahorrar algunos bytes de tamaño que se agregarían si utilizamos la sección recursos.
La desventaja de esta técnica se encuentra en que los programas de 16 bits no son tan velocescomo los programas de 32 bits. Por lo tanto, si lo que buscamos es rendimiento para un concurso de
programación optimizada, aconsejamos crear un driver en lenguaje ensamblador, que por otra parte
requiere más líneas de código y mayores conocimientos que la solución rápida que hemos presentado.
aRC-FL-Código Fuente 001 Acceso desprotegido en Windows XP – Página 10 de 11
aDVANCED rESEARCH cOMMUNITY (aRC) http://www.arc666.com
5/10/2018 aRC-FL-C digo Fuente 001 Acceso desprotegido en Windows XP - slidepdf.com