IAST 配置文件
配置 JSON
文件以覆盖缺省 IAST 设置,并仅报告您希望了解的漏洞。
Structure
配置文件为 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
。
示例:
选项
日志记录
可以通过配置文件控制以下日志记录选项。
字段 | 值 | 描述 |
logLevel |
NONE、ERROR、WARNING、INFO、DEBUG 和 TRACE 缺省值:调试版 |
IAST 日志文件的日志记录级别。 注: 将日志级别设置为 TRACE 会对 IAST 代理性能产生负面影响。 |
stdOutLogLevel |
ONE、ERROR、WARNING、INFO、DEBUG、TRACE 缺省值:信息 |
要进行 stdout 的 IAST 事件的日志记录级别。注: 将日志级别设置为 INFO 外的任何值都将对 IAST 代理程序性能产生负面影响。 |
maxSizeLogFileMB |
整型 缺省值:20 |
要避免生成大型文件,当 IAST 日志文件达到预定义的最大值(以 MB 为单位)时,会压缩该文件,并且新日志将保存到一个新文件中。使用此字段设置最大文件大小。 |
与以下项的通信: ASoC
这些字段控制与 ASoC 的通信。
字段 | 值 | 描述 |
reportToAsoc |
TRUE、FALSE 缺省值:True |
启用或禁用向 ASoC 报告。 |
asocPollingIntervalInSec |
整型 缺省值为 10 |
定义 IAST 向 ASoC 报告所检测到的问题的频率(以秒为单位)。 注: 将间隔缩短到 10 秒以下会给与 ASoC 的网络通信带来巨大开销。增加间隔需要更高的内存使用率,如果在将最新数据发送到 ASoC 之前停止 IAST 代理程序,则可能会导致数据丢失。 |
常规
字段 | 值 | 描述 |
monitoredApp |
"monitoredApps": [ "app1", "app2"] 将仅监控这些应用程序。 |
命名在服务器上运行的要由 IAST 监控的 Web 应用程序;将忽略其他 Web 应用程序 。 如果未定义,将监控服务器上的所有应用程序。 应用程序名称通常是从 |
memoryThreshold |
0.5 到 1.0 之间的任何值 缺省值:0.95 |
如果客户机的 JVM 内存使用率超过此阈值,IAST 将自动禁用自身以防止发生 OutOfMemoryError 。当内存使用率减少到低于此阈值时,IAST 将自动再次启用自身。 |
hidePasswords |
布尔值。缺省值:False | 设置为 True 时,密码不会显示在用户界面或报告中,而是被替换为字符串 **CONFIDENTIAL** |
正在过滤
按名称空间过滤漏洞利用
示例:
字段 | 值 | 描述 |
ignoredMethods |
字符串阵列 缺省值:None |
根据名称空间过滤掉漏洞利用问题(Cryptography.PoorEntrpy、Cryptography.InsecureAlgorithm 等)。 注: 这将排除名称空间中的所有问题。 |
要过滤掉此问题以及
com.hcl.appscan.systemtests.SystemTests
的所有问题,请添加:"ignoredMethods": ["com.hcl.appscan.systemtests.SystemTests"]
忽略有关不安全 Cookie 的报告
示例:要过滤掉出此问题,请添加:
字段 | 值 | 描述 |
ignoredNonSecureCookies, ignoredNonHttpOnlyCookies |
字符串阵列 缺省值:None |
当未设置安全属性或设置了 Cookie 的 http-only 属性时,IAST 将报告。要过滤掉特定 Cookie,应将此 Cookie 名称添加到配置文件中。 |
"ignoredNonSecureCookies": ["myCookie"]
禁用安全规则
示例:
"securityRules": {
"CheckCsrf": false,
"CheckServerHeader": false,
"CheckXPoweredBy": false,
"CheckXAspNetVersion": false
}
}
缺省情况下,将启用所有安全规则。通过配置文件,您可以禁用某些报告类型。仅指定要禁用的字段,所有其他字段将保持启用状态。
例如,
“CheckCsrf” : false
将禁用此类型的所有问题的报告。按标头名称或 Cookie 名称禁用注入
示例:
字段 | 值 | 描述 |
safeHeaders, safeCookies |
字符串阵列 缺省值:None |
按其名称将标头或 Cookie 值声明为安全值。这会导致 IAST 停止跟踪来自此标头或 Cookie 的输入,因此将不会报告来自此值的任何注入。
提示: HTTP 标题名称区分大小写。 |
以下跨站点脚本编制问题的来源是一个名为
input2
的标头。要过滤此输入导致的所有问题,请添加:"safeHeaders": ["input2"]
钩
在某些情况下,向 IAST 添加钩可能很有用,从而添加被测试应用程序的行为。例如,对于无法被 IAST 识别的专用清理方法,则告知 IAST 清除输入此方法的每一个字符串。
注: IAST 将不知道该方法实际会执行什么操作,因此用户应验证清理程序是否正确且足以满足其安全需求。
示例 1:针对特定漏洞进行清理
以下配置将
com.myApp.common.MyEscapeUtils
类中的方法 myEscapeHtml
定义为一个用于跨站点脚本编制的清理器,并且将清理返回值。它仍会报告返回值是否以 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
}
]