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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容