Interazione con Check Point SandBlast tramite API.

Interazione con Check Point SandBlast tramite API.

Questo articolo sarà utile a coloro che hanno familiarità con le tecnologie Check Point per l'emulazione dei file (Emulazione delle minacce) e la pulizia proattiva dei file (Estrazione delle minacce) e desiderano compiere un passo verso l'automazione di queste attività. Check Point offre Threat Prevention API, che funziona sia nel cloud che su dispositivi locali, e funzionalmente è identico al controllo dei file nei flussi di traffico web/smtp/ftp/smb/nfs. Questo articolo è in parte un'interpretazione originale di una serie di articoli dalla documentazione ufficiale, ma basata sulla mia esperienza operativa e su esempi personali. Troverete anche collezioni di Postman per lavorare con Threat Prevention API.

Principali abbreviazioni

Threat Prevention API lavora con tre componenti principali, che nell'API sono chiamati attraverso i seguenti valori testuali:

av — componente Anti-Virus, responsabile dell'analisi delle firme delle minacce conosciute.

te — componente Threat Emulation, responsabile del controllo dei file nella sandbox, e dell'emissione di un verdetto malevolo (malicious)/pulito (benign) dopo l'emulazione.

extraction — componente Threat Extraction, responsabile della rapida conversione dei documenti di Microsoft Office in un formato sicuro (da cui viene rimosso tutto il contenuto potenzialmente dannoso), al fine di una rapida consegna agli utenti/sistemi.

Struttura dell'API e principali limitazioni

Threat Prevention API utilizza solo 4 richieste — upload, query, download e quota. Nell'intestazione per tutte e quattro le richieste, è necessario fornire la chiave API, utilizzando il parametro Authorization. A prima vista, la struttura potrebbe sembrare molto più semplice rispetto a Management API, ma il numero di campi nelle richieste upload e query e la struttura di queste richieste sono sufficientemente complesse. Possono essere confrontate funzionalmente con i profili di Threat Prevention nella politica di sicurezza del gateway/sandbox.

Attualmente, è stata rilasciata un'unica versione di Threat Prevention API — 1.0, nell'URL per le chiamate API è necessario specificare v1 nella parte in cui è richiesta l'indicazione della versione. A differenza di Management API, è obbligatorio specificare la versione API nell'URL, altrimenti la richiesta non verrà eseguita.

Il componente Anti-Virus, quando chiamato senza altri componenti (te, extraction) al momento supporta solo richieste query con hash md5. Threat Emulation e Threat Extraction supportano anche hash sha1 e sha256.

È molto importante non commettere errori nelle richieste! Una richiesta può essere eseguita senza errori, ma non completamente. Anticipando ciò, esamineremo cosa può accadere in caso di errori/o errori di battitura nelle richieste.

Richiesta con errore di battitura nella parola reports(reportss)

{ "request":  [  

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

Nella risposta non ci saranno errori, ma non ci sarà alcuna informazione sui report.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "La richiesta è stata completamente soddisfatta."
      },
      "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 richiesta è stata completamente soddisfatta."
        }
      }
    }
  ]
}

Ecco una richiesta senza errori di battitura nella chiave reports.

{ "request":  [  

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

Riceviamo una risposta che già contiene gli id per il download dei report.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "La richiesta è stata completamente soddisfatta."
      },
      "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 richiesta è stata completamente soddisfatta."
        }
      }
    }
  ]
}

Se invece si invia una chiave API errata/trascorsa, riceveremo un errore 403.

SandBlast API: nel cloud e sui dispositivi locali.

Le richieste API possono essere inviate ai dispositivi Check Point con il componente (blade) Threat Emulation attivato. Come indirizzo per le richieste è necessario utilizzare l'ip/url del dispositivo e la porta 18194 (ad esempio — https://10.10.57.19:18194/tecloud/api/v1/file/query). Также следует убедиться в том, что политикой безопасности на устройстве разрешено такое подключение. Авторизация через API ключ на локальных устройствах по умолчанию disattivata e la chiave Authorization negli header delle richieste può non essere inviata affatto.

