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

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

一、实验内容

1. Linux概述

Linux系统结构

Linux操作系统内核的总体结构如图所示,属于一种典型的宏内核结构。在硬件抽象层之上是内核服务功能模块,包括进程管理、内存管理、文件系统、设备控制网络五个子系统;这些内核模块通过系统调用接口向用户态的GNU运行库及工具、命令行Shell、X窗口以及应用软件提供服务。

  • Linux进程与线程管理机制

    Linux内核采用抢占式多用户多进程模式,多个进程并发活动,由内核的进程管理模块来负责调度硬件资源进行使用,进程作为最基本的调度单元,维护一个进程控制块(PCB)结构,由内核schedule进程调度函数来依据进程优先级和CPU等资源情况来选择进程进行执行。

  • Linux内存管理机制

    Linux内存管理模块(MM)允许多个进程安全的共享物理内存区域。Linux的内存管理支持虚拟内存,在32位的i386机器上,每个进程拥有独立的4GB虚拟内存空间,内核的代码与数据段被映射到3GB以上的空间,而用户态代码申请的虚拟内存空间为0-3GB区间,每个进程使用两套段描述符来分别访问内核态和用户态内存空间。

  • Linux文件系统管理机制

    Linux内核使用了虚拟文件管理VFS机制,使得它能够支持数十种不同类型的逻辑文件系统,通过设备驱动程序访问特定硬件设备,而VFS虚拟文件管理为用户进程提供了一组通用的文件系统调用函数(包括 open、close、read、write等),可以对不同文件系统中的文件进行统一的操作。

  • Linux设备控制机制

    Linux内核中处理或者管理硬件控制器的软件叫做设备驱动程序。Linux核心的设备驱动程序本质上是特权的、驻留内存的低级的硬件控制例程的共享库。Linux的一个基本特点是抽象了设备的处理,所有的硬件设备都像常规文件一样看待。Linux支持三类硬件设备:字符设备、块设备和网络设备。

  • Linux的网络机制

    Linux内核中的网络模块提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议栈网络驱动程序。网络协议栈负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备通信,每一种硬件设备都有相应的设备驱动程序。

  • Linux系统调用机制

    Linux提供了系统调用接口,来允许应用程序透过这层接口来访问硬件设备和其他系统资源,这有助于保证Linux系统的稳定可靠和安全,并为用户空间提供了一种统一的抽象接口,有助于应用程序的跨平台移植。Linux的系统调用通过软中断实现。

2. Linux操作系统安全机制

Linux操作系统的核心机制主要是身份验证、授权与访问控制、安全审计这三部分。

2.1 Linux身份认证机制

Linux用户

在Linux系统中以用户作为执行进程完成特定操作任务的主体,用户具有不同的角色类型:

  • Root根用户:在系统中是唯一的拥有至高无上权限的超级用户,可以操作系统中任何的文件与命令。
  • 普通用户:由使用者创建的的登陆系统并执行基本计算任务的用户,只能操作自己目录中的内容,执行权限受限。
  • 系统用户:这类用户不具有登陆系统的能力,但是却是系统运行不可缺少的用户,比如用于启动网络服务的daemon、apache等用户。

Linux用户信息保存在系统的 /etc/passwd 文件中,具体包括用户名、每个用户唯一的uid、使用Shell类型等、而几秒口令字存放于 /etc/shadow 文件中,只对Root可读。

Linux用户组

Linux用户组其实就是具有相同特征的用户账号集合,用于简化整个系统的用户权限管理。用户组信息保存在系统的 /etc/group 文件中,包括用户组名称,用户组gid及用户组所包含的用户名列表,用户组加密口令字则保存在 /etc/gshadow 文件中。可以使用 id -a 命令来查询和显示当前用户所属组,并通过 groupadd 命令添加用户组,使用usermod -G group_name user_name向特定组来添加用户。

Linux本地及远程登录用户认证机制

  • 本地:对用户在控制台登录的认证过程,基本流程是:由init进程启动getty产生若干个虚拟控制台。在控制台上显示登录,当用户敲入用户时,getty执行登录进程,进入登录认证过程,认证成功后,登录进程会fork相应用户Shell的子进程,至此完成登录过程。

  • 远程:目前Linux系统普遍使用SSH服务来进行远程用户登录与网络访问,SSH提供两种方式的用户身份认证机制:

    • 基于口令的身份认证:使用Linux系统内建的用户账号和口令,就可以登录到远程主机上;

    • 基于非对称密钥的身份认证:需要用户为自己创建一对非对称密钥,并把公钥放置到需要访问的服务器上,连接SSH服务器时,客户端软件就会向服务器发出请求,请求使用证书方式进行身份认证,服务器收到请求之后,就是用请求用户的公钥加密“质询”并把它发送给客户端软件,客户端软件收到后就可以使用私人密钥进行解密,再发送给服务器端,完成基于非对称密钥的身份认证过程。

      基于非对称密钥的身份认证机制能够有效地抵抗会话劫持中间人攻击,较基于口令的认证机制更具有安全性。

Linux的统一身份认证中间件 —— PAM

为了能够给不同的应用软件,网络服务提供统一的身份认证机制,Linux系统中提供了PAM(可插入身份认证模块),作为一种验证用户身份的灵活与标准方法。PAM通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务认证方式分开,使得系统管理员可以灵活地根据需要,给不同的服务配置不同的认证方式而无须更改服务程序,同时也便于向系统中添加新的认证手段。

PAM支持的四种管理界面如下:

  • 认证管理:主要是接受用户名和密码,进而对该用户的密码进行认证,并负责设置用户的一些秘密信息。
  • 账户管理:主要是检查账户是否被允许登陆系统,账号是否已经过期,账号的登陆是否有时间段的限制等。
  • 密码管理:主要是用来修改用户的密码。
  • 会话管理:主要是提供对会话的管理和审计。

2.2 Linux授权与访问控制机制

Linux通过VFS虚拟文件系统来实现对不同类别文件系统格式的支持,并同时通过设备文件类型来统一集成对其它类型系统资源的管理。Linux的授权与访问控制机制在这种设计下变得非常简单,所有文件与设备资源的访问控制都通过VFS虚拟文件系统来实现。在Linux的虚拟文件系统安全模型中,主要通过文件所有者、文件访问权限和一些特殊权限来进行系统的授权与控制访问

文件的所有者

以文件所有者的uid以及文件所有者所在组的gis来指明文件属于哪个用户,在用户创建文件时,文件系统将自动设置新文件的所有者及其所在组,并自动的赋予文件所有者读/写权限。

文件的访问权限

文件的访问权限通过所附带的10个标志位来进行设置。其中第1个标志位一般用来区分文件类型,如“-”表示普通文件、“d”表示目录、“l”表示符号链接、“b”表示块设备文件、“c”表示字符设备等;第2~10这9个标志位每3个一组分为三组,分别表示文件所有者、与所有者同组用户以及其它用户对该文件的读、写、执行权限,含义如下:

  • R 读取:对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限。
  • W 写入:对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
  • X 执行:对文件而言,具有执行文件的权限;对目录来说,该用户具有进入目录的权限。

文件的特殊执行权限

在Linux系统文件访问权限的执行位上,有一类特殊的执行权限,或被称为“特权”,常见的是SUIDSGID权限。

  • SUID:允许可执行文件在运行时刻从运行者的身份提升至文件所有者权限,可以任意存取文件所有者能使用的全部系统资源。
  • SGID:设置了SGID位的程序执行时是所有者的组的权限进行运行,该程序就可以任意存取整个用户组所有能使用的系统资源。

Linux访问控制机制的不足及改进

只能将用户分为所有者、所有者所在组和其他用户这三种类别分配权限,而无法做到更细粒度的权限控制。POSIX ACLs for Linux内核补丁软件包能够帮助Linux内核实现ACL权限管理。

2.3 Linux安全审计机制

主要通过三个主要的日志子系统来实现,包括如下:

  • 连接时间日志:由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp,login等用户登录程序负责更新wtmp和utmp文件,是系统管理员能够跟踪谁在何时登录到系统。
  • 进程统计日志:由系统内核执行,当一个进程终止时,为每个进程往进程统计文件中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计。
  • 错误日志记录:由通用的日志服务记录服务syslogd(8)执行,各种系统守护进程、用户程序和内核报告值得注意的事件。

除了这些事件日志之外,Linux内核还集成了审计守护进程,来帮助系统管理员检测系统用户对某些安全措施的违背。

3. Linux系统远程攻防技术

针对Linux系统的攻击也遵循着系统攻击统一的逻辑流程:攻击者首先利用网络踩点、扫描和查点等技术手段来收集关于目标Linux系统的信息,然后攻击者从远程网络发掘某个监听网络服务中的安全漏洞或配置弱点,来获取本地Shell访问权,为一点获得Shell访问权,攻击者就已经在Linux系统上获得了立足之地,而转入本地攻击的环节,通常会利用各类提权技术获取Linux系统最高的Root用户权限,之后就可以根据意图为所欲为。

从远程网络上侵入Linux 系统的主要方法在目前来说,不外乎如下四种:

  • 对Linux 系统各种网络服务的身份认证过程所涉及的用户口令字进行猜测攻击,期
    望破解出某一服务真实有效的用户账户和口令,从而假冒该用户的身份进入系统。
  • 发掘 Linux 系统某个监听网络服务的安全漏洞并进行利用,在攻击目标服务进程中
    注入攻击负载模块代码进行执行,从而为攻击者提供本地 Shell的访问权。
  • 通过网页木马、发送欺诈邮件、提供特洛伊木马程序等技术和社会工程学手段,来
    攻击客户端程序和用户,由客户端软件或用户来安装和执行恶意程序,从而主动向
    攻击者打开Linux 系统的大门。
  • 在Linux 系统作为连接多个网络的路由器,或者打开“混杂模式”实施网络嗅探的
    监听器时,可能遭受攻击者特意构造的数据包攻击,从而被攻击者取得访问权。

3.1 Linux远程口令字猜测攻击

Linux系统主要支持telnet、rlogin、rsh和SSH协议的网络远程控制,这些协议使用了Linux系统内置的用户名和口令来对远程用户进行身份认证。攻击者如果能够通过这些网络协议远程猜测成功一组用户名和口令,那么就可以用这些信息远程登录到Linux系统上,获得本地访问权。

自动化工具:

  • Brutus
  • THC Hydra
  • Cain and Abel

防御措施:使用不宜猜中的强口令字。

3.2 Linux网络服务远程渗透攻击

Linux内核中的网络协议栈实现

Linux内核中的网络协议栈实现是每个网络服务所依赖的基础平台,因此一旦这些代码中存在具有远程代码执行危害后果的安全漏洞,那么无论该Linux系统开放何种服务,都可以被攻击者进行远程渗透攻击。

LAMP Web网站构建解决方案中的网络服务

LAMP(Linux/Apache/MySQL/PHP)是目前最为流行的Web网站构建解决方案,正是由于LAMP组合方案在Web服务器中的主导地位,也使得组合内的Apache、MySQL服务和mod_php服务扩展模块成为Linux系统主要的远程渗透攻击目标。

FTP、Samba等文件共享服务

FTP服务是互联网上非常古老的网络服务,用于文件交换和共享传输,FTP服务一般监听TCP 20和21端口,其中21端口用于控制命令传输,而20端口用于数据传输。

Samba是用来让Linux等操作系统与微软Windows系统SMB/CIFS网络协议相连接的网络服务。

电子邮件收发服务

Sendmail服务一直以来都是包括Linux在内的类UNIX系统上最流行的电子邮件手法服务,也是备受争议的不安全的知名网络服务之一。

防范措施:

  • 禁用所有不必要的网络服务
  • 尽量选择更安全的网络协议与服务软件,并使用最佳安全实践进行部署
  • 及时更新网络服务版本
  • 使用xinetd、防火墙为Linux服务添加网络访问控制机制
  • 建立入侵检测与应急响应计划流程

3.3 攻击Linux客户端程序和用户

攻击Linux系统用户

有经验的攻击者在技术手段难以攻破一些安全防御水平较高的Linux服务器时,往往还会在获取到管理员信息后,向管理员发送邮件、打电话或即时聊天过程中实施一些社会工程学攻击,来达到渗透。

防范措施:

  • 尽量保证常用的网络客户端软件的及时更新。
  • 提高自身安全意识、经验与心智能力,了解各种社会工程学技术也将有助于提高自身的扛欺骗能力。

3.4 攻击Linux路由器和监听器

攻击Linux路由器与防火墙

Linux 系统通过简单地配置“ip_forward=1”就能够以路由器模式运行,Linux 内核中
由net子系统的 route.c来主要实现路由器的寻址与数据包的转发功能,而一旦这些实现中存在漏洞,就可能被攻击者利用实施拒绝服务攻击。

攻击监听器&入侵检测器

Linux系统上用来实时监听与入侵检测的主流开源软件包括Libpcap抓包库、tcpdump命令行程序、Wireshark网络监听与协议分析软件、Snort入侵检测系统。

防范措施:

  • 对于维护网络中的设备,应及时关注厂商的安全威胁报告,并对已发现的安全问题进行修补。
  • 网络管理员在构建网络安全防御、检测与相应体系时,应站在攻击者角度,掌握攻击者的渗透入侵技术手段,尝试进行渗透攻击。

4. Linux系统本地安全攻防技术

4.1 Linux本地特权提升

提权手段:

  • 攻击者得到本地受限用户访问特权后,最简单的特权提升途径就是破解出Root用户的口令,并执行su sudo命令进行提升
  • 发掘并利用 susudo 程序中的安全漏洞
  • 直接攻击具有root特权程序中任意代码执行漏洞,打开具有root特权的shell命令行:
    • 攻击用户态SUID特权提升漏洞
    • 攻击Linux内核代码特权提升漏洞
  • 从系统中搜索全局可写的敏感文件与目录位置并加以利用

4.2 Linux系统上的消踪灭迹

攻击者在攻陷Linux系统之后,通常不希望给系统管理员留下自己的入侵记录,因而往往会清理系统上的日志记录,从而有效地抹除掉自己的行动踪迹。

应对日志清理供给的一种方法途径是将日志信息写到难以修改的媒介上,支持只需添加标志扩展属性的文件系统就是这样一种媒体。更号并且更容易实施的方法是使用syslog网络日志机制把关键的日志信息发送到另一台严密防护的安全日志服务器上去。

4.3 Linux系统远程控制后门程序

Linux系统上植入远程控制后门程序的类型主要有:

  • 特洛伊木马化的系统程序
  • 命令行后门工具
  • 图形化后门工具

二、实践过程

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

  • 使用Metaspolit作为渗透测试软件,攻击Linux靶机上的Samba服务usermap_script安全漏洞,获取Linux靶机的主机访问权限。实践步骤如下:
  • 使用exploit:exploit/multi/samba/usermap_script渗透攻击模块
  • 选择攻击PAYLOAD为远程shell
  • 设置攻击参数
  • 执行攻击
  • 查看是否得到正确的远程shell

A1:

本次实践使用Kali和Metasploit两台虚拟机,其中Kali作为攻击机,Meta作为靶机

IP Address
Kali 192.168.200.2
Meta 192.168.200.125

使用Kali,在终端启动metasploit,如图所示:

然后输入 use exploit/multi/samba/usermap_script,使用usermap_script漏洞,随后输入 show payloads显示所有可用载荷。在选择攻击载荷的时候,建议选用和meterpreter和reverse相关的载荷,本次攻击就选用图中标红的。

6

通过使用命令 set payload 18,随后设置攻击参数,都是常规操作。

6

通过show options,查看详细信息,参数完整。

7

然后使用exploit开始攻击,看到最后一行,说明建立了一个session,getshell成功。

7

进入shell模式,输入whoami查看权限,发现已经是root权限,所以无需提权。

9

Q2:攻防对抗实践

任务:

  • 攻击方:使用Metasploit选择Metasploitable靶机中发现的漏洞进行渗透攻击,获得远程控制权,并尝试进一步获得Root权限。
  • 防守方:使用wireshark监听获得网络攻击的数据包文件,并结合wireshark分析攻击过程,获得攻击者的IP地址,目标IP端口、攻击发起时间、攻击利用漏洞、使用shellcode,以及成功之后在本地执行命令输入等信息

A2:

(接实践一)打开wireshark,查看抓包结果,由下面两张图可以看出攻击方IP为192.168.200.2,攻击端口为33649,防守方IP为192.168.200.125,防守端口为139,攻击发起时间就是 Apr 20,2020 06:02:05

10 11

通过追踪TCP流,可以看到使用的shellcode

  • nohup:就是no hangup,不要挂断,忽略hup信号。标准输出内容会输出到当前目录的nohup.out日志文件中而不终端显示。
  • 2&>1:linux中的文件号,1是标准输出流,2是错误输出流,此处&>的意思是合并 标准输出和错误输出并重定向。
  • /dev/null:看到/dev就明白这是在linux的设备目录下。/dev/null是linux的一个空设备,放入这里的数据立即清除,所以只能写,读不出来什么。
  • sleep:来将目前动作延迟一段时间。
  • 最后一个&:最后面这个&就是后台运行的意思。
12

下面几张图片,可以看到攻击机输入的命令,和返回的响应数据。

13 14 15 16

最后一张图片,开始没懂是啥意思,参考了别人的博客,发现时段密文,可以解码,解码之后是 import pty; pty.spawn(“/bin/bash”),用来得到交互的shell。

17

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

Q:看不懂shellcode是啥意思。

A:百度之后,根据别人的分析才看明白。

四、实践总结

有了上次实践的经验,这次的实践没花多大功夫,但是用的还是书上的漏洞,没有自己找其他的漏洞,在上课前争取再找一个漏洞试一试。

posted @ 2020-04-21 11:15  王昱皓  阅读(305)  评论(0编辑  收藏  举报