• 20199309 2019-2020-2 《网络攻防实践》第八周作业


    这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/19attackdefense
    这个作业的要求在哪里 https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10635
    我在这个课程的目标是
    这个作业在哪个具体方面帮助我实现目标 熟悉了解Linux系统攻防技术
    作业正文 1.实践内容、2.实践过程、3.学习中遇到的问题及解决、4.实践总结
    其他参考文献 见正文最后部分

    1.实践内容

    1.1 Linux系统结构

    1.2 Linux操作系统安全机制

    1.2.1 Linux身份认证机制
    Linux是一个多用户多任务的操作系统,通过创建多种角色类型的用户及用户组来实施用户身份管理,来确保多个用户安全地使用Linux操作系统。

    Linux的本地登录用户认证机制
    Linux系统最基本的用户认证机制即是对用户在控制塔登录的认证过程,登录login进程通过Crypt()函数来对用户输入的口令进行验证:在用户设置密码时,会随机产生一个salt值,与用户的密码一起加密,得到加密口令字,并和salt值一起保存在shadow文件中,在对登录用户身份进行认证时,Crypt()函数会将用户输入口令与salt值一起来加密,得到一个加密字符串,通过与保存的加密口令字进行对比,以确认用户身份是否真实。

    Linux的远程登录用户认证机制
    目前Linux系统普遍使用SSH服务来进行远程用户登录与网站访问,SSH提供两种方式的用户身份认证机制:第一种方式为基于口令的身份认证,使用Linux系统内建的用户账号和口令,就可以登录到远程主机上;第二种方式为基于非对称密钥的身份认证,需要用户为自己创建一对非对称密钥,并把公钥放置到需要访问的服务器上,在连接SSH服务器时,客户端软件就会向服务器发出请求,请求使用证书方式进行身份认证,在服务器收到请求之后,就使用请求用户的公钥加密“质询”并把它发给客户端软件,客户端软件收到“质询”后就可以使用私人密钥进行解密,再发送给服务端。

    Linux的统一身份认证中间件——PAM

    其中:系统管理员通过PAM配置文件(即/etc/pam.conf或/etc/pam.d)来制定身份认证策略,即指定什么服务该采用什么样的认证方法;应用服务开发者通过在服务程序中使用PAM API来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写认证模块,将不同的认证机制加入到PAM中间件中;PAM核心库(libpam)则读取配置文件,以此为根据将服务程序和相应的认证方法联系起来。

    1.2.2 Linux授权与访问控制机制
    Linux中“一切皆是文件”,于是所有文件与设备资源的访问控制都通过VFS虚拟文件系统来实现。在Linux的虚拟文件系统安全模型中,主要是通过文件所有者、文件访问权限和一些特殊权限位来进行系统的授权与访问控制。

    在这里重点提一下文件的特殊执行权限:常见的是SUID与SGID权限,SUID权限允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限,可以任意存取文件所有者能使用的全部系统资源,如/bin/login文件就是设置了SUID位。设置了SUID权限的程序安全漏洞往往是本地提权攻击的入口。

    SGID位与SUID位功能类似。

    1.2.3 Linux安全审计机制
    Linux的安全审计机制则主要通过三个主要的日志子系统来实现:连接时间日志、进程统计日志和错误日志记录。常用日志文件如下:

    除了事件日志外,Linux内核还集成了审计守护进程,来帮助系统管理员检测系统用户对某些安全措施的违背,能够监控用户空间程序向内核发起的所有系统调用,还可以与SELinux配合,对违反SELinux策略的事件进行审计记录。

    审计日志分析工具:开源的主机入侵检测工具OSSEC、第三方提供的系统入侵分析与报警环境Snare软件等。

    1.3 Linux系统远程攻防技术

    1.3.1 Linux远程口令字猜测技术
    支持攻击者进行自动化的远程口令猜测工具:Brutus、THC Hydra、Cain and Abel等。
    1.3.2 Linux网络服务远程渗透攻击
    针对网络服务远程渗透攻击的安全防范措施:
    (1)禁用所有不必要的网络服务;
    (2)尽量选择更安全的网络协议与服务软件,并使用最佳安全实践进行部署;
    (3)及时更新网络服务版本;
    (4)使用xinetd、防火墙为Linux网络服务添加网络访问控制机制;
    (5)建立入侵检测与应急响应计划流程。
    1.3.3 攻击Linux客户端程序和用户
    针对客户端与用户攻击的安全防范措施:
    (1)尽量保证常用的网络客户端软件的及时更新;
    (2)应对社会工程学攻击主要取决于用户自身的安全意识、经验与心智能力,了解各种社会工程学技术。
    1.3.4 攻击Linux路由器和监听器
    除上述三种远程渗透攻击通道之外,Linux系统最容易让人忽视的就是作为路由器和监听器网络设备时,在进行路由转发或者数据包嗅探时,所遭受的特殊数据包攻击。即使是用于安全目的的netfilter、Snort等软件,与其他软件无异也存在着安全漏洞,这使得攻击者可以利用这些漏洞对Linux路由器、防火墙、监听器和入侵检测器来实施拒绝服务或绕过安全检查攻击,从而使得这些安全设备不对他们的入侵造成威胁,他们甚至可能利用其中存在的远程代码执行后果的安全漏洞,将这些设备归为己有。

    针对路由器与监听器攻击的安全防范措施:
    (1)对于所维护网络中的设备,应及时关注厂商的安全威胁报告,并对已发现的安全问题进行修补;
    (2)网络管理员在构建网络的安全防御、检测与相应体系时,需要站在攻击者角度,掌握攻击者的渗透入侵技术手段,并尝试进行渗透攻击测试,以确保所采用的防御体系不会被普通攻击者轻易绕过;
    (3)关注所使用的各种安全设备与软件自身的安全性,看他们是否存在公开已知的安全漏洞与弱点,并进行及时地修补。

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

    1.4.1 Linux本地特权提升
    攻击者在得到本地受限用户访问权之后,最简单的特权提升途径就是能够破解出Root用户的口令,然后执行su或sudo命令进行提升。第二种特权提升途径是发掘并利用su或sudo程序中的安全漏洞。最后一种本地特权提升技术利用了系统中的一些配置不当,通过从系统中搜索全局可写的敏感文件与目录位置并加以利用,仅拥有受限用户权限的攻击者可能让操作系统或特权程序执行一些他们所预期的操作,从而获得特权提升的机会。

    攻击者在Linux系统上进行本地特权提升目前最为流行的途径是直接攻击那些具有Root特权程序中的任意代码执行漏洞,让它们替攻击者打开具有Root权限的Shell命令行连接。根据受攻击目标程序的类型,这类途径又分为攻击用户态SUID特权提升漏洞以及攻击Linux内核代码特权提升漏洞。

    在用户态被设置了SUID位的网络服务与程序,可以在运行过程中提升至文件拥有(一般为Root)的权限,来执行一些系统资源相关的操作;在内核态运行的Linux Kernel以及第三方的内核驱动则具有完全控制系统的权限,其中存在你的安全漏洞为攻击者实施本地特权提升提供了潜在的通道。

    1.4.2 Linux系统上的消踪灭迹
    抹除Linux系统行为记录日志的首要步骤是改变当前活动的日志,以防止系统管理员注意到攻击者当前的登录活动,他们往往查看/etc/syslog.conf配置文件内容,来了解系统当前正在实施的审计事件类型以及日志的存储位置。

    攻击者还需要清理自己在Shell程序中所输入的命令历史记录。

    应对日志清理攻击的一种方法途径是将日志信息写到难以修改的媒介上,支持只许添加标志扩展属性的文件系统就是这样的一种媒介。另外一种更好且更容易实施的方法是使用syslog网络日志机制把关键的日志信息发送到另一台严密防护的安全日志服务器上去。

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

    预防Rootkit进入内核是最好对策,使用诸如LIDS之类的程序是很好的预防措施,能够提供“密封”内核从而防止被恶意修改。

    2.实践过程

    实践一:使用Metasploit进行Linux远程渗透攻击

    使用Metasploit渗透测试软件,攻击Linux靶机上的Samba服务usermap_script 安全漏洞,获取目标Linux靶机的主机访问权限。实践步骤如下:
      (1)启动Metasploit软件,可根据个人喜好使用msfconsole. msfgui. msfweb 之-一;
      (2)使用exploit: exploit/multi/samba/usermap.script 渗透攻击模块;
      (3)选择攻击PAYLOAD为远程Shell, ( 正向或反向连接均可);
      (4)设置渗透攻击参数(RHOST, LHOST, TARGET等);
      (5)执行渗透攻击;
      (6)查看是否正确得到远程Shell,并查看获得的权限。

    本次实践以VMware中的kali为攻击机,metasploitable-linux为靶机。注意两台虚拟机需要处于同一个网段,两者的IP地址如表所示:

    (1)在kali输入命令msfconsole,打开metasploit,进入其控制界面:

    然后再搜索一下usermap_script漏洞,命令为search usermap_script搜索结果如下图。

    这是针对这个漏洞的渗透攻击模块。

    输入命令use exploit/multi/samba/usermap_script,进入该渗透攻击模块

    (2)输入show payloads,选择攻击负载模块

    我选择11,bind_ruby,或者选择直接输入那个路径也可,输入set PAYLOAD 11

    (3)然后show options,查看需要配置的参数,主要是配置ip地址。按照靶机RHOST,攻击机LHOST的原则配置就行

    (4)输入exploit开始攻击。输入ifconfig查看一下靶机ip

    发现是靶机的IP地址,说明攻击成功。

    实践二:攻击方使用Metasploit 渗透软件针对Linux Metasploitable 靶机实施网络攻击,防御方则在Metasploitatble上使用tcpdump或Wireshark或Snort工具捕获攻击流,并分析出攻击者利用了哪个安全漏洞进行攻击,从官方网站上:下载该安全漏洞补丁进行系统修补,双方合作给出攻防过程报告。

    攻击方:使用Metasploit, 选择Metasploitable 靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
    防守方:使用tcpdump/wireshark/snort 监听获得网络攻击的数据包文件,并结合wireshark/snort分析攻击过程,获取攻击者IP地址、目标IP和端口、攻击发起时间、攻击利用漏洞、使用Shellcode,以及成功之后在本地执行命令输入等信息。
    团队合作完成渗透攻击与分析实验报告。
    (1)选择攻击的漏洞为实践一中的漏洞,攻击过程在此不再赘述。
    我们要做的就是在攻击机输入exploit之后,回车之前,利用wireshark实时监听经过网卡的数据包。
    攻击成功后,输入ls命令,抓取到的数据包为:

    (2)首先是TCP的三次握手过程,攻击机向靶机发起连接,攻击者IP地址、目标IP和端口、攻击发起时间如下图所示:

    (3)接着往下看可以看到有SMB协议包,我们知道,SMB(Server Message block)协议是window下所使用的文件共享协议,我们在linux系统或者其类unix系统当中可以通过samba服务来实现SMB功能。Samba服务是SMB的一个开源实现。

    (4)继续往下分析,可以看到43203-4444的端口交互数据包,追踪TCP数据流,得到如下所示:

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

    问题1:

    问题1解决方案:不停地试,最后攻击成功。

    4.实践总结

    本次实践对Linux系统的攻防有了了解,和windows操作系统有一些差异,值得进一步学习

    参考资料

  • 相关阅读:
    2014年工作中遇到的20个问题:141-160
    雷观(八):等我有钱了再付费,是一种很扯淡很没有远见的想法
    Mybatis中sql语句中的in查询,一定要判断null的情况
    Mybatis中sql语句中的in查询,一定要判断null的情况
    Java中的equals比较,小坑一个
    Java中的equals比较,小坑一个
    魔戒三曲,黑暗散去;人皇加冕,光明归来
    魔戒三曲,黑暗散去;人皇加冕,光明归来
    我才是真的“研究生”,虽然我只是本科毕业
    我才是真的“研究生”,虽然我只是本科毕业
  • 原文地址:https://www.cnblogs.com/fungi/p/12751701.html
Copyright © 2020-2023  润新知