建立一个基本的蜜罐

匿名者  2005天前

2.png

每当我提到我的蜜罐,总会有人问如何设置一个蜜罐,对入门级的程序员来说,在linux系统中配置一个基本的蜜罐并不难。

(注意:这是一篇技术性的文章,如果你不了解基本网络(接口、IP地址、端口等)或者没有对linux系统中的shell有一定的了解,那么这篇文章可能看起来有点懵,对于纯粹的技术人员:我跳过了很多额外的介绍,因为我想把它保持在入门级别的水准)

有几个原因可能会导致您想要建立一个蜜罐。例如:

  • 好奇网络中发生了很多你可能看不到的事。蜜罐能帮您了解发生了什么,您甚至可以识别“正常”流量以外的流量模式。
  • 乐趣对于极客来说,这绝对是娱乐。对于对网络感兴趣的人来说,这是一个很好的入门方式。
  • 社交:我知道一些不对外开放的小组,这些小组把经营蜜罐的人聚集在一起,交换意见和思路。
  • 验证:许多组织都发表声明说互联网中存在许多不安全因素,或者如何快速的预知将要发生或可能发生的事件,但是谁来验证这些发现呢?有了蜜罐,你就可以做到。

扫描器与蜜罐

蜜罐有很多种。然而,当新手想要开始收集数据包时,我发现他们经常将扫描器与蜜罐混淆。

在网络扫描程序中扫描计算机或计算机开放端口,这是主动扫描。一些扫描工具,如zmap和masscan,可以在几个小时内扫描40亿个ipv4的开放端口,通常,机器将会进行首次扫描,然后将结果排序进行更深入的扫描分析。例如,shodan会持续扫描所有开放https(web)服务器的计算机,当他们找到Web服务器时,他们会将其排队等待进行后续扫描。在后续过程中,他们会为这些HTTP头、TLS证书、Web服务器配置等建立索引。

(大多数服务都不会注意到主动扫描,但是这些服务可能对你的主动扫描没有响应。他们可能会试图让你的主动扫描关闭,将你列入恶意网络服务,或者更糟)

相对比之下,蜜罐是被动的,蜜罐不是在互联网中扫描潜在的目标或受害者,而是静静地等待扫描器的检测,正常用户不会偶然的发现一个蜜罐,所以找到您的蜜罐的主要系统将是扫描器和攻击者。

蜜罐的类型

蜜罐有两种类型:交互和非交互。虽然蜜罐是被动地等待数据包的到达,但是交互式蜜罐可以响应传入的网络流量,而非交互式的蜜罐则不会做任何事情。

一个交互式蜜罐可能会存在一些脆弱的网络服务。例如,蜜罐可能假装是ssh的守护进程以记录登陆尝试,这是蛮力攻击者猜解最常用密码的方法,但是交互式蜜罐会带来一些风险。

例如:

  • 如果攻击者在蜜罐中发现缺陷怎么办?他们可能会使用蜜罐来破坏计算机。
  • 一些蜜罐,如假的ftp和假代理服务,可能需要生成一些出站链接来响应恶意请求。(你不希望攻击者意识到这是一个蜜罐,对吗?)但是,这些出站链接最终可能将攻击转发给其他人
  • 一些蜜罐为了显得真实,支持文件上传和下载,这可能是攻击者上传其利用工具的好方法,但是这也意味着他们可以上传色情以及儿童色情等不法内容并将您的服务器用作远程存储。
  • 有许多搭建的蜜罐可以模拟邮件服务、telnet和ssh服务、web服务器、代理等。我通常对这些系统的搭建犹豫不决,因为它们通常功能不完整,并且许多年没有人更新。(它们是稳定的代码吗?或者只是被遗弃了的一些项目。)

就个人而言,我试图远离了大多数类型的交互蜜罐。

另一种选择是非交互蜜罐,这种类型的系统通常只是静止不动或监听,他永远不会与扫描仪/攻击者交互,理想情况下,扫描仪/攻击者甚至不应该意识到它在哪里,虽然不会搜集密码或数据文件,你可以收集有关统计是谁做的扫描类型和攻击是最常见的服务方式。

