20199105 2019-2020-2 《网络攻防实践》 第九周作业
这个作业属于哪个课程 :网络攻防实践
这个作业的要求在哪里 : 第九次作业-恶意代码基础知识和分析方法
我在这个课程的目标是 : 学习网络攻防相关技术并进行实践
这个作业在哪个具体方面帮助我实现目标:学习恶意代码基础知识和分析方法
一、知识点总结
1、恶意代码基础知识
1.1恶意代码定义与分类
定义: 恶意代码是一组指令集,其实现方式可以是二进制执行文件、脚本语言代码、宏代码或一段指令流
特征: (1) 恶意的目的(2) 本身是计算机程序(3) 通过执行发生作用
恶意代码类型:根据其执行方式、传播方式和对攻击目标的影响划分
恶意移动代码: 普遍以Web浏览器作为攻击目标
公认的恶意移动代码的变异型可以分为3类:病毒类、蠕虫类和木马程序
恶意代码命名规则: [恶意代码类型.]恶意代码家族名称[.变种号] (但是没有统一标准,恶意代码分类体系较混乱)
恶意代码的起源
1949——第一个提出计算机病毒(最早的恶意代码)概念雏形————冯诺依曼
20世纪60年代——计算机病毒病毒的雏形————“磁芯大战”
1983——国家计算机安全学术研讨会上给出计算机病毒的定义——美国计算机安全专家Fred Cohen
恶意代码的发展趋势
① 恶意代码的复杂度和破坏力不断增强
② 恶意代码技术的创新越来越频繁
③ 关注重点从计算机病毒转移到蠕虫和内核级的攻击工具
1.2计算机病毒
定义:一种能够自我复制的代码,通过自身嵌入其他程序感染,感染过程需人工干预
基本特性:
(1) 感染性
(2) 潜伏性
(3) 可触发性
(4) 破坏性
(5) 衍生性
生命周期: 开发期→传染期→潜伏期→发作期→发现期→消化期→消亡期
病毒分类
按计算机病毒的破坏情况:良性病毒、恶性病毒
按传播媒介:单机病毒、网络病毒
按照入侵的操作系统分类:
DOS病毒:引导性病毒、文件型病毒、混合型病毒
Windows病毒:脚本病毒、宏病毒、PE病毒、网页病毒
其他平台:手机病毒
感染及引导机制
潜在感染目标:
(1)可执行文件
感染方式:前缀感染机制(病毒将自身复制到宿主程序的开始)、后缀感染机制(病毒将自身复制到宿主程序的末端)、插入感染机制(病毒代码放在宿主程序的中间),以上三种最普遍,除此之外还有重复感染、交叉感染等
(2)引导扇区
在系统启动的过程中,通过BIOS定位磁盘的主引导区,运行存储的主引导记录,接着从分区表中找到第一个活动分区,读取并执行这个活动分区的分区引导记录,而分区引导记录负责装载操作系统。病毒在系统启动时先于操作系统截取系统同控制权
(3)支持宏指令的数据文件
现行的一些数据文件允许在读取的时候进行一些数据的修改指令,由此数据文件也具有代码的执行权限,可作为被感染的文件
传播渠道:移动存储、电子邮件及下载、共享目录等
1.3网络蠕虫
定义: 自主运行的恶意代码,不需要将自身嵌入其他程序,一般也不需人工干预。蠕虫通过修改操作系统配置,使其虽操作系统启动而运行,通过主机扫描和攻击网络服务的漏洞进行传播
计算机病毒与网络蠕虫的特性对比
恶意代码类型 | 计算机病毒 | 网络蠕虫 |
---|---|---|
复制性 | 自我复制,感染性 | 自我复制,感染性 |
定义特性 | 感染宿主文件/扇区 | 通过网络自主传播 |
宿主 | 需要寄生宿主 | 不需要寄生宿主 |
传播路径 | 感染文件扇区,通过文件交换或其共享传播 | 直接通过网络传播,包括内网和外网 |
传播是否需要交互 | 通常需要用户交互,如运行一个程序或打开文档 | 一般来说不需要交互 |
组成结构
弹头: 利用目标系统安全漏洞入侵目标系统。常用技术有缓冲区溢出攻击、破坏目标系统服务中的内存结构、文件共享攻击、利用电子邮件传播、利用其它普通的错误配置
传播引擎: 通过在目标系统上执行传播引擎指令,完成蠕虫样本的传播。常利用的网络传播机制有FTP/TFTP/HTTP/SMB/直接传送/单包等
目标选择算法和扫描引擎:一旦蠕虫在受害计算机中运行,目标选择算法开始寻找新的攻击目标,利用扫描引擎扫描每一个由目标选择算法确定的地址,确定其是否可以被攻击。目标选择算法有电子邮件地址、主机列表、被信任的系统、网络邻居主机等。这里就是扫描策略
有效载荷:附加的攻击代码,执行一些特殊目地的操作。包括植入后门、安装分布式拒绝服务攻击代理、组建僵尸网络、执行一个复杂计算等
1.4后门和木马
后门: 能够绕开安全控制机制,为攻击者提供访问路径。后门为攻击者提供不同类型的访问通道,包括本低权限提升和本地帐号、单个命令远程执行、远程命令行解释器访问、远程控制GUI、无端口后门
特洛伊木马: 伪装成软件的恶意代码。主要用于以下目的:欺骗用户或者管理员安装木马程序;隐藏在计算机的正常程序之中,通过与后门程序结合形成木马后门
1.5僵尸程序与僵尸网络
僵尸网络:攻击者传播僵尸程序控制大量主机,通过一对多的命令与控制信道组成攻击网络,是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态基础上发展融合而产生的一种新型攻击方式
僵尸网络的功能结构
主体功能模块(核心): 命令与控制模块(实现僵尸网络定义特性)、传播模块(实现网络传播特性)
僵尸网络类型: IRC僵尸网络(基于IRC互联网实时聊天协议构建)、HTTP僵尸网络(Web网站方式构建)、P2P僵尸网络(P2P协议构建)
IRC僵尸网络工作机制
(1)感染:攻击者通过各种传播方式是的目标主机感染僵尸程序
(2)注册:僵尸程序在目标主机上自动运行,使其连接到服务器
(3)动态IRC服务器映射:攻击者连接到服务器上就可以查看那些机器已经被感染
(4)发送攻击命令:攻击者加入IRC命令控制信道中,通过服务器给目标主机发送json格式的攻击命令
(5)迁移服务器:为防止服务器1遭破坏导致整个僵尸网络瘫痪
(6)查看攻击效果:目标机的攻击效果存放在数据库,攻击者可直接访问数据库
HTTP僵尸网络
-
使用HTTP协议构建控制信道可以让僵尸网络控制流量湮没在大量的互联网Web通信中,从而使得基于HTTP协议的僵尸网络活动更难被检测;另外,使用HTTP协议构建控制信道一般都可以绕过防火墙
-
采用HTTP僵尸网络的僵尸程序有Bobax、Rustock、Clickbot等
P2P僵尸网络
- 基于IRC协议和HTTP协议的命令与控制机制均具有集中控制点,这使得这种基于客户端-服务器架构的僵尸网络容易被跟踪、检测和反制。P2P僵尸网络会建立一个相对分散的网络环境,所有的目标主机都互相连接并且进行通信,从而不再需要一个中心服务器
1.6 内核套件Rootkit
定义:在用户态通过替换或修改兄关键可执行文件,或在内核态通过控制操作系统内核,用以获取并保持最高控制权的一类恶意代码
根据操作系统的分层,Rootkit可以分为用户模式 和内核模式
- 用户模式Rootkit:恶意修改操作系统用户态的程序和库文件,达到隐藏目的(上层程序和其它用户应用程序无修改)。主要工具分为五种类型:提供后门访问的二进制替换程序、隐藏攻击者的二进制替换程序、用于隐藏但不替换的二进制程序、一些零散工具如网络嗅探器、安装脚本。
windows系统中用户模式Rootkit的三种不同技术
Windows为了支持第三方工具扩展Windows的内置功能特性,提供了一些开发接口。用户模式rootkit可以使用这些开发接口,将自身实现的恶意功能逻辑插入到现有的Windows函数之间,无需覆盖Windows代码
Windows使用WFP机制,来防止操作系统关键文件被修改或替换,rootkit想要覆盖操作系统关键文件,必须使WFP功能失效。
用户模式rootkit还可以使用DLL注入和API挂钩技术,把恶意代码直接加入运行进程的内存空间
- 内核模式Rootkit:恶意修改操作系统最核心的内核,从而隐藏自身。主要有如下方式:文件和目录隐藏、进程隐藏、网络端口隐藏、混杂模式隐藏、改变执行方向、设备截取和控制。
2、恶意代码分析方法
2.1 概述
恶意代码分析与良性代码分析的对比
恶意代码分析的技术方法主要包括静态分析 和动态分析
静态分析的技术手段
-
反病毒扫描:通过现成的反病毒软件扫描分析样本,识别病毒的种类、家族和变种信息
-
文件格式识别:使用文件格式识别工具file工具(windows、类Unix都可),或PEiD、FileInfo、FileAnalyzer等
-
字符串提取分析:获取恶意代码实例名、帮助或命令行选项、用户会话、后门口令、相关URL、E-mail信息和包含库文件和函数调用
-
二进制结构分析:获取程序的头部摘要信息、目标文件运行架构、重定位入口、符号表入口、不同的代码段、编译代码时使用的程序等
-
反汇编与反编译:将二进制程序,转化成汇编代码和高级语言代码。常用反汇编软件有IDA Pro、Ollydbg、W32Dasm、VC++等,反编译软件针对不同语言有不同的工具
-
代码结构与逻辑分析:获取函数调用关系图和程序控制流图
-
加壳识别与代码脱壳:加壳是对代码进行加密、多样性、多态和变形的机制,脱壳就是恢复代码加壳前的原有形态
1. 加密机制一般采用固定的代码加密器来对二进制程序进行处理,以改变代码存在形态;
2. 多样性技术使用了多样化的解密器,避免单一解密器带来的弱点;
3. 多态技术使恶意代码能够通过插入花指令、无序指令变换、寄存器置换等方式随机变化解密器,实现恶意代码实例的唯一性;
4. 变形技术直接在恶意代码原有形态上通过各种代码混淆技术来变换代码的形态。
2.2 恶意代码动态分析技术
技术列表
-
基于快照对比的方法和工具:对比恶意代码运行前后差异,这种方法简单易用,但无法监控和分析恶意代码的中间行为
-
系统动态行为监控方法:目前恶意代码行为分析中最为核心和使用的技术,对于恶意代码的行为动作进行实时监控、记录和显示
-
网络协议栈监控方法:使用本地网络中的一台主机进行监控,之前的nmap、Nessus实验就属于这部分
-
沙箱技术:提供了封闭环境以保证安全,在沙箱中运行代码不能修改用户系统
-
动态调试技术:在程序运行时对它执行过程进行调试的技术过程
恶意代码分析环境
- 恶意代码发烧友的分析环境:交换机或集线器把所有计算机连接在一起
- 基于虚拟化构建恶意代码分析环境:硬件代价最小,但是一定要断网!!
- 用于研究的恶意代码自动分析环境:专业人员使用的,分为静态分析机(静态分析方法)、动态分析机(轻量级并行沙箱技术)、网络分析机(网络嗅探技术)和综合分析机(对上述三类分析机的分析报告进行综合处理)
实践一:恶意代码静态分析
任务:对提供的rada恶意代码样本,进行文件类型识别,脱壳与字符串提取,以获得rada恶意代码的编写作者。
• 使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具。
• 使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理。
• 使用字符串提取工具,对脱壳后的 rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
文件格式类型识别工具:file工具 参考资料: Linux file命令 | 菜鸟教程
- 使用file命令查看RaDa.exe的文件类型,看到RaDa.exe是一个Windows PE可执行文件,并且有图形化窗口
- 使用PEiD工具查看RaDa.exe的基本信息,这里可以看到文件的入口点、偏移、文件类型、EP短、汇编程序以及加壳类型
- 使用strings命令查看RaDa.exe中可打印字符串
出现乱码的原因是因为文件被加壳,正常字符无法显示
- 使用超级巡警之虚拟机自动脱壳器(winXP自带)将该RaDa.exe进行脱壳,生成RaDa_unpacked.exe
(这里我以为脱壳是一个“漫长的过程”,等啊等,结果发现我没点“给我脱”╥﹏╥… 点完秒出结果)
出现在文件夹里
- 再扫描RaDa_unpacked.exe,发现该程序是使用VB进行编写开发
- 再用strings查看RaDa_unpacked.exe,没有乱码了
脱壳成功,可以从中寻找有用信息
__vbaVarMove 变量在内存中移动,或将一个变量值串拷贝到内存
__vbavaradd 两个变量值相加
__vbavarsub 第一个变量减去第二个变量
__vbavarmul 两个变量值相乘
__vbavaridiv 第一个变量除以第二个变量,得到一个整数商
__vbavarxor 两个变量值做异或运算
__vbafreevar 释放出变量所占的内存,也就是把内存某个位置的变量给抹掉
__vbaLenBstr 获得一个字符串的长度
实践二:分析Crackme程序
实践挑战:使用IDA pro静态分析或者动态分析crackme1.exe和crackme2.exe,寻找特定的输入,使其能够输出成功信息
- 使用file命令查看crackme的文件类型
两个crackme.exe都是32位windows下PE文件,没有图形界面,是命令行程序
开始破解 o( ̄▽ ̄)ブ
- 尝试运行该程序,试探其输入格式
- 有两种返回,一种是
“I think you are missing something.”
,这个猜测是参数数目不对的提示;另一种是“Pardon? What did you say?”
,猜测是参数错误的提示
因此crackme1.exe应该只有一个参数
IDA Pro是一种递归下降反汇编器,特有的IDA视图和交叉引用,可以方便理解程序逻辑和快速定位代码片断,便于修改。winXP自带一个测试版IDA Pro demo,一个免费版IDA Pro free,那肯定是选后者
- 在IDA Pro中打开crackme1.exe,通过Strings页面可以查看到该程序中出现的明文字符串,发现了未出现过的字符串
I know the secret、You know how to speak to programs,Mr Reverse Engineer
猜测前者为我们需要的口令,后者为口令成功输入的反馈。
- 将crackme.exe后的参数设置为
I know the secret
,果然另一个字符串作为返回
- 在IDA Pro导航栏的右下角有几个树状图形,选择红色的打开函数调用的结构图
- printf显然是C语言的输出函数,strcmp是字符串比较函数,这里应该是用于比较口令
- 接下来查看
sub_401280
的汇编代码(想当年汇编语言也是一门硬课),可以使用search直接找到代码所在位置
- 在IDA Pro导航栏选择蓝色树状图标志查看程序执行逻辑,红线是False分支执行的,绿线是True分支执行的
- 放大可以更直观的看到各个模块的汇编代码
- 倒数第二行
cmp [ebo+arg_0],2
为判断程序是否有两个参数
在c语言中,main函数通常为int main(int argc,const char **argv)
,即第一个参数argc对应argv的大小,第二个参数对应命令行的格式。如在命令行输入crackme1.exe 1,那么参数对应的值为argc=2,argv={”crackme1.exe”,”1”}
,将第二个参数与字符串I know the secret
作比较,正确则输出You know how to programs
,错误输出Pardon? What did you say?
。(这里我们一开始输入为1)
前面有说到strcmp函数,用“I know the secret”
对应的字符串和[eax]
对应的字符串(用户输入的口令)相比较,通过比较的结果反馈口令是否正确。
crackme2.exe的分析步骤与crackme1.exe大致相同
- 尝试参数
- 再看strings页面,不同的是除了
“I know the secret”
还多了一个“crackmeplease.exe”
- 查看sub_401280的汇编代码,使用search搜索代码,会得到这样的结果,从图中可以看到
sub_401280
代码的开始与endp结束
- 查看'sub_401280'程序执行逻辑
- 倒数第二行还是
cmp [ebo+arg_0],2
判断程序是否有两个参数,若为True则用strcmp函数对argc里面的第一个字符串,即程序名,和“crackmeplease.exe”
进行判断,若为False就返回“I think you are missing something.”
(一开始尝试参数时的输出)。
通过程序名判断后,用户输入的口令与”I know the secret”
判断
crackme2.exe比crackme1.exe多了一个程序名的判断过程
- 测试一下
- 成功之后呢?再回到程序执行逻辑图
- 中间的路线是判断
”I know the secret”
返回True以后,mov [ebp+var_4], 0
初始化一个临时变量,使用cmp命令对[ebp+var_4]
与21h
进行比较,不大于则执行putchar输出。判断时采用的是一个循环, 将unk_403080
中的字符逐个与0x42
进行异或运算
汇编语言指令总结:
MOV:把源操作数送给目的操作数
ADD:加法指令
SUB:减法指令
CMP:比较
Call:调用函数
INC:自加一
DEC:自减1
PUSH:进栈
OP:出栈
Jmp:跳转指令
实践三:样本分析实践——分析一。个自制恶意代码样本rada并撰写分析报告
回答问题:
• 提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
• 找出并解释这个二进制文件的目的
• 识别并说明这个二进制文件所具有的不同特性
• 识别并解释这个二进制文件中采用的防止被分析或被逆向工程的技术
• 对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
• 给出过去已有的具有相似功能的其他工具
奖励问题:可能查出这个二进制文件的开发作者吗?如果可以,在什么样的环境下和什么样的限定条件下?
- 使用FileAnalysis分析文件MD5值(摘要),得到结果
caaa6985a43225a0b3add54f44a0d4c7
- 点击运行RaDa.exe,没有任何反应,但其实运行了
- 使用Process Monitor监视RaDa.exe的行为,发现它在C盘创建了RaDa文件夹,下面创建了bin和tmp两个文件夹
- 在cmd中将路径切换到bin文件夹下,使用
rada –gui
命令打开RaDa的图形化界面,可以看到作者和代码编写时间
- 使用
rada –author
命令可以查看
- 在IDA中打开脱壳后的文件RaDa_unpacked.exe,右键type,选择set up,把unicode类型勾上
- 回到Strings界面,可以看到rada都做了什么
-
首先,通过HTTP协议访问了
10.10.10.10\RaDa\RaDa_commands.html
,应该是指令所在,后面三行CGI这里猜测是从网页上请求下载要运行的指令 -
然后,
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
是控制计算机启动项的注册表信息,这里应该是rada修改注册表,使系统启动时运行rada.exe,修改内容为REG_SZ字符串类型 -
继续,程序对主机实行了DDOS拒绝服务攻击(但是没下文了),调用了
user32.dll
和kernel32.dll
内核文件,后面跟了几个函数
__vbafreeobj 释放出VB一个对象所占的内存
__vbaHresultCheckObj 检查结果对象
__vbaObjSet用于将对象变量指向内存中的对象
- And then ,出现了
WScript.Shell
(它是WshShell对象的ProgID,创建WshShell
对象可以操作注册表)程序进行了对注册表的读操作RegRead
;对注册表的写操作RegWrite
;对注册表的删操作RegDelete
这一步猜测是修改了注册表,然后RegRead
读取数据到变量中,再删除对注册表的修改
- 终于,我看到了
Quit
,分析一下退出前的操作
从navigate
开始可能是进入了一个导航栏,查看了里面Busy、Document、Name
等,这里可以通过首字母大小写区分。
exe:执行指定的命令
put:将指定文件上传到服务器
get:将服务器中的指定文件下载到主机中
screenshot:截取主机的屏幕并保存到tmp文件夹(但是tmp文件夹是空的??)
sleep:停止活动一段时间
一些下面分析中遇到的新知识点,整理在此
• CGI-BIN是一种特殊的目录,在进行交互式的WWW访问(如填写在线表格)时,需要服务器上有相应的程序对访问者输入的信息进行处理,这些程序就是CGI程序
• 在注册表中,REG_SZ,是一种字符串类型,代表一个简单的文本字符串
• user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息
• kernel32.dll是Windows中非常重要的32位动态链接库文件,属于内核级文件。它控制着系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,
kernel32.dll就驻留在内存中特定的写保护区域,使别的程序无法占用这个内存区域• WScript.Shell是WshShell对象的ProgID,创建WshShell对象可以运行程序、操作注册表、创建快捷方式、访问系统文件夹、管理环境变量
- 大致的过程分析了一下,可以发现,下一步想知道rada都具体做了什么,分析最开始
RaDa_commands.html
的部分即可。双击定位到代码,可以发现这些操作都在sub_404FB0模块里
- 打开
sub_404FB0
汇编代码,还是用search搜索,查看程序执行逻辑,并未发现什么,怀疑我是不是找错了位置。于是我定位到RegRead
- 查看
sub_40AAA0
汇编代码,search找代码时,通常后面会有proc near
,定位到代码的始端
- 查看
sub_40AAA0
程序执行逻辑
发现了关于SQL的语句,但似乎没实际作用
问题回答总结:
提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息
MD5: md5sum计算 caaa6985a43225a0b3add54f44a0d4c7
PE文件格式 运行在Windows 2000, XP and 2003及以上版的操作系统中
UPX加壳
找出并解释这个二进制文件的目的
这个在上面逐步分析了
识别并说明这个二进制文件所具有的不同特性
RaDa.exe被执行时,它会将自身安装到系统中,并通过修改注册表的方式使得每次系统启动,它都能够被启动。它从指定的web服务器请求指定的web页面从而获取指令(CGI程序)
识别并解释这个二进制文件中采用的防止被分析或被逆向工程的技术?
采用了UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
的加壳
还有一些很迷惑的语句,但其实没实际操作,如DDOS拒绝服务攻击
对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
这是一个后门程序,运行并按照攻击者编辑好的命令执行,这个样本不具有传播和感染的性质,所以它不属于病毒和蠕虫;它没有将自己伪装成有用的程序以欺骗用户运行,所以他也不属于木马。它只是修改读取注册表
给出过去已有的具有相似功能的其他工具
-
Bobax(TrojanProxy.Win32.Bobax.a)也是使用HTTP协议从指定的服务器下载命令文件,然后执行指令
-
Setiri木马,2002年开发,由两部分代码组成:Connection Broker Code和后门。Connection Broker Code就是安装在任何一台web服务器上的CGI程序脚本,这一点很相似
奖励问题:可能查出这个二进制文件的开发作者吗?如果可以,在什么样的环境下和什么样的限定条件下?
实验最开始分析了,copyright (C)2004 baul siles &david perez
实践四:取证分析实践——windows2000系统被攻陷并加入僵尸网络
• IRC是什么,当一个IRC客户端申请加入一个IRC网络的时候将发送那个消息?IRC一般使用那个TCP端口
IRC(Internet Relay Chat )协议是互联网早期的一种实时网络聊天协议,基于客户端-服务器模型,用户运用IRC客户端软件连接到IRC服务器上构成IRC聊天网络,其优点为实现了在线实时交谈,速度快、功能多。
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。
格式如下:
pass message
PASS
user message
USER
nick message
NICK注册完成后,客户端就使用JOIN信息来加入频道
格式如下:
JOIN (channel),(channel) [(key),(key)] '
IRC服务器明文传输通常在6667端口监听,也会使用6660—6669端口
• 僵尸网络是什么?僵尸网络通常用于干什么?
僵尸网络是攻击者传播僵尸程序控制大量主机,通过一对多的命令与控制信道组成攻击网络,是在网络蠕虫、特洛伊木马、后门工具等传统恶意代码形态基础上发展融合而产生的一种新型攻击方式
僵尸网络可以被用于拒绝服务攻击、发送垃圾邮件、窃取用户敏感信息等秘密、耗费网络资源
• 蜜罐主机(IP地址:172.16.134.191)与那些IRC服务器进行了通信?
在wireshark中打开老师提供的文件botnet_pcap_file
,过滤TCP连接中使用6667端口的主机IP地址,以“三次握手”为标识找到了与密罐进行交互的IRC服务器共五台:66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172、209.126.161.29
但是建立IRC通道的好像只有63.241.174.144、217.199.175.10、209.196.44.172
• 在这段期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?
- 使用
tcpflow -r botnet_pcap_file "host 209.196.44.172 and port 6667"
命令,-r: read packets from tcpdump output file,这一步根据过滤条件导出了符合的数据包
会产生了三个文件:209.196.044.172.06667-172.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667、report.xml
- 根据题意,首先打开
209.196.044.172.06667-172.016.134.191.01152
文件,从图中可以看到irc5.aol.com 353
是主机名字,还有时间等信息
-
再往后看,这里我认为是汇总了所有加入频道的主机名,因此通过grep正则匹配
参考资料Linux grep 命令 Linux sed 命令 -
根据图中这一行进行正则匹配
命令如下
| grep "^:irc5.aol.com 353" \
| sed "s/^ :irc5.aol.com 353 rgdiuggac @ #xàéüîéðìx ://g" \ # 匹配前缀并去除 s为取代
| tr ' ' '\n' \ # 将空格转换为新行 tr为替换
| tr -d "\r" \ # 去除\r
| sort -u \ # 排除重复项
| wc -l # 获得行数
得到3462
- 然后,和同学交流大家都说正确应该是3457(我蛮好奇为啥大家都说正确答案是这个)但是,我还是找了一下原因,肯定是正则匹配的问题
- 打开
209.196.044.172.06667-172.016.134.191.01152
文件,拉到匹配段的最下面
- 可以看到最后一句匹配项后面其实并不是主机名,而是
End of /NAMES list.
按匹配规则,这句话被视为4个主机名,还有它的上一段结尾出现@atcppok
,看上去也不是主机名,所以一共有5个匹配项被错误计算在主机名里
3462 – 5 = 3457
• 那些IP地址被用于攻击蜜罐主机?
- 使用命令找出所有可能入侵使用的端口共148个
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | grep -v 'reply' | cut -d '.' -f 10 | cut -d ':' -f 1 | sort | uniq | more
- 命令后加
wc –l
会直接显示个数
- 使用命令找出所有可能入侵的主机共165个
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more
- 同样命令后加wc –l 会直接显示个数
tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more | wc -l
• 攻击者尝试攻击了那些安全漏洞?
- 蜜罐主机容易受到攻击的端口有80、139、445等,因此重点分析这几个端口,使用
ip.dst == 172.16.134.191 and tcp.dstport == 80
命令在wireshark中过滤
1. 210.22.204.101发送许多异常数据包,猜测是在做缓冲区溢出攻击
2. 24.197.194.106的数据包中出现了IIS,猜测是想利用IIS服务器漏洞获得访问控制权.数据包很多,是在做各种攻击尝试吧
3. 218.25.147.83的数据包只有一条异常,看起来和210.22.204.101类似,使用TCP追踪流,在最下面发现了.c:\notworm.LMTH
,很明显是蠕虫攻击,还有明文传输的Hacked By Chinese!
还有几个IP主机看上去很正常,故没分析
- 接下来看139号端口,主要是netbios协议,大部分都是SMB连接,有很多空会话
- 然后分析445端口,这里参考了同学的,因为实现很难找到. PSEXESVC.EXE经百度了解到是一个名为Dv1dr32的蠕虫,开发于2003年。计算机感染Dv1dr32蠕虫后,会定期扫描TCP445端口上的C类地址,如果目标主机上存在弱口令账号,蠕虫就利用该账号将自身远程注入目标主机,并留下可以远程控制的后门,通过IRC进行通信
- 4899号端口只有210.22.204.101访问过,经百度4899端口是一个远程控制软件radmin服务端监听端口,这个软件不是木马,应该是上面攻击成功后上载的这个软件方便控制
• 那些攻击成功了?是如何成功的?
- 将wireshark中的过滤规则准换,例如过滤出80端口发出的数据包,并没有什么有价值的数据包,故判断80端口的三个攻击都失败了
- 445端口的Dv1dr32蠕虫,在网上看到可以通过查看
C:\wint\system32
目录下是否有PSEXESVC.EXE
文件,判断系统有没有被感染
但是我们在分析时无法查看,只能通过\PIPE\lsass 、\PIPE\ntsvcs
字段的出现来判断
三、学习中遇到的问题及解决
问题1:汇编语言那部分看得太费劲了!虽然指令的功能都知道,但是好多变量,好多函数相互调用。。。好烧脑
问题2:实验中使用了正则匹配以查找出所有主机,但是自己系的匹配规则存在一点漏洞,有一句非主机名的语句也匹配成功了,但是目前没找到好的方法/(ㄒoㄒ)/~~
四、学习感想和体会
起初开始实验的时候很懵,感觉不知从何下手,第一个实验老师给了参考,顺顺利利的完成了。写到第三个实验才有了一步步探索的感觉,正在我是开心的时候,第四个实验,理论上不难,但是正则匹配好难写,改了N次,差了很多linux命令用法(sed/grep/tr等等)
写完回头看觉得思路清楚了,知道自己在干嘛。但是做的时候半懵半清楚的,花费了很长时间,写了很久很久很久很久.......
参考资料
1. IRC僵尸网络原理