Deadshot: 認証情報や機密情報をコードから排除

May 18, 2021
執筆者

introducing deadshot

この記事は、TwilioエンジニアのLaxman Eppalagudemこちら(英語)で執筆した記事を日本語化したものです。

認証情報や機密情報、SQLステートメント、その他いかなる機密データも、コードに格納すべきではありません。しかし誰もが誤りを犯します。ヒューマンエラーが実際に問題を起こす前に発見することが重要です。

手作業で組織のすべてのコードベースを監視し、機密性の高い変更がGithubに永久に公開される前に見つけることは不可能です。これは、製品コードを扱うすべてのセキュリティチームが経験する問題です。

Twilioの製品セキュリティチームは、開発者が機密データをコードリポジトリに保存してしまう誤りを防ぎ、重要変更にセキュリティレビューのフラグ付けをするための自動化を迫られました。手作業ではすべてのコードを監視できないからです。解決策は、自動でGitHubリポジトリをリアルタイムで監視し、プルリクエストの段階で機密データを検出して問題や機密の機能に対する変更にフラグを付け、手作業でレビューを行う方法でした。こうして生まれたDeadshotを、このたびオープンソースとしてリリースできることを嬉しく思います。

Deadshot: 自動化サービスでGithubを監視

Deadshotは、Github Organizationにインストール可能なGithubアプリです。コミットごとに実行され、正規表現を使用してプルリクエストの差分をスキャンし重要なデータを見つけます。条件への一致が検出されると、プルリクエストにコメントが追加され、専用のSlackチャネルに通知することも可能です。確認された機密情報に対処することなくプルリクエストがマージされると、セキュリティチームのキューにJiraチケットが作成されます。

Deadshotの設計

組織内で広く使用するために、あらかじめ定義された正規表現に一致する機密データを常に監視する「導入するだけ」で済むソリューションが求められました。また、機密データと突き合わせる正規表現の追加と削除以外は、手間のかからないサービスである必要もありました。

DeadshotはPythonベースのFlask-Celery-Redisマルチコンテナアプリケーションです。Githubアプリとしてインストールし、インストール先リポジトリのメインブランチに対するすべてのプルリクエストごとに実行されます。

Flaskコンテナはプルリクエストのペイロードを受信するAPIルートを公開します。サービスがプルリクエストのペイロードを受け取ると、これをRedisキューに送ります。Celeryコンテナはキューからペイロードを取得し、プルリクエストの差分をスキャンして指定された機密データを検出します。一致が見つかると、Celeryコンテナはプルリクエストにコメントを追加し、適切なSlackチャネルに通知をするか、JIRAチケットを作成します。

Deadshotを試してみる

Twilioでは、リポジトリにマージされる前にプルリクエストにある機密データ検出する上で、Deadshotは非常に有益であるという実績を上げています。オープンソースコミュニティへのリリースは嬉しいことで、皆様の組織での導入成果を知りたいと思います。

Deadshotの導入方法の詳細は、こちらでご覧いただけます: https://github.com/twilio-labs/deadshot

Laxman Eppalagudem - Twilioのシニアプロダクトセキュリティエンジニアとして、リリースされるTwilio製品のセキュリティチェックに力を入れています。お問い合わせはseppalagudem [at] twilio.comまでご連絡ください。