まったり技術ブログ

Webエンジニアのセキュリティブログ

ServerlessGoat for Python を作ったので紹介

f:id:motikan2010:20210322225816g:plain:w600

はじめに

 まず「OWASP ServerlessGoat」というのはサーバレス環境を想定したアプリケーションセキュリティを学習するためのツールです。
脆弱性が含まれているアプリケーションのデプロイができ、実際に攻撃することでセキュリティの学習を行うことができます。

 その「OWASP ServerlessGoat」の Python 版を作成・公開したので共有します。 github.com

 すでに Java 版は存在していましたが、Python 版は見当たらなかったので作成しました。

↓ Java 版 の OWASP ServerlessGoat GitHub - CodeShield-Security/Serverless-Goat-Java: Java version of the deliberately vulnerable serverless application Serverless-Goat from https://github.com/OWASP/Serverless-Goat

 OWASP ServerlessGoat の具体的な学習内容は下の記事が参考になります。
サーバーレスやられアプリを使った脆弱性診断ハンズオン - Qiita

 また、似たような学習ツールに「OWASP DVSA」というものがあります。
GitHub - OWASP/DVSA: a Damn Vulnerable Serverless Application

OWASP ServerlessGoat の注意

 ベースとなっている OWASP ServerlessGoat で学習を進めるにあたってはいくつか注意点があります。

 リポジトリのサポートが止まっていることが主な原因なのですが、学習を進めるに当たって知っていた方がいいので列挙します。

GitHub - OWASP/Serverless-Goat: OWASP ServerlessGoat: a serverless application demonstrating common serverless security flaws

1. 更新が止まっている

 PureSec 社がメンテナンスしていますが、2019年5月に買収されたのが原因なのかメンテナンスが行われていません。

 CloudFormationテンプレート内のLamdaのランタイムが「nodejs8.10」で作成されているので、現在のLambdaでは起動することができません。

 起動する場合は各自でテンプレートを編集してデプロイする必要があります。

2. Lambda ランタイムが Node.js

 注意点というよりは理想ですが、やられアプリはシェアの高い環境下を想定されているものがいいと考えています。

 Datadog 社の調査によると 2019年 Lambda ランタイムは Python のほうが人気とのこと。
しかし OWASP ServerlessGoat は Node.js のみをサポートしている状態です。

f:id:motikan2010:20210317222554p:plain:w400

サーバレスの現状 the State of Serverless | Datadog

3. PureSec 社のサイト消失

 ServerlessGoat を利用しての学習を進める上で https://puresec.io/hubfs/document.doc の Word ファイルにアクセスして正常動作を確認する場合がありますが、既にこのファイルは存在しておらず正常動作を確認できない状態となっています。正常動作を確認するには適当な Word ファイルを見つけてアクセスする必要があります。

 正常動作が確認できないだけで、脆弱性を使った学習に影響はありません。

使い方

 私は sam コマンドを使ってビルド・デプロイをしました。

$ sam --version
SAM CLI, version 1.20.0

ビルド

$ sam build --use-container

デプロイ

$ sam deploy --stack-name "serverless-goat-pyton" --guided

serverless-goat-pytonの部分は任意の文字列

 下画像がトップ画面です。Word ファイルはリポジトリ内にホスティングするようにしています。

f:id:motikan2010:20210318010310p:plain:w600

学習

Lesson 4: Exploiting Over-Privileged IAM Roles

 DynamoDB から全データを取得する項目ですが Python で記述すると以下のようになります。

https://; python -c 'import os;import boto3;print(boto3.resource("dynamodb").Table(os.getenv("TABLE_NAME")).scan())' #

まとめ

 以上、「ServerlessGoat for Python」の紹介でした。

 まだ、README などのドキュメント類の修正はしておらず本家のままとなっていますが、気になる部分を見つけ次第修正してしようかなとは思っています。

 CloudFormation 環境の構築のために作成したポリシー。IAM力が足りないと実感・・・。

f:id:motikan2010:20210318011947p:plain:w300
※動くけど悪い例

更新履歴

  • 2021年3月17日 新規作成