Scapy presentation
Upcoming SlideShare
Loading in...5
×
 

Scapy presentation

on

  • 888 views

 

Statistics

Views

Total Views
888
Slideshare-icon Views on SlideShare
876
Embed Views
12

Actions

Likes
0
Downloads
9
Comments
0

2 Embeds 12

http://zaregoto96.hatenablog.com 10
http://reonreon3reon.hatenablog.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Scapy presentation Scapy presentation Presentation Transcript

    • How to Use ScapyAshiGirl96( ๑・ิ‫ิ・ټ‬๑) from ZareGoto
    • Self - IntroductionHandleName:AshiGirl96SEX:男。OS: Mac, BT5Work:高専一年生。Team: ZareGotoTwitter: @ashigirl96Language: Python/AsmInterest:Security/NetworkHomePage:reonreon3reon.hatenablog.com
    • What is Scapy??Scapyはツール。(Pythonで作れたCUI自分の思いのままにパケットが作れちゃう!通信の仕組みがわかるかも??.pcapが見れちゃう!←ネットワークが見れちゃう  快適な暮らしをあなたの生活に!
    • プロトコルの基本知ってますよね?
    • http://blog-imgs-45-origin.fc2.com/c/h/i/chitekizaisan/20111003-2.jpg
    • 通信プロトコルとは? ネットワークを介してコンピュータ同士が通信を行う上で、相互に決められた約束事の 集合。通信手順、通信規約などと呼ばれることもある。 英語しか使えない人と日本語しか使えない人では会話ができないように、対応している プロトコルが異なると通信することができない。人間同士が意思疎通を行う場合に、 どの言語を使うか(日本語か英語か)、どんな媒体を使って伝達するか(電話か手紙か)、 というように2つの階層に分けて考えることができるが、コンピュータ通信においても、 プロトコルの役割を複数の階層に分けて考える。 階層化することによって、上位のプロトコル(を実装したソフトウェア)は自分のすぐ下の プロトコルの使い方(インターフェース)さえ知っていれば、それより下で何が起きているかを まったく気にすることなく通信を行うことができる。電話機の操作法さえ知っていれば、 電話会社の交換局で何が起きているか知らなくても電話が使えるのと同じである。 現在インターネットで標準となっているIPは第3層(ネットワーク層)の、TCPやUDPは第4層 (トランスポート層)のプロトコルであり、HTTPやFTP、SMTP、POPなどは第5層(セッション層) 以上のプロトコルである。 http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html 参照
    • Scapyの話に戻ります。
    • 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.htmlWindows知らない(;*´Д`)。
    • STARTING USAGE!!!! “On Python”$ sudo scapyWelcome to Scapy (2.0.1-dev)>>>Pythonをベースとしてるインタプリタ➡ファイルの場合 python ***.pyfrom scapy.all import *
    • 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
    • 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 /index2E 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.『/』で文字列も一緒に書くと、一緒に入ることが出来る。
    • 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 |<IPversion=4L ihl=5L tos=0x0 len=70 id=1 flags= frag=0L ttl=64 proto=tcpchksum=0x8089 src=172.16.247.139 dst=27.96.59.44 options= |<TCPsport=ftp_data dport=www seq=0 ack=0 dataofs=5L reserved=0L flags=Swindow=8192 chksum=0x4bf1 urgptr=0 options=[] |<Raw load=GET / profile3.html HTTP/1.0 nn |>>>>
    • READING .PCAP FILE!!!!1 from scapy.all import *23 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() などなどたくさんあります。
    • 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.
    • パケットを送ったらその答えが返ってくる関数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... >>>
    • 他に何が出来るか?
    • TCP tracerouteres,unans= traceroute([‘目的地’],ttl=,dport=どのポートか)のように指定すると出来ます。成功した後にres.graph() と指定すると、図のように具体的に見れる。
    • Use Wireshark下の図のように パケットを作り、 wireshark(パケット)でwiresharkが開いて、パケットを見ることが出来ます。
    • 例えば、PortScanって知ってますか?
    • 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 参照
    • 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フラグ)を送る。 どのような反応になるか見ましょう。
    • sprintf()関数を使って、レスポンスのフラグがどのようになっているか見ると、 www(HTTP)と HTTPSはポートが閉まっていること(RA)がわかります。 SSHはどうやら、開いているようなので後で閉じようと思います←>>> ans,unans=_>>> ans.summary(lambda(s,r): r.sprintf("%TCP.sport% -> %TCP.dport% : %TCP.flags%"))ssh -> 12936 : SAwww -> 12044 : RAhttps -> 13527 : RA>>>root@bt:~$ nmap -p 22 80 443 192.168.1.1Starting Nmap 6.25 ( http://nmap.org ) at 2013-02-26 10:33 ESTInvalid target host specification: 80Invalid target host specification: 443Nmap scan report for 192.168.1.1Host is up (0.00044s latency).PORT STATE SERVICE22/tcp open sshNmap done: 1 IP address (1 host up) scanned in 0.06 seconds 念のために、本当に合ってるか nmapで調べた所、 22/tcp open ssh とsshだけポートが開いてることが確認出来ました。
    • 最後に…。
    • 僕が好きな分野。
    • ある、穏やかな暮らしをしている OS(Ubuntu)がいました。
    • Scapy(を使ってる主)が悪さを企んでいます…。 このパケットを送ったら(多分)大変なことに!! ←こいつ、ネットワークを見るための者。
    • PoChitt ona!! ←こいつ大変そう。
    • in 1 min...
    • 1分で47.2MBなので、23分で1038.4MB(約1.038GB)となり、354時間後で1002528MG(約1.003TB)となる特に重くしたパケットで無くてもこれぐらいになる…。
    • 良い子は真似しない DENE!!
    • Summary!!!!パケットとネットワークについて知らないと ほとんど何も出来ない。パケットが死ぬほど簡単に出来る。パケットをGUIとしてみれるので見やすい!port,flag,送信元先,が超簡単に設定出来る。Scapyの可能性が無限大に…。
    • みんなもパケット系男子に なろう!!
    • ご清聴ありがとうございました。