【AI+安全】sshd后门自动化检测 | BinaryAI在恶意软件检测场景的实践

news/2024/12/26 22:31:11/文章来源:https://www.cnblogs.com/o-O-oO/p/18634328

原创 腾讯科恩实验室 腾讯科恩实验室 2024年11月12日 10:12 上海

一、引言

在网络安全攻防对抗中,攻击者经常通过在系统关键组件中植入后门程序,来获取持久的访问权限。sshd (SSH daemon) 作为管理远程登录的核心服务,是攻击者常用的目标之一。攻击者通过修改或者替sshd二进制文件,绕过原有身份认证机制。这样,他们就能获取对服务器的控制权,并实施各种恶意攻击。

然而,sshd后门的隐蔽性极强。攻击者通常仅对某个身份认证函数进行细微改动,例如增加特定的后门密码条件判断。这些改动往往形式多样,不同攻击者可能采用不同的后门密码,使得传统检测方法面临巨大挑战。

杀毒软件:主流杀毒软件依赖特征码匹配,擅长检测已知的恶意软件模式,如特定字符串、字节序列等。然而,sshd后门的修改往往是语义层面的微小变化,难以通过通用规则进行有效检测,从而难以应对变种后门的识别。

白名单机制:基于sshd白名单的检测方法虽然能够有效防范后门,但在动态业务环境中,由于sshd版本更新、补丁发布或正常业务逻辑引入,可能导致误报。这不仅影响正常用户的使用体验,也使得白名单的维护成本显著增加。
人工分析:依赖安全专家进行人工分析虽然能够准确识别后门样本,但分析过程耗时且成本高昂,难以满足大规模服务器集群的检测需求。

为了克服这些传统方法的局限性,腾讯安全科恩实验室结合BinaryAI的函数语义匹配技术,设计了一套自动化且精准的sshd后门检测方案。基于BinaryAI引擎,该方案包含两阶段分析流程。首先,BinaryAI基于 BAI代码匹配模型,结合函数间语义信息,从全量开源C/C++库中精确检索目标样本的源函数;借助匹配到的源函数名,我们从sshd中提取所有与身份认证相关的函数。接着,通过比较身份认证函数与匹配到的源函数的语义相似度,进一步定位被篡改的后门函数。
基于该检测方案,科恩已成功发现了多个在VirusTotal[1]未被任何引擎检出的sshd后门样本,证明该方案相比传统检测方法更具优势。

二、sshd后门原理

攻击者通过在sshd身份认证相关函数中插入后门,绕过原有身份认证逻辑。
sshd后门常见的行为包括:

  1. 设置后门密码,使用该密码可直接成功登录(万能密码)
    
  2. 窃取正常用户的用户名和登录密码,可被攻击者用于横向移动
    

下面以VirusTotal多家引擎检出的sshd后门样本为例解释后门原理:

https://www.binaryai.cn/analysis/dfc86b375e974b3092bbff41eb24db3281fb4fc104f1043a7afbf95f85a2c1d5

通过“交互式分析”功能,找到该样本的后门藏在 auth_password 函数中,该函数反编译伪代码如下图所示。

43-48行加入了后门密码判断逻辑,如果用户输入的密码等于 SECRETPW(0Zm7HF),则直接返回1,表示密码认证成功,不进行其他的认证流程。65-73行将正常登录成功的用户名及其密码写入路径为 ILOG(/etc/lps/lps)文件中,攻击者可利用这些信息进一步密码爆破内网其他服务器,实现横向移动。
观察到该函数由于插入了后门逻辑,BinaryAI检索得到的top-1源函数相似度仅为0.6958,远低于正常函数的top-1相似度(通常为0.85以上)。这说明虽然后门逻辑仅为几行代码的改动,BinaryAI的代码匹配模型依然可以精准感知到代码语义的变化,因此可以设置相似度阈值来检测后门函数。

三、sshd后门检测方法

为了有效检测 sshd 后门,腾讯安全科恩实验室设计了一种基于BinaryAI函数语义匹配技术的自动化检测方案。该方案能精准地捕捉sshd样本中的后门代码,具体检测流程如下图所示。

3.1 BinaryAI引擎分析

首先,待分析样本会由BinaryAI引擎进行初步分析。BinaryAI通过反编译将二进制代码转换为伪代码,随后基于科恩自研的BAI 代码匹配模型,将每个函数表示为能够表达其语义的高维向量。结合函数的结构化信息,BinaryAI能够从全量开源C/C++库中精准检索与样本函数匹配的源代码函数。BinaryAI引擎的分析结果为后续的后门检测流程提供了基础。

3.2 身份认证函数提取

理论上,sshd中所有涉及身份认证的函数都可能被攻击者植入后门,因此这类函数均应纳入检测范围。为此,需从待分析样本中提取所有身份认证相关函数。
为了实现这一目标,我们通过对sshd项目源码[2]的深入分析,汇总了一个包含63个身份认证函数名的集合(见8.附录)。这些函数与身份认证直接相关,极有可能成为后门植入的目标。得益于强大的代码语义表征能力,BinaryAI引擎能够精准地检索到待分析样本中所有函数对应的标准sshd源代码。通过判断匹配到的源码函数名是否在上述集合中,即可筛选出所有潜在的目标函数。

3.3 后门样本判定

后门样本判定的核心思想是后门函数由于植入了后门代码逻辑,导致与匹配的源代码相似度较低。具体地,我们为每个函数设定相似度阈值,若函数对应的top-1源码相似度低于阈值,则视为后门函数;只要样本中存在至少一个身份认证函数被标记为后门函数,整个样本便被视为后门样本。我们在真实场景收集的大量sshd样本上进行统计分析,为每个身份认证函数设置了特定的阈值,以确保sshd后门检测的准确性。

四、sshd后门样本发现

基于上述方法,我们回溯了腾讯安全威胁情报、VirusTotal等来源的sshd样本,发现了42个新的sshd后门样本,其中8个样本VirusTotal零引擎检出(见8.附录相关IOC)。新发现的样本基于后门方法可分为以下几类。
(1)auth_password/sys_auth_passwd后门密码硬编码

该样本在auth_password和 sys_auth_password中直接硬编码了后门密码,如果用户输入密码为后门密码则认证成功。

(2)auth_password用户密码本地记录

该样本在auth_password中将用户密码记录到本地文件。

(3)auth_password用户密码回传

该样本在auth_password中通过curl将用户名与密码回传至攻击者服务器。
除了上述几种常见的在auth_password中直接添加后门的逻辑,我们还发现了以下其他几种值得关注的后门方式。
(1)使用函数名作为后门密码

该样本将一个sshd中的函数名作为后门密码,该后门可以绕过依赖字符串特征的检测方法。

(2)调用自定义函数,在自定义函数中加入后门

该样本在auth_password中调用了自定义的后门函数ssh_auth_aaa,该函数与其他进程通过socket通信进行身份认证,并将用户密码写入本地文件。
综上,我们的方案能有效检测出各类型后门植入形式,如硬编码后门密码,用户密码窃取、回传等;也发现了其他后门变种,例如利用函数名作为后门密码或通过自定义函数进行密码泄露等。值得注意的是,上述样本在VirusTotal上均零引擎检出,可见即使是简单的硬编码后门密码,现有的杀毒引擎有时也难以检出;特别的,其中某些样本在VirusTotal上已存在近三个月(如下图所示),但仍未被任何引擎发现,充分证明了基于BinaryAI代码语义匹配技术的sshd后门检测方案的有效性与优越性。

五、讨论

在sshd后门检测的实践中,除了基于函数相似度阈值的判定方法,我们还探索了使用大语言模型(如GPT-4o-mini)来检测后门函数的可能性。具体地,我们尝试将sshd中身份认证函数的伪代码交给GPT模型,并设置prompt指导其输出后门存在性判定与相应解释。

我们发现,GPT虽然能准确识别上述各后门类型并给出相应的后门解释,但对于正常函数的判断存在较高误报。主要原因有:(1)反编译伪代码相比源码结构更复杂,且存在大量地址信息,容易误导GPT产生错误判断;(2)GPT缺乏sshd正常函数的相关知识,很容易被看似“可疑”的词(如"pass", "fakepw"等)所误导。此外,该方法仍然依赖于BinaryAI事先提取样本中的身份认证相关函数。
因此,基于GPT的后门检测方法难以在实际检测中应用。相比之下,基于BinaryAI函数语义匹配的检测方法显得更加精准和可靠。

六、总结

基于BinaryAI的函数语义匹配技术,腾讯安全科恩实验室设计了一套自动化的sshd后门检测方案。该方案在真实场景样本中发现了多种后门类型,并且成功发现了多个VirusTotal零引擎检出的样本。欢迎访问 “8附录”中相关IOC链接,前往样本BinaryAI页面进行体验分析。

七、引用

[1] VirusTotal. https://www.virustotal.com/[2] GitHub - openssh/openssh-portable: Portable OpenSSH. https://github.com/openssh/openssh-portable/

八、附录

8.1.sshd身份认证函数集

SSHD_AUTH_FUNCTIONS = {
"ssh_xmss_equal", "input_userauth_info_response", "auth2_challenge_start",
"ssh_gssapi_accept_ctx", "user_key_allowed2", "hostbased_key_allowed",
"mm_ssh_gssapi_server_ctx", "mm_answer_keyverify", "auth_password",
"userauth_kbdint", "mm_auth_password", "mm_answer_authpassword",
"sshkey_equal_public", "input_gssapi_token", "mm_answer_pwnamallow",
"gss_accept_sec_context", "mm_user_key_allowed", "check_hostkeys_by_key_or_type",
"ssh_ed25519_sk_equal", "ssh_xmss_verify", "ssh_dss_equal",
"auth_check_authkey_line", "mm_request_send", "mm_sshkey_verify",
"sshkey_sk_fields_equal", "mm_answer_gss_accept_ctx", "userauth_passwd",
"input_userauth_request", "ssh_ecdsa_sk_verify", "userauth_gssapi",
"sshkey_equal", "ssh_rsa_equal", "sshkey_verify",
"sys_auth_passwd", "userauth_hostbased", "userauth_pubkey",
"auth2_challenge", "mm_hostbased_key_allowed", "getpwnamallow",
"user_key_allowed", "check_key_in_hostkeys", "ssh_rsa_verify",
"ssh_ecdsa_sk_equal", "ssh_ed25519_sk_verify", "sshkey_read",
"mm_getpwnamallow", "mm_answer_keyallowed", "ssh_dss_verify",
"check_key_in_hostfiles", "ssh_ecdsa_verify", "userauth_finish",
"ssh_ed25519_equal", "ssh_ed25519_verify", "userauth_none",
"ssh_ecdsa_equal", "mm_ssh_gssapi_accept_ctx", "auth_check_authkeys_file",
"cert_compare", "mm_key_allowed", "auth_krb5_password",
"sshpam_auth_passwd", "do_authentication", "do_authloop"
}

8.2 相关IOC

https://www.binaryai.cn/interactive/file/3876e702b25da4c72d8cdd913f2892e29eb748de59de96a75d4f41293648f8ae?function=1130608
https://www.binaryai.cn/interactive/file/78642628e15db5a2e342e33ff762d6163941c40b80ffdcf0c9bbc2eb881136ab?function=1124576
https://www.binaryai.cn/interactive/file/b15402931cda3221864f69142d4cd5973bf9bdf7e3277ee4e5a55ce71a154493?function=1119728
https://www.binaryai.cn/interactive/file/4391958372f45e26b848b3f8b278022455431eb8a9fb5d85caf4769c45a1de1c?function=1119728
https://www.binaryai.cn/interactive/file/10aa2fe44e4dd4ae4e14eb5c6166fa95adbe5c6f92b590caedace7ed933518db?function=1119952
https://www.binaryai.cn/interactive/file/a6f254c63ff69ac997cf2d6c91ca20284c2851bc8d8eb1b023d43ca29981b318?function=1106624
https://www.binaryai.cn/interactive/file/1d3a7eebc88f731305adf58adecbaab093d9fe302b1ea5c900500d1c0ed370bb?function=4418000
https://www.binaryai.cn/interactive/file/0b99f4d3e57216518b8500f9b8c210b2b8d032b4eb813dfb80997ff1da81c713?function=1129200
https://www.binaryai.cn/interactive/file/40a67e37ded15dd2ea7c13363314a047660fade98a411fee344538469619cf3d?function=4246289

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859491.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Detr训练自定义数据

前面记录了Detr及其改进Deformable Detr。这一篇记录一下用Detr训练自己的数据集。先看下Detr附录中给出的大体源码,整体非常清晰。接下来记录大体实现过程 一、数据准备 借助labelme对数据进行标注然后将标注数据转换成COCO格式,得到以下几个文件其中JPEGImages存放所有图片…

8086汇编(16位汇编)学习笔记05.asm基础语法和串操作

https://bpsend.net/thread-121-1-2.htmlasm基础语法 1. 环境配置xp环境配置 1.拷贝masm615到指定目录 2.将masm615目录添加进环境变量 3.在cmd中输入ml,可以识别即配置成功dosbox环境配置 1.拷贝masm611到指定目录 2.将masm611所在目录添挂载进dosbox 3.将masm611目录在dosbo…

WinNTSetup 系统安装利器 v5.4.0 单文件版

软件介绍 WinNTSetup,系统安装利器,目前最好用的系统安装器,Windows系统安装部署工具。支持所有Windows平台,支持多系统安装、完全格式化C盘、支持创建VHD虚拟硬盘、在Windows及PE系统下运行,允许在安装前对系统进行预优化设置、集成驱动程序、启用第三方主题支持、加入无…

解决 Cannot GET /favicon.ico

一、报错 二、定位(项目所在文件夹) 三、改名(添加图片,重命名)

Java编程规范-DO / BO / DTO / VO / AO的使用

Java 开发 DO / BO / DTO / VO / AO 的作用 Java 开发中,DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object) 和 AO(Application Object) 是常用的对象类型,每种类型都在特定的层次和场景中发挥不同的作用。以下是它们的定义和使用…

硬件开发笔记(三十二):TPS54331电源设计(五):原理图BOM表导出、元器件封装核对

前言一个12V转5V、3.3V和4V的电源电路设计好了,下一步导出BOM表,二次核对元器件型号封装,这是可以生产前的最后一步了。 导出BOM表步骤一:打开原理图打开项目,双击点开原理图:   步骤二:报告-元器件列表列宽一点,板子元器件种类规格不多的时候,导出的东西也不多,因…

数字孪生-智能制造

1、数字企业内循环:打造端到端的数字化应用体验 2、GARTNER分层架构 3、企业数字化架构 4、数字企业的两大核心特征 6、产品数字主线赋能企业转型 7、数字主线关键技术:基于统一架构构建产品全量数字模型 8、闭环数字化解决方案 9、基于数字主线的设计-仿真-试验协同 10、产品数…

C# WPF PrintDialog 打印(3)

前面https://www.cnblogs.com/yinyu5/p/18634080使用PrintDocument方法打印了Canvas,这里打印下面的DataGrid列表内容:这里DataGrid的数据源是DataTable,后台代码:1 private void PrintDocument_DataTable_Method(string Title, DataTable dataTable)2 {3 …

【JAVA代码审计】记一次某java类的cms最最最详细的代码审计

前言 刚好遇到一个授权的渗透是通过该cms实现getshell,所以顺便审计一下java类的cms,这个管理系统是一个内容管理系统,下载地址 https://gitee.com/oufu/ofcms/tree/V1.1.3/tomcat下载地址 https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78-wind…

12.26日每日总结

昨天在调试51单片机的串口时,发现芯片手册上有一句话,在使用定时器1产生串口的波特率时,定时器1就不能使能了。不是不能用,是直接不让使能了,使能后会出错,导致发送的数据不稳定。 今天继续研究了触摸滑条,发现滑条输出的值为从小到大,如下图所示的样子,这就导致从最上…