アプリ開発者とスタートアップのためのセキュリティチェックポイント#
アプリやWebサービスを作っていると、機能開発に没頭してセキュリティを疎かにしがちです。しかし、作ったばかりのサービスでもボットネットを通じてすぐに攻撃が試みられることがあるため、初期段階からセキュリティを考慮する習慣が必要です。
この記事では、調べた資料をもとに、サービス開発時に気を配るべきセキュリティポイントを整理しました。
robots.txtと不要な情報の露出#
多くの開発者がrobots.txtファイルにアクセスを防ぐためのDisallow項目を記述しています。
問題は、ハッカーの立場からするとこの情報が「ここに重要なパスがある」というヒントになり得るという点です。
したがって、機密情報や管理ページのURLなどをファイルにそのまま露出する方法は避けるのが良いでしょう。
ライブラリとフレームワークの脆弱性#
サービスに使用するオープンソースライブラリは常に最新バージョンで管理すべきです。
ハッカーは特定のライブラリのセキュリティ脆弱性を素早く突いてくるため、どのライブラリを使っているかを確認するだけで攻撃ルートを見つけることができます。
デフォルトアカウントや初期パスワードが設定されたライブラリやプロダクトは、必ず初期設定を変更し、不要な機能はオフにしておくことを推奨します。
Webセキュリティ点検とガイドライン#
- 韓国インターネット振興院(KISA)が提供するWebサーバー構築セキュリティ点検資料を参考にすれば、実務的に点検すべき項目を素早く整理できます。
- 行政安全部のセキュアコーディングガイドラインもコードレベルで役立ちます。
- Flutterアプリ開発者ならFlutter App Security Guideを参考にするのもおすすめです。(Flutterが好きなもので..)
個人情報保護と暗号化#
過去にはGoogleハッキング技法(Google Dorking)で住民登録番号のような機密データが検索でヒットしたこともあります。
現在は大幅に改善されましたが、依然として安全でないサーバーでは個人情報が流出する可能性があります。
クレジットカード、ユーザー識別情報、認証関連データは必ず保存時に暗号化を適用し、通信区間ではHTTPSをデフォルトで適用すべきです。
模擬ハッキングと実習環境#
現在は教育や練習のために、意図的に脆弱な仮想サーバー(Vulnerable VM)が提供されています。
開発者やセキュリティ担当者がこうした環境で直接攻撃手法を実習してみると、実際のサービスの補強に大いに役立ちます。
アカウントセキュリティとパスワード管理#
ブルートフォース攻撃(Brute-force attack)を防ぐためには、パスワードを頻繁に更新し、サーバー側ではログイン失敗時に一定時間待機してから結果を返すのが良いでしょう。
これはサーバーが遅いのではなく、攻撃試行を減らすための防御技法です。
ISMS-P認証の必要性#
韓国でサービスを運営する有望企業は最終的にISMS-P認証審査を受ける必要があります。
一定規模以上になると必須となるため、初期段階から準備してセキュリティ管理体制を構築しておくことが重要です。
コード難読化とリバースエンジニアリング対策#
アプリを配布する際にはコードを難読化してリバースエンジニアリングを困難にすべきです。
- Flutterでは
--obfuscateビルドオプションを使用できます - AndroidネイティブアプリではProGuardやR8を活用します
また脱獄(Jailbreak)されたデバイスでの実行を検知して機密機能をブロックする方法も検討できます。
アプリとサーバーのセキュリティは「一度点検して終わり」ではなく、サービス運営全般にわたって常に気を配るべき問題です。
開発初期からセキュリティを習慣として身につければ、後々大きなコストと危機を防ぐことができます。
開発セキュリティチェックリスト
- 外部入力値のバリデーション(すべての入力データに対する検証)
- エラーメッセージとシステム情報の露出防止
- 個人情報および認証情報の暗号化(ログ/DB保存時の暗号化)
- パスワード、APIキー、トークンなどのハードコーディング禁止
- 管理者/重要ページのパス隠蔽(robots.txtへの露出防止)
- デフォルトアカウントおよびパスワード、設定値の変更
- ソースコード難読化(Flutter: --obfuscate、Android: ProGuardなど)
- アプリの整合性検証と改ざん検知
- ルート化/脱獄検知およびブロック機能の適用
- 入力情報(パスワード、住民番号など)の暗号化入力/仮想キーパッド適用
- 認証および権限管理(二段階認証、最小権限の原則)
- セッション管理およびセッション有効期限処理(セッショントークンの保護と定期的な更新)
- 通信区間の暗号化(HTTPS/TLSベースのデータ転送)
- 静的/動的分析ツールを用いた脆弱性診断
- 模擬ハッキングおよび手動コードレビューの実施
- アプリ署名キーの安全な保管と管理(公開リポジトリへのアップロード禁止)
- 脆弱性発見時の即座な対応と修正
- 定期的なセキュリティ教育とトレンドの共有
- ISMS-Pなど法的・認証要件の事前検討と準備
- リアルタイムセキュリティモニタリングとログ分析
We are the leaves of one branch, the drops of one sea, the flowers of one garden.
— Jean Lacordaire