返回介绍

13.7 蜜罐体系建设

发布于 2024-10-11 22:28:32 字数 9441 浏览 0 评论 0 收藏 0

除了依靠各种安全配置基线、部署防御设备直面安全问题外,在内网我们经常使用一些欺骗技术来发现可疑行为,比如蜜罐。蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。蜜罐分为低交互型蜜罐和高交互型蜜罐两种类型,大家所熟知的 honeyd 就属于低交互性蜜罐,这是一个非常优秀的框架,内置了一些简单的脚本,用来模拟一些常见的服务,用户可以基于 honeyd 提供的脚本对模板进行改写,使模拟的效果更加逼真。

在企业内网,我们的对手可能是外部黑客,也可能是内部蓝军,更有可能是恶意的员工,所以我们的蜜罐建设不是简单部署 honeyd 就完事了,我们需要考虑得更多、更体系化。

1.蜜域名

蜜域名,就是在内网或者互联网 DNS 上发布一个无法轻易猜到的域名,在 DNS 服务器配置不存在区域传送漏洞的情况下,一般不会轻易被访问到,别有用心之人可以通过域名暴力枚举来发现。一旦有人请求这个域名,就表明其有一定的可疑性。

2.蜜网站

上面的蜜域名,可以对应到一个网站,或者这个网站压根就没有域名,也不与其他网站有链接访问关系,也不提供给别人访问,但别有用心之人也可能会访问到。或者就是一个正常的网站,但我们利用 ModSecurity 在返回给用户的 robots.txt 内容中动态插入我们的内容,引导恶意爬虫或别有用心的攻击者来访问。假设正常的网页的 robots.txt 内容如下:


User-agent: *

Disallow: /api/

Disallow: /inc/

Disallow: /cgi-bin/

Disallow: /admin/

相关的含义就不解释了,如果我们往里面写入一些类似 logs、backup 等的目录,会不会有人感兴趣?我们写几条规则到 honypot_url.conf 文件,重点内容如下:


SecContentInjection On

SecRule REQUEST_FILENAME "@streq /robots.txt" \

"id:'999002',phase:4,t:none,nolog,pass,append:'Disallow: /bak.%{time_epoch}/ # website backup files'"

SecRule REQUEST_FILENAME "^/bak.\d{10}" \

"id:'999003',phase:2,t:none,log,block,msg:'WAF_Honeypot Alert: someone access the fake url.'"

当尝试访问的时候,会发现返回的 robots.txt 未尾有一行我们动态插入的内容:


Disallow: /bak.1427434973/ # website backup files

当接着访问/bak.1427434973 时,会触发错误日志:


[Fri Mar 27 13:43:00 2015] [error] [client 192.168.4.78] ModSecurity: Warning. Pattern match "^/bak.\\\\d{10}" at REQUEST_FILENAME. [file "/etc/httpd/modsecurity.d/honypot_url.conf"] [line "7"] [id "999003"] [msg "WAF_Honeypot Alert: someone access the fake url."] [hostname "192.168.4.56"] [uri "/bak.1427434973/"] [unique_id "VRTt5H8AAAEAABDzAM4AAAAB"]

或者我们在某个登录页面中插入伪造的注释信息,引诱别人访问,而正常用户是不会去访问的。以 OSAdmin 管理后台为例,表单代码<form name="loginForm"method="post"action="">,我们用 ModSecurity 在这之前写入一些 HTML 注释,新建规则文件 honypet_comment.conf,内容如下:


SecContentInjection On

SecStreamOutBodyInspection On

SecRule REQUEST_FILENAME "@streq /login.php" "chain,id:'999004',phase:4,t:none,nolog,pass,setvar:'tx.fake_comment=<form name=\"loginForm\" method=\"post\" action=\"\">'"

SecRule STREAM_OUTPUT_BODY "@rsub s/%{tx.fake_comment}/<!-- the old login page is login_bak.php.bak ,backup by admin -->%{tx.fake_comment}/d"

SecRule REQUEST_FILENAME "@streq /login_bak.php.bak" "id:'999005',phase:1,t:none,log,block,msg:'WAF_Honeypot Alert: someone access the fake url by html comment'"

