20199105 2019-2020-2 《网络攻防实践》 第八周作业

这个作业属于哪个课程 :网络攻防实践

这个作业的要求在哪里 : 第八次作业-Linux操作系统攻防

我在这个课程的目标是 : 学习网络攻防相关技术并进行实践

这个作业在哪个具体方面帮助我实现目标:学习Linux操作系统基本结构、安全体系结构、远程安全攻防技术、本地安全攻防技术

一、实验内容

 


本章知识思维导图

1.1 Linux操作系统基本框架概述

  • Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构

  • 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性

  • Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等

Linux系统进程和线程管理机制

  • Linux内核采用抢占式多用户多进程(multiprocessing)模式,多个进程并发活动,由内核的进程管理模块负责调度

  • 内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程、停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)

Linux系统内存管理机制

  • 内存管理:是Linux内核中最重要的子系统,它主要提供对内存资源的访问控制。每个进程有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进程之间的互相干扰以及“坏”程序对系统可能造成的危害

  • Linux将虚拟地址空间划分为两个部分,分别为内核空间和用户空间

  • 虚拟内存:在32位的i386机器上,每个进程拥有独立的4GB虚拟内存空间,内核的代码与数据段被映射到3GB以上的空间,而用户态代码申请的虚拟内存空间为0-3GB区间,每个进程使用两套段描述符来访问内核态和用户态的内存空间

Linux系统的文件系统管理机制

  • 使用虚拟文件管理机制VFS

  • 支持的逻辑文件系统:ext2,ext3,ext4,vfat,ntfs

  • 通过设备驱动程序访问特定硬件设备

Linux系统的设备处理机制

  • 设备驱动程序:Linux内核中处理或者管理硬件控制器的软件

  • 基本特点是:抽象了设备的处理

  • Linux支持三类硬件设备:字符设备、块设备和网络设备

Linux系统的网络机制

Linux内核中的网络模块提供了对各种网络标准的存取和各种网络硬件的支持,网络接口分为网络协议栈和网络驱动程序。网络协议栈负责实现每一种可能的网络传输协议,其结构如图

Linux系统的调用机制

  • 系统调用:程序透过访问接口来访问硬件设备和其他系统资源

  • Linux系统的系统调用通过软中断来实现

 

1.2 Linux操作系统安全机制

Linux身份认证机制

  • Linux是一个多用户多任务的操作系统,通过创建多种角色类型的用户和用户组来实施用户身份管理

  • Linux用户的类型有:

用户类型 权限
root用户 拥有最高权限的用户,因此很受攻击者青睐
普通用户 由使用者创建并使用的用户,权限受限
系统用户 没有登陆的能力,用于系统运行的用户

 

  • Linux用户组:具有相同特征的用户集合,同一组内的用户有相同的权限

  • 登录认证机制:通过init进程执行启动getty产生若干个虚拟控制台,每个控制台执行login进程进入认证过程。login进程通过Crypt()函数对用户输入的口令进行验证,认证通过之后,login进程会fork响应的Shell子进程,至此完成登录过程

  • Linux的远程登录认证机制:第一种是基于口令的身份认证机制;第二种是基于非对称密码的身份认证机制。此外Linux系统中的大量网络服务都实现了自己的身份认证机制,如MD5散列、LANMAN\NTLM散列算法等等

PAM

PAM全称为Pluggable Authentication Modules,可插入认证模块。可以动态引入认证各种认证模块和插件,而无需重新加载系统。具有高度灵活性,随配随生效。

模块 功能
auth模块 实现用户认证。比如提示用户输入密码,或判断用户是否为root等
account模块 对用户的各项属性进行检查。比如是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等
session模块 实现用户登录前的,及用户退出后所要进行的操作。比如登录连接信息,用户数据的打开与关闭,挂载文件系统等
password模块 实现用户信息修改。比如修改用户密码

 

Linux授权与访问控制机制

  • Linux所有文件与设备资源的访问控制都是通过VFS虚拟文件系统来实现的

  • 文件所有者:使用文件所有者的uid和gid来指明文件的所有者,在用户创建文件的时候自动进行写入

  • 文件访问权限:文件访问权限通过附带的10个标志位来来进行设置。 第一位表示文件类型,二至九位每三位分成一组。组内三位分别表示,读取权限、写入权限和执行权限。三组分别代表所有者、所有组和所有用户

模式 权限
R(Read,读取) 具有读取文件内容的权限
W(Write,写入) 具有新增、修改文件内容的权限
X(eXecute,执行) 具有执行文件的权限

 

  • 特殊执行权限:设置了SUID或SGID的文件。SUID允许执行文件在运行时刻从运行者的身份提升至文件所有者权限。SGID与SUID类似,仅仅是以权限组的形式进行运行

  • 不足及改进:访问权限的细粒度不足,不支持完整的ACL访问控制列表设置

Linux安全审计机制

三个日志子系统:连接时间日志、进程统计日志和错误日志纪录

 

1.3 Linux系统远程攻防技术

从远程网络侵入linux有如下几种

  • 对linux的网络服务的身份验证过程中用户口令进行猜测攻击

  • 发现系统某个监听网络服务的漏洞并进行利用,注入攻击负载模块代码,获得本地shell的访问权

  • 通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术,加以社会工程学手段开展攻击,由用户主动安装执行恶意程序

  • Linux作为连接多个网络的路由器,或者开启“混杂模式”实施网络嗅探,可能遭受特意构造的数据包攻击,从而获得访问权

远程口令字猜测攻击

  • 通过前面提到的服务嗅探用户账户名或者使用缺省内件账户的用户名进行密码猜测

  • 口令字猜测攻击通常针对使用弱口令的的账户破解

  • 除了SSH网络服务之外,还可以通过对HTTP/HTTPS、FTP等用于自己账户体系和身份认证机制的网络服务进行猜测

  • 口令猜测的常用工具如下:Brutus、THC Hydra、Cain and Abel等工具

网络服务远程渗透攻击

  • Linux内核中的网络协议栈攻击

  • LAMP WEB网站中的网络服务攻击

  • FTP、Samba等文件共享服务

  • 电子邮件收发服务

  • 其他网络服务的攻击

书上列举的Linux系统常用网络服务最近的安全漏洞过于陈旧,这里更新了一些

服务 安全漏洞名称 CVE编号
Kernel Linux Kernel权限提升安全漏洞 CVE-2018-16276
Apache Apache Tomcat安全绕过漏洞 CVE-2018-1305
Samba Samba远程命令执行漏洞 CVE-2017-7494

 

网络服务远程渗透攻击的安全防范措施

  • 禁用不必要的网络服务

  • 尽量选择更安全的网络协议和服务软件,并使用最佳安全实践进行部署

  • 及时更新网络服务版本

  • 使用xinetd、防火墙为Linux网络服务添加网络访问控制

  • 建立入侵检测与应急响应计划流程

攻击Linux客户端程序和用户

攻击Linux平台上的客户端程序

应用软件 安全漏洞名称 CVE编号
Firefox 利用Firefox的堆漏洞进行攻击 CVE-2018-18500
IE IE浏览器远程代码执行高危漏洞 CVE-2019-1367

 

  • 攻击Linux系统用户:在难以攻破服务器的时候,可以通过电话、电子邮件等各种方式来用社会工程学的方法向服务器管理员套取各种信息,或者让其执行某些恶意程序

攻击linux路由器和监听器

  • 针对使用Linux作为路由器系统的路由器的攻击

  • 针对Linux下运行的监听器的攻击,如wireshark、dumpcap等等

针对攻击路由器和监听器的防范

  • 增强安全意识,关注厂商的安全威胁报告

  • 及时进行固件的升级

  • 掌握攻击者的入侵渗透手段,并进行渗透测试

 

1.4 Linux系统本地安全攻防技术

Linux本地特权提升

  • 本地特权提升的四种常用方式:破解Root用户的口令、发掘su和sudo程序中的安全漏洞、攻击用户态SUID特权提升漏洞和攻击Linux内核代码特权提升漏洞、从系统中搜搜全局可写的敏感文件与目录位置并加以利用

  • Linux口令字破解:通过/etc/shadow文件中纪录的口令的hash值,获取口令的加密值,后通过已知密文暴力猜测明文

  • sudo缺陷进行特权提升:通过sudo程序的漏洞,绕过程序的身份认证机制,获取权限

  • 利用用户态SUID程序:主要包括利用程序漏洞进行特权提升、本地缓冲区溢出攻击、符号连接攻击、竞争条件攻击、共享函数库攻击等

本地特权提升的防范措施

  • 在安装软件的过程中评估风险

  • 及时对服务器进行升级维护

  • 安全的配置系统,设置强口令字

  • 使用SELinux等安全增强模块

Linux系统上的消踪灭迹

  • 通过对message、auth、secure和xferlog等日志文件进行修改做到日志的清理

  • 通过对.bahs_history文件的清理,清理shell的命令痕迹

  • 防范日志消除

  • 将日志信息写道难以修改的媒体介质上

  • 将日志信息使用syslog网络机制写道防护严密的安全日志服务器上去

Linux系统远程控制后门程序

  • 通过替换对系统原有的远程登录程序进行替换实现后门

  • 通过图形化远程控制软件例如VNC实现攻击

 

二、实验过程

 


动手实践:使用Metaploit进行Linux远程渗透攻击

• 使用Metaspolit作为渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取Linux靶机的主机访问权限。实践步骤如下:

• 使用exploit:exploit/multi/samba/usermap_script渗透攻击模块

• 选择攻击PAYLOAD为远程shell

• 设置攻击参数

• 执行攻击

• 查看是否得到正确的远程shell,并查看获得的权限

角色 操作系统 IP地址
攻击机 Kali 192.168.1.108
靶机 Metaspolitable_Linux 192.168.1.112

 

  • 实验开始前,两个主机先相互ping一下,检查连通性
  • 实验选用了 exploit/multi/samba/usermap_script 渗透攻击模块,使用的漏洞为CVE-2007-2447:Samba远程命令注入漏洞,可在CVE官网查询

usermap_script名为username map script(用户名映射脚本)

漏洞原理:
Samba中负责在SAM数据库更新用户口令的代码未经过滤便将用户输入传输给了/bin/sh(sh解释器)。如果在调用smb.conf中定义的外部脚本时,通过对/bin/sh的MS-RPC调用,提交了未过滤用户输入,就可能允许攻击者以nobody用户的权限执行任意命令

在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本。
目前常见的shell脚本中主要有以下两种方式:
(1) #!/bin/sh
(2) #!/bin/bash

Linux的nobody是一个普通用户,没有特权,它存在的目的是为了让任何人都能登录系统

 

  • 首先,选择msfconsole启动Metaspolit软件,进入终端。根据实验要求,选择exploit:exploit/multi/samba/usermap_script渗透攻击模块

  • 使用show payloads查看所有可用的负载模块,这里选择18号cmd/unix/reverse

  • 设置攻击参数RHOST为靶机IP192.168.1.112,设置攻击参数LHOST为攻击机IP192.168.1.108,可以通过show options命令查看参数设置

  • 使用exploit / run命令开始攻击,可以看到攻击成功,建立会话session 1

  • 使用ifconfig命令查看是否正确获得远程shell,IP地址为靶机IP,成功

  • 查看获得的权限,使用whoami命令查看当前登录用户的用户名,为root。既然有root权限,那就不用提权了,尝试建立一个新用户flw,默认为新用户创建 home 目录

  • 回到靶机Metaspolit Linux,登录刚才新建的用户flw,成功

  • 在实验过程中,通过kali中的wireshark抓包,攻击时间及端口号其实可以在会话建立时就能看到

  • 其余信息通过分析数据包得到,可知本次攻击是利用基于SMB协议的漏洞,捕捉到了很多SMB数据包。当使用exploit攻击时,两个主机先建立TCP连接,再建立SMB会话。结合TCP三次握手原理,图中可以分析出,攻击者IP地址为192.168.1.108,目标IP地址为192.168.1.112;攻击者端口号为4444,目标主机端口号为42804

  • 追踪TCP流可以查看到攻击者在shell终端的命令操作(建立新用户flw等)

 


实践作业:攻防对抗实验

• 攻击方使用Metasploit渗透软件针对Linux Metasploitable靶机试试网络攻击,防御方在Metasploitable上使用wireshark捕获攻击流

• 攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。

• 防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息

 

首先,使用Messus工具对靶机Metasploit Linux进行漏洞扫描
扫了第一次发现Report里面啥也没有,心头一紧…结果发现因为去上体育课把靶机给关机了…被自己蠢到了O(∩_∩)O
看到分析结果,心头又一紧…这漏洞有点多啊,之前扫描实验SEED_Ubuntu好像比这个少,不过漏洞多好分析啊,对初学者是好事!

这里对几个不太熟悉的端口服务进行了查询

• 69端口:TFTP是Cisco公司开发的一个简单文件传输协议,类似于FTP
• 111端口:111端口是SUN公司的RPC(Remote Procedure Call,远程过程调用)服务所开放的端口,主要用于分布式系统中不同计算机的内部进程通信
• 113端口:113端口主要用于Windows的“Authentication Service”(验证服务)。
• 119端口:119端口是为“Network News Transfer Protocol”(网络新闻组传输协议,简称NNTP)开放的
• 137端口:137端口主要用于“NetBIOS Name Service”(NetBIOS名称服务),属于UDP端口,使用者只需要向局域网或互联网上的某台计算机的137端口发送一个请求,就可以获取该计算机的名称、注册用户名,以及是否安装主域控制器、IIS是否正在运行等信息。
• 139端口: 139端口是为“NetBIOS Session Service”提供的,主要用于提供Windows文件和打印机共享以及Unix中的Samba服务

  • 使用nmap扫描靶机,查看开放的端口及端口上程序的版本

下面是实验最艰难的一步,由于资质尚浅,在选择攻击哪个漏洞时一面懵B
最后,在一篇博客里Metasploitable2 靶机漏洞(下)终于找到了针对
Metasploitable2的远程代码执行漏洞,Distcc后门漏洞。在CVE中的编号是CVE-2004-2687

(似乎过于陈旧了,嗯…但是我千辛万苦找到的,还是想做一次渗透攻击)

  • 可以使用search distcc命令查看有哪些渗透攻击模块

  • 使用info查看详情,包括漏洞名称、影响的操作系统、终端、时间等

  • 设置RHOST为192.168.1.112等参数,使用show options命令查看shell权限账户及其所在的权限组

  • 使用exploit/run命令开始攻击,建立会话session 1,使用whoami命令查看当前登录用户的用户名,id命令查看UID和GID

UID也称为用户ID(UserID),GID也称为用户组ID(Group ID),UID和GID由Linux内核负责管理

  • 使用wireshark在实验过程中嗅探,可以看到DISTCC协议数据包

  • 对DISTCC协议数据包使用TCP追踪流查看到telnet,猜测在反连接攻击机4444号端口时,是使用telnet远程连接的。前面还可以看到一个sleep进程,但是这一部分网上没找到具体的原理

  • 继续通过TCP追踪流得到攻击者在shell终端使用的命令,图中是返回结果

原理:Distcc用于大量代码在网络服务器上的分布式编译,但是如果配置不严格,容易被滥用执行命令,该漏洞是XCode 1.5版本及其他版本的distcc 2.x版本配署对于服务器端口的访问不限制

 


三、学习中遇到的问题及解决

本章实验遇到的问题就是寻找一个合适的漏洞有点难

 


四、学习感想和体会

本周实验感觉是有史以来做的最快的一次,因为有了上周的经验,嘻嘻(_)。只是系统由Windows换成Linux,分析的方法都差不多,也对知识有了一个框架。因此本周将更多的精力花费在了实验中每一步命令、结果的原理分析上,或者知识点覆盖上。

 


参考资料

1. Linux系统结构 详解

  1. Linux查看用户及其权限管理

  2. metasploit 命令用法

  3. Ruby分布式对象

  4. Metasploitable2 靶机漏洞(下)

posted @ 2020-04-22 11:38  FLwww  阅读(279)  评论(0编辑  收藏  举报