フロムスクラッチ開発者ブログ

from scratch Engineers' Blog

CTFのパケット解析から学ぶセキュリティとハッキング vol.2

 こんにちは!フロムスクラッチ新人エンジニアのおんじです!
 今回のブログでは、前回の記事「CTFのパケット解析から学ぶセキュリティとハッキング」の実践編として、Wiresharkを使ったHTTPプロトコルのパケット解析による画像オブジェクトの抽出やFTPプロトコルのパケットによるファイル抽出に取り組んでいこうと思います。
 尚、今回の記事のきっかけとなっている社内勉強会は『セキュリティコンテストチャレンジブック CTFで学ぼう情報を守るための戦い方』の内容を参考にしています。より深く気になられた方は、そちらも御覧頂ければと思います!

1.HTTPプロトコルのパケット解析によるオブジェクトの抽出

 Wiresharkは、前回の記事でも紹介したGUIのネットワークパケット・プロトコル解析ツールです。これを活用すると、HTTPプロトコルの通信をキャプチャして、そこに流れているHTMLファイルや画像、CSS、 JSON や XML などのオブジェクトを抽出することができます。そこで今回は、Wiresharkを使ってフロムスクラッチの子会社であるTechJINのホームページから、会社ロゴの画像オブジェクトを抽出してみたいと思います。
 f:id:kota-onji:20180512140605p:plain
 まずは、抽出したいオブジェクトが流れる通信をキャプチャしてきます。前回も確認した通りパケットキャプチャを開始すると、大量のパケットが記録されていきます。このままだと表示件数が多すぎるので、キャプチャしたパケットの中からHTTPプロトコルのものだけを表示できるようにしたいと思います。
 Wiresharkには、条件にあったパケットのみを表示するDisplay Filterと呼ばれるフィルタリング機能があります。この機能を使い、必要なパケットのみを表示します。今回の場合は、HTTPプロトコルが使われているパケットのみを表示したいので、下記画像のように入力欄に"HTTP"と入力します。
f:id:kota-onji:20180511160430p:plain
すると、、、
f:id:kota-onji:20180512140838p:plain
 このように、HTTPプロトコルを使用したパケットのみが抽出して表示されるようになりました。
 今回は検索ページに直接プロトコル名を打ち込みましたが、他にも直接条件式を打ち込むことでプロトコルのフィールド名まで指定したより詳細なフィルタリングも、このDisplay Filterで実現することが出来ます。

 さて本題に戻りますが、問題のオブジェクトを抽出するために、WiresharkのExport Objects機能を利用していきたいと思います。以下の画像のように、File > Export Objects > HTTP Objects を開きます。
f:id:kota-onji:20180509133956p:plain
 すると、以下の画像のようにHTTPオブジェクトが一覧として表示されます。
f:id:kota-onji:20180512142853p:plain
 先程のページをデベロッパツールで確認すると、該当する画像はmark_i.pngというファイル名であることがわかります。
f:id:kota-onji:20180512143953p:plain
よってExport Objectsの画面で該当するファイルをダウンロードしてくると、、、
f:id:kota-onji:20180512144117p:plain
 上記の通り、画像オブジェクトの抽出とダウンロードに成功しました!
今回は画像のケースを取り上げましたが、他のオブジェクトであってもいとも簡単に、抽出してくることができてしまうのです。

2.FTPプロトコルのパケット解析による転送ファイルの抽出

 さて、ここまではHTTPプロトコルについて見てきました。今度は、FTPプロトコルについて見ていきます。FTPサーバをローカルに構築し、そのサーバにb→dashアイコンのpng画像を転送して、転送した画像データをパケット解析によって抽出してみたいと思います(尚、今回はパケット解析にフォーカスするために、サーバの構築~データの転送の部分については省略致します)。

 その前に、前提となるFTPプロトコルの通信の流れについて確認していきます。
f:id:kota-onji:20180511155144p:plain
 上の図のように、FTPプロトコルは「データコネクション」と「コントロールコネクション」とを組み合わせて転送を行います。データコネクションは、実際にデータを転送するためのコネクションになります。それに対して、コントロールコネクションは、FTPサーバにログインする際の利用者認証やFTPコマンドの送受信など、データコネクションを制御するためのコネクションとなっています。
 
 では、実際にデータを転送した際のパケット情報を見てみます。
f:id:kota-onji:20180511154211p:plain
まず、Aの部分はコントロールコネクションに該当します。ユーザーログインのリクエストとレスポンス、データ転送のリクエストとレスポンスが行われています。次に、Bの部分、ここがデータコネクションに該当します。先程のデータ転送のレスポンスを受けて、クライアントからサーバにデータ転送が行われています。そして最後のCで、またコントロールコネクションに帰ってきて、データ転送成功のレスポンスと、通信の終了が行われています。
 
 さて、抽出するデータがやり取りされているパケットがわかった所で、実際にファイルの抽出に入っていきたいと思います。そこで、今回はTCPストリームという機能で、直接データコネクションの通信内容を参照して、そこからファイル抽出を行います。
 まずは、Wireshark上で先程のデータコネクションに該当するパケットを指定して右クリックを押下し、Fllow > TCP Streamを開きます。
すると、以下のようなデータコネクションのFTPの送信データに遷移します。
f:id:kota-onji:20180510163027p:plain
 この中で、png画像のデータを抽出して保存するため、表示形式をRowに変更した上で下部のテキストボックスでpngと入力して()、絞り込みを行います。そして保存すると、f:id:kota-onji:20180510170607p:plain
このように、画像のダウンロードに成功しました!

3.おわりに

 2週間に渡って、普段の業務とは一味違ったパケット解析というものを行い、非常に楽しかったと同時に、
今週はGUI上で全てが完結したように、本当にあっさりと通信の中身を取ってこれることに怖さも感じました。
 お客様のデータを扱う会社として、今後もこのような社内勉強会を積極的に実施し、記事を掲載していきます。
 この度は、お読み頂きありがとうございました!