Le richieste API nel cloud CheckPoint devono essere inviate all'indirizzo te.checkpoint.com (ad esempio — https://te.checkpoint.com/tecloud/api/v1/file/query). API ключ можно получить в виде триальной лицензии на 60 дней, обратившись к партнерам Check Point или в локальный офис компании.

Sui dispositivi locali, Threat Extraction non è ancora supportato come standard Threat Prevention API e deve essere utilizzato Threat Prevention API for Security Gateway (ne parleremo più dettagliatamente alla fine dell'articolo).

I dispositivi locali non supportano la richiesta quota.

Per il resto non ci sono differenze tra le richieste ai dispositivi locali e al cloud.

Chiamata Upload API

Il metodo utilizzato è – POST

Indirizzo per la chiamata – https://<service_address>/tecloud/api/v1/file/upload

La richiesta è composta da due parti (form-data): un file destinato all'emulazione/pulizia e il corpo della richiesta con il testo.

La richiesta testuale non può essere vuota, ma può non contenere alcuna configurazione. Affinché la richiesta sia efficace, è necessario inviare almeno il seguente testo nella richiesta:

Il minimo richiesto per la richiesta di upload

HTTP POST

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

Intestazioni:

Autorizzazione: <api_key>

Body

{

"request": {

}

}

File

File

In tal caso, il file verrà elaborato secondo i parametri predefiniti: componente – te, immagini OS – Win XP e Win 7, senza generare alcun rapporto.

Commenti sui campi principali nella richiesta testuale:

file_name e file_type possono essere lasciati vuoti o non inviati affatto, poiché non sono informazioni particolarmente utili durante il caricamento del file. Nella risposta dell'API, questi campi verranno compilati automaticamente in base al nome del file caricato, e le informazioni nella cache dovranno comunque essere cercate tramite le somme hash md5/sha1/sha256.

Esempio di richiesta con file_name e file_type vuoti

{

"request": {

"file_name": "",

"file_type": "",

}

}

features — un elenco in cui viene specificata la funzionalità necessaria durante l'elaborazione in sandbox – av (Anti-Virus), te (Threat Emulation), extraction (Threat Extraction). Se questo parametro non viene fornito, verrà utilizzato solo il componente predefinito – te (Threat Emulation).

Per abilitare il controllo nei tre componenti disponibili, è necessario specificare questi componenti nella richiesta API.

Esempio di richiesta con controllo in av, te e extraction

{ "request":  [  

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

Chiavi nella sezione te

images — un elenco in cui devono essere specificati i dizionari con id e numero di revisione dei sistemi operativi in cui sarà eseguito il controllo. Gli ID e i numeri di revisione sono identici per tutti i dispositivi locali e cloud.

Elenco dei sistemi operativi e delle revisioni

ID immagine OS disponibile

Revisione

Immagine OS e Applicazione

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 — 32bit
Office: 2003, 2007
Adobe Acrobat Reader: 9.0
Flash Player: 10.2r152 (PluginActiveX)
Java Runtime: 1.6.0u0

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

1

Microsoft Windows: 7 — 32bit
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 — 32bit
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 — 64bit
Office: 2013 (32bit)
Adobe Acrobat Reader: 11.0.01
Flash Player: 13 (Plugin & ActiveX)
Java Runtime: 1.7.0u9

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

 

Microsoft Windows: 8.1 — 64bit
Office: 2013 (64bit)
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 la chiave images non viene specificata affatto, l'emulazione avverrà utilizzando le immagini consigliate da Check Point (attualmente sono Win XP e Win 7). Queste immagini sono raccomandate per il miglior equilibrio tra prestazioni e catch rate.

report — elenco di report che richiediamo nel caso in cui il file risulti dannoso. Sono disponibili le seguenti opzioni:

  1. summary — archivio .tar.gz contenente il report di emulazione per di tutto le immagini richieste (sia come pagina html che come componenti come video dall'OS dell'emulatore, dump del traffico di rete, report in json e il campione stesso in un archivio protetto da password). Nella risposta cerchiamo la chiave — summary_report per il successivo download del report.

  2. pdf — documento di emulazione in un'unica immagine, che molti sono abituati a ricevere tramite Smart Console. Nella risposta cerchiamo la chiave — pdf_report per il successivo download del report.

  3. xml — documento di emulazione in un'unica immagine, utile per il successivo parsing dei parametri nel report. Nella risposta cerchiamo la chiave — xml_report per il successivo download del report.

  4. tar — archivio .tar.gz contenente il report di emulazione in un'unica le immagini richieste (sia come pagina html che come componenti come video dall'OS dell'emulatore, dump del traffico di rete, report in json e il campione stesso in un archivio protetto da password). Nella risposta cerchiamo la chiave — full_report per il successivo download del report.

Cosa c'è dentro il report summaryInterazione con Check Point SandBlast tramite API.

Le chiavi full_report, pdf_report, xml_report sono disponibili nel dizionario per ogni OS

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

La chiave summary_report è unica per l'emulazione nel suo complesso

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

È possibile richiedere simultaneamente report tar, xml e pdf; si può richiedere anche summary insieme a tar e xml. Non è possibile richiedere simultaneamente il report summary e il pdf.

Le chiavi nella sezione estrazione

Per l'estrazione delle minacce vengono utilizzate solo due chiavi:

method — pdf (conversione in pdf, utilizzata per impostazione predefinita) o clean (pulizia del contenuto attivo).

codici parti estratte — elenco di codici per rimuovere contenuto attivo, applicabile solo al metodo clean

Codici per rimuovere contenuto dai file

Codice

Descrizione

1025

Oggetti collegati

1026

Macro e codice

1034

Hyperlink sensibili

1137

Azioni PDF GoToR

1139

Azioni di avvio PDF

1141

Azioni PDF URI

1142

Azioni sonore PDF

1143

Azioni video PDF

1150

Azioni JavaScript PDF

1151

Azioni di invio modulo PDF

1018

Query di database

1019

Oggetti incorporati

1021

Dati di salvataggio rapido

1017

Proprietà personalizzate

1036

Proprietà statistiche

1037

Proprietà di riepilogo

Per scaricare una copia pulita sarà necessario fare anche una richiesta query (di cui parleremo più avanti) dopo qualche secondo, indicando l'hash del file e il componente extraction nel testo della richiesta. Il file pulito potrà essere prelevato con l'id della risposta alla richiesta query — extracted_file_download_id. Ancora una volta, per anticipare, fornisco esempi di richiesta e risposta per cercare l'id per il download del documento pulito.

Richiesta query per cercare la chiave extracted_file_download_id

{ "request":  [  

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

Risposta alla richiesta query (trova la chiave extracted_file_download_id)

{
    "response": [
        {
            "status": {
                "code": 1001,
                "label": "TROVATO",
                "message": "La richiesta è stata completamente soddisfatta."
            },
            "sha256": "9a346005ee8c9adb489072eb8b5b61699652962c17596de9c326ca68247a8876",
            "file_type": "",
            "file_name": "",
            "features": [
                "estrazione"
            ],
            "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": "Macro e Codice",
                "extraction_data": {
                    "input_extension": "xls",
                    "input_real_extension": "xls",
                    "message": "OK",
                    "output_file_name": "kp-20-xls.cleaned.xls.pdf",
                    "protection_name": "Contenuto potenzialmente dannoso estratto",
                    "protection_type": "Conversione in PDF",
                    "protocol_version": "1.0",
                    "risk": 5.0,
                    "scrub_activity": "Contenuto attivo trovato - file XLS convertito in PDF",
                    "scrub_method": "Convertire in PDF",
                    "scrub_result": 0.0,
                    "scrub_time": "0.013",
                    "scrubbed_content": "Macro e Codice"
                },
                "tex_product": false,
                "status": {
                    "code": 1001,
                    "label": "TROVATO",
                    "message": "La richiesta è stata completamente soddisfatta."
                }
            }
        }
    ]
}

Panoramica

È possibile inviare un solo file per verifica in una singola chiamata API.

Il componente av non richiede una sezione aggiuntiva con le chiavi, è sufficiente indicarlo nel dizionario. features.

Chiamata all'API Query

Il metodo utilizzato è – POST

Indirizzo per la chiamata – https://<service_address>/tecloud/api/v1/file/query

Prima di inviare un file per il caricamento (richiesta upload), è consigliabile effettuare un controllo della cache sandbox (richiesta query) per ottimizzare il carico sul server API, poiché potrebbe già esserci informazione e un verdetto sul file che si sta caricando. La chiamata consiste solo nella parte testuale. La parte obbligatoria della richiesta è il hash sha1/sha256/md5 del file. Questo, tra l'altro, può essere ottenuto nella risposta alla richiesta di upload.

Minimo necessario per la richiesta query

HTTP POST

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

Intestazioni:

Autorizzazione: <api_key>

Body

{

"request": {

"sha256": <sha256 hash sum>

}

}

Esempio di risposta alla richiesta di upload, in cui sono visibili i hash sha1/md5/sha256

{
  "response": {
    "status": {
      "code": 1002,
      "label": "UPLOAD_SUCCESS",
      "message": "Il file è stato caricato con successo."
    },
    "sha1": "954b5a851993d49ef8b2412b44f213153bfbdb32",
    "md5": "ac29b7c26e7dcf6c6fdb13ac0efe98ec",
    "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
    "file_type": "",
    "file_name": "kp-20-doc.doc",
    "features": [
      "te"
    ],
    "te": {
      "trust": 0,
      "images": [
        {
          "report": {
            "verdict": "sconosciuto"
          },
          "status": "non_trovato",
          "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
          "revision": 1
        }
      ],
      "score": -2147483648,
      "status": {
        "code": 1002,
        "label": "UPLOAD_SUCCESS",
        "message": "Il file è stato caricato con successo."
      }
    }
  }
}

La richiesta query, oltre all'hash, dovrebbe idealmente essere la stessa di quella della richiesta upload (o di quella che si prevede di fare), o addirittura "già" (contenere nella richiesta query meno campi rispetto alla richiesta upload). Nel caso in cui la richiesta query contenga più campi di quelli presenti nella richiesta upload, non riceverete tutte le informazioni richieste nella risposta.

Ecco un esempio di risposta alla richiesta query, in cui non sono stati trovati tutti i dati richiesti.

{
  "response": [
    {
      "status": {
        "code": 1006,
        "label": "PARTIALLY_FOUND",
        "message": "La richiesta non può essere completamente soddisfatta in questo momento."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
      "file_type": "doc",
      "file_name": "",
      "features": [
        "te",
        "extraction"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "malicious",
              "pdf_report": "4e9cddaf-03a4-489f-aa03-3c18f8d57a52",
              "xml_report": "9c18018f-c761-4dea-9372-6a12fcb15170"
            },
            "status": "found",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "malicious",
        "severity": 4,
        "confidence": 1,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "La richiesta è stata completamente soddisfatta."
        }
      },
      "extraction": {
        "method": "pdf",
        "tex_product": false,
        "status": {
          "code": 1004,
          "label": "NOT_FOUND",
          "message": "Impossibile trovare il file richiesto. Si prega di caricarlo."
        }
      }
    }
  ]
}

Si prega di prestare attenzione ai campi. code e label. Questi campi si trovano tre volte nei dizionari di stato. Inizialmente vediamo la chiave globale "code": 1006 e "label": "PARTIALLY_FOUND". Successivamente, queste chiavi appaiono per ogni singolo componente che abbiamo richiesto — te e extraction. E se per te è chiaro che i dati sono stati trovati, per extraction le informazioni sono assenti.

Ecco com'era la richiesta query per l'esempio sopra.

{ "request":  [  

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

Se inviate la richiesta query senza il componente extraction.

{ "request":  [  

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

Anche nella risposta ci sarà informazioni complete ("code": 1001, "label": "FOUND").

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "TROVATO",
        "message": "La richiesta è stata completamente elaborata."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
      "file_type": "doc",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "maligno",
              "pdf_report": "4e9cddaf-03a4-489f-aa03-3c18f8d57a52",
              "xml_report": "9c18018f-c761-4dea-9372-6a12fcb15170"
            },
            "status": "trovato",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "maligno",
        "severity": 4,
        "confidence": 1,
        "status": {
          "code": 1001,
          "label": "TROVATO",
          "message": "La richiesta è stata completamente elaborata."
        }
      }
    }
  ]
}

Se non ci sono informazioni nella cache, nella risposta ci sarà "label": "NON_TROVATO"

{
  "response": [
    {
      "status": {
        "code": 1004,
        "label": "NON_TROVATO",
        "message": "Impossibile trovare il file richiesto. Si prega di caricarlo."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd91",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "sconosciuto"
            },
            "status": "non_trovato",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NON_TROVATO",
          "message": "Impossibile trovare il file richiesto. Si prega di caricarlo."
        }
      }
    }
  ]
}

In una chiamata API è possibile inviare più hash contemporaneamente per il controllo. I dati nella risposta verranno restituiti nello stesso ordine in cui sono stati inviati nella richiesta.

Esempio di richiesta query con più hash sha256

{ "request":  [  

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

Risposta alla richiesta query con più hash sha256

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "TROVATO",
        "message": "La richiesta è stata completamente elaborata."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd81",
      "file_type": "dll",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "maligno"
            },
            "status": "trovato",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "maligno",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "TROVATO",
          "message": "La richiesta è stata completamente elaborata."
        }
      }
    },
    {
      "status": {
        "code": 1004,
        "label": "NON_TROVATO",
        "message": "Impossibile trovare il file richiesto. Si prega di caricarlo."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd82",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "sconosciuto"
            },
            "status": "non_trovato",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NON_TROVATO",
          "message": "Impossibile trovare il file richiesto. Si prega di caricarlo."
        }
      }
    }
  ]
}

Richiedere più hash in un'unica query avrà sicuramente un effetto positivo sulle prestazioni del server API.

Chiamata all'API Download

Il metodo utilizzato è – POST (secondo la documentazione), e username/password: admin/admin. funziona anche (e può sembrare più logico)

Indirizzo per la chiamata – https://<service_address>/tecloud/api/v1/file/download?id=<id>

Nel header è necessario fornire la chiave API, il corpo della richiesta deve essere vuoto e l'id per il download deve essere fornito nell'URL.

In risposta alla richiesta di query, se l'emulazione è stata completata e sono stati richiesti rapporti durante il caricamento del file, saranno visibili gli id per il download dei rapporti. Se si richiede una copia ripulita, è necessario cercare l'id per il download del documento ripulito.

In sintesi, le chiavi nella risposta alla query che contengono un valore id per il download possono essere:

  • summary_report

  • full_report

  • pdf_report

  • xml_report

  • extracted_file_download_id

Naturalmente, affinché nella risposta alla query vengano restituiti questi chiavi, devono essere specificati nella richiesta (per i rapporti) o non dimenticare di fare la richiesta per la funzione di estrazione (per i documenti ripuliti)

Chiamata all'API Quota

Il metodo utilizzato è – POST

Indirizzo per la chiamata – https://<service_address>/tecloud/api/v1/file/quota

Per controllare il credito rimanente nel cloud si usa la richiesta quota. Il corpo della richiesta è vuoto.

Esempio di risposta alla richiesta 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

Questa API è stata sviluppata prima della Threat Prevention API ed è destinata esclusivamente ai dispositivi locali. Al momento, può essere utile solo se hai bisogno della Threat Extraction API. Per la Threat Emulation è meglio utilizzare la normale Threat Prevention API. Per attivare TP API per SG e configurare la chiave API è necessario eseguire i passi di sk113599. Ti consiglio di prestare attenzione al passaggio 6b e controllare la disponibilità della pagina https:///UserCheck/TPAPI perché in caso di esito negativo la configurazione successiva non ha senso. A questo URL verranno inviati tutti i richiami API. Il tipo di chiamata (upload/query) è regolato nella chiave del corpo della chiamata — request_name. Sono obbligatorie anche le chiavi — api_key (è necessario memorizzarlo durante la configurazione) e protocol_version (al momento l'ultima versione è 1.1). Puoi trovare la documentazione ufficiale per questa API in sk137032. Tra i vantaggi relativi c'è la possibilità di inviare più file contemporaneamente per l'emulazione durante il caricamento, poiché i file vengono inviati come stringhe testuali base64. Per codificare/decodificare file da/a base64 è possibile utilizzare, a scopo dimostrativo, un convertitore online in Postman, ad esempio — https://base64.guru. In pratica, durante la scrittura del codice, è consigliabile utilizzare i metodi integrati encode e decode.

Adesso concentriamoci sulle funzioni te e extraction in questa API.

Per il componente te è previsto un dizionario te_options nelle richieste upload/query, mentre le chiavi in questa richiesta corrispondono completamente alle chiavi te in Threat Prevention API.

Esempio di richiesta per emulare un file in Win10 con report

{
"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"]
    }
    }
    ]
}

Per il componente extraction è previsto un dizionario scrub_options. In questa richiesta viene specificato il metodo di pulizia: conversione in PDF, rimozione di contenuti attivi oppure scegliere una modalità in base al profilo di Threat Prevention (indicare il nome del profilo). Una caratteristica distintiva della risposta alla richiesta API con extraction per il file è che si riceve una copia pulita in risposta a questa richiesta sotto forma di stringa cifrata base64 (non è necessario eseguire una richiesta query e cercare un id per caricare il documento)

Esempio di richiesta per la pulizia del file

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

Risposta alla richiesta

{
	"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": "Estrai contenuti potenzialmente dannosi",
			"protection_type": "Conversione in PDF",
			"real_extension": "txt",
			"risk": 0,
			"scrub_activity": "Il file TXT è stato convertito in PDF",
			"scrub_method": "Convertire in PDF",
			"scrub_result": 0,
			"scrub_time": "0.011",
			"scrubbed_content": ""
		}
	}]
} 

