ATT&CK(五)–高频攻击技术

之前学习了解到一些攻击组织或者恶意程序的特征分析检测方式,那么学习当今使用频率高的攻击技术的特征分析与检测也是很有必要的。

一、命令和脚本解释器(T1059)

1.powershell(T1059.001)

在之前关于powershell以及内网安全的文章提到相关内容。

2.Windows cmd shell(T1059.003)

常常使用cmd调用本机命令,并且将这些命令得输出重定向到本地管理共享文件。

检测方法:
windows得安全事件日志,包含命令行参数的进程创建(ID4688)事件,是检查windows cmd shell被恶意使用的最佳来源。重点关注不常见的执行模式以及一些跟恶意行为有关的执行模式,这就体现了使用框架的优越性,能通过判断上下文关系,来推算出攻击手段。
·检测cmd.exe进程含有混淆字符的情况,包括^、+、%、!等
·在cmd.exe中大量使用set和call命令
·将输出重定向到本地主机管理共享中,例如:>\\computername\c$
·执行会引发其他攻击相关的命令(例如调用regsvr32.exe或者regasm.exe或者加载DLL)
·调用reg.exe,修改注册表,启用或者禁用掉远程桌面或者用户访问控制等功能

二、利用已签名二进制文件代理执行(T1218)

该技术的两个子技术:Rundll32和Mshta在目前使用频率高

1.Rundll32(T1218.011)
攻击者使用Rundll32.exe直接执行恶意代码,可以避免触发安全工具,因为目前程序将其加入白名单,工具无法对其进行监控。Rundll32是windows的一个内置的进程,支持DLL。
攻击者将恶意代码作为DLL执行,避免恶意代码直接出现在进程树中。更为常见的是攻击者利用DLL中的导出函数(如DllRegisterServer勒索病毒通过它来绕过策略)绕过代理和逃避检测。
攻击者利用Rundll32从可以写入的(有权限的)目录(如Temp目录)中的DLL文件加载代码。利用Rundll32加载合法的comsvcs.dll导出MiniDump函数,来转移某些进程的内存。

Cobalt strike利用StarW函数从命令行加载DLL,如发现有代码使用这个函数,证明可能遇到了CS

检测Rundll32主要进行命令行参数监控、进程监控。
检测Rundll32的方法:
①从全局可写文件夹执行:攻击者经常利用Rundll32从全局可写文件夹中加载或者写入DLL,所以我们可以监控跟一下位置有关的情况,如下图

②导出函数
③异常进程:看Rundll32的父进程是否合乎道理,下图进程一般不会产生新的Rundll32

2.Mshta(T1218.005)的分析与检测

Mshta能够通过受信任的程序代理执行攻击要执行的代码。与Rundll32相似,Mshta.exe是windows自带的一个二进制文件,用于执行HTA(Microsoft HTML Application)文件。Mshta能通过网络代理执行嵌入HTML中的windows Script Host代码(VBScript和JScript)。是一个受攻击者欢迎的通过受信任的签名程序代理执行恶意脚本的工具

Mshta执行恶意VBScript和JScript的方式:
·通过在命令行中传递给Mshta的参数进行内联执行;
·通过HTML Application文件或者基于COM执行,以便横向移动;
·通过调用mshtml.dll的RunHTMLApplication导出函数,用Rundll32.exe代替Mshta.exe

书本内容提到,随着2018年Kovter消失,通过命令行执行代码的方式逐渐减少。攻击者转而使用执行存储在文件中的代码这样的方式。攻击者在命令行使用本地磁盘文件路径、URI路径等,指示Mshta执行存储在本地或者远程的文件中的HTA内容。其优点是:在命令行看不到payload

检测Mshta需要收集的数据:
·进程和命令行监控:
·进程元数据:攻击者会重命名Mshta二进制文件。重命名系统程序(隐藏、抹去安全审计痕迹)、内部进程名称等二进制元数据,能有效确定进程真实身份。
·文件监控和网络连接

检测Mshta方法:
①内联脚本执行和协议处理程序:
Mshta允许内敛执行Windows WSH脚本,依据不同的协议处理程序。因此我们可以查找Mshta.exe,以及包含与mshta相关的协议处理程序的命令行的执行情况;
②可疑进程的溯源:
与Rundll类似,由于是windows自带所以很常见,此时我们要考虑异常的进程之间的派生关系。比如word执行mshta是异常的。
③Mshta伪装:
就是重命名。如果文件内部元数据信息中的文件名和Mshta一致但明显和磁盘文件名不一样,要着重注意。书中写道,攻击者还会将Mshta移出System32或者SysWOW64目录中的正常位置,给我们启发,不仅除了排查内部名称与外部名称不一致的,还可以找在合法位置之外出现执行Mshta的情况。
④网络连接和HTA内容:
Mshta执行的文件会存储在磁盘上,以.hta为扩展名。因此,需要检测分析来自URI、UNC路径、NTFS交换数据中远程托管的或者不以.hta结尾的HTA文件的执行。
查找是否有mshta.exe进行外部网络连接;排查Mshta是否通过URI下载并执行HTA内容。
HTA文件通常是MIME类型(多用途互联网邮件扩展类型)的。

三、创建或修改系统进程(T1543)

书中给出了这么一个定义:检测到最多的攻击技术是“创建或修改系统进程”,而且主要是windows服务,攻击者通过这个技术来实现持久化战术。检测到的数量多自然离不开windows服务,系统后台运行的常见二进制文件,在执行时通常不会引发警报,那么攻击者通过创建、修改系统服务进程,既能够瞒天过海,还能够取得较高权限。
攻击者经常使用Windows服务控制管理器配置工具(sc.exe),根据需要修改或者创建服务

检测windows服务要收集的数据:
·命令行监控:比如检测到使用sc.exe手动创建、注册、修改服务
·进程监控:出现随机进程名
·windows事件日志:关注4697、7045、4688
·windows注册表:对注册表的异常修改,如对HKEY_LOCAL_MACHINE\SYSTEM\CurrentSet\Services
进行修改,说明可能存在不受信任的服务
·文件监控:

四、计划任务/作业(T1053)

攻击者可以利用windows计划任务(task scheduler)实现初始访问重复执行恶意代码,在系统启动时或调度任务时执行恶意程序,实现持久化。
很多合法软件需要持久化,因此计划任务是不能够关闭或者阻止的。攻击者往往会混入正常使用,来绕过检测。攻击者常常同时使用计划任务和混淆文件或信息。
关于持久化,也就是计划任务,在学习内网安全的时候接触过,以前是用AT后来AT淘汰后使用schtasks。书中指出,在schtasks常用参数中,靠前的是 /Create、/Change、/Run、/Delete、/Query.
热知识,一天一共86400秒。攻击者很有可能在任何一秒启动计划。

检测计划任务需要搜集的数据:
·windows事件日志:(windows-Task-Scheduler/Operational日志)监控计划的创建、修改、删除、使用。
事件ID106、ID140记录创建、更新计划任务的事件、名称。ID141监控计划任务的删除信息。书中提到还要启用对象访问审核,创建特定的安全访问控制列表(SACL),收集ID4698(计划任务创建)、ID4699(计划任务删除)、ID4700(计划任务启用)、ID4701(计划任务禁用)。

·进程和命令行监控:

检测计划任务的方法:
首先,恶意计划任务常见的二进制文件有:cmd.exe、powershell.exe、regsvr32.exe、rundll32.exe
①Taskname、Taskrun
它们分别为/TN、/TR标记的传递参数。要留意包含TaskName或者/TN值。攻击者经常将而已任务的名字伪装,如使用GUID(如Qbot)混入合法的活动名称。而Taskrun一般会指定了预定时间执行的内容,攻击者曾通过使用LOLBINs或者将磁盘上的恶意软件命名类似合法的系统封程序。任何指向脚本的Taskrun都要注意

②没有schtasks.exe的计划任务:
由于攻击者可以在COM对象的帮助下直接创建或者修改任务,无需调用schtasks.exe和taskschd.msc,我们就要注意在\Windows\System32\Tasks以及\Windows\SysWOW64\Tasks目录中监控 文件创建、修改 事件。

③异常的模块加载:
监控镜像加载,例如\Windows\System32\taskschd.dll,通常不会被Excel或者word等进程加载。收集这些异常信息我认为可以通过黑白名单的方式。

五、OS凭证转储(T1003)

在内网学习的时候OS凭证转储就发挥了横向移动的作用。攻击者常使用的是LSASS内存(T1003.001)。LSASS本地安全验证子系统服务。

使用LSASS内存的原因:
首先它存储在内存中的敏感信息数量庞大,是很容易攻击的目标。攻击者攻击LSASS进程获取里面的凭据,使用Mimikatz等工具,攻击者通过现有beacon能轻松访问LSASS。
攻击者在目标设备上运行受信任的管理工具,如Sysinternals工具(ProDump)。书中提到,如果攻击者在目标主机以特权用户执行任务管理器(taskmgr.exe)的时候可以轻而易举转储任意进程的内存数据。
创建转储文件需要用MiniDumpWriteDump函数,在dbghelp.dll和dbgcore.dll中实现。rundll32.exe可以执行Windows本地DLL文件comsvcs.dll导出的MiniDumpW函数。
能够访问LSASS的工具:
·ProDump
·任务管理器(taskmgr.exe)
·Rundll(comsvcs.dll)
·Pwdump
·Lsassy
·Dumpert
·Minikatz
·Cobalt Strike
·Metasploit
·LaZahne
·Empire
·Pyoykatz

检测LSASS内存要收集的数据:
·进程监控
·文件监控
·网络连接

检测LSASS内存方法:
①基线:分析异常使用LSASS迹象
②注入LSASS进程的可疑代码
③检测MiniDumpW函数的使用情况

六、进程注入(T1055)

攻击者通过进程注入,将如lsass.exe与正常的进程融合,通过他们来代理执行恶意活动。通过进程注入,可以运行进程的内存空间内启动恶意payload,无需将任何恶意代码存储到磁盘中。
常见的攻击者使用的方法:
·远程把DLL注入正在运行的进程
·注入受信任的内置可执行文件(如notepad.exe)建立网络连接,然后注入恶意行为的代码
·从lsass.exe跨进程注入taskhost.exe
·Metaspolit将自身注入svchost.exe
·注入浏览器进程,窥视

检测进程注入的数据:
·进程监控
·API监控
·命令行监控

检测进程注入的方法:
①异常的进程行为:进程做了不属于它职责的事情
②异常的路径和命令行:
rundll32.exe、regasm.exe等没有发现命令行选项,可能表明他们是被注入的目标;
Microsoft进程,如vbc.exe的命令行包括/scomma、/shtml表明可能注入了Nirsoft工具以进行凭证访问;
如果在linux进程的文件描述符指向的文件路径带有memfd标志,表示他是从另一个进程的内存派生出的。
③注入LSASS

七、混淆文件或信息(T1027)

攻击者用该技术来实现隐藏,常见的混淆技术:
①base64编码
②字符串拼接
③转义字符

检测混淆文件或信息所需要搜集的数据:
·windows事件日志
·进程和命令行监控:通常混淆由powershell.exe和cmd.exe命令启动

检测混淆文件或信息的方式:
①BASE64:可以检测powershell.exe和amd.exe进程的情况,看看有没有包含ToBases4String和FromBase64String等参数的命令行。
②其他编码:书中提到最常见的混淆形式是使用-EcodedCommand Powershell参数。监控当执行Powershell.exe出现转换编码命令的情况。
③转义字符:如果系统经常使用大量与混淆相关的字符,要警报。

八、入口工具转移(T1105)

书中提到LOLBINs,找到天融信介绍它的文章。LOLBINs-生活在陆地上的二进制。能被称为LOLBINs的程序符合:
·可以是带有Microsoft签名的二进制文件,可以是Microsoft系统目录中二进制文件。
· 可以是第三方认证签名程序。
· 具有对APT或红队渗透方有用的功能。
·该程序除过正常的功能外,可以做意料之外的行为。(如:执行恶意代码、绕过UAC)

攻击者进行入口工具转移的原因:
渗透测试到了后渗透阶段,攻击者就会进行持久化、留下backdoor,然后横向移动。
攻击者攻陷内部系统会尝试网络连接,以此来下载其他恶意软件、脚本、代码等。这里可以重视,攻击者必须下载文件才能成功执行入口工具转移。攻击者贡献目标后会通过二进制文件LOLBIN执行入口工具转移,通常包括:BITSadmin、Certutil、Curl、Wget、Regsvr32、Mshta

检测入口工具转移需要搜集的数据:
·命令行监控:
·进程监控
·网络连接
·数据包捕获

检测入口工具转移的方式:
①最有效的方式是,检测powershell命令行的关键字和特定模式。比如有无使用:
·downloadstring;
·downloaddata;
·downloadfile;
又或者,命令行出现的参数由bitsadmin.exe、certutilulrcache、split这些字符串,很有可能存在下载恶意文件的行为。
②注意检测可疑的命令模式,如Wget、curl

九、系统服务(T1569)

攻击者可以通过与服务交互或者创建服务来执行恶意代码,并且通过开机自启动实现持久化,攻击者最常使用的技术是“服务执行“(T1569.002)

攻击者利用windows服务控制管理器(services.exe)执行恶意命令或恶意payload。

在操作系统中,只有所有的进程都退出了才能关闭系统,而为了保证业务可靠性,可以通过检测每个程序的守护进程来判断能否关机。所有的windows服务都是作为services.exe的子进程产生的的。

需要检测的数据:
·进程和命令行监控
·DLL加载监控:Sysmon事件的ID7
·设备驱动程序加载监控:windows defender应用程序控制(WDAC)是设备驱动程序监控的有效数据源
·UNIX/Linux系统:系统对守护进程的配置文件变更发出警报。

检测系统服务最有效的方式:查找从服务控制管理器派生的cmd.exe实例。在命令行中查找/c能缩小潜在的交互式会话。

十、伪装(T1036)

通过伪装,躲开检查。经常用到重命名系统程序(T1036.003)

检测伪装的方式:
·已知的进程名称
检测内外名称不一致的情况
·已知的进程路径
内外路径不匹配的情况
·已知的进程哈希值
哈希值出现偏差要警报
·系统进程已知的命令行参数
两个进程用到同样的命令行参数,要警惕

Powershell学习

在这段时间学习的感觉来看,众多攻击技术中powershell使用频次极高,攻击者若能在目标主机运行代码,那么它们就会下载powershell脚本(.ps1)到磁盘中执行,甚至可以直接在内存执行,因此有必要好好看看这部分知识。

首先powershell是windows自带的一个交互式命令行界面和脚本环境,攻击者可以利用powershell实现攻击。而攻击者选用powershell的重要目的在于它可以混淆命令来达到:
·绕过检测
·派生其他进程
·下载并执行代码和二进制文件
·收集信息
·更改系统配置

既然powershell这么广泛使用,那么它的特征将会是很明显的,我们可以先从他的利用方式找到其特征:
·执行命令
·利用编码命令
·混淆执行
·下载其他payload
·启动其他进程

那么检测powershell的方法最有效的就是检查命令行参数,还可以使用反恶意软件扫描接口(AMSI)来检测恶意的powershell,书中介绍了一些检测方式:
①命令加密
攻击者使用powershell的时候往往会使用编码和混淆来扰乱视听,那么我们可以想到检测使用编码和混淆的方法特征,去检查有没有可疑的参数,使用包含“-encodecommand”参数变体的命令行来监控powershell的执行情况。
变体例子:-e,-ec,-encode,-en等

②Base64编码
查找powershell.exe的进程以及包含Base64的相应命令行

③混淆
找到了被编码的数据,可能还被做了手脚混淆了,我们需要找到真正需要的内容。所谓混淆,可能存在压缩,拆解,重新组合等方式绕过检测。我们可以使用正则表达式(比如regex)提高检测准确度,去检测包含“^,+,%,$”等特殊字符的powershell命令

④可疑的cmdlet
从混淆中解开明文内容后我们开始分析。我们可以检测各种可疑的会进行恶意活动的cmdlet(powershell环境中的轻量级命令)、方法和进程参数,比如:invoke-expression(或者他们的变体比如iex,.invoke)、DownloadString、DownloadFile方法,或者如-nop、-noni这样比较特殊的参数。

⑤消除误报
很多时候合法用户也会使用编码等命令,所以会出现误报,这就需要我们懂得其中逻辑并且懂的判断。

再继续了解一下powershell吧
常见攻击工具:
①PowerSplit②Nishang③Empire④Powercat

在之前的内网安全学习曾经提到powershell使用,可以回过头看看。

ATT&CK(四)–一些攻击组织和恶意软件的分析检测

学习这部分内容,感觉一下子拉回到了2018到2019的那段时间,宏病毒再各大学校肆虐,学校机房上课的老师忙着杀毒恢复数据。但培训还要用到宏,顶着风险课还是照常教我们用word的宏。注意到在很多用于勒索的恶意活动,都以宏作为载体,编写恶意代码,在编写具有诱惑力的钓鱼文件,促使很多人中招。所以还是说不管技术多么先进,人的意识不够高警惕性不够强的话极有可能正中攻击者下怀。

通过分析一些攻击组织或者恶意软件的特征,帮助我们日后排查安全问题的时候产生思路,或者有目的的对不安全的系统进行加固。下面根据书中介绍简单做下笔记:

1.TA551(一个攻击组织)攻击行为的分析与检测
该组织十分喜欢网络钓鱼来投递payload,投放的payload包括IcedID和Valak。它们常利用宏加载病毒的word文档压缩成zip包,并对其进行加密,放到钓鱼邮件中诱使受害者打开,之后会从其他地方下载后续使用的恶意软件。
禁用宏是很好的方法,但是为了高效办公或者其他原因,很多组织机构和用户是不禁用宏的。为了安全,它们最好启用纵深防御。恶意代码下载的DLL文件可能会使用“.theme”之类的扩展名来混淆,word是很多个文件压缩而成的,”.theme”是文档使用的主题一类的代码。
尽管该组织经常想要绕过防御,但还是会泄露出一些特征,比如恶意word执行了regsvr32.exe是极其不寻常的事情,就可表明存在恶意宏。
此外我们还可以检测二进制文件的哈希值或者内部元数据,若预期的文件名和观察到的文件名不一致,就要检查,发现与典型行为异常的事情就可能出现安全问题。类似的wmiprvse.exe作为mshta.exe的父进程出现是极其不寻常的。

2.cobalt strike的分析与检测
cs作为主要的渗透测试框架工具,被广泛使用,如果能检测到cs的使用痕迹,就要做出对应的措施。
cs可以生成和执行DLL、EXE、shellcode形式的payload,也叫cs的beacon。
·cs beacon通常利用进程注入绕过防御,在rundll.32.exe等windows二进制文件的内存空间执行恶意代码。
·cs beacon也可作为windows服务执行,利用poweshell代码或二进制文件,实现PsExec的功能。
·cs 还可以用命名管道模拟NT AUTHORITY/SYSTEM执行代码,实现对主机的无限制访问。
那么怎么检测cs活动呢?
·检测beacon,比如搜索powershell.exe进程,其命令行含有常见的关键词个BASE64编码变体,包括IO.MemoryStream、FromBaselineString、New-Object
·识别命令处理程序CMD.EXE的实例来检测通过命名管道模拟实现权限提升的行为,找到关键字为echo、pipe。

3.银行木马Qbot
Qbot是针对银行的木马,通常作为勒索软件的传递代理,传播包括ProLock和Egregor勒索软件。
他主要窃取用户数据和银行凭证,防御思路是检查正常的esentutl命令行,如果看到引用Windows\webcache是很不正常的事情,那么我们可以编写程序查找windows\webcache中的esentutl.exe进程。

4.银行木马IceID
也叫Bokbot,它会创建本地文件来拦截失陷主机上所有浏览器的流量,窃取敏感信息。IceID会通过下载二进制文件到用户的本地文件夹来实现持久化。它还包含VNC功能,用于远程访问目标机器。
我们可以:
·检测使用msiexec.exe执行随机文件名的.msi文件;
·检测用户漫游文件夹中执行计划任务,比如寻找启动文件在%Users%文件夹中的计划任务,排除IceID持久化的风险

5.凭证转储工具Mimikatz(内网常见)
主要用来提取密码、横向移动。
之前的攻击者会把Mimikatz二进制文件保存在C:\PerfLogs\目录中,该目录值得重视。
该工具有个常见的模块sekurlsa::logonpasswords,用于提取最近在主机上登陆的账号和密码,是可以被检测的明显特征。

6.恶意软件shlayer
这个木马与恶意广告相关,他会伪装成Flah,利用AWS部署基础设施。
我们可以检测:通过curl命令下载payload

7.银行木马Dridex
通常通过附带恶意excel的文档的电子邮件传播,通常跟Ursnif、Emotet、TrickBot、DoppelPaymer等共用。
Dridex最常用技术是对各种合法的windows可执行文件进行DLL搜索顺序劫持。
我们可以检测:
·创建包含系统目录的和计划任务
Dridex通过Windows\System32\、Window\SysWOW64、winnt\System32和Winnt\SysWOW64等系统目录创建计划任务,实现持久化。我们查找命令行中是否包含“/create”标志和系统路径的schtask.exe,用于发现dridex残留
·检测用Excel生成的regsvr32.exe。我们可以查找是否有excel.exe生成子进程regsvr32.exe.

8.银行木马Emotet
它主要作为其他恶意软件的下载器或者drooper。它窃取用户数据和银行凭证,并把自己部署到攻击目标上。
我们可以检测:
·poweshell字符串混淆
查找是否有powershell进程执行使用格式运算符“-f”连接字符串的命令。

9.银行木马TrickBot
它能生成Ryuk和Conti。
它窃取敏感数据和凭证,也可以传播cs等后续payload,分发上述俩恶意软件。
我们可以检测:
·svchost.exe端口连接异常。比如svchost使用447、449端口进行外部链接是不正常的
·检测%appdata%d的计划任务执行,可以查找父进程是taskeng.exe或者svchost.exe且进程文件在APPdata/Roaming中的可疑程序

10.蠕虫病毒Gamarue
它是一个恶意软件家族,通常是僵尸网络的一个构成部分。用于传播其他恶意程序以及窃取信息。用户点击了伪装成U盘上合法文件的恶意LNK文件,这会导致rundll32.exe开始执行,之后加载恶意DLL文件。
我们可以检测:
·可以查找是否存在没有命令行的msiexec.exe进行外部网络连接
·检测域名

通过学习检测这些攻击团队或者恶意程序的思路,有助于我形成更大的大局意识,处理安全事件要思路广泛,一切挂钩的事件都有可能潜藏着攻击者精心布置的文件,我们要能识别出它们,根除它们,保证信息安全。

ACC&CK(三)–数据源

框架能否发挥应有的作用我想最关键的地方就在于它的“数据源”

框架建立在从数据源上搜集信息,对信息进行分析处理,得到了上下文联系,由此对于入侵检测入侵防御的精确度提高有所帮助。也就是说我们继续改进对于数据源的利用,会让我们的工作更加高效。

书中有三个方法提高数据源的利用效果:

①定制数据源定义
②标准化命名方法
③确保平台一致性

·定制数据源定义
所谓数据源,我想就是获取我们想要收集数据的地方,比如某个日志,比如某个配置文件。定义好数据源让我们清晰的区分不同的数据源,以及理清楚数据之间的关系

·标准化命名方法
其重要性在于正确区分数据源,精确搜集数据

·确保平台一致性
因为某些数据源在某些平台是没有的,所以确定好数据收集平台,能提高效率。

我们明白了要改进利用数据源的方法,那么具体实现应该是怎么样的呢,换句话说我们该如何正确定义、描述数据源?书中给出了如何描述数据源的结构和方法的答案。

①利用数据建模
②通过数据元素定义数据源
③整合数据建模和攻击者建模
④将数据源作为对象集成到ATT&CK框架中
⑤扩展ATT&CK数据源对象
⑥使用数据组件扩展数据源

·利用数据建模
三个概念:
数据对象/元素:描述数据源的数据元素
数据对象属性:数据的一些属性信息,比如说名称,地址等
关系:数据之间的关系,比如一个进程可以创建另外一个进程

·通过数据元素定义数据源
也就是给数据源起名字的方法。可以使用数据元素来命名与攻击行动有关的数据源
例如:
以windows注册表为数据源,他的数据元素中包括进程、注册表项、用户,其中注册表项是用来识别主要数据对象的,可以用来作为数据源名称。
再例如:
对提供某项服务的数据元素进行分组,根据他们共有功能取名称。

·整合数据建模和攻击者建模
因为框架针对的是已知的攻击方式,所以要确定必须收集某些特定的事件,覆盖已知的特定的攻击

知道了要怎么定义、描述数据源后,应该要着手实装这些方法。书中以改进进程监控为示范,解释如何改进:

1.改进进程监控

①确定数据源
可以从内置事件提供程序(如microsoft-windows-security-auditing)和开源第三方工具(sysmon)来采集跟进程相关的信息。在这一步骤目的是找到攻击行动的主要数据元素,比如从安全日志中找到跟进程相关的,同时给出说明,也就是描述进程做了哪些事情,发生了哪些事情。

②确定数据元素
也就是列出跟相关的数据,比如用户、进程、命令、主机、ip、端口都可以跟进程产生一定的联系。书中提到,数据源的命名由核心数据元素表示,比方说“进程监控”,由于监控是围绕进程产生的行为,我们应该选择“进程”作为数据源名称,从而删除多余的无关措辞。

③确定数据元素之间的关系
根据采集到的数据来描述跟“进程”相关的安全事件案中的关系

④定义数据组件
组件其实就是根据数据元素的功能或者特性进行分类,形成对数据元素之间关系的更高级的描述,也就是更细致的描述。

⑤构建ATT&CK数据源对象

书中的描述 “进程”这一数据源的方法

接下来我们要跟技术/子技术联系在一起,如下图,书中给出了应用的例子:

ATT&CK(二)–针对容器的攻防矩阵

容器,是一种轻量型的虚拟化技术,用于进行云应用程序快速部署。也就是虚拟机,把云应用当镜像一样丢进去运行,就跟玩kali那样。

kubernetes是最常见的容器编排工具,而docker是容器,它们算得上是云技术的基础设施。

ATT&CK针对容器这一部分提到,攻击者主要是通过让受害者下载并且运行恶意镜像,导致受害者主机执行了恶意代码。
针对容器的技术:
①执行命令或进程
②植入恶意镜像实现持久化
③通过容器逃逸实现权限提升
④绕过或者禁用防御机制
⑤基于容器API获取权限访问
⑥容器资源访问

针对kubernetes的攻防矩阵:
①通过漏洞实现对kubernetes的初始访问
②恶意代码执行
③持久化访问权限
④获取更高级访问权限
⑤隐藏踪迹绕过检测
⑥获取各类凭证
⑦发现环境中的有用资源
⑧横向移动
⑨给容器化环境造成伤害

JAVAWeb的一些安全问题

[前菜]一个任意密码找回思路,当使用验证问题来验证用户,如“你最喜欢的动物”,如果逻辑是既验证键名也验证键值,可以通过构造一个不存在的键名进行绕过

