Un ver se propage actuellement sur les iPhone jailbreakés, exploitant le fait que peu de gens ont pensé à changer leur mot de passe root suite à l'installation du serveur SSH.

Jailbreaker un iPhone (ou un iPod Touch) est une opération consistant à sortir de la sandbox dans laquelle l'utilisateur et ses applications se situent normalement dans le but d'exécuter du code en tant que root et prendre ainsi le contrôle total de l'appareil. Une fois l'opération réalisée, l'installation de paquets se réalise souvent via Cydia, une interface graphique de gestion des paquets. Les problèmes commencent lorsque l'utilisateur décide d'installer OpenSSH, ouvrant ainsi l'accès distant aux comptes hardcodés de l'iPhone, dont le fameux root:alpine.

La méthode d'attaque est triviale : scan d'IP à la recherche de systèmes ayant le port 22/tcp ouvert, tentatives de connexion SSH sous le compte root:alpine et exécution de commandes en tant que root. Récemment, il a été fait état d'un chantage aux Pays-Bas, un utilisateur peu scrupuleux ayant pris le contrôle de certains iPhone par ce biais et demandant 5 euros à ses victimes afin de leur indiquer comment mieux sécuriser leurs téléphones (il est aujourd'hui revenu sur sa décision et sa page montre simplement comment supprimer les traces de son application malveillante).

On vient de passer à l'étape suivante avec la propagation du ver Ikee exploitant exactement la même méthode. Le code source de ce ver a été rendu public pendant un moment mais l'accès est désormais suspendu. Plusieurs variantes sont cependant déjà en circulation (quatre au moment de la rédaction de ce billet).

Pour sa propagation, Ikee utilise plusieurs méthodes de génération d'adresses IP :

  • des adresses "proches" de l'IP du périphérique sur lequel il est en train de s'exécuter
   char *locRanges = getAddrRange(); // cette fonction appelle getifaddrs() permettant d'obtenir les IP des interfaces
   char *lanRanges = "192.168.0.0-192.168.255.255";
  • des plages codées en dur, principalement Australiennes (opérateurs Vodaphone, Optus et Telstra)
   char *vodRanges1 = "202.81.64.0-202.81.79.255";
   char *vodRanges2 = "23.98.128.0-123.98.143.255";
   char *vodRanges3 = "120.16.0.0-120.23.255.255";
   char *optRanges1 = "114.72.0.0-114.75.255.255";
   char *optRanges2 = "203.2.75.0-203.2.75.255";
   char *optRanges3 = "210.49.0.0-210.49.255.255";
   char *optRanges4 = "203.17.140.0-203.17.140.255";
   char *optRanges5 = "203.17.138.0-203.17.138.255";
   char *optRanges6 = "211.28.0.0-211.31.255.255";
   char *telRanges = "58.160.0.0-58.175.255.25";
  • des adresses IP tirées au hasard

L'infection par ce ver particulier ne pourra donc avoir lieu que si le périphérique vulnérable dispose d'une IP routable sur Internet. Une fois trouvé un port 22/tcp ouvert, il tente la connexion en tant que root :

asprintf(&execLine, "sshpass -p %s ssh -o StrictHostKeyChecking=no root@%s 'echo 99'", VULN_PASS, host);

S'il reçoit bien un message contenant 99 en retour, le périphérique en face est bien vulnérable et la procédure d'infection peut être lancée. Les variantes actuelles d'Ikee ne sont pas réellement malveillantes et se contentent de modifier le fond d'écran en mode verrouillé vers une image de Rick Astley. Le ver termine également le service OpenSSH et va jusqu'à supprimer le binaire /usr/sbin/sshd, empêchant de fait un autre attaquant ou ver d'exploiter la même faille :

    if (!(in = popen("rm -f /usr/sbin/sshd; killall sshd", "r"))) {

Ironiquement, on peut donc dire que le téléphone est plus sécurisé après l'infection qu'avant :)

Les recommandations d'usage sont évidemment de ne pas jailbreaker un iPhone si celui-ci contient des données sensibles (téléphone professionnel par exemple), de ne pas y installer de serveur SSH ou alors de bien penser à modifier son mot de passe root.