应用

技术

物联网世界 >> 物联网新闻 >> 物联网热点新闻
企业注册个人注册登录

基于Linux沙箱分析物联网(IoT)恶意软件

2022-07-19 16:06 认知计算与云安全

导读:过去几年,物联网设备的弱安全标准利用了Linux恶意软件。使用默认密码、过时的固件或系统漏洞暴露的telnet和ssh服务——所有这些都是让攻击者构建由数千个受感染的嵌入式设备组成的僵尸网络的方法。

过去几年,物联网设备的弱安全标准利用了Linux恶意软件。使用默认密码、过时的固件或系统漏洞暴露的telnet和ssh服务——所有这些都是让攻击者构建由数千个受感染的嵌入式设备组成的僵尸网络的方法。本文介绍在Linux平台上用于自动化恶意软件分析的多平台沙箱的设计。

1、Linux沙箱技术

在计算机安全领域,沙箱(Sandbox)是一种程序的隔离运行机制,其目的是限制不可信进程的权限。沙箱技术经常被用于执行未经测试的或不可信的客户程序。为了避免不可信程序可能破坏其它程序的运行,沙箱技术通过为不可信客户程序提供虚拟化的磁盘、内存以及网络资源,而这种虚拟化手段对客户程序来说是透明的。由于沙箱里的资源被虚拟化(或被间接化),所以沙箱里的不可信程序的恶意行为往往会被限制在沙箱中。

沙箱技术一直是系统安全领域的挑战,不存在说哪一种方案是足够安全的。沙箱技术方案通常是需要结合多种系统安全技术来实现,采用防御纵深(Defencein Depth)的设计原则,筑建多道防御屏障,尽可能地将安全风险将为最低。下面我们主要讨论如何利用Linux kernel所提供的安全功能来建立有效的沙箱技术。

  • Linux安全模型相关的内容:

  • 每个进程都有自己的地址空间;

  • MMU硬件机制来保证地址空间的隔离;

  • Kernel是系统的TCB(Trusted Computing Base),是安全策略的制定者和执行者;

  • 进程是最小的权限边界;root具有最高权限,它能控制一切;

  • 其它用户受DAC(Discretionary Access Control)限制,如文件系统的UGO权限控制。

进程是最小的权限边界,其根本原因是MMU能保证进程地址空间的隔离。Linux Kernel还提供了与进程降权(drop privilege)相关的一些功能:

  • setuid

  • POSIX.1e capability

  • Chroot jail

  • Quota control(eg,cgroup,namespace)

  • Linux Container

  • Linux Security Module(LSM)

2、Linux恶意软件分析的挑战

顶级分析创建管道的开始。它充当整体分析的主管。在这部分管道中,二进制文件被预先分析,以便为其他分析模块(例如文件格式细节或CPU架构)提供必要的元数据。

静态分析使用许多静态分析工具之一搜索相关的静态模式。考虑的工具主要是readelf、objdump、pyelf、radare2和RetDecfileinfo。

动态分析跟踪运行二进制、新创建的进程、文件系统操作和系统调用。管道应该易于扩展,以便用户可以定义自己的分析模块。自定义模块的示例是Virus Total模块,它调用免费的Virus Total API来获取恶意软件扫描结果。各个模块的输出组合成最终的JSON输出。然后可以进一步处理该最终输出。进一步的处理可以在网络图形用户界面中手动进行,也可以通过YARA的自定义模块进行。

3、执行分析

在目标架构上运行和分析示例的第一步是准备仿真环境。物联网恶意软件正在为广泛传播的架构而构建。这导致选择开源项目QEMU作为模拟准备好的系统的唯一可行选项。QEMU支持多种架构,包括MIPS、ARM、SPARC、AArch64、PowerPC。目标系统由自建Linux内核和准备好的文件系统和分析工具组成。为了交叉编译镜像,使用了buildroot项目。Buildroot是一个通用工具,有助于为嵌入式系统开发Linux。

3.1动态分析

实现动态分析的关键是省略用户级工具ptrace syscall并准备内核级跟踪。SystemTap被选为最终解决方案,因为它提供了简单的类C语言来定义探测器,并且恶意软件分析师可以更轻松地更改或添加动态分析功能。当前的实现使用探针来创建进程树、跟踪系统调用并标记打开或删除的文件。

