Seguridad · 7 min read · Jan 30, 2026
Chkrootkit-Portsentry-Howto
Chkrootkit-Portsentry-Howto
Version 1.0
Author: Falko Timme
Este documento describe cómo instalar chkrootkit y portsentry. Debería funcionar (quizás con ligeros cambios en cuanto a rutas, etc.) en todos los sistemas operativos *nix.
Chkrootkit “es una herramienta para verificar localmente signos de un rootkit” (de http://www.chkrootkit.org).
“Las herramientas Sentry proporcionan servicios de seguridad a nivel de host para la plataforma Unix. PortSentry, Logcheck/LogSentry y HostSentry protegen contra escaneos de puertos, automatizan la auditoría de archivos de registro y detectan actividad de inicio de sesión sospechosa de manera continua” (de http://sourceforge.net/projects/sentrytools/).
Este howto está destinado como una guía práctica; no cubre los antecedentes teóricos. Estos se tratan en muchos otros documentos en la web.
¡Este documento se proporciona sin garantía de ningún tipo!
1 Obtener las Fuentes
Necesitamos el siguiente software: chkrootkit, portsentry y logcheck. Instalaremos el software desde el directorio /tmp.
cd /tmp
wget –passive-ftp ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
wget http://heanet.dl.sourceforge.net/sourceforge/sentrytools/portsentry-1.2.tar.gz
wget http://heanet.dl.sourceforge.net/sourceforge/sentrytools/logcheck-1.1.1.tar.gz
2 Instalar Chkrootkit
mv chkrootkit.tar.gz /usr/local/
cd /usr/local/
tar xvfz chkrootkit.tar.gz
ln -s chkrootkit-0.43/ chkrootkit (reemplaza 0.43 con el número de versión correcto)
cd chkrootkit/
make sense
Ahora encontrarás el programa chkrootkit en /usr/local/chkrootkit. Ejecútalo escribiendo
cd /usr/local/chkrootkit/ && ./chkrootkit
Tu salida se verá algo así:
| ROOTDIR is `/` Checking `amd`... not found Checking `basename`... not infected Checking `biff`... not infected Checking `chfn`... not infected Checking `chsh`... not infected Checking `cron`... not infected Checking `date`... not infected Checking `du`... not infected Checking `dirname`... not infected Checking `echo`... not infected Checking `egrep`... not infected Checking `env`... not infected Checking `find`... not infected Checking `fingerd`... not found Checking `gpm`... not found Checking `grep`... not infected Checking `hdparm`... not found Checking `su`... not infected Checking `ifconfig`... not infected Checking `inetd`... not infected Checking `inetdconf`... not infected Checking `identd`... not found Checking `init`... not infected Checking `killall`... not infected Checking `ldsopreload`... not infected Checking `login`... not infected Checking `ls`... not infected Checking `lsof`... not infected Checking `mail`... not infected Checking `mingetty`... not found Checking `netstat`... not infected Checking `named`... not infected Checking `passwd`... not infected Checking `pidof`... not infected Checking `pop2`... not found Checking `pop3`... not found Checking `ps`... not infected Checking `pstree`... not infected Checking `rpcinfo`... not infected Checking `rlogind`... not found Checking `rshd`... not found Checking `slogin`... not infected Checking `sendmail`... not infected Checking `sshd`... not infected Checking `syslogd`... not infected Checking `tar`... not infected Checking `tcpd`... not infected Checking `tcpdump`... not infected Checking `top`... not infected Checking `telnetd`... not found Checking `timed`... not found Checking `traceroute`... not found Checking `vdir`... not infected Checking `w`... not infected Checking `write`... not infected Checking `aliens`... no suspect files Searching for sniffer's logs, it may take a while... nothing found Searching for HiDrootkit's default dir... nothing found Searching for t0rn's default files and dirs... nothing found Searching for t0rn's v8 defaults... nothing found Searching for Lion Worm default files and dirs... nothing found Searching for RSHA's default files and dir... nothing found Searching for RH-Sharpe's default files... nothing found Searching for Ambient's rootkit (ark) default files and dirs... nothing found Searching for suspicious files and dirs, it may take a while... /usr/lib/perl/5.6.1/auto/Test/Harness/.packlist /usr/lib/perl/5.6.1/auto/DB_File/.packlist Searching for LPD Worm files and dirs... nothing found Searching for Ramen Worm files and dirs... nothing found Searching for Maniac files and dirs... nothing found Searching for RK17 files and dirs... nothing found Searching for Ducoci rootkit... nothing found Searching for Adore Worm... nothing found Searching for ShitC Worm... nothing found Searching for Omega Worm... nothing found Searching for Sadmind/IIS Worm... nothing found Searching for MonKit... nothing found Searching for Showtee... nothing found Searching for OpticKit... nothing found Searching for T.R.K... nothing found Searching for Mithra... nothing found Searching for OBSD rk v1... nothing found Searching for LOC rootkit ... nothing found Searching for Romanian rootkit ... nothing found Searching for Suckit rootkit ... nothing found Searching for Volc rootkit ... nothing found Searching for Gold2 rootkit ... nothing found Searching for TC2 Worm default files and dirs... nothing found Searching for Anonoying rootkit default files and dirs... nothing found Searching for ZK rootkit default files and dirs... nothing found Searching for ShKit rootkit default files and dirs... nothing found Searching for AjaKit rootkit default files and dirs... nothing found Searching for zaRwT rootkit default files and dirs... nothing found Searching for anomalies in shell history files... nothing found Checking `asp`... not infected Checking `bindshell`... not infected Checking `lkm`... nothing detected Checking `rexedcs`... not found Checking `sniffer`... eth0: not promisc and no PF_PACKET sockets eth0:0: not promisc and no PF_PACKET sockets eth0:1: not promisc and no PF_PACKET sockets eth0:2: not promisc and no PF_PACKET sockets eth0:3: not promisc and no PF_PACKET sockets eth0:4: not promisc and no PF_PACKET sockets Checking `w55808`... not infected Checking `wted`... nothing deleted Checking `scalper`... not infected Checking `slapper`... not infected Checking `z2`... nothing deleted |
Si se encuentra un gusano, rootkit, etc., esto se indica con la cadena INFECTADO (en letras mayúsculas).
Si deseas obtener la salida de chkrootkit una vez al día por correo electrónico a las 3 a.m., puedes poner la siguiente línea en el archivo cron de root (la ubicación depende de tu distribución; en Debian está en /var/spool/cron/crontabs/root; también podrías encontrarlo en /var/spool/cron/tabs/root o algo similar):
0 3 (cd /usr/local/chkrootkit; ./chkrootkit 2>&1 | mail -s “chkrootkit output” [email protected])*
Luego ejecuta
chmod 600 /var/spool/cron/crontabs/root
/etc/init.d/cron restart
3 Instalar Portsentry
cd /tmp
tar xvfz portsentry-1.2.tar.gz
cd portsentry_beta/
make linux
make install
Portsentry se instalará en /usr/local/psionic/portsentry/.
Edita /usr/local/psionic/portsentry/portsentry.conf y especifica los puertos que deseas que portsentry proteja:
| # Descomentar estos si realmente eres muy exigente: #TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111,119,138,139,143,512,513,514,515,540,635,1080,1524,2000,[...]" #UDP_PORTS="1,7,9,66,67,68,69,111,137,138,161,162,474,513,517,518,635,640,641,666,700,2049,31335,[...]" # # Usa estos si solo quieres estar al tanto: TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,12346,20034,27665,31337,[...]" UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,37444,34555,31335,32770,32771,32772,32773,32774,[...]" # # Usa estos para solo lo básico #TCP_PORTS="1,11,15,110,111,143,540,635,1080,1524,2000,12345,12346,20034,32771,32772,32773,32774,[...]" #UDP_PORTS="1,7,9,69,161,162,513,640,700,32770,32771,32772,32773,32774,31337,54321" |
Deben ser puertos que no estén en uso en el sistema. Por ejemplo, si usas IMAP (puerto 143 TCP) en el servidor, deberías eliminar 143 de la lista anterior. El resto de portsentry.conf está bien comentado, pero normalmente los valores predeterminados deberían funcionar.
Ahora necesitamos crear un script de inicio para portsentry (/etc/init.d/portsentry). Ejecutaremos portsentry en modo sigiloso avanzado ya que es la forma más poderosa de detectar escaneos de puertos:
| #!/bin/bash case "$1" in start) echo "Iniciando Portsentry..." ps ax | grep -iw '/usr/local/psionic/portsentry/portsentry -atcp' | grep -iv 'grep' > /dev/null if [ $? != 0 ]; then /usr/local/psionic/portsentry/portsentry -atcp fi ps ax | grep -iw '/usr/local/psionic/portsentry/portsentry -audp' | grep -iv 'grep' > /dev/null if [ $? != 0 ]; then /usr/local/psionic/portsentry/portsentry -audp fi echo "Portsentry ahora está en funcionamiento!" ;; stop) echo "Apagando Portsentry..." array=(`ps ax | grep -iw '/usr/local/psionic/portsentry/portsentry' | grep -iv 'grep' \ | awk '{print $1}' | cut -f1 -d/ | tr ' ' ' '`) element_count=${#array[@]} index=0 while [ "$index" -lt "$element_count" ] do kill -9 ${array[$index]} let "index = $index + 1" done echo "Portsentry detenido!" ;; restart) $0 stop && sleep 3 $0 start ;; *) echo "Uso: $0 {start|stop|restart}" exit 1 esac exit 0 |
chmod 755 /etc/init.d/portsentry
Para iniciar portsentry al arrancar, haz lo siguiente:
ln -s /etc/init.d/ portsentry /etc/rc2.d/S20 portsentry
ln -s /etc/init.d/ portsentry /etc/rc3.d/S20 portsentry
ln -s /etc/init.d/ portsentry /etc/rc4.d/S20 portsentry
ln -s /etc/init.d/ portsentry /etc/rc5.d/S20 portsentry
ln -s /etc/init.d/ portsentry /etc/rc0.d/K20 portsentry
ln -s /etc/init.d/ portsentry /etc/rc1.d/K20 portsentry
ln -s /etc/init.d/ portsentry /etc/rc6.d/K20 portsentry*
Ahora iniciamos portsentry:
/etc/init.d/portsentry start
Por favor nota: Si ejecutas portsentry chkrootkit podría quejarse sobre un bindshell infectado:
Checking bindshell… INFECTADO (PUERTOS: 31337)
Esto es normal y no hay de qué preocuparse.
4 Instalar Logcheck
cd /tmp
tar xvfz logcheck-1.1.1.tar.gz
cd logcheck-1.1.1/systems/
Ahora cambia la variable SYSADMIN en logcheck.sh. SYSADMIN es la persona que recibirá la salida de logcheck por correo electrónico (esto puede ser una dirección de correo electrónico o un usuario en el sistema donde instalas logcheck):
| [...] # SECCIÓN DE CONFIGURACIÓN PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin # Logcheck está preconfigurado para funcionar en la mayoría de los sistemas similares a BSD, sin embargo, es # un programa bastante tonto y puede necesitar algo de ayuda para funcionar en otros # sistemas. Por favor verifica los siguientes caminos de comando para asegurarte de que son # correctos. # Persona a la que enviar la actividad de registro. [email protected] # Ruta completa al programa logtail. # Este programa es necesario para ejecutar este script y viene con el paquete. LOGTAIL=/usr/local/bin/logtail [...] |
cd ../../
mkdir -p /usr/local/etc/tmp
make
Esto instalará logcheck en /usr/local/etc.
Ahora tenemos que crear un trabajo cron para ejecutar logcheck periódicamente. Edita el archivo cron de root (por ejemplo, /var/spool/cron/crontabs/root, ver sección 2 “Instalar Chkrootkit”) e ingresa la siguiente línea:
0 3 /usr/local/etc/logcheck.sh*
Luego ejecuta
chmod 600 /var/spool/cron/crontabs/root
/etc/init.d/cron restart
Esto invocará logcheck una vez al día a las 3 a.m. Ahora te informará sobre eventos inusuales del sistema, violaciones de seguridad, ataques al sistema, etc. Si tu sistema está expuesto directamente a internet, notarás que hay muchas actividades maliciosas en internet, y tendrás una idea de por qué la seguridad es muy importante.
Enlaces
Chkrootkit: http://www.chkrootkit.org/
Portsentry: http://sourceforge.net/projects/sentrytools/
Ubicación original de este documento:
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.