想开发一个安全软件,怎么搞?
今天跟大家介绍一下,开发一个像360、QQ电脑管家这样的安全软件,有哪些核心技术,或者说哪些核心组件是必不可少的?
反病毒引擎
首先,第一个必不可少的就是反病毒引擎。安全软件最早的核心也就是这个东西,它的目的就是检测一个文件是不是恶意软件。
反病毒引擎主要通过对文件进行静态分析,识别恶意文件的特征,与自己的病毒特征库进行匹配,来判断目标是否是恶意的。
这里面主要用到的技术有文件格式识别、加壳脱壳技术、加密解密技术、可执行文件的反汇编、指令级的特征匹配、虚拟执行、样本家族团伙基因判别、机器学习等等。
HOOK驱动
安全软件的主要任务,就是要保护我们的电脑不受病毒、木马这些恶意软件的侵害,除了能通过静态分析识别已知的威胁,还要守住计算机的安全防线,防止被恶意软件攻破。
那如何防守呢?
安全软件需要感知计算机上发生的一切事情,这包含,每一个进程线程的创建、每一个文件的创建和读写、每一次网络连接的建立,甚至每一次系统服务的调用。
安全软件是通过HOOK技术来做到这一切的。
安全软件使用内核驱动程序,劫持应用程序通向操作系统内核的关键入口,从而监控所有进程的行为。
几乎每一个安全软件都有这么一个驱动程序,它内部有一套HOOK框架,提供编程接口给其他驱动程序调用,比如360中大名鼎鼎的hookport.sys。
主动防御驱动
光有一个HOOK框架驱动不行,还得配套有一个主动防御驱动,负责完成具体的安全防御。
应用层上一般会有一个主动防御进程,负责从安全软件云端服务器接收控制指令,下发最新的防御规则,最新的特征库,比如拦截哪些程序,拦截哪些操作等等。
主动防御进程拉取到这些信息后,下发给内核空间的主动防御驱动程序,由它来具体执行对应的拦截行为。
文件过滤驱动
通过HOOK驱动来进行监控,有时候并不能完全解决问题。有一些底层软件,可以绕过系统API调用,这样一来HOOK驱动就监控不到了。
因此,安全软件一般还会配套有一个文件过滤驱动,通过文件系统提供的接口实现更底层的文件监控功能。
这一类驱动一般使用的技术有minifilter、sfilter等。
网络监控驱动
和文件过滤驱动类似,对于网络同样需要一个更底层的驱动程序,来监控计算机中所有的网络连接,通过操作系统网络架构底层的接口,监控计算机进进出出所有的数据包,将网络通信情况完全了如指掌。
这一类驱动使用的技术有TDI、NDIS、WFP等。
沙箱驱动
除了守护我们的计算机,安全软件的另外主要工作还是分析恶意程序。
前面提到的反病毒引擎主要是静态分析,但静态分析有一定的局限性,很多时候程序的恶意需要运行以后才会暴露出来。因此,动态分析技术少不了。
虽然网络安全技术发展了很多年,但动态分析用到的主要技术还是“沙箱分析”。
所谓沙箱分析,就是提供一个仿真的环境,把目标丢进去,让它跑起来,等到它原形毕露,是不是恶意就能一目了然。
因此,许多安全软件也会提供一个沙箱驱动,通过内核隔离,模拟出一个“安全”的执行环境,让目标在其中运行。
攻防驱动
安全软件目标这么大,自然会招来很多恶意软件的攻击。除了恶意软件,有些安全软件互相为了抢夺用户,也会互相攻击。
所以,安全软件必须加强自身的防御。
前面提到的主动防御,属于正规军作战,也包含有保护自己的能力,但面对同样是内核级的攻击对手,这一招基本就收效甚微了。
因此,安全软件一般还会有一个攻防驱动,通过各种手段和对手作战,保护自己,这里面用到的技术就五花八门了。
总结
总结一下,开发一款安全软件,主要有三方面的事情要做:
看完这篇文章,你有什么收获吗,写作不易,欢迎动动手指转发分享。