Skip to content

Latest commit

 

History

History
549 lines (335 loc) · 30.6 KB

File metadata and controls

549 lines (335 loc) · 30.6 KB

二、高级 Linux 攻击

现在,我们已经清楚地了解了不同的渗透测试方法、阶段和需求,游戏才刚刚开始。是时候系好安全带了,因为在本章中,您将深入研究 Linux 环境的安全问题,从 Linux 基础设施渗透测试的高级概述到发现内核漏洞的深层次。本章概述了防弹 Linux 基础架构所需的技能和工具。

Linux 基础

Unix 是贝尔实验室利用的一种操作系统。基本上,它在命令行界面上工作,并且是为大型系统设计的。这个操作系统不是免费的,但它是专有的和可移植的。Linux 是 Linus Torvalds 在 1991 年利用的 Unix 克隆。它是开源的,你可以在任何有处理器的地方使用它。Linux 非常灵活,您可以根据 GNU通用公共许可证GPL许可证)对其进行修改和实现。

Linux 命令

在本小节中,让我们打开命令行并执行一些基本命令。在每台 Linux 主机中,都有名为shell的命令行接口,用于解释和执行类型化命令和脚本。有很多 shell 环境,比如Bourne Reash shellBash是最常见的 shell)、C shellcsh)、Korn shellksh等等。要查找适用于您的环境的 shell,只需打开命令行界面并键入cat /etc/shells

现在,让我们从 shell 中了解一些重要的基本 Linux 命令:

  • pwd:了解您所在的目录
  • ls:列出目录中的文件
  • cd:输入目录
  • mkdir:新建目录
  • rmdir:删除目录
  • touch:创建新文件
  • cat:读取文件
  • cp:复制文件
  • mv:移动文件
  • man:显示如何使用命令

Linux 是区分大小写的(为用户提供许多命令选项-T- t-a- A等等),因此您需要检查如何编写每个命令。

作为渗透测试人员,为了测试 Linux 基础架构的安全状况,您需要知道多个重要的命令:

  • hostname:主机信息
  • cat /proc/version:内核信息
  • uname -r:内核发布
  • uname -a:更详细的系统信息
  • cat /proc/cpuinfo:读取处理器的相关信息
  • echo $PATH:显示PATH变量的相关信息
  • history:显示命令历史记录

溪流

Linux 提供了输入/输出重定向功能,以方便执行任务。它使您能够使用以下三种类型的流操作 I/O 流:

  • 标准输入(stdin):在该流中,输入来自键盘
  • 标准输出(stdout):该流直接在屏幕上显示结果
  • 标准错误(stderr):这是另一种标准输出流,但它携带错误信息,而不是在屏幕上显示输出

重定向

重定向是 Linux 提高生产率的另一项功能。您可以使用简单的符号重定向流。您可以使用>>>将命令输出重定向到文本文件,如果您想追加文件而不覆盖文件;例如,ls > Simple_file.txt

另外,如果您想将一个流从一个命令重定向到另一个命令,建议使用类似以下行的管道,其中列出了当前目录中的前两个文件ls | head -2

Linux 目录结构

Linux 目录有一个标准结构。根据 Linux,一般来说,所有东西都是一个文件,甚至是目录和设备。为了正常工作,Linux 在分层设计下以特定方式管理这些文件:

  • /root:所有文件和目录都从该目录开始
  • /home:包含所有用户的个人档案
  • /bin:包含所有二进制文件(可执行文件)
  • /sbin:类似/bin,但包含系统二进制文件
  • /lib:包含所需的库文件
  • /usr:包含普通用户使用的二进制文件
  • /opt:包含可选的附加应用程序
  • /etc:包含程序所需的所有配置文件
  • /dev:包含设备文件
  • /media:包含临时可移动设备的文件
  • /mnt:包含文件系统的装入点
  • /boot:包含引导加载程序文件
  • /tmp:包含临时文件
  • /var:包含变量文件,如日志
  • /proc:包含系统流程信息:

Linux 操作系统中有许多类型的文件。每个文件都由特定的符号目录、常规文件和套接字表示,它们是应用程序之间的通信技术。

用户和组

以下小节将介绍管理用户帐户和组所需的 Linux 命令。要创建新用户,请使用useradd命令;例如,useradd <user>

此外,您还可以添加有关新用户的更多信息,例如相关 shell、用户目录和过期日期:

useradd <user> -d </Directory>
useradd <user> -e <date>
useradd <user> -s <shell>

每个用户都必须拥有密码,为了更改密码,他们需要 root 访问权限。要更改用户密码,请使用passwd命令,如下所示:

passwd <user>
$ passwd
Changing password for user1
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

要删除用户,请使用userdel命令。例如,userdel -r <user>,增加-r选项,删除所选用户的文件。

使用组是管理 Linux 帐户的一种技术。将用户分组是一种安全措施,也是一种隔离方法。要列出 Linux 系统中的所有组,请使用cat命令在/etc目录中显示group文件。

从屏幕截图中可以看到,group文件包含 Linux 系统中的所有组。只需输入cat /etc/group

要创建新组,请使用newgrp命令newgrp <Group_Name>

权限

Linux 是一个多用户操作系统。为了保护用户帐户和组,为每个用户和组授予了不同的权限。Linux 系统中有三种主要权限:读取、写入和执行。这些可以描述如下:

  • 读取是指如果目标是目录,则可以查看文件并列出内容。以字母(r表示。
  • 写入允许用户修改目录中的某些文件和内容。以字母(w表示。
  • 执行允许用户运行脚本或程序并更改目录。以字母(x表示。

有三种类型的权限,如下所示:

  • 设置用户标识SUID):设置 SUID 时,文件将以与用户相同的权限执行。
  • 设置组 IDSGID):与 SUID 相同,但文件执行权限与组相同。
  • 粘滞位:当您可以创建、修改或执行,但不能删除其他用户的文件时,使用此权限。通常用于共享库。

chmod 命令

要更改文件的权限,需要使用chmod命令chmod <letters> <file or directory>。您也可以使用八进制格式而不是字母chmod <octal format> <file or directory>。要将权限从字母格式转换为八进制格式,需要将每个权限转换为一个值:

| | 用户 | | 其他 | | 4. | 阅读 | 阅读 | 阅读 | | 2. | 写 | 写 | 写 | | 1. | 处决 | 处决 | 处决 |

现在,让我们举一个例子,看看如何简单地使用八进制格式的chmod命令。假设我们需要给用户读写权限,给组读权限,给其他组执行权限。那么八进制格式将是641,因为:

  • 用户读写=6
  • Read=4
  • 其他执行=1

最终命令为:chmod 641 <file>

周司令部

现在,要更改文件的所有者,请使用chown命令chown user:group <file>。要包含所有包含的文件,请添加选项-R(递归模式)。

chroot 命令

chroot是一种将非根进程及其子进程与其他系统组件分离的技术。这种隔离是在 Linux 操作系统中设计的,以确保当子系统受到危害时,不会影响整个系统。其想法是让进程认为它在根文件夹中运行,但实际上,它将在管理员创建的目录中运行。那么,让我们来看看创建一个科洛特监狱所需的步骤:

  1. 首先,您需要创建一个新用户并命名它;例如,prisoner

  1. 将用户添加到组根目录gpasswd -a prisoner root
  2. 您可以通过/etc/group验证是否添加了新用户:

  1. 现在创建一个名为chroot的新目录,并输入它
  2. 创建这些文件夹:bindevetchomehome/prisonerlibvarusrusr/bin *** 这里至少需要binlib目录:**

**

  1. 接下来,使用cp命令cp /bin/bash /chroot/bin复制bash实用程序,包括所需的共享库:

  1. 最后,使用chroot命令建造监狱chroot /chroot /bin/bash

find 命令的威力

在上一章中,我们发现了了解如何从大量数据中提取正确信息的重要性。当您使用 Linux 时,了解如何查找和提取信息将帮助您有效地利用时间。

find是一个非常有用的命令,可以帮助用户根据定义的标准定位任何文件。find命令的格式如下:

$ find <location> <criteria> <Target-file>

通配符是帮助用户的一个很好的附加功能。它们的灵感来源于通配符术语,该术语描述了为一张卡分配任何值的事实。例如,当您在命令中使用星号通配符(*)时,这意味着*可以是任何值,例如此处的示例,以列出目录中的所有文本文件:

ls *.txt 

以下屏幕截图说明了前面命令的输出:

问号(?)和方括号([xyz])也是通配符的类型。因此,问号仅表示一个值,而括号表示中间的任何值。还有一些其他表示法,如[:digit:] :所有数字、 [:upper:]:所有大写字母等。

以下是 find 命令用于 Linux 攻击的其他一些示例:

  • 要显示当前用户的 bash 历史记录,请执行以下操作:
cat ~/.bash_history
  • 要查找根 suid,请执行以下操作:
find / -uid 0 -perm -4000 -type f 2>/dev/null
  • 要显示/var/log中的文件,请使用ls /var/log命令:
find /var/log -type f -exec ls -la {} ; 2>/dev/null

作业、cron 和 crontab

自动化是 Linux 操作系统的一个重要方面。对于系统管理员和渗透测试人员来说,自动化许多任务以避免在重复这些任务时浪费时间是很重要的。如前一章所述,渗透测试是一项有时间限制的任务。因此,良好的时间管理是每个成功的五星级酒店都需要的技能。Linux 为用户提供了在特定时间以可重复的方式运行命令或脚本的调度功能。cron 实用程序是实现这一点的关键。Cron 使您能够在定义的时间内作为例程运行后台作业。以下是 cron 命令格式:

<Day of the week> <Month> <Day of the Month> <Hour> <Minutes> <Command>

可以使用crontab -l列出所有 cron 作业。它们也可以在/etc/crontab中找到:

安全模型

安全模型是以逻辑方式表示安全策略的特定机制。这些模型基于美国国防部标准 5200.28 中描述的可信计算基础TCB。该标准也称为橙色手册。它将 TCB 表示为受信任的系统组件,负责对任何系统的访问控制。TCB 受到一个称为安全周界的虚构边界的限制。TCB 和其他子系统之间的每个连接都应该可以使用有时称为安全路径的安全通道。安全模型用于防止未经授权的信息流。换句话说,他们断言信息是从低级安全性流向高级安全性,而不是相反。还有其他名为非干扰模型的模型,它关注的是每个主体的行为,而不是信息流。以下是一些众所周知的安全模型:

  • 贝尔-拉帕杜拉模型:该模型基于对象的机密性。它规定了不读取策略和不写入策略(第一个名为简单安全属性,第二个名为星型安全属性
  • Biba 模型:这是一个专注于对象完整性的层级系统。它有两个属性:简单完整性公理规定了不可读取的策略;星形完整性公理规定了不可写入的策略。
  • Clark Wilson 模型:这规定只有授权用户才能更改数据的完整性。

安全控制

在探索访问控制之前,让我们先了解一下安全控制中的一些重要术语。根据定义,作为名词的控件意味着根据标准进行检查的实体。安全控制分为三大类:

  • 管理安全控制:使用管理技术和计划来降低以下风险:

    • 脆弱性分析
    • 五旬斋
    • 风险分析
  • 技术安全控制:也称为操作安全控制。他们使用技术和意识作为保障。以下是一些例子:

    • 防火墙
    • 加密
    • 入侵检测系统
    • 防病毒
    • 训练
  • 物理安全控制:这些是用于保护以下数据的物理保护措施:

    • 摄像机
    • 盖茨
    • 生物特征
    • 传感器

访问控制模型

访问控制是技术安全控制的一种形式。主语和宾语是两个重要的术语。主题是活动实体,例如动作(例如修改或访问文件)。对象是静态系统实体,例如文本文件或数据库。基本上,有三种类型的访问控制模型,描述如下:

  • 强制访问控制(MAC):系统通过对象权限检查主体的身份及其权限。所以通常,主题和对象都有使用排名系统的标签(绝密、机密等)。
  • 自主访问控制(DAC):允许对象所有者为用户设置权限。密码是 DAC 的一种形式。
  • 基于角色的访问控制(RBAC):顾名思义,访问基于分配的角色。

Linux 攻击向量

攻击是威胁代理对信息系统资产的实际行为。攻击目标的路径称为胡氏 T0 攻击向量 AUT1。攻击向量和威胁主要有三种:

  • 网络威胁:指对组织网络的威胁
  • 主机威胁:这些是针对主机的威胁,包括硬件和操作系统
  • 应用威胁:指对系统程序的威胁

使用 LinEnum 的 Linux 枚举

枚举是每次成功攻击的关键。这是黑客系统的关键阶段,也是信息收集的重要部分。在此阶段,攻击者在它们和目标(本地或远程)之间建立连接,以收集尽可能多的信息以确定攻击向量。要枚举 Linux 主机,可以使用名为LinEnum的实用程序,并从下载它 https://github.com/rebootuser/LinEnum.

这是一个有用的 shell 脚本,它使用至少 65 项的清单(如内核和敏感用户信息)收集 Linux 主机的信息,以便找到升级点:

例如,以下屏幕截图显示了有关已登录用户和系统组的信息(清单中的两项):

基于 Nmap 的操作系统检测

第一步是检查主机是否处于活动状态。要验证机器的状态,请键入nmap –sP <target>;目标可以是 IP 地址或一系列地址:

基本上,检查是使用 ICMP 请求,因此,由于防火墙和入侵检测系统,许多网络管理员正在阻止此协议请求。因此,渗透测试人员可以使用 TCP 或 UDP 请求(别担心,我们将在下一章详细介绍网络方面和协议)。要实现此目标,您可以使用 nping 实用程序:

Nmap 具有检测操作系统的强大能力,这要归功于它基于 TCP 和 UDP 数据包的庞大数据库。要检测操作系统,只需使用-ONmap 选项nmap –O <Target>

要检测操作系统和服务,请使用nmap –n –A –T5 <target>。它根据端口检测活动服务。以下是一些带有端口的服务:

| 服务 | 端口 | | telnet | 23 | | ftp | 21 | | http | 80 | | pop3 | 110 | | https | 443 | | ntp | 123 | | ldap | 389 | | postfix | 25 | | Imap | 143 |

作为渗透测试仪,应记录每个步骤;这就是为什么 Nmap 提供了一个输出选项来导出扫描结果。只需使用-oN选项(您可以在三种格式中进行选择:文本(N)、格雷帕(G)或 XML(X)):nmap –n –A –T5 <target> -oN report.txt

特权升级

权限提升是试图获取未经授权的高权限的过程,主要是试图获取根权限。它正在从用户帐户转到根帐户。为了获得管理权限,攻击者利用系统中的弱点(编程错误、错误配置等)。有两种类型的权限提升:垂直和水平。当攻击者从较低权限移动到较高权限时,这是一种垂直升级。如果他以相同的权限从一个帐户转移到另一个帐户,则是横向升级。为了在 Linux 环境中获得根权限,攻击者使用了许多技术:

  • 利用 Linux 服务:如前所述,攻击者试图找到漏洞以利用权限。Linux 服务和配置是每个黑客和渗透测试人员的良好入口点。我们有以下例子:
    • X11 服务:X11 是 Linux 环境下的图形引擎。许多接口可以在它上面运行,比如 Gnome 和 KDE。X11 服务基本上运行在 6000-60063 个端口上。如前所述,您可以使用 Nmap 枚举活动 X11 服务的主机。X11 的弱点之一是攻击者可以使用 xspy 工具记录每一条写入的信息。此处的图像描述了 Linux XServer 环境:

 pip install <python_library>

  • 通配符:它们可能是致命武器。研究人员(回到未来:Unix 通配符变得疯狂——Leon Juranic)表明,通配符可以用于注入任意命令。
  • SUID 滥用:这可以通过使用需要 root 权限的程序(如 Nmap)在系统上运行其他命令来完成。
  • Linux 内核漏洞:这是最危险的技术。如果攻击者能够利用内核进行攻击,他将完全控制受损系统。

Linux 特权检查器

Linux 特权检查器是一种枚举工具,具有特权升级检查功能。要尝试一下,请从下载 http://www.securitysift.com/download/linuxprivchecker.py 。您可以使用wget命令下载,如下所示:

wget http://www.securitysift.com/download/linuxprivchecker.py

您可以通过键入**./linuxprivchecker.pypython linuxprivchecker.py**在您的系统上运行它。

用于 Unix 和 Linux 操作系统的另一个工具称为 Unix 检查器。可在获取 http://pentestmonkey.net/tools/audit/unix-privesc-check

Linux 内核攻击

黑客有很多动机,但没有什么能与完全控制系统的兴奋相比。这可以通过利用 Linux 内核来实现。攻击该系统的核心将使黑客感觉自己处于世界之巅;这就是为什么内核代表了每个黑客的高优先级目标。

用户土地与内核土地

大多数操作系统都依赖于环保护模型。该模型表示从高到低的重叠概念环。共有四层,编号从 0 到 3:

  • 环 3:该层为常用交互层,用户通常处于用户模式。
  • 环 2:该层包含低权限的操作。
  • 环 1:这是输入/输出操作层。
  • 环 0:这是最敏感的一层。内核驻留在这个层中。

Linux 和许多最近的操作系统一样,并不完全依赖于环保护机制,但它采用两层模式:用户模式和内核模式。内存分为两个部分和区域:用户区域和内核区域。第一种是由普通程序使用的,因此这片土地上的进程使用的内存有限。第二部分使用所有内存,它运行最可信的代码。

系统调用

系统调用或系统调用用户区内核区之间的接口。它因建筑而异;例如,在较旧的处理器中,中断用于两个空间之间的事务。现在,在较新的体系结构中,使用了优化的指令:

Linux 内核子系统

Linux 内核由许多组件组成:

  • 内存管理器:负责访问内存
  • 进程调度器:负责管理进程
  • 虚拟文件系统:这代表了与各种设备的通用文件接口
  • 网络接口:管理网络标准和网络设备
  • 进程间通信:管理单个系统中多个进程之间的通信
  • 设备驱动程序:这些驱动程序用于使设备硬件可用

过程

进程是程序的一个实例。当一个程序加载到内存中时,它被命名为一个进程。一个进程可以处于不同的状态:新建、运行、等待、就绪和终止。在 Linux 中,每个进程都有一个名为PID的标识。您可以使用ps命令进行检查:

线程

线程就像进程。虽然进程在单独的内存空间上运行,但线程在共享内存上运行。它们可以被安排执行。

安全增强式 Linux

安全增强型 LinuxSELinux)是美国国家安全局(NSA)利用的安全项目。它是一个集成在 Linux 内核中的Linux 安全模块LSM,从 2.6.0 内核版本开始。它实施强制访问控制(MAC)系统以保护环境。它指定了用户如何与系统交互的策略。当进程之类的主体想要从文件请求操作时,SELinux 安全服务器通过访问向量缓存AVC)进行检查,以授予访问权限,这要归功于安全策略数据库。它是普通 Linux 系统之上的额外安全层。以下是 SELinux 流程工作流的说明:

