企业安全实践(基础建设)之WEB安全检查

摘要

WebShell、网马或恶意黑链等都是web被入侵后经常出现的产物,传统的特征码或特征函数等方式的安全扫描,已经不满足企业的安全需求,怎么保证WEB代码机上的代码安全,解决此类攻击,是本文的重点。

前言

WebShell、网马或恶意黑链等都是web被入侵后经常出现的产物,传统的特征码或特征函数等方式的安全扫描,已经不满足企业的安全需求,怎么保证WEB代码机上的代码安全,解决此类攻击,是本文的重点。

背景

针对WebShell等恶意脚本的检查,通常安全人员都会抄起各种webshell检查工具针对web目录大扫一通,但是这种情况并不会杜绝此类脚本的诞生,也可能会有遗留等现象,那怎么办呢?

代码部署

我的推荐方式,是从代码部署方法入手。通常稍微大点的企业都有各自的代码发布平台,具有最基本的几个功能如预发布、代码发布、代码回滚等。通常它的流程是这样:

1、开发环境push代码到git仓库中 2、预发布模块拉取最新代码 3、同步代码到线上环境 4、出现问题时,快速回滚版本 

参考如图:

企业安全实践(基础建设)之WEB安全检查

我们关注的重点其实是在第3步, 我们姑且认为企业代码库中的代码文件是安全的,原理很简单就是服务器代码与代码库文件进行比较,当web机组上任意一台服务器的代码目录进行了修改、添加等敏感操作时,我们就进行报警并备份操作。

为了达到目的,我们首先要知道运维使用什么机制把代码同步到线上环境的。

Git部署

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理,也是很多运维人员推送代码到线上的常用的一种方法,通常是git+运维工具(如saltstack)。

git支持如下命令进行代码变化差异检查,如:

git status  可以列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交的文件 git diff    比较当前工作目录和快照直接的差异变化,具体参数可自行查询 

SVN部署

SVN同Git很类似,它同样是一个版本控制系统,也是很多企业上线的选择,使用也和Git直接发布很类似,通常也是 SVN + 运维工具组成代码上线操作。

SVN支持如下命令进行代码变化差异检查,如:

svn status   查看本地文本和版本库里面的文件的区别 svn diff     对比当前本地的工作拷贝文件(working copy)和缓存在.svn下的版本库文件的区别

Rsync部署

Rsync是Linux系统下的数据镜像备份工具。它支持远程同步、支持本地复制或者与其他SSH、Rsync主机同步,在运维中进行文件同步、代码同步等使用广泛。通常都是GIT作为代码版本管理、Rsync作为代码发布工具实现代码上线。

Rsync支持如下命令进行文件变化差异检查,如:

rsync -n --delete -r   递归检查文件夹下的所有文件和文件夹的变化情况,但并进行不删除操作

开源项目

项目地址

https://github.com/grayddq/CodeInspect 

项目介绍

主要目标是根据代码发布的方式,从根本上实现WEBShell、网马或恶意链接等安全方面的检测。

作者

咚咚呛,如有其他建议,可联系微信280495355

满足安全需求

1、周期内查询网站代码是否进行过修改如:添加、修改、删除等 2、修改的文件进行日志告警、并进行提取备份 3、事件发生时,可立即进行代码同步恢复,删掉添加或修改的内容。 4、支持GIT、SVN、Rsync等代码发布服务 

技术细节

1、支持多级代码目录形式 2、支持GIT、SVN、Rsync等代码发布服务 3、支持变动文件拷贝 4、支持代码恢复功能

测试环境

WIN7 /Centos 7  +   python 2.7.5

目录介绍

PubilcAssetInfo ----CodeInspect.py   #主程序 

部署

直接放置代码到web机组任意路径上,配置如cron.d的定时执行任务,并通过日志服务器收取相关日志,进行告警。

配置

配置CodeInspect.py

# 代码路径 CODE_DIR_LIST = ['/root/tool/PubilcAssetInfo', '/home/test/test_gdd/testbbb', '/home/test/test_gdd/testrsync'] # 代码同步方式 git / svn / rsync TYPE = 'rsync' # 是否执行代码恢复,True / False ACTION = True # 可疑文件存放的地方 TMP = '/tmp/codeinspect/' # rsync服务的登录,替换其中的IP、账户、密码文件等信息 RSYNC_LOGIN_INFO = 'rsync --password-file=/etc/pass.txt [email protected]::web'

日志

日志目录默认:/var/log/codeinspect.log

运行截图

运行如图:

企业安全实践(基础建设)之WEB安全检查

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: