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

《网络攻防实践》第9周作业

总体结构

这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里 https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10635
我在这个课程的目标是 学习网络攻防知识,增强动手实践能力。
这个作业在哪个具体方面帮助我实现目标 学习Linux网络防御知识。
作业正文 见下
参考文献 [1].网络攻防实践-诸葛建伟
[2].http://m.elecfans.com/article/580615.html

1.实践内容

1.恶意代码基础知识

1.1恶意代码的定义和分类

恶意代码:使计算机按照攻击者的意图执行可以达到恶意目标的指令集。
分类:
计算机病毒:通过感染文件或者磁盘引导扇区进行传播,一般勋宇宿主程序被执行或人为交互才能运行。
蠕虫:一般为不需要宿主的单独文件,通过网络传播、自动复制,通常无须人为交互便可传染。
恶意移动代码:从远程主机下载带本地执行的轻量级恶意代码,不需要或仅需要极少的人为干预。代表性的开发工具有:JavaScript、VBscrip、java、
后门:绕过正常的安全控制机制,从而为攻击者提供访问途径。
特洛伊木马:伪装成有用的软件,隐藏起恶意目标,欺骗用户安装执行。
僵尸程序:使用一对多的命令与控制机制组成僵尸网络
内核套件:通过替换或修改内核。

1.2汇编基础

1、传送指令MOV (move)
  指令的汇编格式:MOV DST,SRC
  指令的基本功能:将原操作数(字节或字)传送到目的地址。
  指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。
2、进栈指令PUSH (push onto the stack)出栈指令 POP (pop from the stack)
  指令的汇编格式:PUSH SRC ;POP DST
  指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。
  PUSH SRC (SP)《-(SP)-2 ;(SP)《-(SRC)
  POP DST (DST)《-((SP));(SP)《-(SP)
  指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。
  指令对标志位的影响:PUSH 和 POP指令都不影响标志位。
  指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2; POP指令的DST不允许是CS寄存器;
3、交换指令XCHG (exchange)
  指令的汇编格式:XCHG OPR1,OPR2
  指令的基本功能:(OPR1)《-》(OPR2)
4、加法指令ADD (addition)
  指令的汇编格式:add dst,src
  指令的基本功能:(dst)《-(src)+(dst)
5、加1指令INC (increament)
  指令的汇编格式:INC opr
  指令的基本功能:(opr)《-(opr)
  指令支持的寻址方式可以使用除立即数方式外的任何寻址方式
6、减法指令SUB (subtract)
  指令的汇编格式:SUB dst,src
  指令的基本功能:(dst)《-(dst)-(src)
  指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
7、比较指令CMP (compare)
  指令的汇编格式:CMP opr1,opr2
  指令的基本功能:(opr1)-(opr2),根据相减结果设置条件码,但不回送结果。
  指令支持的寻址方式:他们两个操作数不能同时为存储器寻址。即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
8、无符号数除法DIV (unsigned divide)
  带符号数除法 IDIV (singed divide)
  指令的汇编格式:DIV src IDIV src
9、逻辑或OR (logic or)
  指令的汇编格式:OR dst,src
  指令的基本功能:(dst)《-(dst)或(src)
10、逻辑非NOT (logic not)
  指令的汇编格式:NOT orc
  指令的基本功能:(dst)《-(opr)
11、异或XOR (exclusice or)
  指令的汇编格式:XOR dst,src
  指令的基本功能:(dst)《-(dst)异或(src)
12、Test命令将两个操作数进行逻辑与运算,并根据运算结果设置相关的标志位。但是,Test命令的两个操作数不会被改变。运算结果在设置过相关标记位后会被丢弃。

1.2恶意代码的分析方法

1.2.1恶意代码分析技术概述

恶意代码分析的技术方法主要包括静态分析和动态分析两大类。静态代码分析方法在不实际执行软件代码情况下对恶意代码进行自动化或辅助分析,通常包括使用反病毒引擎扫描识别已知的恶意代码家族和变种,逆向分析获取恶意代码的关键程序信息、模块构成、内部数据结构和关键控制流程,理解恶意代码的机理,并提取特征码用于检测。
动态代码分析方法则通过在受控环境中执行待分析的目标恶意代码,并利用系统、网络、甚至指令层次上的监控技术手段,来获取目标代码的行为机理和运行结果。

1.2.2恶意代码静态分析技术

1.2.2恶意代码动态分析技术

2.实践过程

2.1 分析Crackme程序

用IDA Pro静态或动态分析Crackme1.exe与crackme2.exe,寻找特定的输入使        
其能输出成功信息。

Crackme2.exe

shift+f12进入字符串窗口,发现一些明文字符串

点击其中一个字符进入如下窗口。

右键点击字符串,选择交叉引用列表选项(或直接CTRL+X)进行页面跳转

点击确定,进入以下界面。

点击F5进入反汇编伪代码界面

简单的C语言代码,分析代码知输入"I know the secret"可输出You know how to speak to programs, Mr. Reverse-Engineer
也可以使用OD修改程序,实现输入任意数都可输出成功信息。

Crackme2.exe

分析过程同上
伪代码如下

int __cdecl main(int argc, const char **argv, const char **envp)
{
  size_t v4; // [esp+0h] [ebp-18h]
  int v5; // [esp+10h] [ebp-8h]
  unsigned int i; // [esp+14h] [ebp-4h]

  _alloca(v4);
  __main();
  if ( argc == 2 )
  {
    if ( !strcmp(*argv, "crackmeplease.exe") )//要求文件名为crackmeplease.exe
    {
      if ( !strcmp(argv[1], "I know the secret") )
      {
        for ( i = 0; i <= 0x21; ++i )
          putchar((char)(byte_403080[i] ^ 0x42));
        puts(Str);
        v5 = 0;
      }
      else
      {
        fprintf((FILE *)&__iob + 2, "Pardon? What did you say?\n");
        v5 = 3;
      }
    }
    else
    {
      fprintf((FILE *)&__iob + 2, "I have an identity problem.\n");
      v5 = 2;
    }
  }
  else
  {
    fprintf((FILE *)&__iob + 2, "I think you are missing something.\n");
    v5 = 1;
  }
  return v5;
}

注释部分,要求文件名为crackmeplease.exe,其他的还是和之前一样,输入"I know the secret"可输出正确信息:byte_403080[i] ^ 0x42

copy crackme.exe crackmeplease.exe


关于那个正确信息,采用脚本重现一下

a = [0x15, 0x27, 0x62, 0x2A, 0x23, 0x34, 0x27, 0x62, 0x23, 0x62, 0x2E,0x2B ,0x36,0x36, 0x2E , 0x27 , 0x62 , 0x31 , 0x27 , 0x21 , 0x30,0x27 , 0x36 , 0x78 , 0x62 , 0x1, 0x2A , 0x2D , 0x21 , 0x2D , 0x2E , 0x23 ,0x36,0x27 ]//dup(36h)的意思是联想两个36h
flag=''
for i in range(len(a)):
    flag+=chr(a[i]^0x42)
print(flag)

2.2分析rada


使用超级巡警进行脱壳

user32.dll
是Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息。包含图形界面操作,可能为图形化界面
kernel32.dll
控制着系统的内存管理、数据的输入输出操作和中断处理
打开和操作进程(OpenProcess,OpenCurrentProcess,GetProcessHeap)
对文件进行操作(Readfile,Creatfile,Writefile)
搜索目录下的文件(FindFirstFile,FindLastFile)
使用的vb脚本


该恶意程序调用浏览器访问http://10.10.10.10/rada,然后分别下载和上传某些文件,并且在受害主机C盘目录下创建一个文件夹“C:/RaDa/tmp”来保存其下载的文件。
可能借助这个靶机对特定网段进行DDOS攻击

存在截屏功能。提供了一个网址估计是对这个脚本的介绍,但是页面失效了

1.这个二进制文件摘要信息,包括可以帮助识别同一样本的基本信息

MD5摘要信息:caaa6985a43225a0b3add54f44a0d4c7

32位PE
使用了UPX加壳工具进行了加壳处理
2.这个恶意文件的目的
该程序使得靶机通过http请求连接到攻击机,并受其控制。
3.识别并说明这个二进制文件所具有的不同特性
采用UPX加壳
4.识别并解释这个二进制文件中所采用的防止被分析或逆向工程的技术
该文件采用了UPX加壳,直接逆向无法识别
5.对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由
后门程序,连接远程服务器进行交流,不复制不传播不伪装,故非木马和病毒。

6.给出过去已有的具有相似功能的其他工具
上次的实验msfvenom工具也可以实现功能,不过是针对的linux

7.可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?

估计是他俩吧

2.3取证分析

题目:一个未设置管理员密码的Windows 2000蜜罐主机,被攻击后加入了一个僵尸网络,在蜜罐主机运营期间,共发现了15164个不同主机加入了这个僵尸网络。用Snort工具收集的该蜜罐主机5天的网络流日志,并通过编辑去除了一些不相关的流量并将其 组合到了单独的一个二进制网络日志文件中,同时IP地址和一些 其他的特定敏感信息都已经被混淆以隐藏蜜罐主机的实际身份和位置。分析这个日志文件并回答以下给出的问题。

2.3.1IRC是什么? 当IRC客户端申请加入一个IRC网络时将发送哪个消息? IRC一般使用哪些TCP端口?

IRC:因特网中继聊天(Internet Relay Chat),一款即时聊天工具,类似网络聊天室。IRC客户端与服务端通信采用的端口和相应协议是公开的,网上有很多IRC客户端软件,各有特色。同时,也正是由于协议的公开,给了病毒可乘之机。
注册时需要发送的消息有三种,分别是口令,昵称和用户信息。格式如下:PASS 、NICK 、USER 。注册完成后,客户端就使用 JOIN 信息来加入频道,格式如下:JOIN
IRC 服务器明文传输通常在 6667 端口监听,也会使用 6660—6669 端口。 SSL 加密传输在 6697 端口。

2.3.2僵尸网络是什么? 僵尸网络通常用于什么?

僵尸网络 Botnet 是指采用一种或多种传播手段,将大量主机感染bot程序(僵尸程序)病毒,从而在控制者和被感染主机之间所形成的一个可一对多控制的网络。
用于DDOS攻击、窃取秘密、挖矿等

2.3.3蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通讯?


209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10、209.196.44.172

2.3.4在这段观察期间,多少不同的主机访问了以 209.196.44.172为服务器的僵尸网络?

方法

  • 1.筛选ip.src == 172.16.134.191 and tcp.dstport == 6667并追踪TCP流,选择209.196.44.172:6667 → 172.16.134.191:1152
  • 复制到txt文本中,使用python正则筛选出IP地址
import re
ip_file = 'C:\\Users\\FANG\\Desktop\\李晨学习作业\\python\\index.txt'#文档绝对地址,由于python本身使用\来转义一些特殊字符,\\代表\
file = open(ip_file,'r')  #读取文件
ip = re.compile(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])')  #筛选IP正则表达式 d{1,3}表示一到三位数 
file1 = file.readlines() #读取文本内容(.readlines()自动将文件内容分析成一个行的列表)
for iplist in file1:
    for iprow in ip.findall(iplist):
        #print(iprow) 为看效果可以print一下
        file2 = open("ip.txt","a")#写入文件
        file2.write(iprow + "\n")
        file2.close()
file.close()

  • 3发现有重复的,增加了去重的功能,重新写了个脚本

    经统计共3842个

2.3.5 哪些IP地址被用于攻击蜜罐主机?

由于蜜罐的特殊性,访问的都算时,ip.src == 172.16.134.191,复制所有内容至文档,使用上一题的脚本进行筛选IP地址。

172.16.134.191,219.118.31.42,218.163.9.89,213.23.49.158,61.155.126.150,210.111.56.66,66.190.67.122,68.169.174.108,141.149.155.249,207.6.77.235,162.33.189.252,64.17.250.240,213.84.75.42,68.152.53.138,4.64.221.42,66.92.135.108,81.202.125.5,200.74.26.73,218.237.70.119,213.107.105.72,213.44.104.92,68.154.11.82,81.50.177.167,208.186.61.2,62.194.4.114,204.50.186.37,61.11.11.54,68.115.33.110,144.134.109.25,195.36.247.77,210.12.211.121,202.63.162.34,210.214.49.227,141.85.37.78,66.139.10.15,203.170.177.8,195.67.251.197,217.222.201.82,194.199.201.9,168.226.98.61,217.227.98.82,62.201.96.159,210.203.189.77,24.107.117.237,213.116.166.126,213.7.60.57,64.254.203.68,216.170.214.226,210.58.0.25,148.235.82.146,210.22.204.101,172.168.0.154,200.78.103.67,207.68.176.250,207.172.16.150,207.172.16.156,65.57.83.13,64.0.96.9,198.49.161.200,207.46.196.108,207.46.196.120,128.242.214.10,216.239.51.100,216.239.57.100,217.140.0.47,217.151.192.231,217.151.192.226,194.68.68.39,194.192.187.194,194.68.68.12,213.66.244.241,207.68.171.245,207.68.171.238,207.68.184.62,207.68.183.190,206.151.167.254,205.188.137.80,216.239.33.101,216.154.242.126,211.149.57.197,213.217.55.243,219.65.37.37,66.73.160.240,61.177.154.228,217.1.35.169,192.215.160.106,80.181.116.202,169.254.205.177,24.197.194.106,218.87.178.167,192.130.71.66,209.45.125.69,209.45.125.110,61.55.71.169,62.251.129.118,164.125.76.48,219.94.46.57,61.140.149.137,81.114.77.37,200.66.98.107,61.14.66.92,200.60.202.74,217.227.245.101,216.228.8.158,218.25.147.83,203.115.96.146,129.116.182.239,212.110.30.110,203.106.55.12,61.111.101.78,209.126.161.29,66.33.65.58,63.241.174.144,217.199.175.10,24.161.196.103,209.196.44.172,199.107.7.2,66.8.163.125,

2.3.6攻击者尝试攻击了哪些安全漏洞?

要了解攻击了哪些安全漏洞首先要了解攻击了哪些端口,使用snort -r botnet_pcap_file.dat -c /etc/snort/snort.conf -K ascii指令先查一下网络流分布情况。发现大部分都是TCP包,有一部分UDP包,所以我们首先应该筛选出响应的TCP端口和UDP端口。

利用下面的指令筛选出蜜罐主机相应的 TCP 端口。输出可以看到 TCP 响应端口为135(rpc),139(netbios-ssn),25(smtp)445(smb),4899(远程控制软件remote administrator服务端监听的端口),80(http)。
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(0x12代表有回复)

将协议部分改为 udp ,可以筛选出 udp 端口137(netbios-ns)
tcpdump -r botnet_pcap_file -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq

逐个分析所用的端口,首先是udp 137号端口,NBNS数据包:NetBIOS的名称服务器。它负责将计算机名转化为对应的IP。

135 号端口只是进行了连接,但是是没有数据的交互的,所以这攻击者可能是对该端口进行了 connect 扫描。

TCP 25号端口同上

然后查看 TCP 80 端口,首先利用 Wireshark 进行筛选tcp.dstport==80 && ip.dst == 172.16.134.191,首先连接最多的就是 24.197.194.106 这个IP,他的行为是不停的用脚本在攻击 IIS 服务器的漏洞,从而获取系统权限。

下一个访问 80 端口的是218.25.147.83,这里会看到c:\notworm,worm是蠕虫的意思。翻阅他人博客发现这个是红色代码(red code)病毒

未发现80端口发送系统信息,猜测80端口的这些攻击均失败。
TCP 139号端口。这个也比较简单,虽然有很多主机连接到这个端口的,但都是空会话,同样也没有成功,所以应该是 SMB 查点。

然后分析TCP 445端口。这个端口连接非常多,可以看到许多 \samr, \srvsvc 字符串,查询字符串后发现一个PSEXESVC.EXE字符串,是由61.111.101.78发起的,通过对这种字符串的搜索,发现这是一种Dv1dr32蠕虫,这种蠕虫正是通过IRC进行通信。

同时发现该 ip 地址与蜜罐建立了会话,说明攻击成功

TCP 4899端口。只有 IP 地址 210.22.204.101 访问过.但是没有成功建立连接。

2.3.7哪些攻击成功了?是如何成功的?

61.111.101.78攻击成功,与蜜罐建立了连接

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

  • 问题1:xp的ida版本太低了
  • 问题1解决方案:安装ida6.6

4.实践总结

恶意程序分析不到位

posted @ 2020-04-28 14:25  刚刚吃饭来着呢  阅读(327)  评论(0编辑  收藏  举报