SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
CODE BLUE 2016.10.20
@st4g3r
Hiroki MATSUKUMA
(@st4g3r)
新米ペンテスター
 サイバーディフェンス研究所所属
CTF Player
 TokyoWesterns
興味のあること
 Exploitation
 GLIBC malloc (現時点では)
$whoami
tl;dr
Heap Exploitation(x64 Linux/Glibc malloc)
"House of Einherjar" とは?
 Glibc mallocにおける新しいheap exploitation手法で, malloc()
の戻り値をおおよそ任意なアドレスに強制させるものである.
 通常, ユーザはmalloc()の戻り値のアドレスに対して読み書きを行える.
 フラグメント防止のためにあるchunk同士の結合処理を利用する.
 Well-sizedなchunk上でのOff-by-one Overflowが直後のchunkの
prev_sizeとPREV_INUSEのコントロールをもたらす.
Proof of Concept
 http://ux.nu/6Rv6h
概要
Glibc malloc
 Chunk
 Bin
 Consolidating Chunks
House of Einherjar
 Flaw / Flow
 Demo
 Evaluation
 Countermeasures
"struct malloc_chunk"
 メモリブロックはfree()される際にfree listへとつながれる.
 このとき, メモリブロックは"struct malloc_chunk"として扱われる.
 ChunkのサイズはSIZE_SZ*2にアライメントされる.
(prev_size)
size
fd
bk
(not used)
(prev_size)
size
data
+
pads
SIZE_SZ
=8byte
User's
space
(a) in-used (b) free
図1 struct malloc_chunk
Shared with
previous chunk
Glibc malloc Chunk
型 名称 説明
INTERNAL_SIZE_T prev_size 自身の直前にあるchunkのサイズ (shared)
INTERNAL_SIZE_T size 自身のサイズと現在の状態
struct malloc_chunk *fd (free list上で)前方につながっているchunkへのポインタ
struct malloc_chunk *bk (free list上で)後方につながっているchunkへのポインタ
表1: struct malloc_chunk
Glibc malloc Chunk
"struct malloc_chunk"
 メモリブロックはfreeされる際にfree listへとつながれる.
 このとき, メモリブロックは"struct malloc_chunk"として扱われる.
 ChunkのサイズはSIZE_SZ*2にアライメントされる.
(prev_size)
size
fd
bk
(not used)
(prev_size)
size
data
+
pads
SIZE_SZ
=8byte
PMA
User's
space
(a) in-used (b) free
図1 struct malloc_chunk
Low 3 bits
mean chunk
status
Shared with
previous chunk
Glibc malloc Chunk
"struct malloc_chunk"
 メモリブロックはfreeされる際にfree listへとつながれる.
 このとき, メモリブロックは"struct malloc_chunk"として扱われる.
 ChunkのサイズはSIZE_SZ*2にアライメントされる.
(prev_size)
size
fd
bk
(not used)
(prev_size)
size
data
+
pads
SIZE_SZ
=8byte
PMA
User's
space
(a) in-used (b) free
図1 struct malloc_chunk
Low 3 bits
mean chunk
status
 [P]REV_INUSE
 IS_[M]MAPPED
 NON_MAIN_[A]RENA
Shared with
previous chunk
Glibc malloc Chunk
Free chunkはfree list(bin)につながれる
 Small bins
 MAX_FAST_SIZE < size < MIN_LARGE_SIZE
 MAX_FAST_SIZE: 0xa0
 MIN_LARGE_SIZE: 0x400
 Unsorted bins
 free()されたばかりのchunkが一時的に格納されるリスト.
 サイズによる制限は無い.
Glibc malloc Bin
(prev_size)
size
fd
bk
(not used)
bins[n-1]
bins[n]
bins[n+1]
FD
BK
図2. small binのfree list
bins
c
struct malloc_chunk
PMA
Glibc malloc Bin
Glibc malloc Consolidating Chunks
メモリ確保と解放を繰り返しているとフラグメント化を起こし
てしまう
 そこで, free()されるchunkと隣接するfree chunkの結合を考える.
 自身の直前のchunkと隣接している.
 自身の直後のchunkと隣接している.
