Interação com Check Point SandBlast através da API

Interação com Check Point SandBlast através da API

Este artigo será útil para aqueles que estão familiarizados com tecnologias Check Point de emulação de arquivos (Emulação de Ameaças) e limpeza proativa de arquivos (Threat Extraction) e desejam dar um passo em direção à automação dessas tarefas. A Check Point possui Threat Prevention API, que funciona tanto na nuvem quanto em dispositivos locais, e funcionalmente é idêntica à verificação de arquivos nos fluxos de tráfego web/smtp/ftp/smb/nfs. Este artigo é em parte uma interpretação autoral de um conjunto de artigos da documentação oficial, mas baseado na minha experiência de uso e em exemplos próprios. Também neste artigo você encontrará coleções autorais do Postman para trabalhar com a Threat Prevention API.

Principais abreviações

A Threat Prevention API opera com três componentes principais, que são chamados no API através dos seguintes valores de texto:

av — componente Anti-Virus, responsável pela análise de assinatura de ameaças conhecidas.

te — componente Threat Emulation, responsável pela verificação de arquivos na sandbox, e emissão de um veredicto malicioso (malicious)/limpo (benign) após a emulação.

extraction — componente Threat Extraction, que é responsável pela rápida conversão de documentos de escritório em uma forma segura (na qual todo conteúdo potencialmente malicioso é removido), para sua rápida entrega aos usuários/sistemas.

Estrutura da API e principais limitações

A Threat Prevention API utiliza apenas 4 requisições — upload, query, download e quota. No cabeçalho de todas as quatro requisições, deve-se passar a chave da API, utilizando o parâmetro Authorization. À primeira vista, a estrutura pode parecer muito mais simples do que no Management API, mas a quantidade de campos nas requisições upload e query e a estrutura dessas requisições são bastante complexas. Elas podem ser funcionalmente comparadas aos perfis de Threat Prevention na política de segurança do gateway/sandbox.

Atualmente, há uma única versão da Threat Prevention API — 1.0, no URL para chamadas da API deve-se especificar v1 na parte em que é necessário indicar a versão. Ao contrário da Management API, indicar a versão da API no endereço URL é obrigatório, senão a requisição não será executada.

O componente Anti-Virus, quando chamado sem outros componentes (te, extraction), atualmente suporta apenas requisições query com somas de hash md5. Threat Emulation e Threat Extraction também suportam somas de hash sha1 e sha256.

É muito importante não cometer erros nas requisições! A solicitação pode ser executada sem erro, mas não completamente. Antecipando um pouco, vamos considerar o que pode acontecer em caso de erros/tipografias nas solicitações.

Solicitação com erro na palavra reports(reportss)

{ "request":  [  

		{	
			"sha256": {{sha256}},
			"features": ["te"] , 
			"te": {
				"images": [
                    {
                        "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
                        "revision": 1
                    }
                ],
                reportss: ["tar", "pdf", "xml"]
            }
		}
	] 
}

Na resposta não haverá erros, mas também nenhuma informação sobre os relatórios.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "A solicitação foi totalmente respondida."
      },
      "sha256": "9cc488fa6209caeb201678f8360a6bb806bd2f85b59d108517ddbbf90baec33a",
      "file_type": "pdf",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicioso"
            },
            "status": "encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicioso",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "A solicitação foi totalmente respondida."
        }
      }
    }
  ]
}

Aqui está a solicitação sem erro na chave reports.

{ "request":  [  

		{	
			"sha256": {{sha256}},
			"features": ["te"] , 
			"te": {
				"images": [
                    {
                        "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
                        "revision": 1
                    }
                ],
                reports: ["tar", "pdf", "xml"]
            }
		}
	] 
}

Recebemos uma resposta que já contém IDs para o download dos relatórios.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "A solicitação foi totalmente respondida."
      },
      "sha256": "9cc488fa6209caeb201678f8360a6bb806bd2f85b59d108517ddbbf90baec33a",
      "file_type": "pdf",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicioso",
              "full_report": "b684066e-e41c-481a-a5b4-be43c27d8b65",
              "pdf_report": "e48f14f1-bcc7-4776-b04b-1a0a09335115",
              "xml_report": "d416d4a9-4b7c-4d6d-84b9-62545c588963"
            },
            "status": "encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicioso",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "A solicitação foi totalmente respondida."
        }
      }
    }
  ]
}

Se um chave API incorreta/vencida for enviada, teremos um erro 403 na resposta.

SandBlast API: na nuvem e em dispositivos locais.

As solicitações da API podem ser enviadas para dispositivos Check Point que têm o componente (blade) de Emulação de Ameaças habilitado. O endereço para as solicitações deve usar o ip/url do dispositivo e a porta 18194 (por exemplo — https://10.10.57.19:18194/tecloud/api/v1/file/query). Также следует убедиться в том, что политикой безопасности на устройстве разрешено такое подключение. Авторизация через API ключ на локальных устройствах по умолчанию desligada e a chave Authorization nos cabeçalhos das solicitações pode não ser enviada de forma alguma.

As solicitações da API para a nuvem CheckPoint devem ser enviadas para o endereço te.checkpoint.com (por exemplo — https://te.checkpoint.com/tecloud/api/v1/file/query). API ключ можно получить в виде триальной лицензии на 60 дней, обратившись к партнерам Check Point или в локальный офис компании.

Nos dispositivos locais, a Extração de Ameaças ainda não é suportada de forma padrão Threat Prevention API e deve ser utilizado a API de Prevenção de Ameaças para o Security Gateway (sobre isso falaremos com mais detalhes no final do artigo).

Dispositivos locais não suportam a solicitação quota.

Fora isso, não há diferenças entre as solicitações para dispositivos locais e para a nuvem.

Chamada da API de Upload

O método utilizado é — POST

O endereço para a chamada é — https://<service_address>/tecloud/api/v1/file/upload

A solicitação consiste em duas partes (form-data): um arquivo destinado à emulação/limpeza e o corpo da solicitação com o texto.

A solicitação de texto não pode estar vazia, mas pode não conter nenhuma configuração. Para que a solicitação seja bem-sucedida, é necessário enviar pelo menos o seguinte texto na solicitação:

O mínimo necessário para a solicitação de upload

HTTP POST

https://<service_address>/tecloud/api/v1/file/upload

Cabeçalhos:

Authorization: <api_key>

Corpo

{

"request": {

}

}

Novo projeto

Novo projeto

Nesse caso, o arquivo para processamento será enviado de acordo com os parâmetros padrão: componente — te, imagens do SO — Win XP e Win 7, sem geração de relatório.

Comentários sobre os principais campos na solicitação de texto:

file_name e file_type podem ser deixados em branco ou não enviados, pois não são informações muito úteis ao carregar um arquivo. Na resposta da API, esses campos serão preenchidos automaticamente com base no nome do arquivo carregado, e as informações no cache ainda deverão ser procuradas pelas somas de hash md5/sha1/sha256.

Exemplo de solicitação com file_name e file_type vazios

{

"request": {

"file_name": "",

"file_type": "",

}

}

features — uma lista que indica a funcionalidade necessária ao processar no sandbox — av (Anti-Vírus), te (Emulação de Ameaças), extraction (Extração de Ameaças). Se esse parâmetro não for enviado, apenas o componente padrão — te (Emulação de Ameaças) — será ativado.

Para habilitar a verificação nos três componentes disponíveis, é necessário especificar esses componentes na solicitação da API.

Exemplo de solicitação com verificação em av, te e extraction

{ "request": [  

		{	
			"sha256": {{sha256}},
			"features": ["av", "te", "extraction"]  
		}
	] 
}

Chaves na seção te

images — uma lista, dentro da qual devem ser especificados dicionários com id e número de revisão dos sistemas operacionais nos quais a verificação será realizada. Os IDs e números de revisão são os mesmos para todos os dispositivos locais e para a nuvem.

Lista de sistemas operacionais e revisões

Available OS Image ID

Revision

Image OS and Application

e50e99f3-5963-4573-af9e-e3f4750b55e2

1

Microsoft Windows: XP — 32bit SP3
Office: 2003, 2007
Adobe Acrobat Reader: 9.0
Flash Player 9r115 e ActiveX 10.0
Java Runtime: 1.6.0u22

7e6fe36e-889e-4c25-8704-56378f0830df

1

Microsoft Windows: 7 — 32bits
Office: 2003, 2007
Adobe Acrobat Reader: 9.0
Flash Player: 10.2r152 (Plugin& ActiveX)
Java Runtime: 1.6.0u0

8d188031-1010-4466-828b-0cd13d4303ff

1

Microsoft Windows: 7 — 32bits
Office: 2010
Adobe Acrobat Reader: 9.4
Flash Player: 11.0.1.152 (Plugin & ActiveX)
Java Runtime: 1.7.0u0

5e5de275-a103-4f67-b55b-47532918fa59

1

Microsoft Windows: 7 — 32bits
Office: 2013
Adobe Acrobat Reader: 11.0
Flash Player: 15 (Plugin & ActiveX)
Java Runtime: 1.7.0u9

3ff3ddae-e7fd-4969-818c-d5f1a2be336d

1

Microsoft Windows: 7 — 64bits
Office: 2013 (32bits)
Adobe Acrobat Reader: 11.0.01
Flash Player: 13 (Plugin & ActiveX)
Java Runtime: 1.7.0u9

6c453c9b-20f7-471a-956c-3198a868dc92 

 

1 

Microsoft Windows: 8.1 — 64bits
Office: 2013 (64bits)
Adobe Acrobat Reader: 11.0.10
Flash Player: 18.0.0.160 (Plugin & ActiveX)
Java Runtime: 1.7.0u9

10b4a9c6-e414-425c-ae8b-fe4dd7b25244 

 

1

Microsoft Windows: 10
Office: Professional Plus 2016 en-us  
Adobe Acrobat Reader: DC 2015 MUI
Flash Player: 20 (Plugin & ActiveX)
Java Runtime: 1.7.0u9

Se a chave images não for especificada, a emulação será realizada em imagens recomendadas pela Check Point (atualmente, estas são Win XP e Win 7). Essas imagens são recomendadas com base no melhor equilíbrio entre desempenho e taxa de captura.

relatórios — lista de relatórios que solicitamos caso o arquivo se revele malicioso. As seguintes opções estão disponíveis:

  1. sumário — arquivo .tar.gz que contém o relatório da emulação sobre todos imagens solicitadas (tanto na forma de página html quanto componentes como vídeo do OS do emulador, dump do tráfego de rede, relatório em json e a própria amostra em um arquivo protegido por senha). Na resposta, buscamos a chave — summary_report para o download posterior do relatório.

  2. pdf — documento da emulação em um imagem, que muitos costumam receber através do Smart Console. Na resposta, buscamos a chave — pdf_report para o download posterior do relatório.

  3. xml — documento da emulação em um imagem, conveniente para o posterior parsing dos parâmetros no relatório. Na resposta, buscamos a chave — xml_report para o download posterior do relatório.

  4. tar — arquivo .tar.gz que contém o relatório da emulação em um imagens solicitadas (tanto na forma de página html quanto componentes como vídeo do OS do emulador, dump do tráfego de rede, relatório em json e a própria amostra em um arquivo protegido por senha). Na resposta, buscamos a chave — full_report para o download posterior do relatório.

O que há dentro do relatório sumárioInteração com Check Point SandBlast através da API

As chaves full_report, pdf_report, xml_report estão no dicionário para cada SO

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "A solicitação foi totalmente atendida."
      },
      "sha256": "9e6f07d03b37db0d3902bde4e239687a9e3d650e8c368188c7095750e24ad2d5",
      "file_type": "html",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicioso",
              "full_report": "8d18067e-b24d-4103-8469-0117cd25eea9",
              "pdf_report": "05848b2a-4cfd-494d-b949-6cfe15d0dc0b",
              "xml_report": "ecb17c9d-8607-4904-af49-0970722dd5c8"
            },
            "status": "encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          },
          {
            "report": {
              "verdict": "malicioso",
              "full_report": "d7c27012-8e0c-4c7e-8472-46cc895d9185",
              "pdf_report": "488e850c-7c96-4da9-9bc9-7195506afe03",
              "xml_report": "e5a3a78d-c8f0-4044-84c2-39dc80ddaea2"
            },
            "status": "encontrado",
            "id": "6c453c9b-20f7-471a-956c-3198a868dc92",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicioso",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "A solicitação foi totalmente atendida."
        }
      }
    }
  ]
}

A chave summary_report — é única para a emulação como um todo

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "ENCONTRADO",
        "message": "A solicitação foi totalmente respondida."
      },
      "sha256": "d57eadb7b2f91eea66ea77a9e098d049c4ecebd5a4c70fb984688df08d1fa833",
      "file_type": "exe",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicioso",
              "full_report": "c9a1767b-741e-49da-996f-7d632296cf9f",
              "xml_report": "cc4dbea9-518c-4e59-b6a3-4ea463ca384b"
            },
            "status": "encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          },
          {
            "report": {
              "verdict": "malicioso",
              "full_report": "ba520713-8c0b-4672-a12f-0b4a1575b913",
              "xml_report": "87bdb8ca-dc44-449d-a9ab-2d95e7fe2503"
            },
            "status": "encontrado",
            "id": "6c453c9b-20f7-471a-956c-3198a868dc92",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicioso",
        "severity": 4,
        "confidence": 3,
        "summary_report": "7e7db12d-5df6-4e14-85f3-2c1e29cd3e34",
        "status": {
          "code": 1001,
          "label": "ENCONTRADO",
          "message": "A solicitação foi totalmente respondida."
        }
      }
    }
  ]
}

É possível solicitar relatórios em tar, xml e pdf ao mesmo tempo, e também um resumo em tar e xml. Não é possível solicitar um relatório resumo e pdf ao mesmo tempo.

Chaves na seção de extração

Para extração de ameaças, são usados apenas dois chaves:

método — pdf (conversão para pdf, usado por padrão) ou clean (limpeza de conteúdo ativo).

extracted_parts_codes — lista de códigos para remoção de conteúdo ativo, aplicável apenas para o método clean

Códigos para remoção de conteúdo de arquivos

Código

Descrição

1025

Objetos Vinculados

1026

Macros e Código

1034

Hipertlinks Sensíveis

1137

Ações PDF GoToR

1139

Ações de Lançamento PDF

1141

Ações URI PDF

1142

Ações de Som PDF

1143

Ações de Filme PDF

1150

Ações de JavaScript PDF

1151

Ações de Envio de Formulário PDF

1018

Consultas de Banco de Dados

1019

Objetos Incorporados

1021

Dados de Salvamento Rápido

1017

Propriedades Personalizadas

1036

Propriedades Estatísticas

1037

Propriedades de Resumo

Para baixar uma cópia limpa, será necessário fazer também uma solicitação de query (que será discutida a seguir) alguns segundos depois, especificando o hash do arquivo e o componente de extração no corpo da solicitação. O arquivo limpo pode ser obtido usando o id da resposta à solicitação de query — extracted_file_download_id. Mais uma vez, adiantando, apresento exemplos de solicitação e resposta de query para encontrar o id para o download do documento limpo.

Solicitação de query para localizar a chave extracted_file_download_id

{ "request":  [  

		{	
			"sha256": "9a346005ee8c9adb489072eb8b5b61699652962c17596de9c326ca68247a8876",
			"features": ["extraction"] , 
			"extraction": {
		        "method": "pdf"
            }
		}
	] 
}

