2017-10-18 1 views
7

このご参照ください:Amazon AWS Lambda関数を設定してレスポンスのログの末尾化を防ぐ方法を教えてください。

http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html

LOGTYPE

をあなたは値 RequestResponseでInvocationTypeパラメータを指定した場合にのみ、要求 で最後尾にこのオプションパラメータを設定することができます。この場合、AWS Lambdaは、 xamz-log-resultヘッダーのラムダ関数によって生成されたログデータのbase64でコード化された の最後の4 KBを返します。

有効値:なし| Tail

これは、関数を呼び出すための有効な資格情報を持つユーザーは、この関数が発行するログも読み取ることができることを意味しますか?

これは明らかな脆弱性で、攻撃者に無効な入力の処理に関する有用な情報を与えることができます。

Amazon AWSラムダ関数を構成して、レスポンスのログの尾引きを防止する方法を教えてください。コメントについて

アップデート1

1):「ハッカーがあなたのラムダ関数を呼び出すことができる場合、ログファイルを見るより 多くの問題を抱えている。」

ない真:ラムダ関数SDKを使用して直接クライアントコードを作成することも意味します。

enter image description here

2)コメントについて:例として

、著書「アクションでAWSラムダ」から下記の絵を見る」 をどのようにこの脆弱性は、正確にあなたが持っている唯一の誰か?提供AWS IAMの資格情報は、ラムダ関数を呼び出すことができるだろう。「もちろん

、クライアントはいくつかの資格情報を持っていない、例えば、から が自分のFacebookのアカウントでモバイルアプリにサインインした(ほとんどの時間、スルー・アムアゾン・コグニート)。私はすべてのユーザーを信頼するはずですか?

3)コメントについて:「あなたがログインするためにいくつかのセキュアな情報を入れている場合のみ。」

ログの賢明な情報が含まれていてもよいです。パスワードのような安全な情報ではなく、開発チームのデバッグに役立つ情報、またはセキュリティチームが攻撃を見つけ出すための情報です。アプリケーションは、何らかの無効な入力が失敗した理由を含む、あらゆる種類の情報をログに記録し、攻撃者が有効な入力が何であるかを知るのに役立ちます。また、攻撃者はセキュリティチームが攻撃について記録しているすべての情報を見ることができます。良くない。あなたが記録しているものによってプライバシーが危険にさらされる可能性があります。

アップデート2

私は何とかラムダコードでTailパラメータを検出することができればそれはまた、私の問題を解決するだろう。それから、私は "Tail now allowed"というメッセージで失敗します。残念ながら、Contextオブジェクトにはこの情報が含まれていないようです。

+1

これはどのように脆弱性ですか?あなたがAWS IAMクレデンシャルを提供した人だけが、AWS APIを介して直接ラムダ関数を呼び出すことができます。 –

+0

(上のコメントに加えて)、ラムダ関数 – hjpotter92

+0

の出力としてログに記録されるセキュリティ情報を入れた場合のみこのパラメータはInvoke API呼び出し中にのみ使用されます。ハッカーがラムダ関数を呼び出せば、ログファイルを見るよりも多くの問題があります。 –

答えて

3

私は、レスポンスのログを尾引きさせないようにAWS Lambdaを設定することはできないと思います。しかし、LogTypeパラメータで公開する可能性を避けるために、Amazon Lambdaが提供するものを使用するのではなく、独自のログコンポーネントを使用することができます。

それ以外の場合は、複雑さを追加することについての注意点がありますが、信頼できないクライアントアプリケーションに対してLambdasを呼び出す可能性を提供する最も一般的なソリューションはAPIゲートウェイを使用する方法です。

1

これはコメントです。 これはコメントでなければなりませんが、私はまだ十分なstackoverflowの評判を持っていないことを申し訳ありません。呼び出しは、イベントや機能に応じて、少なくとも一度起こる

これにコメントする前に、

(AWSドキュメントごと)ラムダ呼び出しは、あなたのラムダの複数の実行をもたらす可能性がありますのでご注意くださいは冪等する必要がありますこれを処理する。

LogTypeが有効なオプションとして文書化されているため、私はあなたのバックエンドでそれを防ぐことはできないと思います。ただし、それを処理するには回避策が必要です。私は考えることができる

1-迷惑メール4KBのテールログを生成する(例えばconsole.log()による)。その後、攻撃者は迷惑情報を取得します。 (攻撃者の場合のみコストが発生する)

2-ステップ機能を使用する。これは、ログを非表示にするだけでなく、「呼び出しは少なくとも1回発生する」問題を克服し、バックエンドの予測可能な実行を持っています。それは費用がかかります。

+0

うわー、呼び出しは要求ごとに複数回実行されることがありますか?それは吸う。 https://www.youtube.com/watch?v=hFtUUx4Zybw&feature=youtu.be&t=15m6s – MarcG

+0

ジャンクログ?しかし、私は自分の実際の情報を(自分のアクセスのために)記録したい。 – MarcG

+0

もちろん、あなたの情報を記録することができます。したがって、実際の情報を記録した後、context.succeed()またはcallback()を呼び出す直前に、4KBのサイズのログを追加します。しかし、それは隠されません "Duration:xxx ms \t請求期間:xxx msメモリサイズ:xxx MB \t使用メモリ:xx MB"たとえば、多くの "A" console.log( "A .........")のテキストをログに記録すると、logResultには情報ログの代わりに "BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQ ......."が含まれます。 –

2

あなたは正しく、悪い習慣であるだけでなく、セキュリティ上の脆弱性を導入していることは明らかです。

あなたは本の中で慎重に見ればあなたもこの部分を見つける:

より安全にするためには、クライアントの要求は、クリーンを公開しますアマゾンAPIゲートウェイを打つ必要があることを説明し

enter image description here

をAPIインタフェースを使用し、関連するラムダ関数を外部世界に公開することなく呼び出すことができます。

、このようなAPIの例は、前のページにdemo'edされます。クライアントとAWS-ラムダの間で中間層を導入することにより

enter image description here

、我々は認証、許可、アクセスの世話をします潜在的な脆弱性の他のすべての点。

+0

API Gatewayは無料ではありません。余分な遅延が発生します。基本的に余分な不要なステップが導入され、管理が複雑になります(簡単な管理はAWS-Lambdaの利点で始める必要があります)。 私のサービスが「外部サービスによって消費されるクリーンなWeb APIを公開する」ことを目的としていない場合、なぜこのテールの問題を解決するために強制する必要があるのか​​わかりません。 – MarcG

+0

これまでのところ、APIゲートウェイを使用することの他の利点はありません。また、AWS-Lambdasに直接アクセスして認証と承認を受けることもできます。キャッシュする必要はありません。スロットルもAWS-Lambdasによって行われ、Amazon SDKは自動的に再試行します。 – MarcG

+0

「AWS-Lambdasに直接アクセスすることによる認証と承認」 - それはあなたのユーザーごとにIAMユーザーを作成し、管理する必要があることを意味します(btwもお金がかかります)。 – alfasin

関連する問題