您可以在/etc/selinux目录下查看 SELinux 的全局配置文件:

内存模型与地址空间

内存管理是每个操作系统的一项重要功能。它还集成到 Linux 内核中。Linux 以虚拟方式管理内存。换句话说,物理内存地址与程序使用和查看的地址之间没有对应关系。这种技术为用户和利用人员提供了灵活性。Linux 正在处理以下五种类型的地址:

  • 用户虚拟地址
  • 物理地址
  • 总线地址
  • 内核逻辑地址
  • 内核虚拟地址

内存被划分为 4096 字节的内存块(称为页面),以便于内部处理。12 个最低有效位是偏移量;剩下的是页码。在最新的 x86 体系结构上,Linux 内核将虚拟空间划分为 4 GB 到 3 GB,专门用于用户空间,1 GB 用于内核空间。此操作名为分段。内核使用页表来对应物理地址和虚拟地址。为了管理不同的内存区域,它使用了一个虚拟内存区VMA):

要显示进程的内存映射,可以使用cat命令显示/proc/1/maps文件:

Linux 内核漏洞

Linux 内核是 Linux 基础设施中最关键的组件。因此,控制 it 将允许访问所有系统和敏感信息。如果黑客获得了对硬件的根访问权,他们将无法阻止破坏系统或窃取关键信息。根据攻击表面(内存、指针、逻辑等),有许多内核漏洞被分类。

比如引用了空指针

空指针取消引用是可用性漏洞利用。一般来说,它们是由空指针错误引起的,结果是NullPointerException。当指针(一个引用值为 NULL 的地址的编程对象)指向有效内存空间时,会引发此异常。要避免此类攻击,只需调用异常处理程序:

任意内核读/写

任意内核读/写是一个关键漏洞,可以通过向内核传递数据来实现。

案例研究 CVE-2016-2443 高通 MSM 调试 fs 内核任意写入

此漏洞利用 android 上高通 SoC 的一个名为 MSM 的 Linux 分支进行攻击。它是高的和关键的。它以调试文件系统(也称为debugfs)为目标,该文件系统是一个基于 RAM 的文件系统,通常用于调试目的,通过将信息提供给用户空间。这就是为什么将一些信息注入 Linux 内核是一个很好的入口。此漏洞使您能够通过 echo 命令echo "41414141 42424242" > /sys/kernel/debug/mddi/reg将数据传递到内核,从而导致内核死机。

因此,它将导致信息泄漏。

内存损坏漏洞

内存管理是 Linux 内核的重要组成部分。因此,它是一种重要的水面攻击。对内核和 Linux 基础架构构成威胁的两个主要内存损坏漏洞通常是内核堆栈和内核堆漏洞:

内核堆栈漏洞

堆栈是一个特殊的内存空间。在编程中,它是一种抽象数据类型,用于使用两种操作收集元素:push 和 pop。此部分会自动增长,但当它靠近另一个内存部分时,将导致系统出现问题和混乱。这就是攻击者使用此技术将系统与其他内存区域混淆的原因。

内核堆漏洞

堆用于动态内存分配。它像堆栈一样驻留在 RAM 中,但速度较慢。内核堆使用以下三种类型的分配器:

  • SLAB:这是一个缓存友好的分配器。
  • 简单块列表SLOB):这是一个用于小型系统的分配器。它使用了第一次拟合算法。
  • SLUB:默认的 Linux 分配器。

内核堆攻击是危险的,因为在大多数情况下,攻击者不需要准备 Linux 模块调试环境。

比赛条件

在调度方面,使用线程编程不是一件容易的事情。多个线程竞相更改同一数据结构时出现的错误称为竞态条件。换句话说,当两个威胁试图做相同的工作时,就会发生这种情况。为了避免竞争条件,需要一个原子操作。因此,当操作开始时,它不能停止或中断。Linux 提供了一个名为互斥的解决方案,是互斥对象的缩写。正如其名称所示,互斥锁是防止线程同时执行的锁。Dirty Cow(CVE-2016-5195)是在 Linux 内核中发现的基于竞争条件的特权升级漏洞。要下载该漏洞,您可以在查看此 GitHub 存储库 https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs

以下屏幕截图描述了脏牛(CVE-2016-5195)C 语言攻击版本的步骤:

逻辑和硬件相关错误

逻辑和硬件相关的漏洞利用非常危险。想象一下,一个攻击者不仅可以破坏操作系统,还可以完全控制硬件本身。这可能是一场灾难。接下来,我们将了解相关的硬件漏洞,这些漏洞允许攻击者攻击 Linux 硬件基础设施。

案例研究 CVE-2016-4484–Cryptsetup Initrd 根 Shell

该漏洞已在 2016 年维也纳 Deepsec 深入安全会议上展示。该演讲的标题为滥用 LUKS 入侵系统。在会议期间,研究人员展示了一种使用 Cryptsetup 中的漏洞解密主机分区的危险方法。此漏洞使您能够以 root 用户身份访问受攻击的计算机,并能够对磁盘执行任何操作。该漏洞是由于密码检查处理不当造成的。因此,当用户尝试输入密码超过三次时,系统将正常进行引导顺序:

Linux 漏洞建议器

Linux 漏洞攻击建议器是PenturaLabs利用的一个简单脚本,用于帮助渗透测试人员搜索 Linux 漏洞。让我们从 GitHub 下载该工具:

#git clone https://github.com/mzet-/linux-exploit-suggester

该工具使用uname -r命令收集有关 Linux 操作系统发行版的信息,然后为您提供该特定发行版的权限提升漏洞列表。如果您已经知道发布版本,可以使用-k选项直接输入,如下图所示:

之后,您可以使用等网站 https://www.cvedetails.com 搜索已发现漏洞的更多信息。

缓冲区溢出预防技术

有许多技术可以用来避免缓冲区溢出攻击。在接下来的章节中,我们将介绍一些著名的机制。

地址空间布局随机化

地址空间布局随机化ASLR是 Pax 项目针对缓冲区溢出攻击利用的防御机制。当加载到内存中时,此内存保护过程会随机化可执行文件的位置。因为,正如我们在前面几节中所了解到的,如果位置是可预测的,那么系统利用就会很容易。它在 2001 年开始作为 Linux 补丁,但后来被集成到许多其他操作系统中。ASLR 可以通过以下技术被击败:

  • 粗暴地使用所有可能的 256 个地址,直到攻击生效
  • 生成 NOP 块,直到获得合法内存

堆叠金丝雀

堆栈金丝雀用于在缓冲区溢出攻击发生之前检测它们。这并不是为了确切地阻止它们,而是由编译器实现的,通过在潜在易受攻击的函数中使用金丝雀,使攻击更加困难。函数序言将一个值放入金丝雀位置,尾声检查以确保该值未被更改。

不可执行堆栈

不可执行堆栈NX)是一种虚拟内存保护机制,通过限制特定内存并实现 NX 位,阻止外壳代码注入在堆栈上执行。但是,这种技术并不值得对抗返回 lib 攻击,尽管它们不需要可执行堆栈。

Linux 面向返回的编程

面向返回的编程ROP)是一种众所周知的技术,可以绕过大多数讨论的保护机制。这是通过找到我们称之为 ROP 小工具(代码片段)并跳转到它们来完成的。在这种技术中,攻击者劫持和操纵程序控制流,并执行驻留在内存中的指令链来执行攻击。这称为 ROP 链接。

Linux 强化

在前面的部分中,我们发现了攻击 Linux 基础设施所需的方法和工具。现在是时候部署安全措施,学习如何抵御这些攻击并保护您的基础设施了。要强化 Linux 系统,您需要执行以下操作:

  • 更新 Linux 内核和应用程序
  • 避免使用 FTP 和 telnet 等不安全的服务,而是使用 SFTP 和 OpenSSH
  • 通过仅使用所需的应用程序和服务来最小化攻击面
  • 如果可能,请使用 SELinux
  • 使用强密码策略
  • 密切关注故障日志记录
  • 硬化/etc/sysctl.conf
  • 使用身份验证服务器

互联网安全中心CIS)为包括 Linux 在内的各种操作系统提供了许多强化指南。强烈建议访问:https://www.cisecurity.org/

现在,从这个链接下载 Linux 发行版的基准测试 https://www.cisecurity.org/cis-benchmarks/ 。以下是 Debian 强化指南:

总结

本章总结了 Linux 基础设施的不同攻击面,从基本的 Linux 命令开始,特别是执行系统示意图和枚举所必需的命令。在后面的部分中,我们不仅有机会了解了最新的 Linux 利用技术以及真实世界的研究案例,而且还了解了每个 Linux 安全层背后的理论和概念。我们没有就此止步;作为渗透测试人员,我们有机会发现如何利用 Linux 基础设施的内核。在本章末尾,我们从攻击者和防御者的角度获得了操作和保护 Linux 基础设施的技能。下一章将拓宽您的视野,让您清楚地了解如何渗透大型企业网络和数据库,从网络更新术语到获得渗透大型网络公司所需的技能。**