Linuxサーバフォレンジック【基礎編】 TryHackMe-Writeup

デスクトップ画面の背景
※当サイトはプロモーションが含まれています

こんにちは、ぎんたです。

今回はTryHackMeで提供されている「Linux Server Forensics」というルームの攻略の過程を記事にしています。

ルームはこちらからアクセスできます「Linux Server ForensicsのURL」。

このルームでは侵害されたサーバを分析することで、痕跡の調査に有用なアーティファクトについて学ぶことができます。

ぎんた

Taskごとにアーティファクトの要約を記載し、Linuxサーバのログや設定ファイルなどを分析していく過程を解説していきます。

Task1,6,10は演習マシン起動のインストラクションのため、省略しています。

  • Linuxサーバのログ分析の基礎を知りたい方
  • 永続化・Webサーバのアクセスログ・プログラムの実行痕跡の調査について概要を知りたい方

が今回の対象です。

このルームも無料でアクセス可能なので、試してみたい方はぜひやってみてください。

目次

Apacheログ分析-Task2

要約

Apacheのアクセスログには以下の項目が含まれます。

  • 送信元アドレス
  • レスポンスコードと長さ
  • user-agent

ブラウザからのリクエストには、ブラウザの識別に利用できるuser-agentが含まれます。

このTaskではNmap、SQLmap、DirBuster、Niktoなどのスキャンツールがアクセスログに残す文字列を元に痕跡を調査します。

Q 何種類のツールがサーバにリクエストをしましたか

ヒントにはツール名での探索を実行するように記載があったので、要約に出てきた4つのツール名が含まれるアクセスログをgrepで検索しています。

cat access.log | grep -io ‘nmap\|\sqlmap\|dirbuster\|nikto\|’ | sort | uniq

uniqコマンドを使って重複を排除するために、事前にsortコマンドを使用しています。

task2のアクセスログ内のツールが使われた痕跡

該当のツールは2つありました。

Q Nmapが要求するパスを答えてください。

以下のコマンドを実行し、nmapで要求されたパスを特定します。

cat access.log | grep -i nmap

task2のアクセスログ内のnmapが使われた痕跡

赤枠で囲った箇所が答えです。

Webサーバの分析-Task3

要約

ウェブスキャナにより発生する、通常とは異なるトラフィックを確認します。

Q ユーザーがファイルをアップロードできるページはどこですか

ウェブサイトにアクセスし探索したところ、以下のURLでアップロードできる機能を発見しました。

task3のWebサイトのアップロードページ

Q サーバにファイルをアップロードしたIPは?

ヒントを確認するとPOSTで検索するように指示がありました。

以下のコマンドを実行し、サーバにファイルをアップロードしたIPを特定します。

cat access.log | grep POST

task3のアクセスログ内のPOSTメソッドの痕跡

ログが2行出力され、2つとも同一IPでしたので回答したら正解でした。

Q 露出したセキュリティ情報をサーバに残したのは誰ですか?

露出しているとのことなので、外部からセキュリティ情報を閲覧できる状態と考えました。

Task2でDirbusterを実行した形跡があったので、「GETメソッドでステータスコード200と記載のDirbuster実行によるアクセスログ」を探索します。

cat access.log | grep -i dirbuster | grep GET | grep 200

task3アクセスログ内のセキュリティ情報への痕跡

「SECURITY.md」というセキュリティ情報と思われるファイル名を発見しました。

Webブラウザで該当のパスを確認したところ、Fredという名前が記載されていました。

task3のセキュリティ情報でfredを発見

永続化メカニズム-Task4

要約

攻撃者はリモートファイルインクルージョン(RFI)により侵入したようです。

永続性メカニズムの証拠がないか確認しましょう。

永続性を維持するための方法に以下のものがあります(これらに限定されるものではありません)。

  • cronの調査
  • Services/systemdの調査
  • bashrcの調査
  • Kernel modulesの調査
  • SSH keysの調査

このTaskではcronの調査をおこないます。

Q 攻撃者はどのようなコマンドとオプションを使ってバックドアを確立したのでしょうか?

cronはLinuxのシステム管理で使用されるもので、ジョブを定期的に実行するためのプロセスです。

設定は/etc/crontabで行われるので、内容を確認してみます。

cat /etc/crontab

task4の/etc/crontabの内容

「sh -i」コマンドをroot2アカウントで1分ごとに実行するバックドアの設定があるようです。

左側に5か所「*」と記述されているため、毎分実行されます。

IPアドレス(192.168.56.206)、ポート番号1234との接続が定期的に行われます。

ユーザアカウント-Task5

要約

前のタスクのコマンドは、root2アカウントで実行するように設定されているようです。

Linuxには、アカウント情報が保存される場所がいくつかあります:

/etc/passwd

アカウント名が含まれていますが、パスワードハッシュは含まれません。

/etc/shadow

アカウント名とパスワードハッシュが含まれています。

パスワードハッシュは機微情報のため、通常一般ユーザーに対する読み取り権限はありません。

Q 2つ目のrootアカウントのパスワードは何ですか?

/etc/passwdファイルは一般ユーザーでも読めるので、以下のコマンドで確認します。

cat /etc/passwd

task5のパスワードファイルの内容

上記の場合、root2ユーザーのホームディレクトリは/rootで、使用するシェルは「/bin/bash」となります。

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash


user01:x:500:500::/home/user01:/bin/bash

各行に、アカウント情報が記述されています。「:」で各情報が区切られています。記法は以下の通りです。

第1フィールド:ユーザー名

第2フィールド:パスワード

第3フィールド:ユーザーID

第4フィールド:グループID

第5フィールド:コメント欄

第6フィールド:ホームディレクトリ

第7フィールド:ログインシェル

出典:LinuC

第2フィールドのパスワードは通常記載されません。

root2アカウントの横に通常とは異なる文字列が記載されていました。

ヒントを確認するとハッカーフォーラムからコピーされた可能性のあるものと記載があったので、この文字列をそのままGoogleで検索しました。

task5のパスワード平文

passwdファイルを使った権限昇格の手法を記載しているサイトのようです。

Passwordの横の箇所に記載された平文のパスワードが答えです。

Apacheログ分析2-Task7

要約

スキャナから発信されたトラフィックの特定について

  • 通常とは違う異常な間隔で送信されるHTTPリスエストを確認する
  • 非標準のメソッドでHTTPリクエストを送信しているかを確認する
  • ブルートフォースのような異常な数のHTTPリクエストを確認する

Q 非標準の HTTP リクエストのうち、1つを挙げてください。

HTTPリクエストでよく用いられるPOSTとGETメソッド以外のログを抽出します。

cat access.log | grep -iva ‘post\|get’

task7の通常とは異なるメソッド

GXWRという通常使われなさそうなメソッドが記載されています

Q Nmapスキャンは何時に実行されましたか?(フォーマット: HH:MM:SS)

上記赤枠の時間を回答したら正解でした。

永続化メカニズム2-Task8

要約

SSH-keysはアクセスを維持するもう一つの優れた方法です。

authorized_keysファイルへの追加の痕跡を探すことには価値があるかもしれません。

Q authorized_keysファイルの1つにあるユーザー名とホスト名の組み合わせは? 形式:ユーザー名@ホスト名

rootのauthorized_keysファイルを確認するためには、sudoを使いroot権限で閲覧する必要があります。

「sudo su」コマンドを使ってrootユーザーに切り替えた後に「/root/.ssh」に移動します。

task8の.sshへのディレクトリ移動

authorized_keysファイルを確認すると、ユーザー名とホスト名の組み合わせが記載されていました。

task8のauthorized_keys確認
ぎんた

攻撃者は事前に秘密鍵と公開鍵をペアで作成し、rootフォルダに公開鍵(authorized_keys)をサーバに登録することで、外部からSSHを使ってrootとしてアクセスすることができるようになるよ。

永続化の手段として良く使われる手口なので、インシデント調査の際にはこの部分も確認するといいです。

rootフォルダに公開鍵を追加するためにはroot権限が必要です。

プログラム実行履歴-Task9

要約

プログラムの実行痕跡が残る場所は以下の箇所です。

bash_history

bashで実行されたコマンドの履歴が含まれています。

auth.log

sudoを使って実行されたすべてのコマンドの履歴が含まれています。

history.log (apt)

aptを使って実行されたすべてのタスクの履歴が含まれます。

プログラムのインストールと削除を追跡するのに便利です。

systemd

systemdサービスは journald システムにもログを残します。

これらのログはバイナリ形式で保存され、journalctlのようなユーティリティで読む必要があります。

Q  rootのbash_historyファイルに存在する最初のコマンドは何ですか?

rootのbash_historyファイルを確認するので、「sudo su」コマンドを実行しrootユーザーに切り替えます。

切り替えた後、「/root/.bash_history」ファイルを確認します。

task9のpasswdファイルの確認

攻撃者によりログを消されていることも多いですが、インシデント調査の際は必ず確認するといいでしょう。

永続化メカニズム3-Task11

要約

systemdで実行されるスクリプトはバックグラウンドで実行され、システムがクラッシュしてもいつでも再起動できるため、マルウェアはsystemdを使用して永続性を保つことができます。

systemdのサービスは.serviceファイルで定義され、以下の内容を含むことができます。

  • サービスが起動するときに実行されるコマンド
  • サービスが実行されるユーザー
  • 任意の説明文

systemctlを実行すると、システムにロードされているすべてのサービスが一覧表示されます。

コマンドに –type=service –state=active を追加すると、実行中のサービスだけをリストアップすることができます。

疑わしいサービスの名前が見つかったら、systemctl status <サービス名> を実行することで、より多くの情報を抽出することができます。

Q 何が起きているのかを把握し、フラグを見つけましょう?

以下のコマンドを実行し、現在稼働しているサービスを列挙できます。

systemctl –type=service –state=active

ヒントではIpManagerサービスを確認するよう記載していましたので、精査してみます。

「systemctl status IpManager.service」を実行

task11のiPmanagerの詳細を確認

赤枠のスクリプトを実行するようなので、内容を確認します。

確認したところ、フラグを取得できました。

task11のflagを確認

サイバー攻撃が行われた時間が分かっていれば、以下のようなコマンドで時間を絞ってサービスのログを調査することもできます。

今回はコマンドの紹介にとどめます。

sudo journalctl –since “2023-05-21 00:00” –until “2023-05-21 23:59”

まとめ

今回はTryHackMeで提供されている「Linux Server Forensics」というルームの攻略を通して端末の調査を行ってきました。

振り返り

Linuxサーバの永続化・Webサーバのアクセスログ・プログラムの実行痕跡の調査についての概要について説明しました

この記事が少しでも役に立てれば幸いです。

以上、ぎんたでした。

サイバーセキュリティを学ぶ上で必要な攻撃と解析に関する他の記事は、以下のリンクで確認できます。

学習に関しましては、以下のセキュリティの勉強法、おすすめの学習本・動画の記事が多くの方に読まれています。

資格の記事については以下の記事がおすすめです。

ITエンジニアへの転職については以下の記事がおすすめです。

その他学習・転職関連に関しましては、以下の記事もあわせて読まれています。

ぜひご覧ください!

よかったらシェアしてね!
目次