MineMeldを使ってみた(Office 365で利用しているIPアドレス一覧を生成する)

2018.03.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

中山(順)です

今日は、パロアルトネットワークス社が提供するMineMeldについてご紹介します

MineMeldとは

FWやIPS/IDS、WAFなどのセキュリティ製品を運用するの、大変ですよね。

組織内からとあるSaaS使いたいから通信を許可してくれと言われてホワイトリストを作ることもあれば、 DDoSくらって特定のIPからのインバウンド通信を止めたりC&Cサーバーへ何らかの通信してるっぽい挙動を検知してアウトバウンド通信を止めたり。

MineMeldは、ブラックリストやホワイトリストに追加したいIPアドレスやURLのリストを動的に生成してくれる便利なツールです。 様々なOSINT(Open source intelligence)からIPアドレス等の情報を収集し、重複を排除したり、いい感じに整形してくれるそうです。

オープン・ソース・インテリジェンス(OSINT)とは

開発元のPaloAlto社の製品向けに最適化されていますが、OSSとして無償で利用することも可能です。

PaloAltoNetworks/minemeld

使ってみた

ドキュメントを読んだだけではイマイチ分からなかったのでとりあえず手を動かしてみます。

今回は、Office 365で利用されているIPアドレスおよびURLの一覧を出力してみたいと思います。

インスタンスの作成

まずはMineMeldを実行する環境を作成します。

なんと、CloudFormationテンプレートが用意されています。 これでサクッと起動します。

Running MineMeld on Amazon EC2

STACK_NAME="minemeld"
KEY_NAME="xxxxxxxx"
CLIENT_LOCATION="xxx.xxx.xxx.xxx/32"

aws cloudformation create-stack \
    --stack-name ${STACK_NAME} \
    --template-url https://minemeld-dist.s3.amazonaws.com/0_9/minemeld-cfn-latest.json \
    --parameters ParameterKey=InstanceKeyName,ParameterValue=${KEY_NAME} ParameterKey=ClientLocation,ParameterValue=${CLIENT_LOCATION}
{
    "StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:stack/minemeld/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}

ログイン先を確認しましょう。

aws cloudformation describe-stacks \
    --stack-name ${STACK_NAME} \
    --query Stacks[0].Outputs[?OutputKey==`MinemeldAddress`].OutputValue \
    --output text
ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com

ログイン

httpsでアクセスできると思いますので、初期パスワードでログインしましょう。

設定のインポート

画面上部の"Config"から設定を追加します。

設定は、"import"から追加することが可能です。

設定は、こちらのブログから拝借します。

How to Safely Enable access to Office 365 using MineMeld

こちらの設定ファイルを利用したいと思います。

https://paloaltonetworks.box.com/s/gndwe5rzheg1ekwplxb4m3mrpcf5k41f?utm_medium=email&utm_source=MineMeld

nodes:
  office365_IPv4s:
    inputs:
      - office365_ipv4aggregator
    output: false
    prototype: stdlib.feedHCWithValue
  office365_IPv6s:
    inputs:
      - office365_ipv6aggregator
    output: false
    prototype: stdlib.feedHCWithValue
  office365_URLaggregator:
    inputs:
      - office365_any
    output: true
    prototype: stdlib.aggregatorURL
  office365_URLs:
    inputs:
      - office365_URLaggregator
    output: false
    prototype: stdlib.feedHCWithValue
  office365_ipv4aggregator:
    inputs:
      - office365_any
    output: true
    prototype: stdlib.aggregatorIPv4Generic
  office365_ipv6aggregator:
    inputs:
      - office365_any
    output: true
    prototype: stdlib.aggregatorIPv6Simple
  office365_any:
    inputs: []
    output: true
    prototype: office365.any

YAMLの設定ファイルをコピペし、"REPLACE"をクリックします。

すると、大きく3種類のNodeが設定されます(まだコミットされていません)。

  • MINER
  • PROCESSER
  • OUTPUT

これらは、それぞれ情報の収集・分類・配信を担当します。 各ノードは前後の処理を行うノードと関連付けられています。

"COMMIT"をクリックすると、サービスが再起動し、置き換えられた設定が読み込まれます。

結果の確認

画面上部の"Node"をクリックします。

いくつかのNodeが表示されています。 今回は、IPv4のアドレスリストを確認するため、"office365_IPv4s (OUTPUT)"を選択します。

Nodeを開くと、Feed URLが表示されます。 ここから、IPアドレスのリストを取得することかできます。

それでは、結果を表示してみましょう(一部だけ表示します)。

curl https://ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com/feeds/office365_IPv4s -k | tail
65.55.239.168-65.55.239.168
65.55.88.0-65.55.88.255
70.37.151.128-70.37.151.255
70.37.154.128-70.37.154.255
70.37.96.155-70.37.96.155
70.37.97.234-70.37.97.234
94.245.108.85-94.245.108.85
94.245.117.53-94.245.117.53
94.245.120.64-94.245.120.127
94.245.88.28-94.245.88.28

答え合わせ

Office 365で利用しているIPアドレスはこちらで確認することが可能です。

Office 365 URLs and IP address ranges

まとめ

このように、MineMeldを使うことで動的に変化する(メンテナンスしなければならない)アクセス制御設定をいい感じに省力化できそうです。

商用のOSINTもサポートしているらしいので、高い精度を求める場合にはそれらを利用するといいでしょう。

List of Supported Nodes

また、今回は組み込み済みのMinerを利用しましたが、独自に開発することもできるようです。

How To Write a Simple Miner

触ってみて、AWS WAFと連携して何か面白いことできないかなー、なんて思ったので、機会があればまた触ってみようと思います。

現場からは以上です。