====== Bro ====== Toutes les informations données ici sont extraites du [[https://www.bro.org/sphinx/install/index.html|site de Bro]]. ===== Installation ===== Il faut tout d’abord résoudre les problèmes de dépendance On utilise ''apt-get'' pour installer les paquets manquants : # apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev libmagic-dev Dans notre cas, nous avons aussi intégré **LibGeoIP**, qui permet de savoir directement d’ou viennent les IP référencées, **curl** et **gawk** qui permettent d'envoyer les résultats à un noeud Elasticsearch permettant d’indexer les résultats et de les manipuler bien plus facilement et rapidement. Ensuite, il suffit de récupérer la dernière version de Bro, comme vous le souhaitez (version [[http://www.bro.org/downloads/release/bro-2.2.tar.gz|stable]] ou version [[http://www.bro.org/|gitée]]. Pour installer Bro, il nous faut une dernière chose : **PF_RING**. En effet, les IDS utilisent beaucoup de CPU, et lorsque le cœur monte à 100%, il perd tous les paquets qui arrivent en plus. D'où l'utilité de PF_RING qui permet de diviser le trafic afin de le faire analyser par plusieurs instances de bro, ce qui permet d’utiliser tous les cœurs de la machine et donc d'éviter les pertes. Il faut donc l’installer et dans l’installation de Bro, rajouter à la ligne ''./configure'', l’option ''---with-pcap='' (par défaut c’est /usr/local/pfring). ===== Configuration ===== Une fois l’installation de Bro terminée, il faut modifier le fichier ''/usr/local/bro/etc/node.cfg'' afin d’obtenir quelque chose dans ce style : # Example BroControl node configuration. # # This example has a standalone node ready to go except for possibly changing # the sniffing interface. # This is a complete standalone configuration. Most likely you will # only need to change the interface. #[bro] #type=standalone #host=localhost #interface=eth1 ## Below is an example clustered configuration. If you use this, ## remove the [bro] node above. [manager] type=manager host=localhost [proxy-0] type=proxy host=localhost [worker-0] type=worker host=localhost interface=eth1 lb_method=pf_ring lb_procs=4 Cela permet ici par exemple d’utiliser 6 cœurs (4 process de traitement, 1 de management et 1 de proxy). Ensuite pour connaître le taux de perte de paquets par Bro, on modifie le fichier ''/usr/local/bro/share/bro/sites''. On ajoute à la fin de ce fichier la ligne ''@load misc/capture-loss''. Les valeurs de pertes sont alors stockées dans ''/usr/local/bro/logs/*/capture_loss.log''. Si on ne fait rien, on se rend vite compte que les pertes sont assez importantes (environ 60%), ce qui n’est bien sûr pas acceptable. En fait, cela vient du fait que c’est la carte réseau qui, par défaut, compte le nombre de trames et vérifie qu’elles sont complètes. C’est ce qu’on appelle le **offloading**, dont la description se trouve [[http://wiki.wireshark.org/CaptureSetup/Offloading|ici]]. Il faut donc faire repasser cette fonction sur le processeur pour avoir des taux de pertes corrects. La commande à rentrer est la suivante : ''ethtool --offload eth1 rx off tx off''. Pour finir, afin de contrôler Bro, nous utilisons Broctl. Avant d'utiliser un nouveau script, il faut toujours penser à faire un ''broctl check'', vérifier que tout va bien puis faire un ''broctl install'' et un ''broctl restart''.