Upload
mango-chen
View
431
Download
0
Embed Size (px)
Citation preview
© 2016 Software Engineering Consortium
LAB FOR SECURE PROGRAMMING IN C
1
© 2016 Software Engineering Consortium
Lab環境
Linux-Ubuntu14.04
32bits
gcc gdb
• sudo apt-get install gcc-multilib
hexedit
• sudo apt-get install hexedit
2
© 2016 Software Engineering Consortium
Lab說明
Lab1: 以Flawfinder對程式碼進行安全分析
Lab2: 根據Lab1找到的安全漏洞,嘗試攻擊程式
Lab2-1:以Stack Overflow攻擊程式
Lab2-2:以Array Indexing Error攻擊程式
Lab2-3:以Format String Bugs攻擊程式
Lab3: 嘗試修改程式碼,避免遭受攻擊
3
© 2016 Software Engineering Consortium
補充資料:Flawfinder介紹
4
© 2016 Software Engineering Consortium
Flawfinder簡介
http://www.dwheeler.com/flawfinder/
容易安裝與使用的C與C++程式碼安全分析工具
條列可能的安全問題
根據錯誤嚴重等級排序各個分析出的安全問題
使用環境
Unix-based系統• sudo apt-get install flawfinder
安裝Cygwin 的Windows系統
指令
flawfinder directory_with_source_code
• 例如:flawfinder test1.c 5
© 2016 Software Engineering Consortium
範例程式碼(000.c)
6
© 2016 Software Engineering Consortium
Flawfinder(1)
以”flawfinder 000.c”對000.c進行安全分析
程式名稱
錯誤等級
問題區域
危險函數/參數
程式碼行碼
錯誤說明
7
© 2016 Software Engineering Consortium
Flawfinder(2)
8
© 2016 Software Engineering Consortium
Flawfinder(3)
Hits:找到錯誤數量
Lines analyzed:分析的程式碼行數與所耗費時間
Physical Source Lines of Code (SLOC):原始碼行數
Hits@level:各等級錯誤數量
Hits@level+:各等級錯誤數量累計
Hits/KSLOC@level:錯誤數量/來源程式碼(千行)
Minimun risk level:最小風險水平 9
© 2016 Software Engineering Consortium
補充資料:GDB指令介紹
10
© 2016 Software Engineering Consortium
GDB指令(1)
run (或r):執行程式
r 555 666 (以555和666作為輸入,並執行程式)
disass:反組譯函數,檢視各個組合語言指令在記憶體中的位址
Ex: disass main (檢視main()的組合語言指令以及記憶體位置)
breakpoint (或b, bre, break):設定中斷點
Ex1: b 19 (在程式碼原始碼中的第19行設定中斷點)
Ex2: b *0x080485bc (在記憶體位置0x080485bc的指令設定中斷點)
c:繼續執行程式直到下一個中斷點,或是直到程式結束
n:執行下一行程式碼(遇到函數呼叫,會讓函數執行完return)
s:執行下一行程式碼(遇到函數呼叫,會讓進入函數)11
© 2016 Software Engineering Consortium
GDB指令(2)
print: 檢視變數的內容
Ex1: print i (檢視變數i的內容)
Ex2: print &I (檢視存放變數i的記憶體位址)
x/32wx:印出 32個 word (4 bytes) 的記憶體內容
x/32wx $esp (印出$esp這個暫存器所指記憶體位址起的32個words記憶體內容)
12