ルートキットJynxおよびJynx2について聞いたことがあるかもしれません。 これらはいわゆるユーザーランドルートキットであり、LD_PRELOAD変数の可能性を使用して、プログラムが起動する前にライブラリをロードできるようにします。 それらはすでに比較的古いですが、それでもうまく機能します。
2日前、
githubユーザー
Chokepointがルートキット
Azazelを投稿しました。 Jynxソースコードに基づいており、多くの新機能があります。
- デバッグ防止メカニズム
- 非表示、lsof、ps、lddから非表示
- ファイルとディレクトリを非表示にする
- リモート接続を隠す
- プロセスの非表示
- ログインを隠す
- PCAPを介したローカルトラフィックスニッフィングから隠す
- 完全なシェルを備えた2つのバックドア(PTY付き):
- -Crypthook accept()-バックドア
- -通常の受け入れ()-バックドア
- すべてのユーザーの認証用のPAMバックドア
- PTYのutmp / wtmpログのクリーニング
- xorによるコンパイルされたライブラリ行の難読化。
それらを詳細に見てみましょう。
ポート非表示
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するだけであり、
文字列は正気を見せません。
このタイプのルートキットから身を守ることは非常に問題です。
rkhunterや
chkrootkitなどのユーティリティでは表示されません。 現時点で
は 、関数のインターセプト
をチェックする
方法が1つありますが、理論的には、libdl.so自体から関数をインターセプトすることはかなり可能です。そうすれば、LiveCDとブレイン以外は役に立ちません。
あなたの車の世話をします。