Interacción con Check Point SandBlast a través de la API

Interacción con Check Point SandBlast a través de la API

Este artículo será útil para aquellos que están familiarizados con las tecnologías Check Point de emulación de archivos (Emulación de Amenazas) y la limpieza proactiva de archivos (Extracción de Amenazas) y desean dar un paso hacia la automatización de estas tareas. Check Point ofrece API de Prevención de Amenazas, que funciona tanto en la nube como en dispositivos locales, y funcionalmente es idéntica a la verificación de archivos en flujos de tráfico web/smtp/ftp/smb/nfs.Este artículo es en parte una interpretación personal de un conjunto de artículos de la documentación oficial, pero se basa en mi experiencia de uso y ejemplos propios. También en el artículo encontrarás colecciones personales de Postman para trabajar con la API de Prevención de Amenazas.

Abreviaturas Principales

La API de Prevención de Amenazas trabaja con tres componentes principales, que se llaman en la API a través de los siguientes valores de texto:

av — componente Anti-Virus, encargado del análisis de firmas de amenazas conocidas.

te — componente de Emulación de Amenazas, encargado de verificar archivos en una caja de arena, y emitir un veredicto malicioso (malicious)/limpio (benign) después de la emulación.

extraction — componente de Extracción de Amenazas, que se encarga de la rápida conversión de documentos de oficina a un formato seguro (del que se elimina todo el contenido potencialmente dañino), con el fin de entregarlos rápidamente a usuarios/sistemas.

Estructura de la API y Principales Limitaciones

La API de Prevención de Amenazas utiliza solo 4 solicitudes — upload, query, download y quota.En la cabecera de las cuatro solicitudes se debe enviar la clave de la API, utilizando el parámetro Authorization.A primera vista, la estructura puede parecer mucho más simple que en API de Gestión, pero el número de campos en las solicitudes upload y query y la estructura de estas solicitudes son bastante complejos. Se pueden comparar funcionalmente con los perfiles de Prevención de Amenazas en la política de seguridad del gateway/sandbox.

En este momento, se ha lanzado una única versión de la API de Prevención de Amenazas — 1.0, en la URL para las llamadas a la API se debe especificar v1 en la parte donde se requiere especificar la versión. A diferencia de la API de Gestión, es obligatorio indicar la versión de la API en la dirección URL, de lo contrario la solicitud no se ejecutará.

El componente Anti-Virus al ser llamado sin otros componentes (te, extraction) actualmente solo admite solicitudes query con sumas de verificación md5. La Emulación de Amenazas y la Extracción de Amenazas también admiten sumas de verificación sha1 y sha256.

¡Es muy importante no cometer errores en las solicitudes! La solicitud puede ejecutarse sin errores, pero no de manera completa. Avancemos un poco para ver qué puede suceder en caso de errores o erratas en las solicitudes.

Solicitud con un error tipográfico en la palabra reports(reportss)

{ "request":  [  

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

En la respuesta no habrá errores, pero tampoco habrá información sobre los informes.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "La solicitud ha sido respondida completamente."
      },
      "sha256": "9cc488fa6209caeb201678f8360a6bb806bd2f85b59d108517ddbbf90baec33a",
      "file_type": "pdf",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicious"
            },
            "status": "found",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicious",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "La solicitud ha sido respondida completamente."
        }
      }
    }
  ]
}

Aquí está la solicitud sin tipografía en la clave reports.

{ "request":  [  

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

Recibimos una respuesta que ya contiene los id para descargar los informes.

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

Si se envía una clave API incorrecta o caducada, obtendremos un error 403 en respuesta.

SandBlast API: en la nube y en dispositivos locales.

Las solicitudes de API pueden enviarse a dispositivos Check Point que tienen habilitado el componente (blade) Threat Emulation. Para las solicitudes, se debe usar el ip/url del dispositivo y el puerto 18194 (por ejemplo — https://10.10.57.19:18194/tecloud/api/v1/file/query). Также следует убедиться в том, что политикой безопасности на устройстве разрешено такое подключение. Авторизация через API ключ на локальных устройствах по умолчанию desactivada y la clave de autorización en los encabezados de las solicitudes no es necesaria en absoluto.

Las solicitudes API a la nube de CheckPoint deben enviarse a la dirección te.checkpoint.com (por ejemplo — https://te.checkpoint.com/tecloud/api/v1/file/query). API ключ можно получить в виде триальной лицензии на 60 дней, обратившись к партнерам Check Point или в локальный офис компании.

En los dispositivos locales, Threat Extraction aún no está soportado en el estándar API de Prevención de Amenazas y se debe utilizar Threat Prevention API for Security Gateway (hablaremos de ello con más detalle al final del artículo).

Los dispositivos locales no soportan la solicitud quota.

Por lo demás, no hay diferencias entre las solicitudes a dispositivos locales y a la nube.

La llamada a Upload API

El método utilizado es — POST

La dirección para la llamada es — https://<service_address>/tecloud/api/v1/file/upload

La solicitud consta de dos partes (form-data): un archivo destinado a emulación/limpieza y el cuerpo de la solicitud con el texto.

La solicitud de texto no puede estar vacía, pero puede no contener ninguna configuración. Para que la solicitud sea exitosa, se debe enviar al menos el siguiente texto en la solicitud:

Mínimo requerido para la solicitud de carga

HTTP POST

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

Encabezados:

Authorization: <api_key>

Cuerpo

{

«request»: {

}

}

Archivo

Archivo

En tal caso, el archivo para procesamiento se enviará de acuerdo con los parámetros predeterminados: componente — te, imágenes de SO — Win XP y Win 7, sin generación de informe.

Comentarios sobre los campos principales de la solicitud de texto:

file_name y file_type pueden dejarse vacíos o no enviarse en absoluto, ya que no son información muy útil al cargar un archivo. En la respuesta API, estos campos se llenarán automáticamente en base al nombre del archivo que se carga, y la información en caché aún tendrá que buscarse por las sumas de hash md5/sha1/sha256.

Ejemplo de solicitud con file_name y file_type vacíos

{

"request": {

"file_name": "",

"file_type": "",

}

}

features — una lista que indica la funcionalidad necesaria para el procesamiento en la sandbox — av (Anti-Virus), te (Threat Emulation), extraction (Threat Extraction). Si no se envía este parámetro, solo se usará el componente predeterminado — te (Threat Emulation).

Para habilitar la verificación en los tres componentes disponibles, es necesario indicar estos componentes en la solicitud API.

Ejemplo de solicitud con verificación en av, te y extraction

{ "request":  [  

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

Claves en la sección te

images — una lista que debe incluir diccionarios con id y número de revisión de los sistemas operativos en los que se realizará la verificación. ID y números de revisión son iguales para todos los dispositivos locales y la nube.

Lista de sistemas operativos y revisiones

Available OS Image ID

Revision

Image OS and Application

e50e99f3-5963-4573-af9e-e3f4750b55e2

1

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

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

1

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

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

1

Microsoft Windows: 7 — 32bit
Oficina: 2010
Adobe Acrobat Reader: 9.4
Flash Player: 11.0.1.152 (Complemento & ActiveX)
Java Runtime: 1.7.0u0

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

1

Microsoft Windows: 7 — 32bit
Oficina: 2013
Adobe Acrobat Reader: 11.0
Flash Player: 15 (Complemento & ActiveX)
Java Runtime: 1.7.0u9

3ff3ddae-e7fd-4969-818c-d5f1a2be336d

1

Microsoft Windows: 7 — 64bit
Oficina: 2013 (32bit)
Adobe Acrobat Reader: 11.0.01
Flash Player: 13 (Complemento & ActiveX)
Java Runtime: 1.7.0u9

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

 

1 

Microsoft Windows: 8.1 — 64bit
Oficina: 2013 (64bit)
Adobe Acrobat Reader: 11.0.10
Flash Player: 18.0.0.160 (Complemento & ActiveX)
Java Runtime: 1.7.0u9

10b4a9c6-e414-425c-ae8b-fe4dd7b25244 

 

1

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

Si la clave images no se indica en absoluto, la emulación se realizará en las imágenes recomendadas por Check Point (en este momento son Win XP y Win 7). Estas imágenes se recomiendan en función del mejor equilibrio de rendimiento y tasa de detección.

informes — lista de informes que solicitamos en caso de que el archivo resulte ser malicioso. Las siguientes opciones están disponibles:

  1. resumen — archivo .tar.gz que contiene el informe de emulación sobre todos los images solicitados (tanto como página html como componentes como un video del sistema operativo emulador, un volcado de tráfico de red, un informe en json, así como la muestra misma en un archivo protegido por contraseña). En la respuesta buscamos la clave — summary_report para la posterior descarga del informe.

  2. pdf — documento de emulación en una imagen, que muchos están acostumbrados a recibir a través de Smart Console. En la respuesta buscamos la clave — pdf_report para la posterior descarga del informe.

  3. xml — documento de emulación en una imagen, conveniente para el posterior parseo de parámetros en el informe. En la respuesta buscamos la clave — xml_report para la posterior descarga del informe.

  4. tar — archivo .tar.gz que contiene el informe de emulación en una los images solicitados (tanto como página html como componentes como un video del sistema operativo emulador, un volcado de tráfico de red, un informe en json, así como la muestra misma en un archivo protegido por contraseña). En la respuesta buscamos la clave — full_report para la posterior descarga del informe.

Qué hay dentro del informe summaryInteracción con Check Point SandBlast a través de la API

Las claves full_report, pdf_report, xml_report están en el diccionario para cada sistema operativo

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "ENCONTRADO",
        "message": "La solicitud ha sido completamente respondida."
      },
      "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": "ENCONTRADO",
          "message": "La solicitud ha sido completamente respondida."
        }
      }
    }
  ]
}

Y aquí la clave summary_report — hay una para la emulación en general

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "ENCONTRADO",
        "message": "La solicitud ha sido respondida por completo."
      },
      "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": "La solicitud ha sido respondida por completo."
        }
      }
    }
  ]
}

Se pueden solicitar informes tar y xml y pdf al mismo tiempo, se pueden solicitar resumen y tar y xml. No se puede solicitar al mismo tiempo un informe de resumen y pdf.

Claves en la sección de extracción

Solo se utilizan dos claves para la extracción de amenazas:

método — pdf (conversión a pdf, se usa por defecto) o clean (eliminación de contenido activo).

extracted_parts_codes — lista de códigos para eliminar contenido activo, aplicable solo para el método clean

Códigos para eliminar contenido de archivos

Código

Descripción

1025

Objetos Vinculados

1026

Macros y Código

1034

Hipervínculos Sensibles

1137

Acciones PDF GoToR

1139

Acciones de Lanzamiento PDF

1141

Acciones URI PDF

1142

Acciones de Sonido PDF

1143

Acciones de Película PDF

1150

Acciones JavaScript PDF

1151

Acciones de Envío de Formulario PDF

1018

Consultas de Base de Datos

1019

Objetos Embebidos

1021

Datos de Guardado Rápido

1017

Propiedades Personalizadas

1036

Propiedades Estatísticas

1037

Propiedades Resumidas

Para descargar una copia limpia, también se requiere realizar una solicitud query (de la que hablaremos más adelante) en unos segundos, indicando el hash del archivo y el componente de extracción en el texto de la solicitud. Se podrá recuperar el archivo limpio usando el id de la respuesta a la solicitud query — extracted_file_download_id. Una vez más, adelantando un poco, doy ejemplos de la solicitud y respuesta query para encontrar el id para descargar el documento limpio.

Solicitud query para buscar la clave extracted_file_download_id

{ "request":  [  

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

Respuesta a la solicitud query (encuentre la clave extracted_file_download_id)

{
    "response": [
        {
            "status": {
                "code": 1001,
                "label": "ENCONTRADO",
                "message": "La solicitud ha sido completamente respondida."
            },
            "sha256": "9a346005ee8c9adb489072eb8b5b61699652962c17596de9c326ca68247a8876",
            "file_type": "",
            "file_name": "",
            "features": [
                "extracción"
            ],
            "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 y Código",
                "extraction_data": {
                    "input_extension": "xls",
                    "input_real_extension": "xls",
                    "message": "OK",
                    "output_file_name": "kp-20-xls.cleaned.xls.pdf",
                    "protection_name": "Contenido potencialmente malicioso extraído",
                    "protection_type": "Conversión a PDF",
                    "protocol_version": "1.0",
                    "risk": 5.0,
                    "scrub_activity": "Se encontró contenido activo - El archivo XLS fue convertido a PDF",
                    "scrub_method": "Convertir a PDF",
                    "scrub_result": 0.0,
                    "scrub_time": "0.013",
                    "scrubbed_content": "Macros y Código"
                },
                "tex_product": false,
                "status": {
                    "code": 1001,
                    "label": "ENCONTRADO",
                    "message": "La solicitud ha sido completamente respondida."
                }
            }
        }
    ]
}

Información General

En una llamada a la API se puede enviar solo un archivo para su verificación.

El componente av no requiere una sección adicional con claves, es suficiente incluirlo en el diccionario features.

Llamada a la API de Consulta

El método utilizado es — POST

La dirección para la llamada es — https://<service_address>/tecloud/api/v1/file/query

Antes de enviar un archivo para carga (solicitud de carga), es recomendable realizar una verificación de caché de sandbox (solicitud de consulta) para optimizar la carga en el servidor API, ya que es posible que ya haya información y un veredicto sobre el archivo a cargar en el servidor API. La llamada consiste solo en la parte de texto. La parte obligatoria de la solicitud es el hash sha1/sha256/md5 del archivo. Este, por cierto, se puede obtener en la respuesta a la solicitud de carga.

Mínimo requerido para la solicitud de consulta

HTTP POST

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

Encabezados:

Authorization: <api_key>

Cuerpo

{

«request»: {

"sha256": <sha256 hash sum>

}

}

Ejemplo de respuesta a la solicitud de carga, donde se ven los hash sha1/md5/sha256

{
  "response": {
    "status": {
      "code": 1002,
      "label": "CARGA_EXITOSA",
      "message": "El archivo se cargó correctamente."
    },
    "sha1": "954b5a851993d49ef8b2412b44f213153bfbdb32",
    "md5": "ac29b7c26e7dcf6c6fdb13ac0efe98ec",
    "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
    "file_type": "",
    "file_name": "kp-20-doc.doc",
    "features": [
      "te"
    ],
    "te": {
      "trust": 0,
      "images": [
        {
          "report": {
            "verdict": "desconocido"
          },
          "status": "no_encontrado",
          "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
          "revision": 1
        }
      ],
      "score": -2147483648,
      "status": {
        "code": 1002,
        "label": "CARGA_EXITOSA",
        "message": "El archivo se cargó correctamente."
      }
    }
  }
}

La consulta query, además del hash, idealmente debería ser la misma que la consulta upload (o que se planea ser), o incluso "ya" (contener en la consulta query menos campos que en la consulta upload). En el caso de que la consulta query contenga más campos que la consulta upload, recibirás en la respuesta no toda la información requerida.

Aquí hay un ejemplo de la respuesta a la consulta query, donde no se encontraron todos los datos requeridos.

{
  "response": [
    {
      "status": {
        "code": 1006,
        "label": "PARTIALLY_FOUND",
        "message": "La solicitud no puede ser respondida completamente en este 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": "FOUND",
          "message": "La solicitud ha sido respondida completamente."
        }
      },
      "extraction": {
        "method": "pdf",
        "tex_product": false,
        "status": {
          "code": 1004,
          "label": "NOT_FOUND",
          "message": "No se pudo encontrar el archivo solicitado. Por favor, súbelo."
        }
      }
    }
  ]
}

Atención a los campos code y label. Estos campos aparecen tres veces en los diccionarios de estado. Al principio vemos la clave global "code": 1006 y "label": "PARTIALLY_FOUND". Luego, estas claves aparecen en cada uno de los componentes individuales que hemos solicitado: te y extraction. Y si para te está claro que se encontraron datos, para extraction la información está ausente.

Esta es la consulta query que se usó para el ejemplo anterior.

{ "request":  [  

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

Si envías la consulta query sin el componente extraction.

{ "request":  [  

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

Entonces en la respuesta habrá información completa ("code": 1001, "label": "FOUND")

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "ENCONTRADO",
        "message": "La solicitud ha sido respondida completamente."
      },
      "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": "La solicitud ha sido respondida completamente."
        }
      }
    }
  ]
}

Si no hay información en la caché, la respuesta será "label": "NO_ENCONTRADO"

{
  "response": [
    {
      "status": {
        "code": 1004,
        "label": "NO_ENCONTRADO",
        "message": "No se pudo encontrar el archivo solicitado. Por favor, cárgalo."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd91",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "desconocido"
            },
            "status": "no_encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NO_ENCONTRADO",
          "message": "No se pudo encontrar el archivo solicitado. Por favor, cárgalo."
        }
      }
    }
  ]
}

En una llamada a la API se pueden enviar varias sumas de verificación para su revisión. En la respuesta se devolverán los datos en el mismo orden en que fueron enviados en la solicitud.

Ejemplo de solicitud query con múltiples sumas sha256

{ "request":  [  

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

Respuesta a la solicitud query con múltiples sumas sha256

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "ENCONTRADO",
        "message": "La solicitud ha sido respondida completamente."
      },
      "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": "La solicitud ha sido respondida completamente."
        }
      }
    },
    {
      "status": {
        "code": 1004,
        "label": "NO_ENCONTRADO",
        "message": "No se pudo encontrar el archivo solicitado. Por favor, súbalo."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd82",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "desconocido"
            },
            "status": "no_encontrado",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NO_ENCONTRADO",
          "message": "No se pudo encontrar el archivo solicitado. Por favor, súbalo."
        }
      }
    }
  ]
}

Realizar una solicitud de múltiples hash en la consulta también beneficiará el rendimiento del servidor API.

Llamada a la API de descarga

El método utilizado es — POST (según la documentación), GET también funciona (y puede parecer más lógico)

La dirección para la llamada es — https://<service_address>/tecloud/api/v1/file/download?id=<id>

Se requiere pasar la clave API en el encabezado, el cuerpo de la solicitud debe estar vacío, el id para la descarga se pasa en la URL.

En respuesta a la solicitud de consulta, si la emulación se ha completado y se han solicitado informes durante la descarga del archivo, se mostrarán los id para la descarga de informes. En caso de que se solicite una copia limpia, se debe buscar el id para la descarga del documento limpiado.

En resumen, las claves en la respuesta a la solicitud de consulta que contienen el valor id para la descarga pueden ser:

  • summary_report

  • full_report

  • pdf_report

  • xml_report

  • extracted_file_download_id

Por supuesto, para que estos claves sean recibidas en la respuesta a la solicitud de consulta, deben ser especificadas en la solicitud (para informes) o no olvidar hacer la solicitud a la función de extracción (para documentos limpiados)

Llamada a la API de cuota

El método utilizado es — POST

La dirección para la llamada es — https://<service_address>/tecloud/api/v1/file/quota

Para verificar la cuota restante en la nube se utiliza la solicitud quota. El cuerpo de la solicitud está vacío.

Ejemplo de respuesta a la solicitud 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"
    }
  ]
}

Threat Prevention API for Security Gateway

