¿Estás visitando desde Argentina?
Ingresá a Linware Argentina ⯈
Continuar en Linware Argentina ⯈
×
¿Qué estás buscando?
BUSCAR!
BLOG
Cuando su escáner de seguridad alerta de jspawnhelper en Zimbra
Publicada el 07/06/2023

Muchos administradores confían en escáneres de seguridad de terceros, como Crowdstrike Falcon, para analizar su servidor Zimbra en busca de actividad maliciosa. Un proceso que se informa con frecuencia es jspawnhelper.

¿Qué es jspawnhelper?

Si bien esto no está muy bien documentado, jspawnhelper se puede ejecutar como resultado de una llamada a ProcessBuilder.start() o Runtime.exec() en una aplicación Java. OpenJDK proporciona jspawnhelper y Java mismo decide cuándo usará o no jspawnhelper.

¿Cuándo se usa jspawnhelper?

Zimbra tiene muchas aplicaciones de línea de comandos que le permiten configurar, controlar y aprovisionar su servidor de correo electrónico. Un ejemplo de uso legítimo de jspawnhelper es zmprovla utilidad de línea de comandos para aprovisionar cuentas en Zimbra.

Por ejemplo, si desea eliminar varias cuentas, puede ejecutar:

zmprov da test1@example.comnzmprov da test2@example.comnzmprov da test3@example.com

Si ejecuta estos comandos, cada uno de estos comandos puede tardar hasta 20 segundos en completarse. No es un gran problema si solo necesita eliminar 3 cuentas, pero si necesita eliminar 100 o 10000 cuentas, será muy lento. Una solución para esto es llamar solo zmprovuna vez y canalizar los argumentos a zmprov. Puede hacerlo creando un archivo /tmp/listofaccountscon el siguiente contenido:

da prueba1@ejemplo.comnda prueba2@ejemplo.comnda prueba3@ejemplo.com

Luego puede ejecutar zmprov solo una vez usando:

/opt/zimbra/bin/zmprov < /tmp/listofaccounts

Eliminar 3 cuentas lleva aproximadamente la misma cantidad de tiempo que eliminar solo una cuenta. Y aunque no lo notaste, en segundo plano, zmprov puede haber llamado jspawnhelper.

El escáner de seguridad alerta a jspawnhelper, ¿es esto bueno o malo?

Si su escáner de seguridad le alerta sobre el uso malicioso de jspawnhelper en Zimbra, es importante observar los argumentos que se utilizan con jspawnhelper. Un ejemplo de uso legítimo:

sh -c zmcontrol estado > /dev/null

Algunos ejemplos de uso sospechoso:

/usr/sbin/unix_chkpwd zimbra chkexpiryn/usr/sbin/unix_chkpwd raíz chkexpiryn/bin/sh -c /usr/lib64/sa/sa1 1 1

Si realiza una búsqueda en Google de unix_chkpwd (o escalada de privilegios de unix_chkpwd ), encontrará que los argumentos en el ejemplo anterior no tienen sentido, ya que unix_chkpwd solo puede verificar el vencimiento de la contraseña de la cuenta actual, agregar zimbrarootcomo argumentos no tiene sentido . El comando sa1 se utiliza para registrar las estadísticas de contabilidad del sistema . Zimbra no ejecutará el comando sa1 de fábrica, ni Zimbra instalará el paquete que proporciona sa1.

Medidas preventivas

Cuando implemente Zimbra, se recomienda configurar el Registro centralizado, preferiblemente con Elastic Stack. Esto le permitirá recopilar registros de línea de base de su sistema. De esta forma, puede comparar el registro actual con los registros históricos y analizar el uso de jspawnhelper. Consulte: https://github.com/Zimbra/elastic-stack . Además, eche un vistazo a https://wiki.zimbra.com/wiki/Secopstips .

Medidas correctivas

Si no está seguro de si el uso de jspawnhelper en su instalación es malicioso o no, puede (bajo su propio riesgo) cambiar los permisos de jspawnhelper. Los permisos predeterminados se ven así:

ls -hal /opt/zimbra/common/lib/jvm/openjdk-17.0.2-zimbra/lib/jspawnhelpern-rwxr-xr-x 1 raíz raíz 15K 17 de febrero de 2022 /opt/zimbra/common/lib/jvm/openjdk-17.0.2-zimbra/lib/jspawnhelper

Para eliminar todos los permisos, puede ejecutar:

chmod 000 /opt/zimbra/common/lib/jvm/openjdk-17.0.2-zimbra/lib/jspawnhelper

Ahora, cada vez que se llame a jspawnhelper, fallará. Luego puede probar y ver qué funcionalidad se ve afectada y verificar sus registros en busca de errores. Un ejemplo de falla reportada en la línea de comando:

java.io.IOException: no se puede ejecutar el programa "sh": error = 0, no se pudo ejecutar el asistente de generación: pid: 14746, valor de salida: 127n    en java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)n    en java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)n    en java.base/java.lang.Runtime.exec(Runtime.java:594)n    en java.base/java.lang.Runtime.exec(Runtime.java:453)n    en jline.UnixTerminal.exec(UnixTerminal.java:290)n    en jline.UnixTerminal.exec(UnixTerminal.java:275)n    en jline.UnixTerminal.stty(UnixTerminal.java:266)n    en jline.UnixTerminal.initializeTerminal(UnixTerminal.java:77)n    en jline.Terminal.setupTerminal(Terminal.java:75)n    en jline.Terminal.getTerminal(Terminal.java:26)n    en jline.ConsoleReader.<init>(ConsoleReader.java:188)n    en jline.ConsoleReader.<init>(ConsoleReader.java:183)n    en jline.ConsoleReader.<init>(ConsoleReader.java:173)n    en com.zimbra.common.util.CliUtil.enableCommandLineEditing(CliUtil.java:115)n    en com.zimbra.cs.account.ProvUtil.main(ProvUtil.java:4130)nCausado por: java.io.IOException: error=0, no se pudo ejecutar el ayudante de generación: pid: 14746, valor de salida: 127n...

Para restaurar el permiso puedes ejecutar:

chmod 755 /opt/zimbra/common/lib/jvm/openjdk-17.0.2-zimbra/lib/jspawnhelper
Ir al Blog