lunes, 24 de marzo de 2008

Refrigeración de nuestra PC

Yordan [truano@infomed.sld.cu]

Hola amigos, nuestro país es bastante caluroso y como todos deben saber, los equipos electrónicos no son los mejores amigos de calor, las PC no quedan exentas de esta observación, un PC debe estar refrigerado adecuadamente para su correcto funcionamiento, en este articulo voy a ayudarlos a crear un buen sistema de enfriamiento para nuestro PC basándonos en los aditamentos que podemos adquirir en nuestro país.


Generación del calor.

El calor se puede generar de diversas formas, pero en una computadora se reducen básicamente a dos: calor por rozamiento y calor en los semiconductores.

El calor por rozamiento se produce únicamente en los componentes con partes móviles, es decir, en los medios de almacenamiento masivo. De ellos, los discos duros son los que más calor generan. Con la aparición de discos de alta velocidad de giro (7.000 a 10.000 r.p.m.) ha comenzado a ser una necesidad refrigerarlos de alguna manera. También los CD’s (Lectores y Quemadores) generan una buena cantidad de calor, pero éste es debido más al láser que al rozamiento de las partes móviles. En cualquier caso, la temperatura que alcanzan es muy inferior a la de los discos duros, El sobrecalentamiento en los Discos Duros estaría fácilmente resuelto con un fan con disipador para Discos Duros, supongo que los hayan visto en alguna ocasión estuvieron muy de moda hace un tiempo.

Por otra parte, el calor producido en los semiconductores comenzó a hacerse notar con los 486. Estos fueron los primeros microprocesadores en los que se aconsejaba el uso de un disipador y un ventilador que mantuviesen una temperatura adecuada. En los procesadores actuales estos medios de enfriamiento se han vuelto absolutamente imprescindibles, además, de haber incrementado notablemente su potencia refrigeradora. Pero no son los microprocesadores los únicos semiconductores que generan calor. Ya en los XT, los transistores de la fuente de alimentación se calentaban notablemente, y de ahí que las fuentes utilicen un ventilador. También algunas placas como tarjetas de sonido, de vídeo o controladoras SCSI alcanzan elevadas temperaturas, debido a la creciente potencia de sus componentes.

Problemas de un calentamiento excesivo

El funcionamiento de los semiconductores está íntimamente ligado con la temperatura. Cuando ésta se eleva por encima de los límites para los que fueron concebidos, su comportamiento deja de ser estable y los fallos comienzan a sucederse (como por ejemplo cuelgues, errores en dispositivos de hardware y ralentización del funcionamiento del sistema – principalmente por el elevado calor del disco duro y procesador). Si la elevación de temperatura es pequeña, cuando ésta vuelva a sus niveles normales, el semiconductor volverá a funcionar correctamente. Si la elevación es demasiada, el daño será irreversible y el componente se habrá quemado.

Transmisión del calor

El calor no sólo afecta al componente que lo genera, sino a todos los circundantes. Por lo tanto, se hace imprescindible evacuarlo correctamente y, para ello, nada mejor que conocer los mecanismos de transmisión del calor. El calor se transmite por tres mecanismos que siempre aparecen combinados: conducción, convección y radiación. Sin embargo, solo nos interesan los dos primeros.

Conducción

La conducción es el método más directo de transmisión del calor. Se produce cuando dos partes de un cuerpo, o dos cuerpos en contacto directo, se encuentran a distinta temperatura. Entonces el calor pasa de la parte más caliente a la más fría, hasta que se equiparen las temperaturas. Para aumentar la transmisión de calor por conducción se puede aumentar la superficie de contacto entre la parte fría y la caliente, o elevar la diferencia de temperaturas entre estas.

Convección

La transmisión por convección se da en líquidos y gases. Para el caso que nos interesa, en el aire. Se produce por ser menos denso el aire caliente que el frío y, por lo tanto, más ligero. Por ello, el aire caliente tiende a subir, siendo reemplazado por aire frío en las zonas inferiores.

El mecanismo anterior se denomina convección natural, y es valido para evacuar pequeñas cantidades de calor. Para mejorar el rendimiento se suele utilizar la convección forzada, que consiste en acelerar el movimiento natural del aire por medio de un ventilador. Para que el ventilador no se oponga al mecanismo natural de convección, es importante que impulse el aire caliente de abajo hacia arriba, o el aire frío desde arriba hacia abajo como veremos en la siguiente figura.

Consejos

