miércoles, 4 de septiembre de 2019

Configuracion de Hardening para Linux CentOS

# Configuracion de Hardening para Linux CentOS

##### 5.1 Respaldo de archivos de configuración del sistema

# cd /root
# mkdir backsec
# cd backsec
# vi do-backup.sh        ?  Agregar las siguientes líneas en el script.

#!/bin/bash
BakSec="/root/backsec"
ext=`date '+%Y%m%d'`
   for FILE in \
        /boot/grub/grub.conf /etc/aliases /etc/at.allow /etc/at.deny  \
        /etc/audit.rules  /etc/auditd.conf /etc/audit/audit.rules     \
        /etc/audit/auditd.conf /etc/bashrc /etc/cron.allow          \
        /etc/cron.deny /etc/crontab /etc/csh.cshrc /etc/csh.login      \
        /etc/cups/cupsd.conf /etc/exports /etc/fstab /etc/ftpaccess     \
        /etc/ftpusers /etc/group /etc/grub.conf /etc/gshadow           \
        /etc/hosts.allow /etc/hosts.deny /etc/inittab /etc/issue     \
        /etc/issue.net /etc/login.defs /etc/mail/sendmail.cf          \
        /etc/motd /etc/profile /etc/sudoers /etc/xinetd.conf          \
        /etc/pam.d/su /etc/pam.d/system-auth /etc/passwd          \
        /etc/proftpd.conf /etc/securetty /etc/security/access.conf     \
        /etc/security/console.perms /etc/security/limits.conf          \
        /etc/shadow /etc/skel/.bashrc /etc/ssh/ssh_config          \
        /etc/ssh/sshd_config /etc/sysconfig/sendmail /etc/sysctl.conf \
        /etc/syslog.conf /etc/vsftpd.conf /etc/vsftpd.ftpusers         \
        /etc/vsftpd/vsftpd.conf /etc/X11/xdm/Xservers              \
        /etc/X11/gdm/gdm.conf /etc/X11/gdm/PreSession/Default          \
        /etc/X11/xinit/xserverrc /etc/X11/xdm/Xresources             \
        /etc/X11/xdm/kdmrc /root/.bash_profile /root/.bashrc         \
        /root/.cshrc /root/.tcshrc /usr/share/config/kdm/Xservers     \
        /etc/security/console.perms.d/50-default.perms             \
        /var/spool/cron;
do
      
 if [ -f ${FILE} ]; then
        # Backup files that exist (some might not)
        echo "Respaldo: `ls -lad ${FILE}`" >> $BakSec/RespaFiles.log
        /bin/cp -pf ${FILE} ${FILE}-BackSec-$ext
        echo ${FILE} `find ${FILE} -printf "%m"` >> $BakSec/RespaPerms.log
        fi
done

echo "Archivos de respaldo finalizado ..."
for DIR in \
         /etc/cron.* \
         /etc/pam.d \
         /etc/rc.d \
         /etc/skel \
         /etc/xinetd.d \
         /var/spool/cron;
do
         if [ -d ${DIR} ]; then
            # Backup Dir that exist (some might not)
            echo "Respaldo: `ls -ld ${DIR}`" >>$BakSec/RespaDIR.log
            /bin/cp -pr ${DIR} ${DIR}-BackSec-$ext
         fi
done

echo " "
echo "Directorios de respaldo finalizado ..."
find /var/log -printf "%h/%f %m\n" >> $BakSec/PermLogs.log
echo "Log's de sistema, Permisos actuales ... "
echo " "
echo "Servicios en sistema - Estado Actual ... "
/sbin/chkconfig --list >> $BakSec/ServicesRun.log
echo " "
echo " "
echo "Linux. El respaldo de los archivos esta completo... `date '+%Y/%m/%d'` "
echo " "
#####  guardar el script y realizar el siguiente procedimiento.

# chmod 500 do-backup.sh
# ./do-backup.sh
# ls –ltr


##### 6.1 Aplicar parches de seguridad en el sistema

# yum check-update >> patches.log
# more patches.log   ? revisar los parches necesarios y validar que no cause ningún impacto la actualización.

Para realizar la instalación de parches, realizar el siguiente procedimiento.
# yum clean all
# yum update glibc\*
# yum update yum\* rpm\* pyth\*
# yum clean all
# yum update mkinitrd nash
# yum update selinux\*
# yum update

##### 6.2 Configuración de TCP wrappers

