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
全銀トラブルとC言語とバッファオーバーフロー
Search
tsuda.a
December 27, 2023
Technology
0
18
全銀トラブルとC言語とバッファオーバーフロー
全銀トラブル話題にかこつけたC言語でバッファオーバーフローさせる話
tsuda.a
December 27, 2023
Tweet
Share
More Decks by tsuda.a
See All by tsuda.a
キューとは何か
tsudaahr
0
90
等幅は死んだ(ぇ
tsudaahr
0
19
いくら眺めてもエラーの理由がわからないコードについて
tsudaahr
0
39
何のために文字数をカウントするのか?
tsudaahr
0
15
文字 is 何?
tsudaahr
0
44
16進数は何型
tsudaahr
0
2
ライトワンスは改ざん防止の夢を見るか?
tsudaahr
0
5
Python自作シリアライズ
tsudaahr
0
42
Python から.net DLL を呼び出す
tsudaahr
0
580
Other Decks in Technology
See All in Technology
2024春 注目のWeb系 OSS & SaaS 3選
makies
0
180
DMM.com アルファ室採用案内資料
hsugita
1
230
Gitlab本から学んだこと - そーだいなるプレイバック / gitlab-book
soudai
7
1.3k
Cypress or Playwright?
rainerhahnekamp
0
170
Microsoft for Startups Founders Hub_20240429 update
daikikanemitsu
1
2.4k
【基本】データベース設計
oracle4engineer
PRO
2
180
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
270
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
270
One engineer company with Ruby on Rails
rstankov
2
440
LayerXにおけるLLMプロダクト開発の今までとこれから
layerx
PRO
4
730
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
2.1k
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
150
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
11
1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
The Mythical Team-Month
searls
216
42k
The Cost Of JavaScript in 2023
addyosmani
20
3.9k
Design by the Numbers
sachag
274
18k
Designing with Data
zakiwarfel
96
4.8k
Unsuck your backbone
ammeep
663
57k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
Producing Creativity
orderedlist
PRO
338
39k
Product Roadmaps are Hard
iamctodd
45
9.7k
Docker and Python
trallard
35
2.7k
Transcript
全銀トラブルとC言語と バッファオーバーフロー LTDD 2023-12 #2 すごい広島553 with IT初心者の会 忘年会 @tsuda_ahr
全銀システム障害 https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600011/101800142/
原因は? • バッファオーバーフローらしい? https://it.impress.co.jp/articles/-/25677
いまどき、なぜ? • C言語らしい・・・ _| ̄|◦ https://it.impress.co.jp/articles/-/25677
アーキテクチャ(CPU のビット数)とデータ型とサイズ • C言語における long の値域。 https://marycore.jp/prog/c-lang/data-type-min-max-values/
なぜこんなことが起きるのか? • int は CPU のビット数, long は その倍、という取り決めがあるから? (すみません規格読んでません
>__<;) • しかし、どうもそういうことでもない模様。 • まとめると以下のような感じ。 #ポリシーがよくわからん データ型 16bit CPU 32bit CPU 64bit CPU int 2 byte (INT_16) 4 byte (INT_32) 4 byte (INT_32) long 4 byte (INT_32) 4 byte (INT_32) 8 byte (INT_64) long long - 8 byte (INT_64) 8 byte (INT_64)
Windows の場合 • Windows の場合は変わらない? https://marycore.jp/prog/c-lang/data-type-min-max-values/
Windows (Visual C++) のデータ型とサイズ • int も long も INT32。
種類名 バイト 値の範囲 int 4 -2,147,483,648 ~ 2,147,483,647 __int32 4 -2,147,483,648 ~ 2,147,483,647 long 4 -2,147,483,648 ~ 2,147,483,647 https://learn.microsoft.com/ja-jp/cpp/cpp/data-type-ranges?view=msvc-170
では、Window の場合は安心なのか? • そんなこともない。 • 例えば以下のようなコードを考える #include <iostream> struct TEST
{ int *A; int *B; }; int main() { int a = (int)sizeof(TEST); printf("%d¥n", a); } ポインタ変数 (他の言語では参照型といわれるものに近い)
アーキテクチャ(CPUのビット数)によってサイズが変わる 32bit 64bit 8 16
なので 32bit ではうまく動作したプログラムが 64bit では動かないことがある。 64bit 環境でコンパイル、実行すると、 スタック領域が壊れたっぽいわ、 というメッセージが出る。 転送先バッファのサイズは
8 固定 test の内容を buff に test のサイズ指定でコピー test のサイズは 32bit のとき 8、64 bit のとき 16。
こちらからは以上です(汗 チャンネル登録、高評価をよろしくお願いします。
余談/発表後にした話) ALSR 最近のコンパイラは ALSR(address space layout randomization/アドレス空間配置の ランダム化)という機能があるので、実行の都度、壊れる場所は変わるかも? (つまり、障害が再現したりしなかったりするとかありそう) https://ja.wikipedia.org/wiki/アドレス空間配置のランダム化