みなさんこんにちは。
今回はK8sにWazuhというセキュリティソフトをインストールしてセキュアな環境を構築していきたいと思います。
Wazuhとは
Wazuhとは、OSSのエンドポイントやサーバー、ネットワークなど複数のレイヤから脅威を検出し、分析して自動対処するソフトウェアです。
今回は、我らがデジタル創作サークルUniProjectのネットワークを監視するため、こちらのソフトをインストールします。
コンポーネント
Wazuhには4つのコンポーネントがあります。
Wazuh indexer
ログなどから異常な文字列がないかを探してくれるものです。
結構メモリ食い虫でした。
Wazuh server
agentから受信したデータを分析します。
何かしらのマルウェアが見つかったりすると警告を出してくれたりします。
中枢ですね。
なお、これはagentから直にデータを受け取るため、負荷が比較的大きいです。
ワーカーを増やしてクラスタを組んだりすることもできます。
Wazuh dashboard
そのままですね。Webダッシュボードです。
Wazuh agents
Linuxのみならず、Windows, macOS, Solaris, AIXにインストールできる常駐型のエージェントです。
これがWazuh serverに対してデータを送信しています。
引用元: https://documentation.wazuh.com/current/getting-started/components/
Kustomizeでインストール
では、インストールしてみましょう。
まずはダウンロードしてきます。
git clone https://github.com/wazuh/wazuh-kubernetes.git -b v4.9.2 --depth=1
cd wazuh-kubernetes
次に、SSL証明書を生成します。
wazuh/certs/dashboard_http/generate_certs.sh
wazuh/certs/indexer_cluster/generate_certs.sh
ストレージの設定
ここが一番厄介なところですね。
今回はこの記事を参考に、NFSのProvisionerを作成し、そちらを使用しました。
envs/local-env/storage-class.yaml
を編集し、microk8sのhostpathになっているところを、provisioner: nfs-prov
に書き換えます。
インストール
さて、kustomizeでインストールします。
kubectl apply -k envs/local-env/
これでもうすでに動いているはずです。
ユーザー関連の設定
まずはPodの中に入ります。
kubectl exec -it wazuh-indexer-0 -n wazuh -- /bin/bash
以下のコマンドで、新しく設定するパスワードを打ち込み、ハッシュを取得します。
export JAVA_HOME=/usr/share/wazuh-indexer/jdk
bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/hash.sh
次に、Podから出て、wazuh/indexer_stack/wazuh-indexer/indexer_conf/internal_users.yml
を編集します。
admin:
+ hash: "$2y$12$K/SpwjtB.wOHJ/Nc6GVRDuc1h0rM1DfvziFRNPtk27P.c4yDr9njO"
reserved: true
backend_roles:
- "admin"
description: "Demo admin user"
...
kibanaserver:
+ hash: "$2a$12$4AcgAt3xwOWadA5s5blL6ev39OXDNhmOesEoo33eZtrq2N0YrU3H."
reserved: true
description: "Demo kibanaserver user"
さて、お次はsecretです。
...
apiVersion: v1
kind: Secret
metadata:
name: indexer-cred
data:
username: YWRtaW4= # string "admin" base64 encoded
password: U2VjcmV0UGFzc3dvcmQ= # 新しいPWのbase64エンコードに変える
...
...
apiVersion: v1
kind: Secret
metadata:
name: dashboard-cred
data:
username: a2liYW5hc2VydmVy # string "kibanaserver" base64 encoded
password: a2liYW5hc2VydmVy # 新しいPWのbase64エンコードに変える
これで、もう一度デプロイしなおします。
kubectl apply -k envs/local-env/
ここで、Pod側で作業をします。
kubectl exec -it wazuh-indexer-0 -n wazuh -- /bin/bash
export INSTALLATION_DIR=/usr/share/wazuh-indexer
CACERT=$INSTALLATION_DIR/certs/root-ca.pem
KEY=$INSTALLATION_DIR/certs/admin-key.pem
CERT=$INSTALLATION_DIR/certs/admin.pem
export JAVA_HOME=/usr/share/wazuh-indexer/jdk
bash /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh -cd /usr/share/wazuh-indexer/opensearch-security/ -nhnv -cacert $CACERT -cert $CERT -key $KEY -p 9200 -icl -h $NODE_NAME
最後に、Podを全て削除し再起動させます。
kubectl delete -n wazuh pod/wazuh-manager-master-0 pod/wazuh-manager-worker-0 pod/wazuh-manager-worker-1
ダッシュボードにアクセスしてみる
サービスを探してアクセスしてみます。
ログイン情報は先ほど設定したものですね。
こんなのが出てくれば成功です!
agentを入れてみる
さて、agentを入れてみましょう。
Endopoint SummaryのDeploy new agentから行えます。
ここで、好きなOS、環境を選択します。
Assign a server addressには、マスターのサービスのIPを入れます。
Agent nameは表示名です。
そうすると、下にコマンドが出てくるので、それをコピペして実行します。
これで、agent一覧に出てくれば成功です!!
あとは、ぽんぽん出てくる脆弱性を眺めて「こんな多かったんだぁ」とまったりしてください。
お疲れ様でした!