Locky virus : recover your encrypted files without paying

Un post un petit peu spécial : un de nos clients a été touché par le virus Locky ; virus qui chiffre la plupart des fichiers, et réclame une rançon pour obtenir la clef de déchiffrement, bref un truc bien sympa.

Nous avons pu récupérer la plupart des fichiers en utilisant cette technique :
Voici la méthode que nous avons utilisée, sans garantie.

  • Éteignez immédiatement l’ordinateur. Dans notre cas, le poste a été coupé environ 2h après l’infection
  • Branchez le disque compromis sur une machine Linux (Debian Jessie dans notre cas)
  • Utilisez l’utilitaire photorec (inclus dans le package testdisk, dispo sur le repo debian)
  • Selectionnez votre disque NTFS (probablement /dev/sdb)
  • Selectionnez la partition de données
  • Sélectionne le type de système de fichier : Other (FAT/NTFS/ …)
  • Sélectionnez « Extract file from whole partition »

Cela prend un long moment (environ 8h pour 130 Go de données). Les noms des fichiers sont partiellement perdus pendant la copie.

Il semble que le virus créé un nouveau fichier crypté, et supprime l’original, seule possibilité pour traiter les gros fichiers sans avoir à les charger dans la ram. Les fichiers originaux peuvent être récupérables via une lecture directe bloc à bloc du disque.


English version :

We’ve managed to recover the major part of the encrypted files for a client:

  • Shutdown the infected computer as soon as possible. (2h after infection in our example)
  • Plug the harddrive on a *nix system (for us Debian Jessie did the job)
  • Use photorec utility (included in testdisk package, at least on the debian repo)
  • Select your ntfs drive (probably /dev/sdb)
  • Select your data partition
  • Select the FS type : Other (FAT/NTFS/ …)
  • Use « Extract file from whole partition »

This is a very long process (on my system, it took aproximativly 8 hours for 130 GB) Filenames are lost in the process 🙁

The virus may creates a new encrypted file, and delete the original ; the only solution for big files without loading the whole file in memory in my opinion. So the old file may be recoverable with a direct block read.

Hope this could help someone

Bookmark and Share

Websocket et PHP : présentation de websocketd

Connecter une application mobile à des web-services via une web-socket

De plus en plus d’application utilisent le web-socket pour communiquer avec des web services. Les avantages sont multiples : plus de connexions/déconnexions intempestives, un transport de données beaucoup plus rapide, une économie de ressources (CPU coté serveur, batterie coté client), et la possibilité pour le serveur de pousser des données vers le clients de manière autonome.

Ces derniers mois, nous avons testé plusieurs approches pour créer le serveur Web-socket avec PHP.
Le premier problème qui se présente est la possibilité de pouvoir gérer de multiples connexions vers un seul port de destination.

Une seule solution pour gérer cela : utiliser la librairie pcntl de PHP, qui autorise l’utilisation d’un fork (comme en C). En combinant cette technique avec des sockets non bloquantes, il est possible de créer un serveur multi-processus, doté d’un processus maître de contrôle : gestion des déconnexions, spawn de nouveaux processus, maintient d’un pool de processus spare, etc. Dans la théorie tout est quasi possible.

Dans la pratique, cela s’avère un mauvais choix : PHP n’est pas du tout conçu pour cela :

  • Effectuer un fork est gourmand en ressource et très lent en PHP : l’intégralité de la mémoire du processus maître est copiée.
  • La communication entre les différents processus fils est complexe (via des signaux POSIX, l’utilisation d’une mémoire partagé via shmop devient vite aussi indispensable que peu pratique)
  • La communication entre un processus fils et le processus maître répond aux même contraintes
  • Le diagnostic des crashs et exceptions est plus difficile à tracer.
  • Des processus qui se zombifient sans arrêt (State Z). La commande « top » ressemble rapidement à un film de Roméro 😉
  • Franchement super lent

