搜索
查看: 945|回复: 0

攻击检测和防范方法之日志分析

[复制链接]

26

主题

29

帖子

147

积分

我是新手

Rank: 1

积分
147
发表于 2016-7-18 10:59:46 | 显示全部楼层 |阅读模式
1.  引言

针对linux服务器攻击主要包括溢出提权攻击、端口扫描、后门程序植入等攻击手段,而针对web应用程序的攻击则覆盖更加广泛,包括sql注入、xss、命令执行、文件包含、木马上传等漏洞。本文主要考虑如何通过日志分析技术实现对攻击的检测和防范技术。

2.  常见攻击手段

常见的操作系统攻击和web攻击如下:

[/url]   


图1:攻击手段分类

操作系统攻击方法和web的攻击防范很多,本文仅考虑上传攻击手段的检测和防范技术。

环境如下:

操作系统:CentOSrelease 6.4 (Final)

数据库系统:mysql  Ver 14.14 Distrib 5.1.66

中间件环境:Apache/2.2.15(Unix)

Web应用程序环境:DVWA1.0.8

3.  日志配置方法3.1 Linux操作系统日志

日志是Linux安全结构中的一个重要内容,是提供攻击发生的唯一真实证据。Linux中日志包括以下几类:登录时间日志子系统、进程统计日志子系统、错误日志子系统等。

登录时间日志子系统:登录时间通常会与多个陈旭的执行产生关联,一般情况下,将对应的记录写到/var/log/wtmp和/var/run/utmp中。为了使用系统管理员能够有效地跟踪谁在合适登录过系统,一旦触发login等程序,就会对wtmp和utmp文件进行相应的更新。

进程统计日志子系统:主要由系统内核实现完成记录操作。当一个进程终止时,系统就自动记录该进程,往进程统计文件或中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。.

错误日志子系统:其主要由系统进曾syslogd(以及替换版本rsyslogd)实现操作有各个应用系统(FTP、Samba等)的守护进程、系统内核来自动利用syslog向/var/log/secure中添加纪录,用来记录系统错误日志。

审计子系统:审计子系统提供了一种记录系统安全信息的方法,为系统管理员在用户违反系统安全法则时提供及时的警告信息。在用户空间,审计系统由auditd、ausearch等应用程序组成。审计后台auditd应用程序通过netlink机制从内核中接收审计消息,然后,通过一个工作线程将审计消息写入到审计日志文件中,其中,还有一部分消息通过消息分发后台进程dispatcher调用syslog写入日志系统。

表1:常见日志总结



其主要文件格式如下:

1、基于syslogd的日志文件格式。该格式主要采用syslog协议和POSIX标准进行定义,其日志文件的内容采用ASCII文本形式存在。一般由日期、时间、主机名、IP地址和优先级等。大部分应用程序产生的日志采用此种方式。例如FTP日志等。

具体syslog的格式可以参考链接:[url=http://blog.csdn.net/luaohan/article/details/31722225]http://blog.csdn.net/luaohan/article/details/31722225

2、二进制的文件格式。对于各个终端的登录进行记录的日志。该信息通常采用二进制的方式进行存储,无法用用编辑器直接编辑,主要记录内容包括用户名、终端号、登陆IP、登陆使用时间等。

当然本文不仅仅需要考虑上述日志文件,而且需要手工配置history日志、sftp日志以实现能够记录访问操作系统的历史操作命令以及上传下载文件日志。

防火墙日志:在iptables中直接提供日志记录功能。实现了对经过网关的数据包进行记录,由系统的日志功能将其保存在一个特定的日志文件当中,这个文件中的每一行记录了一个经过的数据包的相关信息。

(一)history日志:

该日志记录了大量的用户操作命令,因缺乏日志法则中的安全审计元素,因此通常无法作为直接的日志使用,必须结合具体的场景分析,也存在伪造的可能。

1、  history操作日志配置方法如下:

首先history自身是无法记录日期和时间、IP地址这些信息的,且存在被删除的可能性,对于日志来说,一旦缺乏日期和时间,则基本上可以认为是不可信的,因此所有恶信息都可能伪造,因此需要对history进行加工。

这里我们通过logger来实现配置,logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。logger命令默认的日志保存在 /var/log/messages中

[/url]   


因此可以通过logger将history中的操作命令记录到系统日志中。

具体的配置过程如下:

表2:HISTORY日志配置

具体步骤如下:

1、配置/etc/profile文件,增加配置内容如下:

[url=http://image.3001.net/images/20160713/14684009697852.png]   


图2:History日志配置方法

2、使环境生效以及重启rsyslog服务。

[/url]   


图3:使得配置生效

通过日志配置可以将所有的历史执行命令记录下来,为后续的取证提供证据。

(2)SFTP日志

默认情况下SSHD服务作为linux操作系统管理方法,其自带sftp(Secure File Transfer Protocol,安全文件传送协议)可以为传输文件提供一种安全的加密方法。可以实现命令执行以及文件上传下载功能,且默认上传和下载功能通常日志通常不存在,需要通过配置/etc/ssh/sshd_config配置文件来实现配置,进而实现SFTP日志的记录。

[url=http://image.3001.net/images/20160713/14684010139310.png]   


图4:默认的/etc/ssh/sshd_config配置

通过sshd的sftp-server的简单配置及操作日志的配置说明。

具体的配置过程如下:

表3:sftp日志配置

具体配置步骤如下:

1、配置/etc/ssh/sshd_config文件,增加配置内容如下:

[/url]   

图5:SFTP日志配置

2、重启ssh服务,使其生效。

[url=http://image.3001.net/images/20160713/14684012716660.png]   


3、上传文件后测试发现可以直接记录上传日志

[/url]   


图6:上传文件日志

通过SFTP日志可以有效地审计上传和下载文件执行操作。

另外还需要说明的是,如果/var/log/下通过syslog记录的日志直接被删除时候,对应的服务需要重启。因此rm删除文件时会造成进程终端,无法记录后续的日志记录。运行命令:service syslog restart ;service sshd restart 后正常。

3.2 数据库日志

本文中主要考虑MySQL日志功能包括错误日志、慢查询日志、通用日志、二进制日志等。

本文主要考虑采用通用日志(Generallog)的方式对执行的SQL语句进行记录。因为通用日志是会记录所有的查询操作的,包含任何的SQL语句,因而生成的日志文件会很大,因此通用日志功能开启之后对数据库的性能会有很大的影响[,但对于从安全角度来考虑,在不影响影响性能的前提下可以开启该操作,可以及时的发现安全隐患。

[url=http://image.3001.net/images/20160713/14684012968634.png]   

当然更加具体的配置可以参考:http://drops.wooyun.org/运维安全/16067


图7:MySQL进程

数据库配置方法如下:

默认的mysql数据库配置文件mf.cnf在/etc/目录下。

[/url]   


图8:general log配置方法

配置general log日志完成后,就可以记录任何对数据库的操作了。当然这里的日志记录路径可以根据实际需要进行修改。

具体日志格式如下:

[url=http://image.3001.net/images/20160713/14684013392251.png]   


图9:General log 日志格式

日志文件:/var/run/mysqld/mysqld.log

3.3 中间件日志

中间件是web应用程序的运行支撑软件, 日志已经作为web应用软件的基本功能组建,例如最为广泛的apache、tomcat等web系统软件均支持日志功能,能够实时记录用户访问web的资源的详细情况,同时也能够直接反应用户的行为。

以Apache日志为例,通常日志分为两类:访问日志和错误日志。

1)Apache访问日志:访问日志通常用户记录客户端向服务器发出的请求,根据http协议,这个请求包含了客户端的IP地址、浏览器类型以及请求的URL等信息;服务器收到请求后,根据客户要求返回信息内容到客户端,如果出现错误则报告错误;web服务器将访问信息和状态记录到日志文件中,从而形成完整的访问日志。

为了便于分析 Apache 的访问日志, Apache 的默认配置文件中,按记录的信息不同 ( 用格式说明不同的信息 ) 将访问日志分为 4 类:

普通日志格式 (commonlog format,CLF),common 大多数日志分析软件都支持这种格式。CustomLog/var/log/apache2/access.log common

参考日志格式(referer log format) ,referrer 记录客户访问站点的用户身份。CustomLog /var/log/apache2/referer.log referer

代理日志格式 (agentlog format),agent 记录请求的用户代理。CustomLog /var/log/apache2/agent.logagent

综合日志格式(combined log format),combined 结合以上三种日志信息。通常使用一个综合日志格式文件进行记录,配置为:CustomLog /var/log/apache2/ access.log combined

2)Apache错误日志:该日志记录了服务器运行期间遇到的各种错误 , 以及一些普通的诊断信息 ,比如服务器何时启动、何时关闭等。

这里重点关注访问日志,因为通过访问可以了解当前web应用系统的请求/响应情况。当然所有的日志都会随着时间的增长变大,因此需要配置日志的循环。具体可参考官方文档。

[/url]   


图10:默认访问日志的配置

日志文件路径:/var/log/httpd/access_log

默认情况下,post请求不记录任何的请求数据值,听说可以用mod_dumpio模块,以为可以解决该问题。

配置方法如下:

1、在httpd.conf总找到如下行,并去掉注释

  1. # LoadModule dumpio_module modules/mod_dumpio.so
复制代码

编辑/etc/httpd/conf/httpd.conf文件,去掉注释。

[url=http://image.3001.net/images/20160713/14684013654881.png]   


2、配置日志级别。


  1. #LogLevel warn
  2. LogLevel debug   
  3. DumpIOInput On
  4. DumpIOOutput On
  5. DumpIOLogLevel debug
复制代码

把默认的LogLevel改成 debug,然后打开 DumpIO的请求和响应报文开关。这样,在logs/error_log下面就可以查看到所有的报文data部分。

[/url]   


图11:dumpio_module配置日志级别

Error_log日志结果如下:

[url=http://image.3001.net/images/20160713/14684013877551.png]   


虽然能记录结果,但是日志量太大了。

4.  攻击检测及防范

记下来探讨一下攻击的检测的方法

4.1 操作系统攻防

(一)暴力破解

通过ssh远程连接是运维通用做法。

[/url]   


大体上分为如下几种情况:

通过上述日志可以知道通过/var/log/secure可以检测异常登陆的用户,IP地址、用户名等信息,默认情况下ssh具有登陆次数,超过后断开连接。

为了预防这种攻击,可以采用ssh最大登录次数锁定的方式。

进行如下的配置

  1. # vim /etc/pam.d/sshd               
  2. #%PAM-1.0               
  3. auth       required     pam_sepermit.so               
  4. auth      required     pam_tally2.so deny=5 even_deny_root root_unlock_time=180 unlock_time=180    #增加一行内容               
  5. auth       include      password-auth               
  6. account    required     pam_nologin.so               
  7. account    include      password-auth               
  8. password   include      password-auth               
  9. # pam_selinux.so close should be the first session rule               
  10. session    required     pam_selinux.so close               
  11. session    required     pam_loginuid.so               
  12. # pam_selinux.so open should only be followed by sessions to be executed in the user context               
  13. session    required     pam_selinux.so open env_params               
  14. session    optional     pam_keyinit.so force revoke               
  15. session    include                     
  16. password-auth                     
复制代码

[url=http://image.3001.net/images/20160713/14684014676718.png]   

图12:登陆失败后锁定3分钟

[/url]   


图13:用户被锁定

(二)缓冲区溢出和提权

这里centos6.4存在提权漏洞,首先添加一个用户test,利用脚本如下

1、缓冲区溢出/本地提权需要上传提权脚本,不管是用什么方法,通过sftp还是webshell,总会存在上传的痕迹。

Ø  rz等命令上传,则会存在与/var/log/messages中,因为配置了history日志

Ø  通过webshell上传会检测上传目录是否存在脚本文件,防御手段当然是限制执行权限。

Ø  Sftp上传则会在/var/log/messages中存在上传日志。

Ø  webshell命令执行漏洞/系统命令执行漏洞等攻击手段


提权脚本如下:[url=http://fucksheep.org/~sd/warez/semtex.c]http://fucksheep.org/~sd/warez/semtex.c

这里假设已经爆破了一个用户test,则需要进一步提权。

[/url]   


接下来执行提权操作,chmod给予执行权限,编译提权。

[url=http://image.3001.net/images/20160713/14684015624043.png]   


通过/var/log/messages日志可以明确的看出整个提权过程。

[/url]   


后面的执行命令无法准备区分是否值真正的root执行,但是从这里可以看出并非通过bash命令行的方式获取了root。

另外关于后门的检测,history日志和secure日志中应该可以存在蛛丝马迹。

Linux PAM&&PAM后门:[url=http://drops.wooyun.org/tips/1288]http://drops.wooyun.org/tips/1288

4.2 Web系统攻防

(一)SQL注入攻防

Web的访问日志记录的比较详细的get请求,因此可以通过这些请求和数据库的日志来分析SQL注入信息。

[/url]   


SQL注入通过数据库日志、应用程序日志综合可以分析出来。   

(二)命令执行

命令执行因为是通过web请求发生,因此操作系统命令无法记录web请求日志,智能通过access_log和error_log的dumpio模块检测请求的参数,已发现是否存在异常。

[url=http://image.3001.net/images/20160713/14684015894879.png]   


其他的攻击和检测手段类似。

5.  总结

本文仅仅是给出了一些攻击手段的检测方法和防御手段,当然日志需要不断地扩充和检查才能及时杜绝漏洞的发生。

参考文献

[1] UNIX/Linuc网络日志分析与流量监控[M], 北京:机械工业出版社,2015

[2] 倪继利,linux安全体系分析与编程[M],电子工业出版社,2007年11月1日,25

[3] 谭森,基于日志分析的MySQL数据库取证算法研究[D],上海交通大学硕士学位论文,2015年1月,21



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表