VERIFICAR INTEGRIDAD DE ARCHIVOS CON HASH MD5

          El MD5 es un algoritmo hash unidireccional y se puede utilizar para ayudar a determinar la integridad de un archivo, proporcionando una firma digital de 128 bits. Esta firma digital es como una huella digital para un archivo. Nos permite determinar en las réplicas de archivos entre servidores que no han sido alterados de ninguna forma, el cambio de un solo byte en un archivo resultará en un hash MD5 diferente.

             Cuando el valor de suma de comprobación MD5 coincide perfectamente, se confirma que nadie ha puesto en riesgo la seguridad y la integridad digital de un archivo y, asimismo, que es una copia precisa del archivo original. Cuando hablamos de verificar la integridad de un archivo, estamos hablando de verificar que los datos de una copia son exactamente iguales a los del archivo original. Esta verificación nos permite evitar problemas de corrupción de datos y asegurarnos que los datos han sido almacenados correctamente.

             Con respecto a la colisión de hash (2 archivos diferentes con un mismo hash) es poco probable que suceda, ya que por lo general tendría que realizarlo una persona (hacker).- Para el caso de verificar replicas debería bastar con este sistema criptográfico.-

PROCEDIMIENTO VERIFICAR INTEGRIDAD DE ARCHIVOS.

1.- Tener acceso a los servidores vía SSH desde servidor BASE que se utilizara, la cuenta debe tener permisos de escritura en su HOME.-

2.- Para realizar el pareo de archivos (Verificar integridad), se debe generar un archivo de texto plano, con la ruta completa de todos los archivos que desea verificar, tal como el siguiente ejemplo.

/home/appl/certifica/web/cgi/verifica.cgi

/home/appl/certifica/web/cgi/calculo.cgi

/home/appl/certifica/web/cgi/presenta.cgi

find /home/appl/ -type f -iname “*”

find /home/appl/ -type f \( -name “*” -o -name “*.js” \) -print

2.- Teniendo el archivo a verificar, se procede a generar el hash MD5 para cada archivo, desde el servidor que indiquen como PIVOTE. Obteniendo el siguiente archivo, en que la primera columna corresponde al hash MD5 del archivo indicado (Firma digital del archivo).

d364668873c67260fcce381a836093b6 /home/appl/certifica/web/cgi/verifica.cgi

66ac10e7ac99db2da23926d1cc3512db /home/appl/certifica/web/cgi/calculo.cgi

8a321b2db73dc8cd006a4ca5c3145905 /home/appl/certifica/web/cgi/presenta.cgi

       Este archive se puede obtener mediante el siguiente SCRIPT, ejecutándolo en el servidor PIVOTE.

#!/usr/bin/sh

archver=/home/pepe/granja-inor.ver

archhas=/home/pepe/granja-inor.has

if [ -f  $archhas ];

then

    rm -rf $archhas

fi

for url in $(cat $archver)

do

   /home/pepe/md5sum $url >> $archhas

done

3.- Este archivo con sus respectivos hash, se copia a cada servidor que componen la granja. Esto se realiza para que el proceso de verificación no sea invasivo. Al no ser un proceso invasivo, es fácil detectar problemas que están ocurriendo en el momento.

4.- Se lanza el Script que realiza el pareo en los servidores. El SCRIPT genera un archivo de LOG con los errores detectados, en el cual existen 2 tipos de errores, los cuales los anexa al final del archivo verificado, correspondiendo a :

         FAILED                                   = Indica que el archivo es diferente al original del servidor PIVOTE.

         FAILED open or read           = Indica que el archivo no existe o no se puede leer.

 Con esto nos aseguraríamos de no tener problemas con componentes a nivel de Aplicaciones, Sistema Operativo, librerías, configuraciones de ambientes, programación, etc….

Esto se puede realizar con el siguiente SCRIPT. Este script se debe ejecutar desde el servidor BASE.- El Script funciona en forma correcta. Solo se deben modificar las rutas absolutas. A este programa se le pasan 5 parámetros, los cuales son gatillados desde un MENU, el cual no vale la pena exponerlo, ya que solo se da una idea de cómo realizar este procedimiento.- Si alguien tiene alguna duda, puede consultar…

#!/usr/bin/ksh

# Manejo de colores

NONE=’\033[00m’

RED=’\033[01;31m’

GREEN=’\033[01;32m’

YELLOW=’\033[01;33m’

PURPLE=’\033[01;35m’

CYAN=’\033[01;36m’

WHITE=’\033[01;37m’

BOLD=’\033[1m’

UNDERLINE=’\033[4m’

granja=$1

server=$2

cuenta=$3

ruta=$4

sum=$5

archver=/usr01/home/user/verifica/$granja.ver

archser=/usr01/home/user/verifica/$granja.txt

archlog=/usr01/home/user/verifica/$granja.log

archbak=/usr01/home/user/verifica/$granja.bak

correo=/usr01/home/user/verifica/correo

archhas=$granja.has

vi $archver

echo ”          Ejecuta el proceso ( Si – No ) : \\c “

read op

echo “${NONE}”

if [ “$op” != “Si” ]; then

   exit

fi

if [ -f  $archlog ];

then

    rm -rf $archlog

fi

echo ”         ${GREEN}  VERIFICANDO INTEGRIDAD ARCHIVOS ${NONE}”

echo “”

echo ”     ${GREEN}   << Copiando datos a servidor PIVOTE >>${NONE}”

scp $archver $cuenta@$server:$ruta

echo ”      ${GREEN}  << Generando HAS en servidor PIVOTE >>${NONE}”

ssh $cuenta@$server “bash $ruta$granja.sh”

scp $cuenta@$server:$ruta$archhas /usr01/pepe/verifica

echo ” ${GREEN}  << Copiando archivo HAS a servidores de GRANJA >>${NONE}”

for servi in $(cat $archser)

  do

    echo $servi

    scp /usr01/pepe/verifica/$archhas $cuenta@$servi:$ruta 1> /dev/null 2> /dev/null

  done

echo “INICIO  = `date +%d/%m/%Y`   `date +%H:%M:%S`  $1”  >> $archlog

echo “${GREEN}<< Realizando revision de integridad de archivos en GRANJAS >>${NONE}”

for servi in $(cat $archser)

  do

    echo $servi

    echo ”   $servi” >> $archlog

    ssh $cuenta@$servi $sum -c $ruta$archhas | grep -v OK | grep -v “La suma coincide” >> $archlog

  done

echo “F I N  = `date +%d/%m/%Y`   `date +%H:%M:%S`”  >> $archlog

echo ”  ${GREEN} << FIN PROCESO DE VERIFICACION INTEGRIDAD ${NONE}>>”

echo “”

echo “”

cat $archlog

echo “${GREEN}<<    FIN REVISION INTEGRIDAD DE ARCHIVOS    >> ${NONE}”

echo “${GREEN}<<  Este LOG lo puede rescatar desde${NONE} ${RED} $archlog  ${NONE}${GREEN}>>${NONE}”

echo $1 > /usr01/home/monsyg/verifica/archlog

cp $archlog $archbak

  touch $correo

  echo “To:pepito@corr.cl” >> $correo

  echo “From:asistente@corr.cl” >> $correo

  echo “Subject:Chequeo Integridad archivos <<  $1  >> `date +%d/%m/%Y`   `date +%H:%M:%S`” >> $correo

  echo “” >> $correo

  echo ”  Se chequearon integridad a los siguientes archivos ($server) :” >> $correo

  echo “***************************************************” >> $correo

  cat $archhas >> $correo

  echo “***************************************************” >> $correo

  echo “Resultado del proceso : ” >> $correo

  echo “***************************************************” >> $correo

  cat $archlog  >> $correo

  echo “***************************************************” >> $correo

  echo “” >> $correo

  echo “” >> $correo

  echo “Atte.” >> $correo

  echo “Sala de Operaciones” >> $correo

  echo “Sitio Web – http://integridad.org” >> $correo

  cat $correo | mail -s destino1@sii.cl

  rm -f $correo

read j

Esta entrada fue publicada en Unix - Linux. Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.