IAST 配置檔
配置 JSON
檔案來覆寫預設 IAST 設定,並且只報告您想要知道的漏洞。
結構
配置檔是 user-config.json
,可以在代理程式啟動之前或執行時期進行部署。變更可能需要數秒才能生效。新增檔案時,會停用任何舊版。如果檔案遭到刪除,IAST 會變回其預設配置。
範例檔:
{
"logging": {
"logLevel": "ERROR",
"stdoutLogLevel": "DEBUG",
"maxSizeLogFileMB": 100
},
"monitoredApps": [
"app1", "app2"
],
"asoc": {
"reportToAsoc": true,
"asocPollingIntervalInSec": 10
},
"memoryThreshold": 0.85,
"ignoredMethods": [
"DriverManager.getConnection"
],
"ignoredNonSecureCookies": [
"myCookieName"
],
"ignoredNonHttpOnlyCookies": [
"anotherCookieName"
],
"securityRules": {
"CheckCsrf": false,
"CheckServerHeader": false,
"CheckXPoweredBy": false,
"CheckXAspNetVersion": false
},
"safeHeaders": ["MySafeHeader", "MyOtherSafeHeader"],
"safeCookies": ["MySafeCookie", "MyOtherSafeCookie"],
"hidePasswords": true
"hooks": [
{
"targets": [
"com.ibm.myApp.common.MyEscapeUtils"
],
"methods": [
"myEscapeHtml"
],
"parameters": [
["java.lang.String"]
],
"rules": [
{
"type": " sanitizer",
"from": "return",
"vulnerability": "CrossSiteScripting.Reflected"
}
],
"requiresSuperTypes": false
}
]
}
部署
透過 ASoC RESP API 或從本端檔案部署 IAST 代理程式。在這兩種情況下,您可以在 IAST 主動監視時進行更新,且更新將在幾秒內生效。
REST API
- 傳送要求
FileUpload
。回應包括FileId
: - 使用您收到的
FileId
來更新 IAST 代理程式。
本端檔案
透過將配置檔複製到伺服器上的目錄來部署配置檔。部署位置通常是伺服器暫時資料夾。last
將位置列印至 stout
。
範例:
選項(O)
日誌記載
可以透過配置檔來控制下列記載選項。
欄位 | Values | 說明: |
logLevel |
無、錯誤、警告、資訊、除錯、追蹤 預設值: DEBUG |
IAST 日誌檔的記載層次。 註: 將記載層次設為「追蹤」可能會對 IAST 代理程式效能造成負面影響。 |
stdOutLogLevel |
一、錯誤、警告、資訊、除錯、追蹤 預設值: INFO |
IAST 事件到 stdout .的記載層次。註: 將記載層次設為「資訊」以外的任何值,會對 IAST 代理程式效能產生負面影響。 |
maxSizeLogFileMB |
整數 預設值: 20 |
為了避免大型檔案,當 IAST 日誌檔達到預先定義的上限 (MB)時,會壓縮該日誌,並將新日誌儲存至新檔案。使用此欄位設定檔案大小上限。 |
通訊 ASoC
這些欄位會控制與 ASoC 的通訊。
欄位 | Values | 說明: |
reportToAsoc |
TRUE, FALSE 預設值: TRUE |
啟用或停用報告至 ASoC。 |
asocPollingIntervalInSec |
整數 預設值 10 |
定義 IAST 向 ASoC 報告偵測到問題的頻率(以秒為單位)。 註: 將間隔縮短到 10 秒內,可能會對與 ASoC 的網路通訊造成龐大額外負荷。增加間隔需要更高的記憶體用量,若在最新資料傳送至 ASoC 之前停止 IAST 代理程式,可能會導致資料流失。 |
一般
欄位 | Values | 說明: |
monitoredApp |
"monitoredApps": [ "app1", "app2"] 只會限制對這些應用程式的監控。 |
命名在伺服器上執行,且要由 IAST 監控的 Web 應用程式;其餘會受到忽略 。 如果未定義,伺服器上的所有應用程式都會受到監控。 應用程式名稱通常衍生自 |
memoryThreshold |
0.5 - 1.0 之間的任何值 預設值: 0.95 |
如果用戶端的 JVM 記憶體用量超過此臨界值,則 IAST 會自動將其本身停用以防止 OutOfMemoryError 。當記憶體用量低於臨界值時,IAST 會自動重新啟用其本身。 |
hidePasswords |
布林。預設值: 否 | 設為 True 時,使用者介面或報告中不會顯示密碼,但會以字串 **CONFIDENTIAL** 取代 |
過濾
依名稱空間過濾惡意探索
範例:
欄位 | Values | 說明: |
ignoredMethods |
字串陣列 預設值: None |
根據名稱空間來過濾漏洞攻擊問題(Cryptography.PoorEntrpy、Cryptography.InsecureAlgorithm 等)。 註: 這會從名稱空間排除所有問題。 |
如果要將這個問題和所有問題從
com.hcl.appscan.systemtests.SystemTests
過濾掉,則可以新增:"ignoredMethods": ["com.hcl.appscan.systemtests.SystemTests"]
忽略不安全 Cookie 的報告
範例:如果要過濾掉這個問題,則可以新增:
欄位 | Values | 說明: |
ignoredNonSecureCookies, ignoredNonHttpOnlyCookies |
字串陣列 預設值: None |
未設定安全屬性或設定 Cookie 的僅 HTTP 屬性時的 IAST 報告。若要過濾掉特定的 Cookie,請將 Cookie 名稱新增至配置檔。 |
"ignoredNonSecureCookies": ["myCookie"]
停用安全規則
範例:
"securityRules": {
"CheckCsrf": false,
"CheckServerHeader": false,
"CheckXPoweredBy": false,
"CheckXAspNetVersion": false
}
}
依預設,系統會啟用所有安全規則。透過配置檔,您可以停用部分報告類型。指定要停用的欄位,所有其他欄位將保持啟用狀態。
例如,
“CheckCsrf” : false
會停用此類型所有問題的報告。停用按標頭名稱或 Cookie 名稱的注入
範例:
欄位 | Values | 說明: |
safeHeaders, safeCookies |
字串陣列 預設值: None |
用標頭或 Cookie 的名稱將其宣告為安全。這會導致 IAST 停止追蹤來自此標頭或 Cookie 的輸入,因此不會報告來自此值的任何注入。
提示: HTTP 標頭名稱需區分大小寫。 |
下列「跨網站 Scripting」問題的來源是名為
input2
.的標頭。如果要過濾此輸入造成的所有問題,則可以新增:"safeHeaders": ["input2"]
連結鉤
在某些情況下,將連結鉤新增至 IAST,以新增測試中應用程式的行為會很有用。比方說,針對 IAST 無法辨識的專有消毒方法,可告知 IAST 清除每一個輸入此方法的字串。
註: IAST 不會知道此方法實際執行的動作,因此,使用者必須驗證消毒是否正確且足以滿足其安全需求。
範例 1:特定漏洞的消毒
下列配置會將
com.myApp.common.MyEscapeUtils
類別中的 myEscapeHtml
方法定義為跨網站 Scripting 的消毒器,而回覆值會遭到清除。如果回覆值的結尾為 SQL 接收槽,則其仍會報告。例如,"hooks": [
{
"targets": [
"com.myApp.common.MyEscapeUtils"
],
"methods": [
"myEscapeHtml"
],
"parameters": [
["java.lang.String"]
],
"rules": [
{
"type": "sanitizer",
"from": "return",
"vulnerability": "CrossSiteScripting.Reflected"
}
],
"requiresSuperTypes": false
}
]
範例 2:從所有漏洞消毒
下列配置會將
com.myApp.common.MyEscapeUtils
類別中的 myEscapeAll
方法定義為所有漏洞類型的消毒器,而回覆值會遭到清除。"hooks": [
{
"targets": [
"com.myApp.common.MyEscapeUtils"
],
"methods": [
"myEscapeAll"
],
"parameters": [
["java.lang.String"]
],
"rules": [
{
"type": " sanitizeAll",
"from": "return"
}
],
"requiresSuperTypes": false
}
]