Teniendo en cuenta el fenómeno de convección natural debemos ubicar los dispositivos generadores de calor lo mas arriba posible dentro del Chasis, de esta forma evitamos el calentamiento innecesario de los demás componentes, bastante ayuda también sería tener un chasis lo mas grande posible para garantizar una mayor ventilación, las cintas y demás cables que existen dentro del PC entorpecen la corriente de aire, por lo cual debemos acomodarlas de forma tal que no queden sueltas en medio del camino lógico a seguir por el aire, un buen detalle sería conseguir las nuevas cintas redondas para trasmisión de datos, las cuales ofrecen menos resistencia al aire que circula ventilando nuestro PC, si tu PC tiene un chasis con tobera lateral (tubo plástico que va desde la tapa del chasis hasta el procesador) dicha tobera se destornilla, en su lugar se atornilla un ventilador y sobre este se vuelve a colocar la tobera, a la hora de mejorar el enfriamiento del procesador solo tenemos que tener en cuenta que mientras mayor sean el disipador y el ventilador es mucho mejor el enfriamiento.

Muchas personas prefieren tener el chasis destapado para tratar de ventilar mas el PC, si se tiene el juego de ventiladores para crear una corriente de aire que propicie la convección forzada como lo muestra la figura anterior, es un error tener el chasis abierto, pues la corriente de aire de dispersaría perdiendo su eficacia.
Espero que este artículo les sirva de mucho pues estamos solamente en febrero y ya hay un calor endemoniado, sería prudente crear una situación propicia para que nuestra PC no sufra los embates de nuestro clima tan caluroso.

Continuar leyendo

¡OLED y SED!, nuevas tecnologías de pantallas digitales

Eliux [aorozco@infomed.sld.cu]

Hace tiempo que se anuncia la aparición de una tecnología que va a provocar un cambio gigantesco en el mundo de las pantallas. Fue la motivación de los especialistas el encontrar un producto que resolviera muchos de los puntos débiles que tienen las actuales tecnologías de pantallas, cómo son el ángulo de visión, tiempo de respuesta, brillo, contraste, portabilidad, etc. La tecnología OLED logró cumplir con estos requisitos, y con creces:

¡OLED!

Tal vez algunos haigan oído hablar de él, y que no se confundan con OLE, que es una tecnología de Microsoft creada para Windows que permite insertar objetos creados de una aplicación a otra. Esta es OLED, un titán encadenado desde 1996 que espera su liberación al mercado de los usuarios.

¿OLED?

OLED son las siglas de Oganic Light-Emitting Diode (Diodo orgánico de emisión de luz). Ha sido creado por varias compañías, pero se materializó por primera vez por el Dr. Ching W. Tang en Eastman Kodak Company. OLED se basa en la utilización de un diodo compuesto por una capa electroluminiscente formada por componentes orgánicos, que, bajo una estimulación eléctrica, son capaces de emitir luz por sí mismos, lo cual diferencia a esta del resto de las pantallas existentes. Al emitir luz propia, permitirá un mayor ángulo de visión, rango de colores y contraste. Hasta la fecha sea han ideado varios tipos de OLED, como son el PLED (Polymer light-emitting diodes), también conocido como LEP (Light-Emitting Polymers) o FOLED (Flexible OLED) que son diodos que emiten luz, creados a partir de polímeros, el HOLED (Phosphorescent OLED) que es capaz de convertir hasta el %100 de la energía en cada OLED en luz; y el POLED (Patternable organic light-emitting device) que usa una capa electroactivada por luz o calor.

Lo más importante es que su inmensa calidad va acompañada de su inmensa rentabilidad para la fabricación: las pantallas OLED son mucho más baratas que el resto; pero además, en el futuro su coste de fabricación y manufacturación podría ser aún más barato, consumir cada vez menos energía y fabricarse en paneles más finos.

La escalabilidad será algo a tener en cuenta, ya que se podrán fabricar modelos que abarcan unas pocas pulgadas, muy útil para dispositivos cómo webcams, cámaras, celulares, reproductores portátiles, y al infinito y más allá… Pero también las pantallas macro se beneficiarán: se podrán construir TVs más grandes que los gigantes que existen hoy de LCD y TV o plasma, así como para artículos lumínicos decorativos relativamente grandes.
Un uso poco usual de estos tiempos será la implementación de esta tecnología en un gran número no pequeño de artículos de la industria textil: esto da un margen de lo flexible que puede ser una pantalla de este tipo.

Si es tan bueno. ¿Por qué no es tan usado?

OLED fue creado hace más de una década (1996), y lo cierto es que hasta el momento no se ha comercializado aún, al menos no en cantidades industriales; y lo cierto es que esta piedra filosofal tiene algunos bugs que se están estudiando. Uno de los problemas es la diferencia en el tiempo de vida de las distintas capaz de colores que posee: cuando las de color rojo y verde son capaces de estar en funcionamiento hasta 40.000 horas, pero el azul no supera las 1000 horas, lo que las hace parecer pantallas desechables, al menos por ahora.

