Interakcja z Check Point SandBlast przez API

Interakcja z Check Point SandBlast przez API

Ten artykuł będzie przydatny dla osób znających technologie Check Point emulacji plików (Emulacja zagrożeń) oraz proaktywnego czyszczenia plików (Ekstrakcja zagrożeń) i pragnących uczynić krok w kierunku automatyzacji tych zadań. Check Point oferuje Threat Prevention API, które działa zarówno w chmurze, jak i na lokalnych urządzeniach. Jego funkcjonalność jest identyczna jak w przypadku analizy plików w ruchu web/smtp/ftp/smb/nfs. Artykuł ten jest częściowo autorską interpretacją zestawu artykułów z oficjalnej dokumentacji, opartą na swoim doświadczeniu z eksploatacji oraz na własnych przykładach. W artykule znajdziesz również autorskie kolekcje Postman do pracy z Threat Prevention API.

Podstawowe skróty

Threat Prevention API działa z trzema głównymi komponentami, które w API są wywoływane przez następujące tekstowe wartości:

av — komponent Anti-Virus, odpowiedzialny za analizę sygnatur znanych zagrożeń.

te — komponent Threat Emulation, odpowiedzialny za analizę plików w piaskownicy oraz wydawanie werdyktu złośliwy (malicious)/czysty (benign) po emulacji.

extraction — komponent Threat Extraction, odpowiedzialny za szybkie konwertowanie dokumentów biurowych na bezpieczny format (w którym usuwana jest cała potencjalnie złośliwa treść), w celu szybkiej dostawy do użytkowników/systemów.

Struktura API i główne ograniczenia

Threat Prevention API używa zaledwie 4 zapytań — upload, query, download oraz quota. W nagłówku dla wszystkich czterech zapytań należy przesłać klucz API, używając parametru Authorization. Na pierwszy rzut oka struktura może wydawać się znacznie prostsza niż w Management API, ale liczba pól w zapytaniach upload i query oraz struktura tych zapytań są dość złożone. Można je funkcjonalnie porównać z profilami Threat Prevention w polityce bezpieczeństwa bramy/piaskownicy.

Obecnie dostępna jest tylko jedna wersja Threat Prevention API — 1.0, w URL do wywołań API należy wskazać v1 w tej części, gdzie wymagana jest wskazanie wersji. W przeciwieństwie do Management API, wskazanie wersji API w adresie URL jest obowiązkowe, inaczej zapytanie nie zostanie wykonane.

Komponent Anti-Virus przy wywołaniu bez innych komponentów (te, extraction) obecnie wspiera tylko zapytania query z sumami kontrolnymi md5. Threat Emulation i Threat Extraction wspierają również sumy kontrolne sha1 i sha256.

Bardzo ważne jest unikanie błędów w zapytaniach! Żądanie może być wykonane bez błędu, ale nie w pełni. Z przodu omówimy, co może się zdarzyć w przypadku błędów/pomyłek w żądaniach.

Żądanie z błędem w słowie reports(reportss)

{ "request":  [  

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

W odpowiedzi nie będzie błędu, ale nie będzie żadnych informacji o raportach.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "Żądanie zostało w pełni zaadresowane."
      },
      "sha256": "9cc488fa6209caeb201678f8360a6bb806bd2f85b59d108517ddbbf90baec33a",
      "file_type": "pdf",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "złośliwy"
            },
            "status": "znaleziony",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "złośliwy",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "Żądanie zostało w pełni zaadresowane."
        }
      }
    }
  ]
}

A oto żądanie bez błędu w kluczu reports.

