ROUTE06でプロダクトセキュリティのお手伝いをしている wonda-tea-coffee です。
今回は社内向けに作成した資料を社外向けに一部修正して紹介します。
はじめに
開発のあらゆる場面でサードパーティのスクリプトやバイナリを使用することがあるでしょう。これらは多くの恩恵をもたらす一方で、使い方を誤ると時にセキュリティインシデントに繋がるおそれがあります。
実際にセキュリティインシデントに発展した例としてはコードカバレッジツールであるCodecovへのハッキングが挙げられます。このインシデントでは、Codecovが提供するスクリプトが悪意ある第三者によって改ざんされ、同スクリプトを使用した一部の組織の保有する機密情報が流出しました。
以下では先のインシデントが起きた一因と、望ましいパターンについていくつか紹介します。
アンチパターン
サードパーティスクリプトを使う際、以下のようなコードを一度は見たことがあるのではないでしょうか。
curl -sSL https://install.python-poetry.org | python3 -
これはpoetryのインストールガイドから抜粋したものです。https://install.python-poetry.org
からインストール用スクリプトをダウンロードし、そのままPythonコードとして実行しています。今日非常によく見られる類のコードですが、前述のCodecovのハッキングではこのようなコードが問題になりました。先のコードでは https://install.python-poetry.org
がハッキングされた場合、任意のPythonコードが実行されてしまいます。
修正例1
https://install.python-poetry.org
でホストされているスクリプトはGitHubリポジトリで管理されています。この場合、以下の手順で置き換えることが可能です。
- リポジトリのmainブランチのコミット一覧から最新のコミットハッシュを見つける
- リポジトリのファイルビュー上部から「Raw」ボタンを押下してプレーンテキストを表示する
- 2のURLのmain部分を見つけた1で見つけたハッシュで置き換える
こうすることで特定のコミット時点のスクリプトを使用することができます。
curl -sSL https://raw.githubusercontent.com/python-poetry/install.python-poetry.org/04dd4769d5346e2e09dc68a9515e63c85d589a20/install-poetry.py | python -
修正例2
対象のスクリプトやバイナリがGitHubでホストされ、GitHubのリリース機能が使用されている場合はファイルの中身を直接検証することも有効です。
#!/bin/bash wget -q -O terragrunt https://github.com/gruntwork-io/terragrunt/releases/download/v0.45.3/terragrunt_linux_amd64 hash=$(sha256sum terragrunt | awk '{ print $1 }') if [ "$hash" = "16d9e40b59f94f1640bad00d36afa1cf2082a105f2966aec2a13f685c8447035" ]; then # do something else echo "The downloaded terragrunt hash did not match." echo $hash exit 1 fi
最後に
この他にもアンチパターン、修正例があることでしょう。今後サードパーティのスクリプトやバイナリを使用する際は、一度改ざんリスクについて考えてみてはいかがでしょうか。