过去几年,物联网设备的弱安全标准利用了linux恶意软件。使用默认密码、过时的固件或系统漏洞暴露的te.NET和ssh服务——所有这些都是让攻击者构建由数千个受感染的嵌入式设备组成的僵尸网络的方法。本文介绍在Linux平台上用于自动化恶意软件分析的多平台沙箱的设计。
在计算机安全领域,沙箱(Sandbox)是一种程序的隔离运行机制,其目的是限制不可信进程的权限。沙箱技术经常被用于执行未经测试的或不可信的客户程序。为了避免不可信程序可能破坏其它程序的运行,沙箱技术通过为不可信客户程序提供虚拟化的磁盘、内存以及网络资源,而这种虚拟化手段对客户程序来说是透明的。由于沙箱里的资源被虚拟化(或被间接化),所以沙箱里的不可信程序的恶意行为往往会被限制在沙箱中。
沙箱技术一直是系统安全领域的挑战,不存在说哪一种方案是足够安全的。沙箱技术方案通常是需要结合多种系统安全技术来实现,采用防御纵深(Defencein Depth)的设计原则,筑建多道防御屏障,尽可能地将安全风险将为最低。下面我们主要讨论如何利用Linux kernel所提供的安全功能来建立有效的沙箱技术。
Linux安全模型相关的内容:
进程是最小的权限边界,其根本原因是MMU能保证进程地址空间的隔离。Linux Kernel还提供了与进程降权(drop privilege)相关的一些功能:
顶级分析创建管道的开始。它充当整体分析的主管。在这部分管道中,二进制文件被预先分析,以便为其他分析模块(例如文件格式细节或CPU架构)提供必要的元数据。
静态分析使用许多静态分析工具之一搜索相关的静态模式。考虑的工具主要是readelf、objdump、pyelf、radare2和RetDecfileinfo。
动态分析跟踪运行二进制、新创建的进程、文件系统操作和系统调用。管道应该易于扩展,以便用户可以定义自己的分析模块。自定义模块的示例是Virus Total模块,它调用免费的Virus Total API来获取恶意软件扫描结果。各个模块的输出组合成最终的JSON输出。然后可以进一步处理该最终输出。进一步的处理可以在网络图形用户界面中手动进行,也可以通过YARA的自定义模块进行。
在目标架构上运行和分析示例的第一步是准备仿真环境。物联网恶意软件正在为广泛传播的架构而构建。这导致选择开源项目QEMU作为模拟准备好的系统的唯一可行选项。QEMU支持多种架构,包括MIPS、ARM、SPARC、AArch64、PowerPC。目标系统由自建Linux内核和准备好的文件系统和分析工具组成。为了交叉编译镜像,使用了buildroot项目。Buildroot是一个通用工具,有助于为嵌入式系统开发Linux。
实现动态分析的关键是省略用户级工具ptrace syscall并准备内核级跟踪。SystemTap被选为最终解决方案,因为它提供了简单的类C语言来定义探测器,并且恶意软件分析师可以更轻松地更改或添加动态分析功能。当前的实现使用探针来创建进程树、跟踪系统调用并标记打开或删除的文件。
构建过程如下:
网络分析模块加载tcpdumppcap文件并提供逐包分析。在最初的原型中,我使用了Python/ target=_blank class=infotextkey>Python库——Scapy和dpkt。事实证明,这两种方法在分析时都很慢,甚至在加载更大的pcap文件时也遇到了问题。因此,我准备了与Python绑定的C++库来解析pcap数据。
网络分析仪中实现的第一个重要功能是端点检查。Analyzer使用免费的Geolite国家、城市和ASN(自治系统编号)数据库。然后在多个黑名单中搜索IP地址。
其他通用指标包括端口统计信息、每个端点传输的数据量、TCPSYN、TCPFIN数据包。最后,analyzer提供L7分析。目前输出的L7信息包括解析的DNS查询、HTTP请求、IRC消息和telnet数据。
还注意到网络异常。这些异常是例如命中列入黑名单的IP地址、发送格式错误的数据包或明显的IP和端口扫描。
基于Docker容器化,各个沙箱元素的连接构建。单个沙箱包括:
Docker容器使用与主机相同的内核,因此它们的开销最小。配置文件——Dockerfiles——由指令组成。Dockerfile指令描述了构建最终docker镜像的过程。这些docker镜像带有它们的所有依赖项,并且应该在所有安装了docker的系统上正常运行。我准备了最适合运行多容器应用程序的docker-compose文件。可以简单地运行:
docker-compose up –scale worker=10
启动完整的系统并扩展沙箱工作人员的数量以满足所有请求。
在分析的恶意软件中看到的行为包括:
首先,广泛的网络分析、异常检测和使用Python绑定实现C++库,克服了常用的包Scapy和dpkt。其次是SystemTap监控环境及其交叉编译工具链的准备。使用内核级分析可以扩展到完整的系统监控解决方案。