====== Suricata ====== Suricata est un système d'analyse du réseau utilisé sur la machine Snowden. C'est un IDS possédant des fonctions IPS (permet de bloquer le trafic détecté à la manière d'un pare-feu). Il est aussi multithreadé, ce qui lui permet d'utiliser plusieurs coeurs pour la détection des attaques. Il est plus orienté signature, comme Snort (il va comparer des chaines de caractères de sa base de données à celles contenues dans les paquets pour détecter des attaques), alors que Bro est plus orienté comportement réseau (trop de connexions venant de la même personne pourront être interpretées comme une attaque). ===== Utilisation de Suricata ===== Tous les logs générés par Suricata sont stockés au format JSON dans le fichier ''/var/log/suricata/eve.json''. Ils sont ensuite analysés par un [[wiki:monitoring:elk:logstash | Logstash]] et envoyés vers un noeud [[wiki:monitoring:elk:elasticsearch | Elasticsearch ]]. Afin de monitorer suricata, on peut par exemple voir le nombre de paquets droppés en regardant le fichier ''stats.log'' (toujours dans le dossier ''/var/log/suricata'') et en greppant ''kernel'', ce qui donne la commande : ''# tail -f stats.log | grep kernel''. ===== Installation de Suricata ===== On commence par télécharger la dernière version depuis le [[http://suricata-ids.org/ | site officiel]]. Les paquets suivants sont necessaires pour que suricata fonctionne. Pour les installer : # apt-get -y install libpcre3 libpcre3-dbg libpcre3-dev \ build-essential autoconf automake libtool libpcap-dev libnet1-dev \ libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev \ libjansson-dev pkg-config On se rend ensuite dans le dossier décompressé et on tape : ''./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-gccmarch-native --enable-profiling'' Ensuite, on effectue un ''make'' suivi d'un ''make install-full'' (il installera les règles et les fichiers de conf avec). Suricata est maintenant installé et nous devons le configurer. ===== Configuration ===== On ouvre le fichier ''/etc/suricata/suricata.yaml'' (ou ''suricata-minet.yaml'' si on veut garder une version par défaut du fichier de conf). Dans la configuration de eve.json, on décommente les lignes suivantes : payload: yes # enable dumping payload in Base64 payload-printable: yes # enable dumping payload in printable (lossy) format packet: yes # enable dumping of packet (without stream segments) Cela permet d'avoir plus de details dans les logs que l'on récupère, notamment ce qui a été détecté. Puis on commente les lignes suivantes : #- http: # extended: yes # enable this for extended logging information [...] #- dns #- tls: # extended: yes # enable this for extended logging information #- files: # force-magic: no # force logging magic on all logged files # force-md5: no # force logging of md5 checksums [...] #- smtp #- ssh Cela permet de réduire la quantité de logs produite. On doit aussi régler ''unified2-alert'' et ''http-log'' sur **no** : - unified2-alert: enabled: no [...] - http-log: enabled: no Là encore afin de reduire les logs. Ensuite, il faut configurer ''af-packet'', l'utilitaire qui va séparer le flux entre les différentes instances du programme et lui dire d'utiliser l'interface eth1 et 4 threads : af-packet: - interface: eth1 threads: 4 On retire toutes ces lignes : - interface: eth1 threads: auto cluster-id: 98 cluster-type: cluster_flow defrag: yes # buffer-size: 32768 # disable-promisc: no # Put default values here On commente également ces lignes pour désactiver netmap : #netmap: # - interface: eth2 [...] # threads: auto [...] # - interface: default Ensuite, il faut régler le **memcap** pour le flux et le stream comme suit : flow: memcap: 512mb [...] stream: memcap: 512mb On désactive le pcap en commentant : #pcap: # - interface: eth0 [...] # - interface: default Réglons le réseau interne comme suit : ''HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,157.159.40.0/21,157.159.47.0/23]"'' On desactive **modbus**, parce que le scada n'est pas trop notre truc à MiNET : modbus: # How many unreplied Modbus requests are considered a flood. # If the limit is reached, app-layer-event:modbus.flooded; will match. #request-flood: 500 enabled: no Enfin, on modifie le fichier ''/etc/default/suricata'' pour qu'il ressemble à celui-là (n'oubliez pas de spécifier le bon fichier de conf) : # Default config for Suricata # set to yes to start the server in the init.d script RUN=yes # Configuration file to load SURCONF=/etc/suricata/suricata-minet.yaml # Listen mode: pcap, nfqueue or af-packet # depending on this value, only one of the two following options # will be used (af-packet uses neither). # Please note that IPS mode is only available when using nfqueue LISTENMODE=af-packet # Interface to listen on (for pcap mode) IFACE=eth1 # Queue number to listen on (for nfqueue mode) NFQUEUE=0 # Load Google TCMALLOC if libtcmalloc-minimal0 is installed # This _might_ give you very very small performance gain.... TCMALLOC="NO" # Pid file PIDFILE=/var/run/suricata.pid ===== Gestion des règles ===== Passons maintenant à la sélection des règles. Les règles séléctionnées actuellement sont les suivantes : # - botcc.rules # - ciarmy.rules # - compromised.rules - drop.rules - dshield.rules # - emerging-activex.rules # - emerging-attack_response.rules # - emerging-chat.rules - emerging-current_events.rules # - emerging-dns.rules - emerging-dos.rules - emerging-exploit.rules # - emerging-ftp.rules - emerging-games.rules # - emerging-icmp_info.rules # - emerging-icmp.rules # - emerging-imap.rules # - emerging-inappropriate.rules - emerging-malware.rules - emerging-misc.rules - emerging-mobile_malware.rules # - emerging-netbios.rules - emerging-p2p.rules # - emerging-policy.rules # - emerging-pop3.rules # - emerging-rpc.rules # - emerging-scada.rules - emerging-scan.rules # - emerging-shellcode.rules # - emerging-smtp.rules # - emerging-snmp.rules - emerging-sql.rules # - emerging-telnet.rules # - emerging-tftp.rules - emerging-trojan.rules - emerging-user_agents.rules # - emerging-voip.rules # - emerging-web_client.rules # - emerging-web_server.rules # - emerging-web_specific_apps.rules # - emerging-worm.rules - tor.rules # - decoder-events.rules # available in suricata sources under rules dir # - stream-events.rules # available in suricata sources under rules dir # - http-events.rules # available in suricata sources under rules dir # - smtp-events.rules # available in suricata sources under rules dir # - dns-events.rules # available in suricata sources under rules dir # - tls-events.rules # available in suricata sources under rules dir #- modbus-events.rules # available in suricata sources under rules dir #- app-layer-events.rules # available in suricata sources under rules dir Nous gérons les règles avec **oinkmaster** qui met à jour les règles. Pour l'installer : # apt-get install oinkmaster On modifie le fichier de conf ''/etc/oinkmaster.conf'' pour ajouter la ligne : url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz On crée également le dossier ''/etc/suricata/rules'' puis : # oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules On change les lignes suivantes dans le fichier ''/etc/suricata/suricata.yaml'' afin qu'elles prennent en compte les nouvelles règles : classification-file: /etc/suricata/rules/classification.config reference-config-file: /etc/suricata/rules/reference.config Pour mettre à jour les règles, nous pouvons utiliser ''oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules''. Afin que cela se fasse à un rythme regulier, la crontab se présente comme suit : 0 0 * * * /usr/sbin/oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules 5 0 * * * /etc/init.d/suricata restart