SlideShare a Scribd company logo
レベルを上げて物理で殴れ
   Fuzzing入門編
    ところてん
    @tokoroten
自己紹介
• 元:中島飛行機跡地、不発弾処理係
• 現:ソーシャルゲーム屋の裏方

• Railsの会社でPythonを書いてる
• セキュリティ、自然言語処理、機械学習

• Python100%でゲーム作ってコミケで頒布
 – http://www.pygame.org/project-Howitzer-1925-.html
Fuzzingとは!

• レベルを上げて、物理で殴
  る

• 計算力を上げて、テストで
  殴る
具体的には
• わずかな時間を見つけて
  デバッグレボリューション

• うれしくて感動でコードが
  パーン

• ┗(^o^ )┓三
簡単に言うと?

• プログラムに

• ランダムなデータを食わせ
  て

• クラッシュさせる
Fuzzingはテストの裏返し

• ユニットテスト
 –正常に動くことの保障


• Fuzzing
 –バグが出ないことの安心
メリット
• バグや脆弱性を叩きつぶせる
 –人間の考慮の範囲外を攻められる


• Fuzzingは並列化により高速化可能
 –クラウド上で全力で殴れる
ファジングの種類
• ダムファジング
  – ガチでランダムなデータを入力
  – 作るのは簡単、効率は悪い

• ミューテーションファジング
  – 正常なデータを元に突然変異させて入力
  – 作るのはある程度簡単、効率はそこそこ

• スマートファジング
  – プロトコルを元にしてデータを生成
  – 作るのは超大変、効率はものすごく良い
ファジングのレイヤー
• プロトコルレイヤー
 – HTTP、FTP、SIP、XML、etc...


• 関数単位
 – ユニットテストを改造すると簡単


• ファイル単位
 – Officeとか、Firefoxのデバッグ
研究レベルのもの
• GA Fuzzing
  – Fuzzingしながらコードカバレッジを計測
  – よりコードカバレッジが高いテストデータほ
    ど評価
  – テストデータをGA交配してテストを作り出す
  – より深い場所のコードに対して攻撃できる


• 再実装してみたが性能はいまひとつ
  – 深いところに到達するが、境界を攻撃しづら
    い  http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4682289
Fuzzingの例
• Firefox
  – Alexaを元に100万のサイトからHTMLを取得
  – デイリーでサブセットを食わせる
  – 週末に全部のデータを食わせる

• マイクロソフト
  – Fuzzingで自社プロダクトを攻撃
  – Office2010は1800個のバグを発見
  – 他にもVistaはFuzzingでXPよりバグを減らせた
  – 社内でFuzzingコンテストをしている
今回作ったモノ
• 正規表現を入力すると、
  受理可能な文字列を返す、Fuzzer

• 実装
 – pythonのreモジュールの内部で利用されてい
   る
   sre_parseモジュールを利用
 – sre_parseは正規表現をパース、木構造に変換
 – 正規表現のオートマトンをランダムウォーク
   して、
   受理可能な文字列を出力
              https://github.com/tokoroten/acceptableRegex
sre_parseの利用
• 正規表現 "(fuga{4,10})+"
• sre_parseでパース後の構造
 – [('max_repeat', (1, 65535, [('subpattern', (1, [('liter
   al', 102), ('literal', 117), ('literal', 103), ('max_repea
   t', (4, 10, [('literal', 97)]))]))]))]


• あとはがんばってランダムウォーク
実験
• URLの正規表現
 – http://(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][-a-zA-Z0-9]*[a-
   zA-Z0-9]).)*(?:[a-zA-Z]|[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-
   9]).?|[0-9]+.[0-9]+.[0-9]+.[0-9]+)(?::[0-
   9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-
   f][0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-
   9A-Fa-f][0-9A-Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-
   9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-
   zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-
   f])*)*)*(?:?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-
   Fa-f][0-9A-Fa-f])*)?)?


                                  http://www.din.or.jp/~ohzaki/perl.htm
sre_parseによるパース結果
•   [('literal', 104), ('literal', 116), ('literal', 116), ('literal', 112), ('literal', 58), ('literal', 47), ('literal', 47), ('subpattern', (None, [('branch', (None, [[('max_re
    peat', (0, 65535, [('subpattern', (None, [('subpattern', (None, [('in', [('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57))]), ('branch', (None, [[], [('
    max_repeat', (0, 65535, [('in', [('literal', 45), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57))])])), ('in', [('range', (97, 122)), ('range', (65, 90)), ('
    range', (48, 57))])]]))])), ('literal', 46)]))])), ('subpattern', (None, [('in', [('range', (97, 122)), ('range', (65, 90))]), ('branch', (None, [[], [('max_repeat', (0,
    65535, [('in', [('literal', 45), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57))])])), ('in', [('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57))]
    )]]))])), ('max_repeat', (0, 1, [('literal', 46)]))], [('max_repeat', (1, 65535, [('in', [('range', (48, 57))])])), ('literal', 46), ('max_repeat', (1, 65535, [('in', [('ra
    nge', (48, 57))])])), ('any', None), ('max_repeat', (1, 65535, [('in', [('range', (48, 57))])])), ('literal', 46), ('max_repeat', (1, 65535, [('in', [('range', (48, 57)
    )])]))]]))])), ('max_repeat', (0, 1, [('subpattern', (None, [('literal', 58), ('max_repeat', (0, 65535, [('in', [('range', (48, 57))])]))]))])), ('max_repeat', (0, 1, [('
    subpattern', (None, [('literal', 47), ('max_repeat', (0, 65535, [('subpattern', (None, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('li
    teral', 33), ('literal', 126), ('literal', 42), ('literal', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57)), ('literal', 58), ('
    literal', 64), ('literal', 38), ('literal', 61), ('literal', 43), ('literal', 36), ('literal', 44)])], [('literal', 37), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97,

    102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))])), ('max_repeat', (0, 65535, [('subpattern', (None, [('literal', 59), ('max_r
    epeat', (0, 65535, [('subpattern', (None, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('literal', 33), ('literal', 126), ('literal', 42), ('lit
    eral', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57)), ('literal', 58), ('literal', 64), ('literal', 38), ('literal', 61), ('lit
    eral', 43), ('literal', 36), ('literal', 44)])], [('literal', 37), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range',
    (65, 70)), ('range', (97, 102))])]]))]))]))]))])), ('max_repeat', (0, 65535, [('subpattern', (None, [('literal', 47), ('max_repeat', (0, 65535, [('subpattern', (No
    ne, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('literal', 33), ('literal', 126), ('literal', 42), ('literal', 39), ('literal', 40), ('literal', 41),
    ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57)), ('literal', 58), ('literal', 64), ('literal', 38), ('literal', 61), ('literal', 43), ('literal', 36), ('literal', 44)])
    ], [('literal', 37), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))]))
    , ('max_repeat', (0, 65535, [('subpattern', (None, [('literal', 59), ('max_repeat', (0, 65535, [('subpattern', (None, [('branch', (None, [[('in', [('literal', 45),

    ('literal', 95), ('literal', 46), ('literal', 33), ('literal', 126), ('literal', 42), ('literal', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('ra
    nge', (48, 57)), ('literal', 58), ('literal', 64), ('literal', 38), ('literal', 61), ('literal', 43), ('literal', 36), ('literal', 44)])], [('literal', 37), ('in', [('range', (48, 57)), ('
    range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))]))]))]))]))])), ('max_repeat', (0, 1, [('subpatt
    ern', (None, [('literal', 63), ('max_repeat', (0, 65535, [('subpattern', (None, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('literal', 3
    3), ('literal', 126), ('literal', 42), ('literal', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57)), ('literal', 59), ('literal',
    47), ('literal', 63), ('literal', 58), ('literal', 64), ('literal', 38), ('literal', 61), ('literal', 43), ('literal', 36), ('literal', 44)])], [('literal', 37), ('in', [('range', (48, 57))
    , ('range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))]))]))]))]))]))]
出力結果
•   http://1625.33425u08104123.781417247
•   http://55528104.3857525588?613082112.77601072
•   http://35037.3542P46667.48007/%eD%ee~;-):=-
    :%Be;@$%D4+!;%aB,;)r%B7%68;%ed$%58':),/%31%5A%DC/%bB%e1.;&;)%AB%Db4,%e1%Ee4;%A4=%dB6%67;%Bd0%6b/;%b8%eB%4B%2e%c6%1b-
•   http://E--L.f.R.8.2.qj-6.pvYRV-10J8:2067715
•   http://235430.86635865x3304578.84274/%cB%AC;)_'_;%bA'%E0$%31)%c3;'%Aa*%bE+;!y+~=@;!)%DB:%dD%bb'@;_%cE%de@%A6%cC);%BB%Dc;n
    %Ec%4D;=(=;%68$&%eD$--/IY-;.%aE-)&%ed%E7%71%Eb?.%AC'%Db%cC%eEfl%67
•   http://3.044n8365426546.864:707/%65%A2,%5E,%ea%Ec%2C_%dD;;c%45&%dE~L;)%aA~=;%bC%34%d6;%0D:%Cb=_/%aA,%ab=%B1%bC:&_;,+=;%3
    e=%BB%C0%34)%0b.;%5AI%eB%a1;@;%EA%c5:;%bB%4a,%c0%3D%0E%Ce;!%Ee*)%e82+;@E*'%72-$$%2c;%bD%bD%De-
    %b0+/;$%DE%17%1E)%CB%2E-;%aB!;%24%d4$_%5d/%70@~%cb'(;%4d%CA%80:;%ED%205%7d=;;*l%D8*;-@,/%D3.%eEi;(*%B3=Bc;+%aD%bA)'--
    +%D8%bA;'=~%Ad%67%30';%aD*%45%c4(*;%36%E6$!=(;_%Ab%ED%db+U%aA%0B;!%DB:(A%e76%AB*;='%8e%d7!%AD%2dS~;+%Da%cC%2BT%BE)
    _%dDy?%CA%aE
•   http://11285763.087w614.4257718562/%AB$%Cd*;*,%be%E3:%5B)%aa%8Ba;%d3_+%E6%E6*%ca;.,;,!%7E~%ee%a8%AB;%5DB8;%Ae%CA%4A(+;*-
    %2c%d3@*;%26.%6D:@%C6/@;%8A%BA%D4%be%E8%E3,;.%Cb+%cD/!'%bc;%EA$m%d830_%c8%6D;%AB@~;;;%a8;:@_%e1;%a4;%cC%db%aE%0c
    %A3(!$;%c4%ca~&%cdc;-)/_.%B6(%cb!;$%7D%aC~@%7b%ee,%0a;%4c;%Ce;%bb$%c7%8C:%Ee%Eb%EE%48~;%Ab*%0A/%be-
    EY%dC%bb(:;%45%6Cp)%55-
    %aA%7A;%DB%Ab%66=%Ed%db%BD&%D3/*@.%Abl=%B8_%BD@;%5B)((h%bD%e3'%d7/%e0);%bB;%CB%5e;@H:%e5;~_:=%6A%0c%Da%Bb,/h:%D1
    %Ea,;%43'%eA%BB.%a7:%a5;-2%Cc1':./;-%Ee;%4E*.%84=~%D6&%A8;%eB%dC%cB;%db%aA%7E):,(,%2E-
    ;)%AEi++$;;==%ac:%C4%62X%7A/)%eb%3a%EB%4c0%aa;C-@@;-
    :@&5Q%eD,,';!:y,i*'=%4e;%21%aa%68$',%Bc:%A2%7B;'%2d@%dA%ED%6a;(%dB%2a(%35;%e7%ED(_%bD%51+1;%26%D0!%Ce;%4ap%Ea%B1;/%aC
    =+%a2_AN;~@%Bb%CB%b2;.%bb%cA%1B=@%Cb%c1%8Aq;v%CA%BA;@'%bD=;,%1b%a2@@@;_@&@!%ac?%ce+_XS$%d8
•   http://s.E.x6a-Y7-W.X.lJ-S1A7.:5/%C5;%d4Q$-
    $!*+B/%a3@%2b,j%A1%c1@%aB;~)S%eE%01fl);+%7e%BA&%03@=U,%67;e,%0b%cc%77;(_%65%e1%AD+%e8H;&e.+!%aE%C8*%Bb!;%Da+%eB:%8c
    ;%32%B5%E6%CD@!%61/-+%5E%D3+:!;;1$,%cA$%ca!$%e3!/%8B%a2%C3%a3%b0~%a6%Da;'%d1%D7,%88);'::~@3%58_;--
    @_%8b;%c5%a1%Eb6&%2b%Ae%ba;&%67@%Be%A4%4D!;%EDeD+%2d%da)%57*/&%ca%d1'F)%D26w;-:;+=%44I%ede%D6%41%ee;%ee-
    %db@%c4',%ee;%Da;@%c3G~:6;%52p)o%Eb%AA!;$!:'%DA&%C50;/%ca%ea'1.;%AC%Ca:%73L;;%Aa&a)%Aa;;$~!_%ac,/)%BD.;:L%63-
    %54,!;%ee%cD%36%bB=!%D0;;%be%E5.;%ad%6E%38%BeI!;%dd%EC;%c6*;+%2B_%81')%58(/(%45%BC;=*:'%3a%cE*%5B$;%c7%C8%74$,;$%cE%E4
    %A5;;%E0%B5'%AB%Cd%87m+?'$:;!%DE%5b
•   http://J8614.C/,%D1%E3%2a@;.-%b8;=@%36=$;%Ce@;%2a_&E%AE/%0C%De%eB+;!%EE-,%5A~=_@-
    ;%20%BC%Bd!%Ec;%ba;%07;=%Da)S%ee.%aa%dE'$;;(%Ee$;%C8%aD%ad;/;;,%7A;nY%B1;.%cE%Bd%D8/.@-%67_0%dD%2A0/%EB%ea$%CC%3a-
    !~t;%bc%2c%CB%d4!;%C4%a1@~%DE,%Ed%6a_;;%dA)*%2d/%1b,-%6Em%ec%01%81%bE%da;%Dd=~%0B%A1%bD'o;)%Ad@%b8+%Ee~&(.;%2e%EB




                                                                まさに外道!
アタックしてみよう




   URLを10万件食わせても、TeraPadとSkypeは問題なし
         URLパーサがヘボいとクラッシュする可能性
まとめ
• Fuzzingはランダムデータによる攻撃
• バグがないことの保証

• 正規表現からランダムパターンを作っ
  て、
  効率よくアタックするコードをPython実装

• みんな自分のコードを攻撃しよう
本業では使ってるの?

• 「まだ」使ってないよ

• これから使うよ!

• 覚悟しといてね>同僚各位
最後に
• MSが同じものを提供していた!




              (∩ ゚д゚)アーアーきこえなーい
参考文献
• 書籍
 – ビューティフルテスティング
 – ファジング:ブルートフォースによる脆弱性発見手法
 – リバースエンジニアリング ―Pythonによるバイナリ解析技
   法
• 記事
 – http://www.computerworld.com/s/article/9174539/Microsoft_r
   uns_fuzzing_botnet_finds_1_800_Office_bugs
 – http://www.hackingvoip.com/
 – http://www.blackhat.com/presentations/bh-usa-06/BH-US-06-
   Endler.pdf
 – http://msdn.microsoft.com/en-us/library/cc162782.aspx
 – http://news.mynavi.jp/articles/2007/11/17/bhj3/index.html
参考文献
• ツール
 – http://peachfuzzer.com/
 – http://www.microsoft.com/download/en/details.aspx
   ?id=21769
 – http://www.microsoft.com/download/en/details.aspx
   ?id=20095
 – http://freecode.com/projects/zzuf?branch_id=68024
   &release_id=245074
 – http://packetstormsecurity.org/fuzzer/
 – http://www.computerdefense.org/2006/12/webfuzz-
   a-series-of-basically-useless-python-scripts/

More Related Content

What's hot

Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
稔 小林
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
【プライム・ストラテジー】ローカルLLMを複数組み合わてみた(インフラエンジニアのためのChatGPT入門LT)
【プライム・ストラテジー】ローカルLLMを複数組み合わてみた(インフラエンジニアのためのChatGPT入門LT)【プライム・ストラテジー】ローカルLLMを複数組み合わてみた(インフラエンジニアのためのChatGPT入門LT)
【プライム・ストラテジー】ローカルLLMを複数組み合わてみた(インフラエンジニアのためのChatGPT入門LT)
icebreaker4
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
Kuniyasu Suzaki
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
Shohei Koyama
 
DevOps Overview
DevOps OverviewDevOps Overview
DevOps Overview
IIJ
 
なぜコンピュータを学ばなければならないのか 21世紀の君主論
なぜコンピュータを学ばなければならないのか 21世紀の君主論なぜコンピュータを学ばなければならないのか 21世紀の君主論
なぜコンピュータを学ばなければならないのか 21世紀の君主論
Tokoroten Nakayama
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
Preferred Networks
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
Naohiro Fujie
 
Nmapの真実(続)
Nmapの真実(続)Nmapの真実(続)
Nmapの真実(続)
abend_cve_9999_0001
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
Hitachi, Ltd. OSS Solution Center.
 

What's hot (20)

Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
【プライム・ストラテジー】ローカルLLMを複数組み合わてみた(インフラエンジニアのためのChatGPT入門LT)
【プライム・ストラテジー】ローカルLLMを複数組み合わてみた(インフラエンジニアのためのChatGPT入門LT)【プライム・ストラテジー】ローカルLLMを複数組み合わてみた(インフラエンジニアのためのChatGPT入門LT)
【プライム・ストラテジー】ローカルLLMを複数組み合わてみた(インフラエンジニアのためのChatGPT入門LT)
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
 
インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方インフラエンジニアの綺麗で優しい手順書の書き方
インフラエンジニアの綺麗で優しい手順書の書き方
 
DevOps Overview
DevOps OverviewDevOps Overview
DevOps Overview
 
なぜコンピュータを学ばなければならないのか 21世紀の君主論
なぜコンピュータを学ばなければならないのか 21世紀の君主論なぜコンピュータを学ばなければならないのか 21世紀の君主論
なぜコンピュータを学ばなければならないのか 21世紀の君主論
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
 
Nmapの真実(続)
Nmapの真実(続)Nmapの真実(続)
Nmapの真実(続)
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方OAuth 2.0のResource Serverの作り方
OAuth 2.0のResource Serverの作り方
 

Viewers also liked

Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Tokoroten Nakayama
 
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
Tokoroten Nakayama
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話Tokoroten Nakayama
 
ヒューレットパッカード社の 社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
ヒューレットパッカード社の 社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
Tokoroten Nakayama
 
機械学習ビジネス研究会(未踏研究会)
機械学習ビジネス研究会(未踏研究会)機械学習ビジネス研究会(未踏研究会)
機械学習ビジネス研究会(未踏研究会)
Tokoroten Nakayama
 
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
Tokoroten Nakayama
 
プロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCT
プロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCTプロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCT
プロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCT
Tokoroten Nakayama
 
jubatusのECサイトへの適応 #jubatus_hackathon
jubatusのECサイトへの適応 #jubatus_hackathonjubatusのECサイトへの適応 #jubatus_hackathon
jubatusのECサイトへの適応 #jubatus_hackathon
Tokoroten Nakayama
 
たのしいうぇっぶくろーら #pyfes
たのしいうぇっぶくろーら #pyfesたのしいうぇっぶくろーら #pyfes
たのしいうぇっぶくろーら #pyfes
Tokoroten Nakayama
 
失敗から学ぶ データ分析グループの チームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶ データ分析グループの チームマネジメント変遷 (デブサミ2016) #devsumi
Tokoroten Nakayama
 
失敗から学ぶ データ分析グループの チームマネジメント変遷
失敗から学ぶデータ分析グループのチームマネジメント変遷失敗から学ぶデータ分析グループのチームマネジメント変遷
失敗から学ぶ データ分析グループの チームマネジメント変遷
Tokoroten Nakayama
 
DAUを評価指標から捨てた会社の話 #tokyowebmining
DAUを評価指標から捨てた会社の話 #tokyowebminingDAUを評価指標から捨てた会社の話 #tokyowebmining
DAUを評価指標から捨てた会社の話 #tokyowebmining
Tokoroten Nakayama
 
情報処理とは何か あとbigdataとか
情報処理とは何か あとbigdataとか情報処理とは何か あとbigdataとか
情報処理とは何か あとbigdataとか
Tokoroten Nakayama
 
特徴ベクトル変換器を作った話 #dogenzakalt
特徴ベクトル変換器を作った話 #dogenzakalt特徴ベクトル変換器を作った話 #dogenzakalt
特徴ベクトル変換器を作った話 #dogenzakalt
Tokoroten Nakayama
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
Tokoroten Nakayama
 
BattleField3に見る 自己表現としてのゲームプレイ
BattleField3に見る自己表現としてのゲームプレイBattleField3に見る自己表現としてのゲームプレイ
BattleField3に見る 自己表現としてのゲームプレイ
Tokoroten Nakayama
 
特徴ベクトル変換器を作った話
特徴ベクトル変換器を作った話特徴ベクトル変換器を作った話
特徴ベクトル変換器を作った話
Tokoroten Nakayama
 
Phishingsite is ggrks
Phishingsite is ggrksPhishingsite is ggrks
Phishingsite is ggrks
Tokoroten Nakayama
 

Viewers also liked (20)

Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
データ分析グループの組織編制とその課題 マーケティングにおけるKPI設計の失敗例 ABテストの活用と、機械学習の導入 #CWT2016
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
 
ヒューレットパッカード社の 社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business ヒューレットパッカード社の社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
ヒューレットパッカード社の 社員の離職リスク予測 第一回機械学習ビジネス研究会 #ml_business
 
機械学習ビジネス研究会(未踏研究会)
機械学習ビジネス研究会(未踏研究会)機械学習ビジネス研究会(未踏研究会)
機械学習ビジネス研究会(未踏研究会)
 
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)スマホマーケットの概要と、マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
スマホマーケットの概要と、 マーケティングの失敗例と改善 (アナリティクス アソシエーション 特別セミナー)
 
プロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCT
プロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCTプロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCT
プロダクション環境でオンラインで機械学習を動かすにあたってツライ話 #MLCT
 
jubatusのECサイトへの適応 #jubatus_hackathon
jubatusのECサイトへの適応 #jubatus_hackathonjubatusのECサイトへの適応 #jubatus_hackathon
jubatusのECサイトへの適応 #jubatus_hackathon
 
たのしいうぇっぶくろーら #pyfes
たのしいうぇっぶくろーら #pyfesたのしいうぇっぶくろーら #pyfes
たのしいうぇっぶくろーら #pyfes
 
失敗から学ぶ データ分析グループの チームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi失敗から学ぶデータ分析グループのチームマネジメント変遷 (デブサミ2016) #devsumi
失敗から学ぶ データ分析グループの チームマネジメント変遷 (デブサミ2016) #devsumi
 
失敗から学ぶ データ分析グループの チームマネジメント変遷
失敗から学ぶデータ分析グループのチームマネジメント変遷失敗から学ぶデータ分析グループのチームマネジメント変遷
失敗から学ぶ データ分析グループの チームマネジメント変遷
 
DAUを評価指標から捨てた会社の話 #tokyowebmining
DAUを評価指標から捨てた会社の話 #tokyowebminingDAUを評価指標から捨てた会社の話 #tokyowebmining
DAUを評価指標から捨てた会社の話 #tokyowebmining
 
情報処理とは何か あとbigdataとか
情報処理とは何か あとbigdataとか情報処理とは何か あとbigdataとか
情報処理とは何か あとbigdataとか
 
特徴ベクトル変換器を作った話 #dogenzakalt
特徴ベクトル変換器を作った話 #dogenzakalt特徴ベクトル変換器を作った話 #dogenzakalt
特徴ベクトル変換器を作った話 #dogenzakalt
 
Muroto for ps vita
Muroto for ps vitaMuroto for ps vita
Muroto for ps vita
 
Argosの紹介 #x86study
Argosの紹介 #x86studyArgosの紹介 #x86study
Argosの紹介 #x86study
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
 
BattleField3に見る 自己表現としてのゲームプレイ
BattleField3に見る自己表現としてのゲームプレイBattleField3に見る自己表現としてのゲームプレイ
BattleField3に見る 自己表現としてのゲームプレイ
 
特徴ベクトル変換器を作った話
特徴ベクトル変換器を作った話特徴ベクトル変換器を作った話
特徴ベクトル変換器を作った話
 
Phishingsite is ggrks
Phishingsite is ggrksPhishingsite is ggrks
Phishingsite is ggrks
 

Similar to レベルを上げて物理で殴れ、Fuzzing入門 #pyfes

拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化
Kazunori Jo
 
Effective python #5, #6
Effective python #5, #6Effective python #5, #6
Effective python #5, #6
bontakun
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
 
前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)
Shinya Uryu
 
R高速化
R高速化R高速化
R高速化
Monta Yashi
 

Similar to レベルを上げて物理で殴れ、Fuzzing入門 #pyfes (7)

拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化拡張ライブラリ作成による高速化
拡張ライブラリ作成による高速化
 
Effective python #5, #6
Effective python #5, #6Effective python #5, #6
Effective python #5, #6
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)前処理のための前処理(Tokyo.R#45)
前処理のための前処理(Tokyo.R#45)
 
R高速化
R高速化R高速化
R高速化
 
Clojure
ClojureClojure
Clojure
 

More from Tokoroten Nakayama

ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
Tokoroten Nakayama
 
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
Tokoroten Nakayama
 
ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版
Tokoroten Nakayama
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
Tokoroten Nakayama
 
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
Tokoroten Nakayama
 
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
Tokoroten Nakayama
 
データマイニングの話詰め合わせ
データマイニングの話詰め合わせデータマイニングの話詰め合わせ
データマイニングの話詰め合わせ
Tokoroten Nakayama
 
データサイエンティスト養成読本の解説+書き忘れたこと
データサイエンティスト養成読本の解説+書き忘れたことデータサイエンティスト養成読本の解説+書き忘れたこと
データサイエンティスト養成読本の解説+書き忘れたこと
Tokoroten Nakayama
 
機械学習の精度と売上の関係
機械学習の精度と売上の関係機械学習の精度と売上の関係
機械学習の精度と売上の関係
Tokoroten Nakayama
 
難易度ボラタリティグラフという分析手法
難易度ボラタリティグラフという分析手法難易度ボラタリティグラフという分析手法
難易度ボラタリティグラフという分析手法
Tokoroten Nakayama
 
インターネット上の情報発信手段の変遷 情報発信の簡易化
インターネット上の情報発信手段の変遷 情報発信の簡易化インターネット上の情報発信手段の変遷 情報発信の簡易化
インターネット上の情報発信手段の変遷 情報発信の簡易化
Tokoroten Nakayama
 

More from Tokoroten Nakayama (11)

ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
ラボラトリーオートメーションのためのソフトウェア思想教育(非プログラマ―が知っておくべきプログラミングの本質)
 
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
事業の進展とデータマネジメント体制の進歩(+プレトタイプの話)
 
ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety心理的安全性の構造 デブサミ2019夏 structure of psychological safety
心理的安全性の構造 デブサミ2019夏 structure of psychological safety
 
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
心理的安全性と、Veinの紹介 Psychological safety and introduction of Vein
 
データマイニングの話詰め合わせ
データマイニングの話詰め合わせデータマイニングの話詰め合わせ
データマイニングの話詰め合わせ
 
データサイエンティスト養成読本の解説+書き忘れたこと
データサイエンティスト養成読本の解説+書き忘れたことデータサイエンティスト養成読本の解説+書き忘れたこと
データサイエンティスト養成読本の解説+書き忘れたこと
 
機械学習の精度と売上の関係
機械学習の精度と売上の関係機械学習の精度と売上の関係
機械学習の精度と売上の関係
 
難易度ボラタリティグラフという分析手法
難易度ボラタリティグラフという分析手法難易度ボラタリティグラフという分析手法
難易度ボラタリティグラフという分析手法
 
インターネット上の情報発信手段の変遷 情報発信の簡易化
インターネット上の情報発信手段の変遷 情報発信の簡易化インターネット上の情報発信手段の変遷 情報発信の簡易化
インターネット上の情報発信手段の変遷 情報発信の簡易化
 

レベルを上げて物理で殴れ、Fuzzing入門 #pyfes

  • 1. レベルを上げて物理で殴れ Fuzzing入門編 ところてん @tokoroten
  • 2. 自己紹介 • 元:中島飛行機跡地、不発弾処理係 • 現:ソーシャルゲーム屋の裏方 • Railsの会社でPythonを書いてる • セキュリティ、自然言語処理、機械学習 • Python100%でゲーム作ってコミケで頒布 – http://www.pygame.org/project-Howitzer-1925-.html
  • 3. Fuzzingとは! • レベルを上げて、物理で殴 る • 計算力を上げて、テストで 殴る
  • 4. 具体的には • わずかな時間を見つけて デバッグレボリューション • うれしくて感動でコードが パーン • ┗(^o^ )┓三
  • 7. メリット • バグや脆弱性を叩きつぶせる –人間の考慮の範囲外を攻められる • Fuzzingは並列化により高速化可能 –クラウド上で全力で殴れる
  • 8. ファジングの種類 • ダムファジング – ガチでランダムなデータを入力 – 作るのは簡単、効率は悪い • ミューテーションファジング – 正常なデータを元に突然変異させて入力 – 作るのはある程度簡単、効率はそこそこ • スマートファジング – プロトコルを元にしてデータを生成 – 作るのは超大変、効率はものすごく良い
  • 9. ファジングのレイヤー • プロトコルレイヤー – HTTP、FTP、SIP、XML、etc... • 関数単位 – ユニットテストを改造すると簡単 • ファイル単位 – Officeとか、Firefoxのデバッグ
  • 10. 研究レベルのもの • GA Fuzzing – Fuzzingしながらコードカバレッジを計測 – よりコードカバレッジが高いテストデータほ ど評価 – テストデータをGA交配してテストを作り出す – より深い場所のコードに対して攻撃できる • 再実装してみたが性能はいまひとつ – 深いところに到達するが、境界を攻撃しづら い http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=4682289
  • 11. Fuzzingの例 • Firefox – Alexaを元に100万のサイトからHTMLを取得 – デイリーでサブセットを食わせる – 週末に全部のデータを食わせる • マイクロソフト – Fuzzingで自社プロダクトを攻撃 – Office2010は1800個のバグを発見 – 他にもVistaはFuzzingでXPよりバグを減らせた – 社内でFuzzingコンテストをしている
  • 12. 今回作ったモノ • 正規表現を入力すると、 受理可能な文字列を返す、Fuzzer • 実装 – pythonのreモジュールの内部で利用されてい る sre_parseモジュールを利用 – sre_parseは正規表現をパース、木構造に変換 – 正規表現のオートマトンをランダムウォーク して、 受理可能な文字列を出力 https://github.com/tokoroten/acceptableRegex
  • 13. sre_parseの利用 • 正規表現 "(fuga{4,10})+" • sre_parseでパース後の構造 – [('max_repeat', (1, 65535, [('subpattern', (1, [('liter al', 102), ('literal', 117), ('literal', 103), ('max_repea t', (4, 10, [('literal', 97)]))]))]))] • あとはがんばってランダムウォーク
  • 14. 実験 • URLの正規表現 – http://(?:(?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][-a-zA-Z0-9]*[a- zA-Z0-9]).)*(?:[a-zA-Z]|[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0- 9]).?|[0-9]+.[0-9]+.[0-9]+.[0-9]+)(?::[0- 9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa- f][0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0- 9A-Fa-f][0-9A-Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0- 9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*(?:;(?:[-_.!~*'()a- zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa- f])*)*)*(?:?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A- Fa-f][0-9A-Fa-f])*)?)? http://www.din.or.jp/~ohzaki/perl.htm
  • 15. sre_parseによるパース結果 • [('literal', 104), ('literal', 116), ('literal', 116), ('literal', 112), ('literal', 58), ('literal', 47), ('literal', 47), ('subpattern', (None, [('branch', (None, [[('max_re peat', (0, 65535, [('subpattern', (None, [('subpattern', (None, [('in', [('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57))]), ('branch', (None, [[], [(' max_repeat', (0, 65535, [('in', [('literal', 45), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57))])])), ('in', [('range', (97, 122)), ('range', (65, 90)), (' range', (48, 57))])]]))])), ('literal', 46)]))])), ('subpattern', (None, [('in', [('range', (97, 122)), ('range', (65, 90))]), ('branch', (None, [[], [('max_repeat', (0, 65535, [('in', [('literal', 45), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57))])])), ('in', [('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57))] )]]))])), ('max_repeat', (0, 1, [('literal', 46)]))], [('max_repeat', (1, 65535, [('in', [('range', (48, 57))])])), ('literal', 46), ('max_repeat', (1, 65535, [('in', [('ra nge', (48, 57))])])), ('any', None), ('max_repeat', (1, 65535, [('in', [('range', (48, 57))])])), ('literal', 46), ('max_repeat', (1, 65535, [('in', [('range', (48, 57) )])]))]]))])), ('max_repeat', (0, 1, [('subpattern', (None, [('literal', 58), ('max_repeat', (0, 65535, [('in', [('range', (48, 57))])]))]))])), ('max_repeat', (0, 1, [(' subpattern', (None, [('literal', 47), ('max_repeat', (0, 65535, [('subpattern', (None, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('li teral', 33), ('literal', 126), ('literal', 42), ('literal', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57)), ('literal', 58), (' literal', 64), ('literal', 38), ('literal', 61), ('literal', 43), ('literal', 36), ('literal', 44)])], [('literal', 37), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))])), ('max_repeat', (0, 65535, [('subpattern', (None, [('literal', 59), ('max_r epeat', (0, 65535, [('subpattern', (None, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('literal', 33), ('literal', 126), ('literal', 42), ('lit eral', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57)), ('literal', 58), ('literal', 64), ('literal', 38), ('literal', 61), ('lit eral', 43), ('literal', 36), ('literal', 44)])], [('literal', 37), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))]))]))])), ('max_repeat', (0, 65535, [('subpattern', (None, [('literal', 47), ('max_repeat', (0, 65535, [('subpattern', (No ne, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('literal', 33), ('literal', 126), ('literal', 42), ('literal', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57)), ('literal', 58), ('literal', 64), ('literal', 38), ('literal', 61), ('literal', 43), ('literal', 36), ('literal', 44)]) ], [('literal', 37), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))])) , ('max_repeat', (0, 65535, [('subpattern', (None, [('literal', 59), ('max_repeat', (0, 65535, [('subpattern', (None, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('literal', 33), ('literal', 126), ('literal', 42), ('literal', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('ra nge', (48, 57)), ('literal', 58), ('literal', 64), ('literal', 38), ('literal', 61), ('literal', 43), ('literal', 36), ('literal', 44)])], [('literal', 37), ('in', [('range', (48, 57)), (' range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))]))]))]))]))])), ('max_repeat', (0, 1, [('subpatt ern', (None, [('literal', 63), ('max_repeat', (0, 65535, [('subpattern', (None, [('branch', (None, [[('in', [('literal', 45), ('literal', 95), ('literal', 46), ('literal', 3 3), ('literal', 126), ('literal', 42), ('literal', 39), ('literal', 40), ('literal', 41), ('range', (97, 122)), ('range', (65, 90)), ('range', (48, 57)), ('literal', 59), ('literal', 47), ('literal', 63), ('literal', 58), ('literal', 64), ('literal', 38), ('literal', 61), ('literal', 43), ('literal', 36), ('literal', 44)])], [('literal', 37), ('in', [('range', (48, 57)) , ('range', (65, 70)), ('range', (97, 102))]), ('in', [('range', (48, 57)), ('range', (65, 70)), ('range', (97, 102))])]]))]))]))]))]))]))]))]
  • 16. 出力結果 • http://1625.33425u08104123.781417247 • http://55528104.3857525588?613082112.77601072 • http://35037.3542P46667.48007/%eD%ee~;-):=- :%Be;@$%D4+!;%aB,;)r%B7%68;%ed$%58':),/%31%5A%DC/%bB%e1.;&;)%AB%Db4,%e1%Ee4;%A4=%dB6%67;%Bd0%6b/;%b8%eB%4B%2e%c6%1b- • http://E--L.f.R.8.2.qj-6.pvYRV-10J8:2067715 • http://235430.86635865x3304578.84274/%cB%AC;)_'_;%bA'%E0$%31)%c3;'%Aa*%bE+;!y+~=@;!)%DB:%dD%bb'@;_%cE%de@%A6%cC);%BB%Dc;n %Ec%4D;=(=;%68$&%eD$--/IY-;.%aE-)&%ed%E7%71%Eb?.%AC'%Db%cC%eEfl%67 • http://3.044n8365426546.864:707/%65%A2,%5E,%ea%Ec%2C_%dD;;c%45&%dE~L;)%aA~=;%bC%34%d6;%0D:%Cb=_/%aA,%ab=%B1%bC:&_;,+=;%3 e=%BB%C0%34)%0b.;%5AI%eB%a1;@;%EA%c5:;%bB%4a,%c0%3D%0E%Ce;!%Ee*)%e82+;@E*'%72-$$%2c;%bD%bD%De- %b0+/;$%DE%17%1E)%CB%2E-;%aB!;%24%d4$_%5d/%70@~%cb'(;%4d%CA%80:;%ED%205%7d=;;*l%D8*;-@,/%D3.%eEi;(*%B3=Bc;+%aD%bA)'-- +%D8%bA;'=~%Ad%67%30';%aD*%45%c4(*;%36%E6$!=(;_%Ab%ED%db+U%aA%0B;!%DB:(A%e76%AB*;='%8e%d7!%AD%2dS~;+%Da%cC%2BT%BE) _%dDy?%CA%aE • http://11285763.087w614.4257718562/%AB$%Cd*;*,%be%E3:%5B)%aa%8Ba;%d3_+%E6%E6*%ca;.,;,!%7E~%ee%a8%AB;%5DB8;%Ae%CA%4A(+;*- %2c%d3@*;%26.%6D:@%C6/@;%8A%BA%D4%be%E8%E3,;.%Cb+%cD/!'%bc;%EA$m%d830_%c8%6D;%AB@~;;;%a8;:@_%e1;%a4;%cC%db%aE%0c %A3(!$;%c4%ca~&%cdc;-)/_.%B6(%cb!;$%7D%aC~@%7b%ee,%0a;%4c;%Ce;%bb$%c7%8C:%Ee%Eb%EE%48~;%Ab*%0A/%be- EY%dC%bb(:;%45%6Cp)%55- %aA%7A;%DB%Ab%66=%Ed%db%BD&%D3/*@.%Abl=%B8_%BD@;%5B)((h%bD%e3'%d7/%e0);%bB;%CB%5e;@H:%e5;~_:=%6A%0c%Da%Bb,/h:%D1 %Ea,;%43'%eA%BB.%a7:%a5;-2%Cc1':./;-%Ee;%4E*.%84=~%D6&%A8;%eB%dC%cB;%db%aA%7E):,(,%2E- ;)%AEi++$;;==%ac:%C4%62X%7A/)%eb%3a%EB%4c0%aa;C-@@;- :@&5Q%eD,,';!:y,i*'=%4e;%21%aa%68$',%Bc:%A2%7B;'%2d@%dA%ED%6a;(%dB%2a(%35;%e7%ED(_%bD%51+1;%26%D0!%Ce;%4ap%Ea%B1;/%aC =+%a2_AN;~@%Bb%CB%b2;.%bb%cA%1B=@%Cb%c1%8Aq;v%CA%BA;@'%bD=;,%1b%a2@@@;_@&@!%ac?%ce+_XS$%d8 • http://s.E.x6a-Y7-W.X.lJ-S1A7.:5/%C5;%d4Q$- $!*+B/%a3@%2b,j%A1%c1@%aB;~)S%eE%01fl);+%7e%BA&%03@=U,%67;e,%0b%cc%77;(_%65%e1%AD+%e8H;&e.+!%aE%C8*%Bb!;%Da+%eB:%8c ;%32%B5%E6%CD@!%61/-+%5E%D3+:!;;1$,%cA$%ca!$%e3!/%8B%a2%C3%a3%b0~%a6%Da;'%d1%D7,%88);'::~@3%58_;-- @_%8b;%c5%a1%Eb6&%2b%Ae%ba;&%67@%Be%A4%4D!;%EDeD+%2d%da)%57*/&%ca%d1'F)%D26w;-:;+=%44I%ede%D6%41%ee;%ee- %db@%c4',%ee;%Da;@%c3G~:6;%52p)o%Eb%AA!;$!:'%DA&%C50;/%ca%ea'1.;%AC%Ca:%73L;;%Aa&a)%Aa;;$~!_%ac,/)%BD.;:L%63- %54,!;%ee%cD%36%bB=!%D0;;%be%E5.;%ad%6E%38%BeI!;%dd%EC;%c6*;+%2B_%81')%58(/(%45%BC;=*:'%3a%cE*%5B$;%c7%C8%74$,;$%cE%E4 %A5;;%E0%B5'%AB%Cd%87m+?'$:;!%DE%5b • http://J8614.C/,%D1%E3%2a@;.-%b8;=@%36=$;%Ce@;%2a_&E%AE/%0C%De%eB+;!%EE-,%5A~=_@- ;%20%BC%Bd!%Ec;%ba;%07;=%Da)S%ee.%aa%dE'$;;(%Ee$;%C8%aD%ad;/;;,%7A;nY%B1;.%cE%Bd%D8/.@-%67_0%dD%2A0/%EB%ea$%CC%3a- !~t;%bc%2c%CB%d4!;%C4%a1@~%DE,%Ed%6a_;;%dA)*%2d/%1b,-%6Em%ec%01%81%bE%da;%Dd=~%0B%A1%bD'o;)%Ad@%b8+%Ee~&(.;%2e%EB まさに外道!
  • 17. アタックしてみよう URLを10万件食わせても、TeraPadとSkypeは問題なし URLパーサがヘボいとクラッシュする可能性
  • 18. まとめ • Fuzzingはランダムデータによる攻撃 • バグがないことの保証 • 正規表現からランダムパターンを作っ て、 効率よくアタックするコードをPython実装 • みんな自分のコードを攻撃しよう
  • 20. 最後に • MSが同じものを提供していた! (∩ ゚д゚)アーアーきこえなーい
  • 21. 参考文献 • 書籍 – ビューティフルテスティング – ファジング:ブルートフォースによる脆弱性発見手法 – リバースエンジニアリング ―Pythonによるバイナリ解析技 法 • 記事 – http://www.computerworld.com/s/article/9174539/Microsoft_r uns_fuzzing_botnet_finds_1_800_Office_bugs – http://www.hackingvoip.com/ – http://www.blackhat.com/presentations/bh-usa-06/BH-US-06- Endler.pdf – http://msdn.microsoft.com/en-us/library/cc162782.aspx – http://news.mynavi.jp/articles/2007/11/17/bhj3/index.html
  • 22. 参考文献 • ツール – http://peachfuzzer.com/ – http://www.microsoft.com/download/en/details.aspx ?id=21769 – http://www.microsoft.com/download/en/details.aspx ?id=20095 – http://freecode.com/projects/zzuf?branch_id=68024 &release_id=245074 – http://packetstormsecurity.org/fuzzer/ – http://www.computerdefense.org/2006/12/webfuzz- a-series-of-basically-useless-python-scripts/