HeartBleed Bughtml
Heartbleed漏洞,這項嚴重缺陷(CVE-2014-0160)的產生是因爲未能在memcpy()調用受害用戶輸入內容做爲長度參數以前正確進行邊界檢查。攻擊者能夠追蹤OpenSSL所分配的64KB緩存、將超出必要範圍的字節信息複製到緩存當中再返回緩存內容,這樣一來受害者的內存內容就會以每次64KB的速度進行泄露。java
• 定義:在不執行計算機程序的條件下,對源代碼進行分析,找出代碼算法
缺陷數據庫
• 執行方式:通常配合靜態程序分析工具進行數組
• 採用技術:數據流分析、機器學習、語義精簡...緩存
• 可檢測類型:死鎖,空指針,資源泄露,緩衝區溢出,安全漏洞,競態條件...安全
• 優勢:微信
• 可以檢測全部的代碼級別的可執行路徑組合,快速,準確架構
• 直接面向源碼,分析多種問題併發
• 在研發階段開始找到並修復多種問題,節省大量時間/人力成本
• 注意:靜態分析不是萬能的,測試是持續的過程,非一勞永逸
• 編譯器警告: 保證類型安全
– 最初級的靜態分析,檢測規則簡單
• 中間語言分析: 檢測字節碼( Byte Code )的缺陷,將其從新映射到真實代碼中
– 在轉換與映射過程當中易形成精度丟失
• 高誤報率:目前靜態分析產品的誤報率廣泛在30%以上。
• 缺陷種類較少,找到的問題級別不高:多數爲代碼規範或低級缺陷,非實際Bug
– 如命名規範、類定義規範,最佳實踐.....
• 易用性較低:基本上都是一次性的使用工具,沒法與SDLC集成
– SCM集成:如SVN,CVS,Perforce,Git
– Bug Tracking:如Bugzilla,Jira
基於Meta Compilation的靜態分析:
• 由斯坦福大學教授Dawson Engler提出,在深度理解代碼與程序語義的基礎上檢測缺陷
• 旨在查找「真正的代碼缺陷」
• 實現原理:
• 使用可擴展的metal語言定義正確性Checker
• 將程序的源碼使用狀態機進行抽象描述(State Machine Abstraction)。
• 使用xgcc系統匹配Checker與抽象狀態機狀態,找到問題所在的點。
• 可準確檢測實際的Bug(內存和指針問題、資源泄露、緩衝區溢出,數組越界,
心臟出血漏洞...)
• 可以檢測高達億行級別的代碼庫,避免「狀態爆炸」
• 使用模型檢驗與符號執行技術,誤報率下降至15%如下
• 算法已步入實際應用
• 面向企業的Coverity 軟件
• 面向開源代碼的Coverity SCAN
Java語言被編譯成JVM bytecode - 在運行時被轉換成本地可執行
代碼的分析
選項一
• 分析 byte-code:用戶編譯他們的軟件,而後分析編譯後的可執行文件與調試信息,分析引擎聯繫找到的缺陷與源代碼位置
• 某些開源工具的實現原理
選項二:
• 獲取全部的Java編譯過程並執行分析
• Bytecode分析工做仍舊存在,但包含更多的內容
• 獲取全部編譯過程
• 每當 「javac(或其餘相關API)」 被調用後,編譯獲取系統記錄全部的編譯器選項,操做,源代碼與調用的庫文件
• 面向源代碼和庫文件可進行全面編譯後分析
• 找到的缺陷將被展現給研發人員修復
• 過程間分析(Intra-procedural analyses)將考慮每個合理的可執行路徑
• 快速修剪不可行路徑是一件很麻煩的事情!
• 數學方案
• 獲取一系列的函數定義
• 資源分配
• 調用….
• 過程間分析
• Bytecode 分析將建立函數定義
• 消除誤報很是難
• 將複雜的缺陷解釋出來很難
• 只找潛在的一次性缺陷是很難的
Web 應用安全缺陷(OWASP Top 10)
– 跨站腳本攻擊
– SQL 注入
– 命令行注入
– 路徑遍歷…
資源泄露
– 數據庫鏈接資源泄露
– 資源泄露
– Socket & Stream 泄露
併發數據訪問異常
– 變量非原子更新
– 雙重檢查鎖定
– 數據競態條件
– Volatile非原子更新
– Servlet 屬性無效鎖定
– 單例模式競態條件
程序假死
– 線程死鎖
– 死鎖
空指針引用
– Null檢查後引用空指針
– 直接引用返回的空指針
– Null檢查前引用空指針
API 使用錯誤
– 無效迭代器使用
– 不可修改的集合錯誤
– 已釋放資源調用
性能缺陷
– 低效率方法使用
– 在循環中鏈接字符串
– 冗餘同步
邏輯錯誤
– 不可達代碼
– 未使用變量
– 常量表達式
– 非本地資源不當使用
– 整數溢出
– 不當分號
類層次結構不一致
– 調用 super.clone() 或 supler.finalize()失敗
– 父函數調用丟失
– 構造函數中使用虛函數
控制流缺陷
– 在Finally模塊中返回
– Switch語句中break丟失
錯誤處理缺陷
– 未驗證的返回值
數據庫操做
– 不正確的實體哈希
– Load函數返回值錯誤驗證
– 不徹底持續週期
– get()不當使用
代碼可維護性缺陷
– 調用已過時方法
– 顯式垃圾收集
– 非靜態方法中設置靜態變量
– 複製/粘貼錯誤
– 不可達代碼
可疑代碼
– 參數次序錯誤
– 格式錯誤
資源泄露
– 數據庫鏈接資源泄露
– 資源泄露
– Socket & Stream 泄露
API 使用錯誤
– 已釋放資源調用
併發數據訪問異常
– 變量非原子更新
– 數據競態條件
性能缺陷
– 低效率方法使用
– 在循環中鏈接字符串
– 冗餘同步
程序假死
– 線程死鎖
– 死循環
可疑代碼
– 複製/粘貼錯誤
– 參數次序錯誤
– 格式錯誤
類層次結構不一致
– 調用 base.close() 或 base.dispose()失敗
– 父函數調用丟失
控制流缺陷
– 可疑的額外分號
– 不一致比較
– 不兼容的類型比較
空指針引用
– Null檢查後引用空指針
– 直接引用返回的空指針
– Null檢查前引用空指針
算術錯誤
– 錯誤移位操做
– 不正確的表達式
– 表達式計算過程當中溢出
資源泄露
• 內存泄露
• Microsoft COM 內存泄露
• Object資源泄露
• 不當delete
未初始化變量
• 返回語句丟失
• 未初始化的指針/標量/數組 讀寫
• 類或結構體中未初始化的數據成員
併發缺陷
• 死鎖
• 競態條件(Race conditions)
• 阻塞調用誤用
算術錯誤
• 負變量不當使用
• 異常符號擴展
• 整數溢出
• 除零異常
內存崩潰
• 內存訪問溢出
• 字符串長度計算錯誤
• 緩衝區溢出
• 寫指針溢出
• 負數組索引寫入
• 內存錯誤分配
• 錯誤的內存釋放
非法內存訪問
• 不正確的delete操做
• 溢出指針讀取
• 越界讀取
• 返回指針至本地變量
• 負數組索引讀取
• 已釋放指針讀/寫
• 不兼容的指針轉換
控制流缺陷
• 邏輯/結構死代碼
• Switch語句中break遺失
• 非本地資源不當使用
程序假死
• 死循環
• 雙重鎖或解鎖丟失
• 負循環邊界值
• 線程死鎖
• 持鎖過程當中調用sleep()
空指針引用
• Null檢查後引用空指針
• 直接引用返回的空指針
• Null檢查前引用空指針
錯誤處理缺陷
• 未驗證的返回值
• 未獲取異常
• 負變量不當使用
代碼維護性缺陷
• 多返回語句
• 無效變量
異常代碼
• 複製/粘貼錯誤
• 格式錯誤
不安全的數據處理
• 不可信的循環數據源
• 使用非可信數據源讀寫數組/指針
• 使用非可信數據源格式化字符串
性能缺陷
• 值傳遞大參數
• 使用大堆棧
安全措施違反
• 緩衝區溢出
• 固定長度緩衝區寫入
• 非安全函數調用
• 非安全臨時文件使用
• 檢查/使用時間不一致
• 用戶空間指針不當使用
API錯誤使用
• 非安全chroot調用
• 錯誤的迭代器使用
• printf() 參數不匹配
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
但願對您公司企業信息化IT架構與研發管理體系等有幫助。 其它您可能感興趣的文章:
移動應用App測試與質量管理一
全面的軟件測試
著名ERP廠商的SSO單點登陸解決方案介紹一
軟件項目風險管理介紹
企業項目化管理介紹
智能企業與信息化之一
由企業家基本素質想到的
敏捷軟件質量保證的方法與實踐
構建高效的研發與自動化運維
IT運維監控解決方案介紹
IT持續集成之質量管理
人才公司環境與企業文化
企業績效管理系統之平衡記分卡
企業文化、團隊文化與知識共享
高效能的團隊建設
餐飲連鎖公司IT信息化解決方案一
若有想了解更多軟件研發 , 系統 IT集成 , 企業信息化,項目管理,企業管理 等資訊,請關注個人微信訂閱號:
做者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。
該文章也同時發佈在個人獨立博客中-Petter Liu Blog。