文档章节

几点基于Web日志的Webshell检测思路

slyso
 slyso
发布于 2016/02/29 20:39
字数 4237
阅读 1630
收藏 5
点赞 2
评论 0

1 Web日志与Webshell的关联

Web日志是 Web 服务器(如IIS、Apache)记录用户访问行为产生的文件,标准的 Web 日志是纯文本格式,每行一条记录,对应客户端浏览器对服务器资源的一次访问典型的日志包括来源地址、访问日期、访问时间、访问 URL 等丰富的信息,对日志数据进行分析,不仅可以检测到可疑的漏洞攻击行为,还可以提取特定时间段特定 IP 对应用的访问行为。

Web日志的格式虽略有不同,但记录的内容基本一致。这里以IIS服务器下W3C格式的日志为例,如图1。

图1 日志示例

本文实验数据来自一台曾被入侵的IIS服务器脱敏后的日志文件,日志时间范围为2013年6月-2014年6月,该服务器采用W3C日志格式,默认记录字段如图2。

图2 日志文件实例

各字段说明如下。

date:发出请求时候的日期。

time:发出请求时候的时间。

s-sitename:服务名,记录当记录事件运行于客户端上的Internet服务的名称和实例的编号。

s-ip:服务器的IP地址。

cs-method:请求中使用的HTTP方法,GET/POST。

cs-uri-stem:URI资源,记录做为操作目标的统一资源标识符(URI),即访问的页面文件。

cs-uri-query:URI查询,记录客户尝试执行的查询,只有动态页面需要URI查询,如果有则记录,没有则以连接符-表示。即访问网址的附带参数。

s-port:为服务配置的服务器端口号。

cs-username:用户名,访问服务器的已经过验证用户的名称,匿名用户用连接符-表示。

c-ip:客户端IP地址。

cs(User-Agent):用户代理,客户端浏览器、操作系统等情况。

sc-status:协议状态,记录HTTP状态代码,200表示成功,403表示没有权限,404表示找不到该页面,具体说明在下面。

sc-substatus:协议子状态,记录HTTP子状态代码。

sc-win32-status:Win32状态,记录Windows状态代码。

通过Web日志,我们可以知道在某一个时刻,某个访客访问了服务器的某个文件。经过分析,Webshell的访问特征通常包括特征文件名、特征参数、访问频率、是否为孤立页面等。说明如表1所示。


上述特征皆可通过对Web日志条目进行特征匹配和访问频率统计得到。

2 检测思路的提出

本文对基于Web日志的Webshell检测思路如下,在对日志文件进行预处理后,分别对日志记录进行文本特征匹配、统计特征计算与文件关联性分析,最后对检测结果汇总,列出疑似的Webshell文件。

2.1日志预处理

基于检测Webshell的目的,需要对原始的Web日志记录进行提取、分解、过滤、删除和合并,再转化成适合进行程序处理的格式。

日志预处理的步骤如下,

1)        数据清理

首先,由于Webshell通常为脚本页面,因此可删除静态的网站文件访问记录,如文件后缀为html、jpg、ico、css、js等,但需要注意,当网站存在文件包含漏洞或服务器解析漏洞的时候,需要注意异常文件名或URL,如“bg.asp:.jpg”和“/databackup/1.asp/imges/page_1.html”,此类文件名或URL也能具备Webshell功能,因此需对此种情况建立特征库进行排除。

其次,删除日志记录的多余字段,包括空字段以及和Webshell访问无关的字段,比如s-sitename、sc-substatus和sc-win32-status。

最后,需要删除用户访问失败的记录,比如sc-status字段值为404,表示该文件不存在,此条记录可以删除,尽可能多得排除冗余日志记录。

2)        访客识别

访客识别的目的是从每条日志记录里把访客和被访问页面关联起来,通常情况下可以通过cs-username、c-ip和cs(User-Agent)标识一个访客,网站未设置登录功能时,可以采用IP和User-Agent来标识一个访客。初步分析时,可以认为不同的IP地址代表不同的用户,其次,在NAT(Network Address Translation,网络地址转换)技术普遍应用的情况下,同一IP下可能存在多个用户,这个时候可以结合User-Agent进行判断,User-Agent通常会因为操作系统版本和浏览器版本而有所变化。如果IP地址和User-Agent都一样,也可以通过分析页面访问的规律来分析是否存在多个访客。在访客识别中,可以注意识别网络爬虫程序,如cs(User-Agent)字段为“Baiduspider”,可以认为是百度爬虫,在Webshell的检测中,这里日志记录可以排除。

3)        会话识别

会话(session)识别的目的是为了分析访客在浏览站点期间的一系列活动,比如访客首先访问了什么页面,其次访问了什么页面,在某个页面提交了某个参数。通过分析多个用户的访问序列和页面停留时间,可以从日志中统计页面的访问频率和判断孤立页面。

