Wiresharkで検出できない
    チャットプログラム
 ARPパケットのパディングにデータを詰め込む


         @furuya02




                     copyright© 2011/07.. by SAPPOROWORKS
自己紹介


   ハンドル      SIN/古谷誠進
   Twitter   @furuya02
   仕事        某社でシステムサポートみたいな感じ
   住居        札幌
   年齢        アラフィフ
              「45歳以上54歳まで( by ウィキペディア)」




                            copyright© 2011/07.. by SAPPOROWORKS
ARPのおさらい
            データリンク層でMACを取得するための必須プロトコル



・「ARP要求」は、ブロードキャスト
・「ARP応答」は、ユニキャスト



                            ①端末AのMACは?
                            宛先 FF:FF:FF
                            送元 BB:BB:BB

 端末A                                                         端末B
 AA:AA:AA                                                   BB:BB:BB


             ②AA:AA:AAです。
             宛先 BB:BB:BB
             送元 AA:AA:AA
                            copyright© 2011/07.. by SAPPOROWORKS
GWのARP要求は常に流れる
   デフォルトゲートウエイのARPテーブルがタイムアウトで消えるとき・・・・


・外部と通信するためにGWのMACアドレスを検索する
 「ARP要求」が、常に流れている。
・「ARP要求」はブロードキャストなので、
 スイッチングHUBを超えて流れてくる。


           GW


                              GWのMACは?
                              宛先 FF:FF:FF




                         copyright© 2011/07.. by SAPPOROWORKS
ARPパケット
                        サイズは14+28=42バイト

    0000000 : ff ff ff ff ff ff 00 1f d0 d0 12 17 08 06 00 01
    0000010 : 08 00 06 04 00 01 00 1f d0 d0 12 17 c0 a8 00 0a
    0000020 : 00 00 00 00 00 00 c0 a8 00 fe



             Ethernetヘッダ
           あて先/送り元/プロトコル
                14バイト

ハードウエア種別     プロトコル種別
  0x0001       0x0800
   2バイト        2バイト

ハードウエア長さ      プロトコル長さ        オペコード
   0x06          0x04      0x0001(要求)                               28バイト
  1バイト          1バイト          2バイト

  送り元MAC      送り元IPアドレス      あて先MAC     あて先IPアドレス
   6バイト         4バイト          6バイト        4バイト


                                          copyright© 2011/07.. by SAPPOROWORKS
パケットのパディング
         フレームの最小サイズに満たないため、勝手にサイズが大きくなる



CSMA/CDでは、最遠距離の衝突が伝達されるまで送信完了しないように
するため、フレームの最小サイズは、64バイトと定められている
EthernetⅡ(DIX規格)
                 Ethernetヘッダ
 プリアンブル                                    データ本体                                  CRC
               あて先/送り元/プロトコル
  8バイト                                   46~1500バイト                              4バイト
                    14バイト




                 Ethernetヘッダ
                               ARPパケット   パディング
               あて先/送り元/プロトコル
                                28バイト     18バイト
                    14バイト

   WiresharkではCRCが表示されないので、最小パケットは60バイト
   ARP(42バイト)には、18バイトが自動的に追加される

                                          copyright© 2011/07.. by SAPPOROWORKS
ARPパケットをWiresharkで見ると
  Trailerとして表示「誰が勝手に0x00にしたんだ・・・・」




                        Ethernetヘッダ(14オクテット)

                           ARP(28オクテット)


                                   パディング(18オクテット)




                      copyright© 2011/07.. by SAPPOROWORKS
チャットプログラム
        Wiresharkで捕捉されないためには・・・・


 デフォルトゲートウエイの「ARP要求」
 不審なパケットには見えない


 パディング領域へデータを格納
プロトコル上はごみ領域であるので、解釈の対象外


 フィルタされない
データリンク層で必須パケットの為、 パーソナルファイアウォール等でフィルタされることはない


 設定の必要なし
ブロードキャストドメイン内であれば、常に相互に通信状態となっている



                          copyright© 2011/07.. by SAPPOROWORKS
フローチャート(受信)
前回作成したパケットモニタとあまり大差は無い


NIC情報の取得・選択
    IPアドレス
 デフォルトゲートウエイ
   MACアドレス




  パケット取得



  プロトコル==ARP   YES
                           データ取得・表示
 パケットサイズ==60


        NO
                copyright© 2011/07.. by SAPPOROWORKS
フローチャート(送信)
ARPパケットを生成してWinPcapで送信する




    「送信」ボタンが押された




      ARPパケットの生成
    宛先MAC=FF:FF:FF:FF:FF:FF
    パディング部分=メッセージ



          データ送信
      int pcap_sendpacket()


                         copyright© 2011/07.. by SAPPOROWORKS
デモ
              ホストOSでモニタすると192.168.240.0/24のブロードキャストが
                       仮想HUBから流れてくる




                                    VMwareの仮想ネットワーク(NAT)
                                        192.168.240.0/24

                                                   仮想DHCP
                                                   192.168.240.254


                                                                    ゲストOS
192.168.2.1                 ホストOS
00-08-a1-c3-cd-33                               仮想HUB



        192.168.2.2         192.168.240.2                      192.168.240.180
        00-23-5a-4d-06-c4   00-50-56-e5-a0-0c                  00-0c-29-fd-01-a5



                                                 copyright© 2011/07.. by SAPPOROWORKS
サンプルプログラムとスライドを下記に置きました
 興味を持っていただけた場合は、ぜひご利用ください。

http://www.sapporoworks.ne.jp/session/2011.07.22/



                    @furuya02




                                copyright© 2011/07.. by SAPPOROWORKS

Wiresharkで検出できないチャットプログラム

  • 1.
    Wiresharkで検出できない チャットプログラム ARPパケットのパディングにデータを詰め込む @furuya02 copyright© 2011/07.. by SAPPOROWORKS
  • 2.
    自己紹介  ハンドル SIN/古谷誠進  Twitter @furuya02  仕事 某社でシステムサポートみたいな感じ  住居 札幌  年齢 アラフィフ 「45歳以上54歳まで( by ウィキペディア)」 copyright© 2011/07.. by SAPPOROWORKS
  • 3.
    ARPのおさらい データリンク層でMACを取得するための必須プロトコル ・「ARP要求」は、ブロードキャスト ・「ARP応答」は、ユニキャスト ①端末AのMACは? 宛先 FF:FF:FF 送元 BB:BB:BB 端末A 端末B AA:AA:AA BB:BB:BB ②AA:AA:AAです。 宛先 BB:BB:BB 送元 AA:AA:AA copyright© 2011/07.. by SAPPOROWORKS
  • 4.
    GWのARP要求は常に流れる デフォルトゲートウエイのARPテーブルがタイムアウトで消えるとき・・・・ ・外部と通信するためにGWのMACアドレスを検索する 「ARP要求」が、常に流れている。 ・「ARP要求」はブロードキャストなので、 スイッチングHUBを超えて流れてくる。 GW GWのMACは? 宛先 FF:FF:FF copyright© 2011/07.. by SAPPOROWORKS
  • 5.
    ARPパケット サイズは14+28=42バイト 0000000 : ff ff ff ff ff ff 00 1f d0 d0 12 17 08 06 00 01 0000010 : 08 00 06 04 00 01 00 1f d0 d0 12 17 c0 a8 00 0a 0000020 : 00 00 00 00 00 00 c0 a8 00 fe Ethernetヘッダ あて先/送り元/プロトコル 14バイト ハードウエア種別 プロトコル種別 0x0001 0x0800 2バイト 2バイト ハードウエア長さ プロトコル長さ オペコード 0x06 0x04 0x0001(要求) 28バイト 1バイト 1バイト 2バイト 送り元MAC 送り元IPアドレス あて先MAC あて先IPアドレス 6バイト 4バイト 6バイト 4バイト copyright© 2011/07.. by SAPPOROWORKS
  • 6.
    パケットのパディング フレームの最小サイズに満たないため、勝手にサイズが大きくなる CSMA/CDでは、最遠距離の衝突が伝達されるまで送信完了しないように するため、フレームの最小サイズは、64バイトと定められている EthernetⅡ(DIX規格) Ethernetヘッダ プリアンブル データ本体 CRC あて先/送り元/プロトコル 8バイト 46~1500バイト 4バイト 14バイト Ethernetヘッダ ARPパケット パディング あて先/送り元/プロトコル 28バイト 18バイト 14バイト  WiresharkではCRCが表示されないので、最小パケットは60バイト  ARP(42バイト)には、18バイトが自動的に追加される copyright© 2011/07.. by SAPPOROWORKS
  • 7.
    ARPパケットをWiresharkで見ると Trailerとして表示「誰が勝手に0x00にしたんだ・・・・」 Ethernetヘッダ(14オクテット) ARP(28オクテット) パディング(18オクテット) copyright© 2011/07.. by SAPPOROWORKS
  • 8.
    チャットプログラム Wiresharkで捕捉されないためには・・・・  デフォルトゲートウエイの「ARP要求」 不審なパケットには見えない  パディング領域へデータを格納 プロトコル上はごみ領域であるので、解釈の対象外  フィルタされない データリンク層で必須パケットの為、 パーソナルファイアウォール等でフィルタされることはない  設定の必要なし ブロードキャストドメイン内であれば、常に相互に通信状態となっている copyright© 2011/07.. by SAPPOROWORKS
  • 9.
    フローチャート(受信) 前回作成したパケットモニタとあまり大差は無い NIC情報の取得・選択 IPアドレス デフォルトゲートウエイ MACアドレス パケット取得 プロトコル==ARP YES データ取得・表示 パケットサイズ==60 NO copyright© 2011/07.. by SAPPOROWORKS
  • 10.
    フローチャート(送信) ARPパケットを生成してWinPcapで送信する 「送信」ボタンが押された ARPパケットの生成 宛先MAC=FF:FF:FF:FF:FF:FF パディング部分=メッセージ データ送信 int pcap_sendpacket() copyright© 2011/07.. by SAPPOROWORKS
  • 11.
    デモ ホストOSでモニタすると192.168.240.0/24のブロードキャストが 仮想HUBから流れてくる VMwareの仮想ネットワーク(NAT) 192.168.240.0/24 仮想DHCP 192.168.240.254 ゲストOS 192.168.2.1 ホストOS 00-08-a1-c3-cd-33 仮想HUB 192.168.2.2 192.168.240.2 192.168.240.180 00-23-5a-4d-06-c4 00-50-56-e5-a0-0c 00-0c-29-fd-01-a5 copyright© 2011/07.. by SAPPOROWORKS
  • 12.