CSRF攻击:WEB攻击形态的存在
摘要:由于现代浏览器的工作机制,存在一种WEB网络攻击形式,这种攻击形式称为CSRF攻击。这次我们给出了攻击原理,同时给出了服务器端CSRF防御的解决方案。
由于现代浏览器的工作机制,存在一种WEB网络攻击形式,这种攻击形式称为CSRF攻击。过去,我们从攻击的角度分析了这种攻击的原理和操作。这次我们给出了攻击原理,同时给出了服务器端CSRF防御的解决方案。CSRF是现代WEB程序必须面对的常见问题。在许多流行的WEB框架中,CSRF问题直接在WEB框架级别解决。
CSRF攻击原理
CSRF概念:跨站点请求伪造(CSRF)像XSS攻击一样,具有极大的危害。 您可以通过以下方式了解它:
攻击者窃取了您的身份,并代表您发送了恶意请求。 该请求对于服务器是完全合法的,但是它完成了攻击者期望的操作,例如发送电子邮件或代表您发送消息。 窃取您的帐户,添加系统管理员,甚至购买商品,虚拟货币转账等。 如下:Web A是具有CSRF漏洞的网站,Web B是由攻击者构建的恶意网站,用户C是Web A网站的合法用户。
CSRF攻击的原理和过程如下:
1.用户C打开浏览器,访问可信网站A,输入用户名和密码,请求登录网站A;
2.验证用户信息后,网站A会生成cookie信息,并将其返回给浏览器。 此时,用户成功登录网站A,可以正常向网站A发送请求。
3.在用户退出网站A之前,在同一浏览器中打开TAB页访问网站B;
4.网站B收到用户的请求后,返回一些攻击性代码,并发送访问第三方站点A的请求;
5.浏览器收到攻击代码后,在用户不知情的情况下携带cookie信息,并根据网站B的请求向网站A发送请求。网站A不知道该请求实际上是由网站B发起的,因此它将 根据用户C的cookie信息,以C的权限处理请求,导致网站B执行恶意代码。
CSRF防御原理
CSRF保护的关键点之一是验证“用户凭据”。 通过这种机制,可以确定用户的请求是否合法,并确定这是否是跨站点攻击。 因为“用户凭据”存储在cookie中,所以保护机制的处理对象也是cookie数据。 我们需要向受保护的数据添加签名验证,并对数据执行生命周期时间管理,这就是数据过期管理。
Lapis框架是基于Moonscript语言开发的WEB框架。 框架中有CSRF(跨站请求伪造)的保护代码。 它是围绕时间戳和签名验证的CSRF保护设计。 您是否还更新了CSRF处理版本:
Changes
Replaced the CSRF implementation, removed the key parameter and replaced with it randomly generated string stored in cookie.
跨站点攻击的本质是,攻击者持有您的“身份凭证”并冒充相关的攻击行为。
为了防止CSRF的发生,创建了令牌处理机制。 令牌数据结构与时间和加密签名直接相关。 此设计的目的是将时间生命周期管理和签名验证管理添加到“身份凭证”。 获得证书后,有必要在正常业务处理之前确定令牌中的“签名”和时间戳是否有效。 这样可以通过过滤和过滤非法数据来降低CSRF攻击的成功率。
签名和时间戳保护过程
Token产生
1,Token组成
为了防止CSRF攻击,Token需求不能重复,它们需要包含时间戳信息和签名信息。
下图描述了token的数据结构:
-----------------------------------------------------------------------------
| msg | separator | signature |
-----------------------------------------------------------------------------
| key | timestamp | . | Base64(sha256(msg)) |
-----------------------------------------------------------------------------
token由三部分组成:
a)。 消息[msg]:msg本身也包含两个部分:一个部分:随机字符串和过期的时间戳。
b)。 分隔符[separator]:用于分隔味精部分和加密后生成的签名部分,此处为“。”
C)。 签名[signature]:signature。signature签名,是对“msg消息”用特定算法进行加密后的串。
token = base64(msg)格式化..base64(sha256("秘锁", msg))
Token由被Base64的msg编码串+先256加密msg再进行Base64编码,两个串的内容结合。
2.Token加密
首先,根据适当的加密方法对数据进行加密。 在这里,我们通常使用sha256算法,然后执行BASE64格式转换。 然后,我们需要在token字符串中隐式设置到期时间。 该机制必须确保与服务器交互的每个令牌都具有到期时间控件。 令牌过期后,服务器将不处理请求。
3.令牌验证
当用户向服务提出访问请求并在将其提交给服务器之前生成令牌时,服务器需要确定令牌的有效性(令牌是否已过期且签名是否有效)。 一旦传递给服务器的请求中的令牌异常,就可以确定为可疑。 如果不进行处理,则返回异常提示。
Token验证
a。 Token拆箱
首先,接收到的Token被分解,然后是“。” 是一个分隔符,分为msg部分+signature签名部分。
b。 比较签名
对msg部分的base64代码进行反向解码decode_base64(msg),对解码后的msg明文进行相同的encode_base64(sha256(msg))签名字符串转换过程。 如果秘密锁相同,请确定加密数据是否与客户端传递的token.signature相同。 如果它们匹配,则表示令牌有效。
C。 审判时间到期
如果签名有效,则以msg提取时间戳字段数据,并将其与当前系统时间进行比较。 如果到期时间小于当前时间,则此令牌已到期,您需要再次获取该令牌。
过程实现
文本版本的保护原理如上所述。 下面我们将整个保护过程分解为功能,并通过代码形式直接实现。 实际上,它比查看文本描述要简单。
Lua代码如下:
local gen_token = function(key, expires)
--做成一个过期时间戳。
if expires == nil then
expires = os.time() + 60 + 60 * 8
end
--对msg部分进行base64编码。
local msg = encode_base64(
json.encode({
key = key,
expires = expires
}))
--进行sha256哈希。
local signature = encode_base64(hmac_sha256('testkey', msg))
--拼接成一条token。
return msg .. "." ..signature
end
local val_token = function(key,token)
--对输入数据的判空操作
if not (token) then
return nil, 'mssing csrf token'
end
--对token的msg部分,signature签名部分进行拆分。
local msg, sig = token:match("^(.*)%.(.*)$")
if not (msg) then
return nil, "malformed csrf token"
end
sig = encoding.decode_base64(sig)
--对解包后msg,按照相同的加密key:"testkey",重新进行sha256哈希,比对signature,
--如果不一致,说明这个token中的数据有问题,无效的token。
if not (sig == hmac_sha256('testkey', msg)) then
return nil, "invalid csrf token(bad sig)"
end
--对msg进行base64解码,判断其中的key和传入的key是否一致。
--如果不一致说明token也是无效的。
msg =json.decode(decode_base64(msg))
if not (msg.key == key) then
return nil, "invalid csrf token (bad key)"
end
--取出msg部分的时间戳,判断是否大于当前时间,如果大于,说明token过期无效了。
if not (not msg.expires or msg.expires > os.time()) then
return nil, "csrf token expired"
end
end
由于本文提到的CSRF保护是由Moonscript实现的,并最终被翻译成Lua语言,因此令牌编码功能和签名加密算法也基于Lua库相关信息。
核心安全算法库
要实现上述令牌机制,必须具有库函数Bash64和sha256加密工具包库支持。
1.SecureHashAlgorithm和SecureHashAlgorithmBW
该工具包支持sha256加密,并且是纯lua方法的实现。 问题在于这两个软件包分别依赖于lua5.2和lua5.3。
大多数旧系统的操作环境是lua5.1,因为大多数生产环境是lua5.1,由于历史原因,该环境不能临时更改。 如果要将5.2程序迁移到5.1,则还需要迁移lua5.2独有的软件包。 仅在lua5.2升级后才是一个组件:bit32,并且在lua5.3中删除了该组件。 现在,移植的动机不是很大,lua5.1的用户可以考虑使用其他库。
2.加密
这个包不是纯粹的lua实现。 底层加密使用C语言。此外,它还依赖于另一个工具箱libTomCrypt和libTomMath。 源代码位于github上,因此要使此软件包正常工作,您需要手动进行并安装3个源代码工程。
3.LuaCrypto
该软件包的安装使用了luarocks,这相对简单。
luarocks install luacrypto
我们选择此软件包进行加密。 LuaCrypto实际上是openssl库的前端lua调用。 取决于openssl,openssl库显然将支持sha256加密,这比普通的第三方实现要可靠得多。 编写一个简单的加密程序:
local crypto = require("crypto")
local hmac = require("crypto.hmac")
local ret = hmac.digest("sha256", "abcdefg", "hmackey")
print(ret)
ret的结果是以下字符串。
704d25d116a700656bfa5a6a7b0f462efdc7df828cdbafa6fbf8b39a12e83f24
我们需要转换代码。 调用摘要时,指定输出格式为原始二进制数据,然后将其编码为base64数据。
local ret = hmac.digest("sha256", "abcdefg", "hmackey",rawequal)
print(ret)
此时的输出为:
cE0l0RanAGVr lpqew9GLv3H34KM26 m / izmhLoPyQ =
lua-base64
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3858( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了