Slide 1
Slide 1 text
プロセッサエミュレータQEMUを用いた組込み機器への
ROP攻撃のデモンストレーション
多⽊ 優⾺1, 福光 正幸2, 湯村 翼1 1)北海道情報⼤学 2)⻑崎県⽴⼤学
Computer Security Symposium 2022 デモンストレーション
本稿では、i686で動作するCentOS6と、ARM Cortex-A53で稼働するRaspberryPi OSでのROP検証を⾏った。
今後は、ARM Cortex-M0で動作するRIOT OSで脆弱なテストプログラムを動作させ、そこへROP攻撃を試す。
さらに、ROP攻撃対策を考案し、必要であればセキュリティ機構の実装も⾏う。
Arm Cortex-A53・RaspberryPi OS
OSのバージョン確認コマンド“lsb_release -a”を
ホスト環境から実⾏し、攻撃の成功を確認した。
i686・CentOS6
OSのバージョン確認コマンド“cat /etc/redhat-release”を
ホスト環境から実⾏し、攻撃の成功を確認した。
・エクスプロイトコードを組込み機器を模した環境に送信し、ROP攻撃検証を⾏った。
・組込み環境はQEMUを⽤いて構築した。
・組み込み環境はQEMUの設定により、ホスト以外との通信を遮断している。
〇⽬的:
OSとプロセッサの組み合わせによるROP攻撃の可能性を
調査するため、様々な組込み機器に対してROP攻撃検証を⾏う。
最終的にはデモ環境へROP対策を施す
〇背景:
IoT機器の普及によって組込み機器の需要が増加している。
⼀⽅で、ROP攻撃の研究が進んでいる。
このROP攻撃は組込み機器に対しても有効なため、
ROP対策が施されていない可能性のある、
低スペックな組込み機器の調査を⾏う。
研究概要
・プログラムの命令⽚(アセンブリコード)を繋ぎ合わせて
任意の処理を⾏わせる攻撃。
・様々なアーキテクチャに応⽤することも可能。
ROP攻撃とは?
ROP攻撃検証
両環境のセキュリティ機構実装状況:
NX bit 有効 / SSP 無効 / ASLR 無効 / CFI 無効
おわりに
レジスタ
0x400100: pop rdi
0x400102: ret
:
アセンブリコード
buf (0x10)
rsp
saved rbp
リターンアドレス
スタック領域
・
・
・
rbp
system(/bin/sh)を実⾏して制御を奪う例
レジスタ
rdi: 第1引数を格納
rip: 次に実行する命令の
アドレスを格納
rbp: スタックベースの
アドレスを格納
rsp: スタックトップの
アドレスを格納
0x400100: pop rdi
0x400102: ret
:
アセンブリコード スタック領域
ROPチェーン送信後
レジスタ
rdi: /bin/shのアドレス
rip: 0x400102
rbp: 0x41414141…
rsp: スタックトップの
アドレスを格納
0x400100: pop rdi
0x400102: ret
:
アセンブリコード スタック領域
leave命令(関数終了処理)後、0x400100に遷移してpop rdiを⾏う
レジスタ
rdi: /bin/shのアドレス
rip: systemのアドレス
rbp: 0x41414141…
rsp: スタックトップの
アドレスを格納
0x400100: pop rdi
0x400102: ret
:
アセンブリコード スタック領域
0x40102に遷移してret命令を⾏う
rdi: 第1引数を格納
rip: 次に実行する命令の
アドレスを格納
rbp: スタックベースの
アドレスを格納
rsp: スタックトップの
アドレスを格納
AAAAAAAA…
rsp
AAAAAAAA
0x400100
rbp
/bin/shのアドレス
systemのアドレス
AAAAAAAA…
rsp
AAAAAAAA
0x400100
/bin/shのアドレス
systemのアドレス
AAAAAAAA…
rsp
AAAAAAAA
0x400100
/bin/shのアドレス
systemのアドレス
※pop rdi: rspが指す値をrdiに格納する。 ※ret: rspが指す値をripに格納する。
ROP攻撃例(x86_64環境の場合)