Minotauro9:(TEXT_003.009):16/04/1996 << Back To Minotauro9


MINOTAURO MAGAZINE #9: Marca de infección por atributos Gusano, Los Alegres Colchoneros Seguramente toda su vida trataron de hacer una marca en los archivos infectados que sea fácil de verificar, como para hacer stealth y anti-heurística, entonces por la primera condición tenemos que descartar la posibilidad de que la marca este adentro del file, porque habría que andar leyéndolo para verificar, y un dir si no hay ningún cache cargado tardaría lo mismo que el windoze 95 en cargarse y no queremos que eso pase, entonces nos queda la info que guarda el DOS del file en cada entrada de directorio: Offset Tamaño Descripción 00h 8 BYTEs nombre 08h 3 BYTEs extención 0Bh BYTE atributos 0Ch 10 BYTEs reservado Usado por el DR-DOS para guardar el password. 16h WORD Hora 18h WORD Fecha 1Ah WORD Primer Cluster del file 1Ch DWORD Tamaño del file Lo primero que vemos son esos 10 bytes en el offset 0Ch que si miramos un HD siempre están en 00, ahí podemos escribir hasta "INFECTADO" y nadie se da cuenta a menos que lo mire con el disk edit, pero este valor no aparece en la DTA, así que no es rápido como queremos. Si modificamos el siglo o los segundo de manera que el usuario no se de cuenta que cambiaron, saltan alarmas en todos los antivirus, así que por ahí no viene la cosa, ni el nombre ni el tamaño hay bytes al pedo así que ahí no podemos tocar nada, así que nos quedan los atributos. Los atributos son 1 Byte que el D.O.S almacena sobre cada archivo, y cada uno de sus bits, representa un tipo de atributo: Bit(s) Descripción 7 shareable (Novell NetWare) 6 no usado 5 archivo 4 directorio 3 volume label execute-only (Novell NetWare) 2 system 1 hidden 0 read-only Seguramente en sus tablas de atributos el bit 7 también esta como no usado, pero si Ralf dice que lo usa Novell, mejor no lo tocamos, pero nos queda el 6, con setearlo ya indicamos que el archivo esta infectado por nosotros. Esta manera de indicar es buena porque cuando leemos la DTA tenemos los atributos ahí sin ningún esfuerzo. El único problema es setear este bit. La primera manera que se nos viene a la mente es con la int 021h, pero si activamos este bit, nos devuelve que estamos queriendo setear un atributo inválido. Entonces nos quedan dos maneras de setearlo: 1) La primera y la mas normal seria a mano, ósea, buscar la entrada de directorio del file a infectar, leerla (hay que leer todo el sector) cambiarla y grabar todo el sector de nuevo. Esto seria bastante fácil, si no fuera porque para encontrar la entrada de directorio que queremos hay que hacer bastantes cosas como leer el registro de arranque, ver cuantos sectores por cluster tiene el disco, buscar la entrada '.' para saber donde empieza el dir, leer todos los sectores del dir donde esta el file hasta encontrarlo y recién ahí modificarlo y escribirlo. 2) Esta es la manera mas fácil y funciona perfecto. Vía SFT, solo hay que hay que hacer un OR OFFSET 04h de la SFT, 01000000b. Y cuando cerramos el archivo se guarda el cambio. No les voy a explicar como obtener las SFT porque ya esta muy bien explicado en la Minotauro 7 por Trurl.