当有人尝试查看 HTML 注释的时候,会发现如下内容:


<!-- the old login page is login_bak.php.bak ,backup by admin --><form name="loginForm" method="post" action="">

手工尝试访问,会触发告警,Apache 错误日志如下:


[Fri Mar 27 14:26:08 2015] [error] [client 192.168.4.78] ModSecurity: Warning. String match "/login_bak.php.bak" at REQUEST_FILENAME. [file "/etc/httpd/modsecurity.d/honypot_comment.conf"] [line "8"] [id "999005"] [msg "WAF_Honeypot Alert: someone access the fake url by html comment"] [hostname "192.168.4.56"] [uri "/login_bak.php.bak"] [unique_id "VRT4AH8AAAEAABFiAzMAAAAD"]

3.蜜端口

蜜端口有两类:一类是传统的 Web 应用跑在非 80 端口上;一类是运行 TCP/IP 应用监听端口。比如,我们结合 Modsecurity 来发现针对不常见端口的尝试攻击,选择一个没有对外公布的 IP(即没有 DNS 解析到此 IP),开启一个或多个非 80 端口,这是第一步。注意这个端口的选择也是有讲究的,仔细看一下 Nmap 默认扫描的端口中包含哪些,你是希望通过常规的端口扫描能让黑客发现这个端口,还是希望黑客通过全端口扫描才能发现,完全取决于你。在涉及的防火墙(如 iptables)、负载均衡(如 F5、LVS)上发布此 IP 与相应的端口,在 apache 上配置监听相关端口并设置好虚拟站点,即添加一个/etc/httpd/conf.d/hyweb.conf,关键内容参考如下:


Listen 8081

<VirtualHost *:8081>

ServerAdmin webmaster@localhost

DocumentRoot "/var/www/html/hy1"

ServerName localhost

ServerAlias localhost

ErrorLog "logs/hy1-error.log"

CustomLog "logs/hy1-access.log" common

<Directory "/var/www/html/hy1">

Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

即让 Apache 监听 8081 端口,并指定一些目录及日志。注意,我们允许浏览目录。接下来,我们在 ModSecurity 上添加一个规则文件 honypot_port.conf,关键内容如下:


SecRule SERVER_PORT "^(81|8000|8080|8081|8084|8888)$" \

"id:'999001',phase:1,t:none,log,block,msg:'WAF_Honeypot Alert: someone access the fake port.'"

上面的意思是,当有人请求访问这些端口时,就会触发这条规则,在日志里写入相关信息告诉管理员有人来访问蜜罐了。

我们测试请求一下,会看到有 ModSecurity 的日志:


--b3fb5601-H--

Message: Warning. Pattern match "^(81|8000|8080|8081|8888)$" at SERVER_PORT. [file "/etc/httpd/modsecurity.d/honypot_port.conf"] [line "19"] [id "999001"] [msg "WAF_Honeypot Alert: someone access the fake port."]

Stopwatch: 1427430048124623 286 (- - -)

Stopwatch2: 1427430048124623 286; combined=51, p1=2, p2=47, p3=0, p4=0, p5=2, sr=0, sw=0, l=0, gc=0

Response-Body-Transformed: Dechunked

Producer: ModSecurity for Apache/2.7.3 (http://www.modsecurity.org/).

Server: Apache/2.2.15 (CentOS)

Engine-Mode: "ENABLED"

同时 Apache 的错误日志里也会有一条记录,如下所示:


[Fri Mar 27 12:20:48 2015] [error] [client 192.168.4.78] ModSecurity: Warning. Pattern match "^(81|8000|8080|8081|8888)$" at SERVER_PORT. [file "/etc/httpd/modsecurity.d/honypot_port.conf"] [line "19"] [id "999001"] [msg "WAF_Honeypot Alert: someone access the fake port."] [hostname "192.168.4.56"] [uri "/"] [unique_id "VRTaoH8AAAEAABAJANMAAAAB"]

4.蜜服务

低交互性的蜜服务,用 honeyd 模拟脚本就可以了,比如要模拟 FTP 服务,add windows tcp port 21"sh scripts/ftp.sh",这句的意思是让 honey 调用 scripts 目录下的 ftp.sh 脚本,访问效果如图 13-11 所示。

随着 Docker 的兴起,有些商业蜜罐产品开始利用 Docker+iptables 转发来做调度,不同的 Docker 里运行各种不同的服务,比如 RDP、SSH、Telnet、MySQL、Redis 等,注意后端不再是一个模拟的交互环境,而是一个真实的服务,图 13-12 展示了某商业产品的蜜罐功能。

而前端需要探针服务器配合,企业按需部署,探针上的 Agent 将流量按需引导到后端蜜罐上,如图 13-13 所示。

图 13-11 Honey 模拟 FTP 应用

图 13-12 某商业产品的蜜罐功能

图 13-13 某商业产品的蜜罐探针

当我们用自动化脚本对网络上各种服务进行检测时,会触发蜜罐事件,比如图 13-14 所示的 SSH 尝试用弱口令登录产生的事件。

密罐不仅能记录访问来源,还能记录用户密码,当然这需要对 OpenSSHD 源码做适当的修改;同理,对 MySQL 源代码做适当修改也能记录下 MySQL 的操作指令,如图 13-15 所示。

图 13-14 蜜罐记录的 SSH 事件

图 13-15 蜜罐记录的 MySQL 事件

这样的蜜罐,比单纯的记录 TCP 访问连接要好很多,但由于每个服务都需要做适当的修改,所以也有一定的成本。

5.蜜库蜜表

在企业内网真实的数据库服务器上,新建一个假的库或者表,同时记录针对假库假表的访问,这就是我们说的蜜库蜜表了。恶意人员可能关心企业内部的组织结构、薪酬信息甚至生产系统中的客户资料、交易信息等,我们在建假库假表的时候,适当模仿,可能更有迷惑性。

6.蜜文件

在一些重要的场所,比如机房维护操作间电脑上,放一些精心准备的 Word 和 Excel 文件,一旦有人想将这些文件带离,在终端或网络上的 DLP 程序能及时发现;如果恶意人员使用一些技术手段绕过 DLP,在文件打开的时候,也会请求特定的 URL 来“告诉”我们,这些文件已经泄露出去了。所谓的精心准备的文件,包括几个方面:

·精心设置文件名、时间、作者属性等,既吸引人又不至于让人怀疑,比如“XX 银行股权分配计划.doc”。

·精心放置目录,既不能放到桌面、磁盘根目录这么显眼的地方,也不能隐藏太深。

·文件制作过程中,利用插入图片或链接的方式,设置一个 URL 带上一些内部标识的参数,同时尽量做到让这些图片或链接非常不起眼。

·文件制作好之后,需要在 DLP 系统上配置有针对性的策略,以发现相应的泄露行为。

7.全民皆兵

传统的蜜罐在企业内网部署,维护量较大,而且不便于统一管理,市面上已经有新的蜜罐产品,逐步在解决此类问题。

全民皆兵是一种防卫思想,最终的目标是将侵略者埋葬在全民皆兵的汪洋大海里。我们借用这个思想,企业里本身就有海量的终端,我们需要在这些终端上进行适当的武装,比如随机蜜罐功能就是一个例子。我们在终端管理软件里加入随机蜜罐功能,后台配置相应策略之后,终端有 5%~15%的概率运行 HTTP、FTP 服务程序,运行 1~2 小时后自动退出,当然如果终端上已有相应端口监听,就不会运行。有些商业产品也开始利用类似的思路,在终端上监听一些端口(当然,如果与系统已有端口冲突则放弃),然后将外来访问蜜端口的请求通过 SOCKET 转发到后端真实的服务器上,同时记录相应的连接、断开情况,包括时间、来源 IP、来源端口等,而且这种基于 Agent 的蜜罐还可以通过后台策略进行统一调度。图 13-16 为某商业产品的策略。

图 13-16 某商业蜜罐的策略

统一调度后,终端上即会开启相应的端口处于监听状态,如图 13-17 所示。

有了这些功能后,在我们安全管控触角伸不到或者保护不太严格的终端网段,有一些不怀好意的探测或扫描,也会被这种方式发现。

图 13-17 某商业蜜罐本地端口监听

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文