实验

课件内配套案例:pcap attack trace实验使用的pcap包下载

使用 zeek 来完成取证分析

Kali Rolling 发行版注意事项

根据 Kali 官方软件包维护历史页面 显示:

2019-08-04 之后,Bro 的软件包已经从 Kali 官方软件源镜像仓库中移除,因此建议按照 Zeek 官方安装指南Kali 系统上安装和配置 Zeek

安装 zeek

# 2019-08-04 之前
apt-get install bro bro-aux

# 2019-08-04 之后
# ref: https://docs.zeek.org/en/stable/install/install.html#prerequisites
# 如果系统使用的 Python 版本是 2.x
apt update && apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev python-ipaddress

# 如果系统使用的 Python 版本是 3.x
# apt update && apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev

# 下载 zeek 源码包
# 以下默认使用中国传媒大学校内可访问 URL 加速下载
# 校外用户或希望使用当前官网最新版本用户请自行去 zeek 官网下载
wget http://sec.cuc.edu.cn/ftp/soft/zeek-3.0.0.tar.gz

# 解压缩 zeek 源码
tar zxf zeek-3.0.0.tar.gz

# 进入 zeek 源码解压缩后目录
cd zeek-3.0.0

# 生成构建脚本
./configure

# 构建成功后安装到构建脚本默认指定路径 /usr/local/zeek
make && make install

# 将 zeek 可执行文件目录添加到当前用户的 PATH 环境变量
if [[ $(grep -c '/usr/local/zeek/bin' ~/.bashrc) -eq 0 ]];then echo 'export PATH=/usr/local/zeek/bin:$PATH' >> ~/.bashrc;fi

# 重新读取 ~/.bashrc 以使环境变量设置即时生效
source ~/.bashrc

实验环境基本信息

cat /etc/os-release
# PRETTY_NAME="Kali GNU/Linux Rolling"
# NAME="Kali GNU/Linux"
# ID=kali
# VERSION="2019.3"
# VERSION_ID="2019.3"
# VERSION_CODENAME="kali-rolling"
# ID_LIKE=debian
# ANSI_COLOR="1;31"
# HOME_URL="https://www.kali.org/"
# SUPPORT_URL="https://forums.kali.org/"
# BUG_REPORT_URL="https://bugs.kali.org/"

uname -a
# Linux firewall 5.2.0-kali2-amd64 #1 SMP Debian 5.2.9-2kali1 (2019-08-22) x86_64 GNU/Linux

zeek -v
# zeek version 3.0.0

编辑 zeek 配置文件

  • 编辑 /usr/local/zeek/share/zeek/site/local.zeek ,在文件尾部追加两行新配置代码
@load frameworks/files/extract-all-files
@load mytuning.zeek
  • /usr/local/zeek/share/zeek/site 目录下创建新文件 mytuning.zeek内容为
redef ignore_checksums = T;

使用 zeek 自动化分析 pcap 文件

zeek -r attack-trace.pcap /usr/local/zeek/share/zeek/site/local.zeek

出现警告信息 WARNING: No Site::local_nets have been defined. It's usually a good idea to define your local networks. 对于本次入侵取证实验来说没有影响。

如果要解决上述警告信息,也很简单,同样是编辑 mytuning.zeek ,增加一行变量定义即可

redef Site::local_nets = { 192.150.11.0/24 };

注意添加和不添加上述一行变量定义除了 zeek 运行过程中是否会产生警告信息的差异,增加这行关于本地网络 IP 地址范围的定义对于本次实验来说会新增 2 个日志文件,会报告在当前流量(数据包文件)中发现了本地网络IP和该IP关联的已知服务信息。

attack-trace.pcap 文件的当前目录下会生成一些 .log 文件和一个 extract_files 目录,在该目录下我们会发现有一个文件。

file extract_files/extract-1240198114.648099-FTP_DATA-FHUsSu3rWdP07eRE4l
# extract_files/extract-1240198114.648099-FTP_DATA-FHUsSu3rWdP07eRE4l: PE32 executable (GUI) Intel 80386, for MS Windows

将该文件上传到 virustotal 我们会发现匹配了一个 历史扫描报告 ,该报告表明这是一个已知的后门程序!

至此,基于这个发现就可以进行逆向倒推,寻找入侵线索了。

通过阅读 /usr/local/zeek/share/zeek/base/files/extract/main.zeek 的源代码

function on_add(f: fa_file, args: Files::AnalyzerArgs)
        {
        if ( ! args?$extract_filename )
                args$extract_filename = cat("extract-", f$last_active, "-", f$source,
                                            "-", f$id);

        f$info$extracted = args$extract_filename;
        args$extract_filename = build_path_compressed(prefix, args$extract_filename);
        f$info$extracted_cutoff = F;
        mkdir(prefix);
        }

我们了解到该文件名的最右一个-右侧对应的字符串 FHUsSu3rWdP07eRE4lfiles.log 中的文件唯一标识。

通过查看 files.log ,发现该文件提取自网络会话标识( zeek 根据 IP 五元组计算出的一个会话唯一性散列值)为 C0fESj3vbdj3jUOVkd 的 FTP 会话。

C0fESj3vbdj3jUOVkd 会话标识在 conn.log 中可以找到对应的 IP 五元组信息。

通过 conn.log 的会话标识匹配,我们发现该PE文件来自于IPv4地址为:98.114.205.102 的主机。

Zeek 的一些其他技巧

  • ftp.log 中默认不会显示捕获的 FTP 登录口令,我们可以通过在 /usr/local/zeek/share/zeek/site/mytuning.zeek 中增加以下变量重定义来实现:
redef FTP::default_capture_password = T;
  • 使用正确的分隔符进行过滤显示的重要性
# 从头开始查看日志文件,显示前1行
head -n1 conn.log

# Bro的日志文件默认使用的分隔符显示为ASCII码\x09,通过以下命令可以查看该ASCII码对应的“可打印字符”
echo -n -e '\x09' | hexdump -c

# 使用awk打印给定日志文件的第N列数据
awk -F '\t' '{print $3}' conn.log
  • 查看Bro的超长行日志时的横向滚动技巧
less -S conn.log
  • 使用 zeek-cut 更“优雅”的查看日志中关注的数据列
# 查看conn.log中所有可用的“列名”
grep ^#fields conn.log | tr '\t' '\n'

# 按照“列名”输出conn.log中我们关注的一些“列”
zeek-cut ts id.orig_h id.orig_p id.resp_h id_resp_p proto < conn.log

# 将UNIX时间戳格式转换成人类可读的时间(但该方法对于大日志文件处理性能非常低)
zeek-cut -d < conn.log

参考文献

© @黄玮 all right reserved,powered by Gitbook该文件修订时间: 2023-10-11 03:07:46

results matching ""

    No results matching ""