##### 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:
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 <
#
# 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 <
# 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:
Interesting Article. Hoping that you will continue posting an article having a useful information. Implementing an Azure Data Solution course DP-200
Publicar un comentario