lunes, 24 de diciembre de 2007

Reflection en .NET Framework

CHenry [chenry@hha.sld.cu]

Una gran importancia reporta la característica de .Net en su capacidad para descubrir información de “tipo” en tiempo de ejecución. De forma segura se puede usar el espacio de nombres “reflection” para poder ver en tiempo de ejecución la información de “tipo” que contienen los ensamblados, de esta forma se pueden enlazar con objetos o incluso una herramienta sumamente potente la cual es la posibilidad para generar código en tiempo de ejecución. Esta tecnología es una extensión de la tecnología COM la cual podría ser abordada en otro articulo(Es sumamente interesante su arquitectura e incluso los disímiles usos que nos puede brindar).

En ocasiones se nos plantean determinadas situaciones en que nos urge utilizar un objeto sin llegar a comprender realmente lo que realiza este objeto. El namespace reflection(a partir de ahora nos referiremos a el como Reflexión) nos permite obtener determinada información de un objeto y con esta poder conocer sus propiedades, métodos, constructores, eventos y variables. De forma directa podemos usar la clase System.Type (por su importancia en el uso de la reflexión veremos un barniz de la clase Type) para examinar el ensamblado y de esta forma poder usar métodos como GetMethods () y GetProperties () que devuelven información del ensamblado en cuestión. Esta información es sumamente interesante ya que permite desde llamar el método MethodsInfo (), el cual nos devuelve una lista de parámetros, hasta ejecutar (llamar) a métodos en el ensamblado a través del método Invoke ().

SYSTEM.TYPE
Esta clase abstracta actúa como un portal para la API de reflexión lo que permite el acceso a los metadatos, esta clase representa un tipo del “Sistema completo de tipos”(CTS). Este sistema nos permite examinar objetos de todos los lenguajes de la familia .NET. De esta forma todos los objetos usan el mismo entorno en tiempo de ejecución y sistema de tipos facilitando esto la obtención de información del objeto y del tipo.

Nota: Una de las características más interesantes del Type es su capacidad para crear objetos dinámicamente y usarlos en tiempo de ejecución.

Obtener la información de tipo.
Ahora veremos tres formas de obtener la información de tipo de un objeto:
1. Usando un nombre de tipo.
2. Usando un nombre de proceso.
3. Especificando un nombre de ensamblado.
Todas estas variante por detrás de esta capa de abstracción realizan las mismas tareas es decisión del programador el uso de una o de otra en dependencia de su aplicación, aquí les van.

Recuperación de tipos por el nombre

Con solo especificar el nombre del tipo se puede consultar casi todos los aspectos del objeto. Se puede extraer información de la detallada como si es una clase, el tipo de su sistema base y otras propiedades (Ver MSDN).
Como ejemplo de este métodos creamos una sencilla aplicación C# consola que nos permita ver algunas propiedades de la clase System.String.

Código #1 como listar información mediante el nombre

using System;
using System.Reflection;

class ExtractNameType
{
  public static void Main()
  {
     Type t = Type.GetType("System.String");
     Console.WriteLine("Name: {0}",t.Name);
     Console.WriteLine("Underlying System Type: {0}",t.UnderlyingSystemType);
     Console.WriteLine("Is Class: {0}",t.IsClass);
  }
}

Al correr esta aplicación nos muestra que System.String es el tipo de sistema base, y que este objeto es una clase.
Ahora se preguntara para Ost… nos sirve esto bueno al parecer no es mucho ? pero bien pongamos un ejemplo imagine que esta creando una aplicación que necesita generar instrucciones “insert” para introducir información en SQL Server. Escribir una gran cantidad de información requiere gran cantidad de tiempo, pero si se usa Reflexión y la clase Type se pudiera examinar el tipo subyacente de cada fragmento de información que quiera insertar en SQL Server y poder describir esos tipos a un tipo de datos SQL Server valido, lo que simplificaría mucho el proceso de generar mediante programación las instrucciones “insert”.

Recuperación de tipos mediante instancias

En este caso en vez de usar el nombre de tipo se usa una instancia de este para conseguir la información.

Código # 2 Por instancia

using System;
using System.Reflection;

class ExtractNameType
{
  public static void Main()
  {
     String obj = "Carlos Henry";
     Type t = obj.GetType();
     Console.WriteLine("Name: {0}",t.Name);
     Console.WriteLine("Underlying System Type: {0}",t.UnderlyingSystemType);
     Console.WriteLine("Is Class: {0}",t.IsClass);
  }
}

En esta aplicación se crea una instancia de de la clase String con el nombre obj a la cual posteriormente se le llama al método Gettype() , la información obtenida por esta vía el la misma que la que se obtuvo en Código #1.

Recuperación de tipos en un ensamblado

Y ahora la variante mas interesante, esta se encarga incluso de recuperar información de un objeto ya ensamblado ya este dentro de un ejecutable (.exe) o una biblioteca de vínculos dinámicos (.dll), en el código siguiente les mostraremos como obtener información acerca de nuestra propia aplicación.

Código # 3 Recuperar información de nuestra aplicación.

using System;
using System.Reflection;
using System.Diagnostics;

class AssemblyType
{
  public static void Main(string [] args)
  {
     Process p = new Process.GetCurrentProcess();
     string name= p.ProcessName + ".exe";
     Console.WriteLine("Looking: {0}",name);
     Assembly a = new Assembly.LoadFrom(name);
     Type [] types = a.GetTypes();
     foreach(Type t in types)
     {
        Console.WriteLine("Type: {0}\n",t.FullName);
        Console.WriteLine("/t Base Class: {0}",t.BaseType.FullName);
     }
  }
}

En el código anterior se muestran algunos elementos nuevos, el tipo Process se usa para echarle una ojeada a los procesos que se están ejecutando. En esta aplicación lo utilizamos para obtener el nombre de nuestra aplicación y luego agregamos .exe al final del nombre para que se pueda examinar el ensamblado. Esto lo hacemos para que este aplicación funcione independiente del nombre que le pongamos al escribirla. Al correr esta aplicación no se nos brinda mucha información ya que la misma solo tiene una le rogamos que juegue un poco con este código probando cosas como otros métodos en la clase Type así como el tipo Process que se les presento en este código también.

Hasta aquí un pequeño background de este tema por falta de tiempo no puedo ponerles un ejemplo mas detallado pero prometo escribir algo de código en un próximo articulo y quizás algo de cómo Generar código dinámicamente mediante Reflexion.

Nota: Las aplicaciones que por su estructuración y funcionalidad tengan que programarse de forma tal que deban ser upgradeadas en tiempo de ejecución, ejemplo aplicaciones a las que se le pueden agregar Plugins pueden implementar este sistema usando Reflexion.

Continuar leyendo

Más sobre virus

Asran [Asran@isppr.rimed.cu]

Bien amigos como todos sabemos no es muy difícil infectarse con algún código maligno y esa serie de creaciones no beneficiosas que circulan en medios de almacenamiento extraíble como la Memorias, los discos y todo aparato que se conecte por USB. No es menos importante el riesgo que corremos con una conexión real a la red aunque sea LAN pero el tema que quiero introducirles hoy es el de cierto virus que anda por ahí muy molesto que todo los conocen como Autorun.exe

Sin más rodeos ...

Tú mismo puedes contener la infección con este circulante que es el Autorun.exe. Bueno tomando como punto de partida los artículos publicados por el camarada Alien sobre el editor de registros de Windows [Regedit.exe] asumo que no sea necesaria una introducción al tema.

Primero tenemos que estudiar al enemigo

Bueno, sabemos como se llama y trabaja de la siguiente forma.
En la fase de infección se copia al disco mediante un mecanismo basado en ficheros .ini que cuando toman el nombre especial de autorun el sistema los levanta una vez que se hace una llamada al volumen que lo contiene. De esta forma realiza su ejecución y una vez cargado en memoria se autocopia para el volumen que almacena el arranque de Windows. Luego procede a la infección de los demás volúmenes. [Volumen: división no menor de 32 Mb de un medio de almacenamiento que se identifica con una letra]

Aquí te muestro una forma de poner el parche antes del hueco (bueno en eso de poner huecos no hay quien le gane a Microsoft de no ser así yo no hubiese escrito esto y tu no estuvieras leyendo)
El caso es que existe una clave que nos permite deshabilitar la opción de autorun de las unidades o volúmenes

