Bloqueando ransomware con samba y fail2ban

Imagen de vfmBOFH

El método utilizado es simple, pero efectivo: Auditamos las acciones de los usuarios y las guardamos en log. Fail2ban se encarga de revisar el log, y si algún usuario ha escrito ficheros con el nombre/extensiones de la lista, lo bloquea. No es un método "instantáneo", ni tampoco protege para los ransom que usan extensiones aleatorias (o no usan extensiones), pero algo es algo. Empecemos por montar la auditoría:

En el smb.conf, para cada unidad que queramos auditar, aplicamos la siguiente configuración:

# Recurso de acceso R/W  publico
[publico]
        comment = Directorio compartido
        path = /ruta/al/share/publico
        vfs objects = full_audit
        full_audit: failure = none
        full_audit: success = pwrite write rename
        full_audit: prefix = IP = %I | USER = %u  | MACHINE = %m | VOLUME = %S
        full_audit: facility = local7
        full_audit: priority = NOTICE
        valid users = @winusers
        read only = No
        create mask = 0664
        directory mask = 0775
        force group = winusers
        force directory mode = 0775
        wide links = Yes

En concreto y por orden, qué operaciones se van a registrar en caso de que fallen (failure), las que se registrarán en caso de realizarse correctamente (success, pwrite -subida-, write -escritura-, rename -renombrado-), La cadena que se escribirá en el log (prefix: detallamos la ip, el usuario, la máquina y el volumen), el “facility” (local7, /var/log/syslog) y su prioridad. El resto del snip, vemos que son configuraciones bastante normales de un share samba.

Bien. Con estas directivas de auditoría, y una vez reiniciado samba, cada vez que un usuario que tenga mapeada la unidad de red \\servidor\publico escriba, suba ficheros o renombre los mismos, dejará una traza en el log similar a ésta:

Apr 21 21:02:50 srv1 smbd[31353]: IP = 192.168.1.35 | USER = fulano | MACHINE = pote | VOLUME = publico|pwrite|ok|ruta/al/archivo/archivo.extension

Y ya tenemos la traza de log que fail2ban examinará.

Para ello, una vez instalado creamos un fichero de filtro en /etc/fail2ban/filter.d/. Llamémosle samba.conf:

[Definition]
failregex = smbd.*\:\ IP\ =\ \ \|.*\.0x0$
            smbd.*\:\ IP\ =\ \ \|.*\.1999$
            smbd.*\:\ IP\ =\ \ \|.*\.*obleep$
            smbd.*\:\ IP\ =\ \ \|.*\.LOL!$
            smbd.*\:\ IP\ =\ \ \|.*\.aaa$
            smbd.*\:\ IP\ =\ \ \|.*\.abc$
            smbd.*\:\ IP\ =\ \ \|.*\.bleep$
            smbd.*\:\ IP\ =\ \ \|.*\.ccc$
[...]
ignoreregex =

Esto es un fragmento recortado, pero se deja entender bastante. Básicamente es una compilación de extensiones conocidas de archivos cifrados por los ransom más populares.

Bueno, hora de añadir nuestro filter al final de /etc/fail2ban/jail.conf:

[samba]
filter = samba
enabled = true
action = iptables-multiport[name=samba, port="135,139,445,137,138", protocol=tcp]
         mail[name=samba, dest=vfmbofh@mi.correo.no.te.dire]
logpath = /var/log/syslog
maxretry = 1
findtime = 600
bantime = 86400

Baneamos 24 horas al primer intento, y enviamos un correo avisando del tema (que no hará falta, porque el infeliz que esté infectado vendrá a darte la brasa porque no puede escribir en el share). El findtime, lo dejamos cuadrado con el que haya por default en la instalación.

Bueno. Hasta aquí la fusilada de mi blog.

Como puede verse, no es muy complicado de implementar, pero es un maldito peñazo mantener actualizada la lista de extensiones a vigilar. Así que husmeando por ahí, me he encontrado con esta web, que mantiene una base de datos de extensiones / nombres de archivo descargable libremente.

