软件为什么存在漏洞
① 软件有漏洞,手机有漏洞,那么究竟什么是漏洞,为什么会有漏洞,难道就有 没有漏洞的吗
所谓漏洞就是程序编制的不完善。
比如一个密码门要求输入4位正确密码才能开门,结果程序员没把情况考虑全面,用户输入8位密码,门不知道该怎么办,然后就开门了。这就是漏洞的一种。
电脑、手机系统都是有权限的,什么样级别的用户可以做什么样的时,如果别人利用漏洞获取了高权限,就可以远程操作你的电脑、手机,查看你的各种隐私信息。
越复杂的软件就越有可能有漏洞,这个几乎无法避免。
就好像再健全的制度也总有人会去钻空子一样。
② 为什么会有漏洞
因为你的还处于老的程序需要更新的软件所以存在漏洞更新之后就行了
③ 为什么网站和软件这样多的漏洞
其实所有的软件和程序,都肯定会有漏洞,不可能存在100%安全无漏洞的软件程序。
同时,windows系统漏洞多这个说法可以说并不正确。而是说,使用和针对windows的人太多,所以被发现的漏洞就很多。
打个比方吧,用500个人的团队来做一个软件,这500个人假如都是一样的理论水平和知识储备,然后做好后发布,分为两个不同的版本为A版和B版,但实际事实上A版和B版是完全一样的,没有任何差别。A软件发布给1000万用户来研究,B软件只发布给100万用户来研究,这1100万用户并不重复。那么A软件肯定会被找出更多的漏洞和问题,但这并不能说明什么,因为都是完全一样的软件,只不过一个人多一个人少罢了。
为什么仍然有很多网站漏洞?据了解,大多数企业网站的漏洞包含OpenSSL、PHP和WordPress中的漏洞,这些漏洞主要是由于这些开源软件中存在着大量自定义组合以及缺乏测试和漏洞修复。
本文中让我们看看如何从一开始以及整个开发生命周期中修复这些漏洞。
很多网站的安全漏洞
“很多网站(和Web应用程序)漏洞的主要原因是这些技术完全定制化开发的性质,”美国国家安全局前情报收集人员、现Masergy Communications公司主管David J. Venable表示,这样的结果会产生在很大程度上未经测试的网站和应用程序,它们没有像大多数商业软件(例如操作系统和服务器软件包)经过严格的彻底的测试。
事实上,网站和网络应用程序中的漏洞要比企业其他地方的漏洞更多。这些安全漏洞包括PHP站点、第三方和自产软件中的漏洞,WordPress代码和安装以及OpenSSL、Single Sign-On及SQL和LDAP部署及技术中的漏洞。
使用第三方软件的PHP网站存在固有的漏洞,因为第三方应用程序开发不受企业的掌控。Berkeley研究公司主管Joe Sremack表示:“你可以设计你的网站,以确保所有自制代码是完全安全的,但如果你需要使用第三方软件,那么你就可能引入漏洞。”
WordPress是一个日益严重的问题,它有着无数的插件,需要不断的更新,这给中小型企业带来日益严重的威胁。Sremack表示:“企业想要WordPress的功能,但不幸的是,它也带来风险。”
OpenSSL也面临相同的问题。随着人们不断创新该技术,这些创新带来新的漏洞,可让攻击者发现和利用。每年攻击者都会不断利用OpenSSL漏洞来作为大规模数据泄露的一部分,很多看似新的漏洞实际上是还未被发现的旧漏洞。
即使编程者开发出安全的网站,他们的开发主要是基于他们已知的漏洞,而不是尚未确认的漏洞,而总是会出现新的漏洞。
注入漏洞仍然很常见,攻击者已经调整了他们的攻击方法,以利用日益普及的单点登录。Sremack解释说:“单点登录在酒店里很常见,人们会使用单点登录来检查他们的账户和积分。新的LDAP注入技术会攻击漏洞,并传递参数到代码来控制其网络会话。”
另一个攻击向量是本地和远程文件。Sremack称:“网站的代码可以调用本地服务器或远程公共服务器上的文件。通过使用注入技术,攻击者可以让网站显示信息,包括密码文件或者Web服务器中的用户名列表,并可以执行他们想要运行的代码。”
修复网站安全漏洞
Venable称:“企业必须从开发过程的最开始就坚持安全最佳做法,例如开放Web应用安全项目(OWASP)的最佳做法。”企业需要在生产前、代码变更后进行所有测试,包括应用程序评估、渗透测试以及静态分析,至少一年一次。为了实时发现和缓解攻击,企业需要对网站和网络应用程序部署WAF和IDS,并部署全天候监控小组。
Sremack称:“在开发过程中,与安全团队合作来对受影响的代码和功能执行定期测试。”如果企业在更新当前的网站,应该让安全团队测试和确保新增的功能不会带来漏洞。开发团队还应该进行扫描和测试来隔离漏洞和修复漏洞。
Sremack说道:“企业应该使用攻击者用来入侵网络的相同工具,例如Grabber、W3AF和Zed Attack Proxy。”虽然说,任何有着安全知识或安全工具的人都可以利用这些应用程序,基于测试的结果来发现网站漏洞,但企业需要安排专门的工作人员来做这个工作。
“开发人员应该具体看看他们如何创建和维护网络会话,专门检查会话通过网站传输的输入,无论是通过网站还是输入字段,”Sremack称,“然后监测任何第三方代码中的漏洞,并查看来自供应商的漏洞利用声明。”
总结
网站越大,其功能和可视性越大,它也会使用更多第三方软件,同时,减少该网站中固有漏洞的过程也更加昂贵。
企业必须在一天内多次监控和更新网站,以更好地抵御网络攻击者。这个过程应该包括变更管理、测试和正确的部署,以及新的专门的安全团队和指定的测试站点。
网站的功能越丰富,企业越应该确保网站的安全性。现在也有很多开源免费软件工具可以帮助开发人员来了解新的漏洞和威胁。
建议安装安全防护软件,如安全狗等,防护网站安全。
④ 为什么软件里总会有那么多Bug
1. 人的天性
大多数——当然不是全部——软件 bug 源于我们自己犯的错误。虽然有些是因为软件编码工具和编译器发生了意外,但是大部分的错误得归咎于我们自己。
无论我们受到的 SDL 培训和安全工具有多么强大,只要我们还是人,我们就会犯错。如果你想问为什么电脑软件会有这么多的漏洞,归根到底是因为,人的天性就是容易犯错。
也就是说,我们在减少人为错误方面做得还不够。有很多程序员因为没有受到足够的 SDL 培训(有的甚至干脆就没有培训),所以根本就没有安全编程的理念。有时候我特别奇怪:有那么多的程序员以写安全软件为生,却居然不懂如何安全地编程。别不信,我敢打赌,你正在运行的银行安全软件中的 bug 不会比它能提供的保护措施少,搞不好甚至更多。
但是即使是那些经过严格训练的程序员还是不可避免出现 bug。举个例子,前不久有个自鸣得意的家伙发明的使用 HTML 标记字段确定颜色的缓冲区在浏览器中溢出了。不像以前还要输入 FFFFFh 之类的东西,黑客甚至可以直接执行颜色域的代码,从而导致浏览器过度消耗资源、缓冲区溢出。看到没有,这就是漏洞!而且很少会有人能预料到这种情况。
2. 不断增加的软件复杂性
就其本质而言,软件越复杂,就意味着代码行数越多。只要你在编程,那么即使你有多擅长写代码,也一定会有错误和 bug 出现。有人曾说,如果你能做到每 50 行代码中只出现一个错误,那你就已经做得相当好了。大多数程序员差不多每隔 5 至 15 行就会犯错。想象一下,这么说吧,一般性的 Linux 内核拥有超过 1500 万行的代码,有多少 bug 你自己算吧!
即使没有编码错误,互联网时代应用程序的整体互动性也是漏洞被攻击的途径。大多数程序员不得不和其他 API 协作,保存和检索文件,在多种设备上正常工作。所有这些过程都会增加被成功击破的概率。
而要防守的话,则需要写更多的代码,因为得抵御各种不同的攻击渠道。这么说吧,如果有一个只有 30 条汇编语言指令的恶意程序,那么针对相应的防守,你可能至少得写 50000 条汇编语言指令!
3. Fuzzers 也是人写出来的
新近冒出来的 Fuzzers 软件主要用于扫描软件漏洞。Fuzzers——以及其他用于寻找编码错误和漏洞的任何程序——都是人写出来的,还是这句话,是人就会犯错误。例如 Fuzzers 是不会发现颜色属性的缓冲区溢出这种情况的,这是因为我们在写 Fuzzers 的时候没有考虑这一方面。不过当我们意识到这一点并对 Fuzzers 进行更新之后,就能做到去查找各种类似的缓冲区溢出条件的字段。简而言之,我们要 Fuzzers 做什么,它才会去做什么。
4. 缺乏对供应商的问责
许多安全专家抱怨,只要我们不能找到证据起诉供应商的软件缺陷,我们就永远不会变得更安全。我赞同这一点,增加对供应商的问责有助于降低安全风险,但是同时却有可能会减缓进度。不过如果软件公司比现在更能担当起责任来,那么我想我们能在手机上、电脑上能自由自在冲浪的感觉会更爽。
但是成功源于功能和速度,而非安全。社会现状决定了我们必须牺牲一部分安全和保障去换取新鲜感。这不一定是坏事——因为能让我们成功得更快。但是这样一来我们就不得不承担这样做的后果。不过到目前为止,我们还是心甘情愿为了添加更酷的新鲜玩意儿而面对更多的风险。
5. 缺乏对黑客的问责
现实是上面没有一条能很快解决。但是软件出现漏洞就其本身而言,真不是什么大问题。说它脆弱是因为这些软件在面对恶意攻击的时候毫无抵挡之力。除非我们能制止黑客的猖獗行径,否则恶意软件将会一直困扰着我们。
⑤ 用户操作不当跟软件自身缺陷,那个是漏洞产生的主要原因
导致安全问题的软件缺陷主要有两种:部署中的漏洞和设计中的缺陷,现在软件安全市场中的大部分重点都放在了发现和修复漏洞上,这主要是因为自动代码审查工具让这个过程变得很简单,但其实软件设计和架构中的缺陷问题也占据很大比率,它占所有安全问题的50%,更重要的是架构风险分析(ARA)程序经证明,该程序能够很好地发现和修复漏洞,漏洞 存在于软件代码(源代码或二进制)中,一个最经典的漏洞是缓冲区溢出漏洞,这个漏洞根本上涉及滥用C中某些字符串处理函数功能。
⑥ 软件供应链漏洞来源
主要有以下几种:
一:缓冲区溢出(buffer overflows)
缓冲区溢出是软件安全漏洞的主要来源。所谓缓冲区溢出,指的就是代码写入的数据超过了缓冲区的边界,比如向大小10KB的缓冲区写如12KB的数据,那么这个缓冲就溢出了。当然,前向溢出也算溢出,也就是写入的数据写入到了缓冲区的起始边界之前。
缓冲区溢出是一种比较常见的编码错误,特别是在字符串处理过程中。缓冲区造成的危害也是比较多样的。比较轻微的就是程序直接崩溃,除了用户体验也没什么大损失;比较严重的就是错误的写入覆盖了其他敏感数据,造成数据的丢失;最严重的莫过于执行恶意代码,因为数据写入越界,恶意代码可以将原先正常的函数返回地址修改为自己的代码,从而获得整个软件的执行权。
缓冲区溢出根据溢出的内存类型分为:
栈溢出(stackoverflow)
堆溢出(heap overflow)
overflow,写入的数据超过了缓冲的边界
underflow, 缓冲中有用数据的大小小于缓冲区长度,这有可能造成脏数据的问题
栈内的数据溢出。
堆内的数据溢出,
根据溢出的类型可分为overflow及underflow
二:未验证输入(Unvalidated Input)
输入的数据大于接收缓冲,会造成缓冲溢出
格式化字符串注入,对这些字符串进行处理时,如果不小心会造成程序的崩溃,或某些敏感数据被篡改
URLSchema中的命令为恶意命令,执行了恶意的命令
代码注入,输入的URL或命令中带有脚本、代码等恶意片段
一款应用往往需要接收各种各样的输入,针对一款iOS应用,主要的输入有读取文件,读取用户输入,读取网络传输数据,或通过URL被启动(URL
Schema)。各种类型的输入都有可能是非法的,甚至是恶意的,所以针对所有类型的输入,应用都要进行检验,确保输入的数据是符合程序要求的,合理的,合法的数据。
非法输入可能造成的危害主要有:
三:竞争条件(Race Condtions)
Time of Check Versus Time of Use (TOCTOU)
Signal Handling
读取或写入一个位于其他应用也拥有读写权限路径下的文件。
对文件信息,例如权限等信息没有进行有效验证便进行处理。
对文件操作的返回结果没有进行有效利用
假定一个拥有本地文件名的文件就是真正的本地文件。
- 用户往往是安全保证机制中那薄弱的一环。即使提供再强大的安全保全机制,如果用户安全意识薄弱,同样会出现问题。很简单的例子,比如用户将密码设置的非常复杂,服务器端数据库的安全保证也很周全,黑客完全无法通过技术手段窃取用户密码,可黑客一个伪装客服的电话就完全有可能将用户的密码从用户的口中骗取到。
如果一个任务的完成需要几个特定的子任务以特定的顺序完成来完成,那么这个任务就是存在竞争条件这个漏洞的。黑客可以通过修改事件完成的顺序来改变应用的行为。
竞争条件类型的漏洞主要有以下两种:
应用运行的过程中,在某个操作之前,比如写文件,都会检查一下文件是否存在,在检查与真正的写入之间的间隔就是一个可以被利用的Race Condition,恶意软件可以将用户检查的文件替换成自己的文件,这样数据就泄露了。
处理信号的过程中,是随时可以被另一个信号的处理打断的,如果在处理一个信号的过程中另一个信号到来,那么这个过程会被马上中断,这样,系统就会处于一种未知的状态。
四:进程间通信(Interprocess Communication)
进程间通信采用的方法很多,共享内存,管道,油槽等,由于通信管道两端的应用的不同,那么,有可能存在这钟管道被恶意利用的肯能性,也就是说,进程间通信也是软件漏洞的一个来源,当与另一个应用通信的时候,要默认此应用是不安全的,要对通信的内容进行安全方面的验证。
五:不安全的文件操作(Insecure File Operation)
应用对文件进行处理时,若果没有进行进行有效的验证,那么有可能处理的文件已经是被恶意软件修改过的,是不安全的。所以,进行有效的验证是安全处理文件的重要保证。不安全文件操作类型有以几种:
六:权限控制问题(Access Control)
很多情况下,权限控制是安全机制保证的核心,同时也是漏洞的主要来源。每个应用都有与其匹配的权限,应用申请的权限应该物尽其用,不能申请超过自身需求的权限,而很多的软件漏洞就是因为应用申请了超过自身需求的权限,比如root权限,然后被恶意软件利用,也就有了对整个系统执行所有操作的权限。
很多情况下,对权限的申请进行验证是明智的选择,例如输入用户名及密码来提升权限。注意,在采用验证机制时,最好使用系统内置的权限验证方法,而不是自己取实现,这里需要额外提一下,权限控制是操作系统级别的,当硬件设备被控制时,各种权限的控制也就显得无力,这种情况下,数据的加密保护就显现出了其价值。
七:文件的安全存储与加密(Secure Storage and Encryption)
iOS系统提供了多种机制保证用户的数据安全,具体细节在我的另一篇译文:iOS安全机制概览中有较详细的描述,这里不在重复,不过有一点需要额外说明,安全机制方面尽量使用系统自带的机制,在安全性与可靠性上,系统提供机制往往比自身实现的加密保护机制要可靠的多。
八:社会工程(Social Engineering)
⑦ 有漏洞的主要原因是什么
所谓系统漏洞,就是微软Windows操作系统中存在的一些不安全组件或应用程序。黑客们通常会利用这些系统漏洞,绕过防火墙、杀毒软件等安全保护软件,对安装Windows系统的服务器或者计算机进行攻击,从而控制被攻击计算机的目的。一些病毒或流氓软件也会利用这些系统漏洞,对用户的计算机进行感染,以达到广泛传播的目的。这些被控制的计算机,轻则导致系统运行非常缓慢,无法正常使用计算机;重则导致计算机上的用户关键信息被盗窃。
修补漏洞通常被称为打补丁。由微软官方发布并提供补丁下载安装源文件,下载后安装到系统中即可。由于Windows系统漏洞问题是与时间紧密相关的。一个Windows系统从发布的那一天起,随着用户的深入使用,系统中存在的漏洞会被不断暴露出来,这些早先被发现的漏洞也会不断被系统供应商:微软公司发布的补丁软件修补,或在以后发布的新版系统中得以纠正。而在新版系统纠正了旧版本中具有漏洞的同时,也会引入一些新的漏洞和错误。因而随着时间的推移,旧的系统漏洞会不断消失,新的系统漏洞会不断出现。系统漏洞问题也会长期存在。所以修复系统漏洞是非常必要。
建议你使用腾讯电脑管家修复漏洞:
希望能帮助你,更多问题可以向电脑管家企业平台提问哦~
⑧ 什么是系统漏洞,请简述产生系统漏洞原因
系统漏洞是指应用软件或操作系统软件在逻辑设计上的缺陷或错误,被不法者利用,通过网络植入木马、病毒等方式来攻击或控制整个电脑,窃取电脑中的重要资料和信息,甚至破坏系统。
导致系统漏洞的原因包括程序逻辑结构设计不合理,不严谨、编程人员程序设计错误以及目前为止硬件无法解决特定的问题:
1、编程人员在设计程序时,对程序逻辑结构设计不合理,不严谨,因此产生一处或者多处漏洞,正是由于这些漏洞,给病毒入侵用户电脑提供了入口。
2、编程人员的程序设计错误也是计算机系统漏洞产生的原因之一,受编程人员的能力、经验和当时安全技术所限,在程序中难免会有不足之处,轻则影响程序效率,重则导致非授权用户的权限提升,这种类型的漏洞最典型的是缓冲区溢出漏洞,它也是被黑客利用得最多的一种类型的漏洞。
3、由于目前硬件无法解决特定的问题,使编程人员只得通过软件设计来表现出硬件功能而产生的漏洞,也会让黑客长驱直入,攻击用户的电脑。
(8)软件为什么存在漏洞扩展阅读:
漏洞会影响到的范围很大,包括系统本身及其支撑软件,网络客户和服务器软件,网络路由器和安全防火墙等。
在不同种类的软、硬件设备,同种设备的不同版本之间,由不同设备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同的安全漏洞问题。因而随着时间的推移,旧的系统漏洞会不断消失,新的系统漏洞会不断出现。系统漏洞问题也会长期存在。
⑨ 电脑中为什么经常会有高危漏洞
这是正常现象,每台电脑都会出现高危漏洞的提示。当出现高位漏洞时,电脑防卫系统会进行提示,进行修复即可。
电脑漏洞的出现实际上就是网络病毒发现了电脑系统的弱点,然后乘虚而入。原理就像人因为劳累或者淋雨等种种原因导致身体虚弱,此时病毒、细菌就会侵入人体。而且电脑的漏洞如同人类的病毒一样都会进行变异。但是不用担心,相应的公司会及时发现这些漏洞,并更新电脑的补丁,帮助消灭这些高危漏洞。