Situándonos en la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer encontraremos esto

Nombre Tipo Dato
_____________________________________________________________
NoDriveTypeAutorun REG_DWord 0x00000005

Pero tiende a ponerse bueno, a continuación se listan los posibles valores admisibles y el efecto que pueden causar en el sistema

Nombre Tipo Dato
____________________________________________________________
NoDriveTypeAutorun REG_DWord 0x00000000091 --------> Deshabilita el autorun para unidades de red

NoDriveTypeAutorun REG_DWord 0x00000000095 --------> Deshabilita el autorun para unidades de red y medios extraibles

NoDriveTypeAutorun REG_DWord 0x000000000B5 --------> Deshabilita el autorun para unidades de red, medios extraíbles y CD.

Bueno tomando como base lo expuesto por Alien en sus artículos sobre el editor de registros de Windows [Regedit.exe].
Y con conocimientos básicos de programación encontraremos que no es cosa difícil vacunarnos contra el Autorun.exe y demás programas que se ejecutan sin autorización.
El usuario puede protegerse de forma manual o automatizar el proceso (seria lo ideal) mediante una aplicación. Bueno lo de la automatización de esta tarea puede plantearse como un problema para programadores level 3 de la comunidad. Lo que en realidad se necesita es que quien lo haga, lo comparta para mejorarlo o para que los demás aprendan

Continuar leyendo

La tarjeta de red

Lic. Zeidy López Collazo [ilinur@infomed.sld.cu]

La tarjeta de red es un dispositivo de interfáz que se encarga de establecer todas las señales de sincronización y control, así como los niveles de las mismas para la transmisión de información entre computadoras a través de cables. Se conecta a una computadora y permite junto con el sistema operativo el flujo de información a través de la red.

Los tipos más comunes son ISA o PCI, dependiendo de la arquitectura de la tarjeta madre (motherboard) de la computadora.

Reseña histórica de las redes.
1969: Surge la primera red experimental ARPANET (Advanced Research Proyects Agency) que en sus inicios conectaba la universidad de California en Santa Bárbara y en los Ángeles, la de UTA, en Salt Lake City y al Universidad de Stanford.
1969: Es creada por Ken Thompson la primera versión del UNIX, sistema operativo que ha jugado un papel importante en la comunicación entre computadoras.
1973: El ARPANET desborda la fronteras de los EE.UU al establecer conexiones internacionales con la “University College of London” de Inglaterra y el “Royal Radar Establishment en Noruega.
Década del 70: Es desarrollado los protocolos TCP/IP por Vinton G. Cerf, Robert E. Kahn, y un grupo de sus estudiantes.
1982: Los protocolos TCP/IP son adoptados como estándar para todas las computadoras conectadas a ARPANET, lo que hizo posible el surgimiento de una red universal de computadoras que existe en la actualidad bajo el nombre de Internet.
Década del 80: Dicha red fue creciendo y desarrollándose debido a que con el paso del tiempo cientos y miles de escuelas, universidades, centros de investigación y agencias del gobierno fueron conectando sus computadoras a la red.

Redes de área amplia: esta parte examina los mecanismos internos y la tecnología que se han desarrollado para admitir voz, datos y comunicaciones multimedia en redes que cubren grandes distancias. Se examinan las tecnologías tradicionales de conmutaci6n de paquetes y conmutación de circuitos, así como la más reciente de ATM. Un capitulo independiente se dedica a los temas de control de congestión.

Redes de área local: esta parte explora las tecnologías y arquitecturas que se han desarrollado para interconexión de redes en distancias mas cortas. Se analizan los medios de transmisión, las topologías y protocolos de control de acceso a un medio, que son los ingredientes clave del diseño LAN, y se estudian sistemas específicos LAN normalizados.

Protocolos de red: esta parte explora tanto los principios arquitectónicos como los mecanismos requeridos para el intercambio de datos entre computadores, estaciones de trabajo, servidores y otros sistemas de procesamiento de datos. Gran parte del material de esta sección se refiere a un conjunto de protocolos TCP/IP.

¿Qué es INTERNET?

Internet no es una única red de ordenadores, sino que es un conjunto de 25000 redes interconectadas que se comunican entre ellas con un mismo protocolo o lenguaje, denominado TCP/IP.

Servicios de Internet:

Conexión Interactiva (Chat).
Grupos de Discusión.
Telnet.
World Wide Web.
Correo electrónico (E-mail).
Transferencia de archivos (FTP).

Ventajas del trabajo en red.

Compartir recursos tales como discos duros, módems, lectores de CD-ROM, impresoras, etc.
Compartir aplicaciones e informaciones que pueden instalarse en una computadora y utilizarse por las restantes en la red.
Trabajar de forma colectiva al poder elaborar documentos, tablas, etc., de forma conjunta.

Vinculación con el Módem

Módem: Modulador-Demodulador, dispositivo hardware que transforma las señales digitales del ordenador en señal telefónica analógica y viceversa.

El módem está muy vinculado con el ordenador y con la tarjeta de red, ya que permite la conexión de uno a varios ordenadores a través de una línea telefónica.
Mediante él podemos acceder a Internet, páginas Web, Chat, entre otras muchas.

Continuar leyendo

Microsoft Student

Alien [backhat4all@gmail.com]

Para algunos que ya la conocen representa un producto más de la casa de Bill. Para otros, que quizás ni han oído de ella pudiera ser un programa más. Para mí, es un gran paso de avance que supera por mucho a la legendaria Encarta.

Tengo el placer de tener amistades que de buen corazón depositaron en mis manos desde hace algunas semanas un DVD que entre otras cosas contenía un programa denominado Microsoft Student. Como todo buen apasionado de la informática no tardé en instalar dicho software en mi PC, no para buscar, no para aprender, sino para ver que nueva locura se le había ocurrido a Bill Gates.

Después de copiar los 2.42 Gb de datos hacia mi ordenador, me acomodé para disfrutar de los “Next, Next” que sin cesar aparecían en mi pantalla. (Aproveché para encender un cigarro mientras se reiniciaba).

Pensé encontrarme con el clásico logotipo de Encarta en algún lugar del menú inicio, pero mi sorpresa fue ver que en su lugar estaba un icono con forma de mochila escolar.

¿Qué es?

Pantalla de presentación de Microsoft Student.

Student, de Microsoft, es un software diseñado para ayudar –y de que manera- a los estudiantes a realizar sus trabajos escolares. Es lo más parecido a “Mi primera Encarta” (También de Microsoft), pero enfocados a grados más altos, quizás no llega a los universitarios, pero si reemplaza las imágenes un tanto infantiles de Mi primera Encarta por representaciones visuales mucho más serias.

Dentro de Student viene incluida la nueva versión de Mi primera Encarta, la cual no ha cambiado en casi nada, mantiene el mismo diseño y contenido que en las pasadas ediciones. También está la Encarta del 2008, la cual, con sus pro y sus contra es básicamente la misma; una actualización por aquí, un cambio de palabras por allá, dos o tres cifras que se añaden y quizás alguna fuente corregida, pero fuera de eso, sigue siendo Encarta 2007, la cual por cierto cedió su presentación a Studen, conservando ella solamente la barra de búsqueda.

Student, en cambio, aunque no brinda a los usuarios los cerca de 45.000 artículos que aparecen en Encarta, si da la posibilidad a los estudiantes de aprender a realizar sus trabajos de forma individual y sobre todo, de forma correcta. Y pregunto, Si tenemos Wikipedia, Google y el WoS, ¿Es tan importante reemplazar Encarta 2007 por la del 2008? (dejemos eso para otro día…)

Microsoft Student nos trae una calculadora que realmente hace casi todo lo que queramos y para no dejarnos con la duda sobre si una función pasa o no por un punto determinado, es capaz de graficar la misma, ofreciéndonos varias herramientas sencillas con las que podemos obtener información de la gráfica.

Dejando a un lado ya las cosas visuales y pasando más a lo que se refiere a consumo de recursos, no me acabo de explicar cómo una aplicación que contiene más información y un mayor gráfico que su predecesora, es capaz de abarcar casi el mismo tamaño y consumir menos de nuestro sistema.

