martes, 15 de septiembre de 2009

¿Infectar código fuente?

Supongamos que estaba haciendo un programa en C# con Visual Studio en el que quería poner unos bonitos botones rosas:

gogirls

En realidad es un control personalizado en el que he sobrescrito el método OnPaint, algo así:

image[Offtopic: Molaría poner en el blog algo que colorease el código fuente, pusiera el número de línea, unas scrollbars… ¿se podrá en blogspot?]

Hasta aquí todo mas o menos normal, pero es entonces cuando me fijo que el IDE, Visual Studio, en tiempo de diseño está mostrando el botón exactamente como quedaría una vez compilado y ejecutado el programa.

image

¿Pero como es posible? En tiempo de diseño Visual Studio no puede saber como quedará el botón que yo pinto manualmente, a no ser… que esté ejecutando el método OnPaint para ofrecer al programador una previsualización del formulario tal y como quedará en tiempo de ejecución.

Es decir Visual Studio va a ejecutar lo que halla en el método OnPaint de los controles personalizados que tengamos en el formulario que estemos previsualizando en ese momento.

¿Y si colocásemos en el método OnPaint código malicioso? Un developer que abriese el proyecto y visualizara el diseño del formulario ejecutaría sin saberlo el malvado código malicioso. Esto sería perfecto para infectar a un programador del que sabemos que es muy probable que abra confiadamente el proyecto que le pasemos y trastee felizmente con la interfaz.

Desde aquí podéis bajaos un proyecto de Visual Studio que tras ser abierto y visualizado el form1.cs, se ejecutará la calculadora de Windows sin necesidad de compilar ni ejecutar el proyecto. Nota: Uso el registro “como un mutex” para que solo se ejecute una vez la calculadora.

image

Como he puesto que se ejecute la calculadora de Windows podía haber puesto que se ejecute un binario incluido en el proyecto o que lo descargue y ejecute o … algo mas interesante.

El código malicioso podría buscar todos los proyectos de Visual Studio e insertar en ellos un botón personalizado de 0x0 con un método OnPaint que haga exactamente lo mismo (buscar todos los proyectos e infectarlos, etc…). Y así infectaría todos los proyectos de VS de ese ordenador. Esto en un desarrollador que comparta sus códigos mediante SVN, SourceSafe o CodePlex, SourceSafe podría causar estragos. Sería como un virus en el código fuente.

Y esto me recuerda al virus W32/Induc comentado por aquí, por acá, por allá y por mas allá. Este virus infecta el compilador de Delphi, modifica una dependencia incluida en todos los ejecutables, de modo que cada ejecutable compilado con ese ordenador queda infectado y trata de infectar el compilador de Delphi de los usuarios que lo ejecuten.

¿Sería mas peligroso esto del código fuente? Le faltaría ya de paso no solo infectar el código fuente sino también los ejecutables generados como hace Induc y de paso una vez infectado el equipo eliminar del código fuente las rutinas maliciosas.

Por último quiero destacar que el hecho de que seamos capaces de ejecutar código sin compilar el proyecto tampoco es un gran logro, al fin y al cabo seguramente se conseguiría el mismo efecto insertando la rutina normalmente como parte del programa y esperando a que el programador lo compile y ejecute.

PD: No me gustan los botones rosas con bordes negros solo era un suponer ;)

8 comentarios:

  1. Hola Thor, saludos desde Perú, te escribe un fiel lector, he leído bastante de ti, desde tus artículos en Hackxcrack, hasta tu último taller de redes WI-Fi ... no sabes cuanto me emociona haber encontrado tu blog, eres un tipazo hermano, esos artículos te quedan "Bestia"!!! ... ahora que te seguiré más de cerca de seguro que te andaré "jodiendo" muy seguido ... jajaja. Saludos Thor, es un "Lujito" haberte encontrado, ya me imagino leyendote.

    Éxitos, te escribo pronto

    .Digit0

    ResponderEliminar
  2. Lamento decirte que te equivocas, jeje a quien buscas es a Vic_Thor es el que escribió en hackxcrack y escribe ahora tan buenos artículos en wadalbertia.
    http://www.wadalbertia.org/phpBB2/profile.php?mode=viewprofile&u=12
    Un saludo.

    ResponderEliminar
  3. Bien vale, vale, no te me pongas esquivo y muy modesto viejo, porque no te va, ya lo ves deberías felicitarme a falta de uno me caen dos, nada viejo es grandioso haberte encontrado en el camino de mi búsqueda, no publicas demasiado, pero tus artículos estan muy buenos y sobre todo "amenos y entendibles" (¿será que eso del smoc y el mercurio de la minería aquí en Perú me estupidiza?). Bueno después de todo creo que si inicio una infernal persecución a tu blog (al estilo Nerón) no debería importarte ¿verdad? jajaja.

    Muy agradecido viejo, "mola" mucho tu blog, pero más tus artículos, no dejeís de escribirlos no vaya que te "joda" cada fin de semana con el rollo ese de "¿Porqué no publicas?, ¿Que ha pasado contigo?" (sarcasmo) jeje.

    Echo mi demecial blogger ya te hice un "ADD" en mi registro de memoria al cual por cierto le hice un backup por si los tragos me estropean los archivos de la "chulla", antes de despedirme no sé si sea oportuno pedirte un enorme favor, y es que hace ya un tiempo ando confundido sin saber por donde empezar, de todos modos quisiera saber si tienes alguna casilla de correo quiero hacerte una sola consulta y no se so sea muy indiscreto hacerla por aquí para que puedas orientarme con esto de la programación, lo que pasa es que quiero llevarla a otros lados, pero ni idea por donde empezar, cuidate bastante, muchos saludos.

    Nos escribimos.

    Eduardo Augusto.

    ResponderEliminar
  4. La FOCA "mola" mi querido Thor ... eres la leche tío!!! Felicitaciones.

    ResponderEliminar
  5. Muy buena entrada! Me has dejado o_O Vaya una cagada!

    Newlog

    ResponderEliminar
  6. Utilidad web para formatear codigo en blogsot.
    http://codeformatter.blogspot.com/2009/06/about-
    code-formatter.html
    salu2

    ResponderEliminar