Paul C's Blog

To be funny,to grow up!

0%

特征散列的优点在于它能够显著压缩参数向量的存储。通过散列,我们能够将其减少到O(m) 个数字,同时避免局部敏感散列中常见的高成本矩阵向量乘法。此外,结果向量的稀疏性得以保留。

应用场景

特别是,内存受限时,特征哈希非常有用。

消除频繁标记减少参数的存储量会导致攻击者创建非常不频繁但典型的垃圾邮件标记。如果所有单词都被散列成一个有限大小的特征向量,那么不频繁但类别指示性的标记就有机会对分类结果做出贡献。

大规模多类估计我们还可以将大规模多类分类视为多任务问题,并以类似于个性化设置的方式应用特征哈希。我们不是为每个用户使用不同的哈希函数,而是为每个类使用不同的哈希函数。

大稀疏矩阵的分解

1716291373182

将用户和每个Token链接后再做hash.

1716291505137

评价指标

错误分类率,相对基线未捕获到的恶意邮件数量

恶意邮件里,把正确的邮件错误分类为恶意是无法容忍的;而对于恶意软件,把恶意错误分类为良性是无法容忍的,定义恶意软件为P,则要求召回率尽可能高。

1716291707201

一种有效的评价方法。把用户根据其贡献的邮件数量排序放入桶里,衡量对于不同的桶,垃圾邮件的错误分类率是否下降。

22,24,26的哈希位数可以让垃圾邮件的错误率下降到最低;

独立哈希子空间之间的干扰可以忽略不计,并且概率很高,这允许在非常压缩的空间中进行大规模多任务学习。

每个有限长度的字符串可以表示为一个自然数字。

1716290714997

把每个维度映射到±1,再求累计和。

Chen Liu, B. Li, J. Zhao, Z. Zhen, X. Liu and Q. Zhang, “FewM-HGCL : Few-Shot Malware Variants Detection Via Heterogeneous Graph Contrastive Learning,” in IEEE Transactions on Dependable and Secure Computing, doi: 10.1109/TDSC.2022.3216902.

背景

BPNN,API嵌入

1.以往的方法忽略了各种特征之间的上下文关联,容易被多态性变体规避。恶意软件各个实体间细粒度的交互信息,能揭示恶意软件变体的内在模式。

传统机器学习方法无法检测隐蔽少样本的变种、零日攻击。没有使用API调用的属性信息。

2.以往的对比学习方法关注图数据或者同构图结构化数据的生成,对复杂的异构图结构数据生出的研究很少。

传统的对比方法关注同构图正负实例生成,忽略了异构依赖关系。与同构图中的单个依赖关系不同,异构图中各种恶意软件实体之间存在许多非线性和分层异构依赖关系。

1714997021345

process, API, file, network, and signature,五种实体之间的六种关系。

CRAO命名规则

1
[<type>://][<platform>/]<family>[.<group>][.<length>].<variant>[<modifiers>][!<comment>]

对比学习的直觉是利用数据固有的共现关系 作为自我监督,通过其内在的判别机制学习匹配模式并捕获不匹配模式。

基于异构图的监督学习检测方法可检测传统变异

前提知识

图神经网络对于关系型数据效果很好。

每个样本的异构图[1]都会通过图像增强{API属性掩蔽(语义信息,对属性矩阵Xi)、交互增强和元路径采样(结构信息,对临接矩阵Ai进行转换) }生成m个正样例[2],从其他恶意软件家族挑出n个负样例[3],对这三种对象,分别采用一个图注意力网络生成 图级别的嵌入表示,进而组合成图样本对,分析样本对的一致性,给出样本的家族预测。

定义5 基于原路径的显示领域(从目标节点出发,沿着元路径能够到达的节点集合);基于交互增强的领域(显示领域的0阶邻居+1阶进程邻居)

一些结论:

You等[32]认为节点邻域重构属于局部-全局对比,过分强调邻域信息会破坏结构信息。

方法

1.如何对小样本实例的大貌和细粒度进行建模;

2.如何设计恶意软件变体异构图的有效的正负样本对

3.如何学习到异构图的图级表示。 GAT

4.判别方法

1.基于特征哈希的密集属性异构图

[42]对于大规模多任务学习的特征哈希方法

2.三种数据增强方式

3.2.1随机屏蔽所有API节点的部分属性。

1715000885600

Lm表示遮罩位置矩阵,V表示服从正态分布的随机高斯噪声。

3.2.2 交互增强

同质图数据增强都集中在原始图的随机扩散;

1715001378314

第3~6行,对进程节点和邻居的关系权置为1,兼顾语义和搜索速度。

3.2.3 基于(具有区分性的预定义的六种)元路径采样所有可达节点

4.基于经济动量策略的判别器

[23]无监督视觉表示学习的动量对比

节省计算开销,三个编码器和三个投影头的计算->只反向传播GATo和MLPo,其余模型的参数基于动量进行更新。

1714999475271

i的正例的损失:

1714999935976

预设的温度参数τ,

最终损失,是m个正例的平均损失-n个负例的平均损失。

1715000060740

1715000479195

数据集

小样本恶意软件数据集要求:

  • 涵盖足够多的家族

  • 每个家族应该有一个最新的实例

  • 样本分布符合真实场景

实验

1.传统特征+传统模型(CNN,SVM+RBF,RNN+LR)

2.异构图+GNN,足够多的数据的监督学习

3.自监督方式:API+生成对抗自动编码器,Gaph Contrastive Coding

BIG2015的使用

BIG 2015数据集不适用于基于API的分析方法,它仅包含脱敏静态签名特征,只具有PP(进程fork),PAP(进程调用APi),PSP(进程签名)等三种元路径。RNN+LR、API+AAE生成对抗自动编码器、MatchGNet、MG-DVD均基于动态行为分析方法,因此BIG 2015数据集不能用于上述4种基线方法的实验验证

运行10次,比较平均结果。

1.四种常用数据集上的多分类任务,

2.其他的单个数据集上的二分类任务,

3、单个数据集上的(1,5)少样本任务,

4.未知恶意软件检测,以已知类型:未知类型=5:4,5:3的比例划分;

5.三种子方法的蒸馏实验(准确率的提高量gain) 动量值=0.990

6.时间空间偏差的实验(采用前半年数据集测试后半年的采用后半年数据集训练测试前半年的)

结论:恶意软件检测方法都能够根据对未来变种的学习知识来检测过去的恶意软件,但很难根据过去的恶意软件预测未来的变种。

7.基于t-SNE,t-分布式随机邻居嵌入的可视化

结构级增强比语义级增强(遮罩)更有利于异构图对比学习。

a.各个方法在各个数据集上的运行时间比较,

b.mask参数设置,0.5最佳,对属性密集的数据集作用更大;FewM-HGCl在shot变化时准确率的影响,1到5明显升高,10个时基本到头。

layers的设置,不同数据集不同,L_Big-2015=2;embedding=64时最佳。

讨论

无法处理反沙箱恶意软件,无法处理复杂的打包恶意软件

新思路:利用不同实体之间的特定时间依赖关系进行动态建模和在线检测

参考文献

[22] A. v. d. Oord, Y. Li, and O. Vinyals, “Representation learning with contrastive predictive coding,” arXiv preprint arXiv:1807.03748, 2018.

[23]K. He, H. Fan, Y. Wu, S. Xie, and R. Girshick, “Momentum contrast for unsupervised visual representation learning,” in Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, 2020, pp. 9729–9738.

[32] Y. You, T. Chen, Y. Sui, T. Chen, Z. Wang, and Y. Shen, “Graph contrastive learning with augmentations,” Advances in Neural Information Processing Systems, vol. 33, pp. 5812–5823, 2020

[42]K. Weinberger, A. Dasgupta, J. Langford, A. Smola, and J. Attenberg, “Feature hashing for large scale multitask learning,” in Proceedings of the 26th annual international conference on machine learning, 2009, pp. 1113–1120.

Li, Zhenguo et al. “Meta-SGD: Learning to Learn Quickly for Few Shot Learning.” ArXiv abs/1707.09835 (2017): n. pag.

Sun, Qianru et al. “Meta-Transfer Learning for Few-Shot Learning.” 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) (2018): 403-412.

Liu, Yanbin et al. “Learning to Propagate Labels: Transductive Propagation Network for Few-Shot Learning.” International Conference on Learning Representations (2018).

Ye, Han-Jia et al. “Few-Shot Learning via Embedding Adaptation With Set-to-Set Functions.” 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) (2018): 8805-8814.

Decoding the Secrets of Machine Learning in Malware Classification: A Deep Dive into Datasets, Feature Extraction, and Model Performance

数据集的分布,样本数量和家族数量对结果的影响,特征之间的互补性(权重设置以及是否有重复。)

数据集:670家族×每家族100样本

特征提取方法:

VGG-16, RestNet-18, and EfficientNet-B0

Few-Shot Learning With a Strong Teacher, 2024-Mar ,IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE

Abstract

背景(元学习存在的问题):

采样的查询样本为元学习器提供的监督信息不足;

元学习器随着样本数目增多,效果的增加不如强学习器。

思路:

改变元学习器的目标为“表现接近强学习器”。

具体做法:

每一个采样的小样本任务都设置一个目标强学习器,用目标强学习器去监督元学习器。

关键:如何构造强学习器?

3.MODEL

相对熵

KL 散度(Kullback–Leibler divergence,缩写 KLD)是一种统计学度量,表示的是一个概率分布相对于另一个概率分布的差异程度,在信息论中又称为相对熵。

1709012342365

可以衡量用Q表示P带来的信息损失。

最近质心 分类器NC(Nearest Centroid)

1.求类平均值

2.度量距离

元训练阶段,最佳分类器的训练

增强老师(效果更稳定)或者弱化学生,都可以提高蒸馏或自训练表现。

a.变动 输入图片的尺寸(图片size越大,准确率越高)只在构造和查询最佳分类器时增大图片尺寸,不对元学习器的构造和各任务分类器的生成进行该操作,以和基线统一标准。

b.对输入做自动增强

[102]E. D. Cubuk, B. Zoph, D. Mane, V. Vasudevan, and Q. V. Le, “Autoaugment: Learning augmentation strategies from data,” in CVPR, 2019, pp. 113–123.

样本集的分割比例参考

S. Ravi and H. Larochelle, “Optimization as a model for few-shot learning,” in ICLR, 2017.

Deep-Ensemble and Multifaceted Behavioral Malware Variant Detection Model

嵌入垃圾API或者完全不适用API,会导致程序表示为稀疏向量。缺少API追踪并不意味着程序是良性,所以API调用对程序的准确表达和检测是无效的。

它含有的有效信息可能有但并不多,仅仅基于API调用序列去检测程序是不可靠的。

API本身并不能够反映恶意样本的恶意行为。

但可以基于其进行一定的猜测。

每种行为特征(模式)都能够体现恶意软件的某些方面,但模式之间互有重叠。综合这些特征可以获得更好的检测结果。这些重叠的模式会在建立模型时带来噪音。

控制流图包含了API调用序列或者其他作者自行的代码逻辑,比API调用包含更多信息。

三个恶意软件程序报告

https://mp.weixin.qq.com/s/EhRX26TP9rxEKys_MzDYvQ

暗蚊黑产团伙采用供应链投毒、伪造官方软件网站、以及利用破解软件等多种方式传播恶意程序,主要攻击目标是IT运维人员,攻击范围涵盖了Windows、Linux以及macOS等操作系统。 攻击水平不高,但危害很大。

攻击流程

1.注册域名,投放木马,测试免杀。

2.被下载嵌入后门的运维工具—>下载远控木马—>窃取文件和主机信息

置于匿名文件共享服务托管平台oshi.at

3.—>下载和使用fscan、nmap内网扫描—>弱口令+漏洞等横向渗透

4.—> 部署并运行hellobot后门

特点

域名精心构造

文件名 恶意域名
SecureCRT.dmg download.securecrt.vip
ultraedit.dmg download.ultraedit.info
Microsoft-Remote-Desktop-Beta-10.8.0(2029)_MacYY.dmg download. rdesktophub.com
FinalShell_MacYY.dmg download.finallshell.cc
navicat161_premium_cs.dmg download.Macnavicat.com

2.域名注册时间不超过1年。攻击者 在3月至7月期间攻击者陆续注册了此次攻击活动中所涉及的10个C2域名

3.载荷有上传至VT测试免杀效果。可以作为一个怀疑指标。

4.解密载荷上传至VT时间距今不超过3个月。

5.载荷的自动下载分为2个阶段,对应的url不同,可以防止被分析到落地载荷。

被植入恶意文件为libpng.dylib,下载的恶意文件命名为fs.log,centos7,libdb.so.2,/tem/.test,/Users/Shared/.fseventsd。

  1. 使用crond服务持久化后门动态链接库手法有特点 。centos7的文件,该文件运行后会在当前路径下释放一个名为libdb.so.2的文件,利用libdb.so.2文件对crond服务动态库文件进行劫持,然后将libdb.so.2文件及crond的时间属性值修改为/bin/ls的时间,最后重新启动crond服务,加载执行恶意文件libdb.so.2。经分析发现libdb.so.2文件为hellobot后门

  2. 远控木马基于开源跨平台KhepriC2框架修改,内网横向移动阶段的木马 基于开源跨平台工具goncat进行修改;

  3. 后门动态库落地是通过样本自己读取自身内容,并根据“ELFELF”找到标记的偏移位置。

crond服务持久化后门动态链接库手法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#将crond复制到当前路径
cp /usr/sbin/crond .
#查看crond的依赖项里是否有libdb.so.2
#使用fgrep而非grep,把所有字符解释为字面含义,以避免.被解释为正则。
ldd ./crond |fgrep libdb.so.2
#获取软链接对应的绝对路径,再获取目录路径
$P=dirname `ldd /bin/ls|grep libd1|awk '{print $3}'`;
echo $P;#获取crondb依赖项原所在路径
mv libdb.so.2 $P;/bin/ls
#修改/lib/x86_64-linux-gnu/libdb.so.2的时间属性为/bin/ls的时间
-r, --reference=FILE
#use this file's times instead of current time
touch -r /bin/ls $P/libdb.so.2;
#将被劫持的cornd移动会/usr/sbin,修改crond的时间属性

mv crond /usr/sbin;
#增强隐蔽性,因为各种系统程序的修改时间应该一致
touch -r /bin/ls crond;
#重启crond服务
service crond restart

Linux touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件

Schönfeld, Edgar et al. “Generalized Zero- and Few-Shot Learning via Aligned Variational Autoencoders.” 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) (2018): 8239-8247.

Fei-Fei, Li, Fergus, Robert, and Perona, Pietro. One-shot learning of object categories. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 28(4):594611, 2006.

The key insight is that, rather than learning from scratch, one can take advantage of knowledge coming from previously learned categories, no matter how different these categories might be.

实验

Bayesian implementation

101diverse object categories

Prototypical Networks

Snell, Jake et al. “Prototypical Networks for Few-shot Learning.” Neural Information Processing Systems (2017).

方法

创新点

适用领域&数据集

利弊

Matching Networks

Vinyals, Oriol et al. “Matching Networks for One Shot Learning.” Neural Information Processing Systems (2016).

Relation Network

Sung, Flood et al. “Learning to Compare: Relation Network for Few-Shot Learning.” 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition (2017): 1199-1208.

Optimization as a Model for Few-Shot Learning

Ravi, Sachin and H. Larochelle. “Optimization as a Model for Few-Shot Learning.” International Conference on Learning Representations (2016).

TADAM: Task dependent adaptive metric for improved few-shot learning

Oreshkin, Boris N. et al. “TADAM: Task dependent adaptive metric for improved few-shot learning.” Neural Information Processing Systems (2018).

Y. Chai, L. Du, J. Qiu, L. Yin and Z. Tian, “Dynamic Prototype Network Based on Sample Adaptation for Few-Shot Malware Detection,” in IEEE Transactions on Knowledge and Data Engineering, vol. 35, no. 5, pp. 4754-4766, 1 May 2023, doi: 10.1109/TKDE.2022.3142820.

Introduction

动态检测能够根据执行路径和行为获取更全面的信息,但是执行耗时,且可以被反沙箱手段躲避;静态速度快,但是依赖反汇编引擎,且很难从混淆和加壳的软件中提取正确的语义或有代表性的特征。

Filtered LargePE dataset.

参考文献中可读内容

TESSERACT: Eliminating experimental bias in malware classification across space and time

跨越时间和空间的恶意软件分类偏差消解

0x01 简介

1.各种段的作用

ELF .plt:库函数插桩所在;

ELF .got:输入符号指针

.bss:未初始化 数据;

2.mmap缺点

  • 1.分配字节数必须是4096字节的倍数,只能以内存页为单元管理内存,经过内核很慢。

3.按需分配内存,

  • dllmaloc,Doug Lea开发并发布到公共社区;

  • Linux的glibc里的ptmalloc(Posix Thred aware fork of dllmalloc),

    malloc的多线程实现

  • FreeBSD里的jemalloc(被用在Firefox,Android)

  • Windows里的Segment heap,NT heap

  • kmalloc(linux内核内存分配器),kalloc(ios内存分配器)

有动态分配器管理的内存—>堆。

C++程序,函数scanf、printf都要使用堆。

4.ptmalloc/glibc提供的对堆的管理函数

1
2
3
4
malloc() 分配内存
free() 释放之前申请的内存块
realloc() 分配后改变分配的尺寸
calloc()分配并把内存清零

为什么要有calloc?因为未初始化的数据可能导致data disclosure。

5.现代化的技术

ASLR(Adress Space Layout Randomlization, 地址空间布局随机化)

NX

PIE

RELRO

Stack Canary

6.Data Segment

  • ptmalloc在分配小内存时不使用mmap,用另一种内存管理方法brk() ;在大片分配时使用mmap;

  • 一开始从零开始

  • 由系统调用brksbrk管理,或许这两个 系统调用不再遵循POSIX标准。
    • sbrk(NULL) return 数据段的当前末尾
    • sbrk(num) 扩充当前数据段num个字节
    • brk(addr ) 扩充当前数据段一直到addr位置

写一段测试代码,捕捉malloc的场景,不要使用printf和puts,因为其内部可能会使用malloc;

1
2
3
4
5
char msg[]="Start malloc()!";
int main(int argc,char** argv){
write(1,msg,strlen(msg));
malloc(16);
}

7.为什么堆带来了危险?

程序员:

忘记释放内存?

忘记指针所指;

忘记已经释放的内存有哪些;

堆管理器:追求性能,安全之后再考虑。

8.一些检测和防御手段

Valgrind使用测试样例找到一些通常 错误,比如忘记释放内存,资源耗尽;

glibc的严格模式: 会让程序变慢

  • export MALLOC_CHECK=1
  • export MALLOC_PERTURB=1
  • export MALLOC_MMAP_THRESHOLD=1 #所有内存分配都通过,仍旧可以绕过

0x02 Dynamic Allocator Misuse

https://www.bilibili.com/video/BV1zW4y1f7cB

任何分配器、库和函数的使用都有开销overhead,分配器开发者为了速度引入optimization和cache,只保证速度,正确的使用堆由程序员确保,由此便带来安全问题。

1701862220756