{ "request":  [  

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

Otrzymujemy odpowiedź, w której już znajdują się identyfikatory do pobrania raportów.

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "Żądanie zostało w pełni zaadresowane."
      },
      "sha256": "9cc488fa6209caeb201678f8360a6bb806bd2f85b59d108517ddbbf90baec33a",
      "file_type": "pdf",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "złośliwy",
              "full_report": "b684066e-e41c-481a-a5b4-be43c27d8b65",
              "pdf_report": "e48f14f1-bcc7-4776-b04b-1a0a09335115",
              "xml_report": "d416d4a9-4b7c-4d6d-84b9-62545c588963"
            },
            "status": "znaleziony",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "złośliwy",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "Żądanie zostało w pełni zaadresowane."
        }
      }
    }
  ]
}

Jeśli jednak wyślemy niewłaściwy/zatrzymany klucz API, to w odpowiedzi otrzymamy błąd 403.

SandBlast API: w chmurze i na lokalnych urządzeniach.

Żądania API można wysyłać do urządzeń Check Point, na których włączony jest komponent (blade) Threat Emulation. Jako adres do żądań należy używać ip/url urządzenia oraz portu 18194 (na przykład — https://10.10.57.19:18194/tecloud/api/v1/file/query). Также следует убедиться в том, что политикой безопасности на устройстве разрешено такое подключение. Авторизация через API ключ на локальных устройствах по умолчанию wyłączona i klucz Authorization w nagłówkach zapytań można całkowicie pominąć.

Zapytania API do chmury CheckPoint należy wysyłać na adres te.checkpoint.com (na przykład — https://te.checkpoint.com/tecloud/api/v1/file/query). API ключ можно получить в виде триальной лицензии на 60 дней, обратившись к партнерам Check Point или в локальный офис компании.

Na lokalnych urządzeniach Threat Extraction na razie nie jest obsługiwane w standardowym Threat Prevention API i należy używać Threat Prevention API for Security Gateway (o tym omówimy szczegółowo pod koniec artykułu).

Lokalne urządzenia nie obsługują zapytania quota.

Poza tym nie ma różnic między zapytaniami do lokalnych urządzeń a do chmury.

Wywołanie Upload API

Używana metoda to — POST

Adres do wywołania to — https://<service_address>/tecloud/api/v1/file/upload

Zapytanie składa się z dwóch części (form-data): pliku przeznaczonego do emulacji/oczyszczania oraz treści zapytania z tekstem.

Treść zapytania nie może być pusta, ale może nie zawierać żadnej konfiguracji. Aby zapytanie było udane, należy wysłać przynajmniej następujący tekst w zapytaniu:

Minimalne wymagania dla zapytania upload

i nie mogliśmy uzyskać zawartości ciała odpowiedzi, jeśli kod zwracany był

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

Nagłówki:

Authorization: <api_key>

Treść

{

"request": {

}

}

Plik

Plik

W takim przypadku plik do przetworzenia trafi zgodnie z domyślnymi ustawieniami: komponent — te, obrazy systemów operacyjnych — Win XP i Win 7, bez generowania raportu.

Uwagi do głównych pól w treści zapytania:

file_name i file_type można pozostawić puste lub w ogóle nie wysyłać, ponieważ nie są to szczególnie przydatne informacje przy przesyłaniu pliku. W odpowiedzi API te pola zostaną automatycznie wypełnione na podstawie nazwy przesyłanego pliku, a informacje w pamięci podręcznej i tak będzie trzeba szukać po sumach md5/sha1/sha256.

Przykład zapytania z pustymi file_name i file_type

{

"request": {

"file_name": "",

"file_type": "",

}

}

features — lista, w której określono niezbędną funkcjonalność podczas przetwarzania w piaskownicy — av (Anti-Virus), te (Threat Emulation), extraction (Threat Extraction). Jeśli ten parametr w ogóle nie zostanie przekazany, użyty zostanie tylko domyślny komponent — te(Threat Emulation).

Aby włączyć sprawdzanie w trzech dostępnych komponentach, należy wskazać te komponenty w zapytaniu API.

Przykład zapytania z kontrolą w av, te i extraction

{ "request": [

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

Klucze w sekcji te

images — lista, wewnątrz której powinny znajdować się słowniki z id i numerami wersji systemów operacyjnych, w których będzie przeprowadzane sprawdzenie. ID i numery wersji są takie same dla wszystkich lokalnych urządzeń i chmury.

Lista systemów operacyjnych i wersji

Dostępny ID obrazu systemu operacyjnego

Wersja

Obraz systemu operacyjnego i aplikacji

e50e99f3-5963-4573-af9e-e3f4750b55e2

1

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

Jeśli klucz images nie został w ogóle podany, emulacja będzie odbywać się na obrazach zalecanych przez Check Point (aktualnie są to Win XP i Win 7). Obrazy te zostały rekomendowane w oparciu o najlepszą równowagę wydajności i wskaźnika wykrycia.

raporty — lista raportów, które żądamy na wypadek, gdyby plik okazał się złośliwy. Dostępne są następujące opcje:

  1. summary — archiwum .tar.gz, które zawiera raport z emulacji dla z wszystkiego. żądanych obrazów (zarówno w formie strony html, jak i takie elementy jak wideo z emulatora, zrzut ruchu sieciowego, raport w json, oraz sam próbka w archiwum zabezpieczonym hasłem). W odpowiedzi szukamy klucza — summary_report do późniejszego pobrania raportu.

  2. pdf — dokument z emulacji w jednym obrazie, który wielu przyzwyczaiło się otrzymywać za pośrednictwem Smart Console. W odpowiedzi szukamy klucza — pdf_report do późniejszego pobrania raportu.

  3. xml — dokument z emulacji w jednym obraz, wygodny do późniejszego parsowania parametrów w raporcie. W odpowiedzi szukamy klucza — xml_report do późniejszego pobrania raportu.

  4. tar — archiwum .tar.gz, które zawiera raport z emulacji w jednym żądanych obrazów (zarówno w formie strony html, jak i takie elementy jak wideo z emulatora, zrzut ruchu sieciowego, raport w json, oraz sam próbka w archiwum zabezpieczonym hasłem). W odpowiedzi szukamy klucza — full_report do późniejszego pobrania raportu.

Co jest w raporcie summaryInterakcja z Check Point SandBlast przez API

Klucze full_report, pdf_report, xml_report znajdują się w słowniku dla każdego systemu operacyjnego

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "Zapytanie zostało całkowicie zrealizowane."
      },
      "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": "Zapytanie zostało całkowicie zrealizowane."
        }
      }
    }
  ]
}

