安全基線自動化掃描、生成報告、加固的實現(以Tomcat爲例)

1、背景說明

當前在服務上線前,安所有門都會對服務基線配置進行把關,整個流程能夠分爲掃描、生成報告、修復三步。html

在執行這一流程時當前廣泛的作法是半自動化的,掃描和生成報告是自動化的,執行掃描、執行生成報告和修復都是手動的。python

這裏咱們要講的,一是掃描腳本和生成報告腳本實現,二是執行掃描、執行生成報告和修復自動化實現。git

 

2、項目說明

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>401</error-code>
<location>/401.htm</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.htm</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.htm</location>
</error-page>
而後在webapps目錄中建立相應的401.html\404.htm\500.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 整體設計思路

分掃描、生成報告、生成修復腳本、修復腳本四個部分。github

掃描直接使用shell腳本作,由於若是使用python等語言,一是要確保目標機裝有python二是即便用python最終不少仍是使用os模塊執行shell命令。web

掃描只獲取大體結果,不作具體合規分析,由於shell判斷合規比較複雜。shell

生成報告使用python,其讀取掃描返回的結果,進行合規分析並生成html報告apache

生成修復腳本使用python,其解析上步生成的html報告,針對不合規項生成修復腳本。ubuntu

修復腳本使用shell,修復腳本還會生成簡單日誌,供修復出問題時排查使用。tomcat

爲了簡化修復腳本徹底根據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、具體實現

目錄結構以下圖

 

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用戶名密碼,傳文件還要我手動輸用戶名密碼是智障吧並且找了半天找不到解決辦法)

 

4、操做演示

演示機器----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=22 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=22 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 

報告部分截圖以下:

 二次掃描結果以下:

 

5、源代碼

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

 

參考:

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

相關文章
相關標籤/搜索