どうも!職業訓練生のがっちゃんです!
ただいま長期人材育成コースの「情報セキュリティ管理者資格」2年コースを絶賛受講中です。自分の復習と、どなたかの参考にと思い講義録をまとめて公開しています。
今回は、情報セキュリティ管理者資格コースの先輩たちが参加したコンテスト「MBSD Cybersecurity Challenges 2018」の課題を授業でやってみた件について、まとめてみました。
私たちも2019年のコンテストに参加しました。実は私の参加したチームが、全国で10位以内に入賞し、東京決勝大会に出場したんです!この件については、また別の機会に触れるとしまして、今回は2018年の課題です。
2018年の課題は以下の通りです。
三井物産セキュアディレクション MBSDブログ
「MBSD Cybersecurity Challenges 2018の舞台裏」より抜粋
ある会社で開発したSNSのシステムにセキュリティ上の問題があると指摘されていたにも関わらずそのまま運用を続けていたところ、何者かに攻撃されてしまったようです。あなたのチームは、攻撃の全貌を解明できるでしょうか。
――どうやら今回はセキュリティ上の問題を指摘されたわけではなく、攻撃を受けてしまったようです。果たして、参加者は再び訪れたこの会社の危機を救えたのでしょうか?
今回のコンテストの概要と最終審査会に至るまでの審査について、簡単に説明します。第一回、第二回までのコンテストでは、「システムにおける脆弱性の調査」が課題でしたが、今回は前回までとは趣向を変えた「攻撃を受けてしまったWebサイトの調査」が課題であり、いわゆるデジタルフォレンジックをテーマとしたものとなっております。参加者の方には、攻撃を受けてしまったLinuxで構築されたWebサイトのVMデータを課題としてお渡しして解析していただき、調査結果をまとめたレポートを作成していただきました。なお、レポートには以下のような項目をまとめていただきました。
- 攻撃に使われた脆弱性(攻撃者はどのような脆弱性を使って、どのような手順で攻撃を行ったのか)
- 被害の範囲(どのようなデータがどのくらい、漏えいや破壊されたのか)
- 対応方法(直近で行うべき暫定対策や、長期的に取り組む恒久対策など、対応方法の提案)
- 調査で行った工夫(ツールを使った・作った、チームメンバーの役割分担、調査手法など、解析を網羅的・効率的に実施するために行った工夫)
授業はほとんど自習のような形式でしたが、私は以下のように進めていきました。
※ブログの最後に、今回私が提出したレポートを掲載しています。こちらに詳細が書かれていますので、参考にしていただければと思います。
※本当にすごく勉強になったので、皆さんにもぜひ、この課題を体験していただきたいと思うのですが、本課題のデータは当初の目的以外には使用しないこと!と言われているので、ここでは課題用のデータを掲載することができません。
まずは攻撃されたSNSサイトを再現
実際に攻撃されちゃったサイトを再現しないと、何がどうなったかも分かりません。まずは、仮想環境ツール「VirtualBox」や「VMWare」で、攻撃されたSNSサイトを再現していきます。
課題用の「VMイメージ」をそのまま使えば、ほぼ完成なのですが、ネットワークの設定を少しいじらないと、SNS画面をブラウザに表示させることができません。
1.NICのデバイス情報が、初期状態では lo のみ存在し eth0 がないため追記が必要なため、以下のファイルを修正する必要がある。
/etc/udev/rules.d/ 直下の「70-persistent-net.rules」ファイル
2.仮想化ソフトのネットワーク設定を「ホストオンリーアダプタ」に変更。これでもネットワークに接続できない場合は「ブリッジアダプタ」に変更。
※毎度のことですが、仮想環境で一番悩むのが、このネットワーク設定です。以前設定した方法と同じようにしても、何かが邪魔をするのか、うまくいかないことがあったりします。
つぎに攻撃前のSNSサイトを再現
攻撃前のSNSサイトについては、「VMイメージ」の提供はなく、PHPファイルだけのデータとなっており、攻撃後サイトのように、仮想環境にデータをそのままインストして、とはいきません。
今回は簡単に、攻撃後のSNSサイトをもう一つ作成し、「File Zilla」というファイル転送ソフトを利用して、攻撃後のサイトのファイル、フォルダを攻撃前のサイトのファイル、フォルダに書き換えて再現しました。
攻撃された場所をさがす
私にはどこを攻撃されたのかを調べる技術もなく、どんなツールを使ったらよいのかも手探りの中、始めたました。学校なのですが、基本、丁寧には教えてくれません。「自分で悩みながら、方法を探しながら、多少知識のあるクラスメイトから聞きつつやっていきなさい。」というスタンスなので、メチャクチャ遠回りして、答えにたどり着きます。答えにたどり着かない時もあるけれど。
後で思い返すと、最初から答えを欲しがってすぐに先生に聞きに行くよりも、はるかに勉強になっていることが分かります。なによりも、悩んで悩んで寄り道するのが楽しい。一種の推理小説というか・・・。もしかしたら推理小説好きな人が、こんな調査したらのめりこむのかも。
話は戻りまして、「どこを攻撃されたか!?」を探さないといけないのですが、私は見た目から探すようにしました。それしか方法が見つからないからなのですが、なんともアナログな探し方から始めたものだと思います。まずは「攻撃前のサイトのデータ」と「攻撃後のサイトのデータ」を右と左に並べてにらめっこ。
すると、消されたファイルや、増えたファイルやフォルダがあるじゃないですか!?それに、ファイルの最終更新日も違うのがあったりする。それをきっかけにログデータを調べていくことにしました。
SNSサイトの脆弱性をさがす
こちらについては、攻撃前のSNSサイトを見ていきました。ウエブサイトの脆弱性診断については、以前参加した「MBSD2019」コンテストが「WAFで穴だらけのWEBサイトを守れ!」みたいな課題でして、その時に脆弱性の診断については経験があります。その時も、診断ツールを使ったわけではなく、サイトの中の入力欄を自分でコマンドを入力していって探していただけなんです。今回もその時と同じコマンドを使って、探していくことにしました。
一部、脆弱性診断ソフトとかも使ったんですが、結局あんまり使い方が分からなくって、使うのを途中でやめてしまいました。次回までには必ず使えるようにしておきたいものです!
調査のために使用したツール
最初はどうしたらいいのか分からずに、ログデータもナマのまま見ていました。でも、ちょっとログデータの見た目を加工したらすごく見やすくなったり、脆弱性の診断をしてくれるソフトを見つけたりすると、調査が結構はかどりました。
その時に使ったツールを紹介しておきたいと思います。
●攻撃前、攻撃後サイトの仮想環境の作成
「VirtualBox」もしくは「VMWare」、「FileZilla」
●脆弱性診断
「OwaspZap」「Nmap」
●フォレンジック調査
「Apache Log Viewer」、「chrome」の検証コマンド、「Git Bash」
※インストールだけで終わり、授業ではほとんど試せなかったのですが、「Kali Linux」もオススメです。自宅でやってみたら中々面白かったですよ。
調査のまとめ
私が調査した結果、以下のような脆弱性や被害を確認することができました。
●MySQLのrootパスワードが設定されていない。
●「User List」画面で「%」などのワイルドカードを入力すると、全ユーザーが見れる。
●URLに直接「readdiary.php?id=1」と直接入力すると全ユーザの日記を見ることが可能である。
●「Write Diary」画面の日記入力欄にJavaScriptを入力し、送信することが可能である。
●「Send Message」画面で、あらゆる添付ファイルを送信することが可能である。
●「login.php」が改ざんされ、入力したIDとパスワードが盗み取られてしまう。
●「index.php」を削除されたため、ログイン後、エラー画面が表示されてしまう。
●「index.html」がアップロードされてしまっている。
●「.ssh」フォルダを作成し、公開鍵を置かれ、外部からsshログインが可能となっている。
登場人物と被害
日時 | 推定される犯人 | 行動、被害など |
9/19 12:59 | 192.168.11.204 | SQLインジェクションによるユーザリスト、フレンド情報の漏洩 |
13:34 | 192.168.11.100 | Nmapによるポートスキャン、Niktoによる脆弱性チェック。被害なし。 |
16:50 17:42 |
192.168.11.122 | Pythonのrequestsによるウエブサイト情報の取得。sqlmapによる、sqlインジェクションの脆弱性調査。いずれも被害なし。 |
9/26 10:59 | 192.168.11.204 | 公開鍵認証によるサーバへの侵入。 |
11:02 | 〃 | 「login.php」の改ざんによるID、パスワードの窃取。 |
14:10 | 〃 | 他人になりすまし、日記にXSSを仕掛ける。 |
9/28 15:17 19:00 |
〃 | 「.z」フォルダに保存されたユーザIDとパスワードの窃取。 |
15:42 | 192.168.11.143 | 「sendmessage」画面のファイル送信機能の脆弱性を利用しバックドア「webshell.php」を送信、フォルダ情報やlinuxユーザ情報を取得した。 |
18:11 | 192.168.11.204 | 「index.hrml」ファイルをアップロードする。 |
18:15 | 〃 |
「index.php」ファイルを削除する。 |
調査結果は以上のとおりです。
最後に、今回提出した私の報告書を添付しておきますので、よかったら参考にしてみてください。
MBSD2018report手元にダウンロードされたい方はこちらからダウンロードしてください。45ページありますので印刷時にはご注意を!
それでは本日も最後までお付き合いいただき、ありがとうございました!