1

想开发一个安全软件,怎么搞?

 2 years ago
source link: https://segmentfault.com/a/1190000040780047
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

今天跟大家介绍一下,开发一个像360、QQ电脑管家这样的安全软件,有哪些核心技术,或者说哪些核心组件是必不可少的?

反病毒引擎

首先,第一个必不可少的就是反病毒引擎。安全软件最早的核心也就是这个东西,它的目的就是检测一个文件是不是恶意软件。

反病毒引擎主要通过对文件进行静态分析,识别恶意文件的特征,与自己的病毒特征库进行匹配,来判断目标是否是恶意的。

这里面主要用到的技术有文件格式识别、加壳脱壳技术、加密解密技术、可执行文件的反汇编、指令级的特征匹配、虚拟执行、样本家族团伙基因判别、机器学习等等。

HOOK驱动

安全软件的主要任务,就是要保护我们的电脑不受病毒、木马这些恶意软件的侵害,除了能通过静态分析识别已知的威胁,还要守住计算机的安全防线,防止被恶意软件攻破。

那如何防守呢?

安全软件需要感知计算机上发生的一切事情,这包含,每一个进程线程的创建、每一个文件的创建和读写、每一次网络连接的建立,甚至每一次系统服务的调用。

安全软件是通过HOOK技术来做到这一切的。

安全软件使用内核驱动程序,劫持应用程序通向操作系统内核的关键入口,从而监控所有进程的行为。

几乎每一个安全软件都有这么一个驱动程序,它内部有一套HOOK框架,提供编程接口给其他驱动程序调用,比如360中大名鼎鼎的hookport.sys。

主动防御驱动

光有一个HOOK框架驱动不行,还得配套有一个主动防御驱动,负责完成具体的安全防御。

在这里插入图片描述

应用层上一般会有一个主动防御进程,负责从安全软件云端服务器接收控制指令,下发最新的防御规则,最新的特征库,比如拦截哪些程序,拦截哪些操作等等。

主动防御进程拉取到这些信息后,下发给内核空间的主动防御驱动程序,由它来具体执行对应的拦截行为。

文件过滤驱动

通过HOOK驱动来进行监控,有时候并不能完全解决问题。有一些底层软件,可以绕过系统API调用,这样一来HOOK驱动就监控不到了。

因此,安全软件一般还会配套有一个文件过滤驱动,通过文件系统提供的接口实现更底层的文件监控功能。

这一类驱动一般使用的技术有minifilter、sfilter等。

网络监控驱动

和文件过滤驱动类似,对于网络同样需要一个更底层的驱动程序,来监控计算机中所有的网络连接,通过操作系统网络架构底层的接口,监控计算机进进出出所有的数据包,将网络通信情况完全了如指掌。

在这里插入图片描述
这一类驱动使用的技术有TDI、NDIS、WFP等。

除了守护我们的计算机,安全软件的另外主要工作还是分析恶意程序。

前面提到的反病毒引擎主要是静态分析,但静态分析有一定的局限性,很多时候程序的恶意需要运行以后才会暴露出来。因此,动态分析技术少不了。

虽然网络安全技术发展了很多年,但动态分析用到的主要技术还是“沙箱分析”。

在这里插入图片描述

所谓沙箱分析,就是提供一个仿真的环境,把目标丢进去,让它跑起来,等到它原形毕露,是不是恶意就能一目了然。

因此,许多安全软件也会提供一个沙箱驱动,通过内核隔离,模拟出一个“安全”的执行环境,让目标在其中运行。

安全软件目标这么大,自然会招来很多恶意软件的攻击。除了恶意软件,有些安全软件互相为了抢夺用户,也会互相攻击。

所以,安全软件必须加强自身的防御。

前面提到的主动防御,属于正规军作战,也包含有保护自己的能力,但面对同样是内核级的攻击对手,这一招基本就收效甚微了。

因此,安全软件一般还会有一个攻防驱动,通过各种手段和对手作战,保护自己,这里面用到的技术就五花八门了。

总结一下,开发一款安全软件,主要有三方面的事情要做:

在这里插入图片描述

看完这篇文章,你有什么收获吗,写作不易,欢迎动动手指转发分享。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK