Lambda実行環境のハックが捗る?serverless-preyでLambda実行環境にシェルアクセスしてみよう!!
CX事業本部@大阪の岩田です。Serverless Daysの動画を見ていたところ、Lambda実行環境にシェルアクセスを提供するserverless-preyというおもしろそうなツールを見つけました。
という訳で早速試してみました。
serverless-preyとは?
serverless-preyはnetcatとngrokを利用して各FaaSプラットフォーム向けにシェルアクセスを提供する関数のコレクションです。
- AWS Lambda向けのPanther
- Azure Function向けのCougar
- Google Cloud Function向けのCheetah
3種類から構成されており、各プラットフォームにデプロイ&実行することで関数の実行環境にシェルアクセスが可能になります。ソースコード等の一式は以下のGitHubリポジトリで公開されています。
https://github.com/pumasecurity/serverless-prey
アーキテクチャは以下のようになっています。
※公式の画像を引用
ローカル環境で起動したnetcatのlisterをインターネット経由でアクセスできるようにngrokで公開し、各FaaSプラットフォームからngrokのエンドポイントにアクセスしてもらうことでシェルアクセスを実現しています。
やってみる
実際にLambda実行環境へのシェルアクセスを試してみましょう。
serverless-preyはLambda実行環境へのシェルアクセスを提供するツールです。 検証目的でのみ利用し、プロダクション環境にはデプロイしないようにお願いします。 例えばですがLambda実行ロールに過剰な権限が付与されていた場合、攻撃者からLambda 実行環境のシェルにアクセスされて機密情報を盗み出されるといったリスクがあります。
まずはGitHubからserverless-preyをクローンします。
$ git clone https://github.com/pumasecurity/serverless-prey.git $ cd serverless-prey
serverless frameworkとプラグインをインストールします。
$ npm install --dev
インストールできたらデプロイします。
$ sls deploy
しばらく待つと以下のように出力されてデプロイが完了します。発行されたAPIキーとAPI GWのエンドポイントを控えておきましょう。
Serverless: Stack update finished... Service Information service: panther stage: dev region: us-east-1 stack: panther-dev resources: 15 api keys: panther: <発行されたAPIキー> endpoints: GET - <作成されたAPI GWのエンドポイントURL> functions: panther: panther-dev-panther layers: None S3 Sync: No configuration found Serverless: Run the "serverless" command to setup monitoring, troubleshooting and testing.
クラウド側の準備ができたので、実際にシェルアクセスを試します。serverless-preyのpantherディレクトリ配下にスクリプトが置いてあるので、このスクリプトを実行します。
$ cd panther $ ./script/panther --url-id <API GWのID> --api-key <発行されたAPIキー>
--url-id
にはAPI GWのIDを渡します。作成されたAPI GWのエンドポイントがhttps://xyz.execute-api.us-east-1.amazonaws.com/dev/api/Pantherの場合はAPI GWのIDはxyzとなります。スクリプトを実行してしばらく待つとシェルのプロンプト>
が表示されます。
$ ./script/panther --url-id <API GWのID> --api-key <発行されたAPIキー> @@@@@@@@((. ((@@@@@@@@ *@@@@@@(/*#@%, %&@(*/(@@@@@@/ (@@@@@(*.#%&@*/( //*@&%#.*(@@@@@( /@@@@@(***//(&&&%. .%&&&(//***(@@@@@% #&@@@@@@&&&&&&&&& %&&&&&&&&@@@@@@&# Serverless Prey https://github.com/pumasecurity/serverless-prey >
ここまで進むとLambda実行環境のシェルに接続されている状態になるので、あとは好きなコマンドが実行できます。まずは定番のls
コマンドでも試してみます。
> ls config.json handler.js
無事にls
コマンドが実行され、Lambda Functionにパッケージされたファイルの一覧が表示されました!
まとめ
serverless-preyのご紹介でした。Lambda実行環境の理解を深めるのに役立つ非常に面白いツールだと思います。容量/用法を守ってうまく利用していきたいと思います。