iast-java-engine-evaluation.md
May 9, 2024 · View on GitHub
Java IAST引擎能力评价体系
graph LR L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H1["完整度"] L2H1["完整度"]==>L3H1["基础跟踪能力"] L3H1["基础跟踪能力"]==>L4H1["污点对象完整度"] L4H1["污点对象完整度"]==>L5H1["字符串对象"] L5H1["字符串对象"]==>aTaintCase00901["String"] L4H1["污点对象完整度"]==>L5H2["基本数据类型及其封装类型"] L5H2["基本数据类型及其封装类型"]==>aTaintCase001["int"] L5H2["基本数据类型及其封装类型"]==>aTaintCase002["char"] L5H2["基本数据类型及其封装类型"]==>aTaintCase003["byte"] L5H2["基本数据类型及其封装类型"]==>aTaintCase004["long"] L5H2["基本数据类型及其封装类型"]==>aTaintCase009["Byte"] L5H2["基本数据类型及其封装类型"]==>aTaintCase0010["Integer"] L5H2["基本数据类型及其封装类型"]==>aTaintCase0011["Long"] L5H2["基本数据类型及其封装类型"]==>aTaintCase0012["Character"] L4H1["污点对象完整度"]==>L5H6["集合(集合对象全为污点)"] L5H6["集合(集合对象全为污点)"]==>aTaintCase005["Map元素"] L5H6["集合(集合对象全为污点)"]==>aTaintCase006["List元素"] L5H6["集合(集合对象全为污点)"]==>aTaintCase007["Queue元素"] L5H6["集合(集合对象全为污点)"]==>aTaintCase008["Set元素"] L4H1["污点对象完整度"]==>L5H14["数组(数组对象全为污点)"] L5H14["数组(数组对象全为污点)"]==>aTaintCase0013["数组对象String[]"] L5H14["数组(数组对象全为污点)"]==>aTaintCase0014["数组对象char[]"] L5H14["数组(数组对象全为污点)"]==>aTaintCase0015["数组对象byte[]"] L5H14["数组(数组对象全为污点)"]==>aTaintCase0016["单维数组对象的元素"] L5H14["数组(数组对象全为污点)"]==>aTaintCase00926["多维数组对象的元素"] L4H1["污点对象完整度"]==>L5H19["自定义对象"] L5H19["自定义对象"]==>L6H19["对象字段"] L6H19["对象字段"]==>L7H19["单层字段"] L7H19["单层字段"]==>aTaintCase00921["10"] L7H19["单层字段"]==>aTaintCase00922["100"] L6H19["对象字段"]==>L7H21["多层字段"] L7H21["多层字段"]==>aTaintCase00923["3层"] L7H21["多层字段"]==>aTaintCase00924["10层"] L6H19["对象字段"]==>aTaintCase00925["污点为父类字段"] L3H1["基础跟踪能力"]==>L4H24["污点链路完整度"] L4H24["污点链路完整度"]==>L5H24["特殊链路跟踪能力"] L5H24["特殊链路跟踪能力"]==>aTaintCase0022["三方包方法跟踪"] L5H24["特殊链路跟踪能力"]==>L6H25["超长链路追踪"] L6H25["超长链路追踪"]==>aTaintCase0023["100层"] L6H25["超长链路追踪"]==>aTaintCase00931["1000层"] L5H24["特殊链路跟踪能力"]==>aTaintCase0024["反射调用方法跟踪"] L5H24["特殊链路跟踪能力"]==>aTaintCase0025["调用native方法"] L4H24["污点链路完整度"]==>L5H29["污点来源识别能力(source)"] L5H29["污点来源识别能力(source)"]==>aTaintCase0027["污点来自http getQueryString"] L5H29["污点来源识别能力(source)"]==>L6H30["污点来自http body"] L6H30["污点来自http body"]==>aTaintCase0033["json/RequestBody"] L6H30["污点来自http body"]==>aTaintCase0034["xml/getInputStream"] L6H30["污点来自http body"]==>L7H32["multipart/form-data"] L7H32["multipart/form-data"]==>aTaintCase0035["getPart"] L7H32["multipart/form-data"]==>aTaintCase0036["getParts"] L6H30["污点来自http body"]==>L7H34["form/url-encode"] L7H34["form/url-encode"]==>aTaintCase0037["getParameter"] L7H34["form/url-encode"]==>aTaintCase0038["getParameterMap"] L7H34["form/url-encode"]==>aTaintCase0039["getParameterValues"] L7H34["form/url-encode"]==>aTaintCase0040["getParameterNames"] L6H30["污点来自http body"]==>aTaintCase0041["getReader"] L5H29["污点来源识别能力(source)"]==>aTaintCase0044["污点来自http pathVarlables"] L5H29["污点来源识别能力(source)"]==>L6H40["污点来自http header"] L6H40["污点来自http header"]==>aTaintCase0045["getCookies"] L6H40["污点来自http header"]==>aTaintCase0046["getHeader"] L6H40["污点来自http header"]==>aTaintCase00139["getHeaderNames"] L6H40["污点来自http header"]==>aTaintCase0047["getHeaders"] L4H24["污点链路完整度"]==>L5H44["污点传播跟踪能力"] L5H44["污点传播跟踪能力"]==>L6H45["--"] L6H45["--"]==>L6H46["--"] L6H46["--"]==>L6H44["传播场景"] L6H44["传播场景"]==>L7H44["String操作"] L7H44["String操作"]==>L8H44["构造方法"] L8H44["构造方法"]==>aTaintCase0062["String(String original)"] L8H44["构造方法"]==>aTaintCase00143["String(char value[])"] L8H44["构造方法"]==>aTaintCase00144["String(char value[], int offset, int count)"] L8H44["构造方法"]==>aTaintCase00145["String(int[] codePoints, int offset, int count)"] L8H44["构造方法"]==>aTaintCase00146["String(byte bytes[], int offset, int length, String charsetName)"] L8H44["构造方法"]==>aTaintCase00147["String(byte bytes[], int offset, int length, Charset charset)"] L8H44["构造方法"]==>aTaintCase00148["String(StringBuffer buffer)"] L8H44["构造方法"]==>aTaintCase00149["String(StringBuilder builder)"] L7H44["String操作"]==>aTaintCase0063["conact"] L7H44["String操作"]==>aTaintCase0064["copyValueOf"] L7H44["String操作"]==>aTaintCase0065["format"] L7H44["String操作"]==>aTaintCase0066["getBytes"] L7H44["String操作"]==>aTaintCase0067["getChars"] L7H44["String操作"]==>aTaintCase0068["intern"] L7H44["String操作"]==>aTaintCase0069["join"] L7H44["String操作"]==>aTaintCase0071["replace"] L7H44["String操作"]==>aTaintCase00140["replaceAll"] L7H44["String操作"]==>aTaintCase0072["split"] L7H44["String操作"]==>aTaintCase0074["subSequence"] L7H44["String操作"]==>aTaintCase0075["substring"] L7H44["String操作"]==>aTaintCase0076["toCharArray"] L7H44["String操作"]==>aTaintCase0078["toString"] L7H44["String操作"]==>aTaintCase0077["toLowerCase"] L7H44["String操作"]==>aTaintCase0079["toUpperCase"] L7H44["String操作"]==>aTaintCase0080["trim"] L7H44["String操作"]==>aTaintCase0081["valueOf"] L6H44["传播场景"]==>L7H70["StringBuilder操作"] L7H70["StringBuilder操作"]==>aTaintCase0082["构造方法"] L7H70["StringBuilder操作"]==>aTaintCase0083["append"] L7H70["StringBuilder操作"]==>aTaintCase0086["deleteCharAt"] L7H70["StringBuilder操作"]==>aTaintCase0085["delete"] L7H70["StringBuilder操作"]==>aTaintCase0087["getChars"] L7H70["StringBuilder操作"]==>aTaintCase0088["insert"] L7H70["StringBuilder操作"]==>aTaintCase0089["replace"] L7H70["StringBuilder操作"]==>aTaintCase0090["subSequence"] L7H70["StringBuilder操作"]==>aTaintCase0091["subString"] L7H70["StringBuilder操作"]==>aTaintCase0092["toString"] L6H44["传播场景"]==>L7H80["char[],byte[]操作"] L7H80["char[],byte[]操作"]==>aTaintCase0093["copyOf"] L7H80["char[],byte[]操作"]==>aTaintCase0094["copyOfRange"] L7H80["char[],byte[]操作"]==>aTaintCase0095["deepToString"] L7H80["char[],byte[]操作"]==>aTaintCase0096["toString"] L6H44["传播场景"]==>aTaintCase00932["JDK序列化与反序列化"] L4H24["污点链路完整度"]==>L5H85["污点无害化处理能力(sanitizer)"] L5H85["污点无害化处理能力(sanitizer)"]==>aTaintCase00141["污点直接赋值为硬编码值"] L5H85["污点无害化处理能力(sanitizer)"]==>aTaintCase00103["sanitizer支持区分类型"] L5H85["污点无害化处理能力(sanitizer)"]==>aTaintCase00104["触发sink后再执行sanitizer"] L5H85["污点无害化处理能力(sanitizer)"]==>aTaintCase00105["支持自定义unSanitizer(再次污点化)"] L4H24["污点链路完整度"]==>L5H89["触发污点跟踪能力(sink)"] L5H89["触发污点跟踪能力(sink)"]==>aTaintCase00109["单污点来源传播至多sink点"] L5H89["触发污点跟踪能力(sink)"]==>aTaintCase00110["多污点来源传播至单sink点"] L5H89["触发污点跟踪能力(sink)"]==>aTaintCase00112["无污点传播过程,污点直接传入sink"] L2H1["完整度"]==>L3H92["异步跟踪能力"] L3H92["异步跟踪能力"]==>L4H92["存储型异步"] L4H92["存储型异步"]==>aTaintCase00113["污点通过db存储后触发"] L4H92["存储型异步"]==>aTaintCase00114["污点通过session存储后触发"] L4H92["存储型异步"]==>L5H94["污点通过缓存存储后触发"] L5H94["污点通过缓存存储后触发"]==>aTaintCase00115["本地缓存"] L5H94["污点通过缓存存储后触发"]==>aTaintCase00138["非本地缓存"] L4H92["存储型异步"]==>L5H96["污点通过文件存储后触发"] L5H96["污点通过文件存储后触发"]==>aTaintCase00116["本地文件"] L3H92["异步跟踪能力"]==>L4H97["多线程异步"] L4H97["多线程异步"]==>aTaintCase00119["污点的来源和触发在不同线程"] L4H97["多线程异步"]==>aTaintCase00120["污点的来源和触发在不同线程,sink的触发由线程池中的线程触发"] L2H1["完整度"]==>L3H99["跨进程跟踪能力"] L3H99["跨进程跟踪能力"]==>L4H99["调用方式"] L4H99["调用方式"]==>L5H99["http"] L5H99["http"]==>aTaintCase00123["跨一层进程调用"] L5H99["http"]==>aTaintCase00124["跨多层进程调用"] L4H99["调用方式"]==>L5H101["rpc(至少支持一种框架:Sofa/SpringCloud/Dubbo/gRpc/HSF)"] L5H101["rpc(至少支持一种框架:Sofa/SpringCloud/Dubbo/gRpc/HSF)"]==>aTaintCase001241["跨一层进程间调用(暂无实现)"] L5H101["rpc(至少支持一种框架:Sofa/SpringCloud/Dubbo/gRpc/HSF)"]==>aTaintCase001242["跨多层进程间调用(暂无实现)"] L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H103["准确度"] L2H103["准确度"]==>L3H103["污点对象跟踪粒度"] L3H103["污点对象跟踪粒度"]==>L4H103["变量级别"] L4H103["变量级别"]==>aTaintCase00125["sink点的值非外部可控,但与某个参数值相同"] L3H103["污点对象跟踪粒度"]==>L4H104["字段/元素级别"] L4H104["字段/元素级别"]==>L5H104["部分字段对象为污点"] L5H104["部分字段对象为污点"]==>aTaintCase00126["单层简单对象部分字段为污点"] L5H104["部分字段对象为污点"]==>L6H105["多层复杂对象部分字段为污点"] L6H105["多层复杂对象部分字段为污点"]==>aTaintCase00127["污点来自父类"] L6H105["多层复杂对象部分字段为污点"]==>aTaintCase00128["污点来当前类字段"] L5H104["部分字段对象为污点"]==>aTaintCase00142["对象部分字段为污点,经过JDK序列化后再反序列化"] L4H104["字段/元素级别"]==>L5H107["部分数据元素为污点"] L5H107["部分数据元素为污点"]==>aTaintCase00129["单维数组中的部分元素为污点"] L5H107["部分数据元素为污点"]==>aTaintCase00130["多维数组中的部分元素为污点"] L5H107["部分数据元素为污点"]==>aTaintCase00131["部分元素为污点,经过JDK序列化后再反序列化"] L4H104["字段/元素级别"]==>L5H110["部分集合元素为污点"] L5H110["部分集合元素为污点"]==>aTaintCase00132["List中部分元素为污点"] L5H110["部分集合元素为污点"]==>aTaintCase00133["Map中部分元素为污点"] L5H110["部分集合元素为污点"]==>aTaintCase00134["Set中部分元素为污点"] L5H110["部分集合元素为污点"]==>aTaintCase00135["Queue中部分元素为污点"] L5H110["部分集合元素为污点"]==>aTaintCase00136["集合中部分元素为污点,经过JDK序列化后再反序列化"] L3H103["污点对象跟踪粒度"]==>L4H115["字符串级别"] L4H115["字符串级别"]==>L5H115["字符串部分存在污点"] L5H115["字符串部分存在污点"]==>L6H115["截取非污点部分"] L6H115["截取非污点部分"]==>L7H115["String操作"] L7H115["String操作"]==>aTaintCase00940["replcace"] L7H115["String操作"]==>aTaintCase00941["replcaceAll"] L7H115["String操作"]==>aTaintCase00942["split"] L7H115["String操作"]==>aTaintCase00943["subSequence"] L7H115["String操作"]==>aTaintCase00944["substring"] L7H115["String操作"]==>aTaintCase00945["trim"] L6H115["截取非污点部分"]==>L7H121["StringBuilder操作"] L7H121["StringBuilder操作"]==>aTaintCase00946["delete"] L7H121["StringBuilder操作"]==>aTaintCase00947["deleteCharAt"] L7H121["StringBuilder操作"]==>aTaintCase00948["getChars"] L7H121["StringBuilder操作"]==>aTaintCase00949["replace"] L7H121["StringBuilder操作"]==>aTaintCase00950["subSequence"] L7H121["StringBuilder操作"]==>aTaintCase00951["substring"] L6H115["截取非污点部分"]==>L7H127["char[]/byte[]操作"] L7H127["char[]/byte[]操作"]==>aTaintCase00952["copyOfRange"] L5H115["字符串部分存在污点"]==>L6H128["截取非污点部分后再拼接污点"] L6H128["截取非污点部分后再拼接污点"]==>L7H128["String操作"] L7H128["String操作"]==>aTaintCase00953["concat"] L7H128["String操作"]==>aTaintCase00954["join"] L7H128["String操作"]==>aTaintCase00955["replace"] L7H128["String操作"]==>aTaintCase00956["replaceAll"] L7H128["String操作"]==>aTaintCase00957["trim"] L6H128["截取非污点部分后再拼接污点"]==>L7H133["StringBuilder操作"] L7H133["StringBuilder操作"]==>aTaintCase00958["append"] L7H133["StringBuilder操作"]==>aTaintCase00959["replace"] L6H128["截取非污点部分后再拼接污点"]==>L7H135["char[]/byte[]操作"] L7H135["char[]/byte[]操作"]==>aTaintCase00960["copyOfRange"] L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H137["兼容性/JDK兼容性"] L2H137["兼容性/JDK兼容性"]==>L3H138["Oracle JDK"] L3H138["Oracle JDK"]==>L4H139["JDK 1.4 以下"] L3H138["Oracle JDK"]==>L4H141["JDK 1.5"] L3H138["Oracle JDK"]==>L4H142["JDK 1.6 以上"] L2H137["兼容性/JDK兼容性"]==>L3H143["OpenJDK"] L3H143["OpenJDK"]==>L3H144["JDK 1.4 以下"] L3H143["OpenJDK"]==>L3H145["JDK 1.5"] L3H143["OpenJDK"]==>L3H146["JDK 1.6 以上"] L2H137["兼容性/JDK兼容性"]==>L3H147["JRocket"] L2H137["兼容性/JDK兼容性"]==>L3H148["IBM J9"] L2H137["兼容性/JDK兼容性"]==>L3H149["AdoptOpen JDK"] L2H137["兼容性/JDK兼容性"]==>L3H150["Amazon Corretto"] L2H137["兼容性/JDK兼容性"]==>L3H151["Eclipse OpenJ9"] L2H137["兼容性/JDK兼容性"]==>L3H152["Red Hat Open JDK"] L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H153["性能"] L2H153["性能"]==>L3H154["无漏洞场景"] L3H154["无漏洞场景"]==>L3H155["内存占用"] L3H154["无漏洞场景"]==>L3H156["CPU占用"] L3H154["无漏洞场景"]==>L3H157["RT时长增幅"] L3H154["无漏洞场景"]==>L3H158["load"] L2H153["性能"]==>L3H159["有漏洞场景"] L2H153["性能"]==>L3H160["超长调用链路有漏洞场景"] L2H153["性能"]==>L3H161["超长调用链路无漏洞场景"] L2H153["性能"]==>L3H162["大污点对象场景"] L1H1["IAST引擎能力评估体系(JAVA)"]==>L2H163["接入成本"] L2H163["接入成本"]==>L3H164["离线插桩-需被测程序使用插桩后的jdk"] L2H163["接入成本"]==>L3H165["离线插桩-被测程序全部字节码静态插桩后使用"] L2H163["接入成本"]==>L3H166["动态运行时插桩-需被测程序修改配置"]