问题 | 回答 |
---|---|
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/besti/19attackdefense |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10635 |
我在这个课程的目标是 | 学习教材第八章,了解Linux操作系统的网络攻防技术 |
这个作业在哪个具体方面帮助我实现目标 | 相关知识点和实践任务 |
1. 实践内容
1.1 Linux操作系统基本框架概述
1.1.1 Linux 系统结构
linux操作系统的总体结构如下图所示,在Linux内核中,在硬件抽象层中的各类设备驱动 和序可以完全访问硬件设备,方便地以模块化形式设置,并在系统运行期间可直接通过 LKM 机制(Loadable Kernel Module)装载或卸载。在硬件抽象层之上是内核服务功能模块,包括进程管理、内存管理、文件系统、设备控制与网络这五个子系统;而这些内核模块通过系统调用接口向用户态的GNU运行库及工具、命令行Shell、X窗口以及应用软件提供服务。
-
Linux进程与线程管理机制:Linux 内核采用抢占式多用户多进程(multiprocessing)模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用。
-
Linux内存管理机制:Linux内存管理模块(MM)允许多个进程安全地共享物理内存区域,每个进籽使用两套段描述符来分别访问内核态和用户态的内存空
-
Linux 的文件系统管理机制:Linux 内核使用了虚拟文件管理 VFS (Virtual File System) 机制,VFS 虚拟文件管理为用户进程提供了一组通用的文件系统调用函数(包括open 、close、read 、write 等),可以对不同文件系统中的文件进行统一的操作。
-
Linux 的设备控制机制:Linux 内核中处理或者管理硬件控制器的软件叫做设备驱动程序。Linux 核心的设备驱动程序本质上是特权的、驻留内存的低级的硬件控制例程的共享库。Linux 的一个基本特点是抽象了设备的处理,所有的硬件设备都像常规文件一样看待。
-
Linux 的网络机制:Linux 内核中的网络模块提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议栈和网络驱动程序。
Linux 内核通过上述五个方面的机制实现了操作系统基本的硬件管理与系统功能,这些内核模块都运行在 CPU 的核心态, 而应用程序则运行于用户态,它们并不能直接访问内核内存空间,也不能直接调用内核函数。Linux 提供了系统调用接口, 来允许应用程序透过这层接口来访问硬件设备和其他系统资源,这有助于保证 Linux 系统的稳定可靠和安全并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。
1.2 Linux 操作系统安全机制
与 Windows 操作系统类似,Linux 操作系统的核心安全机制也主要是身份认证、授权与访问控制、安全审计这三个部分。
1.2.1 Linux 身份认证机制
Linux 是一个多用户多任务的操作系统,通过创建多种角色类型的用户及用户组来实施用户身份管理,来确保多个用户安全地使用 Linux 操作系统。
-
linux 用户:
- Root 根用户:在系统中是唯 的拥有全高无上权限的超级用户,可以操作系统中 任何的文件与命令。
- 普通用户:由使用者创建的登录系统并执行基本计算任务的用户,只能操作自己目录中的内容,执行权限受限。
- 系统用户:这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户, 比如用于启动网络服务的 daemon、 apache 等用户,以及匿名访问的 nobody、 ftp 等用户。
Linux 用户信息保存在系统的/etc/passwd 文件中,具体包括用户名、每个用户唯一的 uid、使用 Shell 类型、用户初始目录等,而加密口令字则存放于 /etc/shadow 文件中,只对 Root 可读。
-
Linux 用户组:具有相同特征的用户账号集合,用于简化整个系统的用户权限理。 Linux 用户组信息保存在 /etc/gshadow 文件中,可以使用 id -a 来进行查询当前用户所属用户组。
-
Linux 的远程登录用户认证机制:第一种方式为基于口令的身份认证,使用 Linux 系统内建的用户账号和口令,就可以登录到远程主机上;第二种方式为基于非对称密钥的身份认证。此外 Linux 系统中的大量网络服务都实现了自己的身份认证机制,如 MD5 散列、LANMANNTLM 散列算法等等。
-
Linux统一身份认证中间件 PAM:PAM 提供一些动态链接库和一套统一的 API,将系统提供的服务和该服务的认证方式分开。PAM 支持的四种管理界面:认证管理,账户管理,密码管理,会话管理。
1.2.2 Linux 授权与访问控制机制
所有文件与设备资源的访问控制都通过 NFS 虚拟文件系统来实现
-
文件的所有者:每个 Linux 文件都拥有其所有者,表明了该文件屈于哪个用户所有,以文件所有者的 uid 以及文件所有者所在组的 gid 来指明。
-
文件的访问权限:文件访问权限通过附带的10个标志位来来进行设置。第一位表示文件类型,二到九位每三位分成一组。组内三位分别表示,读取权限、写入权限和执行权限。三组分别代表所有者、所有组和所有用户。
-
文件的特殊执行权限:SUID与SGID权限,SUID 权限允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限,可以任意存取文件所有者能使用的全部系统资源,设置了 SGID 位的程序执行时是以所有者的组的权限进行运行,该程序就可以任意存取整个用户组能够使用的系统资源。
-
Linux访问控制机制的不足及改进:访问权限的细粒度不足,不支持完整的ACL访问控制列表设置。
1.2.3 Linux 安全审计机制
Linux的安全审计机制则主要通过三个主要的日志子系统来实现:连接时间日志、进程统计日志和错误日志纪录。
- 连接时间日志:系统管理员能跟踪谁在何时登录到系统
- 进程统计日志:为系统中的基本服务提供命令使用统计
- 错误日志记录:报告值得注意的事件
1.3 Linux系统远程攻防技术
攻击者首先利用踩点、扫描和查点等技术手段来收集关于目标 Linux 系统的信息, 然后攻击者从远程网络发掘某个监听网络服务中的安全漏洞或配置弱点,来获取本地 Shell 访问权,而一旦获得 Shell 访问权,攻击者就已经在目标 Linux 系统上获得了立足之地,而转入本地攻击的环节。
- 远程网络上侵入 Linux 系统的主要方法:对 Linux 系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击;发掘 Linux 系统某个监听网络服务的安全漏洞并进行利用;通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术和社会工程学手段,来攻击客户端程序和用户;Linux 作为路由器所遭受的攻击。如下图所示
1.4 Linux系统本地安全攻防技术
攻击者在利用前面介绍的远程渗透攻击技术在Linux系统上获得访问权之后,就开始
转入本地攻击,接下来要进行本地特权提升攻击来提升他的访问权限,之后通过清理 Linux 系统事件日志来消踪灭迹,避免被系统管理员所发觉和追查,最后在离开他们攻陷的系统之前,还会植入后门程序,来确保他们以后能够轻易地重返这台系统。如下图所示
2. 实践过程
2.1 动手实践:使用 Metasploit 进行 Linux 远程渗透攻击
使用 Metasploit 渗透测试软件,攻击 Linux 靶机上的 Samba 服务 usermap_script 安全漏洞,获取目标 Linux 靶机的主机访问权限。实践步骤如下:
- 启动 Metasploit 软件,可根据个人喜好使用 msfconsole、msfgui、msfweb 之一;
- 使用exploit: exploit/multi/samba/usermap_script 渗透攻击模块;
- 选择攻击 PAYLOAD 为远程Shell,(正向或反向连接均可);
- 设置渗透攻击参数(RHOST,LHOST,TARGET等);
- 执行渗透攻击;
- 查看是否正确得到远程Shell,并查看获得的权限。
本次实验所采用的攻击机为kail linux,靶机为 Metasploitable2-Linux,ip地址如下表所示
主机名称 | ip地址 |
---|---|
kail | 192.168.200.3 |
linux | 192.168.200.125 |
首先,通过命令msfconsole
启动渗透软件
通过命令user exploit/multi/samba/usermap_script
使用渗透攻击模块,同时使用show options
查看需要配置的参数
设置攻击的PAYLOAD
为cmd/unix/reverse
,同时设置攻击的RHOSTS
为靶机地址192.168.200.125,和LHOST
为192.168.200.3
使用命令exploit
进行攻击,攻击成功
通过命令whomai
查看当前权限账户,发现当前权限账户为 root
2.2 实践作业
攻防对抗实践: 攻击方使用 Metasploit 渗透软件针对 Linux Metasploitable 靶机实施网 络攻击,防御方则在 Metasploitatble 上使用 tcpdump 或 Wireshark 或 Snort 工具捕获攻击流,并分析出攻击者利用了哪个安全漏洞进行攻击,从官方网站上下载该安全漏洞补丁进行系统修补,双方合作给出攻防过程报告。
- 攻击方: 使用 Metasploit,选择 Metasploitable 靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得 Root 权限。
- 防守方: 使用 tcpdump/wireshark/snort 监听获得网络攻击的数据包文件,并结合 wireshark/snort 分析攻击过程,获取攻击者 IP 地址、目标 IP 和端口、攻击发起时间、攻击利用漏洞、使用 Shellcode,以及成功之后在本地执行命令输入等信息。
- 团队合作完成渗透攻击与分析实验报告。
攻击过程:
首先使用 nmap 扫描靶机,查看开放的端口,及端口上的服务,命令nmap -sV 192.168.200.125
然后使用 nessus 扫描靶机的相关漏洞
(到这里时发生了一个问题,就是我的 kail 不知道为什么崩溃了,再次开机就无限登陆就是进不去......,试了一下午的解决方法都没用,最后只能重装系统了,心累)
选择UnrealIRCd Backdoor Detection
漏洞,漏洞编号为CVE-2010-2075
,网上搜索资料显示,这个漏洞原理为在DEBUG3_DOLOG_SYSTEM宏中引入外部的修改(特洛伊木马),远程攻击者可以执行任意命令。
在 kail 中使用命令search CVE-2010-2075
搜索可用模块
使用命令use exploit/unix/irc/unreal_ircd_3281_backdoor
设置攻击模块,和命令show payloads
查看可用载荷
选择载荷cmd/unix/reverse
,同时使用show options
查看所需配置
配置RHOSTS
和LHOST
(靶机地址和攻击机地址,分别为192.168.200.125和192.168.200.10)
exploit
执行
攻击成功
首先查看一下当前用户的权限whoami
,是 root 权限
然后查看一下靶机的网络配置
分析过程
由于靶机上没有 wireshark 工具,所以在 kail 上攻击的同时打开 wireshark 分析,分析过程如下所示
首先由捕获的数据包可知,ip 地址为192.168.200.10的主机的很多不同的端口向 ip 地址为192.168.200.125的主机的6667端口发送了很多数据包,因此可以确定攻击机的 ip 地址为192.168.200.125,目标主机的 ip 地址为192.168.200.125,目标端口为6667号端口
同时查看数据包详细信息可以得到攻击时间为4月20日,20点45分
接着上网搜索一下 linux 关于6667端口的信息,首先发现6667端口上提供 Internet 多线交谈服务(IRC),接着发现在6667端口上有一个关于 ircd 服务的漏洞 msf利用Metasploitable 2 漏洞之6667端口之unreal_ircd_3281_backdoor,再根据捕获的数据包中有关于 IRC 协议的数据包,攻击者大概率使用的是这个漏洞
追踪 TCP 流,可以发现攻击者使用的shellcode
以及攻击者在靶机上执行的命令,有ls
、ifconfig
和whoami
分析完成
3. 学习中遇到的问题及解决
- 问题1:关于实践二的漏洞寻找
- 问题1解决方案:一开始在扫描靶机漏洞完成后尝试了几个漏洞,但是都没有成功,最后由于 kail 莫名奇妙的出现了问题,导致一下午都在寻找恢复 kail 的方法,最后也没有找到,只好重装系统,然后又试了几个漏洞还是不行,最后实在没办法就参考了其他同学的博客
4. 学习感想和体会
通过学习教材和实践初步了解了对于 linux 系统的攻防技术。由于实践过程中出现了上述一点小麻烦,这次感觉心态有一点小崩。
参考资料
网络攻防技术与实践
msf利用Metasploitable 2 漏洞之6667端口之unreal_ircd_3281_backdoor
UnrealIRCd 后门未授权访问漏洞