没有钱的安全部之资产安全

作者: SuperFace | 来源:发表于2017-06-20 10:55 被阅读2208次

    0x01 对资产安全的探索

    说到资产安全,估计脑海中就会浮现巡风。使用巡风大半年,感觉巡风特别好用,特别适合中小型企业,最关键的是不用钱就能把握内网资产情况。但是,使用巡风多少会遇到一些问题(最新版的巡风解决这些问题没有我不清楚,我使用的是2017年1月份的版本),比如:

    • 跨网段,巡风部署的位置访问不到怎么办?

    • 无法可视化巡风扫描任务状态,无法对任务进行单次扫描,立即开始扫描等。

    • 巡风独立数据库,无法把数据做好看给老板看。

    • 单点部署的巡风,往往IP会被拉入黑名单。

    以上问题,是针对本安全部使用巡风遇到的水土不服。

    在这个数据的时代,动不动就是大数据,数据收集至关重要。相信大部分企业都有使用或者了解过ELK,那么把巡风与ELK结合使用也许不错,探索巡风与ELK结合使用的方案:

    架构.png

    0x02 选择开源项目

    nmap

    思考:

    • 使用nmap作为主机扫描引擎,python第三方库调用nmap方便,nmap扫描的结果满足需求。

    部署:

    • 安装nmap

    • 安装python库:sudo pip install python-nmap

    Celery

    之前看到有文章提到考虑使用celery,最后却未选择Celery。

    Celery文档

    使用Celery思路

    思考:

    • Celery是Python开发的分布式任务调度模块,实时处理的任务队列,同时也支持任务调度。Celery本身不含消息服务,它使用第三方消息服务来传递任务,Celery支持的消息服务有RabbitMQ、Redis,当然Redis应该是最佳选择。

    • 解决跨网段问题,这里只需要把Celery节点部署到无法到达的网段,并协调开通Celery节点到Redis端口的网络策略即可,所有的扫描任务全部通过Reids调度由Celery来执行。

    • 解决任务状态可视化问题,这里只需要部署Celery的好伙伴Flower就可以完美解决。

    小试牛刀

    部署:

    • 安装python库:sudo pip install redis celery celery[redis]

    Celery分布式架构:

    celery-worker.png

    创建tasks.py(决定worker能做什么)

    import nmap
    from celery import Celery
    app = Celery('tasks', broker='redis://localhost:6379/0')
    
    @app.task
    def hostScan(host, ports, arguments):
            nm = nmap.PortScanner()
            nm.scan(hosts=host, ports=ports, arguments=arguments)
    

    启动Celery worker: celery -A tasks worker -Q master --loglevel=info

    创建run.py(producer)

    from tasks import hostScan
    <br />
    queue="master"
    host="localhost"
    ports="22,80"
    arguments="-Pn -sV"
    hostScan.apply_async(args=[host, ports, arguments], queue=queue)
    

    运行run.py,即可调度worker执行任务,这里worker执行的是主机扫描任务。

    Flower

    Flower是Celery的一个实时监控和管理Web界面工具

    部署:

    • 安装python库:sudo pip install flower

    启动Flower:

    flower --broker=redis://localhost:6379/0 --address=localhost --port=5555

    Flower的任务监控界面如下:

    flower.png

    可以通过Flower监控界面灵活调整任务速率,worker队列等。

    ELK

    具体部署可以参考:没钱的安全部之日志安全

    0x03 解决方案

    开源项目选择完毕,开始动手实现。

    Celery节点文件结构:

    celerynode
    |
    |-- vuldb 漏洞扫描脚本库
    |
    |-- api.py 提供server调用tasks
    |
    |-- tasks.py 芹菜任务列表
    |
    |-- common.py 公用函数库
    |
    |-- Config.py 芹菜配置
    
    • 大量部署Celery节点,启动worker实现分布式。

    • 通过Celery节点执行主机扫描以及漏洞扫描任务,考虑到安全性,不采纳直接把数据压到ES中,而是将所有的数据全部压到Redis,通过logstash来写入ES,最终便可以汇总数据。这里存在的安全问题是Celery拥有Redis的密码,所以对Reids的加固是必然的。

    Server端文件结构:

    server
    |
    |-- lib 
    |
    |-- static 静态文件
    |
    |-- templates html页面
    |
    |-- vul 漏洞扫描引擎
        |
        |-- vuldb 漏洞扫描脚本库
        |
        |-- vulScan.py 漏洞扫描脚本引擎
    |
    |-- monitor 周期验证引擎
        |
        |-- index.py 周期nmap扫描
        |
        |-- verify.py 周期探测port
    
    • Server主要是web界面,可视化执行任务,周期扫描配置等。

    • vuldb漏洞库,依旧使用巡风漏洞库,毕竟大牛更高产,更新poc速度迅猛。

    遇到的问题

    周期执行问题:

    开始,希望选择使用Celery Beat方式来做周期任务,发现无法动态修改,必须重启Celery Beat。最后只能选择开启一条新的线程来监听周期任务。

    漏洞库更新问题:

    这里与单点部署有些不同的是采用分布式,当需要上传新的漏洞文件时,各个节点如何获得新的文件?这里使用Redis的订阅功能解决这个问题。

    import time
    import json
    import os
    from redispool import getStrictRedis
    
    FILE_PATH = os.path.split(os.path.realpath(__file__))[0] + '/vuldb/'
    
    if __name__ == '__main__':
        r = getStrictRedis()
        p = r.pubsub()
        p.subscribe("updateplugins")
        while True:
            try:
                message = p.get_message()
                if message:
                    m = json.loads(message["data"])
                    filename = m["filename"]
                    content = m["content"]
                    f = open(FILE_PATH + filename, "w")
                    f.write(content)
                    f.close()
                time.sleep(10)      
            except Exception as e:
                pass 
    

    Server端上传文件后,通过updateplugins频道推给各个节点,完成更新。

    0x04

    这里本人简单实现了一下以上想法:

    界面.png

    将任务结果压到ELK以后,便可以通过kibana可视化查看目前状况,这里放一个测试数据的面板:

    kibana.png

    最终粗糙的轮子出来了,希望能给有需要的人提供帮助吧。

    最后还是上个码,有兴趣部署探讨来吧来吧:

    https://github.com/superhuahua/xunfengES

    相关文章

      网友评论

      本文标题:没有钱的安全部之资产安全

      本文链接:https://www.haomeiwen.com/subject/zyqyxxtx.html