PowerLZY's Blog

本博客主要用于记录个人学习笔记(测试阶段)

一、阿里云恶意文件检测平台

Linux沙箱 | 阿里云恶意文件检测平台开放Linux二进制文件检测:https://www.anquanke.com/post/id/276349#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1

1.1 简介

在病毒检测方向,一直以来常见的两种手段就是静态特征检测动态行为检测。两者各有优势与不足,静态特征检测方案实施成本更低,检出结果也更精准,但是其泛化能力不足,针对具有高级对抗能力的恶意文件显得力不从心,并且天然地处于被动的地位,人力运营成本会更高。

动态行为检测实施成本相对较高,需要有足够的资源,而且检出的结果在一定程度上不如静态检测精准,但是它最大的优势是可以从恶意行为、技术手段的角度识别恶意文件,具有极大的泛化能力。对于需要检测大量恶意文件的安全厂商来说,人工运营所有样本并提取静态特征是不现实的,而沙箱的作用也就显现出来了:在海量的文件中,识别出最值得关注的恶意文件。

1.2 沙箱优势

高性能的环境仿真

云沙箱依托于阿里云神龙架构,在具备高性能的仿真的同时,还支持资源池化和自动化运维的能力。利用自定义的虚拟化技术和定制的沙箱OS内核,对恶意样本使用的反虚拟化的技术具备天然的对抗能力,配合上专门打造的二进制检测探针,可以在安全、高效、仿真的隔离环境中对二进制进行深度的行为分析。

全面的动态行为分析

基于虚拟化构建的沙箱深度分析技术,对进程、文件、网络、敏感系统调用、rootkit、漏洞利用等进行全面监控,配合智能模型规则检测引擎,快速分析出样本潜在的恶意行为。

海量的数据积累

阿里云沙箱服务于阿里云安全云上恶意文件检测,积累了海量样本数据,提炼出大量有独检优势的行为检测规则。

3.3 检测优势

算法模型——覆盖未知威胁

基于阿里云平台海量样本数据和强劲计算能力,采用“机器智能(神经网络)”与“专家智能(行为标签、ATT&CK)”结合的智能安全思想,挖掘海量样本数据中可疑内容信息和行为标签威胁值,构建智能的威胁检测模型发现新威胁。

将专家知识与海量数据结合智能化构建以ATT&CK为核心的多模态特征表示,对样本行为从技术战术度量、敏感信息表征、意图逻辑推理等角度进行多维度刻画、分析,同时依赖机器智能的学习泛化能力、检测模型能覆盖更多的未知,拓展威胁发现边界。

img

HetGNN

HetGNN --异构图处理 - wlkq的文章 - 知乎 https://zhuanlan.zhihu.com/p/411528472

异构图embedding学习,舍HetGNN其谁? - 李杰的文章 - 知乎 https://zhuanlan.zhihu.com/p/392367843

图嵌入领域,同构图算法大行其道,如:DeepWalk、Node2vec、GCN、GraphSage、GAT。但实际业务场景中异构图居多,除了经典的MetaPath2vec、RGCN,貌似其他选项并不多,今天就为大家介绍一款异构图嵌入学习神器---HetGNN。

HetGNN简介

提出的网络名称:HetGNN(Heterogeneous Graph Neural Network),2019 SIGKDD

核心理念:heterogeneous structural graph information + heterogeneous attributes or contents for each node

异构图嵌入学习

异构图算法相较同构图算法有如下三方面挑战:

  • 异质图中的大多数节点并不会连接所有类型的其他节点。如academic graph中user节点不会直接连到venue(论文)节点上。另外说节点能够连接的邻居数也不一样。大部分GNN直接聚合邻居(一阶)节点信息,而远处传过来的节点信息会随着距离而减弱。hub节点会被弱关联的邻居节点扰乱信息,冷启动的节点会因为邻居不足而导致不能充分表示。那么问题1就是:如何对异质图上的每个节点采样到强相关的邻居节点呢?(这边我认为一般都是用了注意力机制了)
  • 每个节点都带有非结构化的属性特征,如text、image,常用的从concatenate或者linear transformation不能建模节点属性间的deep interaction。那么问题2就是:如何设计异质图上节点属性的encoder(编码器)来处理不同节点内容异质性问题。
  • 不同类型的邻居节点对生成节点embedding的贡献也不一样。例如在academic graph,author和paper节点对author的embedding的影响会强如venue,venue节点包含不同的主题,具有更一般的嵌入,而大部分gnn集中在同质图的处理上,也没有考虑这种不同类型节点的影响。 挑战3是:如何通过考虑不同节点类型的影响来聚合异构邻居的特征信息。自注意力机制

NDSS20 UNICORN: Provenance-Based Detector for APTs

[AI安全论文] 06.NDSS20 UNICORN: Provenance-Based Detector for APTs

图片

原文作者:Xueyuan Han, Thomas Pasquier, Adam Bates, James Mickens and Margo Seltzer 原文标题:UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats 原文链接:https://arxiv.org/pdf/2001.01525.pdf 发表会议:NDSS 2020参考文献:感谢两位老师 https://blog.csdn.net/Sc0fie1d/article/details/104868847 https://blog.csdn.net/xjxtx1985/article/details/106473928

摘要

本文提出的UNICORN是一种基于异常的APT检测器,可以有效利用数据Provenance进行分析。通过广泛且快速的图分析,使用graph sketching技术,UNICORN可以在长期运行的系统中分析Provenance Graph,从而识别未知慢速攻击。其中,Provenance graph提供了丰富的上下文和历史信息,实验证明了其先进性和较高准确率。

由于APT(Advanced Persistent Threats)攻击具有缓慢可持续的攻击模式以及频繁使用0-day漏洞的高级特性使其很难被检测到。本文利用数据来源分析(provenance)提出了一种基于异常的APT检测方法,称为UNICORN。

  • 从建模到检测,UNICORN专门针对APT的独有特性(low-and-slow、0-Days)设计。
  • UNICONRN利用高效的图分析方法结合溯源图丰富的上下文语义和历史信息,在没有预先设定攻击特征情况下识别隐蔽异常行为。
  • 通过图概要(graph sketching)技术,它有效概括了长时间系统运行来对抗长时间缓慢攻击。
  • UNICONRN使用一种新的建模方法来更好地捕捉长期行为规律,以提高其检测能力。

最后通过大量实验评估表明,本文提出的方法优于现有最先进的APT检测系统,并且在真实APT环境中有较高的检测精度。

一、引言

APT攻击现在变得越来越普遍。这种攻击的时间跨度长,且与传统攻击行为有着本质的区别。APT攻击者的目的是获取特定系统的访问控制,并且能够长期潜伏而不被发现。攻击者通常使用0-day漏洞来获取受害者系统的访问控制。

传统检测系统通常无法检测到APT攻击。

  • 依赖恶意软件签名的检测器对利用新漏洞的攻击无效。
  • 基于异常检测的系统通常分析一系列的系统调用或日志系统事件,其中大部分方法无法对长期行为进行建模。
  • 由于基于异常检测的方法只能检测系统调用和事件的短序列很容易被绕过。

综上,当前针对APT攻击的检测方法很少能成功。攻击者一旦使用0-Day漏洞,防御者便无计可施;而基于系统调用和系统事件的检测方法,由于数据过于密集,这些方法难以对长时间的行为模式进行建模。因此,数据溯源(data provenance)是一种检测APT更合适的数据。

最近的研究成果表明数据溯源是一个很好的APT检测数据源。数据溯源将系统执行表示成一个有向无环图(DAG),该图描述了系统主体(如进程)和对象(文件或sockets)之间的信息流。即使跨了很时间,在图中也把因果相关的事件关联到一起。因此,即使遭受APT攻击的系统与正常系统比较类似,但是溯源图中丰富的上下文语义信息中也可以很好地区分正常行为与恶意行为。

然而,基于数据溯源的实时APT检测依然具有挑战。 随着APT攻击的渗透的进行,数据溯源图的规模会不断增大。其中必要的上下文分析需要处理大量图中的元素,而图上的分析通常复杂度比较高。当前基于数据溯源的APT检测方法根据已有的攻击知识通过简单的边匹配实现APT检测,无法处理未知的APT攻击。基于溯源的异常检测系统主要是基于图模型的邻域搜索,利用动态或静态模型识别正常行为模式。理论上关联的上下文越丰富越好,但是实际中由于图分析的复杂性较高限制了其可行性。

  • Provenance Graph的分析是相当耗费计算资源,因为APT是可持续攻击,图的规模也会越来越大

当前APT检测系统面临如下三种问题:

  • 静态模型难以捕获长时间的系统行为;
  • low-and-slow APT投毒攻击:由于APT高级可持续的特性可以在系统中潜伏很长时间,相关的行为会被认为是正常行为,这样的攻击会影响检测模型;
  • 在主存内进行计算的方法,应对长期运行的攻击表现不佳。

基于此,本文提出了UNICORN,使用graph sketching来建立一个增量更新、固定大小的纵向图数据结构。这种纵向性质允许进行广泛的图探索,使得UNICORN可以追踪隐蔽的入侵行为。而固定大小和增量更新可以避免在内存中来表示provenance graph,因此UNICORN具有可扩展性,且计算和存储开销较低。UNICORN在训练过程中直接对系统的行为进行建模,但此后不会更新模型,从而防止模型的投毒攻击。

本文的主要贡献如下:

  • 针对APT攻击特性提出一种基于Provenance的异常检测系统
  • 引入一种新的基于概要的(sketch-based)、时间加权的(time-weighted)溯源编码,该编码非常紧凑且可处理长时间的溯源图。
  • 通过模拟和真实的APT攻击来评估UNICORN,证明其能高精度检测APT活动。
  • 实现代码开源。

二、背景

2.1 系统调用追踪的挑战

系统调用抽象提供了一个简单的接口,用户级应用程序可以通过这个接口请求操作系统的服务。作为调用系统服务的机制,系统调用接口通常也是攻击者入侵的入口点。因此,系统调用跟踪一直被认为是入侵检测的实际信息源。然而:

  • 当前的攻击检测系统是对非结构化的系统调用的审记日志进行分析,但捕获的系统调用杂乱分散,传统基于异常检测的思路无法处理APT。因此需要将其关联成data provenance,基于溯源的方法是将历史上下文数据都编码到因果关系图中。
  • 数据溯源方法已经被应用到攻击调查中,已经有一些方法能够根据审计数据构建系统溯源图用以实现对系统执行过程的建模。然而这些方法依然存在一些局限:(1) 这种事后构建很难保证溯源图的正确性,由于系统调用问题存大量并发,溯源图的完整性与可靠性无法保证;(2) 容易被绕过;(3) 时空复杂度较高。
  • 由于一些内核线程不使用系统调用,因此基于Syscall生成的Provenance是一些分散的图,而不是一张系统运行状况的完整图

2.2 全系统追踪溯源

全系统溯源运行在操作系统层面,捕获的是所有系统行为和它们之间的交互。通过捕获信息流和因果关系,即使攻击者通过操作内核对象来隐藏自己的行踪也无济于事。

本文使用CamFlow,采用了Linux安全模块(Linux Security Modules,LSM)框架来确保高效可靠的信息流记录。LSM可以消除race condition。

CamFlow:溯源搜集系统,参考官网 https://camflow.org/。

CamFlow 将系统的执行表示为有向无环图。图中的顶点表示内核对象(例如线程、文件、套接字等)的状态,关系表示这些状态之间的信息流。

CamFlow 图表概览

在上面的示例中process 1克隆process 2process 2写到一个pipeprocess 1同读pipe。创建版本是为了保证非周期性并代表信息的正确排序(有关详细信息,请参阅我们的CCS'18 论文)。

2.3 问题描述

现有基于数据溯源的APT攻击检测方法主要存在如下缺陷:

  • 预定义的边匹配规则过于敏感,很难检测到APT攻击中的0-Day漏洞;
  • 溯源图的近邻约束导致其只能提供局部上下文信息(而非whole-system),然而这会影响相关异常检测精度;
  • 系统行为模型难以检测APT:静态模型无法捕获长期运行的系统的行为;动态模型容易遭受中毒攻击;
  • 溯源图的存储与计算都是在内存中,在执行长期检测上有局限性。

UNICORN可以解决如上问题,其本质是把APT检测问题看成大规模、带有属性的实时溯源图异常检测问题。在任何时间,从系统启动到其当前状态捕获的溯源图都将与已知正常行为的溯源图进行比较。如果有明显差别,那么就认为该系统正在遭受攻击。

对于APT检测来说,理想基于溯源的IDS应该如下:

  • 充分利用溯源图的丰富上下文,以时间与空间有效的方法持续分析溯源图;
  • 在不假设攻击行为的基础上,应考虑系统执行的整个持续时间;
  • 只学习正常行为的变化,而不是学习攻击者指示的变化。

三、威胁模型

假设主机入侵检测有适当的场景:攻击者非法获得对系统的访问权限,并计划在不被检测的情况下驻留在系统中很长一段时间。攻击者可能分阶段执行攻击,在每个阶段还会使用大量的攻击技术。UNICORN的目标是通过解决主机生成的溯源来实现在所有阶段对APT攻击进行检测。本文假设,我们假设在受到攻击之前,UNICORN在正常运行期间会完全观察主机系统,并且在此初始建模期间不会发生攻击。

数据收集框架的完整性是UNICORN正确性的核心,因此我们假定所使用的CamFlow中,LSM完整性是可信的。同时,本文假设内核、溯源数据和分析引擎的正确性,我们重点关注UNICORN的分析能力。

四、系统设计

独角兽是一个基于主机的入侵检测系统,能够同时检测在网络主机集合上的入侵。

图片

  1. 以一个带标签的流式溯源图作为输入。该图由CamFlow生成,每条边是带属性的。溯源系统构建一个具有偏序关系的DAG溯源图,能实现有效的流式计算和上下文分析。
  2. 建立一个运行时的内存直方图。UNICORN有效构建一个流式直方图,该直方图表示系统执行的历史,如果有新边产生则实时更新直方图的计数结果。通过迭代的探索大规模图的近邻关系,发现了在上下文环境中系统实体的因果关系。该工作是UNICORN的第一步,具体来说,直方图中每个元素描述了图中唯一的一个子结构,同时考虑了子结构中的顶点与边上的异构标签,以及这些边的时间顺序。APT攻击缓慢的渗透攻击目标系统,希望基于的异常检测方法最终忘记这一行为,把其当成正常的系统行为,但是APT攻击并不能破坏攻击成功的相关信息流依赖关系。
  3. 定期计算固定大小的概要图(graph sketch)。在纯流式环境,当UNICORN对整个溯源进行汇总时,唯一直方图元素的数量可能会任意增长。这种动态变化导致两个直方图之间的相似计算变得非常有挑战,从而使得基于直方图相似计算的建模以及检测算法变的不可行。UNICORN采用相似度保存的hash技术把直方图转换成概要图。概要图可以增量维护,也意味着UNICORN并不需要将整个溯源图都保存在内存中。另外,概要图保存了两个直方图之间的jaccard相似性,这在后续图聚类分析中特别有效。
  4. 将简略图聚类为模型。UNICORN可以在没有攻击知识的前提下实现APT攻击检测。与传统的聚类方法不同,UNICORN利用它的流处理能力生成一个动态演化模型。该模型通过在其运行的各个阶段对系统活动进行聚类捕获单个执行中的行为改变,但是UNICORN无法在攻击者破坏系统时动态实时修改模型。因此,它更适合APT攻击这类长期运行的攻击。

4.1 溯源图

最近几年溯源图在攻击分析中越来越流行,并且本身固有的特别可以有效的用于APT检测。溯源图挖掘事件之间的因果关系,因果关系有助于对时间跨度较远的事件进行推理分析,因此有助于在检测APT相关攻击。

UNICORN根据两个系统执行的溯源图的相似性还判定两个系统的行为相似性。而且UNICORN总是考虑整个溯源来检测长期持续的攻击行为。当前已经有许多图相似度计算方法,然而这些算法大部分是NPC的,即使多项式时间复杂度的算法也无法满足整个溯源图快速增涨的需求。

4.2 构建Graph直方图

本文方法的目标是有效对溯源图进行比较分析,同时容忍正常执行中的微小变化。对于算法,我们有两个标准:

  • 图表示应考虑长期的因果关系;
  • 必须能够在实时流图数据上实现该算法,以便能够在入侵发生时阻止入侵(不仅仅是检测到入侵)。

本文基于一维WL同构检验,采用了线性时间的、快速的Weisfeiler-Lehman(WL)子树图核算法。该算法的使用依赖于构造的顶点直方图的能力,需要直方图能捕捉每个顶点周围的结构信息。根据扩充的顶点标签对顶点进行分类,这些标签完全描述了顶点的领域,并且通过迭代的标签传播来构造这些扩展的顶点标签

同构性的WL检验及其子树kernel变化,以其对多种图的判别能力而闻名,超越了许多最新的图学习算法(例如,图神经网络)。对Weisfeiler-Lehman(WL)子树图核的使用取决于我们构建顶点直方图的能力,捕获围绕每个顶点的图结构。我们根据增强顶点标签对顶点进行分类,标签描述了顶点的R-hop邻居。

为了简单说明,假设有一个完整静态图,重标记对所有的输入标签的聚合。对每个顶点都重复执行这个过程来实现对n跳邻居的描述。一旦为图中的每个顶点都构建了扩展标签,那么就可以基于此生成一个直方图,其中每个bucket表示一个标签。两个图的相似性比较是基于以下假设:两个图如果相似那么在相似的标签上会有相似的分布。

图片

我们的目标是构建一个直方图,图中的每个元素对应一个唯一的顶点标签,用于捕获顶点的R-hop的in-coming邻居。

信息流的多样性与复杂性(Streaming Variant and Complexity)。算法1只有新顶点出现或是新边出现对其邻顶点有影响时才会执行。本文方法只需要为每条新边更新其目标顶点的邻域。UNICORN采用这种偏序关系来最小化计算代价。

图片

直方图元素的概念漂移问题。APT攻击场景需要模型必须能够处理长期运行行为分析能力,而系统行为的动态变化会导致溯源图的统计信息也随之变化,这种现象就叫概念漂移(concept drift)。

UNICORN通过对直方图元素计数使用指数权重衰减来逐渐消除过时的数据(逐渐忘记机制),从而解决了系统行为中的此类变化。它分配的权重与数据的年龄成反比。

\[ H_h=\sum_t \mathbb{1}_{x_t=h} \]

入侵检测场景中的适用性。上述“逐渐忘记”的方法,使得UNICORN可以着眼于当前的系统执行动态,而且那些与先前的object/activity有关系的事件不会被忘记。

4.3 生成概要图(Graph Sketches)

Graph直方图是描述系统执行的简单向量空间图统计量。然而,与传统的基于直方图的相似性分析不同,UNICORN会随着新边的到来不断更新直方图。另外,UNCORN会根据图特征的分布来计算相似性,而不是利用绝对统计值。

本文采用locality sensitive hashing,也称作similarity-preserving data sketching。UNICORN的部署采用了前人的研究成果HistoSketch,该方法是一种基于一致加权采样的方法,且时间得性是常数。

4.4 学习进化模型

在给定graph sketch和相似性度量的情况下,聚类是检测离群点常用的数据挖掘手段。然而传统的聚类方法无法捕获系统不断发展的行为。UNICORN利用其流处理的能力,创建了进化模型,可以捕获系统正常行为的变化。更重要的是,模型的建立是在训练阶段完成的,而不是在部署阶段,因为部署阶段训练模型可能会遭受中毒攻击。

UNICORN在训练期间创建一个时序sketches,然后使用著名的K-medods算法从单个服务器对该概要序列进行聚类,使用轮廓系数(silhouette coefficient)确定最佳K值。每个簇表示系统执行的元状态(meta-states),如启动、初始化、稳定状态。然后UNICORN使用所有簇中sketches的时间顺序和每个簇的统计量(如直径、medoid),来生成系统进化的模型。

  • 更新C中的每一列,即类中心 [公式] ,对于第j类,中心 [公式] 需要通过遍历所有该类中的样本,取与该类所有样本距离和最小的样本为该中心。

K-means 模型: \(\min _{G, C} \sum_{i=1}^n \sum_{j=1}^k g_{i j}\left\|x_i-c_j\right\|_2\) 算法流程:

  • 固定C,更新 G
  • 更新C中的每一列, 即类中心 \(c_j\),其通过计算第j类中样本的平均值得到

K-mediods:模型: \(\min _{G, C \subseteq X} \sum_{i=1}^n \sum_{j=1}^k g_{i j}\left\|x_i-c_j\right\|_1 \quad\) 可以是曼哈顿距离或其它距离度量;由于类中心的更新规 则,该方法较之于K-means更鲁棒。 算法流程:

  • 固定C,更新 G
  • 更新C中的每一列,即类中心\(c_{j}\),对于第j类,中心\(c_{j}\)需要通过遍历所有该类中的样本,取与该类所有样本距离和最小的样本为该中心。

图片

对于每个训练实例,UNICORN创建一个模型,该模型捕获系统运行时执行状态的更新。直观地说,这类似于跟踪系统执行状态的自动机。最终的模型由训练数据中所有种源图的多个子模型组成。

4.5 异常检测

在部署期间,异常检测遵循前面章节中描述的相同流模式。UNICORN周期性地创建graph sketch,因为直方图从流式溯源图演变而来。给定一个概要图,UNICORN将该概要与建模期间学习的所有子模型进行比较,将其拟合到每个子模型中的一个聚类中。

UNICORN假设监视从系统启动开始,并跟踪每个子模型中的系统状态转换。要在任何子模型中为有效,概要必须适合当前状态或下一个状态;否则,被视为异常。因此,我们检测到两种形式的异常行为:

  • 不符合现有聚类的概要
  • 聚类之间的无效转换

一、特征工程-数据清洗

img

数据格式内容错误数据来源有多种,有些是传感器采集,然后算法提取的特征数据;有些是采集的控制器的数据;还有一些应用场合,则是用户/访客产生的,数据肯定存在格式和内容上不一致的情况,所以在进行模型构建之前需要先进行数据的格式内容清洗操作。逻辑错误清洗主要是通过简单的逻辑推理发现数据中的问题数据,防止分析结果走偏,主要包含以下几个步骤:

1.数据去重,去除或替换不合理的值;

2.去除或重构不可靠的字段值(修改矛盾的内容);

3.去除异常点数据。

二、采样

随机采样方法整理与讲解(MCMC、Gibbs Sampling等) - 向阳树的文章 - 知乎 https://zhuanlan.zhihu.com/p/109978580

三、参考文献

  • 特征工程 - 未来达摩大师的文章 - 知乎 https://zhuanlan.zhihu.com/p/476659737

  • 这9个特征工程使用技巧,解决90%机器学习问题! - Python与数据挖掘的文章 - 知乎 https://zhuanlan.zhihu.com/p/462744763

  • 有哪些精彩的特征工程案例? - 京东科技风险算法与技术的回答 - 知乎 https://www.zhihu.com/question/400064722/answer/1308358333

风控特征—时间滑窗统计特征体系

风控业务背景

俗话说,路遥知马力,日久见人心。在风控中也是如此,我们常从时间维度提取借款人在不同时间点的特征,以此来判断借款人的风险。在实践中,这类特征通常会占到80%以上。由于是通过时间切片和聚合统计函数来构造,因此一般被称为时间滑窗统计特征。

一、观察期、观察点及表现期

理解这三者的概念是风控建模前期样本准备的基础,在此简单介绍。

  • 观察点(Observation Point:并非是一个具体的时间点,而是一个时间区间,表示的是客户申请贷款的时间。在该时间段申请的客户可能会是我们用来建模的样本 。(提示:为什么用“可能”这个描述,因为还需剔除一些强规则命中的异常样本,这部分样本将不会加入建模)
  • 观察期(Observation Window):用以构造特征X的时间窗口。相对于观察点而言,是历史时间。观察期的选择依赖于用户数据的厚薄程度。通常数据越厚,可提取的信息也就越全面、可靠。
  • 表现期(Performance Window):定义好坏标签Y的时间窗口。相对于观察点而言,是未来时间。由于风险需要有一定时间窗才能表现出来,因此信贷风险具有滞后性。表现期的长短可以通过Vintage分析和滚动率分析来确定,在此不做展开。 img

表现期越长,信用风险暴露将越彻底,但意味着观察期离当前将越远,用以提取样本特征的历史数据将越陈旧,建模样本和未来样本的差异也越大。反之,表现期越短,风险还未暴露完全,但好处是能用到更近的样本。

二、RFM模型介绍

RFM模型最早是用来衡量客户价值和客户创利能力。理解RFM框架的思想是构造统计类特征的基础,其含义为:

  • R(Recency):客户最近一次交易消费时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
  • F(Frequency):客户在最近一段时间内交易消费的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
  • M(Monetary):客户在最近一段时间内交易消费的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。

本质上是因为神经网络的更新方法,梯度消失是因为反向传播过程中对梯度的求解会产生sigmoid导数和参数的连乘,sigmoid导数的最大值为0.25,权重一般初始都在0,1之间,乘积小于1,多层的话就会有多个小于1的值连乘,导致靠近输入层的梯度几乎为0,得不到更新。梯度爆炸是也是同样的原因,只是如果初始权重大于1,或者更大一些,多个大于1的值连乘,将会很大或溢出,导致梯度更新过大,模型无法收敛。 梯度爆炸和梯度消失问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应。

阅读全文 »

一、训练的时候 loss 不下降

  • 模型结构问题。当模型结构不好、规模小时,模型对数据的拟合能力不足。
  • 训练时间问题。不同的模型有不同的计算量,当需要的计算量很大时,耗时也会很大
  • 权重初始化问题。常用的初始化方案有全零初始化、正态分布初始化和均匀分布初始化等,合适的初始化方案很重要,之前提到过神经网络初始化为0可能会带来的影响
  • 正则化问题。L1、L2以及Dropout是为了防止过拟合的,当训练集loss下不来时,就要考虑一下是不是正则化过度,导致模型欠拟合了。正则化相关可参考正则化之L1 & L2
  • 激活函数问题。全连接层多用ReLu,神经网络的输出层会使用sigmoid 或者 softmax。激活函数可参考常用的几个激活函数。在使用Relu激活函数时,当每一个神经元的输入为负时,会使得该神经元输出恒为0,导致失活,由于此时梯度为0,无法恢复。
  • 优化器问题。优化器一般选取Adam,但是当Adam难以训练时,需要使用如SGD之类的其他优化器。常用优化器可参考机器学习中常用的优化器有哪些?
  • 学习率问题。学习率决定了网络的训练速度,但学习率不是越大越好,当网络趋近于收敛时应该选择较小的学习率来保证找到更好的最优点。所以,我们需要手动调整学习率,首先选择一个合适的初始学习率,当训练不动之后,稍微降低学习率。
  • 梯度消失和爆炸。这时需要考虑激活函数是否合理,网络深度是否合理,可以通过调节sigmoid -> relu,假如残差网络等,相关可参考为什么神经网络会有梯度消失和梯度爆炸问题?如何解决?
  • batch size过小,会导致模型损失波动大,难以收敛,过大时,模型前期由于梯度的平均,导致收敛速度过慢。
  • 数据集问题。(1)数据集未打乱,可能会导致网络在学习过程中产生一定的偏见(2)噪声过多、标注有大量错误时,会导致神经网络难以学到有用的信息,从而出现摇摆不定的情况,噪声、缺失值、异常值(3)数据类别不均衡使得少数类别由于信息量不足,难以学到本质特征,样本不均衡相关可以看样本不均衡及其解决办法
  • 特征问题。特征选择不合理,会使网络学习难度增加。之前有提到过特征选择的文章,如何找到有意义的组合特征,特征选择方法

二、测试的时候 loss 不下降

训练的时候过拟合导致效果不好

  • 交叉检验,通过交叉检验得到较优的模型参数;
  • 特征选择,减少特征数或使用较少的特征组合,对于按区间离散化的特征,增大划分的区间;
  • 正则化,常用的有 L1、L2 正则。而且 L1正则还可以自动进行特征选择;
  • 如果有正则项则可以考虑增大正则项参数[公式];
  • 增加训练数据可以有限的避免过拟合;
  • Bagging ,将多个弱学习器Bagging 一下效果会好很多,比如随机森林等.
  • 早停策略。本质上是交叉验证策略,选择合适的训练次数,避免训练的网络过度拟合训练数据。
  • DropOut策略

Log2vec: A Heterogeneous Graph Embedding Based Approach for Detecting Cyber Threats within Enterprise

【顶会论文解读】Log2vec 基于异构图Heterogeneous Graph 检测网络空间威胁 - 笑个不停的文章 - 知乎 https://zhuanlan.zhihu.com/p/275952146

AIops博客:https://blog.csdn.net/markaustralia/category_11284226.html

基于深度学习的日志数据异常检测

发表在CCS2019会议的一篇应用异质图embedding进行企业内部网络空间威胁检测的文章。

摘要

内部人员的攻击以及APT攻击是组织常见的攻击类型,现有的检测算法多基于行为检测,大部分方法考虑log日志的序列关系以及用户的行为序列,忽略了其他的关系导致不使用于丰富多样的攻击场景。本文提出的Log2vec模型,将日志转化为异质图,将日志学习为低纬度的embedding并使用检测算法进行攻击检测(由于攻击样本较少,因此使用聚类算法进行检测)。

一、引言

现有方法一般会转换用户的各种操作(也包括日志条目)分成序列,这些序列可以保存信息,例如 日志条目之间的顺序关系,然后使用序列处理技术,例如 深度学习从过去的事件中学习并预测下一个事件。本质上,这些日志条目级别的方法可以模拟用户的正常行为行为并将其偏离标记为异常。

但是,这种方法忽略了其他关系。 例如,比较用户的日常行为是常规内部威胁检测的一种常用方法。 此检测基于以下前提:用户的日常行为在一段时间内(几天之间的逻辑关系)相对规则。 上述预测方法忽略了这种关系,并且会降低其性能。 此外,他们需要正常的日志条目,甚至需要大量标记数据来进行模型训练。 但是,在现实世界中,存在罕见的攻击动作,从而限制了其正确预测的能力。

对于检测内部威胁以及APT攻击来说,我们面临三个问题:

(1)如何同时检测上述两种攻击情形,特别是考虑到检测系统中提到的所有三种关系(日志之间序列关系 sequantial relationship among log entries、几天之内的逻辑关系logical relationship among days以及交互关系interactive relationship among hosts);

解决办法:构建异构图来表示前面提到的三种关系;

(2)如何在APT场景中进行细粒度的检测,尤其是深入挖掘和分析主机内日志条目之间的关系;

解决办法:将日志条目分为五个属性。根据这些属性,我们深入考虑了主机内日志之间的关系,并设计了精细的规则来关联它们。这种设计使正常和异常日志条目可以在这种图中拥有不同的拓扑;

(3)如何针对训练模型进行无攻击样本的检测。【内部威胁】

解决办法:log2vec的图嵌入和检测算法将日志条目表示并分组到不同的群集中,而没有攻击样本,适用于数据不平衡的情况(针对问题3)。此外,图形嵌入本身可以自动学习每个操作的表示形式(矢量),而无需手动提取特定于领域的特征,从而独立于专家的知识。我们的改进版本可以进一步差分提取并表示来自上述异构图的操作之间的多个关系。

二、文章的设计

Log2vec包含以下三个组件:

  • 图的构造。 Log2vec构造一个异构图以集成日志之间的多个关系条目;

  • 图嵌入(也是图表示学习)。这是一种强大的图形处理方法,可用于了解每个操作的

    表示(向量)基于它们在这种图中的关系。通过矢量化用户操作,可以直接比较他们的操作

    找出异常的相似之处;

  • 检测算法,无监督,要有效将恶意操作分组为单个群集

image-20220703183858975

三、概述

image-20220703184011385

如图2(a)所示,日志记录了用户的操作,如登录操作,设备之间移动操作以及网络操作。图2(b)描述日志的属性,主体(user),操作类型(visit或者send),客体(网址或者是邮件)以及时间和主机(设备ID)。实际上,日志的属性能够反映用户的行为,比如,第一个登录的时间和日志结束的时间能够反映用户的工作时长。系统管理员会频繁的登录服务器和操作对系统进行维护。

图2(c)将a中显示的日志组成序列,然后使用如LSTM的方法学习日志序列信息进行预测。此类模型能够捕捉日志的因果信息和序列关系。但是,这样的方法忽视了其他关系,比如(a)中day3序列,有大量的设备连接和文件复制的操作,远比以前多(这意味着数据泄露)。 可以通过直接比较用户的日常行为来检测出这种差异。进行比较的前提是,在一段时间内(几天之间的逻辑关系),用户的日常行为相对规则且相似。 虽然是深度学习,例如 LSTM可以记住序列的长期依赖关系(多天),它没有明确比较用户的日常行为,也无法获得令人满意的性能。 类似地,它们不能保持图2d中主机之间的另一种关系,交互关系,并且不能在APT检测中正常工作。 另外,其中一些需要大量标记数据进行培训。 但是,在我们的检测方案中,存在罕见的攻击行为。

图2d展示了图2a中的登录(红色字体)的图表,该图表指示用户在主机之间的行为。 我们可以分析主机之间的这些交互关系,以发现异常登录。 例如,管理员可以定期登录到一组主机以进行系统维护,而APT实施者只能访问他可以访问的主机。 登录跟踪的功能可以捕获这种差异。例如,良性跟踪中涉及的主机数量(1或3,实线)通常不同于APT(2,虚线)。在分析了这些功能之后,可以识别出受感染的主机。 但是,这些主机包含许多良性操作,并且手动提取的特定于域的特征显然无法应用于图2c中的攻击。

本文构建的模型用于检测以下类型的攻击: 第一种情况是内部人员滥用职权执行恶意操作,例如访问数据库或应用程序服务器,然后破坏系统或窃取知识产权以谋取个人利益。 其次,恶意内部人员通过窥视或密钥记录器获取其他合法用户的凭据,并利用此新身份来寻找机密信息或在公司中造成混乱。 这两种情况属于内部员工的典型攻击。 第三种攻击是APT参与者破坏了系统中的主机,并从该主机中持续破坏了多个主机,以提升其特权并窃取机密文件。

四、详细论述

4.1 图构建

本文构建的图的节点是日志,只有一种节点类型,边是通过规则来建立联系的,本文提出10条规则,代表着图有10种边类型。因此,本文构建的异构图只是边类型不同,节点类型是相同的。

定义:<sub,obj,A,T,H> 提取日志的五个主要属性:subject, object, operation type, time and host,称为元属性

  • sub表示用户集合;
  • obj表示客体集合(文件、移动存储设备、网站);
  • A是操作类型集合(文件操作和网页利用);
  • T表示时间
  • H是主机(计算机或者是服务器)。

sub,obj,A,H有自己的子属性。比如,用户在服务器中写入文件,sub的属性包括用户角色(系统管理员等)和所属单位;obj属性包括文件类型和大小;H属性包括是文件服务器还是邮件服务器;对于登录操作,A的属性包括身份验证。对于用户登录,可以表示为user (sub) logs in to (A) a destination host (obj) in a source one (H),

4.2 构建图的规则

image-20220703193951973

上图,R1-3描述一天中的因果关系和序列关系;R4-6描述多天之间的逻辑关系;R7 R9描述用户登录和web浏览行为序列。R8 R10按照逻辑关系进行关联。

log2vec考虑三种关系:

  • causal and sequential relationships within a day; 一天内的因果关系和顺序关系;
  • logical relationships among days;日之间的逻辑关系
  • logical relationships among objects;对象之间的逻辑关系。

在设计有关这三种关系的规则时,我们考虑这些元属性的不同组合,以关联较少的日志条目,并将更精细的日志关系映射到图中。

image-20220703194402679

深入理解CatBoost

深入理解CatBoost - Microstrong的文章 - 知乎 https://zhuanlan.zhihu.com/p/102540344

本文主要内容概览:

img

一、CatBoost简介

CatBoost是俄罗斯的搜索巨头Yandex在2017年开源的机器学习库,是Boosting族算法的一种。CatBoost和XGBoost、LightGBM并称为GBDT的三大主流神器,都是在GBDT算法框架下的一种改进实现。XGBoost被广泛的应用于工业界,LightGBM有效的提升了GBDT的计算效率,而Yandex的CatBoost号称是比XGBoost和LightGBM在算法准确率等方面表现更为优秀的算法。

CatBoost是一种基于对称决策树(oblivious trees)为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是高效合理地处理类别型特征,这一点从它的名字中可以看出来,CatBoost是由Categorical和Boosting组成。此外,CatBoost还解决了梯度偏差(Gradient Bias)以及预测偏移(Prediction shift)的问题,从而减少过拟合的发生,进而提高算法的准确性和泛化能力。

与XGBoost、LightGBM相比,CatBoost的创新点有:

  • 嵌入了自动将类别型特征处理为数值型特征的创新算法。首先对categorical features做一些统计,计算某个类别特征(category)出现的频率,之后加上超参数,生成新的数值型特征(numerical features)。
  • Catboost还使用了组合类别特征,可以利用到特征之间的联系,这极大的丰富了特征维度
  • 采用排序提升的方法对抗训练集中的噪声点,从而避免梯度估计的偏差,进而解决预测偏移的问题。
  • 采用了完全对称树作为基模型

二、类别型特征

所谓类别型特征,即这类特征不是数值型特征,而是离散的集合,比如省份名(山东、山西、河北等),城市名(北京、上海、深圳等),学历(本科、硕士、博士等)。在梯度提升算法中,最常用的是将这些类别型特征转为数值型来处理,一般类别型特征会转化为一个或多个数值型特征。

类别型特征基数比较低(low-cardinality features),即该特征的所有值去重后构成的集合元素个数比较少,一般利用One-hot编码方法将特征转为数值型。One-hot编码可以在数据预处理时完成,也可以在模型训练的时候完成,从训练时间的角度,后一种方法的实现更为高效,CatBoost对于基数较低的类别型特征也是采用后一种实现。

高基数类别型特征(high cardinality features)当中,比如 user ID,这种编码方式会产生大量新的特征,造成维度灾难。一种折中的办法是可以将类别分组成有限个的群体再进行One-hot编码。一种常被使用的方法是根据目标变量统计(Target Statistics,以下简称TS)进行分组,目标变量统计用于估算每个类别的目标变量期望值。甚至有人直接用TS作为一个新的数值型变量来代替原来的类别型变量。 重要的是,可以通过对TS数值型特征的阈值设置,基于对数损失、基尼系数或者均方差,得到一个对于训练集而言将类别一分为二的所有可能划分当中最优的那个。

在LightGBM当中,类别型特征用每一步梯度提升时的梯度统计(Gradient Statistics,以下简称GS)来表示。虽然为建树提供了重要的信息,但是这种方法有以下两个缺点:

  • 增加计算时间,因为需要对每一个类别型特征,在迭代的每一步,都需要对GS进行计算;
  • 增加存储需求,对于一个类别型变量,需要存储每一次分离每个节点的类别;

为了克服这些缺点,LightGBM以损失部分信息为代价将所有的长尾类别归为一类,作者声称这样处理高基数类别型特征时比One-hot编码还是好不少。不过如果采用TS特征,那么对于每个类别只需要计算和存储一个数字。

因此,采用TS作为一个新的数值型特征是最有效、信息损失最小的处理类别型特征的方法。TS也被广泛应用在点击预测任务当中,这个场景当中的类别型特征有用户、地区、广告、广告发布者等。接下来我们着重讨论TS,暂时将One-hot编码和GS放一边。

2.1 目标变量统计(Target Statistics)

CatBoost算法的设计初衷是为了更好的处理GBDT特征中的categorical features。在处理 GBDT特征中的categorical features的时候,最简单的方法是用 categorical feature 对应的标签的平均值来替换。在决策树中,标签平均值将作为节点分裂的标准。这种方法被称为 Greedy Target-based Statistics , 简称 Greedy TS,用公式来表达就是: \[ \hat{x}_k^i=\frac{\sum_{j=1}^n\left[x_{j, k}=x_{i, k}\right] \cdot Y_i}{\sum_{j=1}^n\left[x_{j, k}=x_{i, k}\right]} \]

这种方法有一个显而易见的缺陷,就是通常特征比标签包含更多的信息, 如果强行用标签的平均值来表示特征的话,当训练数据集和测试数据集数据结构和分布不一样的时候会出条件偏移问题。

一个标准的改进 Greedy TS的方式是添加先验分布项,这样可以减少噪声和低频率类别型数据对于数据分布的影响:

\[ \hat{x}_k^i=\frac{\sum_{j=1}^{p-1}\left[x_{\sigma_{j, k}}=x_{\sigma_{p, k}}\right] Y_{\sigma_j}+a \cdot p}{\sum_{j=1}^{p-1}\left[x_{\sigma_{j, k}}=x_{\sigma_{p, k}}\right]+a} \]

其中\(p\)是添加的先验项, \(a\)通常是大于 0 的权重系数。添加先验项是一个普遍做法,针对类别数较少的特征,它可以减少噪声数据。对于回归问题,一般情况下,先验项可取数据集label的均值。对于二分类,先验项是正例的先验概率。利用多个数据集排列也是有效的,但是,如果直接计算可能导致过拟合。CatBoost利用了一个比较新颖的计算叶子节点值的方法,这种方式(oblivious trees,对称树)可以避免多个数据集排列中直接计算会出现过拟合的问题。

当然,在论文《CatBoost: unbiased boosting with categorical features》中,还提到了其它几种改进Greedy TS的方法,分别有:Holdout TS、Leave-one-out TS、Ordered TS。我这里就不再翻译论文中的这些方法了,感兴趣的同学可以自己翻看一下原论文。

2.2 特征组合

值得注意的是几个类别型特征的任意组合都可视为新的特征。例如,在音乐推荐应用中,我们有两个类别型特征:用户ID和音乐流派。如果有些用户更喜欢摇滚乐,将用户ID和音乐流派转换为数字特征时,根据上述这些信息就会丢失。结合这两个特征就可以解决这个问题,并且可以得到一个新的强大的特征。然而,组合的数量会随着数据集中类别型特征的数量成指数增长,因此不可能在算法中考虑所有组合。为当前树构造新的分割点时,CatBoost会采用贪婪的策略考虑组合。对于树的第一次分割,不考虑任何组合。对于下一个分割,CatBoost将当前树的所有组合、类别型特征与数据集中的所有类别型特征相结合,并将新的组合类别型特征动态地转换为数值型特征。CatBoost还通过以下方式生成数值型特征和类别型特征的组合:树中选定的所有分割点都被视为具有两个值的类别型特征,并像类别型特征一样被进行组合考虑。

2.3 CatBoost处理Categorical features总结

  • 首先计算一些数据的statistics。计算某个category出现的频率,加上超参数,生成新的numerical features。这一策略要求同一标签数据不能排列在一起(即先全是0之后全是1这种方式),训练之前需要打乱数据集。
  • 使用数据的不同排列(实际上是4个)。在每一轮建立树之前,先扔一轮骰子,决定使用哪个排列来生成树。
  • 考虑使用categorical features的不同组合。例如颜色和种类组合起来,可以构成类似于blue dog这样的特征。当需要组合的categorical features变多时,CatBoost只考虑一部分combinations。在选择第一个节点时,只考虑选择一个特征,例如A。在生成第二个节点时,考虑A和任意一个categorical feature的组合,选择其中最好的。就这样使用贪心算法生成combinations。
  • 除非向gender这种维数很小的情况,不建议自己生成One-hot编码向量,最好交给算法来处理。

三、CatboostQ&A

3.1 CatBoost与XGBoost、LightGBM的联系与区别?

(1)2014年3月XGBoost算法首次被陈天奇提出,但是直到2016年才逐渐著名。2017年1月微软发布LightGBM第一个稳定版本。2017年4月Yandex开源CatBoost。自从XGBoost被提出之后,很多文章都在对其进行各种改进,CatBoost和LightGBM就是其中的两种。

(2)CatBoost处理类别型特征十分灵活,可直接传入类别型特征的列标识,模型会自动将其使用One-hot编码,还可通过设置 one_hot_max_size参数来限制One-hot特征向量的长度。如果不传入类别型特征的列标识,那么CatBoost会把所有列视为数值特征。对于One-hot编码超过设定的one_hot_max_size值的特征来说,CatBoost将会使用一种高效的encoding方法,与mean encoding类似,但是会降低过拟合。处理过程如下:

  • 将输入样本集随机排序,并生成多组随机排列的情况;
  • 将浮点型或属性值标记转化为整数;
  • 将所有的类别型特征值结果都根据以下公式,转化为数值结果;

\[ avg_target =\frac{\text { countInClass }+ \text { prior }}{\text { totalCount }+1} \]

其中 countInClass 表示在当前类别型特征值中有多少样本的标记值是1;prior 是分子的初始值,根据初始参数确定。totalCount 是在所有样本中(包含当前样本)和当前样本具有相同的类别型特征值的样本数量。

LighGBM 和 CatBoost 类似,也可以通过使用特征名称的输入来处理类别型特征数据,它没有对数据进行独热编码,因此速度比独热编码快得多。LighGBM 使用了一个特殊的算法来确定属性特征的分割值。

1
2
train_data = lgb.Dataset(data, label=label, feature_name=['c1', 'c2', 'c3'], categorical_feature=['c3'])
# 注意,在建立适用于 LighGBM 的数据集之前,需要将类别型特征变量转化为整型变量,此算法不允许将字符串数据传给类别型变量参数。

(3)XGBoost 和 CatBoost、 LighGBM 算法不同,XGBoost 本身无法处理类别型特征,而是像随机森林一样,只接受数值数据。因此在将类别型特征数据传入 XGBoost 之前,必须通过各种编码方式:例如序号编码、独热编码和二进制编码等对数据进行处理。