Solution de lrstx pour iForensics - iC2

forensics iOS

30 août 2025

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}.