生存報告

主に情報セキュリティ関連のエントリをたまに書いて、存命であることを報告するページ。

CMSの脆弱性スキャナをいくつか試した

これまで、CMSってWordPressくらいしか触ったことない&脆弱性スキャナもWPScanくらいしか知らなかったので、情報収集がてら検証してみた。

昨年末に検証したログを記録として残しておく。1

対象のCMS脆弱性スキャナ

選定基準は以下のとおり。

  • CMS製品はシェアの大きいものを対象とする
  • 脆弱性の検証ということで、CMSはある程度、脆弱性の存在するバージョンとする。検証時点(2017年12月)から1年前時点の最新版とする
  • 脆弱性スキャナはKitPloitでヒットしたものから選定する

シェアは以下を参考にした。 Usage Statistics and Market Share of Content Management Systems for Websites, January 2018

選定の結果、以下の表のようになった。2

CMS Scanner Known Vulnerability
WordPress 4.7 WPScan 2.9.3 NVD - CVE-2017-5487
etc.
Joomla! 3.6.5 JoomScan 0.0.4
joomlavs
CMSsc4n 2.0
NVD - CVE-2017-9933
etc.
Drupal 8.2.4 Dropescan 1.40.1
CMSsc4n 2.0
NVD - CVE-2017-6919
etc.

CMSUbuntu Server、攻撃側はKali Linuxを使用。(一部例外あり)

実行結果とセットアップ時のメモ

セットアップ時のメモは主に自分用。

WordPress

公式サイトと5分間インストールを参考にインストールした。

WordPress のインストール - WordPress Codex 日本語版

Joomla!

インストールがうまくいかず調べたらPHPのモジュールが足りない模様。以下でインストール。

sudo apt-get install php7.0-xml

Drupal

こちらもモジュールが必要。 そのあとwgetで持ってきて、展開→公開ディレクトリにシンボリックリンク

sudo apt-get install php-gd
sudo apt-get install php-xml
wget https://ftp.drupal.org/files/projects/drupal-8.2.4.tar.gz

WPScan

https://wpscan.org/

Kali Linuxに入っている。メジャーなスキャナなだけあって色々検出してくる。

実行結果:

# wpscan --url http://192.168.112.135/wordpress/ --enumerate
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \ 
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team 
                       Version 2.9.3
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://192.168.112.135/wordpress/
[+] Started: Fri Dec 29 10:01:22 2017

[!] The WordPress 'http://192.168.112.135/wordpress/readme.html' file exists exposing a version number
[+] Interesting header: LINK: <http://192.168.112.135/wordpress/wp-json/>; rel="https://api.w.org/"
[+] Interesting header: SERVER: Apache/2.4.18 (Ubuntu)
[+] XML-RPC Interface available under: http://192.168.112.135/wordpress/xmlrpc.php
[!] Includes directory has directory listing enabled: http://192.168.112.135/wordpress/wp-includes/

(snip)

[!] Title: WordPress 4.7 - User Information Disclosure via REST API
    Reference: https://wpvulndb.com/vulnerabilities/8715
    Reference: https://www.wordfence.com/blog/2016/12/wordfence-blocks-username-harvesting-via-new-rest-api-wp-4-7/
    Reference: https://github.com/WordPress/WordPress/commit/daf358983cc1ce0c77bf6d2de2ebbb43df2add60
    Reference: https://wordpress.org/news/2017/01/wordpress-4-7-1-security-and-maintenance-release/
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487
[i] Fixed in: 4.7.1

(snip)

[+] Enumerating usernames ...
[+] Identified the following 1 user/s:
    +----+-------+---------+
    | Id | Login | Name    |
    +----+-------+---------+
    | 1  | admin | 404 Not |
    +----+-------+---------+
[!] Default first WordPress username 'admin' is still used

JoomScan

Category:OWASP Joomla Vulnerability Scanner Project - OWASP

github.com

OWASPのプロジェクトになっている。バージョン判定のほか、既知の脆弱性の判定もやってくれる。 スキャナの更新が2012年で止まっている?ので、現行の脆弱性には対応しなさそう。

git cloneしてインストール、URL指定して実行する。

git clone https://github.com/rezasp/joomscan.git
joomscan -u http://192.168.112.135/joomla/

実行結果:

 ..|''||   '|| '||'  '|'     |      .|'''.|  '||''|.  
