Tutorial 2: Detección de un formato de archivo ZIP cifrado

Este tutorial demuestra cómo escribir un script personalizado para detectar archivos ZIP (cifrados) protegidos por contraseña. Mientras que un servidor de detección
Symantec Data Loss Prevention
puede detectar archivos ZIP cifrados, un agente endpoint no puede hacerlo. La solución que se proporciona aquí permite resolver este problema.
Este script detecta si un archivo ZIP esté cifrado al comprobar si el bit de cifrado se habilita en la primera entrada del archivo. Dado que los archivos ZIP solo se pueden cifrar por archivo, este script únicamente funciona si se cifran todos los archivos o el primer archivo en el archivo de almacenamiento ZIP.
Este tutorial asume que usted completó el primer tutorial.
  1. Para detectar un formato de archivo ZIP cifrado
  2. Cree varios archivos ZIP protegidos por contraseña (15 o más) y póngalos en un directorio como
    c:\temp\files\ZIP
    .
  3. Cree el segundo conjunto de archivos ZIP (5 o más) que no se cifren, de modo que haya resultados coincididos y no coincididos.
    Coloque estos archivos ZIP no cifrados en un segundo directorio como
    c:\temp\files\ZIP2
    .
  4. Inicie la utilidad Analizador de tipo de archivo (
    analyzer_gui.exe
    ).
  5. Agregue el directorio
    c:\temp\files\ZIP
    como conjunto de datos.
    Además agregue el directorio
    c:\temp\files\ZIP2
    al conjunto de datos.
  6. Escriba y seleccione los parámetros necesarios del conjunto de datos:
    • File Name Filter
      (Filtro de nombre de archivo):
      [\w\s]+.[\w]+
    • Número de bytes
      :
      1024
    • Tamaño del pedazo
      :
      1
    • Tipos de analizador
      : BYTE
  7. Haga clic en
    Analizar conjunto de datos
    .
  8. Con COLUMN_MATCH seleccionado, haga clic en
    Analizar los datos de la tabla
    .
    La utilidad resalta las coincidencias de byte en todos los archivos. Tenga en cuenta las coincidencias exactas de los primeros 6 bytes de todos los archivos. Tenga en cuenta además que el séptimo byte es cero para los archivos ZIP no cifrados. El séptimo byte es el bit de cifrado.
  9. En el campo
    Solución
    , escriba el siguiente script:
    $pktag=ascii('PK'); $frecord=getHexStringValue('0304'); $pkbytes=getBinaryValueAt($data, 0x0, 2); assertTrue($pktag == $pkbytes); $recordbytes=getBinaryValueAt($data, 0x2, 2); assertTrue($frecord == $recordbytes); $cryptByte=getBinaryValueAt($data, 0x6, 1); $encrypted=mod($cryptByte, 2); assertTrue($encrypted == 1);
  10. La solución debe coincidir solamente con los archivos ZIP en el conjunto de datos que se cifra. Los archivos ZIP que no se cifran deben aparecer en el panel “Archivos sin coincidencias”.
    • $pktag=ascii('PK');
      La primera expresión asigna la variable "$pktag" el valor "PK". Si cambia el tipo de analizador a
      ASCII
      , verá que los primeros 2 bytes de todos los archivos ZIP son "P" y "K".
    • $frecord=getHexStringValue('0304');
      La segunda expresión asigna la variable "$frecord" al valor "0304", que es el tercer y cuarto byte de los archivos ZIP. (Volver a cambiar a BYTE para que el Tipo de analizador confirme este valor).
    • $pkbytes=getBinaryValueAt($data, 0x0, 2);
      La tercera expresión obtiene el valor binario de los primeros 2 bytes.
    • assertTrue($pktag == $pkbytes);
      La cuarta expresión compara los valores de las variables “$pktag” y “$pkbytes”, ya que busca la coincidencia exacta de “P” y “K”. Si los valores coinciden, se obtiene el valor assertTrue.
    • $recordbytes=getBinaryValueAt($data, 0x2, 2);
      La quinta expresión comprueba el valor binario del tercer y el cuarto byte (comienza en el tercer byte y cuenta 2). Aquí los valores (en modo BYTE) son “03” y “04”.
    • assertTrue($frecord == $recordbytes);
      La sexta expresión compara los valores de las variables “$frecord” y “$recordbytes”. Si el valor obtenido (“$recordbytes”) coincide con el valor asignado a la variable “$frecord” (“03” y “04”), se obtiene el valor assertTrue.
    • $cryptByte=getBinaryValueAt($data, 0x6, 1);
      La séptima expresión obtiene el valor binario en el séptimo byte (columna 6).
    • $encrypted=mod($cryptByte, 2);
      La octava expresión divide el valor del séptimo byte (como asignado a la variable "$cryptByte") por "2". Luego, asigna el resto a la variable “$encrypted”.
    • assertTrue($encrypted == 1);
      La novena expresión comprueba el valor de la variable “$encrypted”. Si el valor es cero (ningún resto), el archivo ZIP no se cifra. Si hay un resto, se cifra el archivo ZIP.