如果你从未搭建过蜜罐,那么希望你从非交互式蜜罐开始0

配置非交互式蜜罐服务器

一个简单的蜜罐可以监听一个端口,多个端口或每个端口,但是最好不要让他监听正在运行服务的端口,因为他会收集所有内容 -- 扫描程序,攻击者和合法用户。

在我的蜜罐配置中,我的服务器中有两个网络接口。一个具有IP地址但没有任何正在运行的服务。我甚至禁用了所有出站流量 -- 包括TCP RST数据包。(TCP RST数据包通常在扫描程序尝试连接到不运行任何服务的端口时发送)。例如:

iptables -A OUTPUT -o eth0 -j DROP

此命令阻止接口eth0上的所有出站网络流量。使用此配置,任何扫描我的蜜罐的人都不会收到任何回复。他与未使用的IP地址无法区分。

我的第二个网卡有一个运行的Secure Shell(SSH)守护程序。这是我连接到蜜罐服务器进行系统管理和收集数据文件的方式。

如果您没有两个网络接口,那么尝试在非标准端口上运行SSH(40000-65000 / tcp范围内的某些端口可能是个好主意)。例如,您可以将ssh守护程序(/etc/ssh/sshd_config)移动到端口41244上。这样,典型的扫描器和普通攻击者不会找到它,您可以使用非标准端口上的SSH过滤掉所有流量。

iptables -A OUTPUT -o eth0 ! --dports 41244 -j DROP

此命令表示删除通过eth0的所有网络流量,但端口41244上的流量除外。

使用数据包嗅探工具

你需要的第二件事是某种数据包嗅探工具有很多选择,有些选择更好。

  • WiresharkWireshark是一个非常强大的数据包捕获和数据包解码工具如果您已收集数据包,这是解码它们的简便方法。但是,wireshark在长期捕获方面存在问题。wireshark跟踪TCP会话,(每个TCP会话都是源地址,源端口,目标地址和目标端口的组合)每个新的TCP会话都需要分配一点内存。而且由于wireshark永远不会删除TCP会话,它最终会耗尽内存并崩溃。在我的服务器上,wireshark可以运行几天就崩溃。
  • TsharkWireshark是一个图形应用程序;tshark是基于文本的版本。就像wireshark一样,由于跟踪会话太多,tshark会在几天后崩溃。
  • SnortSnort是一个功能强大的数据包嗅探工具和入侵检测系统(IDS)。在过去,snort是一个简单的数据包嗅探工具和蜜罐的好选择。但它已经发展多年,并且更加专注于IDS部分。在我看来,snort不是一个简单的蜜罐的好选择,因为它想要做的功能太多。
  • BRO:像snort一样,Bro是一个完整的IDS系统。它非常强大,非常容易配置,非常大,并且对于简单的蜜罐来说非常便捷。
  • Tcpdump这个工具很简单。没有会话跟踪,最小的数据包解码,它可以永远运行。这只是一个带有可选过滤规则的原始数据包嗅探工具。如果您不知道从哪里开始,请从这里开始。

还有其他数据包捕获的选择,但tcpdump是一个很好的起点。(经过一些过滤规则后,Tcpdump会变得非常强大,所以我为我的蜜罐编写了自己的数据包嗅探工具。但对于一个简单的蜜罐,tcpdump很好用。)

配置tcpdump

虽然tcpdump可以捕获整个数据包,但真正的蜜罐只需要记录IP地址,端口号和网络协议(通常是TCP,UDP或ICMP)。执行此操作的基本tcpdump命令是:

sudo tcpdump -tttt -q -l -i eth0 -n -s0
  • “-tttt”告诉tcpdump以人类可读的形式在每个数据包输出行前面加上当前数据和时间。例如,“2019-05-17 14:39:54.576416”(这是一小部分)。

  • “-q”告诉它安静的运行(最小化输出)。
  • “-l”(小写“L”)指示它使用行缓冲输出。这非常适合将结果传输到文件或其他应用程序中。
  • “-i eth0”指定用于嗅探流量的网络接口。如果你把它关掉,那么它会监听每个界面。但是如果你有一个专门用于蜜罐的网络接口(例如,eth0),那么使用“-i”告诉tcpdump监听哪里。(接口“eth0”可能不适合您。如果您不知道接口的名称,请使用sudo tcpdump -D列出每个可用接口。)
  • “-n”阻止主机名和协议查找。查询DNS并进行名称解析查找可能会降低速度。此外,如果DNS查询尝试使用tcpdump侦听的相同接口,那么它最终可能会捕获自己的网络请求,从而导致网络环路和无限的网络流量。如果你想在蜜罐上查找主机名,那么之后而不是在数据收集期间进行。
  • -s0”确定它应该使用多大的数据包缓冲区。这将解析为默认大小。