A klucz summary_report — jest jeden dla całej emulacji

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

Można jednocześnie żądać raportów w formacie tar, xml i pdf, można także uzyskać raport w formacie summary oraz tar i xml. Niemożliwe jest jednak jednoczesne żądanie raportu summary i pdf.

Klucze w sekcji extraction

Do ekstrakcji zagrożeń używane są tylko dwa klucze:

, który nie jest widoczny, ale sugeruje domyślną wartość — pdf (konwersja do pdf, używane domyślnie) lub clean (czyszczenie aktywnej zawartości).

extracted_parts_codes — lista kodów do usunięcia aktywnej zawartości, stosowane tylko dla metody clean

Kody do usunięcia zawartości z plików

Kod

Opis

1025

Obiekty powiązane

1026

Makra i kody

1034

Wrażliwe hiperlinki

1137

Akcje PDF GoToR

1139

Akcje uruchamiania PDF

1141

Akcje URI PDF

1142

Akcje dźwiękowe PDF

1143

Akcje filmowe PDF

1150

Akcje JavaScript PDF

1151

Akcje przesyłania formularzy PDF

1018

Zapytania do bazy danych

1019

Obiekty osadzone

1021

Dane szybkiego zapisu

1017

Własności niestandardowe

1036

Własności statystyczne

1037

Własności podsumowania

