Interaktion mit Check Point SandBlast über die API

Interaktion mit Check Point SandBlast über die API

Dieser Artikel ist nützlich für diejenigen, die mit Technologien vertraut sind Check Point zur Emulation von Dateien (Threat Emulation) und proaktiver Dateireinigung (Threat Extraction) und einen Schritt in Richtung Automatisierung dieser Aufgaben machen möchten. Check Point bietet Threat Prevention API, die sowohl in der Cloud als auch auf lokalen Geräten funktioniert, und funktional identisch mit der Überprüfung von Dateien im Web-/SMTP-/FTP-/SMB-/NFS-Datenverkehr. Dieser Artikel ist teilweise eine persönliche Auslegung einer Reihe von Artikeln aus der offiziellen Dokumentation, basiert jedoch auf meiner eigenen Betriebserfahrung und eigenen Beispielen. Außerdem finden Sie in diesem Artikel persönliche Postman-Sammlungen zur Verwendung mit der Threat Prevention API.

Wichtige Abkürzungen

Die Threat Prevention API arbeitet mit drei Hauptkomponenten, die im API durch die folgenden Textwerte aufgerufen werden:

av — das Anti-Virus-Komponente, verantwortlich für die signaturbasierte Analyse bekannter Bedrohungen.

te — die Komponente Threat Emulation, verantwortlich für die Dateiüberprüfung in einer Sandbox und die Abgabe eines Urteils über böswillig (malicious)/sauber (benign) nach der Emulation.

extraction — die Komponente Threat Extraction, zuständig für die schnelle Konvertierung von Büro-Dokumenten in ein sicheres Format (bei dem allen potenziell schädlichen Inhalt entfernt wird), um sie schnell an Benutzer/Systeme zu liefern.

Die Struktur der API und die wichtigsten Einschränkungen

Die Threat Prevention API verwendet insgesamt 4 Anfragen — upload, query, download und quota. In der Kopfzeile für alle vier Anfragen muss der API-Schlüssel über den Parameter Authorization. Auf den ersten Blick könnte die Struktur viel einfacher erscheinen als bei der Management API, aber die Anzahl der Felder in den Anfragen upload und query sowie die Struktur dieser Anfragen sind ziemlich komplex. Sie können funktional mit den Profilen der Threat Prevention in der Sicherheitsrichtlinie der Gateway-/Sandbox verglichen werden.

Derzeit ist nur eine Version der Threat Prevention API veröffentlicht — 1.0, im URL für API-Aufrufe sollte angegeben werden v1 in dem Abschnitt, in dem die Version angegeben werden muss. Im Gegensatz zur Management API ist es notwendig, die API-Version in der URL anzugeben, andernfalls wird die Anfrage nicht ausgeführt.

Die Anti-Virus-Komponente unterstützt derzeit bei Aufrufen ohne andere Komponenten (te, extraction) nur Anfragen, die md5-Hashwerte verwenden. Die Threat Emulation und Threat Extraction unterstützen auch sha1- und sha256-Hashwerte.

Es ist sehr wichtig, keine Fehler bei den Anfragen zu machen! Die Anfrage kann ohne Fehler, aber nicht vollständig ausgeführt werden. Ein wenig vorweggenommen betrachten wir, was bei Fehlern/Tippfehlern in Anfragen passieren kann.

Anfrage mit einem Tippfehler im Wort report (reportss)

{ "request":  [  

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

Es gibt keine Fehler im Antworttext, aber es wird auch keine Information über die Berichte vorhanden sein.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "Die Anfrage wurde vollständig beantwortet."
      },
      "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": "Die Anfrage wurde vollständig beantwortet."
        }
      }
    }
  ]
}

Und hier die Anfrage ohne Tippfehler im Schlüssel reports.

{ "request":  [  

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

Wir erhalten eine Antwort, die bereits die IDs zum Herunterladen der Berichte enthält.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "Die Anfrage wurde vollständig beantwortet."
      },
      "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": "Die Anfrage wurde vollständig beantwortet."
        }
      }
    }
  ]
}

Wenn jedoch ein falscher/abgelaufener API-Schlüssel gesendet wird, erhalten wir einen Fehler 403 in der Antwort.

SandBlast API: in der Cloud und auf lokalen Geräten

API-Anfragen können an Check Point-Geräte gesendet werden, auf denen die Komponente (Blade) Threat Emulation aktiviert ist. Als Adresse für die Anfragen sollte die IP/URL des Geräts und der Port 18194 verwendet werden (zum Beispiel — https://10.10.57.19:18194/tecloud/api/v1/file/query). Также следует убедиться в том, что политикой безопасности на устройстве разрешено такое подключение. Авторизация через API ключ на локальных устройствах по умолчанию deaktiviert und der Authorization-Schlüssel in den Anfrage-Headern kann vollständig weggelassen werden.

API-Anfragen an die CheckPoint-Cloud müssen an die Adresse te.checkpoint.com (zum Beispiel — https://te.checkpoint.com/tecloud/api/v1/file/query). API ключ можно получить в виде триальной лицензии на 60 дней, обратившись к партнерам Check Point или в локальный офис компании.

Auf lokalen Geräten wird Threat Extraction derzeit nicht standardmäßig unterstützt Threat Prevention API und es sollte verwendet werden Threat Prevention API für Security Gateway (darüber werden wir am Ende des Artikels ausführlicher sprechen).

Lokale Geräte unterstützen die Anforderung quota nicht.

Abgesehen davon gibt es keine Unterschiede zwischen Anfragen an lokale Geräte und an die Cloud.

Der Aufruf des Upload-API

Die verwendete Methode ist — POST

Die Adresse für den Aufruf ist — https://<service_address>/tecloud/api/v1/file/upload

Die Anfrage besteht aus zwei Teilen (form-data): einer Datei, die zur Emulation/ Reinigung bestimmt ist, und dem Anfragekörper mit Text.

Die Textanfrage darf nicht leer sein, kann aber keine Konfiguration enthalten. Um die Anfrage erfolgreich zu machen, müssen mindestens der folgende Text in der Anfrage gesendet werden:

Das Mindestmaß für die Upload-Anfrage

HTTP POST

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

Header:

Authorization: <api_key>

Body

{

"request": {

}

}

Datei

Datei

In diesem Fall gelangt die Datei zur Verarbeitung gemäß den Standardparametern: Komponente — te, Betriebssystem-Images — Win XP und Win 7, ohne Erstellung eines Berichts.

Kommentare zu den wichtigsten Feldern in der Textanfrage:

file_name und file_type können leer gelassen oder gar nicht gesendet werden, da dies bei der Dateiübertragung nicht besonders nützliche Informationen sind. Im API-Antwort werden diese Felder automatisch basierend auf dem Namen der hochgeladenen Datei ausgefüllt, und die Informationen im Cache müssen trotzdem anhand von md5/sha1/sha256-Hashes gesucht werden.

Beispiel einer Anfrage mit leeren file_name und file_type

{

"request": {

"file_name": "",

"file_type": "",

}

}

features — eine Liste, in der die notwendige Funktionalität bei der Verarbeitung in der Sandbox angegeben wird — av (Antivirus), te (Threat Emulation), extraction (Threat Extraction). Wenn dieser Parameter gar nicht übergeben wird, wird nur die Standardkomponente — te (Threat Emulation) verwendet.

Um die Prüfung in den drei verfügbaren Komponenten zu aktivieren, müssen diese Komponenten in der API-Anfrage angegeben werden.

Beispiel einer Anfrage mit Prüfung in av, te und extraction

{ "request":  [  

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

Die Schlüssel im Abschnitt te

images — eine Liste, in der Wörterbücher mit ID und Versionsnummern der Betriebssysteme, in denen die Prüfung durchgeführt wird, angegeben werden müssen. ID und Versionsnummern sind für alle lokalen Geräte und die Cloud gleich.

Liste der Betriebssysteme und Versionen

Verfügbare OS-Image-ID

Revision

Bild OS und Anwendung

e50e99f3-5963-4573-af9e-e3f4750b55e2

1

Microsoft Windows: XP — 32-Bit SP3
Office: 2003, 2007
Adobe Acrobat Reader: 9.0
Flash Player 9r115 und 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

Wenn der Schlüssel images überhaupt nicht angegeben wird, erfolgt die Emulation anhand der von Check Point empfohlenen Images (aktuell sind dies Win XP und Win 7). Diese Images werden aufgrund des besten Verhältnisses von Leistung und Erkennungsrate empfohlen.

Berichte — eine Liste von Berichten, die wir anfordern, falls die Datei schädlich ist. Folgende Optionen stehen zur Verfügung:

  1. summary — .tar.gz Archiv, das den Emulationsbericht für mit allem die angeforderten Images (sowohl als HTML-Seite als auch Komponenten wie ein Video aus dem Emulationsbetriebssystem, einen Dump des Netzwerkverkehrs, einen Bericht im JSON-Format sowie das Beispiel selbst in einem passwortgeschützten Archiv) enthält. Im Antwort suchen wir nach dem Schlüssel — summary_report zum anschließenden Herunterladen des Berichts.

  2. pdf — Dokument über die Emulation in einem Image, das viele gewohnt sind über die Smart Console zu erhalten. Im Antwort suchen wir nach dem Schlüssel — pdf_report zum anschließenden Herunterladen des Berichts.

  3. xml — Dokument über die Emulation in einem Image, geeignet zum anschließenden Parsen der Parameter im Bericht. Im Antwort suchen wir nach dem Schlüssel — xml_report zum anschließenden Herunterladen des Berichts.

  4. tar — .tar.gz Archiv, das den Emulationsbericht in einem die angeforderten Images (sowohl als HTML-Seite als auch Komponenten wie ein Video aus dem Emulationsbetriebssystem, einen Dump des Netzwerkverkehrs, einen Bericht im JSON-Format sowie das Beispiel selbst in einem passwortgeschützten Archiv) enthält. Im Antwort suchen wir nach dem Schlüssel — full_report zum anschließenden Herunterladen des Berichts.

Was im Bericht summary enthalten istInteraktion mit Check Point SandBlast über die API

Die Schlüssel full_report, pdf_report, xml_report sind im Wörterbuch für jedes Betriebssystem enthalten.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "Die Anfrage wurde vollständig beantwortet."
      },
      "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": "Die Anfrage wurde vollständig beantwortet."
        }
      }
    }
  ]
}