Otro no menos importante es su impacto ambiental, su reciclaje es mucho muy costoso y además hoy en día la tendencia es crear tecnologías cada vez más ecológicas…

Al parecer, no es tan bueno cómo lo pintan. Entonces ¿tendremos que acostumbrarnos al plasma y al LCD por ahora?

Bueno, todo no es color rosa, pero aun así pueden fabricarse, aunque esos detalles defectuosos hay que tenerlos en cuenta; de si se usará cómo los estándares de la actualidad... ¿Por qué no? El mercado dirá la ultima palabra; pero para los que se quedan inconformes con los defectos del OLED, les presento a SED.

¿SED?

SED comenzó a ser desarrollado por Canon en 1986, pero no fue hasta el 2004 que con la ayuda de Toshiba fue desarrollada debidamente. Este es el nieto de la tecnología base de los televisores modernos que actualmente abundan en el mercado. En esta tecnología se eliminan los defectos de los CRT y los TFT y se combinan sus virtudes: En vez de un chorro de electrones, se utiliza un emisor de electrones para cada pixel, para iluminarlo según convenga; estos chocarán contra un sustrato de fósforo encargado de producir la luz que hará brillar los colores primarios RGB en cada pixel. El resultado es un panel más fino que los actuales TFT y con las características de brillo, color y contraste de las pantallas CRT de gama alta. También se ahorra energía (algunas veces un 50% del consumo actual); además, los emisores de electrones tienen un tamaño de unos pocos nanómetros, lo que implica compatibilidad con altas resoluciones.

¿Entonces porque no se comercializa?

Se esperaba que esta a finales del 2007 se comenzaría la explotación en masa de SED, y eso que antiguamente ya había sido aplazado, de hecho el tiempo su fabricación fue todo una proeza en demora (al igual que OLED), tal vez todavía haiga que esperar unos meses más, pero creo que el 2008 es el año elegido para empezar la guerra por la aceptación de los usuarios entre el SED y el OLED.

Continuar leyendo

Windows server 2003 (Parte 3)

Chacal [mariav.hedez@infomed.sld.cu]

Dynamic Host Configuration Protocol (DHCP) es un estándar IP para simplificar la
administración de la configuración del IP del cliente. El estándar DHCP permite que Usted utilice los servidores de DHCP para manejar la asignación dinámica de las direcciones y la configuración de otros parámetros IP para clientes DHCP en su red.

¿Por qué utilizar DHCP?

En redes TCP/IP, DHCP reduce la complejidad y el trabajo administrativo de re-configurar las computadoras cliente. Para entender por qué DHCP es útil para configurar clientes TCP/IP, es importante comparar la configuración manual de TCP/IP con la configuración automática que utiliza DHCP.

Configuración manual de TCP/IP

Cuando Usted realiza la configuración IP para cada cliente, ingresando manualmente información como la IP address, subnet mask o default gateway, pueden llegar a producirse errores de tipeo, que es probable deriven en problemas de comunicación o problemas asociados a la IP duplicada. Por otra parte, hay carga administrativa adicional en las redes donde las computadoras se mueven con frecuencia de una subnet a otra y, en adición, cuando necesita cambiar un valor IP para varios clientes, tiene que actualizar la configuración IP de cada cliente.

Configuración automática TCP/IP

Cuando Usted configura un DHCP Server para dar soporte a clientes DHCP, éste provee automáticamente la información de la configuración a clientes DHCP y también se asegura que los clientes de la red utilicen la configuración correcta. Además, si Usted necesita realizar un cambio en la configuración IP de varios clientes, podrá realizarlo una vez en el DHCP Server, para que el DCHP actualice automáticamente la configuración del cliente reflejando el cambio.

Ejemplo
Usted necesita configurar 100 computadoras con la configuración IP, pero sin DHCP no le quedará otra alternativa que configurar manualmente cada una de las computadoras individualmente. A esto hay que sumarle que se tiene que documentar la configuración IP de cada cliente, y que si se tiene que realizar un cambio en la configuración IP de los clientes, también tendría que re-configurarla manualmente en cada uno de ellos.
Pero DHCP tiene la solución a esto. Con DHCP Usted sólo tendrá que agregar la configuración al DHCP Server, que actualiza los 100 clientes de la red. Además, cuando necesite realizar un cambio de configuración IP, el mismo será efectuado una vez solamente en el DHCP Server, requiriendo simplemente que cada cliente TCP/IP renueve su configuración.

Continuar leyendo

¡Mamá, mamá, atrapé un fraggle!

JKS [jksware@gmail.com]

UN FRAGGLE

Tal como mis áreas de conocimientos no incluyen los troyanos, backdoors, keyloggers y hooks, me puedo atrever a escribir este artículo después de que mi recién instalado antivirus me sorprendiera con un par de ventanas algo estremecedoras, preguntándome qué hacer con su último security threat detectado mediante el realtime file system protection y application modification detection – o lo que es lo mismo, su protección del sistema de ficheros en tiempo real y el motor de detección de modificaciones de aplicación – esta última perteneciente al firewall.

¿Qué hacer cuando tu antivirus te dice que – habiendo recién compilado tu programa que se conecta a un servidor SMTP y POP para el correo – este último “ha sufrido modificaciones, pero cuidado, puede no ser un cambio de versión del mismo”?

Para tener una ligera idea del asombro que me causó la susodicha alerta – que pude copiar en un screenshot que muestro más abajo – me explico mejor.

Para los que hagan sus programitas, el hábito de compilar y ejecutar, ya casi automático en muchos – incluyéndome – después de hacer la más ligera modificación en un programa, nos evita la molestia de cambiar mucho código, que nos dé error, y después buscar qué fue lo que hicimos mal. Para esto en Delphi se resume la opción en la tecla F9, con la que podemos compilar y ejecutar en un solo paso.

Así que cuando después de apretar F9 para ver qué había entendido el compilador con el nuevo código que recién había puesto, me sale en menos de 10 segundos un “cartel rojo” diciendo que mi programa Paula – que se encontraba corriendo en esos momentos – había sufrido modificaciones. Me aparece de así, en el aire; me quedé realmente impresionado con este nuevo truco que me sacaba del sombrero el Eset Smart Security. Es que esto sólo se puede hacer si se comprueba a través de un CRC el programa directamente desde la memoria – el qué es un CRC lo traté en números anteriores –, y se guarda en un registro, para después compararlo con las anteriores ejecuciones. Si esto no es un buen truco para un antivirus, que por favor alguien me diga cuál es.

Pero no sólo esta sorpresa me guardaba el antivirus, sino que le doy Allow (permitir) a la ventana, mi programa me pregunta muy cortésmente si me quiero conectar al servidor de correo de salida, le digo que sí, pero nuevamente me sale el “cartel rojo”. “Bueno, esto es muy insistente”, me digo. Va por el mismo camino que el Vista, con sus cartelitos tediosos. Pero para mi sorpresa, el contenido era muy diferente al de la ventana anterior: este me pide permiso para que un programa no identificado trate de conectarse por determinado puerto a una dirección IP que me daba más abajo. Era mi programa Paula, tratando de conectarse al servidor de correo. Aseguro que me cree una regla – es decir que nunca más me pregunte de este caso en específico – y clickeo allow de nuevo.

Vista de la aplicación.

WOW!

Haciendo un poco de memoria, hace algún tiempo tuve instalado NOD32 – por el mismo modo de prueba a que someto algunas de estas aplicaciones – y se ha debatido tanto esto, que sinceramente no quiero ahondar en el asunto. El tema es que este no reconocía ni era capaz de eliminar alguno de los virus más comunes que se presentan por las memorias en todas sus modalidades, y por lo que fui capaz de ver, además de agregarme un par de líneas de texto – bastante molestas – al final del correo diciendo que “todo está bien en este mensaje”, no tenía otro uso práctico para mí.

UN POCO DE HISTORIA

Siempre me pareció que el Kaspersky – del arquitecto con el mismo nombre – y el Symantec eran los antivirus más rentables, el primero por ser definitivamente el más completo antivirus that ever came to life y el segundo, pues bueno, por poseer la mejor relación – en mi opinión – seguridad contra rendimiento. El Kaspersky pues bueno, quizá por ser tan paranoico, me parece el antivirus idóneo para instalar en escuelas – o en centros públicos en general – donde la afluencia de personas bien intencionadas con programas mal intencionados puede poner en peligro cualquier sistema. Pero para el confort de casa, o de tu puesto de trabajo, no es el correcto. Para esto existía por regalo de la naturaleza el no tan reconocido por todos Symantec Antivirus, salido como por historieta del Norton Antivirus, ingeniado después de que la empresa Symantec comprara los derechos del Norton Commander, tan útil en la era del MS-DOS – que no es más que un paquete de aplicaciones programado por un gurú de la informática llamado Norton, que hacía absolutamente todo lo que el sistema no se atrevía a hacer.

Por lo que respecta al segundo, es para mí historia antigua. Los diseñadores del mismo no se han atrevido a hacer los cambios, tanto de interfase como de su motor de búsqueda, necesarios para adaptarse correctamente a los regímenes más agresivos de trabajo en que se puede encontrar uno de ellos, que en un tiempo lo convirtió y mantuvo como un antivirus de lujo.

