jeudi 19 novembre 2009

Les FAI doivent-ils filtrer les flux ?

Une proposition de loi américaine, approuvée début novembre par le House Financial Services Committee, vise à rendre responsables les fournisseurs d’accès Internet de la protection de leurs utilisateurs contre les contenus à caractère usurpatoire ; notion suffisamment large pour englober à la fois l’usurpation de marque, la contrefaçon de site, le phishing, etc. Cette proposition de loi prévoit ainsi de contraindre les FAI à filtrer ces contenus lorsqu’ils transitent sur leurs réseaux.

Cette proposition de loi laisse perplexe la plupart des fournisseurs d’accès américains, car le texte du Congrès est particulièrement vague sur les moyens pouvant être mis en Å“uvre pour assurer la conformité à cette loi : qui aura l’autorité pour désigner un contenu devant être filtré ? Quel type de filtrage est acceptable – IP, DNS, inspection en profondeur du trafic réseau ? Le texte ne fait pas non plus de distinction entre les FAI de détail (particuliers et entreprises) et les FAI de transit (assurant la connectivité des réseaux), et ne dit rien non plus quant aux dommages collatéraux lors du filtrage erroné d’un site légitime, ce qui ne manquera pas de se produire.

Cette nouvelle arrive peu de temps après la signature d’un accord entre les quatorze principaux FAI néerlandais, représentant 98% du marché des Pays-Bas : ces fournisseurs d’accès se sont entendus sur le principe de la notification des internautes en cas de détection d’un trafic Internet généré par un virus ou un cheval de Troie ; les mesures prises par les FAI pouvant aller jusqu’à la mise en quarantaine de la connexion affectée.

Ces mesures, qui commencent à être prises à grande échelle, et plus sous la seule impulsion des forces de l’ordre (blocage de sites pédo-pornographiques ou de sites de jeu d’argent en ligne) et des maisons de disque, entérinent la fin d’une certaine idée de l’Internet : c’est le concept de neutralité du réseau qui disparaît.

Alors, pour ou contre ? Tout dépend évidemment de ce qui est filtré, et dans quelles circonstances ; peu de gens iront blâmer les FAI pour le filtrage des sites pédophiles ou des malware. Certains pensent qu’entrer dans cet engrenage, c’est ouvrir la boîte de Pandore : du moment que le dispositif de filtrage existe, même mis en place initialement à des fins légitimes, alors la tentation de la censure sera telle que les Etats y succomberont un jour ou l’autre. N’anticipons pas outre mesure, l’Histoire nous le dira bien assez tôt ; en ce qui me concerne, je considère que c’est la fin d’une certaine forme d’irresponsabilité collective, et peut-être le début d’une prise de conscience qu’Internet n’a jamais été un média neutre, son instabilité pouvant mettre en péril entreprises, particuliers, services civils d’urgence (police, pompiers, hôpitaux, …). Un péril qui n’a rien de virtuel, celui-là.

lundi 9 novembre 2009

A worm in my Apple

A worm is currently spreading on jailbroken iPhones, exploiting the hardcoded root account exposed by the SSH server.

Jailbreaking an iPhone (or an iPod Touch) consists in getting out of the sandbox the user and his applications normally run into, so as to execute code as root and take complete control over the device. Once performed, installing packets is usually done via Cydia, a graphical packet management interface. Problems arise when the user decides to install an OpenSSH server, opening remote access to his device via hardcoded iPhone accounts, as the famous root:alpine.

The attack method is trivial: scan IP looking for opened 22/tcp ports, try to connect with SSH as root:alpine and execute your commands as root. Recently, a user in the Netherlands used this method to compromise iPhones and blackmailed the victims into paying 5 euros to secure their device (he now decided to stop and his web page only indicates how to remove his malicious application).

Then comes the Ikee worm, exploiting the same method. Its source code has been made public for a few hours but its access has now been suspended. Several variants are already spreading (four at time of writing).

To spread, Ikee uses several IP addresses generation methods:

  • addresses "near" the IP address of the device it is currently running on
   char *locRanges = getAddrRange(); // NB: this function calls getifaddrs() to retrieve IP addresses for each interface
   char *lanRanges = "192.168.0.0-192.168.255.255";
  • hardcoded ranges, mainly in Autralia (Vodaphone, Optus and Telstra operators)
   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";
  • random IP addresses

A device may only be infected by this particular worm if it has an Internet routable IP address. Once an opened 22/tcp port has been found, it attempts to connect as root:

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

If it receives back a message containing 99, it means that the remote device is vulnerable and the worm proceeds with the infection procedure. Current variants are not really malicious and only change the background image used in lock mode to a picture of Rick Astley. The worm also terminates the OpenSSH service and even deletes the /usr/sbin/sshd binary, thus preventing another attacker or worm from exploiting the same weakness:

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

Ironically enough, the device is more secure after its infection than before :)

Obviously, the recommendations here are not to jailbreak an iPhone containing sensitive data (such as a professional device), not to install an SSH server, or not to forget to change the root password.

Le ver est dans l'iPhone

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.