Nonostante siano necessari meno richieste API per ottenere una copia pulita, considero questa opzione meno preferibile e comoda rispetto alla richiesta form-data utilizzata in Threat Prevention API.

Collezioni Postman

Ho creato collezioni in Postman sia per l'API di Threat Prevention che per l'API di Threat Prevention per Security Gateway, dove sono presentate le richieste API più comuni. Affinché l'IP/url del server API e la chiave siano inseriti automaticamente nelle richieste, e che il valore hash sha256 venga memorizzato dopo il caricamento del file, all'interno delle collezioni sono state create tre variabili (si possono trovare nelle impostazioni della collezione Modifica -> Variabili): te_api (richiesta compilazione), api_key (richiesta compilazione, tranne nel caso di utilizzo dell'API TP con dispositivi locali), sha256 (lasciare vuoto, non utilizzato nell'API TP for SG).

Scarica la collezione Postman per l'API di Threat Prevention

Scarica la collezione Postman per l'API di Threat Prevention per Security Gateway

Esempi di utilizzo

Nella comunità Check Mates sono disponibili script scritti in Python che controllano i file dalla directory desiderata sia tramite API TP, sia TP API per SG. Attraverso l'interazione con l'API di Threat Prevention, le tue capacità di controllo dei file si ampliano notevolmente, poiché ora puoi controllare i file su più piattaforme contemporaneamente (è interessante il controllo su VirusTotal API, e poi nella sandbox di Check Point), e i file possono essere ottenuti non solo dal traffico di rete, ma anche prelevati da qualsiasi disco di rete e, ad esempio, dai sistemi CRM.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster