miércoles, 4 de diciembre de 2019

Cron: ejecutar script el primer lunes de cada mes



Cómo hacer que un script se ejecute el primer lunes de cada mes en Linux.



Los que conozcáis cron sabréis que es una utilidad que sirve para ejecutar scripts (o comandos) de forma recurrente en entornos Linux. Cron permite elegir el minuto, hora, dia, mes y día de la semana en que ejecutar un script automáticamente.


Ejecutar script el día 1 de cada mes



Siguiendo lo mencionado anteriormente, para hacer que un script se ejecute automáticamente el dia 1 de cada mes a las 2:00 de la madrugada, debemos usar la siguiente sintaxis en crontab:

0 2 1 * * /ruta/script.sh


Ejecutar script el primer lunes de cada mes



Puede que nos interese ejecutar un script, ya no el día 1 de cada mes, sino el primer lunes de cada mes, de modo que al entrar a la oficina a las 8:00h podamos actuar dependiendo del resultado generado por el script. Y que sea crítico que se ejecute el lunes porque sí o sí estaremos a la mañana siguiente en el trabajo, cosa que no pasaría si el día 1 de ese mes fuese sábado (por ejemplo).

NOTA: sí, puede que haya lunes que sean festivos...

La forma en la que está diseñado cron no contempla este tipo de planificación, pero eso no significa que no se pueda llevar a cabo. Para conseguir que un script se ejecute el primer lunes de cada mes a las 2:00h (por ejemplo), podemos usar la siguiente parametrización en crontab:

0 2 1-7 * * [ "$(date '+\%u')" = "1" ] && /ruta/script.sh

Lo que estamos haciendo es ejecutar un script y luego otro. Recordemos que, en bash, el operando && indica "si se cumple la condición anterior, ejecuta el comando siguiente". Es decir, si el día de la semana equivale a 1 (lunes), ejecuta el script.

En el primer script, vemos cómo se escapa el caracter % con el uso de comillas simples y \. Esto es necesario, puesto que si no se escapa el caracter, el comando no se ejecuta en cron. Sin más.


Número vs Nombre



Se podría usar [ "$(date '+\%a')" = "Mon" ] para comprobar si el día es lunes, pero entonces el script solo funcionaría en sistemas con el locale inglés. Si nuestro sistema estuviera en español, necesitaríamos compararlo con "lun", si estuviera en francés, con "lundi", etc.

Para evitar problemas con el idioma del sistema operativo, considero que es mejor usar el número del día (%u) en vez de usar el nombre del día (%a), ya que los números son universales, cosa que nos permitirá pasar esta entrada cron de un sistema a otro sin importar los locales.


Alternativa



De forma alternativa, se podría ejecutar el script cada lunes y dentro del script en sí comprobar si ese lunes es el primero del mes actual. Si es el primer lunes, seguir con la ejecución, y sino, ejecutar un simple "exit" para salir del script. Pero considero que esta opción gasta más tiempo de procesador.


Conclusión



Aunque cron no esté diseñado explícitamente para permitirnos ejecutar un script el primer dia X de cada mes, hemos visto cómo podemos llevar a cabo esta tarea usando simples comandos de bash.
0

miércoles, 27 de noviembre de 2019

Terminator: Dark Fate, Sarah Connor y su móvil



¿Es efectivo poner un teléfono móvil dentro de una bolsa de patatas fritas para anular así su geolocalización tal y como hace Sarah Connor en la película Terminator: Dark Fate? Spoilers inside



El fin de semana pasado fui a ver la película Terminator: Dark Fate, la supuesta secuela directa de Terminator 2: Judgment Day, la cual se supone que sigue la cronología de Terminator allá donde se quedó esta Terminator 2, dejando en otro universo a Terminator 3 y sus continuaciones.

El caso es que unos días después de ver la película, me crucé con un artículo en el blog de Kaspersky en el que hablan de un hecho importante en el film: la geolocalización de teléfonos móviles. Más concretamente, hablan de si es posible anular la geolocalización de un teléfono con solo ponerlo dentro de una bolsa de patatas fritas, tal y como hace Sarah Connor (Linda Hamilton) en la película.


Localizando un teléfono móvil



Recordemos que los teléfonos móviles actuales ofrecen su ubicación mediante varios medios: señales GPS, antenas de telefonía móvil y puntos de acceso WiFi. Cuantos más medios de esta lista estén disponibles, más precisas serán las coordenadas de localización del teléfono. Aun así, y siempre según Kaspersky, para evitar la localización de un móvil, no habría que anular la señal GPS, sino más bien la red móvil y el WiFi, ya que al GPS permite que un teléfono reciba señales para determinar dónde está ubicado, pero no transmite nada.

En la película, Sarah Connor usa el aluminio de una bolsa de patatas para anular la localización de su móvil siguiendo el principio de la jaula de Faraday, esto es, el campo electromagnético en el interior de un conductor en equilibrio es nulo, anulando el efecto de los campos externos. De este modo, se supone que el aluminio de la bolsa anula las señales de GPS, WiFi y la localización de las antenas.


El experimento



Hay gente en Kaspersky que tiene mucho tiempo libre, por lo que pueden dedicarse a hacer este tipo de experimentos para ver si la tecnología y métodos usados en las películas son eficientes o son puro teatro hollywoodiense. Y gente como yo estamos encantados de que haya gente en Kaspersky con tiempo libre para comprobar estas cosas :)

Para ver si una bolsa de patatas impide a un teléfono móvil ser localizado, los ingenieros de Kaspersky metieron un móvil en una bolsa de patatas fritas y confirmaron que no tenía ningún efecto. Se podían determinar las coordenadas del teléfono con una precisión de un par de metros.

Tras este primer experimento fallido decidieron probar usando dos bolsas de patatas. Y, ahora sí, con dos bolsas, el teléfono no recibía ni enviaba señal alguna.

Los chavales de Kaspersky probaron bolsas de diferentes fabricantes y el resultado fue siempre el mismo: con dos bolsas funcionaba; con una sola bolsa no.


Conclusión



La recomendación con la que concluye el artículo de Kaspersky es que si quieres anular la localización de tu teléfono, lo mejor es poner el móvil dentro de dos o más bolsas de patatas.


Bonus



Para los que hayan visto Terminator: Dark Fate, dejo este enlace que explica cómo se modelaron las caras de Linda Hamilton y Edward Furlong para hacerlos rejuvenecer 30 años en las escenas iniciales de la película (no, no eran tomas descartadas de Terminator 2).


Fuentes:

https://www.kaspersky.es/blog/terminator-dark-fate-chips/19581/
0

miércoles, 20 de noviembre de 2019

Deshabilitar SMB versión 1 en Windows Server



Cómo volver a conectar con carpetas compartidas en red. Solucionar error "El nombre de red especificado ya no está disponible", "Este recurso compartido requiere el protocolo SMB1 obsoleto".



Recientemente, Microsoft ha desplegado una actualización para Windows 10 que impide a los usuarios conectarse a ciertas carpetas compartidas en red, mostrando el siguiente mensaje:

No se puede conectar con los recursos compartidos de archivos porque no es seguro. Este recurso compartido requiere el protocolo SMB1 obsoleto, el cual no es seguro y podría exponer su sistema a ataques. Su sistema requiere SMB2 o superior. Para obtener más información sobre cómo solucionar este problema, visite: https://go.microsoft.com/fwlink/?linkid=852747.

Esto ocurre porque, probablemente, el file server al que trata de conectarse el usuario sea un Windows Server 2012 con Samba v1 activo. Y como Microsoft ha aplicado un parche a Windows 10 que impide a esta versión de Windows conectar con servidores que tengan SMBv1 activo, Windows nos muestra un error al tratar de acceder a rutas UNC en estos servidores.

Recordemos que Microsoft desaprobó el uso del protocolo SMBv1 en 2014 y desde 2017, Windows utiliza solo SMBv2 y protocolos posteriores. A partir de Windows 10 Fall Creators Update y Windows Server versión 1709 (RS3), el protocolo de red SMBv1 no viene instalado por defecto


Qué ocurre con SMBv1



Cuando se usa SMB1, se pierden las protecciones que ofrece SMBv2 y posteriores:

• Integridad previa a la autenticación (SMB 3.1.1+). Protege contra ataques de degradación de seguridad.
• Negociación de dialecto seguro (SMB 3.0, 3.02). Protege contra ataques de degradación de seguridad.
• Cifrado (SMB 3.0+). Evita la inspección de datos, ataques MiTM.
• Bloqueo de autenticación de invitados inseguro (SMB 3.0+). Protege contra los ataques MiTM.
• Firma de mensajes (SMB 2+). MD5 es reemplazado por HMAC SHA-256 (SMBv2) y AES-CMAC SMBv3).

Si un cliente usa SMB1, un atacante puede realizar man-in-the-middle y puede decirle al cliente que ignore todo lo anterior. Todo lo que necesita hacer el atacante es bloquear SMBv2+ en la máquina intermedia y responder al nombre o IP del servidor. El cliente negociará entonces con SMBv1 y compartirá todo, a menos que se requiera cifrado en ese recurso compartido para evitar SMBv1...

Además, fallos de SMBv1 son explotados por varios ransomware para propagarse por la red.

Pero estas razones, es por las que se debe dejar de usar SMBv1 en una red interna.


Cómo desactivar SMBv1



En Windows Server 2012 R2 y 2016 se puede desactivar SMBv1 vía PowerShell (o ver si está activo):

Detectar si SMBv1 está activo:

Get-WindowsFeature FS-SMB1

Deshabilitar:

Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol

Habilitar:

Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol

En Windows Server anteriores a 2012 no hace falta mostrar el método porque están fuera de soporte por parte de Microsoft y no debería existir ninguno en nuestra infraestructura.

Una vez deshabilitado SMBv1 en el file server de turno, los clientes que usen Windows 10 ya se podrán volver a conectar a carpetas compartidas sin problema.


Fuentes:

https://techcommunity.microsoft.com/t5/Storage-at-Microsoft/Stop-using-SMB1/ba-p/425858
https://support.microsoft.com/es-es/help/4034314/smbv1-is-not-installed-by-default-in-windows
https://support.microsoft.com/es-es/help/2696547/detect-enable-disable-smbv1-smbv2-smbv3...
0

miércoles, 13 de noviembre de 2019

Deshabilitar TLS 1.0 y TLS 1.1 en SAP



Cómo deshabilitar TLS 1.0 y TLS 1.1 en productos de SAP como SAP Web Dispatcher.



Si estás leyendo estas líneas, probablemente estés a cargo de configurar el Web Dispatcher de SAP en tu compañía y busques cómo limitar la versión de TLS que acepta el servidor a TLS 1.2 para superar una auditoría de seguridad sin que salten alertas :)

Como ya comenté, a partir de marzo de 2020, TLS 1.0 y TLS 1.1 dejarán de ser soportados por los navegadores web, por lo que deja de tener sentido soportar esos protocolos de encriptación en el Web Dispatcher de SAP, a menos que tengamos la certeza de que servimos contenido a usuarios con PCs, sistemas operativos y/o navegadores antiguos.


Opciones de configuración



En SAP, se pueden configurar los parámetros ssl/ciphersuites y ssl/client_ciphersuites usando combinaciones (sumas) de los siguientes valores:

Valor     Descripción

1            "BC" (aceptar SSL Version 2.0 CLIENT-HELLO / SSLv2Hello para TLSv1.x Handshake)
2            "BEST" (activar TLS más alto disponible)
4            "NO_GAP" (sin saltos entre protocolos TLS)
16           Permitir el envío ciego de un certificado de cliente (5.5.5pl36+ and all CCL 8.x.x)
32           "Strict protocol version configuration" (no habilitare TLSv1.0)
64            SSLv3
128          TLSv1.0
256          TLSv1.1 (solo con CommonCryptoLib (CCL) 8.4.31 o superior)
512          TLSv1.2 (solo con CommonCryptoLib (CCL) 8.4.31 o superior)

Con los valores predeterminados, el lado servidor del sistema SAP tiene todas las versiones de los protocolos SSL y TLS (más BC) habilitadas:

TLSv1.0 + SSLv3 + BC = 128 + 64 + 1 = 193
TLSv1.2 + TLSv1.1 + TLSv1.0 + SSLv3 + BC = 512 + 256 + 128 + 64 + 1 = 961

Los valores predeterminados para el lado del cliente solo permiten SSLv3 + TLSv1.0:

TLSv1.0 + SSLv3 = 128 + 64 = 192


Configurando solo TLS 1.2



Para limitar las versiones de TLS en el lado servidor a TLS 1.2 solamente, debemos configurar los cipher suites en el archivo DEFAULT.PFL (se pueden configurar en DEFAULT.PFL o en el archivo de instancia, pero SAP recomienda configurarlos en DEFAULT.PFL).

Para solo atender peticiones que lleguen con TLS 1.2 debemos usar estas líneas:

ssl/ciphersuites = 545:PFS:HIGH::EC_P256:EC_HIGH
ssl/client_ciphersuites = 560:PFS:HIGH::EC_P256:EC_HIGH
icm/HTTPS/client_sni_enabled = TRUE
ssl/client_sni_enabled = TRUE

Los valores 545 y 560 salen de:

TLSv1.2 + STRICT_PROTOCOL_VERSIONS + BC = 512 + 32 + 1 = 545
TLSv1.2 + STRICT_PROTOCOL_VERSIONS + BLIND_CLIENT_CERTS = 512 + 32 + 16 = 560

Una vez aplicados los cambios, reiniciar instancia para aplicar la configuración.


Fuentes:

https://launchpad.support.sap.com/#/notes/510007
https://launchpad.support.sap.com/#/notes/2384290
0

miércoles, 6 de noviembre de 2019

Deshabilitar TLS 1.0 y TLS 1.1 en IIS



Cómo deshabilitar TLS 1.0 y TLS 1.1 en IIS en un Windows Server.



Expliqué anteriormente cómo deshabilitar TLS 1.0 y TLS 1.1 en NGINX y cómo deshabilitar TLS 1.0 y TLS 1.1 en Apache. A continuación, explicaré cómo hacer lo propio en IIS sobre Windows Server. Recordemos que estos protocolos dejarán de estar soportados por los navegadores en marzo de 2020, por lo que a partir de esa fecha dejará de tener sentido soportarlos en nuestros servidores web.

El registro de Windows contiene diferentes claves por cada protocolo de encriptación que este sistema acepta en modo servidor. Estas claves se almacenan en:

HKey_Local_Machine\System\CurrentControlSet\Control\SecurityProviders \SCHANNEL\Protocols

Habitualmente, esta clave contiene las siguientes subclaves:

• SSL 2.0
• SSL 3.0
• TLS 1.0
• TLS 1.1
etc.

Cada una de estas claves contiene una entrada que indica a la máquina si acepta dicho protocolo o no.

Cualquiera de estos protocolos se puede deshabilitar creando un nuevo valor con una subclave "Server" y ubicando dentro una clave de tipo DWORD llamada Enabled con valor 0:



Veamos cómo deshabilitar TLS 1.0 paso a paso:

1. Hacer clic en Inicio, Ejecutar, escribir "regedit" y pulsar enter.
2. En el Editor del Registro, buscar la siguiente clave:

HKey_Local_Machine\System\CurrentControlSet\Control\SecurityProviders \SCHANNEL\Protocols\

3. Botón derecho del mouse encima, clic en Agregar Clave y escribir TLS 1.0 (si esta no existe)
4. Crear nueva sub-clave llamada Server.
5. Crear tipo de datos DWORD y titularlo Enabled.
6. Escribir 0 como valor de la entrada Enabled.

Repetir los pasos para TLS 1.1 y al finalizar, reiniciar la máquina.

Una vez reiniciada la máquina, esta ya no negociará con TLS 1.0 ni TLS 1.1 en el lado servidor.


Fuentes:

https://support.microsoft.com/es-es/help/187498/how-to-disable-pct-1-0-ssl-2-0-ssl-3-0-or-tls-1-0...
https://docs.microsoft.com/es-es/windows-server/security/tls/tls-registry-settings
0