欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

浅谈Flask cookie与密钥的安全性

来源:本站整理 作者:佚名 时间:2019-02-01 TAG: 我要投稿
对于GitHub,我简单编写了一个一次性脚本,该脚本会搜索secret_key,然后尽可能多地下载commit以及文件。对于StackOverflow,我尝试遍历每个可能的文本,然后使用如下正则表达式来匹配秘钥值:

图5. 用来识别秘钥的正则表达式
我花了一周时间在我的VPS上爬取GitHub数据,结合我从StackOverflow上提取的每篇文章、评论后,我最终得到了37069条不同的秘钥值。
破解签名
现在我们手头上已经有一份字典,也知道cookie及部分Flask会话管理代码,接下来我们可以使用每个秘钥值来匹配cookie,判断签名是否有效。如果没有出现任何错误,则表明我们获得了有效的签名,这意味着我们已经找到了服务器的私钥!

图6. 会话破解示例应用
制作会话cookie
如果脚本运行成功,那么现在我们已经获得了服务器的私钥。现在我们可以使用同样的代码,但此时我们并不“加载”已有的会话,而是“转储”会话,使用任意数据来创建cookie。

图7. 构造新的会话
如果我们现在向同一个服务器发起请求,服务器应该会接受我们构造的cookie,因为这个cookie与服务器的秘钥匹配,这样服务器会认为我们已经成功登录。

图8. 使用我们构造的cookie来绕过服务端认证
这里指出的是,虽然我们可以修改会话,但并不意味着我们可以立刻绕过身份认证机制。并非所有的系统都使用同样的方法构建,我们可能需要进一步研究,确定具体情况,以及是否能在实际环境中使用这种技术。
 
五、Flask-Unsign
由于在分析Flask对会话的处理过程中我做了不少操作,因此我决定将代码集成到一款方便使用的命令行工具,使大家能够扫描自己的服务器是否存在类似问题。
大家可以在命令行中使用pip来安装该工具,命令如下:
$ pip install flask-unsign[wordlist]
如果大家不需要庞大的字典文件,只想使用代码,也可以忽略其中的[wordlist]命令。
$ pip install flask-unsign
大家也可以访问GitHub阅读源代码。
使用方法
Flask-Unsign主要有3种使用场景:对cookie的解码、签名以及解除签名(破解),代码支持HTTP协议,因此用户无需打开浏览器:

图9. 使用Flask-Unsign破解并构造会话
 
六、情况统计
现在可能有人会有问题:实际环境中这种攻击方法是否有效?为了测试这一点,我和Rik van Duijn(Twitter)利用Shodan简单统计了一下有多少设备可能在使用Flask框架,结果如下:

图10. 大约有88,000台服务器在使用Flask
然后我们将目标限定在立刻返回会话cookie的那些服务器(因为想查看完整的Shodan数据较为昂贵,并且爬取每台主机然后定位会话cookie也是动作较大的一种行为,可能会让我的路由器不堪重负,我的ISP可能也会介入,询问我的具体动机)。

图11. 结果缩小到1,500台服务器
下载搜索结果后,我开始分析我能利用之前的字典成功破解多少个会话。
服务器正在运行Werkzeug并不意味着它们使用的是Flask框架。此外有些应用的信息会被其他web服务器覆盖(如Nginx)、有些服务器不会立刻设置cookie、有些服务器前端存在防火墙,这些我们都没有考虑,因此下面给出的统计数据并不全面。

图12. 所有有效会话中有超过28%会被成功破解
最初我在MacBook上暴力破解会话,但很快我就意识到MacBook对多线程Python的处理并不高效,因此我切换到另一台(性能稍好的)游戏主机来运行脚本,整个任务大概花了20分钟。
剔除非签名的cookie后(大部分为服务端cookie,或者与Flask使用相同的命名约定及基本代码的其他框架),我得到了1242个有效的会话。将这些会话输入Flask-Unsign进行处理后,有352个会话被成功破解,破解率已经超过了28%。在这352个会话中,我只用到了78个不同的秘钥值。

图13. 10大常用的秘钥
 
七、缓解措施
有各种方法可以避免这种问题。首先也是最明显的办法就是保证我们所使用的秘钥的安全。此外,我们还可以考虑如下措施:
使用随机化秘钥
不使用容易被猜出的秘钥,而使用完全随机的值。理想情况下,每次启动应用时我们都应该将秘钥设置为随机值,但这样对用户体验可能不是很好,因此每次重启服务时用户会话都会过期。

上一页  [1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载