Volviendo al NOD32, el punto culminante que hizo que se ganara el titulo de “programa no deseado” en mi PC fue justamente su falta de interacción con el usuario y su desesperante desconfianza – no confundir con la paranoia casi inocua del Kaspersky que antes mencionaba – que tenía ante todo las aplicaciones que requieren de grandes prestaciones. Esto devino de la instalación del World of Warcraft (WoW) con su correspondiente Emulator para emular el server que mi conexión telefónica no podía concederme.

Resulta que el WoW es un juego multiusuario y de rol por excelencia, y los que lo conocen sabrán que esta capacidad de interactuar con otro usuario por banda ancha a través de este rito mágico, atrae a miles de usuarios a nivel mundial que a la vez se encuentran en el cibermundo.

Esta propaganda que acabo de dar no es por gusto. Significa que si tú eres programador de antivirus, y quieres que este venda, lo primero que tendrás que hacer es un estudio de mercado para reconocer qué programas usan más tus posibles usuarios, y si haces un firewall, tendrás que tener en cuenta de que por ahí se conecta no sólo el Outlook y Internet Explorer, sino también podría tratar de conectarse el WoW con su servidor remoto en Internet por un puerto que no es convencional. Sin esta conexión, el WoW no es nada más que 1,5 Gb de disco duro mal empleados.

Así que, cuando después de descomprimir la carpeta que contiene el emulador del servidor del WoW, de usar una utilidad para crearme un usuario, de ejecutar el emulador, de esperar a que se inicialice y de finalmente ejecutar el WoW, para un total de una hora y casi dos gigas ocupados desde que empezara a instalarlo, me dijo ( el WoW ) en su menú inicial con las dos torres místicas al estilo del Señor de los Anillos, que no podía conectase al “servidor remoto”, que da la casualidad no era más que 127.0.0.1 – para los newbies esto es localhost, o sea, mi propia dirección IP de red – ya que no lo encontraba. De más decir que esto fue suficiente para sacarme de paso.

Empecé a desesperarme y me dije a mí mismo, “debe ser el producto estrella de la empresa de Redmond”, que en su Service Pack 2 incluyó un firewall y Centro de Seguridad también muy molestos, pero que por suerte – o por precaución contra las leyes antimonopolio de la Unión Europea – supieron poner un “botón de apagado” para aquellos que les molestara tanto como a mí.

CRITIC-ON

Pero al parecer no, increíblemente esta vez NO era culpa de Redmond, sino de mi indeseable antivirus Nod32 en su versión más propagada para NT. Por primera vez consideré a un antivirus como el virus en sí. Lo primero que hice fue darle la orden de parar a través de la consola de servicios, pero mi juego seguía esperando por la conexión. ¿Será persistente el muy condenado? Terminé mandándolo a desalojar mi computadora a través de su instalador. Después de esto reinicié, y al fin, pude ver el panel de selección de personajes del WoW.

Lo que quiero decir con esto es que, más que dármelas de sabihondo en este mundo tan inmenso de virus y vacunas contra estos virus, agregar mi modesto criterio respecto a algunos de los mismos. El mejor antivirus no va a ser el que más virus detecte según los Virus Bulletins, o el que menos falsos positivos tenga en su record, sino el que verdaderamente cumpla con la voluntad del usuario y, de paso, todas las cualidades anteriores, incluyendo que corra en la máquina en la que el usuario tenga dominio, ¡incluso si es una PII!.

Continuar leyendo

lunes, 17 de marzo de 2008

Buffer Overflow

Gorums [gorum@lab.matcom.uh.cu]

Tratare de desglosar muy brevemente de que se trata el BufferOverflow sin entrar en profundidad ya que el tema tiene tela por donde cortar. Para la comprensión de esto, explicare tres conceptos que se construyen uno sobre el otro y que ayudaran un poco al entendimiento de este tema.

Concepto de Pila:

En programación no es más que una estructura de dato, que tiene ciertas características, hagamos una analogía con los arreglos que es la estructura de dato que todo programador debe al menos conocer. El arreglo tiene un tamaño fijo (Estático), la pila en teoría no (Dinámico), en el arreglo tu puedes insertar o eliminar un objeto (no me refiero directamente a la POO) en cualquier posición mientras este esté dentro de sus limites establecidos, en la pila el ultimo que entra es el primero que sale, o sea el control de la inserción y la eliminación no lo tenemos nosotros sino la propia estructura y esta es la característica esencial que la distingue de las demás estructuras de datos.

Concepto de Proceso relacionado con la pila:

Cada aplicación que es cargada en memoria para ejecutarse se le nombra proceso, o sea, un programa en ejecución no es mas que un proceso y según la arquitectura PC que es la que mayormente todos usamos, un proceso se divide en varios segmentos, entre ellos se encuentra el segmento de dato que se encarga de almacenar toda la información estática de nuestra aplicación, como las variables globales y estáticas; el segmento de código que almacena las intrusiones de nuestro programa y el segmento de pila que el se encarga del almacenamiento de la información que tiene un carácter dinámico o volátil.

