这是关于白名单的第二篇文章,对白名单的一些方法和面临的问题进行了一些分析,也是属于概念范畴。
文章地址:https://www.researchgate.net/publication/235981426_APPLICATION_WHITELISTING_APPROACHES_AND_CHALLENGES
对于企业网络、家庭电脑而言,恶意软件是一个一直存在的问题。即使具有较强安全意识的用户采用了更新后的安全解决方案,也会被零日攻击威胁。此外,基于黑名单的处理方法具有较高的误报率和漏报率的问题。在此,安全供应商提出了应用程序白名单的概念,并使用相同的底层技术思想发展了各种解决方案。本文详细介绍了设计和实现方法,并讨论了在开发有效的白名单解决方案时所面对的挑战。
关键字:恶意软件、应用白名单、企业网
随着新型恶意软件的不断增加,传统的杀毒软件很难按照黑名单的原则对其进行检测。为解决该问题,很多方法应运而生,其中包括应用白名单。应用白名单是一种用户选择一组应用程序运行的方法,而不是像传统杀毒软件那样将应用程序列入黑名单。用户可以是单个PC的用户,并未一台计算机选择应用程序集,也可以是选择在网络上运行大型应用程序集的管理员。无论何时在给定的计算机上启动任何应用程序,该方案都会检查该文件是否出现在白名单中。如果没有,则拒绝使用此文件运行程序。
应用白名单解决方案使用底层内核模块扫描系统中的基本活动。扫描工具将应用程序的细节与数据库进行比较。第3节给出了集中式应用程序白名单解决方案的一般架构。第4节讨论了实现白名单解决方案的方法。第5节讨论了如何使用各种参数唯一地标识进入白名单的应用程序。第6节讨论了与有效实现程序白名单解决方案相关的挑战。
应用白名单初看是一种很有希望的方法,但是研究人员已经论证了它的可行性和实用性。Kurt Wismer提出确定一个程序是好是坏本身就是一个难以解决的问题。Dr. Vesselin Bontchev讨论了全局和本地白名单。Jim Beechey描述了白名单的优点以及对这类系统可能进行的攻击,并得出结论,尽管应用白名单不是万能的,但仍然需要它来对抗不断演变的恶意软件攻击。
集中式应用白名单解决方案通常使用如图2所示的C-S体系结构。应用白名单服务器有助于为网络的各种客户机创建和维护应用白名单策略数据库。根据策略,白名单和通知将发送到每个网络客户机。客户机主机的强制代理只允许执行白名单中的应用程序,并阻止所有其他应用程序。客户机代理将定期将日志详细信息更新到服务器,以便进行进一步分析。
为了在客户机上强制使用应用白名单,有两种通用方法,如下所示:
1.在进程创建期间,在运行时分析可执行文件
在这种方法中,客户机代理将拥有一个拦截模块,该模块将获知系统上新进程的创建。对于任何新的进程创建时间,拦截模块将详细信息传递给另一个模块,该模块扫描并检查此可执行文件是否存在于该客户机的应用白名单中。如果它不是一个白名单上的应用程序,这个模块会向用户表明,该计算机上不允许使用这个应用程序。图3给出了这种方法的图像视图。使用进程创建事件实现客户机代理的拦截模块有多种方法。在Windows平台上检测进程创建事件的方法有:
1.用户态使用DLL注入的CreateProcess进行hook,或者CreateProcessAsUser和CreateProcessWithLogon也可以进行hook,对于这样的注入,detour库也可以使用;
2.用户态挂钩NtCreateSection使用DLL注入;
3.内核态使用NtCreateSection进行hook;
4.使用PsSetCreateProcessNotifyRoutineEx(Windows Vista版本开始支持);
5.利用软件限制策略(由微软提供)。
2.扫描文件系统的每个文件,并根据客户机的应用程序白名单验证可执行文件的详细信息。
在这种方法中,客户机强制执行代理首先扫描可执行文件,并根据该机器的应用程序白名单验证他们。如果在该机器的应用程序白名单中没有找到该文件,则可以删除或隔离该文件。
然而,隔离是一个更好的选择,因为用户将来可能会取回该文件。在这个方法中,拦截模块应该监视和验证任何进入该机器的新的可执行文件的详细信息。这种方法如图4所示。这个模块不能依赖于文件扩展名,但是根据文件格式进行验证。
为了识别应用程序是否属于白名单,需要使用应用程序白名单数据库中提供的信息信息验证可执行文件的参数。使用可执行文件的名称和路径能够很轻易地识别应用程序,但是这些信息对于不同的客户机是不同的,而且应用程序也可能被替换。例如winword.exe,可以根据应用程序白名单数据库中提供的可执行文件的名称和路径来允许或拒绝执行。但是黑客可以轻易地把具有同样名称的恶意可执行文件放入文件系统的同样的路径下。由于名称和路径是匹配的,则恶意可执行将会被白名单允许执行。使用散列和发行者名称相结合的参数,是验证可执行文件详细信息的更好的办法。因此,应用程序白名单数据库中的每个条目应当维护四个字段:
应用程序的签名也是另外一个在应用白名单中可选的参数。这种方法与使用签名检测恶意软件的方法相似。例如,考虑一个来自userdb.txt的签名。
如图所示的签名标识使用VOB
ProtectCD打包的任意可执行文件。这个签名一共有7个字节。如果一个可执行文件也有同样的7字节的序列的话,扫描模块就会报告成功。此外,这种方法还声明搜索必须从可执行文件的入口点开始。有时这些签名可能包含通配符使得跳过一个或者多个字节。
虽然应用白名单的办法可以有效地抵御零日攻击,但是在有效实施这种办法中还存在着各种挑战。
1.建立可信的应用程序数据库
这是建立应用白名单面临的主要问题。应对这一挑战有两种可选办法。第一种方法是将构建可信应用程序数据库的认为交由管理员。其负责识别、验证和将应用程序加入白名单。另一种选择是依赖于第三方维护的可信应用程序的验证数据库,管理员只需选择并批准它们。
2.更新和补丁处理
应用白名单与补丁管理的集成是解决方案该解决的另一个重要问题。如应用程序保存在白名单中,将存储其标识参数(散列或签名)。安装更新或补丁时,应用应用程序标识参数将发生改变,会导致白名单程序被拒绝。这个问题应通过与补丁管理解决方案集成并监视此类更新活动来解决。
3.发行者证书伪造
目前的技术可以验证和检查应用程序的数字签名的有效性,但应用白名单解决方案的挑战是验证被盗证书。存在许多恶意软件盗取证书的案例。如果安全策略允许来自特定应用程序发行者的软件,这类恶意软件将通过验证。
4.使用DLL白名单使得性能降低
当应用白名单扩展到包含DLL时,加载应用程序时会对性能产生相当大的影响。虽然DLL白名单提供了更好的安全性,但考虑到性能降低的问题,对于应用程序白名单发行者将DLL白名单加入其解决方案时需要慎重考虑。
5.虚拟化
虚拟化辅助管理、部署和开发任务,但是也暴露了安全威胁。这包括对hypervisor的安全威胁、虚拟操作系统和数据丢失。此外,如果网络中没有正确配置虚拟化,用户可能会绕过应用程序控制和设备控制。如果虚拟化软件是属于白名单的,那么管理员必须却表虚拟操作系统中也是安装了应用白名单中的客户端软件。否则,这将使用户能够运行未经授权的应用程序。否则,这将导致用户能够运行未经授权的应用程序。如果应用程序可以轻易地安装自己的虚拟机,则其将绕过应用程序白名单。这也将会运行用户运行未经授权的应用程序和设备。
应用白名单是一种正在发展为有望解决零日攻击的方法。这种方法只允许白名单中的应用程序执行,而其他所有的应用程序都被阻塞。本文列出了应用白名单解决方案的设计和实现方法。以便有效地实现应用程序白名单解决方案还讨论了各种挑战。