分享到plurk 分享到twitter 分享到facebook

Lab43: Runtime Behavior

預期目標

  • 複習 ARM 處理器和指令集,並深入 stack 和執行時期的行為
  • 熟悉 objdump、gdb 等工具,並利用上述工具分析執行檔

Part 1

目標:

  • 利用 gdb 與 objdump 分析執行檔

步驟:

  1. 下載作業檔案 (bomb.tar.gz)
  2. 解壓縮後閱讀 README 查看執行方式,並且開始 Hacking!!

    tar -xzvf bomb.tar.gz
    cat README

使用 GDB 分析

  • 假設 檔案 (bomb.tar.gz) 已經解開在 /tmp/bomb 目錄,先開啟兩個終端機
  • 在其中一個執行以下命令:

     qemu-arm -g 1234 -L /usr/arm-linux-gnueabihf ./bomb
  • 在另一個終端機執行以下命令:

    arm-none-eabi-gdb ./bomb
  • 在 gdb 的畫面中依序輸入以下命令:
  • target remote :1234
  • b phase_0
  • b phase_1
  • b phase_2
  • b phase_3
  • info breakpoints
  • c

  • 切換到執行 QEMU 的終端機,可見到要求輸入字串,輸入 help 並按下 Enter,這時可在 GDB 的視窗看到 Breakpoint 1 的訊息

程式說明 (上):

  • bomb 這支程式會從標準輸入讀取字串,請利用上述的工具找出正確的字串輸入
  • 總共有 5 個階段,第 0 個階段是範例,密碼是help
  • 溫馨小提示,不同階段可以從不同的方向去想
    • 階段 1 - 比較
    • 階段 2 - 迴圈
    • 階段 3 - switch
    • 階段 4 - 遞迴

程式說明 (下):

1. 下載[檔案 (bomb2.tar.gz)](/embedded/Lab43/bomb2.tar.gz),其餘步驟同上
2. 提示:回顧並熟悉上方及之前上課的內容

參考資料

Part 2

目標:

  • 瞭解 buffer overflow 的原理,並且利用這項技巧攻擊程式

步驟:

  • 假設 Lab-39qemu_stm32 放在 $HOME/workspace 目錄下

       cd ~/workspace
       git clone https://github.com/embedded2015/freertos-bufbomb.git || git clone git@github.com:embedded2015/freertos-bufbomb.git
       cd freertos-bufbomb && make
       echo "<Your codes here>" > exploit.str
       make exploit
       make qemu

在 FreeRTOS shell (QEMU 視窗),輸入以下命令:

   bufbomb

程式說明:

  • bufbomb 會利用 ARM semihosting 讀取由 make exploit 產生的 exploit.byte
  • 觀察 bufbomb.c,找出問題所在,輸入正確的 byte code
  • str2byte 這支程式會讀入 hex 並且轉換成二進位檔案,需要注意的是每一行 code 結尾必須是 0x0A('\n')
  • 溫馨小提示
    • Level 1 - 利用 buffer overflow 覆蓋 local variable 的值
    • Level 2 - 利用 buffer overflow 覆蓋堆疊上 link register 的值
    • Level 3 - 插入一段 exploit code 並且利用 buffer overflow 覆蓋堆疊上 link register 的值,使其能夠跳轉至 exploit code 修改 global variable 的值
  • 在建立 exploit code 的時候可以先寫 C code,編譯後利用 objdump 將 machine code 取出

參考資料:

繳交作業

  • 截止日期:
  • May 2, 2015 (含) 之前

  • 更新解題過程到共筆網站: Lab 43 / 作業共筆,需要標注自己的 ID