パケット解析こんにちは!この春フロムスクラッチに入社した新人エンジニアのおんじです!今回のフロムスクラッチ開発ブログでは「CTFのバイナリ解析から学ぶセキュリティとハッキング」に続いて、パケット解析編の勉強会について書きたいと思います。CTFで学ぼう情報を守るための戦い方』を参考にしているので、より深く気になる方は手にとってみてはいかがでしょうか。※CTFバイナリ解析編のバックナンバーは、こちらからどうぞ!1.CTFとは?CTFとは情報技術に関する問題に対して適切な形で対処することで、「フラグ(Flag)」と呼ばれる得点対象の文字列を取得することによって、得られた得点で勝敗を決める大会です。Flag”の頭文字をとってCTFといいます。(CTFについては、こちらの記事で詳しく触れています。)2.ネットワークプロトコルとパケットパケット解析では、ネットワークを流れる通信を分析して、どのようなプロトコルでどのような要素を扱った通信を行っているのかを解明します。そのため、まずは前提のネットワークプロトコルの知識を確認していきます。ネットワークプロトコルとは、ネットワーク上での通信に関する規約を定めたものです。TCP/IPのモデルによると、これは以下のような階層構造になっています。これは、階層間の依存を無くし、プロトコルの開発やメンテナンスを容易に行えるようにすることを目的とした構造になっています。何らかのデータを送信する際には、上記のそれぞれの階層で、そのプロトコルに必要な情報を渡されたデータの先頭に付与し、次の階層に渡します。この付与した情報をヘッダと呼び、このヘッダを付与する動作をカプセル化と呼びます。逆に、データを受信した際には、それぞれの階層でこのヘッダを解釈し、削除した後に次の階層に渡していきます。今回扱うパケットは、一般的には、インターネット層のデータのことを指します。パケット解析を行う際には、ネットワークインターフェース層のヘッダとデータも解析します。この部分は一般的にはフレームと呼ばれますが、便宜上この記事では上図の太枠で囲われた部分をパケットとして扱っていきます。3.pcapファイルではパケットに関する前提を確認した所で、実際にパケットの解析に進んでいきたいと思います。ここではWiresharkと呼ばれるGUIのネットワークパケット・プロトコル解析ツールを使用していきます。Wiresharkのバージョンは2.2.6で実行しています。CTFで学ぼう情報を守るための戦い方』によると、Wiresharkには、主に以下の3つの機能が実装されています。する(2)キャプチャしたパケットを表示する(3)表示したパケットを解析するまず、パケット解析をするために、パケット情報をキャプチャしていきます。Wiresharkを起動すると、以下のような画面が表示されます。ここで、パケット情報を取得したい接続を選択します。すると、以下のようにパケット情報が記録されていきます。あとは左上2番目の停止ボタンを押下し、ファイルを保存したらパケットのキャプチャは完了です(※sample1.pcapというファイル名で保存)。ここで保存されたパケットのキャプチャは、WinPcap(Linuxであればlibpcap)ファイルフォーマットというフォーマットで保存されます。このフォーマットはパケットを記録する基本的なフォーマットで、ネットワーク通信を記録するファイルとして、広く使用されています。以下に、そのサンプルを示します。pcapファイルは、基本的に次の3段構造になっています。header(以下pcapheader)は、pcapファイルそのものの情報を格納する部分です。A1"という先頭の4バイトです。pcapファイルであれば必ずこのような4バイトから始まっており、pcapファイルを判別する部分になっています。pcapheadaerには他にも次のような情報が格納されています。headerをまとめると、以下のような構造になっています。header)は、各パケットに付与されるヘッダで、それぞれのパケットに関する情報が格納されています。具体的には以下の情報が格納されています。パケット長は異なるので、caplenとlenは異なる値になる可能性があります。dataが格納されているという形式になっています。4.Rubyを使ったパケット解析pcapファイルの構成がわかった所で、実際の解析に移っていきたいと思います。今回はRubyの拡張ライブラリであるruby-pcapを使用して、解析を行いました。0.7.9で実行まず、Rubyの環境下にruby-pcapをインストールします。addressを抽出してくるコードを作成します(先程キャプチャしたsample1.pcapを使用)。trueendこれを実行すると、以下のように接続していたIPアドレスが羅列されていきます。172.217.25.23210.0.2.15183.79.250.123104.244.43.11210.0.2.1510.0.2.15104.244.43.112104.244.43.11210.0.2.15104.244.43.112...※以下略このままだと、無秩序に並んでいるだけなので、タイムスタンプも一緒に出力してIPアドレスごとにソートをかけて出力してみます。sortedすると、以下のように出力されるようになりました。実際の解析ではこのように問題となっている接続を特定していきます。この続きの解析については、次週記事にしたいと思います。5.おわりに今回は、パケット解析の前提知識と、基本部分についてお話しました。次回は、実際のCTFの問題などを解いていき、より深い部分に踏み込んで行きたいと思います。次回も興味深い内容になる予定ですので、是非読んでみてください。vol.2こんにちは。フロムスクラッチ新人エンジニアの遠藤です。採用情報フロムスクラッチは常に優秀なソフトウェアエンジニアを募集しています。vol.2月別アーカイブ検索リンクb→dashWantedly運営会社はてなブログをはじめよう!f-scratchさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。