Título: Algunas dudas sobre Drivers... Publicado por: Vaagish en 30 Octubre 2013, 23:01 pm Hola amigos! Bueno, no quiero quedar pesado, ni aparentar que no he leído nada sobre el tema, pero por mas que busque diferentes fuentes ninguna me despoja de la duda sobre algunos asuntos de los drivers, creo, en parte por no manejar el ingles fluidamente. Si alguien me da una mano sobre algunos conceptos, se lo agradecería mucho. Voy a poner una serie de nombres, algunas con lo que yo entiendo y otras para que si alguien quiere/puede me las "traduzca" al "entendible" :xD
Citar IRP: The IRP structure is a partial opaque structure that represents an I/O request packet. IRP es una estructura que se utiliza para la comunicacion de los driversCitar IO_STACK_LOCATION: The IO_STACK_LOCATION structure defines an I/O stack location, which is an entry in the I/O stack that is associated with each IRP. Alguien me puede aclarar esto??Citar IRP Major Function: Each driver-specific I/O stack location (IO_STACK_LOCATION) for every IRP contains a major function code (IRP_MJ_XXX) IRP Major Function es un vector de punteros de funciones que necesita nuestro driver, entiendo que eso es asi, pero no porque.Citar IoCreateDevice: WDM drivers, other than bus drivers, call IoCreateDevice to create their device objects. Most WDM drivers create their device objects from within their AddDevice routines. Some drivers, such as disk drivers that must respond to drive layout IOCTLs, call IoCreateDevice from a dispatch routine. Por lo que entiendo aca,, los drivers en windows llaman a IoCreateDevice para crear sus device objects, pero entonces, un driver en windows siempre es considerado como un dispositivo, o "representante" de uno? Aunque sea un driver que no interactue con un dispositivo siempre sera considerado un dispositivo? ( Esta parte me interesa, porque tengo un error de concepto me parece )Bueno, tengo mas dudas, pero creo que se pueden ir aclarando si puedo despejar un poco estas primero.. Muchas gracias de antemano! Saludos! Título: Re: Algunas dudas sobre Drivers... Publicado por: x64core en 3 Noviembre 2013, 01:28 am Citar Citar Estructura que es creada por el IO manager el cual lo pasa por todos lo drivers cargados en el kernel,IRP: The IRP structure is a partial opaque structure that represents an I/O request packet. IRP es una estructura que se utiliza para la comunicacion de los drivers Citar por ahi en esos libros que supongo que estas leyendo recuerdo que hay una imagen que muestra un diagrama sobre esta estructura y como se relaciona del IO manager y los drivers. Citar IO_STACK_LOCATION: The IO_STACK_LOCATION structure defines an I/O stack location, which is an entry in the I/O stack that is associated with each IRP. Es la definicion de la estructura que estamos hablando en la pregunta 1.Alguien me puede aclarar esto?? Citar Citar IRP Major Function: Each driver-specific I/O stack location (IO_STACK_LOCATION) for every IRP contains a major function code (IRP_MJ_XXX) Es la funcion que sera llamada a los drivers, todo driver tiene un array de punteros que corresponde a cada codigo de funcion para cada proposito.IRP Major Function es un vector de punteros de funciones que necesita nuestro driver, entiendo que eso es asi, pero no porque. Citar Citar IoCreateDevice: WDM drivers, other than bus drivers, call IoCreateDevice to create their device objects. Most WDM drivers create their device objects from within their AddDevice routines. Some drivers, such as disk drivers that must respond to drive layout IOCTLs, call IoCreateDevice from a dispatch routine. Driver son los controladores de los dispositivos, si un driver es cargado para un proposito legitimo es porque controlara un dispositivo en general, mirarPor lo que entiendo aca,, los drivers en windows llaman a IoCreateDevice para crear sus device objects, pero entonces, un driver en windows siempre es considerado como un dispositivo, o "representante" de uno? Aunque sea un driver que no interactue con un dispositivo siempre sera considerado un dispositivo? ( Esta parte me interesa, porque tengo un error de concepto me parece ) algunos dispositivos como video camaras instalan driver(s) para controlar y manipular el dispositivo ( camara de video en este caso ). ademas sirve para comunicarse de modo usuario a modo kernel. Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 3 Noviembre 2013, 02:23 am Primero que nada, muchas gracias x64Core! Pensé que ya nadie me iba a responder, hoy ya no tenia ni ganas de leer el libro, esto me anima ;D
Citar Estructura que es creada por el IO manager el cual lo pasa por todos lo drivers cargados en el kernel Entonces todos los irps son enviados a todos los drivers.. por eso había leido en el tuto "Principios básicos de desarrollo de drivers en Windows"Citar Es decir, cuando una aplicación en modo usuario llame a algunas de estas funciones: Lo que esta pasando es que cuando se llama a una API Nativa, la IRP pasa por nuestro driver, entonces ahi podemos modificar el resultado, justo como un hook, no?CreateFile CloseHandle WriteFile ReadFile DeviceIoControl se llamara a tu driver. Citar por ahi en esos libros que supongo que estas leyendo recuerdo que hay una imagen que muestra un diagrama sobre esta estructura y como se relaciona Si que lo estoy leyendo, pero no recuerdo haber visto el diagrama, y si lo vi no lo abre entendido, ahora lo voy a repasar..Citar Driver son los controladores de los dispositivos, si un driver es cargado para un proposito legitimo es porque controlara un dispositivo en general Ok! Eso me aclara bastante, porque había leído que hay diferentes tipos de drivers, pero entonces siempre debería ser esa la función de un driver..Muchas Gracias! Saludos!! Título: Re: Algunas dudas sobre Drivers... Publicado por: x64core en 3 Noviembre 2013, 02:37 am Citar Citar Lo que los rootkits hacen es reemplazar el puntero del IRP Handler, por ejemplo para ocultar archivos reemplazan el puntero correspondiente en el driver responsable del NTFS/FAT.Es decir, cuando una aplicación en modo usuario llame a algunas de estas funciones: CreateFile CloseHandle WriteFile ReadFile DeviceIoControl se llamara a tu driver. Lo que esta pasando es que cuando se llama a una API Nativa, la IRP pasa por nuestro driver, entonces ahi podemos modificar el resultado, justo como un hook, no? Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 3 Noviembre 2013, 03:08 am Ok,, voy a estudiar eso, suena interesante.. Entonces, cuando se envía un IRP, se envía a todos los drivers, no? (Me quede con esa idea)
EDIT: O sea, si mi driver tiene un Major Function que pueda recibir ese IRP, no? Título: Re: Algunas dudas sobre Drivers... Publicado por: x64core en 3 Noviembre 2013, 07:14 am Ok,, voy a estudiar eso, suena interesante.. Entonces, cuando se envía un IRP, se envía a todos los drivers, no? (Me quede con esa idea) EDIT: O sea, si mi driver tiene un Major Function que pueda recibir ese IRP, no? Si tu driver esta añadido a la cadena de drivers, sí (ya veras como va). De lo contrario capturara solo los de tu device. Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 10 Noviembre 2013, 18:35 pm Hola! Yo molestanto otra vez..
Citar Loading the Windows NT kernel[edit] The operating system starts when certain basic drivers flagged as "Boot" are loaded into memory. The appropriate file system driver for the partition type (NTFS, FAT, or FAT32) which the Windows installation resides are amongst them. At this point in the boot process, the boot loader clears the screen and displays a textual progress bar, (which is often not seen due to the initialization speed); Windows 2000 also displays the text "Starting Windows..." underneath. If the user presses F8 during this phase, the advanced boot menu is displayed, containing various special boot modes including Safe mode, with the Last Known Good Configuration, with debugging enabled, and (in the case of Server editions) Directory Services Restore Mode. Once a boot mode has been selected (or if F8 was never pressed) booting continues. Next, the Windows NT kernel (Ntoskrnl.exe) and the Hardware Abstraction Layer (hal.dll) are loaded into memory. If multiple hardware configurations are defined in the Windows Registry, the user is prompted at this point to choose one. Ntoskrnl.exe Citar This system binary is not a native application (in that it is not linked against ntdll.dll), instead containing a standard main entry point, a stub that calls the kernel initialization function but is unused as the OS loader (internal symbol OSLOADER) calls KiSystemStartup directly. While ntoskrnl.exe is not linked against ntdll.dll, it is linked against bootvid.dll, hal.dll and kdcom.dll. Because it requires a static copy of C Runtime objects it depends on, the executable is usually about 2MB in size. Bueno, estos dos archivos no se cargan de forma "Normal", no? (Ntoskrnl.exe y hal.dll) Porque el loader de windows aun no esta cargado en memoria, aparte, el Ntoskrnl.exe, muchas veces esta definido como "el mismo kernel" (Aunque esto no es del todo cierto, o sea, no es solo ese archivo el núcleo de windows), lo que me da a pensar esto, es que gran parte del núcleo de windows es un exe, como todo programa de windows,, es esto así? Saludos!! Título: Re: Algunas dudas sobre Drivers... Publicado por: Eternal Idol en 10 Noviembre 2013, 22:23 pm Si, es un PE (http://en.wikipedia.org/wiki/Portable_executable), algo que podes comprobar de varias maneras.
Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 11 Noviembre 2013, 01:57 am Ajam.. interesante... lo voy a ver con el Pe Explorer.. por ende, supongo que puedo ver que funciones exporta..
En realidad, estaba por poner que mas que una duda, una confirmación.. por tener extensión .exe, esperaba que fuera un PE, pero no se carga como los demas PE's.. otra cosa es que ese .exe no se muestra en la lista de procesos, (por ser el mismo kernel, calculo..) Se podra inyectar? >:D Título: Re: Algunas dudas sobre Drivers... Publicado por: Eternal Idol en 11 Noviembre 2013, 02:03 am ¿Inyectar? ¿Que? ¿Codigo? Si, aunque en versiones modernas esta el PatchGuard (http://en.wikipedia.org/wiki/Kernel_Patch_Protection).
Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 11 Noviembre 2013, 02:45 am Por lo que leo en la wiki, parece mas un problema que una solución :rolleyes:
y solo en 64bits, en fin.. supongo que debe haber formas de saltarse eso.. cuando me complique ese asunto lo estudio mejor, esta bueno saberlo... Por el momento, me queda mucho por aprender de las tablas, estructuras, y funciones para dar los primeros pasos con los drivers.. Otra cosa que no me queda claro son las funciones tipo Zw* y Nt*, esas funciones salen de otros drivers, no? Digamos, son exportadas por otros drivers? (Ahora no tengo el PE Explorer para fijarme), ya leí la wiki, pero no es muy clara, al parecer no existe mayor diferencia entre unas y otras,, ( Zw y Nt ) Editado: Citar Nt or Zw are system calls declared in ntdll.dll and ntoskrnl.exe. When called from ntdll.dll in user mode, these groups are almost exactly the same; they trap into kernel mode and call the equivalent function in ntoskrnl.exe via the SSDT. When calling the functions directly in ntoskrnl.exe (only possible in kernel mode), the Zw variants ensure kernel mode, whereas the Nt variants do not.[3] The Zw prefix does not stand for anything. Antes no me habia quedado claro, ahora si.. Listo!Título: Re: Algunas dudas sobre Drivers... Publicado por: Eternal Idol en 11 Noviembre 2013, 10:39 am Por lo que leo en la wiki, parece mas un problema que una solución :rolleyes: y solo en 64bits, en fin.. supongo que debe haber formas de saltarse eso.. cuando me complique ese asunto lo estudio mejor, esta bueno saberlo... Un problema sera para los que hacen malware, practicamente (por no decir todo) se puede hacer con callbacks y drivers de tipo filtro asi que no hay necesidad real de hooks. Otra cosa que no me queda claro son las funciones tipo Zw* y Nt*, esas funciones salen de otros drivers, no? Digamos, son exportadas por otros drivers? (Ahora no tengo el PE Explorer para fijarme), ya leí la wiki, pero no es muy clara, al parecer no existe mayor diferencia entre unas y otras,, ( Zw y Nt ) Son del propio Kernel y si hay una diferencia importante, cuando llamas desde modo Kernel tenes que usar Zw (en modo Usuario una es alias de la otra, tienen la misma direccion). http://www.osronline.com/article.cfm?id=257 Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 11 Noviembre 2013, 17:32 pm Citar cuando llamas desde modo Kernel tenes que usar Zw (en modo Usuario una es alias de la otra, tienen la misma direccion). Okk! Esto se empieza a aclara :P Una ultima cosa, y sigo estudiando.. por la vuelta he visto este tipo de funciones: Citar ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformationAddress = NULL; status = ((ZWQUERYSYSTEMINFORMATION)(ZwQuerySystemInformationAddress)) ( SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength ); Título: Re: Algunas dudas sobre Drivers... Publicado por: Eternal Idol en 11 Noviembre 2013, 17:47 pm Okk! Esto se empieza a aclara :P Una ultima cosa, y sigo estudiando.. por la vuelta he visto este tipo de funciones:Por que va entre parentesis? No se usa igual que las funciones en modo usuario.. :silbar: ¿Es o no es codigo basura ese? Te recomiendo otra vez aprender con el WDK. Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 11 Noviembre 2013, 18:23 pm Citar ¿Es o no es codigo basura ese? Por que codigo basura?Bueno, si Eternal.. creo que ahora puedo empezar con WDK. Convengamos que el WDK no tiene nada de teoría, es como ir a la guerra con un palito.. Saludos! Título: Re: Algunas dudas sobre Drivers... Publicado por: Eternal Idol en 11 Noviembre 2013, 18:28 pm Por que codigo basura? Es muy sencillo: ¿De donde salio? Bueno, si Eternal.. creo que ahora puedo empezar con WDK. Convengamos que el WDK no tiene nada de teoría, es como ir a la guerra con un palito.. No, el WDK tiene la mayor referencia que existe ... tal vez no la hayas encontrado ... ademas en los ejemplos hay varios misiles pero bueno ... Título: Re: Algunas dudas sobre Drivers... Publicado por: x64core en 11 Noviembre 2013, 18:34 pm El ntosknrl y el hal son cargados durante el proceso de carga del S.O., luego este carga todos los demas drivers y procesos del sistema.
Okk! Esto se empieza a aclara :P Si es una funcion de hook para NtQuerySystemInformation, Se pasa a la funcion original los parametros que son pasados al hook de esta manera Una ultima cosa, y sigo estudiando.. por la vuelta he visto este tipo de funciones:Por que va entre parentesis? No se usa igual que las funciones en modo usuario.. :silbar: se intercepta el resultado, aunque no hay ninguna necesidad de hacer un casting del puntero a la función si la variable ya es declarada como tal. Por cierto: @EI: No seria usar las Nt's desde modo kernel: Zw: Código: kd> u nt!ZwCreateFile L6 Nt: Código: kd> u nt!NtCreateFile L25 Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 11 Noviembre 2013, 18:49 pm Citar Es muy sencillo: ¿De donde salio? Haa,, si.. seguro es sencillo, no entendia por que usaba asi a la funcion..Citar Si es una funcion de hook para NtQuerySystemInformation, Se pasa a la funcion original los parametros que son pasados al hook Exactamente Lo que hace, que me maree era esto: Citar un casting del puntero a la función si la variable ya es declarada como tal Citar No seria usar las Nt's desde modo kernel: Tengo que aprender a usar Windbg urgente.. :silbar:Título: Re: Algunas dudas sobre Drivers... Publicado por: Eternal Idol en 11 Noviembre 2013, 18:53 pm El ntosknrl y el hal son cargados durante el proceso de carga del S.O., luego este carga todos los demas drivers y procesos del sistema. Si, el loader se encarga de cargar todos los boot drivers. Por cierto: @EI: No seria usar las Nt's desde modo kernel: No, Zw, lee el articulo que deje antes. Haa,, si.. seguro es sencillo, no entendia por que usaba asi a la funcion.. No se, deberia ser MUY sencillo decir de donde lo sacaste ... salvo que no lo quieras decir ... Y no hay razon para llamar de esa manera, es basura simplemente. Título: Re: Algunas dudas sobre Drivers... Publicado por: Vaagish en 11 Noviembre 2013, 18:58 pm Na, por que voy a tener problemas en decir de donde lo saque?
Esta claro que no lo hice yo.. de ser asi, no estaria preguntando tanto.. lo saque de un rootkit, te paso el autor, esta su firma en el codigo.. Agony rootkit by Intox Yo intento aprender EI, nada mas.. Saludos! Título: Re: Algunas dudas sobre Drivers... Publicado por: Eternal Idol en 11 Noviembre 2013, 19:01 pm En fin, era codigo basura como sospechaba. Esa manera de aprender te lleva a entender poco y nada, como esperar todos los IRPs de todos los stacks de todos los DEVICE_OBJECT pasen por un solo Dispatch ... podes optar entre codigo basura o el WDK.
|