Vous l’aurez compris, vraiment pas la bonne solution.

Websocketd : un daemon simple et léger

Websocketd

Nous nous sommes alors tournés vers websocketd. Étant de grands fans de Linux, le concept nous a tout de suite plu : il s’agit d’un petit exécutable (dispo Unix/BSD/Win/OSX, 32 et 64bits)
qui permet d’interfacer n’importe quel binaire, script ou fichier avec une web-socket. Plus de gestion des fork, plus de problème de multi-threading !
Websocketd se charge de toute cette logique, difficile à mettre en place avec des langages comme le PHP. Le gain de temps est énorme, et la fiabilité bien meilleure.

Un petit exemple :

websocketd --port 9000 /var/www/ws-server.php

Cette commande va donc exposer le script ws-server.php via des web services sur le port TCP 9000. L’entrée/sortie se fait via STDIN et STDOUT

ATTENTION AU CHOIX DU PORT : après des heures de recherche, nous avons fini par découvrir que de nombreux opérateurs téléphoniques filtrent les données de manière un peu étrange sur certains ports. Par exemple, Bouygues Telecom semble filtrer les paquets entrants sur le port 8080, mais autorise (o_O ??) les paquets sortants. Si vous avez possibilité, utilisez le port 80 par sécurité, le 9000 que nous utilisons ici n’est -à ma connaissance et à l’heure actuelle- pas filtré.

Votre script PHP va être appelé à tourner de manière permanente : faites attention à libérer au maximum la mémoire et à régler set_time_limit à 0.
Vous devez aussi prendre quelques précautions pour éviter la saturation du service en limitant le nombre de connexions (iptables semble une bonne approche pour commencer)

ws-server.php : un simple service echo

#!/usr/local/bin/php
<?php
set_time_limit(0);

while(true){ // boucle infini, c'est un serveur !
    $f = fgets(STDIN);
    // appel bloquant, l’exécution est suspendue
    // tant qu'il n'y a pas de données

    if($f === false){ // STDIN fermé, on quitte
       break;
    }
    
    if(strlen($f) > 0){ // on a des données
        foreach(explode("\n",$f) as $line){ // une commande par ligne
           echo trim($line)."\n; // renvoi la ligne reçue
        }
    }
   
}

Il suffit de lire STDIN pour récupérer les données entrantes, et un simple echo pour les renvoyer au client (ou utiliser STDOUT). N’oubliez pas de faire un « chmod +x ws-server.php » pour le rendre exécutable en mode CLI

Cette solution à de nombreux avantages :

  • Plus de problème de multi-threading / fork et compagnie
  • Une utilisation simple, un outil = une tâche
  • Gestion propre du SSL/TLS
  • Économe en ressources
  • Vraiment. Beaucoup. Plus. Rapide.
  • Vous utilisez le langage que vous voulez. Vous pouvez même connecter les interfaces /dev à une websocket si ça vous chante !

Plus d’informations ici : http://websocketd.com/

En bonus, un script init pour websocketd, à placer dans /etc/init.d (testé sous Debian Jessie)
/etc/init.d/wsserver

#! /bin/sh
### BEGIN INIT INFO
# Provides: Webservice
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Webservices via websocket
# Description: WS via Websocket sur port 9000
### END INIT INFO

PIDF=/var/run/websocket
DAEMON=/bin/websocketd
ARGS="--port 9000 /var/www/ws-server.php"
USERID=1000 # UID de l'utilisateur sous lequel votre serveur tournera

case "$1" in
  start)
    echo "Start ws"
    start-stop-daemon --make-pidfile --start -b --pidfile $PIDF --quiet -c $USERID --exec $DAEMON -- $ARGS
    ;;
  stop)
    echo "Stop ws"
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDF
    ;;
  restart)
   echo "Restart ws"
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDF
    start-stop-daemon --make-pidfile --start -b --pidfile $PIDF --quiet -c $USERID --exec $DAEMON -- $ARGS
   ;;
  *)
    echo "Usage: /etc/init.d/wsserver {start|stop|restart}"
    exit 1
    ;;
esac
exit 0
Bookmark and Share

Crop Circle : la nouvelle application sociale pour Android et iPhone

L’équipe de Boreal Business travaille depuis plusieurs mois sur un side project d’application smartphone : CropCircle. Crop Circle vous permet de faire connaissance et d’échanger simplement et en temps réel avec les personnes qui se trouvent autour de vous. Puisque vous êtes tous au même endroit en même temps, vous avez certainement des intérêts communs et des choses à vous dire, faites connaissance avec les personnes qui entrent dans votre cercle !

fbcover

Le concept

Le concept est simple : lancez l’application, créez un cercle puis discutez avec les utilisateurs dans le rayon de votre choix (100 mètres, 1 kilomètre ou 10 kilomètres), et ce pendant une heure. L’application se veut très simple d’utilisation, est gratuite, sans pub et respectueuse de votre vie privée ! Nous avons également pris des précautions pour ne pas siphonner la batterie de votre smartphone, comme c’est souvent le cas avec les applications géolocalisées : votre position géographique n’est pas trackée en permanence, nous la relevons uniquement lorsque vous lancez l’application.
iphone6_white
Pendant la durée de votre cercle, vous pouvez envoyer des messages texte, des photos, des vidéos, des extraits sonores ou votre position géographique exacte. Une fois votre cercle terminé (au bout d’une heure, mais vous pouvez le prolonger !) vous disparaissez de la vue des autres utilisateurs sans laisser de trace.

Associez vos différents profils sur les réseaux sociaux pour continuer une conversation sur Facebook ou Twitter par exemple.

L’application peut avoir de nombreux usages : pendant un concert ou festival, discutez avec d’autres spectateurs ; pendant un salon pour communiquer avec les exposants et visiteurs ; finalement pendant n’importe quel événement rassemblant des personnes, CropCircle trouve son utilité.

Aucune inscription n’est requise, vous pouvez commencer à utiliser l’application en quelques secondes.

Tournée vers les objets connectés

Notre but est de rendre compatible l’application avec tous les wearables et objets connectés du moment : au moment de l’écriture de ce billet, CropCircle est compatible avec les Google Glass, et le sera très bientôt avec les smartwatch comme l’iWatch, la G Watch ou la Moto 360

Notre action

Pour ce projet, toutes les tâches ont été réalisées jusqu’ici en interne : des spécifications du logiciel, aux premières ébauches graphiques, la création du logo, le développement des webservices, le chiffrage des échanges, les maquettes et finalement le développement des applications iPhone et Android en elles mêmes.

CropCircle est une application 100% Boreal Business, un concentré de nos savoirs-faire.

Téléchargez l’application

L’application est disponible depuis peu sur les stores en Français, Anglais et Espagnol. Toute une roadmap de développement est prévue, l’application va donc être amenée à s’améliorer au fil des prochaines semaines et des prochains mois. N’hésitez pas à nous donner votre point de vue par mail à team@cropcircle.me ou sur notre page Facebook dédiée

Télécharger les applications Boréal Business sur Google Play Store Télécharger les applications mobiles Boréal Business sur votre iPhone

Plus d’informations sur http://www.cropcircle.me/

Bookmark and Share

Découvrez l’appli Signalert, le 1er réseau social citoyen d’alerte

Depuis près de 2 ans, une partie de l’équipe Boréal Business travaille au développement du projet numérique SIGNALERT :

www.signalert.fr

Ce projet innovant se compose d’applications mobiles disponibles sur App Store pour l’iPhone et sur Play Store pour les smartphones Android. L’ambition est de devenir le 1er réseau social citoyen d’alerte sur les phénomènes naturels ou accidents technologiques. Les utilisateurs de l’application peuvent également témoigner, décrire et partager en temps réel afin que chacun puisse contribuer à l’amélioration des interventions de secours.

Téléchargez l’application SIGNALERT pour iPhone : https://itunes.apple.com/fr/app/signalert-app/id811283419?mt=8

Télécharger les applications mobiles Boréal Business sur votre iPhone

Téléchargez l’application SIGNALERT pour Android : https://play.google.com/store/apps/details?id=com.signalert&hl=fr_FR

Télécharger les applications Boréal Business sur Google Play Store

L’équipe de SIGNALERT enrichie progressivement le type de phénomènes sur lesquels vous pouvez agir : inondations, avalanches, feux de forêt … et apporte de nouvelles fonctionnalités afin de permettre toujours plus d’échanges et d’interactivité entre les différents utilisateurs

SIGNALERT a une portée internationale puisque le service est déjà disponible en Français, Anglais et Espagnol.

Si vous aimez l’initiative et que vous souhaitez devenir un acteur du réseau social citoyen SIGNALERT, n’hésitez pas à soutenir le projet via la plateforme de CrowFunding KissKissBankBank : http://www.kisskissbankbank.com/signalert-app?ref=category

Restez connectés avec les nouveautés SIGNALERT via les réseaux sociaux :

gplusfbtwitter

signalert-app-iphone

Bookmark and Share

Découvrez notre solution B.eCommerce et quelques idées sur la vente en ligne

solution boutique B.eCommerce par Boréal Business

La solution e-commerce de Boréal Business

En naviguant sur notre nouveau site corporate, vous avez peut être aperçu la solution baptisée B.eCommerce que nous proposons à nos clients qui souhaitent se lancer dans la vente en ligne : comme tous les autres produits numériques de notre catalogue, il s’agit d’une solution faite maison, développée spécialement pour répondre aux besoins exprimés de nos prospects/clients et pour gagner en performance.

 

Comme beaucoup de professionnels aujourd’hui, nos clients sous consultent pour créer une boutique sur le web mais ne savent pas trop par ou commencer et se posent une multitudes de questions :

  • Quel est le coût de développement ?
  • Quelles fonctions puis-je envisager sur ma boutique en ligne ?
  • Comment choisir mon nom de domaine ?
  • Comment me faire connaitre ?
  • Le Responsive Design, c’est obligatoire ?
  • Je veux des applications mobiles connectées à ma boutique …

Voici quelques lignes pour vous expliquer notre vision du e-commerce en 2015 et vous illustrer quelques problématiques à travers des cas concrets :

  • La 1ère priorité à notre sens est de définir une niche de produits ou services sur laquelle vous positionner, proposez une offre nouvelle que vous serez le seul à vendre (ou presque) : cela sera bénéfique pour le reste de votre réflexion et de votre stratégie.
  • Ne mettez pas de barrières techniques en travers de vos idées d’innovation : nous sommes là pour trouver les solutions à ces problèmes. N’oubliez pas : une innovation n’est pas forcément un produit ou service nouveau, cela peut être une autre façon d’aborder votre marché avec un processus de vente nouveau ou des services additionnels différenciés à forte valeur ajoutée. Chez Boréal Business, nous vous proposons du sur-mesure tout en faisant attention aux coûts de développement bien entendu.

Illustrons ces 2 premiers points avec la boutique www.lafabriqueabiere.com : La brasserie BOS produit ses bières à Bourges et elle souhaitait innover sur son marché de la bière artisanale en lançant sa propre boutique en ligne. Il aurait été assez banal de créer une boutique pour vendre les bières BOS que vous pouvez déjà trouver dans le commerce, ou bien même revendre d’autre bière artisanales de nos régions ; ici on ne parle pas de profondeur du catalogue, de catégorisation ou même de compétitivité des tarifs, l’objectif est tout autre.

Le choix novateur s’est porté sur l’approche « personnalisez vous même votre bière en ligne » : l’internaute choisi un modèle d’étiquette à personnaliser ou transfère l’étiquette qu’il a lui même créée, puis il choisit le goût de sa bière et le nombre de caisse qu’il souhaite commander. Il finalise enfin sa commande avec paiement en ligne et peut partager sa bière personnalisée sur les réseaux sociaux. De l’idée d’innovation découle des choix stratégiques logiques et des résultats immédiats : on trouve le nom de domaine « lafabriqueabiere » puis on se place rapidement en 1ère place naturelle de Google sur la requête « bière personnalisée ».

  • Commencez simplement : ne vous ruinez pas pour payer les développeurs ! Gardez du budget pour vous faire connaître (SEM / Bannières …), monter des partenariats et vous rendre sur des salons.
  • Votre stratégie de niche doit vous ouvrir l’opportunité de mettre en place une communauté, de l’animer et de la fidéliser via les réseaux sociaux et outils de CRM plus classiques.

Ces 2 idées illustrent parfaitement la stratégie de notre client www.fightorigins.com positionné sur les vêtements et équipements pour la pratique du MMA et l’entrainement Crossfit, la boutique est simple et épurée : une catégorisation peu profonde pour commencer, une présentation des marques et de la philosophie de l’équipe. Avec un peu de budget pour créer un logo efficace, mettre en place quelques campagnes sur les réseaux sociaux, des offres pour les clubs et du temps pour diffuser ses idées et contenus ; l’équipe de Fight Origins a rapidement atteint une communauté de plus de 3500 followers sur Facebook et des exclusivités de distribution avec certaines marques Américaines. Ils vendront bientôt à l’international et vont créer leur propre gamme de produits mais ils avancent par étapes.

  • Élargissez votre gamme progressivement et touchez de nouveaux clients.
  • Le e-commerce c’est avant tout du commerce : ne vous focalisez pas sur la technique, ça c’est notre boulot et nous sommes là pour vous conseiller ; focalisez-vous plutôt sur la qualité de vos produits/services et sur la satisfaction de votre clients.

Dernier exemple de création, la boutique www.euro-expos.net, spécialiste du matériel de jardin, bricolage, chantier et atelier depuis 2008. Le catalogue de cette boutique n’a cessé de croitre depuis sa création et les problématiques ont évoluées avec le temps : refonte du catalogue, de l’ergonomie, ajout de fonctionnalités autant pour les internautes que pour l’équipe de du site en back-office. Aujourd’hui, Euro-Expos propose plus de 5000 références produits, possède un site optimisé pour le mobile et les tablettes et dispose de fonctionnalités avancées en back-office (intégration des devis, export vers la comptabilité et les places de marchés, gestion du SAV …).

Quelles sont les différences et avantages de B.eCommerce

Notre solution de boutique en ligne possède de nombreuses différences avec les alternatives que vous trouverez sur le marché, qu’elles soient Open Source à installer vous même ou bien développées par d’autres prestataires.

  • Une structure commune éprouvée par tous nos clients,
  • Une flexibilité extrême pour gérer tous vos cas particuliers et toutes vos idées d’innovations,
  • Un design sur mesure réalisé par un graphiste,
  • Une optimisation et un suivi des dernières bonnes pratiques pour la performance SEO,
  • Une structure légère qui garanti une vitesse de chargement rapide,
  • Un back-office évolutif vous permettant de gérer votre activité e-commerce en totale autonomie,
  • Un service tout compris avec hébergement et choix du nom de domaine,
  • Un panel de services associés pour vous guider dans la prise en main de l’outil et la croissance de votre activité en ligne.

Début 2015 marque la sortie de la V2 de B.eCommerce dans laquelle vous pourrez retrouver : amélioration de la gestion multilingue pour l’international, allégement du code pour améliorer encore la vitesse de chargement, refonte du back-office et des fonctions d’animation des ventes … et bien plus encore à retrouver en restant connectés à nos services.

gplusfbtwitterpinterest

Bookmark and Share

Envoyer un mail depuis Google Compute Engine

Le problème

La plateforme d’hébergement de Google impose des limites très strictes sur l’envoi de mails

Par défaut les ports 25 SMTP et 587 SASL sont en effet complètement bloqués, il n’est donc pas possible d’utiliser la fonction mail() de php de la même façon que sur un serveur classique. De la même manière, un serveur MTA du type  Postfix ne pourra pas communiquer avec l’extérieur.

Les solutions :

Via un VPN

Il est possible d’ouvrir une connexion VPN entre vos instances et un serveur mail externe à Google, ainsi tout le trafic mail est routé via ce tunnel sur votre serveur mail classique. Cela semble possible via PPTP, nous n’avons pas testé via IPSEC.
Avantages : complètement intégré à votre architecture actuelle, pas de changement sur les signatures DKIM, les enregistrements SPF …
Inconvénients : la fiabilité en prend un coup. Votre plateforme dépend d’un serveur externe, qui doit donc pouvoir gérer les tolérances de pannes. Pensez à prévoir une file d’attente pour vos mails en cas de coupure du VPN. Dans l’ensemble nous déconseillons cette solution pour la plupart des projets.

Via des webservices

Là encore, votre infrastructure GCE va dépendre d’un service externe : l’idée est de remplacer l’appel à la fonction mail par un appel HTTP (ou autre) vers un serveur distant qui effectuera l’envoi du mail à proprement parlé.
Avantages : Plus facile à mettre en place que la première solution, cela nécessite toutefois un peu de développement.
Inconvénients : ne permet pas non plus une fiabilité optimale ; peut ouvrir de multiples failles de sécurité si la passerelle est mal conçue ; nécessite un serveur Mail et un serveur HTTP externe.

Via SendGrid

La solution recommandée par Google, et que nous avons également utilisé. Google interdit toute sortie vers les ports 25 et 587, mais a passé un partenariat avec SendGrid qui devient de facto un des seuls services 100% SMTP accessible depuis Compute Engine. Leur offre gratuite pour les clients GCE permet d’envoyer 25000 mails/mois sur un serveur SMTP ouvert sur le port 2525. Amplement suffisant dans la plupart des cas.

Pour l’utiliser, le plus simple est de passer via PHPmailer qui gère l’authentification SMTP sans problème, à la place de la fonction mail() ou équivalent.

$mail = new PHPMailer();
$mail->isSMTP(); // Passe phpMailer en mode SMTP (et non plus en mode sendmail)
$mail->SMTPAuth = true; // active l'authentification SMTP
$mail->Host = SENDGRID_SMTP; // Serveur smtp de sendgrid smtp.sendgrid.net
$mail->Username = SENDGRID_USERNAME; // identifiant sendgrid (le même que pour l'interface web)
$mail->Password = SENDGRID_PASSWORD; // password sendgrid, idem comme pour le web
$mail->Port = SENDGRID_PORT; // 2525

SendGridUne fois votre compte créé et activé (il y a une modération des comptes qui prend quelques heures), vous pourrez envoyer tous vos mails automatiques par ce canal. SendGrid fourni également une interface permettant le tracking des envois, des bounces etc …

Avantages : simple à mettre en place, en particulier si vous utilisez déjà PHPMailer.
Inconvénients : Vos mails passent par un prestataire supplémentaire. De ce que nous avons pu observer sur une période de quelques semaines, aucune coupure de service de leur coté. Si ce service bien spécifique est autorisé par Google, les garanties en terme de redondance et de fiabilité sont au rendez-vous. Autre élément à prendre en compte : attention si vous utilisez des enregistrements SPF pour lutter contre le spam à bien tenir compte de SendGrid, sinon vos mails risquent de ne jamais arriver !

Référence : https://cloud.google.com/compute/docs/sending-mail

Bookmark and Share