一、背景说明

当前在服务上线前,安全部门都会对服务基线配置进行把关,整个流程可以分为扫描、生成报告、修复三步。

在执行这一流程时当前普遍的做法是半自动化的,扫描和生成报告是自动化的,执行扫描、执行生成报告和修复都是手动的。

这里我们要讲的,一是扫描脚本和生成报告脚本实现,二是执行扫描、执行生成报告和修复自动化实现。

二、项目说明

2.1 检测项

1. 删除示例文档
删除webapps/docs、examples、manager、ROOT、host-manager
禁用tomcat默认帐号
如下所示,将conf/tomcat-user.xml中的所有用户的注释掉(tomcat默认已不启用账号,如果启用请修改用户名及密码)
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
--> 2. 禁止列目录
编缉conf/web.xml,确认serlet标签内是否已存在以下内容
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param> 3. 自定义错误页面
编缉conf/web.xml在倒数第1行之前加
<error-page>
<error-code></error-code>
<location>/.htm</location>
</error-page>
<error-page>
<error-code></error-code>
<location>/.htm</location>
</error-page>
<error-page>
<error-code></error-code>
<location>/.htm</location>
</error-page>
然后在webapps目录中创建相应的401.html\.htm\.htm文件;当然也可以修改成其他任意自定义错误文件。 4. 开启访问日志
修改conf/server.xml,取消注释
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
启用access_log后,重启tomcat,在tomcat_home/logs中可以看到访问日志。
隐藏版本号
使用winrar等工具打开lib/catalina.jar,编缉其中的org/apache/catalina/util/ServerInfo.properties,将server.info和server.number两项的版本号都去掉,改成如下形式然后保存
server.info=Apache Tomcat
server.number=

5. 修改默认监听端口
编缉conf/server.xml把8080改成其他端口 6. 不以root/admin用户运行程序
如非必要不要以root/admin账号运行tomcat。另外注意非root用户默认不能使用1024以下端口。

2.2 总体设计思路

分扫描、生成报告、生成修复脚本、修复脚本四个部分。

扫描直接使用shell脚本做,因为如果使用python等语言,一是要确保目标机装有python二是即使用python最终很多还是使用os模块执行shell命令。

扫描只获取大致结果,不做具体合规分析,因为shell判断合规比较复杂。

生成报告使用python,其读取扫描返回的结果,进行合规分析并生成html报告

生成修复脚本使用python,其解析上步生成的html报告,针对不合规项生成修复脚本。

修复脚本使用shell,修复脚本还会生成简单日志,供修复出问题时排查使用。

为了简化修复脚本完全根据html报告生成,而不自己再去判断当前是否合规需要修复(不然python部分就没什么意义了)

任务 语言 说明 输出
扫描 shell shell只获取大体信息并不进行判断是否合规  $IP_tomcat_info.xml
生成报告 python 解析$IP_tomcat_info.xml生成html报告  $IP_tomcat_report.html
生成修复脚本 python 根据$IP_tomcat_report.html对不合规项生成修复脚本  $IP_tomcat_fix.sh
修复 shell 对不合规项进行修复 $IP_tomcat_fix.log

三、具体实现

目录结构如下图

3.1 手动执行过程

第一步,将1_scanner/tomcat_baseline_scanner.sh上传到要扫描的主机上执行(修改其中CATALINA_HOME为要扫描的tomcat的主目录)

第二步,将1_scanner/tomcat_baseline_scanner.sh在生成的/tmp/$IP_tomcat_info.xml取回放到2_info目录下

第三步,执行3_parse/tomcat_baseline_parse.py其会自动解析2_info目录下的所有$IP_tomcat_info.xml并在4_report目录下生成各自对应的$IP_tomcat_report.html

第四步,点开4_parse即可看到各$IP_tomcat_info.xml对应的$IP_tomcat_report.html

第五步,执行5_parse/tomcat_baseline_fix.py其会根据4_report/$IP_tomcat_report.html在6_fix目录下生成修复脚本$IP_tomcat_fix.sh

第六步,将$IP_tomcat_fix.sh上传到对应主机执行,并将生成的/tmp/$IP_tomcat_fix.log取回放到7_log

3.2 全自动化

我们前面说的是全自动化,但上面明显有很多手动操作。

其实整个流程的自动化可以分为两类,一类是扫描、生成报告、修复本身的自动化,二是扫描、生成报告、修复串联的自动化。

我们2.1已将扫描、生成报告、修复本身实现自动化,串联本质是一串shell命令其自动化我们使用ansible实现。

(很多人都说ansible好用但要我觉得很复杂,比如下面使用用户名密码方式我都指定了ssh用户名密码,传文件还要我手动输用户名密码是智障吧而且找了半天找不到解决办法)

四、操作演示

演示机器----192.168.220.136(ansible、操作系统Kali)、192.168.220.143(目标机、操作系统Ubuntu16.04)

以下操作都是在ansible机器上操作,目标机的工作就只是保证在待扫描目录(现在是/opt/apache-tomcat-8.5.35)下装有tomcat。

4.1 上传程序及安装miniconda

我们这里上传到/opt/sec。

另外由于报告解析和修复脚本生成是python写的,所以需要安装python。

默认ubuntu安装有python,在实验中发现使用apt直接装的python一直运行报错,使用miniconda装的才成功运行(而且python命令一定要使用绝对路径),原因不清楚。

miniconda我装到了/opt/miniconda3,下载地址:https://conda.io/en/latest/miniconda.html

额外需要安装库:pip install lxml requests-file requests-html

4.2 ansible及相关配置

第一步,安装sshpass。ansible本质还是通过ssh登录的,一般的做法是配置免密登录但这比较危险我们这里使用sshpass通过密码登录。

apt-get install sshpass -y

第二步,安装配置ansible。

apt-get install ansible -y

编缉/etc/ansible/hosts在其末尾追加以下内容

[sec_control]
192.168.220.136 ansible_ssh_user=root ansible_ssh_port= ansible_ssh_pass=toor
[sec_control:vars]
xml_parse_path=/opt/sec/tomcat/3_parse
html_parse_path=/opt/sec/tomcat/5_parse [sec_target]
# ip后如果有变量则这些变量是该ip的私有变量
192.168.220.143 ip=192.168.220.143 ansible_ssh_user=ls ansible_ssh_port= ansible_ssh_pass=toor
# 以下是本节所有机器的共用变量
[sec_target:vars]
# 脚本上传的目录
tmp_path=/tmp/ansible
# 扫描脚本在本地的目录
scanner_path=/opt/sec/tomcat/1_scanner
# 扫描报告下载到的目录
info_path=/opt/sec/tomcat/2_info
# 修复脚本在本地的目录
fix_path=/opt/sec/tomcat/6_fix
# 日志文件下载到的目录
log_path=/opt/sec/tomcat/7_log

编缉/etc/ansible/ansible.cfg,将以下项前的#号去掉

host_key_checking = False

4.3 执行扫描并修复

进入ansible目录,执行命令直接完成扫描、生成报告和加固:

ansible-playbook sec.yml 

报告部分截图如下:

二次扫描结果如下:

五、源代码

github:https://github.com/PrettyUp/Security-Baseline

参考:

http://blog.51cto.com/wujianwei/2082880

安全基线自动化扫描、生成报告、加固的实现(以Tomcat为例)的更多相关文章

  1. APP漏洞自动化扫描专业评测报告

    一.前言 目前在业界有很多自动化检测APP安全性的在线扫描平台.为了了解目前国内移动APP在线漏洞扫描平台的发展情况,我进行了一次移动安全扫描平台的评测分析:主要从漏洞项对比.扫描能力对比以及扫描结果 ...

  2. selenium,unittest——自动化执行多个py文件脚本并生成报告

    将多个py文件的自动化脚本顺序运行,并生成报告,运行run_all_case后会自动运行文件内所有test开头的py文件并在指定文件夹report生成由脚本时间命名的报告 脚本执行后结果: 生成报告并 ...

  3. selenium+python自动化91-unittest多线程生成报告(BeautifulReport)

    前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点,刚好在github上有个大神分享了BeautifulReport,完美的结合起来,就能生成报告了. 环境必备 ...

  4. python自动化--批量执行测试之生成报告

    一.生成报告 1.先执行一个用例,并生成该用例的报告 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webd ...

  5. 版本基线自动化之windows

    1.背景: 目前项目维护周期过程中,制作调试版本和对外发布版本次数比较频繁,流程过于繁琐和随意,且打包制作人成为瓶颈,为了规范版本基线流程和实现全员自动化参与,拟定版本基线自动化方案. 2.目标: 版 ...

  6. Jmeter+ant+Jenkins实现接口自动化平台及报告发送

    项目中实现了比较方便的自动化体系,一直没时间总结一下,现抽空整理一番,废话不多说  内容如下: 一.环境准备  jmeter : 编写接口脚本,实现接口测试 ant  :静默执行jmeter脚本,并生 ...

  7. unittest自动化测试举例:自动读取ymal用例&调用接口并生成报告

    用unittest框架写的接口自动化实现过程: 1.编写ymal格式用例: 2.导入ddt模块,该模块的主要功能是帮你读取ymal用例文件,自动获取内容并循环调用函数,具体见代码. 3.导入Beaut ...

  8. cmd执行jmeter命令生成报告的问题。

    现有几个jmeter脚本,准备以命令行的方式执行jmeter脚本,并生成报告. 一.使用python语言处理 1.目录结构 2.说明 jmx目录下是jmeter脚本 result目录下是生成的报告及文 ...

  9. windows10 安装配置 jmeter 自动化接口测试 邮件报告

    1.安装依赖包:JDK(版本:jdk-7u17-windows-x64) 双击即可安装,注意:jdk不要安装中文路径下,jdk和jre安装在同一路径下 1.1:配置jdk环境变量 (1)JAVA_HO ...

随机推荐

  1. ABP入门系列之3——创建实体/Code First创建数据表

    一.首先来看看ABP体系结构 领域层就是业务层,是一个项目的核心,所有业务规则都应该在领域层实现.实体(Entity): 实体代表业务领域的数据和操作,在实践中,通过用来映射成数据库表.仓储(Repo ...

  2. IP通信基础的第一个星期

    IP通信基础不仅是很多专业课程的基础,同时学好它,在以后很多工作上都可以运用到,有网络工程师.通信工程师等等,当然,有些证书也会涉及到IP通信基础,有网络中级高级 CCNA等等. 那么,学好IP通信基 ...

  3. 翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings

    翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings 叶娜老师说:"读懂论文的 ...

  4. Overture里镲片的使用

    在我们使用Overture进行作曲编曲时,往往会增添很多乐器设备来使我们的乐器更丰富,今天我们来一起看看Overture里镲片怎么使用以及它在Overture的什么位置呢? 镲片,是一种乐器,通常指爵 ...

  5. 清华源和中科大源都停止对Anaconda的支持之后,换腾讯云镜像的方法

    直接下载下面的文件解压后放在用户文件夹下即可,windows为"C:\用户\你的用户名\",Linux为"/home/你的用户名/"即用户主目录下. 点我下载 ...

  6. Gradle安装和在Eclipse中的使用

    Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置. 1 ...

  7. Qt如何实现不规则弹窗

    1.无边框: 2.放图: 3.重写鼠标函数(问题是:怎么确定不规则弹窗的响应范围?挖坑待填)

  8. 洛谷 P3381 【【模板】最小费用最大流】

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的 ...

  9. Go 基准测试

        文章转载地址:https://www.flysnow.org/2017/05/21/go-in-action-go-benchmark-test.html 什么是基准测试?      基准测试 ...

  10. 网络流(dinic算法)

    网络最大流(dinic) 模型 在一张图中,给定一个源点s,给定汇点t,点之间有一些水管,每条水管有一个容量,经过此水管的水流最大不超过容量,问最大能有多少水从s流到t(s有无限多的水). 解法 di ...