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

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

6.9.1.1. 基于日志的溯源shell

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

6.9.1.2. 路由输入调试技术安全

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

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 <bash process ID> 不会存储
  • 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,绿盟,启明星辰,深信服等等都是比较不错的渗透测试公司。

相关文章
相关标签/搜索