来自 Web前端 2020-03-14 06:28 的文章
当前位置: 网上澳门金莎娱乐 > Web前端 > 正文

Web 2.0 桌面与移动应用程序安全性设计【网上澳门金莎娱乐】

时间: 2019-11-17阅读: 84标签: 建议

访问控制、防火墙、入侵检测系统,以及入侵防御系统组成了一个完整的应用程序安全防线,向应用程序提供了全方位的保护。但是,这些机制并不能百分之 百地防御网络应用程序攻击。因为这些应用程序是基于网络的,网络用户与应用程序进行的通讯支持直接的网络攻击,使得已建立的安全防线保护形同虚设。攻击者 意识到了这一点,因此直接的网络应用程序攻击是当前大多数网络攻击类型。

随着网络的发展,特别是移动互联网的发展,网络服务与我们个人生活联系得越来越紧密;办理金融业务,生活缴费,获取资讯等等,都从线下搬到了线上。一个新的时代必将到来或者已经到来,那就是万物互联的时代。 与此同时,网络安全事件频发,安全事故的危害越来越大,互联网从业者需要越来越注重安全问题。这里分享一些心得给刚刚接触网络安全的开发者们。

为了平衡这种状况,应用程序开发人员必须有意识来建立防御攻击的策略。他们必须要考虑一些构成一系列网络攻击方式的因素:

一、“安全”是什么

  • 大多数的网络应用程序开发人员都不是安全方面的专家,也不会意识到大多数存在的问题。
  • 许多开发人员都不会意识到网络应用程序开发中的最佳安全实践方式。
  • 功能通常最受人重视,而安全性问题都会在最后才会得到处理。
  • 部署网络应用程序的环境通常都会发生变化,包括应用程序代码自身的更新,以及基础设施的变化。有一些更改没有受到安全领域专家的足够重视。

对于没有接触过安全的开发人员来讲,一个常见的问题是:如何写出安全的代码或做出安全的系统。为了找到答案,我们就必须对安全的定义有所了解。“安全”是一个很宽泛的概念,那这里给出一个很宽泛的定义:被保护的对象不被破坏、篡改、泄漏,系统功能可以正常运行。是不是一头雾水?“安全”定义的关键问题是,什么是需要保护的对象,保护的需求是什么;没有明确的安全的需求,我们就无法谈论安全。比如常见的安全问题有,通信协议是否安全,数据存储是否安全等等;此外还有运行环境是否安全,代码是否安全。所以当我们想要写安全的代码或者实现一个安全的系统之前,我们可以先问问自己,我想要保护的对象是什么。不同的安全的需求,需要做出的安全的防护方式也是不同的。如果不知道你想要的是什么,那么你就不会得到它。

如果每一个应用程序开发人员都考虑以下因素的话,那么他们可以写出更好的代码。

明白了安全的定义,下一个问题是:如何知道实施的安全措施是否足够安全。安全防御和安全攻击是一个动态博弈的过程,就像抗生素和细菌一样,防御和攻击的技术都在进行不断升级。所以我们说没有绝对的安全,安全问题是成本问题。通常我们需要寻找的是如何以最低成本来满足我们安全需求的最佳实践。

  1. 得到培训。
  2. 查找建立的模式。
  3. 将测试集成到开发计划之中。
  4. 及早报告漏洞的存在。

二、如何入门“安全”

本文旨在帮助一些开发人员和部署人员,处理一些影响到 Web 2.0 应用程序的常见网络应用程序安全问题。文中还提供了一些关于移动设备特定安全性问题的介绍。

孙子云“知彼知己,百战不殆”,所以读几本黑客如何攻击和防御的书是一个不错的选择。这些书的内容可能会涉及到一些计算机的基础知识,所以这些知识也是不可少的,否则只能做到知其然而不知其所以然。由黑客攻击和防御的引子,又会引出计算机系统、网络、计算机体系结构、编译原理、虚拟机等等一些基础的知识。

常见的网络漏洞

黑客如何攻击和防御是理论基础,有了理论基础我们可以看看这个真实的世界存在哪些比较流行的安全问题;CWE是通用缺陷,里面列举了很多通用的安全缺陷,我们可以先从最流行的25个问题看起,可以帮助我们在编码的时候避免许多安全问题。如果开发的系统是Web系统,那么OWASP是不容错过的一个资料库;OWASP包含Web常见的问题和最佳实践,可以了解一下OWASP最流行的10个问题。比如SQL注入,这种常见的高发的已经有了几十年历史的问题,在这两个榜单中都有提及。

移动网络应用程序所遇到的网络安全性问题与桌面网络应用程序所遇到的情形很类似。学习更多关于这些问题和反制措施的资源库是 Top 10 Project on the Open Web Application Security Project(OWASP)网站(参见 参考资料)。

接下来我们可以看看业界比较好的安全实践。SEI CERT Coding Standards是一个安全编码标准,分门别类得列出了C、Java等语言常见的安全问题,并且对安全问题做出解释,给我们提供了不安全的代码样例和安全的代码样例。这个规范是一个很好的切入点,帮助我们快速了解安全问题,实践安全编码。

接下来的部分介绍了开发人员必须理解的顶级问题。

三、对“安全”问题的宏观分类

跨网站脚本

安全问题五花八门,令人眼花缭乱,那么这些安全问题是否有共性呢?答案是有的。我们尝试将安全问题分入以下几个宏观类别之中。

在这种一般的攻击中,恶意代码会植入到第三方的受信网站之中。如果 HTTP 请求可以将其注入到最终 HTML 页面上的话,那么跨站点脚本漏洞就向这种攻击开放了。

  1. 不受信的输入、输出

例如,一项服务会接受名为 image 的参数,来接受来自于文件系统的图片,来执行一些处理:

壁立千仞,无欲则刚;如果一个系统没有与不受信的环境进行的交互,那么这个系统的安全问题是比较小的。大多数系统,特别是Web系统,需要和不受信的环境进行交互;在交互过程中,我们需要特别注意的问题有两点:输入是否合法,输出数据是否包含敏感信息。

http://somedomain/myImageProcessor?image=myimage.jpg

输入数据包括并不限于用户输入的参数,传入的文件,读取的环境变量,依赖的运行库等等。如果用户输入的数据超出程序处理的范畴,那么可能造成意想不到的结果。对于这些不受信的数据,我们通常可以限制输入范围,只接受我们可以处理的输入,比如网站注册时对密码的符号有一些限制,就是这种解决方案;我们还可以将输入的数据进行清洗,去除不支持的内容。

一个入侵者可以通过向 image 参数插入 JavaScript 代码,来占用该应用程序。其意图是耗尽错误处理系统的资源。如果一个包含恶意脚本的出错信息会被生成的话,那么入侵者就可以利用这一点了:

对于输出数据我们需要关心输出的内容是否包含敏感信息,比如程序路径、用户名、密码、IP地址等等。如果我们泄漏了服务器的用户名和密码,那么服务器上的所有信息都有泄漏的风险。这需要我们在程序发布之前,仔细检查输出内容。

http://somedomain/myImageProcessor?image=myimage.jpg<script>...malicious code ...</script>
  1. 程序本身有错误

如果出错信息返回图片参数的内容,而不用筛选的话,那么代码就会封闭到 <script> 标签内。脚本有可能访问本地缓存,以攻击网页,甚至更改预呈现页面的内容。通过电子邮件发送恶意链接,或者将它们加入到恶意网页上,就可以利用这些网络漏洞了。

如果程序本身有错误,那么就会给攻击者可乘之机;一旦程序触发到错误逻辑,程序有可能偏离正常的运行流程,比如运行了攻击者提供的程序。

这种概念在 Altoro Mutual 网站上进行了演示,该网站是 IBM® Rational® AppScan® Standard Edition 应用程序用于演示漏洞扫描功能的示例网站(查看 参考资料 中的链接)。

