1
引言
在网络安全攻防对抗中,攻击者经常通过在系统关键组件中植入后门程序,来获取持久的访问权限。sshd (SSH daemon) 作为管理远程登录的核心服务,是攻击者常用的目标之一。攻击者通过修改或者替sshd二进制文件,绕过原有身份认证机制。这样,他们就能获取对服务器的控制权,并实施各种恶意攻击。
然而,sshd后门的隐蔽性极强。攻击者通常仅对某个身份认证函数进行细微改动,例如增加特定的后门密码条件判断。这些改动往往形式多样,不同攻击者可能采用不同的后门密码,使得传统检测方法面临巨大挑战。
杀毒软件:主流杀毒软件依赖特征码匹配,擅长检测已知的恶意软件模式,如特定字符串、字节序列等。然而,sshd后门的修改往往是语义层面的微小变化,难以通过通用规则进行有效检测,从而难以应对变种后门的识别。
白名单机制:基于sshd白名单的检测方法虽然能够有效防范后门,但在动态业务环境中,由于sshd版本更新、补丁发布或正常业务逻辑引入,可能导致误报。这不仅影响正常用户的使用体验,也使得白名单的维护成本显著增加。
人工分析:依赖安全专家进行人工分析虽然能够准确识别后门样本,但分析过程耗时且成本高昂,难以满足大规模服务器集群的检测需求。
2
sshd后门原理
攻击者通过在sshd身份认证相关函数中插入后门,绕过原有身份认证逻辑。sshd后门常见的行为包括:
窃取正常用户的用户名和登录密码,可被攻击者用于横向移动
下面以VirusTotal多家引擎检出的sshd后门样本为例解释后门原理:
https://www.binaryai.cn/analysis/dfc86b375e974b3092bbff41eb24db3281fb4fc104f1043a7afbf95f85a2c1d5
ILOG
(/etc/lps
/
lps
)文件中,攻击者可利用这些信息进一步密码爆破内网其他服务器,实现横向移动。3
sshd后门检测方法
为了有效检测 sshd 后门,腾讯安全科恩实验室设计了一种基于BinaryAI函数语义匹配技术的自动化检测方案。该方案能精准地捕捉sshd样本中的后门代码,具体检测流程如下图所示。
首先,待分析样本会由BinaryAI引擎进行初步分析。BinaryAI通过反编译将二进制代码转换为伪代码,随后基于科恩自研的BAI 代码匹配模型,将每个函数表示为能够表达其语义的高维向量。结合函数的结构化信息,BinaryAI能够从全量开源C/C++库中精准检索与样本函数匹配的源代码函数。BinaryAI引擎的分析结果为后续的后门检测流程提供了基础。
理论上,sshd中所有涉及身份认证的函数都可能被攻击者植入后门,因此这类函数均应纳入检测范围。为此,需从待分析样本中提取所有身份认证相关函数。
后门样本判定的核心思想是后门函数由于植入了后门代码逻辑,导致与匹配的源代码相似度较低。具体地,我们为每个函数设定相似度阈值,若函数对应的top-1源码相似度低于阈值,则视为后门函数;只要样本中存在至少一个身份认证函数被标记为后门函数,整个样本便被视为后门样本。我们在真实场景收集的大量sshd样本上进行统计分析,为每个身份认证函数设置了特定的阈值,以确保sshd后门检测的准确性。
4
sshd后门样本发现
基于上述方法,我们回溯了腾讯安全威胁情报、VirusTotal等来源的sshd样本,发现了42个新的sshd后门样本,其中8个样本VirusTotal零引擎检出(见8.附录相关IOC)。新发现的样本基于后门方法可分为以下几类。
该样本在auth_password和 sys_auth_password中直接硬编码了后门密码,如果用户输入密码为后门密码则认证成功。
(2)auth_password用户密码本地记录
该样本在auth_password中将用户密码记录到本地文件。
(3)auth_password用户密码回传
该样本将一个sshd中的函数名作为后门密码,该后门可以绕过依赖字符串特征的检测方法。
(2)调用自定义函数,在自定义函数中加入后门
5
讨论
在sshd后门检测的实践中,除了基于函数相似度阈值的判定方法,我们还探索了使用大语言模型(如GPT-4o-mini)来检测后门函数的可能性。具体地,我们尝试将sshd中身份认证函数的伪代码交给GPT模型,并设置prompt指导其输出后门存在性判定与相应解释。
我们发现,GPT虽然能准确识别上述各后门类型并给出相应的后门解释,但对于正常函数的判断存在较高误报。主要原因有:(1)反编译伪代码相比源码结构更复杂,且存在大量地址信息,容易误导GPT产生错误判断;(2)GPT缺乏sshd正常函数的相关知识,很容易被看似“可疑”的词(如"pass", "fakepw"等)所误导。此外,该方法仍然依赖于BinaryAI事先提取样本中的身份认证相关函数。
6
总结
7
引用
[1] VirusTotal. https://www.virustotal.com/
[2] GitHub - openssh/openssh-portable: Portable OpenSSH. https://github.com/openssh/openssh-portable/
8
附录
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"
}
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 |