SlideShare a Scribd company logo
1 of 31
Sub:ShellCodeを書こうスペシャル
Name: simizu ryosuke (HN:fvi_att)
バイナリ ゆるゆる勉強会
part .1
$whoami
清水 亮輔
HN:fvi_att
東工大社会理工学研究科
●セキュリティ技術者教育支援システムの研究
(セキュリティの勉強ができるゲームの開発)
IPA 情報処理技術者高度試験 セキュリティスペシャリスト
2014年リクルートアメリカ横断インターンシップ
最近ロボットの進化を目指したSNS及びプラットフォームを画策、構築中
始める前に
仮
想
マ
シ
ン
の
準
備
は
?
お
や
つ
と
ゆ
る
ゆ
る
な
心
の
準
備
はOK
?
バイナリ勉強会とは言ったけれど
バイナリ = 機械語 (000101010101111……)
アセンブラ = 機械語を人間にわかりやすく表現したもの。
”xxをyyする” という形式に変換
ということで今回はアセンブラを使ってバイナリを組み立てていきます。
(目標: 講義:40分 演習:60分 雑談:20~30分)
$いつバイナリの知見をつかうのか?
正直に言うと そこまで使わない
→バイナリを意識しなくても99.9%のシステムは構築できる時代
バイナリ勉強会をやるとは言ったけど....
バイナリを勉強することで得られる学習効果を最大にする
教材ってなんだろう?
→ ShellCodeをつくろう
理由:
● ハッカーぽくてかっこいいという意欲の向上
● OSがメモリのデータをどのようにして処理するかなどの
他の分野でも利用可能な知見を得られるため
xxすることができるコードの断片(今回はバイ
ナリ)
ShellCode実装に必要な知識
ShellCode
=既存のプログラムを正規ルートから脱線させた後
データをコードとして認識させ実行できるデータ
となると
既存のプログラムがどのようにして動いているのか知る必要がある
今回の対象者
一応半分くらいが ”Cのポインタまでは触ったことがある”とのこと
一応プログラムを介してメモリ上のデータを操作する部分まではできる。
ではメモリ上でプログラムをどのようにして処理するかか
らスタートしよう
プログラムを動かしてみよう ①
まずは簡単な2つのプログラムを実行&コードを観察しよう
gcc –S –o sample1.s_code1.c
gcc –S –o sample2.s code2.c
0. mov xx yy ? (データの移動に関連)
1. int ?(システムコールに関連)
確認したら 今度は gcc –g –S オプションを付加して確認してみよう
アセンブラ ラベル宣言
.text プログラムのコード部分宣言
.bss 初期値を持たない大域変数宣言
.data 初期値をもつ大域変数宣言
データの格納領域
1.レジスタ ここでデータの加工を行う、高速、少量
(Eax,ebx,ecx,edx) ,(ebp,esp) ,(epi)
2.メモリ ここにデータを保管する 低速、大量
アセンブラでhello worldを実行してみよう
ハンドアウト 1. を手打ちしてみよう
分からないことがいろいろ出てきた
mov xxx yyy データの移動命令
Int xx 割り込み命令
(実行するには)
gcc –o first_asm.o first_asm.asm
ld first_asm.o first_asm
int と システムコールとはなにか
OSが提供しているkernelの機能を
使うためのAPI
http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html
x86系では int(interupt命令)にてeaxレジスタ
の
値を見てシステムコールを実行
メモリマッピング
→普段のプログラムはどのようにしてデータを
メモリで管理しているのか?
→ スタック、ヒープ、静的領域 などなど
スタックってなんだろう?
プロセス中のメモリマップ
Cでサブルーチンを定義・呼び出ししよう それをアセンブラで見てみよう
ハンドアウト 2.参照
$gcc -g -S -o call_stack call_stack.c
gオプション:デバッグ情報の同時出力
Sオプション:アセンブラにして出力
スタックってなんだろう?
スタック とはメモリ上のデータの構造の一つ FirstInLastOut型
スタックとesp ebpを用いて制御を行うシステム
=コールスタック
コールスタック
Addr:0xffffffff
Addr:0x00000000
ス
タ
ッ
ク
の
成
長
方
向
1.引数をpushする 第x引数..第一引数の順番
2.Call命令
呼び出し元の.text内のコードアドレスをpush
コード実行ポインタ
%epiの値を呼び出し先を変更
2. Ebpレジスタの内容をpush
古いebpの内容をスタック内に退避
今の%espの値をebpに移動
2.Espの値を減算してスタックメモリ空間を
生成。(なぜ?)
スタック コールスタック
%ebp, %esp の2つのレジスタと
call 命令、ret命令、leave命令
を組み合わせてコールスタックを実現
プログラムを動かしてみよう②
https://github.com/fvi-
att/paak_binarystydy_1/tree/master/security_hole_BOF_1
からプログラムとコードをダウンロードして実行してみよう
このプログラムにはある特徴がある。
引数に10文字より多い文字列を入れるとなにが起こるか?
なぜそうなったのか?
どうやら main()メソッド内で定義した
char[10] にヒントがありそうだ。
実行結果:
Memory stack smash!
“スタックメモリが破壊されました”
スタックオーバーフロー
http://www.uquest.co.jp/embedded/learning/lect
ure13.html
うまくリターンアドレスを上書きできれば
プログラムの制御を変更できるようになる
shellcodeを実装する
別プロセスを実行するsyscallは
execve syscall
システムコールの一覧は
/usr/include/i386-linux-gnu/asm/unistd_32.h
ではexecveを使って任意の別プロセスを実行
するshellcodeを書いてみよう。
シェルコードを書いてみる
アセンブラで演習No.4を手写ししてみる。
出力したアセンブラコードを以下のコマンドで
¥x●●形式のバイナリで出力する。
objdump –M intel -d ./xxx | grep “init”-A xx | cut
-f 2 | perl -p -e perl -pe 's/(¥w{2})¥s+/¥¥x¥1/g'
シェルコードがプログラムとして
実行できるか確認
演習No5.に作成したシェルコードを貼り付けて
実行する。
この場合スタック上のデータを関数ポインタを
用いてコードとして実行させている。
execstack 及び NX技術に関して
メモリのページ(4KB)ごとにプログラム実
行可能なデータかどうかフラグをつけ、BOF
によるコード実行を防ぐための技術
gdb –x xxx.out
でread write executフラグを確認することがで
きる
原理はシンプル 問題は山積み
Code Red
(2001年)
こんどできたらやりたいこと
シェルコードを、実際のプログラムを用いて
使ってみます
おしらせ
あなたも”ゆるゆる”勉強会をやってみよう
勉強会をやることで”人に教える”という立場から
勉強するため、すごい効果がある
ゆるゆる勉強会 主催者募集中
おしまい
たぶん今は役に立たない知恵だけど
10年、20年で絶対に役に立つと思う。
Thank you for your listening.
Appendix

