Argus:Argus

From aldeid
Jump to navigation Jump to search

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 :

INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
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" -
    1. ARGUS_MIN_SSF=40
    2. ARGUS_MAX_SSF=128
-
#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.