Aby pobrać oczyszczoną kopię, należy również wysłać zapytanie query (o którym będzie mowa później) kilka sekund później, podając sumę kontrolną pliku i komponent extraction w treści zapytania. Oczyszczony plik będzie można pobrać za pomocą id z odpowiedzi na zapytanie query — extracted_file_download_id. Jeszcze raz, aby przyspieszyć, podaję przykłady zapytania i odpowiedzi query w celu wyszukania id do pobrania oczyszczonego dokumentu.

Zapytanie query w celu wyszukania klucza extracted_file_download_id

{ "request":  [  

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

Odpowiedź na zapytanie query (znajdź klucz extracted_file_download_id)

{
    "response": [
        {
            "status": {
                "code": 1001,
                "label": "ZNALEZIONO",
                "message": "Żądanie zostało w pełni zrealizowane."
            },
            "sha256": "9a346005ee8c9adb489072eb8b5b61699652962c17596de9c326ca68247a8876",
            "file_type": "",
            "file_name": "",
            "features": [
                "ekstrakcja"
            ],
            "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": "Makra i kod",
                "extraction_data": {
                    "input_extension": "xls",
                    "input_real_extension": "xls",
                    "message": "OK",
                    "output_file_name": "kp-20-xls.cleaned.xls.pdf",
                    "protection_name": "Potencjalnie złośliwa zawartość wyekstrahowana",
                    "protection_type": "Konwersja do PDF",
                    "protocol_version": "1.0",
                    "risk": 5.0,
                    "scrub_activity": "Znaleziono aktywną zawartość - plik XLS został przekonwertowany do PDF",
                    "scrub_method": "Konwertuj do PDF",
                    "scrub_result": 0.0,
                    "scrub_time": "0.013",
                    "scrubbed_content": "Makra i kod"
                },
                "tex_product": false,
                "status": {
                    "code": 1001,
                    "label": "ZNALEZIONO",
                    "message": "Żądanie zostało w pełni zrealizowane."
                }
            }
        }
    ]
}

Ogólne informacje

W jednym wywołaniu API można przesłać tylko jeden plik do sprawdzenia.

Komponent av nie wymaga dodatkowej sekcji z kluczami, wystarczy podać go w słowniku. features.

Wywołanie Query API

Używana metoda to — POST

Adres do wywołania to — https://<service_address>/tecloud/api/v1/file/query

Zanim wyślesz plik do przesłania (zapytanie upload), warto przeprowadzić kontrolę pamięci podręcznej piaskownicy (zapytanie query) w celu optymalizacji obciążenia serwera API, ponieważ możliwe, że na serwerze API już znajdują się informacje i werdykt dotyczący przesyłanego pliku. Wywołanie składa się tylko z części tekstowej. Obowiązkowy element zapytania to suma kontrolna sha1/sha256/md5 pliku. Można ją zresztą uzyskać w odpowiedzi na zapytanie upload.

Minimalne wymagania dla zapytania query

i nie mogliśmy uzyskać zawartości ciała odpowiedzi, jeśli kod zwracany był

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

Nagłówki:

Authorization: <api_key>

Treść

{

"request": {

„sha256”: <sha256 hash sum>

}

}

Przykład odpowiedzi na zapytanie upload, gdzie widoczne są sumy kontrolne sha1/md5/sha256

{
  "response": {
    "status": {
      "code": 1002,
      "label": "UPLOAD_SUCCESS",
      "message": "Plik został pomyślnie przesłany."
    },
    "sha1": "954b5a851993d49ef8b2412b44f213153bfbdb32",
    "md5": "ac29b7c26e7dcf6c6fdb13ac0efe98ec",
    "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
    "file_type": "",
    "file_name": "kp-20-doc.doc",
    "features": [
      "te"
    ],
    "te": {
      "trust": 0,
      "images": [
        {
          "report": {
            "verdict": "nieznane"
          },
          "status": "nie_znaleziono",
          "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
          "revision": 1
        }
      ],
      "score": -2147483648,
      "status": {
        "code": 1002,
        "label": "UPLOAD_SUCCESS",
        "message": "Plik został pomyślnie przesłany."
      }
    }
  }
}

Zapytanie query oprócz sumy haszującej powinno być idealnie takie samo, jak było (lub planowane jest) zapytanie upload, a nawet "już" (zawierać w zapytaniu query mniej pól niż w zapytaniu upload). W przypadku, gdy zapytanie query zawiera więcej pól niż było w zapytaniu upload, otrzymasz w odpowiedzi nie wszystkie wymagane informacje.

Oto przykład odpowiedzi na zapytanie query, w którym nie znaleziono wszystkich wymaganych danych

{
  "response": [
    {
      "status": {
        "code": 1006,
        "label": "PARTIALLY_FOUND",
        "message": "Żądanie nie może być w pełni zrealizowane w tej chwili."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
      "file_type": "doc",
      "file_name": "",
      "features": [
        "te",
        "extraction"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "złośliwy",
              "pdf_report": "4e9cddaf-03a4-489f-aa03-3c18f8d57a52",
              "xml_report": "9c18018f-c761-4dea-9372-6a12fcb15170"
            },
            "status": "znaleziono",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "złośliwy",
        "severity": 4,
        "confidence": 1,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "Żądanie zostało w pełni zrealizowane."
        }
      },
      "extraction": {
        "method": "pdf",
        "tex_product": false,
        "status": {
          "code": 1004,
          "label": "NOT_FOUND",
          "message": "Nie można znaleźć żądanego pliku. Proszę go przesłać."
        }
      }
    }
  ]
}

