Ransomware cr1ptt0r

El 22 de febrero D-LINK se hacía eco de un nuevo ransomware que afectaba, entre otros, a sus NAS aprovechando una vulnerabilidad en la implementación de SAMBA. Dicha vulnerabilidad está catalogada como CVE-2017-7494.

D-LINK corrigió este fallo en la versión 1.10 de su firmware, el cual data de octubre de 2017 según su changelog. La última versión disponbile de dichor firmware es la 1.11B01, la cual puede ser descargada de la web oficial.

Continue reading «Ransomware cr1ptt0r»

Añadir otras versiones de PHP en ISPConfig 3.0.5

Actualizando owncloud me encontré con que este me recomendaba una versión superior de PHP a la que te instala por defecto el script de ISPConfig en Debian, la cual es la 5.4.45. En otras ocasiones he actualizado la versión por defecto de PHP del sistema, causando una serie de problemas de funcionamiento del servidor que hacía más factible recuperar de una copia de seguridad que arreglar el desastre realizado.

CapturaEchando un vistazo a las opciones que trae el ISPConfig veo que lleva un apartado que pone Additional PHP versions. Imaginé que esto era para asignar una versión diferente de la que viene por defecto en el sistema a unos dominios concretos.

En la imagen se aprecia en qué parte del panel de control se encuentra la mencionada opción.

Pero antes hemos de realizar unos pasos. Básicamente son los pasos de este tutorial pero con un par de modificaciones, pues yo no conseguía que me cambiara la versión del PHP en los sitios que quería.

Vamos a compilar la versión 5.6.0 de PHP-FPM. Realizamos los pasos:

mkdir /opt/php-5.6.0
mkdir /usr/local/src/php5-build
cd /usr/local/src/php5-build
wget http://de.php.net/get/php-5.6.0.tar.bz2/from/this/mirror -O php-5.6.0.tar.bz2
tar jxf php-5.6.0.tar.bz2
cd php-5.6.0/
apt-get install build-essential
apt-get build-dep php5
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libapache2-mod-fastcgi
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
./configure --prefix=/opt/php-5.6.0 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm
make
make install
cp /usr/local/src/php5-build/php-5.6.0/php.ini-production /opt/php-5.6.0/lib/php.ini
cp /opt/php-5.6.0/etc/php-fpm.conf.default /opt/php-5.6.0/etc/php-fpm.conf

Editamos el archivo /opt/php-5.6.0/etc/php-fpm.conf y añadimos al final:

