fuzzing とは、意図的なデータ(fuzz)をプログラムに...

141
1 from ZareGoto uzzing F Ashigirl96

Upload: dangnga

Post on 01-Apr-2018

229 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

1

from ZareGoto

uzzing FAshigirl96

Page 2: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

2

from ZareGoto

uzzing FAshigirl96

(入門)

Page 3: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

3

Self - Introduction

Page 4: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

Handle Name: Ashigirl96 - あしがる 西村 礼恩

趣味: Twitter

専門: Network/Control System Security

言語: Python

好きなもの: Scapyとママの作ったオムライス

Page 5: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

キャンプのきっかけ

Page 6: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

もともとパソコンをあまり触ってなかったけど、

まっちゃ139(去年の1,2月)に興味行ったら、

セキュリティに興味持って、 応募用紙に名前書いたら、

Page 7: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

もともとパソコンをあまり触ってなかったけど、

まっちゃ139(去年の1,2月)に興味行ったら、

セキュリティに興味持って、 応募用紙に名前書いたら、

受かりました。

Page 8: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

いきなりですが…

8

Page 9: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

Scapy is 何?

9

Page 10: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

いず 何?

10

Page 11: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

is 何?Fuzzing

11

Page 12: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

というほど、おおげさなものではありません…。

12

Page 13: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

13

と、言いたいですが…

Page 14: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

14

(☝ ՞ਊ ՞)☝中二病君

自動車.....

Page 15: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

15

(☝ ՞ਊ ՞)☝中二病君

http://policecar.nomaki.jp/1.jpg

Page 16: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

16

(☝ ՞ਊ ՞)☝中二病君

http://home-bb.biz/wp-content/uploads/2013/07/c5cdaf66f8642101a3da8a60ec825ecf.jpg

Page 17: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

17

(☝ ՞ਊ ՞)☝中二病君

工場.....

Page 18: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

18

(☝ ՞ਊ ՞)☝中二病君

http://cdn-ak.f.st-hatena.com/images/fotolife/w/wami/20090219/20090219234336.jpg

Page 19: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

19

(☝ ՞ਊ ՞)☝中二病君

http://tomtittot.asablo.jp/blog/img/2012/04/23/1f4451.jpg

Page 20: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

20

(☝ ՞ਊ ՞)☝中二病君

リア充.....

Page 21: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

21

(☝ ՞ਊ ՞)☝中二病君

http://yaplog.jp/cv/warabidani/img/138/earthmoon_p.jpg

Page 22: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

22

(☝ ՞ਊ ՞)☝中二病君

http://yaplog.jp/cv/warabidani/img/138/earthmoon_p.jpg

Page 23: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

23

に繋がるかも…

不謹慎ですみまへん

Page 24: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

24

(o´・ω・`)

Page 25: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

25

(ヾノ・∀・`)ナイナイ

Page 26: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

Scapy とは、

26

Page 27: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

27

Scapy is a powerful interactive packet manipulation program.

http://www.secdev.org/projects/scapy/にて

Page 28: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

28

Scapy is a powerful interactive packet manipulation program.

It is able to forge or decode packets of a wide

number of protocols

Page 29: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

29

Scapy is a powerful interactive packet manipulation program.

It is able to forge or decode packets of a wide

number of protocols

send them on the wire, capture them, match requests and replies,

and much more.

Page 30: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

30

Scapy is a powerful interactive packet manipulation program.

It is able to forge or decode packets of a wide

number of protocols

send them on the wire, capture them, match requests and replies,

and much more.

It can easily handle most classical tasks like scanning, tracerouting, probing, unit tests, attacks or network

discovery (it can replace hping, 85% of nmap, arpspoof, arp-sk, arping, tcpdump, tethereal, p0f, etc.). It also

performs very well at a lot of other specific tasks that most other tools can't handle, like sending invalid frames,

injecting your own 802.11 frames, combining technics (VLAN hopping+ARP cache poisoning, VOIP decoding on

WEP encrypted channel, ...), etc.

Page 31: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

31

平たくいえば、

Page 32: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

32

平たくいえば、簡易パケット生成モジュール in Python

Page 33: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

33

次に、

Page 34: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

制御システム とは、

34

Page 35: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

35

---- from kotobank.jp

Page 36: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

36

それは重要じゃない。

Page 37: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

37

???

Page 38: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

38

興味あるのは、制御システムのセキュリティ

Page 39: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

39

では、制御システムのセキュリティで有名なのは

Page 40: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

40

組織、システム自体のレイヤ、制御システムの業界、

それぞれの標準が提案されている

Page 41: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

41

組織、システム自体のレイヤ、制御システムの業界、

それぞれの標準が提案されている

IEC62443

注目されている

Page 42: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

42

IEC62443シリーズ統合化(しつつある)

WIB (nternational Instrument User’s Association)

!

ISCI (ISA Security Compliance Institut)

!

EDSA認証

Page 43: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

43

EDSA認証対象

Page 44: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

44

EDSA認証対象

制御システム向けの組み込み機器

Page 45: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

45

組み込み機器は、組み込みソフトウェアのプロセスの制御、監視を実行する

Page 46: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

46

EDSA認証は3つにカテゴリできる

ソフトウェア開発セキュリティ評価(SDSA)

機能セキュリティ評価(FSA)

通信ロバストネス試験(CRT)

Level1 Level2 Level3

Page 47: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

47

一旦ここまで…次に、

Page 48: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

とは、

48

Fuzzing

Page 49: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

49

Fuzzingとは、意図的なデータ(Fuzz)をプログラムに

自動的に与えることで、クラッシュやバグを発見するプロセスのことです。

Page 50: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

50

つまり、脆弱性を見つけるプロセス。

Page 51: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

51

Fuzzデータはvictimによって変わります。

Page 52: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

52

For Example:

HTTPリクエスト --->----

Webサーバ(足軽画伯)

GET / HTTP/1.1Host: www.hoge.jpHost: www.hoge.jpHost: www.hoge.jpHost: www.hoge.jpHost: www.hoge.jp

Page 53: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

53

For Example:

異常なコマンドライン

Page 54: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

54

For Example:

他にも、デバイスがプロトコル実装が正確に作動していて、 悪意のあるネットワークトラフィックにも対応できるか というテストをしていきます。

Page 55: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

なら、こんなことできるのではないか。

55

Page 56: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

次の3つを組み合わせてみました。

56

Page 57: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

57

・ターゲット: 制御システムで使うプロトコル

Page 58: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

58

・ターゲット: 制御システムで使うプロトコル

・何をするか: ファジングによる脆弱性発見

Page 59: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

59

・ターゲット: 制御システムで使うプロトコル

・何をするか: ファジングによる脆弱性発見

・ツール: Scapy

Page 60: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

60

今回使うプロトコル DNP3.0

Page 61: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

61

DNP3.0とは

Distributed Network Protocol

HMI/SCADA~RTU間で使用されてる通信プロトコル

米国で多用

Page 62: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

62

DNP3.0とは

レイヤはこのように なっています

Page 63: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

63

もっと…もっと詳しく

Page 64: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

Application Layer

64

Page 65: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

65

Transport Function

Page 66: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

66

Data Link Layer

Page 67: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

67

それぞれのFieldをScapyを使い記述します

Page 68: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

68

難しい?

Page 69: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

69

うん、難しい

Page 70: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

70

っ Scapy Reference

Page 71: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

71

Page 72: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

72

興味ある人はここで調べてください☆

Page 73: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

73

95 FunctionCode = {! 96 0:"Confirm ",! 97 1:"Read ",! 98 2:"Write ",! 99 3:"Select ",!100 4:"Operate ",!101 5:"Dir operate ",!102 6:"Dir operate – No resp ",!103 7:"Freeze ",!104 8:"Freeze – No resp ",!105 9:"Freeze clear ",!106 10:"Freeze clear – No resp ",!107 11:"Freeze at time ",!108 12:"Freeze at time – No resp ",!109 13:"Cold restart ",!110 14:"Warm restart ",!111 15:"Initialize data ",!112 16:"Initialize application ",!113 17:"Start application ",!114 18:"Stop application ",!115 19:"Save configuration ",!116 20:"Enable unsolicited ",!!

(オレオレ)コードの一部①

Page 74: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

74

117 21:"Disable unsolicited ",!118 22:"Assign class ",!119 23:"Delay measurement ",!120 24:"Record current time ",!121 25:"Open file ",!122 26:"Close file ",!123 27:"Delete file ",!124 28:"Get file information ",!125 29:"Authenticate file ",!126 30:"Abort file "!127 }!128 class DNP3QR(Packet):!129 name = "DNP3.0 request"!130 fields_desc = [!131 #Application Header!132 #Application Control!133 XByteField('seq',0),!134 BitField('uns',0),!135 BitField('con',0),!136 BitField('fin',0),!137 BitField('fir',0),!138 !139 #Function Code!140 ShortEnumField("type", 1, FunctionCode)

(オレオレ)コードの一部②

Page 75: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

75

DNP3.0プロトコルで使われるデータに合わせたファズデータを作る

Page 76: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

76

ここを意識しましょう・整数オーバーフロー ・バッファオーバーフロー

・Off by one

・境界値未チェック ・異常フラグ ・サービス妨害攻撃 ・リソース異常消費

Page 77: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

77

実は、まだ作ってる最中で…

Page 78: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

78

話飛びます。

Page 79: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

79

ちょっと前のインシデント

Page 80: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

80

Stuxnet

Page 81: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

81

の、(インシデント)概要。

Page 82: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

82

1.USBメモリやインターネットを通じて情報システムへの侵入

Page 83: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

83

2.システムの脆弱性を利用し、権限昇格、システム環境内部でウィルスの拡散実行

Page 84: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

84

3.バックドアを作成し、外部指令サーバ(C&Cサーバ)や

80番ポート(HTTP)を介し通信し、ウィルスの増強化

Page 85: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

85

4.組織内のネットワークに入り、制御システムへの侵入

Page 86: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

86

5.制御システム上にある装置に対する攻撃実行

Page 87: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

87

ヤバイ

Page 88: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

88

Function of Stuxnet

Page 89: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

89

1. 500 KBのプログラムで4000弱の機能を持っている

Page 90: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

90

2. 複雑/オブジェクト指向

Page 91: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

91

3. 複数のゼロデイを利用

Page 92: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

92

4. 2つのrootkitを使用し、制御システムをターゲットとしている

Page 93: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

93

5. Windowsに詳しい、制御システムであるWinCC/Step7についても詳しい

Page 94: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

94

Stuxnetが出るまでの前後

Page 95: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

95

汎用製品や標準プロトコルで構成されている情報システム

(以前)

Page 96: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

96

(以前)

制御システムのオープン化(汎用製品や標準プロトコルの 利用)

Page 97: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

97

(以前)

端末の9割以上がWindows系を利用している

Page 98: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

98

How to 対策

Page 99: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

99

How to 対策個別攻撃手法の回避法

Page 100: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

100

システム設計時におけるネットワーク設計

Page 101: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

101

システム設計時におけるネットワーク設計

『外部との隔離や接続ルートの明確』

Page 102: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

102

外部との通信における接続先のフィルタリング

Page 103: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

103

外部との通信における接続先のフィルタリング

&&

外部との接続点における通信の監視、制御機構

Page 104: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

104

どうですか?

中二病妄想力の足しになりましたでしょうか?

Page 105: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

105

参考資料(Scapy):

http://fossies.org/dox/scapy-2.2.0/

http://www.secdev.org/projects/scapy/doc/build_dissect.html

http://www.secdev.org/projects/scapy/doc/advanced_usage.html

Page 106: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

106

参考資料(DNP3.0):

http://www.dnp.org/default.aspx

http://www.softech.co.jp/mm_120404_firm.htm

http://www05.abb.com/global/scot/scot229.nsf/veritydisplay/65b4a3780db3b3f3c2256e68003dffe6/$file/rec523_dnpprotmanend.pdf

Page 107: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

107

参考資料(Fuzzing):

http://www.ipa.go.jp/security/vuln/fuzzing.html

http://lifeofpentester.blogspot.jp/2013/10/ fuzz-testing-web-applications-with-burp.html

Page 108: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

108

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

Page 109: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

109

話しそれますが…

Page 110: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

110

演習しましょう!

Page 111: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

111

(実践的に)Scapy使ってみよう...!!

Page 112: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

112

こんなことしたい。

Page 113: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

113

1.ettercapでARPキャッシュポイゾニングします2.ettercapでキャプチャしたパケットをScapyで解析します3.解析したのをPythonでごみょごみょして、ソースコードを取り出します。4.それを某サイトに送ります。

Page 114: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

114

使うもの、ettercap、Scapy

Page 115: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

115

192.168.1.17(Backtrack5)

192.168.1.4(Mac)

某サイト

Page 116: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

116

192.168.1.17(Backtrack5)

192.168.1.4(Mac)

ARPキャッシュポイズニング

某サイト

Page 117: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

117

192.168.1.17(Backtrack5)

192.168.1.4(Mac)

ARPキャッシュポイズニング

某サイト

ソースコード投げる

Page 118: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

118

192.168.1.17(Backtrack5)

192.168.1.4(Mac)

ARPキャッシュポイズニング

某サイト

ソースコード投げる

BT5が奪取(?)

Page 119: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

119

192.168.1.17(Backtrack5)

192.168.1.4(Mac)

ARPキャッシュポイズニング

某サイト

ソースコード投げる

解析...

Page 120: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

120

Ettercapは、スイッチドLAN環境のための多目的なスニファ/インターセプター/ロガーです。多くのプロトコル(暗号化されたものも含む)のアクティブもしくはパッシブな分析をサポートし、ネットワークとホスト分析のための多くの機能を含んでいます。

Page 121: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

121

Ettercapは、スイッチドLAN環境のための多目的なスニファ/インターセプター/ロガーです。多くのプロトコル(暗号化されたものも含む)のアクティブもしくはパッシブな分析をサポートし、ネットワークとホスト分析のための多くの機能を含んでいます。

長い

Page 122: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

122

Ettercapは、スイッチドLAN環境のための多目的なスニファ/インターセプター/ロガーです。多くのプロトコル(暗号化されたものも含む)のアクティブもしくはパッシブな分析をサポートし、ネットワークとホスト分析のための多くの機能を含んでいます。

長い長い

Page 123: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

123

Ettercapは、スイッチドLAN環境のための多目的なスニファ/インターセプター/ロガーです。多くのプロトコル(暗号化されたものも含む)のアクティブもしくはパッシブな分析をサポートし、ネットワークとホスト分析のための多くの機能を含んでいます。

長い長い長い

Page 124: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

124

Ettercapは、スイッチドLAN環境のための多目的なスニファ/インターセプター/ロガーです。多くのプロトコル(暗号化されたものも含む)のアクティブもしくはパッシブな分析をサポートし、ネットワークとホスト分析のための多くの機能を含んでいます。

中二病の おもちゃ

Page 125: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

125

http://sourceforge.jp/projects/sfnet_ettercap/

ここからダウンロード出来ます!

Page 126: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

126

1.ettercapでARPキャッシュポイゾニングします

2.ettercapでキャプチャしたパケットをScapyで解析します3.解析したのをPythonでごみょごみょして、ソースコードを取り出します。4.それを某サイトに送ります。5.正答します。

Page 127: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

127

Page 128: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

128

%ettercap -T -M arp -i eth1 /192.168.1.4/ /192.168.1.1/ -w 01.pcap

コマンド

Page 129: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

129

%ettercap -T -M arp -i eth1 /192.168.1.4/ /192.168.1.1/ -w 01.pcap

コマンド

use text only CUI

Page 130: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

130

%ettercap -T -M arp -i eth1 /192.168.1.4/ /192.168.1.1/ -w 01.pcap

コマンド

METHOD:ARGS perform a mitm attackin this case , ARP cache poisoning

Page 131: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

131

%ettercap -T -M arp -i eth1 /192.168.1.4/ /192.168.1.1/ -w 01.pcap

コマンド

-i, –iface use this network interfacein this case, use 'eth1'

Page 132: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

132

%ettercap -T -M arp -i eth1 /192.168.1.4/ /192.168.1.1/ -w 01.pcap

コマンド

Attacker and victim

Page 133: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

133

%ettercap -T -M arp -i eth1 /192.168.1.4/ /192.168.1.1/ -w 01.pcap

コマンド

-w, –write write sniffed data to pcapfile

Page 134: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

134

とあるサイトで…192.168.1.4(victim)が…

Page 135: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

135

1.ettercapでARPキャッシュポイゾニングします2.ettercapでキャプチャしたパケットをScapyで解析します3.解析したのをPythonでごみょごみょして、ソースコードを取り出します。 4.それを某サイトに送ります。

Page 136: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

136

図1.

Page 137: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

137

図2.

Page 138: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

138

図3.

Page 139: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

139

図4.

Page 140: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

140

演習…終わりです…

Page 141: fuzzing とは、意図的なデータ(Fuzz)をプログラムに 自動的に与えることで、クラッシュやバグを発見するプロセスのことです。50 つまり、脆弱性を見つけるプロセス。

141

ありがとうございました!!