诱捕恶意攻击“简易装”
——Dionaea低交互式蜜罐介绍

2011-11-09 13:43代恒诸葛建伟
中国教育网络 2011年11期
关键词:蜜罐配置文件端口

文/代恒 诸葛建伟

诱捕恶意攻击“简易装”
——Dionaea低交互式蜜罐介绍

文/代恒 诸葛建伟

COST论坛由CCERT、《中国教育网络》杂志于2008年共同发起,采取会员制,面向个人,完全免费,以开放、平等、自由的互联网精神运作。如需获取COST技术论坛视频、录音等资料,请登录:。

有别于高交互式蜜罐采用真实系统与服务诱捕恶意攻击,Dionaea被设计成低交互式蜜罐,它为攻击者展示的所有攻击弱点和攻击对象都不是真正的产品系统,而是对各种系统及其提供的服务的模拟。

Dionaea(捕蝇草)低交互式蜜罐的定义

Dionaea低交互式蜜罐(http://dionaea.carnivore.it/)是Honeynet Project的开源项目,起始于Google Summer of Code 2009,是Nepenthes(猪笼草)项目的后继。Honeynet Project是成立于1999年的国际性非盈利研究组织,致力于提高因特网的安全性,在蜜罐技术与互联网安全威胁研究领域具有较大的影响力。

Dionaea蜜罐的设计目的是诱捕恶意攻击,获取恶意攻击会话与恶意代码程序样本。它通过模拟各种常见服务,捕获对服务的攻击数据,记录攻击源和目标IP、端口、协议类型等信息,以及完整的网络会话过程,自动分析其中可能包含的shellcode及其中的函数调用和下载文件,并获取恶意程序。

有别于高交互式蜜罐采用真实系统与服务诱捕恶意攻击,Dionaea被设计成低交互式蜜罐,它为攻击者展示的所有攻击弱点和攻击对象都不是真正的产品系统,而是对各种系统及其提供的服务的模拟。这样设计的好处是安装和配置十分简单,蜜罐系统几乎没有安全风险,不足之处是,不完善的模拟会降低数据捕获的能力,并容易被攻击者识别。

图1 Dionaea整体结构和工作机制

Dionaea的工作机制

技术原理和整体结构

Dionaea是运行于Linux上的一个应用程序,将程序运行于网络环境下,它开放Internet上常见服务的默认端口,当有外来连接时,模拟正常服务给予反馈,同时记录下出入网络数据流。网络数据流经由检测模块检测后按类别进行处理,如果有shellcode则进行仿真执行;程序会自动下载shellcode中指定下载或后续攻击命令指定下载的恶意文件。从捕获数据到下载恶意文件,整个流程的信息都被保存到数据库中,留待分析或提交到第三方分析机构。

Dionaea整体结构和工作机制如图1所示。

模拟服务

Dionaea通过模拟常见的Internet服务引诱网络上以这些服务为目标的攻击,因为蜜罐系统其实并不提供任何服务,可以假定所有服务请求都是恶意的。目前支持的协议类型和服务有SMB、http、ftp、tftp、MSSQL、MySQL、SIP(VoIP),同时还支持IPv6和TLS(Transport Layer Security,传输层安全)。

按默认配置启动蜜罐,程序自动获取网络接口IP地址,在IPv4和IPv6同时开启监听服务。服务开放的端口,TCP端口对应有web服务80、443端口,ftp服务21端口,MSSQL的1433端口,MySQL的3306端口,支持SMB的445端口,RPC(Remote Procedure Call,远程过程调用)和DCOM(分布式组件对象模型)服务使用的135端口,wins服务42端口;udp端口有VoIP使用的SIP(Session Initiation Protocol,会话发起协议)对应的5060端口,tftp服务69端口。新的服务可以通过编写python脚本的方式添加到蜜罐中,具有很强的扩展性。MySQL服务即为2011年5月发布的新版本中最新添加的模拟服务。

捕获攻击数据

对于模拟服务的监听连接,Dionaea直接获取外来连接数据,然后根据模拟服务的实现向外返回数据;从没有模拟服务支持的端口收到的连接包则会先被记录,然后丢弃。获取的外来数据可以提交给检测模块进行检测,同时有关此连接的信息,如源IP、目的IP、源端口、目的端口、协议类型等会被记录到数据库中,方便进行分析和统计。

Shellcode检测和仿真引擎

外来数据提交到检测模块后,若检测到shellcode,就被放到程序自带的虚拟机中进行仿真执行。检测和仿真引擎采用libemu,同样是由Honeynet Project开发的x86下shellcode检测和仿真程序库。它采用GetPC启发式模式来检测数据流中是否有shellcode,发现后在虚拟机中运行代码,并记录API调用和参数,对于多级shellcode同样可以仿真。

Libemu按字节检查输入数据,发现连续的机器指令则提取出来,交给程序的虚拟机进行仿真。以metasploit中的pay-load “download_exec”为例,Dionaea收到溢出数据流并处理后,在下载参数中发现url字符串,则利用curl程序到此url下载文件并保存。以metasploit中的payload “shell_bind_tcp”为例,设置参数为开放4444端口后门,Dionaea会开放4444端口并等待进一步的连接数据,如黑客连接后门的操作,程序会对命令做相应反馈以吸引更多输入数据,当然Dionaea对后门的模拟与高交互式蜜罐相比差距很大。

恶意文件下载

Dionaea蜜罐会自动检测shellcode中的文件下载地址或黑客指定的下载地址,并尝试下载文件。http下载利用curl模块,而ftp下载和tftp下载利用的是程序自带的和tftp.py这两个python脚本。

事件记录

默认安装目录为/opt/dionaea/,当有针对模拟服务的恶意攻击发生时,一系列出入数据会被记录下来,保存到/opt/dionaea/var/dionaea/bistreams目录下按时间命名的目录中。文件下载成功后,会被保存到/opt/dionaea/var/dionaea/binaries目录下。而用户向模拟服务上传的文件将被保存在/opt/dionaea/var/dionaea/wwwroot目录下。

检测到的事件信息将被保存到事件数据库中。Dionaea使用的是SQLite数据库,数据库文件logsql.sqlite默认位于/opt/dionaea/var/dionaea/目录下。

图2展示了Dionaea事件数据库主要的几个表和关系结构。数据库以connections表为核心,记录了外部攻击和蜜罐的每一次连接行为,包括IP、端口、协议类型和时间戳等信息。其中connection_root键记录引起本次连接的最初一个连接编号,connection_parent键记录引起本次连接的上一个连接编号,通过这两个键可以将一次连续的攻击提取出来。如连接Link1溢出攻击的shellcode控制主机连接到攻击控制端,新建连接Link2,则Link1是Link2的“root”和“parent”。

以connections表为轴,其他表记录详细攻击行为信息。dcerpcbinds表和dcerpcrequests表当连接使用SMB协议时会产生记录,其中UUID标识调用的分布式远程过程,两表分别记录调用所采用的编码规则和请求操作号(Operation number)。emu_profiles表和emu_serivces表记录libemu程序对数据流中shellcode检测得到的结果,分别记录检测到的shellcode函数调用、参数和判断出的shellcode开启的后门。downloads表记录了下载的恶意文件的信息,包括下载地址和对文件的md5值。offers表记录shellcode中提供的文件下载url。logins表和mssql_commands表记录对MSSQL服务的攻击行为,分别记录尝试登陆的用户名、密码和对数据库提交的命令以及命令完成情况。

图2 事件数据库主要结构

Dionaea蜜罐安装过程

Dionaea目前版本是0.1.0,采用源码安装。软件运行依赖于以下库:libev,libglib,libssl,liblcfg,libemu,python,sqlite,readline,cython,lxml,libudns,libcurl,libpcap。安装过程详见http://dionaea.carnivore.it/#compiling,需要注意的是安装Python-3.2时注意按说明修改setup.py以确保zlib库能正确安装。

安装时要注意依赖库成功安装,否则Dionaea可能不能正常工作。网上也有提供利用脚本整合安装的方法,具体可参考以下网址:

http://carnivore.it/2010/05/18/debianization

http://aur.archlinux.org/packages.php?ID=36944

http://maimed.org/~pyllyukko/stuff.shtml

Dionaea使用方法

Dionaea根据命令参数运行,可选择不同的运行环境、任务和筛选事件记录内容。配置文件则具体规定蜜罐运行后开启的模块,记录文件的保存位置和扩展功能的参数等信息。默认配置下Dionaea自动选择一个网络接口进行监听。

Dionaea的命令格式

Dionaea具体的命令格式如下:

选项的意义分别是:

-c:指定运行程序所使用的配置文件,默认下配置文件是/opt/dionaea/etc/dionaea.conf。

-D:后台运行。

-g:指定启动后切换到某个用户组,默认下保持当前组。

-G:收集垃圾数据,用于调试内存泄露。不能用于valgrind软件。

-h:帮助信息。

-H:帮助信息,包括默认值信息。

-l:选择事件记录级别,可以选择all, debug, info,message, warning, critical, error这些值,多选使用“,”做分隔,排除使用“-”。

-L:选择域,支持通配符“*”和“?”,多选使用“,”,排除使用“-”。

-u:指定启动后切换到某个用户,默认下保持当前用户。

-p:记录pid到指定文件。

-r:指定启动后切换根目录到指定目录,默认下不切换。

-V:显示版本信息。

-w:设定进程工作目录,默认下为/opt/dionaea。

Dionaea配置文件

Dionaea默认下配置文件是/opt/dionaea/etc/dionaea.conf。配置文件内容分为logging,processors,downloads,bistreams,submit,listen,modules七个部分。

日志logging部分配置日志的存放位置、事件记录级别和所在域,包括普通日志和错误日志,默认下位于/opt/dionaea/var/log目录下,分别记录所有事件和警告、错误事件。

处理器processors部分配置libemu和用于导出数据流的模块streamdumper。libemu部分可增减允许的协议,配置shellcode检测时支持的最大流大小、跟踪步数限制和并发执行数等性能参数。streamdumper部分配置导出数据流时允许和拒绝的协议,数据流保存的位置。

文件下载downloads和数据流bistreams部分分别配置恶意文件下载和数据流保存的位置。

提交submit部分设置自动通过http提交恶意文件到特定地址,具体配置信息依赖于服务器的设定。

监听设置listen部分配置Dionaea进行监听的网络接口IP,默认下自动获取。

工作模块modules部分配置各种模块的工作参数。部分必须模块,如curl、libemu、pcap、模拟的服务services等信息,建议保存默认配置。其他可供扩展的模块将在第五部分Dionaea进阶使用高级功能进行介绍。

Dionaea使用实例

Dionaea安装完成后可按需求进行一定配置,但通常使用默认配置也可实现决大多数功能。下面对Dionaea默认配置下的使用和工作情况作简单介绍。

以下Dionaea 0.1.0安装于Ubuntu 10.10,测试机为BT5(back track 5)。启动Dionaea:dionaea -l all,-debug -L'*'。记录除debug之外所有事件,工作于所有可见域。

模拟的服务

图3显示使用nc(netcat)连接Dionaea开放端口(80)和未开放端口(81)时蜜罐的处理情况。连接端口80(蓝色框内)时Dionaea接受连接,根据应用服务模拟模块中的实现提供低交互式的模拟交互环境,并将记录网络会话过程;而连接81(红色框内)端口时连接被Dionaea拒绝,仅通过pcap模块记录连接尝试。

漏洞扫描

使用漏洞扫描软件扫描Dionaea蜜罐,可以看到软件识别出多个安全漏洞,虽然这些漏洞都不实际存在。使用Nessus扫描时,共扫描出5个高危漏洞、13个中等威胁漏洞和28个低威胁漏洞,而用OpenVAS进行扫描,选用模式“Full and fast”,扫描出1个高危漏洞、1个中等威胁漏洞和17个低威胁漏洞。

从扫描结果可以看出,Dionaea虽然可以捕获针对漏洞的攻击数据,但在模拟漏洞吸引攻击方面还做的不够,更多的漏洞模拟理论上可以捕获更多的攻击数据。当然,这是低交互式蜜罐普遍存在的问题,需待以后进一步研究。

事件记录的读取

Dionaea提供两个python脚本用于事件数据库的简单读取查看,脚本在安装源码保存位置的modules/pythom/目录下。

脚本readlogsqltree.py可以读取数据库文件logsql.sqlite中保存的攻击连接信息,包括网络连接信息、时间、针对的漏洞、shellcode调用的API和参数、下载文件的url,若配置过virustotal 提交分析,还可以显示提交分析的结果,如下命令格式输出24小时内的事件记录:

脚本gnuplotsql.py统计事件数据库中记录的连接数,然后输出统计图形。可以按日期统计不同协议、不同连接类型的连接数。使用前需安装gnuplot程序:

下面的命令执行后,将生成所有连接和smbd 、epmapper、mssqld、httpd、ftpd五种协议的连接统计图,同时输出按年和月统计的图形:

还可以直接使用能读取sqlite格式数据库文件的软件查看事件记录。如windows下的软件SQLiteSpy。

图3 nc连接80和81端口Dionaea蜜罐输出

图4 校外服务器数据库连接统计图示例

Dionaea进阶使用高级功能

除默认功能外,Dionaea还提供一些非常实用的扩展功能,或者增强信息获取能力,或者帮助对恶意攻击和恶意文件进行分析。

图5 Virustotal扫描反馈的部分结果(Conficker蠕虫)

图6 xmpp日志提交流程

配置p0f程序提供远程主机OS信息

程序p0f用于通过网络连接被动识别远程操作系统指纹。在配置文件中工作模块modules部分的ihandlers结构中开启p0f,可以获取连接的远程操作系统信息。

使用此功能需要预先安装p0f:apt-get install p0f。使用时,先以命令“sudo p0f -i any -u root -Q /tmp/p0f.sock -q -l”启动p0f,之后启动Dionaea蜜罐。当有连接进入时就能获取p0f判断的操作系统信息,此信息同时保存到数据库中。

多网络接口支持

Dionaea可安装于多网卡主机,同时监听多个网络接口。默认情况下Dionaea自动获取监听IP,存在多IP时,需要更改配置文件listen部分为手动填写IP,同时添加所需多个IP。举例如下:

Dionaea的样本扫描和分析

Dionaea支持以http/POST形式将下载的恶意文件自动提交到第三方分析机构,如VirusTotal,CWSandbox,Norman Sandbox,也可提交到自己配置的服务器。

VirusTotal提供对提交的文件进行多引擎扫描服务。Dionaea对VirusTotal做了支持,设置提交恶意文件到VirusTotal,首先要到网站http://www.virustotal.com注册,获取网站提供的apikey,再把apikey写到配置文件中工作模块modules部分的virustotal结构中,同样到ihandlers结构开启virustotal功能。之后蜜罐如果成功下载恶意文件,则会自动提交到virustotal,提交信息和反馈的检测信息保存到数据库中。

XMPP日志提交

Dionaea支持分布式部署,蜜罐节点可以通过xmpp协议将捕获的攻击的信息(与事件数据库文件logsql.sqlite中内容相同)和下载的恶意文件提交到中心服务器。使用此功能需在Dionaea配置文件中ihandlers结构开启xmpp提交功能,在xmpp提交配置选项部分填写提交参数,同时在中心服务器安装xmpp服务程序,中心数据库,并运行将xmpp服务收到的数据记录到数据库中的脚本。

如图,每个dionaea节点将捕获的信息发送到xmpp服务器,dionaea源码包中提供的python脚本modules/pythom/util/xmpp/pg_backend.py可以提取xmpp记录的信息,并将这些信息储存到数据库中。XMPP服务和数据库安装在同一台主机,数据库默认使用postgresql,安装好后用源码包中modules/pythom/util/xmpp/pg_schema.sql文件完成建表操作。这样,分布式蜜罐捕获的信息集中到postgresql数据库中,可以通过pgadmin等管理工具或web方式查看。

Dionaea利用XMPP日志提交实现分布式功能,通过查询中心数据库,可以方便快捷地获取大范围内网络安全威胁信息,为进一步分析提供基本条件。

Dionaea低交互式蜜罐是一款安装配置简单,具有较强恶意攻击捕获能力和扩展能力的蜜罐系统,它支持分布式部署,可以很方便地通过大范围部署提高对网络恶意攻击的监测能力。当然,Dionaea不能完全避免低交互式蜜罐的普遍弱点,即对网络服务的模拟与真实服务存在差距,可能无法捕获某些对环境敏感的攻击,这个缺点目前只能通过不断扩展模拟服务脚本,以及结合专用服务的蜜罐软件来进行完善。

(作者单位为清华大学网络中心,CCERT应急响应组)

华胜天成打造产品化服务

华胜天成日前发布“华胜天成i3投资管理软件”,产品可对投资过程进行全方位的信息化管理。从投资管理者切实需求出发,依据投资管理概念模型三个维度、投资管理的三个层次与三套指标体系,帮助投资管理者构建标准化、体系化、实用性强的投资管理统筹平台。

据记者了解,华胜天成i3不仅能够为市场提供产品化服务,而且产品还具备专业成熟的技术平台及模型,可根据企业与政府等用户实际需求而定制开发相应产品套装,以满足用户对于投资管理的信息化需求。目前,华胜天成i3分为企业版和政府版两个版本。

猜你喜欢
蜜罐配置文件端口
一种有源二端口网络参数计算方法
从Windows 10中删除所有网络配置文件
一种端口故障的解决方案
用软件处理Windows沙盒配置文件
多按键情况下,单片机端口不足的解决方法
互不干涉混用Chromium Edge
蜜罐蚁
被自己撑死的蜜罐蚁
基于Zookeeper的配置管理中心设计与实现
基于博弈的蜜罐和入侵检测系统最优配置策略