pid = run/php-fpm.pid
user = www-data
group = www-data
listen = 127.0.0.1:8999
include=/opt/php-5.6.0/etc/pool.d/*.conf

En mi caso, la linea 1 tuve que descomentarla solamente. Las líneas 2 y 3 ya estaban por defecto. El puerto de la línea 4 se puede poner cualquiera que no sea 9000 que esté libre. La línea 5 la puse al final.
Creamos el directorio pool.d y creamos el archivo /etc/init.d/php-5.6.0-fpm

mkdir /opt/php-5.6.0/etc/pool.d
vi /etc/init.d/php-5.6.0-fpm

Ahora copiamos y pegamos este texto dentro del archivo que acabamos de crear:

#! /bin/sh
### BEGIN INIT INFO
# Provides: php-5.6.0-fpm
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-5.6.0-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/opt/php-5.6.0/sbin/php-fpm
php_fpm_CONF=/opt/php-5.6.0/etc/php-fpm.conf
php_fpm_PID=/opt/php-5.6.0/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
 try=0
 while test $try -lt 35 ; do
 case "$1" in
 'created')
 if [ -f "$2" ] ; then
 try=''
 break
 fi
 ;;
 'removed')
 if [ ! -f "$2" ] ; then
 try=''
 break
 fi
 ;;
 esac
 echo -n .
 try=`expr $try + 1`
 sleep 1
 done
}
case "$1" in
 start)
 echo -n "Starting php-fpm "
 $php_fpm_BIN $php_opts
 if [ "$?" != 0 ] ; then
 echo " failed"
 exit 1
 fi
 wait_for_pid created $php_fpm_PID
 if [ -n "$try" ] ; then
 echo " failed"
 exit 1
 else
 echo " done"
 fi
 ;;
 stop)
 echo -n "Gracefully shutting down php-fpm "
 if [ ! -r $php_fpm_PID ] ; then
 echo "warning, no pid file found - php-fpm is not running ?"
 exit 1
 fi
 kill -QUIT `cat $php_fpm_PID`
 wait_for_pid removed $php_fpm_PID
 if [ -n "$try" ] ; then
 echo " failed. Use force-exit"
 exit 1
 else
 echo " done"
 echo " done"
 fi
 ;;
 force-quit)
 echo -n "Terminating php-fpm "
 if [ ! -r $php_fpm_PID ] ; then
 echo "warning, no pid file found - php-fpm is not running ?"
 exit 1
 fi
 kill -TERM `cat $php_fpm_PID`
 wait_for_pid removed $php_fpm_PID
 if [ -n "$try" ] ; then
 echo " failed"
 exit 1
 else
 echo " done"
 fi
 ;;
 restart)
 $0 stop
 $0 start
 ;;
 reload)
 echo -n "Reload service php-fpm "
 if [ ! -r $php_fpm_PID ] ; then
 echo "warning, no pid file found - php-fpm is not running ?"
 exit 1
 fi
 kill -USR2 `cat $php_fpm_PID`
 echo " done"
 ;;
 *)
 echo "Usage: $0 {start|stop|force-quit|restart|reload}"
 exit 1
 ;;
esac

Hacemos que el script sea ejecutable y lo movemos a system.d con los siguientes comandos:

chmod 755 /etc/init.d/php-5.6.0-fpm
insserv php-5.6.0-fpm
/etc/init.d/php-5.6.0-fpm start

Activamos el módulo fastcgi , reiniciamos apache y modificamos el archivo /opt/php-5.6.0/lib/php.ini de la siguiente manera:

a2enmod fastcgi
service apache2 restart
vi /opt/php-5.6.0/lib/php.ini

Pegamos el siguiente texto al final del archivo:

zend_extension=opcache.so
extension=apcu.so
apc.enabled=1
apc.shm_size=128M
apc.ttl=0
apc.gc_ttl=600
apc.enable_cli=1
apc.mmap_file_mask=/tmp/apc.XXXXXX
;apc.mmap_file_mask=/dev/zero
;apc.shm_segments = 5
extension=memcache.so

Antes de hacer nada, instalamos los módulos APCu, memcache y memcached con los siguientes comandos:

apt-get -y install php-pear
cd /opt/php-5.6.0/etc
pecl -C ./pear.conf update-channels
pecl -C ./pear.conf install channel://pecl.php.net/apcu-4.0.6
pecl -C ./pear.conf install memcache
/etc/init.d/php-5.6.0-fpm reload

En principio ya está nuestra versión. Ahora la ponemos en el ISPConfig. Hacemos click en el orden en el que aparece en la imagen:

Captura2

En PHP Name ponemos el nombre que le vayamos a poner a esta versión. Yo he usado PHP 5.6.0.

Captura3

En la pestaña PHP-FPM Settings ponemos:

  • Path to the PHP-FPM init script: /etc/init.d/php-5.6.0-fpm
  • Path to the php.ini directory: /opt/php-5.6.0/lib/
  • Path to the PHP-FPM pool directory: /opt/php-5.6.0/etc/pool.d/

Captura4

Ahora ya podremos elegir un dominio en el que usar esta versión de PHP.

Adaptador Wifi miniUSB para Linux

A muchos nos ha pasado que hemos comprado unos mini-adaptadores wifi del tamaño de una moneda para dotar o mejorar la conectividad wifi de nuestro portátil, para una raspberry, etc.

Mi caso concreto, era para mejorar la cobertura wifi (que tampoco es que tenga mucha debido a su diminuto tamaño) debido al soporte de redes tipo N que el portátil no traía. Fue éste el que compré en eBay, puesto que todos eran los mismos, aunque de diferentes vendedores.

En la descripción del artículo, se indica:

  • La forma mas sencilla de conectar tu ordenador a una red inalámbrica WIFI, mediante este adaptador USB.
  • Función de punto de acceso, para conectar sus dispositivos al adaptador y compartir internet desde el ordenador.
  • Podrás navegar en cualquier momento y en cualquier ordenador.
  • Tamaño pequeño con una gran potencia 150 Mbps.
  • Diseño compacto de fácil transporte.
  • Wireless-N (802.11n)
  • ESTÁNDAR: IEEE 802.11n, IEEE 802.11g (darft), IEEE
  • RANGO DE FRECUENCIA: 2.4 – 2.4835 GHz.
  • NUMERO DE CANALES: 13.
  • Compatible con Microsoft Windows 2000 / XP / Vista / WIN 7 / Win 8 / Win 8.1 / Win 10

Lo cual me parecía una información bastante escasa. Decido preguntar a un par de vendedores de estos aparatos. Y obtengo respuestas genéricas tal que así:

Hola

Le envío las especificaciones del artículo para su comprobación:

Especificaciones: 
-Mini Adaptador Usb Wifi
– Tiene un diseño sencillo, pequeño, discreto y muy fácil de transportar, pero con una gran potencia: 150Mbps
– Sirve para conectar cualquier PC de mesa o portátil a la red inalámbrica Wifi.
– Color: Negro y rojo
– Sistemas operativos: Windows 2000 / XP / Vista / WIN 7 / WIN 8 / Windows 10
– Rango de frecuencias: 2.4 ~ 2.4835GHz.
– Medidas: 20 x 14 x 6 mm aprox.
– Interfaz: USB2.0

Saludos.

Nada. Me quedo igual. Básicamente, copian y pegan la información que tienen en la web de la tienda china (como esta, por ejemplo). Así que finalmente decido adquirirlo a la primera que pillo, total, unos céntimos de diferencia no importan.ASUS-Eee-PC-900HD-2

Al llegarme el adaptador lo pruebo en un portátil Asus 900HD como en el de la foto. Este PC lleva de casa Windows XP, pero decidí cambiarlo por Lubuntu, un sistema Linux más liviano y más actual.

No me lo detecta. Normal (creo). Así que decido buscar por la extensa web. Y doy con un post donde explican cómo instalar los drivers de este modelo (o de uno similar). Pero no me funciona con los drivers que mencionan, ya que son para una versión anterior al kernel que estoy usando.

Los pasos a seguir fueron:

  1. Enchufamos el dispositivo a un puerto usb. Listamos los dispositivos conectados a los puetos USB con el comando:
    lsusb

    Nos aparecerá algo tal que así bash1
    El adaptador en cuestión es de ralink y el modelo 7601, por lo que es un RT7601

  2. En la tercera línea se puede apreciar que linux detecta que el dispositivo está enchufado.
    Bus 001 Device 007: ID 148f:7601 Ralink Technology, Corp. 

    Pero como no tiene los drivers, no lo puede hacer funcionar. Descargamos los archivos fuente directamente desde github.

  3. Una vez descargados, descomprimimos el archivo con el comando
    tar xjf DPO_MT7601U_LinuxSTA-master.zip

    (suponiendo que el nombre del archivo descargado sea ese).

  4. Descargamos también el parche (mirror) y lo ponemos en la misma carpeta donde hemos puesto el archivo zip del paso 2.
  5. Accedemos a la carpeta donde hemos descomprimido el source de los drivers y aplicamos el parche.
    cd DPO_MT7601U_LinuxSTA-master.
    patch -p0 < ../rt2870-mt7601Usta-kuid_t-kgid_t.patch
  6. Ejecutamos.
    make
    sudo mkdir -p /etc/Wireless/RT2870STA/
    sudo cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat
    sudo /sbin/insmod os/linux/mt7601Usta.ko
  7. Finalmente, compilamos
    make install

Y ya lo tendremos funcionando, como se puede ver en esta captura (dispositivo ra0)

sh2

Cabe decir que habrá que hacer estos pasos cada vez que actualicemos el kernel. También es posible que, a la hora de compilar nos dé un error de que no encuentra los headers. En tal caso habrá que instalarlos con el comando

sudo apt-get install --reinstall linux-headers-generic build-essential 

Con todo esto ya tendremos el adaptador totalmente operativo en Ubuntu (y todas sus variantes) y puede que en las demás distribuciones de linux.