1. 首页 > 站长

网站渗透测试 日志溯源技术与密码授权机制分析

在众多渗透测试中客户想要了解攻击溯源查找问题,我们Sine安全在日常网站安全检测过程中了解知道黑客是如何攻击和上传木马并进行篡改,以及如何查找日志分析攻击者是通过哪些脚本入口文件进行入侵的,那么本节由我们资深的渗透测试主管技术来为大家讲解。

6.9.1.1. 基于日志的溯源

使用路由器、主机等设备记录网络传输的数据流中的关键信息(时间、源地址、目的地址),追踪时基于日志查询做反向追踪。 这种方式的优点在于兼容性强、支持事后追溯、网络开销较小。但是同时该方法也受性能、空间和隐私保护等的限制,考虑到以上的因素,可以限制记录的数据特征和数据数量。另外可以使用流量镜像等技术来减小对网络性能的影响。

6.9.1.2. 路由输入调试技术

在攻击持续发送数据,且特性较为稳定的场景下,可以使用路由器的输入调试技术,在匹配到攻击流量时动态的向上追踪。这种方式在DDoS攻击追溯中比较有效,且网络开销较小。

6.9.1.3. 可控洪泛技术

追踪时向潜在的上游路由器进行洪泛攻击,如果发现收到的攻击流量变少则攻击流量会流经相应的路由。这种方式的优点在于不需要预先部署,对协同的需求比较少。但是这种方式本身是一种攻击,会对网络有所影响。

6.9.1.4. 基于包数据修改追溯技术

这种溯源方式直接对数据包进行修改,加入编码或者标记信息,在接收端对传输路径进行重构。这种方式人力投入较少,支持事后分析,但是对某些协议的支持性不太好。 基于这种方式衍生出了随机标记技术,各路由以一定概率对数据包进行标识,接收端收集到多个包后进行重构。

6.9.2. 分析模型

6.9.2.1. 杀伤链(Kill Kain)模型

杀伤链这个概念源自军事领域,它是一个描述攻击环节的模型。一般杀伤链有认为侦查跟踪(Reconnaissance)、武器构建(Weaponization)、载荷投递(Delivery)、漏洞利用(Exploitation)、安装植入(Installation)、通信控制(Command&Control)、达成目标(Actions on Objective)等几个阶段。

在越早的杀伤链环节阻止攻击,防护效果就越好,因此杀伤链的概念也可以用来反制攻击。

在跟踪阶段,攻击者通常会采用扫描和搜索等方式来寻找可能的目标信息并评估攻击成本。在这个阶段可以通过日志分析、邮件分析等方式来发现,这阶段也可以采用威胁情报等方式来获取攻击信息。

武器构建阶段攻击者通常已经准备好了攻击工具,并进行尝试性的攻击,在这个阶段IDS中可能有攻击记录,外网应用、邮箱等帐号可能有密码爆破的记录。有一些攻击者会使用公开攻击工具,会带有一定的已知特征。

载荷投递阶段攻击者通常会采用网络漏洞、鱼叉、水坑、网络劫持、U盘等方式投送恶意代码。此阶段已经有人员在对应的途径收到了攻击载荷,对人员进行充分的安全培训可以做到一定程度的防御。

突防利用阶段攻击者会执行恶意代码来获取系统控制权限,此时木马程序已经执行,此阶段可以依靠杀毒软件、异常行为告警等方式来找到相应的攻击。

安装植入阶段攻击者通常会在web服务器上安装Webshell或植入后门、rootkit等来实现对服务器的持久化控制。可以通过对样本进行逆向工程来找到这些植入。

通信控制阶段攻击者已经实现了远程通信控制,木马会通过Web三方网站、DNS隧道、邮件等方式和控制服务器进行通信。此时可以通过对日志进行分析来找到木马的痕迹。

达成目标阶段时,攻击者开始完成自己的目的,可能是破坏系统正常运行、窃取目标数据、敲诈勒索、横向移动等。此时受控机器中可能已经有攻击者的上传的攻击利用工具,此阶段可以使用蜜罐等方式来发现。

6.9.2.2. 钻石(Diamond)模型

钻石模型由网络情报分析与威胁研究中心(The Center for Cyber Intelligence Anaysis and Threat Research,CCIATR)机构的Sergio Catagirone等人在2013年提出。

该模型把所有的安全事件(Event)分为四个核心元素,即敌手(Adversary),能力(Capability),基础设施(Infrastructure)和受害者(Victim),以菱形连线代表它们之间的关系,因而命名为“钻石模型”。

杀伤链模型的特点是可说明攻击线路和攻击的进程,而钻石模型的特点是可说明攻击者在单个事件中的攻击目的和所使用攻击手法。

在使用钻石模型分析时,通常使用支点分析的方式。支点(Pivoting)指提取一个元素,并利用该元素与数据源相结合以发现相关元素的分析技术。分析中可以随时变换支点,四个核心特征以及两个扩展特征(社会政治、技术)都可能成为当时的分析支点。

6.9.3. 关联分析方法

关联分析用于把多个不同的攻击样本结合起来。

6.9.3.1. 文档类

hash

ssdeep

版本信息(公司/作者/最后修改作者/创建时间/最后修改时间)

6.9.3.2. 行为分析

基于网络行为

类似的交互方式

6.9.3.3. 可执行文件相似性分析

特殊端口

特殊字符串/密钥

PDB文件路径

相似的文件夹

代码复用

相似的代码片段

6.9.4. 清除日志方式

kill不会存储

set +o history 不写入历史记录

unset HISTFILE 清除历史记录的环境变量

OAuth

7.1.1. 简介

OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。

OAuth在客户端与服务端之间,设置了一个授权层(authorization layer)。客户端不能直接登录服务端,只能登录授权层,以此将用户与客户端区分开来。客户端登录授权层所用的令牌(token),与用户的密码不同。用户可以在登录的时候,指定授权层令牌的权限范围和有效期。

客户端登录授权层以后,服务端根据令牌的权限范围和有效期,向客户端开放用户储存的资料。

OAuth 2.0定义了四种授权方式:授权码模式(authorization code)、简化模式(implicit)、密码模式(resource owner password credentials)和客户端模式(client credentials)。

7.1.2. 流程

用户打开客户端以后,客户端要求用户给予授权

用户同意给予客户端授权

客户端使用上一步获得的授权,向认证服务器申请令牌

认证服务器对客户端进行认证以后,确认无误,同意发放令牌

客户端使用令牌,向资源服务器申请获取资源

资源服务器确认令牌无误,同意向客户端开放资源

7.1.3. 授权码模式

授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与服务端的认证服务器进行互动。

其流程为:

用户访问客户端,后者将前者导向认证服务器

用户选择是否给予客户端授权

假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI) ,同时附上一个授权码

客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌

认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)

A步骤中,客户端申请认证的URI,包含以下参数:

response_type:表示授权类型,必选项,此处的值固定为 code

client_id:表示客户端的ID,必选项

redirect_uri:表示重定向URI,可选项

scope:表示申请的权限范围,可选项

state:表示客户端的当前状态,需动态指定,防止CSRF

C步骤中,服务器回应客户端的URI,包含以下参数:

code:表示授权码,必选项。该码的有效期应该很短且客户端只能使用该码一次,否则会被授权服务器拒绝。该码与客户端ID和重定向URI,是一一对应关系。

state:如果客户端的请求中包含这个参数,认证服务器回应与请求时相同的参数

D步骤中,客户端向认证服务器申请令牌的HTTP请求,包含以下参数:

grant_type:表示使用的授权模式,必选项,此处的值固定为 authorization_code

code:表示上一步获得的授权码,必选项

redirect_uri:表示重定向URI,必选项,且必须与A步骤中的该参数值保持一致

client_id:表示客户端ID

E步骤中,认证服务器发送的HTTP回复,包含以下参数:

access_token:表示访问令牌,必选项

token_type:表示令牌类型,该值大小写不敏感,必选项,可以是 bearer 类型或 mac 类型

expires_in:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间

refresh_token:表示更新令牌,用来获取下一次的访问令牌,可选项

scope:表示权限范围,如果与客户端申请的范围一致,此项可省略

7.1.4. 简化模式

简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了授权码这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是可见的,且客户端不需要认证。

其步骤为:

客户端将用户导向认证服务器

用户决定是否给于客户端授权

假设用户给予授权,认证服务器将用户导向客户端指定的重定向URI,并在URI的Hash部分包含了访问令牌

浏览器向资源服务器发出请求,其中不包括上一步收到的Hash值

资源服务器返回一个网页,其中包含的代码可以获取Hash值中的令牌

浏览器执行上一步获得的脚本,提取出令牌

浏览器将令牌发给客户端

A步骤中,客户端发出的HTTP请求,包含以下参数:

response_type:表示授权类型,此处的值固定为 token ,必选项

client_id:表示客户端的ID,必选项

redirect_uri:表示重定向的URI,可选项

scope:表示权限范围,可选项

state:表示客户端的当前状态,需动态指定,防止CSRF

C步骤中,认证服务器回应客户端的URI,包含以下参数:

access_token:表示访问令牌,必选项

token_type:表示令牌类型,该值大小写不敏感,必选项

expires_in:表示过期时间,单位为秒。如果省略该参数,必须其他方式设置过期时间

scope:表示权限范围,如果与客户端申请的范围一致,此项可省略

state:如果客户端的请求中包含这个参数,认证服务器回应与请求时相同的参数

在上面的例子中,认证服务器用HTTP头信息的Location栏,指定浏览器重定向的网址。注意,在这个网址的Hash部分包含了令牌。

根据上面的D步骤,下一步浏览器会访问Location指定的网址,但是Hash部分不会发送。接下来的E步骤,服务提供商的资源服务器发送过来的代码,会提取出Hash中的令牌。

7.1.5. 密码模式

密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。

在这种模式中,用户必须把自己的密码给客户端,但是客户端不得储存密码。

其步骤如下:

用户向客户端提供用户名和密码

客户端将用户名和密码发给认证服务器,向后者请求令牌

认证服务器确认无误后,向客户端提供访问令牌

B步骤中,客户端发出的HTTP请求,包含以下参数:

grant_type:表示授权类型,此处的值固定为 password ,必选项

username:表示用户名,必选项

password:表示用户的密码,必选项

scope:表示权限范围

7.1.6. 客户端模式

客户端模式(Client Credentials Grant)指客户端以自己的名义,而不是以用户的名义,向服务端进行认证。

其步骤如下:

客户端向认证服务器进行身份认证,并要求一个访问令牌

认证服务器确认无误后,向客户端提供访问令牌

A步骤中,客户端发出的HTTP请求,包含以下参数:

granttype:表示授权类型,此处的值固定为 clientcredentials ,必选项

scope:表示权限范围,可选项

B步骤中,认证服务器向客户端发送访问令牌,渗透测试中包含的授权模式都要详细的审计和检测,如果对此有更多的想要了解,可以联系专业的网站安全公司来处理,国内做的比较大的推荐Sinesafe,绿盟,启明星辰,深信服等等都是比较不错的渗透测试公司。

声明:OurSeo登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,请读者仅作参考,并请自行核实相关内容。如有侵权请联系我们,会及时删除,如若转载请注明出处。

联系我们

在线咨询:点击这里给我发消息

微信号:wutian08

工作日:9:30-18:30,节假日休息