Der Schlüssel summary_report ist für die gesamte Emulation vorhanden.

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

Man kann gleichzeitig tar- und xml- sowie pdf-Berichte anfordern, zusammenfassende Berichte sowie tar- und xml-Berichte. Es ist nicht möglich, zusammenfassende Berichte und pdf gleichzeitig anzufordern.

Die Schlüssel im Abschnitt extraction

Für die Bedrohungsextraktion werden nur zwei Schlüssel verwendet:

method — pdf (Konvertierung in pdf, Standardmethode) oder clean (Bereinigung des aktiven Inhalts).

extracted_parts_codes — Liste der Codes zum Entfernen aktiven Inhalts, nur anwendbar für die Methode clean

Codes zum Entfernen von Inhalten aus Dateien

Code

Beschreibung

1025

Verknüpfte Objekte

1026

Makros und Code

1034

Empfindliche Hyperlinks

1137

PDF GoToR Aktionen

1139

PDF Start Aktionen

1141

PDF URI Aktionen

1142

PDF Sound Aktionen

1143

PDF Film Aktionen

1150

PDF JavaScript Aktionen

1151

PDF Formularaktionen

1018

Datenbankabfragen

1019

Eingebettete Objekte

1021

Schnell gespeicherte Daten

1017

Benutzerdefinierte Eigenschaften

