<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>openvas | 伪架构师</title>
    <link>/tags/openvas/</link>
      <atom:link href="/tags/openvas/index.xml" rel="self" type="application/rss+xml" />
    <description>openvas</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Thu, 23 Mar 2017 21:05:33 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>openvas</title>
      <link>/tags/openvas/</link>
    </image>
    
    <item>
      <title>OpenVAS 打包记</title>
      <link>/post/openvas-to-docker-image/</link>
      <pubDate>Thu, 23 Mar 2017 21:05:33 +0800</pubDate>
      <guid>/post/openvas-to-docker-image/</guid>
      <description>

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docker pull dustise/openvas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git clone https://github.com/fleeto/docker-openvas.git&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;上回书说到的 OpenVAS，其中的安装过程用的居然不是 Docker，其主要原因有：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;第一，安装使用都不熟悉，直接上手第三方比较容易跑偏，官网靠谱一点（现在我知道了，官网也有不靠谱的）。&lt;/li&gt;
&lt;li&gt;第二，因为上面的原因，Docker Hub 上的 &lt;code&gt;mikesplain/openvas-docker&lt;/code&gt; 不得要领，尤其是客户端连接这部分。（后来知道他的强制更新高估了天朝的网络条件）。&lt;/li&gt;
&lt;li&gt;第三，我喜新厌旧，不想用老旧的 8 版本。&lt;/li&gt;
&lt;li&gt;第四，多语言支持，在上述 Docker Hub 版本上删节了。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;但是作为一个容器云鼓吹者，不弄个顺手的封装的确是不合适的，所以花了些时间，重新来了一次，中间波折蛮多，不过也多了些容器封装方面的经验，就此记录下来。&lt;/p&gt;

&lt;h2 id=&#34;openvas-组件&#34;&gt;OpenVAS 组件&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;openvassd：OpenVAS Scanner，扫描器，会根据本地漏洞库对任务目标进行扫描，是扫描任务的执行者。&lt;/li&gt;
&lt;li&gt;openvasmd：OpenVAS Manager，管理服务，任务和各种漏洞库的管理。&lt;/li&gt;
&lt;li&gt;gsad：Greenbone Security Assistent，他不是 Open VAS 的产品，在这里用作 Web 端，和 OpenVAS Manager 协同工作。&lt;/li&gt;
&lt;li&gt;omp: 命令行客户端。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;基础镜像的选择&#34;&gt;基础镜像的选择&lt;/h2&gt;

&lt;p&gt;基于尺寸考虑，个人一般是首选 Alpine Linux。对于普通的 Java、PHP 应用，以及相对成熟的被 APK 支持的软件都会使用这个。&lt;/p&gt;

&lt;p&gt;需要编译的东西一般就比较烦了，Alpine 的一些基础包跟主流世界不太一样，一般尝试失败的话，会选择 Ubuntu/Debian 或者 CentOS 之类。最先尝试的是 CentOS，但因为库版本的问题导致编译起来问题多多，最后无奈回到 Ubuntu。&lt;/p&gt;

&lt;h2 id=&#34;守护进程问题&#34;&gt;守护进程问题&lt;/h2&gt;

&lt;p&gt;一般来说，各种服务都以后台运行，然而在容器环境下，需要挂在前台保持容器的运行，所以单进程的服务我们一般都会强制其以前台运行，多进程的服务，通常会使用 SupervisorD 来完成各个服务的启动和运行、维持等操作。&lt;/p&gt;

&lt;h2 id=&#34;调试过程&#34;&gt;调试过程&lt;/h2&gt;

&lt;p&gt;一般来说我会准备一个脚本用于构建镜像。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;首先用交互模式启动基础镜像，例如 &lt;code&gt;docker run -it --rm ubuntu bash&lt;/code&gt;，其中可以添加环境变量等设置。&lt;/li&gt;
&lt;li&gt;可以利用 &lt;code&gt;docker cp&lt;/code&gt; 命令传输文件到运行中的容器。&lt;/li&gt;
&lt;li&gt;之后的过程和平时的编译安装并无不同，configure/cmake 等查找缺失的库，尽可能用 apt/yum/apk 进行依赖库的安装。&lt;/li&gt;
&lt;li&gt;因为要使用 OMP，所以我们需要调整 OpenVAS Manager 的启动参数，要求其暴露端口。&lt;/li&gt;
&lt;li&gt;另外，OpenVAS 提供了配置检查功能，openvas-check-setup，其中对设置会有很多建议，逐条完善即可，窃以为，这是对这个不愉快的安装过程的最大安慰。&lt;/li&gt;
&lt;li&gt;每一步都记录到前面提到的 prepare.sh 脚本之中&lt;/li&gt;
&lt;li&gt;能正常运行之后，取出脚本，编写 Dockerfile。&lt;/li&gt;
&lt;li&gt;打包测试。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;坑&#34;&gt;坑&lt;/h2&gt;

&lt;h3 id=&#34;gnupg-的问题&#34;&gt;gnupg 的问题&lt;/h3&gt;

&lt;p&gt;OpenVAS Manager 首次运行会需要利用 gnupg 来生成 Key，但是在容器环境下，随机数设备受宿主系统保护，会导致启动过程挂起，因此这里用了个土办法，生成好之后直接植入进去。&lt;/p&gt;

&lt;h3 id=&#34;manager-的-scanner-socket-参数&#34;&gt;Manager 的 Scanner Socket 参数&lt;/h3&gt;

&lt;p&gt;在 Scanner 指定了不同的 Sock 位置之后，Manager 做出相应的变更进行启动，部分操作仍然会走向缺省配置，推测是其中有一些硬编码，只是推测，并没有深入调查。&lt;/p&gt;

&lt;h3 id=&#34;sqlite-3&#34;&gt;SQLite 3&lt;/h3&gt;

&lt;p&gt;这一软件是 gsad 的一个非常硬的依赖，但是在他的编译过程中并无需求，具体症状就是 Greenbone 有两个同步进程闪退，无法执行，需要用 &amp;ndash;selftest 运行才找到问题所在。&lt;/p&gt;

&lt;h3 id=&#34;更新过程&#34;&gt;更新过程&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;一定要有互联网连接。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;更新过程第一是非常漫长，时间长度需要看网络条件和某伟大基础网络设施的心情。&lt;/p&gt;

&lt;p&gt;接下来 Scanner 和 Manager 都需要进行相应的更新，才能正常工作。&lt;/p&gt;

&lt;p&gt;最后，写了一个 update.all.sh 来完成这一工作。&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>OpenVAS 的简单安装和使用</title>
      <link>/post/openvas-basic/</link>
      <pubDate>Fri, 17 Mar 2017 09:51:34 +0800</pubDate>
      <guid>/post/openvas-basic/</guid>
      <description>

&lt;p&gt;OpenVAS 是一个开源的漏洞评估系统。&lt;/p&gt;

&lt;h2 id=&#34;环境准备&#34;&gt;环境准备&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;这里用 CentOS 7 Minimal 版本开始安装&lt;/li&gt;
&lt;li&gt;开始之前，首先关闭 Selinux 和 firewalld，以免造成一些不必要的干扰，安装完成后可以酌情开启。&lt;/li&gt;
&lt;li&gt;考虑到一些特殊的网络状况，可能需要&lt;strong&gt;设置代理服务器&lt;/strong&gt;，注意后面的安装可能用到 RSYNC，所以设置代理的时候也要加上：&lt;code&gt;RSYNC_PROXY=10.211.55.2:8016&lt;/code&gt; 诸如此类的语句。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;最后是一些必要的工具准备：&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yum install -y bzip2 wget net-tools&lt;/code&gt;&lt;/p&gt;

&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;

&lt;p&gt;安装过程需要借助第三方源进行，简单的一个命令：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;wget -q -O - http://www.atomicorp.com/installers/atomic | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;注意代理服务器&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;接下来就是：&lt;code&gt;yum install openvas&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;安装过程稍嫌繁琐，包括设置密码，监听地址等内容。最后还需要进行数据更新，时间可能较长。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;选择下载工具的一步：curl/wget/rsync 三选一，这里尽可能选择 rsync，因为 curl 和 wget 都只下载 nvt 数据，而其余无法下载的数据在后面还是需要的。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&#34;检查&#34;&gt;检查&lt;/h2&gt;

&lt;p&gt;安装结束之后会启动几个服务：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;redis：数据库&lt;/li&gt;
&lt;li&gt;openvas-manager：调度服务&lt;/li&gt;
&lt;li&gt;openvas-scanner：扫描服务&lt;/li&gt;
&lt;li&gt;gsad：前端&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;另外，OpenVas 还提供了安装检查工具&lt;code&gt;openvas-check-setup&lt;/code&gt;，该工具运行过程中将会检查安装情况以及数据完整性，并给出相应的操作、补救建议。&lt;/p&gt;

&lt;p&gt;一切就绪后，可以打开缺省端口 9392 尝试使用了，例如&lt;code&gt;https://openvas:9392&lt;/code&gt;，打开后是个丑陋的登录页面：&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;images/gsad-login.png&#34; alt=&#34;login&#34; /&gt;&lt;/p&gt;

&lt;p&gt;输入用户名密码之后，就进入系统的首页了。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;images/gsad-first.png&#34; alt=&#34;landing&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;任务和运行&#34;&gt;任务和运行&lt;/h2&gt;

&lt;h3 id=&#34;新建一个任务&#34;&gt;新建一个任务&lt;/h3&gt;

&lt;p&gt;&lt;img src=&#34;images/gsad-new-task.png&#34; alt=&#34;task&#34; /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Host：被扫描检测的主机，主机列表可以在主菜单的 Asset Management 下级 Host 中找到。&lt;/li&gt;
&lt;li&gt;Scan Config：扫描的配置，可以在 Configuration -&amp;gt; Scan Config 中找到。&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;运行&#34;&gt;运行&lt;/h3&gt;

&lt;p&gt;在 Scan Management 中可以看到任务列表，点击右侧的播放按钮即启动运行
运行时间随扫描目标、服务器性能、以及扫描配置影响，可能会很长。
最终生成的报告：&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;images/gsad-report.png&#34; alt=&#34;report&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;openvas-cli&#34;&gt;openvas-cli&lt;/h2&gt;

&lt;p&gt;前面提到，这个扫描过程可能很长，另外，为了配合我们的每日构建或者其他的周期性检查，可以使用 openvas 的命令行工具来进行任务的控制。&lt;/p&gt;

&lt;p&gt;下面举几个典型的例子：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;omp -T # 获取系统中保存的主机，会列出名字和 UUID
omp -g # 获取系统中现有的扫描配置，会列出名字和 UUID
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;omp -w admin -u admin \
  -C -n autotask -t b493b7a8-7489-11df-a3ec-002264764cea \
  -c daba56c8-73ec-11df-a475-002264764cea

# 上面的命令创建了一个任务，名字叫 autotask，
# 目标主机的 ID 为 b493b7a8-7489-11df-a3ec-002264764cea，
# 扫描配置的 ID 为 daba56c8-73ec-11df-a475-002264764cea
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;omp -G # 列出 Task 的名字和 UUID
omp -M 22bc21be-3eeb-4d43-9157-07515120c574 # 启动一个任务
omp -G  22bc21be-3eeb-4d43-9157-07515120c574 # 列出该 ID 任务的执行列表（每次任务执行都会有一个新的下一级的 UUID，用于记录执行情况）
omp -R fa7b3c8f-db75-44f6-8821-910f8f4b83e2 # 获取这一次执行的结果报表
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;有了上述内容，就可以完成漏洞扫描的自动触发，甚至可以根据最终报表，来进行数据分析和告警等后续动作。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;openvas-nvt-sync、openvas-certdata-sync、openvas-nvt-sync 三个工具用于更新数据，应定时运行。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    
  </channel>
</rss>