如果您只是运行此命令,那么您可能会看到大量的网络流量。(快!按ctrl+C来杀死它!)某些流量可能是由你引起的,其他将由您的本地路由器或网络基础设施引起,你要过滤掉这些。幸运的是,tcpdump有一个非常简单的过滤系统。您只需列出需要排除的所有内容。

例如,我的蜜罐立即看到了网络路由流量(VRRP,STP和ARP)。所以我把它们过滤掉了:

sudo tcpdump -tttt -q -l -i eth0 -n -s0 not vrrp and not stp and not arp

随着那些消失,我开始看到本地IPv6流量(来自以“fe80:”开头的地址)和UDLD流量。(Cisco路由器使用UDLD。这些请求始终具有以太网地址01:00:0C:CC:CC:CC。)所以我将其过滤掉了:

sudo tcpdump -tttt -q -l -i eth0 -n -s0 not vrrp and not stp and not arp and not net fe80::/16 and not ether host 01:00:0C:CC:CC:CC

如果您只有一个网络接口,则还可以添加规则来过滤流量。例如,添加and not port 41244。如果您看到来自同一网络上的其他计算机的网络流量(而不仅仅是您自己的流量),那么您可以添加过滤器以仅捕获蜜罐的流量。例如,如果蜜罐的网络地址是12.34.56.78,那么包括and host 12.34.56.78。(在linux上,hostname -I用来列出你所有的外部网络地址。)

通过所有这些过滤规则,我留下了一个简单的列表,告诉我谁正在扫描我的蜜罐。(我把蜜罐的IP地址换成honey):

2019-05-17 14:56:29.448483 IP 193.106.29.106.44860 < honey.3305: tcp 0
2019-05-17 14:56:51.254279 IP 81.22.45.207.53260 < honey.4450: tcp 0
2019-05-17 14:57:34.326819 IP 213.32.10.149.47041 < honey.11211: tcp 0
2019-05-17 14:57:42.540136 IP 107.170.202.111.36684 < honey.161: UDP, length 43
2019-05-17 14:58:05.864077 IP 81.22.45.206.53279 < honey.49049: tcp 0
2019-05-17 14:58:14.398041 IP 193.32.161.19.44532 < honey.9833: tcp 0
2019-05-17 14:58:16.858401 IP 185.176.26.21.56470 < honey.3499: tcp 0
2019-05-17 14:58:29.418584 IP 77.247.108.79.5134 < honey.5060: UDP, length 404
2019-05-17 14:58:29.423488 IP 77.247.108.79.5134 < honey.5060: UDP, length 405
2019-05-17 14:58:31.468471 IP 14.1.31.218.52989 < honey.445: tcp 0
2019-05-17 14:59:07.238115 IP 185.244.25.235.45446 < honey.2323: tcp 0
2019-05-17 14:59:11.985728 IP 185.209.0.26.46209 < honey.5359: tcp 0
2019-05-17 14:59:32.908400 IP 207.244.86.225.41579 < honey.9224: tcp 0
2019-05-17 14:59:06.462259 IP 185.153.198.224.57633 < honey.22: tcp 0
2019-05-17 14:59:09.028231 IP 173.77.178.28.51219 < honey.445: tcp 0 

在不到三分钟的时间里,我收集了15个数据包的数据。(根据您的网络邻域,上游过滤和带宽而有所不同。)这实际上并不是很多数据; 一个月可能是兆字节。但它显示了互联网上任何系统试图访问我的蜜罐的日期和时间。(因为我没有在我的蜜罐上运行任何服务,所以不应该有人尝试访问它,所以一切都是可疑的。)这个日志告诉我他们的网络地址和端口号(每个地址后面的最后一个“.”符号后面的端口号)和他们要去哪里。端口4450 / tcp是通用ASCII消息传递协议(CAMP)。memcachedb和Apple iCal Server使用11211 / tcp。5060 / udp是SIP(IP电话的语音)。您可以使用Speedguide.netInternet Storm Center中的工具查找每个端口的目的和共同风险。

分析日志

将tcpdump的输出捕获到文件中很容易。

sudo tcpdump -tttt -q -l -i eth0 -n -s0 not vrrp and not stp and not arp and not net fe80::/16 and not ether host 01:00:0C:CC:CC:CC > honeypot.log

从这里,日志文件(例如,honeypot.log)可以轻松导入电子表格或使用命令行工具或基本shell脚本进行解析。就个人而言,我使用一个简单的bash脚本(tcpdumpfilter.sh)来规范化数据格式:

#!/bin/bash
while read Date Time IP ipsrc lt ipdst proto ; do
  # Normalize the protocol name
  case "$proto" in
    (tcp*) proto="TCP" ;;
    (UDP*) proto="UDP" ;;
    (ICMP6*) proto="ICMP6"; ipsrc="$ipsrc.x"; ipdst="$ipdst.x" ;;
    (ICMP*) proto="ICMP"; ipsrc="$ipsrc.x"; ipdst="$ipdst.x" ;;
  esac
  # Remove trailing colon
  ipdst=${ipdst%:}
  # input: tcpdump line with address "dot" port (e.g., 10.1.2.3.23)
  # ouput: tcpdump line with address "space" port (e.g., 10.1.2.3 23)
  echo "$Date $Time $IP ${ipsrc%.*} ${ipsrc##*.} $lt ${ipdst%.*} ${ipdst##*.} $proto"
done

此脚本使数据更易于解析,因为它分隔出端口号并保留数据列。(ICMP没有端口号,因此它们被列为'x'。)

cat honeypot.log | tcpdumpfilter.sh
2019-05-17 14:56:29.448483 IP 193.106.29.106 44860 < honey 3305 TCP
2019-05-17 14:56:51.254279 IP 81.22.45.207 53260 < honey 4450 TCP
2019-05-17 14:57:34.326819 IP 213.32.10.149 47041 < honey 11211 TCP
2019-05-17 14:57:42.540136 IP 107.170.202.111 36684 < honey 161 UDP
2019-05-17 14:58:05.864077 IP 81.22.45.206 53279 < honey 49049 TCP
2019-05-17 14:58:14.398041 IP 193.32.161.19 44532 < honey 9833 TCP
2019-05-17 14:58:16.858401 IP 185.176.26.21 56470 < honey 3499 TCP
2019-05-17 14:58:29.418584 IP 77.247.108.79 5134 < honey 5060 UDP
2019-05-17 14:58:29.423488 IP 77.247.108.79 5134 < honey 5060 UDP
2019-05-17 14:58:31.468471 IP 14.1.31.218 52989 < honey 445 TCP
2019-05-17 14:59:07.238115 IP 185.244.25.235 45446 < honey 2323 TCP
2019-05-17 14:59:11.985728 IP 185.209.0.26 46209 < honey 5359 TCP
2019-05-17 14:59:32.908400 IP 207.244.86.225 41579 < honey 9224 TCP
2019-05-17 14:59:06.462259 IP 185.153.198.224 57633 < honey 22 TCP
2019-05-17 14:59:09.028231 IP 173.77.178.28 51219 < honey 445 TCP

现在我可以开始进行数据分析了。例如,如果我想找到每个目标目标端口怎么办?我可以将所有tcpdump数据捕获到日志文件(honeypot.log)中,然后解析文件!

$ cat honeypot.log | tcpdumpfilter.sh | awk '{print $8,$9}' | sort -n | uniq -c
1 22 TCP
1 161 UDP
2 445 TCP
1 2323 TCP
1 3305 TCP
1 3499 TCP
1 4450 TCP
2 5060 UDP
1 5359 TCP
1 9224 TCP
1 9833 TCP
1 11211 TCP
1 49049 TCP