Zwróć uwagę na pola code i label. Te pola występują trzy razy w słownikach status. Na początku widzimy globalny klucz "code": 1006 oraz "label": "PARTIALLY_FOUND". Następnie te klucze występują w każdym z osobnych komponentów, które żądaliśmy — te oraz extraction. I jeśli dla te jasne jest, że dane zostały znalezione, to dla extraction informacje nie są dostępne.

Oto jak wyglądało zapytanie query dla powyższego przykładu

{ "request":  [  

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

Jeśli wyślesz zapytanie query bez komponentu extraction

{ "request":  [  

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

To w odpowiedzi będzie pełna informacja ("code": 1001, "label": "FOUND")

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "FOUND",
        "message": "Żądanie zostało w pełni zrealizowane."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd90",
      "file_type": "doc",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "złośliwy",
              "pdf_report": "4e9cddaf-03a4-489f-aa03-3c18f8d57a52",
              "xml_report": "9c18018f-c761-4dea-9372-6a12fcb15170"
            },
            "status": "znaleziono",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "złośliwy",
        "severity": 4,
        "confidence": 1,
        "status": {
          "code": 1001,
          "label": "FOUND",
          "message": "Żądanie zostało w pełni zrealizowane."
        }
      }
    }
  ]
}

Jeśli w pamięci podręcznej nie ma żadnych informacji, odpowiedź będzie zawierać "label": "NOT_FOUND"

{
  "response": [
    {
      "status": {
        "code": 1004,
        "label": "NOT_FOUND",
        "message": "Nie znaleziono żądanego pliku. Proszę go przesłać."
      },
      "sha256": "313c0feb009356495b7f4a60e96737120beb30e1912c6d866218cee830aebd91",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "nieznany"
            },
            "status": "nie_znaleziono",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NOT_FOUND",
          "message": "Nie znaleziono żądanego pliku. Proszę go przesłać."
        }
      }
    }
  ]
}

W jednym wywołaniu API można przesłać kilka sum kontrolnych do sprawdzenia. W odpowiedzi dane będą zwrócone w tej samej kolejności, w jakiej zostały przesłane w zapytaniu.

Przykład zapytania query z wieloma sumami sha256

