22.06.2010

Nuit du Hack 2010

Comme l’année dernière, la nuit du Hack a eu lieu sur une péniche transformée pour l’occasion en bateau pirate. La comparaison s’arrête là car cette année tout était plus grand : plus de conférences, plus de challenges publics, plus de musique, et l’apparition de workshops.

Tout a commencé à 16h avec l’ouverture des portes de la Péniche alors que certains attendait sur le quai depuis un moment déjà. Quelques binouzes plus tard, il est déjà 17h et c’est le début des conférences et l’heure des choix cornéliens : chacun des deux étages de la Péniche héberge une conférence différente. Il faut donc choisir entre deux bonnes conférences ce qui n’est pas tout le temps facile. Je n’ai malheureusement pas eu l’occasion de suivre les premières conférences car trop occupé à finalisé la conférence que j’ai présenté à 19h15.

Une fois ma conférence terminée, je peux enfin profiter totalement de l’évènement et enchainer les conférences. Tout d’abord, GeoHot : Hacking embedded devices avec des détails sur l’état de l’art du hacking de la PS3. Ensuite, cde nous a présenté le déboguer opensource xdbg qui n’atteint pas encore le niveau de IDA Pro mais semble très prometteur. Puis c’est au tour de Mathieu Suiche qui nous explique comment analyser la mémoire physique d’un mac sous leopard et fini par récupérer le mot de passe de l’utilisateur stocké dans un buffer qui n’a pas jamais été vidé par le process de logon. (Il faudra que je test ça sur mon macbook 10.6.4)

La fin des conférences permet d’aller faire un tour du côté des workshops, j’ai malheureusement raté le hack de caddie made in la grotte du barbu. Par contre, j’ai vu des gens très intéressants reprogrammer une LiveBox et Xavier de Xavbox reprogrammer des consoles de jeux. Le concept des workshops permet de créer un hacker space temporaire qui s’accorde très bien avec le reste de la soirée.

Le reste de la soirée a été partagé entre un concert rock terminé par un mix électro et les différents challenges (CTF + challenge public très varié). Pour ma part, j’ai donné quelques coup de mains à droite et à gauche et j’ai discuté avec quelques hackers qui avaient pour certains fait plusieurs centaines de kilomètres pour évènement.

Concernant HZVault, les slides de la conférence sont disponibles ici et . La release de l’outil aura lieu dans quelques jours.

30.01.2010

FreeBSD + ESXi

Vu que le projet FreeBSD Xen avance sans être suffisament stable pour être utilisé au jour le jour, la solution ESXi de VMWare reste une des solutions gratuites les plus adaptées à la virtualisation de serveurs FreeBSD.

Cependant, cette solution peut aussi engendrer certaines instabilités, en particulier sur les machines virtuelles générant beaucoup d’IO. Voici donc quelques astuces pour obtenir le meilleur d’une machine virtuelle avec VMWare ESXi.

  • Rester si possible en FreeBSD 7.x : la version 8.0 n’est pour l’instant pas officiellement compatible avec ESXi
  • Tuning du /boot/loader.conf afin de garder une horloge relativement fiable (en effet, dans un contexte virtualisé, le processeur virtuel « saute » facilement des ticks qui sont données à une autre machine virtuelle) :
    kern.hz=100
  • Tuning du /etc/sysctl.conf afin d’optimiser la partie système de fichier :
    vfs.read_max=256
  • Tuning du /etc/rc.local afin d’optimiser les accès aux disques durs virtuels (à adapter en fonction du nombre de disques durs virtuels) :
    camcontrol tags da0 -N 127
    camcontrol negotiate 0:0 -a -W 16 -O 127 -R 160.000
  • Enfin, il est recommandé d’installer la version opensource des VMWare Tools disponible via le port /usr/ports/emulators/open-vm-tools-nox11 (Attention, ce port nécessite d’avoir les sources du kernel disponible dans /usr/src)

Un petit article sur un point que je trouve pour le moins mal documenté dans le Handbook : l’utilisation du port série sous FreeBSD.

Il est où mon device ?

La réponse à cette question fait un peu plus de 3 lettres. Contrairement à ce que semble indiquer le handbook sur la page dédié au ports séries. Le device du port série n’est pas forcement /dev/sio0. Sur les cartes mères récentes, c’est en général /dev/cuau0. Afin de rester dans la confusion, il est aussi à noter que la détection de ce device n’apparait dans /var/run/dmesg.boot. La seule solution que j’ai trouvée pour vérifier que le port série a bien été détecté a donc été de lister le contenu de /dev.

Comment je l’utilise ?

