SlideShare a Scribd company logo
1 of 36
How to Use Scapy




              AshiGirl96( ๑・ิ‫ิ・ټ‬๑) from ZareGoto
13年2月27日水曜日
Self - Introduction
          HandleName:AshiGirl96

          SEX:男。

          OS: Mac, BT5

          Work:高専一年生。

          Team: ZareGoto

          Twitter: @ashigirl96

          Language: Python/Asm

          Interest:Security/Network

          HomePage:reonreon3reon.hatenablog.com


13年2月27日水曜日
What is Scapy??

              Scapyはツール。(Pythonで作れたCUI
              自分の思いのままにパケットが作れちゃう!
              通信の仕組みがわかるかも??
              .pcapが見れちゃう!←
              ネットワークが見れちゃう
                快適な暮らしをあなたの生活に!

13年2月27日水曜日
プロトコルの
              基本知ってますよね?



13年2月27日水曜日
通信プロトコルとは?
              ネットワークを介してコンピュータ同士が通信を行う上で、相互に決められた約束事の
              集合。通信手順、通信規約などと呼ばれることもある。


              英語しか使えない人と日本語しか使えない人では会話ができないように、対応している
              プロトコルが異なると通信することができない。人間同士が意思疎通を行う場合に、
              どの言語を使うか(日本語か英語か)、どんな媒体を使って伝達するか(電話か手紙か)、
              というように2つの階層に分けて考えることができるが、コンピュータ通信においても、
              プロトコルの役割を複数の階層に分けて考える。


              階層化することによって、上位のプロトコル(を実装したソフトウェア)は自分のすぐ下の
              プロトコルの使い方(インターフェース)さえ知っていれば、それより下で何が起きているかを
              まったく気にすることなく通信を行うことができる。電話機の操作法さえ知っていれば、
              電話会社の交換局で何が起きているか知らなくても電話が使えるのと同じである。


              現在インターネットで標準となっているIPは第3層(ネットワーク層)の、TCPやUDPは第4層
              (トランスポート層)のプロトコルであり、HTTPやFTP、SMTP、POPなどは第5層(セッション層)
              以上のプロトコルである。
                                http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html 参照




13年2月27日水曜日
Scapyの話に
              戻ります。



13年2月27日水曜日
How to INSTALL!!!
              さすがに Python はインストールしてるって前提で行きます
               $   cd /tmp
               $   wget scapy.net
               $   unzip scapy-latest.zip
               $   cd scapy-2.*                                             For UNIX like
               $   sudo python setup.py install


                                                                            For Windows
               http://www.secdev.org/projects/scapy/doc/installation.html




              Windows知らない(;*´Д`)。

13年2月27日水曜日
STARTING USAGE!!!!
                                              “On Python”
              $ sudo scapy
              Welcome to Scapy (2.0.1-dev)
              >>>

              Pythonをベースとしてる
              インタプリタ
              ➡ファイルの場合
                                             python ***.py
              from scapy.all import *




13年2月27日水曜日
AT FIRST STEPS!!!!
              Let’s building some packets!!
                            $ sudo scapy
                            1 >>> ping  = IP(dst='192.168.1.13')/ICMP()
           1.pingとは         2 >>> ping.show()
                                                                             2.IPプロトコル:
          ネットワークが           3 ###[ IP ]###
                            4   version= 4                                    データグラムや
         疎通しているか            5   ihl= None                                       パケットを
         確認するための            6   tos= 0x0
                            7   len= None                                     中断するのに
            コマンド            8   id= 1                                         使われる主要
        (この場合パケット)          9   flags=                                      な通信プロトコル
                           10   frag= 0
                           11   ttl= 64                                     3.ICMPプロトコル:
      ping は,ICMPのechoコ    12   proto= icmp             4.作ったパケットの        IPのデータグラム処理に
       マンドを利用して、           13   chksum= 0x0
                                                             中身を              おける誤りの
                           14   src= 172.16.247.139
        指定した相手先            15   dst= ***.***.**.***      見るための関数             通知や通信に
          (IPアドレス)に        16   options= ''              Packet.show()        関する情報の
      『全く一緒の文字列            17 ###[ ICMP ]###              そしてその下が              通知などの
                           18   type= echo-request
       返して!』という感じ          19   code= 0
                                                         パケットの構造に               プロトコル
        で疎通をはかる。           20   chksum= 0x0                 なっている
                           21   id= 0x0
                           22   seq= 0x0




13年2月27日水曜日
Other
                    5.このように 『/』でプロトコルを区切ることで、2つのレイヤを構成することが出来る
                    6.IPの引数で src=”送信元” dst=”送信先”
                        TCPは主にport番号や FLAGを指定することが出来る。



         >>> ex=Ether()/IP(dst=”reon3.rosx.net”)/TCP()/"GET /profile3.html HTTP/1.0 nn"
         >>> hexdump(ex)
         00 02 15 37 A2 44 00 AE F3 52 AA D1 08 00 45 00 ...7.D...R....E.
         00 43 00 01 00 00 40 06 78 3C C0 A8 05 15 42 23 .C....@.x<....B#
         FA 97 00 14 00 50 00 00 00 00 00 00 00 00 50 02 .....P........P.
         20 00 BB 39 00 00 47 45 54 20 2F 69 6E 64 65 78  ..9..GET /index
         2E 68 74 6D 6C 20 48 54 54 50 2F 31 2E 30 20 0A .html HTTP/1.0 .
         0A




              7. hexdump(引数)で パケットexを16進数で見る事が出来る。
              8.『/』で文字列も一緒に書くと、一緒に入ることが出来る。



13年2月27日水曜日
After that
                    9.パケットを機械語にすることができる
               >>>b = str(a)
               >>> b
               'x00PVxe3xd5<x00x0c)C>xfdx08x00Ex00x00Fx00x01x00x00@
               x06x80x89xacx10xf7x8bx1b`;,x00x14x00P
               x00x00x00x00x00x00x00x00Px02 x00Kxf1x00x00GET /profile3.html HTTP/
               1.0 nn'




                    10.詳細に知ることも出来る。
               >>> c = Ether(b)
              >>> c
              <Ether dst=00:50:56:e3:d5:3c src=00:0c:29:43:3e:fd type=0x800 |<IP
              version=4L ihl=5L tos=0x0 len=70 id=1 flags= frag=0L ttl=64 proto=tcp
              chksum=0x8089 src=172.16.247.139 dst=27.96.59.44 options='' |<TCP
              sport=ftp_data dport=www seq=0 ack=0 dataofs=5L reserved=0L flags=S
              window=8192 chksum=0x4bf1 urgptr=0 options=[] |<Raw load='GET /
               profile3.html HTTP/1.0 nn' |>>>>



13年2月27日水曜日
READING .PCAP FILE!!!!
          1 from scapy.all import *
          2
          3 a = rdpcap("/root/Desktop/q9.pcap")
          4 a[45].pdfdump(layer_shift=1)
          5 a[45].psdump("/root/Desktop/q9.eps",layer_shift=1)




                     このように.pcapのファイルが開けました。
                     そして右の図のように.pcapの中身を
                     具体的(GUI)に見るようにすることも
                     できます。他にも,
                     a.show2()
                     などの関数で、パケットの中身をCUIで
                     わかりやすく見ることが可能です。
                     他にも
                     a.summary()
                     a.sprintf
                     a.command()
                     などなどたくさんあります。



13年2月27日水曜日
LET’S SEND PACKETS!!!!
              11.パケットを送る関数は send() と sendp() です

              send() : レイヤ3に向かってパケットを送ります。

              sendp() : レイヤ2に向かってパケットを送ります。

              send()                              sendp()
        >>> send(IP(dst="1.2.3.4")/ICMP())   >>> sendp( Ether() / IP ( dst= "1.2.3.4" , ttl = (1,4)), iface ="eth1")
        .                                    ....
        Sent 1 packets.                      Sent 4 packets.




13年2月27日水曜日
パケットを送ったらその答えが返ってくる関数sr(),srp()

      sr() : レイヤ3に向かってパケットを送り、レスポンスが変数に入る

     srp() : レイヤ2に向かってパケットを送り、レスポンスが変数に入る

               sr()
        >>> ping = IP(dst="192.168.1.6")/ICMP()/"PLEASE RESPONSE"
        >>> a = sr1(ping)
                                                                                 同じ文字列が
        Begin emission:                                                         返ってきてるので、
        .*Finished to send 1 packets.                                            成功したことが
                                                                                わかる(*‘ω‘ *)
        Received 2 packets, got 1 answers, remaining 0 packets
        >>> hexdump(a)
        0000 45 00 00 2B 0A 58 00 00 80 01 CB 2F C0 A8 01 06 E..+.X...../....
        0010 AC 10 F7 8B 00 00 CD E4 00 00 00 00 50 4C 45 41 ............PLEA
        0020 53 45 20 52 45 53 50 4F 4E 53 45 00 00 00         SE RESPONSE...
        >>>




13年2月27日水曜日
他に何が出来るか?




13年2月27日水曜日
TCP traceroute
          res,unans= traceroute([‘目的地’],ttl=,dport=どのポートか)
          のように指定すると出来ます。成功した後に
          res.graph() と指定すると、図のように具体的に見れる。




13年2月27日水曜日
Use Wireshark
          下の図のように パケットを作り、 wireshark(パケット)で
          wiresharkが開いて、パケットを見ることが出来ます。




13年2月27日水曜日
例えば、
      PortScanって知ってますか?



13年2月27日水曜日
SYNスキャンとは?
                サーバにログを残さずにポートスキャン出来る『ステルススキャンの一種』です。

                普通にポートスキャンをすると、ログが残ってしまうため、それを回避するため、
                通信の手順の最後にキャンセルを意味するパケットを送ることにより手順を
                中断させ、ログを残さないようにする。

              一般的(3ウェアハンドシェイク)                                      SYN スキャン



                                                                                    RST
                                                                                                        




                                     http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html ,
                 http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Tcp_normal.svg 参照




13年2月27日水曜日
For Example:
              >>> sr(IP(dst="192.168.1.1")/
              TCP(sport=RandShort(),dport=[22,80,443],flags="S"))



         Explanation:

              ターゲットを”192.168.1.1”として、
              送信元のポートはランダムなものにして、
              送信先のポートは 22(SSH)、80(HTTP)か443(HTTPS)
              にして、FLAGは”S”(SYNフラグ)を送る。
              どのような反応になるか見ましょう。



13年2月27日水曜日
sprintf()関数を使って、レスポンスのフラグがどのようになっているか見ると、
        www(HTTP)と HTTPSはポートが閉まっていること(RA)がわかります。
        SSHはどうやら、開いているようなので後で閉じようと思います←
       >>> ans,unans=_
       >>> ans.summary(lambda(s,r): r.sprintf("%TCP.sport% -> %TCP.dport% : %TCP.flags%"))
       ssh -> 12936 : SA
       www -> 12044 : RA
       https -> 13527 : RA
       >>>
       root@bt:~$ nmap -p 22 80 443 192.168.1.1

       Starting Nmap 6.25 ( http://nmap.org ) at 2013-02-26 10:33 EST
       Invalid target host specification: 80
       Invalid target host specification: 443
       Nmap scan report for 192.168.1.1
       Host is up (0.00044s latency).
       PORT STATE SERVICE
       22/tcp open ssh
       Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds


        念のために、本当に合ってるか nmapで調べた所、
        22/tcp open ssh とsshだけポートが開いてることが確認出来ました。



13年2月27日水曜日
最後に…。




13年2月27日水曜日
僕が好きな分野。




13年2月27日水曜日
(多分)DDos攻撃

                                        次の図から説明すると、

              1. IPアドレスが172.16.247.144のパソコンがwiresharkを
                開いて、パケットの受信量を見ています。

              2.   send(IP(dst="172.16.247.144",src=RandIP("78.0.0.0/16"))/
                                                                              送信元はClassAのIPア
              TCP(sport=RandShort(),dport=51487),loop=True,verbose=True)
                                                                              ドレス(Random)

送信元のポートも
 ランダム                                                          送信元はClassAのIPア
                                                               loop=無限に送る
                                                               ドレス(Random)
                                                               verbose=詳細に送る



13年2月27日水曜日
2(続き).のようなソースを送ることで、ターゲットの1つのポート
         が大変なことになる。 左に出てくるのは『ネットワーク通信』
        を監視するためのツール。

        3.Enterキーを推すと、1つのパソコンに向かってパケットが投げ
        られ続ける。左のネットワーク監視のツールが具体的に見える
        ようにしてる。

        4. (1.)に出てきたパソコンがどれくらいパケットが送られてきた
        か見た所、約1分間で47.2MBのパケットが送られていることが
        わかる。CPUの処理が大変そう。あまり重くないパケットでもこ
        れぐらいにはなる。




13年2月27日水曜日
軽く図で説明します。




13年2月27日水曜日
ある、穏やかな暮らしをしている
               OS(Ubuntu)がいました。




13年2月27日水曜日
Scapy(を使ってる主)が悪さを企んでいます…。
               このパケットを送ったら(多分)大変なことに!!




                  ←こいつ、
              ネットワークを見るための者。




13年2月27日水曜日
PoChitt
       ona
13年2月27日水曜日
in 1 min...



13年2月27日水曜日
13年2月27日水曜日
1分で47.2MBなので、
         23分で1038.4MB(約1.038GB)となり、
       354時間後で1002528MG(約1.003TB)となる


       特に重くしたパケットで無くてもこれぐらいになる…。


13年2月27日水曜日
良い子は真似しない
                DENE!!



13年2月27日水曜日
Summary!!!!
              パケットとネットワークについて知らないと
               ほとんど何も出来ない。

              パケットが死ぬほど簡単に出来る。

              パケットをGUIとしてみれるので見やすい!

              port,flag,送信元先,が超簡単に設定出来る。

              Scapyの可能性が無限大に…。

13年2月27日水曜日
みんなも
              パケット系男子に
               なろう!!


13年2月27日水曜日
ご清聴
              ありがとうございました。




13年2月27日水曜日

More Related Content

What's hot

Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Panda Yamaki
 
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Panda Yamaki
 
Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)Panda Yamaki
 
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)Panda Yamaki
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkTakaaki Hoyo
 
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようHokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようPanda Yamaki
 
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Panda Yamaki
 
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)Panda Yamaki
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングt-sin
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409稔 小林
 
