Tutorial 2: Detecção de formato de arquivo ZIP criptografado

Este tutorial demonstra como gravar um script personalizado para detectar arquivos ZIP (criptografados) protegidos por senha. Embora um servidor de detecção
Symantec Data Loss Prevention
possa detectar arquivos ZIP criptografados, um agente de endpoint não o faz. A solução que é fornecida aqui permite contornar este problema.
Este script detecta se um arquivo ZIP está criptografado verificando se o bit de criptografia está ativado na primeira entrada do arquivo. Como os arquivos ZIP precisam ser criptografados um por vez, esse script só funcionará se o primeiro arquivo ou todos os arquivos no arquivo ZIP estiverem criptografados.
Este tutorial supõe que você concluiu o primeiro tutorial.
  1. Para detectar um formato de arquivo ZIP criptografado
  2. Crie vários arquivos ZIP protegidos por senha (15 ou mais) e os coloque em um diretório como, por exemplo,
    c:\temp\files\ZIP
    .
  3. Crie um segundo conjunto de arquivos ZIP (5 ou mais) que não estejam criptografados para obter resultados correspondentes e resultados não correspondentes.
    Coloque esses arquivos ZIP não criptografados em um segundo diretório, como
    c:\temp\files\ZIP2
    .
  4. Inicie o utilitário analisador de tipo de arquivo (
    analyzer_gui.exe
    ).
  5. Adicione o diretório
    c:\temp\files\ZIP
    como o conjunto de dados.
    Adicione também o diretório
    c:\temp\files\ZIP2
    ao conjunto de dados.
  6. Digite e selecione os parâmetros do conjunto de dados necessários:
    • Filtro de nome do arquivo
      :
      [\w\s]+.[\w]+
    • Número de bytes
      :
      1024
    • Tamanho do bloco
      :
      1
    • Tipos de analisadores
      : BYTE
  7. Clique em
    Analisar conjunto de dados
    .
  8. Com COLUMN_MATCH selecionado, clique em
    Analisar tabela de dados
    .
    O utilitário destaca a correspondência de bytes em todos os arquivos. Observe a correspondência exata nos primeiros 6 bytes de todos os arquivos. Observe também que o sétimo byte é 0 para os arquivos ZIP não criptografados. O sétimo byte é o bit de criptografia.
  9. No campo
    Solução
    , digite o seguinte 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. A solução deve corresponder apenas aos arquivos ZIP do conjunto de dados criptografados. Os arquivos ZIP não criptografados devem ser exibidos no painel de “Arquivos sem correspondência”.
    • $pktag=ascii('PK');
      A primeira instrução atribui à variável "$pktag" o valor "PK". Se alternar o tipo de analisador para
      ASCII
      , você verá que os dois primeiros bytes de todos os arquivo ZIP são "P" e "K".
    • $frecord=getHexStringValue('0304');
      A segunda instrução atribui à variável “$frecord” o valor “0304", que são o terceiro e o quarto bytes dos arquivos ZIP. (Troque novamente para BYTE para que o tipo do analisador confirme este valor.)
    • $pkbytes=getBinaryValueAt($data, 0x0, 2);
      A terceira instrução obtém o valor binário dos primeiros dois bytes.
    • assertTrue($pktag == $pkbytes);
      A quarta instrução compara os valores das variáveis “$pktag” e “$pkbytes”, procurando uma correspondência exata de “P” e “K”. Se os valores corresponderem, é obtido o valor assertTrue.
    • $recordbytes=getBinaryValueAt($data, 0x2, 2);
      A quinta instrução verifica o valor binário do terceiro e do quarto bytes (inicie no terceiro byte e conte 2). Aqui os valores (no modo BYTE) são “03" e “04".
    • assertTrue($frecord == $recordbytes);
      A sexta instrução compara os valores das variáveis “$frecord” e “$recordbytes”. Se o valor retornado (“$recordbytes”) corresponder ao valor atribuído à variável “$frecord” (“03"” e “04”), será obtido o valor assertTrue.
    • $cryptByte=getBinaryValueAt($data, 0x6, 1);
      A sétima instrução obtém o valor binário no sétimo byte (coluna 6).
    • $encrypted=mod($cryptByte, 2);
      A oitava instrução divide o valor do sétimo byte (atribuído à variável “$cryptByte”) por "2". Depois ela atribui este restante à variável “$encrypted”.
    • assertTrue($encrypted == 1);
      A nona instrução verifica o valor da variável “$encrypted”. Se o valor for zero (nenhum restante), o arquivo ZIP não estará criptografado. Se houver um restante, o arquivo ZIP estará criptografado.