安全でないserverlessプラグイン:なぜソースコードを検査すべきか
8456 ワード
Serverlessフレームワークは、多数のプラグインをサポートし、彼らは素晴らしいです!彼らは私たちのServerlessアプリケーションを展開するのに多くの時間を節約できます.なぜ車輪を再発明するか?この利便性は欠点があります:すべてのプラグインが安全に書かれていない.私たちは賢明にプラグインを選択しなければなりません.
Serverless Frameworkプラグインとは
The Serverless Framework プラグインを使うのを許してくださいlifecycle events 展開プロセス中.展開前にファイルと変数を設定する前にイベントを展開します.展開についての情報を保存するには、「deploy : finalize」フックにフックすることができます.プラグインが有効にする多くの可能性があります.
以下のプラグインがあります. Create a serverless web site
Enabling AWS CloudFormation stack termination protection
Configure AWS IAM policies per function
そして、より多く.
プラグインを使用するには、NPMパッケージをインストールします.
我々は今すぐ改善し、私たちのServerless展開を簡素化します.
すべてのプラグインが同じレベルのセキュリティを持っているわけではない
プラグインはServerlessなコミュニティによって構築されます.誰でもプラグインを作ることができます.Serverless Framework社のリストplugins , しかし、サブセットだけが「承認されます」これは、我々が使用しているものを認識しなければならないことを意味します.
つのプラグインは、私たちは私たちの他のステートメントを追加することができます
たとえば、私たちは私たちに固有の機能を展開することができます
コードを調べた後、何か面白いものを見ましたline 27 if文の評価方法.
プラグインを使用してexploitを起動
更新しました
削除 空のファイルを見つけました これは、プラグインがどのように我々のセキュリティ姿勢を減らすことができるかの例です.与えられた、誰かが不正なコマンドを挿入する必要がありますし、このexploitのためのコードのレビュープロセスでは、過去にそれを取得します.念頭に置いておくと、プラグインコードは、Serverlessな設定を展開するために使用されるIAMポリシーによって許可されたAWSサービスへのアクセス権を持っているので、悪意を持って行うことができます.
結論
Serverlessのフレームワークプラグインは素晴らしいですが、ソースコードを検査することで何をするかを理解する必要があります.我々は潜在的に悪意があるかどうかを理解する必要があります.
ソースコードを見るhttps://github.com/miguel-a-calles-mba/secjuice/tree/master/insecure-plugins .
著者からの覚え書き
私のメーリングリストに加わって、私の文書について最新版を受けてください.
訪問miguelacallesmba.com/subscribe そしてサインアップ.
滞在安全、ミゲル
著者について
ミゲルは主要なセキュリティエンジニアでありServerless Security 彼は開発者とセキュリティエンジニアとして複数のServerlessプロジェクトに取り組んできた.
もともと公開Secjuice.com
写真でDmitry Ratushny on Unsplash
Serverless Frameworkプラグインとは
The Serverless Framework プラグインを使うのを許してくださいlifecycle events 展開プロセス中.展開前にファイルと変数を設定する前にイベントを展開します.展開についての情報を保存するには、「deploy : finalize」フックにフックすることができます.プラグインが有効にする多くの可能性があります.
以下のプラグインがあります.
プラグインを使用するには、NPMパッケージをインストールします.
npm install --save-dev serverless-iam-roles-per-function
プラグインをサーバの設定ファイルに追加しました.serverless.yml
):plugins:
- serverless-iam-roles-per-function
そして、プラグインが必要なすべての指示と設定に従ってください.我々は今すぐ改善し、私たちのServerless展開を簡素化します.
すべてのプラグインが同じレベルのセキュリティを持っているわけではない
プラグインはServerlessなコミュニティによって構築されます.誰でもプラグインを作ることができます.Serverless Framework社のリストplugins , しかし、サブセットだけが「承認されます」これは、我々が使用しているものを認識しなければならないことを意味します.
つのプラグインは、私たちは私たちの他のステートメントを追加することができます
serverless.yml
ファイルServerless Plugin IfElse plugin . このプラグインは、展開シナリオによってサーバーなしの設定を調整することができますので、便利です.たとえば、私たちは私たちに固有の機能を展開することができます
dev
ステージから他のものから除外する.service: insecure-plugins
provider:
name: aws
runtime: nodejs12.x
stage: ${opt:stage, 'dev'}
region: us-east-1
functions:
dev:
handler: dev.handler
plugins:
- serverless-plugin-ifelse
custom:
serverlessIfElse:
- If: '"${self:provider.stage}" != "dev"'
Exclude:
- functions.dev
我々dev
ステージはdev
関数をdev
ステージと他のすべてのステージはそれを持ちません.いいねコードを調べた後、何か面白いものを見ましたline 27 if文の評価方法.
if (eval(item.If)) {
我々が予想通りに動くかどうか見ましょう.プラグインを使用してexploitを起動
更新しました
serverless.yml
いくつかのノードコードを含める.service: insecure-plugins
provider:
name: aws
runtime: nodejs12.x
stage: ${opt:stage, 'dev'}
region: us-east-1
functions:
dev:
handler: dev.handler
plugins:
- serverless-plugin-ifelse
custom:
serverlessIfElse:
# - If: '"${self:provider.stage}" != "dev"'
- If: 'const cp = require("child_process"); cp.execSync("touch hello.txt");'
Exclude:
- functions.dev
設定を展開し、次のように注目しました.dev
if文が真の値を返さないためです.hello.txt
フォルダ内.結論
Serverlessのフレームワークプラグインは素晴らしいですが、ソースコードを検査することで何をするかを理解する必要があります.我々は潜在的に悪意があるかどうかを理解する必要があります.
ソースコードを見るhttps://github.com/miguel-a-calles-mba/secjuice/tree/master/insecure-plugins .
著者からの覚え書き
私のメーリングリストに加わって、私の文書について最新版を受けてください.
訪問miguelacallesmba.com/subscribe そしてサインアップ.
滞在安全、ミゲル
著者について
ミゲルは主要なセキュリティエンジニアでありServerless Security 彼は開発者とセキュリティエンジニアとして複数のServerlessプロジェクトに取り組んできた.
もともと公開Secjuice.com
写真でDmitry Ratushny on Unsplash
Reference
この問題について(安全でないserverlessプラグイン:なぜソースコードを検査すべきか), 我々は、より多くの情報をここで見つけました https://dev.to/miguelacallesmba/insecure-serverless-plugins-why-you-should-inspect-the-source-code-214jテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol