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

Els atacants tracten d'obtenir accés als servidors mitjançant l'endevinació de les contrasenyes, és per això que sempre s'han d'utilitzar contrasenyes fortes. Fins i tot així, també haurien d'establir-se mesures contra els atacs de força bruta. Un atac de força bruta és un intent d'iniciar sessió en un sistema no autoritzat mitjançant la realització de múltiples intents d'inici de sessió en un període curt de temps.
La millor manera d'aturar un atac de força bruta és limitar el nombre d'intents d'entrada procedents del mateix origen, generalment prohibint temporalment una adreça IP.
Fail2Ban és un paquet de programari de prevenció d'intrusions que es pot configurar per monitoritzar qualsevol servei que desi els intents d'inici de sessió en un fitxer de registre. Es pot trobar al paquet fail2ban.
Fail2Ban està configurat a través d'un protocol simple per fail2ban-client, que també llegeix els fitxers de configuració i emet les ordres de configuració corresponents al servidor, fall2ban-server. Té quatre tipus de fitxers de configuració, tots emmagatzemats en /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. Accions que defineixen les ordres per prohibir o permetre les adreces IP.
  • 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 comprovarà si hi ha inicis de sessió fallits per sshd utilitzant expressions regulars de Python definides a /etc/fail2ban/filter.d/sshd.conf contra el fitxer de registre d'sshd, que es defineix a la variable sshd_log al fitxer /etc/fail2ban/paths-common.conf. Si Fail2Ban detecta cinc intents fallits d'inici de sessió en deu minuts, prohibirà durant deu minuts l'adreça IP des d'on s'han originat aquests intents.
Per activar, desactivar o configurar «jails» (“presons”), se suposa que el fitxer de configuració principal /etc/fail2ban/jail.conf no s'ha de modificar. En lloc d'això, se suposa que s'ha de fer a /etc/fail2ban/jail.d/defaults-debian.conf o en fitxers dins del mateix directori.
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
En la mostra anterior, dpkg informa d'un canvi al fitxer de servei d'SSH que l'administrador va fer al fitxer empaquetat en lloc d'utilitzar el corresponent «override» o “reemplaçament” /etc/systemd/system/ssh.service.d/override.conf (que s'emmagatzemaria per sota de /etc com qualsevol canvi de configuració). També llista diversos fitxers de configuració (identificats per la lletra "c" en el segon camp) que havien estat modificats legítimament.

14.3.4.2. Auditoria de paquets: debsums i les seves limitacions

debsums és l'avantpassat de dpkg -V i per tant és majoritàriament obsolet. Pateix de les mateixes limitacions que el dpkg. Afortunadament, algunes de les limitacions es poden esquivar (mentre que dpkg no ofereix alternatives similars).
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 es pot executar periòdicament com una tasca cron CRON_CHECK a /etc/default/debsums. Per ignorar certs fitxers fora del directori /etc que es puguin haver alterat expressament o que s'espera que canviïn (com /usr/share/misc/pci.ids) es poden afegir a /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 (al paquet Debian del mateix nom) és un NIDS — un «Network Intrusion Detection System» o “sistema de detecció d'intrusions per xarxa”. La seva funció és escoltar la xarxa i intentar detectar intents d'infiltració i/o actes hostils (incloent-hi atacs de denegació de servei). Tots aquests esdeveniments estan connectats en múltiples fitxers a /var/log/suricata. Hi ha eines de tercers (Kibana/logstash) per navegar millor per totes les dades recollides.
La configuració de suricata implica revisar i editar /etc/suricata/suricata.yaml, que és molt llarg perquè cada paràmetre està molt comentat. Una configuració mínima requereix descriure l'interval d'adreces que cobreix la xarxa local (paràmetreHOME_NET). A la pràctica, això significa el conjunt de tots els possibles objectius d'atac. Però per treur'n tot el profit requereix llegir-lo íntegrament i adaptar-lo a la situació local.
A més d'això, també s'hauria d'editar per la «interface» (o “interfície”) de xarxa. També és possible que vulgueu establir LISTENMODE=pcap perquè el valor predeterminat LISTENMODE=nfqueue requereix una configuració addicional per funcionar correctament (el tallafocs netfilter s'ha de configurar per passar paquets a una cua d'espai d'usuari gestionada per suricata a través de l'objectiu NFQUEUE).
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.
Alternativament, oinkmaster (al paquet del mateix nom) es pot utilitzar per descarregar conjunts de regles Snort de fonts externes.