ソースコードにパスワードが書かれてしまう件
先日、Atlassianの製品で、パスワードをコードに直接書いてしまったことを原因とした脆弱性が公開されたようです。
と思ってたら、HuluのAndroidアプリでもAPIキーのハードコーディングが見つかったようです。
いけてないポイント
設定値を設定ファイルなどに別だしせず、ソースコードに直接書くことを、「ハードコーディング」と言います。
ハードコーディングされた設定値は、ソースコードを修正しなければ変更できなくなってしまうので、通常、ユーザが変更し得る値は設定ふぁいるなどに別だしして、ハードコーディングしないように設計します。
特に、ユーザIDやパスワードなどの情報は類推できないようにする必要があることに加え、ソースコードは暗号化を行わない場合もあるので、今回のようにパスワードをハードコーディングしてしまう行為は、それ自体が脆弱性になってしまいます。
どうすれば防げるか
今回の事象に対しては、パッチが出ているようなので、それを適用すればよいですが、私たちが日頃開発をしていく中で、どのように防ぐことができるでしょうか。
ハードコーディング自体を回避する方法は、パラメータファイルなどを利用する方法が考えられます。また、手助けする仕組みとして、例えばAWSの場合だとシークレットマネージャーやパラメータストアなどの製品が利用できます。GCPやAzureでも同様の製品はあると思われます。
しかし、どんなに仕組みを強化して、利用をエンジニアに義務付けたとしても、開発開始時に簡単な動作確認のために作ってそのままになったり、開発の終盤で全体設計を崩さないために付け焼き刃の対応をしてしまったりと、ハードコーディングを根本的に防ぐことは難しい可能性があります。
これらの状況に対処するためには、リポジトリにpushされたセンシティブデータを検出するGitGuardianのような仕組みが必要なのかもしれません。
ちなみに、githubなどのクラウドリポジトリを使っている場合は、リポジトリへの対応も必要になります。
過去にメルカリがセンシティブ情報をGithubにアップロードしてしまうというインシデントを起こしました。当時の担当者の方がどのような対処を行ったのかをブログにしてくれています。一読の価値があります。
つらつらと書いてしまいましたが、今回の事象を防ぐにはどうすればよかったでしょうか。みなさまも何か思い付いたらコメントなどお寄せくださいませ。
この記事が気に入ったらサポートをしてみませんか?