1036

Statistische Eigenschaften

1037

Zusammenfassende Eigenschaften

Um eine bereinigte Kopie herunterzuladen, ist auch eine Anfrage query erforderlich (darüber wird gleich gesprochen) nach wenigen Sekunden, indem die Hash-Summe der Datei und die Komponente extraction im Anfrage-Text angegeben werden. Die bereinigte Datei kann mit der id aus der Antwort auf die Anfrage query — extracted_file_download_id — abgerufen werden. Nochmals, um vorauszuspringen, gebe ich Beispiele für die Anfrage und die Antwort query zur Suche nach der id zum Herunterladen des bereinigten Dokuments an.

Anfrage query zur Suche nach dem Schlüssel extracted_file_download_id

{ "request":  [  

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

Antwort auf die Anfrage query (finden Sie den Schlüssel extracted_file_download_id)

{
    "response": [
        {
            "status": {
                "code": 1001,
                "label": "FOUND",
                "message": "Die Anfrage wurde vollständig beantwortet."
            },
            "sha256": "9a346005ee8c9adb489072eb8b5b61699652962c17596de9c326ca68247a8876",
            "file_type": "",
            "file_name": "",
            "features": [
                "extraktion"
            ],
            "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": "Makros und Code",
                "extraction_data": {
                    "input_extension": "xls",
                    "input_real_extension": "xls",
                    "message": "OK",
                    "output_file_name": "kp-20-xls.cleaned.xls.pdf",
                    "protection_name": "Potentiell bösartiger Inhalt extrahiert",
                    "protection_type": "Konvertierung in PDF",
                    "protocol_version": "1.0",
                    "risk": 5.0,
                    "scrub_activity": "Aktiver Inhalt gefunden - XLS-Datei wurde in PDF konvertiert",
                    "scrub_method": "In PDF konvertieren",
                    "scrub_result": 0.0,
                    "scrub_time": "0.013",
                    "scrubbed_content": "Makros und Code"
                },
                "tex_product": false,
                "status": {
                    "code": 1001,
                    "label": "FOUND",
                    "message": "Die Anfrage wurde vollständig beantwortet."
                }
            }
        }
    ]
}

Allgemeine Informationen

In einem API-Aufruf kann nur eine Datei zur Überprüfung gesendet werden.

Die av-Komponente benötigt keinen zusätzlichen Abschnitt mit Schlüsseln, es reicht, sie im Wörterbuch anzugeben. features.

API Abfrage aufrufen

Die verwendete Methode ist — POST

Die Adresse für den Aufruf ist — https://<service_address>/tecloud/api/v1/file/query

Bevor Sie eine Datei zum Hochladen (Upload-Anfrage) senden, ist es ratsam, den Cache der Sandbox (Query-Anfrage) zu überprüfen, um die Belastung des API-Servers zu optimieren, da möglicherweise bereits Informationen und ein Urteil zum hochzuladenden Datei auf dem API-Server vorhanden sind. Der Aufruf besteht nur aus dem Textteil. Ein notwendiger Teil der Anfrage ist der sha1/sha256/md5 Hash des Dateiinhalts. Dieser kann übrigens als Antwort auf die Upload-Anfrage erhalten werden.

Das erforderliche Minimum für die Query-Anfrage

HTTP POST

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

Header:

Authorization: <api_key>

Body

{

"request": {

"sha256": <sha256 hash sum>

}

}

Beispiel für eine Antwort auf die Upload-Anfrage, bei der die sha1/md5/sha256 Hashwerte sichtbar sind.

{
  "response": {
    "status": {
      "code": 1002,
      "label": "UPLOAD_SUCCESS",
      "message": "Die Datei wurde erfolgreich hochgeladen."
    },
    "sha1": "954b5a851993d49ef8b2412b44f213153bfbdb32",
    "md5": "ac29b7c26e7dcf6c6fdb13ac0efe98ec",
    "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
    "file_type": "",
    "file_name": "kp-20-doc.doc",
    "features": [
      "te"
    ],
    "te": {
      "trust": 0,
      "images": [
        {
          "report": {
            "verdict": "unbekannt"
          },
          "status": "not_found",
          "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
          "revision": 1
        }
      ],
      "score": -2147483648,
      "status": {
        "code": 1002,
        "label": "UPLOAD_SUCCESS",
        "message": "Die Datei wurde erfolgreich hochgeladen."
      }
    }
  }
}

Die Anfrage query sollte idealerweise genau so sein wie die Anfrage upload (oder beabsichtigt ist), oder sogar "bereits" (weniger Felder in der Anfrage query als in der Anfrage upload enthalten). Falls die Anfrage query mehr Felder enthält als in der Anfrage upload, erhalten Sie in der Antwort nicht alle erforderlichen Informationen.

Hier ist ein Beispiel für eine Antwort auf die Anfrage query, bei der nicht alle erforderlichen Daten gefunden wurden.

{
  "response": [
    {
      "status": {
        "code": 1006,
        "label": "PARTIALLY_FOUND",
        "message": "Die Anfrage kann derzeit nicht vollständig beantwortet werden."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
      "file_type": "doc",
      "file_name": "",
      "features": [
        "te",
        "extraction"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "schädlich",
              "pdf_report": "4e9cddaf-03a4-489f-aa03-3c18f8d57a52",
              "xml_report": "9c18018f-c761-4dea-9372-6a12fcb15170"
            },
            "status": "gefunden",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "schädlich",
        "severity": 4,
        "confidence": 1,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "Die Anfrage wurde vollständig beantwortet."
        }
      },
      "extraction": {
        "method": "pdf",
        "tex_product": false,
        "status": {
          "code": 1004,
          "label": "NOT_FOUND",
          "message": "Die angeforderte Datei konnte nicht gefunden werden. Bitte laden Sie sie hoch."
        }
      }
    }
  ]
}

Bitte beachten Sie die Felder. code und label. Diese Felder tauchen dreimal in den Status-Wörterbüchern auf. Zunächst sehen wir den globalen Schlüssel „code“: 1006 und „label“: „PARTIALLY_FOUND“. Danach erscheinen diese Schlüssel für jede einzelne Komponente, die wir angefordert haben - te und extraction. Und während für te klar ist, dass Daten gefunden wurden, fehlen für extraction die Informationen.

So sah die Anfrage query für das obige Beispiel aus.

{ "request":  [  

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

Wenn die Anfrage query ohne die Komponente extraction gesendet wird.

{ "request":  [  

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

Dann wird auch in der Antwort vollständige Information vorhanden sein ("code": 1001, "label": "FOUND").

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "Die Anfrage wurde vollständig beantwortet."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
      "file_type": "doc",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "bösartig",
              "pdf_report": "4e9cddaf-03a4-489f-aa03-3c18f8d57a52",
              "xml_report": "9c18018f-c761-4dea-9372-6a12fcb15170"
            },
            "status": "gefunden",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "bösartig",
        "severity": 4,
        "confidence": 1,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "Die Anfrage wurde vollständig beantwortet."
        }
      }
    }
  ]
}

Wenn es überhaupt keine Informationen im Cache gibt, wird in der Antwort "label": "NOT_FOUND" stehen.

{
  "response": [
    {
      "status": {
        "code": 1004,
        "label": "NOT_FOUND",
        "message": "Die angeforderte Datei konnte nicht gefunden werden. Bitte laden Sie sie hoch."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd91",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "unbekannt"
            },
            "status": "nicht gefunden",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NOT_FOUND",
          "message": "Die angeforderte Datei konnte nicht gefunden werden. Bitte laden Sie sie hoch."
        }
      }
    }
  ]
}

In einem API-Aufruf können mehrere Hash-Summen zur Überprüfung gesendet werden. Die Daten werden in derselben Reihenfolge zurückgegeben, in der sie in der Anfrage gesendet wurden.

Beispiel einer Anfrage query mit mehreren sha256-Summen

{ "request":  [  

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

Antwort auf die Anfrage query mit mehreren sha256-Summen

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "GEFUNDEN",
        "message": "Die Anfrage wurde vollständig beantwortet."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd81",
      "file_type": "dll",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "bösartig"
            },
            "status": "gefunden",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "bösartig",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "GEFUNDEN",
          "message": "Die Anfrage wurde vollständig beantwortet."
        }
      }
    },
    {
      "status": {
        "code": 1004,
        "label": "NICHT_GEFUNDEN",
        "message": "Die angeforderte Datei konnte nicht gefunden werden. Bitte laden Sie sie hoch."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd82",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "unbekannt"
            },
            "status": "nicht gefunden",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NICHT_GEFUNDEN",
          "message": "Die angeforderte Datei konnte nicht gefunden werden. Bitte laden Sie sie hoch."
        }
      }
    }
  ]
}

Die Anfrage mehrerer Hash-Werte im Query wird sich ebenfalls positiv auf die Leistung des API-Servers auswirken.

Aufruf der Download-API

Die verwendete Methode ist — POST (entsprechend der Dokumentation), GET funktioniert ebenfalls (und könnte logischer erscheinen)

Die Adresse für den Aufruf ist — https://<service_address>/tecloud/api/v1/file/download?id=<id>

Im Header muss der API-Schlüssel übermittelt werden, der Anfrageinhalt ist leer, die ID für den Download wird in der URL übergeben.

Als Antwort auf die Query-Anfrage, falls die Emulation abgeschlossen ist und beim Hochladen der Datei Berichte angefordert wurden, werden die IDs für den Download der Berichte sichtbar sein. Wenn eine bereinigte Kopie angefordert wird, muss die ID für den Download des bereinigten Dokuments gesucht werden.

Zusammenfassend können die Schlüssel in der Antwort auf die Query-Anfrage, die den Wert der ID für den Download enthalten, sein:

  • summary_report

  • full_report

  • pdf_report

  • xml_report

  • extracted_file_download_id

Um sicherzustellen, dass diese Schlüssel in der Antwort auf die Query-Anfrage enthalten sind, müssen sie in der Anfrage angegeben werden (für Berichte) oder man sollte nicht vergessen, einen Antrag auf die Funktion Extraktion zu stellen (für bereinigte Dokumente).

Aufruf der Quota-API

Die verwendete Methode ist — POST

Die Adresse für den Aufruf ist — https://<service_address>/tecloud/api/v1/file/quota

Zur Überprüfung des verbleibenden Kontingents in der Cloud wird die Anfrage quota verwendet. Der Anfrageinhalt ist leer.

Beispielantwort auf die Anfrage 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 für Security Gateway

Diese API wurde vor der Threat Prevention API entwickelt und ist nur für lokale Geräte gedacht. Derzeit ist sie nur nützlich, wenn Sie die Threat Extraction API benötigen. Für die Threat Emulation sollten Sie die reguläre Threat Prevention API verwenden. Um zu aktivieren TP API für SG und den API-Schlüssel zu konfigurieren, müssen die Schritte aus sk113599befolgt werden. Ich empfehle, auf Schritt 6b zu achten und die Verfügbarkeit der Seite https:///UserCheck/TPAPI zu überprüfen, da eine negative Rückmeldung die weitere Konfiguration sinnlos macht. An diese URL werden alle API-Aufrufe gesendet. Der Aufruftyp (upload/query) wird durch den Schlüssel im Anfragebody geregelt — request_name. Die erforderlichen Schlüssel sind außerdem — api_key (muss während der Konfiguration notiert werden) und protocol_version (derzeit ist die aktuelle Version 1.1). Die offizielle Dokumentation für diese API finden Sie in sk137032. Zu den relativen Vorteilen gehört die Möglichkeit, mehrere Dateien gleichzeitig zur Emulation bei ihrer Übertragung zu senden, da die Dateien als Base64-Textzeichenfolge gesendet werden. Um Dateien in Base64 zu kodieren/dekodieren, können Sie zu Demonstrationszwecken in Postman einen Online-Konverter verwenden, zum Beispiel — https://base64.guru. In der praktischen Anwendung sollten beim Kodieren die integrierten Methoden encode und decode verwendet werden.

Nun lassen Sie uns näher auf die Funktionen te und extraction in dieser API eingehen.

Für die Komponente te ist ein Wörterbuch te_options in den Anfragen upload/query vorgesehen, und die Schlüssel in dieser Anfrage stimmen vollständig mit den Schlüsseln te in Threat Prevention API.

Beispielanfrage zur Emulation einer Datei in Win10 mit Berichten

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

Für die Komponente extraction ist ein Wörterbuch scrub_options. In dieser Anfrage wird die Reinigungsmethode angegeben: Konvertierung in PDF, Bereinigung von aktivem Inhalt oder Auswahl des Modus gemäß dem Profil Threat Prevention (der Name des Profils wird angegeben). Ein charakteristisches Merkmal der Antwort auf die API-Anfrage mit Extraction für die Datei ist, dass Sie eine gereinigte Kopie als Antwort auf diese Anfrage in Form einer verschlüsselten base64-Zeichenfolge erhalten (Sie müssen keine Anfrage für die Abfrage stellen und die ID zur Dokumentenladung suchen).

Beispiel einer Anfrage zur Bereinigung einer Datei

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

Antwort auf die Anfrage

{
	"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": "Potenziell bösartige Inhalte extrahieren",
			"protection_type": "Konvertierung in PDF",
			"real_extension": "txt",
			"risk": 0,
			"scrub_activity": "TXT-Datei wurde in PDF konvertiert",
			"scrub_method": "Konvertierung in PDF",
			"scrub_result": 0,
			"scrub_time": "0.011",
			"scrubbed_content": ""
		}
	}]
} 

Obwohl für den Erhalt einer gereinigten Kopie weniger API-Anfragen erforderlich sind, halte ich diese Variante für weniger direkt und praktisch als die form-data Anfrage, die in Threat Prevention API.

Postman-Kollektionen

Ich habe Kollektionen in Postman sowohl für die Threat Prevention API als auch für die Threat Prevention API für Security Gateway erstellt, in denen die gängigsten API-Anfragen dargestellt sind. Damit IP/URL des API-Servers und der Schlüssel automatisch in die Anfragen eingesetzt werden und die SHA256-Hashsumme nach dem Hochladen der Datei gespeichert bleibt, wurden innerhalb der Kollektionen drei Variablen erstellt (diese finden Sie in den Einstellungen der Sammlung unter Bearbeiten -> Variablen): te_api (muss ausgefüllt werden), api_key (muss ausgefüllt werden, außer bei Verwendung der TP API mit lokalen Geräten), sha256 (leer lassen, wird in der TP API für SG nicht verwendet).

Postman-Kollektion für die Threat Prevention API herunterladen

Postman-Kollektion für die Threat Prevention für Security Gateway API herunterladen

Beispiele zur Verwendung

In der Gemeinschaft Check Mates sind Skripte dargestellt, die in Python geschrieben wurden und Dateien aus dem gewünschten Verzeichnis sowohl über TP API, als auch TP API für SG. Durch die Interaktion mit der Threat Prevention API erweitern sich Ihre Möglichkeiten zur Dateiprüfung erheblich, da Sie nun Dateien sofort auf mehreren Plattformen überprüfen können (interessant erscheint die Prüfung auf VirusTotal API, und dann in der Sandbox Check Point), und Dateien nicht nur aus dem Netzwerkverkehr erhalten, sondern sie auch von beliebigen Netzlaufwerken sowie beispielsweise aus CRM-Systemen abrufen.

Quelle: habr.com

60GB SSD 8Gb DDR4