Concepto de Función relacionado con el segmento de pila de los procesos:

Cuando una función en términos de programación llama a otro, esta necesita poder almacenar el puntero a la siguiente instrucción, después de la llamada a la función, ya que cuando la función llamada termina, esta tiene que retornar a la función llamadora para continuar su ejecución por el punto donde se quedo. Esto es posible gracias al segmento de pila de los procesos y a los lenguajes que hacen uso de este recurso, permitiendo que mecanismo como la recursividad sean posible. Pero no solo la pila sirve para almacenar el puntero a la próxima instrucción llamado IP, también se almacena los argumentos que le son pasados a la función y las variables locales que estas declaran en el cuerpo de las funciones.

A la hora de la función llamada llegar al finar de su bloque de instrucciones, se tiene que sacar todo los elementos introducidos en la pila según el mecanismo de esta(el ultimo en entrar es el primero en salir), y así no dejar información que seria basura para la función llamadora, quedando el IP de la próxima instrucción de la función llamadora en el tope de la pila, y así actualizando el registro IP con el valor de la pila, se ejecutaría la siguiente instrucción después de haber echo el llamado a la función.

Expliquemos este proceso en forma algorítmica y seguro nos entenderemos mucho mejor, usaremos para esto con un poco de seudo código.

Un último punto a aclarar antes de entrar en el seudo código: Hablemos de dos registros del CPU que juegan un papel importante en el trabajo con el segmento de pila, estos son el EBP y el ESP, este último es el que apunta al tope de la pila y es incrementado o decrementando dependiendo de si se introduce o se elimina objetos en la pila, en cuanto al EBP su funcionalidad es el de acceder a los parámetros y a las variables locales mediante un offsets fijo para cada una de las variables.
La función f() llama a la función g():

Pseudocódigo

f()
{
int a=1;
int * b = &a;
....
g(a,b);
//<- aqui call g()
a=4; //siguiente instrucción después de llamar a g()
...
}

1-introducir en la pila la dirección o el valor de los argumentos:

f.push(a); // valor de a
f.puch(b); //valor de dirección de apuntador de b
2- Al llamar a g(), introducir en la pila la dirección de la siguiente instrucción a ejecutar después de la llamada y tomar la nueva dirección a ejecutar para saltar a ella:

f.push(ip); //dirección de la instrucción a=4
ip = &g; // dirección de g()

3- Almacena en la pila el EBP para a si poder modificar a este con el ESP:

f.push(ebp); //guardo el valor de bp ya que este va ha ser modificado
mov ebp,esp; // el registro pb toma el valor del registro sp

4-g() introduce en la pila sus variables locales

g.push(_varLocal1); //valor de _varLocal1
g.puch( _varLocal2); //valor de _varLocal2
....................
g.push( _varLocalN); //valor de _varLocalN

Nota: Hasta aquí esto es gracia a la instrucción en ensamblador CALL que es la que se encarga de todo este proceso.

5- Luego g() al terminar saca todo las cosas que le corresponde de la pila, de atrás hacia delante según el mecanismo de la pila.

g.pop( _varLocalN); //valor de _varLocalN
....................
g.pop(_varLocal1); //valor de _varLocal1
ebp = g.pop(ebp) // restauro el valor de ebp

6. El registro IP toma el valor que anterior mente había dejado en la pila, "asegurando" que la proxima instrucción sea la siguiente a la llamada de g()

ip = g.pop(ip); //ip apunta a la instrucción a = 4 de f()

Nota: Esta última parte es responsabilidad de las intrusiones en ensamblador RET o IRET en el caso de las interrupciones.

7. Continua la ejecución después de la llamada a g()

a=4;
......

Bien, mi intención es que se lleven al menos la idea de como es el proceso en el interior de una llamada a función en el lenguaje de programación C, y esto es valido para casi todo los lenguajes, o sea que esta es su forma de proceder.

Pasemos en este momento al plato fuerte:
!!El bufferOverflow EN VIVO!!
Voy a colocar el código y será explicado como comentarios de forma que se pueda entender por lo menos la idea.

//---------------------------------------------------------------------------

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

/*
Nota Importante:
Para poder comprender las instrucciones y los mecanismos que se aplican en este ejemplo es indispensable haber entendidito todo lo expuesto arriba y tener a manos una buena base sobre el lenguaje C, principalmente con el trabajo con los punteros.
------------------------------------------------------
Compilado sobre C/C++ Builder 6.0
*/

