WordPressとリスク管理 at 第42回 WordBench大阪
-
Upload
kitani-kimiya -
Category
Technology
-
view
257 -
download
1
Transcript of WordPressとリスク管理 at 第42回 WordBench大阪
@kimipooh IT よろず屋(大学教員)
ヘルプディスク、コンサルティング、コーディネーター コンテンツマネージャー、ネットワーク管理、サーバー管理 データベース開発
リアル出没先 WordBench 京都 WordBench 大阪
オンライン上 Gmail ヘルプフォーラム Google Apps for Work ヘルプフォーラム
WordPress との関わりあい 出会い
2010 年 7 月 9 日 オープンソースカンファレンス 2010 Kansai@Kyoto
WordPress でのサイト構築 2012 年 4 月 5つ同時立ち上げ
WordPress コミュニティ 2012 年 5 月 第 5 回 WordBench 京都 2012 年 7 月 第 7 回 WordBench 京都でスピーカー(プラグインの公式リポジトリ登録) 2013 年 1 月 第 13 回 WordBench 大阪 2013 年 5 月 第 17 回 WordBench 大阪でスピーカー(昔の WordPress をインストールした
よ!)
プラグインと本体のアップデートが管理パネルから容易に出来る
16 サイト(公開 13 )
リスクとは 改ざん(加害者は誰だ!)
ログインされて・・・ 脆弱性を攻撃されて・・・ 内部攻撃されて・・・ 初期化されて・・・( wp-admin/
install.php 消し忘れ・・・) 動作不安定
システムをアップデートしたら真っ白に・・・
テーマ変更したら真っ白に・・・ データ破損
文字化け・・ 複数人が打ち合わせなく作業して・・・
情報漏洩 うっかり公開
/◯◯/ のアクセスでフォルダ丸見え( Directory Index )
利用メーリングリストが公開されちゃってた・・
盗聴 パスワード盗聴(ログインが非暗号) 管理データ・パスワードロックデータ(非暗
号)
端末感染 添付ファイル(ウィルス)付きメールを開
いた・・ ウェブサイトを開いたら・・・
本当に攻撃はしてくるのか4 月の エラーログ( 7,738) 件数Directory index forbidden 20
/trackback/ 92
File name too long 24
PHP Fatal error(Cannot redeclare class PHPMailer)
30
File does not exist 28
PHP Warning 71
PHP Notice (Use of undefined constant) if ($lang == ja) …. × if ($lang === ‘ja’) … ◯
114
Client denied 7,574 (97.9%)
┣ xmlrpc.php 74
┣ wp-login.php 3,077 (39.8%)
┣ /wp-admin/ 57
┣ themes/**/images/…jpg 4,255
┗ /…/ or /wp-content/…/ 等 111
本当に攻撃はしてくるのか
4 月のログ( wp-login.php ) ブロック件数総計(クライアント数 : 90 ) 3,077
ウクライナ (5) 648
中国 (3) 183
韓国 (2) 120
香港 (1) 60
テーマでみるWordPress の歴史
テーマ履歴 2003.05.27 初期( 0.71-gold 〜 1.0-platium ) 2004.05.22 WordPress Classic ( 1.2-delta 〜 ) 2005.02.17 KUBRCK ( 1.5-strayhorn ) 2010.06.17 Twenty Ten ( 3.0 〜)
WordPress と WordPess MU 統合
2011.07.05 Twenty Eleven ( 3.2 〜) 2012.12.12 Twenty Twelve ( 3.5 〜) 2013.08.02 Twenty Thirteen ( 3.6 〜) 2013.12.14 Twenty Fourteen ( 3.8 〜) 2014.12.19 Twenty Fifteen ( 4.1 〜)
テーマも刷新されていく
昔を懐かしむ - セキュリティ関連フィックス -
0.71-gold
PHP5.3 以降では動作しない( $HTTP_GET_VARS 利用) DB 作成時に「 utf8_unicode_ci 」を明示設定必要
1.0-platinum
ログインパスワードの非暗号 1.2-delta
PHP5.4 以降対応( $HTTP_GET_VARS → $_GET ) ログインパスワードの暗号( MD5 ハッシュ)
2.2
DB_CHARSET, DB_COLLATE ( DB 照合順序)追加 wp-config.php
完全な ATOM フィードが追加 2.3
プラグインを含むアップデート通知機能(ダッシュボード) 2.6
初期パスワードの強固化( 7 文字、英数字(大文字小文字含む)) → 12 文字、英数字(大文字小文字含む)、記号
secret-key が導入( wp-config.php ) 2.7
secret-key が強化( SALT が追加) 2.8
テーマのインストールが可能に
3.0
WordPress と WordPress MU の統合 インストール時に、管理者ユーザーとパスワード
を変更できるように 3.2
動作環境:PHP5.2.4 /MySQL 5.0 以降 IE6 のサポート終了
3.5
XML-RPC が既定で有効化(無効設定が消えた) 3.6
自動保存機能の追加 投稿ロック機能
3.7
本体、翻訳ファイルの自動アップデート機能 4.0
多言語切り替えが容易に FORCE_SSL_LOGIN の廃止
( FORCE_SSL_ADMIN として動作) オレオレ証明書( SSL自己証明書)の場
合、 JetPack 連携できないように・・・ 4.2
絵文字対応
バックアップの自動化- BackWPUP編 -
データベースとファイル/フォルダのバックアップ デフォルト:wp-content/uploads/backwpup-◯◯-backups/
復元は手動 データベースを復元 ファイル/フォルダの復元
基本セキュリティのおさらい WordPress (動的に HTML コードを生成し表示)
システム(ログイン、管理データ) プラグイン テーマ データ(データベース)
サーバー OS
ウェブシステム( +PHP ) データベーシステム( MySQL ) リモートアクセス
クライアント(ウェブ編集者・管理者)
1. システムアップデート
システム 自動アップデート
プラグイン 自動アップデート
公式プラグイン
テーマ 自動アップデート
公式テーマ 公式テーマをベースに子テーマ構成
サイトへのアクセスで発動
発動しないことがある
ローカルページ
バックアップ…
2. ログイン制限①初期ユーザーの変更
「 admin 」 を使っていたら変更するか削除しましょう 「 root 」などいかにも管理者ユーザーっぽいのは避けましょう
3.0 以降は初期セットアップ時に初期管理者ユーザー名を変更可
2. ログイン制限② IP / ホスト制限 wp-config.php (システム環境ファイル)
wp-login.php (ログイン)
/wp-admin/ (管理画面)
xmlrc.php ( XML-RPC を利用した投稿)
Apache のケースで紹介
ウェブサーバーが、 .htaccess の設定を許可している場合に限る
2. ログイン制限② IP / ホスト制限
<Files ‘wp-config.php’> deny from all</Files>
wp-config.phpへの制限 ( .htaccess )
このファイルには DB アクセス情報が入っている
2. ログイン制限② IP / ホスト制限
<Files ‘wp-login.php’> Order Deny, Allow Deny from all Allow from 127.0.0.0/8 Allow from uqwimax.jp </Files>
wp-login.phpへの制限 ( .htaccess )
「 IP アドレスチェック」で接続端末のインターネットから見えるグローバル IP アドレスとクライアントホスト名をチェック
プロバイダ全体でも効果あり
ログイン制限による予防② IP / ホスト制限
<Limit GET POST> Order Deny, Allow Deny from all Allow from 127.0.0.0/8 Allow from uqwimax.jp </Limit>
<Files 'admin-ajax.php'>
Order Allow,Deny Allow from all Satisfy any
</Files>
/wp-admin/への制限 ( wp-admin/.htaccess )
テーマ / プラグインによって、制限で動作しなくなる可能性の排除
WordPress Codex 日本語版 http://wpdocs.osdn.jp/ ブルートフォース攻撃
2. ログイン制限② IP / ホスト制限
<Files ‘xmlrpc.php’> Order Deny, Allow deny from all
allow from jetpack.wordpress.com
allow from 192.0.0.0/255.255.0.0
</Files>
xmlrpc.phpへの制限 ( wp-admin/.htaccess )
JetPack 対策
wp-config.php add_filter('xmlrpc_enabled','__return_false'); Pinback は防げない
SiteGuard WP Pluginや WP Total Hacks プラグイン等のプラグインによるピンバックブロック機能も使えるかも
2. ログイン制限② IP / ホスト制限xmlrpc.phpへの制限 ( wp-admin/.htaccess )
WordPress 上でサイトのリンクを貼る
リンク元に通知( pingback )
リンク元に通知( pingback )
サイトのリンクを記事に貼りまくれ!!(確保した大量の WordPress サイト)
コメント欄にも通知
コメント欄に記事リンクが掲載(承認)
攻撃者
コメント欄に記事リンクが掲載(承認)
過負荷でアクセスできない
Pingbackチェック: http://labs.sucuri.net/?is-my-wordpress-ddosing
Google から API Key を入手 https://console.developers.google.com
Client ID, Secret キーを取得 Google Apps Login プラグインを導入
Client ID, Secret キーを入力
3. 外部認証システムの活用( Google アカウント編)
http://kitaney-google.blogspot.jp/ で「 WordPress 」検索
ユーザー名もパスワードも教えない
よりセキュアな外部認証を使える
4. サイト管理画面の暗号化 サイトまるごと暗号化( http:// https:// )
設定( WordPress アドレス、サイトアドレスを https:// ) リダイレクト設定
特定ページのみ暗号化(お問い合わせフォームのみとか) サイト管理画面のみ暗号化
( http://◯◯/wp-admin/ https://◯◯/wp-admin/ ) wp-config.php に、 define(‘FORCE_SSL_ADMIN’, true); を追加
サーバーが対応していて、 https://◯◯/wp-admin/ でもアクセスできるようになっていることが前提
オレオレ証明書( SSL自己証明書) jetpack 連携できないよ〜
5. アーカイブサイトの静的 HTML 化 もう誰もログインしないけれど、アーカイブはしておきたい
終了したプロジェクトのウェブサイト等
いつまでもやっていられない
WordsPerss のアップデート
データベースの脆弱性
5. アーカイブサイトの静的 HTML 化 StaticPress プラグイン編
事前テストができる パーマネント設定なら、フォルダ構造も引き継がれる
http://localhost:8888/wordpress/wordpress/static/
6. プラグインによる予防 自動バックアップ
BackWPUP (データベース・ファイルすべて) WP-DBManager (データベースのみ、復元も可能)
診断 AntiVirus (簡易テーマ / テンプレートチェック) Theme Check (テーマチェック) Exploit Scanner ( WordPress システム改ざんチェック)
( https://github.com/philipjohn/exploit-scanner-hashes) Broken Link Checker (コンテンツ内のリンク切れチェック)
自動更新 WP-CLI (コマンドラインから WordPress を管理)
履歴管理 Crazy Bone (ログイン、ログアウト履歴管理)
暗号化 WordPress HTTPS (非推奨)
6. プラグインによる予防 防衛
SiteGuard WP Plugin
/wp-admin/へのアクセス制限、ログイン対策、スパム対策、 WAF 、ピンバック無効等 Login Security Solution
総当たり攻撃防衛、パスワード強度設定 Acunetix WP Security
不必要な情報開示を回避 User Role Editor
ユーザーごとの細かいアクセス権限設定 Google Apps Login
Google アカウント認証を用いたログイン強化 Gianism
Facebook, Twitter 等 SNS を用いたログイン強化 Force Email login
メールアドレスをユーザー名の代わりに強制することでログイン強化 All In One WP Security & Firewall
多機能セキュリティ対策 WP Total Hacks
ピンバックをブロック(セルフピンバック含む)
付録 – プラグイン利用方法
AntiVirus 簡易テーマ / テンプレートチェック
Exploit Scanner WordPress システム改ざんチェック
Acunetix WP Security 不必要な情報開示を回避と問題点
Exploit Scanner
https://github.com/philipjohn/exploit-scanner-hashes
利用している WordPress バージョン用のMD5 checksum ( hashes- バージョン .php )が必要
1.4.4 = WordPess 3.1.7 - 4.2.1 (英語版) 最新:
4.2.2
参照: [閉 ] WordPress 日本語版用 Exploit Scanner ハッシュファイル https://ja.forums.wordpress.org/topic/2743?replies=20
1. 4.2.2 英語版の利用
2. 自分で作る
Exploit Scanner
https://github.com/philipjohn/exploit-scanner-hashes
hashes-generator.php
$latest = 'https://ja.wordpress.org/wordpress-4.2.2-ja.zip';$file = 'wordpress-4.2.2-ja.zip';
日本語版ダウンロード: https://ja.wordpress.org/releases/#latest
①ハッシュジェネレータのダウンロード
②ハッシュジェネレータの書き換え
③ハッシュジェネレータの起動&作成ファイルの MD5値をメモphp hashes-generator.php > hashes-4.2.2.php
③ハッシュを Exploit Scanner プラグインフォルダへ移動hashes-4.2.2.php を移動
④Exploit Scanner の認識を確認MD5 of hashes-4.2.2.php の値と、 md5 hashes-4.2.2.php の値の一致確認
md5 hashes-4.2.2.php
Exploit Scanner1. ターミナルアプリ起動2. cd ~/Desktop && mkdir exploit-scanner-dev3. cd ~/Desktop/exploit-scanner-dev4. curl –O https://raw.githubusercontent.com/philipjohn/exploit-
scanner-hashes/master/hashes-generator.php5. open –a textedit hashes-generator.php
6. php hashes-generator.php > hashes-4.2.2.php7. md5 hashes-4.2.2.php
8. hashes-4.2.2.php を、 wp-content/plugins/exploit-scanner/ へ
9. 確認
$latest = 'https://ja.wordpress.org/wordpress-4.2.2-ja.zip';$file = 'wordpress-4.2.2-ja.zip';
日本語版ダウンロード: https://ja.wordpress.org/releases/#latest
MD5 (hashes-4.2.2.php) = 6214151dc39b725871bb7e76355afb40
Acunetix WP Security
過去の問題 Secure WordPress からの名称変更した際に、アップデート時
に「プラグインが停止したとエラー」 再度有効化すれば OK
Secure WordPress 2.0.2 利用時に、 WordPress 3.2.1へアップグレードすると、サイトが止まる
exist signal Segmentation fault が… PHP の JSON拡張仕様変更によって、いくつかのライブラ
リファイルが削除され、それを必須としたプラグイン側がハングした。
Acunetix WP Security - Settings-
Hide WordPress version for all users but administrators
Remove various meta tags generators from the blog's head tag for non-administrators
Try to create the index.php file in the wp-content, wp-content/plugins, wp-content/themes and wp-content/uploads directories to prevent directory listing
Remove the version parameter from urls
Empty the content of the readme.html file from the root directory