Ok

En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Ces derniers assurent le bon fonctionnement de nos services. En savoir plus.

geekerie

  • Simple streaming et amélioration

    Bonjour à toutes et à tous,

     

    Plus d'un an que je n'avais pas posté.

    Pour les news : on verra plus tard : pour parler : netpsycho sur #2600fr sur le IRC du 2600 ou netpsycho sur le discord de 0day.rocks. Sinon twitter : @The_NeTpSyChO.

     

    Voilà à coté de tout ça (la sécurité et tout) je me remets à faire un peu de streaming, notamment pour suiveiller les conneries de mon nouvel amimal de compagnie (oui aMimal je n'ai pas fait de faute :)).

    Du coup la flemme d'acheter une caméra trouée niveau sécu avec une interface cloud et tout donc je me suis dis : je vais le faire moi même.

    Donc rien à voir avec le streaming via nginx et du HLS.

    Voici comment avec un vieux laptop vous faîtes un système de surveillance à pas cher :)

    D'abord vous installez motion : puis vous créez dans le /home du user dédié le fichier .motion/motion.conf et vous mettez quelque chose du style :

    stream_auth_method 2

    stream_authentication user:motdepasse

    stream_port 4444

    stream_localhost on

    Ensuite vous installez stunnel et vous faîtes un petit :

    [https]

    accept  = 4445

    connect = 4444

    cert = /etc/stunnel/server.pem

    TIMEOUTclose = 0

    Dans stunnel.conf (à vous de générer le certificat).

    Vous lancez le tout, vous ouvrez le port 4445 depuis l'extérieur et voili voilou.

    Bon c'est très sale, ça ne marche pas avec tous les navigateurs sur toutes les plateformes mais c'est déjà ça, vous verrez votre /dev/video0 depuis l'extérieur :).

    Mais c'est juste un petit tips rapide de vidéo-surveillance.

    Justement je vais essayer de voir aujourd'hui ou demain pour faire du HLS avec authen et je vous tiendrais au courant.

     

    Have fun !

  • HLS Streaming Tips

    Il y a quelques temps que je n'avais pas posté ici. Mais je vous avais déjà fait un petit article à propos du streaming/VOD avec nginx et ffmpeg, nous allons donc dans ce petit post parler de la même chose.

    Imaginez que vous désiriez faire une petite infrastructure capable de streamer du HLS pour pas mal de client.

    Vous allez donc avoir une configuration nginx de ce type sur vos serveurs de réception client :

    application hls {
    allow publish x.x.x.x;
    deny publish all;
    allow play all;
    live on;
    hls on;
    hls_path /tmp/hls;
    }

    Seulement vous avez un petit problème : la source est un produit d'automation qui ne vous envoie que ... du MP3. Je vous laisse tester, mais au final vous n'aurez que de la vidéo, le son ne sera pas là, et oui HLS ne prend pas de MP3 !

    Il faut donc mettre votre flux en AAC.

    Les plus habitués d'entre vous l'auront deviner il faut déjà préparer un peu de ffmpeg. Nous savons donc qu'il faut garder la vidéo et transformer le son en AAC. La commande sera donc quelque chose de ce type :

    ffmpeg -i source -c:v copy -c:a libfdk_aac -f format destination

    Donc comment faire : nous allons déjà recevoir notre flux via une application RTMP classique.

            application rtmp {
                live on;
                allow publish x.x.x.x;
                deny publish all;
                allow play all;
            }

    On va ensuite faire du ffmpeg :

    ffmpeg -i rtmp://127.0.0.1/rtmp/stream -c:v copy -c:a libfdk_aac -f flv rtmp://127.0.0.1/hls/live

    Nous pouvons maintenant configurer notre application HLS comme suit :

    application hls {
    allow publish 127.0.0.1;
    deny publish all;
    allow play all;
    live on;
    hls on;
    hls_path /tmp/hls;
    }

    Attention ne faites pas ça sur une machine "faible" ffmpeg ça peut demander de la puissance de calcul.

    Et pour finaliser le tout on automatise de ffmpeg avec exec (moi je préfère en faire un service mais bon on peut faire comme ça aussi), et on push l'application HLS vers nos serveurs de restream ce qui donne :

            application rtmp {
                live on;
                allow publish x.x.x.x;
                deny publish all;
                allow play all;

                exec ffmpeg -i rtmp://127.0.0.1/rtmp/stream -c:v copy -c:a libfdk_aac -f flv rtmp://127.0.0.1/hls/live;
            }

           application hls {
                allow publish 127.0.0.1;
                deny publish all;
                allow play all;
                live on;
                hls on;
                hls_path /tmp/hls;

                push ip_restream_1;

                push ip_restream_2;
    }

    Et sur vos serveurs de restream :

           application hls {
                allow publish IP_server_source;
                deny publish all;
                allow play all;
                live on;
                hls on;
                hls_path /tmp/hls;

    }

    Et tout est bon, enfin n'oubliez pas la configuration du serveur HTTP et voilà tout sera bon vous retrouverez votre live.m3u8 prêt à lire pour vos clients :).

     

    Voilà j'espère que ça vous sera utile.

    Have Fun !

  • Phrack 69

    Phrack 69 est sortie les ami(e)s :

    http://phrack.org/issues/69/1.html

  • Quand on s'ennuie au bureau

    Petite idée sympa quand on s'ennuie au bureau qui "change un peu" des nerfs :)

    Le fireball cannon :)

    A voir sur Paranoiac-Thoughts

    Ou le post original sur HackADay

     

    Bonne journée ...

  • Rafale 19

    Le zine Rafale "le survivant" vient de sortir son numéro 19 :)

    Vous le retrouverez sur le site officiel du zine.

     

  • Faire un petit service de streaming et VoD avec nginx et ffmpeg

    Récemment j'ai été amené à faire un petit service de streaming et de VoD, je me suis donc aventuré dans ce petit monde. Je vais essayer via ce blog post de montrer quelques petites technologies et techniques permettant de monter simplement un petit service de ce style. Il s'agit d'une introduction, à vous par lasuite d'aller plus loin :).

    Le but :

    . Faire un streaming continu type WebTV mais avec des contenus connu à l'avance (playlist)

    . Faire de la VoD

    . Niveau technos : pour le "live" : un flux rtmp, un HLS. Pour la VoD : player HTML5(mp4, webm), flux rtmp.

    Pré-requis :

    • Aucun, enfin si un système GNU/Linux.

    Premier temps :

    •  Il vous faut nginx-rtmp-module : https://github.com/arut/nginx-rtmp-module/
    • Et ffmpeg, bien que certaines distributions proposent des paquets ffmpeg (ou avconv sous Debian) je vous conseille tout de même l'installation via les sources afin d'être up-to-date et d'avoir toutes les options disponibles : https://www.ffmpeg.org/

    Maintenant préparons nos vidéos :

    • On prend en entrée des vidéos .mp4
    • On veut y rajouter un petit logo : logo.png en haut à droite

    Déjà nous voulons mettre nos vidéos au format webm ... voici donc la commande :

    ffmpeg -i video.mp4 -vf "movie=logo.png [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis fazo-vibes.webm

    Explications :

    • -i : spécifie le fichier en entrée (mais ça peut être un flux, on le verra plus tard);
    • -vf : permet de filtrer les frames vidéos (dans notre cas pour y ajouter notre logo), -vf est utilisé pour des cas simples à savoir un input et un output;
    • - overlay : permet d'insérer une vidéo, ou une image, sur notre vidéo et définit sa position (je vous laisse lire la bonne doc ffmpeg sur le sujet : https://ffmpeg.org/ffmpeg-filters.html#overlay-1);
    • -c:v : codec video, en l'occurence libvpx pour du webm : http://www.webmproject.org/code/;
    • -c:a : codec audio;
    • Ensuite le video output (ou le flux si on le désire).

    Ensuite on veut aussi s'assurer que notre fichier mp4 est bien conforme afin de pouvoir être lu par un player HTML5 au besoin donc, et on veut ajouter notre petit logo aussi :) :

    ffmpeg -i video.mp4 -vf "movie=logo.png [logo]; [in][logo] overlay=main_w-overlay_w-10:10 [out]" -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis fazo-vibes.webm

    Flux RTMP :

    Nous allons maintenant nous occuper de nos flux RTMP. Faisons d'abord la "VoD" (vous comprendrez pourquoi je commence par là ;)). Donc regardons notre fichier de configuration nginx.conf :

    Si elle n'exite pas déjà créons une section rtmp :

    rtmp {
        server {
            listen 1935;
            ping 30s;
            notify_method get;
        }

    }

    Ajoutons-y de quoi faire notre VoD :

    rtmp {
        server {
            listen 1935;
            ping 30s;
            notify_method get;

    application mavod {
                play /repertoire/des/videos/mp4;
            }
       }}

     Je vous conseille d'ailleurs de mettre ce répertoire vidéo accessible à votre serveur http cela permettra de les utiliser pour le player HTML5 un peu plus tard.

    Maintenant imaginons que vous voulez lire la vidéo mesdernieresvacances.mp4 qui se trouve dans /repertoire/des/videos/mp4 ... vous n'aurez qu'à consulter le flux : rtmp://ip/mavod/mesdernieresvacances.mp4

    ;)

    Passons maintenant au "live-stream" :

    D'abord configurons nginx ... tout comme pour la VoD il nous faut rajouter une "application" :

    application mawebtv {
            live on;
        }

    Attention il s'agit d'une configuration de PoC : je vous conseille par la suite pour éviter que n'importe qui ne stream via votre serveur de vous intéresser aux directives on_play et on_publish !

    Imaginons maintenant que je désire faire tourner en boucle video1.mp4, video2.mp4 et video3.mp4 sur ce feed. Faisons un petit script bash :

    while :

       do

          ffmpeg -f flv -i rtmp://127.0.0.1/mavod/video1.mp4 -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://127.0.0.1/mawebtv/live

          ffmpeg -f flv -i rtmp://127.0.0.1/mavod/video2.mp4 -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://127.0.0.1/mawebtv/live

          ffmpeg -f flv -i rtmp://127.0.0.1/mavod/video3.mp4 -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://127.0.0.1/mawebtv/live

         done

    Voilà ;) ... vous avez remarqué, j'ai changé certains codecs, dans ce cas ce n'était pas réellement nécessaire mais vous verrez que pour HLS ces changements le sont ! (par exemple de codec AAC pour le son, car HLS n'est pas compatible avec mp3 !).

    Flux HLS :

     Préparation de nginx :

    HLS est un stream HTTP il faut donc préparer notre serveur HTTP, donc dans nginx.conf :

    server {
            listen       80;
            server_name  localhost;

            location / {
                root   html;
                index  index.html index.htm;
            }

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }

        location /hls {
                types {
                        application/vnd.apple.mpegurl m3u8;
                        video/mp2t ts;
                }
                alias /tmp;
            }
    }

    Et ensuite dans la section rtmp :

    application hls {
                live on;

                hls on;
                hls_path /tmp/hls;
                hls_nested on;
        }

    Maintenant pour streamer, la même technique que pour le live rtmp mais en output : rtmp://127.0.0.1/hls/live

    Vous pouvez ensuite accéder au flux via : http://ip/hls/hls/live/index.m3u8 !!!

    Lecteur web :

    Full HTML5, c'est assez simple : pour chaque vidéo :

    <video id="our-video" width="600" height="400" controls>
        <source src="repvidmp4/video.mp4" type="video/mp4">
        <source src="repvidwebm/video.webm" type="video/webm">
            Votre navigateur ne gère pas l'élément <code>video</code>.
    </video>

    Attention pour que cela marche sous Firefox pensez à renseigner les MIME type dans un .htaccess ;)

    Pour lire des flux RTMP je vous conseille de jeter un oeil à video.js : http://www.videojs.com/

    Aller plus loin :

    Voilà vous avez la base, mais certaines choses montrés ici sont "sales" et il y a de nombreuses choses à faire avec ffmpeg, ffserver, ffplay et nginx (fonction push et pull par exemple :)). Vous pouvez aussi jeter un oeil à GStreamer et à ffserver !

    En gros je vous laisse vous amuser un peu ;)

    Have Fun !

  • Quelques news/liens et autres

    Un petit blog post en vrac, comme d'habitude, avec quelques petits liens :

    Déjà une "nouvelle" qui fait assez plaisir à savoir la sortie de Rafale #18 :) De quoi redonner de l'espoir à tout les projets en attente/pause/survie ... ça faisait en effet plus de trois ans qu'un Rafale n'était pas publié. Mais c'est maintenant chose faite !

    On a pu aussi voir récemment quelques articles sur le DyLib Hijacking [PDF] ... je vous laisse découvrir mais si vous connaissez le DDL Hijacking ce ne sera pas une grosse surprise pour vous.

    On voit aussi pas mal d'articles sur le bypass d'AV, on peut dire que c'est toujours l'échec pour ce genre de produit. J'ai eu récemment l'occasion de "jouer avec" fud@india un joli ransomware qui, je n'en doute pas, aurait pu faire plus de dégâts si les bonnes réactions n'avaient pas été prises ! Ca a été l'occasion de me remettre un peu au forensic et au RE ;) Ca change un peu du conseil, du PCI-DSS et du pentest d'application web, généralement, moisies !

    Encore une petite chose sympathique : pour ceux qui ne sont pas des cryptofans voici une belle petite présentation d'AES-128 [SWF].

    Sinon je ne sais pas si vous avez entendu parler de Monero mais si oui ... un quelconque retour sur la chose ?

    Sinon selon la ToDo arrivent normalement bientôt :

    • Pour PT : un p'tit PANBuster maison, deux applis web surprises ;)
    • Peut-être un petit retour d'expérience sur l'externalisation du MCO et d'un SoC quant on est pas mature :)

    En attendant amusez-vous bien !

  • Quelques saines lectures & vidéos (ou pas d'ailleurs)

    Bientôt la nouvelle année qui approche et il faut bien se préparer à la reprise "d'après fêtes" :) Donc pour cela voici quelques petites choses qui me semblent assez intéressantes qui pourront vous permettre de reprendre en douceur après le 1er Janvier :).

    La présentation de Renaud Lifchitz à la NSC : Quantum computing in practice & applications to cryptography.

    Quelques documents sur les APT, oui je sais ça fait peur, vu que tous les commerciaux de la sécurité utilisent ce mot pour vendre mais là c'est assez sérieux :) : que vous pourrez donc trouver ici.

    Les vidéos des talks du 31c3 que j'ai signalé sur le blog des PTc'est d'ailleurs ça qui m'a donné envie de poster ici :) : que vous trouverez quant à elles ici.

     

    Voilà ça fait déjà un assez bon programme ! Sur ceux je vous souhaites encore d'excellentes fêtes de fin d'année. Rendez-vous en 2015 donc peut-être au FIC, à la HackInParis et très certainement au HackitoErgoSum. Sinon l'oiseau bleu hien, ou le prochain blog post ... mais là ça sera peut-être en 2016 :D, il faut que je regarde d'ailleurs comment c'est possible qu'il y ai encore 200 visiteurs par mois ici de temps en temps 0o.

    Have fun !

  • Un peu de mouvement ;)

    Bonjour à toutes et à tous,

    Je ne sais pas pourquoi j'ai eu comme une petite envie de poster ici, ne serait-ce que parce que j'ai été réveillé par les "mouvements" de ces derniers jours :). En effet depuis hier soir on voit passer à toute les sauces la bien sympathique CVE-2014-0160 qui est fort bien décrie ici : http://heartbleed.com/.

    Déjà c'est très amusant car il semble que ce soit un bon exemple de full-disclosure, à moins que je me trompe, c'est toujours possible :). Mais moi c'est le genre de chose qui me fait plaisir, justement parce que même si c'est dangereux.

    Donc ça c'est le gros mouvement du moment, mais bon en même temps quand on constate l'état de la sécurité de certaines smartTV on se demande s'il y a besoin d'aller chercher si loin :).

    D'ailleurs j'ai en ce moment même sous mes yeux un petit produit de gestion de caméra de surveillance qui a certainement été codé par un stagiaire qui faisait des études de philosophie. Je ne parle même pas de l'intégration, un vrai désastre. Le point positif c'est que l'on aura encore du boulot pour les années à venir :).

    Mais bon je parlais de mouvement, effectivement on peut le dire, il y en a :

    • Bientôt le HES et on commence à avoir une bonne idée du programme;
    • En ce moment, pour ceux qui le peuvent, CFP pour la NSC et la NDH;
    • Sortie du dernier numéro de 2600.

    Ah oui et certaines news sortent à propos d'Apple et sont censées être surprenantes :) Si vous voulez un Pad suivez plutôt les conseils du nostalgeek !

    Allez voilà, j'ai fait revivre un peu ce blog, je peux retourner RT tous ce qui me plait maintenant !

  • BruCon 2013

    Juste un petit post pour signaler que je serais, normalement, à la BruCon 2013. Je vais essayer de m’efforcer de faire deux blogposts sur le sujet : un par jour de conférence donc ...

    En espérant vous y voir !