题目
题目如上图,安全团队收到生产环境的一台Web服务器存在可疑网络活动的告警。你能否确认是否存在数据泄露,且是什么数据?
数据包分析
将数据包和相关日志文件下载下来后,将PCAP数据包拖到Wireshark。先各网络层级的数据包统计概览。
可以看到TCP占大多数,其中TLS、HTTP的流量占了相当一部分。既然存在TLS流量,且下载下来的文件里,还有一份服务器上使用到的RSA私钥的日志文件secrets.log
,因此大概率是需要用它来解密TLS流量的。
此外,还存在很多的DNS流量。
依旧是先过滤下http的流量看一下,但没发现什么有价值的信息。
其他的TCP流量的话,数据太多,我们目前没有需要过滤的一些条件依据。
此时我们可以看一下题目提供给我们的其它信息。有一个bro
目录,这个目录下是各种日志文件。
其实bro是zeek这款开源网络安全监控工具的前身。Mac下可以使用Homebrew安装zeek。安装好后,使用zeek工具集的zeek-cut
对这些日志进行过滤输出。
先查看conn.log
文件,了解一下网络连接情况。
先使用 head -n 10 conn.log
大致看一下该日志包含哪些字段。
使用以下命令,查看Web服务器上被访问的端口及协议的数据统计情况。
cat conn.log |zeek-cut id.resp_p proto |sort |uniq -c |sort -nr
如上图,可以发现大量的dns流量(通过udp 53端口),以及大量的http/https流量,另外还有1个通过53端口的tcp流量。一般来说,53端口是dns服务所开放的端口,dns请求一般都是走的udp协议,所以这里的tcp 53就有点不太寻常,有必要进一步调查一下。
使用以下命令过滤出tcp 53的这条记录:
cat conn.log |zeek-cut -d id.resp_p id.resp_h ts uid id.orig_p id.orig_h proto |grep -e '^53' |grep tcp
可以看到请求端是 10.10.20.13
这台主机。,且时间是 2017-08-27 02:51:07
.
再回到Wireshark,使用tcp.port == 53
进行过滤。可以看到Time
这一列的值确实跟zeek的日志是对得上的(注意小时要+8)。
右键,Follow
->TCP Stream
. 如下几个图,攻击者做的事情如下:
- 先使用
ping
测试了到mysql数据库服务器的网络连通性; - 使用自己的
exfildb.sh
工具对mysql数据库的数据进行转储,并保存到当前web服务器上,保存名为dbdump
; - 接着使用curl命令,先后将web服务器上的
/etc/passwd
、/etc/shadow
文件内容以及数据库转储文件dbdump
的内容通过https协议渗出到外部服务器pastebin.com
上; - 最后使用
find
命令,同时通过-exec
参数来结合shred
命令对查找的指定文件进行覆盖并删除的操作。
命令详解参考:
hxxps://explainshell.com/explain/1/find
hxxps://explainshell.com/explain/1/shred
知道数据渗出是发送到pastebin.com
这个外部主机。所以再Wireshark使用http.host == pastebin.com
进行过滤。结果却是空的。
这是因为走的https协议,如果要看到明文,就需要RSA的私钥去解密。
在菜单 Preferences
->Protocols
->TLS
,选择密钥日志文件。
点击OK后,就能看到发送到pastebin.com
的明文数据了:
右键,选择 Follow
->HTTP Stream
,就能看到攻击者dump出来的mysql数据库里的数据,在这些数据里面就包含了我们要找的flag: