PHP: PHPの静的解析(セキュリティーチェック)

Name UI Target Notes
phpvulhunter Browser PHP コード 脆弱性チェック
RIPS Browser PHP コード 脆弱性チェック(オブジェクト指向に未対応)
Parse: A PHP Security Scanner CLI PHP コード PHP セキュリティースキャナー
VisualCodeGrepper GUI ソースコード VisualBasic 製
Eir CLI PHP コード C# 製
PHP-Reaper CLI PHP コード SQLインジェクションの ADOdb コードをスキャン
TaintPHP CLI PHP コード Taint (XSS, SQLi, etc ...)
Side Channel Analyzer CLI PHP コード サイドチャネル攻撃
XSS code sniffer   PHP コード
Taint (XSSコード(汚染された文字列))を検出するための 拡張モジュール
versionscan CLI PHP バージョン PHPのバージョンのチェック
Scanner for PHP.ini CLI php.ini php.ini のチェック
SensioLabs Security Checker CLI composer.lock composer.lock から依存ライブラリーのセキュリティーチェック
Roave Security Advisories   composer.lock composer.lock (composer コマンド実行時にチェック)
WPScan CLI WordPress WordPress の脆弱性チェック

注釈

composer.lock ファイルから依存ライブラリーのセキュリティーチェックを行うサービスとして、
データベースは PHP Security Advisories Database で管理され、CLIツールとして、SensioLabs Security Checker がある。
また、 composer.jsonconflict を利用して、 composer コマンドの実行時にチェックするツールとして、
Roave Security Advisories が再配布されている。

ツールをまとめてインストール

前提条件:php と composer にパスが通っていること

任意のディレクトリーを用意する。(以下、 C:\works\phpcheck とする。)

C:\works\phpcheck>composer require "psecio/versionscan"
C:\works\phpcheck>composer require "psecio/iniscan"
C:\works\phpcheck>composer require "psecio/parse"
C:\works\phpcheck>composer require "sensiolabs/security-checker"

PHPのバージョンのチェック(versionscan)

C:\works\phpcheck>vendor\bin\versionscan scan --php-version=5.5.23
Executing against version: 5.5.23
+--------+---------------+------+------------------------------------------------------------------------------------------------------+
| Status | CVE ID        | Risk | Summary                                                                                              |
+--------+---------------+------+------------------------------------------------------------------------------------------------------+
| FAIL   | CVE-2015-4024 | 5.0  | Algorithmic complexity vulnerability in the multipart_buffer_headers function in main/rfc1867.c i... |
| FAIL   | CVE-2015-3330 | 6.8  | The php_handler function in sapi/apache2handler/sapi_apache2.c in PHP before 5.4.40, 5.5.x before... |
| FAIL   | CVE-2015-3330 | 6.8  | potential remote code execution with apache 2.4 apache2handler                                       |
| FAIL   | CVE-2015-3329 | 7.5  | Buffer Overflow when parsing tar/zip/phar in phar_set_inode                                          |
| FAIL   | CVE-2015-1352 | 5.0  | Null pointer dereference                                                                             |
| FAIL   | CVE-2015-2783 | 5.8  | Buffer Over-read in unserialize when parsing Phar                                                    |
| FAIL   | CVE-2015-1351 | 7.5  | Use After Free in OPcache                                                                            |
+--------+---------------+------+------------------------------------------------------------------------------------------------------+

Scan complete
--------------------
Total checks: 372
Failures: 7


C:\works\phpcheck>

php.iniのチェック(iniscan)

C:\works\phpcheck>vendor\bin\iniscan scan --path=C:\tools\php\5.6.15\php.ini --fail-only
== Executing INI Scan [11.12.2015 16:16:40] ==

Results for C:\tools\php\5.6.15\php.ini:
============
Status | Severity | PHP Version | Current Value | Key                           | Description
------------------------------------------------------------------------------------------
FAIL   | WARNING  |             |               | session.cookie_domain         | It is recommended that you set the default domain for cookies.
FAIL   | ERROR    | 5.2.0       | 1             | session.cookie_httponly       | Setting session cookies to 'http only' makes them only readable by the browser
FAIL   | WARNING  |             |               | session.hash_function         | Weak hashing algorithms in use. Rather use one of these: sha224, sha256, sha384, sha512, ripemd128, ripemd160, ripemd256, ripemd320, whirlpool, tiger128,3, tiger160,3, tiger192,3, tiger128,4, tiger160,4, tiger192,4, snefru256, gost-crypto, adler32, crc32, crc32b, fnv132, fnv1a32, fnv164, fnv1a64, joaat, haval128,3, haval160,3, haval192,3, haval224,3, haval256,3, haval128,4, haval160,4, haval192,4, haval224,4, haval256,4, haval128,5, haval160,5, haval192,5, haval224,5, haval256,5
FAIL   | ERROR    | 4.0.4       | 1             | session.cookie_secure         | Cookie secure specifies whether cookies should only be sent over secure connections.
FAIL   | WARNING  | 5.5.2       | 1             | session.use_strict_mode       | Strict mode prevents uninitialized session IDs in the built-in session handling.
FAIL   | INFO     |             | PHPSESSID     | session.name                  | Renaming the session cookie to something other than the default can make it more difficult to detect if a user's cookies are hijacked
FAIL   | ERROR    | 4.0.3       | 0             | allow_url_fopen               | Do not allow the opening of remote file resources ('Off' recommended)
FAIL   | WARNING  |             | 0             | display_errors                | Don't show errors in production ('Off' recommended)
FAIL   | WARNING  |             | 1             | expose_php                    | Showing the PHP signature exposes additional information
FAIL   | WARNING  |             | 0             | display_startup_errors        | Showing startup errors could provide extra information to potential attackers
FAIL   | WARNING  |             |               | open_basedir                  | Restricting PHP's access to the file system to a certain directory prevents file-based attacks in unauthorized areas.
FAIL   | WARNING  |             |               | disable_functions             | Methods still enabled - exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec
FAIL   | WARNING  |             |               | soap.wsdl_cache_dir           | The SOAP WSDL cache directory did not resolve to a valid directory

28 passing
4 failure(s) and 9 warnings


C:\works\phpcheck>

composer で導入しているライブラリーのチェック(security-checker)

C:\works\phpcheck>vendor\bin\security-checker security:check composer.lock

Security Check Report
~~~~~~~~~~~~~~~~~~~~~

Checked file: C:\works\phpcheck\composer.lock


  [OK]
  0 packages have known vulnerabilities


             This checker can only detect vulnerabilities that are referenced
 Disclaimer  in the SensioLabs security advisories database. Execute this
             command regularly to check the newly discovered vulnerabilities.


C:\works\phpcheck>

PHP ソースコードのセキュリティーチェック(RIPS 0.55)

警告

RIPS 0.55 はオブジェクト指向に未対応。 (New Version は対応。)

RIPSをダウンロードして、ビルトインサーバーで立ち上げて、ブラウザーでアクセス

C:\rips>php -S localhost:8000

注釈

C:\rips\config\general.php$FILETYPES で対象ファイルの拡張子を設定