KHash是一种由腾讯安全科恩实验室自研,用于二进制文件相似性比较的哈希。
KHash利用语义嵌入向量化算法,将文件转换成一种紧凑的表示方式,可以快速计算二进制文件之间的相似度,从而提供给用户更快速、准确的相似文件搜索能力。
值得一提的是,此前KHash已经于腾讯内部业务中稳定应用并取得了显著的效果。现科恩将KHash上线至 BinaryAI(binaryai.cn),正式向外部用户提供体验试用,并开放SDK(详见后文)以供用户批量自动化获取二进制文件KHash。
KHash优势
在文件哈希技术领域,现有方案主要分为两类:一类是基于二进制文件元数据(如SSDeep、TLSH、VHash),另一类是基于二进制文件反编译/反汇编(如BinDiff、DeepBinDiff、PSSO)。然而,这些方案往往无法兼顾丰富的语义特征与合适的时间性能开销,导致在大规模二进制分析场景之上性能表现差或无法使用。
为了解决这一问题,KHash作为一种创新型的基于函数语义向量特征的快速哈希方法,通过提取函数语义特征,将任意有效二进制文件哈希到固定长度特征表示之上,从而实现大规模二进制数据集下的快速二进制文件相似性分析,具有高准确性与鲁棒性。
与SSDeep、TLSH等传统相似度哈希算法相比,KHash最大的优势在于其保持语义一致性的能力。无论是跨操作系统、CPU架构还是编译器选项,KHash都能准确地计算二进制文件的相似度。
KHash应用场景
- 威胁情报场景
KHash可以用于威胁情报中的恶意样本分析场景,例如通过计算目标文件与已知恶意软件的相似度,判断目标文件是否为恶意软件,以及自动化恶意样本基因分析,家族同源分析等。
- 开发安全场景
KHash可以在无源码的情况下,识别是否存在抄袭。通过计算目标文件和已知软件的相似度,有效检测是否存在抄袭行为。
KHash使用示例
用户可将二进制文件上传到BinaryAI,等待分析结束后,在分析结果页的“相似文件”结果处查看当前文件的KHash及其相似文件的SHA256、基础信息、KHash。该功能可以帮助用户分析一批二进制文件间的相似性,可以用于软件同源分析、恶意样本聚类等安全分析场景中。
下面以BinaryAI首页示例文件a2ps-4.14_gcc-7.3.0_x86_32_O3_a2ps.elf为例。这是一个使用gcc-7.3.0编译器,在x86-32位架构上,以O3优化级别编译的a2ps文件。分析结果页的“相似文件”结果展示了其KHash值,并展示BinaryAI线上数据范围中相似度从高到低的前100个结果。
以下为当前与该文件相似度(相似度88.28%)最高的文件a2ps-4.14_clang-5.0_mips_64_O2_a2ps.elf。它是使用clang-5.0编译器,在MIPS-64位架构上,以优化级别O1编译的a2ps文件。从相似文件列表中可以看出,其他二进制文件相似度明显低于该文件,体现了KHash在跨架构、编译优化等情况下也能准确查找到相似文件。
用户可以参考以下代码,用KHash计算二进制文件的相似度:
def khash_similarity(khash_a: str, khash_b: str) -> float:
def khash_str_to_list(khash: str) -> list:
return list(bin(int(khash, 16))[2:].zfill(1024))
from scipy.spatial import distance
khash_a, khash_b = khash_str_to_list(khash_a), khash_str_to_list(khash_b)
return 1 - distance.hamming(khash_a, khash_b)
khash_similarity(khash_a, khash_b)
SDK批量获取文件KHash
用户可以通过SDK批量获得二进制文件的KHash,可在自定义的二进制文件范围内通过KHash计算二进制文件间相似度。