Product SiteDocumentation Site

14.3. Supervisió: Prevenció, detecció, dissuassió

La monitorització forma part integral de qualsevol política de seguretat per diverses raons. Entre elles, que l'objectiu de la seguretat no es limita normalment a garantir la confidencialitat de les dades, sinó que també inclou garantir la disponibilitat dels serveis. Per tant, és imperatiu comprovar que tot funciona com s'espera, i detectar de manera oportuna qualsevol comportament desviat o canvis en la qualitat dels serveis prestats. L'activitat de seguiment pot ajudar a detectar intents d'intrusió i permetre una reacció ràpida abans que causin greus conseqüències. Aquesta secció revisa algunes eines que es poden utilitzar per supervisar diversos aspectes d'un sistema Debian. Com a tal, això completa Secció 12.4, «Monitorització».

14.3.1. Monitoritzar els registres amb logcheck

El programa logcheck monitoritza els fitxers de registre, per defecte, cada hora. Envia missatges de registre inusuals en correus electrònics a l'administrador per a una anàlisi posterior.
La llista de fitxers monitoritzats s'emmagatzema a /etc/logcheck/logcheck.logfiles; els valors per defecte funcionen bé si el fitxer /etc/rsyslog.conf no s'ha modificat excessivament.
logcheck pot treballar en un dels tres modes més o menys detallats: paranoid, server i workstation. El primer és molt detallat, i probablement hauria de ser restringit a servidors específics com ara tallafocs. El segon mode (per defecte) es recomana per a la majoria de servidors. L'últim està dissenyat per a estacions de treball, i és fins i tot concís (filtra més missatges).
En els tres casos, logcheck probablement s'hauria de personalitzar per excloure alguns missatges addicionals (depenent dels serveis instal·lats), llevat que l'administrador realment desitgi rebre cada hora correus llargs i poc interessants. Atès que el mecanisme de selecció de missatges és bastant complex, /usr/share/doc/logcheck-database/README.logcheck-database.gz és una lectura requerida, i difícil.
Les regles aplicades es poden dividir en diversos tipus:
  • aquells que qualifiquen un missatge com un intent d'intrusió (desats en un fitxer al directori /etc/logcheck/cracking.d/);
  • els que cancel·len aquesta qualificació (/etc/logcheck/cracking.ignore.d/);
  • aquells que classifiquen un missatge com a alerta de seguretat (/etc/logcheck/violations.d/);
  • els que cancel·len aquesta classificació (/etc/logcheck/violations.ignore.d/);
  • Finalment, els que s'apliquen als missatges restants (considerats com esdeveniments del sistema).
Un esdeveniment del sistema sempre s'indica llevat que una regla en una dels directoris /etc/logcheck/ignore.d.{paranoid,server,workstation}/ determinia que l'esdeveniment s'ha d'ignorar. Per descomptat, els únics directoris que es tenen en compte són els que corresponen a nivells de detall iguals o superiors al mode d'operació seleccionat.

14.3.2. Monitorització de l'activitat

14.3.2.1. En temps real

top és una eina interactiva que mostra una llista de processos actualment en execució. L'ordenació per defecte es basa en la quantitat actual d'ús del processador i es pot obtenir amb la tecla P. Altres ordres d'ordenació inclouen una ordeació per memòria ocupada (teclaM), per temps total de processador (tecla T) i per identificador de procés (tecla N). La tecla k permet matar un procés introduint el seu identificador de procés. La tecla r permet «renicing» un procés, és a dir, canviar la seva prioritat.
Quan el sistema sembla estar sobrecarregat, top és una gran eina per veure quins processos competeixen pel temps del processador o consumeixen massa memòria. En particular, sovint és interessant comprovar si els processos que consumeixen recursos coincideixen amb els serveis reals que se sap que la màquina allotja. Un procés desconegut que s'executa com a usuari de www-data s'hauria de destacar i ser investigat, ja que és probablement una instància de programari instal·lat i executat en el sistema a través d'una vulnerabilitat en una aplicació web.
top és una eina molt flexible i la seva pàgina manual proporciona detalls sobre com personalitzar la seva pantalla i adaptar-la a les necessitats i hàbits personals.
L'eina gràfica gnome-system-monitor és similar a top i proporciona aproximadament les mateixes característiques.

14.3.2.2. Historial

