原创 腾讯科恩实验室 腾讯科恩实验室 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后门常见的行为包括:
-
设置后门密码,使用该密码可直接成功登录(万能密码)
-
窃取正常用户的用户名和登录密码,可被攻击者用于横向移动
下面以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