Use a API de consulta de eventos REST do FortiSIEM. Envie uma consulta XML para /phoenix/rest/query/eventQuery, que retorna um ID de consulta. Monitore o progresso até atingir 100 e, em seguida, recupere os eventos. Os resultados voltam como XML. A linha de log original de cada evento está no atributo rawEventMsg, então algumas linhas de Python transformam o resultado em logs brutos. Exportações da tela de Análises saem em formatos que o LogTotal não lê atualmente.
FortiSIEM é comum onde quer que a Fortinet opere a rede, e frequentemente contém muito mais do que logs de firewall. Prime Core tem 19.692 regras de detecção para FortiSIEM, mapeadas para 664 técnicas MITRE ATT&CK. Abaixo está como extrair eventos, sanitizá-los e investigá-los gratuitamente no LogTotal.
Antes de começar
Um usuário da API. Use uma conta com direitos para executar consultas analíticas. A API autentica com autorização básica, com a organização no nome de usuário: super/<user> em uma instalação empresarial, <org>/<user> para uma organização específica em uma instalação de provedor de serviços.
Retenção. O armazenamento de eventos online é limitado. Eventos mais antigos podem estar em armazenamento de arquivo que necessita de etapas adicionais.
Nomes de atributos. Consultas do FortiSIEM usam seus próprios nomes de atributos, como reptDevName (dispositivo de relatório), reptDevIpAddr, eventType e phRecvTime. Construa o filtro primeiro em Análises.
Exporte com a API de consulta de eventos
Salve a consulta como query.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<Reports><Report><Name>LogTotal export</Name><Description/>
<SelectClause><AttrList>phRecvTime,reptDevIpAddr,eventType,rawEventMsg</AttrList></SelectClause>
<ReportInterval><Low>1792368000</Low><High>1792454400</High></ReportInterval>
<PatternClause><SubPattern id=”1″ name=”Filter”>
<SingleEvtConstr>reptDevName = “web-03″</SingleEvtConstr>
</SubPattern></PatternClause>
</Report></Reports>
O intervalo é em segundos de época de 2026-10-19 00:00 UTC a 2026-10-20 00:00 UTC. Então execute:
FSM=”https://fortisiem.example.com”
AUTH=”super/apiuser:$FSM_PASS”
QID=$(curl -sS -u “$AUTH” -X POST -H ‘Content-Type: text/xml’ –data @query.xml “$FSM/phoenix/rest/query/eventQuery”)
until [ “$(curl -sS -u “$AUTH” “$FSM/phoenix/rest/query/progress/$QID”)” = “100” ]; do sleep 5; done
curl -sS -u “$AUTH” “$FSM/phoenix/rest/query/events/$QID/0/1000” > fsm_web03_1019.xml
Os últimos dois segmentos do caminho são o deslocamento inicial e a quantidade. Passe por grandes resultados em passos de 1.000. Em seguida, extraia as mensagens brutas:
import xml.etree.ElementTree as ET
root = ET.parse(“fsm_web03_1019.xml”).getroot()
with open(“fsm_web03_1019.log”, “w”) as out:
for attr in root.iter(“attribute”):
if attr.get(“name”) == “rawEventMsg” and attr.text:
out.write(attr.text.strip() + “n”)
Faça upload, santize e revise no LogTotal
- Fazer upload. Abra logtotal.com e solte o arquivo.
- Santize.
- Revise.
Como isso se parece em dados reais.
Quando algo dá errado
| Sintoma | Causa provável | Fix |
|---|---|---|
| 401 | Organização ausente do nome de usuário | Use super/<user> ou <org>/<user> |
| Consulta retorna um erro ao invés de um ID | Sintaxe XML ou nome de atributo desconhecido | Teste o filtro em Análises; verifique nomes de atributos |
| Progresso nunca chega a 100 | Consulta muito ampla | Reduza o intervalo de tempo e o filtro |
| rawEventMsg vazio | O atributo não foi selecionado | Adicione rawEventMsg ao AttrList |
| Eventos antigos em falta | Eles estão em armazenamento de arquivo | Verifique as opções de arquivo |
FAQ
Por que XML?
É o que esta API do FortiSIEM usa. A etapa Python converte para as linhas brutas originais, que normalmente é o que você deseja fazer upload de qualquer maneira.
Posso exportar incidentes em vez disso?
Incidentes têm suas próprias chamadas de API. Para o LogTotal, exporte os eventos por trás deles.