てんこ

ブログ名は愛猫(てん)の愛称です。中身は個人のIT系学習記録です。

AnsibleでMineMeldをインストールしてみた

皆さんは、OSINTというものをご存じでしょうか?

OSINTは「Open Source Intelligence」の略で、「一般に公開されている脅威情報」ととらえていただければよいかなと思います。

本日は、そのOSINT情報を集めて、好きな形で出力してくれるツールとして、MineMeldというOSSをAnsibleを使ってインストールしてみます。

Ansible関連の実践記事一覧はこちら


目的

  • Minemeldが仕事でつかえるかどうか判断するため

OSINTの情報を起点にAnsibleをHubにして、セキュリティ製品への設定を自動化したいなと考えています。

MineMeldとは?

セキュリティ機能も活用可能なファイアウォールを出されているPalo Alto NetworksさんがOSSで提供する、OSINT情報蓄積・出力用ツールです。

https://www.paloaltonetworks.jp/content/dam/pan/en_US/images/products/minemeld/pan-minemeld-diagram.png

同様のツールで「MISP」というものもあります。

【参考】MISP公式サイト

https://www.misp-project.org/

公式サイト

MineMeldの公式サイトは以下URLです。

MineMeld - Palo Alto Networks

公式インストール手順

以下URLのWikiに記載されています。

User's Guide · PaloAltoNetworks/minemeld Wiki · GitHub

今回は、ソースコードからインストールしますので、以下URLの情報を参考に作業をしています。

GitHub - PaloAltoNetworks/minemeld-ansible: Ansible playbook for installing MineMeld on Linux

環境

f:id:tatematsu_san:20200705122047p:plain

全部仮想サーバ、同一ネットワーク内です。

Minemeldをインストールする対象のサーバは、ansibleユーザをwheelに入れてPWなしでsudoできる状態にしたのみです。

作成したPlaybook

公式のインストール手順を参考に、以下のようなPlaybookを作成しました。

install_minemeld.yml
---
- hosts: all
  gather_facts: no
  become: yes

  vars:
    user_name: ansible

  tasks:
    - name: Yum update
      yum:
        name: "*"
        state: latest

    - name: Install packages
      yum:
        state: latest
        name:
          - wget
          - gcc
          - git
          - python-devel
          - libffi-devel
          - openssl-devel
          - zlib-devel
          - sqlite-devel
          - bzip2-devel

    - name: Get bootstrap
      get_url:
        url: https://bootstrap.pypa.io/get-pip.py
        dest: /home/{{ user_name }}/

    - name: Exec bootstrap file
      command:
        cmd: python get-pip.py

    - name: Install ansible
      pip:
        name: ansible
        state: latest

    - name: Git clone Minemeld
      git:
        repo: https://github.com/PaloAltoNetworks/minemeld-ansible.git
        dest: /$HOME/minemeld-ansible

    - name: Play ansible playbook
      command:
        cmd: ansible-playbook -i 127.0.0.1 /$HOME/minemeld-ansible/local.yml

# ↑ここを改善できないものか…

    - name: Usergroup change
      user:
        name: "{{ user_name }}"
        append: yes
        groups: minemeld

    - name: reboot
      reboot:

インストール手順の中に、MineMeldインストール用のPlaybookをGithubからクローンしてきて、対象サーバ上でPlaybookを実行する、というような項目があります。 Playbookでは、SELINUX用の設定もしっかり実施してくれます。

全体の実行時間では、その項目が最も長くなります。(10分くらい?)

理想はAnsible実行サーバ側からそのタスクの状況をモニタリングできるとよいのですが…include_tasksとかでやろうと思っても上手く行きませんでした。

1個上のダウンロード先でdelegate_toでlocalhostを指定してAnsible実行ホスト側にPlaybookを落としてきても、そのPlaybookの一番上に「hosts: localhost 」が入っているためです。変数指定で上書きとかできるんだっけか…

良いアイディアをお持ちの方は教えていただけると嬉しいです。

インストール用のPlaybookは、以下に公開されています。

github.com

作業結果

無事、インストールが完了しました。

f:id:tatematsu_san:20200705124033p:plain

インストール実施確認

https://<minemeld_ipaddress>/

httpでアクセスしてもリダイレクトしてくれます。

初期のユーザ名は以下の通り。

項目
user admin
password minemeld

f:id:tatematsu_san:20200705124114p:plain

ログイン情報を入力し、ログインしてみます。

f:id:tatematsu_san:20200705124153p:plain

ちゃんと動いていることが確認できました。

今後

このMineMeldを使って、セキュリティ製品へのブロックリスト投入などを自動化する検証を進めていこうと思います。

本当はインストール実施確認とかまでPlaybook化できるといいんですよね。もうちょっと考えよ…