Upgrade to Pro — share decks privately, control downloads, hide ads and more …

プロセッサエミュレータQEMUを用いた組込み機器へのROP攻撃のデモンストレーション / CSS2022

yumulab
October 26, 2022

プロセッサエミュレータQEMUを用いた組込み機器へのROP攻撃のデモンストレーション / CSS2022

CSS2022デモンストレーションセッションの発表資料 https://dl.yumulab.org/papers/28

yumulab

October 26, 2022
Tweet

More Decks by yumulab

Other Decks in Research

Transcript

  1. プロセッサエミュレータ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環境の場合)

    View Slide