1K Views
September 21, 16
スライド概要
WordCamp Tokyo 2016講演資料
CMS四天王への攻撃デモを通じて、 WordPressの効果的な防御法を学ぼう 2016年9月17日 HASH コンサルティング株式会社 代表取締役 徳丸 浩
徳丸浩の自己紹介 • 経歴 – 1985年 京セラ株式会社入社 – 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍 – 2008年 KCCS退職、HASHコンサルティング株式会社設立 • 経験したこと – 京セラ入社当時はCAD、計算幾何学、数値シミュレーションなどを担当 – その後、企業向けパッケージソフトの企画・開発・事業化を担当 – 1999年から、携帯電話向けインフラ、プラットフォームの企画・開発を担当 Webアプリケーションのセキュリティ問題に直面、研究、社内展開、寄稿などを開始 – 2004年にKCCS社内ベンチャーとしてWebアプリケーションセキュリティ事業を立ち上げ • 現在 – – – – HASHコンサルティング株式会社 代表 http://www.hash-c.co.jp/ 京セラコミュニケーションシステム株式会社 技術顧問 http://www.kccs.co.jp/ 独立行政法人情報処理推進機構 非常勤研究員 http://www.ipa.go.jp/security/ 著書「体系的に学ぶ 安全なWebアプリケーションの作り方」(2011年3月) 「徳丸浩のWebセキュリティ教室 」(2015年10月) – 技術士(情報工学部門) 3
CMS四天王とは • WordPress • Joomla! • Drupal • Movable Type • 私が命名しました • 異論は認めます (^^; 4
ウェブサイトの侵入事例に学ぼう Joomla! Drupal Movable Type WordPress … 5
情報通信研究機構(NICT)ウェブサイトへの侵入 事件 Joomla2.5.2の権限昇格脆弱性 6
http://www.nict.go.jp/info/topics/2012/05/announce120516.html より引用 7
http://www.nict.go.jp/info/topics/2012/05/announce120516.html より引用 8
なにがあったか • 2012年3月15公開のJoomla! 2.5.3で修正された脆弱性 • NICTが攻撃されたのは5月1日 なので、脆弱性公開から1.5ヶ 月で攻撃を受けたことになる • ユーザ登録時に、特殊な操作 により、自ら管理者権限を得 ることができる • 続きはデモで 9
ユーザー登録画面にて パスワードをわざ と違えておく 10
ユーザーグループを示すパラメータを追加 &jform[groups][]=7を追加 11
攻撃の流れ 1. パスワードをわざと不整合にしておく 2. ユーザ登録時に jforms[groups][]=7 をPOSTパラ メータに追加 3. バリデーションでエラー発生 4. 再入力に備えてリクエストのパラメータをすべて セッションに保存(コントローラ) 5. モデル側で、セッションの中味をすべて取り込み 6. 2.で追加したgroupsが取り込まれる 12
日本テレビの侵入事件 ケータイキット for Movable Type 13
http://itpro.nikkeibp.co.jp/atcl/news/16/042301210/ より引用 14
ケータイキット for Movable Type の脆弱性 (CVE-2016-1204) に関する注意喚起 各位 JPCERT-AT-2016-0019 JPCERT/CC 2016-04-26(新規) 2016-05-06(更新) <<< JPCERT/CC Alert 2016-04-26 >>> ケータイキット for Movable Type の脆弱性 (CVE-2016-1204) に関する注意喚起 https://www.jpcert.or.jp/at/2016/at160019.html I. 概要 アイデアマンズ株式会社のケータイキット for Movable Type には、OS コマンドインジェクションの脆弱 性 (CVE-2016-1204) があります。この脆弱性を悪用された場合、当該製品が動作するサーバ上で任意の OS コマンドを実行される可能性があります。 本脆弱性や影響の詳細については、以下を参照してください。 Japan Vulnerability Notes JVNVU#92116866 ケータイキット for Movable Type に OS コマンドインジェクションの脆弱性 https://jvn.jp/vu/JVNVU92116866/ なお、本脆弱性を悪用した攻撃活動が確認されているとの情報があります。 https://www.jpcert.or.jp/at/2016/at160019.html より引用 15
日本テレビ放送網株式会社による調査報告書 「個人情報不正アクセスに関する調査報告書」より引用 http://www.ntv.co.jp/oshirase/20160714.pdf 16
ケータイキット for Movable Typeは何が問題だったか? • ImageMagickのconvertコマンドを用いて画像変換をしている # わりとよくある • convertコマンドのパラメータについて – バリデーションを十分していない – エスケープもしていない ← こちらが主原因 • ファイル名については、ファイルの存在チェックがあり、攻 撃は難しい • convertに渡すパラメータはノーチェック • OSコマンドインジェクションが可能 17
Drupageddon DruaplのSQLインジェクション脆弱性(CVE-2014-3704) 18
Drupalとは Drupal(ドルーパル、発音: /ˈdruːpəl/)は、プログラム言語PHPで記述され たフリーでオープンソースのモジュラー式フレームワークであり、コンテ ンツ管理システム (CMS) である。昨今の多くのCMSと同様に、Drupalはシ ステム管理者にコンテンツの作成と整理、提示方法のカスタマイズ、管理 作業の自動化、サイトへの訪問者や寄稿者の管理を可能にする。 その性能がコンテンツ管理から、幅広いサービスや商取引を可能にするに まで及ぶことから、Drupalは時々「ウェブアプリケーションフレームワー ク」であると評される。Drupalは洗練されたプログラミング・インター フェースを提供するものの、基本的なウェブサイトの設置と管理はプログ ラミングなしに成し遂げることができる。Drupalは一般に、最も優れた Web 2.0フレームワークの一つであると考えられている。 ※Wikipediaより引用 WhiteHouse NASA 国立国会図書館カレントアウェアネス 19
Drupageddon(CVE-2014-3704)とは • Drupal Ver7.31以前に存在するSQLインジェクション 脆弱性 • 非常に危険性の高い脆弱性であるので、アルマゲド ンをもじってドゥルパゲドンと命名された模様 • Drupal core の データベース抽象化 API (一種のSQL ジェネレータ)の expandArguments 関数における SQL インジェクションの脆弱性 • 日本ではあまり話題になっていない(Drupalのシェ アのせい?) 20
Drupalの脆弱性突く攻撃横行、「侵入されたと想定して対処を」 オープンソースのコンテンツ管理システム(CMS)「Drupal」に 極めて深刻な脆弱(ぜいじゃく)性が見つかった問題で、Drupalは 10月29日、脆弱性修正のパッチを直後に適用しなかったWebサイト は侵入された可能性があると警告した。米セキュリティ機関のUSCERTも、アップデートや回避策の適用を呼びかけている。 問題の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 より引用 21
SQLインジェクションを試す
キー名に追加のSQL文を書く
name[2 ;SELECT sleep(10) -- ]=&name[2]=user2
プレースホルダの後ろに追加のSQL文が現れる
SELECT * FROM {users} WHERE name = :name_2 ;SELECT sleep(10) -- ,
:name_2 AND status = 1
実際に呼び出されるSQL文
SELECT * FROM users WHERE name = 'user2' ;SELECT sleep(10) -- , '
user2' AND status = 1
詳しくは http://blog.tokumaru.org/2014/10/drupal-sql-injection-cve-2014-3704.html 参照
22
えのしま・ふじさわポータルサイト(え のぽ) 侵入事件 Joomlaのコード実行脆弱性(CVE-2015-8562) 23
「Joomla!」脆弱性を突かれスパム送信の踏み台に - 藤沢市関連サイト 「えのしま・ふじさわポータルサイト(えのぽ)」が不正アクセスを受け、 スパムメール送信の踏み台に悪用されていたことがわかった。 同サイトは、藤沢市が開設し、その後NPO法人である湘南ふじさわシニア ネットが藤沢市と協働運営の協定のもと運営する地域のポータルサイト。 藤沢市によれば、同サイトで利用するコンテンツマネージメントシステム (CMS)の「Joomla!」とPHPの既知の脆弱性が突かれ、不正アクセスを 受けたという。 2015年12月24日にサーバの負荷が急増したことからサーバを停止。1月12 日より同市が調査を行っていたが、今回の不正アクセスにより、同サーバ より約60万件のスパムメールが送信されていたことが判明した。 同サイトでは、「健康づくり応援団」「おいしいふじさわ産」「いきいき シニアライフ」「自治会・町内会ページ」などのコンテンツも運営してい るが、いずれも個人情報を扱っておらず、情報漏洩はないと説明している。 同サイトは現在も停止しており、セキュリティ対策など再発防止策を講じ たうえで再開する予定。 http://www.security-next.com/066075 より引用 24
Joomlaに深刻な脆弱性、パッチ公開2日前から攻撃横行 セキュリティ企業によると、Joomlaの脆弱性修正パッチが公開される2日前から、この脆弱性 を突くゼロデイ攻撃の発生が確認されていたという。 オープンソースのコンテンツ管理システム(CMS)「Joomla」の更新版 が12月14日(米国時間)に公開され、深刻な脆弱性が修正された。セキュ リティ企業のSucuriは、パッチが公開される2日前からこの脆弱性を突くゼ ロデイ攻撃の発生が確認されていたとして、Joomlaを使っているWebサイ トでは直ちにパッチ適用やログ確認などの対応に乗り出すよう促している。 Joomlaの脆弱性はバージョン1.5.0~3.4.5に存在していて、悪用されれば リモートでコードを実行される恐れがある。更新版のバージョン3.4.6でこ の問題が修正された。 Sucuriのブログによれば、この脆弱性は簡単に悪用することができるとい い、12月12日の時点で既に、この問題を悪用した攻撃コードが出回ってい たという。 同月13日から14日にかけて攻撃はさらに拡大。Sucuriが運営するWebサ イトやハニーポットがことごとく攻撃されたといい、「他のあらゆる Joomlaサイトも恐らく標的になっている」と同社は推測する。 http://www.itmedia.co.jp/enterprise/articles/1512/15/news048.html より引用 25
攻撃の方法(ネットで流通しているものを一部改変)
• User-Agentに下記を設定してJoomla!サイトに2回アクセスす
るだけ。かんたん!
}__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":
0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"s
anitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:239:"eval(chr(11
5).chr(121).chr(115).chr(116).chr(101).chr(109).chr(40).chr(39).chr(116).chr
(111).chr(117).chr(99).chr(104).chr(32).chr(47).chr(116).chr(109).chr(112).c
hr(47).chr(102).chr(120).chr(39).chr(41).chr(59));JFactory::getConfig();exit";
s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";
O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"\0\0\0connection";b:
1;}𠮷野家
26
攻撃の流れ(Sucuriの解説より) • Joomla! がUser-Agentをセッション変数に保存するので、 セッション形式のデータ(文字列)をUser-Agent経由でセッ トする • その際、「𠮷野家」がトリガーとなって、セッションデータ の切り詰めが起きる(MySQLの仕様) • 切り詰めが起きると、文字列がオブジェクトに化ける(PHP の脆弱性CVE-2015-6835PHPの脆弱性 ) • 生成されたオブジェクトのデストラクタ経由にて任意のスク リプト実行が可能になる 27
MySQLの仕様確認 $ mysql test -u root -p mysql> CREATE TABLE test (test varchar(256)) DEFAULT CHARSET=utf8; mysql> INSERT INTO test VALUES ('今日のお昼は吉野家にするよ'); mysql> INSERT INTO test VALUES ('今日のお昼は𠮷野家にするよ'); mysql> SELECT * FROM test; +-----------------------------------------+ | test | +-----------------------------------------+ | 今日のお昼は吉野家にするよ | 𠮷野家から先がなくなる | 今日のお昼は | +-----------------------------------------+ 2 rows in set (0.00 sec) UTF-8の4バイト文字を登録しようとすると、そ の文字を含め、それ以降が切り詰められる!! 28
CVE-2015-6835 http://jvndb.jvn.jp/ja/contents/2015/JVNDB-2015-007161.html より引用 29
WordPress のプラグインの脆弱性 WP Mobile Detectorの脆弱性 30
「WordPress」の「WP Mobile Detector」プラグインに脆弱性 コンテンツ管理システム(CMS)「WordPress」のプラグインである「WP Mobile Detector」にゼロデイ脆弱性が発見された。同プラグインは、モバ イル機器の種類を検出し、最適なかたちでコンテンツを提供するためのも のであり、1万を超えるウェブサイトで使用されているという。 この脆弱性はPlugin Vulnerabilitiesの研究者らによって発見され、米国時 間5月31日に同社ブログで発表された。 同社の研究者らが潜在的な問題に気付いたのは、WP Mobile Detectorを インストールしていないCMSのドメインに向けて、同プラグインのファイ ルであるblog/wp-content/plugins/wp-mobile-detector/resize.phpに対する HEADリクエストが送られてきたのがきっかけだ。 研究者らによる詳細な調査の結果、これは「何者かがプラグインに存在 する脆弱性を攻撃する前に、同ファイルの存在をチェックしている」可能 性が高いという結論に達した。 セキュリティ企業Sucuriによると、このゼロデイ脆弱性自体は「容易に悪 用できる」ものだという。同脆弱性により、簡単なPOSTリクエストを送信 するだけで、悪意のあるファイルをウェブサイトにアップロードし、バッ クドアとして機能させることが可能になる。 http://japan.zdnet.com/article/35083773/ より引用 31
WP Mobile Detector Vulnerability Being Exploited in the Wild For the last few days, we have noticed an increasing number of websites infected without any outdated plugin or known vulnerability. In most cases it was a porn spam infection. Our research team started to dig into the issue and found that the common denominator across these WordPress sites was the plugin WP Mobile Detector that had a 0-day arbitrary file upload vulnerability disclosed on May 31st by the Plugin Vulnerabilities team. The plugin has since been removed from the WordPress repository and no patches are available. The vulnerability is very easy to exploit, all the attacker needs to do is send a request to resize.php or timthumb.php (yes, timthumb, in this case it just includes resize.php), inside the plugin directory with the backdoor URL. This vulnerability was publicly disclosed May 31st, but according to our firewall logs, the attack has been going since May 27th. The good news is that all our customers have been protected via the Sucuri Firewall virtual hardening engine. This is one of the payloads we are actively seeing in the wild: https://blog.sucuri.net/2016/06/wp-mobile-detector-vulnerabilitybeing-exploited-in-the-wild.html より引用 32
脆弱な resizer.php のソース(冒頭)
<?php
if (isset($_REQUEST['src'])) {
$path = dirname(__FILE__) . "/cache/" .
basename($_REQUEST['src']);
if(file_exists($path)){
// 省略
}else{
file_put_contents($path,
file_get_contents($_REQUEST['src']));
// file_get_contentsのファイル名はバリデーション等していない
// file_put_contentsのファイルは、./cahce/ディレクトリに
// すなわち、局所的に見ると、ディレクトリトラバーサル脆弱性
33
JPCERT/CCからの注意喚起 【5】WordPress 用プラグイン「WP Mobile Detector」に任意のファイルをアップロード可能 な脆弱性 情報源 US-CERT Current Activity WP Mobile Detector Vulnerability https://www.us-cert.gov/ncas/current-activity/2016/06/03/WP-Mobile-Detector-Vulnerability 概要 WP Mobile Detector の resize.php には、脆弱性があります。結果として、遠隔の第三者が、任 意のファイルをアップロードする可能性があります。 対象となるバージョンは以下の通りです。 - WP Mobile Detector 3.6 より前のバージョン この問題は、開発者が提供する修正済みのバージョンに WP Mobile Detectorを更新することで 解決します。詳細は、開発者が提供する情報を参照してください。 関連文書 (英語) WP Mobile Detector Changelog https://wordpress.org/plugins/wp-mobile-detector/changelog/ https://www.jpcert.or.jp/wr/2016/wr162201.html#5 より引用 34
対策はプラグインのバージョンアップだが… Whoops! We couldn't find that plugin. Maybe you were looking for one of these? 公式ディレクトリからは削除されている! プラグイン削除し代替プラグインの導入を 35
ランサムウェアの感染経路に悪用される場合も 4.2.2 ランサムウェアの感染経路について JSOC では、これらランサムウェアの感染経路と見られる通信を検知しています。 1. エクスプロイトキット経由のドライブバイダウンロードによる感染 図 11 にエクスプロイトキットの接続を検知した通信例を示します。この通信はランサム ウェアの感染通信とほぼ同時刻に発生していたことから、ランサムウェアの感染経路の一つで あると考えます。 図 11 エクスプロイトキットへの接続の検知例 図 11 に示す通信は Angler Exploit Kit の特徴的な通信です。攻撃者はこれらのエクスプロイ トキットに誘導するコードを正規の Web サイトや広告などに埋め込むことで、Web サイトの 利用者をマルウェアに感染させます。JSOC では、2015 年 7 月から 9 月と同様、集計期間にエ クスプロイトキットに関連する通信を多数検知しています。 http://www.lac.co.jp/security/report/pdf/20160517_jsoc_m001t.pdf より引用 36
管理用ツールの認証を突破される • WordPressのパスワードを推測される 37
定番ツールWPScanでクラックしてみよう http://wpscan.org/ 38
デモ:
• 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
|
+----+--------+------+----------+
39
技術評論社ウェブサイトの改ざん事件 フィッシングによるクラウド悪用の事例 40
技術評論社サイトの改ざん事件(1) http://www.itmedia.co.jp/news/articles/1412/08/news144.html より引用 41
技術評論社サイトの改ざん事件(2) http://www.itmedia.co.jp/news/articles/1412/08/news144.html より引用 42
http://www.itmedia.co.jp/news/articles/1507/01/news098.html より引用 43
クラウドの管理者アカウント管理の重要性 • ゲストOSのrootパスワードを知らなくても、 クラウドの管理者パスワードを知っていると、 大抵の事ができてしまう • ゲストOSのrootパスワード変更 • ゲストOSのイメージ取得 • ゲストサーバーの削除 • ゲストサーバーの入れ替え ←技術評論社の例 44
シングルユーザーモードからrootパスワードを変更 ※さくらのクラウドの管理コンソールにより実験 45
対策の考え方 46
Webサイトへの侵入経路は2種類しかない • 管理用ツールの認証を突破される – telnet, FTP, SSH等のパスワードを推測される – FTP等のパスワードがマルウェア経由で漏洩する • ソフトウェアの脆弱性を悪用される – 基盤ソフトウェアの脆弱性を悪用される • Apache, PHP, JRE(Java), Tomcat, … • 脆弱性は世界中で調査され、日々新たな脆弱性が報告される – アプリケーションの脆弱性を悪用される • 個別のアプリケーションの脆弱性 • SQLインジェクションなど 47
WordPressの場合の主な侵入経路 • 管理用ツールの認証を突破される – WordPressのパスワードを推測される – FTP等のパスワードがマルウェア経由で漏洩する • PHPの脆弱性 • WordPress本体の脆弱性 • WordPressのプラグインやテーマの脆弱性 • カスタマイズ部分の脆弱性 48
パスワード! パスワード! パスワード! • 極論するとユーザ名は"admin"でもよい – adminだと自動攻撃に狙われるのでウザいということはある – よほどの"細工"をしないと、ユーザ名は外部から判別できる • とにかくパスワードをちゃんとすることが重要 – – – – – – – 8文字以上 英数字を混ぜる 辞書に載っている単独はだめ できればランダム文字列 他所で使ってないもの 【重要】 管理者が複数存在する場合は、管理者毎にユーザーを作成する 退職・異動した管理者のアカウントは直ちに無効化する 49
ソフトウェアのバージョンアップまたはパッチ適用 • 脆弱性対処は、バージョンアップまたはパッチ適用 が基本 – 自らビルド等している場合はバージョンアップが楽な場合 が多い – CentOS、Debian、Ubuntu等のディストリビューションの パッケージを導入している場合はパッチ適用 • バージョンアップするとサイトが動かなくなる…な んて心配をしないで、とにかくバージョンアップす ること • 自力でトラブル対処ができないソフトは導入しない こと • イメージ形式でのバックアップをとっておくと安心 50
SiteGuard WP Pluginのすすめ https://wordpress.org/plugins/siteguard/ • SiteGuard の不正ログイン防止に特化したプラグイン • 簡単に導入できて効果が高い • プラグイン自体の脆弱性対策がなされている(重要) 51
WAF(Web Application Firewall) 情報処理推進機構(IPA) WAF読本より引用 52
プラグインやテーマを作成される方に • IPAの「安全なウェブサイトの作り方」くらいは読みましょう – 「安全なウェブサイトの作り方」記載の脆弱性対策は、「開発会社が専門家と して最低限実施すべきセキュリティ対策の基準」とする判決が出ています – 参考: SQLインジェクション対策もれの責任を開発会社に問う判決 http://blog.tokumaru.org/2015/01/sql.html • できれば「体系的に学ぶ 安全なWebアプリケーションの作り方」もw • WordPress API のセキュリティ機能をよく理解して使用する – – – – – – XSS対策: esc_html / esc_attr SQLインジェクション対策: プレースホルダの使用 CSRF対策: トークンの生成とチェック(wp_verify_nonce / Settings API) ディレクトリトラバーサル対策: wp_basename()の使用 認証と権限: current_user_can() の確認 アップロード脆弱性に注意: ディレクトリトラバーサルや権限管理 拡張子やファイルの中身のチェック できれば、ウェブ公開領域へのアップロードを避ける 53
SQLインジェクションは絶対だめ • 対策は、とにかくプレースホルダを使うこと • 外部入力をSQL文に混ぜない • WordPressの場合 – $wpdb->prepare('SELECT * … WHERE user_login = %s', $username); • ピュアPHPの場合 – PDOを使う – プレースホルダ – DB接続時に文字エンコーディング指定を忘れない – バインド時に型を指定する 54
根本的解決策と保険的対策 • 根本的解決策: 侵入の原因となる問題をつぶすもの • 保険的対策: 侵入されにくくしたり、侵入後の被害を緩和す るもの • 根本的解決策は以下 – 脆弱性を解消する – パスワードをしっかり設定する • 保険的対策の例 – – – – – – – PHPの機能を制限する(php.iniのdisable_functions) ファイルやディレクトリのパーミッション設定 ログイン画面にIPアドレス制限を導入する WordPressのセキュリティプラグインを導入する 二段階認証を導入する WAF(Web Application Firewall)を導入する Secure OS(SELinus等)の活用 55
まとめ • CMS四天王を題材として、Webサイトへの不正アクセスの手法を紹介 – – – – CMS自体の脆弱性 CMSのプラグインの脆弱性 WordPressへの不正ログイン クラウドの管理画面への不正ログイン • 不正ログイン対策は、とにかく良質のパスワードをつけること • 脆弱性対策は、パッチ適用かバージョンアップ • WordPress本体、プラグイン、テーマのアップデートは特に重要 – できれば自動アップデートで • 世の中の「WordPressのセキュリティ記事」は緩和策を勧めるものが多い が、本当大切なことは「根本的解決策」 – パスワードをしっかり – パッチ適用またはバージョンアップ 56