【はーどこーどされたにんしょうじょうほう】

ハードコードされた認証情報 とは?

公開:
💡 配るアプリの中に、共通の合鍵を入れない

ハードコードされた認証情報は、パスワードや秘密のAPIキーなどをプログラムへ固定で埋め込んだ状態。配布されたアプリから取り出されるなどして、不正なアクセスにつながる弱点になります。

📌 このページのポイント
配るアプリに、秘密の合鍵を入れない 配布アプリへ埋め込む取り出されるおそれ! 共通の秘密が漏れる秘密を別に管理する保管と権限を設計✓ 配布物から分離漏えい時は、削除だけでなく無効化も
秘密にすべきパスワードやAPIキーの扱い。難読化だけに頼らず、秘密の保管場所・利用権限・更新方法を設計します。
ひよこ ひよこ
ペンギン先生、アプリがAPIを使うなら鍵を中に入れるんじゃないの?
ペンギン先生 ペンギン先生
秘密にすべき認証用の鍵を配布アプリへ入れると、取り出される可能性があるよ。利用者の手元に渡るプログラムを、秘密を隠す金庫とは考えないことが大切なんだ。
ひよこ ひよこ
ハードコーディングと同じこと?
ペンギン先生 ペンギン先生
ハードコーディングは値をコードへ固定する一般的な書き方だよ。その中でも、認証情報を埋め込むのがこの弱点。画面の見出しを固定する場合と、共通の管理者パスワードを固定する場合はリスクが違うんだ。
ひよこ ひよこ
文字を読みにくく加工すれば大丈夫?
ペンギン先生 ペンギン先生
難読化だけでは、配布物から秘密が取り出される問題を解決できないよ。どこで認証するか、利用者ごとにどんな権限を渡すかを設計し、秘密は適切な管理基盤で扱う必要があるんだ。
ひよこ ひよこ
埋め込んでしまった鍵は、次の版から消せばいい?
ペンギン先生 ペンギン先生
古い版やソースから既に知られた可能性があるよ。削除に加えて鍵の無効化や再発行、利用履歴の確認を行う。公開してよい識別子まで秘密鍵と決めつけず、その値の役割と権限も確かめよう。
もっと詳しく知りたい人へ

環境変数に移せば解決する?

サーバーのコードから秘密を分離する手段にはなりますが、配布アプリへビルド時に埋め込めば再び配布物へ入ります。環境変数自体の閲覧権限やログへの出力にも注意が必要です。秘密の保管場所と、実際に動くコードへの渡し方を一緒に設計します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ハードコードされた認証情報」って出てきたら「プログラムに秘密のパスワードや鍵を固定で埋め込む弱点」と思えばだいたいOK!
📖 おまけ:英語の意味
「Hard-coded Credentials」 = 固定で埋め込まれた認証情報
💬 Hard-codedはコードに固定して書くこと、Credentialsは認証情報だよ。固定の表示名ではなく、秘密にすべき鍵やパスワードを埋め込む問題なんだ。

参考資料

← 用語集にもどる