ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 【谈日志的重要性】运维中被低估的日志 * * * * * 古人有句话叫对症下药,如果我们把运维看做是医生给病人看病,则日志就是病人对自己的病况的陈述,很多时候医生需要通过对病人的描述判断病人病情的严重程度,需要给病人什么类型和计量的药物。所以病症就是病人的描述加医生的判断得出的结论,如果再重一点的病就需要再加上更多的化验。因此在医生看病时,病人的描述和化验单上的数据对医生是非常重要的。日志在运维中的作用也是如此。但是非常不幸的是,很多项目的运维中日志被严重的低估。 #### 运维的内容 :-: ![](https://box.kancloud.cn/b700852811aa970261ad1a55cb8a115d_294x247.png) 从上图可以看出,运维中是监控管理和服务的结合,需要关注的点还是非常多的,任何一个点上都有可能引起运维中的问题。所以大多数运维人员的通常状态都是充当消防员救火的角色,哪里有问题哪里去。 下面我们来看一下常用的监控系统,界面做的很漂亮,功能也很多,但是有个问题,就是你会天天盯着这个界面看吗?我感觉绝大多数人不会,监控系统其实最需要关注的是异常点,也就是当系统有问题的时候,系统需要告诉我哪里有问题,然后我们再根据问题的提示信息去分析系统,去处理重点问题,系统的日志这时候就会被用上了。 :-: ![](https://box.kancloud.cn/0f43748eec53311613611fd14267a7e6_554x623.png) 那上面这些内容和日志有什么关系呢? 日志本身是没有价值的,只有对日志进行分析加以利用的时候才会有价值,日志中包含非常多的有用的信息,不光包括运维层面,还包括业务层面,安全层面。很多时候运维系统最需要的是一个统一告警平台,但是告警的依据绝大多数是对日志等进行自动化分析所得出的结论,所以说日志是非常重要的。 #### 什么是日志 简单地说,日志就是计算机系统、设备、软件等按照规则记录的运行信息,具体的内容则取决于日志的来源。例如,Unix操作系统会记录用户登录和注销的消息,防火墙将记录ACL通过和拒绝的消息,磁盘存储系统在故障发生或者在某些系统认为将会发生故障的情况下生成日志信息。日志中有大量信息,这些信息告诉你为什么需要生成日志,系统已经发生了什么。例如,Web服务器一般会在有人访问Web页面请求资源(图片、文件等等)的时候记录日志。如果用户访问的页面需要通过认证,日志消息将会包含用户名。这就是日志数据的一个例子:可以使用用户名来判断谁访问过一个资源。通过日志,IT管理人员可以了解系统的运行、安全状况,甚至运营的状况。 #### 日志能做什么 在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息进行系统的排错,优化系统的性能,或者根据日志的信息调整系统的行为。在安全领域,通过日志可以反映出很多的安全攻击行为,比如,用户登录错误的记录,异常访问等。日志还能够告诉你很多关于网络中所发生事件的信息,包括性能信息、故障检测和入侵检测。日志成为了系统事故发生之后,查明“发生了什么”的一个很好的信息“取证”来源,可以为审计工作作审计跟踪。 从一条日志说起 > 111.88.155.166 - - [17/Dec/2015:13:06:05 +0800] "POST /login HTTP/1.1" 302 0 "http://secilog.abc.com/login?langType=zh" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" 这是一条很普通的nginx中记录的日志,日志的详细内容可查阅相关文档。这里简单说明一下主要的内容。从日志中可以得到访问者的IP,访问的时间,时区,请求的方式,请求页面,返回状态,来源等等信息。仔细一看请求的页面/login就可以猜到只是一个登录请求页面。这条日志记录表示的主要含义是:登录成功。 从这条日志怎么和我们关注的指标对应的,我们下面接着分析。 活跃用户数 活跃用户说一般是指同一天有多少老用户登录过系统。这个时候就会发现,刚才的登录日志中如果放到一天的统计中就可以知道,一天内有多少次成功等登录的次数了,但细心的用户可以发现,不准确,因为用户可以重复登陆,这就会造成重复,说的很对,那我们在细化一下,我们换个角度分析,一天内登录成功的不重复ip的数量。是不是更接近真实的结果呢,我感觉从量级和趋势上已经能说明问题了。 刷单用户 这是个没有标准的说法,我的理解是是同一个人为了某种目的大量注册了很多账号后,然后进行某种操作比如刷单等。这种行为很难100%杜绝,但从这条日志中可以得出一些有意思的发现。如果同一个ip一天登录成功次数过多,比如一天登录了一百次,每次间隔的时间都差不多,说明这个人有刷单嫌疑,可以先找出来然后再进一步的分析。 新增用户 新增用户数的含义是一天内有多少注册成功的用户,这个时候可以类比登录日志,只要把登录日志的url换成注册日志的url就可以发现一天新增的用户数是多少。 恶意注册用户 同理恶意注册用户数也是类似的,一天同一个ip下注册成功的次数非常多。此ip恶意注册的可能性就很大。当然还需要进一步的分析,比如ip是否是一个大楼里面的出口ip,注册后此用户做了什么来判断。 上面的分析举一反三,可以从日志当中可以看出运营中的很多内容,比如浏览商品的排行,用户访问时间,用户来源等等。 下面我们还从这条日志中分析一下安全的行为: > 111.88.155.166 - - [17/Dec/2015:13:06:05 +0800] "POST /login HTTP/1.1" 200 0 "http://secilog.abc.com/login?langType=zh" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" 这还是一条登录日志,唯一和上面登录日志不一样的地方是服务器返回值。一个是302,一个是200.有什么区别的,302的意思是服务器进行过页面跳转,200还是返回此页面,从中就可以理解,这是一条登录失败的记录。很好,有这条记录就可以发现很多的安全行为。 恶意密码猜测,可以理解同一段时间,用户大量的登录失败,返回了很多登录失败记录。从这条定义中就可以发现规律,我们把时间放大到5分钟,当5分钟内,同一个ip有超过20次以上的登录失败行为,基本上可以断定在进行密码猜测。当密码猜测有自动的也有手动的,如果区分呢。 我们看一下这个内容"`http://secilog.abc.com/login?langType=zh`",这个网址的含义是POST数据提交的数据来源是"`http://secilog.abc.com/login?langType=zh`"这个网页,也就是从这个网页发起的。 如果这个地址不对,则极有可能登录失败是因为用户用工具来进行暴力破解的。 同理CC攻击就更容易理解了,同一个ip在很短的时间内访问了大量的请求,基本上可以认为是CC攻击。其他的webshell,sql注入等也可以从日志中分析出部分来,但不是太准确,因为日志中指记录get请求的参数,post参数正常是不记录的。 从上面的分析中可以得知,日志中还是有很多宝贵的东西在里面,只是我们没有发现。 #### 如何分析日志 :-: ![](https://box.kancloud.cn/ed973a00f12260d0338c2ca4ce83276d_554x103.png) 一般日志分析中主要包括以下几个层面,首先是收集日志,然后对日志进行格式化分析,然后进行过滤或者归并,然后对日志进行告警统计分析,然后入库。 收集的主要就是对各种协议的支持,例如syslog,sftp等。 格式化分析是重点,毕竟每种日志的格式不一样。举个例子:下图是一个pix防火墙和ids的日志,通过这对原始日志杂乱无序的内容分析出有意义的维度。通过这些维度后我们得出很多有价值的信息,比如操作系统,协议等等。 :-: ![](https://box.kancloud.cn/51dc1bdd182540eb964c18c8eba457da_554x324.png) #### 日志分析 日志分析中有关键字分析,统计分析和关联分析。 1. 关键字分析就是针对日志中的关键字进行分析。 2. 统计分析是根据一段时间发生的事情的规律进行定性定量的分析。 3. 关联分析用于在海量审计信息中找出异构异源事件信息之间的关系,对于存在关联关系信息的上下文制定合理的审计策略,通过组合判断多个异构事件判断操作行为性质,发掘隐藏的相关性,发现可能存在的违规行为。 这些东西本身很复杂,如果都要从头做工作量很大。当然市场上也有很多比较好的产品支持此功能。比如HP ArcSight,IBM Security QRadar SIEM 等等,但是这些产品都是非常昂贵的产品,有没有可以免费使用的产品呢?有:比如国外的elk,ossim.国产的SeciLog。这几个产品各有优缺点,看大家自己选择了。elk是一个半成品,自己要使用需要做大量的工作,ossim,相对是成品,但是汉化还是不是太好,这两个国外产品对国内使用者的习惯还不是太好。Secilog相对平衡一点。 Secilog的特点是支持syslog、snmp、jdbc、ftp/sftp等协议收集或者采集日志。对日志进行分析,格式化处理,产生告警,同时对原始日志和格式化后的日志进行全文搜索索引的存储,支持采集横向扩展集群,支持海量日志的分析和查询。可以分析linux日志、windows日志、防火墙日志ids日志、业务日志等日志,支持所有文本类型的日志存储和查询,内置16种告警: * 密码猜测攻击 * 非上班时间登录 * 非上班地点登录 * 账号猜测攻击 * 密码猜测攻击成功 * 敏感文件操作 * 高危命令操作 * 主机扫描 * 端口扫描 * 非法外联 * sql注入 * Xss攻击 * 非法访问 * 敏感文件访问 * WebShell攻击 * CC攻击 通过告警规则的设定,很容易的增加其他告警。同时系统通过告警规则配置可以支持业务告警,接口请求异常,恶意刷单,大单告警等。 作者介绍:朱林,一个开发了16年程序的老程序员,热爱开发,有11年的安全开发经验,现任赛克蓝德公司技术总监。