En el día de hoy, os vamos a enseñar los fundamentos básicos y un análisis sobre el famoso virus de la policía. Este tipo de virus son llamados ransomware, y últimamente parece que se están convirtiendo en una de las maneras más utilizadas para atacar a todo tipo de personas y empresas.
Cómo funciona el virus de la policía
1. Lo primero de todo, navegando por sitios poco seguro, como adjunto a un email o de cualquier otra manera, el atacante consigue introducir en nuestro ordenador, el virus.
2. Este virus, tiene como objetivo cifrar todos nuestros archivos, de manera transparente, es decir, el poco a poco y sin que nosotros nos demos cuenta va modificando todos los archivos. Para nosotros el archivo sigue igual, ya que esta donde lo dejamos y no presenta ningún cambio, pero este ha cambiado.
El cifrado de datos
Según hemos podido investigar, la mayoría utiliza algún algoritmo de cifrado de datos, como RSA o incluso algunos más complejos. Pero utilizar un algoritmo de cifrado complejo, realentiza el cifrado. Por ello al analizar el código fuente, se ha encontrado que muchos utilizan el operador lógico XOR.
3. Una vez todo el proceso se ha realizado, nos informan de que debemos pagar una cantidad, para recuperar nuestros archivos, en algunos casos indicándonos que hemos realizado actividades delictivas o que nuestro equipo ha quedado confiscado por un departamento de policía. En España se conoce como el “virus de la policía” porque el que más se extendió mostraba la siguiente imagen:
4. Cuando se procedía al pago, se activaba la opción de descifrado y los archivos volvían a su estado original. Aunque según algunas personas que lo han sufrido, con el propio pago, intentaban introducirte nuevamente otro virus.
Creando un ransomware
Después de ver cómo funcionaba y basándonos en el método más sencillo, el cifrado XOR, he recordado un pequeño programa que tenía hecho, de cuando empecé a estudiar C que la verdad podría ser algo parecido a este sistema. El programa es muy simple, cifra un archivo realizando XOR a nivel de bit de un único archivo y para descifrarlo solo tenemos que volver a ejecutar el programa otra vez.
Como se puede ver en la siguiente tabla:
Bit original | Bit de unos | Salida | Bit de unos | Bit original |
---|---|---|---|---|
0 | 1 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 1 |
#include #include int main(int argc, char * argv[]){ int a; int avance=0; FILE *f; if((f=fopen(argv[1],"rb+"))==NULL){ //escritura binaria fprintf(stderr,"Error al abrir archivo\n"); return 1; } fread(&a,sizeof(int),1,f); while(!feof(f)){ //hasta final de fichero a=a^11111111; // XOR con todos 1s fseek(f,sizeof(int)*avance,SEEK_SET); //recolocamos el cursor avance++; fwrite(&a,sizeof(int),1,f); fread(&a,sizeof(int),1,f); } }
El modo de usarlo es sencillo solo debemos pasar como argumento mediante linea de comandos el archivo a cifrar.
Os dejamos un vídeo mostrando su uso: