初めに
JNSAが、2023年08月17-18日に学生向け勉強会「セキュチャレ・入門編 第1回」を行いました。
- https://www.jnsa.org/seminar/2023/edu/index.html
- 主催
- NPO日本ネットワークセキュリティ協会 教育部会
- 対象
- 情報セキュリティ入門者
- (コマンド入力未経験者、これからセキュリティの学習をスタートする方も歓迎します)
内容としては、TryHackMeのKenobiの攻略をしながら、ゼロからペネトレーションテストの基礎を学ぶものでした。
こちらについて、時間的/進行的に一部補足説明をしておいた方が良いように思われたので、この記事でデブリーフィングを行いたいと思います。
免責事項
- 無知故に嘘を書いてるかもしれません、知らんけど。
- 解釈の仕方は人により微妙に異なることがあります。その為、私の現時点での見解を基にした記載、となります。
- JNSAの公式見解ではありません。その場に居合わせた副講師の個人的な感想です。間違いの指摘以外は
> /dev/null 2>&1
で。
本コンテンツは、TryHackMe:Kenobi のwriteup的な物となります。
学習の仕方について
2日間 且つ コマンド入力未経験者向け という事もあり、説明を受けて記載の通りコマンドを打って進めた状況と思います。
先ずは「すべてをクリアする」ことで全体像を把握することが重要なので、最初はそれで問題ありません。
もし技術を身につけたいと思うのであれば、「再度同じ問題を繰り返し、何を指示され/行ったのか を理解する」ことが重要です。
一度クリアしたことでおおよその全体像が把握できたと思います。全体像が把握できたからこそ、指示されたコマンドはどういう意味があったのか、等を振り返ることができます。各セクションで実施していた内容はどういう意味があり、どのように考え、どのようなコマンドやツールを使っていたのか、を確認しましょう。その過程で、必要な物は体が覚えていくと思います。
- 大切なのは、コマンドを覚える事ではなく、目的とそれを達成するための手段が想像がつくこと、です。
- コマンドは手段であり、状況によってオプションやコマンド自体を変える必要があります。
- 故に、この段階ではどの情報を得る必要があるのか/どのようなことができればよいのか、を理解できれば、それに合致したコマンドは最悪検索して探せばよいのです。
- とはいえ、コマンド等を知っていれば選択肢の幅が広がるので、よく使うものは覚えていくと楽になります。
振返りとして、考えておいた方がよさそうなことを書いておきます。
1. TTP(戦術/技術/手順)の理解
Kenobi攻略時に色々な作業を行いましたが、これは侵害のための戦術を基に色々な手法を試していました。
MITRE(r) ATT&CKやLockheedmartin CYBER KILL CHAIN(r)などを参照し、攻撃者の戦術や利用技術などを学ぶとよいと思われます。
- https://attack.mitre.org/
- https://www.lockheedmartin.com/en-us/capabilities/cyber/cyber-kill-chain.html
戦略ではなく戦術である点に注意が必要です。
- 攻撃者の戦略は、例えば攻撃グループがどのような方法で意思を達成するか、を示します。例えば「お金を稼ぐことを目的とし、ランサムウェア攻撃により身代金として資金を得る」「ランサムウェア攻撃の為に、RaaS(Ransomeware as a Service)を用いる」などです。これらを知るには、攻撃者グループに対する観測や調査などが必要です。
- 他方、戦術は目的を達成するための方策を示します。「ランサムウェアに感染さえるためにはどのような手順を踏ませるのか」「組織内サーバの管理者権限を得るために、偵察/マルウェアの配布/侵害/インストール/遠隔操作 をしていく」などです。これらはMITRE ATT&CKのEnterprise tacticsやCYBER KILL CHAINの7つのステップが参考になるでしょう。既存の攻撃を基に、戦術や技術
1.1. Tactics/戦術
細かい説明は、ATT&CKやCYBER KILL CHAINの各種解説等を見てください。サイバー空間に限らず、現実世界での諜報活動でも同様の戦術が取られます。
全体として、おおよそ以下のステップから成り立っています。
- 偵察
- 対象がどのような状況であるのかを確認し、攻撃に有効な情報を確保する
- Kenobi roomでは、nmapによるポートスキャンやバージョン確認、httpの調査、等が該当
- SIGINTやOSINTやHUMINT等もここに含まれる
- 初期アクセス
- 偵察によって得た情報を基に、侵害の為の準備を進める
- マルウェアの作成や配送など
- Kenobi roomでは、一般ユーザのSSH鍵を取得する所までが該当(と当方は考える)
- 侵害
- 初期アクセスを基に、内部へのアクセスを得る
- Kenobi roomでは、おそらく、ProFTPD脆弱性の利用等が該当
- 永続化
- 安定的なアクセス環境を得る
- マルウェア等で侵害した場合、ホスト再起動時にも再度C2サーバにアクセスできるようにマルウェアが起動す必要がある、等
- Kenobi roomでは、SSHによる恒常的なアクセス獲得が該当
- 安定的なアクセス環境を得る
- 目的の達成
- 攻撃者により、ランサムウェアによる脅迫、データの破壊、秘匿情報の確保などがある
- Kenobi roomでは、管理者権限の奪取やrootが持っているファイルの閲覧、が該当
KILL CHAINで言えば、この順番で侵害が進み、どこかの段階でブロックできれば(チェーンが切れれば)目的は達成できないと考え垂れています。
- 例えば"COMMAND & CONTROL(C2)"がブロックできれば、マルウェアに感染しても外部からの遠隔操作は防げるため、被害は最小限に収まる
- C2のブロック: C2への通信を遮断する。Firewallなどによる通信規制等。
Techniques/技術, Procedures/手順
ATT&CKのページでは Techniquesの詳細としてProceduresが記載されています。
- 例えば、Tactics: Reconnaissance(偵察)では、Techniques:T1595.002:Vulnerability Scanningがあり、Procedureとして攻撃者がどのようにしているかの例が記載されている
- また、防御時に有効なmitigation(緩和策)やdetection(検出)方法なども書かれている
- 例 https://attack.mitre.org/techniques/T1595/
- ネットワークのトラフィックやフローを監視する、等
- 例 https://attack.mitre.org/techniques/T1595/
Kenobi roomの攻略時は、Techniques辺りのアクションを参考にするとよいかもしれません。
2. コマンドの理解
今回使ったコマンドについて、何をするものなのかやオプションなどについて理解を深めた方が良いと考えます。
- 何をするものなのか
- nmap
- ポートスキャンをする。ポートスキャンとは?
- スキャンをするので、引数として最低限ターゲット(IPやFQDN)は必要
- nc
- NetCat(Netの猫、ではない。cat=concatenate(連結)で、ネットに流れてるデータを標準出力に流すもの、の意味と思われる)
- 通信をするものなので、引数として最低限ターゲット(IPやFQDN)とポート番号は必要
- etc...
- コマンドが何の略なのか、を考えると覚えやすいし理解がしやすい
- 用途を考えることで、必須オプションの想像がつきやすい
- 最初はデフォルトオプションで試してみて、必要に応じて/徐々にオプションを追加して覚えるのがよさそう
- とはいえ、
ファイル解凍は tar xvfz <ファイル名.tgz>
のようにオプション付きで覚えることもある- 同時に
ファイル圧縮は tar cvfz <ファイル名>
も覚えていれば、cはCompress/xはeXtractかも?と想像がつきやすい - あと、vは詳細表示、fはファイル、oはoutputfile、のような似たようなオプションパターンがある。(がそうでないときも多々ある)
- 同時に
- とはいえ、
- 使わないコマンドは忘れるので、忘れたときに探しやすいようにしておくとよい
- まとめサイトのリンクを保存しておく、どこかにまとめておく、等
- "使いたいときに必ず忘れるべんりなコマンド"
- コマンドのマニュアルは
-h
オプションや、man [コマンド]
などで調べられる
- nmap
3. 応答を確認しよう
何らかのアクションをした後は、何らかの応答が返ることが普通です。返される応答に敏感になりましょう。
- 何らかの応答
- エラーがあれば、エラーコードや理由が返されるはずです
- 404 not found, File not Found等
- 接続系のコマンドは、接続成功時にバナーが出ることが多い
- FPT接続なら、
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [10.10.0.1]
などが表示される
- FPT接続なら、
- ものにより、その時点では応答をしないものもある
- エラーがあれば、エラーコードや理由が返されるはずです
- エラーは、読めばわかる場合もあるし、分からなければ検索するとよい
- だいたいは、引数がおかしい、該当ファイルが無い、等読めばわかりそうなものが多い
Kenobi roomの攻略について
まずは、調査ごとに全体像を洗い出しましょう。
- 例示はしますが、各自分かりやすいようにまとめるといいと思います。
手順以外でもやり方はありそうなので、それを検討してみるのもよいかもしれません。
id_rsaの取得の別の方法を検討
おおよそ以下のような手段を用いました。
- SSHの鍵の位置を特定
- SMB接続で取得したlog.txtに記載されている
- SSHの鍵を取得
- 取得には、自由にアクセスできるnfs共有のanonymousを使う
- 何とかして、上記位置に鍵を置く
- ProFTPDの脆弱性を利用して、ファイルコピーを行う
ファイルをやり取りすればいいだけであれば、他の方法も考えられます。できることを増やすために、別の方法での取得を試してみましょう。
- WEBサービスを提供しているので、そこから落としてもよいのではないのか
- 既にSMB接続できているので、ここで共有することも可能か
実際に試してみました。
- WEBサービス利用
- Ubuntuでありパッケージ管理システムaptで導入した場合は、通常/var/www/htmlがWEBサイトのディレクトリになります。
- webサーバはwww-dataユーザで起動し、/var/www/htmlは755のroot:rootで、一般ユーザは書き込みができない
- アクセス権の変更や所有権の変更をするためにはroot権限が必要
- apache2はwww-dataで起動しているため、WEBサーバプロセスの脆弱性で侵害できても、権限昇格をしないとwww-dataの権限しかないのであまり有効に使うことはできない。
- SSHアクセス後に確認しても、やはりそのようになっている
- webサーバはwww-dataユーザで起動し、/var/www/htmlは755のroot:rootで、一般ユーザは書き込みができない
- /var/www/html/id_rsa として、http://[KENOBI]/id_rsa で取得することはできなさそうです
- Ubuntuでありパッケージ管理システムaptで導入した場合は、通常/var/www/htmlがWEBサイトのディレクトリになります。
- SMBでの配置
- anonymousの共有元は、
C:\home\kenobi\share
となっています。- kenobiユーザはおそらくアクセス権はあると考えられる
-
/home/kenobi/.ssh/id_rsa
を/home/kenobi/share/id_rsa
にコピーするだけで良さそうだ
- 同様の手順で配置ができました
-
smbget -R
等でlog.txtともどもダウンロードする
-
- anonymousの共有元は、
残存する脆弱性
権限昇格の脆弱性が必要なので、その他の脆弱性も検討してみましょう。
- 有名なもの、ありがちな物、がないか調べる
- 過去に権限昇格の脆弱性で有名になったものでめどをつけてみる
- bash, systemd, gnome, etc…
- bashは無し、systemdはあるけど前提条件が適合せず、gnomeはなさそう、etc
- 一般ユーザでログインできている段階なので、いろいろなバージョンを見てみるとよいかも
- bash, systemd, gnome, etc…
- 使用しているバージョンを特定し、例えばserchsploitでExploitがあるかを検索する
- 今回は、これだ!というものは見つけられなかった
- 過去に権限昇格の脆弱性で有名になったものでめどをつけてみる
今回の対象はBoot2Rootなので、特に手段は問いません。
しかし現実世界では、ありがちな攻撃は検知されますし、防御されていることが普通です。例えば"不審なアクセスは無いか"などを検知/アラート通知するような製品は多数あります。自分の起こしたアクションが、どのように記録され、それは一般的に監査される行動なのか、を考えるのもよいかもしれません。
- 今回であれば"admin.html"は明らかな罠であり、httpdのアクセスログでこれへのアクセスを検知した場合は「悪意のある探索がされている」と認識して対処を行う、等の可能性があります。
終わりに
技術的な観点の研鑽も必要ですが、全体を見渡すことを忘れないでいるとよいかもしれません。
- 目的に対して、どのような手段や方法が取り得るのか
- CYBER KILL CHAINやATT&CKのような戦術はどうするのか
- 戦術に対して、どのようなTechniqueが使えそうなのか
- Technique/Procedureで行動した場合、どのような結果が発生すると想定されるのか
- コマンドは、どういう構文が求められているのか
- 対象を引数として必要そうなのか
- コマンドにより、どのような事が起こると想定されているのか
- 新しい視点は無いのか
- 解答例以外のやり方は無いのか
今回のようなイベントが引き続き開催されると楽しそうですね。