{ "request":  [  

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

Odpowiedź na zapytanie query z wieloma sumami sha256

{
  "response": [
    {
      "status": {
        "code": 1001,
        "label": "ZNALEZIONO",
        "message": "Prośba została całkowicie przetworzona."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd81",
      "file_type": "dll",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 10,
        "images": [
          {
            "report": {
              "verdict": "złośliwy"
            },
            "status": "znaleziono",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "combined_verdict": "złośliwy",
        "severity": 4,
        "confidence": 3,
        "status": {
          "code": 1001,
          "label": "ZNALEZIONO",
          "message": "Prośba została całkowicie przetworzona."
        }
      }
    },
    {
      "status": {
        "code": 1004,
        "label": "NIE ZNALEZIONE",
        "message": "Nie można znaleźć żądanego pliku. Proszę go przesłać."
      },
      "sha256": "b84531d3829bf6131655773a3863d6b16f6389b7f4036aef9b81c0cb60e7fd82",
      "file_type": "",
      "file_name": "",
      "features": [
        "te"
      ],
      "te": {
        "trust": 0,
        "images": [
          {
            "report": {
              "verdict": "nieznany"
            },
            "status": "nie_znaleziono",
            "id": "10b4a9c6-e414-425c-ae8b-fe4dd7b25244",
            "revision": 1
          }
        ],
        "score": -2147483648,
        "status": {
          "code": 1004,
          "label": "NIE ZNALEZIONE",
          "message": "Nie można znaleźć żądanego pliku. Proszę go przesłać."
        }
      }
    }
  ]
}

Wysłanie zapytania z wieloma sumami haszującymi w jednym żądaniu korzystnie wpłynie na wydajność serwera API.

Wywołanie API pobierania

Używana metoda to — POST (zgodnie z dokumentacją), i login/hasło: admin/admin. również działa (i może wydawać się bardziej logiczne)

Adres do wywołania to — https://<service_address>/tecloud/api/v1/file/download?id=<id>

W nagłówku należy przesłać klucz API, ciało żądania — puste, id do pobrania jest przekazywane w adresie URL.

W odpowiedzi na zapytanie query, w przypadku zakończenia emulacji i jeśli podczas ładowania pliku zostały zażądane raporty, będą widoczne id do pobrania raportów. W przypadku żądania oczyszczonej kopii, należy szukać id do pobrania oczyszczonego dokumentu.

W sumie, klucze w odpowiedzi na zapytanie query, zawierające wartość id do pobrania mogą być:

  • summary_report

  • full_report

  • pdf_report

  • xml_report

  • extracted_file_download_id

Oczywiście, aby te klucze znalazły się w odpowiedzi na zapytanie query, należy je wskazać w zapytaniu (dla raportów) lub nie zapomnieć wykonać zapytania o funkcję ekstrakcji (dla oczyszczonych dokumentów)

Wywołanie API limitu

Używana metoda to — POST

Adres do wywołania to — https://<service_address>/tecloud/api/v1/file/quota

Aby sprawdzić pozostały limit w chmurze, używa się zapytania quota. Ciało zapytania jest puste.

Przykład odpowiedzi na zapytanie 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

To API został opracowany przed API zapobiegania zagrożeniom i jest przeznaczony wyłącznie dla lokalnych urządzeń. Na chwilę obecną może być przydatny jedynie, jeśli potrzebujesz API ekstrakcji zagrożeń. Do emulacji zagrożeń lepiej użyć standardowego API zapobiegania zagrożeniom. Aby włączyć TP API dla SG i skonfigurować klucz API, należy wykonać kroki opisane w sk113599. Zalecam zwrócenie uwagi na krok 6b i sprawdzenie dostępności strony https:///UserCheck/TPAPI , ponieważ w przypadku negatywnego wyniku dalsza konfiguracja nie ma sensu. Na podany adres url będą wysyłane wszystkie wywołania API. Typ wywołania (upload/query) regulowany jest przez klucz w ciele wywołania — request_name. Obowiązkowymi kluczami są — api_key (należy go zapamiętać podczas konfiguracji) oraz protocol_version (aktualna wersja to 1.1). Oficjalną dokumentację dla tego API można znaleźć w sk137032. Do względnych zalet można zaliczyć możliwość jednoczesnego przesyłania wielu plików do emulacji podczas ich przesyłania, ponieważ pliki przesyłane są jako tekstowy ciąg base64. Aby kodować/dekodować pliki w/z base64, można do celów demonstracyjnych w Postman użyć online konwertera, na przykład — https://base64.guru. W praktyce pisząc kod, należy korzystać z wbudowanych metod encode i decode.

Teraz przyjrzyjmy się dokładniej funkcjom te i extraction w tym API.

Dla komponentu te przewidziano słownik te_options w zapytaniach upload/query, a klucze w tym zapytaniu całkowicie pokrywają się z kluczami te w Threat Prevention API.

Przykład zapytania do emulacji pliku w Win10 z raportami

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

Dla komponentu extraction przewidziano słownik scrub_optionsW tym żądaniu podaje się metodę oczyszczenia: konwersję do PDF, usunięcie aktywnej zawartości lub wybór trybu zgodnie z profilem Threat Prevention (wskazanie nazwy profilu). Cechą wyróżniającą odpowiedź na żądanie API z extraction dla pliku jest to, że otrzymujesz oczyszczoną kopię w odpowiedzi na to żądanie w postaci zaszyfrowanego ciągu base64 (nie musisz wysyłać zapytania query ani szukać id w celu pobrania dokumentu)

Przykład żądania oczyszczenia pliku

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

Odpowiedź na żądanie

{
	"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": "Usunięcie potencjalnie szkodliwej zawartości",
			"protection_type": "Konwersja do PDF",
			"real_extension": "txt",
			"risk": 0,
			"scrub_activity": "Plik TXT został skonwertowany do PDF",
			"scrub_method": "Konwersja do PDF",
			"scrub_result": 0,
			"scrub_time": "0.011",
			"scrubbed_content": ""
		}
	}]
} 

Mimo że do uzyskania oczyszczonej kopii wymagane jest mniej zapytań API, uważam, że ta opcja jest mniej preferowana i wygodna w porównaniu do żądania form-data, które jest stosowane w Threat Prevention API.

Kolekcje Postman

Utworzyłem kolekcje w Postman zarówno dla Threat Prevention API, jak i Threat Prevention API for Security Gateway, w których przedstawiono najczęściej używane żądania API. Aby adres IP/url API serwera i klucz były automatycznie podstawiane w żądaniach, a suma kontrolna sha256 zapamiętywana po przesłaniu pliku, w kolekcjach utworzono trzy zmienne (można je znaleźć w ustawieniach kolekcji Edytuj -> Zmienne): te_api (wymagane do wypełnienia), api_key (wymagane do wypełnienia, z wyjątkiem przypadków użycia TP API z lokalnymi urządzeniami), sha256 (pozostawić pustym, nie jest używane w TP API for SG).

Pobierz kolekcję Postman dla Threat Prevention API

Pobierz kolekcję Postman dla Threat Prevention for Security Gateway API

Przykłady użycia

W społeczności Check Mates zostały przedstawione skrypty napisane w Pythonie, które sprawdzają pliki z odpowiedniego katalogu, zarówno przez TP API, jak i TP API dla SG. Dzięki współpracy z Threat Prevention API Twoje możliwości sprawdzania plików znacznie się zwiększają, ponieważ teraz możesz sprawdzać pliki jednocześnie na kilku platformach (interesująco wygląda sprawdzanie w VirusTotal API, a następnie w piaskownicy Check Point), a pliki można pozyskiwać nie tylko z ruchu sieciowego, ale również z dowolnych dysków sieciowych oraz, na przykład, systemów CRM.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster