解决方案:阿里云云安全中心具备对业界已知的各类入侵行为的检测、防御能力
优采云 发布时间: 2022-12-01 22:29解决方案:阿里云云安全中心具备对业界已知的各类入侵行为的检测、防御能力
概括
一直以来,Linux主机都被认为是比Windows更安全的操作系统,已知病毒情况的多样性和严重性远不如Windows。近年来,随着云计算的兴起,云主机中Linux系统的高比重,形成了联网主机的主要计算能力,自然会引起病毒和黑产的注意。但是,Linux恶意程序的攻防研究还没有达到与Windows相同的水平。大众公认的Linux恶意程序基本都是挖矿程序和DDoS木马。
在对云中大量主机文件进行排查和安全分析时发现,虽然考虑到Linux开源生态天然的版本差异化因素,但大量Linux基础软件存在碎片化现象,超出正常现象。分析的基础软件包括操作系统基础程序,如ps、kill、netstat等;服务型基础应用软件,如Apache httpd、Nginx、OpenSSH。一些软件版本的碎片化呈现出逐日快速增长的趋势。经分析,其中一些可能与已知的攻击组织和事件有关。例如,近期发现DDG挖矿僵尸网络篡改系统程序,植入木马下载器代码;还有很多以前没有被关注和披露的案例,并且没有办法解释它们。随着分析的深入,阿里云安全运营中心逐渐发现了围绕基础软件污染的各种入侵,而由于基础软件的独特作用,此类污染往往很难被普通用户在事中和事后发现,更难根除。
为了更好地应对Linux操作系统特有的安全挑战,自2020年起,阿里云安全中心专门构建了Linux二进制程序恶意样本的发现与分析。程序进行多维标注,大样本量代码异同聚类比较,形成独特的恶意样本和特征库。其中最典型的一类就是污染Linux云服务器上承载的基础软件的样本,形成了区别于Windows病毒变异速度快、隐藏方式多、检测难度高的主要威胁形式。以6月份为例,该类下每天新增恶意代码篡改系统二进制程序样本3840个。
本文将从一个典型案例——sshd后门入手,介绍Linux基础软件污染的主要表现形式、特有的威胁以及查杀的关键。
入口争议:从OpenSSH sshd后门说起
对于入侵来说,sshd作为登录入口,显然很容易被当作攻击目标。如果更换sshd程序及其配置文件,一方面可以为入侵者留下一个稳定的后门来维护权限。另一方面,作为驻留在系统中的daemon守护进程,sshd中的代码也有机会在后台反复执行。因此,围绕篡改sshd的各种后门层出不穷。早期的想法,如ssh server wrapper,将sshd功能封装起来,用脚本代替了原来的sshd二进制程序。有许多可以轻松检测到的解决方案。
2018年底,安全公司ESET发布了《ForSSHe的黑暗面》白皮书,披露了其三年间跟踪的OpenSSH后门。从Ebury后门演变而来,白皮书共披露了21个sshd后门家族。这些后门基于OpenSSH源码,以补丁的形式植入编译后门代码,从而获得植入特权登录的硬编码账号和可窃取合法登录账号机密的sshd版本无痕更换。近年来,这种解决方案也有一定程度的普及。例如,如果使用公共后门补丁码模板,可以非常方便地定制后门。
在云端,通过对所有/usr/sbin/sshd程序文件的全面对比分析,发现这个简单的后门思路衍生出了大量的变形和技巧,在入侵中起到了精心设计的作用。
sshd后门漏洞图
sshd后门有两个基本功能,即针对登录请求的用户验证过程,植入硬编码的账户密码绕过验证,实现特权免密登录,以及合法的登录请求被记录或直接传回。因此,对于sshd程序样本的分析,首先要定位用户验证相关函数,检查是否存在可疑的新代码或程序调用。
在 OpenSSH 中,支持以下用户验证机制:
userauth_jpake J-PAKE授权协议
userauth_hostbased 基于主机互信
userauth_kbdint 键盘交互
userauth_pubkey 公钥机制
userauth_passwd 密码
userauth_none 无验证
userauth_gssapi GSSAPI
每种验证机制的实现都涉及到更复杂的过程调用环节和配套的数据结构。以密码验证为例,以下函数在验证环节和分支中,所以在代码层面运行时,有可能以明文形式获取账户密码,导致数据被篡改和泄露:
userauth_passwd
mm_auth_password
授权密码
sys_auth_passwd
sshpam_auth_passwd
auth_krb5_password
虽然原创
公开信息的sshd后门仅针对密码验证的auth_passwd功能,但在对活跃样本进行梳理后发现,该恶意版本在野的恶意代码植入位置的选择几乎涉及了所有的以上多种验证方式。相关功能。下面只是一个花式实现密码验证相关后门的典型例子。
典型的 sshd 后门实现示例
后门链:userauth_passwd、auth_password、sys_auth_passwd植入点案例
这是三个具有调用关系的函数。userauth_password为外接口,用于判断当前请求是否为修改密码,因此会提取用户请求中密码的明文,为特权登录密码植入留下可乘之机。该函数的原代码和后门伪代码如下:
下一层会调用auth_password函数,这里会任意提取请求中的明文密码,由配置赋值,验证是由系统KRB5(Kerberos)、PAM(Pluggable Authentication Module)还是原创
账号进行验证加密方法。这里的后门实现一般包括特权密码植入和合法账号窃密两种方式:
" />
而sys_auth_passwd的下一层,在普通密码加salt hash验证之前,还有一个后门直接比对明文密码,如下:
对抗分析:多个后门的实现
对于上述后门实现,人工判断后门判断和特征提取匹配比较简单。在避免使用加壳等全局代码混淆方法(更容易通过文件中的可疑点划定样本)的前提下,已经找到了多种简单的反病毒实现方式。
首先是静态字符串的混淆,通过逐字节赋值避免引入字符串常量数据,避免特征字符串匹配:
其次,对于人工分析,需要根据函数代码逻辑和交叉引用指纹来定位敏感函数。
auth_password 进行了广泛的代码更改和插入,使其“无法识别”并避免手动审核:
其三,根据ESET等对外公开的后门将窃取的合法账号密码以固定格式字符串记录在本地的特点,改用在代码中直接命令外部账号密码的方式,规避了基于格式字符串的特征. 静态扫描检测:
稍微复杂的实现
Linux上的恶意程序广泛使用rootkit来隐藏恶意代码和行为;虽然sshd没有采用独立的程序文件,也没有新的网络行为,但是为了避免检测审计和后续的入侵,下面的后门例子使用了完全不同的实现方式:窃取账户机密的功能是通过一个独立的程序实现的,嵌入到sshd矩阵中释放。同时,为了隐藏该模块,额外在内核态进行了一个普通rootkit的释放和安装。同时,为了保证这些负载释放过程的隐蔽性和可执行性,植入过程实现在
在 server_accept_loop 消息循环中:
当然,以上分析只是分析了sshd常规的后门花式实现,但是可以用少量代码实现的后门行为空间是非常大的。目前发现也有零星案例,后门并不局限于窃取系统账号密码数据。下面的例子实现了对其他应用敏感信息的检索和泄露:
sshd后门样本检测数据
2020年,阿里云安全中心将对Linux基础软件进行专项治理,以sshd后门为切入点,对主流后门进行分析检测。截至2020.07.10,上半年检测数据如下:
从数据中,可以解读出以下信息:
· 主动攻击样本变化快,传统安全软件检测滞后。由于基于开源项目和开源攻击载荷进行开发,定制的选项极其灵活,因此依赖传统的样本分析和特征匹配方案,很难做到即时检测和响应。ESET 在 2018 年底发布了一份白皮书,披露了 21 个 OpenSSH 后门家族的特征。2020年不再有新的匹配样本。集中*敏*感*词*,半年内发现56个疑似有组织的新植入源。在这种情况下,
·利用sshd后门进行持久化攻击具有很强的定向性,实际影响远大于直接影响。从样本维度来看,检测到的样本中虽然存在感染100个以上ECS实例的“通用”样本,但大部分样本只是针对性的,最多只有5个实例被感染;使用此类样本“不经济” 这种方法可以有效避免被吸引眼球而被杀死,同时分散审核人员和检查人员的精力,主要是由于能够快速生成大量样本的特点分批。从用户角度来看,绝大多数用户只有1个实例被植入后门,受影响用户的后门污染率仅为0.59%。动作上的克制避免了受害用户自己的察觉。从结果来看,由于同一用户的批量ECS实例共享账号密码的可能性较大,所以当只有一个实例有后门时,其余实例也有相同的密码。在无痕入侵威胁中,这种威胁的影响估计是直接报警后门的机器数量的170倍以上;同时,部分客户还在登录跳板机sshd上发现了后门更换的痕迹,更加放大了实际的威胁程度。其余实例也有相同的密码。在无痕入侵威胁中,这种威胁的影响估计是直接报警后门的机器数量的170倍以上;同时,部分客户还在登录跳板机sshd上发现了后门更换的痕迹,更加放大了实际的威胁程度。其余实例也有相同的密码。在无痕入侵威胁中,这种威胁的影响估计是直接报警后门的机器数量的170倍以上;同时,部分客户还在登录跳板机sshd上发现了后门更换的痕迹,更加放大了实际的威胁程度。
·sshd 后门的出现与已知的入侵模式具有高度相关性。阿里云安全中心具备检测和防御业界已知的各种入侵的能力。从后门检测与入侵的相关性来看,18.2%的后门植入实例具有可知的入侵历史。这时候后门的作用就是维护权限;很多情况下,在发现sshd后门样本之前,已经存在用于隐藏入侵痕迹的历史rootkit,其中不乏多种针对sshd后门的网络行为和文件进行隐藏的rootkit。可见sshd后门的用途和作用并不单一。从影响来看,*敏*感*词*大客户范围内出现大量后门告警。大客户在受害用户中占比较高,目标行业具有选择性。因此,sshd后门不能简单的认为是一般意义上的。病毒要打通其上下游,关联各类异常,对攻击事件进行定性分析。
Linux 基础软件威胁的可疑云:从已知到“未知”
上面以OpenSSH为例,揭示了可能从一种针对Linux开源基础软件的恶意代码植入的公众想法演变而来的各种形式。从这一点出发,我们来讨论一下Linux开源程序所面临的威胁全景。
已知:基本软件污染事件
选择OpenSSH作为后门载体,一方面是因为它是登录入口程序,功能敏感;另一方面,由于它是Linux系统的守护程序之一,具有常驻后台的特点。事实上,Linux的基础软件,包括操作系统基本功能的基础程序,以及Linux服务器主机常用的服务程序,都因上述两个特征之一而存在已知或未公开的污染。
Linux操作系统基础程序:病毒存留的温床
由于Linux的系统设计理念,有大量的系统原子函数被设计成基本程序(如ls、ps、grep等),大量与系统交互的功能都是通过调用这些来完成的基础程序串联起来,所以这些基础软件总是少不了的。可以经常调用。其他的系统程序,如sshd,都是默认在后台执行的daemon watchdog程序,涉及底层系统管理、监控、服务提供等功能。因此,这些程序自然成为恶意代码持续运行的目标载体。
在DDG僵尸网络中,多种入侵感染手段相结合,保证了挖矿任务的成功分发、维护和隐蔽。在最新的样本分析中,阿里云安全运营中心发现,在以往的入侵中,有很多基础系统程序被替换的历史。被替换的底层程序涉及grep、awk、sendmail、chattr、pkill、lsattr、sleep、wget等,为保证恶意程序本身简单、兼容性强,这些替换程序没有选择在基础上进行修改独立源码(即pkill的替换版本不是从原来的pgrep/pkill源码编译而来),而是统一使用busybox源码插入后门代码,编译后的二进制程序替换成目标系统,主要调用DDG的木马代码,如下图所示。与此类似,近期新发现一种新型系统程序替换污染,将多个系统程序替换为在glibc源代码中添加恶意主代码后编译的二进制程序。
" />
另一部分具有“入门”性质的Linux系统基础程序也存在广泛的感染风险威胁。观察到agetty、dhclient、bash、sftp-server、sudo、login、irqbalance、gssproxy、anacron等长期稳定代码版本的系统程序更新迁移操作频繁;而对于服务于Linux系统的守护程序,也是入侵时被篡改和植入后门的敏感区域;近两年,阿里云安全运营中心发现了以下系统守护进程的可疑文件变化:dbus-daemon、systemd-logind、systemd-journald、auditd、ntpd、rsyslogd、chronyd、lvmetad、atd、rpc.statd、 packagekitd、xinetd、vsftpd等针对上述可疑文件迁移和篡改,阿里云安全中心已有监控告警模型,提醒用户进行审计;对于样本的恶意代码分析检测也有大量的积累,正在逐步覆盖可疑事件中的样本。辨别能力。
后台服务基础应用软件:业务/数据驱动威胁的新目标
除了系统基础程序外,部分第三方开源基础应用软件供应链来源多样,版本变更频繁,在一般用户业务中扮演主要业务应用角色的程序包,直接处理业务逻辑和用户数据. , 是一个关键的敏感程序。这些应用程序的安全性与业务更直接相关,而不是主机的安全性。
Linux云主机承载的最主流的应用是Apache httpd和Nginx。例如,2013年ESET和Sucuri披露的Linux/Cdorked.A反连接后门就是嵌入恶意代码编译的httpd守护程序。后门实现在http请求头的复杂处理分支中与原代码功能逻辑结合。嵌入新增的控制命令处理,用于条件触发植入的反弹壳模块等后门功能,增加请求重定向隐藏。由于该后门不是通过之前广为流传的修改配置文件和新的后门扩展模块实现的,也没有磁盘上的其他文件,也没有消除日志,所以一旦植入完成或者安装过程被污染,只能通过安装过程来实现。httpd程序文件的特征检测只能找到。这个家族还包括 Nginx 和 Lighttpd。可见,服务应用软件二进制级别的隐藏后门是一个已经打响的战场。
《未知》:从数据中窥探威胁
由于先天开源生态,相对于Windows软件多以二进制形式发布,Linux拥有大量程序以源代码形式供用户拉取、定制、编译使用,或下载预编译来自其他渠道的二进制版本。由此引入了大量的版本碎片化现象,主要体现在三个方面:
· 编译过程引入的特异性差异。不同的编译环境和配置不仅会在编译后的二进制文件中留下指纹,还会收录
build-id等固有差异;更重要的是,跨编译器和版本的不同代码生成策略造成的普遍差异。
· 代码定制引入的异国情调版本。由于业务和功能需求,在开源代码上引入增量代码会产生“小众”版本。对于独立审计第三方来说,判断增量代码是首要难点,而判断增量代码是否“好”则是更大的挑战。
• 不同软件供应链带来的碎片化。Linux 应用程序通常具有复杂的依赖关系。对于一些通用的场景,有大量的第三方提供预编译的软件包。例如,在lanmp、phpstudy、EZHTTP、wdlinux等各种web服务器中只收录
pure-ftpd程序,在应用打包方案中提供,引入了额外的分片,包括下载路径在内的部分供应链是也失信,甚至有历史问题。
即使考虑到以上所有的白灰版本碎片化,通过数据分析,阿里云安全运营中心也可以观察到一些程序在所有主机上都是高度可疑和严重碎片化的。代表性数据如下:
在此数据中,对主要 Linux 程序的零散分布进行了抽样。上图选择了比较零散和正常的守护程序数据;相比之下,近年代码简单、代码没有变化的auditd、atd等系统守护程序每天活跃的md5版本在100个左右,而其余版本数量最多的守护程序则有偏离正常的趋势版本数量。下图展示了各种常见应用的碎片化。除了curl、rpm、chmod等已知被病毒污染的常见目标程序*敏*感*词*;一些基础软件月均有5000多个新版本,
根据上面披露的sshd后门检测阶段的结果,常见程序的低安装版本往往直接表示高可疑性。整体来看,存在大量安装量低、周期迭代更替的“单一”版本。生存和成长是我们目前面临的基本软件威胁。同时,碎片版本数量的增加呈现出与攻击事件发生时间和热度相关的趋势,这也证明了基础软件污染已经成为野外入侵事件的组成部分。
对策:从单机审计到数据歧视
样品分析和审核困难
对于已知类型、攻击思路、可疑代码目标位置的恶意程序,如果需要在单机上进行审计,检查是否被欺骗,将面临以下困难:
· Binary unsigned,相关函数没有特征定位。比如OpenSSH的auth相关函数就没有特征常量字符串定位。同时,由于不同配置下的条件编译,二进制代码不具有统一的特征或调用关系,因此很难在反编译函数中定位到目标。
·大多数开源项目固有版本较多,差异较大,包括大版本和小版本,发布版本后移植版本。需要跨版本对比,需要完整的跨版本特性储备,进行功能差异分析。例如,rhel 版本与具有相同版本号的上游原创
OpenSSH 版本不同。
后门的实现可能不会引入特征代码,甚至可能只是代码层面的微小改动。此时,有必要了解载体代码的原创
功能逻辑和潜在漏洞。但同时,对目标进行选择性审计也会造成盲点,因此需要进行全码比对。
持久化代码一般是一个独立的函数,有隐藏的调用链,比对发现的二进制增量代码的非特定版本需要大量的人工分析,没有基于语义分析的自动化工具的辅助。
·成熟的攻击样本基本具备完备的隐藏方案。例如,后门程序经常篡改 rpm 配置文件,使
rpm -Va
· 做rpm包验证无效;或消除各种日志,以避免通过异常行为发现。
云端大数据歧视
虽然个人用户很难确定自己主机上的文件是否被恶意版本替换,但攻击事件往往不是孤立的、稀疏的。因此,作为阿里云的安全运营中心,可以从更高的维度监控变化。
阿里云云安全中心目前具备自动分析云端新二进制程序样本的能力。基于代码语义,从数据层面监控Linux基础软件集中或规律出现的大量碎片的趋势。相似度聚类,快速定位,协助专家分析差异代码,圈定潜在恶意版本。3月起,云安全中心云查杀模块新增“受污染基础软件”告警类别,将对上述所有Linux基础软件的污染和后门篡改进行统一告警,引导用户检查和修复。大数据监控和自动化分析的解决方案将在后续文章中单独介绍。
用户保护建议
虽然基础软件篡改类型的恶意样本和入侵往往比较严密,攻击成本和个人用户发现难度之间存在杠杆关系,但一般用户还是可以从以下几个方面尝试被动发现和主动防护:
· 应用文件篡改和单一样本分析。可以从主要系统基本程序的时间戳和rpm校验信息入手,检查是否有比较简单的文件替换;如果有多个具有相同配置的主机实例,您可以比较文件以查找差异。对于阿里云安全中心用户,可以关注“系统文件被篡改”和“基础软件被污染”两类告警,分别从行为和样本维度自动呈现上述分析。
积极处理各种异常告警,修复漏洞。虽然基本的软件污染事后难以察觉,但它本身并不构成完整的攻击,总是与其他入侵事件相互配合。因此,用户需要综合考虑各种告警,修复告警中的漏洞,保证告警中各种病毒和webshell的清理效果,并对各种可疑事件告警进行筛选分析。
· 确保使用来源可靠的第三方软件。软件供应链污染是一种尚未完全暴露的新型低成本攻击手段。攻击者可能通过各种不可信渠道从上游污染用户代码,可能包括恶意预编译验证信息的rpm源、个人或非正规渠道发布的系统安装镜像或docker镜像等。以上需要用户自行保证。
解读:公众号影响因子的可行性分析:公众号文章“被引量”指标
文章从学术论文中的“引用”入手,延伸出一个衡量公众号文章质量的指标“引用”。脑洞大开,学习一下思路吧。
学术论文有一个重要的部分叫做“参考文献”,在这个模块中你将标记你在本文中引用的思想来源:
参考文献作为论文的重要组成部分,一方面表明文章所依据的研究基础;另一方面,对于被引论文,被引次数代表了文章的影响力和价值。
学术界众所周知的Thomson Reuters,会根据文章的被引情况发表一份期刊引文报告,报告的核心指标称为影响因子。
影响因子 (IF) 是汤森路透 (Thomson Reuters) 出品的期刊引文报告 (JCR) 中的数据。即报告年度(JCR年)某期刊前两年发表论文的总引用次数除以该期刊两年内发表的论文总数。这是国际通行的期刊评价指标。
影响因子已成为国际上通用的国际期刊评价指标。它不仅是衡量期刊有用性和知名度的指标,也是衡量期刊学术水平乃至论文质量的重要指标。
Google Scholar 也使用类似的 H-index 作为评估学者和期刊的标准:
于是我就在想,公众号的文章能不能引入这样一个“被引量”的指标来评价一篇文章或者公众号的水平呢?
学术文章的被引次数很容易计算,因为国家有明确的法律法规和标准,只要有足够完整的学术文章,一篇文章的被引次数就可以计算出来。
对于公众号,计算被引用次数所需的数据也很齐全。
一、功能层面
2017年6月6日,公众号开通了“插入所有平台已分发文章链接”功能
该功能的开启提供了添加“引用”的可能。
然后,数据平面
目前,内容创业服务公司新邦每天维护着44.8万篇公众号文章的采集
,几乎囊括了所有活跃的公众号。这些公众号的文章都可以在新邦数据库中搜索到。
" />
最后,在技术层面
获取文章的“被引”状态,首先需要知道文章的被引状态,然后需要知道文章的出处(即公众号)。
而这两个数据都是有的。
文章引用行为的习得
我们打开一篇“引用”其他文章的公众号文章,F12查看该文章的源代码,我们可以看到该文章以超链接的形式出现:
所以在采集文章的时候,如果是采集到源码中
文本
字段,可以认为这里存在“引用”行为。
引文分析
找到文章的引用行为后,我们需要对被引用的文章进行分析。分析的核心在于本文的链接,也就是刚才herf后面的字符串。
幸运的是,微信在链接中保存了我们需要的所有数据。
以刚才文章中的链接为例:
http://mp.weixin.qq.com/s?__biz=MzU1MTAwNzY4Mg==&mid=2247483897&idx=1&sn=893614b6d6fd28d04b0f51e7c857c876&chksm=fb96a554cce12c4266018f581467f009021b89f5df0d546b1d08f4a08055ce17916f2ae74745&scene=21#wechat_redirect
我们将链接分为三个部分:
http://
mp.weixin.qq.com/s
__biz=MzU1MTAwNzY4Mg==&mid=2247483897&idx=1&sn=893614b6d6fd28d04b0f51e7c857c876&chksm=fb96a554cce12c4266018f581467f009021b89f5df0d546b1d08f4a08055ce17916f2ae74745&scene=21#wechat_redirect
" />
了解链接构成的同学应该知道,前两部分是链接的主题,每篇文章的链接都是一样的。关键信息在“?”之后的部分。
在链接中,“?”之后的部分 是传递给链接的参数。顾名思义,就是传递给服务器的参数,也就是链接的解释(或注释)。
观察链接中的参数,有五个:
__bizmididxsnchksm
我们这里只使用前两个参数:
__biz可以认为是微信公众平台发布的一个公众号。唯一的 idmid 是图形消息 id
公众号的ID数据可以通过__biz参数获取,该参数唯一标识,目前技术上可以转换为账号;
通过mid参数,我们可以定位到文章的ID,也是唯一标识的。
至此,文章引用行为的技术层面已经解决。
“引用”的使用
和学术领域一样,如果一篇文章被引用一次,则意味着该文章的影响力+1,被引用次数越多,该文章的影响力就越高。
对于公众号,可以使用该账号所有文章的被引次数来计算该账号的“影响因子”,可以使用SCI的计算方法,也可以使用Google Scholar的H-index的计算方法用过的。
与学术领域一样,文章也存在“自引”和“负引”的问题。
自引在学术界并不是很流行,因为“引用”的索引已经被作为评价标准,引用自己的文章给自己+1的行为并不是很好。
负面引用在学术领域并没有那么严重。不管一篇论文的结论是对是错,它都具有学术价值。但在传媒行业就不一样了。毕竟,媒体经常传达价值观。比如某篇文章观点偏激,被全网喷,只能说这篇文章影响力大,但价值不大。
我们不会在这里深入讨论它。
遗言
现在的内容行业充斥着营销号和流量号。一群自媒体人聚在一起,不是讨论什么样的文章有价值,什么样的内容有深度,而是讨论今天的收入,阅读多少才能打开流量。主持人。
我们每天的几分钟阅读时间有一半浪费在那些“耸人听闻”但没有营养的标题上,而那些报道事实、传递价值的深度内容要么是因为文字太长,要么是标题不够吸引人. ,淹没在这爆炸性的信息海洋中。
是时候有人站出来做点什么了,比如给内容产业增加一个让死气沉沉的学术圈想死的“影响因子”。