对于C语言来讲,常见的程序错误有空指针引用、内存没有释放、多次释放内存、数组引用越界、返回栈上地址、整数溢出等等。这需要代码编写者提高代码编写质量,尽量减少程序错误。

图 1. Altoro Mutual AppScan 演示站点
网上澳门金莎娱乐 1网上澳门金莎娱乐,

对于Java语言来讲,不存在C语言中的内存管理类似的问题,但一样存在整数溢出、数组引用越界、引用空对象等问题,此外,Java语言还存在错误调用运行时库函数、类型定义错误、序列化和反序列化错误等等Java语言特有的问题。

如图 2 所示,搜索词语“pineapples”向您展示了搜索结果,而不管是否有结果。

  1. 其它错误问题

图 2. 搜索结果会一直显示搜索关键字
网上澳门金莎娱乐 2

我们将其它安全问题归入单独分类,这些安全问题包括并不限于以下几点:

这种结果就是一个线索,告诉您应用程序很容易得到跨网站脚本的攻击。图 3 显示了 <script>alert('attack')</script> 作为搜索关键字输入时的结果。脚本代码会在搜索结果中显示出来,代码会得到执行,而警告窗口也会显示出来。

业务设计错误:如没有经过认证就读取用户信息

图 3. 输入“JavaScript”作为 JavaScript 执行中的搜索词语结果
网上澳门金莎娱乐 3

通信协议不安全:如使用了不安全的加密、散列算法

反制措施

调用的库不安全:如Web Server存在安全漏洞

按照下面的方法来避免跨网站脚本(XSS):

……

  • 不要向用户显示不受信任的输入。
  • 采取措施预处理输入与输出,以删除恶意代码,例如筛选或者 白板列表(定义什么是允许输入的,什么是不允许输入的)。
  • Encode 输出以避免浏览器执行。

四、一些安全实践的建议

对于 Altoro Mutual 来说,一个简单的修复操作将不会返回搜索结果。

安全问题不是纸上谈兵,而是真刀**实践出来的,只有在实践中才能出真知,安全性才能得到提升,这里给大家一些小的建议。

为了进一步深入讨论跨网站脚本以及预防措施,您可以阅读 developerWorks® 文章“IBM Rational AppScan:跨站点脚本攻击深入解析”,或者在 Open Web Application Security Project(OWASP)培训页面上了解到关于跨网站脚本的内容。(参见 参考资料 以得到资源的链接)。

第一个建议是重视安全问题,针对安全问题进行设计和实现,并且针对安全问题进行测试。西方哲人讲“解决问题的第一步是承认问题”,老子讲“知不知”,都是此意。

SQL 注入

第二个建议是发现和利用工具帮助解决安问题。业界已经存在许多工具可以在各个阶段帮助我们检测安全问题。

这种攻击同样关注于找到请求的缺点,然后向网络呈现的输入区域插入一个 SQL 条目。能够插入查询作为输入区域一部分的入侵者可以轻松绕过一个网站的认证机制,并访问数据库。这种攻击,与跨网站脚本一起已经泛滥了。

1.语法检测工具,避免一些低级错误;2. 静态检测工具,在开发过程中,对程序进行静态检测,可以检测程序安全问题,可以分析库文件是否存在漏洞,这是解决安全问题十分有效的手段;老牌的静态检测工具有OCLint,Fortify,Coverity,Checkmarx等,一些新秀也在冉冉升起,例如鉴释的XcalScan;3. 动态检测工具,将程序运行起来检测安全问题;比如可以用Valgrind,Panda等工具;4. 自动化渗透工具,可以模拟渗透行为,对系统进行渗透以发现安全问题;比如有Zed Attack Proxy,W3AF,Wapiti 等等工具。

这种范例向您展示了怎样使用 SQL 注入来耗尽一个结构糟糕的登录应用程序:
一个网络应用程序会催促您输入一个用户名和密码来进行登录,而 SQL 语句是按照下面的方式组织的:

