More Related Content Similar to Scapy presentation Remake(訂正) Similar to Scapy presentation Remake(訂正) (20) 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日水曜日
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日水曜日
32. 1分で47.2MBなので、
23分で1038.4MB(約1.038GB)となり、
354時間後で1002528MG(約1.003TB)となる
特に重くしたパケットで無くてもこれぐらいになる…。
13年2月27日水曜日
34. Summary!!!!
パケットとネットワークについて知らないと
ほとんど何も出来ない。
パケットが死ぬほど簡単に出来る。
パケットをGUIとしてみれるので見やすい!
port,flag,送信元先,が超簡単に設定出来る。
Scapyの可能性が無限大に…。
13年2月27日水曜日
35. みんなも
パケット系男子に
なろう!!
13年2月27日水曜日
36. ご清聴
ありがとうございました。
13年2月27日水曜日