6.1 验证技术

1、执行验证采用不同的技术

6.2 验证机制设计缺陷

6.2.1 密码保密性不强

1、应用程序常常使用的密码形式

6.2.2 蛮力攻击登录

6.2.3 详细的失败消息

1、尝试不同用户名和密码的登录,分析返回的错误信息,比较差异。有助于攻击。

6.2.4 证书传输易受攻击

1、如果应用程序采用非加密的HTTP连接传输登录证书,处于网络适当位置的窃听者当然就能够拦截这些证书。即使是HTTPS,但如果处理证书方式不安全,仍会暴露。窃听者可能位于:

2、有些Web是在加载登录页面的时候采用HTTP协议,而在验证用户名密码时采用HTTPS。这种做法是不合适的,如果攻击者在适当位置篡改了登录界面实现钓鱼,用户就处理危险位置。

6.2.5 密码修改功能

6.2.6 忘记密码功能

6.2.7 “记住我”功能

1、“记住我”功能实现:

①通过一个简单的cookie执行,如RememberUser=peterwiener,向应用程序提交这个cookie时,应用程序信任该cookie,并建立一个应用程序回话。

②通过cookie,记录一个该用户的标识符,向服务器单提交这个标识符,服务器端验证之后建立一个会话。

③攻击者通过跨站点脚本攻击也可获取这些信息。

6.2.8 用户伪装功能

1、如银行客服。应用程序允许服务台操作员口头验证一名电话用户,然后将银行的应用程序回话转换到该用户的权限下,更方便为其提供帮助。

2、伪装功能缺陷:

①伪装功能可以通过“隐藏”功能的形式执行,不受常规访问控制管理。

②当判断用户是否进行伪装时,应用程序可能会信任由用户控制的数据。

③伪装逻辑中存在的任何缺陷都可能导致垂直权限提升漏洞。

④某些伪装功能能够以“后门”密码的形式执行,该密码可与任何用户一起向标准登录界面提交,作为该用户进行验证。较危险。

6.2.9 证书确认不完善

6.2.10 非唯一性用户名

6.2.11 可预测的用户名

6.2.12 可预测的初始密码

6.2.13 证书分配不安全

1、许多应用程序不在用户与应用程序正常交互的过程中分配新建账户的证书,(通过邮寄或者电子邮件),出于安全考虑,确保电子邮件地址是本人。

6.3 验证机制执行缺陷

6.3.1 故障开放登录机制

6.3.2 多阶段登录机制中的缺陷

1、旨在提高基于用户名和密码的简单登录模型的安全性,通常先通过用户名密码验证身份,再执行各种验证检查。但这些机制往往存在漏洞。

6.3.3 不安全的证书存储

6.4 保障验证机制的安全

6.4.1 使用可靠的证书

1、强制执行适当的最小密码强度要求。

2、使用唯一的用户名。

3、系统生成的任何用户名和密码应具有随机性。

4、允许用户设置足够强大的密码。

6.4.2 安全处理证书

1、应以不会造成非授权泄露的方式创建、保存和传送所有证书。

2、使用公认的加密技术(如SSL)保护客户端和服务器端所有通信。

3、全程使用HTTPS。

6.4.3 正确确认证书

1、确认完整的密码

2、应用程序应在登录处理过程中主动防御无法预料的事件。

3、对验证逻辑伪代码进行仔细代码审查。

6.4.4 防止信息泄露

1、不应通过公开的消息,或从应用程序的其他行为进行推断,来揭示关于验证参数的任何信息。

2、应有单独一个代码组件使用一条常规消息负责响应所有失败的登录尝试。

6.4.5 防止蛮力攻击

1、对验证质询采取保护措施,防止工具化响应质询。

2、使用无法预测的用户名,同时防止用户名枚举。

3、检测到登录失败后禁止再次尝试登录。

4、采用临时冻结或锁定账户的措施。

6.4.6 防止滥用密码修改功能

1、允许密码到期更改密码

2、只能从已通过验证的会话中访问该功能

6.4.7 防止滥用账户恢复功能

1、当用户忘记密码时,通过非常规方式完成账户恢复

2、不使用密码按时之类的特性

6.4.8 日志、监控与通知

1、在日志中记录与验证有关的事件,包括登录、退出、密码修改等

2、应用程序的实时警报与入侵防御功能应对验证过程中的异常事件进行处理

6.5 小结

1、验证功能是应用程序受攻击面中的首要目标,是安全防御机制的核心,也是防御未授权访问的前沿阵地。

6.6 问题

1、在测试一个使用joe和pass证书登录的Web应用程序的过程中,在登录阶段,在拦截代理服务器上看到一个要求访问以下URL的请求:

http://www.wahh-app.com/app?action=login&uname=joe&password=pass

如果不再进行其他探测,可以确定哪3种漏洞?

答:(a)由于证书在该URL的查询字符串中传送,因此,这些证书将面临通过浏览器历史记录、Web服务器和IDS日志或直接在屏幕上显示而遭到未授权泄露的风险。

