寻找Linux恶意软件的乐趣和旗帜
来源:https://published-prd.lanyonevents.com/published/rsaus20/sessionsFiles/18130/2020_USA20_HT-R07_01_Hunting-Linux-Malware-for-Fun-and-Flags.pdf
https://www.rsaconference.com/library/presentation/usa/2020/hunting-linux-malware-for-fun-and-flags
一、调查的对象
二、文件系统
2.1 常见的文件元数据
1、名称 name
2、大小 Size
3、类型 Type
(1)常规文件 regular file
(2)目录 directory
(3)符号链接 symbolic link
(4)特殊(设备) specific (device)
4、所有者 ower
(1) user 用户
(2)group 组
5、访问权限 access rights
(1)读、写和执行 read、write和execute
(2)所有者、组和其他 Owner, group and others
6、时间戳Timestamps
(1)访问时间Access
(2)最后修改时间Last modification
(3)最后元数据修改时间Last metadata modification
(4)创建时间Creation date
2.2 查找新文件
1、ls -alt | head
列出最近在当前目录中修改的文件
2、stat $FILE
全部文件的细节,所有的时间都可以被篡改
3、find / -newermt 2019-10-28
—查找10月28日以后修改过的文件
—基于可被篡改的相同元数据
4、file $FILE
识别文件类型
5、包的完整性校验
(1) debsums
-基于dpkg的发行版(Debian, Ubuntu)
(2) rpm va
-基于rpm的发行版(RHEL, CentOS, Fedora)
三、日志
3.1使用auditd
1、Linux审计框架提供了一个审计系统,它可靠地收集关于系统上任何安全相关(或非安全相关)事件的信息。
2、内核的一部分
—内核编译时必须启用 或者有一个可加载的内核模块
—在大多数发行版中启用
3、日志系统调用和其他类型的事件
4、日志可以通过网络发送
auditctl:定义要记录的内容
ausearch:在日志文件中搜索
-日志是文本文件,所以grep和其他工具也可以很好地完成这项任务
3.2 离线文件系统
如果您不能访问正在运行的系统,但有分区的映像。
Capture捕捉:dd if=/dev/sda3 of=$IMAGE_FILE
-也可以通过SSH工作!
浏览Browse: mount -o loop,ro $IMAGE_FILE /mnt
四、系统内存
4.1分析活动进程
确定运行的进程:
– ps auxw
– top, htop
列出打开的文件和网络流
- lsof -p $PID
4.2 procfs
1、Procfs提供了很多有用的细节
2、安装在/ proc
3、每个进程在/proc/$PID上包含一个目录
procfs exe magic link
1、找到执行文件的路径:
ls -l /proc/$PID/exe
2、检索可执行文件,即使它已被删除:
cp /proc/$PID/exe malware.elf
procfs environ
1、/proc/$PID/environ包含进程的环境变量,以空字节null分隔
4.3进程停滞
在不破坏进程资源的情况下停止进程。
– kill -SIGSTOP $PID
恢复先前用SIGSTOP停止的进程
– kill -SIGCONT $PID
4.4 进程内存转储
1、获取Acquisition
– gcore $PID and cp /proc/$PID/exe malware.elf
2、其他获取工具
– memfetch from http://lcamtuf.coredump.cx
3、简单分析
– strings
4、深度分析
– gdb malware.elf $PID.core
4.5 内核内存
1、获取Acquisition
– VM snapshot
– LiME (Linux Memory Extractor)
2、分析Analysis
– Volatility Framework
3、仅在内核被恶意内核模块破坏时有用(rootkit)
五、网络
5.1 网络配置
1、转储iptables规则
– iptables-save
– ip6tables-save
5.2 网络捕获
1、获取Acquisition
– tcpdump -i eth0 -s 0 -w capture.pcap
2、分析Analysis
– tshark -r capture.pcap
– Wireshark
– bro -r capture.pcap
注意:bro改名为zeek了
六、恶意代码分析
6.1 两种方法
1、基于脚本的恶意软件
– PHP
– Perl
– Python
2、恶意软件编译
- ELF可执行文件
6.2基于脚本的恶意代码
可以混淆
——删除空格
——变量重命名
6.3逆向基于脚本的恶意软件
1、大多数编程语言都有一个整理代码的工具:
– Perl -> perltidy
– Python -> PythonTidy,https://pypi.org/project/PythonTidy/
– PHP -> php-cs-fixer
2、使用搜索和替换重命名变量
6.4基于脚本的恶意软件
字符串和文字可以打包
6.5逆向基于脚本的恶意软件
1、总是在一个孤立的环境中工作
2、使用交互式提示来评估部分代码
– Perl -> perl -de1
– Python -> ipython
– PHP -> php -a
3、将eval替换为print
6.6.编译的恶意代码
1、ELF可在系统的本机体系结构中执行
2、更难以理解
3、也可以打包
静态分析Statically
– strings
– radare2
– IDA Pro ($),收费
动态分析Dynamically
– strace
– ltrace for dynamically linked binaries
– gdb, or any other debugger you like
– gcore
当玩恶意软件时,总是在一个孤立的环境中工作