Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
uchan_nos
PPTX, PDF
910 views
自動でバグを見つける!プログラム解析と動的バイナリ計装
DBI (Dynamic Binary Instrumentation) の技術を活用してバッファーオーバーフローを検知する例を紹介します。
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Downloaded 11 times
1
/ 13
2
/ 13
Most read
3
/ 13
4
/ 13
Most read
5
/ 13
6
/ 13
7
/ 13
8
/ 13
9
/ 13
10
/ 13
11
/ 13
12
/ 13
13
/ 13
More Related Content
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
PDF
PostgreSQLアンチパターン
by
Soudai Sone
PDF
WebSocket / WebRTCの技術紹介
by
Yasuhiro Mawarimichi
PPTX
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
PPTX
初心者向けMongoDBのキホン!
by
Tetsutaro Watanabe
PPTX
最近のやられアプリを試してみた
by
zaki4649
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
PostgreSQLアンチパターン
by
Soudai Sone
WebSocket / WebRTCの技術紹介
by
Yasuhiro Mawarimichi
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
by
Shota Shinogi
初心者向けMongoDBのキホン!
by
Tetsutaro Watanabe
最近のやられアプリを試してみた
by
zaki4649
マイクロにしすぎた結果がこれだよ!
by
mosa siru
What's hot
PDF
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
PPTX
ウェブセキュリティのありがちな誤解を解説する
by
Hiroshi Tokumaru
PDF
SQL大量発行処理をいかにして高速化するか
by
Shogo Wakayama
PDF
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
PDF
リレーショナルな正しいデータベース設計
by
Mikiya Okuno
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
by
モノビット エンジン
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
PDF
40歳過ぎてもエンジニアでいるためにやっていること
by
onozaty
PPTX
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
by
NTT DATA Technology & Innovation
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
by
Miki Shimogai
PDF
ジャストシステムJava100本ノックのご紹介
by
JustSystems Corporation
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PDF
Vacuum徹底解説
by
Masahiko Sawada
PDF
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
PPTX
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
by
Hiroshi Ito
PPTX
マイクロサービスにおける非同期アーキテクチャ
by
ota42y
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
by
NTT DATA Technology & Innovation
マルチテナント化で知っておきたいデータベースのこと
by
Amazon Web Services Japan
ウェブセキュリティのありがちな誤解を解説する
by
Hiroshi Tokumaru
SQL大量発行処理をいかにして高速化するか
by
Shogo Wakayama
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
リレーショナルな正しいデータベース設計
by
Mikiya Okuno
ネットワーク ゲームにおけるTCPとUDPの使い分け
by
モノビット エンジン
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
40歳過ぎてもエンジニアでいるためにやっていること
by
onozaty
PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
by
Miki Shimogai
ジャストシステムJava100本ノックのご紹介
by
JustSystems Corporation
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
Redisの特徴と活用方法について
by
Yuji Otani
Vacuum徹底解説
by
Masahiko Sawada
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
by
Hiroshi Ito
マイクロサービスにおける非同期アーキテクチャ
by
ota42y
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
by
NTT DATA Technology & Innovation
Similar to 自動でバグを見つける!プログラム解析と動的バイナリ計装
PDF
プログラムを高速化する話
by
京大 マイコンクラブ
PDF
C/C++プログラマのための開発ツール
by
MITSUNARI Shigeo
PDF
llvm入門
by
MITSUNARI Shigeo
PDF
brainfuckを吐く自作言語bf-reusable
by
roodni
PDF
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
by
Takeshi Yamamuro
PDF
文字列曖昧検索によるマルウェアバイナリ解析
by
Preferred Networks
PDF
Boost Tour 1.50.0 All
by
Akira Takahashi
PDF
リナックスに置ける様々なリモートエキスプロイト手法 by スクハー・リー
by
CODE BLUE
PDF
Python physicalcomputing
by
Noboru Irieda
PDF
ただのリンカを書いた話.pdf
by
simotin13 Miyazaki
PPTX
センパイ!このプログラムクラッシュするんですけど。。。
by
yjono Seino
PDF
[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes
by
CODE BLUE
PPTX
Prosym2012
by
MITSUNARI Shigeo
ODP
Buffer overflow
by
ionis111
PPTX
Statically detecting vulnerability under memory pressure usingexhaustive search
by
Ruo Ando
PDF
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
by
Masahiro Sakai
PDF
Boost tour 1_40_0
by
Akira Takahashi
PDF
boost tour 1.48.0 all
by
Akira Takahashi
PDF
V6read#3
by
magoroku Yamamoto
PDF
Precise garbage collection for c
by
miura1729
プログラムを高速化する話
by
京大 マイコンクラブ
C/C++プログラマのための開発ツール
by
MITSUNARI Shigeo
llvm入門
by
MITSUNARI Shigeo
brainfuckを吐く自作言語bf-reusable
by
roodni
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
by
Takeshi Yamamuro
文字列曖昧検索によるマルウェアバイナリ解析
by
Preferred Networks
Boost Tour 1.50.0 All
by
Akira Takahashi
リナックスに置ける様々なリモートエキスプロイト手法 by スクハー・リー
by
CODE BLUE
Python physicalcomputing
by
Noboru Irieda
ただのリンカを書いた話.pdf
by
simotin13 Miyazaki
センパイ!このプログラムクラッシュするんですけど。。。
by
yjono Seino
[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes
by
CODE BLUE
Prosym2012
by
MITSUNARI Shigeo
Buffer overflow
by
ionis111
Statically detecting vulnerability under memory pressure usingexhaustive search
by
Ruo Ando
“Symbolic bounds analysis of pointers, array indices, and accessed memory reg...
by
Masahiro Sakai
Boost tour 1_40_0
by
Akira Takahashi
boost tour 1.48.0 all
by
Akira Takahashi
V6read#3
by
magoroku Yamamoto
Precise garbage collection for c
by
miura1729
More from uchan_nos
PDF
30分で分かる!OSの作り方 ver.2
by
uchan_nos
PPTX
USB3.0ドライバ開発の道
by
uchan_nos
PPTX
OSを手作りするという趣味と仕事
by
uchan_nos
PDF
Timers
by
uchan_nos
PPTX
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
by
uchan_nos
PDF
レガシーフリーOSに必要な要素技術 legacy free os
by
uchan_nos
PPTX
MikanOSと自作CPUをUSBで接続する
by
uchan_nos
PPTX
小型安価なFPGAボードの紹介と任意波形発生器
by
uchan_nos
PPTX
トランジスタ回路:エミッタ接地増幅回路
by
uchan_nos
PDF
Building libc++ for toy OS
by
uchan_nos
PDF
1を書いても0が読める!?隠れた重要命令INVLPG
by
uchan_nos
PDF
USB3 host driver program structure
by
uchan_nos
PDF
プランクトンサミットの歴史2019
by
uchan_nos
PPTX
Langsmith OpeLa handmade self-hosted OS and LPS
by
uchan_nos
PPTX
サイボウズ・ラボへ転籍して1年を振り返る
by
uchan_nos
PPTX
Security Nextcamp remote mob programming
by
uchan_nos
PPTX
OpeLa セルフホストなOSと言語処理系の自作
by
uchan_nos
PDF
Introduction of security camp 2019
by
uchan_nos
PPTX
OpeLa 進捗報告 at 第23回自作OSもくもく会
by
uchan_nos
PPTX
自作言語でお絵描き
by
uchan_nos
30分で分かる!OSの作り方 ver.2
by
uchan_nos
USB3.0ドライバ開発の道
by
uchan_nos
OSを手作りするという趣味と仕事
by
uchan_nos
Timers
by
uchan_nos
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
by
uchan_nos
レガシーフリーOSに必要な要素技術 legacy free os
by
uchan_nos
MikanOSと自作CPUをUSBで接続する
by
uchan_nos
小型安価なFPGAボードの紹介と任意波形発生器
by
uchan_nos
トランジスタ回路:エミッタ接地増幅回路
by
uchan_nos
Building libc++ for toy OS
by
uchan_nos
1を書いても0が読める!?隠れた重要命令INVLPG
by
uchan_nos
USB3 host driver program structure
by
uchan_nos
プランクトンサミットの歴史2019
by
uchan_nos
Langsmith OpeLa handmade self-hosted OS and LPS
by
uchan_nos
サイボウズ・ラボへ転籍して1年を振り返る
by
uchan_nos
Security Nextcamp remote mob programming
by
uchan_nos
OpeLa セルフホストなOSと言語処理系の自作
by
uchan_nos
Introduction of security camp 2019
by
uchan_nos
OpeLa 進捗報告 at 第23回自作OSもくもく会
by
uchan_nos
自作言語でお絵描き
by
uchan_nos
自動でバグを見つける!プログラム解析と動的バイナリ計装
1.
自動でバグを見つける! プログラム解析と動的バイナリ計装 カジュアルTechスシ 2020年5月28日 サイボウズ・ラボ株式会社 内田公太 1
2.
/13 自己紹介 • 研究員 at
サイボウズ・ラボ • サイボウズ本社に2014年新卒入社 • Hazama→SRE • 2020年1月にラボへ転籍 • カフェ部(酒)担当 • 紅茶も好きです 2
3.
/13 研究分野 • 計算機科学の教育 • 「OSを作る」ことを通してCS教育 •
教育用OS「MikanOS」の作成 • プログラム解析 • プログラムの動作を調べる • バグを見つける • 今日の主題 3
4.
/13 バッファーオーバーフロー • バッファーオーバーランとも • 問題:次のプログラムに潜むバグを指摘せよ (制限時間30秒) int
main() { char* p = malloc(10); for (int i = 0; i < 10; ++i) { p[i] = '0' + i; } p[10] = '0'; printf("p = %sn", p); } 4
5.
/13 静的解析 • プログラムを動かさずに解析 • 代表的なツール:Lint int
main() { char* p = malloc(10); for (int i = 0; i < 10; ++i) { p[i] = '0' + i; } p[10] = '0'; printf("p = %sn", p); } • pのヌルチェックをしていない • pの末尾を超えて書き込んでいる • pをfreeしていない 5 バッファーオーバーフロー
6.
/13 malloc()の戻り値 10バイト バッファーオーバーフロー 6 '0' '1' '2'
'3' '4' '5' '6' '7' '8' '9' NUL
7.
/13 動的解析 • プログラムを動かして解析 • 代表的なツール:GDB •
実際の値で正確な検査ができる • バイナリさえあれば動かせる • マルウェアの解析 • ソースコードの情報は使えない • この条件付きjmpはifかwhileか? 00000000004004a0 <main>: 4004a0: sub rsp,0x8 4004a4: mov edi,0xa 4004a9: call 400470 <malloc@plt> 4004ae: mov esi,0x400684 4004b3: mov BYTE PTR [rax],0x30 4004b6: mov BYTE PTR [rax+0x1],0x31 4004ba: mov BYTE PTR [rax+0x2],0x32 4004be: mov BYTE PTR [rax+0x3],0x33 … 7
8.
/13 バイナリ計装(今日の主題) • Binary Instrumentation •
実行ファイルに検査コードを埋め込む • 代表的なツール:Intel Pin • 一般に,実行ファイルに機械語を埋め 込むとアドレスがずれる • →再アセンブルが必要 • Intel Pinはそれをやってくれる 00000000004004a0 <main>: 4004a0: sub rsp,0x8 4004a4: mov edi,0xa 4004a9: call 400470 … 8
9.
/13 DBIでバッファーオーバーフローを発見 • 動的バイナリ計装:実行時にバイナリ計装する • 検出方針: •
mallocの引数と戻り値を記録しておき • メモリアクセス時にアクセス先アドレスを検査 int main() { char* p = malloc(10); for (int i = 0; i < 10; ++i) { p[i] = '0' + i; } p[10] = '0'; printf("p = %sn", p); } 引数と戻り値を記録 メモリアクセスを検査 9
10.
/13 自作解析ツールの出力 $ ../../../pin -t
obj-intel64/MyPinTool.so -- ./a.out =============================================== This application is instrumented by MyPinTool =============================================== Found out-of-bounds memory write at f2f01a (IP=4004e2) p = 0123456789 =============================================== MyPinTool analysis results: Heap Objects: f2f010: size=0xa f2f030: size=0x400 =============================================== 10
11.
/13 自作解析ツールの出力 $ ../../../pin -t
obj-intel64/MyPinTool.so -- ./a.out =============================================== This application is instrumented by MyPinTool =============================================== Found out-of-bounds memory write at f2f01a (IP=4004e2) p = 0123456789 =============================================== MyPinTool analysis results: Heap Objects: f2f010: size=0xa f2f030: size=0x400 =============================================== 解析対象アプリの出力 11
12.
/13 mallocを置き換える 0000000000400470 <malloc@plt>: 400470: jmp
QWORD PTR [rip+0x200baa] 400476: push 0x1 40047b: jmp 400450 <_init+0x28> … もとのプログラム 検査用malloc malloc()をラップ サイズとアドレスを記録 RTN_ReplaceSignature() Intel Pinの機能で関数置換 heap_objs 12
13.
/13 メモリアクセスを検査 00000000004004a0 <main>: 4004a0: sub
rsp,0x8 4004a4: mov edi,0xa 4004a9: call 400470 <malloc@plt> … 4004da: mov BYTE PTR [rax+0x8],0x38 4004de: mov BYTE PTR [rax+0x9],0x39 4004e2: mov BYTE PTR [rax+0xa],0x0 4004e6: xor eax,eax 4004e8: call 400480 <__printf_chk@plt> もとのプログラム INS_MemoryOperandCount() INS_InsertCall() CheckOverflow() 指定した命令のメモリ参照の個数 指定した命令の直前に関数呼び出しを挿入 heap_objs メモリアドレスが 範囲内であることを検査 13
Download