Lagopus どれだけ速いのか
Lagopus どれだけ速いのかLagopus どれだけ速いのか
Lagopus どれだけ速いのかMasaru Oki
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門Yoshitaka Seo
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発slankdev
 
Hokkaido.cap#10 実践パケット解析まとめ
Hokkaido.cap#10 実践パケット解析まとめHokkaido.cap#10 実践パケット解析まとめ
Hokkaido.cap#10 実践パケット解析まとめPanda Yamaki
 
Richard high performance fuzzing ja
Richard  high performance fuzzing jaRichard  high performance fuzzing ja
Richard high performance fuzzing jaPacSecJP
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークM Hagiwara
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてTomofumi Hayashi
 
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)Panda Yamaki
 
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linuxnftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in LinuxTomofumi Hayashi
 
raspi + soracom #pakeana33
raspi + soracom #pakeana33raspi + soracom #pakeana33
raspi + soracom #pakeana33@ otsuka752
 

What's hot (20)

Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編)
 
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
 
Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)Hokkaido.cap#3 ケーススタディ(基礎編)
Hokkaido.cap#3 ケーススタディ(基礎編)
 
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 Network
 
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようHokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
 
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
 
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
 
Lagopus どれだけ速いのか
Lagopus どれだけ速いのかLagopus どれだけ速いのか
Lagopus どれだけ速いのか
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
 
Hokkaido.cap#10 実践パケット解析まとめ
Hokkaido.cap#10 実践パケット解析まとめHokkaido.cap#10 実践パケット解析まとめ
Hokkaido.cap#10 実践パケット解析まとめ
 
Richard high performance fuzzing ja
Richard  high performance fuzzing jaRichard  high performance fuzzing ja
Richard high performance fuzzing ja
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワーク
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用について
 
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編)
 
nftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linuxnftables: the Next Generation Firewall in Linux
nftables: the Next Generation Firewall in Linux
 
raspi + soracom #pakeana33
raspi + soracom #pakeana33raspi + soracom #pakeana33
raspi + soracom #pakeana33
 

Similar to Scapy presentation Remake(訂正)

コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2Masahide Yamamoto
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりYuya Rin
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kKenji Aoyama
 
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~nullnilaki
 
197x Timer with Your Messages
197x Timer with Your Messages197x Timer with Your Messages
197x Timer with Your MessagesKuniaki Igarashi
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。Masahito Zembutsu
 
TCP connectionの保存と復元
TCP connectionの保存と復元TCP connectionの保存と復元
TCP connectionの保存と復元mittyorz
 
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Masaru Oki
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419エイシュン コンドウ
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptxOsamu Ogasawara
 
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計Yuuki Takano
 
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgplotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgKentaro Ebisawa
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件yaegashi
 

Similar to Scapy presentation Remake(訂正) (20)

コンテナ情報交換会2
コンテナ情報交換会2コンテナ情報交換会2
コンテナ情報交換会2
 
Rubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつりRubyで創るOpenFlowネットワーク - LLまつり
Rubyで創るOpenFlowネットワーク - LLまつり
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88k
 
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~オープンソース開発と、あるフレームバッファコンソールの話~名古屋応用編~
オープンソース開発と、 あるフレームバッファコンソールの話 ~名古屋応用編~
 
197x Timer with Your Messages
197x Timer with Your Messages197x Timer with Your Messages
197x Timer with Your Messages
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
 
あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。あの日実行したコンテナの名前を僕達はまだ知らない。
あの日実行したコンテナの名前を僕達はまだ知らない。
 
TCP connectionの保存と復元
TCP connectionの保存と復元TCP connectionの保存と復元
TCP connectionの保存と復元
 
HPC Phys-20201203
HPC Phys-20201203HPC Phys-20201203
HPC Phys-20201203
 
Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編Lagopus as open flow hybrid switch 実践編
Lagopus as open flow hybrid switch 実践編
 
Puppet on AWS
Puppet on AWSPuppet on AWS
Puppet on AWS
 
Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419Tremaで構築!中小企業の社内LAN #Tremaday 120419
Tremaで構築!中小企業の社内LAN #Tremaday 120419
 
遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx遺伝研スパコンを使った解析の並列化.pptx
遺伝研スパコンを使った解析の並列化.pptx
 
Ilstudy001_20110806
Ilstudy001_20110806Ilstudy001_20110806
Ilstudy001_20110806
 
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
SF-TAP: 柔軟で規模追従可能なトラフィック解析基盤の設計
 
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgplotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfg
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
 

Scapy presentation Remake(訂正)

  • 1. How to Use Scapy AshiGirl96( ๑・ิ‫ิ・ټ‬๑) from ZareGoto 13年2月27日水曜日
  • 2. Self - Introduction HandleName:AshiGirl96 SEX:男。 OS: Mac, BT5 Work:高専一年生。 Team: ZareGoto Twitter: @ashigirl96 Language: Python/Asm Interest:Security/Network HomePage:reonreon3reon.hatenablog.com 13年2月27日水曜日
  • 3. What is Scapy?? Scapyはツール。(Pythonで作れたCUI 自分の思いのままにパケットが作れちゃう! 通信の仕組みがわかるかも?? .pcapが見れちゃう!← ネットワークが見れちゃう   快適な暮らしをあなたの生活に! 13年2月27日水曜日
  • 4. プロトコルの 基本知ってますよね? 13年2月27日水曜日
  • 5. 通信プロトコルとは? ネットワークを介してコンピュータ同士が通信を行う上で、相互に決められた約束事の 集合。通信手順、通信規約などと呼ばれることもある。 英語しか使えない人と日本語しか使えない人では会話ができないように、対応している プロトコルが異なると通信することができない。人間同士が意思疎通を行う場合に、 どの言語を使うか(日本語か英語か)、どんな媒体を使って伝達するか(電話か手紙か)、 というように2つの階層に分けて考えることができるが、コンピュータ通信においても、 プロトコルの役割を複数の階層に分けて考える。 階層化することによって、上位のプロトコル(を実装したソフトウェア)は自分のすぐ下の プロトコルの使い方(インターフェース)さえ知っていれば、それより下で何が起きているかを まったく気にすることなく通信を行うことができる。電話機の操作法さえ知っていれば、 電話会社の交換局で何が起きているか知らなくても電話が使えるのと同じである。 現在インターネットで標準となっているIPは第3層(ネットワーク層)の、TCPやUDPは第4層 (トランスポート層)のプロトコルであり、HTTPやFTP、SMTP、POPなどは第5層(セッション層) 以上のプロトコルである。 http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html 参照 13年2月27日水曜日
  • 6. Scapyの話に 戻ります。 13年2月27日水曜日
  • 7. How to INSTALL!!! さすがに Python はインストールしてるって前提で行きます $ cd /tmp $ wget scapy.net $ unzip scapy-latest.zip $ cd scapy-2.* For UNIX like $ sudo python setup.py install For Windows http://www.secdev.org/projects/scapy/doc/installation.html Windows知らない(;*´Д`)。 13年2月27日水曜日
  • 8. STARTING USAGE!!!! “On Python” $ sudo scapy Welcome to Scapy (2.0.1-dev) >>> Pythonをベースとしてる インタプリタ ➡ファイルの場合 python ***.py from scapy.all import * 13年2月27日水曜日
  • 9. AT FIRST STEPS!!!! Let’s building some packets!! $ sudo scapy  1 >>> ping  = IP(dst='192.168.1.13')/ICMP() 1.pingとは  2 >>> ping.show() 2.IPプロトコル: ネットワークが  3 ###[ IP ]###  4   version= 4 データグラムや 疎通しているか  5   ihl= None パケットを 確認するための  6   tos= 0x0  7   len= None 中断するのに コマンド  8   id= 1 使われる主要 (この場合パケット)  9   flags=  な通信プロトコル 10   frag= 0 11   ttl= 64 3.ICMPプロトコル: ping は,ICMPのechoコ 12   proto= icmp 4.作ったパケットの IPのデータグラム処理に マンドを利用して、 13   chksum= 0x0 中身を おける誤りの 14   src= 172.16.247.139 指定した相手先 15   dst= ***.***.**.*** 見るための関数 通知や通信に (IPアドレス)に 16   options= '' Packet.show() 関する情報の 『全く一緒の文字列 17 ###[ ICMP ]### そしてその下が 通知などの 18   type= echo-request 返して!』という感じ 19   code= 0 パケットの構造に プロトコル で疎通をはかる。 20   chksum= 0x0 なっている 21   id= 0x0 22   seq= 0x0 13年2月27日水曜日
  • 10. Other 5.このように 『/』でプロトコルを区切ることで、2つのレイヤを構成することが出来る 6.IPの引数で src=”送信元” dst=”送信先” TCPは主にport番号や FLAGを指定することが出来る。 >>> ex=Ether()/IP(dst=”reon3.rosx.net”)/TCP()/"GET /profile3.html HTTP/1.0 nn" >>> hexdump(ex) 00 02 15 37 A2 44 00 AE F3 52 AA D1 08 00 45 00 ...7.D...R....E. 00 43 00 01 00 00 40 06 78 3C C0 A8 05 15 42 23 .C....@.x<....B# FA 97 00 14 00 50 00 00 00 00 00 00 00 00 50 02 .....P........P. 20 00 BB 39 00 00 47 45 54 20 2F 69 6E 64 65 78 ..9..GET /index 2E 68 74 6D 6C 20 48 54 54 50 2F 31 2E 30 20 0A .html HTTP/1.0 . 0A 7. hexdump(引数)で パケットexを16進数で見る事が出来る。 8.『/』で文字列も一緒に書くと、一緒に入ることが出来る。 13年2月27日水曜日
  • 11. After that 9.パケットを機械語にすることができる >>>b = str(a) >>> b 'x00PVxe3xd5<x00x0c)C>xfdx08x00Ex00x00Fx00x01x00x00@ x06x80x89xacx10xf7x8bx1b`;,x00x14x00P x00x00x00x00x00x00x00x00Px02 x00Kxf1x00x00GET /profile3.html HTTP/ 1.0 nn' 10.詳細に知ることも出来る。 >>> c = Ether(b) >>> c <Ether dst=00:50:56:e3:d5:3c src=00:0c:29:43:3e:fd type=0x800 |<IP version=4L ihl=5L tos=0x0 len=70 id=1 flags= frag=0L ttl=64 proto=tcp chksum=0x8089 src=172.16.247.139 dst=27.96.59.44 options='' |<TCP sport=ftp_data dport=www seq=0 ack=0 dataofs=5L reserved=0L flags=S window=8192 chksum=0x4bf1 urgptr=0 options=[] |<Raw load='GET / profile3.html HTTP/1.0 nn' |>>>> 13年2月27日水曜日
  • 12. READING .PCAP FILE!!!! 1 from scapy.all import * 2 3 a = rdpcap("/root/Desktop/q9.pcap") 4 a[45].pdfdump(layer_shift=1) 5 a[45].psdump("/root/Desktop/q9.eps",layer_shift=1) このように.pcapのファイルが開けました。 そして右の図のように.pcapの中身を 具体的(GUI)に見るようにすることも できます。他にも, a.show2() などの関数で、パケットの中身をCUIで わかりやすく見ることが可能です。 他にも a.summary() a.sprintf a.command() などなどたくさんあります。 13年2月27日水曜日
  • 13. LET’S SEND PACKETS!!!! 11.パケットを送る関数は send() と sendp() です send() : レイヤ3に向かってパケットを送ります。 sendp() : レイヤ2に向かってパケットを送ります。 send() sendp() >>> send(IP(dst="1.2.3.4")/ICMP()) >>> sendp( Ether() / IP ( dst= "1.2.3.4" , ttl = (1,4)), iface ="eth1") . .... Sent 1 packets. Sent 4 packets. 13年2月27日水曜日
  • 14. パケットを送ったらその答えが返ってくる関数sr(),srp() sr() : レイヤ3に向かってパケットを送り、レスポンスが変数に入る srp() : レイヤ2に向かってパケットを送り、レスポンスが変数に入る sr() >>> ping = IP(dst="192.168.1.6")/ICMP()/"PLEASE RESPONSE" >>> a = sr1(ping) 同じ文字列が Begin emission: 返ってきてるので、 .*Finished to send 1 packets. 成功したことが わかる(*‘ω‘ *) Received 2 packets, got 1 answers, remaining 0 packets >>> hexdump(a) 0000 45 00 00 2B 0A 58 00 00 80 01 CB 2F C0 A8 01 06 E..+.X...../.... 0010 AC 10 F7 8B 00 00 CD E4 00 00 00 00 50 4C 45 41 ............PLEA 0020 53 45 20 52 45 53 50 4F 4E 53 45 00 00 00 SE RESPONSE... >>> 13年2月27日水曜日
  • 16. TCP traceroute res,unans= traceroute([‘目的地’],ttl=,dport=どのポートか) のように指定すると出来ます。成功した後に res.graph() と指定すると、図のように具体的に見れる。 13年2月27日水曜日
  • 17. Use Wireshark 下の図のように パケットを作り、 wireshark(パケット)で wiresharkが開いて、パケットを見ることが出来ます。 13年2月27日水曜日
  • 18. 例えば、 PortScanって知ってますか? 13年2月27日水曜日
  • 19. SYNスキャンとは? サーバにログを残さずにポートスキャン出来る『ステルススキャンの一種』です。 普通にポートスキャンをすると、ログが残ってしまうため、それを回避するため、 通信の手順の最後にキャンセルを意味するパケットを送ることにより手順を 中断させ、ログを残さないようにする。 一般的(3ウェアハンドシェイク) SYN スキャン RST   http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html , http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Tcp_normal.svg 参照 13年2月27日水曜日
  • 20. For Example: >>> sr(IP(dst="192.168.1.1")/ TCP(sport=RandShort(),dport=[22,80,443],flags="S")) Explanation: ターゲットを”192.168.1.1”として、 送信元のポートはランダムなものにして、 送信先のポートは 22(SSH)、80(HTTP)か443(HTTPS) にして、FLAGは”S”(SYNフラグ)を送る。 どのような反応になるか見ましょう。 13年2月27日水曜日
  • 21. sprintf()関数を使って、レスポンスのフラグがどのようになっているか見ると、 www(HTTP)と HTTPSはポートが閉まっていること(RA)がわかります。 SSHはどうやら、開いているようなので後で閉じようと思います← >>> ans,unans=_ >>> ans.summary(lambda(s,r): r.sprintf("%TCP.sport% -> %TCP.dport% : %TCP.flags%")) ssh -> 12936 : SA www -> 12044 : RA https -> 13527 : RA >>> root@bt:~$ nmap -p 22 80 443 192.168.1.1 Starting Nmap 6.25 ( http://nmap.org ) at 2013-02-26 10:33 EST Invalid target host specification: 80 Invalid target host specification: 443 Nmap scan report for 192.168.1.1 Host is up (0.00044s latency). PORT STATE SERVICE 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds 念のために、本当に合ってるか nmapで調べた所、 22/tcp open ssh とsshだけポートが開いてることが確認出来ました。 13年2月27日水曜日
  • 24. (多分)DDos攻撃 次の図から説明すると、 1. IPアドレスが172.16.247.144のパソコンがwiresharkを   開いて、パケットの受信量を見ています。 2. send(IP(dst="172.16.247.144",src=RandIP("78.0.0.0/16"))/ 送信元はClassAのIPア TCP(sport=RandShort(),dport=51487),loop=True,verbose=True) ドレス(Random) 送信元のポートも  ランダム 送信元はClassAのIPア loop=無限に送る ドレス(Random) verbose=詳細に送る 13年2月27日水曜日
  • 25. 2(続き).のようなソースを送ることで、ターゲットの1つのポート  が大変なことになる。 左に出てくるのは『ネットワーク通信』 を監視するためのツール。 3.Enterキーを推すと、1つのパソコンに向かってパケットが投げ られ続ける。左のネットワーク監視のツールが具体的に見える ようにしてる。 4. (1.)に出てきたパソコンがどれくらいパケットが送られてきた か見た所、約1分間で47.2MBのパケットが送られていることが わかる。CPUの処理が大変そう。あまり重くないパケットでもこ れぐらいにはなる。 13年2月27日水曜日
  • 27. ある、穏やかな暮らしをしている OS(Ubuntu)がいました。 13年2月27日水曜日
  • 28. Scapy(を使ってる主)が悪さを企んでいます…。 このパケットを送ったら(多分)大変なことに!! ←こいつ、 ネットワークを見るための者。 13年2月27日水曜日
  • 29. PoChitt ona 13年2月27日水曜日
  • 32. 1分で47.2MBなので、 23分で1038.4MB(約1.038GB)となり、 354時間後で1002528MG(約1.003TB)となる 特に重くしたパケットで無くてもこれぐらいになる…。 13年2月27日水曜日
  • 33. 良い子は真似しない DENE!! 13年2月27日水曜日
  • 34. Summary!!!! パケットとネットワークについて知らないと  ほとんど何も出来ない。 パケットが死ぬほど簡単に出来る。 パケットをGUIとしてみれるので見やすい! port,flag,送信元先,が超簡単に設定出来る。 Scapyの可能性が無限大に…。 13年2月27日水曜日
  • 35. みんなも パケット系男子に なろう!! 13年2月27日水曜日
  • 36. ご清聴 ありがとうございました。 13年2月27日水曜日