JWT:JSON WEB TOKEN允许客户端指示身份,以便身份验证,类似cookie、session

JWT由三个部分组成:
header.payload.signature //如果出现在cookie一栏,可判断为JWT,在网上解密JWT可以恢复明文

针对JWT的攻击:
1.空加密算法
不生成密钥,前提是服务器支持不使用密钥:

把第一部分的base64解码,然后把alg字段设置为none,然后删除第三部分,但是保留点。

eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0=.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNzAxNzQ3NDQ3fQ==.

2.密钥爆破
可以用脚本跑字典爆破

3.组件安全

php一些安全缺陷

现在用php开发的网站数目量仍然庞大,从安全编程的角度,符合规范的php代码应该严谨。然而在很多时候由于开发人员编写代码没有很好的安全思路,会导致php代码产生一些容易被利用、被绕过的地方。

1.关于“=”、“==”、“===”的使用
=:赋值
==:比较(弱,比较前会把类型强制转换再比较)
===:比较(强,比较所有包括值和类型)

当有必要进行严格使用强类型比较的时候,开发人员却在编写代码时使用了若比较“==”,就算类型不正确也会被执行成功,因此产生风险。

用一个例子说明:
·某php代码为
if($_GET[‘name’]!=$_GET[‘password’])
{
if(MD5($_GET[‘name’])==MD5($_GET[‘password’]))
{
echo $flag;
}
echo ‘?’;
}

使用“==”,找到两个MD5值前两位0e相同的字符串输入,就可以满足明文不同但是MD5值相同,php会以为他们都是0。

if($_GET[‘name’]!=$_GET[‘password’])
{
if(MD5($_GET[‘name’])===MD5($_GET[‘password’]))
{
echo $flag;
}
echo ‘?’;
}

使用“===”,这时候会对比所有属性,那么可以使用数组的思路,因为数组不能进行MD5运算,结果会变成null,这样输入两个数组如name[]=1&password[]=2也实现了明文不同但是MD5相同

【危害】如果后台验证存在类似对比不当缺陷,会有安全风险

2.php使用intval()函数过滤sql
intval是用来做进制转换的

3.strpos()函数,判断第一次出现的位置
可以使用换行进行绕过,也就是前面加上“%0a”

4.in_array()d函数,从数组中判断是否含有目标字符
注意到这个函数有三个参数,第三个参数应该被设置为true,否则相当于使用“==”不会检测类型,
存在绕过的问题
in_array($x1,$x2,strict:true)

5.preg_match()函数,它只能处理字符串。那么如果传数组进去就会报错

6.str_replace()函数,用来过滤sql的
双写过滤词就可以绕过,比如过滤apple,双写之后就是apappleple

如果使用这个函数不当,极有可能产生任意文件读取,因为过滤能被绕过。比如过滤“../”、“./”就可以使用双写等方式绕过,就可以查看任意路径

web漏洞-XXE漏洞

XXE漏洞:XML外部实体注入。

XML是用来标记电子文件使其具有结构性的标记语言,允许用户自定义标记语言。
XML文档结构:
·XML声明
·DTD:文档类型定义
·文档元素

在XML代码中如果没有限制XML引入外部实体,那么当创建一个包含外部实体的XML时,外部实体的内容就会被执行。

【修复】:
·禁止使用外部实体
·过滤用户提交的XML数据

web漏洞-SSRF漏洞

既然学习了内网安全,我想在这里谈一下针对内网的SSRF漏洞。SSRF服务端请求伪造是由攻击者构造请求,由服务端发起请求的漏洞。它的危害在于能影响内网内的其他计算机。

一、形成原理
被攻击的服务器能从其他服务器获取数据,但是并没有对目标地址进行过滤与限制

二、攻击方式
·对内网进行端口扫描
·攻击内网的应用程序
·对内网web应用进行指纹识别,识别出企业内部资产信息
·利用file协议读取本地文件

三、防范
·限制请求的端口只能是web端口,只允许访问http和https的请求
·限制不能访问的内网ip
·屏蔽返回的详细信息