Findsecbugs工作原理和配置(一)

admin 2022年2月26日14:53:19评论387 views字数 1945阅读6分29秒阅读模式

网上关于findsecbugs的文章少之又少,包括stackoverflow和google搜索的结果。

简单的来说,findsecbugs插件的原理就是污点跟踪技术。就是跟踪这个链,往里面丢污染的数据,然后在输出的地方查看是否有脏数据,有的话就是有漏洞,没有的话就是没漏洞,当然这还有一个特殊的情况,就是输入的地方非客户端传递来的,这样的情况就是有一定的误报率,程序也无法识别,这个就要靠你优化了。那么接下来就讲下这个东西怎么优化和使用。

Findsecbugs工作原理和配置(一)

整个流程应该是这样的。

 

1.在findsecbugs里有个客户端参数设置,在文件src/main/resources/taint-config/java-ee.txt里。在里面你可以看到大量的字节码,这些方法都是自带的或者其他框架的用于获取客户端参数的方法

Findsecbugs工作原理和配置(一)

这里每一条我们称之为sink,每条sink最后面是状态,状态氛围SAFETAINTED,简单的理解下就是这些方法,哪些是可以被黑客控制的,哪些不可以,比如getMethod就是只有post get 之类的,一般不会被修改,当然你要说起来这些方法也可以改,其实理论…上来说好像也是对的,但是一般情况下好像很少有协议的方法名注入之类的吧?

 

2.接下来讲一下sink是什么鬼。

例如一条sink是这样的sqli/MySqlWrapper.executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet;:0

那么sqli/MySqlWrapper.executeQuery是类的路径

.是分隔符

executeQuery是方法名

(Ljava/lang/String;)Ljava/sql/ResultSet;是方法的签名

:也是分隔符

0是参数的索引,这里要注意参数的索引是从后往前递增的,最后一个参数的索引是0

3.那么sink是如何产生的呢?sink其实可以用idea的字节码查看插件来,具体可以参考下这个帖子https://www.jianshu.com/p/b87f7e564c98

4.再来解释下safe-encoder,这个是安全的排除方法,也就是当程序运行的时候,如果进入了这个函数,那么就不会提示为漏洞

Findsecbugs工作原理和配置(一)

常见的过滤函数在find-sec-bugs/findsecbugs-plugin/src/main/resources/safe-encoders/others.txt文件中有大量的列出,我们来看一个案例:

java/net/URLEncoder.encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;:1|+URL_ENCODED,+XSS_SAFE
java/net/URLDecoder.decode(Ljava/lang/String;)Ljava/lang/String;:0|-URL_ENCODED,-XSS_SAFE

以上2个最后都有2个标签来表明这个方法是什么用途的,这个应该很好理解。

当然除了这2个标签以外,我看了下系统内置的标签还有很多,大家可以在自己编写规则的时候给自己定义的sink打上对应的标签。


XSS_SAFE,
SQL_INJECTION_SAFE,
COMMAND_INJECTION_SAFE,
LDAP_INJECTION_SAFE,
XPATH_INJECTION_SAFE,
HTTP_POLLUTION_SAFE,
CR_ENCODED,
LF_ENCODED,

QUOTE_ENCODED,
APOSTROPHE_ENCODED,
LT_ENCODED,
SENSITIVE_DATA,
CUSTOM_INJECTION_SAFE,
URL_ENCODED,
PATH_TRAVERSAL_SAFE,
REDIRECT_SAFE,
CREDIT_CARD_VARIABLE,
PASSWORD_VARIABLE,
HASH_VARIABLE;


 

5.常见的api。常用的用来处理代码逻辑的API ,比如说isSafe, isTainted, hasParameters之类的都可以在findsecbugs-plugin/src/main/java/com/h3xstream/findsecbugs/taintanalysis/taint.java中看到,在这里就不多说了,大家git clone一份慢慢看里面的方法就行了,注释写的也很清楚的。只是API介绍,官方的文档不是很多,看起来累,testcase里也没写清楚,只有自己去翻阅那些写好的插件才可以看懂(要几乎把全部的插件都看一遍才知道全部的API吧- -)

 

 


本文始发于微信公众号(xsser的博客):Findsecbugs工作原理和配置(一)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月26日14:53:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Findsecbugs工作原理和配置(一)https://cn-sec.com/archives/481926.html

发表评论

匿名网友 填写信息