Aggregator
AntSword v2.1.15 更新汇总
AntSword v2.1.15 更新汇总
AntSword v2.1.15 更新汇总
CVE-2022-2073 Grav CMS Twig SSTI RCE 漏洞及最新版补丁绕过
ptmalloc cheatsheet
CVE-2022-2073 Grav CMS Twig SSTI RCE 漏洞及最新版补丁绕过
2022西湖论剑·网络安全大会
反-反蜜罐:以三个反蜜罐插件的缺陷为例
0x00 关于本文 当时想保研,想搞篇论文,就捣鼓了个XSS平台并研究了反蜜罐插件的缺陷,缝在一起投某中文期刊,然后这种乱缝合果不其然被拒,之后我就把这事丢在一边了。 最近上t00ls看到某公司某蜜罐,发现其中已经采用了某些绕过反蜜罐插件的措施,一下子勾起了我的回忆。尽管过去了那么久,事后证明保研没有看起来的那么难,而且我也准备退学跑路了,但这些研究依然在那里并且还没过时,因此我决定去掉里面吹水的部分,整理下后发出来。 本文以三个反蜜罐插件为例(anti-honeypot、AntiHoneypot-Chrome-simple、antiHoneypot),分析蜜罐插件的工作原理及导致其被反向检测以及绕过的缺陷。尽管本文会对具有反制能力的蜜罐做一定的介绍,但读者需要对XSS、Jsonp劫持有一定的了解才能更好地理解本文。
0x01 会咬人的蜜罐&反蜜罐插件 有网络安全基础的读者应该都知道蜜罐是什么。防御者搞一个外表诱人但监控严密的系统来引诱黑客进攻,将黑客的一举一动记录下来,以对其分析和追踪。据说当年大名鼎鼎的黑客凯文米特尼克就栽在蜜罐上,结果惨遭溯源。 在2013年BlackHat Eu上,有研究者提出通过Jsonp/CSRF/XSS的方法攻击黑客的浏览器,以定位黑客的身份。随着护网行动的普及,默安幻阵和长亭谛听这样具有反制能力的蜜罐在各个攻防演练中大放异彩,这些蜜罐内置了大量的Jsonp和XSS接口,一旦访问,运行在浏览器前端的js脚本就通过这些接口拿到大黑客的QQ/CSDN/微博/爱奇艺/优酷 等等的账号名,再通过社工库等办法拿到大黑客的更多信息,让大黑客率先响应国家实名上网的号召。
当然大黑客也不是吃素的,黑客们开发了各式各样的蜜罐阻拦插件,这些插件可以通过检查网页的Dom和请求的URL来判断当前访问的的网站是否是蜜罐,并实时阻断浏览器发出的可疑请求,阻止恶意js脚本拿到敏感信息。
0x02 AntiHoneypot-Chrome-simple 插件原理&缺陷分析原理分析 AntiHoneypot-Chrome-simple插件通过简单的预置的蜜罐特征来检测蜜罐,它在插件的background.js中定义了一组规则,分别是文件名和内容的对应。 插件通过chrome.webRequest.onBeforeRequest监听了所有的网络请求,过滤出对js的请求并进行检查。
负责检查的代码给了很清晰的注释,首先如果检查过那就直接用缓存结果,否则通过ajax请求一次js的内容,然后用checkForRule函数检查url和内容。如果URL和内容命中规则,举个例子,如果请求了record.js并且内容还包括document[__Ox3f21b[0xd]](__Ox3f21b,那就判定为蜜罐。
如果判定为蜜罐,那除了写缓存之外,那就再网络请求的监听函数里面返回{cancel:true},阻拦这个请求,并且展示一个吓人的框框
缺陷分析:反向检测&与绕过。
像这种插件,直接匹配几个知名蜜罐的规则,其实是很容易被绕过去的,因为只要随便混淆下脚本或者改个文件名,它就无法识别了。 除此之外,这个插件还有个致命弱点。它为了检测加载的js的内容,预先用ajax去请求了一次,这样的话本来只该被请求一次的js被请求了两次,这给防御者留了很多的机会。
首先,多出来的一次请求在服务端上就非常的明显,正常浏览器不可能干这事,所以只需要在服务端检测同一个用户是否莫名其妙地多请求了js脚本,就可以确定该插件的存在性。
此外,在这两个请求中,第一个是插件发出来用于检查的,第二次是浏览器为了加载js而真正发出来的,因此只需要在第一个请求里面返回正常的内容,在第二个请求里面加载真正的恶意代码即可绕过检查。
0x03 antiHoneypot 插件原理&缺陷分析原理分析 antiHoneypot插件就要复杂很多,从Github上看它包含了很多检测手段,因此我们就看的粗略一些。
首先在插件的manifest.json中,我们可以看到该插件首先通过在前端注入js的形式来抵御多种浏览器指纹识别手段。
反映到前端上就是好好的一个网页会被它插入许多js
这些插入的js可以通过替换函数的方法记录对敏感函数的调用,并且一旦发现了某些信息就通过postMessage发送给窗口
窗口上会监听postMessage发来的东西,将其发至运行在background的js,这些js处理后就会向用户产生告警 告警长这样
此外它还能通过运行在background的js监听并检查所有的请求,多种方式去检测请求的URL,阻止Jsonp请求
缺陷分析:反向检测&与绕过。 想要检测该插件的存在性是极其容易的,只需要检查前端是否被注入了额外的Dom即可。 针对注入到了前端的代码,不难发现其依赖window.postMessage的通信方式很容易被劫持,前端只需要把window.postMessage覆盖掉(比如直接window.postMessage=console.log),前端的代码就算检测到了敏感函数的调用也无法和后端通信。当然这种绕过依然有缺陷,尽管我们能隐蔽地调用一些敏感函数了,但因为该反蜜罐插件通过函数替换实现伪造Canvas指纹,而我们无法绕过它调用真正的函数获取Cavas指纹。无论如何,至少这种绕过已经不会让黑客感到警觉。当然我们也可以反其道而行之,主动发起postMessage来调戏大黑客。
而该插件对Jsonp/XSS的检测也有个致命的弱点: 在检测代码的开头,会对url进行检查,一旦包含chrome-extension://那就直接放行。这导致了只需要在URL里面的参数中加一个chrome-extension://就可以绕过检测。这个缺陷已经被部分蜜罐厂商发现并用了起来,额外加一个叫做ooxx的参数,内容是chrome-extension://,实现绕过蜜罐插件继续用Jsonp溯源。 当然除了这种加法外,还可以在URL后面加一个#chrome-extension://,这样URL里既包含了chrome-extension://,又能不在流量中显现出来(稍有常识的人都会看出,#后面的东西是浏览器处理的,不会发到服务器那里去的)
0x04 anti-honeypot 插件原理&缺陷分析原理分析 anti-honeypot插件是相对简单的插件,首先它判断当前请求发起的域是否在白名单中,如果是则正常,如果不是则匹配发起域名是否与请求域名相同,相同则正常,否则匹配目标的path中是否包含jsonp或者callback这样的关键字,如果有则告警。缺陷分析:反向检测&与绕过。
该插件貌似不存在明显的特征可供反向检测。但manifest.json中有玄机,其中的web_accessible_resources使得扩展中的所有资源都可以被访问,因此可以构造形如chrome-extension://[id]/[resource_path]的链接,通过探测资源的型式探测其存在性。
很遗憾的是,由于该扩展并未上架Chrome商店,因此使用者只能下载源码解压后安装,而id则和解压路径相关,因此这种办法很难在实际场景中使用。 幸运的是我还发现了一种侧信道的手段可以通用地检测反蜜罐插件的存在,我将在后文详细叙述。 要绕过这个插件是很容易的,尽管看上去有严密的规则,但它的域名提取算法存在缺陷,攻击者只需要让这个正则表达式匹配不到东西,使得domain[0]无法取到而报错,即可让整个检查因为报错而直接放行。这个正则表达式只匹配了部分域名的结尾,并且不支持IP地址,因此最简单的情况,只需要让蜜罐的域名为一个IP地址就可以迫使它报错
0x05 一种具有一定通用性的侧信道检测反蜜罐插件的方法 在研究的过程中,我发现了一种侧信道的手段可以通用地检测反蜜罐插件,这种方法不一定稳,但是还是有一些研究的价值的。 上述所有的插件都会在URL请求的时候事先进行并匹配,而这个匹配过程会有一定时间的耗时,该耗时在正常情况下是不应存在的,因此可以通过分析这个耗时来分析来判断插件的存在性。经测试,当域名的长度大于等于64,浏览器看到这么长的诡异域名时会直接放弃而产生错误,因此这中间的时间就是插件处理时产生的耗时。 我们可以很轻易地构造js代码,测试给定URL请求时所需的耗时 function testTime(urllength) { url="http://"+'a'.repeat(urllength) starttime=new Date().getTime() let ajax = new XMLHttpRequest() ajax.open('GET',url,false) try{ ajax.send() } catch(e){ interval=new Date().getTime()-starttime return interval; } } 为了排除机器的干扰,采用增长倍数进行计算,即以域名长度为100为基准值,计算更长的域名的增长倍数。经测试,anti-honeypot的增长与无插件情况的增长较接近,没有明显到可以作为判断条件。但是AntiHoneypot-Chrome-simple和antiHoneypot就与无插件情况下有较大的区别(为了偷懒直接拿当时做的图来表示),在无插件的情况下耗时增长倍数相对缓慢,而有插件情况下则增长迅速。
但这种方法存在弊端,SwitchOmega这种翻墙插件也会较大增加耗时倍数,此外反蜜罐插件想要对抗这种技术也很简单,只需要检测URL长度,太长了直接报警即可。
0x06 总结 本文研究了三个反蜜罐的插件的原理及缺陷并提出一种侧信道的反蜜罐插件检测方法。 总结一下,反蜜罐插件的反向检测方法:基于注入的js篡改的Dom、基于额外请求、基于侧信道、基于web_accessible_resources。反蜜罐插件的绕过方法:针对注入的js覆写部分函数或变量、针对请求拦截制造错误或利用其匹配逻辑中的黑白名单缺陷。
Ukrainian/Russian War
RASP| SPEL/OGNL表达式注入检测与防御
RASP| SPEL/OGNL表达式注入检测与防御
RASP| SPEL/OGNL表达式注入检测与防御
RASP| SPEL/OGNL表达式注入检测与防御
安恒信息全球网络安全6月月报完整版下载
安恒高级安全威胁情报周报(2022.7.9~7.15)
安恒信息全球网络安全6月月报完整版下载
安恒高级安全威胁情报周报(2022.7.9~7.15)
Cybersecurity Is a Team Sport: 3 Takeaways from Israel?s Cyber Week
我的网络安全观:论“事前”企业信息安全建设(第三季)
你既要知道组成“问题”结构的事前,你又要知道组成“问题”结构的事中,你还要知道解决“问题”的事后。最后在回归到“问题”的本身。
——Micropoor
本文主论的“事前”就是“企业信息安全建设”的概念。认识“事前”的目的不是认识事情本身,而是实践于企业信息安全建设的整体。针对企业信息安全建设的整体,要回归实践企业信息安全建设本身。
企业信息安全是木桶原理,木桶原理又称:木桶效应。其意义为:盛水的木桶是由许多块木板箍成的,盛水量也是由这些木板共同决定的。若其中一块木板很短,则此木桶的盛水量就被短板所限制。但这正是“建设”的本身。对于“企业信息安全建设”的“木桶原理”仅仅阐述了最后一个词语“建设”,而本文主论的第一个词语“企业”即“事前”。该系列文章,将分为:事前、事中、事后、再次回归实践,共计4篇,为大家分别阐释。
针对“事前”的企业信息安全建设,主要从“4个维度”和“3个方向”进行规划与考虑。
针对“事前”企业信息安全建设,做好规划的4个维度,包括:事实、观点、立场、信仰。
事实:是客观存在,也是最不容易发生争执的,信息安全必须合规就是事实。
观点:是基于个体对“事物”的看法,所有人(个体)都觉得自身代表的是“事实”,多数出现在“专业型”人员。例如:“这个版本很旧,你需要马上升级,否则后果很严重——信息安全型专业人员”、“这个系统不能升级,已经平稳运行很多年——运维型专业人员”、“这带代码没有问题,因为这样不影响运行效率——开发型专业人员”等。
立场:不分对错,只有输赢。
信仰:有自我“完整”的闭合逻辑,也就是说,“当事人认为的,是一定正确的”。
考虑他人立场的时候,一定先考虑他的“信仰”。如果他坚定的认为他对待“信息安全”的看法(重要或不重要、重视或不重视)以及逻辑是“坚不可摧”的,那么就不要擅自“强推”,不要“改变”他人的信仰,很难有较为理想的结果。如果没有这个层面,那么需要站在他的角度考虑“立场”,也就是按照这个角度,定制3个方向的沟通、规划、协调、反馈方案。
针对“事前”企业信息安全建设,应该思考的3个方向包括:上级、平级、下级。
宏观总结:对内不折腾,对外有谋略。
微观总结:对上沟通,应该永远积极主动。平级沟通,永远追求双赢。对下沟通,永远坚持跟进。
上级:对“领导”在阐述网络安全的建设的规划中、建设的进展中、落地的过程中,要保持职业性和专业性,了解上级的真实需求,做事要超出上级的预期,并要衷心感谢上级的指点和教导。
平级:对“平级”之间的沟通,重在合作共赢,尤其是网络安全专业本身。如何既能解决问题,又能在解决问题的过程中,减少双方不必要的“工作”,减少“一刀切”的方式、减少“强推”的场景,有类有序的推进。在对方需要帮助时,主动支援;在对方取得成绩时,真心感到高兴。
下级:对“下级”沟通,要严格有温度。对事,需要公事公办。
对团队,你需要有负责的态度。总结一句:对上以敬,对下以慈,对人以和,对事以真。
“事前”企业信息安全建设对于“事中”企业安全建设的过程,至关重要。决策前要多调研、深入调研、充分调研。深刻理解4个维度和3个方向。“事前”建设与“事中”建设的关系,即:从企业信息安全建设走出来,在回到企业信息安全建设过程中去。实践是检验认识的唯一标准,将在实践中获得的认识再放进实践中去检验,在用这个认识来指导实践。笔者相信,如此以后,那么在企业信息安全建设的过程,也一定会是一个享受工作的过程。
历史是不断前进的,时代是不断发展的,企业信息安全建设是不断变化的,我们要不断地实践,认识,再实践,再认识,循环往复。这也验证梭伦所说“活到老学到老。”在文章的结尾处更想引用《庄子·内篇·养生主第三》来做本文的结尾:“吾生也有涯,而知也无涯。”