.|'    ||   '|. '|.  .'     |||     ||..  '   ||   || 
||      ||   ||  ||  |     |  ||     ''|||.   ||...|' 
'|.     ||    ||| |||     .''''|.  .     '||  ||      
 ''|...|'      |   |     .|.  .||. |'....|'  .||.     
    
(snip)

Target: http://192.168.112.135/joomla
Server: Apache/2.4.18 (Ubuntu)

## Checking if the target has deployed an Anti-Scanner measure

[!] Scanning Passed ..... OK 

## Detecting Joomla! based Firewall ...

[!] No known firewall detected!

## Fingerprinting in progress ...

~Unable to detect the version. Is it sure a Joomla? 

## Fingerprinting done.

Vulnerabilities Discovered
==========================

# 1
Info -> Generic: htaccess.txt has not been renamed. 
Versions Affected: Any
Check: /htaccess.txt
Exploit: Generic defenses implemented in .htaccess are not available, so exploiting is more likely to succeed.

Vulnerable? Yes

# 2
Info -> Generic: Unprotected Administrator directory 
Versions Affected: Any
Check: /administrator/
Exploit: The default /administrator directory is detected. Attackers can bruteforce administrator accounts. Read: http://yehg.net/lab/pr0js/view.php/MULTIPLE%20TRICKY%20WAYS%20TO%20PROTECT.pdf

Vulnerable? Yes

# 3
Info -> Core: Multiple XSS/CSRF Vulnerability 
Versions Affected: 1.5.9 <= 
Check: /?1.5.9-x
Exploit: A series of XSS and CSRF faults exist in the administrator application.  Affected administrator components include com_admin, com_media, com_search.  Both com_admin and com_search contain XSS vulnerabilities, and com_media contains 2 CSRF vulnerabilities.  

Vulnerable? N/A

(snip)

joomlavs

github.com

バージョンチェックはやってくれる。脆弱性の検出はなかった。

実行にあたり、Ubunturubyではrubyモジュールの追加インストールが必要だった。スキャナを走らせてエラーメッセージを眺めつつ、必要なモジュールをがしがしインストール。 gemでのインストールがrootでできなかったので、攻撃側もUbuntu Serverで実行。

インストール用:

ruby -v
sudo gem install bundler && bundle instal
sudo apt-get install build-essential patch
sudo apt-get install ruby-dev zlib1g-dev liblzma-dev libcurl4-openssl-dev
sudo gem install slop
sudo gem install typhoeus
sudo gem install nokogiri
sudo gem install colorize

実行結果:

./joomlavs.rb -u http://192.168.112.135/joomla/ --scan-all

----------------------------------------------------------------------

     ██╗ ██████╗  ██████╗ ███╗   ███╗██╗      █████╗ ██╗   ██╗███████╗
     ██║██╔═══██╗██╔═══██╗████╗ ████║██║     ██╔══██╗██║   ██║██╔════╝
     ██║██║   ██║██║   ██║██╔████╔██║██║     ███████║██║   ██║███████╗
██   ██║██║   ██║██║   ██║██║╚██╔╝██║██║     ██╔══██║╚██╗ ██╔╝╚════██║
╚█████╔╝╚██████╔╝╚██████╔╝██║ ╚═╝ ██║███████╗██║  ██║ ╚████╔╝ ███████║
 ╚════╝  ╚═════╝  ╚═════╝ ╚═╝     ╚═╝╚══════╝╚═╝  ╚═╝  ╚═══╝  ╚══════╝

----------------------------------------------------------------------

[+]URL: http://192.168.112.135/joomla/

[+]Started: Fri Dec 29 09:20:02 2017

[+]Found 1 interesting headers.

| Server: Apache/2.4.18 (Ubuntu)

[!]Listing enabled: http://192.168.112.135/joomla/administrator/components/

[!]Listing enabled: http://192.168.112.135/joomla/administrator/modules/

[!]Listing enabled: http://192.168.112.135/joomla/administrator/templates/

[+]Joomla version 3.6.5 identified from admin manifest

[!]Found 0 vulnerabilities affecting this version of Joomla!

[+]Scanning for vulnerable components...

[!]Found 0 vulnerable components.

------------------------------------------------------------------

[+]Scanning for vulnerable modules...

[!]Found 0 vulnerable modules.

------------------------------------------------------------------

[+]Scanning for vulnerable templates...

[!]Found 0 vulnerable templates.

------------------------------------------------------------------

Dropescan

github.com

バージョンチェックはやってくれる。脆弱性の検出はなかった。

git cloneとモジュールのインストールで完了。URLを指定して実行。

# droopescan scan drupal -u http://192.168.112.135/drupal/

実行結果:

[+] No themes found.

[+] No interesting urls found.

[+] Possible version(s):
    8.2.3

[+] No plugins found.

出力が素っ気ない。(悪いというわけではない)

CMSsc4n

github.com

CMSの使用有無とバージョンを判定してくれる。既知の脆弱性などは見ない。あとJSONExcelかで出力できるというちょっと変わった仕様。

Joomla!をスキャンする際、ローカルの環境では/joomla/まで指定しないといけなかった。手動で見るより少しマシくらいか。

スキャン対象の情報をJSONで指定する。JSONの書式が分からなかったので、ソースコードを読みつつトライ・アンド・エラーで実行。

JSONファイル:

# cat testsite.json 
{"192.168.112.135/joomla/": "text"}

実行コマンド:

python ./cmssc4n.py -e 2 -i testsite.json

実行結果:

  / ____|  \/  |/ ____|        | || |      
 | |    | \  / | (___  ___  ___| || |_ _ __  
 | |    | |\/| |\___ \/ __|/ __|__   _| '_ \ 
 | |____| |  | |____) \__ \ (__   | | | | | |
  \_____|_|  |_|_____/|___/\___|  |_| |_| |_|

** Tool to scan if a domain is a CMS (Wordpress , Drupal, Joomla, Prestashop or Moodle) and return the version
    ** Author: Ignacio Brihuega Rodriguez a.k.a N4xh4ck5
    ** Version 1.0
    ** DISCLAMER This tool was developed for educational goals. 
    ** The author is not responsible for using to others goals.
    ** A high power, carries a high responsibility!

192.168.112.135/joomla/

*****Checking if the CMS is a Wordpress*****
The CMS is not a Wordpress

*****Checking if the CMS is a Moodle*****
The CMS is not a Moodle

*****Checking if the CMS is a Drupal*****
The CMS is not a Drupal

*****Checking if the CMS is a Joomla*****
The CMS is a Joomla! => /language/en-GB/en-GB.xml file found. Trying to detect the version
Version Joomla detected in /language/en-GB/en-GB.xml ==> Joomla 3.6.5
The version Joomla is outdated

192.168.112.135/joomla/  is joomla
Exporting the results in a json

DrupalはJoomlaのときと同じ書式で実行できず。原因不明。

所感

  • 実用的なのはWPScanくらい。他のツールは環境あればやっておくか、くらい。
  • JoomScanも良いんだけどメンテされていないのがネック。3
  • どのツールも、Hack用ツールらしくアスキーアートでロゴ作っててすごい。自分もツールを作る際は見習いたい。

まとめ

シェアの大きいCMSを対象に、いくつかスキャナを試した。結論としてはやはりWPScanが実用レベル、他は無いより良いくらいだった。

が、シェアがWordPress一強なのであまり問題ないでしょう。4


  1. 残しておかないと自分も覚えていないお蔵入りになりそうなので。

  2. MovableTypeはシェアなさそうだし、とりあえず対象外。今回は種類を試すのが主旨なのでWordPressスキャナはWPScanのみ。

  3. プルリクしろという話だろうか……

  4. そのとき考えよう、の意

VirtualBoxでゲストOS同士を通信させる方法

最近やった検証で、VirtualBoxのゲストOS同士で通信させる必要があったので調べて設定したのでそのメモ。
なんか調べたら内部ネットワークに設定するとか色々出てきて、どれが目的に合うか分からなかったので、今回やった方法を残しておく。

ゲストOSは2台で、WindowsLinuxが各1台。
目的としてはゲストOS同士が通信できればそれで良い。インターネット接続は必須でない。

設定方法は、各ゲストOSのネットワーク設定で、それぞれ以下に設定する。

  • 割り当て:ホストオンリーアダプタ
  • 名前:VirtualBox Host-Only Ethernet Adapter
  • プロミスキャスモード:許可


あとはDHCPIPアドレスが割り振られた。

VirtualBoxVMWareよりもネットワークの設定項目が多くてややこしく感じた。でも慣れの問題かもしれない。

3DESの扱いが変わってきた

3DESに関して最近確認したことなどを記述します。

システムを運用する方、脆弱性を調査する方などに参考にしていただければ。

背景

2016年8月に、3DESおよび64ビットのブロック暗号に対するSWEET32攻撃が報告されました。 このOpenSSLのブログでは、3DESの強度の評価を“HIGH”から“MEDIUM”に下げるとアナウンスされています。

脆弱性スキャナの対応

脆弱性スキャナの1つであるNessusでも評価の変更があったようで、2016年12月頃から3DESを中程度の強度の暗号として挙げるようになりました。

f:id:tosebro:20161226011450p:plain

Here is the list of medium strength SSL ciphers supported by the remote server :

  Medium Strength Ciphers (> 64-bit and < 112-bit key)

    TLSv1
      EDH-RSA-DES-CBC3-SHA         Kx=DH          Au=RSA      Enc=3DES-CBC(168)        Mac=SHA1   
      ECDHE-RSA-DES-CBC3-SHA       Kx=ECDH        Au=RSA      Enc=3DES-CBC(168)        Mac=SHA1   
      DES-CBC3-SHA                 Kx=RSA         Au=RSA      Enc=3DES-CBC(168)        Mac=SHA1   

上記のように3DESがMedium Strength Ciphers(CVSS 4.3)として検出されています。 説明文では「< 112-bit」と書いているのに3DESが挙がってきたので、ロジックが変わったのか、それとも誤検知?と思って調べてみると、3DESを決め打ちでMEDIUMとしていました。 以下、該当ファイル(ssl_funcs.inc)の抜粋です。

  # 3DES to Medium because of CVE-2016-2183.
  if ("Enc=3DES-CBC" >< desc)
        return CIPHER_STRENGTH_MEDIUM;

CVE-2016-2183はSWEET32のCVEなので、これを受けての変更であることが分かります。 なおNessusの該当プラグインの更新日付は2015年だったので、脆弱性の検出ロジック自体に変更はありませんでした。

その他のスキャナはというと、よくSSL/TLSのチェックに使われるQualysのSSL Server Testでは、本エントリの執筆時点で脆弱とはしていませんでした(適当なサーバのスキャン結果を見て確認)。sslscanでは3DESがハイライトされるようになりました。

他に影響しそうなものとしてはASV Scanなどがあります。一概には言えませんが、仮に現時点でPass判定でも近い将来はFail判定になるでしょう。

なので、現行のシステムは、計画的に3DESからAES等への移行をすすめる必要があると考えています。

3DESを無効化したときの影響

暗号スイートを無効化すると気になるのは影響範囲です。古いブラウザだと接続できなくなる可能性があります。 手元の環境と前述のQualys SSL Server Testでシミュレーションしてみました。

環境

設定ファイルも抜粋しておきます。

SSLProtocol TLSv1.2
SSLCipherSuite HIGH:!DH:!3DES

この状態で、有効な暗号スイートを確認しました。

  Supported Server Cipher(s):
Preferred TLSv1.2  256 bits  ECDHE-RSA-AES256-GCM-SHA384   Curve P-256 DHE 256
Accepted  TLSv1.2  256 bits  ECDHE-RSA-AES256-SHA384       Curve P-256 DHE 256
Accepted  TLSv1.2  256 bits  ECDHE-RSA-AES256-SHA          Curve P-256 DHE 256
Accepted  TLSv1.2  256 bits  AES256-GCM-SHA384            
Accepted  TLSv1.2  256 bits  AES256-SHA256                
Accepted  TLSv1.2  256 bits  AES256-SHA                   
Accepted  TLSv1.2  256 bits  CAMELLIA256-SHA              
Accepted  TLSv1.2  128 bits  ECDHE-RSA-AES128-GCM-SHA256   Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  ECDHE-RSA-AES128-SHA256       Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  ECDHE-RSA-AES128-SHA          Curve P-256 DHE 256
Accepted  TLSv1.2  128 bits  AES128-GCM-SHA256            
Accepted  TLSv1.2  128 bits  AES128-SHA256                
Accepted  TLSv1.2  128 bits  AES128-SHA                   
Accepted  TLSv1.2  128 bits  CAMELLIA128-SHA  

結果

結果は以下のようになりました。

  • PCは、IEは最新版のみ、その他のブラウザは問題なさそう。
  • スマホは、iOSは問題なさそう、Androidは4.4未満は接続不可。
  • ガラケーは接続不可。そもそもTLSv1.0までしか対応していない。

サイズが大きいですが結果のスクリーンショットを貼っておきます。

f:id:tosebro:20161226020444p:plain:w300

条件をゆるくしてTLSv1.0を有効にして試すと、IEAndroidの古いバージョンでも接続可能という結果になりました。 でもTLSの1.0は1.0でPCI DSSで引っかかったりしているので、また別の問題が……

まとめ

3DESに関する暗号強度の評価の変化、脆弱性スキャナによる評価について調査しました。また、無効化した場合の影響範囲について調査しました。

暗号アルゴリズムの危殆化はずっとついて回る問題なので、面倒ですが継続的に追っていくしかないですね。

その他

CRYPTRECはそろそろ更新されるんだろうか。

Burp Suiteの文字化け対策(試作2)

この前HDDを片付けていたら、昔作ったBurp SuiteのExtensionを発掘したのでアップしました。

github.com

概要

Proxy HistoryのComment列にタイトルを表示する拡張です。


Burp SuiteのUIはLatin1(ISO 8859-1)で作られているようで、日本語などは文字化けします。
この拡張ではワークアラウンドとして、Proxy History内のページのタイトルをComment列に表示しています。

スクリーンショット

https://raw.githubusercontent.com/tosebro/JPtitle/master/screenshots/JPtitle-01.png

まあ、これで少しでも使いやすくなれば。