📖 前言:随着应用软件日益增多,与我们的生活深度绑定,应用软件的安全性问题愈发凸显。针对恶意代码、代码漏洞等安全风险,必须加强安全意识,采取有效措施进行防范。合理有效的安全措施能够确保用户的信息安全、网络安全以及保证企业的商业机密得以安全保护。本篇博客将介绍应用软件安全的概念、恶意代码的防范、代码漏洞的防范、安全软件工程等方面。
目录
- 🕒 1. 恶意代码的概念
- 🕘 1.1 计算机病毒
- 🕘 1.2 蠕虫
- 🕘 1.3 木马
- 🕘 1.4 后门
- 🕘 1.5 Rootkit
- 🕘 1.6 勒索软件
- 🕒 2. 恶意代码的防范
- 🕘 2.1 法律惩处
- 🕘 2.2 可信验证
- 🕤 2.2.1 概述
- 🕤 2.2.2 特征可信验证
- 🕤 2.2.3 身份可信验证
- 🕤 2.2.4 能力可信验证
- 🕤 2.2.5 环境可信验证
- 🕒 3. 代码漏洞防范
- 🕘 3.1 软件漏洞
- 🕤 3.1.1 概念
- 🕤 3.1.2 成因
- 🕤 3.1.3 分类
- 🕞 3.1.3.1 基于漏洞补丁是否已发布
- 🕞 3.1.3.2 基于漏洞成因
- 🕞 3.1.3.3 基于漏洞利用位置
- 🕞 3.1.3.4 基于威胁类型
- 🕘 3.2 软件侵权
- 🕤 3.2.1 软件知识产权的概念
- 🕤 3.2.2 软件侵权行为
- 🕤 3.2.3 软件逆向工程概念
- 🕤 3.2.4 软件逆向分析的方法
- 🕞 3.2.4.1 动态分析
- 🕞 3.2.4.2 静态分析
- 🕘 3.3 安全软件工程
- 🕤 3.3.1 软件安全开发模型
- 🕤 3.3.2 SDL模型
- 🕒 4. 案例分析:拼多多利用漏洞提权事件
🕒 1. 恶意代码的概念
恶意代码(Malware),是在未被授权的情况下,以破坏软硬件设备、窃取用户信息、干扰用户正常使用、扰乱用户心理为目的而编制的软件或代码片段。
定义指出,恶意代码是软件或代码片段,其实现方式可以有多种,如二进制执行文件、脚本语言代码、宏代码或是寄生在其他代码或启动扇区中的一段指令。
依据定义,恶意代码包括:
- 计算机病毒(Computer Virus)
- 蠕虫(Worm)
- 特洛伊木马(Trojan Horse)
- 后门(Back Door)
- 内核套件(Rootkit)
- 间谍软件(Spyware)
- 恶意广告(Dishonest Adware)
- 流氓软件(Crimeware)
- 逻辑炸弹(Logic Bomb)僵尸网络(Botnet)、垃圾信息(Spam)等恶意的软件及代码片段。
🕘 1.1 计算机病毒
定义:指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,且能自我复制的一组计算机指令或者程序代码。
特点:寄生、传染性、潜伏性、破坏性
典型代表:熊猫烧香
🕘 1.2 蠕虫
定义:网络蠕虫是一种智能化、自动化,综合网络攻击、密码学和计算机病毒技术,不需要计算机使用者干预即可运行的攻击程序或代码,它会扫描和攻击网络上存在系统漏洞的节点主机,通过局域网或因特网从一个节点传播到另外一个节点。
与病毒的区别:
传统计算机病毒主要感染计算机内的文件系统,而蠕虫传染的目标则是计算机。
计算机网络条件下的共享文件夹、电子邮件、网络中的恶意网页、大量存在漏洞的服务器等都是蠕虫传播的途径。
因特网的发展使得蠕虫可以在几个小时内蔓延全球,而且蠕虫的主动攻击性和破坏性常常使人手足无措。
组成:
网络蠕虫的功能模块可以分为主体功能模块和辅助功能模块。主体功能模块通常由信息搜集、扫描探测、攻击渗透、自我推进等子模块构成。实现了主体功能模块的蠕虫能够完成复制传播流程。
辅助功能模块通常包括:实体隐藏、宿主破坏、信息通信、远程控制以及自动升级等功能。包含辅助功能模块的蠕虫程序则具有更强的生存能力和破坏能力。
🔎 蠕虫病毒Prometei介绍
🕘 1.3 木马
定义:一个有用的、或者表面上有用的程序或者命令过程,实际上却包含了一段隐藏的、激活时会运行某种有害功能的代码,它使得非法用户达到进入系统、控制系统和破坏系统的目的。
特点:它是一种基于客户机/服务器方式的远程控制程序,由控制端和受控端两个部分组成。“中了木马”就是指被安装了木马的受控端程序。具有隐蔽性和非授权性。
木马对系统具有强大的控制功能。一个功能强大的木马一旦被植入某台机器,操纵木马的人就能通过网络像使用自己的机器一样远程控制这台机器,甚至能远程监控受控机器上的所有操作。
与蠕虫的区别:
一般而言,这两者的共性是自我传播,都不感染其他文件。在传播特性上,它们的微小区别是:木马需要诱骗用户上当后进行传播,而蠕虫不是。蠕虫包含自我复制程序,它利用所在的系统进行传播。
一般认为,蠕虫的破坏性更多的体现在耗费系统资源的拒绝服务攻击上,而木马更多体现在秘密窃取用户信息上。
典型代表:🔎 灰鸽子远控木马
🕘 1.4 后门
定义:后门是指绕过安全控制而获取对程序或者系统访问权的方法。后门仅仅是一个访问系统或者控制系统的通道,其本身并不具有其他恶意代码直接攻击的行为。
后门的产生有两种情况:一种是软件厂商或者开发者留下的,另一种是攻击者植入的
🔎 苹果Xcode后门事件
🕘 1.5 Rootkit
最初,Rootkit是攻击者用来修改Unix操作系统和保持根权限(Root)且不被发现的工具,正是由于它是用来获得root后门访问的kit工具包,所以被命名为“root”+“kit”。
目前通常所说的Rootkit是指:一类特洛伊木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权限并隐藏在计算机中。
典型代表:ZeroAccess,创建ZeroAccess僵尸网络的rootkit恶意软件,该僵尸网络在挖掘比特币和向用户发送广告时会消耗资源。
Rootkit与特洛伊木马、后门等既有联系又有区别。
- Rootkit属于特洛伊木马的范畴,它用恶意的版本替换运行在目标计算机上的常规程序来伪装自己,从而达到掩盖其真实的恶意目的,而这种伪装和隐藏机制正是特洛伊木马的定义特性。
- 各种Rootkit通过后门口令,远程Shell或其它可能的后门途径,为攻击者提供绕过检查机制的后门访问通道,而这正是后门工具的定义特性。
- 作为一类特殊形态的木马后门工具,一个恶意代码之所以能够被称为Rootkit,就必须具备替换或修改现有操作系统软件进行隐藏的特性,而这才是Rootkit的定义特性。
- Rootkit强调的是强大的隐藏功能、伪造和欺骗的功能,而木马、后门强调的是窃取功能、远程侵入功能。两者的侧重点不一样,两者结合起来则可以使得攻击者的攻击手段更加的隐蔽、强大。
从硬盘上分出一块完全在受害机器上隐藏着的新分区(盘符),这把对它进行的传统磁盘扫描变成不可能的。
修改了被害操作系统的驱动,让病毒代码可以依此来启动。
🕘 1.6 勒索软件
定义:勒索软件是黑客用来劫持用户资产或资源并以此为条件向用户勒索钱财的一种恶意软件。
WannaCry勒索病毒
2017年5月12日,WannaCry勒索病毒全球大爆发,至少150个国家、30万用户中招,影响到金融、能源、医疗、教育等众多领域,造成损失达80亿美元。
WannaCry是借用了永恒之蓝漏洞利用工具的代码。漏洞是MS17-010 SMB协议远程代码执行漏洞。
【网络安全大事记】第二期-WannaCry勒索病毒事件
🕒 2. 恶意代码的防范
🕘 2.1 法律惩处
- 对计算机病毒的法律惩处:破坏计算机信息系统罪
- 对恶意代码等计算机侵害的法律惩处:非法侵入计算机信息系统罪
🕘 2.2 可信验证
🕤 2.2.1 概述
面对恶意代码攻击手段的综合化、攻击目标的扩大化、攻击平台的多样化、攻击通道的隐蔽化、攻击技术的纵深化,采用单一技术的恶意代码检测变得越来越困难。
影响软件可信的因素包括:软件危机、软件缺陷、软件错误、软件故障、软件失效以及恶意代码的威胁等。
可信验证模型定义:一个可信的组件、操作或过程的行为在任意操作条件下是可预测的,并能很好地抵抗应用软件、病毒以及一定的物理干扰造成的破坏。
🕤 2.2.2 特征可信验证
软件的可信性要求其独有的特征指令序列总是处于恶意软件特征码库之外,或其Hash值总是保持不变。
其技术核心是特征码的获取和Hash值的比对。
特征码扫描技术,首先提取新恶意软件的独有特征指令序列,并将其更新至病毒特征码库,在检测时将当前文件与特征库进行对比,判断是否存在某一文件片段与已知样本相吻合,从而验证文件的可信性。
🕤 2.2.3 身份可信验证
通常,用户获得的软件程序不是购自供应商,就是来自网络的共享软件,用户对这些软件往往非常信赖,殊不知正是由于这种盲目的信任,将可能招致重大的损失。
传统的基于身份的信任机制主要提供面向同一组织或管理域的授权认证。如PKI和PMI等技术依赖于全局命名体系和集中可信权威,对于解决单域环境的安全可信问题具有良好效果。
然而,随着软件应用向开放和跨组织的方向发展,如何在不可确知系统边界的前提下实现有效的身份认证,如何对跨组织和管理域的协同提供身份可信保障已成为新的问题。
因此,代码签名技术应运而生。
🕤 2.2.4 能力可信验证
软件的可信性要求软件系统的行为和功能是可预期的,其技术核心是软件系统的可靠性和可用性,如源代码静态分析法、系统状态建模法等,统称为能力(行为)可信问题。
🕤 2.2.5 环境可信验证
软件的可信性要求其运行的环境必须是可知、可控和开放的,其技术核心是运行环境的检测、控制和交互。
🕒 3. 代码漏洞防范
🕘 3.1 软件漏洞
🕤 3.1.1 概念
软件漏洞通常被认为,是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。
- 一方面,造成软件在运行过程中出现错误结果或者运行不稳定。
- 另一方面软件漏洞可能会被黑客发现、利用,进而窃取隐私信息,破坏系统等攻击行为。
软件系统或者产品在设计、实现、配置、运行等过程中,由操作实体有意或者无意产生的缺陷、瑕疵或者错误,它们以不同形式存在于信息系统的各个层次和环节中,且随着信息系统的变化而改变。
漏洞是贯穿于软件生命周期的各个环节的。
🕤 3.1.2 成因
计算机系统结构决定了漏洞的必然性。
软件趋向大型化,第三方拓展增多。
- 常用大型软件为了充分使软件功能得到扩充,通常会有第三方拓展,这些拓展插件的存在,增加系统功能的同时也导致的安全隐患的存在
软件新技术、新应用产生之初即缺乏安全意识。
- 比如大多数网络协议,在设计之初就没有考虑过其安全性。
软件使用场景更具威胁。
- 网络技术是发展,软件被用于各行各业,遍及各个社会层次。
软件安全开发重视度不够,开发者缺少安全意识。
🕤 3.1.3 分类
🕞 3.1.3.1 基于漏洞补丁是否已发布
- 0 day漏洞:0 day漏洞得名于漏洞发现时补丁存在的天数:零天,就是指已经被发现(有可能未被公开)但官方还没有相关补丁的漏洞。注意,0 day漏洞并不是指软件发布后被立刻发现的漏洞。
- 1 day漏洞:是厂商发布安全补丁之后但大部分用户还未打补丁时的漏洞,此类漏洞依然具有可利用性。
- 历史漏洞(n day漏洞):是距离补丁发布日期已久且可利用性不高,故用虚线表示。
通俗理解:
0day:银行的所有金库上都有一个洞,可以钻进去,但是银行那边还没人知道
1day:有洞的问题银行的人知道了,但是正在组织人员补洞
nday:那个洞怎么补已经公布,但是不排除有些银行懒得补
🔎 通俗理解什么是0day漏洞,1day漏洞和nday漏洞?
🕞 3.1.3.2 基于漏洞成因
- 内存破坏类:非预期的内存越界访问。攻击者利用这些漏洞可执行指定的任意指令或是导致拒绝服务或信息泄露。如缓冲区溢出。
缓冲区溢出的概念
简单的说,缓冲区溢出(Buffer Overflow)就是通过在程序的缓冲区写入超出其长度的内容,从而破坏程序的堆栈,使程序转而执行其他指令,以达到攻击的目的。
案例:🔎 如何评价2023年4月23日晚,微信打开发送图片出现闪退现象?
- 逻辑错误类:涉及安全检查的实现逻辑上存在的问题,导致设计的安全机制被绕过。CWE-22:路径名到受限目录的不正确限制
案例:🔎 Windows 11 截图工具隐私错误暴露裁剪的图像内容 - 输入验证类:对来自用户输入没有充分的检查过滤就用于后续操作。如SQL注入。
SQL注入漏洞
SQL攻击通常是发生在应用程序和数据库层之间的安全漏洞。
如果在输入的查询字符串中注入SQL语句,而设计不良的程序中忽略了对其进行检查,那么这些注入的指令就会被数据库服务器误认为是正常的SQL指令而执行,造成数据泄露。
🔎 IBM所提供的Web安全漏洞演示网站
- Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码,登录页面中输入的内容将直接用来构造动态的SQL命令 或者直接用作存储过程的参数
System.Text.StringBuilder.query = new System.Text.String.Builder(“SELECT * from Users WHERE login =“).Append(txtLogin Text).Append(“'AND password=“').Append(txtPassword.Text).Append(“”)
- 攻击者在用户名字和密码输入框中输入
'or'1'='1
的内容 - 服务器运行上面的ASP NET代码构造出查询用户的SQL命令,最后得到的SQL命令变成
SELECT * from Users WHERE login = ‘or '1'='1' AND password ‘or '1'='1'
- 设计错误类:系统设计上对安全机制考虑不足。如DDOS攻击
🔎 1.35TB超大流量DDoS攻击 GitHub遭遇memcrashed DDoS放大攻击 - 配置错误类:系统运行维护过程中以不正确的设置参数进行安装,或者安装在不正确位置。
案例:🔎 了解 Facebook 如何从互联网上消失
🕞 3.1.3.3 基于漏洞利用位置
- 本地漏洞:需要系统级的有效账号登录到本地才能利用的漏洞。
- 远程漏洞:无需系统级的有效账号,通过网络访问目标进行的漏洞,如永恒之蓝。
🕞 3.1.3.4 基于威胁类型
- 获取控制。
- 获取信息。
- 拒绝服务。
🕘 3.2 软件侵权
🕤 3.2.1 软件知识产权的概念
知识产权:是权利主体对智力创造成果和工商业标记等知识产品依法享有的专有民事权利的总称。
对一个软件的知识产权主要是该软件的研发者对其依法享有的各种权利,通常包括5个方面:版权(著作权)、专利权、商标权、商业秘密和反不正当竞争。
🕤 3.2.2 软件侵权行为
- 未经软件著作权人许可,发表、登记、修改、翻译其软件。
- 将他人软件作为自己的软件发表或者登记,在他人软件上署名或者更改他人软件上的署名。
- 未经合作者许可,将与他人合作开发的软件作为自己单独完成的软件发表或者登记。
- 复制或者部分复制著作权人的软件。
- 向公众发行、出租、通过信息网络传播著作权人的软件。
- 故意避开或者破坏著作权人为保护其软件著作权而采取的技术措施。
- 故意删除或者改变软件权利管理电子信息。
- 转让或者许可他人行使著作权人的软件著作权。
软件的版权保护实际上主要是防范软件的逆向分析
🕤 3.2.3 软件逆向工程概念
- 软件逆向分析工程的定义。软件逆向分析工程简称逆向工程,是一系列对运行于机器上的低级代码进行等价的提升和抽象,最终得到更加容易被人所理解的表现形式的过程。
- 使用W32Dasm 等反汇编工具打开目标软件的EXE文件,将其由不可读的机器语言 反汇编为 可读的汇编语言;对该汇编代码进行静态分析,找出与软件注册相关的语句
- 软件逆向工程的作用。逆向工程对于软件设计与开发人员、信息安全人员,以及恶意软件开发者或网络攻击者,都是一种非常重要的分析程序的手段。
- 软件逆向工程的正确应用。合理利用逆向工程技术,将有利于打破一些软件企业对软件技术的垄断,有利于中小软件企业开发出更多具有兼容性的软件,从而促进软件产业的健康发展。
🕤 3.2.4 软件逆向分析的方法
针对软件的逆向分析方法通常分为3类:动态分析、静态分析以及动静结合的逆向分析,实际应用中常根据目标程序的特点以及希望通过分析达到的目的等因素来选择。
🕞 3.2.4.1 动态分析
将目标代码变换成易读形式的逆向分析过程,在调试器中加载程序,一边运行程序一遍对程序行为进行观察和分析。
调试器:IDE、WinDbg、OllyDbg
以WinDbg为例:
启动后界面如图所示,选择【File】-【Symbol File Path】,设置Dump所需的符号库
输入“SRV*C:\websymbols*http://msdl.microsoft.com/download/symbols
”,单击【OK】
在下方的命令行输入“!analyze -v
”开始分析,等待一段时间后分析结果如下图所示
🕞 3.2.4.2 静态分析
不执行代码而使用反编译、反汇编工具,把程序的二进制代码翻译成汇编语言。
工具:IDA Pro、C32ASM、Win32Dasm等
以Win32Dasm为例:
W32Dasm 分析出的软件基本信息,如软件的各个寄存器段、区块、引用函数等
W32Dasm 分析出的程序调用的外部dll文件,以及各dll文件中具体的函数名称
反汇编出的目标程序的源代码“ASSEMBLY CODE LISTING”
🕘 3.3 安全软件工程
程序的正确性和安全性都应当是由程序的编写者来保证的。
作为一个程序员,必须认识到每一个应用软件的安全问题,即使只是一个小的漏洞,也有可能会被黑客发现并被利用来进行攻击,由此造成巨大的损失。
忽略了软件的安全性大致来说有两种。
第一种是直接进行设计、编写、测试,然后发布,忘记了程序的安全性。或者设计者自认为已经考虑到了,而做出了错误的设计。
第二种错误是在程序完成以后才考虑添加安全因素,在已经完成了的功能外包裹上安全功能。
为防止软件安全问题的发生,之前介绍了软件可信验证技术,这实际上属于对软件的事后验证。
本节介绍4种安全开发模型。
🕤 3.3.1 软件安全开发模型
1)微软的软件安全开发生命周期模型(SDL),以及相关的敏捷SDL和ISO/IEC 27034标准。
2)McGraw的内建安全模型(BSI),以及BSI成熟度模型(BSIMM)。
3)美国国家标准与技术研究院(NIST)的安全开发生命周期模型。
4)OWASP提出的综合的轻量级应用安全过程(CLASP),以及软件保障成熟度模型(SAMM)。
🕤 3.3.2 SDL模型
基本原则:
- 安全设计(Secure by Design)。在架构设计和实现软件时,需要考虑保护其自身及其存储和处理的信息,并能抵御攻击。
- 安全配置(Secure by Default)。在现实世界中,软件达不到绝对安全,所以设计者应假定其存在安全缺陷。
- 安全部署(Security by Deployment)。软件需要提供相应的文档和工具,以帮助最终用户或管理员安全地使用。此外,更新应该易于部署。
- 沟通(Communication)。软件开发人员应为产品漏洞的发现准备响应方案,并与系统应用的各类人员不断沟通,以帮助他们采取保护措施(如打补丁或部署变通办法)。
🕒 4. 案例分析:拼多多利用漏洞提权事件
2023年3月27日,卡巴斯基实验室的安全研究人员证实拼多多 App 包含恶意代码,初步分析显示,至少两个非 Play 版本的拼多多应用利用了漏洞 CVE-2023-20963。
据悉,拼多多 APP 包含利用该漏洞的恶意代码版本可追溯至2020年。其利用该0 day漏洞提权,下载并执行额外的恶意模块,窃取用户隐私以逃避合规监管,盗取竞争对手软件数据,防止自身被卸载等。该漏洞非常强大,基本可完全控制手机(可以无视bootloader),整个过程不需要用户交互。近期谷歌才将修复补丁提供给终端用户。
根据调查,通过谷歌应用商店和苹果官方商店下载的拼多多应用是安全的。尽管如此,谷歌还是选择将其从官方应用商店中下架。但通过第三方市场下载的 Android 用户则没有那么幸运了,且国内手机厂商在系统更新上不够积极,鉴于拼多多有数亿用户,受影响的用户数量可能非常惊人。
作为普通安卓用户,当前解决方案有:①升级至安卓13,②使用谷歌商店版安装包,③使用2020年之前的官方安装包。
🔎 卡巴斯基实锤拼多多App恶意代码
OK,以上就是本期知识点“应用软件安全”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~
❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页