La càrrega del processador, el trànsit de xarxa i l'espai de disc lliure són informació que varien constantment. Mantenir un historial de la seva evolució és sovint útil per determinar exactament com s'utilitza l'ordinador.
Hi ha moltes eines dedicades a aquesta tasca. La majoria poden obtenir dades a través de SNMP («Simple Network Management Protocol» o “protocol simple de gestió de xarxa”) per centralitzar aquesta informació. Un benefici afegit és que això permet obtenir dades d'elements de xarxa que poden no ser ordinadors de propòsit general, com ara encaminadors de xarxa dedicats o commutadors.
Aquest llibre tracta de Munin amb un cert detall (vegeu Secció 12.4.1, «Configuració de Munin») com a part de Capítol 12: «Administració avançada». Debian també proporciona una eina similar, cacti. El seu desplegament és lleugerament més complex, ja que es basa únicament en SNMP. Tot i tenir una interfície web, agafar els conceptes implicats en la configuració encara requereix cert esforç. Llegir la documentació HTML (/usr/share/doc/cacti/html/Table-of-Contents.html) s'ha de considerar un requisit previ.

14.3.3. Evitar les intrusions

Attackers try to get access to servers by guessing passwords, which is why strong passwords must always be used. Even then, you should also establish measures against brute-force attacks. A brute-force attack is an attempt to log into an unauthorized software system by performing multiple login attempts in a short period of time.
The best way to stop a brute-force attack is to limit the number of login attempts coming from the same origin, usually by temporarily banning an IP address.
Fail2Ban is an intrusion prevention software suite that can be configured to monitor any service that writes login attempts to a log file. It can be found in the package fail2ban.
Fail2Ban is configured through a simple protocol by fail2ban-client, which also reads configuration files and issues corresponding configuration commands to the server, fail2ban-server. It has four configuration file types, all stored in /etc/fail2ban/:
  • fail2ban.conf. Configuració global (com ara el registre).
  • filter.d/*.conf. Filtres que especifiquen com detectar errors d'autenticació. El paquet Debian ja conté filtres per a molts programes habituals.
  • action.d/*.conf. Actions defining the commands for banning and “unbanning“ of IP addresses.
  • jail.conf. És on es defineixen «jails» o “presons”, les combinacions de filtres i accions.
Si es fa un cop d'ull a la configuració d'sshd a /etc/fail2ban/jail.conf es pot entendre millor com funciona Fail2Ban...
[...]
[DEFAULT]
[...]
bantime   = 10m
[...]
findtime  = 10m
[...]
maxretry  = 5
[...]
[sshd]
port     = ssh
logpath  = %(sshd_log)s
backend  = %(sshd_backend)s
Fail2Ban will check for failed login attempts for sshd using Python regular expressions defined in /etc/fail2ban/filter.d/sshd.conf against the log file of sshd, which is defined in the variable sshd_log in the file /etc/fail2ban/paths-common.conf. If Fail2Ban detects five failed login attempts within 10 minutes, it will ban the IP address where those attempts originated for 10 minutes.
To enable, disable, or configure “jails“, the main configuration file /etc/fail2ban/jail.conf is not supposed to be altered. Instead this is supposed to be done in /etc/fail2ban/jail.d/defaults-debian.conf or files within the same directory.
Fail2Ban és una forma molt senzilla i eficaç de protegir-se contra els atacs de força bruta més comuns, però no pot protegir contra atacs de força bruta distribuïda, que és quan un atacant utilitza un gran nombre de màquines escampades per Internet.
Una bona manera de proporcionar protecció addicional contra els atacs de força bruta distribuïda és augmentar artificialment el temps d'inici de sessió després de cada intent fallit.

14.3.4. Detecció de canvis

Una vegada que el sistema està instal·lat i configurat, i exceptuant les actualitzacions de seguretat, no hi ha cap raó perquè la majoria dels fitxers i directoris evolucionin, tret de les dades. Per tant, és interessant assegurar-se que els arxius no canvien realment: d'aquesta manera valdria la pena investigar qualsevol canvi inesperat. Aquesta secció presenta algunes eines que poden usar per monitoritzar els fitxers i advertir a l'administrador quan es produeix un canvi inesperat (o simplement per llistar aquests canvis).

14.3.4.1. Auditar els paquets amb dpkg --verify

dpkg --verify (o dpkg -V) és una eina interessant ja que permet trobar els fitxers instal·lats que han estat modificats (potencialment per un atacant), però això s'ha de prendre amb precaució. Per fer la tasca es basa en les sumes de verificació emmagatzemades a la base de dades del dpkg que s'emmagatzema al disc dur (es poden trobar a /var/lib/dpkg/info/paquet.md5sums); un atacant minuciós actualitzarà aquests fitxers de manera que continguin les sumes de verificació noves per als fitxers subvertits.
En executar dpkg -V es verificaran tots els paquets instal·lats i s'imprimirà una línia per a cada fitxer que no passi el test. El format de sortida és el mateix que el de rpm -V on cada caràcter denota una prova en algunes metadades específiques. Malauradament dpkg no emmagatzema les metadades necessàries per a la majoria de les proves i per tant mostrarà interrogants en elles. Actualment només la prova de suma de verificació pot produir un "5" al tercer caràcter (quan falla).
# dpkg -V
??5??????   /lib/systemd/system/ssh.service
??5?????? c /etc/libvirt/qemu/networks/default.xml
??5?????? c /etc/lvm/lvm.conf
??5?????? c /etc/salt/roster
In the sample above, dpkg reports a change to SSH's service file that the administrator made to the packaged file instead of using an appropriate /etc/systemd/system/ssh.service.d/override.conf override (which would be stored below /etc like any configuration change should be). It also lists multiple configuration files (identified by the "c" letter on the second field) that had been legitimately modified.

14.3.4.2. Auditoria de paquets: debsums i les seves limitacions

debsums is the ancestor of dpkg -V and is thus mostly obsolete. It suffers from the same limitations than dpkg. Fortunately, some of the limitations can be worked-around (whereas dpkg does not offer similar workarounds).
Com que les dades del disc no són confiables, debsums ofereix fer les seves comprovacions basades en fitxers .deb en lloc de confiar en la base de dades del dpkg. Per descarregar fitxers .deb de confiança per tots els paquets instal·lats, podem confiar en les descàrregues autenticades d'APT. Aquesta operació pot ser lenta i tediosa, i per tant no ha de considerar-se una tècnica proactiva per ser utilitzada de manera regular.
# apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`
[ ... ]
# debsums -p /var/cache/apt/archives --generate=all
Tingueu en compte que aquest exemple utilitza l'ordre grep-status del paquet dctrl-tools, que no està instal·lat per defecte.
debsums can be run frequently as a cronjob setting CRON_CHECK in /etc/default/debsums. To ignore certain files outside the /etc directory, which have been altered on purpose or which are expected to change (like /usr/share/misc/pci.ids) you can add them to /etc/debsums-ignore.

14.3.4.3. Monitorització de fitxers: AIDE

L'eina AIDE («Advanced Intrusion Detection Environment» o “entorn avançat de detecció d'intrusions”) permet comprovar la integritat de l'arxiu i detectar qualsevol canvi contra una imatge prèviament registrada del sistema vàlid. Aquesta imatge s'emmagatzema com a base de dades (/var/lib/aide/aide.db) que conté la informació rellevant sobre tots els fitxers del sistema (empremtes, permisos, marques temporals, etc.). Aquesta base de dades s'inicia per primera vegada amb aideinit; després s'utilitza diàriament (per l'script /etc/cron.daily/aide) per comprovar que res rellevant no ha canviat. Quan es detecten canvis, l'AIDE els registra en els arxius de registre (/var/log/aide/*.log) i envia els seus descobriments a l'administrador per correu electrònic.
Moltes opcions a /etc/default/aide es poden utilitzar per ajustar el comportament del paquet aide. La configuració adequada de l'AIDE s'emmagatzema a /etc/aide/aide.conf i /etc/aide/aide.conf.d/ (realment, aquests fitxers només s'utilitzen per update-aide.conf per generar /var/lib/aide/aide.conf.autogenerated). La configuració indica quines propietats dels fitxers s'han de comprovar. Per exemple, el contingut dels arxius de registre canvia de manera rutinària, així aquests canvis es poden ignorar sempre que els permisos d'aquests fitxers romanguin iguals, però tant el contingut com els permisos dels programes executables han de ser constants. Encara que no és molt complexa, la sintaxi de configuració no és completament intuïtiva, i per tant es recomana llegir la pàgina del manual aide.conf(5).
Una nova versió de la base de dades es genera diàriament a /var/lib/aide/aide.db.new; si tots els canvis registrats fossin legítims, es pot utilitzar per reemplaçar la base de dades de referència.

14.3.5. Detecció d'intrusions (IDS/NIDS)

suricata (in the Debian package of the same name) is an NIDS — a Network Intrusion Detection System. Its function is to listen to the network and try to detect infiltration attempts and/or hostile acts (including denial of service attacks). All these events are logged in multiple files in /var/log/suricata. There are third party tools (Kibana/logstash) to better browse all the data collected.
Configuring suricata involves reviewing and editing /etc/suricata/suricata.yaml, which is very long because each parameter is abundantly commented. A minimal configuration requires describing the range of addresses that the local network covers (HOME_NET parameter). In practice, this means the set of all potential attack targets. But getting the most of it requires reading it in full and adapting it to the local situation.
On top of this, you should also edit it to define the network interface. You might also want to set LISTENMODE=pcap because the default LISTENMODE=nfqueue requires further configuration to work properly (the netfilter firewall must be configured to pass packets to some user-space queue handled by suricata via the NFQUEUE target).
Per detectar un comportament maliciós, suricata necessita un conjunt de regles de seguiment: es poden trobar aquestes regles al paquet snort-rules-default. snort és la referència històrica a l'ecosistema IDS i suricata és capaç de reutilitzar les regles escrites per a ell.
Alternatively, oinkmaster (in the package of the same name) can be used to download Snort rule sets from external sources.