【重要】Perforce P4サーバーのセキュリティ強化についてのご案内
Perforce Software, Inc.
近年、サイバーセキュリティの脅威は急速に高度化・巧妙化しており、お客様の知的財産を確実に保護するためには、P4サーバーの定期的なセキュリティ評価と強化が不可欠となっています。
P4サーバーのセキュリティを強化するための方法として、以下の対応策をご紹介します。
さらに詳細をお知りになりたい方は、Perforce Software社がセキュリティ対策のベストプラクティスをまとめた記事の参考訳をご参照いただくか、当社サポートまでお問い合わせください。
1. パブリックネットワーク接続の安全対策について
1. 認証局からの署名付き証明書の使用
認証局からの署名付き証明書の使用が推奨されています。
P4は自己署名証明書もサポートしていますが、適切に署名された証明書は、外部の協力者との安全なネットワークを構築します。
2. チームへの事前通知
SSLを有効化する場合、すべてのユーザーは接続設定を更新し、再認証する必要があります。 (例:p4 -p hostname:1666 からp4 -p ssl:hostname:1666 への変更)
3. SSL/TLS暗号化の有効化
すべてのP4Dトラフィックに対してSSL/TLS暗号化を有効化してください。
これにより、転送中のデータが盗聴や改ざんから保護されます。
2. アクセス権限の設定について
1. デフォルトの書き込み権限の見直し
プロテクションテーブルにデフォルトで存在する以下の行を、適切な権限設定に置き換えることが推奨されています。
write user * *//...
2. サーバーセキュリティレベルの引き上げ
security=4
securityを4(またはそれ以上)に設定してください。(設定値の適用にはサーバーの再起動が必要です。)
これにより、より強力なパスワードルールとアクセス制御が適用されます。
例(security=4):
- ログインするユーザーはパスワードが設定されている必要がある。
(アルファベット小文字のみのパスワードは不可) - ログイン時にチケットが要求される。
3. ユーザー自動作成の無効化
dm.user.noautocreate=2
新しいユーザーの作成を、super権限をもつユーザーのp4 user -fコマンドに限定する設定です。(設定値の適用にサーバーの再起動は不要です。)
4. 初期パスワード設定の制限
dm.user.setinitialpasswd=0
新しいユーザーの初期パスワードを設定するユーザーを、すでにパスワードが設定されているsuper権限を持つユーザーに限定する設定です。(設定値の適用にサーバーの再起動は不要です。)
3. リモートディポのセキュリティ強化について
P4はリモートディポ機能を通じてサーバー間の連携をサポートしています。
この機能では、remoteと呼ばれる特別なユーザーを使用して、あるサーバーから別サーバーのコンテンツにアクセスすることが可能です。
分散開発に有用なこの機能ですが、適切に設定されていない場合、以下のセキュリティリスクが生じる可能性があります。
デフォルトでは、remoteユーザーの権限はお客様のプロテクションテーブルに基づいて付与されます。しかし、プロテクションテーブユーザー的に範囲指定されておらず、security = 4(またはそれ以上)に設定されていない場合、不完全な認証で他のサーバーにディポの一部が公開されるリスクがあります。
1. セキュリティレベルの引き上げ
security=4
securityを4(またはそれ以上)に設定してください。(設定値の適用にはサーバーの再起動が必要です。)
これにより、自動的にremoteユーザーが無効化され、サーバー間アクセスには認証されたサービスユーザー(構成可能変数 serviceUser に指定したユーザー)が必要となります。
2. security = 4未満の場合の対策
プロテクションテーブルを使用してremoteユーザーのアクセスを明示的に制限してください。
4. 情報漏洩対策について
情報漏洩対策として、以下の構成可能変数の設定が推奨されています。
1. サーバー情報の保護
dm.info.hide=1
未認証のユーザーからサーバー名やライセンス状態などの重要情報を隠蔽する設定です。(設定値の適用にサーバーの再起動は不要です。)
この設定はsecurity = 4(またはそれ以上)と併用することが推奨されています。
2. ユーザーリストへのアクセス制限
run.users.authorize=1
未認証のユーザーがシステム内のユーザーリストを閲覧できないようにする設定です。(設定値の適用にサーバーの再起動は不要です。)
これにより、クレデンシャルスタッフィングやユーザー名を標的とした攻撃のリスクを低減します。
3. ログインエラー情報の最小化
dm.user.hideinvalid=1
無効なユーザー名でログインが試行された際に詳細なエラー情報を表示しないようにする設定です。(設定値の適用にサーバーの再起動は不要です。)
これにより、攻撃者がユーザー名の存在を確認できないようにします。
5. 各構成可能変数の設定について
構成可能変数の変更についてご対応をいただく場合、以下の手順でご実行いただけます。
■P4D 2018.2以前
コマンド例:
p4 -u super -p server:port configure set variable=value
* superにはsuper権限を持ったユーザー名を指定します。
* server:portにはmasterサーバーの接続先情報を指定します。
* variableには構成可能変数を指定します。
* valueには値を指定します。
エッジサーバー、レプリカサーバーなどを構築している場合、上述のコマンドにサーバーIDの指定するオプションを追加します。
コマンド例:
p4 -u super -p server:port configure set master#variable=value
* masterにはマスターサーバー(あるいはエッジサーバー、レプリカサーバー)のサーバーIDを指定します。
■P4D 2019.1以降
コマンド例:
p4 -u super -p server:port server master
* superにはsuper権限を持ったユーザー名を指定します。
* server:portにはmasterサーバーの接続先情報を指定します。
* masterにはサーバーIDを指定します。
変更例:
DistributedConfig:
dm.user.noautocreate=2
dm.user.setinitialpasswd=0
dm.info.hide=1
run.users.authorize=1
dm.user.hideinvalid=1
エッジサーバー、レプリカサーバーなどを構築している場合、上述のコマンド例からmaster の部分を各サーバーのサーバーIDにそれぞれ変更して実行ください。
securityの設定についても上記と同じ手順で設定いただくことができます。
ただし、こちらは設定値の反映にP4Dサービスの再起動が必要となるため、P4Dサービスの再起動を実行可能なタイミングで上記手順にて変更をご検討ください。
■ お問い合わせ先 ■
本件に関するご不明点や詳細については、以下までお問い合わせください。
株式会社東陽テクニカ ソフトウェア・ソリューション部
phone 03-3245-1248(直通) mail ss_support@toyo.co.jp