Resposta à solicitação de query (encontre a chave extracted_file_download_id)

{
    "response": [
        {
            "status": {
                "code": 1001,
                "label": "ENCONTRADO",
                "message": "A solicitação foi totalmente respondida."
            },
            "sha256": "9a346005ee8c9adb489072eb8b5b61699652962c17596de9c326ca68247a8876",
            "file_type": "",
            "file_name": "",
            "features": [
                "extração"
            ],
            "extraction": {
                "method": "pdf",
                "extract_result": "CP_EXTRACT_RESULT_SUCCESS",
                "extracted_file_download_id": "b5f2b34e-3603-4627-9e0e-54665a531ab2",
                "output_file_name": "kp-20-xls.cleaned.xls.pdf",
                "time": "0.013",
                "extract_content": "Macros e Código",
                "extraction_data": {
                    "input_extension": "xls",
                    "input_real_extension": "xls",
                    "message": "OK",
                    "output_file_name": "kp-20-xls.cleaned.xls.pdf",
                    "protection_name": "Conteúdo potencialmente malicioso extraído",
                    "protection_type": "Conversão para PDF",
                    "protocol_version": "1.0",
                    "risk": 5.0,
                    "scrub_activity": "Conteúdo ativo foi encontrado - arquivo XLS foi convertido para PDF",
                    "scrub_method": "Converter para PDF",
                    "scrub_result": 0.0,
                    "scrub_time": "0.013",
                    "scrubbed_content": "Macros e Código"
                },
                "tex_product": false,
                "status": {
                    "code": 1001,
                    "label": "ENCONTRADO",
                    "message": "A solicitação foi totalmente respondida."
                }
            }
        }
    ]
}

Visão geral

Em uma chamada da API, você pode enviar apenas um arquivo para verificação.

O componente av não requer uma seção adicional com chaves, basta especificá-lo no dicionário. features.

Chamada da API de Consulta

O método utilizado é — POST

O endereço para a chamada é — https://<service_address>/tecloud/api/v1/file/query

Antes de enviar o arquivo para upload (solicitação de upload), é aconselhável realizar a verificação do cache do sandbox (solicitação de consulta) para otimizar a carga no servidor API, pois pode já haver informações e um veredicto sobre o arquivo a ser carregado. A chamada consiste apenas na parte textual. A parte obrigatória da solicitação é o hash sha1/sha256/md5 do arquivo. Isso pode ser obtido na resposta da solicitação de upload.

Mínimo necessário para a solicitação de consulta

HTTP POST

https://<service_address>/tecloud/api/v1/file/query

Cabeçalhos:

Authorization: <api_key>

Corpo

{

"request": {

"sha256": <sha256 hash sum>

}

}

Exemplo de resposta à solicitação de upload, onde são visíveis as somas de hash sha1/md5/sha256.

{
  "response": {
    "status": {
      "code": 1002,
      "label": "UPLOAD_SUCCESS",
      "message": "O arquivo foi enviado com sucesso."
    },
    "sha1": "954b5a851993d49ef8b2412b44f213153bfbdb32",
    "md5": "ac29b7c26e7dcf6c6fdb13ac0efe98ec",
    "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
    "file_type": "",
    "file_name": "kp-20-doc.doc",
    "features": [
      "te"
    ],
    "te": {
      "trust": 0,
      "images": [
        {
          "report": {
            "verdict": "desconhecido"
          },
          "status": "não_encontrado",
          "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
          "revision": 1
        }
      ],
      "score": -2147483648,
      "status": {
        "code": 1002,
        "label": "UPLOAD_SUCCESS",
        "message": "O arquivo foi enviado com sucesso."
      }
    }
  }
}

A consulta query, além do hash, idealmente deve ser a mesma que foi (ou se planeja ser) a consulta upload, ou até mesmo "já" (contendo na consulta query menos campos do que na consulta upload). No caso em que a consulta query contém mais campos do que a consulta upload, você não receberá todas as informações necessárias.

Aqui está um exemplo de resposta para a consulta query, onde não foram encontrados todos os dados necessários.

{
  "response": [
    {
      "status": {
        "code": 1006,
        "label": "PARCIALMENTE_ENCONTRADO",
        "message": "A solicitação não pode ser totalmente respondida no momento."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
      "file_type": "doc",
      "file_name": "",
      "features": [
        "te",
        "extraction"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicioso",
              "pdf_report": "4e9cddaf-03a4-489f-aa03-3c18f8d57a52",
              "xml_report": "9c18018f-c761-4dea-9372-6a12fcb15170"
            },
            "status": "encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicioso",
        "severity": 4,
        "confidence": 1,
        "status": {
          "code": 1001,
          "label": "ENCONTRADO",
          "message": "A solicitação foi totalmente respondida."
        }
      },
      "extraction": {
        "method": "pdf",
        "tex_product": false,
        "status": {
          "code": 1004,
          "label": "NÃO_ENCONTRADO",
          "message": "Não foi possível encontrar o arquivo solicitado. Por favor, faça o upload."
        }
      }
    }
  ]
}

Atente-se aos campos code e label. Esses campos aparecem três vezes nos dicionários de status. No início, vemos a chave global "code": 1006 e "label": "PARCIALMENTE_ENCONTRADO". Em seguida, essas chaves aparecem em cada componente individual que solicitamos — te e extraction. E se para te está claro que os dados foram encontrados, para extraction as informações estão ausentes.

A consulta query para o exemplo acima foi assim

{ "request":  [  

		{	
			"sha256": {{sha256}},
			"features": ["te", "extraction"] , 
			"te": {
				"images": [
                    {
                        "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
                        "revision": 1
                    }
                ],
                "reports": [
                    "xml", "pdf"
                ]
            }
		}
	] 
}

Se a consulta query for enviada sem o componente extraction

{ "request":  [  

		{	
			"sha256": {{sha256}},
			"features": ["te"] , 
			"te": {
				"images": [
                    {
                        "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
                        "revision": 1
                    }
                ],
                "reports": [
                    "xml", "pdf"
                ]
            }
		}
	] 
}

Então, na resposta haverá informações completas ("code": 1001, "label": "ENCONTRADO")

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "ENCONTRADO",
        "message": "A solicitação foi totalmente respondida."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
      "file_type": "doc",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicioso",
              "pdf_report": "4e9cddaf-03a4-489f-aa03-3c18f8d57a52",
              "xml_report": "9c18018f-c761-4dea-9372-6a12fcb15170"
            },
            "status": "encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicioso",
        "severity": 4,
        "confidence": 1,
        "status": {
          "code": 1001,
          "label": "ENCONTRADO",
          "message": "A solicitação foi totalmente respondida."
        }
      }
    }
  ]
}

Se não houver absolutamente nenhuma informação no cache, a resposta terá "label": "NÃO_ENCONTRADO"

{
  "response": [
    {
      "status": {
        "code": 1004,
        "label": "NÃO_ENCONTRADO",
        "message": "Não foi possível encontrar o arquivo solicitado. Por favor, faça o upload."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd91",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "desconhecido"
            },
            "status": "não_encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NÃO_ENCONTRADO",
          "message": "Não foi possível encontrar o arquivo solicitado. Por favor, faça o upload."
        }
      }
    }
  ]
}

Em uma chamada de API, é possível enviar várias somas de hash para verificação ao mesmo tempo. A resposta retornará os dados na mesma ordem em que foram enviados na solicitação.

Exemplo de solicitação query com várias somas sha256

{ "request":  [  

		{	
			"sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd81"
        },
        		{	
			"sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd82"
        }
	] 
}

Resposta à solicitação query com várias somas sha256

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "ENCONTRADO",
        "message": "A solicitação foi totalmente respondida."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd81",
      "file_type": "dll",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicioso"
            },
            "status": "encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicioso",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "ENCONTRADO",
          "message": "A solicitação foi totalmente respondida."
        }
      }
    },
    {
      "status": {
        "code": 1004,
        "label": "NÃO_ENCONTRADO",
        "message": "Não foi possível encontrar o arquivo solicitado. Por favor, faça o upload."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd82",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "desconhecido"
            },
            "status": "não_encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NÃO_ENCONTRADO",
          "message": "Não foi possível encontrar o arquivo solicitado. Por favor, faça o upload."
        }
      }
    }
  ]
}

Fazer uma solicitação de vários hash na consulta também beneficiará o desempenho do servidor API.

Chamada da API de Download

O método utilizado é — POST (de acordo com a documentação), GET também funciona (e pode parecer mais lógico)

O endereço para a chamada é — https://<service_address>/tecloud/api/v1/file/download?id=<id>

O cabeçalho deve conter a chave da API, e o corpo da solicitação deve estar vazio, o id para download é passado na URL.

Na resposta à consulta, caso a emulação tenha sido concluída e relatórios tenham sido solicitados durante o download do arquivo, os ids para download dos relatórios estarão visíveis. Se uma cópia limpa for solicitada, deve-se procurar pelos ids para o download do documento limpo.

Portanto, as chaves na resposta à consulta que contêm o valor id para download podem ser:

  • summary_report

  • full_report

  • pdf_report

  • xml_report

  • extracted_file_download_id

Certamente, para que essas chaves sejam obtidas na resposta da consulta, elas precisam ser especificadas na solicitação (para relatórios) ou não se esquecer de fazer a solicitação pela função de extração (para documentos limpos)

Chamada da API de Quota

O método utilizado é — POST

O endereço para a chamada é — https://<service_address>/tecloud/api/v1/file/quota

Para verificar a cota restante na nuvem, usa-se a solicitação quota. O corpo da solicitação está vazio.

Exemplo de resposta à solicitação quota

{
  "response": [
    {
      "remain_quota_hour": 1250,
      "remain_quota_month": 10000000,
      "assigned_quota_hour": 1250,
      "assigned_quota_month": 10000000,
      "hourly_quota_next_reset": "1599141600",
      "monthly_quota_next_reset": "1601510400",
      "quota_id": "TEST",
      "cloud_monthly_quota_period_start": "1421712300",
      "cloud_monthly_quota_usage_for_this_gw": 0,
      "cloud_hourly_quota_usage_for_this_gw": 0,
      "cloud_monthly_quota_usage_for_quota_id": 0,
      "cloud_hourly_quota_usage_for_quota_id": 0,
      "monthly_exceeded_quota": 0,
      "hourly_exceeded_quota": 0,
      "cloud_quota_max_allow_to_exceed_percentage": 1000,
      "pod_time_gmt": "1599138715",
      "quota_expiration": "0",
      "action": "ALLOW"
    }
  ]
}

a API de Prevenção de Ameaças para o Security Gateway

Esta API foi desenvolvida antes da Threat Prevention API e é destinada apenas para dispositivos locais. No momento, só pode ser útil se você precisar da Threat Extraction API. Para Threat Emulation, é melhor usar a Threat Prevention API tradicional. Para habilitar TP API para SG e configurar a chave da API, é necessário realizar as ações descritas em sk113599. Recomendo prestar atenção no passo 6b e verificar a acessibilidade da página https:///UserCheck/TPAPI pois, em caso de resultado negativo, uma configuração posterior não faz sentido. Todas as chamadas de API serão enviadas para esta URL. O tipo de chamada (upload/query) éregulado pela chave do corpo da chamada — request_name. Outras chaves obrigatórias são — api_key (é necessário anotá-la durante a configuração) e protocol_version (atualmente, a versão mais recente é 1.1). A documentação oficial para esta API pode ser encontrada em sk137032. Entre as vantagens relativas, está a possibilidade de enviar vários arquivos para emulação simultaneamente durante o upload, pois os arquivos são enviados como uma string de texto base64. Para codificar/decodificar arquivos em/para base64, você pode usar um conversor online, por exemplo, no Postman — https://base64.guru. Para fins práticos ao escrever o código, recomenda-se usar os métodos embutidos encode e decode.