void bufferOverflow()
{

//buffer es un array de 5 elementos del tipo char, lo cual tiene un tamaño (sizeof) de
//10 byte en total, ya que el char ocupa dos byte por cada posición del arreglo
  char buffer[5];

  int *ret;

//los 10 byte de buffer mas los 2 byte del EBP que ocupan en la pila
//suman 12 que es el desplazamiento que tiene que hacer ret para
//apuntar a la posición de retorno
  ret = buffer + 12; //Aritmética de puntero, ret ahora apunta a la posición de retorno

//sobrescribo el valor de la posición de retorno sumándole 26 para así
//poder saltarme las líneas x = 2 y el primer printf ()
  (*ret) += 26;
}

int main(int argc, char* argv[])
{
  int x;

  x = 1;
  bufferOverflow();
  x = 2;
//esto no se ejecuta
//ni este primer printf tampoco
  printf("Esto no se muestra porque yo no lo deseo %d",x);

  printf("Bienvenido a su primer Buffer Overflows [x = %d]",x);
  
return 0;
}

//---------------------------------------------------------------------------

Este código como bien esta expuesto en el comentario de encabezado esta diseñado para ser compilado y ejecutado sobre el IDE C/C++ Builder 6.0, recalcando que puede ser que sobre otros compiladores incluso sobre compiladores de la misma línea de los Builder este ejemplo no realiza su cometido, producto a que cada compilador traduce a código maquina a su forma, generando offsets diferentes para programas con idénticas instrucciones, lo que provoca que las direcciones de desplazamientos de estas instrucciones varíen de un compilador a otro.

Si usted entendió a lo sumo la parte teórica y observo algo del código, sin mucho rodeo le diré que el programa lo único que realiza es modificar la dirección de retorno asiendo que la misma se salte unas líneas, y eso es en teoría lo que consiste el bufferOverflow, ósea no es mas que sobrescribir la dirección de retorno, haciendo que el programa salte a donde nosotros queramos, observe que esto es posible gracias a la inseguridad que nos proporcionan los punteros y los arreglos, estos últimos como casos particulares de los punteros.

Como dato curioso el gusano de Morris, según muchos el primer gusano de Internet, pudo expandirse gracias a un bug del demonio finger, usando como exploit un bufferOverflos sobre la función gets() de la biblioteca estándar de entra/salida, gracias a que esta función no limita la cantidad de byte que debían ser introducidos en el buffer que después era enviado al servicio finger de la maquina victima. Existen infinidades de ejemplos de bufferOverflow que afectan mayormente a los sistemas operativos de la familia de los Unix y cada día aparecen muchos otros y nuevas forma de explotarlos.

Si se te quedo un poco corto este articulo por favor referirse a la phrack 48-0x14, referencia obligatoria para los mas exigentes en el tema.

Saludos Gorums

“No sabe mas aquel que lo sabe todo, sino el que sabe donde buscar”.

Continuar leyendo

Troyano u.bat

Reynier Reyes [rreyes33@alumno.uned.es]

En la edición 44 de esta revista publiqué un artículo sobre el virus troyano nideiect.com que al parecer por alguna confusión, no entiendo por qué el nombre que salió fue, ntdelect.com y en varias partes del artículo lo tecleé correctamente, sólo hago esa aclaración para que no se me confunda nadie. Ahora he detectado otro que realmente hace algo parecido pero con muchos otros cambios, en sí el ejecutable "amvo.exe" se mantiene, esta vez no lo detecta el antivirus Avast que fue el que utilicé en esta ocasión, ni tampoco detecta el fichero u.bat que permanece oculto mientras el virus está ejecutándose en el sistema.

La importancia del Registro del Sistema (regedit)

Ya casi no sabía qué hacer, pues el antivirus detectaba los ficheros, "autorun.inf" en todas las unidades y otros 2 ficheros dll dentro de la carpeta Windows, uno de ellos "amvo0.dll", me resultó familiar con respecto al que describí en el artículo de la edición 44, entonces entro en el registro del sistema, la clave "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" donde me encuentro con el valor "amva" con la cadena "C:\Windows\System32\amvo.exe", debemos hacer un clic derecho y luego eliminar para evitar que se inicie de nuevo cuando reinicie la sesión. Esta vez tiene otro tipo de programación porque el otro "amvo.exe" el antivirus lo detectó perfectamente la otra vez, esto lo hice después de haber escaneado dos veces el disco duro completo y observé que pasaba lo mismo, detectaba los mismos ficheros y no el ejecutable. Para eliminarlo se procede a abrir la línea de comandos de Windows "cmd.exe" donde iremos al directorio raíz mediante el comando "cd.." hasta que diga C:\> tecleamos del /f /s /q /a amvo.exe damos Enter y habremos eliminado el archivo de cualquier parte donde se encuentre en la unidad C: (Este comando utilizado de esta forma sólo debemos hacerlo cuando estemos seguros que no hay otro fichero con el mismo nombre en esa unidad que nos haga falta).

Los Ficheros Ocultos

Si ha eliminado de forma manual el ejecutable, entonces deberá eliminar también los demás para que no vuelva a reiniciar la infección, lo hacemos mediante la línea de comandos cmd, como mismo eliminamos "amvo.exe" hacemos lo mismo pero con "amvo0.dll", "autorun.inf" y "u.bat", estos dos últimos son los que se copian constantemente hacia todas las unidades de disco y memorias Flash, por lo que hay que hacer la operación para todas las unidades con esos dos ficheros.

Por lo menos este troyano no es tan fácil de eliminar manualmente, el antivirus Avast con la actualización del 8 de marzo solamente detecta los archivos autorun.inf y amvo0.dll, no tengo idea de si otro antivirus los detecta a todos. Espero que esto sirva de base para ir aprendiendo en el caso que el Antivirus nos falle con su protección porque el virus sea nuevo o porque no esté actualizado.

Continuar leyendo

TFT vs. CRT ¿Una Pelea Justa?

Yordan Pérez [truano@infomed.sld.cu]

Esta información les servirá como base para el momento en que decidan comprar un monitor saber si vale la pena invertir mas en uno plano, o bien ahorrar nuestro dinero y conformarnos con los CRT de siempre.

Para comenzar es bueno saber las ventajas que podremos disfrutar teniendo un TFT en vez de un CRT (Monitor normal de Tubo de Rayos Catódicos).

  • Espacio: El TFT se puede colocar incluso como un cuadro a la pared.
  • Consumo de Electricidad: Un TFT consume solo una tercera parte de lo que consume un CRT pero además genera considerablemente menos calor, debido a lo cual también se consume menos aire acondicionado para mantener la temperatura de la habitación donde esté ubicado.
  • Brillo: El TFT funciona como un obturador por lo tanto para ofrecer mas brillo solo tiene que aumentar la potencia de las lámparas, mientras que el CRT tiene que añadir corriente al haz de luz haciéndolo mas grande, afectando así la resolución final y esto a veces provoca desenfoque, en datos técnicos un CRT tiene un brillo de hasta 100nits, mientras que los TFT están entre 200 y 400nits.
  • Cero Parpadeo: Todos sabemos que para evitar el molesto parpadeo de la imagen en un CRT tenemos que configura la velocidad de refrescamiento sobre los 75hz, provocando esto un desgaste superior al normal de la vida útil del monitor, en el TFT esto no existe, ya que tiene una fuente de iluminación constante sobre toda la pantalla.
  • Enfoque: En un CRT el haz de electrones es circular cuando apunta hacia delante, pero se distorsiona cuando apunta hacia arriba, abajo, izquierda o derecha mientras hace el barrido de imagen, lo que puede causar problemas de claridad de imagen o de enfoque en las esquinas de la pantalla. Esto no ocurre en un TFT ya que cada píxel es independiente de su "vecino" y tan sólo de abren para dejar pasar la luz.
  • Geometría: Tan importante es la geometría para los diseñadores gráficos que estos deberían ser los primeros en adquirir un buen TFT ya que nos muestran imágenes geométricamente perfectas, no siendo así en el CRT, donde los problemas antes mencionados sobre el brillo y el contraste, terminan afectado a la imagen final.
  • Vida Útil: En un CRT el envejece de dos formas principalmente, al crearse capas de oxido en el cátodo del emisor de electrones, disminuyendo así la potencia del haz de luz, por otro lado el fosforo pierde eficiencia con los años; en el TFT solo envejece la fuente de luz, compuesta por 1 o mas tubos fluorescentes; en resumen la vida útil de un CRT está entre 10 000 y 20 000 horas, para llegar a la mitad del brillo, mientras el TFT la vida útil de la fuente de luz es de hasta 50 000 horas.
  •  Radiación: Simplemente no existe en los TFT, debido a que en su funcionamiento no interviene ningún elemento electromagnético, tampoco muestra reflejos de luz por lo que cansa menos la vista.

De la misma forma que mencionamos las ventajas también sería prudente mencionar las desventajas.

  • Contraste: Un TFT por muy bueno y moderno que sea aun está lejos de ofrecer el contraste que puede brindarnos un CRT, el máximo nivel de contraste que nos brinda un TFT es de 800:1, mientras el CRT alcanza los 10000:1, aunque esto solo afecta seriamente a un profesional del color.
  • Precio: Los TFT al ser una tecnología aun nueva adquieren unos precios aun lejos del poder adquisitivo de la mayoría de nosotros estando como mínimo entre los $250.00 y los $500.00, precio muy superior al del CRT más grande.

Continuar leyendo