企业安全实践(基础建设)之WEB安全检查
前言
WebShell、网马或恶意黑链等都是web被入侵后经常出现的产物,传统的特征码或特征函数等方式的安全扫描,已经不满足企业的安全需求,怎么保证WEB代码机上的代码安全,解决此类攻击,是本文的重点。
背景
针对WebShell等恶意脚本的检查,通常安全人员都会抄起各种webshell检查工具针对web目录大扫一通,但是这种情况并不会杜绝此类脚本的诞生,也可能会有遗留等现象,那怎么办呢?
代码部署
我的推荐方式,是从代码部署方法入手。通常稍微大点的企业都有各自的代码发布平台,具有最基本的几个功能如预发布、代码发布、代码回滚等。通常它的流程是这样:
1、开发环境push代码到git仓库中 2、预发布模块拉取最新代码 3、同步代码到线上环境 4、出现问题时,快速回滚版本
参考如图:
我们关注的重点其实是在第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
运行截图
运行如图: