LambdaではJavaScript/Node.jsで書いたスクリプトをイベントドリブンで実行できるサービスです。今回はLambdaの外側からできる範囲でLambdaがどう動いているのか、実行環境がどうなっているのかいろいろと暴いてみようと思います。Linuxをベースに動いています。現時点ではami-8786c6b7というpublicなAMIが利用されています。基本的にはLinuxのコマンドが通るはずです。外部コマンドが実行できるかどうかです。functionを以下のコードで作成してマネージメントコンソールからInvokeして試していこうと思います。});};とりあえずカレントディレクトリをlsしてみました。index.jsどうやら外部コマンドの実行自体は制限されていなさそうです。いうわけでこれから環境を探るべくいろんなコマンドを実行してみたいと思います。以降は基本的に結果だけ載せていきます。実行ユーザまずは実行ユーザを見るべくwhoamiを実行してみました。sbx_user1056sbx_user1056というので実行されているみたいですがsbxってもしかしてsandboxの略かな。functionの実体が置かれるディレクトリでしょうか。/binに通っているのでそれぞれをlsしてどんなコマンドがあるのか確認してみます。存在するコマンド面倒なのでまとめてPATHの通っている3つのディレクトリに対してlsしてみたところ結構な数が出力されてしまったので完全なリストは一番下に記載します。Linuxで利用可能なコマンドが全て見えている状態なのかな。これはこれでドキドキしますね。makeがあったりするので、実は何でもアリ状態なのかも知れません。見たところJavaのRuntimeも入っているのでこれもそのまま使えるならJavaScriptからJavaの実行とかできちゃったりするかも知れません。実際に使うかどうかはともかく。何かいろいろ見えていますね。functionから書き込み可能な/tmpだけownerが実行ユーザであるsbx_user1067でそれ以外はrootになっています。functionからの書き込みが可能ということですね。auxwを実行してみました。auxw見えているプロセスは恐らく自分自身のプロセスでしょう。それ以外は見えていません。IPアドレスここまでIPアドレスを確認するのを忘れていました。Lambdaではfunction内から外部への通信は問題なく許可されています。いうことはIPアドレスを当然持っているはず。addrを実行してみますが/sbinにはPATHが通っていないからかダメでした。foundというわけでフルパスで指定してみます。permitted権限の問題でこれもダメでした。sudoを使ってみましょう。foundsudoはコマンドがないということでこれもダメですね。functionは10.0.207.29というIPアドレスを持っているようです。複数回実行しても変更されなかったのでもしかしたらsandbox環境のIPは変わらなかったりするのかも知れません。次は昔なつかしifconfigを実行してみます。これもフルパスで/sbin/ifconfigを実行します。KiB)ん?異なるIPのインターフェースが表示されましたがこれはどういうことですかね。ファイルシステムdfを実行してみます。directoryこの結果はもしや。いや、これ以上は何も言うまい。気を取り直してfindmntを実行してみます。出力が横に長いので出力フィールドをSOURCEだけとTARGETだけの2回に分けて実行した結果がこちら。TARGET/|-/var/runtime|-/proc|-/var/task|-/dev`-/tmpなんとなくいろいろ察することができましたね。functionでの外部コマンドの実行は可能でした。Linuxのイメージで用意されているコマンドは確認した範囲では実行可能なようです。これはなんというか何でもありな気もしてきましたね。最後に大人のたしなみである免責事項を書いて終了です。免責こちらは個人の意見で、所属する企業や団体は関係ありません。K.K.で働いてますが、ここでの投稿は個人のものであって所属する企業や団体の見解を示すものではありません。自分の会社とかは関係ないよってことです。http://www.keisuke69.net/FollowTechTrainプロのエンジニアを目指すU30(30歳以下)の方に現役エンジニアにメンタリングもらえるコミュニティです。upLoginユーザーは見つかりませんでした。