sort命令以数字方式对值进行排序,uniq计算唯一端口目标的数量。在我运行tcpdump的几分钟内,我已经捕获了两个SIP(5060 / udp)和两个Windows SMB(445 / tcp)查询。如果你让它运行几天,你会看到最常被攻击的东西。最终,您会比较一段时间内的攻击频率,并确定何时出现新漏洞,因为这些端口扫描会有所增加。
另一个有用的命令可识别谁正在扫描您的蜜罐:

$ cat honeypot.log | tcpdumpfilter.sh | awk '{print $4}' | sort | uniq -c
1 107.170.202.111
1 14.1.31.218
1 173.77.178.28
1 185.153.198.224
1 185.176.26.21
1 185.209.0.26
1 185.244.25.235
1 193.106.29.106
1 193.32.161.19
1 207.244.86.225
1 213.32.10.149
2 77.247.108.79
1 81.22.45.206
1 81.22.45.207

awk命令打印第4个字段:扫描程序/攻击者的IP地址。对结果进行排序和计数。通常情况下,您会看到大量的地址,而一小部分地址可以反复看到。
您还可以开始执行DNS和WHOIS查找,以找出每次扫描背后的人员。在这个简短的样本中,我找到了一个伪“研究员”:107.170.202.111解析为“zg-0301f-15.stretchoid.com”。根据他们的网站:

Stetchoid是一个帮助识别组织在线服务的平台。
有时,安全系统(例如防火墙)会错误地将此活动识别为恶意。我们的活动是完全无害的。但是,如果您希望我们不扫描您的基础架构,请提交以下信息:...

Stretchoid不能识别他们是谁。他们没有确定他们正在做什么或为什么他们在161 / udp扫描我的蜜罐。(端口161 / udp是为简单的网络管理协议(SNMP)保留的,并且经常容易受到攻击。)是的,他们把“malicious”拼错了 - 因此它可能不会出现在谷歌搜索“stretchoid and malicious”的结果中。

这个短暂的捕获也抓住了几个云提供商。(207.244.86.225是LeaseWeb,213.32.10.149是OVH SAS。)它抓住了VPN:213.32.10.149由“Asiamax Technology Limited VPN Service Provider Hong Kong”运营。它从已知的攻击子网(185.153.198.224,185.176.26.21,81.22.45.206和81.22.45.207)中捕获了一些地址 - 您从这些子网中看到的几乎所有内容都是扫描和攻击。他们要么寻找攻击目标,要么盲目攻击。

我通常在这个主机分组中寻找两件事。首先,频率计数比其他任何一个都大得多的主机应该脱颖而出。例如,您可能会看到大多数地址在几天内有1-5次攻击,一个主机有100或1000次攻击。那些表明真正活跃(和攻击)的网络地址。

要寻找的第二件事是大量的顺序地址。例如,最后两个地址是顺序的(81.22.45.206和81.22.45.207)。如果我等了足够长的时间,我可能会看到该子网中的每个地址。这是因为它们在整个网络范围内分配扫描/攻击。这简化了已知恶意子网的识别。

如果您深入研究分析,那么您可能会看到集群形式。例如,您可能会看到非连续地址组同时重复执行相同类型的扫描(+/- 1秒)。这些通常是三角测量攻击 - 基于服务器响应之间的时间差异,他们可以尝试对您的服务器进行地理定位。(我经常从中国和Digital Ocean等云提供商的客户那里看到它们。)其他集群可能正在尝试绘制所有互联网路线。由于你的蜜罐没有响应任何东西,他们无法告诉你看到它们,他们无法映射你的蜜罐。

从理论到实践

这个tcpdump解决方案非常适合“我的第一个蜜罐”。但最终您可能希望收集更多类型的数据。这就是Bro和Snort的用武之地 - 他们可以记录访问尝试和特定类型的漏洞。

对于我自己的蜜罐,我记录地址,端口,协议,常见类型的网络攻击以及任何类型的“意外”数据。我一直把我的日志变成一个列表,将网络地址映射回活动类型:已知的“研究”组织,已知的恶意网络,已知的云提供商(以及他们是否充当未知的研究人员或未知的恶意网络),VPN,代理,Tor等。我的列表的某些部分每天更新,而其他部分更新频率较低。

在我的各种网络服务上,我使用此列表快速确定谁进入我的网站。例如,在我的Web服务器收到查询之前,我可以从Shodan,BinaryEdge和其他“研究”组织中发现Web查询。这允许我阻止他们在数据包到达Web服务器之前访问/攻击/“仅检查”我的站点。通过相同的方式,我可以阻止已知的恶意网络流量,然后才能连接到任何东西。(我的列表真的很长,所以我创建了自己DNS黑名单服务器,用于快速查找此列表中的地址。我也一直在考虑销售我的列表的想法。)

高级用途

除了收集有关扫描和目标的数据之外,还可以使用简单的蜜罐来监控出站流量。例如,网络管理员可以收集有关典型办公室网络流量的数据(具有适当的权限)。这样,他们可以为正常使用设置基线。如果异常流量出现峰值,那么管理员可以跳进去看看发生了什么。它可能是计算机病毒或蠕虫的起点,也可能是其他东西。

使用蜜罐,您还可以抓捕“热点”。例如,微软最近修补了一个非常糟糕的远程桌面漏洞。该漏洞允许蠕虫感染易受攻击的系统,并且正在通过诸如“立即更新!严重,远程,'可疑'Windows漏洞”之类的描述进行推广微软警告的Windows漏洞可能导致另一个WannaCry “。

现在,我当然不想淡化这个漏洞的重要性。人们应该修补他们的Windows系统。但是,如果真的是高风险,那么我期待看到僵尸网络和“研究人员”增加对远程桌面服务的扫描(RDP使用3389 / udp和3389 / tcp)。这是过去几周我的蜜罐的RDP攻击:

  计数日期
     88 2019-04-14
    104 2019-04-15
    101 2019-04-16
     86 2019-04-17
    101 2019-04-18
    100 2019-04-19
    108 2019-04-20
     83 2019-04-21
    111 2019-04-22
     97 2019-04-23
    129 2019-04-24
    120 2019-04-25
    132 2019-04-26
     76 2019-04-27
     78 2019-04-28
    105 2019-04-29
    102 2019 -04-30
    118 2019-05-01
    111 2019-05-02
    131 2019-05-03
    114 2019-05-04
     93 2019-05-05
    122 2019-05-06
    125 2019-05-07
     94 2019-05 -08
     97 2019-05-09
    119 2019-05-10
     91 2019-05-11
    103 2019-05-12
     92 2019-05-13
    120 2019-05-14  - 漏洞公布
    140 2019-05-15
    127 2019-05-16
    122 2019-05 -17

这表明RDP每天扫描的数量的增加相对非常小事实上,它恰好与我们在毕业季节看到的扫描的典型增长相吻合。没有什么比这更重要了。如果攻击者没有找到它,那么他们就不会利用它。这似乎并不支持“紧急”和“类似WannaCry”的炒作。

同样,我写很多 博客 文章那里,我目前看到大约25%的扫描和盲目攻击来自这些已知的“研究人员”,还有25%来自云提供商,他们的行为与身份不明的研究人员不同。我声称:如果你减去所有研究人员,云就像研究人员和已知的攻击子网,那么你很快就会发现互联网上相对较少的“实际感染”系统(比如“不到5%的流量”)到我的蜜罐“)。使用蜜罐,您可以确认或驳斥我的声明。

就个人而言,我认为拥有Web服务的每个人都应该考虑至少运行一次简单的非交互式蜜罐。这可用于为您的在线服务创建预期基线,针对潜在问题的早期预警系统,甚至提供可行的防火墙规则。(如果某些子网总是充满敌意,那么为什么不阻止它们在防火墙?)如果你正在寻找一个网络工作,那么你可以在你的简历中加入“蜜罐操作员”,并附上一些已发表的文章;即使“文章”只是在博客上进行思考,它也表明你理解网络不仅仅是说你有理论。

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:http://www.hackerfactor.com/blog/index.php?/archives/841-Building-a-Basic-Honeypot.html

最新评论

昵称
邮箱
提交评论