Agora vamos nos aprofundar nas funções te e extraction nesta API.

Para o componente te é previsto um dicionário te_options nas requisições upload/query, e as chaves nesta requisição coincidem totalmente com as chaves te em Threat Prevention API.

Um exemplo de requisição para emular um arquivo no Win10 com relatórios

{
"request": [{
    "protocol_version": "1.1",
    "api_key": "",
    "request_name": "UploadFile",
    "file_enc_data": "",
    "file_orig_name": "",
    "te_options": {
        "images": [
                {
                    "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
                    "revision": 1
                }
            ],
        "reports": ["summary", "xml"]
    }
    }
    ]
}

Para o componente extraction é previsto um dicionário scrub_optionsNeste pedido, é especificado o método de limpeza: conversão para PDF, remoção de conteúdo ativo ou selecionar o modo de acordo com o perfil de Threat Prevention (o nome do perfil deve ser especificado). A característica distintiva da resposta a um pedido de API com extração para o arquivo é que você recebe uma cópia limpa como resposta a esse pedido na forma de uma string criptografada base64 (não é necessário fazer um pedido de consulta e procurar o ID para baixar o documento)

Exemplo de pedido para limpeza de arquivo

    {
	"request": [{
		"protocol_version": "1.1",
		"api_key": "",
		"request_name": "UploadFile",
		"file_enc_data": "",
		"file_orig_name": "hi.txt",
		"scrub_options": {
			"scrub_method": 2
		}
	}]
}

Resposta ao pedido

{
	"response": [{
		"protocol_version": "1.1",
		"src_ip": "",
		"scrub": {
			"file_enc_data": "",
			"input_real_extension": "js",
			"message": "OK",
			"orig_file_url": "",
			"output_file_name": "hi.cleaned.pdf",
			"protection_name": "Extrair conteúdo potencialmente malicioso",
			"protection_type": "Conversão para PDF",
			"real_extension": "txt",
			"risk": 0,
			"scrub_activity": "Arquivo TXT foi convertido para PDF",
			"scrub_method": "Converter para PDF",
			"scrub_result": 0,
			"scrub_time": "0.011",
			"scrubbed_content": ""
		}
	}]
} 

Embora menos solicitações de API sejam necessárias para obter uma cópia limpa, considero essa opção menos preferível e conveniente do que a solicitação form-data utilizada em Threat Prevention API.

Coleções Postman

Criei coleções no Postman tanto para a API de Threat Prevention quanto para a API de Threat Prevention para Security Gateway, onde estão apresentados os pedidos de API mais comuns. Para que o ip/url do servidor API e a chave sejam inseridos automaticamente nos pedidos, e o hash sha256 após o upload do arquivo também seja lembrado, três variáveis foram criadas dentro das coleções (podem ser encontradas nas configurações da coleção Edit -> Variables): te_api (requere preenchimento), api_key (requere preenchimento, exceto no caso de uso da TP API com dispositivos locais), sha256 (deixar em branco, não utilizado na TP API for SG).

Baixar coleção Postman para Threat Prevention API

Baixar coleção Postman para Threat Prevention for Security Gateway API

Exemplos de uso

Na comunidade Check Mates estão disponíveis scripts escritos em Python que verificam arquivos do diretório desejado tanto através do TP API, quanto o TP API para SG. Através da interação com a Threat Prevention API, suas capacidades de verificação de arquivos são significativamente ampliadas, pois agora você pode verificar arquivos em várias plataformas (a verificação no VirusTotal API, e depois no sandbox Check Point), e os arquivos podem ser obtidos não apenas do tráfego de rede, mas também podem ser retirados de qualquer disco de rede e, por exemplo, de sistemas CRM.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster