Le fourre-tout à Geo

Aller au contenu | Aller au menu | Aller à la recherche

lundi, novembre 2 2009

Utilisateurs et groupes

Pour ce premier tutoriel sur la protection de votre machine, on va parler des notions d'utilisateurs et de groupes d'utilisateurs dans Windows. Oui, ça existe, on n'est pas obligé de prendre le compte "Administrateur" pour pouvoir utiliser sa machine.

Pourquoi est-ce que tout le monde tourne sous le compte admin de sa machine? Parce que c'est plus simple pour le constructeur de vous donner le compte admin et vous laisser pourrir votre machine, que de vous donner plusieurs compte et ainsi s'exposer aux nombreux appels de clients en colère parce qu'ils n'arrivent pas à installer une application. Et c'est aussi plus simple, vu que pas mal d'applications supposent encore qu'elles peuvent écrire dans C:\Program Files.

Que va-t-on faire aujourd'hui? Pas compliqué: on va créer deux comptes utilisateurs: un "normal", que vous pourrez utiliser tous les jours, et un compte "Administrateur" qui vous permettra d'effectuer certaines tâches nécessitant plus de droits comme l'installation d'applications.

Tout d'abord, lancez la console de gestion des "Local users and groups" en allant dans Démarrer->exécuter et en tapant lusrmgr.msc.

Local Users and Groups

Cliquez sur le dossier Users (ou Utilisateurs si vous aimez votre version française). Vous devriez maintenant voir une liste de comptes, dont Administrator (qui est pour l'instant désactivé), Guest, le (les) vôtre(s), ainsi que AlphaUser$ et HomeGroup$ si vous avez créé un Homegroup (c'est pas particulièrement important pour le moment).

Users

Ce que l'on va faire maintenant:

  • Désactiver le compte Guest (si c'est pas déjà fait)
  • Activer le compte Administrateur
  • Ajouter un mot de passe au compte Administrateur
  • Retirer votre compte du groupe Administrateurs

Très simple: clic droit sur les comptes, puis propriétés. Pour Administrateur, clic droit, puis changer le mot de passe, et indiquez un mot de passe de votre choix (non, on ne choisit pas "123456" ou "admin", c'est MAL), puis à nouveau clic droit, propriétés et activez le compte. Pour Guest, faites l'inverse (désactivez-le). Pour votre compte, clic droit, propriétés, puis allez dans l'onglet "Membre de". Cet onglet liste les groupes dont le compte fait partie. Cliquez sur Administrateurs puis cliquez sur Retirer.

Member of

Voilà, c'est fait! Bon, euh, qu'est-ce qu'on a fait en fait? Avant, vous pouviez, avec votre compte normal, installer des applications, supprimer des fichiers de C:\Windows,tripoter votre base de registres, etc. XP ne vous indiquait même pas que vous alliez bousiller votre système. Vista et 7 vous montraient la fameuse fenêtre UAC vous demandant si vous vouliez vraiment faire une connerie. Maintenant, cette fameuse fenêtre va vous demander de vous identifier avec le compte Administrateur pour aller trifouiller dans votre système.

Oui, je sais, ça paraît relou. Mais vous verrez que 90% du temps, on n'a pas besoin des droits d'Administrateur (surtout depuis Windows 7). Avec cette modification, si une application ressent tout à coup le besoin d'aller vous installer des cochonneries, vous serez averti!

Quid de l'UAC? C'est pas une protection! Lorsque vous utilisez avec votre compte de base, vous avez deux casquettes: celle de l'utilisateur normal, et celle de l'administrateur. Lorsque vous voulez effectuer une action nécessitant plus de droits, Windows vous demande de changer de casquette. Certains programmes changeront même votre casquette sans vous demander... Avec la manip' que vous venez de faire, Windows vous demande systématiquement l'autorisation de l'administrateur :)

Ah, et un effet de bord sympa: c'est pas n'importe qui qui peut installer une application derrière mon dos quand je le laisse utiliser mon ordi cinq minutes (valable aussi et surtout si vous avez des gosses).

Bon, manifestement, c'est pas fini, on peut encore faire pas mal de conneries sur ma machine, avec suffisamment de motivation. On en rajutera dans le prochain article :)

mercredi, octobre 28 2009

test d'EMET, un nouvel outil pour protéger vos programmes

L'annonce est parue hier sur le blog de Microsoft Security Research & Defense: la release d'EMET(Enhanced Mitigation Evaluation Toolkit), un outil gratuit permettant d'appliquer des protections comme DEP sur vos programmes.

Jusqu'ici, l'ajout de ces protections était soumis au bon vouloir du développeur. Soit on activait les options dans Visual Studio, soit on utilisait ma bidouille avec peflags. EMET permet d'activer les protections chez vous, sur les processus que vous voulez de façon très simple: EMET_conf --add <executable>. Quel que soit le dossier contenant votre programme, EMET se chargera de le lancer avec les protections choisies.

EMET gère ainsi une liste de processus et leur apporte les protections suivantes:

  • SEHOP (Structured Exception Handler Overwrite Protection): validation de la chaines des gestionnaires d'exception
  • DEP (Data Execution Prevention): marque certaines parties de la mémoire, par exemple la stack, comme non exécutables
  • NULL page allocation: protection contre les "NULL dereferences" en résevant la première page mémoire
  • Heap spray allocation: "heap spray" est une attaque qui consiste à balancer du shellcode un peu partout dans la mémoire, et à sauter plus ou moins au hasard dans les zones mémoires affectées en espérant pouvoir exécuter le shellcode. EMET réserve les adresses mémoire généralement utilisées dans les exploits pour les empêcher d'y écrire.

Bon, maintenant, les critiques (j'ai bien appris la présentation classique thèse/antithèse/synthèse à l'école, maintenant, j'applique!):

  • J'aurais bien aimé voir ASLR(Address Source Layout Randomization) là-dedans, parce que ça va bien avec DEP et SEHOP.
  • On ne peut pas choisir quelle protection on applique à quel binaire: les options sont dans des clefs registres dans HKLM/Software/Microsoft/EMET, et quand on en désactive une, on la désactive pour tous les programmes. Par contre, il y a une clef registre assez fun nommée "heap_pages", qui permet d'indiquer à EMET quelles adresses réserver pour la partie heap spray allocation.
  • Ce serait sympa d'avoir une interface "oh, look, shiny!", même si ça sert à rien :)

Comparé à peflags, EMET apporte la protection contre les null pointer dereferences et les heap sprays, et permet de protéger un exécutable en se basant sur son nom. Par contre, peflags permet d'appliquer les protections beaucoup plus finement (par exemple, SEHOP pour un programme et pas pour l'autre), et peut ajouter le flag ASLR (qui doit être appliqué sur toutes les DLLs chargées par un programme pour fonctionner correctement).

En résumé, un outil sympa, mais qui devrait être travaillé encore un peu. Ca reste un programme utile pour les développeurs qui veulent tester le comportement de leur application lorsque les protections sont activées. Dommage, c'est déjà fait avec VLC media player!

lundi, septembre 21 2009

Enable DEP and ASLR with MinGW

Every now and then, we see reports about vulnerabilities in numerous applications: buffer overflows and heap overflows are unfortunately very common. Until we find a way to teach all the developers how to think about security while coding (and then, there will still be a lot of programs to fix), we can try some tricks to prevent exploitation of vulnerabilities.These tricks have been Visual Studio only for a long time (and even with VS, not everybody uses them), but now, we have tools to protect as well programs built with GCC.

DEP and ASLR?

DEP provides support for NX bit since Windows XP SP2 and Windows 2003 SP1. This feature flags some part of the memory, like the heap and the stack, as not executable. Then, the shellcodes stored in buffers will have a hard time trying to run.

ASLR randomizes the address of function entry points. This way, exploits with hardcoded functions address like ret2libc attacks won't work.

These two mechanisms are not silver bullets: they can be bypassed. But it makes the process of writing an exploit much harder.

Using it

If you build your program with Visual Studio, it's easy and documented. If you're using MinGW to build for Windows, it's not really documented, but it's easy too.

To mark an executable as DEP and/or ASLR compatible, you have to change the DllCharacteristics field in the Portable Executable header. You can write your own PE modification software, or use one of these two solutions:

Peflags

Peflags is a program you can find in the rebase package from Cygwin. Peflags builds fine with MinGW in MSYS, but you have to tweak a bit the source if you want to run it from Linux, or directly take my modified source.

It is really easy to use:

peflags --dynamicbase=true --nxcompat=true myexecutable

You can add this command to your Makefile. It has to run on the executable and all the dlls it loads, to be effective. If you want to verify that your program has enabled the flags, do:

objdump -p myexecutable

And look for the DllCharacteristics flag. If its value is 140, congratulations! Your executable is now compatible. You can also verify with Process Explorer, from SysInternals. Here is the line for VLC media player:

DEP and ASLR

LD

In March 2009, the support for this DllCharacteristics flag was added to ld, but the new binutils package containing the updated ld hasn't been released (yet). The command line is more or less the same.

Remarks

  • You have to add the flags to every executable used by your program. If you load a vulnerable dll without DEP, it won't protect you.
  • I'll say it again: it's no silver bullet. You still have to fix your bugs. It's a lot harder to exploit, but some may be able to do it.
  • VLC media player now has peflags in its building toolchain! I'm waiting for the release of the next binutils, and then I'll use the new ld.

jeudi, septembre 17 2009

Je bidouille Firefox et j'aime ça

Ceux qui ont déjà jeté un oeil à ma machine savent que j'ai un gros problème avec les navigateurs web: le nombre d'onglets. Pour donner une idée, j'ai souvent plusieurs projets en cours, avec à chaque fois les onglets pour la documentation que je garde ouverts, j'ai un aggrégateur RSS avec beaucoup de flux pour lesquels j'ouvre un nouvel onglet (c'est lourd, ces sites qui ne mettent qu'un extrait dans le RSS) que j'oublie de lire, et j'ai comme tout le monde des séances sur Wikipedia où je clique compulsivement sur tous les liens de la page. Je me suis déjà retrouvé avec trois fenêtres contenant chacune plus de 50 onglets.

Résultat: je les perds régulièrement, j'oublie de les lire et ça s'accumule. Et en plus, Firefox aime bien la RAM, et en prend de plus en plus. Au bout de 600 Mo, il est très lent... Et si en plus, on ajoute des sites avec du Flash et du Javascript dans tous les sens, et une tendance à chercher le gros uptime, on court vers la catastrophe!

Interface de base Firefox

Bien sûr, on me proposera quelques solutions évidentes du genre:

  • lire les pages dès qu'on les ouvre
  • mettre en bookmark celles qu'on veut garder (j'ai jamais réussi à organiser les bookmarks)
  • ne pas passer autant de temps à glander sur Internet...

Mais ce serait trop facile! Quelque chose en moi me pousse à trouver une solution technique à ma flemme, me permettant de ne pas changer mes très mauvaises habitudes. Oui, c'est mal. Mais le résultat est plutôt efficace.

Affichage

Premier essai: Colorful Tabs

La première extension que j'ai essayée pour m'aider à m'y retrouver dans tous mes onglets est Colorful Tabs. Elle colore chaque onglet, ce qui se révèle très pratique pour la reconnaissance des pages que l'on veut consulter.

Colorful Tabs

Malheureusement, ça limite toujours le nombre de tabs visibles.

La suite: TabKit

TabKit est une extension très puissante pour gérer les onglets dans Firefox. Le réglage par défaut (onglets colorés à gauche organisés en arbre) contentera pas mal de gens (dont moi). Notons que ColorfulTabs n'est pas nécessaire car TabKit colore les boutons tout seul. Par contre, les boutons sont plus jolis quand on rajoute ColorfulTabs :)

Tab Kit

Gagner encore un peu de place

Vue aujourd'hui sur LifeHacker, une astuce toute simple permet de gagner un peu de place. Il suffit de droitcliquer (ça se conjugue comme doublecliquer: je droitclique, tu droitcliques...) sur la barre de menu et gauchecliquer sur "Personnaliser". J'ai décoché la "barre personnelle" dont je ne me servais pas, j'ai mis tous les boutons sur la ligne du haut, et j'ai supprimé le bouton Home (pas très utile, quand on a 150 onglets au démarrage).

Lifehacker Firefox tip

On gagne encore de la place en décochant aussi "Barre de navigation".

AAAAH Il y a trop d'onglets!

Bon, ok, c'est joli. On passe d'un affichage d'une dizaine d'onglets à 25 onglets colorés. Quand on en a 150, cette solution ne suffit pas.

Profils Firefox

Je peux résoudre le problème de la durée de vie des onglets avec une astuce pas très compliquée, et TRES utile (ça mérite le gras en majuscule). Firefox peut gérer plusieurs profils utilisateur. Généralement, personne n'a besoin de ça, et utilise directement le profil par défaut. Mais on peut en créer plusieurs. Ils se trouvent dans %APPDATA%\Mozilla\Firefox\Profiles\xxxxxxxx.default'' aka c:\Users\MOI\AppData\Mozilla\Firefox\Profiles\xxxxxxxx.default'' sur Windows, ou ~/.mozilla/firefox/xxxxxxxx.default/ (et les utilisateurs de Mac peuvent crever la bouche ouverte ou aller consulter la doc).

L'idée ici est de créer un profil par thème. Je peux ainsi garder le profil par défaut pour lire les RSS et les webcomics, et autres distractions, et créer un profil pour chaque projet sur lequel je travaille. J'ai par exemple un profil pour stocker les onglets en rapport avec VLC, et un autre pour mes bidouilles en électronique. Ainsi, je garde des fenêtres avec peu d'onglets, je n'ai pas besoin de scroller constamment pour trouver les pages qui m'intéressent, j'ai moins de chances de perdre mes onglets, Firefox utilise moins de RAM, et avoir tous les liens en rapport avec un sujet sur la même fenêtre aide à ne pas se laisser distraire (surtout si je ferme le profil default).

Comment faire ça? Pas compliqué! En gros, Démarrer->Exécuter puis tapez: firefox.exe -ProfileManager

Créez ensuite le profil que vous voulez. Quittez Firefox et redémarrez-le. Il va charger le profil par défaut. Lancez une seconde instance de Firefox. Il devrait vous présenter la fenêtre suivante:

Choisissez votre profil

Si non, faites Démarrer->Exécuter puis tapez: firefox.exe -P -no-remote

-P étant un alias pour -ProfileManager et -no-remote indiquant à Firefox qu'il ne doit pas charger le nouveau processus dans le même profil.

Vous pouvez maintenant gérer vos profils (créer, supprimer, etc.) et lancer ceux qui vous intéressent. Vous pouvez même créer des raccourcis pour chacun des profils, par exemple en indiquant:

firefox.exe -P VLC -no-remote

Configurer chaque profil

Le problème, c'est que les nouveaux profils sont vierges. Vous voudrez peut-être copier vos bookmarks, mots de passe, historique d'un profil à l'autre. Pour ça, l'extension FEBE s'occupe de tout, même de la migration de vos extensions. Vous n'avez plus qu'à exporter les informations qui vous intéressent d'un profil à l'autre.

Et après?

Maintenant, je dois faire attention à garder un nombre d'onglets par profil limité. Pour le profil "distractions", il suffit de lire les pages qui sortent de l'aggrégateur RSS, et pour les autres profils, quand j'ai de trop nombreuses pages, soit je m'arrange pour bosser suffisamment et les supprimer, soit la documentation est importante, et je l'insère dans un logiciel de Mind Mapping. Ca fait un peu pipo comme outil, mais c'est très pratique!

Voilà, je vous ai livré mon secret pour corriger mes mauvaises manières grâce à la technologie. Si maintenant, vous voulez un dernier avis sur ce qu'il faut utiliser avec Firefox, voici quelques trucs:

La combinaison NoScript/RequestPolicy/GreaseMonkey peut paraître overkill et inutilisable, mais elle accélère la navigation (moins de Flash et de Javascript), les listes de sites à autoriser sont vites faites, et c'est marrant de voir les interactions entre sites, du genre vol d'images, publicités, séparation des services selon le nom de domaine, etc.

samedi, septembre 12 2009

VLC tricks: get comfortable

Last time, I showed you how to customize your interface with new skins. I hope you are happy with it :)

Now, I will tell you how to tune VLC to meet your needs. I like it when it just runs, with no tweaking. But what I would like even more is customizing the way it runs once and for all, and forget about it.

So, here is a compilation of VLC settings you may find useful, and info on where you can find them in the preferences:

  • Always on top: in Video. If, like me, you often watch a video while coding/reading/chatting, having a small video window on top of the others in a corner of the screen is convenient.
  • Deinterlacing: in Video->Filters->Deinterlace. I have some DVDs with interlaced videos, and it's annoying to set deinterlacing for each video. Here, choose the deinterlacing algorithm you prefer (test with multiple videos).
  • Sharpening: in Video->Filters->Sharpen video. Here again, set as you see fit (videos will appear a bit more clear).
  • Subtitles: in Video->Subtitles/OSD. You can choose the folder where VLC will search for subtitles, and choose the color and font in Video->Subtitles/OSD->Text renderer.
  • Interface tweaks: in Interface->Main interfaces->Qt. Use Automatically save the volume on exit. you can uncheck Show notification popup on track change if the systray popup bothers you.

Last but not least, the hotkeys: you can control VLC directly from your keyboard. You can see them and change them in Hotkeys in the preferences (not that hard to find...). Here are the handy ones:

  • Play/Pause: space
  • Fullscreen: F
  • Leave fullscreen: Esc
  • Next: N
  • Previous: P
  • Mute: M
  • Increase subtitle delay: H
  • Decrease subtitle delay: G
  • Increase audio delay: K
  • Decrease audio delay: J

There's a lot of configuration settings, so feel free to test the remaining ones and tweak your VLC :)

- page 2 de 12 -