Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Stack&Heep
Search
Kotokaze
May 31, 2021
Education
0
77
Stack&Heep
スタック・ヒープオーバーラン勉強会の資料です
Kotokaze
May 31, 2021
Tweet
Share
More Decks by Kotokaze
See All by Kotokaze
Introduction to Git & GitHub
kotokaze
0
210
ファイルレスマルウェアの実態と対策
kotokaze
1
310
実は簡単!? AIを攻撃してみよう
kotokaze
0
320
Other Decks in Education
See All in Education
week5@tcue2024
nonxxxizm
0
610
H5P-työkalut
matleenalaakso
3
34k
ロータリー地域社会共同隊(RCC)について:国際ロータリー 2720地区 2023-2024年度 社会奉仕部門 部門長・ 熊本西稜ロータリークラブ・ 有限会社 誠商店 代表取締役社長 追立 武 氏
2720japanoke
0
580
Before You Create Something
nandenjin
0
210
Educación digital en la adolescencia
gonz1ale1
0
200
Droid Knights 2024 Accessibility in Android
nanamare
0
290
2024年度春学期 統計学 第12回 分布の平均を推測する ー 区間推定 (2024. 6. 27)
akiraasano
PRO
1
120
week12@tcue2024
nonxxxizm
0
530
世界の子音探訪記
jamashita
0
240
2024年度春学期 統計学 第2回 統計資料の収集と読み方 (2024. 4. 18)
akiraasano
PRO
0
110
Introduction - Lecture 1 - Next Generation User Interfaces (4018166FNR)
signer
PRO
1
3.3k
NTTコムウェアの東海支店でもアジャイル人材育てんとかんやん!結果どえらい人材が育ったがね!
mizuki_fujita
0
260
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
48
10k
Building Your Own Lightsaber
phodgson
101
5.9k
Ruby is Unlike a Banana
tanoku
96
10k
Agile that works and the tools we love
rasmusluckow
325
20k
Designing with Data
zakiwarfel
96
5k
How GitHub Uses GitHub to Build GitHub
holman
471
290k
Adopting Sorbet at Scale
ufuk
71
8.8k
GraphQLとの向き合い方2022年版
quramy
36
13k
Building a Scalable Design System with Sketch
lauravandoore
458
32k
We Have a Design System, Now What?
morganepeng
46
7k
Documentation Writing (for coders)
carmenintech
63
4.2k
Designing on Purpose - Digital PM Summit 2013
jponch
113
6.6k
Transcript
スタックとヒープ Kotokaze
1. メモリとは データの⼀時置き場 ( ⼤きな配列のようなもの) のこと プロセス実⾏時には、プログラムがメモリ上に展開される → 32bit コンピュータであれば、232
分だけ確保* される +----------------------------------------------------- ---------------+ | 0x00000000 | 0x00000001 | 0x00000002 | 0x00000003 | ≈≈≈≈≈ | 0xFFFFFFFF | +----------------------------------------------------- ---------------+ * ほとんどの場合では、必要とする分だけ OS が⽤意してくれる 2
environ argv share bss data text 0 番地 232 番地
heep stack 2. プロセスとメモリ 名称 主な配置データ 備考 text 機械語 Read Only data グローバル変数 初期値有り bss グローバル変数 初期値無し heep 動的なデータ malloc など stack ⾃動変数/ アドレス ⾃動的に拡張 3
data data 3. スタック 積み⽊ように、積み上げてデータ保存 アクセスできるのは最上位のみ スタック領域では、ローカル変数・ リターンアドレスなどを保存 命令語 内容
PUSH スタックの先頭に追加 POP スタック先頭の値を取り出す 4
使⽤中 data1 data0 使⽤中 使⽤中 使⽤中 4. ヒープ 使う分だけ確保して使う 未整列
( 空域に⾃動配置) → 場所指定でアクセス可 ⾃由度は⾼いが、 脆弱になりやすい int* data0 = new int[sizeof(buff)]; int* data1 = malloc(sizeof(buff)); 5
5. バッファ・オーバーラン (CWE-119) 実⾏中プロセスのメモリ内における、 意図したバッファ外の値を読み書きすること C / C++ で発⽣しやすい 名称
対象 スタック破壊攻撃 ローカル( ⾃動) 変数・リターンアドレス ヒープ破壊攻撃 配置したデータ 6
6. プログラム解析 サンプルコードの解析をしてみよう! サンプルコード: Kotokaze/stack-study 7
6. プログラム解析 (2) Key1: Stack のコンストラクタで、 data0 / data1 を初期化
→ ヒープ領域に連続して* 配置されていると考えられる +-----------------------------------------------------------------------+ | data0 | data1 | ≈≈≈≈≈ | +-----------------------------------------------------------------------+ * 複数の初期化を同時に⾏うと、連続して配置される場合が多い 8
6. プログラム解析 (3) Key2: コンストラクタに注⽬ for (int i = 0;
i <= this->tail; i++) this->data1[i] = 3; 名称 \ 位置 0 1 2 3 4 5 6 7 data0 - - - - - - - - data1 3 3 3 3 3 3 3 3 9
6. プログラム解析 (4) Key3: 値の変化に注⽬ → main のループで順に代⼊していくと... for (int
i = 0; i < num; i++) stk.push(i + 1); 名称 \ 位置 0 1 2 3 4 5 6 7 data0 1 2 3 - - - - - data1 3 3 3 3 3 3 3 3 10
7. 動かしてみる data0 に 12 回の値を⼊れ続けるとどうなる??? → README を参考に動かしてみよう ※
脆弱性を含んでいる事に注意しましょう 11
参考情報 https://jvndb.jvn.jp/ja/cwe/CWE-119.html https://www.ipa.go.jp/security/awareness/vendor/programmingv2/ contents/c901.html 12