zoukankan      html  css  js  c++  java
  • 运行openvas

    openvas结构框图

     

    说明:

    gsad 是提供给用户配置任务资源的UI接口的程序。

    gvmd 是管理器,主要功能是管理任务和各种资源,当启动扫描任务时,向openvassd发送 扫描请求,接受openvassd的扫描结果。

    openvassd 是扫描器,扫描核心,执行扫描任务,执行nasl脚本。

    openvas 是基于C/S 和B/S架构工作。

    B/S模式 通过浏览器登录gsad ,gsad连接gvmd,使用openvas服务的。安装 gsad gvmd openvassd即可。

    C/S模式 是通过命令行 连接gvmd, 使用openvas服务的。需要安装 gvm-cli gvmd openvassd 。

    命令行的使用要求高一点,需要了解gmp协议和使用的命令,适合老手。

    对于新手来说,建议B/S模式。

    因为官网自带的安装包,一种连接方式是加密的,一种是sock文件方式,都不能很好的抓包分析协议。

    我改了一下代码,gvmd使用 监听 socket 端口方式,但不加密。并且增加了日志。

    gsad 与 gvmd 之前的协议,和gvmd 与openvassd之前的协议 可以通过日志和抓包看到。

    代码路径如下 https://github.com/songnana, 有兴趣的可以看一下。

    运行openvas

    配置openvas

    查看配置openvassd -s

    1.同步feed

    greenbone-nvt-sync       同步feed,花费大约20分钟

    2.运行redis,openvas已经安装了redis的配置文件示例

    redis-server /usr/share/doc/openvas-scanner/redis_config_examples/redis_4_0.conf          #用作特征的缓存

    3.运行openvas

    openvassd

    建立/usr/var/run/openvassd.sock.

    更新配置或者更新feed,需要重新加载配置,发送SIGHUP信号

    kill -1 openvassd

    日志在/usr/var/log/gvm/openvassd.log

    日志完全被/usr/etc/openvas/openvassd_log.conf控制。

    配置文件/usr/etc/openvas/openvassd.conf

    4.运行gvmd

    有inet socket 和unix socket两种运行方式,分别表示监听的socket方式。

    gvmd --listen=127.0.0.1                       #inet socket

    gvmd          #unix socket,建立/usr/var/run/gvmd.sock

    日志在/usr/var/log/gvm/gvmd.log

    日志完全被/usr/etc/gvm/gvmd_log.conf控制。

    5.运行gsad

    gsad 连接到gvmd上,所以根据gvmd的监听方式,也存在两种运行方式。

    gvmd 创建用户

    gvmd --create-user=admin --password=admin

    gsad --http-only --mlisten=127.0.0.1 --mport=9390  #与gvmd的inet socket通信,不加密方式

    gsad --mlisten=127.0.0.1 --mport=9390  #与gvmd的inet socket通信,加密方式

    gsad --munix-socket=/usr/var/run/gvmd.sock        #与gvmd 的unix socket通信

    查看gsad帮助 gsad --help

    # gsad --http-only --mlisten=127.0.0.1 --mport=9390

    现在可以用admin账号登录 127.0.0.1:80端口,访问gsa了,建立task,启动扫描任务。

    # gsad --mlisten=127.0.0.1 --mport=9390

    现在可以用admin账号登录 https://192.168.10.129端口,访问gsa了,建立task,启动扫描任务。

     我的运行脚本如下:

    #!/bin/sh

    iptables -t filter -I INPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT                                  #放开防火墙的拦截
    iptables -t filter -I INPUT 2 -p tcp -m tcp --dport 443 -j ACCEPT

    gvm-manage-certs -a                                                        #产生认证文件

    gvmd --create-user=admin --password=admin                 #创建用户

    greenbone-nvt-sync                #同步特征

    redis-server /etc/redis_4_0.conf                                       #运行redis
    openvassd                    #运行openvassd,等加载完nvt后(也即openvassd只有一个进程时),再启动gvmd和gsad,否则出现僵尸进程,代码有缺陷,我这里加载nvt需要3分钟
    gvmd --listen=127.0.0.1                                                    #启动gvmd,监听本机
    gsad --mlisten=127.0.0.1 --mport=9390         #启动gsad,监听80和443端口

    然后浏览器可以登录http://ip地址/ 自动跳转到https链接,用刚才创建的admin账户登录即可。

    然后就可以创建config,shedule,target,扫描个主机看看。

    之后设备重启,只运行红色命令即可,也可以放入启动脚本中,自动运行。

     

    6.建立扫描任务:

    此处未写。详细的可以参考手册。

    web interface 手册 参考:https://docs.greenbone.net/GSM-Manual/gos-5/en/                     #操作web界面的手册文档

    参考:https://www.cnblogs.com/cocowang68/p/8759626.html    #快速建立个任务,进行扫描

    运行gvm-tools

    gvm-tools命令说明

    1.概述

    gvm-tools提供了三个命令,gvm-cli, gvm-script, gvm-pyshell。

    三个命令都是基于tls,ssh,unix domain socket这三种连接方式连接到gvmd上。

    参考:https://gvm-tools.readthedocs.io/en/latest/

    gvm-cli

    gvm-cli发送xml格式的gmp协议或者osp协议的命令,接受xml格式的gmp或者osp的回复,用于简单实例,类似于命令行功能,是一个底层命令行工具。

    gvm-cli命令--xml 选项的参数是XML脚本,应该仅仅用做简单用例。

    gmp协议和osp协议基于xml定义的。

    gvm-script

    此命令是2.0正式版中新出现的。

    gvm-script用于执行基于python的gvm脚本,gvm脚本调用的是基于python的gvm API,实现复杂的功能。命令用--protocol参数指定使用gmp,osp哪种协议,默认是gmp协议。

    gvm-pyshell

    gvm-pyshell是一个python交互脚本,调用的基于python 的gvm API.

    同样,也用--protocol参数指定使用哪种协议,默认gmp协议。

    2.功能

    gvm-cli

    gvm-cli --xml 可以跟着gmp/osp命令,

    对于获取版本信息这样简单地命令,可以用gvm-cli,因为它的命令和回复都很简单,一眼就能看到。

    但是对于获取task,创建task等的命令,用gvm-cli就有点不够用了。因为创建task,需要config,target等参数,并且获取task的回复是一个庞大的xml文档,需要xml解析器才能明确的得到想要的信息。这就需要gvm-script了。虽然gvm-script的作用更广泛,但是编写调用的gvm脚本,需要调试,最好先根据gvm-cli获取的信息,编写gvm脚本。

    gvm-script只是帮我们把gmp命令封装好了,最后发送给gvmd的还是xml文档。

    gvm-script

    对于不同的功能,需要编写特定的gvm脚本。

    幸运的是,package中提供了部分脚本,可以当做例子拿来使用。

    没有的功能,就需要自己编写了。

    参考一下手册,

    3. 实例

    gvm-tools v2.0.0.beta1版本

    gvm-tools文档:https://gvm-tools.readthedocs.io/en/latest/

    gvm-tools包含两个命令gvm-cli和gvm-pyshell.

    还有一个python-gvm库,里面是gvm的pythonAPI接口,用于编写python脚本。

    例子:

    unix

    gvm-cli socket --gmp-username admin --gmp-password admin --socketpath /usr/var/run/gvmd.sock  --log DEBUG -X '<get_version/>'

    tls

    gvm-cli tls --gmp-username admin --gmp-password admin   --log DEBUG -X '<get_version/>' --hostname 127.0.0.1 --port 9390 --certfile '/usr/var/lib/gvm/CA/servercert.pem'   --keyfile '/usr/var/lib/gvm/private/CA/serverkey.pem'  --cafile '/usr/var/lib/gvm/CA/servercert.pem'

     

    gvm-pyshell

    gvm-pyshell socket   --socketpath /usr/var/run/gvmd.sock --gmp-username admin --gmp-password admin  --protocol GMP/OSP -i

    python-API 库内置了socket文件为/usr/local/var/run/gvmd.sock,

    为了运行给出的脚本例子,

    vim /usr/lib/python3.7/site-packages/ gvm/connections.py  +41

     

    修改之后运行命令可以不用指定socketpath,

    gvm-cli socket --gmp-username admin --gmp-password admin --log DEBUG -X '<get_version/>'

    gvm-pyshell socket --gmp-username admin --gmp-password admin  --protocol GMP/OSP -i

    --protocol 可以指定两种协议,一种GMP,一种OSP,默认GMP

    gvm-pyshell socket --gmp-username admin --gmp-password admin  --protocol GMP abc.txt

                                                          

    python脚本

    pretty_print(gmp.get_tasks())

     

    gvm-tools v2.0.0版本(release版本)

    gvm-cli

      gvm-cli socket --socketpath /usr/var/run/gvmd.sock --xml "<get_version/>"

    gvm-cli --gmp-username admin --gmp-password admin socket --socketpath /usr/var/run/gvmd.sock --xml "<get_tasks/>"

      gvm-cli -c ./gvm-tools.conf socket --xml "<get_reports/>"

      gvm-cli -c ./gvm-tools.conf tls --hostname 127.0.0.1 --port 9390 --xml "<get_reports/>"

    gvm-cli -c ./gvm-tools.conf tls --hostname 127.0.0.1 --port 9390 --xml "<get_report_formats/>"

    gvm-script

    gvm-script --gmp-username admin --gmp-password admin socket --socketpath /usr/var/run/gvmd.sock list-tasks.gmp

      gvm-script -c ./gvm-tools.conf tls --hostname 127.0.0.1 --port 9390 list-tasks.gmp

     gvm-script -c ./gvm-tools.conf tls --hostname 127.0.0.1 --port 9390 scripts/pdf-report.gmp ef7b9853-59f8-4612-bb3d-53e3c9d5f819

    产生 ef7b9853-59f8-4612-bb3d-53e3c9d5f819.pdf文件

     

    注释:因为导出的pdf报告不能用,根据社区的回复,需要安装xsltproc,pdflatex,xmlstarlet

    安装了这三个命令之后,导出的pdf文档可以打开。

     我的gvm-tools.conf配置文件的内容如下:

    [main]
    timeout=120
    [gmp]
    username=admin
    password=admin
    [unixsocket]
    socketpath=/usr/var/run/gvmd.sock
    [tls]
    port=9390

     主要是省去了每次指定命令行参数的麻烦。

    我的命令中穿插使用了tls和socket两种方式,需要对应gvmd的启动方式。

    如果是socket方式,gvmd这样启动,gvmd     #监听socket文件

    如果是tls方式,gvmd这样启动,gvmd --listen=127.0.0.1       #监听tcp端口

    Greenbone Protocol versions

    gvm-10当前支持的协议包括gmpv7,gmpv8,ospv1

    gmp version 7         https://docs.greenbone.net/API/GMP/gmp-7.0.html

    gmp version 8         https://docs.greenbone.net/API/GMP/gmp-8.0.html

    osp version 1          https://docs.greenbone.net/API/OSP/osp-1.1.html

    #说明在/usr/lib/python3.7/site-packages/gvm/protocols/__init__.py

     

    XML文档:

    https://lxml.de/tutorial.html

  • 相关阅读:
    GetClassLoader和GetCallerClass的使用
    Maven的生命周期和插件
    对象池原理简要描述
    Git x SVN rebase事故
    Git 二进制文件冲突解决
    Git x SVN 当前工作流程
    Laya 项目解耦
    Laya 利用JS进行反射
    Laya Tween 和 遮罩
    Laya Tween循环
  • 原文地址:https://www.cnblogs.com/blueyunchao0618/p/11475339.html
Copyright © 2011-2022 走看看