TideFinger – 指纹识别小工具

  • 发表于
  • 安全工具

TideFinger介绍

TideFinger,一个开源的指纹识别小工具,使用了传统和现代检测技术相结合的指纹检测方法,让指纹检测更快捷、准确。通过分析web指纹的检测对象、检测方法、检测原理及常用工具,设计了一个简易的指纹搜集脚本来协助发现新指纹,并提取了多个开源指纹识别工具的规则库并进行了规则重组,开发了一个简单快捷的指纹识别小工具TideFinger

通过对各种识别对象、识别方法、识别工具的分析,发现大家的指纹库各式各样,识别方式也是各有千秋,传统的md5、url路径的方式居多,识别header信息的也是不少,但没有一个能集众家之长的小工具和指纹库。

于是我们参考了webfinger和whatcms的部分代码并进行了整合优化,做了一个小工具TideFinger。

https://github.com/TideSec/TideFinger

我们把指纹识别相关的一些原理、工具汇总成了一篇文章,详见《Web指纹识别技术研究与优化实现》

TideFinger安装

安装python2依赖库

执行脚本

TideFinger - 指纹识别小工具

指纹识别技术原理及实现

指纹库整理

我们搜集了大量的开源指纹识别工具,从中提取了指纹库,进行了统一的格式化处理并进行去重,最终得到了一个大约2078条的传统指纹库。本来想把fofa的库也合并进来,发现格式差异有些大,便保持了fofa指纹库,并把WebEye的部分指纹和fofa指纹进行了合并。这样就保留了两个指纹库,其中cms指纹库为传统的md5、url库,大约2078条指纹,可通过关键字、md5、正则进行匹配,fofa库为2119指纹,主要对Header、url信息进行匹配。

TideFinger - 指纹识别小工具

指纹库优化

在对指纹库整理去重后,对每个指纹进行了命中率的标识,当匹配到某个指纹时该指纹命中率会加1,而在使用指纹时会从优先使用命中率高的指纹。

然后我们从互联网中爬取了10W个域名进行了命中率测试,然后对一些误报率比较高的指纹进行了重新优化,得到了一份相对更高效的指纹库。

TideFinger - 指纹识别小工具

未知指纹发现

目前新指纹的识别基本还是靠人工发现然后分析规则再进行添加,所以各平台都有提交指纹的功能,但是我们没有这种资源,只能另想办法。

于是想到了一个比较笨的方法:从网站中爬取一些静态文件,如png、ico、jpg、css、js等,提取url地址、文件名、计算md5写入数据库,这样再爬下一个网站,一旦发现有相同的md5,就把新的url也加入到那条记录中,并把hint值加1,这样爬取10W个站点后,就能得到一个比较客观的不同网站使用相同md5文件的数据了。

有兴趣的可以查看具体代码https://github.com/TideSec/TideFinger/blob/master/count_file_md5.py文件。

爬取的结果如下:

TideFinger - 指纹识别小工具

指纹识别脚本

有了指纹库之后,识别脚本就相对比较简单了,已有的一些也都比较成熟了,直接使用了webfinger和whatcms的部分代码并进行了整合优化,于是就有了TideFinger。

1、功能逻辑都比较简单,先用fofa库去匹配,然后获取一定banner,如果banner中识别除了cms,则返回结果,如果未识别到cms,则会调用cms规则库进行匹配各规则。

2、脚本支持代理模式,当设置了-p参数,且proxys_ips.txt文件包含代理地址时,脚本会随机调用代理地址进行扫描,以避免被封ip,不过这样的话效率可能会低一些。毕竟搜集的免费代理质量还是差一些,速度会慢很多。有钱人可以找收费代理池,然后每个规则都用不同代理去请求,这样肯定不会被封!

代理地址的搜集可以使用我修改的另一个代理池https://github.com/TideSec/Proxy_Pool,提供了自动化的代理ip抓取+评估+存储+展示+接口调用。

3、经测试,一般网站把所有指纹跑一遍大约需要30秒时间,个别的网站响应比较慢的可能耗时更长一些,可以通过设置网站超时时间进行控制。

指纹识别平台DEMO

在有了指纹库和识别脚本之后,我们想继续完善下这个功能,于是又加入了其他一些功能,并做了一个DEMOhttp://finger.tidesec.net

需要注意的是,开源的指纹识别并不包含DEMO站点。

目前有如下的功能

  1. 网站信息:网站标题、状态码、302跳转信息等;
  2. IP地址信息:IP归属地、IP服务商信息、GPS信息;
  3. CDN识别:对目标是否使用CDN进行检测,但目前CDN识别指纹还不多,对部分识别出使用CDN的目标还会列出来CNAME;
  4. 中间件识别:主要通过http头信息中的XPB、server等字段获取中间件信息,如nginx、iis、tomcat等;
  5. 更多banner:主要是调用了whatweb和Wapplyzer进行更多banner信息的获取,如jquery、bootstrap等;
  6. 操作系统识别:识别比较简单,通过ttl值和文件大小写是否敏感...用nmap去识别的话速度太慢...