前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Fractured Mirrors:破碎的镜像

Fractured Mirrors:破碎的镜像

作者头像
Apache IoTDB
发布于 2020-09-27 02:28:49
发布于 2020-09-27 02:28:49
6800
举报
文章被收录于专栏:Apache IoTDBApache IoTDB

今天介绍《A Case for Fractured Mirrors》,来自 VLDB 2002,作者来自威斯康星大学麦迪逊分校,和之前的 PAX(Partition Attributes Across)属于一类:也是在结合 NSM 和 DSM 的优点。

正文 2165 字,预计阅读时间 6 分钟。

背景知识

PAX 是优化 NSM 的 cache 表现,而这篇文章主要关注磁盘IO。NSM 主要针对投影率和选择率都比较高的场景,而 DSM 适用投影率和选择率都比较低的场景。

投影率(projectivity)就是 select 语句后边跟的列数,就是查询的列数。投影率高就是查的列多。选择率(selectivity)就是挑剔度,选择率高,结果集就少。

投影率和选择率都高,就是只选择很少的数据,并且把这些数据的大部分属性都拿出来,比较适合 NSM。

DSM 的缺点及实现优化

都说 DSM 重组数据耗时,到底多耗时呢?这篇文章给出了一个测试结果。

用 TPC-H 数据集的 Line-item 表(每行数据有16个属性),一共 1GB 数据。采用 NSM 会占用 1.1 GB 磁盘空间,并且一个全表扫描需要 74.5 秒。

DSM (16个关系,每个关系表有一个 ID 列和一个属性列)占用 2.8 GB 空间,

为了实现全表扫描,需要对每行数据都重组,随着选择的列数从 1 列到 8列,扫描的时间为 68.29s 到 759.39s。比 NSM 模型差的有点大,即使只选择一列也没好多少。

这和我一直说的 DSM 在选择列数少的时候性能很好说法相悖啊,这里有实现问题,作者是用一种最简单的 DSM 实现对比的,用 slotted page 存放每一对 《ID,属性列》,不管这个属性列是定长还是变长。这种实现方式比较浪费空间。

除此之外,每个属性需要带一个 ID,比较浪费空间,虽然现在磁盘几乎没啥成本,多占空间不是问题,但是多占空间会导致多占 IO,这就成问题了。因此,减少 IO 数据传输是很有必要的。

作者针对 DSM 的一些实现上的问题,提出了一个稀疏的 B-Tree 索引,去掉了多余的 ID 列。在这些 DSM 优化的基础上,又提出了一个基于 Chunk 的多路归并算法,主要思想就是从单点加载变成批量加载。

作者比较了优化后的单点加载算法、批量加载的算法以及 NSM 扫描的时间。这基本是 DSM 应该有的速度,可以看到一种思想的表现和实现也很相关,你可以把一个非常巧妙的想法实现成一坨屎,也可以把一个很傻的算法实现的很快。

镜像:Raid 1

镜像技术就是使用两块磁盘将数据做个拷贝,两块盘都可以对外提供访问服务,做负载均衡。两块盘的数据存储结构都一样。

简单版 fractured mirror

前边都是在讲 DSM 和 NSM 的基础和实现。其实这篇文章主要在镜像上做文章。

因为 NSM 和 DSM 分别适用于不同场景,所以一个简单的想法是,两个镜像,一个用 NSM ,一个用 DSM。这样不同的查询负载就可以分配到不同的盘上去执行,哪个快用哪个。

这样是最简单的方式,但是有个问题,那就是负载不均衡,可能查询都是偏 NSM 场景的,那 NSM 的盘就比较忙碌了。

升级版 fractured mirror

为了解决负载均衡的问题,又提出了升级版的。下图:

一张表,在一块盘上前一半数据用 NSM 结构存储,后一半用 DSM。在另一块盘上反过来。这是比较简单的分配策略,也可以用轮转的分配方式。

这样,一个全部偏 NSM 的查询负载,对于每一个查询来说,假设这个查询访问的数据是随机分布的,这个查询也可以被均摊到两块盘上。负载均衡也没问题了。

同步方式

原来的 Raid 1,在两个磁盘上的插入更新操作都一样,现在物理存储不同了,一个涉及1行记录10个属性的更新操作,在 NSM 上只需要一次写入就可以了,在 DSM 上就需要 10 次写入,这个极大地不同步。

解决方式是用全部驻留在内存中的 Differential file,将修改都记录在这里,定期和磁盘文件合并,保证这个文件大小适中。

删除使用 bitmap记录,查询时候需要将 Differential file 和 bitmap 一起合并。

查询计划生成

这样一个查询来了之后,可以生成两个最优计划,基于 NSM 的最优计划和基于 DSM 的最优计划,哪个快用哪个,查询优化器就变复杂了。而且需要生成两种查询计划,相当于优化了两遍(optimize-twice)。

另一种方式是自底向上的搜索查询计划,把所有可能的扫描操作符和join操作符都生成出来,然后拼出来一个最优的。通过这种方式避免 optimize-twice,而且能生成混合查询计划(既包含NSM的又包含DSM的)。

局限

先说查询计划生成,都是基于规则的,作者说是避免了优化两次,但是我觉得只是将两种查询计划生成器混合起来了,打散放到了每一小步上去,比optimize-twice并不简单,优点是能生成混合的计划。由于底层存储的不同,需要维护两套查询引擎是比较头大的。

仅有两种不同的物理存储结构,即 NSM 和 DSM,仅适用两个副本的情况。

Differential file 是个潜在的性能问题,一个盘挂了,从另一个盘恢复的时间没有度量。

总结

本文的想法很好,一个数据库包含两套存储结构,而且不是简单的一份数据存两套,而是在一份数据内部就有两套,但是这样查询就会变复杂,而且数据恢复是个问题。

再来看看题目,原来的两个镜像是一样的,就和镜子一样,现在将他们物理结构改变了,相当于打碎了镜子,于是题目叫破碎的镜像。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Apache IoTDB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
地狱之门进程注入官方免杀插件
在武器库的process_inject部分,我们使用kali编译并加载到cobaltstrike,这两个钩子将覆盖大部分的内置命令。
白帽子安全笔记
2024/10/30
1540
地狱之门进程注入官方免杀插件
如何将.NET程序集注入至现有进程
inject-assembly这款工具是Cobalt Strike的传统“fork-and-run”执行方式的替代方法。在该工具的帮助下,加载器可以注入到任何进程中,包括当前Beacon在内。长时间运行的程序集将继续运行并会将输出发送回Beacon,这种特性类似于execute-assembly的执行行为。
FB客服
2022/02/25
7480
如何将.NET程序集注入至现有进程
Sliver取代Cobalt Strike成黑客渗透工具“新宠”
8月25日消息,攻击者逐渐弃用Cobalt Strike渗透测试套件,转而使用不太知名的类似框架。开源跨平台工具Sliver正取代Brute Ratel成为受攻击者青睐的武器。 在过去的几年里,Cobalt Strike被各类攻击者滥用(包括勒索软件操作),攻击者利用它在被攻击的网络上投放 "信标",横向移动到高价值系统。 但防守方已经掌握检测和阻止Cobalt Strike攻击的方法,攻击者转向尝试其他可以逃避端点检测和响应(EDR)和防病毒解决方案的工具。 微软的一份报告指出,从国家支持的团体到网络犯
FB客服
2023/03/30
8820
Sliver取代Cobalt Strike成黑客渗透工具“新宠”
使用 Cobalt Strike 的 Beacon 对象文件自定义 DLL 注入
信标对象文件 (BOF) 是一个已编译的 C 程序,按照约定编写,允许在信标进程中执行并使用内部信标 API。
黑白天安全
2021/10/18
2.2K0
使用 Cobalt Strike 的 Beacon 对象文件自定义 DLL 注入
SPAWN - Cobalt Strike BOF
Cobalt Strike BOF 产生一个牺牲进程,用 shellcode 注入它,并执行有效载荷。旨在通过使用任意代码保护 (ACG)、BlockDll 和 PPID 欺骗生成牺牲进程来逃避 EDR/UserLand 钩子。
Khan安全团队
2021/08/26
2.4K0
SPAWN - Cobalt Strike BOF
攻击者利用公开的 Cobalt Strike 配置文件
在本文中,Unit 42 研究人员详细介绍了最近发现的恶意 Cobalt Strike 基础设施。我们还分享了恶意 Cobalt Strike 样本的示例,这些样本使用了 Malleable C2 配置文件,这些配置文件源自托管在公共代码存储库中的同一配置文件。
Khan安全团队
2024/07/04
2040
攻击者利用公开的 Cobalt Strike 配置文件
Malleable-C2-Profiles配置
在日常的渗透测试工作中,我们需要做很多的规避操作,因为我们所使用的C2工具等,可能早已被AV等防护软件所标记,所以我们需要订制我们的攻击工具。而这就引出了我们的今天的重点Malleable C2 ,Malleable C2 是 Cobalt Strike 的一项功能, 意为 "可定制的" 的 C2 服务器. Malleable C2 允许我们仅通过一个简单的配置文件来改变 Beacon 与 C2 通信时的流量特征与行为。
鸿鹄实验室
2021/04/15
1.5K0
Malleable-C2-Profiles配置
渗透神器Cobalt Strike使用教程
请注意,本文编写于 560 天前,最后修改于 542 天前,其中某些信息可能已经过时。
Xcnte
2021/12/14
2.2K0
渗透神器Cobalt Strike使用教程
PostExpKit插件更新:进程注入模块
今天更新下PostExpKit插件的进程注入模块,目前已集成CS内置进程注入命令spawnto、spawn、inject,另外还有PoolPartyBof、ThreadlessInject和CS-Remote-OPs-BOF下Injection(12种注入方式),总计有20+进程注入方式吧,也可将shellcode注入到指定进程中执行...。
潇湘信安
2024/07/04
3350
PostExpKit插件更新:进程注入模块
如何使用cThreadHijack实现远程进程注入研究
关于cThreadHijack cThreadHijack是一个针对远程进程注入信标对象文件(BOF),该工具主要通过线程劫持技术实现其功能,并且不会生成任何远程线程,仅限研究使用。 运行机制 cThreadHijack可以根据用户提供的监听器参数来生成原始信标Shellcode,并根据用户提供的PID参数将其注入至远程进程中,这一步主要利用的是VirtualAllocEx和WriteProcessMemory方法。 接下来,cThreadHijack并不会通过CreateRemoteThread或其他AP
FB客服
2023/03/30
5380
如何使用cThreadHijack实现远程进程注入研究
渗透测试神器CobaltStrike使用教程
Cobalt Strike是一款渗透测试神器,常被业界人称为CS神器。Cobalt Strike已经不再使用MSF而是作为单独的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。 Cobalt Strike集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、Windows dll动态链接库生成、java程序生成、office宏代码生成,包括站点克隆获取浏览器的相关信息等。
雾海梦曦
2022/11/12
4.4K1
渗透测试神器CobaltStrike使用教程
CobalStrike 4.0 生成后门几种方式 及 主机上线后基础操作
—个HTML Application (HTML应用)是一个使用HTML和一个Internet浏览器支持的脚本语言编写的Windows程序。该程序包生成一个HTML应用,该应用运行一个CobaltSt rikepayload。你可以选择可执行的选项来获取一个HTML应用,此HTML应用使得一个可执行文件落地在磁盘上并运行它。
Ms08067安全实验室
2021/01/28
3.6K0
Donut - 将 .NET 程序集作为 Shellcode 注入
在过去的一年里,进攻和红队的交易技巧发生了显着变化。随着反恶意软件系统提高检测和阻止攻击性工具的能力,攻击者正在将注意力转移到 AV 无法观察到的技术上。目前,这意味着完全在内存中操作并避免将文件放到磁盘上。在 Windows 世界中,.NET 框架为此提供了一种方便的机制。但是,它受到严格限制,因为 .NET 程序不能直接注入远程进程。在本文中,我们将通过描述如何通过 shellcode 将 .NET 代码注入进程来解决这个问题。
Khan安全团队
2022/01/17
2.2K0
Cobalt Strike|从入门到入狱
Hello大家好哇,我是你们的lmn小姐姐,从今天开始,我们要发N期Cobalt Strike的教程,主要是介绍从入门到入狱的过程,欢迎师傅们转发留言走起。
Gcow安全团队
2020/03/06
13.4K3
如何使用SigFlip篡改身份认证码签名的PE文件
SigFlip是一款能够篡改经过身份认证码签名的PE文件(exe、dll、sys等)的工具,而且整个过程不会影响或破坏已有的身份认证码签名。换句话来说,就是我们可以使用SigFlip向PE文件中嵌入数据(比如Shellcode),并且再不会破坏文件签名、完整性检查或PE文件功能的情况下,修改PE文件的校验和或哈希。
FB客服
2021/10/11
1.1K0
Cobalt Strike最实用的24条命令(建议收藏)
在Cobalt Strike中,输入“help”命令会将Beacon的命令及相应的用法解释都列出来,输入“help 命令”会将此命令的帮助信息列出来,如图所示。
Ms08067安全实验室
2023/12/14
5190
Cobalt Strike最实用的24条命令(建议收藏)
红队作业 | ​MSF和CS实战技巧汇总
其实就是内网穿透,使用frp做映射也能实现相同的效果,内网的中的Kali可以通过VSP访问到另外一个内网中。
Ms08067安全实验室
2022/04/06
1.1K0
红队作业 | ​MSF和CS实战技巧汇总
Cobalt Strike手册-环境搭建与基本功能
Cobalt Strike 需要团队服务器才能使用,也就是teamserver。 需要文件 teamserver 与 cobaltstrike.jar 可以选择把他放在公网上面
Ms08067安全实验室
2019/09/24
2.2K0
Cobalt Strike手册-环境搭建与基本功能
Cobalt Strike|Beacon原理浅析
Cobalt Strike 作为一种后渗透工具,可以完成侦察、鱼叉式钓鱼、浏览器代理等攻击。上文中我们介绍了Cobalt Strike 分为客户端和服务器两部分,服务器端被称之为Team Server。Team Server既是Beacon payload的控制器,也是Cobalt Strike提供社工功能的主机。Team Server还存储了Cobalt Strike收集的数据以及日志记录。工作模式如下图所示:
Gcow安全团队
2020/03/06
3K0
魔改CobaltStrike:探究beacon里每个功能点是如何实现的
这次我们来探究beacon里每个功能点是如何实现的,以便日后更好地实现自定义beacon。因为有近百个相关功能点,所以文章就分了上下两部分。
HACK学习
2021/06/24
2.9K0
魔改CobaltStrike:探究beacon里每个功能点是如何实现的
相关推荐
地狱之门进程注入官方免杀插件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档