Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築)

1.321 visualizaciones

Publicado el

OWASP Nagoya Chapter ミーティング 第4回 / ハンズオン資料
~WordPressの脆弱性スキャンを行い、セキュアなWordPressを構築しよう!~

OWASPが提供する「OWASP Wordpress Security Implementation Guideline(OWASP WordPress セキュリティ実装ガイドライン)」を参考にしてWordPressのセキュリティ対策について説明し、実際に実装してみます。

  • Sé el primero en comentar

OWASP WordPressセキュリティ実装ガイドライン (セキュアなWordPressの構築)

  1. 1. OWASP WordPress セキュリティ実装ガイドライン 1 2018.04.07 (Sat) OWASP Nagoya
  2. 2. OWASP WordPress Security Implementation Guideline ● OSI参照モデルの物理層からアプリケーション層まで幅広くカバーしています ● rawデバイス(ディスク)の暗号化など、システムとハードの深層深部から全領域の暗号 化を追及しています ● 有名なCVEを重点的に訴求し、信頼性が高いドキュメントです ● 毎年、少しずつ更新されています 2 OWASP WordPressセキュリティ実装ガイドライン に沿って進めます https://www.owasp.org/index.php/OWASP_Wordpress_Security_Implementation_Guideline#WordPress_security
  3. 3. OWASP WordPress Security Implementation Guideline 3 OWASP WordPress セキュリティ実装ガイドライン の歴史 https://www.owasp.org/index.php?title=OWASP_Wordpress_Security_Implementation_Guideline&action=history 2014年10月 一気にプロジェクトが充実しました!
  4. 4. OWASP WordPress Security Implementation Guideline 4 以降、『実装ガイド』と呼称します
  5. 5. 目次 5 3.1 Apache堅牢化 3.2 php堅牢化 3.インフラセキュリティ 3.3 MySQL堅牢化 3.4 リモート接続 2.一般的なキュリティ 2.1デバイスセキュリティ 実装ガイドの番号に沿って記載します!
  6. 6. 4.1 アップデート 4.2 未使用プラグインとテーマの削除 4.3 プラグインとテーマのセキュリティ 4.4 バックアップ 4.5 ユーザー種別と権限 4.6 wp-adminのアクセス制限 4.7 ブルートフォースアタック対策 4.8 2要素認証の実装 4.9 デフォルト管理者アカウント削除/変更 4.10 ユーザー登録の無効化 4.11 データベーステーブル接頭辞の変更 6 4.12 コメント機能の制御 4.13 ファイル/ディレクトリパーミッション確認 4.14 readme.html と install.phpの削除 4.15 ブランクindex.phpファイルの追加 4.16 wp-config.phpファイルの移動 4.17 秘密鍵の作成 4.18 ダッシュボードの強制SSL 4.19 WAFの活用 4.20 セキュリティプラグイン各種 4.21 プラグインとテーマの編集の無効化 4. WordPressセキュリティ
  7. 7. 7 5.1 スタンダードイメージの作成 5.2 LDAP運用とシングルサインオンの活用 5.3 マルチサイト 5.4 複数ワードプレスの一元管理 5. 大規模運営
  8. 8. 8 2. 一般的なセキュリティ
  9. 9. 2.1 デバイスセキュリティ 9 WordPressサイトを見るデバイスのセキュリティです スマホやPCなど、デバイスのパスワード保 護 強力なパスワードを使う OSの更新 ストレージの暗号化 ウイルスソフトのインストールと更新 マルウェア/スパイウェアスキャナーのインストール 、スキャンの実行、スキャンソフト更新 ファイヤーウォールの設定 セキュアなブラウザ
  10. 10. 10 3. インフラセキュリティ
  11. 11. 11 3.1 Apache堅牢化① 定期的な更新 ウェブ上のディレクトリリスト表示の無効化 SSL化 Apache不要モジュールの削除 ※次ページにて 別のユーザーとグループにてデーモンを稼動 allow,denyによる各ディレクトリのアクセス制限 apacheを安全にするmod_securityの使用(WAF) シンボリックリンク無効化 SSI(Server Side Include)とCGI executionのオフ リクエストのサイズ制限 TimeOut, MaxClients, KeepAliveTimeout, LimitRequestFields, LimitRequestFieldSize、などの 設定(DOS攻撃対策) ログの有効化と設定 サーバーのバナー情報(ncコマンド)の変更 など
  12. 12. 3.1 Apache堅牢化② 12 Apache不要モジュール ※上記のモジュールが必要な環境もあります。必要に応じて使用してください userdir mod_userdir。ユーザー毎のウェブディレクトリを構成 suexec WEBサーバーを実行しているユーザーIDと異なるユーザーIDでCGIやSSIを実行 cgi/cgid mod_cgid。外部CGIデーモンを使ったCGIスクリプトの実行 include mod_mime。他の設定ファイルをIncludeディレクティブによって追加 autoindex mod_autoindex。ディレクトリ内のファイル一覧表示
  13. 13. 3.2 php堅牢化① 13 定期的な更新 php-cgiバイナリをインストールしない リスクのある不要なphpモジュールの無効化 潜在的に脅威を持つ不要なphpのfunctionの無効化※ 内部エラーログ設定 クライアントサイドのエラーレポート表示の無効化 アプリケーションのエラーログ表示無効化 リモートコード実行をオフにする マジッククオート(自動エスケープ)無効化 ファイルシステムへのphpアクセス制限 DOS攻撃対策(投稿容量サイズ、スクリプト の実行時間制限、メモリの利用率制限) php-suhosinのsecurity extensionを使う phpバージョンを隠す .php拡張子を隠す ※詳細は次ページにて確認します。
  14. 14. 3.2 php堅牢化② 14 潜在的に脅威を持つ不要なphpのfunctionの無効化 コマンド実行関数各種 ● exec ● passthru ● shell_exec ● system PHP Secure Configuration Checker https://github.com/sektioneins/pcc
  15. 15. 3.3 MySQL堅牢化 15 定期的な更新 リモートアクセスの制限、もしくは無効化 ファイルシステムのアクセス制限とACLs( access control lists)の設定 chrootによるrootサービス隠蔽の設計(指定ディ レクトリより上のディレクトリに進めない様に設 計) ネットワークの暗号化(WEBサーバーとDBサー バーを分離する場合、必須) rawデバイス(ファイルシステムを入れる前のデ ィスク)暗号化 バックアップデータの暗号化 MySQL設定 ※ ※MySQL設定は次のページとなります。
  16. 16. 3.3MySQL堅牢化 16 MySQL設定 同時接続数の上限設定 アクセス権/ユーザー権限管理 ログ設定 rootパスワード設定 rootアカウントのリネーム 未使用ユーザーや未使用データベースの削除 インストール履歴の削除
  17. 17. 3.4 リモート接続 ● FTPを使用しないで、SFTPを使用してください ● SSH接続を利用し、ファイル転送はSCPやWinSCPなどを使用してく ださい ● ダッシュボードログインはVPNかSSHトンネルを使用して接続してく ださい 17 サーバー接続
  18. 18. 18 4. WordPressセキュリティ
  19. 19. 4.WordPressセキュリティ 19 セキュリティ対象コンポーネント ● WordPress本体(コア) ● テーマ ● プラグイン
  20. 20. 4.1 アップデート① ● wp-config.phpにてWordPress本体(コア)自動アッ プデートの設定を行います define( 'WP_AUTO_UPDATE_CORE', true ); 20 アップデートはセキュリティホールの修繕として重要 「コアのマイナーバージョンアップ」と「翻訳ファイル」はデフォルトで自動更新。
  21. 21. 4.1 アップデート② functions.phpなどに記載します。 add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); 21 テーマとプラグインの自動更新
  22. 22. 4.2 未使用プラグインとテーマの削除 ● 脆弱性を余分にかかえることになるので、停止ではなく削除します ● 新たな脆弱性が発見されると、攻撃者は脆弱性を持つファイルを探す スクリプトを作成します ● 脆弱性が知られたプラグインの増加は、攻撃者にチャンスをより多く 与えることになります 22
  23. 23. 4.3 プラグインとテーマのセキュリティ① 23 ● WordPress公式のプラグイン・テーマを使用 ● WordPress公式の評価やコメントを参考に ● WordPress公式の最終更新日で、新旧具合を確認 ● WordPress公式の更新リリース頻度を確認 ● 現状のWordPressコアバージョンとの整合性を確認
  24. 24. 4.3 プラグインとテーマのセキュリティ② 24 ソースコード解析ツールを使う ● RIPS ● PHP-sat ● Yasca ※ ● Manual analysis using grep , GrepBugs ※Yascaはリンク先が以下の様に変更されています https://linuxsecurity.expert/tools/yasca/
  25. 25. 4.3 プラグインとテーマのセキュリティ③ ● 難読化された箇所 ● BASE64エンコードされた箇所 ● システムコール(exec, passthru, system, shell_exec など) ● PHPのコード実行(eval, assert, preg_replace など) ● 情報開示機能(phpinfo, getenv, getmygid/pid/uid, など) ● ファイルシステム関数(fopen, bz/gzopen, chgrp/own/mod など) 25 ソースコード解析ツールで対応できない部分
  26. 26. 4.3 プラグインとテーマのセキュリティ④ ● 可能性有 ● 事例有 26 公式プラグインに悪意の脆弱性! 補足
  27. 27. 4.3 プラグインとテーマのセキュリティ⑤ ● CVE ツイッター:@CVEnew https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=wordpress ● WPScan Vulnerability Database ツイッター:@_WPScan_ ※メール配信登録出来ます https://wpvulndb.com ● NVD https://nvd.nist.gov • WPScanを使って脆弱性スキャン 27 WordPress脆弱性情報のチェック 補足
  28. 28. 4.4 バックアップ① ● WordPressコア(本体) ● プラグイン ● テーマ ● 画像ファイル 28 バックアップ対象 ● jsとphpの各種ファイル ● その他のファイルや静的 WEBページ ● データベース
  29. 29. 4.4 バックアップ② ● BackWPupプラグインでDropbox,AMAZON S3などに保存 ● 「保存先リモートストレージアカウントを探りあてられ、データを全て削 除される」などのリスク対策として、WordPressインストール環境から アクセスできないように、取得したバックアップを隔離された場所への移 動(待避) 29 バックアップの自動化
  30. 30. 4.5 ユーザー種別と権限① 30 特権管理者 Super Admin マルチサイトのWordPressで全権を持つ管理者 管理者 Administrator シングルサイトのWordPress内で全権を持つ管理者 編集者 Editor シングルサイトのWordPress内で他ユーザーの分も含めて記事投稿/編集が 出来る 著者 Author シングルサイトのWordPressで投稿/編集できる。他ユーザー投稿の編集は 出来ない 寄稿者 Contributor シングルサイトのWordPressで下書き/編集は出来るが、公開投稿は出来な い。他ユーザー投稿の編集は出来ない 購読者 Subscriber シングルサイトのWordPressで自己のユーザープロフィールのみ編集可能
  31. 31. 4.5 ユーザー種別と権限② 31 ユーザー管理系プラグイン Members plugin Role Scoper Plugin User Access Manager Advanced Access Manager User Role Editor
  32. 32. 4.6 wp-adminアクセス制限① ● IPアドレスホワイトリスト ● 接続はローカルホストのみに制限 ● 管理者ユーザー専用のVPN ● SSHトンネルの活用 ● .htaccessの活用 ※次ページにて説明 32
  33. 33. 4.6 wp-adminアクセス制限② 以下の様に記載して接続IPアドレスを指定、ファイル/ディレクトリ全てア クセス制限します Order deny,allow Deny from all Allow from 127.0.0.1 33 wp-adminディレクトリにて .htaccess を使う ※127.0.0.1のIPアドレス部分はご自身のIPアドレスに適宜変えてください。
  34. 34. 4.7 ブルートフォースアタック対策① ● Google Captcha(reCaptcha)プラグインBy BestWebSoftの活用 https://wordpress.org/plugins/google-captcha/ ※バックドアが見つかったCaptchaプラグインとは別のプラグインです。 34 キャプチャ機能の実装
  35. 35. 4.7 ブルートフォースアタック対策② ● ログイン試行の上限回数を超えたら、一定時間ロックアウト ● IPアドレスによるロックアウトは、攻撃者のIPアドレスが変わる のでベストプラクティスではない 35 ログイン試行回数の上限を設定
  36. 36. 4.8 2要素認証の実装 ● Clef※1 ● Google Authenticator※2 ● MiniOrange and other 2FA Plugins 36 サポートプラグイン ※1 Clefはプラグイン公開終了/サポート終了しています ※2 Google Authenticatorは3年前から更新停止しています
  37. 37. 4.9 デフォルト管理者アカウントの削除/変更 37 ● ブルートフォースアタックの標的になる ● ユーザーID:1、すなわち id =1 としてのSQLインジェ クションの脆弱性を無効化する WordPress初期インストール時のadminユーザー削除
  38. 38. 4.10 ユーザー登録機能無効化 ● ダッシュボードにログインしていない状態のユーザー 登録機能の無効化を行う ○ 「設定」⇒「一般」⇒「だれでもユーザー登録がで きるようにする」にてチェックを外す 38
  39. 39. 4.11 データベース接頭辞変更 ● WordPressの初期インストール中に設定可能 ● MySQLかphpmyadminやプラグインで変更する場合、wp-config.phpの 接頭辞変更も必要 ● db-prefix-change(※)プラグインで可能 ※最終更新は1年以上前 39 wp_ ではないデータベーステーブル接頭辞に変更
  40. 40. 4.12 コメント機能の制御 ● コメント機能無効 ● 登録済ユーザーだけにコメント機能利用制限 ● コメント公開の手動承認 ● Akismetプラグインの様なアンチスパムプラグインの活用 40
  41. 41. 4.13 パーミッション確認 41 ファイル/ディレクトリ パーミッション wp-config.php 400 wp-content/uploads/ 755 .htaccess 400
  42. 42. 4.14 readme.htmlとinstall.phpの削除 以下3種のファイルを削除します /<WordPress_root>/readme.html /<WordPress_root>/license.txt /<WordPress_root>/wp-admin/install.php 42
  43. 43. 4.15 ブランクindex.phpファイル追加 43 以下のディレクトリに追加 wp-includes wp-content wp-content/plugins wp-content/themes wp-content/uploads
  44. 44. 4.16 wp-config.phpファイルの移動 WordPressドキュメントルートからルートディレクトリに wp-config.phpファイルの位置をずらします public_htmlよりも違う位置の階層に移動させ、wp- config.phpファイルへのインターネット経由アクセスを禁 止させます 44
  45. 45. 4.17 秘密鍵の作成 define( 'AUTH_KEY', 't`DK%X:>xy|e-Z(BXb/f(Ur`8#~UzUQG-^_Cs_GHs5U-&Wb?pgn^p8(2@}IcnCa|' ); define( 'SECURE_AUTH_KEY', 'D&ovlU#|CvJ##uNq}bel+^MFtT&.b9{UvR]g%ixsXhGlRJ7q!h}XWdEC[BOKXssj' ); define( 'LOGGED_IN_KEY', 'MGKi8Br(&{H*~&0s;{k0<S(O:+f#WM+q|npJ-+P;RDKT:~jrmgj#/-,[hOBk!ry^' ); define( 'NONCE_KEY', 'FIsAsXJKL5ZlQo)iD-pt??eUbdc{_Cn<4!d~yqz))&B D?AwK%)+)F2aNwI|siOe' ); define( 'AUTH_SALT', '7T-!^i!0,w)L#JK@pc2{8XE[DenYI^BVf{L:jvF,hf}zBf883td6D;Vcy8,S)-&G' ); define( 'SECURE_AUTH_SALT', 'I6`V|mDZq21-J|ihb u^q0F }F_NUcy`l,=obGtq*p#Ybe4a31R,r=|n#=]@]c #' ); define( 'LOGGED_IN_SALT', 'w<$4c$Hmd%/*]`Oom>(hdXW|0M=X={we6;Mpvtg+V.o<$|#_}qG(GaVDEsn,~*4i' ); define( 'NONCE_SALT', 'a|#h{c5|P &xWs4IZ20c2&%4!c(/uG}W:mAvy<I44`jAbup]t=]V<`}.py(wTP%%' ); 45 wp-config.phpにて(見本キーは使わないでください) キーのジェネレータを使う事ができます https://api.wordpress.org/secret-key/1.1/salt/
  46. 46. 4.18 ダッシュボード強制SSL① 以下を記載してください define('FORCE_SSL_ADMIN', true); ※ FORCE_SSL_LOGIN はコア4.4で非推奨になりました 46 wp-config.phpにて
  47. 47. 4.18 ダッシュボード強制SSL② グーグルもSSLを推奨しています Google Security Blog『Next Steps Toward More Connection Security』2017/4/27 https://security.googleblog.com/2017/04/next-steps-toward-more-connection.html 47 WordPress全面SSL化を推奨します。 補足
  48. 48. 4.19 WAFの活用 ● BOT、コードインジェクション、admin-ajax.phpやindex.phpへのファ イルアップロードなど、攻撃の形跡ログが見やすい ● criticalやmediumなど脅威レベルの把握 ● httpヘッダのポリシー管理機能 ● ログイン画面だけでなく、BOT防御、認証ログ、xml-rpc保護機能 48 NinjaFirewallプラグイン
  49. 49. 4.2 セキュリティプラグイン各種 ● iThemes Security ● BulletProof Security ● All In One WP Security & Firewall ● Sucuri Security ● Acunetix WP Security & Acunetix Secure WordPress※ ● Wordfence Security Plugin 49 ※Acunetixは、数年前から更新が完全に止まっています。
  50. 50. 4.21 プラグインとテーマの編集機能無効化 ダッシュボードのプラグイン/テーマの編集機能の無効化 define('DISALLOW_FILE_EDIT',true); 50 wp-config.phpの設定にて
  51. 51. 51 5.大規模運営
  52. 52. 5.1 スタンダードイメージ作成 セキュリティ設定とプラグイン設定がなされた基本イメージの作成 52 大企業で多数のWordPressを同時に取り扱う場合、一元管理システムを導入 イメージより作られる複数の新WordPressインスタンスには、以下3項目の設定で運用スタートでき るようにします 1. 設定(一般) 2. データベース接続アカウント 3. 管理者アカウント設定
  53. 53. 5.2 LDAPとシングルサインオン サポートプラグイン ● Active Directory Integration / LDAP Integration ● Single Sign On for Windows ● Simple LDAP Login 53 Active Directoryや他のLDAP互換サービスとの連携も可能
  54. 54. 5.3 マルチサイト① ● ワードプレスのネットワーク機能を使って構築 ● テーマとプラグインのディレクトリは複数ワードプレスで共有 ● メディアとデータベーステーブルについては複数ワードプレスで 非共有 54 1つのワードプレスインストールで複数ワードプレスを保持
  55. 55. 5.3 マルチサイト② 複数ワードプレスのセキュリティ管理(テーマとプラグイ ンの更新)を一元化出来る 55 メリット(デメリット)
  56. 56. 5.4 複数ワードプレス一元管理① ● マルチサイトと対照的な手法 ● 1つ1つのWordPressが完全に独立しているケース 56 ワードプレスを複数インストール
  57. 57. 5.4 複数ワードプレス一元管理② ● InfiniteWP , InfiniteWP Client(プラグイン) ログイン、更新、バックアップ、リストアの一元管理が出来ます。 ● ManageWP ● WPRemote 57 一元管理向けツール各種
  58. 58. 6.参照 58 実装ガイドの下段に各種参照リンクがあります。
  59. 59. OWASP WordPress セキュリティ実装ガイドライン https://www.owasp.org/index.php/OWASP_Wordpress_Security_Implementation_Guideline セキュアなWordPressの構築 ハンズオンスタートです! 59 是非、読んでみてください!
  60. 60. 謝辞 60 本資料の作成に当たり多大なる支援をしてくださった方々に 感謝の意を表します。 (順不同) ・井上 茂 ・村井 剛 ・西村 将利 ・谷口 貴之 ・丹羽 雪晴 ・All OWASP Nagoya Staff ・坂梨 功典 ・加藤 人生 ・清水 健吾 ・浅田 竜起

×