PROJET AUTOBLOG


sebsauvage.net

Site original : sebsauvage.net

⇐ retour index

Une nouvelle astuce des logiciels malveillants pour éviter la détection

2012-01-30T15:43:22+01:00

Je vous ai déjà parlé de malwares très évolués comme Conficker ou TDL4. Le problème majeur de ces logiciels malveillants est que - avant infection - leur signature peut être détectée par les antivirus. Comment implanter le code malveillant en contournant la détection ?

Souvenez-vous des armes démontables dans les vieux films d'espionnage: Chaque pièce prise séparément paraît anodine, sans danger, et n'attire pas l'attention. Mais combinées elles forment une arme. Et bien une nouvelle tendance tout à fait analogique s'amorce chez les auteurs de chevaux de Troie, comme constaté de manière indépendante chez Microsoft et F-Secure.


Dans la plupart des scénarios d'infection, un petit bout de programme (appelé le "downloader") est en charge de télécharger et exécuter le code malveillant lui-même (le cheval de Troie). Les antivirus détectent et interceptent alors soit le téléchargement, soit le lancement du code malveillant. Game over.

Mais Microsoft a découvert un nouveau type de downloader: Ce dernier télécharge une page HTML faisant la publicité d'un restaurant asiatique. Le downloader lui-même n'étant pas malveillant, les antivirus ne le bloquent pas. Quand à la page HTML, elle paraît tout à fait anodine.

Sauf que le downloader combine les octets de la page HTML avec son propre code machine (dans son propre processus), ce qui le transforme en code malveillant. Bingo ! L'antivirus n'a intercepté ni le téléchargement (puisque qu'anodin pour lui), ni le lancement du code malveillant (puisque le downloader n'a pas lancé de nouveau processus: il continue son exécution avec le code modifié).

Brillant.


De la même manière, F-Secure est tombé sur un malware sur Android utilisant une technique similaire: En principe, quand vous avez un exécutable Android, vous avez accès à son contenu: C'est du code machine Dalvik (une machine virtuelle similaire à celle de Java). Il est donc possible d'examiner le code machine pour y détecter du code malveillant. C'est d'ailleurs ce que font certains antivirus pour Android: Ils analysent le code pour trouver, par exemple, des instructions envoyant des SMS payant.

Un auteur de logiciel malveillant a trouvé une astuce: Son programme récupère quelques octets présents dans l'entête du fichier PNG utilisé pour l'icône de l'application et les combine avec son propre code. Le résultat est un code machine qui envoie des SMS. Gagné ! Les antivirus n'ont rien vu.


On croirait un mauvais remake d'un film de Batman: Différents fichiers binaires inoffensifs, sur internet, peuvent devenir dangereux quand ils sont combinés. Et les antivirus sont bien en mal de détecter et bloquer cela: Pour des questions de performances, ils n'examinent pas toutes les opérations mémoire effectuées par les applications. Ils ne font que du cas par cas: Bloquer les noms de domaines identifiées comme distribuant des fichier malveillants. J'attends le moment où ces bouts de code recombinants seront distribué par Amazon S3, Pastbin.com ou le cache de Google: on va rigoler quand il faudra les bloquer.

Imaginez maintenant qu'un auteur décide de créer un code qui devient malveillant une fois combiné avec des logiciels "sains" comme Flash, Firefox ou WindowsMediaPlayer. C'est facile: Une simple opération binaire XOR le permet. Ou même utiliser ces exécutables sains et très répandus comme clés de déchiffrement du malware. Bon courage pour les détecter.

L'avenir est brillant pour les auteurs de codes malveillants, et les éditeurs de logiciels sont trop content de nous fourguer leur "AppStore" comme solution miracle. Pfeu.

Ce que Google sait de vous

2012-01-30T14:44:17+01:00

Je rebondis sur un article de Korben: Depuis que Google a unifié sont identification (autrement dit: Vous trace partout), ils ont même eu le culot de déterminer automatiquement votre âge, votre sexe et vos centres d'intérêts.


Je suis allé voir aussi: Google me dit ne rien savoir de moi   \o/

Merci à Ghostery et AdBlockPlus ? Sûrement, puisque grâce à eux Google ne peut plus suivre mes déplacements sur les sites web. Merci aussi à DuckDuckGo que j'utilise à 95% (Google n'est donc plus au courant de la plupart de mes recherches). Arg... il reste mon mail chez eux que je n'ai toujours pas migré. Pas bien.

En tous cas, on est fixé: Google a abandonné son slogan "Don't be evil", et pour une seule raison: Ses profits.

Si vous avez un compte Google, pensez à désactiver l'option d'affichage des annonces en fonction de vos centres d'intérêt: https://www.google.com/settings/ads/onweb/, et installez Ghostery et AdBlockPlus.

1,7 est différent de 1,7 ?

2012-01-27T13:25:35+01:00

Je reprend ici un petit article technique que j'avais écrit en anglais pour ma page de snippets Python.

Il sert juste à illustrer le fait que certaines notions en informatique ne sont pas du tout intuitives, et qu'il est utile d'apprendre tout cela. Le domaine du développement logiciel est plein de petits chausses-trappes de ce genre, et voir des développeurs se prendre les pieds dans le tapis me fait sourire (pas méchamment, je vous l'assure).


Je vais ici parler d'opérations élémentaires: Additionner et comparer des nombres. Élémentaires, mais pas évidentes pour autant. Cela a l'air très simple, mais rien qu'à ce niveau, il y a de quoi rendre perplexe le développeur débutant. J'ai choisi ici d'illustrer avec des exemples en langage Python, mais ce problème se reproduit dans la plupart les langages.


Commençons par créer deux variables (en Python):

a = 1.7
b = 0.9 + 0.8

En principe, a et b contiennent la même valeur, on est bien d'accord ? Affichons cela pour vérifier:

print a
print b
Ce qui affiche:
1.7
1.7

Bien. Maintenant comparons a et b:

if a == b:
    print "a et b sont égaux."
else:
    print "a et b sont différents !"

En principe, il doit afficher "a et b sont égaux", n'est-ce pas ? Faux !

a et b sont différents !

Comment est-ce possible ? Comment 1,7 peut-il être différent de 1,7 ?


Il y a deux choses qui sont à l'origine de cette incompréhension et qu'il fondamentale de connaître:

A l'instant même où vous faites a=1.7, la variable a ne contient pas 1,7, mais une approximation binaire de la valeur décimale 1,7, c'est à dire quelque chose du genre: 1.10110011001100110011001100110011... (Avec les bits précédents, il s'agit de la valeur 1.699999999953434)

En binaire, on peut facilement stocker les fractions dont le diviseur est une puissance de deux. Quelques exemples:
Mais dans tous les autres cas, l'ordinateur est bien en mal de stocker la valeur. Vous pouvez tester en ligne avec ce petit convertisseur. L'ordinateur fait donc deux approximations:

De la même manière, quand vous affichez une date:

print datetime.datetime.now()
2012-01-27 21:25:20.904000

Il faut bien garder à l'esprit que "2012-01-27 21:25:20.904000" n'est pas la date: C'est une représentation textuelle d'une donnée codée en binaire dans la mémoire de l'ordinateur. Ce que vous voyez à l'écran n'est pas forcément exactement ce qu'il y a dans la mémoire de l'ordinateur.

Bien sûr, il existe des bibliothèques mathématiques et des codages binaires qui permettent de stocker correctement des nombres décimaux, mais cela fait du travail en plus pour le processeur.

Alors comment comparer nos variables a et b précédentes sans recourir à ces codages spéciaux ? Soit en considérant que les valeurs sont égales si elles sont très proches:

if abs(a-b) < 0.00001:
    print "a et b sont égaux."
else:
    print "a et b sont différents !"

ou même en les convertissant en chaînes de caractères:

if str(a) == str(b):
    print "a et b sont égaux."
else:
    print "a et b sont différents !"


Et oui, l'ordinateur a ses limites, et même quand on développe dans un langage "haut niveau", il est bon de les connaître. ;-)


EDIT: Quelques précisions (signalées par Benjamin et Kévin):

EDIT: Jean-Francois me fait remarquer que je me suis un peu raté sur l'IEEE-754: C'est également un standard à virgule flottante, donc soumis aux mêmes problèmes d'imprécision. La différence est que l'IEEE-754 définit clairement des règles (comme les méthodes d'arrondi à respecter), ce qui permet d'avoir un standard stable et d'avoir les mêmes comportements partout. Pour éviter ces problèmes d'imprécision, il faut recourir à d'autres encodages de nombres, généralement sous forme de bibliothèque (comme GMP ou CLN).

À défaut d'un "En vrac"

2012-01-25T13:35:27+01:00

Je continue à faire évoluer mon petit logiciel Shaarli, qui sert à partager les liens qu'on découvre. J'ai reçu tellement de suggestions d'amélioration que je ne sais plus où donner de la tête :-)

Je viens de sortir une nouvelle version, contenant entre autres des améliorations (QR-Code du permalien, miniatures pour xkcd et pix.toile-libre.org, etc.) et corrections de bugs divers.

Je sais que vous êtes nombreux à regretter mes "En vrac" et que Shaarli ne satisfait pas vraiment certains d'entre vous (qui n'aiment pas le flux continu de liens ou ne veulent pas utiliser un lecteur RSS). Alors à défaut d'un vrai "En vrac", je vous ai ajouté une fonction qui donne en une seule page tous les liens de la veille. Une sorte d'"édition du jour". Vous pouvez également naviguer pour voir les jours précédents.

Bon il y a encore du boulot à faire sur cette page (ajustements CSS, meilleure navigation, flux RSS...), mais j'avoue: Je me suis amusé à créer cette page et son look de vieux journal.

Ceux qui ont installé Shaarli sur leur site peuvent mettre à jour: Supprimez tout le contenu du répertoire de Shaarli (sauf /data) et dézippez la nouvelle version. Comme toujours, Shaarli reste un logiciel libre, opensource et gratuit.


PS: Grâce aux bons soins de quelques internautes, vous retrouverez peut-être Shaarli un de ces jours dans les dépôts Debian et Fedora ;-)

EDIT 22h47: ... et pour ArchLinux aussi :-)

CloudFlare: Le syndrôme Akismet ?

2012-01-23T14:42:15+01:00

C'est un billet de Gof qui m'a remémoré ce problème.

Certains développeurs sont très forts. Ils savent développer une application techniquement performante et la rendre simple à utiliser. Ajoutez à cela la gratuité, et quel webmaster oserait résister ? C'est ainsi que Google Analytics est présent sur 86% des sites web. C'est ainsi qu'Akismet filtre le spam sur une incroyable quantité de blogs et forums de la planète. Et c'est ainsi que CloudFlare protège des millions de sites.

Une protection globale... ou un risque global ?

CloudFlare est mis en place à l'initiative des webmasters. Il se place entre les internautes et votre site web. Il agit comme un reverse-proxy: Toute requête HTTP destinée à votre site passe d'abord par les serveurs CloudFlare qui l'analysent et éventuellement la bloquent. Le service offert par CloudFlare est trop tentant: Protection contre le spam, les DDOS, statistiques, CDN, cache... le tout dans un service gratuit. Tellement tentant qu'un quart des internautes passent sans le savoir par CloudFlare (Korben, PC-Inpact, Zataz...). Si CloudFlare s'écroule ce sont des centaines de milliers de sites qui vont devenir tout à coup inaccessibles. Ouais, vive la centralisation. On remplace le risque (local) qu'un site s'écroule par un risque global, CloudFlare devenant une cible de plus en plus intéressante à mesure qu'elle grossit. Je ne suis pas certain que ça soit mieux pour internet.

Mais ce n'est pas le seul problème.

Quand CloudFlare se fera pirater (j'ai bien dit "quand", et non "si"), ça sera un problème de grande envergure, à l'image de ce qui s'est passé quand DoubleClick (et quelques autres régies de pub) se sont fait pirater: Tout à coup, des milliers de sites web se sont mis à diffuser des logiciels malveillants à travers leur bandeaux de pub, jusqu'au site du New-York Times.

I'm afraid of Americans... I'm afraid I can't help it

(paroles de David Bowie)

Techniquement, ils ont la possibilité d'injecter tout ce qu'ils veulent dans vos pages. Bien sûr, ils n'ont franchement pas intérêt à le faire, sous peine de perdre la confiance de leurs clients, en masse. Mais est-ce que cela se verrait, disons s'ils injectaient quelque chose pour un visiteur particulier, ayant une IP précise ? Quoi, je suis parano ? Pourquoi pas ? Microsoft l'a bien permis à l'échelle d'un pays entier. Quand on voit la mainmise des USA sur les registry DNS, ou même ce qui s'est passé avec Visa, MasterCard, PayPal, Google ou l'affaire MegaUpload, en quoi CloudFlare est-il plus à l'abri de ce genre de pression... ou de tentation ? Et CloudFlare est pourtant bien plus petit qu'eux.

Gardez bien à l'esprit que CloudFlare voit la totalité des requêtes envoyées à votre site par les internautes. Cela inclue donc également les formulaires, les logins/mots de passe... bref, tout. Et bien sûr, votre propre connexion au panel d'admin web.

Je suis peut-être parano (où est mon chapeau en papier d'alu ?), mais pourquoi devrais-je permettra à une société un accès total et détaillé à tout le trafic de mon site, mots de passe y compris ? Il y a assez de mon hébergeur. Encore pire, pourquoi devrais-je leur donner le pouvoir de bloquer absolument n'importe quel visiteur de mon site ? Pour me protéger ? C'est une question de confiance. Mais dans les faits, Gof lui-même a bien été bloqué par CloudFlare pour avoir ouvert trop d'onglets à la fois. CloudFlare se retrouve avec le même pouvoir qu’Askismet… et la même problématique: Moi (et bien d’autres) s'étaient retrouvé à ne plus pouvoir poster de commentaires sur pratiquement tous les blogs de la planète, sans explication et sans recours. Le problème est similaire avec CloudFlare.

Vous n'y échapperez pas

Côté visiteurs, dites aussi adieu à votre vie privée. CloudFlare est au courant de tout ce que vous faites sur tous les sites utilisant ce service. Je grogne contre Google Analytics et les javascript de Facebook, mais on moins on peut se prémunir de ces derniers avec un plugin comme Ghostery. Avec CloudFlare, vous ne pourrez pas y échapper. Ai-je vraiment envie d'imposer ce traçage supplémentaire à mes visiteurs ? Non.

Remarquez, je suis absolument scotché quand j'apprends qu'un groupe comme Lulzsec a utilisé CloudFlare pour ses serveurs. Tu parles d'une mauvaise blague. Alors suis-je trop parano ? Je vous laisse vous faire votre propre jugement.

En ce qui me concerne, je n'ai pas envie:

Il n'y a pas eu assez de problèmes ? La centralisation excessive (Facebook, Google, Megaupload...) ne nous a rien appris ?

Malgré l'excellence technique de CloudFlare, je ne suis pas prêt à troquer ma liberté d'expression et la vie privée de mes visiteurs contre une commodité. Oui mon site tombera peut-être plus souvent que ceux utilisant CloudFlare, mais j'assume. Question de choix. Question de confiance. Je suis peut-être un peu jusqu’au-boutiste, mais comme Timo (Le Hollandais Volant), Mitsukarenai (Fansub-streaming) ou Hoper, j’ai plutôt envie de réduire les dépendances.

L'avenir me dira si j'ai raison.



PS: Histoire d'être transparent: A l'heure actuelle, les seules dépendances de sebsauvage.net envers des services extérieurs à mon hébergeur sont:

Ce sont les seuls services externes à obtenir votre adresse IP quand vous naviguez sur mon site, et encore, que sur certaines pages. Notez qu'ils ne peuvent en aucun cas vous interdire la navigation sur mon site (je garde le contrôle), et Project Honetpot ne connait que votre adresse IP, pas l'URL que vous visitez sur mon site (pas de HTTP_REFERER). Ce ne sont que des dépendances faibles: Même si ces sites tombent, mon site continuera à fonctionner.


EDIT 25 janvier 2012: J'vous jure, j'y suis pour rien si CloudFlare est tombé !