Introdução
Este documento descreve como automatizar o isolamento de parada/início em vários endpoints usando a API para Cisco Secure Endpoint.
Pré-requisitos
Requisitos
A Cisco recomenda que você tenha conhecimento destes tópicos:
- Endpoint seguro da Cisco
- Console Cisco Secure Endpoint
- API do Cisco Secure Endpoint
- Python
Componentes Utilizados
As informações neste documento são baseadas nestas versões de software:
- Endpoint Cisco Secure 8.4.0.30201
- Endpoint para ambiente python de host
- Python 3. 11. 7
As informações neste documento foram criadas a partir de dispositivos em um ambiente de laboratório específico. Todos os dispositivos utilizados neste documento foram iniciados com uma configuração (padrão) inicial. Se a rede estiver ativa, certifique-se de que você entenda o impacto potencial de qualquer comando.
Informações de Apoio
- Use uma solicitação PUT para iniciar o isolamento.
- Uma solicitação DELETE é usada para interromper o isolamento.
- Verifique a documentação da API para obter mais informações.
Problema
O Cisco Secure Endpoint permite iniciar/parar o isolamento em uma máquina de cada vez. No entanto, durante um incidente de segurança, muitas vezes é necessário executar essas operações em vários endpoints simultaneamente para conter as possíveis ameaças de forma eficaz. Automatizar o processo de isolamento de início/parada para endpoints em massa usando a API pode melhorar significativamente a eficiência da resposta a incidentes e reduzir o risco geral para a rede.
Solução
- O script Python fornecido neste artigo pode ser usado para iniciar/terminar o isolamento em vários endpoints em sua organização usando credenciais de API de endpoint seguro.
- Para gerar as credenciais da API do AMP, consulte Visão geral da API do Cisco AMP para endpoints
- Para usar o script fornecido, você precisa instalarpythonem seus endpoints.
- Após a instalação do python, instale o módulo requests
pip install requests
Aviso: o script é fornecido apenas para fins ilustrativos e tem como objetivo demonstrar como automatizar o recurso de isolamento de endpoint usando a API. O Cisco Technical Assistance Center (TAC) não está envolvido na solução de problemas relacionados a este script. Os usuários devem ter cuidado e testar completamente o script em um ambiente seguro antes de implantá-lo em uma configuração de produção.
Script
Você pode usar o script fornecido para iniciar o isolamento em vários endpoints em sua empresa:
import requests
def read_config(file_path):
"""
Reads the configuration file to get the API base URL, client ID, and API key.
"""
config = {}
try:
with open(file_path, 'r') as file:
for line in file:
# Split each line into key and value based on '='
key, value = line.strip().split('=')
config[key] = value
except FileNotFoundError:
print(f"Error: Configuration file '{file_path}' not found.")
exit(1) # Exit the script if the file is not found
except ValueError:
print(f"Error: Configuration file '{file_path}' is incorrectly formatted.")
exit(1) # Exit the script if the file format is invalid
return config
def read_guids(file_path):
"""
Reads the file containing GUIDs for endpoints to be isolated.
"""
try:
with open(file_path, 'r') as file:
# Read each line, strip whitespace, and ignore empty lines
return [line.strip() for line in file if line.strip()]
except FileNotFoundError:
print(f"Error: GUIDs file '{file_path}' not found.")
exit(1) # Exit the script if the file is not found
except Exception as e:
print(f"Error: An unexpected error occurred while reading the GUIDs file: {e}")
exit(1) # Exit the script if an unexpected error occurs
def isolate_endpoint(base_url, client_id, api_key, connector_guid):
"""
Sends a PUT request to isolate an endpoint identified by the connector GUID.
Args:
base_url (str): The base URL for the API.
client_id (str): The API client ID for authentication.
api_key (str): The API key for authentication.
connector_guid (str): The GUID of the connector to be isolated.
"""
url = f"{base_url}/{connector_guid}/isolation"
try:
# Send PUT request with authentication
response = requests.put(url, auth=(client_id, api_key))
response.raise_for_status() # Raise an HTTPError for bad responses (4xx and 5xx)
if response.status_code == 200:
print(f"Successfully isolated endpoint: {connector_guid}")
else:
print(f"Failed to isolate endpoint: {connector_guid}. Status Code: {response.status_code}, Response: {response.text}")
except requests.RequestException as e:
print(f"Error: An error occurred while isolating the endpoint '{connector_guid}': {e}")
if __name__ == "__main__":
# Read configuration values from the config file
config = read_config('config.txt')
# Read list of GUIDs from the GUIDs file
connector_guids = read_guids('guids.txt')
# Extract configuration values
base_url = config.get('BASE_URL')
api_client_id = config.get('API_CLIENT_ID')
api_key = config.get('API_KEY')
# Check if all required configuration values are present
if not base_url or not api_client_id or not api_key:
print("Error: Missing required configuration values.")
exit(1) # Exit the script if any configuration values are missing
# Process each GUID by isolating the endpoint
for guid in connector_guids:
isolate_endpoint(base_url, api_client_id, api_key, guid)
Instruções
NAM - https://api.amp.cisco.com/v1/computers/
EU - https://api.eu.amp.cisco.com/v1/computers/
APJC - https://api.apjc.amp.cisco.com/v1/computers/
- Crie um arquivo config.txt no mesmo diretório do script com o conteúdo mencionado. Exemplo do arquivo config.txt:
BASE_URL=https://api.apjc.amp.cisco.com/v1/computers/
API_CLIENT_ID=xxxxxxxxxxxxxxxxxxxx
API_KEY=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- Crie um arquivo guids.txt no mesmo diretório do script com a lista de GUIDs de conector, um por linha. Adicione o máximo de GUIDs necessário. Exemplo do arquivo guids.txt:
abXXXXXXXXXXXXcd-XefX-XghX-X12X-XXXXXX567XXXXXXX
yzXXXXXXXXXXXXlm-XprX-XmnX-X34X-XXXXXX618XXXXXXX
Observação: você pode coletar os GUIDs de seus endpoints por meio do API GET /v1/computers ou do Cisco Secure Endpoint Console navegando para Management > Computers, expandindo a entrada para um endpoint específico e copiando o GUID do conector.
- Abra um Terminal ou um Prompt de Comando. Navegue até o diretório onde o start_isolamento_script.py está localizado.
- Execute o script executando o comando mencionado:
python start_isolation_script.py
Verificar
- O script tenta isolar cada ponto final especificado no arquivo guids.txt.
- Verifique o terminal ou o prompt de comando para obter mensagens de êxito ou de erro para cada endpoint.
Observação: o script start_isolamento.py anexado pode ser usado para iniciar o isolamento em pontos finais, enquanto stop_isolamento.py é projetado para parar o isolamento em pontos finais. Todas as instruções para executar o script permanecem as mesmas.