PREV_INUSE bit
 自身の直前に隣接するchunkが使用中か否かを判断するためのフラグ.
 これが結合の際の判断基準となる.
Glibc malloc Consolidating Chunks
Chunkの結合処理はどこにある?
 Glibcを読む.
 free(p)
 __libc_free(p)
 _int_free(av, p, have_lock) <- これ!
(a) 始点
図3 _int_free()
(b) 結合箇所
図3 _int_free()
(c) 終点
図3 _int_free()
Glibc malloc Consolidating Chunks
(prev_size)
size
prev
p
(a) prev_inuseのチェック
図4 結合
size = p->size
If not prev_inuse(p):
prevsize = p->prev_size
size += prevsize
p += -(long)(prevsize)
fd
bk
(not used)
(prev_size)
size 0
data
+
pads
p
Glibc malloc Consolidating Chunks
(prev_size)
size
(b) 再配置
図4 結合
size = p->size
If not prev_inuse(p):
prevsize = p->prev_size
size += prevsize
p += -(long)(prevsize)
p
fd
bk
(not used)
(prev_size)
size 0
data
+
pads
prev
p
p
Glibc malloc Consolidating Chunks
(prev_size)
size 1
p
(c) 結果
図4 結合
p
(prev_size)
size
fd
bk
(not used)
fd
bk
(not used)
(prev_size)
size 0
data
+
pads
prev
p
p
House of Einherjar Flaw / Flow
今のところ, これらのことが既知である
 "p->prev_size"は, 直前に隣接するchunkと共有されうる.
 "p->size"のPREV_INUSE bitを基にchunkの結合の可否を決定する.
 新しいpの位置は"p->prev_size"により決定する.
 "p = chunk_at_offset(p, -((long)prevsize))"
House of Einherjar Flaw / Flow
今のところ, これらのことが既知である
 "p->prev_size"は, 直前に隣接するchunkと共有されうる.
 "p->size"のPREV_INUSE bitを基にchunkの結合の可否を決定する.
 新しいpの位置は"p->prev_size"により決定する.
 "p = chunk_at_offset(p, -((long)prevsize))"
ここで, 以下の条件について考える
 3つのchunkが存在する.
 p0: well-sizedなサイズをもつchunk(p1->prev_sizeを内包する).
 p1: small binサイズのchunk.
 (p2: malloc_consolidate()を抑制するためのchunk.)
 p0についてOff-by-oneでNUL byte('¥0')なOverflowが存在する.
House of Einherjar Flaw / Flow
(prev_size)
size
data
(prev_size)
size
data
+
pads
1
well-sized
shared
(a) Overflow前
図5 House of Einherjarの原理
p0 (used)
p1 (used)
(prev_size)
size
data
(prev_size)
size
data
+
pads
1
(b) Overflow
図5 House of Einherjarの原理
Overflown
House of Einherjar Flaw / Flow
(prev_size)
size
data
0xdeadbeef
size
data
+
pads
'¥0'
(c) Overflow後
図5 House of Einherjarの原理
p0 (free)
p1 (used)
shared
well-sized
House of Einherjar Flaw / Flow
House of Einherjar Flaw / Flow
(prev_size)
size
data
0xdeadbeef
size
data
+
pads
'¥0'
(c) Overflow後
図5 House of Einherjarの原理
p0 (free)
p1 (used)
shared
well-sized
size = p1->size
If not prev_inuse(p1):
prevsize = p1->prev_size
size += prevsize
p1 += -(long)(prevsize)
House of Einherjar Flaw / Flow
(prev_size)
size
data
0xdeadbeef
size
data
+
pads
'¥0'
(c) Overflow後
図5 House of Einherjarの原理
p0 (free)
p1 (used)
shared
well-sized
size = p1->size
If not prev_inuse(p1):
prevsize = 0xdeadbeef
size += prevsize
p1 += -(long)(prevsize)
House of Einherjar Flaw / Flow
House of Einherjarに必要なこと
 うまくサイズの調整されたchunkがOff-by-oneでOverflowを起こす.
 ターゲットとする領域の近くにfake chunkがある.
 fd, bkメンバはfake chunk自身を指すようにすると簡単である.
 ターゲットとする領域と"p1"のアドレスについての差分が計算可能である.
 このとき, これら2つのアドレスのleakが必要となる.
 free()時に"p1->size"が大きく変更されるのでその補正が可能である.
 ※fake chunkは何回か編集可能であると仮定する.