Esta API fue desarrollada antes que la API de Prevención de Amenazas y está destinada únicamente a dispositivos locales. En este momento, solo puede ser útil si necesitas la API de Extracción de Amenazas. Para la Emulación de Amenazas, es mejor utilizar la API de Prevención de Amenazas convencional. Para habilitar API de TP para SG y configurar la clave de la API, se requieren las acciones de sk113599. Recomiendo prestar atención al paso 6b y verificar la disponibilidad de la página https:///UserCheck/TPAPI porque si el resultado es negativo, la configuración posterior no tiene sentido. Todas las llamadas a la API se enviarán a esta URL. El tipo de llamada (upload/query) se regula en la clave del cuerpo de la llamada — request_name. También son obligatorias las claves — api_key (es necesario recordarla durante la configuración) y protocol_version (la versión actual es 1.1). La documentación oficial para esta API se puede encontrar en sk137032. Entre las ventajas relativas se incluye la posibilidad de enviar varios archivos para emulación durante su carga, ya que los archivos se envían como una cadena de texto en base64. Para codificar/decodificar archivos en/de base64, puedes utilizar un convertidor en línea en Postman, por ejemplo — https://base64.guru. En la práctica, al escribir código, se deben utilizar los métodos integrados de encode y decode.

Ahora profundicemos en las funciones te y extraction de esta API.

Para el componente te se prevé un diccionario te_options en las solicitudes upload/query, y las claves en esta solicitud coinciden completamente con las claves te en API de Prevención de Amenazas.

Ejemplo de solicitud para emular un archivo en Win10 con informes

{
"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 el componente extraction se prevé un diccionario scrub_options. En esta solicitud se especifica el método de limpieza: conversión a PDF, limpieza de contenido activo o elegir el modo según el perfil de Prevención de Amenazas (se indica el nombre del perfil). La característica distintiva de la respuesta a la solicitud de API con extracción para el archivo es que recibes una copia limpia en respuesta a esta solicitud en forma de una cadena en base64 (no necesitas realizar una consulta query y buscar el id para cargar el documento)

Ejemplo de solicitud para limpiar un archivo

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

Respuesta a la solicitud

{
	"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": "Extraer contenido potencialmente malicioso",
			"protection_type": "Conversión a PDF",
			"real_extension": "txt",
			"risk": 0,
			"scrub_activity": "El archivo TXT fue convertido a PDF",
			"scrub_method": "Convertir a PDF",
			"scrub_result": 0,
			"scrub_time": "0.011",
			"scrubbed_content": ""
		}
	}]
} 

A pesar de que se requieren menos solicitudes de API para obtener una copia limpia, considero que esta opción es menos preferible y conveniente en comparación con la solicitud form-data utilizada en API de Prevención de Amenazas.

Colecciones de Postman

He creado colecciones en Postman tanto para la API de Prevención de Amenazas como para la API de Prevención de Amenazas para Gateway de Seguridad, donde se presentan las solicitudes de API más comunes. Para que el ip/url del servidor API y la clave se inserten automáticamente en las solicitudes, y el hash SHA256 después de cargar el archivo también se recuerde, dentro de las colecciones se han creado tres variables (puedes encontrarlas al ir a la configuración de la colección Edit -> Variables): te_api (requerido completar), api_key (requerido completar, excepto en el caso de usar la API de TP con dispositivos locales), sha256 (dejar vacío, no se utiliza en la API de TP para SG).

Descargar colección de Postman para la API de Prevención de Amenazas

Descargar colección de Postman para la API de Prevención de Amenazas para Gateway de Seguridad

Ejemplos de uso

En la comunidad Check Mates se presentan scripts escritos en Python que verifican archivos de la carpeta deseada tanto a través de TP API, como API de TP para SG. A través de la interacción con la API de Prevención de Amenazas, tus capacidades para verificar archivos se amplían considerablemente, ya que ahora puedes verificar archivos en varias plataformas simultáneamente (resulta interesante la verificación en VirusTotal API, y luego en el entorno aislado de Check Point), y los archivos se obtienen no solo del tráfico de red, sino también de cualquier disco en red y, por ejemplo, de sistemas CRM.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster