常见软件攻击方式

1、漏洞攻击
无论是操作系统、中间件还是应用软件,一定都存在漏洞
如果防守方没有及时升级打补丁,就容易被攻击
在爆出漏洞到漏洞补丁推出,到漏洞被修复,这之间有个时间差
在这个时间差之内,利用该类漏洞进行攻击,被大家成为0day攻击

比如:
2022年向日葵远控软件爆出远程代码执行漏洞(Windows平台),攻击者可利用该漏洞获取服务器控制权

2、逆向工程攻击
攻击者通过分析软件的内部结构,寻找漏洞或破解软件的保护机制
比如:虚拟脱壳、动态调试等
当然,业界也有成俗对抗手段,加壳、混淆、反调试、加密狗等

3、缓冲区溢出攻击
通过向程序的缓冲区写入超出其长度的内容,破坏程序的堆栈,使程序转而执行攻击者预设的指令
内核和一些应用软件都曾出现类似漏洞

4、反序列化漏洞攻击
利用现代编程序列化、反序列化的能力,精心构造序列化对象,发送到服务端
服务端反序列化后,执行反序列化后代码,触发恶意代码

5、文件包含漏洞攻击
一些脚本化的编程语言,比如PHP,如果没有做好正确的设置
攻击者就可以通过语言中的,文件包含函数(比如include),读取到服务器上受限制的文件信息,达到攻击目的

6、组件攻击
通过软件引用的各类组件漏洞,进行攻击

比如:2021年爆出的Log4j2漏洞,由于Log4j2提供了“{payload}”解析功能,攻击者可以构造payload,调用JNDI服务,JNDI则会从攻击代码指向的远程服务加载提前部署好的class,并且执行。这样攻击者就可以远程执行任意指令了。

还有:swag-ui如果不做好权限管控,攻击者可以轻易看到代码文档,根据文档构造针对性很强的攻击

7、开源攻击
在开源库中,注入恶意代码
比较出名的包括明尼苏达大学学生向Linux内核源码提交恶意代码,东窗事发后,整个学校被禁止提交Linux源码

8、逻辑炸弹
即使是闭源软件,也有被嵌入恶意代码的情况,当满足特定条件时会自动执行恶意操作
比如,某银行程序员,设置当自己的账号被禁用三个月后,会诱发恶意代码,批量删除数据

9、供应链攻击
软件开发到上线,是一个长长的供应链,包括开源组件引入,外部组件采购,镜像构建,软件本地化,软件编译,软件集成,软件部署等等很多环节
攻击者只需要攻破整个供应链中的某个环节,就可以将恶意软件或漏洞被包含在最终软件中
供应链攻击,再次印证了一个安全守则:安全木桶理论,最短的板,代表了整体安全水平

比如:
2012年,中文版PuTTY被曝出存在后门,该后门会自动窃取管理员输入的SSH用户名和密码,并将其发送至指定服务器。攻击者所作的就是,获取英文版源码,汉化,植入后门,打包发布,甚至做了推广。(利用了国内用户更倾向于使用英文的心理)

2015年爆发的XcodeGhost事件,攻击者利用当时开发者难以通过官方渠道下载Xcode的疏漏,发布了带有病毒的Xcode,导致2500多款通过该Xcode开发的iOS App被植入恶意代码,影响到的iOS用户数达1.28亿。(利用了XCode的下载缓慢,国内用户倾向于寻找替代源的心理)

2024年的“微软蓝屏”事件,就是微软安全供应商CrowdStrike更新了错误的软件配置,导致850万设备蓝屏,全球多地航班停飞、医疗设备瘫痪、金融系统中断。

供应链的下游,还有一类是桌面(电脑维修人员),也必须做好管控,否则风险同样巨大。

10、插件攻击
其实插件攻击,比较像供应链下游的攻击
就是通过利用软件、网站的插件漏洞,达到攻击的目的
更有甚者,可以自己发布一个带隐秘漏洞的插件,从而达到攻击的目的

比如:
2017年,Chrome浏览器内的知名插件User-Agent Switcher被发现内藏恶意代码,会上传用户打开的每一个标签页链接,并会在用户访问部分网站时插入推广代码

11、组件替换及恶意投毒
根据软件的加载规律,替换指定位置的可执行文件、dll、jar包等
让攻击组件优先于默认组件先行加载,达到攻击的目的
最直接的,莫过于直接替换可执行文件了
当然,一些premain的方法,也可以被攻击者利用

