﻿# 介紹好用工具：CAT.NET (靜態程式碼安全檢測工具)

市場上已經有許多類似的[靜態程式碼分析](http://en.wikipedia.org/wiki/Static_code_analysis)軟體商業軟體，在這一期的 iThome 雜誌(第 405 期)就有介紹好幾套程式碼安全檢測軟體，像我就親自領教過[阿碼科技](https://web.archive.org/web/20060821201158/http://www.armorize.com/)的 [CodeSecure™](https://web.archive.org/web/20090715213930/http://www.armorize.com/?link_id=codesecure) 以及 [Fortify](http://www.fortify.com/) 的 [Source Code Analyzer](https://www.microfocus.com/documentation/fortify-static-code-analyzer-and-tools/) 的威力，誤判是難免，但專業度倒是沒話說，對軟體品質與安全性絕對可大幅提昇。雖然這類商業軟體都所費不貲，微軟為了拯救龐大的開發人員，也不落人後推出了一套 [Microsoft Code Analysis Tool .NET (CAT.NET)](https://web.archive.org/web/20100902075311/http://www.microsoft.com/downloads/details.aspx?FamilyId=0178e2ef-9da8-445e-9348-c93f24cc9f9d&displaylang=en) 工具。

目前 CAT.NET 工具還處於 CTP 階段，而且也發展一段時間了，在之前的 CTP 版有許多問題，常常在 Visual Studio 中執行到一半就會掛掉，所以一直不敢推薦，但最近出的 [v1.1.1.9](http://blogs.msdn.com/securitytools/archive/2009/06/27/new-build-of-cat-net-version-1-1-1-9-please-upgrade.aspx) 就穩定非常多了，建議各位大內高手可以放手一試。

Microsoft Code Analysis Tool .NET (CAT.NET) 是一套還算不錯的 .NET 靜態程式碼安全檢測工具 (有比沒有好)，分析方式似乎跟 [Fortify](http://www.fortify.com/) 的 [Source Code Analyzer](https://www.microfocus.com/documentation/fortify-static-code-analyzer-and-tools/) 分析方式有點像，他可以直接分析二位元的 .NET 組件，並可協助找出在組件中潛在的安全性漏洞，例如：Cross-Site Scripting (XSS), SQL Injection, XPath Injection, File Canonicalization, … 等知名且常見的漏洞，目前僅支援 8 條規則而已，但規則都是以 XML 定義，很容易擴充 (如果你看的懂得話)。

使用 CAT.NET 有 2 種方式：

**1\. 直接從 Visual Studio 中開啟 CAT.NET Code Analysis 工具 ( 包括 VS2005 與 VS2008 )**

先用 Visual Studio 開啟開發中的專案，然後從選單 Tools –> CAT.NET Code Analysis 開啟工具視窗

![先用 Visual Studio 開啟開發中的專案，然後從選單 Tools –> CAT.NET Code Analysis 開啟工具視窗](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4a249e8f4bdbc44fa532-image_3.png "先用 Visual Studio 開啟開發中的專案，然後從選單 Tools –> CAT.NET Code Analysis 開啟工具視窗")

也不用多說些什麼，體驗威力時“**Play**”鍵熊熊給他按下去就對了：

![CAT.NET Code Analysis](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8732e71be46dae52db07-image_6.png "CAT.NET Code Analysis")

若要進行進階設定，可以按下如下圖那一排工具列，可以讓你挑選要套用哪些規則、要掃瞄專案中哪些組件、…等等。

![CAT.NET Code Analysis - Settings](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/3fbcaf755f7fa94b4c6c-image_9.png "CAT.NET Code Analysis - Settings")

掃瞄時間依據專案大小而定，通常都會掃瞄一段時間，Visual Studio 感覺會像當掉了一樣「白白的一片」，總之要有點耐性。若 Visual Studio 執行到一半掛掉，那是 CTP 的關係，沒有人會負責的。

如果專案太大，且每次 Visual Studio 都會掛掉的話，建議用第二種方式進行檢測。

**2\. 直接在「命令提示字元」下執行****掃瞄工具**

先進入組件所在目錄，然後執行如下的指令：

```
C:\WebSite\bin>"c:\Program Files\Microsoft\CAT.NET\CATNetCmd.exe" /file:WebSite.dll
Microsoft (R) Code Analysis Tool for .NET (CAT.NET) Version 1.1.1.9
Copyright (C) Microsoft Corporation.  All rights reserved.

Running in 32-bit mode

2009/7/2 下午 04:16:23:Info : Starting analysis [1 modules]
2009/7/2 下午 04:16:23:Info : Analyzing module WebSite...
2009/7/2 下午 04:16:35:Info : 2 Exception Information issues found.
2009/7/2 下午 04:16:37:Info : Analysis completed.
```

如上範例，你可以發現有兩個 Issue 被找到，而且是跟 “Exception Information”有關。

執行完之後，會在同目錄下看到兩個新增的檔案：

![其中 MicrosoftACECodeAnalysisReport.xml 是完整的分析報告，以 XML 方式儲存。另一個是 report.html 是給人看的，裡面有問題描述、出現問題的程式行號、以及建議的解決之道。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ff459cfdb49d017166ae-image_12.png "其中 MicrosoftACECodeAnalysisReport.xml 是完整的分析報告，以 XML 方式儲存。另一個是 report.html 是給人看的，裡面有問題描述、出現問題的程式行號、以及建議的解決之道。")

其中 **MicrosoftACECodeAnalysisReport.xml** 是完整的分析報告，以 XML 方式儲存。另一個是 **report.html** 是給人看的，裡面有問題描述、出現問題的程式行號以及建議的解決之道。

![Code Analysis Report](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/762c2becb583a9f91584-image_15.png "Code Analysis Report")

除了以上兩種方式外，事實上還可以跟 [FxCop](http://msdn.microsoft.com/en-us/library/bb429476\(VS.80\).aspx) 與 MSBuild Task 結合，讓開發流程中導入 CAT.NET 成為標準化流程中的一環，建議可參考以下文章：[Running CAT.NET as a Custom MSBuild Task](http://blogs.msdn.com/securitytools/archive/2009/06/01/running-cat-net-as-a-custom-msbuild-task.aspx)

我個人是很期待正式版的推出 (也許是 V2.0 才會出正式版)，不過我想應該還要等一段時間，畢竟資安工具是馬虎不得的，即便如此也並不代表這套工具不能用，事實上從微軟部落格得知，微軟內部也是用這套來掃瞄他們開發的軟體，所以建議各位可以一試。

**相關連結**

-   Microsoft Code Analysis Tool .NET (CAT.NET) v1 CTP - 32 bit \[直接下載\]
-   [Microsoft Code Analysis Tool .NET (CAT.NET) v1 CTP - 64 bit](https://web.archive.org/web/20200807060854/https://download.microsoft.com/download/C/F/5/CF53ABCD-DFFD-4C70-B42C-279A4362EFD4/CATNETx64CTP.exe) \[直接下載\]
-   [Microsoft Code Analysis Tool .NET (CAT.NET) v1 CTP - 程式碼分析工具](https://dotblogs.com.tw/chhuang/2009/03/23/7650)
-   [Microsoft | Information Security Tools Team Blog](http://blogs.msdn.com/securitytools/)
-   [Static code analysis - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/Static_code_analysis)
-   [List of tools for static code analysis - Wikipedia, the free encyclopedia](http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis)
-   [Free MSDN Webcast: Managing Cross-Site Scripting Using CAT.NET and AntiXSS (Level 200)](http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032398771&EventCategory=4&culture=en-US&CountryCode=US)
-   [CAT.NET 討論區](http://social.msdn.microsoft.com/Forums/en-US/catnet/threads/)
