新しいUserland-RootKit Azazel

ルートキットJynxおよびJynx2について聞いたことがあるかもしれません。 これらはいわゆるユーザーランドルートキットであり、LD_PRELOAD変数の可能性を使用して、プログラムが起動する前にライブラリをロードできるようにします。 それらはすでに比較的古いですが、それでもうまく機能します。

2日前、 githubユーザーChokepointがルートキットAzazelを投稿しました。 Jynxソースコードに基づいており、多くの新機能があります。





それらを詳細に見てみましょう。



ポート非表示


Azazelは、netstat、ss、lsofなどのプログラムから隠すことができます。 設定中に割り当てられた特定の範囲のポートとの接続を隠します。 デフォルトでは、ポート61040-61050は平文のバックドアに使用され、61051-61060-はCrypthookに使用されます (これはsend / sendto / recv / recvfromをインターセプトし、その場で暗号化/復号化します)。 接続を非表示にするには、ソースポートをこの範囲内に収める必要があります。そのため、範囲からソースポートを設定するだけで、任意のコンピューターからリモートで接続できます。

$ ncat target 22 -p 61040 changeme Welcome! Here's a shell. root@host:/root #
      
      





  $ LD_PRELOAD=./crypthook.so ncat localhost 22 -p 61051 changeme Welcome! Here's a shell. root@host:/root/ #
      
      







PAMバックドア


おそらく最も興味深い機能です。 ご存知かもしれませんが、最新のプログラムの多くはPAMを使用してユーザーを認証しています。 したがって、PAM認証を操作できれば、システム上の任意のユーザーとしてログインできます。 AzazelはPAMモジュールを実装しませんが、既存のモジュールをインターセプトします。

  $ make client $ LD_PRELOAD=./client.so ssh rootme@localhost root@host:/ #
      
      





  $ su - rootme #
      
      







wtmp / utmpをクリーンアップする


PTYにログインすると、wtmpおよびutmpファイルがユーザー状態の保存とI / Oのログ記録に使用されます。 Azazelは、ポートバックドアの場合は自動的に、自動クリーニングが不可能な場合は手動で(たとえば、PAMバックドアを介してsshに接続した場合)の両方をクリーニングできます。

  $ w | grep pts/16 root pts/16 :0.0 Wed16 2:33m 0.16s 0.16s bash
      
      





  $ CLEANUP_LOGS="pts/16" ls utmp logs cleaned up. wtmp logs cleaned up.
      
      





  $ w | grep pts/16 $
      
      







アンチデバッグ


さて、ここで興味深いものは何もありません。 ptrace()によってインターセプトされ、-1を返します。

  $ strace -p $PPID Don't scratch the walls
      
      







ファイルとディレクトリを非表示にする


Jynxは、特定のUIDまたはGIDに属するすべてのファイルを非表示にすることもできました。 そのようなファイルを開いたり、読み書きしたりすることはできますが、ディレクトリをリストするときにそれらは表示されません。



プロセスの非表示


Azazelは、ファイルのような特定のGIDまたはUIDに属するプロセスを隠します。 ただし、隠しファイルとプロセスを何らかの方法で表示する必要がある場合があります。そのため、デフォルトではHIDE_THIS_SHELLの変数を使用できます

  $ env HIDE_THIS_SHELL=plz ncat -l -p 61061
      
      







LDDから非表示/再表示


Azazelはlddから非表示になり、再表示できます。 もちろん、これは興味深いものではありませんが、非常に効果的な方法です。



文字列の難読化


JynxおよびJynx2ライブラリの行を、たとえば文字列を介して見てみると、これは何らかの悪いライブラリであることがおそらく理解できますが、Azazelはすべての行をXORするだけであり、 文字列は正気を見せません。



このタイプのルートキットから身を守ることは非常に問題です。 rkhunterchkrootkitなどのユーティリティでは表示されません。 現時点で 、関数のインターセプトチェックする方法が1つありますが、理論的には、libdl.so自体から関数をインターセプトすることはかなり可能です。そうすれば、LiveCDとブレイン以外は役に立ちません。

あなたの車の世話をします。



All Articles