scapy presentation

34
AshiGirl96( ټ) from ZareGoto How to Use Scapy

Upload: reon-nishimura

Post on 21-Jun-2015

957 views

Category:

Documents


15 download

TRANSCRIPT

Page 1: Scapy presentation

AshiGirl96( ๑・ิټ・ิ๑) from ZareGoto

How to Use Scapy

Page 2: Scapy presentation

Self - IntroductionHandleName:AshiGirl96

SEX:男。

OS: Mac, BT5

Work:高専一年生。

Team: ZareGoto

Twitter: @ashigirl96

Language: Python/Asm

Interest:Security/Network

HomePage:reonreon3reon.hatenablog.com

Page 3: Scapy presentation

What is Scapy??

Scapyはツール。(Pythonで作れたCUI

自分の思いのままにパケットが作れちゃう!

通信の仕組みがわかるかも??

.pcapが見れちゃう!←

ネットワークが見れちゃう  快適な暮らしをあなたの生活に!

Page 4: Scapy presentation

プロトコルの基本知ってますよね?

Page 6: Scapy presentation

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

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

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

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

http://e-words.jp/w/E38397E383ADE38388E382B3E383AB.html 参照

通信プロトコルとは?

Page 7: Scapy presentation

Scapyの話に戻ります。

Page 8: Scapy presentation

How to INSTALL!!!

さすがに Python はインストールしてるって前提で行きます

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

$ cd /tmp$ wget scapy.net$ unzip scapy-latest.zip$ cd scapy-2.*$ sudo python setup.py install

For UNIX like

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

Page 9: Scapy presentation

STARTING USAGE!!!!

Pythonをベースとしてる

インタプリタ

⬇ファイルの場合

$ sudo scapyWelcome to Scapy (2.0.1-dev)>>>

“On Python”

from scapy.all import *

python ***.py

Page 10: Scapy presentation

AT FIRST STEPS!!!!Let’s building some packets!!

$ sudo scapy 1 >>> ping  = IP(dst='192.168.1.13')/ICMP() 2 >>> ping.show() 3 ###[ IP ]### 4   version= 4 5   ihl= None 6   tos= 0x0 7   len= None 8   id= 1 9   flags= 10   frag= 011   ttl= 6412   proto= icmp13   chksum= 0x014   src= 172.16.247.13915   dst= ***.***.**.***16   options= ''17 ###[ ICMP ]###18   type= echo-request19   code= 020   chksum= 0x021   id= 0x022   seq= 0x0

1.pingとはネットワークが

疎通しているか確認するための

コマンド(この場合パケット)

ping は,ICMPのechoコマンドを利用して、指定した相手先(IPアドレス)に

『全く一緒の文字列返して!』という感じ

で疎通をはかる。

2.IPプロトコル:データグラムや

パケットを中断するのに使われる主要

な通信プロトコル3.ICMPプロトコル:

IPのデータグラム処理における誤りの

通知や通信に関する情報の通知などのプロトコル

4.作ったパケットの中身を

見るための関数Packet.show()そしてその下が

パケットの構造になっている

Page 11: Scapy presentation

Other

>>> ex=Ether()/IP(dst=”reon3.rosx.net”)/TCP()/"GET /profile3.html HTTP/1.0 \n\n">>> 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 [email protected]<....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

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

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

Page 12: Scapy presentation

After that

>>>b = str(a)>>> b'\x00PV\xe3\xd5<\x00\x0c)C>\xfd\x08\x00E\x00\x00F\x00\x01\x00\x00@\x06\x80\x89\xac\x10\xf7\x8b\x1b`;,\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00K\xf1\x00\x00GET /profile3.html HTTP/1.0 \n\n'

9.パケットを機械語にすることができる

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 \n\n' |>>>>

Page 13: Scapy presentation

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.sprintfa.command()などなどたくさんあります。

Page 14: Scapy presentation

LET’S SEND PACKETS!!!!11.パケットを送る関数は send() と sendp() です

>>> send(IP(dst="1.2.3.4")/ICMP()).Sent 1 packets.

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

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

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

sendp()

Page 15: Scapy presentation

パケットを送ったらその答えが返ってくる関数sr(),srp()

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

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

>>> 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 ............PLEA0020 53 45 20 52 45 53 50 4F 4E 53 45 00 00 00 SE RESPONSE...>>>

sr()同じ文字列が

返ってきてるので、成功したことが

わかる(*‘ω‘ *)

Page 16: Scapy presentation

他に何が出来るか?

Page 17: Scapy presentation

TCP traceroute

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

Page 18: Scapy presentation

Use Wireshark

下の図のように パケットを作り、 wireshark(パケット)でwiresharkが開いて、パケットを見ることが出来ます。

Page 19: Scapy presentation

例えば、PortScanって知ってますか?

Page 20: Scapy presentation

サーバにログを残さずにポートスキャン出来る『ステルススキャンの一種』です。

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

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 参照

SYNスキャンとは?

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

RST 

Page 21: Scapy presentation

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フラグ)を送る。どのような反応になるか見ましょう。

Page 22: Scapy presentation

>>> 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.1

Starting 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 ssh

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

sprintf()関数を使って、レスポンスのフラグがどのようになっているか見ると、www(HTTP)と HTTPSはポートが閉まっていること(RA)がわかります。SSHはどうやら、開いているようなので後で閉じようと思います←

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

Page 23: Scapy presentation

最後に…。

Page 24: Scapy presentation

僕が好きな分野。

Page 25: Scapy presentation

ある、穏やかな暮らしをしているOS(Ubuntu)がいました。

Page 26: Scapy presentation

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

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

Page 27: Scapy presentation

PoChittona!!

←こいつ大変そう。

Page 28: Scapy presentation

in 1 min...

Page 29: Scapy presentation
Page 30: Scapy presentation

1分で47.2MBなので、23分で1038.4MB(約1.038GB)となり、

354時間後で1002528MG(約1.003TB)となる

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

Page 31: Scapy presentation

良い子は真似しないDENE!!

Page 32: Scapy presentation

Summary!!!!パケットとネットワークについて知らないと ほとんど何も出来ない。

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

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

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

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

Page 33: Scapy presentation

みんなもパケット系男子になろう!!

Page 34: Scapy presentation

ご清聴ありがとうございました。