最近一直在思考如何做一款好的网络安全产品,既然是一款产品,就需要让你的受众用户很方便的使用它,网络安全的细分领域非常多,如:身份认证、准入控制、数据库审计、数据库加密、入侵检测等,目前国内的安全厂商追求的是大而全,其实我认为大而全的网络安全产品是没有问题的,因为网络安全本身就是一个体系化的工程,攻击者可以从不同的角度对你发起攻击,问题其实是单纯的追求大而全,而忽略了产品质量,我们其实可以从某个细分的方向出发,追求深度,而非仅仅是横向的发展,深度够了以后再追求宽度,这样整体的水平才有质的提高,网络安全的本质是对抗,所以一款好的安全产品应该是深入理解攻击方法的,另外需要深入理解用户场景,保证用户的使用体验,针对如何做一款好的网络安全产品,准备系统的去思考,输出一个系列,首先先谈一谈“攻击方法”,攻击方法非常多,单纯的列举攻击类型也没什么意思,我们从当前最火的ATT&CK模型谈起。ATT&CK模型如果要深入理解是很复杂的。
攻击者者发起攻击前总是出于某一个或多个特定的目的,如:窃取数据、挖矿、分发广告、DDOS、勒索等等,为了达到这个目的,前期需要侦察目标,这个目标可能是某个特定的组织、人员、国家,也可能很宽泛,比如分发广告、挖矿这种,没有非常具体的目标,但是为了保证良好的效果,往往也需要针对一些特定的目前做侦察的工作。
1、侦察
主动扫描:主动扫描的方式采用的比较多,由于其针对性强,所以扫描结果往往比较好,用户针对这种扫描很难防御,只能通过监测异常流量,但往往误报比较多。
收集受害者主机信息
收集受害者身份信息
收集受害者网络信息
收集受害者组织信息
信息网络钓鱼:所有形式的网络钓鱼都是以电子方式传递的社会工程,可以根据根据发件人域的有效性检查(使用 SPF)和邮件的完整性(使用 DKIM)过滤邮件。
从封闭来源获取信息:暗网、威胁情报平台等
从免费提供的技术数据库中搜索可在目标定位过程中使用的受害者信息
搜索公开的网站
搜索受害者自己的网站
2、资源发展
所谓资源发展可以理解为攻击的武器化阶段,准备攻击需要的基础设施、工具等资源,如果攻击者发展的是外部资源是很难防护的,主要防护的是针对内部资源的发展,这方面可以通过提高用户网络安全意识来缓解。
获取攻击基础设施:比如云主机、IP、域名等
攻陷账户:获取现有账户信息
攻陷基础设施:攻陷第三方基础设施,基础设施包括无论服务器、云主机、域名、IP等
发展能力:制作攻击武器。
建立账户:新建账户用于攻击。
获取能力:攻击者通过购买/窃取的方式获取能力。
能力上传:将获取/制作的能力与基础设施关联起来。
3、初始访问
初始访问可以认为是正式发起攻击的阶段,通过用户暴露在互联网上的应用/用户/设备等将之前准备好的攻击武器投放到用户网络,多数入侵防御/防火墙等设备正式发挥作用,通过检测进出互联网的流量识别“攻击武器”,或者通过检测“基础设施”识别攻击者,进而阻止在内网之外。
路过攻击:首先攻破一些被攻击长访问的网站,然后实现代码注入。
利用公开应用:利用暴露在互联网上应用的弱点,如漏洞、配置错误等发起非法访问。
远程访问服务:利用远程访问服务获取访问,比如VPN、Citrix,采用该方式连接企业内网。
硬件添加:通过网络、计算机附件获取访问,如:中间人加密破解、添加无线网络。
鱼叉式钓鱼:通过邮件传播。
通过可移动媒体复制
供应链攻击:从设备供应商入手,将攻击武器投放,去年爆发的solarwinds供应链攻击就是采用这种方式投放的。
可信关系:通过受信任的第三方获取访问权限,第三方一般不受监控或者监控薄弱。
合法账户:如VPN\WEB等默认账户。
4、执行
投放完成后就是考虑如何将”武器“偷偷的跑起来,这里主要就是涉及到终端安全的内容了,国内有360、奇安信、青藤等安全厂商,国外有checkpoint、interzer、Macfee等安全厂商,传统的终端安全主要是基于签名,核心能力在于库的大小以及检测引擎的优良,同时增加了准入、数据防泄漏、水印、补丁管理等能力,现在的方向一方面是对现有签名的机制增加AI等流行技术,识别能力更强,同时对进程的监控,通过分析行为识别"武器"。
进程注入:广泛应用于恶意软件和无文件攻击中的逃避技术,这意味着可以将自定义代码运行在另一个进程的地址空间内。进程注入提高了隐蔽性,也实现了持久化。
命令和脚本解释器:通过调用本地命令行执行恶意代码,在终端代码执行方面该方式应用非常广,一般的终端安全产品可以监控命令行的使用,可以通过限制进程调用命令行的方式降低风险。
容器管理命令
部署容器
利用客户端执行:利用客户端应用程序漏洞执行代码,主要是一些可以远程执行代码的漏洞,如CVE-2017-11882 and CVE-2017-8570。
进程间通信:
原生API:直接调用操作系统API执行命令,和1类似。
任务调度:攻击者可能会滥用任务调度功能来促进恶意代码的初始或重复执行。 所有主要操作系统中都存在实用程序,用于安排在指定日期和时间执行的程序或脚本,攻击者可能会使用任务调度在系统启动时或按计划执行程序以保持持久性。这些机制也可能被滥用以在指定帐户的上下文(例如具有提升的权限/特权的帐户)下运行进程。合法的计划任务可以在安装新软件期间或通过系统管理功能创建。,通过寻找与已知软件、补丁周期等无关的任务更改、创建可以识别一些任务滥用的情况。
共享模块
软件部署工具:利用第三方软件执行代码
系统服务:攻击者可能会滥用系统服务或守护进程来执行命令或程序。攻击者可以通过与服务交互或创建服务来执行恶意内容。许多服务设置为在启动时运行,这有助于实现持久性(创建或修改系统进程),但攻击者也可以滥用服务一次性或临时执行。一般通过监视能够修改与正常使用模式和已知软件、补丁周期等不对应的服务的工具的命令行调用。还监视与服务相关的可执行文件和其他文件的更改。 Windows 服务的更改也可能反映在注册表中。
用户执行:利用社会工程学依赖人工操作执行代码。
5、持久化
持久化从字面上也可以也能大概看出这一攻击步骤主要做什么,代码执行完成后,攻击者已经初步控制了某个攻击目标,但是当用户关机、修改配置等操作后,可能导致攻击代码没有办法再执行了,为了保持当前能力,一般都采用很多的技术手段,执行、持久化和提权这三个攻击步骤的防护都是终端安全软件的活,研究不同的攻击方式,通过监控这种方式发现攻击者。
账户操纵:帐户操纵可能包括任何攻击者对受感染帐户的访问权限的操作,例如修改凭据或权限组,还可能包括旨在破坏安全策略的帐户活动,例如执行迭代密码更新以绕过密码持续时间策略并保留受损凭据的生命周期。
BITS JOBS:BITS(后台智能传输服务)是用来在客户端和服务器之间传输文件的一个Windows工具,它基于一系列计划任务而运作,并且是负责下载并推出Windows更新数据包及其他定期软件更新的服务,攻击者可以利用它下载恶意软件并且执行。
系统引导或登录自动执行:设置登录自动启动恶意程序。
系统引导或初始化脚本:通过脚本完成自动登录。
浏览器拓展:通过安装恶意浏览器插件达到控制浏览器的目的。
攻陷客户端软件二进制文件:修改软件代码植入后门。
创建账户:创建新的账户。
创建或修改系统进程:创建或修改系统级进程以重复执行恶意负载。
事件触发执行:使用基于特定事件触发执行的系统机制来建立持久性和/或提升特权
外部远程服务:获取远程服务的凭证和账户信息。
劫持执行流程:通过劫持操作系统运行程序的方式来执行自己的恶意负载。
植入内部镜像:使用恶意代码植入云或容器映像,以在获得对环境的访问权限后建立持久性。
修改认证过程:通过修改身份验证过程,攻击者可以在不使用有效帐户的情况下对服务或系统进行身份验证。
office应用启动
预操作系统启动:滥用 Pre-OS Boot 机制作为在系统上建立持久性的一种方式.
任务调度:滥用任务调度功能来促进恶意代码的初始或重复执行。
服务器软件组件:滥用服务器的合法可扩展开发功能来建立对系统的持久访问。
流量信号
合法账户
6、提权
滥用权限控制机制
访问凭证操纵
引导或登录自动执行
引导或登录初始化脚本
创建或修改系统进程
域策略修改
突破主机限制
事件触发执行
特权提升的利用
劫持执行流程
进程注入
任务调度
合法账户
8、凭据访问
暴力破解
来自存储密码区域的凭据:攻击者可能会搜索常见的密码存储位置来获取用户凭据。
利用凭证访问:攻击者可能会利用软件漏洞来尝试收集凭据。
强制认证:攻击者可以通过调用或强制用户通过他们可以拦截的机制自动提供身份验证信息来收集凭证材料,攻击者可能会利用此行为通过强制 SMB/WebDAV 身份验证访问用户帐户哈希。 攻击者可以通过鱼叉式网络钓鱼向用户发送附件,其中包含指向攻击者控制的外部服务器的资源链接(即模板注入),或者将特制文件放置在特权帐户的导航路径上(例如放置在桌面上的 .SCF 文件) ) 或在受害者可以访问的公共可访问共享上。 当用户的系统访问不受信任的资源时,它将尝试进行身份验证并将信息(包括用户的散列凭据)通过 SMB 发送到对手控制的服务器。 通过访问凭证哈希,攻击者可以执行离线暴力破解以获得对明文凭证的访问权限。
伪造网络凭证:攻击者使用伪造的网络凭证访问服务。
输入捕获:攻击者可能会使用捕获用户输入的方法来获取凭据或收集信息。
中间人攻击:攻击者可能会尝试使用中间人技术将自己定位在两个或多个联网设备之间,以支持后续行为,例如网络嗅探或传输数据操作。
修改认证流程
网络嗅探
操作系统凭据转储:
窃取应用访问凭证
窃取web cookie
双因素认证欺骗
不安全的凭据:对手可能会搜索受损的系统以查找和获取不安全存储的凭据。这些凭据可以存储和/或放错系统上的许多位置,包括便文本文件(例如 Bash 历史记录)、操作系统或特定于应用程序的存储库。
9、发现:试图探测受害者环境
账户发现
应用窗口发现:对手可能会尝试获取打开应用程序窗口的列表。窗口列表可以传达有关系统如何使用的信息,或为键盘记录器收集的信息提供上下文。
浏览器书签发现:对手可能会列举浏览器书签,以了解更多有关受损主机的详细情况。浏览器书签可能会显示有关用户的个人信息(例如:银行网站、兴趣、社交媒体等),以及有关内部网络资源(如服务器、工具/仪表板或其他相关基础设施)的详细信息。
云基础设施发现
云服务仪表盘
云服务发现
容器和资源发现
域信任发现
文件和目录发现
网络服务扫描
网络分享发现:对手可以寻找在远程系统上共享的文件夹和驱动器,作为识别信息来源以收集信息的前体并识别横向运动的潜在感兴趣的系统的方法。
网络嗅探
密码策略发现
外围设备发现
权限组发现
进程发现
查询注册表
远程系统发现
程序发现
系统信息发现
系统位置发现
系统网络配置发现
系统网络连接发现
系统用户发现
系统服务发现
系统时间发现
虚拟化/沙盒逃逸
10、横向移动
利用远程服务:此处和利用远程服务漏洞做提权类似,利用远程服务漏洞或者一些软件的漏洞获取远程服务。
内部鱼叉式钓鱼邮件发送
横向工具传输
远程服务会话劫持:用户可以使用有效凭据登录专门设计用于接受远程连接的服务,例如 telnet、SSH 和 RDP。 当用户登录服务时,将建立一个会话,允许他们与该服务保持持续交互。攻击者可能会征用这些会话以在远程系统上执行操作。 远程服务会话劫持与使用远程服务不同,因为它劫持现有会话而不是使用有效帐户创建新会话
远程服务:攻击者可能会使用有效帐户登录专门设计用于接受远程连接的服务,例如 telnet、SSH 和 VNC。然后,攻击者可以作为登录用户执行操作。
通过可移动媒体复制:将恶意软件上传到内部U盘等可移动介质,通过U盘传播恶意软件。
软件部署工具:攻击者可能会访问并使用安装在企业网络中的第三方软件套件,例如管理、监控和部署系统,从而在网络中横向移动。
污染共享内容:攻击者可以通过向共享存储位置(例如网络驱动器或内部代码存储库)添加内容来向远程系统提供有效载荷。 存储在网络驱动器或其他共享位置的内容可能会因向其他有效文件添加恶意程序、脚本或漏洞利用代码而受到污染。 一旦用户打开共享的受污染内容,就可以执行恶意部分以在远程系统上运行对手的代码。 攻击者可能会使用受污染的共享内容横向移动。
使用可替代的认证材料:
11:信息收集:目标信息的收集
12、命令与控制
13、信息泄露:渗透包括对手可能用来从您的网络窃取数据的技术。收集数据后,对手通常会将其打包,以避免在删除数据时进行检测。这可能包括压缩和加密。从目标网络获取数据的技术通常包括通过其命令和控制通道或备用通道传输数据,也可能包括对传输施加大小限制。
14:影响:影响包括对手通过操纵业务和运营流程来破坏可用性或损害完整性的技术。用于影响的技术可以包括销毁或篡改数据。在某些情况下,业务流程看起来可能很好,但可能已被更改,以有利于对手的目标。这些技术可能被对手用来贯彻其最终目标,或为违反机密规定提供掩护