Shikata Ga Nai

Private? There is no such things.

第65回:セキュアコーディング:開発者に伝えるべきこと

Hello there, ('ω')ノ

✅ セキュアコーディングとは?

セキュアコーディングとは、「安全なコードを書くための設計・実装の考え方とルール」です。

診断者としては、「問題を指摘するだけ」ではなく、

「どうすれば安全になるのか?」 「このコードをどう直せばいいのか?」

をセットで伝える必要があります。


🎯 開発者に伝えるべきセキュアコーディングの10原則

原則 内容
1. 最小権限 必要な機能だけに権限を限定する(例:権限要求の見直し)
2. 入力の検証 UIだけでなくバックエンド側でもバリデーションを実施
3. 機密情報の保護 APIキーやパスワードをコードに埋め込まない
4. ログ出力の制御 デバッグログは本番で出力しない。トークン等はログしない
5. 暗号化の正しい利用 鍵をハードコードせず、Keystoreなどで安全に管理
6. インテントとコンポーネントの制限 Exported設定やパーミッションチェックの徹底
7. 通信の保護 HTTPS + SSLピンニング、証明書検証を実装
8. 例外処理の強化 try-catchで異常な状態をログだけで終わらせない
9. 依存ライブラリの管理 サードパーティSDKの脆弱性に常に注意
10. 診断結果の活用 発見された脆弱性を次回開発に活かす文化を作る

🧩 よくあるやりとり(実例)

✍️ 診断者:「APIキーがコード内にハードコードされています」

💭 開発者:「外部に出してないから大丈夫じゃないですか?」

👉 解説のポイント:

  • APKは逆コンパイル可能であることを実演で見せる
  • キーがバレた場合のリスク(不正利用、DoS)を明示する
  • Android Keystoreの活用例や、サーバー側トークン発行への切り替え案を提案

✅ 伝え方のコツ

視点 ポイント
開発者目線 “何が問題か”より“どこをどう直せばいいか”を明示
攻撃者目線 再現例やデモで「実際に起こりうること」を見せる
設計者目線 構造的な再発防止策(設計改善、フレームワーク導入)も提案
現場目線 「実装コストが高すぎる」と感じさせない現実的対案を提示

📋 セキュアコーディングのチェックリスト(配布用にも)

✅ この処理に過剰な権限を与えていないか?

✅ 外部から渡される値は必ず検証しているか?

✅ 機密情報がコードやログに残っていないか?

✅ 通信は常にHTTPSか?

✅ 公開するコンポーネントには制限があるか?

✅ 例外処理が情報漏洩につながっていないか?

✅ 使用しているライブラリは最新か?


✅ まとめ

  • セキュアコーディングは、セキュリティ診断の「次のステップ」であり、開発現場に知識を届ける重要なフェーズ
  • 指摘にとどまらず、「どう直すか」「なぜ危険か」を具体的に伝えることが信頼につながる
  • 最終的な目標は、“自ら脆弱性を生まない開発者”を育てること

Best regards, (^^ゞ