• 20199107 2019-2020-2 《网络攻防实践》第9周作业


    20199107 2019-2020-2 《网络攻防实践》第9次作业

    这个作业属于哪个课程 《网络攻防实践》
    这个作业的要求在哪里 《网络攻防实践》第9次作业
    我在这个课程的目标是 学习新知识、考试拿高分
    这个作业在哪个具体方面帮助我实现目标 学习恶意代码基础知识和分析方法
    作业正文 见下文
    其他参考文献 见文末

    1.实践内容

    恶意代码定义与分类

    • 定义
      恶意代码是指达到恶意目标的计算机指令集,所谓的恶意目标包括炫耀技术、窃取隐私或机密信息、窃取计算资源以及拒绝服务、破坏数据等。
      现在还有可能是加密数据勒索钱财。

    • 类型

    类型 定义特征
    计算机病毒 通过感染文件传播,一般需要被执行或其他人为交互才能执行
    蠕虫 不需要宿主的单独文件,可通过网络传播,可自动复制无需交互
    恶意移动代码 从远程主机下载到本地的轻量级代码,不需要或仅需要少量交互
    后门 为攻击者提供绕开安全机制的访问渠道的代码
    特洛伊木马 伪装成正常软件欺骗用户执行
    僵尸程序 一对多的命令与控制机制的代码
    内核套件 替换或修改关键文件以提权的代码
    融合型 以上各种的有机结合
    • 发展趋势
      复杂度和破坏力日益提升

    • 病毒

      • 特性:(1)感染性;(2)潜伏性;(3)可触发性;(4)破坏性;(5)衍生性
      • 感染目标:
        • 可执行文件:分为前缀/后缀/中缀感染,分别指将恶意代码插入文件前端/末端/中间,并通过跳转指令执行
        • 引导扇区:感染引导扇区的引导记录,以在操作系统前获取控制权
        • 支持宏指令的数据文件:指打开时会执行其所包含的某些代码的数据文件,例如Office系列
    • 网络蠕虫

      • 弹头:获取访问权,常用技术:缓冲区溢出、文件共享、电子邮件、检测弱口令等
      • 传播引擎:在目标系统上传播,常利用FTP、HTTP、SMB等协议漏洞
      • 目标选择算法和扫描引擎:选择目标并确定是否可以攻击
      • 有效载荷:侵占成功后用来进行其他恶意行为
    • 后门

      • 提供的访问通道类型分为:
        • 新增的本地账户,甚至是提权后的本地账户
        • 远程执行单个命令
        • 远程shell,例如Netcat
        • 远程GUI,例如VNC、BO、灰鸽子、冰河
        • 无需打开TCP或UDP监听端口的无端口后门
      • Windows平台自启方式:
        • 自启动文件夹
        • 注册表自启动项
        • 计划任务
      • 类Unix平台自启方式:
        • 通过inittab系统初始化脚本:init进程是所有进程的起点,完成核内引导后就开始运行init程序,init程序需要读取配置文件/etc/inittab
        • inetd网络服务配置:inetd是监视网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。其配置文件inetd.conf文件告诉inetd监听哪些网络端口,为每个端口启动哪个服务。
        • 与用户登录或程序激活相关的用户脚本
        • 计划任务
    • 木马

      • 欺骗用户或管理员安装
      • 隐藏在正常程序中
    • 僵尸程序和僵尸网络

      • 主体功能(核心、不可或缺):命令与控制模块、传播模块
      • 辅助功能(可选):信息窃取、主机控制、下载更新、防止分析检测
      • 按传播策略分为:自动传播、受控传播
      • 传播方式:软件漏洞、NetBIOS弱密码、后门、电子邮件、文件共享等
      • 当前主要控制机制:
        • 基于IRC,聊天网络中继协议,通过聊天传命令
        • 基于HTTP,通过url传命令
        • 基于P2P,前两者有集中控制点,这种没有
    • Rootkit

      • 定义:后门+木马,修改系统关键组件,获取访问权并潜伏在系统中
      • 用户模式Rootkit:修改或替换内建程序和库文件,但没修改内核
        • UNIX:提供后门的二进制程序、隐藏攻击者的二进制程序、用于隐藏但不替换的二进制程序和安装脚本
        • Windows:利用第三方登录认证的接口、关闭WFP机制、DLL注入和API挂钩
      • 内核模式Rootkit:修改或替换系统内核
        • Linux:利用LKM(动态可加载内核模块)
        • Windows:利用恶意设备驱动、修改内存中运行的内核、覆盖硬盘上的内核镜像、在虚拟系统中配置一个假内核等

    恶意代码分析方法

    • 恶意代码分析与良性代码分析的差别

      • 不能提前知道恶意代码的目的
      • 因为恶意代码可能会破坏系统,因此需要一个可控可恢复的环境,例如虚拟机、沙盒等
      • 没有高级语言的源代码,甚至可能要分析二进制代码
      • 大量的抗分析技术
    • 恶意代码分析环境

      • 配置不需要很高
      • 最好有多种主流操作系统和服务
      • 装好分析工具
      • 常用技术:虚拟机、沙盒、蜜罐、蜜网
    • 静态分析
      只分析源代码,不执行

    分析技术 目的 主要工具
    反病毒软件扫描 识别已知恶意代码 各种杀软
    文件格式识别 确定攻击平台和类型 file,PEID,FileAnalyzer
    字符串提取分析 寻找分析线索,包括恶意代码实例名、帮助或命令行选项、
    用户会话、后门口令、URL、E-mail、库文件、函数调用等
    strings
    二进制结构分析 初步了解二进制结构 binutils (nm, objdump)
    反汇编 将二进制代码反汇编为汇编代码 IDA Pro,GDB,VC
    反编译 将汇编代码反编译为高级语言代码 REC,DCC,JAD
    代码结构与逻辑分析 理解二进制代码逻辑 IDA Pro,Ollydbg
    加壳识别和代码脱壳 识别是否加壳及类型、对抗代码混淆、恢复原始代码 PEID,VMUnpacker,UPX
    • 动态分析
      在可控环境下一边执行一边分析
    分析方法 目的 主要工具
    快照比对 获取恶意代码行为结果 FileSnap,RegSnap,完美卸载
    系统动态行为监控 实时监控恶意代码动态行为轨迹,包括文件行为、进程行为、注册表、本地网络栈行为监控 Filemon,Regmon,Process Explorer,lsof
    网络监控 分析恶意代码网络监听端口及发起网络会话 Fport,lsof,TDImon,ifconfig,tcpdump
    沙盒 在受控环境下进行完整的恶意代码动态行为监控与分析 Norman Sandbox,CWSandbox,FVM Sandbox
    动态跟踪调试 单步调试恶意代码程序,理解程序结构和逻辑 Ollydbg,IDA Pro,gdb,SoftICE,systrace

    2.实践过程

    恶意代码文件类型识别、脱壳与字符串提取

    任务:对rada恶意代码样本,进行文件类型识别、脱壳与字符串提取,以获得恶意代码的编写作者
    (1)使用文件格式和类型识别工具,给出rada恶意代码样本的文件格式、运行平台和加壳工具。
    打开命令行,在文件所在目录使用file RaDa.exe查看该文件,这是一个32位Windows的可执行文件

    用PEID打开该文件,可见文件有加壳,且为UPX壳

    (2)使用超级巡警脱壳机等脱壳软件,对rada恶意代码样本进行脱壳处理。

    (3)使用字符串提取工具,对脱壳后的rada恶意代码样本进行分析,从中发现rada恶意代码的编写作者是谁?
    使用strings RaDa_unpacked.exe查看脱壳后文件中的可输出字符串,没找到

    用IDA Pro工具打开脱壳后的文件,view-options-strings打开strings窗口,右键选择setup将Unicode加入接受的字符串类型,可以找到作者

    分析Crackme

    任务:使用IDA Pro分析Crackme1.exe和Crackme2.exe,寻找特定输入使其输出成功信息
    (1)crakeme1
    用IDA Pro打开crackme1.exe,查看strings信息,看语义感觉You know how to speak to program是我们想要的结果

    找到main函数,顿时回忆起被汇编支配的恐惧,虽然这段汇编代码的指令我都知道,然而寄存器忘光,加起来还是看不懂

    虽然不会汇编,但靠着百度和大佬的博客还是搞懂了大概,两个变量不知道是干什么的,两个参数大概就是我们熟悉的int main(int argc, char* argv[])里那两个了
    arg,cmp [ebp+arg_0], 2是比较argc和2,jz即两者相同时跳转,也就是要得到想要的结果,要输入两个参数,第一个(argv[0])自然是文件名,第二个(argv[1])则是真正的参数
    然后可以看到,将argv[1]和字符串I know the secret比较,若相同则可得我们想要的结果

    (2)crakeme2
    用IDA Pro打开crackme2.exe,查看strings,多了两个没见过的字符串

    找到main函数,感觉和之前一样,是比较参数个数,但判断完参数是2个后,多了一步将argv[0]和crackmeplease.exe比较,之后才是argv[1]和I know the secret比较

    所以复制一下,把文件名变成crackmeplease.exe,再输入I know the secret

    样本分析实践

    任务:分析一个自制恶意代码rada,回答问题:
    (1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
    (2)找出并解释这个二进制文件的目的。
    (3)识别并说明这个二进制文件所具有的不同特性。
    (4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
    (5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
    (6)给出过去已有的具有相似功能的其他工具。
    (7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

    md5sum RaDa.exe获取文件摘要

    打开process monitor和process explore之后虚拟机卡成PPT,暂时没有余力再开wireshark

    运行一下RaDa.exe,大概是因为太卡了我可能启动了它三次。。。
    我原来是在process monitor添加过滤,筛选Rada.exe的进程名,因为重复执行了,因此又筛选了其PID
    它创建了文件msvbvm60.dll,imm32.dll等,在C:RaDain创建了RaDa.exe并加入到注册表启动项

    然后一边用wireshark抓包一边启动RaDa,发现它企图连接10.10.10.10的80端口,80端口是HTTP的常用端口,可能是想请求某个网页?

    然后用IDA Pro打开脱壳后的文件,查看strings,可以看到很多命令,可以双击逐个查看

    根据线索分析,得到RaDa_commands.html这个字符串极其重要。可以双击查看,并通过ctrl+x查看交叉引用,找到其位置

    该字符串被拷贝到dword_40C030变量中,鼠标移到该变量上,可见其对应的函数sub_4052C0
    找到该函数可以看到,有几个私有网段的开头,大概就是确保服务器在这些私有网段下,然后到服务器获取命令

    仔细寻找还能找到一些具体的命令

    注意到strings里还有VM相关的字符串,猜测该代码可能会识别虚拟机,通过与上面类似的方法找到找到引用该字符串的函数sub_404FB0,以及对应函数sub_40AAA0,以及调用sub_40AAA0的sub_40b05A

    这个函数确认了注册表信息,即通过判断注册表信息里是否有vmware tools来判断主机是否是虚拟机,如果是--authors的输出为Unknow argument,否则为strings里面那个作者信息

    回答问题:

    • (1)提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。
      该文件md5值为caaa6985a43225a0b3add54f44a0d4c7
    • (2)找出并解释这个二进制文件的目的。
      联网获取攻击者放在服务器的命令并执行
    • (3)识别并说明这个二进制文件所具有的不同特性。
      执行后将自身复制到C:RaDain,并添加到注册表启动项里,并通过网络获取命令执行,隔一段时间循环一次
    • (4)识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术。
      使用了UPX加壳,可识别虚拟机,还有一些假的干扰字符串
    • (5)对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
      该代码没有感染性也不会自主传播,因此不是病毒和蠕虫。改代码没有隐藏自身为正常程序骗用户执行,因此也不是木马。该程序可能属于僵尸或后门程序,因为是从服务器下载命令,个人感觉比较可能是僵尸程序。
    • (6)给出过去已有的具有相似功能的其他工具。
      例如Zeus,Setiri及GatSlag等僵尸程序
    • (7)可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
      当没有在虚拟机执行时(或者不是VMware虚拟机,不被发现为虚拟机),使用--authors参数可以看到Authors: Raul Siles & David Perez, 2004

    取证分析实践

    任务:数据源是Snort收集的蜜罐主机5天的网络流量日志(经过适当处理),这台蜜罐主机在一个僵尸网络中。回答以下问题:
    (1)IRC是什么?当IRC客户端申请加入一个IRC网络时将发送哪个消息?IRC一般使用哪些TCP端口?

    • IRC是因特网中继聊天(Internet Relay Chat)的简称。
    • 申请加入前要先注册,注册时需要发三种信息:
      用户信息USER
      口令PASS 以及昵称NICK
      注册完成后,客户端就可以使用JOIN 信息来加入频道
    • IRC通常使用6660-6669端口,其中一般使用6667端口进行明文通信,如果是使用SSL进行加密通信则使用6697端口

    (2)僵尸网络是什么?僵尸网络通常用于干什么?

    • 僵尸网络是攻击者出于恶意目的,通过传播僵尸程序控制大量主机,并通过一对多的命令与控制信道所组成的网络
    • 通常用于发动分布式拒绝服务攻击(DDoS)、发送垃圾邮件、窃取隐私信息、刷点击量等

    (3)蜜罐主机(IP:172.16.134.191)与哪些IRC服务器进行了通信?
    用wireshark打开botnet_pcap_file.dat,ip.src == 172.16.134.191 && tcp.dstport == 6667筛选源地址为蜜罐主机,目的端口为6667的包
    统计目的地址得:209.126.161.29,66.33.65.58,63.241.174.144,217.199.175.10,206.196.44.172五个

    (4)在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络。
    将数据文件放到kali,先用tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667"分流
    得到两个分流后的数据文件209.196.044.172.06667-172.016.134.191.01152、172.016.134.191.01152-209.196.044.172.06667和一份报告report.xml

    因为要找有多少主机访问了209.196.44.172,因此分析209.196.044.172.06667-172.016.134.191.01152
    借用大佬的超长命令
    cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | tr ' ' ' ' | tr -d "15" | grep -v "^$" | sort -u | wc -l
    grep获取昵称输出,sed去除前缀,tr将空格转换为新行,tr -d去除 ,grep -v "^$"去除空行,sort -u排序并去重,wc计算行数

    不知道为什么出来的是3462有点误差

    (5)哪些IP地址被用于攻击蜜罐主机?
    使用statistics-IPv4 statistics-All address,统计所有IP地址,用ip.dst == 172.16.134.191筛选目的地址为蜜罐主机的包可以查看

    (6)攻击者尝试了哪些安全漏洞?+(7)哪些攻击成功了?是如何成功的?
    先用snort -r botnet_pcap_file -c /etc/snort/snort.conf -K asciisnort分析一下,发现绝大部分都是TCP和UDP包

    然后tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq筛选有响应的TCP端口,即SYN,ACK标志为1

    再用tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq筛选有响应的UDP端口,

    最后对每个端口逐一分析

    • 137(udp)
      137端口是在局域网中提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态。因此访问这个端口肯定是NetBIOS查点

    • 25,135
      tcp.port==135 or tcp.port==25筛选这两个端口,发现这两个端口的流量都是只有连接,没有数据交互,应该是只对这两个端口进行了扫描

    • 80
      ip.dst == 172.16.134.191 and tcp.dstport==80筛选连接蜜罐主机80端口的包
      发现24.197.194.106不断地在进行攻击,应该是在用脚本攻击IIS服务器

    还有210.22.204.101发送了异常长的数据包,大概是在做缓冲区溢出攻击

    最后是218.25.147.83也是异常长的数据包,但看到最后发现大概是蠕虫而不是缓冲区溢出

    然而蜜罐主机均回应为iis服务器的默认页面,这些攻击大概都失败了

    • 139
      虽然有很多到139端口的连接,但大部分都只是普通连接,很多空会话,也没有见到错误信息之类的,可能只是查点

    • 445
      查询字符串可以发现PSEXESVC.EXE,这是一种蠕虫病毒的特征码,攻击者对系统注入了蠕虫病毒并成功获取了远程调用

    • 4899
      这是一个强大的远程控制工具Radmin的监听端口,该软件不是木马,但可能是攻击者攻击成功后装来方便控制

    3.学习中遇到的问题及解决

    • 问题1:虚拟机很卡,慢成PPT
    • 问题1解决方案:加大内存
    • 问题2:观察多少不同的主机访问了以209.196.44.172为服务器的僵尸网络时候那个超长的命令输出5
    • 问题2解决方案:实际上把最后的wc去掉,看到输出是5个单词,再仔细看看,好像是个句子,百度一下,原来这是一个错误信息,grep表示二进制文件不能匹配,用grep -a可以解决

    4.实践总结

    做得头昏眼花,我怕是已经得了分析恐惧症了,感觉带“分析”两字的作业咋都这么难啊,幸好还能借鉴一下大佬们的博客,感谢各位大佬。

    5.其他参考文献

  • 相关阅读:
    未进入Kali Linux系统修改修改密码的方法
    SQL 修改字段名,数据类型,增加字段
    在 SAE 上部署 ThinkPHP 5.0 RC4
    在 C# 里使用 F# 的 option 变量
    Retinex图像增强和暗通道去雾的关系及其在hdr色调恢复上的应用
    暗通道去雾算法的python实现
    解析hdr图像文件的python实现
    博客说明
    retinex图像增强算法的研究
    我知道的JavaScript设计模式(桥接)应用之验证器
  • 原文地址:https://www.cnblogs.com/20145120hxx/p/12791440.html
Copyright © 2020-2023  润新知