2.2文本特征匹配

通过本地搭建服务器环境,对大量Webshell页面进行访问测试和记录,建立Web日志的文本特征库

在所有文本信息中,主要提取Webshell在Web日志访问中的URI资源(对应字段cs-uri-stem)特征和URI查询(对应字段cs-uri-query)特征。特征示例如表2。


为了提高匹配覆盖率,通常将一类静态特征归纳成正则表达式的方式进行匹配,例如正则表达式“[0-9]{1,5}\.asp”表示匹配文件名为一到五位阿拉伯数字的后缀为asp的文件。

除了基本的特征库的检测,为提高Webshell文件的覆盖面和对未知Webshell 的检测能力,可采用支持向量机(Support Vector Machine,SVM)机器学习算法,通过对正常网站文件的访问特征集和Webshell文件访问特征集进行训练,来提高从Web日志中检测Webshell的能力。

2.3基于统计特征的异常文件检测

在统计特征中,主要考虑网页文件的访问频率,访问频率指的是一个网页文件在单位时间内的访问次数,通常正常的网站页面由于向访客提供服务因此受众较广,所以访问频率相对较高。而Webshell是由攻击者植入,通常只有攻击者清楚访问路径,因此访问频率相对较低。

值得注意的是,网站开始运营时就会存在一定数量的正常页面,而Webshell通常在一段时间后才会出现,因此统计和计算页面访问频率的时候,针对某一页面,要采用该页面第一次被访问到最后一次被访问的时间段作为统计区间,然后计算单位时间内的访问次数,得到访问频率。需要说明的是,单凭访问频率特征,只能找出异常文件,无法确定一定是Webshell,一些正常页面的访问频率也会较低,比如后台管理页面或者网站建设初期技术人员留下的测试页面访问频率也较低。

这里用f(A) 表示计算后的网站页面A的访问频率,Tfirst(A)表示网站页面A首次被访问的时间,Tend(A) 表示网站页面A最后一次被访问的时间,COUNTFE(A)表示网站页面A在时间Tfirst(A)到Tend(A)期间的被访问次数。

因此,网站页面A的访问频率计算如下,

时间单位可根据需要选择小时、天、星期、月等。

2.4基于文件出入度的文件关联性检测

文件关联性主要是指网页文件之间是否有交互,即是否通过超链接关联起来引导用户访问。而孤立文件通常是指没有与其他页面存在交互的页面,一个网页文件的入度衡量的是访客是否从其他页面跳转到该页面,同理,一个网页文件的出度衡量的是访客是否会从该页面跳转到其他页面。正常网站页面会互相链接,因此会有一定的出入度,而Webshell通常与其他网站页面没有超链接,通常出入度为0。

需要注意的是,什么是孤立,与其他页面的交互度为多少算孤立,都是相对的。而且,有的Webshell也会有一定的出入度,比如当Webshell采用超链接列出网站目录中的文件的时候,就会产生与其他页面的交互。当需要多个脚本协同作用的Webshell 也会产生交互。同样,单凭文件出入度特征,只能找出异常文件,无法确定一定是Webshell,一些正常页面的出入度也会较低,比如特意隐藏的独立后台管理页面或者网站建设初期技术人员留下的独立测试页面出入度也较低。

网页文件相互链接示意图如图3所示。

图3网页文件链接示意

如上例所示,本文对上述网页文件出入度的统计如下,

index.asp:出度为2,入度为1;

Article_Show.asp:出度为1,入度为1;

Photo_View.asp:出度为0,入度为1;

test.asp:出度为0,入度为0 ,判断为孤立文件。

3 检测方法可行性验证

本文的重点在于提出一种从Web日志中检测Webshell的思路,找出可行的检测方法。本章节通过对实际的被入侵站点的日志记录进行分析,通过对比正常网页文件与Webshell在文本特征、统计特征和文件关联性特征,对第2章节提出的检测方法进行可行性验证。

首先要考虑的是对照组的设置,也就是正常文件组和Webshell文件组的选取,本文实验数据来自一台曾被入侵的IIS服务器脱敏后的日志文件与Web目录文件。首先采用基于本地文件特征的Webshell查杀工具“D盾Webshell查杀工具”,对测试的Web目录文件进行检测,检测结果如图5所示。

图5 D盾查杀结果

在“D盾Webshell查杀工具”检测结果的基础上,结合人工判断,最终选取10个确定的Webshell文件作为Webshell文件组。

然后对正常网页文件,根据对网站目录的分析,基于涵盖不同目录深度和页面功能的考虑下,人工选取10个文件作为正常文件组。

正常文件组和Webshell文件组选取情况如表3所示。


3.1文本特征对比

