サイト内の現在位置

AWSエクスプロイトフレームワーク「Pacu」のご紹介

NECセキュリティブログ

2022年1月14日

NECサイバーセキュリティ戦略本部セキュリティ技術センターの中野です。今回はオープンソースのAWSエクスプロイトフレームワークである「Pacu」について、その概要と基本的な使い方について紹介したいと思います。

Pacuとは

Pacu new window[1]はRhino Security Labs社が提供しているオープンソースのAWSエクスプロイトフレームワークです。AWS環境に対するペネトレーションテストでの使用を想定して作成されています。ペネトレーションテストツールといえばMetasploitが一般的には有名です。PacuはMetasploitと同じく各攻撃手法がモジュールという形で作成されており、そのモジュールを実行することで攻撃を行います。PacuにはAWS環境に特化した様々な攻撃用モジュールが用意されています。例えば、AWSのログの収集や変更、不正なクレデンシャルの付与や権限昇格、EC2インスタンスの任意コード実行などがあります。
Pacuを使用する際には、対象となるAWSアカウントのIAMユーザのアクセスキーを登録する必要があります。各モジュールの実行にはそのIAMユーザの権限を使用しています。そのため、Pacuは過剰な権限を付与していないか、権限昇格可能なパスがないかといった権限管理の脆弱性をテストする際に特に向いていると感じました。
なお、AWS環境へのペネトレーションテストを実施する際には、AWSが公開しているカスタマーサービスポリシー new window[2]を確認した上で実施してください。

事前準備

Pacuのインストール方法はGitHub new window[3]に記載がありますのでご参照ください。Pacuを実行すると、以下のような画面が表示されます。

この画面では新しいセッションを作成する際のセッション名を聞かれています。セッションとは、登録したアクセスキーや収集したデータなどを保存する単位です。ここではtest-pacuという名前を設定しました。

次にIAMユーザのアクセスキーを登録する必要があるのでset_keysコマンドを使用してIAMユーザのアクセスキーを登録します。ここではtest_keyという名前で登録しました。

これで事前準備は完了です。lsコマンドを実行するとモジュールの一覧が表示されます。このモジュールの中から実行したいものを選びrunコマンドで実行していくのが基本的な使い方になります。

情報収集

まずは、ペネトレーションテストの対象となるAWS環境の情報収集をしてみたいと思います。関連するいくつかのモジュールを実行してみます。
はじめに、AWSアカウントの情報を収集するため、aws__enum_accountモジュールを使用してみます。helpコマンドを使用することでそのモジュールの説明や、モジュールを実行する際のオプションを調べることができます。

特にオプション等もないため、runコマンドでそのままaws__enum_accountを実行してみます。AWSアカウントの情報が収集され、結果が出力されます。

次にEC2関係の情報を収集するため、ec2__enumモジュールを使用してみます。前と同じくhelpコマンドでモジュールの詳細を確認してみます。すると、以下のようなオプションがあることが確認できます。

regionsオプションを使用することでリージョンを指定できるようです。今回は東京リージョン(ap-northeast-1)を指定して、モジュールを実行します。EC2関係の情報が収集され、結果が出力されます。

任意コード実行

せっかくなのでエクスプロイトらしい使い方も紹介したいと思います。今回はEC2インスタンスに任意コードを実行させるec2__startup_shell_scriptモジュールを使用してみたいと思います。
今までと同じくhelpコマンドを使用してモジュールの詳細を確認します。

こちらのモジュールはEC2インスタンスのユーザデータ機能を使用して任意のコードをroot権限で実行させるもののようです。ユーザデータ機能は、EC2インスタンスが起動する際に任意のスクリプトを実行させることができる機能です。本来であればEC2インスタンスのセットアップなどに使用される便利な機能なのですが、このモジュールはそれを悪用するようです。

このモジュールを使用して任意コードを実行させるにあたり、今回は攻撃対象となるEC2インスタンスにリバースシェルを実行させることで、攻撃側のサーバから攻撃対象のEC2インスタンスにシェルを実行できるようにしたいと思います。具体的な手順を下図に示します。

それでは実施していきましょう。まずは攻撃側サーバでncコマンドを使用し、攻撃対象からの接続を待ち受けます。ここでは8088番ポートを使用しています(図中①)。

次に、Pacuを実行している端末内でリバースシェルを実行させるためのスクリプトを用意します。今回は以下のようなスクリプトを用意しました。10.0.0.118は攻撃側サーバのIPアドレスで、8088は攻撃側サーバが使用するポート番号です。

Pacu実行端末上でec2__startup_shell_scriptモジュールを実行して、攻撃対象となるインスタンスに先ほど用意したスクリプトを実行させます(図中②)。instance-idsオプションで攻撃対象となるインスタンスを指定し、scriptオプションで用意したスクリプトを指定します。実行すると下図のような結果となり、攻撃対象となるインスタンスが停止後、ユーザデータが設定され、再起動されていることが分かります。

攻撃対象となるインスタンスの再起動が始まってしばらくすると、攻撃側のサーバに攻撃対象となるインスタンスとの接続が確立されます(図中③)。ここまでくればリバースシェルの成功です。攻撃側のサーバから攻撃対象となるサーバに対して任意のコマンドをroot権限で実行できます。

ちなみに、攻撃対象となったインスタンスのユーザデータを確認すると、用意したスクリプトがユーザデータに設定されていることを確認できます。

まとめ

本ブログでは、オープンソースのAWSエクスプロイトフレームワークであるPacuについて紹介いたしました。Pacuはペネトレーションテストへの使用を想定して作成されたツールです。今回、実際に使用してみて、ペネトレーションテストでの活用だけでなくクレデンシャル情報の漏洩がどれほど危険か改めて見つめ直すための教育やアウェアネスなどにも使用できるのではないかと思いました。読者の皆様もこの機会にぜひPacuに触れていただき、AWSのセキュリティについて見つめ直すきっかけになりましたら幸いです。

参考資料

執筆者プロフィール

中野 智晴(なかの ともはる)
セキュリティ技術センター セキュリティ実装技術チーム

NECグループのセキュア開発・運用を推進。主にクラウド環境におけるセキュアアーキテクチャ検討活動やリスクアセスメントに従事。

執筆者の他の記事を読む

アクセスランキング