安全问题不是某一个单点问题,它是系统问题,这里没有银弹,没有包治百病的特效药。我们能做的是,在安全问题发生以前,充分了解、模拟、预警问题,并作出有效的防范。我们做的防护越多,攻击者的攻击面就越窄,攻击成本就越高,我们的系统发生安全问题的概率就越低。千里之行,始于足下;现在就开始了解、重视安全问题,正当其时。

String query = "SELECT * FROM users WHERE user ='"username+"' AND password ='"passwd"'";

关于作者

变量 username 以及 password 没有得到细致的处理,并分配给用户在应用程序中输入的值。这就使得一些恶意的用户可以输入 username 之类的值:

Sage Lee 是鉴释软件研发工程师,鉴释成立于2018年,致力于通过使用高级静态分析技术帮助客户降低成本,提高生产力,并确保其软件开发人员具备相应的能力以开发更好、更可靠的软件。Sage专注于软件安全领域超过五年时间;2014年毕业于北京航空航天大学,获得学士学位;在2014-2018年间就职于梆梆安全,负责研发了源代码混淆、加密算法混淆等多个创新型安全软件,取得多项发明型专利。他在技术研发、团队管理、产品化方面,均有一定的经验。

anything' OR 1=1 --

*本文作者:Sage Lee,转载请注明来自FreeBuf.COM,链接:

密码可以是任意值。在这种情况下,假设它是一个星号:*。

对于输入来说,当代码替换 username 以及 password 变量时,结构化的查询是:

SELECT * FROM users WHERE username ='anything' OR 1=1 -- AND password ='*'

该语句解释了密码需求,并插入状况 1=1,这条语句的值一直都是真的。就算没有相关的权限,攻击者也会被确认为一个有效的用户。

这种攻击在 Altoro Mutual 网络应用程序进行了演示(参见图 4)。切换至登录页面,并输入 anything' OR 1=1 -- 的用户名以及任意的字符作为密码,就可以作为管理员登录了(图 5)。该账户有控制其他用户账户的权限。

图 4. 尝试用任意的一个用户名以及一段 SQL 代码作为密码进行登录
网上澳门金莎娱乐 4

图 5. 执行 SQL 注入攻击之后攻击者作为管理员登录
网上澳门金莎娱乐 5

就像跨网站脚本一样,这种攻击是糟糕的或者根本不存在的输入检验和确认系统造成的结果。

反制措施

您可以执行以下操作以防御这种攻击:

  • 不信任来自用户的所有输入。
  • 采取措施来检验用户的输入,例如筛选或者白板列表。

在 Altoro Mutual 案例中,一个可能的解决方案是筛选来自 Username 与 Password 区域的非字母数字字符。

如果您想要得到更多关于 SQL 注入以及可能反制措施的信息,您可以阅读 OWASP 培训页面以了解 SQL 注入(参见 参考资料)。

信息泄露

一个有意志的攻击者可以通过识别缺点来研究一项应用程序。例如,一个攻击者可以按照不同的方式来获取信息:

  • 手动研究应用程序以做到隐藏的目录
  • 系统性地收集例外情况,以查看应用程序是否给出了详细的例外情况
  • 扫描 HTML 以得到揭示应用程序基础及行为具体内容的注释
  • 系统性地输入用户名以找出已存在的账户

Altoro Mutual 应用程序会在系统之中泄露已存在的用户名。例如,在图 6 中,输入一个不正确的用户名和密码会产生这种出错信息:“登录失败:抱歉,在我们的系统中找不到该用户名。请重新尝试。”

图 6. 应用程序清晰地声明系统中没有做到该用户
网上澳门金莎娱乐 6

接下来,入侵者会尝试用户名 jsmith,而 Altoro Mutual 网络应用程序会收到以下的信息:“登录失败:您输入的密码无效,请确认后重新输入密码”。于是,入侵者从以上信息上了解到有一个用户账户名为 jsmith。在此基础之上,入侵者可以把注意力放到破解密码上面,或者使用暴力破解方法来发现密码。

本文由网上澳门金莎娱乐发布于Web前端,转载请注明出处:Web 2.0 桌面与移动应用程序安全性设计【网上澳门金莎娱乐】

关键词: