この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
中山(順)です
今日は、パロアルトネットワークス社が提供するMineMeldについてご紹介します
MineMeldとは
FWやIPS/IDS、WAFなどのセキュリティ製品を運用するの、大変ですよね。
組織内からとあるSaaS使いたいから通信を許可してくれと言われてホワイトリストを作ることもあれば、 DDoSくらって特定のIPからのインバウンド通信を止めたりC&Cサーバーへ何らかの通信してるっぽい挙動を検知してアウトバウンド通信を止めたり。
MineMeldは、ブラックリストやホワイトリストに追加したいIPアドレスやURLのリストを動的に生成してくれる便利なツールです。 様々なOSINT(Open source intelligence)からIPアドレス等の情報を収集し、重複を排除したり、いい感じに整形してくれるそうです。
開発元のPaloAlto社の製品向けに最適化されていますが、OSSとして無償で利用することも可能です。
使ってみた
ドキュメントを読んだだけではイマイチ分からなかったのでとりあえず手を動かしてみます。
今回は、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
こちらの設定ファイルを利用したいと思います。
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もサポートしているらしいので、高い精度を求める場合にはそれらを利用するといいでしょう。
また、今回は組み込み済みのMinerを利用しましたが、独自に開発することもできるようです。
触ってみて、AWS WAFと連携して何か面白いことできないかなー、なんて思ったので、機会があればまた触ってみようと思います。
現場からは以上です。