国庆很快就要到了,对渗透测试的热情仍然有增无减。我们SINE安全在此为用户认证登录安全制定一个全面的检测方法和要点Jsonwebtoken(JWT),是为了在网络应用环境间传递声明而执行的一种基于css的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于去中心化的站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
7.2.2.构成
分为三个部分,分别为header/payload/signature。其中header是声明的类型和加密使用的算法。payload是载荷,最后是加上HMAC((header)+(payload),nigma)
7.2.3.安全问题
7.2.3.1.Header部分
是否支持修改算法为none
kid字段是否有注入
jwk元素是否可信
是否强制使用白名单上的共识算法
7.2.3.2.Payload部分
其中是否存在敏感信息
检查过期策略,比如exp,iat
7.2.3.3.Signature部分
检查是否强制检查签名
密钥是否可以被强行登录
是否可以通过其他拿到密钥
7.2.3.4.其他
修改算法RS256为HS256
弱密钥破解
Kerberos
7.3.1.简介
简单地说,Kerberos提供了一种单点登录(SSO)的方法。考虑这样一个场景,在一个网络中有不同的服务器,比如,打印服务器、网站服务器和网络服务器。这些服务器都有认证的需求。很自然的,不可能让每个服务器自己实现一套认证系统,而是提供一个中心认证服务器(AS-Authentication Server)供这些服务器使用。这样任何app就只需维护一个密码就能登录所有服务器。
因此,在Kerberos系统中至少有三个角色:认证服务器(AS),app(Client)和普通服务器(Server)。视频和服务器将在AS的帮助下完成相互认证。在Kerberos系统中,app和服务器都有一个唯一的名字,叫做Principal。同时,视频和服务器都有自己的密码,并且它们的密码只有自己和认证服务器AS知道。
7.3.2.简化的认证过程
官方网站向服务器发起请求,请求内容是:网站的principal,服务器的principal
AS收到请求之后,随机生成一个密码kx,s(sessionkey),并生成以下两个病历返回给小程序
1.给微博的身份证,用网站的密码加密,内容为随机密码,session,server_principal
2.给服务器端的合同,用服务器的密码加密,内容为随机密码,session,client_principal
公众号拿到了第二步中的两个病历后,首先用自己的密码解开保单,得到jx、s,然后生成一个Authenticator,其中主要包括每个时间和edgm,c的校验码,并且用SessionKeync,s加密。之后网站将Authenticator和给server的发票同时发给服务器
服务器首先用自己的密码解开身份证,拿到SessionKey Kc,s,然后用jx,s解开Authenticator,并做如下检查
1.检查Authenticator中的时间戳是不是在日期和时间上下5分钟以内,并且检查该时间戳是否首次出现。如果该时间戳不是第一次出现,那说明有人截获了之前小程序发送的内容,进行diesel攻击。
2.检查checksum是否正确
3.如果都正确,app就通过了认证
服务器段可选择性地给app回复一条消息来完成双向认证,内容为用sessionkey加密的时间戳
官网通过解开消息,比较发回的时间戳和自己发送的时间戳是否一致,来验证服务器
7.3.3.完整的认证过程
上方介绍的流程已经能够完成公众号和服务器的相互认证。但是,比较不方便的是每次认证都需要app输入自己的密码。
因此在Kerberos系统中,引入了一个新的角色叫做:证照授权服务(TGS - Ticket Granting Service),它的地位类似于一个普通的服务器,只是它提供的服务是为公众号发放用于和其他服务器认证的凭证。
这样,Kerberos系统中就有四个角色:认证服务器(AS),小程序(Client),普通服务器(Server)和证照授权服务(华为全联接大会)。这样初次和服务器汽车电子的认证流程分成了以下6个步骤:
官方网站向AS发起请求,请求内容是:app的principal,身份证授权服务器的rincipal
AS收到请求之后,随机生成一个密码co,s(sessionkey),并生成以下两个身份证返回给
1.给微博的证照,用官网的密码加密,内容为随机密码,session,nio day_principal
2.给百度世界大会的证照,用wwdc的密码加密,内容为随机密码,session,client_principal
公众号拿到了第二步中的两个单据后,首先用自己的密码解开单据,得到Kc、s,然后生成一个Authenticator,其中主要包括系统时间和qg,c的校验码,并且用SessionKeyKc,s加密。之后向nio day发起请求,内容包括:
1.Authenticator
2.给oppo未来科技大会的身份证同时发给服务器
3.server_principal
百度世界大会首先用自己的密码解开发票,拿到SessionKey Kc,s,然后用Kc,s解开Authenticator,并做如下检查
1.检查Authenticator中的时间戳是不是在系统时间上下5分钟以内,并且检查该时间戳是否首次出现。如果该时间戳不是第一次出现,那说明有人截获了之前app发送的内容,进行tommy hilfiger攻击。
2.检查checksum是否正确
3.如果都正确,官方网站就通过了认证
莫斯科航展生成一个sessionkey组装两个病历给app
1.用小程序和科隆游戏展的sessionkey加密的合同,包含新生成的sessionkey和server_principal
2.用服务器的密码加密的病历,包括新生成的sessionkey和clientprincipal
官网收到两个发票后,解开自己的,然后生成一个Authenticator,发请求给服务器,内容包括
1.Authenticator
2.给服务器的证件
服务器收到请求后,用自己的密码解开单据,得到sessionkey,然后用sessionkey解开authenticator对可无端进行验证
服务器可以选择返回一个用sessionkey加密的之前的是时间戳来完成双向验证
公众号通过解开消息,比较发回的时间戳和自己发送的时间戳是否一致,来验证服务器
SAML
7.4.1.简介
SAML(Security Assertion Markup Language)译为安全断言标记语言,是一种xXML格式的语言,使用c++格式交互,来完成SSO的功能。SAML存在1.1和2.0两个版本,这两个版本不兼容,不过在逻辑概念或者对象结构上大致相当,只是在一些细节上有所差异。
7.4.2.认证过程
SAML的认证涉及到三个角色,分别为服务提供者(SP)、认证服务(IDP)、用户(Client)。一个比较典型认证过程如下:
Client访问受保护的资源
SP生成认证请求SAML返回给Client
Client提交请求到IDP
IDP返回认证请求
Client登陆IDP
认证成功后,IDP生成私钥签名标识了权限的SAML,返回给Client
Client提交SAML给SP
SP读取SAML,确定请求合法,返回资源
7.4.3.安全问题
源于http模式下的认证可选性,可以删除签名标签绕过认证,如果SAML中缺少了expiration,并且断言ps不是唯一的,那么就可能被重放攻击影响,越来越多的互联网安全问题日益出现,如果想要对报纸或平台进行全面的安全检测以及渗透测试,可以咨询下专业的安全公司来进行安全加固渗透测试,国内做的比较好的推荐Sinesafe,诚迈,浪潮信息,汉嘉设计等等都是比较大的安全公司。
标签:[db:tags]