Otro punto a favor de Student es que no contiene (o son muy pocos) los vínculos hacia Internet. Desde hace un tiempo Encarta ha venido presentando muchas referencias, lo que hace que el contenido, aunque tenga muchas direcciones en las cuales profundizar sobre el tema, se muestre escaso de información para quien no tiene acceso a la red.

Student por el contrario, presenta un contenido que por lo general no necesita de mayores búsquedas en la red. Es una enciclopedia más autónoma que se basta a sí misma para hacer llegar la información y de una forma excelente.

Continuar leyendo

Delito Informático

Alien [blackhat4all@gmail.com]

Este título me viene dando vueltas en la cabeza desde hace varios días, y es que resulta ser que mientras me documentaba para escribir uno de los pasados textos, encontré por casualidad en la red cubana un pasaje que me llamó la atención.

Primero lo primero

El delito informático, aunque no es nada nuevo, tampoco es algo que se viene escuchando desde los tiempos de la colonia. Fue después, mucho después de la aparición de las computadoras y su uso para cometer fraude o engaño en cualquiera de sus variantes, que se empezó a utilizar este término como algo normal. En los inicios solo existía la palabra delito, la cual es catalogada por wikipedia como:

“…una conducta típica (tipificada por la ley), antijurídica (contraria a Derecho) y culpable. Supone una conducta infraccional del Derecho penal, es decir, una acción u omisión tipificada y penada por la ley.”

Esta misma palabra es referida por el diccionario de la real academia como: “Culpa, quebrantamiento de la ley. || 2. Acción o cosa reprobable. || 3. Der. Acción u omisión voluntaria o imprudente penada por la ley.”, bla, bla, bla.

En fin, que no hay que ir muy lejos ni saber mucho para conocer que el delito no es más que todo aquello que ha sido estipulado como tal y por lo tanto conlleva a una pena, castigo o sanción.

Con el paso del tiempo al término delito se le han ido añadiendo algunos adjetivos y uno de ellos es la palabra informáticos.

Informática, informático, da igual, actualmente casi todo lo que se deriva de esta palabra está relacionado con un ordenador. Y es que la informática juega un papel tan importante en la vida actual que es aplicable no solo al derecho, sino a muchas otras esferas.

En Cuba este término no se maneja mucho, al menos por la población. Se puede escuchar de un robo, de una riña, de un escándalo, pero muy pocas veces (no me gusta ser absoluto) se escuchará de alguien que ha logrado irrumpir la seguridad de un servidor, o echar abajo un mainframe, aunque se sabe, por el boca a boca, que esto ha sucedido.

Por esta razón, desde hace algún tiempo, se vienen implementando una seria de normas, leyes, métodos o como se les quiera llamar, para detener o al menos minimizar estas acciones. Al frente de este movimiento no se encuentran personas recién graduadas de escuelas informáticas, o personal autorizado en sus centros de trabajo para pasar un curso “intensivo” de “6 meses” y sentarse luego frente a un servidor a monitorear la red, sino personal calificado, probados y de basta experiencia en temas relacionados con la informática y el aspecto jurídico.

Se han ido dictando leyes poco a poco que regulan el comportamiento en la red, pero cuidado, porque no es lo mismo…

 

Un metro de encaje negro...

Por todos es sabido que la informática tiene un campo inmenso, su área de acción abarca casi todas las ramas del saber, haciendo posible que los delitos cometidos sean diversos, lo que convierte en casi imposible la tarea de catalogarlos todos de forma justa.

Antes de escribir esto, como es lógico, investigué, navegué, y bajé de la red nacional varias páginas que hablaban sobre el tema. Ciertos documentos por mi leídos enfocan los delitos informáticos de forma casi perfecta (desde mi punto de vista), sin embargo bastante inexactos, otros, tratando de ser lo más específicos posibles, toman como delito informático todo lo que se hace desde una computadora o en lo que se utiliza tal instrumento para lograr el fin propuesto por el malhechor.

Mis conocimientos de derecho son los mismos que los de cosmonauta, así que no tengo las más mínima idea de los pasos que se llevan a cabo para catalogar a un hecho como delito o no, pero si pienso que hay que hacer una marcada diferencia entre utilizar un ordenador para conectarse a un servidor y robar información del mismo, y graficar en una computadora los pasos que dará una banda de asaltantes para penetrar un banco.

En ambos casos se utiliza una PC, sin embargo en el primero se hace un uso casi total del mismo a todo lo largo de la infracción, y en el segundo, el medio sirve como herramienta opcional para acometer el acto. Por lo tanto EN MI OPINIÓN, no es lo mismo.

Tomando como base el concepto de delito, podrían enmarcar como delito informático todo lo que la ley tiene estipulado ya como delito y que a la vez se puede hacer de forma virtual. De esa forma, robar, falsificar, timar y otras cosas por el estilo en las que se use un ordenador podrían quedar plasmadas como delito informático, quedando fuera otras como el homicidio. (Aunque la yugular de la víctima haya sido atravesada por una memoria RAM).

¿Sería Ilegal el acceso sin autorización a un servidor?

Si de mi dependiera, NO!
Un servidor es una computadora conectada a la red y cuya misión es precisamente dejar que otras personas accedan a el, pudiendo ser para subir/bajar archivos, leer información, brindar servicio de correo, de chat, conferencia…

Tomando esto como base, siempre y cuando en los pasos previos no se haya incurrido en un delito, no es para nada ilegal que alguien sin autorización penetre al sistema, puesto que una de las tareas que realiza, o debe realizar un administrador de sistemas, es asegurar el servidor que administra.

Un ejemplo que para mí visualiza lo anterior lo pongo a continuación:
En una casa se suela dar fiestas todos los días y a toda hora, pero para entrar a dicha fiesta es necesario tener una reservación. Un persona compra uno de estos ticket con días de antelación y en el establecimiento destinado para eso, horas antes de su turno, decide que ya no quiere acudir, por lo que hace un traspaso de su entrada a otra persona (no tiene que ser obligatoriamente un conocido). Una vez que el nuevo poseedor de la entrada está dentro de la fiesta, quien vendió las reservaciones se da cuenta que ninguna de las entradas fue suministrada a esta persona e intenta sacarlo de la actividad.

¿Quién tiene la culpa?
¿El que vendió la entrada porque ya no la requiere y cede la posibilidad a otro de disfrutar de la actividad?
¿El que no pudo adquirirla desde un inicio y por suerte para él ve la posibilidad de entrar gracias a el favor del anterior?

En estos casos la solución es una pregunta: si ya se ha reservado un espacio para alguien, si ya el bufete ha sido guardado para alguien, si se ha separado una silla para alguien. ¿es tan importante el nombre de quien en ella se siente?

Visto desde el punto de vista informático, quien cumple la función de portero es el administrados, que es en definitiva quien tiene potestad para decidir quien, como, por donde y cuando entra cada persona. Alguien que tenga bajo su poder un ordenador es libre de conectarse de la forma que quiera, si decide que antes de acceder quiere ejecutar el bloc de notas y al hacerlo adquiere privilegios administrativos dada una mala configuración del server, ¿es su culpa acaso?.Un bug, hueco, agujero o defecto en la seguridad del sistema, no es responsabilidad del usuario, sino de quien dejó esa “puerta” abierta.

En este sentido el sistema penal de Colombia no considera el hacking como delito, puesto que lo único que se hace por parte del usuario es buscar vías mejores para acceder sin perjudicar o causar daños. La acción se transforma en delito, si una vez dentro del sistema, el usuario toma la información que tiene delante para modificar, cambiar, eliminar, robar …

Conclusiones

Si han llegado hasta aquí, entonces me gustaría decirles que esto que acaban de leer no son para nada las leyes cubanas. Como dije en un inicio, Cuba se encuentra en estos momentos creando sus mecanismos para enfrentar de forma correcta estas acciones y saber juzgar con justicia que es un delito informático y que no lo es.

Continuar leyendo

Escalada de privilegios (sethc)

BitXor [bitxor_nx@yahoo.com]

Tal como les prometía en la pasada edición, hoy les llega otro artículo sobre escaladas de privilegios en Windows. La semana pasada estuvimos hablando sobre escaladas al usuario SYSTEM en la versión XP del SO de Microsoft, que si era muy útil para ser explotada por un programador al implementarla a sus creaciones, no resultaba tan funcional para el usuario carente de todo privilegio. Lamentablemente para lograr una escalada con el programa AT de Windows se requiere de ciertos privilegios previos, al menos los suficientes para que el comando no nos retorne un desagradable mensaje de "Acceso denegado".

Afortunadamente la práctica a la que hoy haremos referencia nos librará de estos problemas, y si se logran seguir las instrucciones al pie de la letra al final del día nos habremos hecho de una ostentosa cuenta con privilegios administrativos.

[Reconociendo el problema]

¿Cuántas veces has estado distraído con un juego a pantalla completa y has presionado la tecla SHIFT repetidamente? Aquellos a los que les ha sucedido alguna vez recordarán la irritante sensación que experimentaron en ese momento hacia la molesta ventanita StickyKeys que se activa en Windows XP cuando un usuario presiona SHIFT cinco veces. Hoy (y probablemente por primera vez desde que instalaste XP) vamos a sacarle provecho a esa molesta aplicación que viene por defecto instalada en nuestro sistema.

Para aquellos despistados que aun no tengan una idea bien clara de lo que se está hablando vamos a proceder con un experimento de laboratorio. Para llevar a cabo esta tarea no se requieren conocimientos de C o ensamblador, tan solo presiona la tecla SHIFT repetidamente cinco veces. ¿No pasa nada?, si ya se, es posible, me pasó a mi justo escribiendo este artículo ¿y ahora qué diablos le sucede al Shift de mi teclado? No, el Shift está bien el problema es otro ¿has abierto algún juego a pantalla completa desde que iniciaste sesión? Algunos juegos para evitar el contratiempo que mencionaba justo al inicio deshabilitan la ayuda de accesibilidad de Windows temporalmente y luego olvidan rehabilitarla. Para solucionar el problema cierra la sesión actual y vuelve a entrar normalmente. Irresponsables programadores de RockStar, me sucedió a mí con Grand Theft Auto-Vice City. Solucionados los problemas proseguimos a disfrutar de nuestra aplicación de configuración de accesibilidad. Ahora si, cinco veces Shift y luego de un pitido curioso obtenemos una ventana modal con nombre StickyKeys. Un vistazo general nos llevará al administrador de tareas y desde allí no nos será difícil descubrir el nombre del proceso responsable de la ventana, se trata de "sethc.exe". Hasta ahora nada fuera de lo común, considerando que el proceso se está ejecutando con los permisos del usuario actual.

Próximo experimentos: cierra sesión nuevamente (!¿otra vez?!) y justo frente al diálogo de inserción de contraseña presiona Shift repetidamente. Mmm... cosa curiosa, a pesar de no estar logeado en el sistema Windows me ha permitido ejecutar el proceso sethc. A menos que quieras ponerte a configurar el StickyKeys desde afuera del sistema vuelve a logearte con tu usuario. Parece que hemos encontrado algo interesante en nuestro sistema a lo que le podremos sacar partido. A continuación la parte interesante (ya era hora!). Los más despiertos se estarán preguntando ¿Cómo es posible que Windows nos haya permitido ejecutar un proceso fuera del espacio de cualquier usuario?, ¿Con qué permisos se ha ejecutado el proceso sethc.exe?

[Haciéndole culto al StickyKeys]

Hora de sacarle partido a las vulnerabilidades de Windows. ¿Qué les parece si para empezar sustituimos sethc.exe por algo más interesante, cmd.exe, por ejemplo? Entre los lectores a priori puedo distinguir dos grupos bien definidos, los endemoniadamente suertudos y los tristemente desafortunados. La principal diferencia está en que los primeros no tendrán que pasar mucho trabajo para lograr explotar este bug, los segundos sin embargo necesitarán trabajar un poco más para conseguir su objetivo, de cualquier forma el resultado podría ser dos veces más gratificante, el placer es directamente proporcional al dolor requerido para obtenerlo. Olvidaba decirte que estoy asumiendo que estás probando tu suerte sentado en la PC que quieres acceder, no en tu casa frente a BlackHat. De cualquier modo se supone que estás realizando el trabajo con una cuenta con pocos privilegios. Dirígete con el explorador a la carpeta System32 del sistema y una vez allí intenta crear un nuevo documento de texto. Un mensaje de acceso denegado significa toda la diferencia entre uno y otro grupo.

Si no has tenido permiso de escritura en System32 deberás leer la próxima sección de este artículo, suponiendo que tengas permiso de escritura en la susodicha carpeta lo que haremos será sustituir el archivo sethc.exe por una copia de cmd.exe. Tendrá que hacer el cambio lo más rápido posible, ya que si Windows encuentra que le falta un archivo registrado en System32 lo recreará. Particularmente yo prefiero proceder en este paso con un fichero batch. Primeramente abre el nuevo documento de texto que acabamos de crear y en él escribe:

copy %SystemRoot%\System32\sethc.exe %SystemRoot%\System32\sethc_copy.exe
del %SystemRoot%\System32\sethc.exe
copy %SystemRoot%\System32\cmd.exe %SystemRoot%\System32\sethc.exe

Guarda los cambios, renombra el archivo como batchexploit.bat y ejecútalo. Solo para comprobar que todo marcha bien presiona Shift cinco veces y deberá mostrarse una consola del sistema en lugar del StickyKeys. El terreno está preparado, cierra sesión, ojo con esto, he dicho CERRAR sesión, NO bloquear el equipo con Win+L. Desde la pantalla de login presiona la tecla mágica repetidamente y aparecerá nuestra privilegiada consola.

¿Qué podemos hacer en este punto?
Para empezar agreguemos un nuevo usuario. Teclea el siguiente comando:

net user servant pass123 /add

Con esto estaremos creando un nuevo usuario llamado "servant" con password "pass123". Solo nos falta agregarlo al grupo de administradores

net localgroup Administradores servant /add

Te cuidado a la hora de agregar el usuario al grupo Administradores, sucede que si el SO está en inglés el grupo no se llamará Administradores sino Administrators. Para finalizar cierra la consola y entra al sistema con la cuenta que acabas de crear. Ya eres dueño de esa PC. Quizás hubieras preferido simplemente agregar tu viejo usuario al grupo de administradores en vez de crearte uno nuevo. De cualquier forma yo te aconsejo que al terminar de hacer lo que quieras dejes todo como mismo estaba. Para eliminar un usuario desde la consola usa

net user servant /del

Y para solo eliminarlo del grupo de administradores:

net localgroup Administradores servant /del

[Para los desafortunados]

Aquellos tristes mortales a los que System32 no les dio permiso de escritura no deben preocuparse. Existe más de un medio por el cual podría hacerse el cambio de archivos. Particularmente yo cuando me veo en este tipo de apuros siempre recurro a mi querido Knoppix Live CD. Para los que no estén al tanto, Knoppix es un sistema Linux que viene en live CD y nos permite levantar todo el sistema desde la torre de CD, dando acceso incluso al sistema de directorios. Solo insertas el CD, reinicias la máquina y haces un boot por la torre de disco. Una vez tengas Knoppix corriendo desde el escritorio das click derecho al disco duro donde tengas instalado Windows y deshabilitas la opción Read Only. Luego solo navegas hasta la carpeta en cuestión y haces el cambio. No necesitas un script shell para hacerlo, solo borra o renombra sethc.exe, hazle una copia a cmd.exe y renómbrala como sethc.exe. Los que no estén familiarizados con sistemas Linux no se alarmen, ¿es que acaso no han oído hablar de Winternal? Winternal es un live CD de reparación que nos permite levantar Windows desde un CD. Bien puedes hacer los cambios por allí. Hasta aquí solo he mencionado dos soluciones, pero no te limites... existen mil formas más, no olvides nuestro querido CIA Commander, por si no dispones de torre de CD. Incluso podrías simplemente hacerle llegar un archivo batch a un administrador del equipo para que lo ejecute por ti. Si eres programador, mucho más fácil. Crea un pequeño programa que haga el cambio y déjalo en una carpeta visible por todos con un título interesante. En fin, solo usa tu imaginación.
No te voy a mentir, hay máquinas donde se te puede poner el juego difícil. Unas pocas medidas de seguridad podrían ponerte en más aprietos... restricción de acceso al setup, unidades externas de disco deshabilitadas, etc. pero si eres bueno podrás hacer el cambio de archivos.

Continuar leyendo