分别统计正常文件组和Webshell文件组的URI资源(对应字段cs-uri-stem)特征和URI查询(对应字段cs-uri-query)特征,看是否有较为明显的区别。如表4所示。


由上图可以知道,Webshell文件和正常网页文件在日志中的访问特征有较为明显的区别,采用模式匹配和机器学习的方式进行分类检测思路可行,且便于实施。

3.2统计特征计算和对比

分别统计正常文件组和Webshell文件组的访问频率,看是否有较为明显的区别。如表5所示。

通过对实验数据进行分析,可得出如下结论。

1)        在目录深度一致,和起始时间段较长的情况下(以大于30天为判断依据),正常网页文件的访问频率明显高于Webshell文件。

2)        目录深度较高的正常网页文件,/bbs/zW7/index.asp在三级目录下,访问频率也会较低,因此判断是否为Webshell文件时,要把访问频率和目录深度结合起来进行考虑。

3)        单从Webshell文件的访问频率来看,有的数据特征呈现访问频率较高,仔细分析日志发现,该类Webshell往往是被攻击者当做一次性后门使用,起始阶段只有1天,而且访客单一,且有时攻击者会对自己上传的Webshell文件进行自动化的利用和扫描,导致较短时间内出现大量访问行为,呈现高频访问特征,如bg.asp;.jpg。在这种情况下,仅凭借访问频率难以判断。经过分析和思考,为了准确判断此类Webshell,需要再结合文件的起始时间段和单位时间的独立访客数进行综合判断,当某个网页文件的呈现起始时间段较短,单位时间独立访客数较少的特征时,可首先判定为异常文件,再结合访问频率进行分析。这样便能有效解决误报问题。

通过测试数据可以看出,在基于Web日志进行Webshell检测的过程中,单凭网页文件访问频率特征,误报率较高。需要结合网页文件目录深度、起始时间段和单位时间独立访客数等特征进行综合判断。而这3类特征,也可从Web日志中轻易得到。

综上所述,基于访问频率计算与网页文件目录深度、起始时间段和单位时间独立访客数等特征相结合的Webshell检测方法可行。

3.3页面关联性分析对比

分别统计正常文件组和Webshell文件组文件是否能从Web日志中发现多次出现的访问序列,访问序列反应当前页面与网站其他页面的关联性,若无,则判断为孤立文件。如表6所示。

实验数据显示,正常网页文件通常存在互相关联,而Webshell文件通常不存在文件之前的关联,关联性区分明显。原因是正常网页文件处于网站架构设计会互相设置超链接,而Webshell文件往往是攻击者通过网站漏洞直接上传或者通过已存在的Webshell上传到站点目录下的。

而通过对Web日志进行分析发现,Web日志中保留了曾经存在过但是之后被删除的Webshell的访问记录,使得通过Web日志检测Webshell文件更加全面,弥补了本地Webshell文件检测无法追溯历史攻击的不足。

综上说述,通过从Web日志中分析页面关联性来检测异常文件或Webshell的方法可行。

4 结语

本文首先阐述了Web日志和Webshell的关联,然后提出了几点基于Web日志检测Webshell后门程序的检测思路,从文本特征、统计特征和关联性特征三个维度对正常网页文件和Webshell文件进行区分和判断,在初期方法设计的基础上,通过对实际的被入侵服务器的Web日志进行实验和验证,发现并弥补了方法设计的疏漏,证明了上述几点基于Web日志的Webshell检测方法的可行性和有效性。

© 著作权归作者所有

共有 人打赏支持
slyso
粉丝 23
博文 28
码字总数 52229
作品 0
美国
个人站长
浅谈webshell检测方式

一 什么是webshell “web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为匿名用户(入侵者)通过网站端口对网站服务器的某种程...

Tar0 ⋅ 2016/01/10 ⋅ 0

浅谈服务器被黑后的检查工作流程

今天说说以入侵者的角度去谈谈服务器被干掉后,我们该做的哪些防护和检查工作,高手的话都比较熟悉系统加固和安全的问题,对于我等初学者来说,没有做过从事过安全方面工作,所以只能从入侵者...

Tar0 ⋅ 2013/12/09 ⋅ 0

关于PHP中的webshell

一、webshell简介 webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务...

踏雪无痕SS ⋅ 05/16 ⋅ 0

seci-log 1.03 增加web日志分析,新增多种告警

这篇文章是seci-log 开源日志分析软件的升级内容,之前的内容请查看之前的介绍,就不重复发了。我们在上次十种告警(非上班时间访问,非上班地点访问,密码猜测,账号猜测,账号猜测成功、敏感...

赛克蓝德 ⋅ 2015/05/18 ⋅ 6

浅谈大型网络入侵检测建设

博文作者:xti9er[TSRC] 发布日期:2013-07-10 博文内容: 一、前言 伊朗2010年被报出核工厂遭受“超级工厂”(Stuxnet)病毒攻击,蠕虫通过多个漏洞潜伏在工控系统近两年未被发现。相信诸如上...

cnbird ⋅ 2013/07/11 ⋅ 0

烽火18台系列之九-防篡改"魔力三角"

今天借着烽火台系列写一篇关于网页防篡改的文章,因为小编平日里与客户交流发现,目前网页的篡改问题仍然是客户最为头疼的网络安全问题之一。而提到"防篡改",大多数人第一时间想到的是"防篡...

玄学酱 ⋅ 05/17 ⋅ 0

OpenFire后台插件上传获取webshell及免密码登录linux服务器

本次渗透源于高校任务,在渗透过程中发现,对方IP地址段安装有opernfire,服务器8080端口可以正常访问,后面通过了解Openfire是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开...

simeon2005 ⋅ 2017/10/24 ⋅ 0

高收益的笨办法:暴破在Windows提权中的应用

  * 本文作者:yangyangwithgnu,本文属FreeBuf原创奖励计划,未经许可禁止转载   千辛万苦拿下的 webshell 不是 www-data 用户就是 networkservice 权限,要想拓展攻击面、扩大战果,提...

FreeBuf ⋅ 05/09 ⋅ 0

基于 giiwa 的 webshell 模块--webshell

基于giiwa框架的webshell模块 关于giiwa, 请参阅 http://giiwa.org 提供web 允许shell命令的功能。 功能介绍 web端运行shell命令 上传文件 下载文件 开发使用 下载所有源码,然后直接导入E...

joe-j ⋅ 2016/10/28 ⋅ 0

[XDCTF-2017-Final] 经验总结

本文首发地址 : https://xianzhi.aliyun.com/forum/ 先知技术社区独家发表本文,如需要转载,请先联系先知技术社区授权;未经授权请勿转载。 先知技术社区投稿邮箱:Aliyun_xianzhi@service....

王一航 ⋅ 2017/11/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue-cli是什么?

vue-cli是什么? vue-cli 是vue.js的脚手架,用于自动生成vue.js+webpack的项目模板,分为vue init webpack-simple 项目名 和vue init webpack 项目名 两种。 当然首先你的安装vue,webpack...

韦姣敏 ⋅ 13分钟前 ⋅ 0

12c rman中输入sql命令

12c之前版本,要在rman中执行sql语句,必须使用sql "alter system switch logfile"; 而在12c版本中,可以支持大量的sql语句了: 比如: C:\Users\zhengquan>rman target / 恢复管理器: Release 1...

tututu_jiang ⋅ 19分钟前 ⋅ 0

java 线程池

概述 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(...

轨迹_ ⋅ 24分钟前 ⋅ 0

Nginx的https配置记录以及http强制跳转到https的方法梳理

Nginx的https配置记录以及http强制跳转到https的方法梳理 一、Nginx安装(略) 安装的时候需要注意加上 --with-httpsslmodule,因为httpsslmodule不属于Nginx的基本模块。 Nginx安装方法: ...

Yomut ⋅ 36分钟前 ⋅ 0

SpringCloud Feign 传递复杂参数对象需要注意的地方

1.传递复杂参数对象需要用Post,另外需要注意,Feign不支持使用GetMapping 和PostMapping @RequestMapping(value="user/save",method=RequestMethod.POST) 2.在传递的过程中,复杂对象使用...

@林文龙 ⋅ 37分钟前 ⋅ 0

如何显示 word 左侧目录大纲

打开word说明文档,如下图,我们发现左侧根本就没有目录,给我们带来很大的阅读障碍 2 在word文档的头部菜单栏中,切换到”视图“选项卡 3 然后勾选“导航窗格”选项 4 我们会惊奇的发现左侧...

二营长意大利炮 ⋅ 41分钟前 ⋅ 0

智能合约编程语言Solidity之线上开发工具

工具地址:https://ethereum.github.io/browser-solidity/ 实例实验: 1.创建hello.sol文件 2.调试输出结果

硅谷课堂 ⋅ 42分钟前 ⋅ 0

ffmpeg 视频格式转换

转 Mp4 格式 #> ffmpeg -i input.avi -c:v libx264 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 -s 1......

Contac ⋅ 53分钟前 ⋅ 0

VCS仿真生成vpd文件(verilog)

VCS仿真生成vpd文件(verilog): https://www.cnblogs.com/OneFri/p/5987673.html SYNOPSYS VCS常用命令使用详解 https://blog.csdn.net/hemmingway/article/details/49382551 DVE是synopsys公......

whoisliang ⋅ 今天 ⋅ 0

Spring Boot启动配置原理

几个重要的事件回调机制 配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListener 只需要放在ioc容器中 ApplicationRunner CommandLineRunner 启动流程......

小致dad ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部