Securizando PHP a nivel servidor

Introducción

Hoy en día los administradores de sistemas nos solemos centrar mucho en el tema de seguridad. Como es evidente tratamos de cerrar los posibles caminos que puedan venir los ataques para curarnos ante el cliente. Como muchas veces no podemos controlar los scripts/programaciones de cada cliente tenemos que buscar ciertas formas que nos ayuden.

Recordamos que la mayor parte de las intrusiones o defacement en las webs suelen venir por CMS desactualizados. Así que siempre recomendamos que se actualice siempre que se pueda porque suelen tener correcciones de seguridad.

En nuestro caso vamos a trabajar con un poco de seguridad sobre nuestro php a nivel de servidor.

Las normas que vamos a seguir son:

1) Otorgar la menor información posible al atacante.

2) Deshabilitar funciones en PHP que permitan la ejecución de comandos o procesos en el servidor.

Actualizaciones:

27/04/2017: Añadido open_basedir, Securizar Sesiones, Nuevas funciones a deshabilitar.

Leer más

Expandiendo las variables de entorno

Hola a todos!

Hoy nos hemos encontrado con un problema expandiendo las variables de entorno en uno de nuestros clientes y es que está intentando ejecutar el comando php desde fuera.

Aparentemente no es ningún problema, pero cuando tiene un PLESK o un sistema multi PHP te coge la versión del sistema por defecto.

Lo que hicimos para solventarlo fue la de meter un alias a php usando la versión que nos había facilitado el cliente.

A pesar de realizar esto efectivamente desde fuera no estaba funcionando, ya que seguía cogiendo la propia del sistema y no la que habíamos establecido en el .bashrc.

Pues la solución para que obtenga nuestras variables en «.bashrc» es poner la siguiente línea:

shopt -s expand_aliases

Con esto lo que hace es expandir las variables que hemos establecido a una shell no interactiva y saldría la versión de php que hemos configurado.

Un saludo

Configurando Chroot con SFTP

Introducción

Se nos presentó la problemática de que un cliente quería crear un SFTP (Secure File Transfer Protocol) para que un usuario solo pudiera acceder de esa manera. Es decir, que no quería que por FTP tuviera acceso. Aparte de ello quería enjaularlo en su propio directorio y que no pudiera navegar a ningún lugar.

Recordemos que SFTP utiliza el puerto del SSH para realizar la transferencia de ficheros proporcionando una capa de seguridad extra.

Recordamos también que existe otras maneras de hacerlo cifrado y seguro con ssl sobre ftp con VSFTP y ssl sobre ftp con PROFTPD.

Configurando Chroot con SFTP

Antes de empezar debemos crear el entorno cerrado, en nuestro caso vamos a usar el directorio «/var/www/sftpusuarios/».

Los pasos que vamos a seguir para configurar Chroot con SFTP son los siguientes:

# Creando el grupo de sftp
groupadd sftp_users

# Creamos el usuario
adduser -d /var/www/sftpusuarios/ -G sftp_users sftpuser1

# Configuramos el SSH
vim /etc/ssh/sshd_config

# Comentamos la siguiente línea, suele estar al final
Subsystem sftp /usr/libexec/openssh/sftp-server


#Añadimos las siguientes
Subsystem sftp internal-sftp
Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /var/www/sftpusuarios
ForceCommand internal-sftp

Ahora mismo después de ejecutar dicha configuración tan solo tenemos que reiniciar y probar nuestro acceso por SFTP (recordad el mismo puerto del SSH).

Deshabilitar el usuario por FTP

Actualmente solo lo hemos probado por VSFTP, no sabemos si será igual para otros clientes FTP:

# Editamos el fichero siguiente
vim /etc/vsftpd/ftpusers

# Añadimos el usuario que no queremos que tenga FTP
sftpuser1

Guardamos el fichero y reiniciamos el servicio de VSFTP.

Too Many Open Files Mysql o MariaDB

Introducción

Mirando los logs de Mysql o MariaDB nos hemos percatado de que un cliente estaba teniendo problemas de apertura (Too Many Open Files) con tablas aleatorias de distintas bases de datos. No había un patrón claro pero tuvimos que pasar por varios pasos para detectar el problema.

Los logs los encontramos en: /var/log/mariadb/mariadb.log

En el artículo vamos a mirar los siguientes puntos:

  1. Revisión de los permisos del directorio «datadir» de mysql/mariadb
  2. Revisión de la variable open_file de mysql.
  3. Revisión de las limitaciones del sistema a la hora de abrir ficheros por un servicio.

Con esto hemos conseguido acotar el problema y solventar la incidencia que se nos había presentado.

Leer más

Montando NFS [CENTOS]

Introducción

NFS (WIKIPEDIA) es un protocolo que nos permite compartir una carpeta de red a través de distintos servidores. Permitiendo que los distintos clientes puedan usar esa carpeta como si perteneciera al propio equipo.

En nuestro caso lo vamos a montar con 1 servidor (master) el cual será el que contiene la información y 1 servidor (cliente) el cual accederá a este recurso de manera remota.

Servidor Master (192.168.1.69)
Servidor Cliente (192.168.1.100)

Es evidente que ambas máquinas tienen que tener visibilidad a través de IP.

Leer más

Maldet – Linux Malware Detect

Introducción

En el día a día en el trabajo vas descubriendo cosas y de software que puede facilitar mucho la tarea del administrador de sistemas. Una de esas herramientas que he encontrado es maldet (Linux Malware Detect) la cual te ahorra en mucho tiempo buscar y analizar posibles trazas de malware, detección de SHELLs, etc…

En este caso diremos que es una herramienta que no está paquetizada, pero que el software viene con un instalador que nos permitirá instalarlo de manera cómoda.

El programa en sí veremos que desde 2013 no se actualiz, pero eso no quiere decir que la herramienta pierda eficacia. Esto es debido a que las firmas o el cómo detecta el posible malware sí que se sigue actualizando hoy en día. De hecho obtiene los resultados de 4 fuentes:

  • Network Edge IPS: Debido a que el creador trabaja con IPS (Detector de instrusos) recibe las firmas las clasifica y las empaqueta para este software.
  • Comunity Data: Información obtenida de distintas webs como pueden ser clean-mx o malwaredomainlist.
  • ClamAV: Detecciones en MD5/HEX actualizadas por este motor de antivirus. Mejora el rendimiento de maldet si está instalado en el servidor.
  • User Submission: Aportaciones de los propios usuarios.

Leer más

Comprobar parches CVE en Linux

Introducción

Hoy en día los sistemas operativos de software libre están siendo actualizados a menudo con parches de seguridad. A menudo necesitamos saber aquellos fallos de seguridad que han sido parcheados y estos códigos identificativos son los llamados CVE (Common Vulnerabilities and Exposures).

Existen distintas bases de datos actualizadas donde van clasificando estos tipos de vulnerabilidades como por ejemplo:

Y por ejemplo para las distribuciones que se suelen usar más:

Leer más

RAID Software, cambiando el disco dañado

Introducción RAID Software

Imaginad por un momento que tenemos un sistema Linux que consta como mínimo de 2 discos duros. Estos discos duros tenemos varias formas de poder configurarlo en nuestro sistema operativo y una de ellas es a través de configuración RAID.

Con dos discos duros tenemos la posibilidad de montar algo llamado RAID 0 (si tenemos 2 discos de 1 TB el sistema lo vería como si tuvieramos 2 TB) y RAID 1 (Ambos discos duros tendrían el mismo contenido, por lo tanto si uno se rompe el sistema puede seguir funcionando).

En esta guía vamos a trabajar como si tuviésemos un RAID 1 (RAID Software) y tuviéramos problemas con uno de los 2 discos.

Leer más

Seguridad en OpenSSH

¿Qué es SSH?

SSH (Shell Segura) es un protocolo de red encriptado que permite la conexión en modo seguro de una máquina remota a través de una shell en modo texto.

OpenSSH es un estandard del cliente y servidor SSH usado en la mayoría de las distribuciones Linux. OpenSSH encripta todo el tráfico (incluyendo las contraseñas)  evitando que numerosos tipo de ataques se puedan efectuar. Así que dicho protocolo hace que la conexión sea segura de principio a fin.

Leer más