El tema es que la base de datos ésta, se baja en formato json, hay que parsearla y tal (yo uso jq, sed y tal).

Pero si tienes una base de datos consultable vía web puedes automatizar todo el mondongo.

Yo he montado un scriptillo bastante guarro que hace el trabajo. Lo pones en un cron para ejecutarse una vez al día y tira millas:

#!/bin/bash
#Licencia HLQTSDLH
#Definiciones estáticas. Cambiar en función de la anotación que hace samba en el log.
REGLAFICHERO='smbd.*\:\ IP\ =<HOST>\ \|'
REGLAEXTENSION='smbd.*\:\ IP\ =<HOST>\ \|.'
ULTIMALINEA="ignoreregex ="
############################################
ACTUAL=`date +"%Y%m%d"`
FICHERO=`curl --silent https://fsrm.experiant.ca/api/v1/combined |jq '.lastUpdated | {date}'|grep date |cut -d ' ' -f 4|sed 's/"//g'|sed 's/-//g'`
if [ $ACTUAL -gt $FICHERO ]
then
        logger "Comprobación de fichero de reglas samba f2ban ok."
        exit 0
else
        #al lío
        #recuperamos archivo de extensiones
        curl --silent https://fsrm.experiant.ca/api/v1/combined |jq '.filters'|sed 's/"//g'|sed 's/ //g'|sed 's/,//g'|sed 's/]//g'|sed "s/\[//g"|sed '/^\s*$/d' > /tmp/filters.tmp
        #generamos fichero de archivos
        cat /tmp/filters.tmp |grep -v ^* > /tmp/archivos.filter
        #generamos fichero de extensiones
        cat /tmp/filters.tmp |grep ^* > /tmp/extensiones.filter
        ####Reglas
#Hack primera línea del archivo
PRIMERALINEA=`head -n 1 /tmp/extensiones.filter|sed 's/\./\\\\./g'|sed 's/\\$/\\\\$/g'`
cat > /tmp/reglas.regla  <<EOF
[Definition]
failregex = $REGLAEXTENSION$PRIMERALINEA$
EOF
#Fin hack
        #extensiones
        sed 1d /tmp/extensiones.filter | while read LINEA #primera línea fuera, ya la hemos montado
        do
                PARSELINEA=`echo $LINEA|sed 's/\./\\\\./g'|sed 's/\\$/\\\\$/g'`
                echo -e "$REGLAEXTENSION$PARSELINEA\$" >> /tmp/reglas.regla
        done
        #archivos
        while read LINEA
        do
                PARSELINEA=`echo $LINEA|sed 's/\./\\\\./g'|sed 's/\\$/\\\\$/g'`
                echo -e "$REGLAEXTENSION$REGLA$PARSELINEA\$" >> /tmp/reglas.regla
        done < /tmp/archivos.filter
        #fin de archivo
        echo $ULTIMALINEA >> /tmp/reglas.regla
fi
mv /tmp/reglas.regla /etc/fail2ban/filter.d/samba.conf
/etc/init.d/fail2ban restart >/dev/null 2>&1
logger "Fichero de reglas samba f2ban actualizado"

Como es habitual en mí, falta control de errores y mil puñetas más. Pero hace el trabajo.

:wq!

1 comentario

18
Ene

moncler jackets
canada goose
coach factory outlet
christian louboutin outlet
ugg boots
canada goose jackets uk
yeezy 350 boost
uggs outlet
ray ban sunglasses discount
coach factorty outlet
michael kors outlet
michael kors outlet
pandora charms
michael kors outlet online
canada goose outlet
moncler jackets
coach factory outlet online
canada goose sale
kate spade
polo outlet
coach outlet
hermens bags
pandora jewelry
canada goose outlet
ugg boots
moncler outlet
nike zoom
moncler jackets outlet
the north face
longchamp outlet
coach factory outlet
timberland outlet
coach factory outlet
ralph lauren outlet
michael kors outlet
cheap uggs
adidas yeezy
north face jackets
canada goose outlet
coach outlet online
louis vuitton outlet
cheap ray ban sunglasses
ralph lauren outlet
mulberry uk
cheap ugg boots
nike shoes
hermes handbags
ugg outlet
oakley sunglasses
ugg shoes
ugg outlet store
coach outlet
fitflops sale clearance
jordan retro 11
adidas nmd
moncler outlet
burberry
cheap nfl jerseys
pandora jewelry
pandora jewelry
nike outlet
air max 97
ugg boots
michael kors canada
canada goose jackets
coach factory outlet
christian louboutin outlet
birkenstocks
ugg boots
ralph lauren uk
coach handbags
ugg outlet
nike outlet
north face outlet online
michael kors outlet
coach outlet online
oakley sunglasses
michael kors outlet
burberry outlet store
ugg shoes
coach factorty outlet
moncler outlet
coach canada
coach factory outlet online
cheap jordans for sale
pandora outlet
air max 2018
ralph lauren outlet
ugg boots
nike shoes
ugg ustralia
michael kors outlet store
air jordan shoes
cheap ray bans
nike outlet store
michael kors outlet
ralph lauren sale clearance
michael kors handbags
harden vol 1
uggs outlet
michael kors outlet clearance
nike outlet online
timberland boots
ugg boots
fitflops
coach outlet
kate spade
adidas yeezy boost
pandora charms uk
coach factory outlet
ralph lauren outlet
nike outlet store
yeezy boost
uggs clearance
supreme clothing
michael kors outlet
cheap mlb jerseys china
coach canada
cheap mlb jerseys
nike store
ugg boots canada
pandora charms sale clearance
canada goose
pandora jewelry outlet
nike air max
adidas superstar
cheap uggs
uggs
yeezy boost
ugg outlet
nike shoes
ultra boost
adidas nmd
coach outlet
supreme clothing
moncler outlet
north face outlet
ugg boots
coach outlet
michael kors outlet clearance
canada goose jackets
fitflops
mbt shoes
oakley sunglasses
jordan retro
oakley sunglasses
coach outlet
canada goose
ray ban sunglasses
moncler jackets
pandora
cheap jordans
ferragamo shoes
adidas yeezy
moncler uk
adidas outlet
moncler outlet
north face jackets
adidas nmd
ugg outlet
canadian goose
nmd shoes
coach outlet store
canada goose outlet
michael kors outlet
ralph lauren outlet
adidas nmd
cat boots
air jordan shoes
canada goose
red bottom shoes
canada goose outlet
ralph lauren
louis vuitton
michael kors outlet clearance
polo ralph lauren outlet online
burberry outlet
polo ralph lauren outlet
mbt
air jordans
ugg outlet
canada goose clothing
ralph lauren outlet
coach outlet
yeezy boost
ray ban sunglasses
pandora charms
canada goose outlet
uggs canada
canada goose jackets
kate spade outlet store
cheap nfl jerseys
ralph lauren outlet
canada goose outlet
pandora charms sale clearance
michael kors handbags
hermes handbags
canada goose coats
canada goose uk
canada goose
north face jackets
pandora charms
longchamp uk
cheap jordans
uggs
hermes bags
coach factory outlet
canada goose uk
cheap jordans
ralph lauren outlet
michael kors outlet
salvatore ferragamo shoes
oakley sunglasses
uggs
kate spade outlet store
supreme clothing
ugg outlet
coach outlet
doudoune moncler
ralph lauren
longchamp outlet
columbia sportswear
coach outlet
pandora jewelry
canada goose uk
coach factory outlet
burberry outlet
cheap uggs
christian louboutin
canada goose outlet
ralph lauren outlet
ugg boots
nike shoes for men
ugg outlet
coach outlet store online clearances
pandora charms
canada goose outlet
ugg boots on sale
michael kors outlet
ugg boots for women
ralph lauren outlet
moncler jackets
nfl jerseys wholesale
canada goose outlet
coach outlet
mbt shoes
kate spade outlet
coach factory outlet
oakley sunglasses
cheap jordans
ugg boots
jordan shoes
pandora outlet
pandora charms sale clearance
coach factory outlet
timberland boots
pandora store
canada goose uk
coach outlet
canada goose sale
fred perry polo
air max 97
coach outlet store
polo ralph lauren
michael kors outlet
coach outlet
burberry outlet
yeezy boost
discount oakley sunglasses
pandora charms
canada goose outlet
adidas shoes
uggs canada
michael kors outlet
adidas outlet
coach outlet store
ugg outlet
canada goose sale
ugg outlet
moncler jackets
oakley sunglasses sale
coach factory outlet
pandora charms sale
kate spade handbags
louis vuitton outlet store
canada goose jackets
valentino shoes outlet
adidas yeezy boost
christian louboutin outlet
polo ralph lauren outlet online
polo ralph lauren outlet
burberry sale
kate spade outlet
canada goose outlet
pandora charms sale
coach outlet store
michael kors outlet clearance
adidas shoes
nmd adidas
pandora outlet
coach outlet
adidas yeezy
coach outlet store
mulberry handbags
michael kors
kate spade bags
cheap jordans
moncler coats
hermes birkin
jordans
kate spade outlet
michael kors outlet
coach outlet
ralph lauren uk
red bottoms shoes
adidas outlet
polo ralph lauren outlet
nmd adidas
fitflops sale clearance
polo ralph lauren outlet online
michael kors outlet clearance
ralph lauren uk
mulberry outlet
pandora charms
ugg outlet
louis vuitton outlet online
louboutin shoes
cheap jordans free shipping
tory burch outlet
ralph lauren sale clearance
adidas campus
coach factory outlet
canada goose uk
canada goose jackets
longchamp outlet online
supreme new york
fitflops sale
longchamp handbags
red bottoms
canada goose sale
ralph lauren outlet
coach outlet
coach factory outlet
north face jackets
philipp plein outlet
gucci outlet
nfl jerseys wholesale
canada goose jackets
coach bags
coach outlet store online
air jordans
polo outlet
canada goose outlet
ugg outlet
canada goose
ugg boots
michael kors handbags
canada goose outlet
ugg outlet
polo ralph lauren outlet online
yeezy boost 350
ugg australia
coach outlet
valentino shoes
tory burch outlet store
pandora charms
ralph lauren outlet
ferragamo outlet
canada goose
nike air max
moncler
cheap oakley sunglasses
adidas shoes
ugg outlet
longchamp handbags
jordan shoes
polo ralph lauren outlet online
ralph lauren outlet
coach outlet
ugg boots on sale
fred perry
michael kors outlet
cheap ray ban sunglasses
ugg outlet online
canada goose outlet
moncler outlet
adidas yeezy
adidas shoes
burberry outlet canada
ray ban sunglasses
ugg boots
moncler
adidas yeezy
canada goose jackets
nike outlet
michael kors uk
mulberry bags
ugg outlet
ugg boots
michael kors canada
north face outlet
louboutin shoes
hermes handbags
louis vuitton outlet
cheap nfl jerseys
ray ban sunglasses
christian louboutin
cheap oakley sunglasses
coach outlet
ugg outlet
canada goose outlet
jordan shoes
adidas superstar
pandora charms
michael kors outlet
michael kors outlet
canada goose jackets
birkenstock sandals
canada goose outlet
ugg outlet
gucci handbags
adidas yeezy boost
pandora jewelry
michael kors outlet online
coach outlet
polo ralph lauren outlet
michael kors factory outlet
fitflops
air max 2018
coach outlet
timberland boots outlet
uggs outlet
philipp plein shirt
ugg outlet
michael kors outlet online
polo ralph lauren outlet
adidas
ugg boots
louis vuitton outlet online
ralph lauren uk
ugg outlet
hermes outlet
north face outlet
air max 2017
kate spade handbag
ugg outlet
cheap ray ban sunglasses
coach outlet
salvatore ferragamo
ray ban sunglasses
coach factory outlet
adidas shoes
michael kors outlet store
yeezy boost
1.03linpingping