デモ
http://ux.nu/6Rv6h
House of Einherjar Evaluation
メリット
 メモリレイアウトにも依るがOff-by-oneなOverflowさえあればできる.
 "House of Force"のような巨大なmalloc()を必要としない.
デメリット
 fake chunkを置ける領域の近くしかmalloc()で取得できない.
 2つのアドレスのleakが必要となる.
評価: "悪くはない"
House of Einherjar Countermeasures
"struct malloc_chunk"がよくないのでは?
 そもそも"chunk->prev_size"が通常の書き込みにより上書きされること
がよくない.
 そもそもBoundary Tagアルゴリズムだから仕方がない.
対策方法は?
 Address checking
 結合後の新しいchunkのアドレスは正しいか?
 StackとHeapのアドレスは全然違う.
 Return addressは守れる.
 Heap内でのHouse of Einherjarには対応しきれない.
Thank You For Your Attention!
Any Questions?

Weitere ähnliche Inhalte

Was ist angesagt?

Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果
Masayuki Ozawa
 
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
Takeshi HASEGAWA
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
 
Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1
cohama
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 

Was ist angesagt? (20)

Blazing Performance with Flame Graphs
Blazing Performance with Flame GraphsBlazing Performance with Flame Graphs
Blazing Performance with Flame Graphs
 
Zynq mp勉強会資料
Zynq mp勉強会資料Zynq mp勉強会資料
Zynq mp勉強会資料
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果Sql server よく聞く設定とその効果
Sql server よく聞く設定とその効果
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17)
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
 
自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装自動でバグを見つける!プログラム解析と動的バイナリ計装
自動でバグを見つける!プログラム解析と動的バイナリ計装
 
QEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミングQEMUでARM64bitベアメタルプログラミング
QEMUでARM64bitベアメタルプログラミング
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
 
Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道 淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
UEFIベアメタルプログラミング
UEFIベアメタルプログラミングUEFIベアメタルプログラミング
UEFIベアメタルプログラミング
 

Ähnlich wie [CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹

関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
MITSUNARI Shigeo
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Yosuke Onoue
 
すごいH 第12章モノイド
すごいH 第12章モノイドすごいH 第12章モノイド
すごいH 第12章モノイド
Shinta Hatatani
 
Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門
cocopon
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミング
nagoya313
 

Ähnlich wie [CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹 (20)

関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
 
JVM-Reading-ParalleGC
JVM-Reading-ParalleGCJVM-Reading-ParalleGC
JVM-Reading-ParalleGC
 
Jvm reading-parallel gc
Jvm reading-parallel gcJvm reading-parallel gc
Jvm reading-parallel gc
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用について
 
DEXCS2022 for preCICE
DEXCS2022 for preCICEDEXCS2022 for preCICE
DEXCS2022 for preCICE
 
すごいH 第12章モノイド
すごいH 第12章モノイドすごいH 第12章モノイド
すごいH 第12章モノイド
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
 
optimal Ate pairing
optimal Ate pairingoptimal Ate pairing
optimal Ate pairing
 
FSI analysis with preCICE (OpenFOAM and CalculiX)
FSI analysis with preCICE (OpenFOAM and CalculiX) FSI analysis with preCICE (OpenFOAM and CalculiX)
FSI analysis with preCICE (OpenFOAM and CalculiX)
 
Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門Core Graphicsでつくる自作UIコンポーネント入門
Core Graphicsでつくる自作UIコンポーネント入門
 
論文紹介: Cuckoo filter: practically better than bloom
論文紹介: Cuckoo filter: practically better than bloom論文紹介: Cuckoo filter: practically better than bloom
論文紹介: Cuckoo filter: practically better than bloom
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
怪しいWindowsプログラミング
怪しいWindowsプログラミング怪しいWindowsプログラミング
怪しいWindowsプログラミング
 

Mehr von CODE BLUE

[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
CODE BLUE
 
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman [cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
CODE BLUE
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
CODE BLUE
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
CODE BLUE
 
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka [cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
CODE BLUE
 
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
CODE BLUE
 
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
CODE BLUE
 
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
CODE BLUE
 
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
CODE BLUE
 
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
CODE BLUE
 

Mehr von CODE BLUE (20)

[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...[cb22] Hayabusa  Threat Hunting and Fast Forensics in Windows environments fo...
[cb22] Hayabusa Threat Hunting and Fast Forensics in Windows environments fo...
 
[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl[cb22] Tales of 5G hacking by Karsten Nohl
[cb22] Tales of 5G hacking by Karsten Nohl
 
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...[cb22]  Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
[cb22] Your Printer is not your Printer ! - Hacking Printers at Pwn2Own by A...
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(4) by 板橋 博之
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(3) by Lorenzo Pupillo
 
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...[cb22]  ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
[cb22] ”The Present and Future of Coordinated Vulnerability Disclosure” Inte...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman [cb22]  「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション(2)by Allan Friedman
 
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
[cb22] "The Present and Future of Coordinated Vulnerability Disclosure" Inter...
 
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by  高橋 郁夫
[cb22] 「協調された脆弱性開示の現在と未来」国際的なパネルディスカッション (1)by 高橋 郁夫
 
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
[cb22] Are Embedded Devices Ready for ROP Attacks? -ROP verification for low-...
 
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka [cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
[cb22] Wslinkのマルチレイヤーな仮想環境について by Vladislav Hrčka
 
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
[cb22] Under the hood of Wslink’s multilayered virtual machine en by Vladisla...
 
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
[cb22] CloudDragon’s Credential Factory is Powering Up Its Espionage Activiti...
 
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...[cb22]  From Parroting to Echoing:  The Evolution of China’s Bots-Driven Info...
[cb22] From Parroting to Echoing: The Evolution of China’s Bots-Driven Info...
 
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...[cb22]  Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
[cb22] Who is the Mal-Gopher? - Implementation and Evaluation of “gimpfuzzy”...
 
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
[cb22] Mal-gopherとは?Go系マルウェアの分類のためのgimpfuzzy実装と評価 by 澤部 祐太, 甘粕 伸幸, 野村 和也
 
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
[cb22] Tracking the Entire Iceberg - Long-term APT Malware C2 Protocol Emulat...
 
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
[cb22] Fight Against Malware Development Life Cycle by Shusei Tomonaga and Yu...
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹

  • 2. Hiroki MATSUKUMA (@st4g3r) 新米ペンテスター  サイバーディフェンス研究所所属 CTF Player  TokyoWesterns 興味のあること  Exploitation  GLIBC malloc (現時点では) $whoami
  • 3. tl;dr Heap Exploitation(x64 Linux/Glibc malloc) "House of Einherjar" とは?  Glibc mallocにおける新しいheap exploitation手法で, malloc() の戻り値をおおよそ任意なアドレスに強制させるものである.  通常, ユーザはmalloc()の戻り値のアドレスに対して読み書きを行える.  フラグメント防止のためにあるchunk同士の結合処理を利用する.  Well-sizedなchunk上でのOff-by-one Overflowが直後のchunkの prev_sizeとPREV_INUSEのコントロールをもたらす. Proof of Concept  http://ux.nu/6Rv6h
  • 4. 概要 Glibc malloc  Chunk  Bin  Consolidating Chunks House of Einherjar  Flaw / Flow  Demo  Evaluation  Countermeasures
  • 5. "struct malloc_chunk"  メモリブロックはfree()される際にfree listへとつながれる.  このとき, メモリブロックは"struct malloc_chunk"として扱われる.  ChunkのサイズはSIZE_SZ*2にアライメントされる. (prev_size) size fd bk (not used) (prev_size) size data + pads SIZE_SZ =8byte User's space (a) in-used (b) free 図1 struct malloc_chunk Shared with previous chunk Glibc malloc Chunk
  • 6. 型 名称 説明 INTERNAL_SIZE_T prev_size 自身の直前にあるchunkのサイズ (shared) INTERNAL_SIZE_T size 自身のサイズと現在の状態 struct malloc_chunk *fd (free list上で)前方につながっているchunkへのポインタ struct malloc_chunk *bk (free list上で)後方につながっているchunkへのポインタ 表1: struct malloc_chunk Glibc malloc Chunk
  • 7. "struct malloc_chunk"  メモリブロックはfreeされる際にfree listへとつながれる.  このとき, メモリブロックは"struct malloc_chunk"として扱われる.  ChunkのサイズはSIZE_SZ*2にアライメントされる. (prev_size) size fd bk (not used) (prev_size) size data + pads SIZE_SZ =8byte PMA User's space (a) in-used (b) free 図1 struct malloc_chunk Low 3 bits mean chunk status Shared with previous chunk Glibc malloc Chunk
  • 8. "struct malloc_chunk"  メモリブロックはfreeされる際にfree listへとつながれる.  このとき, メモリブロックは"struct malloc_chunk"として扱われる.  ChunkのサイズはSIZE_SZ*2にアライメントされる. (prev_size) size fd bk (not used) (prev_size) size data + pads SIZE_SZ =8byte PMA User's space (a) in-used (b) free 図1 struct malloc_chunk Low 3 bits mean chunk status  [P]REV_INUSE  IS_[M]MAPPED  NON_MAIN_[A]RENA Shared with previous chunk Glibc malloc Chunk
  • 9. Free chunkはfree list(bin)につながれる  Small bins  MAX_FAST_SIZE < size < MIN_LARGE_SIZE  MAX_FAST_SIZE: 0xa0  MIN_LARGE_SIZE: 0x400  Unsorted bins  free()されたばかりのchunkが一時的に格納されるリスト.  サイズによる制限は無い. Glibc malloc Bin
  • 10. (prev_size) size fd bk (not used) bins[n-1] bins[n] bins[n+1] FD BK 図2. small binのfree list bins c struct malloc_chunk PMA Glibc malloc Bin
  • 11. Glibc malloc Consolidating Chunks メモリ確保と解放を繰り返しているとフラグメント化を起こし てしまう  そこで, free()されるchunkと隣接するfree chunkの結合を考える.  自身の直前のchunkと隣接している.  自身の直後のchunkと隣接している. PREV_INUSE bit  自身の直前に隣接するchunkが使用中か否かを判断するためのフラグ.  これが結合の際の判断基準となる.
  • 12. Glibc malloc Consolidating Chunks Chunkの結合処理はどこにある?  Glibcを読む.  free(p)  __libc_free(p)  _int_free(av, p, have_lock) <- これ!
  • 16. Glibc malloc Consolidating Chunks (prev_size) size prev p (a) prev_inuseのチェック 図4 結合 size = p->size If not prev_inuse(p): prevsize = p->prev_size size += prevsize p += -(long)(prevsize) fd bk (not used) (prev_size) size 0 data + pads p
  • 17. Glibc malloc Consolidating Chunks (prev_size) size (b) 再配置 図4 結合 size = p->size If not prev_inuse(p): prevsize = p->prev_size size += prevsize p += -(long)(prevsize) p fd bk (not used) (prev_size) size 0 data + pads prev p p
  • 18. Glibc malloc Consolidating Chunks (prev_size) size 1 p (c) 結果 図4 結合 p (prev_size) size fd bk (not used) fd bk (not used) (prev_size) size 0 data + pads prev p p
  • 19. House of Einherjar Flaw / Flow 今のところ, これらのことが既知である  "p->prev_size"は, 直前に隣接するchunkと共有されうる.  "p->size"のPREV_INUSE bitを基にchunkの結合の可否を決定する.  新しいpの位置は"p->prev_size"により決定する.  "p = chunk_at_offset(p, -((long)prevsize))"
  • 20. House of Einherjar Flaw / Flow 今のところ, これらのことが既知である  "p->prev_size"は, 直前に隣接するchunkと共有されうる.  "p->size"のPREV_INUSE bitを基にchunkの結合の可否を決定する.  新しいpの位置は"p->prev_size"により決定する.  "p = chunk_at_offset(p, -((long)prevsize))" ここで, 以下の条件について考える  3つのchunkが存在する.  p0: well-sizedなサイズをもつchunk(p1->prev_sizeを内包する).  p1: small binサイズのchunk.  (p2: malloc_consolidate()を抑制するためのchunk.)  p0についてOff-by-oneでNUL byte('¥0')なOverflowが存在する.
  • 21. House of Einherjar Flaw / Flow (prev_size) size data (prev_size) size data + pads 1 well-sized shared (a) Overflow前 図5 House of Einherjarの原理 p0 (used) p1 (used)
  • 22. (prev_size) size data (prev_size) size data + pads 1 (b) Overflow 図5 House of Einherjarの原理 Overflown House of Einherjar Flaw / Flow
  • 23. (prev_size) size data 0xdeadbeef size data + pads '¥0' (c) Overflow後 図5 House of Einherjarの原理 p0 (free) p1 (used) shared well-sized House of Einherjar Flaw / Flow
  • 24. House of Einherjar Flaw / Flow (prev_size) size data 0xdeadbeef size data + pads '¥0' (c) Overflow後 図5 House of Einherjarの原理 p0 (free) p1 (used) shared well-sized size = p1->size If not prev_inuse(p1): prevsize = p1->prev_size size += prevsize p1 += -(long)(prevsize)
  • 25. House of Einherjar Flaw / Flow (prev_size) size data 0xdeadbeef size data + pads '¥0' (c) Overflow後 図5 House of Einherjarの原理 p0 (free) p1 (used) shared well-sized size = p1->size If not prev_inuse(p1): prevsize = 0xdeadbeef size += prevsize p1 += -(long)(prevsize)
  • 26. House of Einherjar Flaw / Flow House of Einherjarに必要なこと  うまくサイズの調整されたchunkがOff-by-oneでOverflowを起こす.  ターゲットとする領域の近くにfake chunkがある.  fd, bkメンバはfake chunk自身を指すようにすると簡単である.  ターゲットとする領域と"p1"のアドレスについての差分が計算可能である.  このとき, これら2つのアドレスのleakが必要となる.  free()時に"p1->size"が大きく変更されるのでその補正が可能である.  ※fake chunkは何回か編集可能であると仮定する.
  • 28. House of Einherjar Evaluation メリット  メモリレイアウトにも依るがOff-by-oneなOverflowさえあればできる.  "House of Force"のような巨大なmalloc()を必要としない. デメリット  fake chunkを置ける領域の近くしかmalloc()で取得できない.  2つのアドレスのleakが必要となる. 評価: "悪くはない"
  • 29. House of Einherjar Countermeasures "struct malloc_chunk"がよくないのでは?  そもそも"chunk->prev_size"が通常の書き込みにより上書きされること がよくない.  そもそもBoundary Tagアルゴリズムだから仕方がない. 対策方法は?  Address checking  結合後の新しいchunkのアドレスは正しいか?  StackとHeapのアドレスは全然違う.  Return addressは守れる.  Heap内でのHouse of Einherjarには対応しきれない.
  • 30. Thank You For Your Attention! Any Questions?