More Related Content

Viewers also liked

マルウェア解析講座そのいち〜仮想環境下では暴れないけど質問ある?〜
マルウェア解析講座そのいち〜仮想環境下では暴れないけど質問ある?〜マルウェア解析講座そのいち〜仮想環境下では暴れないけど質問ある?〜
マルウェア解析講座そのいち〜仮想環境下では暴れないけど質問ある?〜Saya Katafuchi
 
Edomae 2015 - マルウェアを解析してみよう
Edomae 2015 - マルウェアを解析してみようEdomae 2015 - マルウェアを解析してみよう
Edomae 2015 - マルウェアを解析してみようSatoshi Mimura
 
Microsoft Antimalware for Azure による Azure 仮想マシンの簡易的なマルウェア対策
Microsoft Antimalware for Azure による Azure 仮想マシンの簡易的なマルウェア対策Microsoft Antimalware for Azure による Azure 仮想マシンの簡易的なマルウェア対策
Microsoft Antimalware for Azure による Azure 仮想マシンの簡易的なマルウェア対策wintechq
 
[CB16] Keynote: How much security is too much? by Karsten Nohl
[CB16] Keynote: How much security is too much? by Karsten Nohl[CB16] Keynote: How much security is too much? by Karsten Nohl
[CB16] Keynote: How much security is too much? by Karsten NohlCODE BLUE
 
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten NohlCODE BLUE
 
Elastic{on}オープンな世界へようこそ
Elastic{on}オープンな世界へようこそElastic{on}オープンな世界へようこそ
Elastic{on}オープンな世界へようこそMasamitsu Maehara
 
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...CODE BLUE
 
Elastic stack 世界にさらしたサーバを可視化してみた
Elastic stack 世界にさらしたサーバを可視化してみたElastic stack 世界にさらしたサーバを可視化してみた
Elastic stack 世界にさらしたサーバを可視化してみたMasamitsu Maehara
 
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?Masamitsu Maehara
 

Viewers also liked (9)

マルウェア解析講座そのいち〜仮想環境下では暴れないけど質問ある?〜
マルウェア解析講座そのいち〜仮想環境下では暴れないけど質問ある?〜マルウェア解析講座そのいち〜仮想環境下では暴れないけど質問ある?〜
マルウェア解析講座そのいち〜仮想環境下では暴れないけど質問ある?〜
 
