网页防篡改软件又称网站恢复软件,是用于保护网页文件,防止黑客篡改网页(篡改后自动恢复)的软件,其使用的防篡改技术归纳列举如下:
定时循环扫描技术(即“外挂轮询”):使用程序按用户设定的间隔,对网站目录进行定时扫描比对,如果发现篡改,就用备份进行恢复。
事件触发技术:使用程序对网站目录进行实时监控,稍有“风吹草动”就进行检查是否是非法篡改。
核心内嵌(数字水印)技术:在用户请求访问网页之后,在系统正式提交网页内容给用户之前,对网页进行完整性检查。
文件过滤驱动技术:采用系统底层文件过滤驱动技术,拦截与分析IRP流。
在后文中,我们将逐个分析下各技术的特点与安全隐患。如果有必要,会对安全隐患同时给出相关Proof Of Concept(POC,概念性证明)程序。这里对POC程序作下说明:在计算机安全领域内,安全专家为了能证明某个漏洞的存在,而又能防止恶意用户拿去危害公众而写的程序叫做POC程序。
II. 定时循环扫描技术这是早期使用的技术,比较落后,已经被淘汰了,原因是:现在的网站少则几千个文件,大则几万,几十万个文件,如果采用定时循环扫描,从头扫到尾,不仅需要耗费大量的时间,还会大大影响服务器性能。
在扫描的间隙或者扫描过程中,如果有文件被二次篡改,那么在下次循环扫描到该文件之前,文件就一直是被篡改的,公众访问到的也将是被篡改的网页,这是一段“盲区”,“盲区”的时长由网站文件数量、磁盘性能、CPU性能等众多客观因素来决定。
该技术由于过于简单,其安全隐患相信读者看完上面的说明就能完全领会明白,故而在此不给出POC程序。
III. 事件触发技术这是目前主流的防篡改技术之一,该技术以稳定、可靠、占用资源极少著称,其原理是监控网站目录,如果目录中有篡改发生,监控程序就能得到系统通知事件,随后程序根据相关规则判定是否是非法篡改,如果是非法篡改就立即给予恢复。
可以看出,该技术是典型的“后发制人”,即非法篡改已经发生后才可进行恢复,其安全隐患有三:
其一,如果黑客采取“连续篡改”的攻击方式,则很有可能永远也无法恢复,公众看到的一直是被篡改的网页。因为:篡改发生后,防篡改程序才尝试进行恢复,这有一个系统延迟的时间间隔,而“连续篡改”攻击则是对一个文件进行每秒上千次的篡改,如此一来,“后发制人”的方式永远也赶不上“连续篡改”的速度。
这里给出一个POC程序,该程序只对c:\test.txt 文件进行“连续篡改”攻击(每秒篡改10次),读者可以下载此程序进行测试。
其二,如果文件被非法篡改后,立即被恶意劫持,则防篡改进程将无法对该文件进行恢复。
这里给出一个POC程序,该程序只对c:\test.txt 文件进行篡改后劫持攻击,运行后, c:\test.txt 文件的内容将被篡改,同时该文件的内容将无法恢复,读者可以下载此程序进行测试。
其三,目录监控的安全性受制于防篡改监控进程的安全性,如果监控进程被强行终止,则防篡改功能就立刻消失,网站目录就又面临被篡改的危险。
有关强行终止进程的方式,在Windows系统中,自带的就有任务管理器、taskkill.exe 命令,tskill.exe 命令,ntsd.exe 命令,这四种方式几乎可以结束任何进程,这里举例用ntsd.exe 终止在任务管理器中无法终止的winlogon.exe进程,注意,对NT5.x系统结束该进程后系统将立即蓝屏崩溃,请读者勿在真实主机中测试:
Ntsd.exe –c q –pn winlogon.exe
关于强行终止进程,还有很多更加强大的方式,读者可以搜索相关资料,这里不再赘述。
IV. 核心内嵌(数字水印)技术这也是目前的主流技术之一,该技术以无进程、篡改网页无法流出、使用密码学算法作支撑而著称,其原理是:对每一个流出的网页进行数字水印(也就是HASH散列)检查,如果发现当前水印和之前记录的水印不同,则可断定该文件被篡改,并且阻止其继续流出,并传唤恢复程序进行恢复。
是:即使黑客该技术的特点通过各种各样未知的手段篡改了网页文件,被篡改的网页文件也无法流出被公众访问到。
该技术的安全隐患有三:
其一:市面上“数字水印”的密码学算法,无一例外地使用 MD5(Message-Digest algorithm 5) 散列算法,该散列算法由于网上到处都有现成的代码可以直接拷贝,而且在计算100KB以内的小文件时速度可以忍受,因而之前在密码存储和文件完整性校验方面广为运用。不过,在2004年我国密码学家山东大学的王小云教授攻破了包括这一算法在内的多种密码学算法,使得伪造出具有相同数字水印而内容截然不同的文件立刻成为了现实,她的研究成果在国际密码学界引发了强烈“地震”。
这里给出两个具有相同数字水印(相同MD5)而运行内容完全不一样的程序给读者作参考。
再给出一个POC程序,该程序可对给定前缀的文件制作出具有相同数字水印(相同MD5)的两个文件。
再提供一个计算文件/字符串各类散列的程序深空HASH计算工具。下图为深空HASH计算工具的使用示例:
(该工具使用技巧:点击“高级”,将本程序加到鼠标右键菜单,然后对任意文件点击鼠标右键,再按字母“F”可立即计算目标文件的散列值。)
当“数字水印”技术使用一个已被攻破的脆弱算法时,其安全性也就轰然倒塌了。
其二:“数字水印”技术在计算大于100KB大小的文件“指纹”时,其速度将随着文件的增大而逐步下降到让人无法忍受的地步,因此大多数产品都会默认设置一个超过xxx KB的文件不进行数字水印检查规则。如此一来,黑客只要把非法篡改文件的大小调整到xxx KB以上,就可以让非法文件自由流出了,这又是一个潜在的巨大安全隐患。关于这项安全隐患,读者可以随便找个10MB以上的文件放入网站目录中,然后再访问该文件,如果发现文件可以访问或者下载,即可证明当前使用的防篡改产品存在该安全隐患。
“数字水印”技术安全隐患的根本成因是密码学水印算法的安全性,以及水印算法速度与公众访问网页速度的矛盾。由于目前MD4、MD5、SHA-1、RIPEMD等相对快速的水印算法均被破解,其安全性都已经荡然无存。因而,在新的又快速又安全的新水印算法发明之前,上述两种安全隐患将永远是“数字水印”技术的梦魇。
需要提及的是,比数字水印技术更安全的是基于公私钥(如RSA2048,ECC196等)密码学的数字签名技术,数字签名技术不但可以检验文件是否被篡改(完整性),还可以确定文件来源(不可抵赖性)。这里提供一个可以使用RSA2048对任何文件进行数字签名的工具深空文件加密系统:
其三:计算每个请求文件的水印散列,必须将计算水印散列的功能模块插入到web服务软件中,比如IIS的ISAPI Filter/Extension,Apache的模块等。换句话说,基于核心内嵌技术的防篡改产品,关键点就在于向web服务软件中插入了计算水印散列模块,一旦计算水印散列模块被卸载,那么防篡改功能将立即消失,被篡改网页就可以随意流出被公众浏览到。
这里以卸载IIS的ISAPI Filter为例,假设安装的ISAPI Filter名称为watermark,则使用下面的命令可以找到并删除watermark这个ISAPI筛选器:
更简单点的方法:在运行里输入inetmgr打开IIS管理器,然后找到目标网站→右键→“属性”→“ISAPI 筛选器”,选中计算水印散列的模块,删除,应用。
V. 文件过滤驱动技术这是新兴的一种防篡改技术,其原理是采用操作系统底层文件过滤驱动技术,拦截与分析IRP流,对所有受保护的网站目录的写操作都立即截断,与“事件触发技术”的“后发制人”相反,该技术是典型的“先发制人”,在篡改写入文件之前就阻止。
下面是一个使用文件过滤驱动技术实现网页防篡改的常见代码:
该技术貌似密不透风,拦截了一切篡改的可能,其安全隐患有三:
其一:基于实际应用中各种复杂环境与因素的考虑,操作系统的设计者在系统内核底层设计了多种可以读写文件的方式,相关数据流不单单是走文件过滤驱动这一条线。网络上大家常用的各种“文件粉碎机”强制删除顽固文件就是基于相关原理的。
下图红框所示:只需两行代码就可以绕过文件过滤驱动技术的拦截:
这里给出一个POC程序(下载):首先用文件过滤驱动技术的网页防篡改产品保护D盘目录下的任意文件或文件夹,然后使用该程序可以轻易突破防篡改保护,让用户随意修改文件或文件夹。
其二:文件路径表示除了正常的方式之外,还可以用DOS8.3文件路径表示法,当文件名的长度超过8个字符时,就可以用DOS8.3路径表示,这里举例说明:
假设D盘下有一个文件 123456789.txt,那么该文件的全路径可以表示为:D:\123456789.txt,或者用DOS8.3的格式表示为:D:\1234567~1.txt。也就是说,如果一个攻击者要篡改D:\123456789.txt,那么他输入路径D:\1234567~1.txt也一样可以访问文件并进行篡改。因此网页防篡改系统必须要能抵御DOS8.3文件路径方式的攻击。根据我们实际市场检测,绝大部分使用文件过滤驱动技术的网页防篡改产品没能抵挡住此类攻击。
其三:如果操作系统存在默认共享,文件路径表示除了上述方法之外,还可以用网络路径表示法,并且任意文件、任意文件名长度的都适用,这里举例说明:
假设D盘下有一个文件 index.html,那么该文件的全路径可以表示为:D:\index.html,或者用网络路径格式表示为:\\127.0.0.1\D$\index.html。也就是说,如果一个攻击者要篡改D:\index.html,那么他输入路径\\127.0.0.1\D$\index.html也一样可以访问文件并进行篡改。因此网页防篡改系统必须要能抵御网络路径路径方式的攻击。根据我们实际市场检测,同样是绝大部分使用文件过滤驱动技术的网页防篡改产品没能抵挡住此类攻击。
最后要提醒的是:对64位Windows系统,文件过滤驱动还需经微软的WHQL数字签名验证,否则驱动无法安装进操作系统。
操作系统内核底层好比深海,暗流颇多,如果对它没有深入、细致、广泛的理解与分析而去编写一个文件过滤驱动,那这个文件过滤驱动就好比是“马奇诺防线”,而当文件过滤驱动被绕过后,其防篡改功能也同样荡然无存了。
前面分析了各技术的特点和安全隐患,这些安全隐患都是现实存在而且随时都有可能被黑客利用的,读者可以利用上面介绍的安全隐患测试方法/程序,自己动手进行验证。