(b)证书通过未加密HTTP连接传送,因而易于被位于网络适当位置的攻击者拦截。

(c)密码为一个包含四个小写字母的英文单词。应用程序并未实施任何有效的密码强度规则。

2、自我注册功能如何会引入用户名枚举漏洞?如何防止这些漏洞?

答:通常,自我注册功能非常易于受到用户名枚举攻击,因为用户可以选择自己的用户名,并且应用程序不允许用户注册现有用户名。

应用程序可以通过以下两种方法防止攻击者通过滥用自我注册功能来实施用户名枚举攻击:

(a)应用程序可以生成自己的用户名,然后在每名新用户提交了所需的个人信息后向其分配一个无法预测的用户名。

(b)可以在自我注册过程的第一个步骤要求用户输入他们的电子邮件地址。然后,应用程序向用户发送一封电子邮件,该邮件包含一个URL,用户可以使用该URL继续注册过程。如果提供的电子邮件已注册,则在电子邮件中向用户通知这一情况。

3、某登录机制由以下步骤组成:

(a)应用程序要求用户提交用户名和密码;

(b)应用程序要求用户提交值得纪念的词中的两个随机选择的字母。

应用程序为何要求用户分两个阶段提供所需的信息?如果不这样做,登录机制将存在什么缺陷?

答:要求用户提交值得纪念的词中的两个随机选择的字母,而不是整个单词,其原理在于:即使攻击者截获了用户在一次登录过程中提交的所有证书,他仍然无法使用这些证书再次登录,因为这时应用程序会要求用户提交另外两个字母。

如果应用程序在一个步骤中要求用户提交全部所需信息,那么它必须提前选定随机选择的字母,而此时它并不知道正在进行验证的用户的身份。这意味着,即使攻击者只知道值得纪念的词中的两个字母,他仍然可以通过重复加载登录表单,直到应用程序请求那两个单词,从而使用截获的证书登录。

为避免这种缺陷,应用程序必须在用户每次成功登录后选择另外两个单词,并将其存储在用户配置文件中,直到用户再次成功登录。当用户在登录的第一个阶段确认自己的身份后,将从用户配置文件中检索这两个字母,并要求用户提交相同的字母。这样,即使攻击者在一次登录中获取了用户证书,他仍然需要等待非常长的一段时间,直到应用程序再次要求用户提交相同的字母。

4、一个多阶段登录机制要求用户首先提交用户名,然后在后续阶段中提交其他信息。如果用户提交了任何无效的数据,将立即返回到第一个阶段。

这种机制存在什么缺点?如何修复这种漏洞?

答:尝试猜测有效证书的攻击者可以轻松确定单个数据项是否有效。攻击者可以利用应用程序的这种行为将蛮力攻击问题细分成一系列单独的问题。

要避免这种漏洞,可以要求应用程序即使在攻击者提交了无效数据项后仍继续完成所有登录步骤,并在最后一个步骤完成后返回常规“登录失败”消息,而不论是哪个数据项导致了登录失败。这样做可以显著增加攻击者使用蛮力猜测用户证书时所需提交的请求数。

5、应用程序在登录功能中整合了反钓鱼机制。在注册过程中,每名用户从应用程序提供的大量图片中选择一幅特殊的图片。登录机制由以下步骤组成:

(1)用户输入其用户名和出生日期;

(2)如果这些信息无误,应用程序向用户显示他们选择的图片,如果信息有误,则随机显示一幅图片;

(3)用户核实应用程序显示的图片,如果图片正确,则输入他们的密码。

反钓鱼机制的作用在于:它向用户确认,他们使用的是真实而非“克隆”的应用程序,因为只有真正的应用程序才能显示正确的图片。

反钓鱼机制给登录功能造成什么漏洞?这种机制是否能够有效阻止钓鱼攻击?

攻击者可以利用反钓鱼机制将用于猜测有效证书的过程划分成两个阶段。攻击者可以通过两次完成步骤(1)来核实特定用户名和出生日期是否有效。如果两次返回了同一幅反钓鱼图片,则说明猜测的证书肯定有效;否则即无效。攻击者可以通过脚本攻击迅速遍历目标用户的所有出生日期,从而猜测出正确的值。

更糟糕的是,这种机制并不能有效阻止钓鱼攻击。克隆Web应用程序将收到用户在步骤(1)中提交的用户名和出生日期,并可以将这些信息直接提交给原始应用程序,以获取在步骤(2)中向用户显示的正确图片。如果告知用户通过该图片来核实应用程序的真实性,则这种机制实际上可能会起到反作用,并可能导致用户登录他们在其他情况下并不会信任的钓鱼网站。

黑客攻防技术宝典Web实战篇第2版—第6章 攻击验证机制相关推荐

  1. 黑客攻防技术宝典Web实战篇第2版—第7章 攻击会话管理

    7.1 状态要求 1.HTTP是无状态的,基于请求-响应模型,每条消息代表一个独立的事物. 2.大多数Web站点实际为Web应用程序,他们允许用户注册登录,购买销售,记住用户喜好,它们可以根据用户的单 ...

  2. 黑客攻防技术宝典Web实战篇第2版—第9章 攻击数据存储区

    9.1 注入解释型语言 1.解释型语言是一种在运动时有一个运动时组件解释语言代码并执行其中包含的指令的语言. 2.编译型语言:它的代码在生成时候转换成机器指令,然后在运行时直接由使用该语言的计算机处理 ...

  3. 黑客攻防技术宝典Web实战篇第2版—第8章 攻击访问控制

    8.1 常见漏洞 1.访问控制漏洞:应用程序允许攻击者执行某种攻击者没有资格执行的操作.各种漏之间的差异在于这个核心漏洞表现方式上的不同,以及检测他们所使用的技巧不同. 2.访问控制分类: ①垂直访问 ...

  4. 黑客攻防技术宝典Web实战篇第2版—第11章 攻击应用程序逻辑

    11.1 逻辑缺陷的本质 1.一般逻辑缺陷表现为设计者或者开发者在思考过程中做出的特殊假设存在明显或者隐含的错误. 11.2 现实中的逻辑缺陷 11.2.1 例1:征求提示 1.功能:如"记 ...

  5. 黑客攻防技术宝典Web实战篇第2版—第5章 避开客户端控件

    5.1 通过客户端传送数据 5.1.1 隐藏表单字段 1.通过对表单中的数据隐藏,暗中更改数值,造成恶意攻击. 5.1.2 HTTP cookie 1.HTTPcookie是通过客户端传送数据的另一种 ...

  6. 黑客攻防技术宝典Web实战篇第2版—第3章 Web应用程序技术

    3.1 HTTP 3.1.1 HTTP请求 1.所有HTTP消息(请求与响应)中都包含一个或几个单行显示的消息头,然后是一个空白行,最后是消息主体(可选). 2.每个HTTP请求的第一行由三部分组成 ...

  7. 黑客攻防技术宝典Web实战篇第2版—第2章核心防御机制

    2.1 处理用户访问 1.大多数Web应用程序采用三层相互关联的安全机制处理用户访问: ①身份验证 ②会话管理 ③访问控制 2.1.1 身份验证 1.身份验证机制是应用程序处理用户访问的最基本机制,用 ...

  8. 黑客攻防技术宝典Web实战篇第2版—第4章 解析应用程序

    4.1 枚举内容与功能 4.1.1 Web抓取 1.利用爬虫可获取页面,即深度搜索技术. 4.1.2 用户指定的抓取 1.用户使用它通过标准浏览器以常规方式浏览应用程序,试图枚举应用程序的所有功能. ...

  9. 黑客攻防技术宝典Web实战篇第2版—第1章Web应用程序安全与风险

    1.1 Web应用程序的发展历程 早期万维网仅由站点组成,显示的是静态文档的信息库. 如今大多数站点是应用程序,服务器与浏览器之间双向信息传递. 随之而来的也有安全威胁. 1.1.1 Web应用程序的 ...

最新文章

  1. 【C++】模板函数的声明和定义必须在同一个文件中
  2. iPhone X的刘海基本上就是一台Kinect
  3. Spring Boot (七)MyBatis代码自动生成和辅助插件
  4. 在R中调用关联规则——Apriori算法
  5. mobi格式电子书_进阶能力 | 了解常见的电子书格式
  6. Docker基本命令入门
  7. 吴恩达《机器学习》--- Logistic分类
  8. /bin、/sbin、/usr/bin、/usr/sbin目录的区别
  9. Trie(字典)树详解
  10. WPF换肤之三:WPF中的WndProc
  11. jquery抽奖转盘java,jquery——九宫格大转盘抽奖实例
  12. 中国各省级行政区对应MODIS区块号
  13. 在c语言中的变量分为三种类型,在C语言中的实型变量分为两种类型,它们是_______和__________ 答案:float double...
  14. python二进制转十进制编程_怎么用python二进制转换十进制
  15. 【ORACLE】详解oracle数据库UTL_ENCODE包各个函数的模拟算法
  16. 朗兰兹纲领:关于数学大一统的伟大构想
  17. 电脑如何设置定时任务、定时执行 —— 不用Windows任务计划程序,也能轻松设定计划任务、定时任务 —— 定时执行专家
  18. php杂谈【基础篇】之_7.PHP涉及的所有英文单词
  19. lumen php命令,lumen添加artisan 命令方法
  20. 一名理想主义的程序员

热门文章

  1. Trip to America for 3 more months
  2. vue动态禁用控件绑定disable
  3. linux百度云备份文件夹,Linux环境下载百度网盘文件
  4. localdatetime 获取天_LocalDateTime的一些用法
  5. Spark高级操作之json复杂和嵌套数据结构的操作
  6. 怎样在页面上查找请求内容_怎样快速裁剪删除PDF文档的页面内容?
  7. using filesort和using temporary
  8. centos7安装3.6版本zookeeper和jdk8
  9. C# DataGridView 动态添加列和调整列顺序
  10. springboot整合H2内存数据库,实现单元测试与数据库无关性