技术专题:API资产识别大揭秘(二)

在上一期中,我们介绍了API资产的识别技术,探讨了API资产的定义以及各类风格API的识别技术。在本期中,我们将继续介绍API资产识别中的API聚合技术。

作为API资产梳理中的关键环节,API聚合的目的是从流量数据中识别出各种API,并通过分析将流量中API进行归一化处理。

*API资产聚合其实类似于生活中的物品聚类。在API资产梳理过程中,将通信流量当中属于同一个的API接口用通用模式来表示。

举个例子:

在API通信流量当中,我们识别了多个RestfulAPI:

整体思路:基于统计算法,将通信流量中API初步归类,一般来说按照同一个业务系统进行分类,然后将其所有的API无论是URL的部分还是Body的部分,全部抽象成一个数据结构,通过统计的方法去缩小API聚合范围,最后通过一定的算法把通用的模式识别出来,再用这些通用的模式去打标签,这种增量的流量逐渐的能够收敛掉,接近到真实API的资产数量程度。

下面来看看统计部分的算法。

1.字典树算法

举个例子:关键字集合为:{“a”,“to”,“tea”,“ted”,“ten”,“i”,“in”,“inn”}使用Trie树表示如下图所示:

在API聚合逻辑中,我们还需要对Trie算法进行变形,将/作为节点分割符,将API的URL部分变成树状结构。

比如:

通过以上统计数据,我们将API聚合的范围进一步缩小:这些API属于同一业务系统、路径长度相同、拥有相同路径节点,并且存在可变路径。

2.字符串相似判定

当我们运用前面提及的Tire算法进一步缩小API聚合的范围后发现,后续的工作主要是对于那些可变路径的相似度的计算,也就是这些在同一位置的可变路径是不是属于同一类,如果是就可以把它们进行聚合处理。

下面我们将介绍几种关于字符串相似度计算的基本原理:

余弦相似性

余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。定义如下:

编辑距离

编辑距离是针对二个字符串(例如英文字)的差异程度的量化量测,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串。

汉明距离

汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。汉明距离是编辑距离中的一个特殊情况,仅用来计算两个等长字符串中不一致的字符个数。

SorensenDice相似度系数

Dice相似度系数是用于度量两个集合的相似性,因为可以把字符串理解为一种集合,因此Dice距离也会用于度量字符串的相似性。

Jaccard相似度

定义公式如下,简单来说就是集合的交集与集合的并集的比例。

当然,上述都是计算字符串的相似性的理论方案,在一定程度上这些方法是有效的,但结合不同的训练样本和业务实际,计算API中URL相似度的方法也各有不同。

Simhash算法

Simhash是google于2007年发布的一篇论文《DetectingNear-duplicatesforwebcrawling》中提出的算法,最初主要用于解决亿万级别的网页去重任务。

而传统的Hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上仅相当于伪随机数产生算法。即便是两个原始内容只相差一个字节,所产生的签名也很可能差别很大,所以传统的Hash是无法在签名的维度上来衡量原内容的相似度。

那通过上述API聚合技术的介绍,我们聚合后最终能够达到什么样的效果呢?

我们以测试网站的API为例:

从流量中获取到该网站存在以下API(通过处理,图中显示API的URL路径部分)

通过统计算法处理之后,我们将得到路径相同、URL长度相同、拥有相同路径节点等条件的API聚合范围。

根据统计后的聚合范围,我们对满足条件的API中的可变路径部分进行相似度计算并聚合,最终结果如下所示:

关于PortalLab

星阑科技PortalLab致力于前沿安全技术研究及能力工具化。主要研究方向为数据流动安全、API安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,PortalLab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。

THE END
1.字典树算法(C/C++)字典树算法(C/C++) 本文介绍了字典树(Trie)算法,一种用于高效存储和检索字符串的数据结构。文章详细阐述了字典树的基本概念,包括插入、查询操作,并提供了一个C++实现示例。此外,文章还讨论了在删除和修改操作上的挑战,并给出了一种可能的解决方案。最后,通过一个例题展示了字典树在解决字符串查找问题中的应用。https://blog.csdn.net/gaoqiandr/article/details/131033556
2.算法学习:字典树算法学习:字典树 一、概念 字典树,即 Trie 树,又称单词查找树或键树,是一种树形结构。 典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。 优点:最大限度地减少无谓的字符串比较,查询效率比哈希表高。https://www.jianshu.com/p/724b805999bb
3.Trie树(字典树或者前缀树)算法详解算法简介 Trie树,即字典树,也有的称为前缀树,是一种树形结构。广泛应用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是最大限度地减少无谓的字符串比较,查询效率比较高。 Trie的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的https://leetcode.cn/circle/discuss/mv8GnX/
4.《Java数据结构与算法》第7章:字典树腾讯云开发者社区字典树 Trie 这个词来自于 retrieval,于 1912 年,Axel Thue 首次抽象地描述了一组字符串数据结构的存放方式为 Trie 的想法。这个想法于 1960 年由 Edward Fredkin 独立描述,并创造了 Trie 一词。你看看,多少程序员为了一个词、方法名、属性名,想破脑袋!https://cloud.tencent.com/developer/article/2191777
5.字典树&01字典树算法笔记51CTO博客字典树&01字典树算法笔记 1】学习了字典树之后,觉得它很明显的就是用空间来换时间,空间复杂度特别大,比如字典数单单存26个小写字母,那么每个节点的孩子节点都有26个孩子节点,字典树中的每一层都保留着不同单词的相同字母。 2】01字典树主要用于解决求异或最值的问题https://blog.51cto.com/u_15067244/3900256
6.python算法图解提要文摘附注:本书系统论述了Python编程的理论与方法,全书共分11章,包括数据结构的分类和基本运算、递归、栈和队列、链表、数组、树结构、堆结构、散列表、字典树、图和排序算法。 预约委托 49 浏览 纸本馆藏(1) 收起 索书号 条码号 馆藏地/书架号 书刊状态 导航 TP311.561/H32D A0460959 总馆- C-2https://oleopac.lib.sztu.edu.cn/space/searchDetailLocal/m17da2133e62cbd9111a4fe6337e49fd0
7.一文搞懂字典树!字典树,是一种空间换时间的数据结构,又称Trie树、前缀树,是一种树形结构(字典树是一种数据结构),典型用于统计、排序、和保存大量字符串。所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 https://zhuanlan.zhihu.com/p/420663173
8.Trie树(字典树)的介绍及Java实现javaTrie树,又称字典树或前缀树,关于它的结构就不详细介绍了。Trie树在单词统计、前缀匹配等很多方面有很大用处。下面这篇文章主要介绍了Trie树,以及Java实现如何Trie树,有需要的朋友可以参考借鉴,下面来一起看看吧。简介Trie树,又称为前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找https://www.jb51.net/article/104543.htm
9.字典树(trietree)专注于c++字典树(trie tree) 今天AC了两题trie tree的题目,感觉trie的性质真的是相当的好,而且实现比较简单。它使在字符串集合中查找某个字符串的操作的复杂度降到最大只需O(n),其中n为字符串的长度。trie是典型的将时间置换为空间的算法,好在ACM中一般对空间的要求很宽松。http://www.cppblog.com/bellgrade/archive/2009/10/08/98097.html