Edomae 2015 - マルウェアを解析してみよう
Edomae 2015 - マルウェアを解析してみようEdomae 2015 - マルウェアを解析してみよう
Edomae 2015 - マルウェアを解析してみよう
 
Microsoft Antimalware for Azure による Azure 仮想マシンの簡易的なマルウェア対策
Microsoft Antimalware for Azure による Azure 仮想マシンの簡易的なマルウェア対策Microsoft Antimalware for Azure による Azure 仮想マシンの簡易的なマルウェア対策
Microsoft Antimalware for Azure による Azure 仮想マシンの簡易的なマルウェア対策
 
[CB16] Keynote: How much security is too much? by Karsten Nohl
[CB16] Keynote: How much security is too much? by Karsten Nohl[CB16] Keynote: How much security is too much? by Karsten Nohl
[CB16] Keynote: How much security is too much? by Karsten Nohl
 
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
[CB16] 基調講演: セキュリティはどれくらいが適量? – How much security is too much? – by Karsten Nohl
 
Elastic{on}オープンな世界へようこそ
Elastic{on}オープンな世界へようこそElastic{on}オープンな世界へようこそ
Elastic{on}オープンな世界へようこそ
 
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
[CB16] Using the CGC’s fully automated vulnerability detection tools in secur...
 
Elastic stack 世界にさらしたサーバを可視化してみた
Elastic stack 世界にさらしたサーバを可視化してみたElastic stack 世界にさらしたサーバを可視化してみた
Elastic stack 世界にさらしたサーバを可視化してみた
 
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
AWS Security JAWS 経済的にハニーポットのログ分析をするためのベストプラクティス?
 

Similar to 第一回バイナリゆるゆる勉強会スライド

Swiftで機械学習(Play Machinelearning with Swift easily)
Swiftで機械学習(Play Machinelearning with Swift easily)Swiftで機械学習(Play Machinelearning with Swift easily)
Swiftで機械学習(Play Machinelearning with Swift easily)Yusuke Yoshie
 
2018/07/26 Game change by Deep Learning and tips to make a leap
2018/07/26 Game change by Deep Learning and tips to make a leap2018/07/26 Game change by Deep Learning and tips to make a leap
2018/07/26 Game change by Deep Learning and tips to make a leapSony Network Communications Inc.
 
20190316_Deep learning brings game change and manufacturing
20190316_Deep learning brings game change and manufacturing20190316_Deep learning brings game change and manufacturing
20190316_Deep learning brings game change and manufacturingSony Network Communications Inc.
 
テクニカルサポートエンジニア…勉(ry
テクニカルサポートエンジニア…勉(ryテクニカルサポートエンジニア…勉(ry
テクニカルサポートエンジニア…勉(ryHidetomo Hosono
 
Interop2017
Interop2017Interop2017
Interop2017tak9029
 
2018 programing
2018 programing2018 programing
2018 programingm_miyamoto
 
Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門Shinobu Kawano
 
情報セキュリティ講習会2016
情報セキュリティ講習会2016情報セキュリティ講習会2016
情報セキュリティ講習会2016Naoki Kato
 
デバイスをセキュアにつないで可視化する – Azure Sphere、Digital Twin紹介_IoTビジネス共創ラボ 第10回 勉強会
デバイスをセキュアにつないで可視化する – Azure Sphere、Digital Twin紹介_IoTビジネス共創ラボ 第10回 勉強会 デバイスをセキュアにつないで可視化する – Azure Sphere、Digital Twin紹介_IoTビジネス共創ラボ 第10回 勉強会
デバイスをセキュアにつないで可視化する – Azure Sphere、Digital Twin紹介_IoTビジネス共創ラボ 第10回 勉強会 IoTビジネス共創ラボ
 
最近ソフトウェア開発が面白くない
最近ソフトウェア開発が面白くない最近ソフトウェア開発が面白くない
最近ソフトウェア開発が面白くないTatsuya Yagi
 
Introduction of Swift from Machine Learning
Introduction of Swift from Machine LearningIntroduction of Swift from Machine Learning
Introduction of Swift from Machine LearningDaisuke Yamashita
 
Study Group of NIPS2017 presented by webfarmer.ltd
Study Group of NIPS2017 presented by webfarmer.ltdStudy Group of NIPS2017 presented by webfarmer.ltd
Study Group of NIPS2017 presented by webfarmer.ltdWEBFARMER. ltd.
 
Microsoft Conversational AI_20191030
Microsoft Conversational AI_20191030Microsoft Conversational AI_20191030
Microsoft Conversational AI_20191030Ayako Omori
 
人工知能が拓く オンラインゲームの可能性 (AOGC 2007)
人工知能が拓くオンラインゲームの可能性 (AOGC 2007)人工知能が拓くオンラインゲームの可能性 (AOGC 2007)
人工知能が拓く オンラインゲームの可能性 (AOGC 2007)Youichiro Miyake
 
失敗を成功に近づけるアブダクションの科学
失敗を成功に近づけるアブダクションの科学失敗を成功に近づけるアブダクションの科学
失敗を成功に近づけるアブダクションの科学Shigeyuki Kameda
 
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702小川 雄太郎
 

Similar to 第一回バイナリゆるゆる勉強会スライド (20)

Swiftで機械学習(Play Machinelearning with Swift easily)
Swiftで機械学習(Play Machinelearning with Swift easily)Swiftで機械学習(Play Machinelearning with Swift easily)
Swiftで機械学習(Play Machinelearning with Swift easily)
 
2018/07/26 Game change by Deep Learning and tips to make a leap
2018/07/26 Game change by Deep Learning and tips to make a leap2018/07/26 Game change by Deep Learning and tips to make a leap
2018/07/26 Game change by Deep Learning and tips to make a leap
 
20190316_Deep learning brings game change and manufacturing
20190316_Deep learning brings game change and manufacturing20190316_Deep learning brings game change and manufacturing
20190316_Deep learning brings game change and manufacturing
 
テクニカルサポートエンジニア…勉(ry
テクニカルサポートエンジニア…勉(ryテクニカルサポートエンジニア…勉(ry
テクニカルサポートエンジニア…勉(ry
 
Interop2017
Interop2017Interop2017
Interop2017
 
2018 programing
2018 programing2018 programing
2018 programing
 
Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門
 
Hacking Robotics
Hacking RoboticsHacking Robotics
Hacking Robotics
 
第5回資料
第5回資料第5回資料
第5回資料
 
情報セキュリティ講習会2016
情報セキュリティ講習会2016情報セキュリティ講習会2016
情報セキュリティ講習会2016
 
デバイスをセキュアにつないで可視化する – Azure Sphere、Digital Twin紹介_IoTビジネス共創ラボ 第10回 勉強会
デバイスをセキュアにつないで可視化する – Azure Sphere、Digital Twin紹介_IoTビジネス共創ラボ 第10回 勉強会 デバイスをセキュアにつないで可視化する – Azure Sphere、Digital Twin紹介_IoTビジネス共創ラボ 第10回 勉強会
デバイスをセキュアにつないで可視化する – Azure Sphere、Digital Twin紹介_IoTビジネス共創ラボ 第10回 勉強会
 
セキュリティ教育とUX ~結ばれていた赤い糸~
セキュリティ教育とUX ~結ばれていた赤い糸~セキュリティ教育とUX ~結ばれていた赤い糸~
セキュリティ教育とUX ~結ばれていた赤い糸~
 
最近ソフトウェア開発が面白くない
最近ソフトウェア開発が面白くない最近ソフトウェア開発が面白くない
最近ソフトウェア開発が面白くない
 
Introduction of Swift from Machine Learning
Introduction of Swift from Machine LearningIntroduction of Swift from Machine Learning
Introduction of Swift from Machine Learning
 
Study Group of NIPS2017 presented by webfarmer.ltd
Study Group of NIPS2017 presented by webfarmer.ltdStudy Group of NIPS2017 presented by webfarmer.ltd
Study Group of NIPS2017 presented by webfarmer.ltd
 
Microsoft Conversational AI_20191030
Microsoft Conversational AI_20191030Microsoft Conversational AI_20191030
Microsoft Conversational AI_20191030
 
人工知能が拓く オンラインゲームの可能性 (AOGC 2007)
人工知能が拓くオンラインゲームの可能性 (AOGC 2007)人工知能が拓くオンラインゲームの可能性 (AOGC 2007)
人工知能が拓く オンラインゲームの可能性 (AOGC 2007)
 
失敗を成功に近づけるアブダクションの科学
失敗を成功に近づけるアブダクションの科学失敗を成功に近づけるアブダクションの科学
失敗を成功に近づけるアブダクションの科学
 
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
NLPソリューション開発の最前線_DLLAB_自然言語処理ナイト_200702
 
NLPソリューション開発の最前線
NLPソリューション開発の最前線NLPソリューション開発の最前線
NLPソリューション開発の最前線
 

第一回バイナリゆるゆる勉強会スライド