本文我将手把手的带大家来,构建一个高交互型的蜜罐。我们将会利用到两款开源工具sysdig和falco,来帮助我们快速构建这个系统。在正式开始之前,让我们对什么是高交互型蜜罐?以及sysdig和falco做个简单的了解!
一、高交互型蜜罐
一个高交互蜜罐是一个常规的计算机系统,如商用现货(commercial off-the-shelf ,COTS)计算机、路由器或交换机。该系统在网络中没有常规任务,也没有固定的活动用户,因此,除了运行系统上的正常守护进程或服务,它不应该有任何不正常的进程,也不产生任何网络流量。这些假设帮助检测攻击:每个与高交互蜜罐的交互都是可疑的,可以指向一个可能的恶意行为。因此,所有出入蜜罐的网络流量都被记录下来。此外,系统的活动也被记录下来备日后分析。
相较于低交互型蜜罐,高交互型蜜罐由于运行着带有所有漏洞的真实的操作系统,没有使用仿真,攻击者可以与真实的系统和真实的服务交互。因此,允许我们捕获大量的威胁信息,同时也更难被攻击者发现。
二、Sysdig和Falco
sysdig是一款开源的工具,可以捕获并保存当前正在运行的Linux的系统状态及活动。因此这对于我们进行相关进程、网络和I/O活动的离线分析,提供了极大的便利。Sysdig falco是一个活动行为监视器,用于检测和发现应用程序中的异常活动。Falco可以检测和警告涉及使Linux系统调用的任何行为。借助于sysdig的核心解码和状态跟踪功能,可以通过使用特定的系统调用其参数,以及调用进程的属性来触发falco警报。
三、将服务器转换为蜜罐
作为一个合格的蜜罐服务器,都应该具有文件捕获和cifs-utils包,以挂载到保存我们sysdig抓取文件的远程samba共享上。
四、手动安装
Sysdig和falco可以部署在不同的Linux发行版中。以下是在不同发行版中的安装过程:
1.RHEL,CentOS和Fedora下的安装:
- 信任Dralex GPG密钥并配置yum存储库
- 安装EPEL存储库(只有在发行版中不提供DKMS时,才需要使用)。你可以使用“yum list dkms”验证DKMS是否可用。
- 安装内核头文件
- 安装falco
以下为命令执行过程(注意在root权限下运行)
- rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
- curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo
- rpm -i http://mirror.us.leaseweb.net/epel/6/i386/epel-release-6-8.noarch.rpm
- yum -y install kernel-devel-$(uname -r)
- yum -y install falco psmisc
2.Ubuntu,Debian下的安装
基本步骤与上面一致,操作命令如下:
- curl -s https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public | apt-key add -
- curl -s -o /etc/apt/sources.list.d/draios.list http://download.draios.com/stable/deb/draios.list
- apt-get update
- apt-get -y install linux-headers-$(uname -r)
- apt-get -y install falco
五、自动安装
为了让大家能够在任何Linux发行版中快速部署sysdig和falco,我们特意开发了一个简易的chef cookbook,大家可以在GitHub上获取到它。
当cookbook成功执行后,sysdig将开启连续捕获模式,以便持续捕获系统的运行状态和活动。同时falco也开始运行,将所有警报发送到syslog。这里我们需要确保文件捕获已经开启,并将syslog发送到我们设置的集中分析的ELK堆栈。此外,我们还需要检查 sysdig捕获文件目录,是否已经存在于samba共享。最后一步配置弱口令的root帐户,例如passw0rd和test123。
要创建一个蜜罐,我们需要克隆一个合适的受害者机器,并在该系统上运行cookbook。Red Hat,Fedora,CentOS,Debian或Ubuntu操作系统都可以正常运行cookbook。注意!以下命令必须要以root身份运行。
- wget https://packages.chef.io/files/stable/chefdk/1.0.3/ubuntu/16.04/chefdk_1.0.3-1_amd64.deb
- dpkg -i chefdk_1.0.3-1_amd64.deb
以上命令是在Debian操作系统中获取并安装Chefdk。对于其他架构包请参阅此链接。
现在让我们来安装git并克隆cookbook库。
- apt-get install git -y
- mkdir ~/cookbooks
- cd ~/cookbooks
- git clone https://github.com/mwrlabs/honeypot_recipes sysdig-falco
- cd sysdig-falco
在运行cookbook之前,请确保当前我们系统的内核版本为最新版本。这样可以避免内核和kernel-devel包之间的版本不同问题。
然后,我们执行以下命令来运行cookbook:
- chef-client --local-mode --runlist 'recipe[sysdig-falco]'
当cookbook被成功执行后,我们可以看到一个名为mysysdig的文件,在/etc/init.d/目录下被创建。该init脚本将使用以下参数启动sysdig:
- sysdig -C 5000 -W 3 -w /usr/local/src/image.$(date +"%Y%m%d-%H%M%S").gz > /dev/null 2>&1 &
Sysdig将以连续捕获模式启动(选项-W)。使用-C选项,指定捕获文件的大小。最后使用-w选项,将我们捕获的文件保存到/usr/loca/src/目录中。此外,我们还可以通过编辑/sysdig-falco-cookbook/templates/default/目录下cookbook中的mysysdig.erb文件来更改这些选项。
六、Samba服务器
除了蜜罐服务器,我们还需要有一个samba服务器,以便实时发送我们捕获的文件。以下是samba服务器的设置步骤。
- apt-get install samba -y
- smbpasswd -a ubuntu
ubuntu是我们的用户名。创建一个目录,用于保存sysdig的捕获文件。
- mkdir -p /home/ubuntu/image
然后编辑位于/etc/samba/目录下的smb.conf文件,并在该文件的末尾附加以下内容:
- [image]
- path = /home/ubuntu/image
- valid users = ubuntu
- read only = no
最后,让我们来启动samba服务。
- /etc/init.d/samba restart
现在我们可以来启动init脚本了,这将启动sysdig程序。但是在此之前,我们需要在/usr/local/src/目录下,挂载远程文件共享。
- apt-get install cif-utils -y
- mount.cifs -o user=ubuntu //IP_of_samba_server/image /usr/local/src/image/
出现密码提示,输入我们之前设置的密码。
现在我们运行init脚本,以确保falco正在运行,并通过init脚本启动sysdig。
- /etc/init.d/falco status
- /etc/init.d/mysysdig start
七、监控攻击者
我们尝试监测攻击者何时与我们的蜜罐进行互动。我们的蜜罐基本架构如下:
- 作为蜜罐的几台Linux机器
- 一台作为samba服务器的Ubuntu机器
- 一台安装了ELK(Elasticsearch Logstash Kibana)堆栈的Ubuntu机器。
选择ELK堆栈是因为它适合于消耗和分析,来自syslog的sysdig/falco输出的数据。
我们在两个蜜罐上安装了文件捕获,以便将syslog和auth.log都发送到ELK堆栈。
为了检测攻击者,我们监控了Kibana中的身份验证日志(auth.log)。除了身份验证日志,我们正在监控falco警报。例如,下图显示的falco警报,说明了某人与我们的一个蜜罐进行了互动。
我们还可以通过观察sysdig捕获文件的大小,来初步判断是否有人与我们的蜜罐进行了互动。突然增加,则表明有人正在与我们的蜜罐进行互动,因为这些机器上本身的活动很少。
八、实例探究
为了验证我们的Sysdig/Falco蜜罐主机,对攻击者的监控和检测的有效性,我们打算将蜜罐放置在公网的云设备上。
1. 案例研究1
我们将蜜罐暴露在互联网上,很快我们得到了第一个结果。攻击者试图猜解我们的root账户密码,如图。
从上图可以看出,攻击者的行为发生在17:25:00。在17:26:36,我们又捕获了一个不同的IP试图猜解root密码,如图。
我们确信虽然IP不同,但应该是同一人所为。最初,攻击者尝试爆破的IP地址为221.194.44.216,可能使用的是爆破脚本或肉鸡,而后密码被成功爆破后,地址又回到了原IP 103.42.31.138。以下两图显示了它们的相关联性:
从上面的第一张图,我们可以看到,IP地址221.194.44.216有2522个生成的警报(右上角)。这些警报与爆破root密码的失败尝试相关联,如图。
攻击者获取到root密码后,又返回到了原IP 103.42.31.138重新访问目标机器。搜索与此特定IP地址相关联的不同警报,我们发现只有以下两个警报,如图所示。
falco警告显示,有人突破了我们的蜜罐,如下图所示。
我们快速下载sysdig捕获的文件,并运行以下凿子(凿子是用于分析sysdig捕获的事件流的小脚本)。
- sysdig -r image.20160721-1547320 -c list_login_shells
我们使用另一个凿子,通过使用sysdig运行以下命令,基于loginshellid来查看攻击者运行的命令。
- sysdig -r image.20160721-1547320 -c spy_users proc.loginshellid=1743
从falco的警报,我们看到攻击者在/etc/cron.hourly目录中创建了一个名称为zbbpxdqalfe.sh的文件。sysdig能够帮助我们轻松的看到文件的内容,因为sysdig记录了每一个I/O操作。
运行以下命令:
- sysdig -r image.20160721-1547320 -A -c echo_fds fd.filename=zbbpxdqalfe.sh
我们得到以下输出信息。
搜索攻击者运行的命令“mv /usr/bin/wget /usr/bin/good ”,我们发现了一个关于尝试DDoS不同目标的ELF恶意软件二进制的分析。该分析讲述了一种多态恶意软件,在“/bin”或“/usr/bin”目录下创建了具有随机名称的不同可执行文件,我们可以从以下falco警报中看到。
2. 案例研究2
为了更进一步的研究,我们又为系统添加了三个账户,并分别使用了僵尸网络通常会尝试爆破的账户及密码,分别为user,user2,且用户名和密码相同。几个小时后,我们发现有人用用户名“user”进行了登录。十四分钟后,攻击者又再次登录,我们可以从auth.log到kibana看到。
我们检查了falco警报信息,但并没有发现与该事件相关的信息。我们从samba服务器下载了sysdig捕获文件,尝试看看发生了什么。首先,我们使用”spy user” 凿子来查看已执行的所有交互式命令。
- sysdig -r image.20160729-104943.gz0 -c spy_users
我们观察了攻击者执行的一些命令。为了更清楚地看到攻击者试图做什么,我们再次运行相同的凿子,但是这次我们使用proc.loginshellid过滤器字段来限制spy user凿子的输出。从上图可以看出,攻击者的登录名为2308,所以我们运行:
- sysdig -r image.20160729-104943.gz0 -c spy_users proc.loginshellid=2308
并观察以下输出。
我们可以看到攻击者试图为不同的处理器架构运行一些二进制文件。他们试图运行的第一个二进制文件名为kaiten。在google中搜索kaiten二进制文件,我们可以看到,这个恶意软件二进制文件是用C编写的,并且已经在许多漏洞利用数据库站点中公开已久。主要目的是通过利用我们的unix和IoT设备,来实现对不同目标的DDoS。更多信息请点击链接。
分析二进制文件时,我们发现没有一个符号被剥离,这也使得我们更容易对其进行逆向工程。经过一些额外的研究,我们发现github上的一个脚本是用于设置该恶意二进制文件的。硬编码的加密密钥/通道密钥都没有被改变,这也说明攻击者刚刚下载并运行的就是github上的这个脚本。通过对Jackmy$arch二进制文件的逆向我们发现,这些二进制文件通过/usr/bin/sshd替换进程(proc名称)的第一个参数,在ps aux中隐藏其进程列表。
九、总结
以上我们学习了,如何利用Sysdig和falco来快速的构建一个高交互型蜜罐。以及通过两个研究案例,证明了该蜜罐系统的有效性。从中我们也可以看出,对于一个企业或组织而言,建立一套良好的防御体系的重要性和不可或缺性。在安全方面的投入,作为企业而言永远不能吝啬!