viernes, 28 de agosto de 2015

¿Dónde consigo un anti-antivirus?

Hoy planeaba a publicar otra cosa, pero necesito hacer catarsis. Ayer recibí dos quejas consecutivas sobre que el instalador del último ZinjaI parecía contener algo malicioso a ojos de algunos antivirus. Es muy poco probable que tal afirmación sea verdad, más abajo les cuento por qué. Y efectivamente no lo era, el antivirus estaba confundido. Pero me resultó muy alarmante descubrir dónde estaba la confusión. Y para colmo la experiencia de uso de un antivirus me pareció inverosímil. Como programador, entiendo el trabajo de locos que requieren y las concesiones que se deben hacer. Pero creo que pasaron la raya, y por mucho. Lo que vi no tiene justificación, prefiero mi PC llena de bichos antes que trabajar así. Ahora les cuento.


Primero, ¿cómo llega ZinjaI para Windows desde mi notebook a SourceForge? Bueno, lo compilo desde mi GNU/Linux, utilizando el mismo MinGW32 que se distribuye con ZinjaI (descargado directamente en GNU/Linux y desde su sitio oficial en SF) mediante el fantástico emulador wine, y luego lo empaqueto con NSIS, también ejecutado mediante wine. Al ejecutar wine uso un prefix (que sería la carpeta donde guarda las configuraciones y archivos del Windows que emula) que no comparto con ninguna otra emulación. Es decir, no hay contacto entre el uso de wine para compilar y generar los instaladores, y el uso que pueda hacer en mi vida diaria para emular otras cosas como juegos. Esto es importante, porque el emulador se ha vuelto tan bueno que puede emular un también un virus.

Una vez armado el instalador, busco un Windows real con Microsoft Security Essentials (MSSE) instalado y al día (alguna PC del trabajo, o una máquina virtual), y lo paso sobre el instalador y la carpeta de instalación luego de una instalación completa. Uso el MSSE porque de los pocos antivirus que probé es el único que: a) no se come toooodos los recursos, b) no jode a cada rato con mensajes ridículos, c) no me da falsos positivos (todavía), y especialmente d) la única vez que de verdad en un pasaje de cosas de una PC a otra se me filtró un bicho, me lo detectó enseguida. En conclusión, el proceso de empaquetado es a prueba de bichos, pero como siempre puede haber un error humano, verifico todo con el MSSE antes de publicarlo.



Mi experiencia con otros antivirus había sido terrible. Por ejemplo, el avast sieeempre me da falsos positivos, y a veces hasta me borra las cosas que compilo;, el nod32 había dicho que un programa con char s[]="ping"; era un virus, pero uno con char s[]="pung"; s[1]='i'; no (WTF?), el AVG en su mejor momento hasta llegó a romper instalaciones de Windows con solo actualizarse; otros como Norton y Panda (hace mil años, no se ahora) eran ridículos en cuanto a consumo de recursos, y el de McFee que era mi preferido cuando usaba Windows, en algún punto también se pasó al lado oscuro. La mayoría de mis impresiones de primera mano son de unos 15 años atrás antes de que migrara toooda mi actividad a GNU/Linux (o sea que ya no valen), o de segunda mano por parte de usuarios de ZinjaI y PSeInt que me cuentan sus experiencias.

En defensa de los antivirus tengo que decir que pelean una guerra imposible de ganar. O bien se comen todos los recursos y molestan al usuario, o bien protegen a medias. Una vez estuve en una charla (muy muy buena) de gente de e-set acerca de la heurística de los antivirus, y se basaba en un ejemplo muy inteligente: el perro leopardo de catahoula. ¿Alguien sabe cómo se ve uno de esos animales? En la audiencia todos dijimos que no (no es un raza común por estos pagos). El disertante entonces empezó a pasar imágenes y decir, "¿será este? ¿será este otro? ¿y este?". Una imagen era un elefante raro y todos dijimos "ese no creo, los perros no tienen trompa", otra mostraba un caniche y nosotros dijimos "ese tampoco, a ese lo conozco", y así con diversos animales y razas, hasta que por descarte fuimos encerrando al desconocido "perro manto leopardo de catahoula". Fantástica metáfora para introducir el desafío de un antivirus para reconocer virus que no vio nunca antes en su vida.

El antivirus analiza cómo se vé y qué hace un programa (hasta lo prueba en una sandbox), buscando patrones malos. Si suma varios, debe ser un virus. Entonces, entiendo que un compilador o un depurador parezcan maliciosos. Están llenos de trucos raros, generan y modifican ejecutables, se meten con otros procesos, no muestran interfaz al usuario, etc. Eso está dentro de lo tolerable, y me ha pasado mucho. Pero que ZinjaI por decir "ping" en algún lado sume tantos puntos como para hacer sonar la alarma me parece increíble. Aunque ese fue un falso positivos hace ya bastante tiempo. El de ayer, que venía arrastrando de varias versiones atrás, es otro, no menos impresionante.


Entre los ejecutables auxiliares de ZinjaI, hay uno que se llama shellexecute, que lo único que hace es invocar a la función shellexecute de la API de Windows con un nombre de archivo que recibe como argumento. Esta función abre el archivo con lo que sea que tiene asociado ese tipo de archivo (si es una pagina web con el navegador, si es un docx con Word, si es un pdf con Acrobat Reader, etc). Lo uso para mandar a abrir, por ejemplo, las documentaciones externas como la referencia de wxWidgets, así se abren con lo que cada uno tenga sin tener que configurar nada en ZinjaI. Pues bien, el código fuente completo de ese programa es el que sigue:
    #include <windows.h>
    int main(int argc, char *argv[]) {

        ShellExecute(NULL,"open",argv[1],argv[1],NULL,SW_NORMAL);
    }
