C++安全編程與滲透測試培訓大綱
第一部分:C++程序安全概覽
要點:從C++程序角度的安全定義,Top 25 Errors,CVE,資源
第二部分:滲透測試基礎
要點:Pentest,背景,測試過程,重要資源,
Kali Linux, Metasploitable 2,
BackBox,
環境搭建,
滲透測試的五大步驟,
Metasploit Framework詳細解析,
主機入侵完整過程演示(利用IRC漏洞遠程登錄被攻克目標機),
Armitage
[試驗一]使用MSF利用IRC的溢出漏洞入侵主機
第三部分:WinDBG精要
要點:WinDBG的命令類型,常用命令,命令語法,調試符號,符號文件的種類,符號服務器,
定制調試事件的方法和重要的調試命令,
軟件斷點、硬件斷點,復雜的斷點命令,
x86寄存器和反匯編技巧
[試驗二] WinDBG基礎(15分鐘)
第四部分:棧和局部緩沖區溢出
要點:;A,棧幀,棧幀布局,
棧指針被破壞(Stack pointer corruption.),
局部緩沖區越界(Overruns),
棧被破壞(Stack corruption.),
緩沖區溢出攻擊(BOA),
實例演示,SQL Server案例,Win7案例,IRCDaemon案例,GS機制(基于Cookie的溢出檢測機制),編譯器的保護措施
[試驗三] 理解緩沖區溢出攻擊(30分鐘)
第五部分:異常處理和應用程序崩潰
要點:結構化異常處理(SEH),C++異常處理,
Windows的異常奮發機制,
程序崩潰的完整過程和調試方法,
轉儲的基本知識,
如何使用ADPLUS自動產生用戶態轉儲,以及分析用戶態轉儲的常用命令和技巧
[試驗四] JIT調試和異常事件處理(30分鐘)
第六部分:多線程同步和死鎖
要點:并發和并行,多線程,
C++程序中創建線程的多種方法,
在VC和WinDBG中觀察和操縱線程的方法,
使用WinDBG來調試多線程程序和同時調試多個進程,包括控制線程執行狀態,臨界區,觀察同步對象、分析死鎖的方法,
案例演示,CPU的同步機制,互鎖系列內建函數(intrinsic)
第七部分:堆和堆腐敗
要點:C++程序中動態分配內存的多種方法(malloc, new, HeapAlloc),
介紹調試內存有關的典型問題的方法和技巧,
包括使用CRT堆和Win32堆的調試支持,
分析內存泄漏、訪問違例和棧溢出等,
在探討實踐經驗的同時會穿插重要的理論知識,
包括Win32對和CRT堆的結構、內存管理常識、堆布局等,真實案例分析
[試驗五] 使用UMDH追蹤堆的分配細節(30分鐘)
第八部分:安全開發和威脅建模
要點:SDL(Security Development Lifecycle),SD3C,SDL定義的主要過程和佳安全實踐,
Software Assurance Maturity Model (SAMM),TOP 25編程錯誤解析,
常用建模方法概覽(Trike 、OCTAVE 和P.A.S.T.A),
威脅建模,Microsoft Threat Modeling過程,STRIDE,風險評級,
微軟Threat Modeling Tool 2016用法演示
第九部分:代碼掃描
要點:源代碼掃描和黑盒掃描,
靜態掃描的優勢,
Coverity介紹,
工作過程,AST樹,Checkers,
三類事件,誤報問題和函數建模,
開源的掃描工具
第x部分:數字簽名和代碼完整性基礎
數字簽名的工作原理和有關的密碼學基礎,
非對稱加密,
Key的保護和管理,
Windows系統檢查代碼完整性的過程和有關的系統部件,對文件進行數字簽名的工具和方法
第x部分:鉤子和外掛
介紹鉤子(Hook)技術的背景和簡要歷史,
分析Windows平臺上的常用鉤子技術及其工作原理,
包括DLL注入、IAT掛鉤、消息掛鉤等,
然后針對保護鍵盤輸入這一目標,
討論鍵盤輸入的數據路徑,
防止按鍵被嗅探的方法 |