20199116 2019-2020-2 《网络攻防实践》第八周作业
20199116 2019-2020-2 《网络攻防实践》第八周作业
前言
问题 | 解答 |
---|---|
这个作业属于哪个课程 | 《网络攻防实践》 |
这个作业的要求在哪里 | <作业要求> |
我在这个课程的目标是 | 熟练掌握网络攻防知识,学习第八章 Linux操作系统安全攻防 |
这个作业在哪个具体方面帮助我实现目标 | 学习Linux操作命令以及虚拟机的应用;学习网络攻防知识,为以后研究打下基础 |
作业正文 | 如下 |
其他参考文献 | 见正文最后 |
1.实践内容
1.1 Linux操作系统基本框架概述
1.1.1 Linux操作系统发展与现状
- Linux操作系统的优势
(1)开源代码免费
(2)跨平台的硬件支持
(3)丰富的软件支持
(4)多用户多任务
(5)可靠的安全性
(6)良好的稳定性
(7)完善的网络功能
1.1.2 Linux系统结构
-
Linux进程与线程管理机制:采用抢占式多用户多进程模式
-
Linux的内存管理机制
- 允许多个进程共享物理内存区域
- 内存管理模块为进程提供:内存分配、内存回收、请求分页、交换页等系统调用服务。
-
Linux的文件系统管理机制:Linux内核使用了虚拟管理VFS机制,可支持数十种不同类型的逻辑文件系统
-
Linux的设备控制机制
- Linux内核中处理或者管理硬件控制器的软件叫做设备驱动程序,本质上是特权的、驻留内存的低级的硬件控制例程的共享库。
-
Linux的网络机制
- Linux内核
- 网络接口可分为网络协议栈和网络驱动程序
- 网络协议栈负责实现每一种可能的网络传输协议,其结构如下:
- Linux的系统调用机制
- Linux提供系统调用接口,来允许应用程序通过这层的接口访问硬件设备和其他系统资源
- Linux系统的系统调用通过软中断来实现
1.2 Linux操作系统安全机制
1.2.1 Linux身份认证机制
Linux是一个多用户多任务的操作系统
-
Linux用户
- Root根用户,系统中权限最高,可操作系统中的任何文件及命令
- 普通用户,只能操作自己目录中的内容
- 系统用户,不具有登录系统的能力,但不可缺少,用于启动网络服务的daemon、apache等用户以及匿名访问的nobody、ftp等用户
-
Linux用户组
- 具有相同特征的用户账户集合,用于简化整个系统的用户权限管理。
- Linux用户组信息保存在/etc/gshadow文件中,可以使用id -a来进行查询当前用户所属用户组。
grouppadd
命令可添加用户组,usermod -G group_name_ user_name
向特定组添加用户
-
Linux的本地登录用户认证机制:
- 用户认证机制即是对用户在控制台登录过程
- 基本流程:通过init进程执行启动getty产生若干个虚拟控制台,每个控制台执行login进程执行认证过程,认证通过后,登录(login)进程会fork相应用户Shell的子进程,至此完成登录过程。
- 登录(login)进程通过crypt()函数对用户输入的口令进行验证,该函数会引入salt值,与用户密码一起加密得到加密口令字。
-
Linux的远程登录认证机制
- Linux系统普遍使用SSH服务来进行远程用户登录和访问
- SSH提供两种方式:第一种是基于口令的身份认证机制;第二种是基于非对称密码的身份认证机制。
- 此外Linux系统中的大量网络服务都实现了自己的身份认证机制,如MD5散列、LANMAN\NTLM散列算法等等。
-
Linux统一身份认证中间件--PAM
-
PAM的核心部分是库(libpam)和PAM模块的集合,它们是位于文件夹/lib/security/中的动态链接库(.so)文件,以及位于/etc/pam.d/目录中的各个PAM模块配置文件。PAM为认证任务提供四种可用的模块接口。
-
PAM支持的四种管理界面:
(1)认证管理:接受用户名和密码,对用户密码进行认证,设置用户秘密信息
(2)账户管理:检查指定账户是否被允许登录系统,检查账户是否到期
(3)密码管理:用于修改用户密码
(4)会话管理:提供会话管理和审计。会话在用户成功认证之后启动生效
-
1.2.2 Linux授权与访问控制机制
Linux通过上文提到的VFS虚拟文件系统来实现对不同类别文件系统格式的支持
- 文件所有者:使用文件所有者的uid和文件所在者gid来指明文件的所有者,在用户创建文件的时候自动进行设置。
- 文件访问权限:文件访问权限通过附带的10个标志位来来进行设置。 第1位表示文件类型,2至9位每3位分成一组。组内3位分别表示,读取权限、写入权限和执行权限。3组分别代表所有者、所有组和所有用户。
- 特殊执行权限:常见的是SUID或SGID的权限。SUID允许执行文件在运行时刻从运行者的身份提升至文件所有者权限。SGID位与SUID位类似,仅仅是以权限组的形式进行运行。
- 不足及改进:只能将用户分为所有者、所有者所在组和其他用户这三类别分配权限,访问权限的细粒度不足,不支持完整的ACL访问控制列表设置。
1.2.3 Linux安全审计机制
- 三个日志子系统
- 连接时间日志:系统管理员可跟踪谁在何时登录系统
- 进程统计日志:为每个进程写一个记录,目的是位系统中的基本服务提供命令使用统计
- 错误日志纪录
1.3 Linux系统远程攻防技术
1.3.1 Linux远程口令字猜测攻击
- Linux系统主要支持telnet、rogin、rsh和SSH协议的网络远程控制,这些协议对远程用户进行身份认证。
- 通过前面提到的服务嗅探用户账户名或者使用缺省内件账户的用户名进行密码猜测。
- 通常针对使用弱口令的的账户破解。
- 除了SSH网络服务之外,还可以通过对HTTP/HTTPS、FTP等用于自己账户体系和身份认证机制的网络服务进行猜测。
- 口令猜测的常用工具如下:Brutus、THC Hydra、Cain and Abel等工具。
- 防御远程口令猜测技术
- 确保每个用户都有自己的有效账户和口令字,而不是都使用一个Root特权账户
- 特权账户应避免远程直接登录,只能在本地登录
- 口令长度至少达到8个字符,包含字母、数字和标点符号
- 对多次认证失败进行纪录,并在多次无效登录之后断掉连接
- 不要再自己登录的所有系统上都使用相同的口令字
- 不要笔录自己的口令字
- 使用基于公开密钥证书的身份认证机制
- 修改网络服务的默认端口
1.3.2 网络服务远程渗透攻击
- Linux内核中的网络协议栈攻击
- LAMP WEB网站中的网络服务攻击
- FTP、Samba等文件共享服务
- FTP服务一般监听TCP20和21号端口,其中21号端口用于控制命令传输,而20号端口则用于数据传输
- Samba是用来连接Linux等类UNIX的操作系统与微软的windows系统SMB/CIFS网络协议相连接的网络服务,在TCP445端口上监听
- 电子邮件收发服务
- 其他网络服务的攻击
- 网络服务远程渗透攻击的安全防范措施
- 禁用不必要的网络服务
- 尽量选择更安全的网络协议和服务软件
- 及时更新网络服务版本
- 使用xinetd(网络守护进程服务程序)、防火墙为Linux网络服务添加网络访问控制
- 建立入侵检测与应急响应计划流程
1.3.3 攻击Linux客户端程序和用户
- 攻击Linux平台上的客户端程序
- 攻击Linux系统用户
- 获取系统管理员信息,结合社会工程学
- 攻陷一些软件发行和分发站点,对站点上提供的软件进行特洛伊木马化,木马化版本在运行时引入后门,让未经授权的用户远程获得系统的Root权限
- 客户端与用户攻击的安全防范措施
- 了解社会工程学知识,提高抗欺骗能力
- 及时更新软件
- 在下载软件的时候通过官方下载渠道,并校验MD5
1.3.4 攻击路由器和监听器
- 攻击Linux路由器与防火墙
- 攻击Linux下运行的监听器和入侵检测器,如Libpcap抓包库、tcpdump命令行程序、wireshark软件、snort入侵检测系统等等
- 针对路由器和监听器攻击的防范措施
- 网络管理员增强安全意识,关注厂商的安全威胁报告
- 及时进行固件的升级
- 掌握攻击者的入侵渗透手段,并进行渗透测试
1.4 Linux系统本地安全攻防技术
1.4.1 Linux本地特权提升
- 本地特权提升的常用方式:
(1)破解Root用户的口令,然后执行su或sudo命令进行提权- 通过/etc/shadow配置文件中记录的口令的hash值,获取口令的加密值,后通过已知密文暴力破解猜测明文,从而破解口令字。
(2)发掘并利用su或sudo程序中的安全漏洞 - 可以通过一些方式绕过身份认证机制,或利用路径误配置使攻击者创建文件并执行。
(3)攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞。 - 利用用户态SUID程序:主要包括利用程序漏洞进行特权提升、本地缓冲区溢出攻击、符号链接攻击、竞争条件攻击、共享函数库攻击等
(4)最后可以通过从系统中搜索全局可写的敏感文件与目录位置并加以利用
- 通过/etc/shadow配置文件中记录的口令的hash值,获取口令的加密值,后通过已知密文暴力破解猜测明文,从而破解口令字。
- 本地特权提升的防范措施
- 在安装软件时评估风险
- 及时对服务器进行升级维护
- 安全的配置系统,设置强口令字
- 应用SELinux等安全增强模块
1.4.2 Linux系统上的消踪灭迹
- 攻击者在攻陷Linux系统后,通常不希望给系统管理员留下自己的入侵记录,因而往往会去清理系统上的日志目录,抹除掉自己的行动踪迹。
- 对于文本文件使用vi、emacs等文本编辑工具进行日志清理工作;对于记录登录的wtmp文件,使用wzap专用工具清理
- 攻击者还需要清理的是自己在shell程序中所输入的命令历史记录,Linux系统中的很多shell程序都记录运行过的历史命令,以提供检索和重复执行命令的功能。
1.4.3 Linux系统远程控制后门程序
- 主要类型有:
- 特洛伊木马化的系统程序:攻击者将原有的系统程序(如远程登录和控制软件)进行替换,使其具备某些后门功能。
- 命令行后门工具:提供远程命令行shell的访问,通常是使用Netcat等后门工具在系统上运行,开放监听一个TCP端口,在接收到请求之后返回一个Linux系统shell与客户端进行交互。
- 图形化后门工具:最为常用的是图形化远程控制免费软件VNC。
1.2 实践
实践一:使用Metaploit进行Linux远程渗透攻击
1)使用Metaspolit作为渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取Linux靶机的主机访问权限。实践步骤如下:
2)使用exploit:exploit/multi/samba/usermap_script渗透攻击模块
3)选择攻击PAYLOAD为远程shell
4)设置攻击参数
5)执行攻击
6)查看是否得到正确的远程shell
-
攻击机kali(192.168.200.6),靶机Metasploitable(192.168.200.125),确定二者之间可以ping通。
-
使用kali内的Metaspolit作为渗透测试软件,可通过执行命令
msfconsole
启动渗透软件,也可通过在kali界面右上角进入然后搜索。 -
search samba
,搜索Samba服务漏洞,找到针对usermap_script安全漏洞的渗透攻击模块名称为13.exploir/multi/usermap_script,如下图:
- 通过
use 13
命令使用渗透攻击模块,或者命令use exploit/multi/samba/usermap_script
,然后进行show options
show payloads
,set PAYLOAD 18
设置攻击的PAYLOAD为cmd/unix/reverse
- 设置渗透攻击参数,设置RHOST为靶机地址192.168.200.125,LHOST为攻击机地址192.168.200.2
- 通过执行
run
或者exploit
命令执行渗透攻击
- 命令shell,ls;
whoami
命令查看用户权限,为root;通过id查看shell权限账户及其所在的权限组,故攻击成功
实践二:攻防对抗实验
攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP和端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息。
- 我重复实践一,并进行数据抓包
- 攻击后查看数据包,首先查看攻击发起时间
我认为攻击时间应该是在经过三次tcp握手协议后的,第一个SMB开始的。
- 由上图也可得出,攻击者的IP地址192.168.200.2,端口43905;目标IP192.168.200.125,端口139
- 攻击利用了139端口漏洞。139端口属于TCP服务,在Unix中用于Samba服务。开启139端口虽然可以提供共享服务,但是常常被攻击者利用,以此获取用户名和密码。
- 查看攻击成功建立连接使用的shellcode
- 我还找到了我输入的命令,截几张图:
攻击过程:
- 首先攻击机向靶机发送一个SMB的Negotiate Protocol Request(协商协议请求)数据包,并列出攻击机所支持的SMB协议版本
- 服务器响应一个SMB的Negotiate Protocol Response(协商协议响应)数据包
- 攻击机向靶机发起一个Session setup X request(会话设置请求)数据包,会话的用户身份为:anonymous(匿名用户)
- 靶机确认身份后发送一个Session Setup X Response(会话设置响应)数据报同意本次连接。
1.3学习中遇到的问题与解决
没有
1.4实践总结
整个过程还算顺利