Llama a la función, le pasa el nombre de un archivo, y le dice abrilo normalmente. Es una sola llamada, a una sola función, que me provee Windows, y la estoy haciendo con los argumentos más inofensivos y comunes. ¿Dónde rayos está la amenaza???? No hay naaada  raro. Todo lo que hago es pedirle un favor re común a Windows (¿será Windows el virus?). Pues bien, si instalan algún antivirus, como por ejemplo el Avast o los de Symantec, y ponen este código en ZinjaI e intentan compilarlo, verán que.... no pasa nada raro! Si copian, pegan y compilan como está, nadie se queja de virus. Peeero... Vayan a las opciones de compilación y cambien el nivel de optimizaciones ("-O0" por "-O2"). Charaaan!!! Ahora sí es un virus según estos infames detectores. Ridículo.

La solución entonces fue desactivar las optimizaciones para esa compilación en particular. Porque da la casualidad de que es tan pero tan simple el programa que no va a haber diferencia apreciable de velocidad. Pero si una cosa así llega a pasar con otro ejecutable más grande, esto no sería una solución aceptable. Me preocupan entonces los problemas que me pueda traer un antivirus tan estúpido. Y no es uno, aparentemente son varios (comparten engine?). El usuario que me lo reportó a mi correo personal me pasó un link muy útil a un sitio donde parece que uno puede subir un archivo y lo analizan con 56 antivirus diferentes. Según ese sitio, con el "-O2" el instalador daba positivo en 7 de los 56, pero con el "-O0" esos 7 dejaron de molestar y ya nadie sospecha de nada.


Pero lo mejor está por llegar. Lo que más me sorprendió de todo esto, fue la experiencia de uso de un antivirus. Recordemos que tomé como ejemplo el Avast, porque era gratuito y daba el falso positivo. Para empezar, lo instalé en una máquina virtual, abrí el ZinjaI e intenté compilar un "Hola mundo". Compilar eso llevó alrededor de 5 veces más que sin antivirus. Sí, más de medio minuto en un Core I5 de 3ra generación por un cout<<"Hola Mundo"<<endl; Esto solo ya alcanza para que nunca más quiera volver a usar un antivirus en mi vida. Pero hay más. En ese minuto, primero me apareció una "pequeña" notificación (ocupaba un tercio de la pantalla) para avisarme que la cosa se demoraba culpa del análisis, luego se vio en pantalla la consola de la sandbox que usa para el análisis, y al final otro cartel quedó pegado avisando que no había pasado nada. Ahhh!!! ¿En qué estaban pensando cuando diseñaron esto?

Pensemos como un usuario promedio: primero me asaltan con un alarmante cartel gigante que dice "Virus" en grande por todos lados (el usuario promedio no lee mensajes muy largos) para algo tan estúpido como un "Hola Mundo"; luego me confunden con dos ventanas de ejecución a la vez que parecen colgadas y de pronto una se cierra antes de que pueda ver qué está pasando; y para completar me molestan con más mensajes. ¿Todo para qué? ¡Para nada! Para perder un minuto en una tarea que debería tardar 5 segundos. No quiero ni pensar cómo funciona esto si en lugar de compilar un "hola mundo" quiero depurar un proyecto de verdad. Una atrocidad por donde lo mire. ¿De dónde me bajo un anti-antivirus?


En fin, si su antivirus se queja por el instalador de ZinjaI, prueben descargarlo otra vez (ya subí el cambio), y fíjense si el virus que detecta suena a "virus Mr. Juancito" (un nombre concreto, peligro!) o "troyano genérico" (una heurística pedorra). En fin, si me preguntan a mí, con mi muy poca experiencia frente a Windows modernos, con el MSSE me ha ido bien y no se ha entrometido mucho en mi trabajo. Pero si quieren ir más allá, mi verdadera recomendación sería que usen GNU/Linux y listo, que así bajamos varios pájaros de un tiro.

3 comentarios:

  1. Muy interesante entrada. Es hermosa la sensación de leer a alguien que ha pasado por pasos similares a los que uno va pasando. En windows pasé por todos los antivirus, los gratis y a los que les buscaba serials que duraban 10 días con tal de "mejorar la protección". Después pasé como 4 años sin antivirus y me ha ido bastante bien. Ahora estoy experimentando con MSSE hace casi un año y siento lo mismo que vos: no molesta, no agota recursos y funciona cuando debe. La mejor solución? estar en Linux.

    ResponderEliminar
  2. Linux es un OS mejor que WIN, pero WINDOWS company tiene convenio con miles de universidades del mundo, que hacen que los estudiantes se inclinen por su software, así que será muy difícil que el mundo gire un poco mas en entorno LINUX

    ResponderEliminar
  3. Los únicos antivirus que recomiendo (y basicamente son uno solo) son ClamAV (útil en servidores samba) e Immunet Free.
    Otra fuente de virus/adware es el mismo SourceForge donde hospedas los proyectos. Hace tiempo dejó de ser lo que era y se pasó al lado oscuro con prácticas dudosas y denuncias públicas por toda la red por incluir Adware en sus instaladores (el más mencionado debe ser el caso de FileZilla, o el de las cuentas de nmap y gimp-win). Incluso mi bloqueador de publicidad ("ublock origin") me frena y alerta cada vez que intento acceder a un dominio de sourceforge.

    ResponderEliminar