这其中,有一类情况叫做“恶意投毒”,攻击者借助Python、Node.js等技术栈的依赖包在安装期间即可执行代码的功能,通过注册相似包名、抢注企业内部包名等方式进行投毒,将病毒木马、挖矿、窃取敏感信息等恶意代码插入安装期间的hook函数或三方组件入口函数内,若企业员工在研发过程中疏忽大意导致拼写错误或是未指定内部软件仓库,就有可能被攻击成功,让攻击者进入办公网络甚至是生产网络。
比如:2022年,攻击者定向收集Ably公司发布的各类产品、代码名称,发布了几十个恶意Node.js依赖包进行投毒​。

同理,直接使用三方源,也很容易遭受投毒攻击,只要同步链路上游被攻破,下游全部会被污染。

12、应用软件攻击
此类攻击,主要针对常用应用软件,在其中注入恶意代码,通过软件厂商的官方渠道分发,达到攻击目的。

比如:
2020年,SolarWinds遭遇攻击,攻击者攻陷了企业内的CI/CD平台,污染了关键产品SolarWinds Origin,进而影响了美国政府等大量下游客户。

13、软件授权攻击
包括:破解补丁、密钥生成器、激活工具等

14、后门攻击
一些软件,为了维护方便,其实留有一些后门,这些后门中,很多并不是因为恶意产生的

我发现过一个后门,是一个资深开发,为了避免数据修改时需要走繁琐的数据修改流程,做了一个接口,通过复杂参数设置,可以推送执行任意SQL
类似后门,被攻击者发现后,后果不堪设想

24年,一位叫Jia Tan的开发者,用了三年时间,获取XZ压缩软件开发者及社区的信任,然后开始后门植入。
他利用m4脚本、shell脚本、测试文件及复杂的混淆技术,在编译期间很隐秘的对XZ软件注入了恶意后门代码,生成liblzma.so
部分发行版中,sshd会链接到systemd,systemd会链接到liblzma,这样就通过XZ,对sshd注入了恶意后门代码
由于被注入的sshd在执行时比较慢,很快就被一些细心的人发现了,避免引发更大的危险
这个历时3年的后门植入攻击事件,才慢慢浮出水面

15、逃逸攻击
包括沙箱逃逸、容器逃逸等,虚拟机逃逸
比如:通过容器逃逸,获取宿主机的访问权限

16、大模型投毒统计
通过在训练数据中植入恶意样本、具有误导性标签或特征的数据,扭曲模型的学习过程,导致模型偏离真实数据的表征。
被攻击后,模型在预测时,会产生错误结果。
导致给出令人不悦的反馈,甚至引导给出错误决策。

17、软件配置错误
24年爆发了严重的“微软蓝屏事件”,导致850万台使用了windows系统的设备出现大规模蓝屏。
是微软的安全供应商CrowdStrike,批量推送了错误的安全规则所致。

18、权限管理问题
大家经常开玩笑说的,从删库到跑路,很多时候就是把过大的权限给到错误的人员,比如
直接给开发同学权限,后台执行批量删除语句,但他由于粗心,执行时没有带上where语句,更没有limit
直接把drop库的权限,给到了基层运维同学,但他因为一言不合,直接删了生产库
直接允许工程师通过自己写的脚本工具,对云服务器进行批量运维,某次紧急事件,紧急执行了脚本年久失修的脚本,导致整个zone崩溃

记录一个卡券系统漏洞

大概三年前,遇到过这样一个系统需求,被安全团队及时发现,避免了引起大规模的问题。

事情是这样的,我们有一个比较老的外购卡券管理系统,之前都是实体卡直接核销的。
后来逐步上线了各大电商平台,就需要通过虚拟卡的方式,通过短信将激活地址、卡号、卡密直接发送给客户,客户可以直接注册、激活。

但这时遇到了两个问题:
1、客户需要复制卡号、卡密到激活地址,操作比较繁琐
2、卡号、卡密都很长,会造成一个短信无法成功发送,需要拆分成两个短信发送,同样是不方便

业务方希望客户操作更加方便,与供应商沟通,供应商提供了这样一个方案:
1、客户下单完成后,将激活地址+卡号+卡密,一起生成一个短链
2、直接将短链通过短信发给客户
3、客户点击短链,一键绑定

听起来一起都很美好是不是?

但很快就被安全团队质疑了,攻击思路是这样的:
1、暴力枚举短链,批量获取短链实际地址
2、匹配地址,批量抓取卡号卡密
3、申请账号,绑定卡号卡密,攻击成功

于是这个需求被判定为高危风险,直接就被否定了。