构建过程如下:

  • 将SystemTap(.stp)脚本翻译成C语言。

  • 针对已经准备好的内核,将C代码交叉编译为目标架构的内核模块。

  • 将构建的内核模块插入目标文件系统。

3.2网络分析

网络分析模块加载tcpdumppcap文件并提供逐包分析。在最初的原型中,我使用了Python库——Scapy和dpkt。事实证明,这两种方法在分析时都很慢,甚至在加载更大的pcap文件时也遇到了问题。因此,我准备了与Python绑定的C++库来解析pcap数据。

网络分析仪中实现的第一个重要功能是端点检查。Analyzer使用免费的Geolite国家、城市和ASN(自治系统编号)数据库。然后在多个黑名单中搜索IP地址。

其他通用指标包括端口统计信息、每个端点传输的数据量、TCPSYN、TCPFIN数据包。最后,analyzer提供L7分析。目前输出的L7信息包括解析的DNS查询、HTTP请求、IRC消息和telnet数据。

还注意到网络异常。这些异常是例如命中列入黑名单的IP地址、发送格式错误的数据包或明显的IP和端口扫描。

4、分析构建及结果

基于Docker容器化,各个沙箱元素的连接构建。单个沙箱包括:

Flask API-WebAPI具有用于创建新任务(完整文件分析或仅pcap分析)、查看任务状态、结果和下载分析相关文件(例如捕获的pcaps)的端点。

  • RabbitMQ-它用作使用AMQP协议的消息代理。

  • 它存储和控制着进入沙箱的任务队列。

  • MariaDB-开源MySQL替代方案。

  • 它存储分析任务结果。

  • Nginx-在实施的系统架构中,nginx代理将传入请求传递给uwsgi服务器(运行Web API)。

  • Sandbox workers-运行分析管道的工作者节点。

Docker容器使用与主机相同的内核,因此它们的开销最小。配置文件——Dockerfiles——由指令组成。Dockerfile指令描述了构建最终docker镜像的过程。这些docker镜像带有它们的所有依赖项,并且应该在所有安装了docker的系统上正常运行。我准备了最适合运行多容器应用程序的docker-compose文件。可以简单地运行:

docker-compose up –scale worker=10

启动完整的系统并扩展沙箱工作人员的数量以满足所有请求。

在分析的恶意软件中看到的行为包括:

  • IP扫描——我们数据集中最常见的行为。由于当前大多数物联网恶意软件都会创建僵尸网络,因此其目标(机器人)通过在其他设备中发现漏洞来传播。

  • LiSa区分本地网络和Internet扫描,并在发生此类事件时触发异常。通常的目标端口是端口23(SSH)。

  • 端口扫描——恶意软件扫描本地网络中的许多端口以查找打开的端口。

  • HTTP请求–检测到多个异常HTTP请求并将其标记为异常。HTTP请求可能包含垃圾或目标端点以获取数据(例如GET/version)。

  • 格式错误的DNS数据包——这些数据包在标头值中包含大量数字(问题、答案、权限和其他资源记录的数量)。

  • IRC–恶意软件连接到IRC服务器并等待来自CC服务器的命令。

  • 针对特定国家——样本仅与特定国家的数百个主机联系。这些国家是越南、中国、孟加拉国、泰国和印度。

  • 更改了进程名称——使用带有请求PRSETNAME的Syscallprctl来隐藏恶意软件进程。

  • 列入黑名单的端点——在黑名单中发现了几个端点的IP地址。

  • 以指定应用程序为目标——示例以Wordpress应用程序及其端点/wp-login.php为目标。

  • Ptrace–Ptrace系统调用被检测为一种反调试技术。

  • 进程创建——检测到的通常用于守护应用程序的分叉进程。

5、结论

首先,广泛的网络分析、异常检测和使用Python绑定实现C++库,克服了常用的包Scapy和dpkt。其次是SystemTap监控环境及其交叉编译工具链的准备。使用内核级分析可以扩展到完整的系统监控解决方案。