当前位置: 首页 > news >正文

攻防演练中攻击队需要的安全技能第二篇

系统层漏洞挖掘

系统层漏洞的挖掘需要很多相对高级的漏洞挖掘方法。从实战角 度看,以下6种挖掘方法最为实用:代码跟踪、动态调试、Fuzzing技 术、补丁对比、软件逆向静态分析、系统安全机制分析。

1)代码跟踪。代码跟踪是指通过自动化分析工具和人工审查结合 的方式,对程序源代码逐条进行检查分析,发现其中的错误信息、安 全隐患和规范性缺陷,以及由这些问题引发的安全漏洞,并提供代码 修订措施和建议。

2)动态调试。动态调试原指程序作者利用集成环境自带的调试器 跟踪程序的运行,来协助解决程序中的错误。不过,对于蓝队来说, 动态调试通常是指这样一种分析方法:使用动态调试器(如OllyDbg、 x64Dbg等),为可执行程序设置断点,通过监测目标程序在断点处的 输入/输出及运行状态等信息,来反向推测程序的代码结构、运行机制 及处理流程等,进而发现目标程序中的设计缺陷或安全漏洞。

3)Fuzzing技术。Fuzzing技术是一种基于黑盒(或灰盒)的测试 技术,通过自动化生成并执行大量的随机测试用例来触发程序或系统 异常,进而发现产品或协议的未知缺陷或漏洞。

4)补丁对比。每一个安全补丁都会对应一个或多个安全漏洞。通 过对补丁文件的分析,往往可以还原出相应漏洞的原理或机制。而利 用还原出来的漏洞,就可以对尚未打上相关补丁的程序或系统实施有 效攻击。而补丁对比是实战环境下,补丁分析的一种常用的、有效的 方式。补丁对比是指对原始文件和补丁文件分别进行反汇编,然后对 反汇编后的文件做比较找出其中的差异,从而发现潜在漏洞的一种安 全分析方法。

5)程序逆向静态分析。程序逆向静态分析是指对程序实施逆向工 程,之后对反编译的源码或二进制代码文件进行分析,进而发现设计 缺陷或安全漏洞的一种安全分析方法。

对于开放源代码的程序,通过检测程序中不符合安全规则的文件 结构、命名规则、函数、堆栈指针等,就可以发现程序中存在的安全 缺陷。被分析目标没有附带源程序时,就需要对程序进行逆向工程, 获取类似于源代码的逆向工程代码,然后再进行检索和分析,这样也 可以发现程序中的安全漏洞。这就是程序逆向静态分析。

程序逆向静态分析,也叫反汇编扫描,由于采用了底层的汇编语 言进行漏洞分析,理论上可以发现所有计算机可运行的漏洞。对于不 公开源代码的程序来说,这种方法往往是最有效的发现安全漏洞的办 法。

6)系统安全机制分析。系统安全机制就是指在操作系统中,利用 某种技术、某些软件来实施一个或多个安全服务的过程,主要包括标 识与鉴别机制、访问控制机制、最小特权管理机制、可信通路机制、 安全审计机制,以及存储保护、运行保护机制等。

系统安全机制分析是指对操作系统的各种安全机制进行分析,进 而发现系统设计缺陷或安全漏洞的方法。

身份隐藏

为避免自己的真实IP、物理位置、设备特征等信息在远程入侵的 过程中被网络安全设备记录,甚至被溯源追踪,攻击者一般都会利用 各种方式来进行身份隐藏。在实战攻防演练中,蓝队所采用的身份隐 藏技术主要有以下几类:匿名网络、盗取他人ID/账号、使用跳板机、 他人身份冒用和利用代理服务器等。

1)匿名网络。匿名网络泛指信息接收者无法对信息发送者进行身 份定位与物理位置溯源,或溯源过程极其困难的通信网络。这种网络 通常是在现有的互联网环境下,通过使用由特定的通信软件组成的特 殊虚拟网络,实现发起者的身份隐藏。其中以Tor网络(洋葱网络)为 代表的各类暗网是比较常用的匿名网络。

蓝队的匿名网络能力是指使用匿名网络对目标机构发起攻击,并 有效隐藏自己身份或位置信息的能力。

2)盗取他人ID/账号。盗取他人ID/账号,攻击者既可以获取与 ID/账号相关的系统权限,进而实施非法操作,也可以冒充ID/账号所 有人的身份进行各种网络操作,从而达到隐藏身份的目的。不过,在 实战攻防演练中,通常不允许随意盗取与目标机构完全无关人员的ID/ 账号。

蓝队的盗取他人ID/账号能力是指盗取目标机构及其相关机构内部 人员ID/账号,以实现有效攻击和身份隐藏的能力。

3)使用跳板机。使用跳板机是指攻击者并不直接对目标发起攻 击,而是利用中间主机作为跳板机,经过预先设定的一系列路径对目 标进行攻击的一种攻击方法。使用跳板机的原因主要有两方面:一是 受到内网安全规则的限制,目标机器可能直接不可达,必须经过跳板 机才能间接访问;二是使用跳板机,攻击者可以在一定程度上隐藏自 己的身份,使系统中留下的操作记录多为跳板机所为,从而增加防守 方溯源分析的难度。

蓝队使用跳板机的能力是指入侵机构内部网络,获得某些主机控 制权限,并以此为跳板,实现内网横向拓展的技术能力。

4)他人身份冒用。他人身份冒用是指通过技术手段欺骗身份识别 系统或安全分析人员,进而冒用他人身份完成登录系统、执行非法操 作及投放恶意程序等攻击行为。这里所说的他人身份冒用技术不包括 前述的盗取他人ID/账号。

蓝队的他人身份冒用能力是指使用各种技术手段冒用他人身份入 侵特定系统的技术能力。

5)利用代理服务器。代理服务器是指专门为其他联网设备提供互 联网访问代理的服务器设备。在不使用代理服务器的情况下,联网设 备会直接与互联网相连,并从运营商那里分配到全网唯一的IP地址; 而在使用代理服务器的情况下,联网设备则首先访问代理服务器,再 通过代理服务器访问互联网。代理服务器的设计,最初是为了解决局 域网内用户连接互联网的需求而提出的,局域网内的所有计算机都通 过代理服务器与互联网上的其他主机进行通信。被通信的主机或服务 器只能识别出代理服务器的地址,而无法识别出是局域网内的哪一台 计算机在与自己通信。

在实战攻防演练中,蓝队使用代理服务器联网,就可以在一定程 度上隐藏自己的IP地址和联网身份,增加防守方的溯源难度和IP封禁 难度。在某些情况下,攻击者甚至还会设置多级代理服务器,以实现 更深的身份隐藏。

蓝队的利用代理服务器能力是指在攻击过程中,使用一级或多级 代理服务器实现身份隐藏的能力。

内网渗透

内网渗透是指在蓝队已经完成边界突破,成功入侵政企机构内部 网络之后,在机构内部网络中实施进一步渗透攻击,逐层突破内部安 全防护机制,扩大战果或最终拿下目标系统的攻击过程。在实战攻防 演练中,蓝队比较实用的内网渗透能力包括工作组或域环境渗透、内 网权限维持/提权、横向拓展、数据窃取和免杀等。

1)工作组、域环境渗透。工作组和域环境都是机构内部网络结构 的基本概念。工作组通常是指一组相互联结、具有共同业务或行为属 性的终端(计算机)集合。组内终端权限平等,没有统一的管理员或 管理设备。通常来说,工作组的安全能力上限取决于每台终端自身的 安全能力。域环境则是由域控服务器创建的,具有统一管理和安全策 略的联网终端的集合,域控服务器和域管理员账号具有域内最高权 限。通常来说,域环境的安全性要比工作组高很多,但如果域管理员

账号设置了弱口令或者域控服务器存在安全漏洞,也有可能导致域控 服务器被攻击者劫持,进而导致域内所有设备全部失陷。出于安全管 理的需要,大型机构的内部网络一般都会被划分为若干个域环境,不 同的域对应不同的业务和终端,执行不同的网络和安全管理策略。而 在一些网络管理相对比较松散的机构中,内网中也可能只有若干个工 作组,而没有域环境。

蓝队的工作组、域环境渗透能力是指掌握内网环境中工作组或域 环境的运行管理机制,发现其中的设计缺陷或安全漏洞,并加以利用 实施攻击的能力。

2)内网权限维持/提权。攻击者通常是以普通用户的身份接入网 络系统或内网环境,要实现攻击就需要提升自身的系统权限,并且使 自身获得的高级系统权限能够维持一定的时间,避免被系统或管理员 降权。提升系统权限的操作简称提权,维持系统权限的操作简称权限

维持。在实战环境下,系统提权的主要方式包括本地提权、利用系统 漏洞提权、利用应用漏洞提权、获取密码/认证提权等。

蓝队的内网权限维持/提权能力是指在内网环境中,利用各种安全 设计缺陷或安全漏洞,提升自己的系统权限以及维持提权有效性的技 术能力。

3)横向拓展。横向拓展通常是指攻击者攻破某台内网终端/主机 设备后,以之为基础,对相同网络环境中的其他设备发起的攻击活 动,但也常常被用来泛指攻击者进入内网后的各种攻击活动。

蓝队的横向拓展能力是泛指以内网突破点为基础,逐步扩大攻击 范围,攻破更多内网设备或办公、业务系统的技术能力。

4)数据窃取。对机密或敏感数据的窃取,是实战攻防演练中最常 见的预设目标之一,也是黑客针对政企机构的网络攻击活动的主要目 的之一。一般来说,机构内部的很多办公系统、业务系统、生产系统 中会有专门的服务器或服务器集群用于存储核心数据,数据服务器的 防护一般会比其他网络设备更加严密。

蓝队的数据窃取能力是指熟练掌握服务器的数据库操作,在内网 中找到机构的核心系统数据服务器,获取服务器访问或管理权限,在 防守方不知情的情况下将数据窃取出来并秘密外传的技术能力。

5)免杀技术。免杀(Anti Anti-Virus)是高级的网络安全对抗 方式,是各种能使木马病毒程序免于被杀毒软件查杀的技术的总称, 可以使攻击者编写的木马病毒程序在目标主机上秘密运行,不被发 现。免杀技术要求开发人员不仅要具备木马病毒的编写能力,还需要 对各种主流安全软件的运行框架、杀毒引擎的工作原理、操作系统的 底层机制、应用程序的白利用方式等有非常深入的了解,并能据此编 写对抗代码。使用免杀技术,对于蓝队人员的基础能力要求非常之 高。

蓝队的免杀技术能力是指编写木马病毒程序实现免杀的技术能力。

掌握CPU指令集

CPU指令集,即CPU中用来计算和控制计算机系统的一套指令的集 合。每一种CPU在设计时都会有一系列与其他硬件电路相配合的指令系 统。指令系统包括指令格式、寻址方式和数据形式。一台计算机的指 令系统反映了该计算机的全部功能。机器类型不同,其指令集也不 同。而蓝队人员对CPU指令集的掌握程度,将直接决定蓝队进行系统层 漏洞挖掘与利用的能力水平。目前,最为常见的CPU指令集有x86、 MIPS、ARM和PowerPC。

1)x86。x86一般指英特尔x86。x86指令集是英特尔为其CPU专门 开发的指令集合。通过分析x86指令集可以找到英特尔下相关软件或系 统的运行机制,从而通过指令实现底层攻击。

2)MIPS。MIPS(Microcomputer without Interlocked Pipeline Stages,无互锁流水级微处理器)技术是MIPS公司(著名芯片设计公 司)设计开发的一系列精简指令系统计算结构,最早是在20世纪80年 代初期由斯坦福大学Hennessy教授领导的研究小组研制出来的。MIPS 由于授权费用低,被英特尔外的大多数厂商使用。通过分析MIPS指令 集可以找到除英特尔外大多厂商(多见于工作站领域)的软件或系统 运行机制,从而通过指令实现底层攻击。

3)ARM。ARM(Advanced RISC Machines),即ARM处理器,是英 国Acorn公司设计的第一款低功耗RISC(Reduced Instruction Set Computer,精简指令集计算机)微处理器。ARM指令集是指计算机ARM 操作指令系统。ARM指令集可以分为跳转指令、数据处理指令、程序状 态寄存器处理指令、加载/存储指令、协处理器指令和异常产生指令六 大类。

4)PowerPC。PowerPC(Performance Optimization With Enhanced RISC-Performance Computing)是一种精简指令集架构的中 央处理器,其基本的设计源自POWER架构。POWER架构是1991年由AIM联 盟(Apple、IBM、Motorola)发展出的微处理器架构。PowerPC处理器 有广泛的实现范围,从高端服务器CPU(如Power4)到嵌入式CPU市场 (如任天堂游戏机)。但自2005年起,苹果旗下电脑产品转用英特尔 CPU。

高级安全工具

高级安全工具同样是蓝队的必修课,只不过这些工具对于使用者 有更高的基础技能要求,初学者不易掌握。在实战化环境中,最常用 的工具有IDA、Ghidra、Binwalk、OllyDbg、Peach Fuzzer等。

1)IDA。IDA是一个专业的反汇编工具,是安全渗透人员进行逆向 安全测试的必备工具,具有静态反汇编和逆向调试等功能,能够帮助 安全测试人员发现代码级别的高危安全漏洞。

2)Ghidra。Ghidra是一款开源的跨平台软件逆向工具,目前支持 的平台有Windows、macOS及Linux,提供反汇编、汇编、反编译等多种 功能。Ghidra P-Code是专为逆向工程设计的寄存器传输语言,能够对 许多不同的处理器进行建模。

3)Binwalk。Binwalk是一个文件扫描、提取、分析工具,可以用 来识别文件内包含的内容和代码。Binwalk不仅可以对标准格式文件进 行分析和提取,还能对非标准格式文件进行分析和提取,包括压缩文 件、二进制文件、经过删节的文件、经过变形处理的文件、多种格式 相融合的文件等。

4)OllyDbg。OllyDbg是一款强大的反汇编工具,结合了动态调试 与静态分析等功能。它是一个用户模式调试器,可识别系统重复使用 的函数并将其参数注释。OllyDbg还可以调试多线程应用程序,从一个 线程切换到另一个线程、挂起、恢复和终止,或改变它们的优先级。

5)Peach Fuzzer。Peach Fuzzer是一款智能模糊测试工具,广泛 用于发现软件中的缺陷和漏洞。Peach Fuzzer有两种主要模式:基于 生长的模糊测试和基于变异的模糊测试。

编写PoC或EXP等高级利用

前文已经介绍了PoC和EXP的概念,这里不再赘述。相较于针对Web 应用和智能硬件/IoT设备编写PoC或EXP,针对各种类型的操作系统和 安全设备编写PoC或EXP要更加困难。高阶能力中,比较受关注的操作 系统平台有Android、iOS、Linux、macOS。

1)Android平台代码能力。Android是由谷歌公司和开放手机联盟 领导及开发的操作系统,主要用于移动设备,如智能手机和平板电脑 上。这里Android平台代码能力代指在Android操作系统上找到漏洞并 利用漏洞编写PoC或EXP的能力。

2)iOS平台代码能力。iOS是由苹果公司开发的移动操作系统,主 要用于iPhone、iPod touch、iPad上。这里iOS平台代码能力代指在 iOS操作系统上找到漏洞并利用漏洞编写PoC或EXP的能力。

3)Linux平台代码能力。Linux主要用于服务器的操作系统, Ubuntu、CentOS等均属基于Linux内核基础上开发的操作系统。这里 Linux平台代码能力代指在Linux操作系统上找到漏洞并利用漏洞编写 PoC或EXP的能力。

4)macOS平台代码能力。macOS是由苹果公司开发的操作系统,主 要用于Macintosh系列电脑上。macOS的架构与Windows不同,很多针对 Windows的电脑病毒在macOS上都无法攻击成功。这里macOS平台代码能 力代指在macOS操作系统上找到漏洞并利用漏洞编写PoC或EXP的能力。

在实战化环境中,经常会使用的网络安全设备和系统有IP密码 机、安全路由器、线路密码机、防火墙、安全服务器、公开密钥基础 设施(PKI)系统、授权证书(CA)系统、安全操作系统、防病毒软 件、网络/系统扫描系统、入侵检测系统、网络安全预警与审计系统 等。网络安全设备本身也会存在各种各样的安全漏洞,在近年来的实 战攻防演练中,对此类漏洞的利用越来越多。这里网络安全设备代指 在各类网络安全设备中找到漏洞并利用漏洞编写PoC或EXP的能力。

团队协作

攻击队主要包含行动总指挥、情报搜集人员、武器装备制造人 员、打点实施人员、社工钓鱼人员、内网渗透人员等角色。随着实战 攻防演练的不断深入,防守队的整体能力持续提升,这就使得攻击队 人员凭个人能力单打独斗取得胜利的希望越来越小。而由3~5人组成 的攻击小队,通过分工协作高效完成攻击行动的模式越来越成熟。是 否拥有团队协作的作战经验,团队中各成员分别扮演什么样的角色, 是蓝队实战化能力的重要指标。

团队作战,成功的关键是协作与配合。通常来说,每支攻击队的 成员都会有非常明确的分工和角色。在实战攻防演练中,攻击队比较 常见的角色分工主要有6种,分别是行动总指挥、情报搜集人员、武器 装备制造人员、打点实施人员、社工钓鱼人员和内网渗透人员。

1)行动总指挥:通常是攻击队中综合能力最强的人,需要有较强 的组织意识、应变能力和丰富的实战经验。负责策略制订、任务分 发、进度把控等。

2)情报搜集人员:负责情报侦察和信息搜集,搜集的内容包括但 不限于目标系统的组织架构、IT资产、敏感信息泄露、供应商信息 等。

3)武器装备制造人员:负责漏洞挖掘及工具编写,是攻击队的核 心战斗力量,不仅要能找到并利用漏洞,还要力求在不同环境下达到 稳定、深入的漏洞利用。

4)打点实施人员:负责获取接入点,进行Web渗透等。找到薄弱 环节后,利用漏洞或社工等方法,获取外网系统控制权限;之后寻找 和内网连通的通道,建立据点(跳板)。

5)社工钓鱼人员:负责社工攻击。利用人的安全意识不足或安全 能力不足等弱点,实施社会工程学攻击,通过钓鱼邮件或社交平台等 进行诱骗,进而打入内网。

6)内网渗透人员:负责进入内网后的横向拓展。利用情报搜集人 员的情报结合其他弱点来进行横向拓展,扩大战果。尝试突破核心系 统权限,控制核心任务,获取核心数据,最终完成目标突破工作。

参考资料

红蓝攻防构建实战化网络安全防御体系
青藤云安全 2022攻防演练蓝队防守指南

相关文章:

  • C#的File 类使用说明
  • 零基础能学大数据技术吗?学完能找到工作吗?
  • 实时即未来,车联网项目之远程诊断实时故障分析【七】
  • 《SpringBoot篇》10.JPQL超详细介绍与JPA命名规则
  • 【Android-实战】1、Room 使用 Flow 和 collect() 监听数据库的变化、动态更新页面
  • python字符串应用
  • asp.net高校网上评教信息系统VS开发sqlserver数据库web结构c#编程计算机网页项目
  • 暂退法dropout----详解与分析(多层感知机)
  • Android Tablayout样式修改
  • 朋友圈那位隐藏大佬的单片机学习心得
  • Android系统启动流程全解析--你知道Android系统启动都干了啥吗
  • openGl绘制五星红旗
  • 【数据结构】二叉树
  • HTML常用标签二
  • 高数(下) 第十二章:无穷级数
  • [译]前端离线指南(上)
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Akka系列(七):Actor持久化之Akka persistence
  • css布局,左右固定中间自适应实现
  • Javascript基础之Array数组API
  • Java到底能干嘛?
  • Js基础知识(四) - js运行原理与机制
  • Js基础知识(一) - 变量
  • Laravel Mix运行时关于es2015报错解决方案
  • LeetCode29.两数相除 JavaScript
  • nodejs调试方法
  • SpiderData 2019年2月13日 DApp数据排行榜
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Tornado学习笔记(1)
  • 程序员该如何有效的找工作?
  • 机器学习中为什么要做归一化normalization
  • 基于webpack 的 vue 多页架构
  • 数据科学 第 3 章 11 字符串处理
  • 如何正确理解,内页权重高于首页?
  • ​一些不规范的GTID使用场景
  • #数学建模# 线性规划问题的Matlab求解
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)母版页和相对路径
  • .NET简谈设计模式之(单件模式)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @Data注解的作用
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [ABC294Ex] K-Coloring
  • [C#]DataTable常用操作总结【转】
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [Hadoop in China 2011] 蒋建平:探秘基于Hadoop的华为共有云
  • [Java、Android面试]_10_Java中==与equal()方法的区别?重写equal()方法?