# egrep libwrap /sbin/* /usr/sbin/* |sort

# touch /etc/hosts.allow
# chmod 644 /etc/hosts.allow
Se pueden asignar permisos por dirección IP o segmento de red.
# echo “sshd: , ,  …” >> /etc/hosts.allow

Crear archivo en el cual se limita la conexión de los equipos que no se hayan definido en hosts.allow.

# touch /etc/hosts.deny
# chmod 644 /etc/hosts.deny
# echo “ALL: ALL” >> /etc/hosts.deny

##### 6.3 Configuración de SSH

# cd /etc/ssh
# cp –p ssh_config ssh_config.bak
# vi ssh_config    

- Se debe eliminar el comentario “#” al inicio de la linea, modificar los siguientes valores:
                Protocol 2
        Port 22

Se debe realizar el siguiente procedimiento en el archivo sshd_config:

# cd /etc/ssh
# cp –p sshd_config sshd_config.bak
# vi sshd_config

- Se debe eliminar el comentario “#” al inicio de la linea, quedando los siguientes valores:
               Port 22
        Protocol 2
        LogLevel VERBOSE
        PermitRootLogin no
        RhostsRSAAuthentication no
        HostbasedAuthentication no
        IgnoreRhosts yes
        PasswordAuthentication no
        PermitEmptyPasswords no
        PasswordAuthentication yes
        PubkeyAuthentication yes
        Banner /etc/issue

# /etc/init.d/sshd restart

##### 7.1 Deshabilitar Servicios Estándar

# for SERVICE in \
amanda chargen chargen-udp cups cups-lpd daytime daytime-udp echo     \
echo-udp eklogin ekrb5-telnet finger gssftp imap imaps ipop2 ipop3 \
klogin krb5-telnet kshell ktalk ntalk rexec rlogin rsh rsync talk  \
tcpmux-server tftp time-dgram time-stream uucp;
do
    if [ -e /etc/xinetd.d/$SERVICE ]; then
                 echo "Disabling SERVICE ($SERVICE) `chkconfig ${SERVICE} off`."
    else
        echo "No existe el servicio ($SERVICE) en el sistema ..."
    fi
done

##### 7.2 Deshabilitar servicio de telnet si no se requiere en el sistema.

# /sbin/chkconfig telnet off

##### 7.3 Deshabilitar servicio de FTP si no se requiere en el sistema.

# chkconfig --levels 35 vsftpd off

##### 7.4 Deshabilitar servicio de rlogin/rsh/rcp.

# chkconfig rlogin off
# chkconfig rlogin off
# chkconfig rsh off
# chkconfig shell off

##### 7.5 Deshabilitar servicio de TFTP.

# chkconfig tftp off

##### 7.6 Deshabilitar servicio de printer.

# chkconfig cups off

##### 8.1 Habilitar daemon umask

# cp -p /etc/bashrc /etc/bashrc-sec
# cp -p /etc/csh.cshrc /etc/csh.cshrc-sec
# cp -p /etc/csh.login /etc/csh.login-sec
# cp -p /etc/profile /etc/profile-sec
# mask=’027’
# sed -e "s/002/$mask/" -e "s/027/$mask/" /etc/bashrc-sec > /etc/bashrc
# sed -e "s/002/$mask/" -e "s/027/$mask/" /etc/csh.cshrc-sec > /etc/csh.cshrc
# sed -e "s/002/$mask/" -e "s/027/$mask/" /etc/csh.login-sec > /etc/csh.login
# sed -e "s/002/$mask/" -e "s/027/$mask/" /etc/profile-sec > /etc/profile

##### 8.2 Cerrar email Server.

# echo "DAEMON=no" > /etc/sysconfig/sendmail
# echo "QUEUE=1h" >> /etc/sysconfig/sendmail
# chkconfig --list sendmail
# chkconfig --level 12345 sendmail off
# chkconfig --list sendmail
# chown root:root /etc/sysconfig/sendmail
# chmod 0644 /etc/sysconfig/sendmail

##### 8.3 Deshabilitar NFS Server

# chkconfig --level 35 nfs off
# chkconfig --level 35 portmapper off
# chkconfig --level 35 rpc off

##### 8.4 Deshabilitar NFS Client

# chkconfig --level 35 nfslock off
# chkconfig --level 35 autofs off

##### 8.5 Deshabilitar SMB (Windows File Sharing)

# chkconfig smb off

##### 8.6 Deshabilitar Squid  cache server

# chkconfig squid off

##### 8.7 Deshabilitar GUI Login

# cp -p /etc/inittab /etc/inittab.bak
# sed -e 's/id:5:initdefault:/id:3:initdefault:/' /etc/inittab.bak > etc/inittab
# chown root:root /etc/inittab
# chmod 0600 /etc/inittab

##### 8.8 Deshabilitar Web Server

# chkconfig apache off

##### 8.9 Deshabilitar SNMP

# chkconfig snmpd off

# vi /etc/snmp/snmpd.conf

# Cambiar la variable “public” por una diferente

        com2sec notConfigUser  default       public

##### 9.1 Modificaciones a los parámetros de Red

# cat <> /etc/sysctl.conf
#
# Las siguientes 11 lines son agregadas.
# Por la Coordinacion de Seguridad de Sistemas.
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
END_SCRIPT
# chown root:root /etc/sysctl.conf
# chmod 0600 /etc/sysctl.conf

##### 9.2 Modificaciones adicionales a los parámetros de Red

# cat <> /etc/sysctl.conf
# Las siguientes 4 líneas son agregadas.
# Por la coordinacion de Seguridad de Sistemas
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
END_SCRIPT

##### 9.3 Habilitar TCP SYN Cookie Protección

# echo "echo 1 > /proc/sys/net/ipv4/tcp_syncookies" >> /etc/rc.d/rc.local
# chown root:root /etc/rc.d/rc.local
# chmod 0600 /etc/rc.d/rc.local

##### 10.1 Captura de FTP e inetd connection tracing info

FILE=""
if [ -f /etc/vsftpd.conf ]; then
    FILE="/etc/vsftpd.conf"
else
    FILE="/etc/vsftpd/vsftpd.conf"
fi
cp -p $FILE $FILE-bak
if [ -f $FILE ]; then
    awk '/^#?xferlog_std_format/ \
        { print "xferlog_std_format=NO"; next };
    /^#?log_ftp_protocol/ \
        { print "log_ftp_protocol=YES"; next };
    { print }' ${FILE}-bak > ${FILE}
if [ `egrep -c log_ftp_protocol ${FILE}` == 0 ]; then
    echo "log_ftp_protocol=YES" >> ${FILE}
fi
chown root:root $FILE
chmod 0600 $FILE
echo "diff ${FILE}-bak $FILE"
diff ${FILE}-bak $FILE
else
echo "OK - No /etc/vsftpd.conf"
fi

##### 10.2 Validación de permisos en archivos Log’s de sistema

# echo "Log de Sistema."
for LogFile in \
    boot.log btmp cron dmesg ksyms httpd lastlog maillog mailman messages \
news pgsql rpmpkgs sa samba scrollkeeper.log secure spooler squid vbox \ wtmp ;
do
    if [ -e ${LogFile} ]; then
    chmod -R o-rwx ${LogFile}*
else
    echo "El archivo ($LogFile) No Existe."
    fi
done

##### 11.1 Validar permisos de los archivos passwd, shadow y group

# cd /etc

El siguiente comando asigna como dueño a root y al grupo sys.
# chown root:sys passwd shadow group

El siguiente comando asigna los permisos de lectura y escritura al dueño, y al grupo y a others solo permisos de lectura.
# chmod 644 passwd group

El siguiente comando solo asigna permisos de lectura a root.
# chmod 400 shadow

##### 11.2 Búsqueda de archivos con permisos de escritura para todos

# for PART in $( grep -v '^#' /etc/fstab|awk '( $3 ~ "ext[23]" ) { print $2 }' );
do
     find $PART -xdev -type f \( -perm -0002 -a ! -perm -1000 \) -print >> \
      /tmp/file-write-all.txt
done

##### 11.3 Búsqueda de archivos sin un dueño o group asignado

# for PART in $(grep -v '^#' /etc/fstab|awk '( $3 ~ "ext[23]" ) { print $2 }' );
do
       find $PART -xdev -nouser -o -nogroup -print > /tmp/nouser-group.txt
done

##### 12.1 Remover uso de .rhosts  en el archivo /etc/pam.conf

# ls -la /etc/pam.d/* > /tmp/pam/pam-before-bak
# cd /etc/pam.d
# for FILE in `find . -type f -exec grep -l rhosts_auth {} \;`; do
      echo "Removing .rhosts support in ${FILE}."
      grep -v rhosts_auth $FILE > /tmp/pam/${FILE}.tmp
      /bin/cp -f /tmp/pam/${FILE}.tmp $FILE
      chown root:root $FILE
      chmod 0644 $FILE
done

# ls -la /etc/pam.d/* > /tmp/pam/pam-After.tmp

##### 12.2 Crear archivo /etc/ftpusers, para limitar el uso de FTP

# for NAME in `cut -d: -f1 /etc/passwd`; do
    if [ `id -u $NAME` -lt 500 ]; then
    echo $NAME >> /etc/ftpusers
fi
done
# chown root:root /etc/ftpusers
# chmod 0600 /etc/ftpusers

##### 12.3 Restringir el uso de At Jobs y Crontab

# ls -lad /etc/cron* /var/spool/cron*
# chown root:root /etc/crontab
# chmod 0400 /etc/crontab
# chown -R root:root /var/spool/cron
# chmod -R go-rwx /var/spool/cron
# ls | grep cron | grep -v BackSec | xargs chown -R root:root
# ls | grep cron | grep -v BackSec | xargs chmod -R go-rwx
# echo "Despues..."
# ls -lad /etc/cron* /var/spool/cron*

##### 12.4 Limitar root login a system console

# echo console >> /etc/securetty

##### 12.5 Activación de la auditoria en el sistema

#!/bin/bash
#


##### 13.1 Parámetros de seguridad en password.

# cd /etc
# cp –p /etc/login.defs /etc/login.defs-bak
# vi /etc/login.defs
    awk '($1 ~ /^PASS_MAX_DAYS/) { $2="60" }
    ($1 ~ /^PASS_MIN_DAYS/) { $2="7" }
    ($1 ~ /^PASS_WARN_AGE/) { $2="10" }
    ($1 ~ /^PASS_MIN_LEN/) { $2="8" }
    { print }' login.defs-bak > login.defs

Realizar una copia de Respaldo del archivo de configuración.

# cp –p /etc/pam.d/passwd /etc/pam.d/passwd.Bak-Sec
# vi /etc/pam.d/passwd
# vi /etc/pam.d/passwd

Agregar las siguientes líneas al final del archivo.

password   required    /lib/security/pam_cracklib.so minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1
password    required    /lib/security/pam_unix.so nullok use_authtok md5 shadow remember=5

##### 13.2 Verificar que no existan cuentas con null password

# awk -F: '( $2 == "" ) { print $1 }' /etc/shadow

Asignar password a aquellas cuentas que se encuentren en NP (null password) de la siguiente forma.

# passwd cuenta

##### 13.3 Asignación de Shell no valida para cuentas por default en S.O.

# cd /etc
# for NAME in `cut -d: -f1 /etc/passwd`; do
UID=`id -u $NAME`
if [ $UID -lt 500 -a $NAME != 'root' ]; then
usermod -L -s /dev/null $NAME
fi
done
# ls -la /etc/passwd
# chown root:root /etc/passwd
# chmod 0644 /etc/passwd

##### 13.4 Verificar que no existan entradas ‘+’ en el passwd y group

# grep '^+:' /etc/passwd /etc/shadow /etc/group

##### 13.5 Verificar la no existencia de cuentas con UID 0 igual a root

# grep :0: /etc/passwd

##### 13.6 Home Directories con permisos de 750 o mas restrictivos.

# ls -ld `more /etc/passwd | cut -f6 -d:`

Para cambiar los permisos se realiza de la siguiente forma.

# chmod 750 Home_User

##### 13.7 Remover el uso de archivos .netrc del Sistema operativo

# find / -name .netrc -exec rm -f {} \;

##### 14.1 Creación de banner de acceso


# chown root:root /etc/motd
# chmod 644 /etc/motd

##### 14.2 Creación de banner para acceso por FTP

# cd /etc
     if [ -d vsftpd ]; then
     cd vsftpd
fi
# if [ -e vsftpd.conf ]; then
   echo "ftpd_banner=Unicamente Usuarios Autorizados. Toda la Actividad \
         Será monitoreada y reportada." >> vsftpd.conf
fi

##### 15.1 Creación de Syslinks para archivos de riesgo

# for file in /.rhosts /.shosts /etc/hosts.equiv
do
rm -f $file
ln -s /dev/null $file
done

#####FIN Ardening Linux Centos

1 comentario:

donnaj edwards dijo...

Interesting Article. Hoping that you will continue posting an article having a useful information. Implementing an Azure Data Solution course DP-200