Rappelons qu’on avait identifié, dans iBackdoor 1/2, que l’application infectée était Signal
grâce au log listant les processus :
USER UID PRSNA PID PPID F %CPU %MEM PRI NI VSZ RSS WCHAN TT STAT STARTED TIME COMMAND
root 0 99 279 1 4004004 0.0 0.0 0 0 0 0 - ?? ? 7:47AM 0:00.00 /var/containers/Bundle/Application/4B6E715E-641B-4F43-B39B-CA9AE3E8B73B/Signal.app/mussel dGNwOi8vOTguNjYuMTU0LjIzNToyOTU1Mg==
root 0 99 330 1 4004004 0.0 0.0 0 0 0 0 - ?? ? 7:47AM 0:00.00 /var/containers/Bundle/Application/4B6E715E-641B-4F43-B39B-CA9AE3E8B73B/Signal.app/mussel dGNwOi8vOTguNjYuMTU0LjIzNToyOTU1Mg==
mobile 501 1000 344 1 4004044 0.0 0.0 0 0 0 0 - ?? ?s 7:56AM 0:00.00 /var/containers/Bundle/Application/4B6E715E-641B-4F43-B39B-CA9AE3E8B73B/Signal.app/Signal
root 0 99 345 344 4004004 0.0 0.0 0 0 0 0 - ?? ? 7:56AM 0:00.00 /var/containers/Bundle/Application/4B6E715E-641B-4F43-B39B-CA9AE3E8B73B/Signal.app/mussel dGNwOi8vOTguNjYuMTU0LjIzNToyOTU1Mg==
Ma forte suspicion provenait du paramètre passé en paramètre de mussel
,
dGNwOi8vOTguNjYuMTU0LjIzNToyOTU1Mg==
se base64decode en tcp://98.66.154.235:29552
,
ce qui ressemble très fortement à un C2. On avait déjà les trois quarts du flag.
Reste l’outil et là… ça a été plus compliqué. J’ai tenté des listes de frameworks, en
filtrant ceux qui ne supportaient pas IOS, mais ça risquait d’être long. J’ai alors eu
une intuition. On se souvient que le processus malveillant a pour nom mussel
. Curieux,
mais pourrait-il être spécifique au framework ? C’est peu probable, il est courant qu’un
framework choisisse le nom de ses implants au hasard dans un dictionnaire, mais ça ne
coûte rien de faire une recherche rapide sur cette hypothèse.
Et devinez quoi, on tombe rapidement sur un outil appelé SeaShell,
dont un des répertoires du code source s’appelle Mussel
. En point bonus, on regarde le point d’entrée et on lit :
if (argc < 2)
{
return 1;
}
encodedString = [NSString stringWithFormat:@"%s", argv[1]];
decodedData = [[NSData alloc] initWithBase64EncodedString:encodedString options:0];
decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
Oui, il prend une chaîne encodée en base64 en paramètre !
Notre flag: FCSC{SeaShell|tcp|98.66.154.235|29552}
.