編譯器安全測試
1. 編譯器如何危及應用程序的安全
對於編譯器如何將人類可讀的代碼翻譯成機器運行的機器碼,大多數程序員通常只有大概的概念。在編譯過程中,編譯器會對代碼進行優化,使其能高效的運行。有的時候,編譯器在優化上面走的太遠了,它甚至移除了本不應該移除的代碼,導致應用程序更加脆弱。
MIT人工智慧和計算機科學實驗室的四位研究人員調查了(PDF) 不穩定優化(optimization-unstable)代碼的問題——編譯器移除的包含未定義行為的代碼。所謂的未定義行為包括了除以0,空指針間接 引用和緩沖溢出等。在某些情況下,編譯器完整移除未定義行為代碼可能會導致程序出現安全弱點。
研究人員開發了一個靜態檢查器STACK去識別不穩定的 C/C++代碼,他們在足球平台出租測試的系統中發現上百個新bug:Linux內核發現32個bug,Mozilla發現3個,Postgres 9個和Python 5個。STACK掃描了Debian Wheezy軟體包倉庫8575個含有C/C++代碼的軟體包,發現其中3471個至少包含一個不穩定的代碼。研究人員認為這是一個非常普遍的問題。
2. 代碼測試工具Fortify最新版本介紹及實操
Fortify代碼測試工具是安全測試、代碼審計中的重要軟體測試工具,支持多種語言和組件級API,覆蓋多種SAST漏洞分類。最新發布的Fortify 22.1.0版本相較於之前版本,對操作系統、編譯器、構建工具、語言和框架進行了更新,並新增了對macOS 12、Windows 11、Clang 13.1.6、OpenJDK javac 17、Swiftc 5.6、cl (MSVC) 2015和2022、Gradle 7.4.x、MSBuild 14.0、17.0、17.1和17.2、Xcodebuild 13.3和13.3.1的支持。此版本還對C# 10、.NET 6.0、C/C++ 20、HCL 2.0、Java 17、TypeScript 4.4和4.5提供了支持,並改進了Visual Studio 2022、IntelliJ 2021.x的兼容性。
Fortify 22.1.0版本新增功能包括操作系統、編譯器、構建工具、語言和框架的更新,以及改進的兼容性。在最新版本中,你可以發現新增了對macOS 12、Windows 11、Clang 13.1.6、OpenJDK javac 17、Swiftc 5.6、cl (MSVC) 2015和2022、Gradle 7.4.x、MSBuild 14.0、17.0、17.1和17.2、Xcodebuild 13.3和13.3.1的支持。此外,此版本還支持C# 10、.NET 6.0、C/C++ 20、HCL 2.0、Java 17、TypeScript 4.4和4.5。
在實操方面,Fortify提供了多種方式供用戶進行代碼測試。例如,通過「Audit Workbench」進行測試,此工具支持Java語言源代碼的測試。用戶可以在主頁面選擇代碼測試語言類型,選擇被測試代碼所在目錄,選擇Java版本,進行代碼測試配置,運行代碼測試,查看代碼測試結果。同時,用戶還可以通過「Tools-Reports」生成測試報告,選擇報告模板,生成BIRT報告或Legacy報告。
除了通過「Audit Workbench」進行測試,Fortify還支持通過「Scan Wizard」和命令行進行測試。通過命令行方式,用戶可以對各語言源代碼進行測試。在後續的文章中,將詳細介紹這兩種測試方式的詳細操作步驟。
在Fortify 22.1.0版本中,新增了多項功能和改進,使得用戶可以更方便地進行代碼測試和安全測試。同時,Fortify還提供了多種方式供用戶進行測試,包括「Audit Workbench」、「Scan Wizard」和命令行方式,為用戶提供更靈活的選擇。
以上內容介紹了Fortify代碼測試工具最新版本的一些新功能和實操方式。了解更多內容,請查看相關鏈接。同時,@道普雲將持續輸出軟體測試技術、軟體測試團隊建設、軟體測評實驗室認可等內容,歡迎交流探討。
3. C語言中編譯 生成 調試 測試 運行各是什麼意思有什麼區別
C語言中的編譯、生成、調試、測試和運行各自代表不同的階段和活動,具體如下:
1. 編譯:編譯是將C語言源代碼轉換為目標代碼的過程。在Visual C++(VC)中,編譯階段會將源代碼(.c文件)轉換成目標文件(.obj文件),這個過程稱為編譯。編譯器檢查源代碼的語法錯誤,並生成可以被計算機執行的中間代碼。
2. 生成:生成通常指的是構建過程,這個階段會使用鏈接器將編譯後的目標文件與其他庫文件鏈接起來,形成一個可執行的程序。在VC中,生成階段會創建PE(Portable Executable)格式的文件,如.exe可執行文件或.dll動態鏈接庫。
3. 調試:調試是在程序運行時對程序進行的一系列檢查和測試活動,旨在發現並修復程序中的錯誤。調試通常在IDE的調試器中進行,開發者可以單步執行代碼,觀察變數值,並找出代碼中的問題。
4. 測試:測試是驗證程序功能是否符合預期設計的階段。它包括多種類型的測試,如單元測試、集成測試和系統測試。測試旨在確保程序的每個部分都能正確工作,並且整個系統滿足預定的需求。
5. 運行:運行是指程序在計算機上實際執行的過程。在編譯和鏈接後,可執行文件會被載入到內存中,並由操作系統執行,這時程序開始運行,執行其預定功能。
總結來說,C語言程序的開發過程中,編譯是將源代碼轉換為目標代碼,生成是創建最終可執行程序,調試是找出並修復錯誤,測試是驗證程序的正確性,而運行是程序執行的階段。這些階段共同確保了程序從設計到最終使用的完整性。