Exemples de chaînes de recherche AQL

Utilisez le langage de requête Ariel (AQL) pour extraire des zones spécifiques des tables d'événements, de flux et de simarc dans la base de données Ariel .

Remarque: Lorsque vous générez une requête AQL, si vous copiez du texte qui contient des guillemets simples à partir d'un document et que vous collez le texte dans IBM QRadar, votre requête n'est pas analysée. Pour contourner ce problème, vous pouvez coller le texte dans QRadar et entrer à nouveau les guillemets simples, ou vous pouvez copier et coller le texte dans IBM Knowledge Center.

Génération de rapports sur l'utilisation d'un compte

Les différentes communautés d'utilisateurs peuvent avoir des indicateurs de menace et d'utilisation différents.

Utilisez les données de référence pour générer des rapports sur plusieurs propriétés utilisateurs, par exemple le nom du département, l'emplacement ou le chef. Vous pouvez utiliser des données de référence externes.

La requête suivante renvoie des informations de métadonnées sur l'utilisateur à partir de ses événements de connexion.

SELECT
REFERENCETABLE('user_data','FullName',username) as 'Full Name',
REFERENCETABLE('user_data','Location',username) as 'Location',
REFERENCETABLE('user_data','Manager',username) as 'Manager',
DISTINCTCOUNT(username) as 'Userid Count',
DISTINCTCOUNT(sourceip) as 'Source IP Count',
COUNT(*) as 'Event Count'
FROM events
WHERE qidname(qid) ILIKE '%logon%'
GROUP BY 'Full Name', 'Location', 'Manager'
LAST 1 days

Connaissance de plusieurs identificateurs de comptes

Dans cet exemple, les utilisateurs individuels ont plusieurs comptes dans le réseau. L'organisation a besoin d'obtenir une vue unique des activités de l'utilisateur.

Utilisez les données de référence pour mapper les ID utilisateurs locaux à un ID global.

La requête suivante renvoie les comptes utilisateurs utilisés par un ID global sur des événements signalés comme suspects.

SELECT
REFERENCEMAP('GlobalID Mapping',username) as 'Global ID', 
REFERENCETABLE('user_data','FullName', 'Global ID') as 'Full Name',
DISTINCTCOUNT(username),
COUNT(*) as 'Event count'
FROM events
WHERE RULENAME(creEventlist) ILIKE '%suspicious%'
GROUP BY 'Global ID'
LAST 1 days

La requête suivante montre les activités réalisées par un ID global.

SELECT
QIDNAME(qid) as 'Event name', 
starttime as 'Time',
sourceip as 'Source IP', destinationip as 'Destination IP',
username as 'Event Username',
REFERENCEMAP('GlobalID_Mapping', username)as 'Global User'
FROM events
WHERE 'Global User' = 'John Doe'
LAST 1 days

Identification d'un balisage de longue durée suspect

De nombreuses menaces utilisent des commandes et des contrôles pour communiquer de façon régulière, durant plusieurs jours, plusieurs semaines et plusieurs mois.

Les recherches avancées peuvent identifier les modèles de connexion au fil du temps. Par exemple, vous pouvez analyser les connexions cohérentes, courtes, de faible volume, le nombre de connexions par jour/mois/an entre les adresses IP ou une adresse IP et un emplacement géographique.

La requête suivante détecte les instances potentielles d'un balisage s'effectuant toutes les heures.

SELECT sourceip, destinationip,
DISTINCTCOUNT(DATEFORMAT(starttime,'HH')) as 'different hours',
COUNT(*) as 'total flows'
FROM flows
WHERE flowdirection = 'L2R'
GROUP BY sourceip, destinationip
HAVING "different hours" > 20
AND "total flows" < 25
LAST 24 hours
Astuce: Vous pouvez modifier cette requête pour travailler sur des journaux de proxy et d'autres types d'événement.

La requête suivante détecte des instances potentielles de balisage quotidien.

SELECT sourceip, destinationip,
DISTINCTCOUNT(DATEFORMAT(starttime,'dd'))as 'different days',
COUNT(*) as 'total flows'
FROM flows
WHERE flowdirection='L2R'
GROUP BY sourceip, destinationip
HAVING "different days" > 4
AND "total flows" < 14
LAST 7 days

La requête suivante détecte un balisage quotidien entre un IP de source et un IP de destination. Les horaires de balisage varient tous les jours. L'intervalle de temps séparant deux balisages est court.

SELECT
sourceip,
LONG(DATEFORMAT(starttime,'hh')) as hourofday,
(AVG( hourofday*hourofday) - (AVG(hourofday)^2))as variance,
COUNT(*) as 'total flows'
FROM flows
GROUP BY sourceip, destinationip
HAVING variance < 01 and "total flows" < 10
LAST 7 days

La requête suivante détecte un balisage quotidien vers un domaine à l'aide d'événements de journaux de proxy. Les horaires de balisage varient tous les jours. L'intervalle de temps séparant deux balisages est court.

SELECT sourceip,
LONG(DATEFORMAT(starttime,'hh')) as hourofday,
(AVG(hourofday*hourofday) - (AVG(hourofday)^2)) as variance,
COUNT(*) as 'total events'
FROM events
WHERE LOGSOURCEGROUPNAME(devicegrouplist) ILIKE '%proxy%'
GROUP BY url_domain
HAVING variance < 0.1 and "total events" < 10
LAST 7 days

La propriété url_domain est une propriété personnalisée des journaux de proxy.

Intelligence de menace externe

Les données d'utilisation et de sécurité en corrélation avec des données d'intelligence de menace externe peuvent fournir des indicateurs de menace importants.

Des recherches avancées peuvent croiser des indicateurs d'intelligence de menace externe avec d'autres événements de sécurité et données d'utilisation.

Cette requête montre comment vous pouvez analyser des données de menace externe durant plusieurs jours, plusieurs semaines ou plusieurs mois afin d'identifier le niveau de risque des actifs et des comptes et de définir des priorités.

Select
REFERENCETABLE('ip_threat_data','Category',destinationip) as 'Category',
REFERENCETABLE('ip_threat_data','Rating', destinationip) as 'Threat Rating',
DISTINCTCOUNT(sourceip) as 'Source IP Count',
DISTINCTCOUNT(destinationip) as 'Destination IP Count'
FROM events
GROUP BY 'Category', 'Threat Rating'
LAST 1 days

Intelligence des actifs et configuration

Les indicateurs de menace et d'utilisation varient en fonction du type d'accès, du système d'exploitation, de la posture de vulnérabilité, du type de serveur, de la classification et d'autres paramètres.

Dans cette requête, les recherches avancées et le modèle d'actif offrent une connaissance opérationnelle d'un emplacement.

La fonction Assetproperty extrait les valeurs de propriétés des actifs et vous permet d'inclure les données d'actif dans les résultats.

SELECT
ASSETPROPERTY('Location',sourceip) as location,
COUNT(*) as 'event count'
FROM events
GROUP BY location
LAST 1 days

La requête suivante vous montre comment vous pouvez utiliser les recherches avancées et le suivi de l'identité des utilisateurs dans le modèle d'actif.

La fonction AssetUser extrait le nom d'utilisateur de la base de données des actifs.

SELECT 
APPLICATIONNAME(applicationid) as App,
ASSETUSER(sourceip, now()) as srcAssetUser,
COUNT(*) as 'Total Flows'
FROM flows
WHERE srcAssetUser IS NOT NULL
GROUP BY App, srcAssetUser
ORDER BY "Total Flows" DESC
LAST 3 HOURS

Fonction de recherche réseau

Vous pouvez utiliser la fonction Network LOOKUP pour récupérer le nom de réseau associé à une adresse IP.

SELECT NETWORKNAME(sourceip) as srcnet,
NETWORKNAME(destinationip) as dstnet
FROM events

Fonction de recherche de règle

Vous pouvez utiliser la fonction Rule LOOKUP pour récupérer le nom d'une règle par son ID.

SELECT RULENAME(123) FROM events

La requête suivante renvoie les événements ayant déclenché un nom de règle spécifique.

SELECT * FROM events
WHERE RULENAME(creEventList) ILIKE '%my rule name%'

Propriété personnalisée

Vous pouvez accéder aux propriétés personnalisées pour les événements et les flux lorsque vous utilisez l'option Recherche avancée.

La requête suivante utilise la propriété personnalisée "MyWebsiteUrl" pour trier les événements par une URL Web :
SELECT "MyWebsiteUrl", * FROM events ORDER BY "MyWebsiteUrl"