2021年12月31日金曜日

セキュリティ・ミニキャンプオンライン2021 参加記 ~内容編3:サイバー攻撃対応 入門~

ミニキャンプオンライン2021「サイバー攻撃対応 入門」の募集課題、事前課題、講義、修了試験についての記事です。

他講義リンク

 

サイバー攻撃対応 入門

攻撃者のことから学び、演習で様々なログを追って攻撃シナリオを整理するという講義でした。

講義タイトルでは想像出来なかった面白い内容(ぼくの頭が弱いだけかも)で、一つ一つの証拠から攻撃者の動きが見えたときは気持ちよかったです………

募集課題

pcapファイルが渡され、「人がWebアクセスした際に発生したと考えられる通信のクライアントが使用しているTCPポート番号」を答える問題でした。ミニキャンプオンライン概要ページ(https://www.security-camp.or.jp/minicamp/online2021.html)募集要項の問題3にあたります。

pcapをWiresharkで開き、HTTPのフィルタをかけたところ、大量のcurlからのGETリクエストが送られているのを観測できました。curlを使い、同様のリクエストを人が送るとは考えづらいため、それ以外のパケットを探しました。

すると、cssやjsの200番が返っているのが見え、その前のGETリクエストを調べたところ、Firefoxからのものが見え、これのポート番号(42400)を解答として出しました。

…と出した当時はこれでええべだったんですけど、最近Discordでこの件が触れられていて、「UAは偽装できるため、その点に触れられているものに加点している」とのことで、無事満点は逃していそうです。俺よく選考通ったな。

また、他の方の解答だと、ポート番号の範囲がLinuxのエフェメラルポートの範囲であるという点とUAがLinuxという点で偽装とは考えづらい、という考察をしていらっしゃる方がいて、とても論理的な解答だ…と感動しました。みんなすごい…

事前課題 

Linuxコマンドを使ったログ解析と、Wiresharkを利用したログ解析を行いました。

前者では主に

  • catコマンド:ファイルを標準出力に出力
  • cutコマンド:区切り文字を指定し、要素を取り出して出力
  • grepコマンド:文字列検索
  • sortコマンド:ソート
  • uniqコマンド:重複している行を削除
  • wcコマンド:行数をカウント 

をパイプで組み合わせて「○○の回数」や「○○のTOP10」を調べるといった課題を行いました。

後者はWiresharkのフィルタや統計機能、TCPストリームなどの基本的な使い方を学べました。

事前課題全体を通して、ログ解析に利用するツールに慣れることができました。

講義

初めに書いた通り、まず初めに攻撃者のことについて学びました。

攻撃者には、そもそも攻撃者が「なぜ」攻撃を行うのかという目的が存在し、その目的を達成するために「いつ、どこで、何を狙うか」という対象があり、最後にその対象に対しての手法が存在します。

サイバー攻撃に対応するためには、手法を知ることが最も重要です。そのため、次に実際にどのような流れで攻撃が行われるかについて学びました。

サイバー攻撃の流れをモデル化したものがいくつか提唱されており、

等があり、今回はUnified Kill Chainに沿って実際にどのようなツールが使われ、どのようなことが行われているかを知りました。 

このモデルでは大きく「初期侵入」「ネットワーク内伝搬」「目的実行」と分かれています。

初期侵入がよくCTF等で触れる部分(?)で、標的の情報収集であったり実際の攻撃を行ってシェル操作をできるようにするといったところを指します。攻撃が成功した後、シェルを操作するためにWeb上で任意のコマンドを実行できるようにWebシェルを置いたり、標的サーバから自前のサーバへコネクションを張って操作できるようにするリバースシェルという方法があることを知りました。

初期侵入が成功した後は内部の探索や認証情報窃取、他のシステムへの水平移動が行われてしまうとのことです。その後は目的実行と移り、情報収集が行われ持ち出されてしまいます。

サイバー攻撃を防ぐにはいかに初期侵入を防ぐことが大事と感じたとともに、万が一攻撃を受けてしまったらネットワークからの切り離し等の迅速な対応が必要だなとより感じました。

その後、様々なログ等から攻撃者がどのような動きをしたのかを時系列で整理するといったことをしました。演習の詳細を書きたいところですが、事情により内容公開がNGなので、扱ったことのみ書きます。問題があったら消えます…

扱ったのはIDSアラートログ、SSHイベントログ、Webアクセスログの3種類のログファイルと、パケットキャプチャファイル、ディスクイメージです。ログで大まかな攻撃者の行動を掴み、残り二つで詳細な調査を行いました。

IDSアラートではSuricataのアラート管理ツールのEveboxを使用しました。フィルタやソート等が直感的に扱えて便利でしたが、IDSのアラートは先ほど説明した「標的の情報収集」での通信でも上がってしまうのと、危険度が低いと表示されていても、実際には攻撃が成功してしまっていることもあったため、ここの調査は経験と慣れが必要そうだと感じました。

SSHとWebアクセスのログ調査では、事前課題でやったことがそのまま生きたため進めやすかったです。

修了試験

pcapファイルが渡され、その中からフラグを探す問題でした。最初はこれだけ与えられてノーヒントでした。"ミニ"キャンプ?

その後、ヒントとして

  • どのWebアプリが攻撃されているかを調べてみようね、一番最初のHTTP通信でわかるよ
  • 文字列のデコードはCyberChef(https://gchq.github.io/CyberChef/)が便利だよ

と頂きました。

自分はこの問題をこのヒントが出てから解き始めました。そのためあまり詰まることなく解くことができました。

実際に問題のpcapファイルを開き、一番最初の通信を見ると

とのことで、Drupalの7.54が使われていることがわかります。

そこで、このソフトウェアの脆弱性について調べると、CVE-2018-7600というリモートからの任意コード実行の脆弱性があることが分かりました。したがってその後のパケットに攻撃コードがありそうということで探索を再開しました。

Drupalを知らないため詳しいことは言えませんが、PoCコードによると、パスワードリセットフォームをよろしくないものにして、Ajaxのファイルアップロードでコマンドが実行されてしまうらしいです。当時はそこまで調べる余裕がなく、怪しいパケットを人力で見つけました。

怪しいパケットのコマンドを見ると、

となっていて、base64でcreate.phpの中身が記述されていそうなことがわかりました。

実際にデコードすると、


 と、受け付けた文字列をROT13→base64の順で戻して実行しているようです。なのでここでcreate.phpのPOSTをCyberChefで戻して調べ始めました。

すると…



と、暗号化されたflag.txtが192.168.180.163の1337ポートを利用して送信されていることがわかりました。正直もうここでフラグ出るかな~って思っていたので凝ってるなと思いました。"ミニ"キャンプ?

ということであとはWiresharkで「ip.addr==192.168.180.163 && tcp.port==1337」とフィルタし、追跡→TCPストリームで内容をflag.encと保存、それを復号化で…

無事修了できました。やったね。


0 件のコメント:

コメントを投稿