Utilisez l’API de requête d’événements REST de FortiSIEM. Envoyez une requête XML à /phoenix/rest/query/eventQuery, qui renvoie un ID de requête, suivez la progression jusqu’à ce qu’elle atteigne 100, puis récupérez les événements. Les résultats reviennent sous forme de XML. La ligne de log d’origine de chaque événement se trouve dans l’attribut rawEventMsg, donc quelques lignes de Python transforment le résultat en logs bruts. Les exportations de l’écran Analytics sortent dans des formats que LogTotal ne lit pas aujourd’hui.
FortiSIEM est courant partout où Fortinet gère le réseau, et il contient souvent bien plus que des logs de pare-feu. Prime Core possède 19 692 règles de détection pour FortiSIEM, mappées à 664 techniques MITRE ATT&CK. Voici comment obtenir des événements, les assainir et les enquêter gratuitement dans LogTotal.
Avant de commencer
Un utilisateur de l’API. Utilisez un compte avec les droits pour exécuter des requêtes analytiques. L’API s’authentifie avec l’authentification de base, en incluant l’organisation dans le nom d’utilisateur : super/<utilisateur> sur une installation d’entreprise, <org>/<utilisateur> pour une organisation spécifique dans une installation de fournisseur de services.
Rétention. Le stockage en ligne des événements est limité. Les événements plus anciens peuvent se trouver dans un stockage d’archives nécessitant des étapes supplémentaires.
Noms d’attributs. Les requêtes FortiSIEM utilisent leurs propres noms d’attributs, tels que reptDevName (appareil signalant), reptDevIpAddr, eventType et phRecvTime. Construisez le filtre dans Analytics en premier.
Exporter avec l’API de requête d’événements
Enregistrez la requête sous query.xml :
<?xml version= »1.0″ encoding= »UTF-8″?>
<Reports><Report><Name>Export LogTotal</Name><Description/>
<SelectClause><AttrList>phRecvTime,reptDevIpAddr,eventType,rawEventMsg</AttrList></SelectClause>
<ReportInterval><Low>1792368000</Low><High>1792454400</High></ReportInterval>
<PatternClause><SubPattern id= »1″ name= »Filtre »>
<SingleEvtConstr>reptDevName = « web-03″</SingleEvtConstr>
</SubPattern></PatternClause>
</Report></Reports>
L’intervalle est en secondes epoch pour 2026-10-19 00:00 UTC à 2026-10-20 00:00 UTC. Ensuite, exécutez-le :
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
Les deux derniers segments de chemin sont le décalage de départ et le compte. Parcourez les résultats volumineux par étapes de 1 000. Ensuite, extrayez les messages bruts :
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 »)
Téléchargez, assainissez et examinez dans LogTotal
- Télécharger. Ouvrir logtotal.com et déposez le fichier.
- Assainir.
- Examiner.
À quoi cela ressemble-t-il sur des données réelles.
Quand cela tourne mal
| Symptôme | Cause probable | Fix |
|---|---|---|
| 401 | Organisation absente du nom d’utilisateur | Utilisez super/<utilisateur> ou <org>/<utilisateur> |
| La requête renvoie une erreur au lieu d’un ID | Syntaxe XML ou nom d’attribut inconnu | Testez le filtre dans Analytics ; vérifiez les noms d’attributs |
| La progression n’atteint jamais 100 | Requête trop large | Réduisez l’intervalle de temps et le filtre |
| rawEventMsg vide | L’attribut n’a pas été sélectionné | Ajoutez rawEventMsg à AttrList |
| Événements anciens manquants | Ils sont dans un stockage d’archives | Vérifiez les options d’archive |
FAQ
Pourquoi XML?
C’est ce que cette API FortiSIEM utilise. L’étape Python le convertit en lignes brutes d’origine, ce qui est généralement ce que vous souhaitez télécharger de toute façon.
Puis-je exporter des incidents à la place?
Les incidents ont leurs propres appels d’API. Pour LogTotal, exportez les événements qui les sous-tendent.