Argus:Argus
Howto argus
Description
Argus (Audit Record Generation and Utilization System) est un outil d'audit de réseau basé sur l'étude des flux. Il permet de mettre en évience des anomalies (performance, sécurité, etc.). Il peut être utilisé à partir d'un fichier de capture existant ou déployé en tant que sonde sur le réseau afin de collecter des données qui pourront ensuite être analysées. La partie cliente est composée d'un ensemble d'utilitaires (ra*) permettant d'analyser les données collectées.
Installation
Installation de argus
Dépendances
- >=libpcap-1.0.0
- >=bison-2.1
Argus
# cd /usr/local/src/ # wget http://qosient.com/argus/dev/argus-3.0.2.tar.gz # tar xzvf argus-3.0.2.tar.gz # cd argus-3.0.2/ # ./configure # make # make install
Fichier de configuration : argus.conf
Copiez le fichier de configuration fourni avec les sources à la base de /etc :
# cp /usr/local/src/argus-3.0.0/support/Config/argus.conf /etc/
Les directives principales sont les suivantes :
Thank you for your comprehension.
Paramètre | Equiv. CLI | Description |
---|---|---|
ARGUS_FLOW_TYPE="Bidirectional" | ||
ARGUS_FLOW_KEY="CLASSIC_5_TUPLE" | ||
ARGUS_DAEMON=yes | ||
ARGUS_MONITOR_ID=`hostname` | ||
ARGUS_ACCESS_PORT=561 | ||
#ARGUS_BIND_IP="127.0.0.1" | ||
#ARGUS_INTERFACE=eth0 | ||
#ARGUS_GO_PROMISCUOUS=yes | ||
#ARGUS_COLLECTOR=yes | ||
#ARGUS_SETUSER_ID=user | ||
#ARGUS_SETGROUP_ID=group | ||
#ARGUS_OUTPUT_FILE=/var/log/argus/argus.out | ||
ARGUS_SET_PID=yes | ||
ARGUS_PID_PATH="/var/run" | ||
ARGUS_FLOW_STATUS_INTERVAL=5 | ||
ARGUS_MAR_STATUS_INTERVAL=60 | ||
ARGUS_DEBUG_LEVEL=0 | ||
ARGUS_GENERATE_RESPONSE_TIME_DATA=no | ||
ARGUS_GENERATE_PACKET_SIZE=no | ||
ARGUS_GENERATE_JITTER_DATA=no | ||
ARGUS_GENERATE_MAC_DATA=yes | ||
ARGUS_GENERATE_APPBYTE_METRIC=no | ||
#ARGUS_GENERATE_TCP_PERF_METRIC=yes | ||
#ARGUS_GENERATE_BIDIRECTIONAL_TIMESTAMPS=no | ||
#ARGUS_CAPTURE_DATA_LEN=32 | -U | |
#ARGUS_FILTER_OPTIMIZER=yes | -O | |
#ARGUS_FILTER="" | - | |
#ARGUS_PACKET_CAPTURE_FILE="/var/log/argus/packet.out" | - | |
|
- | |
#ARGUS_ENV="PCAP_MEMORY=300000" |
Installation de argus client
Dépendances
- flex
- bison
- apt-get install libncurses-dev
Argus-client
# cd /usr/local/src/ # wget http://qosient.com/argus/dev/argus-clients-3.0.2.tar.gz # tar xzvf argus-clients-3.0.2.tar.gz # cd argus-clients-3.0.2/ # ./configure # make # make install
Configuration
Démarrage automatique
Un script de démarrage automatique est livré avec les sources. Pour l'installer, il suffit de saisir les commandes suivantes :
# cd /etc/rc.d/init.d/ # cp /usr/local/src/argus-3.0.0/support/Startup/argus . # chmod +x argus # update-rc.d argus defaults 99
Archivage
Afin de ne pas surcharger les fichiers de log, il est important de mettre en place un système d'archivage des données. Pour ce faire, copier tout d'abord le script d'archivage (disponible dans le répertoire des sources) dans le même répertoire qu'argus (dans notre cas, argus est installé dans /usr/local/sbin, comme le montre le résultat de la commande whereis)
# whereis argus argus: /etc/argus.conf /usr/local/sbin/argus /usr/local/argus
Commande de copie du script d'archivage :
# cp /usr/local/src/argus-3.0.0/support/Archive/argusarchive /usr/local/sbin/
L'archivage peut être appelé toutes les heures par le crontab. Editez ce dernier comme suit :
# crontab -e
Puis ajouter la ligne suivante (Archivage des fichiers de données argus toutes le heures) :
0 * * * * /usr/local/bin/argusarchive >> /var/log/argus/archive.log 2>&1
Utilisation de Argus
Utilisation de base
# argus --help Argus Version 3.0.2 usage: argus [options] [-i interface] [filter-expression] usage: argus [options] -r packetfile [filter-expression] options: -A Generate application byte metrics. -b dump filter compiler output. -B <addr> specify bind interface address. -c <dir> daemon chroot directory. -d run Argus in daemon mode. -e <value> specify Argus Identifier <value>. -h print help. -F <conffile> read configuration from <conffile>. -J generate packet performance data. -M <secs> set MAR Status Report Time Interval (300s). -m turn on MAC Layer Reporting. -O turn off filter optimizer. -p don't go into promiscuous mode. -P <portnum> enable remote access on <portnum> (561). -r <file file ...> use packet file as data source. -R generate response time data. -s <bytes> set the packet snaplen size. -S <secs> set FAR Status Report Time Interval (60s). -t indicate that packetfile is MOAT Tsh format. -u <userid> specify user id for daemon. -g <groupid> specify group id for daemon. -U <bytes> specify the number of user bytes to capture. -w <file ["filter"]> write output to <file>, or '-', for stdout, against optional filter expression. -X reset argus configuration. -Z generate packet size data.
Exemple d'analyse
Commençons par enregistrer des trames réseau dans un fichier de capture au format tcpdump :
# tcpdump -i wlan0 -w wifi.cap
Une fois la commande lançée, ouvrez votre navigateur puis "surfez" sur quelques pages.
Revenez au terminal puis stoppez l'enregistrement de tcpdump par la commande CTRL+C (^C).
Nous allons maintenant demander à argus de traiter notre fichier de capture :
# argus -r wifi.cap -w wifi.argus
Puis grâce au programme "ra", nous affichons une analyse des trames :
# ra -r wifi.argus
Voici une exemple de sortie :
12:28:39.973173 e udp 192.168.0.2.1025 <-> 192.168.0.1.domain 2 312 CON 12:28:40.602224 e tcp 192.168.0.2.1038 -> 112.137.162.134.www 5 46193 FIN 12:28:54.213064 e tcp 192.168.0.2.1038 -> 112.137.162.134.www 2 120 FIN 12:28:56.372489 e tcp 192.168.0.2.1039 -> 112.137.162.134.www 10 910 RST
Nous comprenons dès lors qu'Argus rassemble les trames lors de son analyse afin d'en déterminer des flux. En effet, si nous ouvrons le fichier de capture précédemment enregistré par tcpdump, nous pouvons voir l'ensemble des paquets individuels.
L'exemple qui suit illustre ce principe de consolidation :
# tcpdump -nS -r tcpdump.cap ---Connexion--- reading from file tcpdump.cap, link-type EN10MB (Ethernet) 11:03:14.324788 IP 127.0.0.1.38061 > 127.0.0.1.80: S 3129129246:3129129246(0) win 32792 <mss 16396,sackOK,timestamp 2277347 0,nop,wscale 6> 11:03:14.324819 IP 127.0.0.1.80 > 127.0.0.1.38061: S 3121846099:3121846099(0) ack 3129129247 win 32768 <mss 16396,sackOK,timestamp 2277347 2277347,nop,wscale 6> 11:03:14.324845 IP 127.0.0.1.38061 > 127.0.0.1.80: . ack 3121846100 win 513 <nop,nop,timestamp 2277347 2277347> ---Transfert de données--- 11:03:14.324910 IP 127.0.0.1.38061 > 127.0.0.1.80: P 3129129247:3129129657(410) ack 3121846100 win 513 <nop,nop,timestamp 2277347 2277347> 11:03:14.324952 IP 127.0.0.1.80 > 127.0.0.1.38061: . ack 3129129657 win 529 <nop,nop,timestamp 2277347 2277347> 11:03:14.325783 IP 127.0.0.1.80 > 127.0.0.1.38061: P 3121846100:3121846583(483) ack 3129129657 win 529 <nop,nop,timestamp 2277347 2277347> 11:03:14.325808 IP 127.0.0.1.38061 > 127.0.0.1.80: . ack 3121846583 win 530 <nop,nop,timestamp 2277347 2277347> 11:03:14.355469 IP 127.0.0.1.38061 > 127.0.0.1.80: P 3129129657:3129130068(411) ack 3121846583 win 530 <nop,nop,timestamp 2277355 2277347> 11:03:14.376221 IP 127.0.0.1.80 > 127.0.0.1.38061: P 3121846583:3121848910(2327) ack 3129130068 win 546 <nop,nop,timestamp 2277360 2277355> 11:03:14.392325 IP 127.0.0.1.38061 > 127.0.0.1.80: P 3129130068:3129130528(460) ack 3121848910 win 770 <nop,nop,timestamp 2277364 2277360> 11:03:14.392641 IP 127.0.0.1.80 > 127.0.0.1.38061: P 3121848910:3121855374(6464) ack 3129130528 win 563 <nop,nop,timestamp 2277364 2277364> 11:03:14.401679 IP 127.0.0.1.38061 > 127.0.0.1.80: P 3129130528:3129131013(485) ack 3121855374 win 770 <nop,nop,timestamp 2277366 2277364> 11:03:14.401936 IP 127.0.0.1.80 > 127.0.0.1.38061: P 3121855374:3121855908(534) ack 3129131013 win 579 <nop,nop,timestamp 2277366 2277366> 11:03:14.403979 IP 127.0.0.1.38061 > 127.0.0.1.80: P 3129131013:3129131502(489) ack 3121855908 win 770 <nop,nop,timestamp 2277367 2277366> 11:03:14.404180 IP 127.0.0.1.80 > 127.0.0.1.38061: P 3121855908:3121858662(2754) ack 3129131502 win 596 <nop,nop,timestamp 2277367 2277367> 11:03:14.442509 IP 127.0.0.1.38061 > 127.0.0.1.80: . ack 3121858662 win 770 <nop,nop,timestamp 2277377 2277367> 11:03:14.454126 IP 127.0.0.1.38061 > 127.0.0.1.80: P 3129131502:3129131930(428) ack 3121858662 win 770 <nop,nop,timestamp 2277379 2277367> 11:03:14.454325 IP 127.0.0.1.80 > 127.0.0.1.38061: P 3121858662:3121859071(409) ack 3129131930 win 613 <nop,nop,timestamp 2277379 2277379> 11:03:14.454338 IP 127.0.0.1.38061 > 127.0.0.1.80: . ack 3121859071 win 770 <nop,nop,timestamp 2277379 2277379> ---Fin de la connexion--- 11:03:16.750119 IP 127.0.0.1.38061 > 127.0.0.1.80: F 3129131930:3129131930(0) ack 3121859071 win 770 <nop,nop,timestamp 2277953 2277379> 11:03:16.750204 IP 127.0.0.1.80 > 127.0.0.1.38061: F 3121859071:3121859071(0) ack 3129131931 win 613 <nop,nop,timestamp 2277953 2277953> 11:03:16.750226 IP 127.0.0.1.38061 > 127.0.0.1.80: . ack 3121859072 win 770 <nop,nop,timestamp 2277953 2277953>
Ces mêmes trames, analysées par argus...
# argus -r tcpdump.cap -w tcpdump.argus
...présentent le résultat consolidé suivant :
# ra -r tcpdump.argus 11:03:14.324788 e tcp 127.0.0.1.38061 -> 127.0.0.1.www 22 17122 FIN
Exemple 2
Argus est utilisé dans cet exemple avec les paramètres suivants :
- -A : enregistrement des métriques de bytes
- -B 192.168.100.15 -P 561 : ouverture d'un socket (pour l'accès distant) à l'adresse locale 192.168.100.15 sur le port 561/tcp
- -R : génération des données relatives aux temps de réponses
- -U 256 : limite le volume de données utilisateurs à 256 bytes
- -w /root/argus/capture.argus : enregistre les données dans le fichier /root/argus/capture.argus
- -Z : génération des données relatives aux tailles des paquets
- -i wlan0 : utilisation de l'interface wlan0
- - ip : de filtrer sur les trames IP uniquement
# argus -A -B 192.168.100.15 -P 561 -R -U 256 -w /root/argus/capture.argus -Z -i wlan0 - ip
Nous pouvons vérifier que le démon est lancé :
# ps aux | grep argus root 11355 0.0 0.3 6088 3516 pts/1 S+ 06:25 0:00 argus -A -B 192.168.100.15 -P 561 -R -U 256 -w /root/argus/capture.argus -Z -i wlan0 - ip
Et qu'il a créé un socket sur le port 561/tcp :
# netstat -na | grep 561 tcp 0 0 192.168.100.15:561 0.0.0.0:* LISTEN
Sur un poste distant, il est possible d'utiliser Nmap :
# nmap -sS 192.168.100.15 -p 561 Interesting ports on 192.168.100.15: PORT STATE SERVICE 561/tcp open monitor Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds
Les données collectées sont stockées dans le répertoire /root/argus/ :
# ls -ila /root/argus 416371 -rw-r--r-- 1 root root 29696 2009-09-29 06:29 capture.argus
Maintenant que le démon argus est lancé, il ne nous reste plus qu'à lire les données avec le client ra. Voir ici.