Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,656 views

Published on

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

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

  • Visit this site: tinyurl.com/sexinarea and find sex in your area for one night)) You can find me on this site too)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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 ・坂梨 功典 ・加藤 人生 ・清水 健吾 ・浅田 竜起

×