Dans le cas le plus fréquent de nos jours : connexion à l’interface de management d’un équipement réseau, la marche à suivre est relativement simple. Il suffit d’utiliser le programme cu (installé par défaut) en précisant le device (option -l) et éventuellement la vitesse (option -s). Pour récupérer, à la vitesse impressionnante de 9600bps, la console d’un équipement connecté sur le premier port série, il faudra donc éxecuter la commande ci-dessous.

 # cu -l /dev/cuau0 -s 9600 

Je viens de publier la deuxième partie de la série d’article sur la conception d’un NAS sous FreeBSD : au menu, l’installation du matériel et le paramétrage de ZFS. Au passage, je vous fait profiter de mon gros coup de gueule sur Materiel.net qui met un mois à livrer du matériel annoncé comme livré avec un délai de 2/3 jours. Cerise, sur le gateau, même avec un mois de retard, ils livrent un boitier incomplet, j’ai donc attendu 10 jours de plus afin d’avoir ma commande. Je vous recommanderai donc les gars de Mini-ITX.com sont spécialisés dans ce type de boitiers et beaucoup plus sérieux. Le pire c’est qu’ils ne sont pas plus cher et livrent plus rapidement que Materiel.net alors qu’ils sont situés au Royaume-Uni.

Lien vers l’article

Je viens de publier la première partie d’une série d’articles qui décriront pas à pas la mise en place d’un filer (serveur de fichier) sous FreeBSD. Le premier article présente les contraintes du projet et explique les différents choix effectués au niveau du matériel. D’autres articles suivront d’ici quelques jours/semaines.

Lien vers l’article

Parmi les innombrables plugins Firefox que j’ai pris l’habitude d’utiliser. Il y a ASNumber, ce plugin permet de faire la correspondance entre un site web et l’AS qui l’héberge. Pour simplifier, l’AS est un des identifiants réseau de l’hébergeur.

Malheureusement, je suis passé sur la dernière version de Firefox et vu qu’aucune mise à jour n’a été effectué par le mainteneur du plugin, le plugin n’était plus utilisable. Heureusement pour moi, les plugins Firefox sont en fait de simple fichiers ZIP contenant une description et une archive JAR qui contient des fichiers javascripts et css. Après quelques modifications, j’ai pu réaliser une version du plugin compatible avec Firefox 3.5. Le mainteneur a été contacté mais pour les impatients la version modifiée du plugin est disponible à cette adresse : http://mirror.labs.fr/pub/Firefox/asnumber_35.xpi.

Astuce : Si vous voullez heberger des extensions Firefox sur votre propre serveur, il ne faut pas oublier d’associer l’extension .xpi au mime-type application/x-xpinstall.

Ce qu’il y a de plus effrayant avec certaines grandes entreprises, c’est cette petite manie qu’elles ont de se croire au dessus des règles. Prenons l’exemple de Google, comme toute les grosses boites dans le domaine de l’informatique, ils ont leur équipe « sécurité informatique ». Chez eux, ils font dans l’originalité et appellent cette équipe : la « Google Security Team ». Comme dans toutes les équipes du même genre, on y trouve des chercheurs dans différents domaines. Comme Google est une boite jouissant d’une certaine réputation, ils n’ont pas de mal à recruter des profils intéressants ayant envie d’ajouter une ligne qui peut rapporter gros à leur CV. L’équipe finit donc par monter en compétence et publie donc des vulnérabilités.

Et c’est là que les problèmes commencent. Pas pour Google, ce sont de grand enfants, ils savent quand ils vont publier, ils savent donc quand patcher leurs serveurs. Par contre, ils oublient que reveler une faille un jeudi soir [1] et juste quelques heures après que le patch ait été ajouté dans les sources Linux, c’est rendre l’ensemble des serveurs Linux vulnérable pour au moins un week-end. Et ça n’a pas manqué aucune distribution majeure n’a eu de patch prêt avant lundi.

Jusqu’à hier, on avait donc quasiment l’ensemble des Linux du monde vulnérable et avec comme seule solution de patchage des grosses bidouilles. C’est quand même assez genant, et cela est totalement opposé aux règles communement admises pour la révalation de failles de sécurité. [2]

[1] http://seclists.org/fulldisclosure/2009/Aug/0173.html

[2] http://www.wiretrip.net/rfp/policy.html

Trouver une alternative à BIND pour un DNS autoritaire n’est pas chose aisée, entre les usines à gaz  comme PowerDNS et les serveur à la licence douteuse comme djbdns, il se dégage quand même NSD. Le challenger accepte les fichiers de zone au format BIND, équipe déjà 3 des root servers, et implémente des fonctionalités avancées comme DNSSEC et IPV6. Il reste cependant limité à une utilisation en tant que NS autoritaire car il ne sait pas effectuer de resolutions récursives.

Comme d’habitude, nous allons commencer par une installation du logiciel par les ports FreeBSD

# cd /usr/ports/dns/nsd
# make install clean

Nous allons continuer avec l’édition du fichier de configuration

# cd /usr/local/etc/nsd/
# cp nsd.conf.sample nsd.conf
# chmod +w nsd.conf
# vi nsd.conf

Le fichier par défaut est relativement bien commenté, j’ai personnellement modifié les lignes suivantes pour avoir un serveur qui n’écoute que sur une des IPs de la box avec un pidfile dans un dossier particulier et j’en ai profité pour ajouter une zone  DNS :

ip-address:  213.251.171.146
pidfile: "/var/run/nsd/nsd.pid"
zone:
name: "majinboo.org"
zonefile: "majinboo.org.zone"
outgoing-interface: 213.251.171.146
notify: 217.174.206.169 NOKEY
provide-xfr: 217.174.206.169 NOKEY

La modification du chemin du pidfile m’a permis de bypasser un bug lors du lancement du démon, il ne faut pas oublier de créer le dossier en question et d’y donner les droits à l’utilisateur bind.

Avant de lancer le démon, il ne reste plus qu’à créer un fichier de zone au format bind, de le compiler en utilisant zonec et d’ajouter nsd_enable= »YES » à la fin du /etc/rc.conf.

Il est possible d’aller plus loin, par exemple en ajouter des clef DNSSEC pour les échanges entre les serveurs primaires et secondaires.

07.07.2009

FreeBSD 8.0 Beta 1

MAJ : La procédure de mise à jour binaire via freebsd-update est toujours accessible, elle est détaillée ici.

Une petite brève pour annoncer la disponibilité de la première bêta de FreeBSD 8.0. Cette mouture est la première déclinée en version « memstick » (pour les architectures i386 et amd64 uniquement). Cette version permet d’utiliser une clef USB en lieu et place de l’habituel CD. Ça pourra être utile pour installer une FreeBSD sur le dernier coupé sport ou les petites citadines à la mode qui n’ont pas de lecteur CD.

Malgré le retard d’une semaine sur cette première bêta, les prochaines bêta et la release date du 31 aout ne sont pas décallées.

Un petit article sur un système BSD un peu particulier : iPhone OS en version 2.x pour l’instant mais cet article devrait normalement s’appliquer sans soucis sur un iPhone 3.0 d’ici quelques jours/semaines.

/!\  Cet article va à l’encontre de ce qu’Apple cherche à imposer sur son produit. /!\

Présentation de l’OS

L’iPhone OS est un dérivé de MacOS X lui même dérivé de FreeBSD. On se retrouve rapidement en terrain connu avec le firewall ipfw par exemple.  L’OS est par défaut bridé par Apple, pour en profiter, pleinement il faut effectuer un JailBreak. Cette opération ne sera pas détaillée dans cet article (Google est très locace sur le sujet). Le système de packages le plus utilisé sur les iPhone jailbreakés est Cydia (un portage iPhone d’apt). Une fois Cydia installé, il est de bon ton d’installer BSD subsystem et OpenSSH.

Une fois l’accès SSH  activé (changer le mot de passe est une très bonne idée), il est possible d’utiliser Cydia en ligne de commande :

#mise à jour de la base de packages

apt-get update

#recherche du package gcc

apt-cache search gcc

#installation du package gdb

apt-get install gdb

Les logiciels suivants seront très utiles pour la suite :

  • iphone-gcc : le compilateur gcc arm
  • com.bigboss.20toolchain : la toolchain qui contient entre autre les fichiers d’include standards
  • gdb : bien utile pour le debug
  • screen : evite de perdre les programmes en cours si le signal wifi est coupé
  • vim : pas besoin de le présenter

toto.c

Nous allons réaliser un programme le plus simple possible :

#include <stdlib.h>
#include <stdio.h>
int main (int argc, char ** argv)
{
printf("%s is working !\n",argv[0]);
return 0;
}

Pour compiler ce programme, nous allons devoir préciser à gcc l’emplacement des headers standards :

# gcc toto.c -o toto -I /private/var/include/

./toto

Killed

L’iPhone a refusé d’exécuter notre programme. En effet, l’OS vérifie que le programme a bien été signé par Apple. Heuresement pour nous, il est tout à fait possible de signer nous-même le programme avec ldid (par contre cette signature ne sera reconnue que sur les iPhone jailbreakés) :

ldid -S toto

./toto

toto is working !

Conclusion

Il est possible d’aller plus loin, un certain nombre de programmes et de librairies libres ont dors et déjà été portées sur iPhone. Il ne vous reste plus qu’à laisser s’exprimer votre créativité. Attention cependant, cette methode ne permet de réaliser que des programmes utilisables en ligne de commande, pour réaliser des interfaces graphiques iPhone, la meilleure solution reste l’utilisation de l’Objective C.

Page suivante »