Aller au contenu principal

Tâches

Une tâche (job) est le moyen qu'utilise Red Kite pour trouver de nouvelles informations. Elle est lancée par Red Kite et s'exécute dans un environnement isolé. Des tâches différentes produisent des findings différents. Il est possible d'utiliser une variable de sortie d'un finding comme paramètre de tâche. Un paramètre de tâche est l'une des variables d'entrée d'une tâche.

Lorsque vous faites référence à une variable de sortie d'un finding par son nom (ex. : ${domainName}), le nom de la variable n'est pas sensible à la casse.

Une tâche peut produire plusieurs findings, d'un ou de plusieurs types.

Types de tâches​

Red Kite prend en charge plusieurs types de tâches.

Les types de tâches sont :

Pour plus d'information sur l'implémentation des tâches, consultez le guide Implémenter une tâche.

Tâche Python​

TypeLangage
CodePython

Une tâche Python est la façon standard de créer une tâche. Elle offre une flexibilité totale, mais vous devez l'implémenter vous-même.

Les tâches Python incluent un SDK intégré qui vous aide à produire correctement des findings et des journaux.

Tâche Nuclei​

TypeLangage
NucleiYaml

Une tâche Nuclei utilise Nuclei de Project Discovery pour exécuter des modèles Nuclei et produire des findings que Red Kite comprend. Elle inclut un analyseur intégré, mais s'il ne répond pas à vos besoins, vous pouvez préciser un gestionnaire de findings personnalisé. Ce gestionnaire personnalisé se charge d'analyser les findings Nuclei et de produire des findings compatibles avec Red Kite. Il est écrit en Python. Rassurez-vous : un modèle, une classe personnalisée et le SDK Python sont disponibles pour vous aider.

Pour lancer une tâche Nuclei à partir du lanceur, vous devez préciser les paramètres suivants :

NomExemple de valeurIdentifie une ressourceDescription
targetIp1.1.1.1xL'adresse IP du serveur cible.
port443xLe port auquel se connecter pour joindre le serveur.
domainNameexample.comxLe nom de domaine à cibler ou, pour les sites web, le nom utilisé pour accéder à l'hôte virtuel.
path/xLe chemin du serveur où se trouve le site web. Sert à identifier le site web.
ssltruePrécise si le protocole à utiliser est HTTP ou HTTPS.
endpoint/example.phpPermet de cibler un site web à un point de terminaison précis sans changer le site web ciblé.
stalkerOutputTypedomainLe type de ressource auquel associer les findings émis. Valeurs possibles : "domain", "host", "port" et "website".
outputFindingNameMyExampleFindingLe nom du finding émis. C'est cette valeur à laquelle un abonnement sur événement réagirait, dans le tableau des findings de l'abonnement.

Cibler un site web identifié par l'IP 1.1.1.1, le port 443, le domaine example.com et le chemin /, au point de terminaison /example.txt, revient à cibler l'URL https://example.com/example.txt. Dans ce cas, l'IP et le chemin servent uniquement à rattacher les findings au bon site web.

Voici les combinaisons de paramètres possibles pour cibler les différents types de ressources :

RessourceParamètres requisParamètres facultatifs
DomainedomainName
HôtetargetIp
PorttargetIp, port
Site webdomainName, targetIp, port, path, sslendpoint

Peu importe le type de ressource ciblé, si aucun gestionnaire personnalisé n'est fourni, les deux paramètres suivants sont aussi requis :

NomExemple de valeurDescription
stalkerOutputTypedomainLe type de ressource auquel associer les findings émis. Valeurs possibles : "domain", "host", "port" et "website".
outputFindingNameMyExampleFindingLe nom du finding émis. C'est cette valeur à laquelle un abonnement sur événement réagirait, dans le tableau des findings de l'abonnement.

Si un gestionnaire personnalisé est fourni, vous pouvez omettre les valeurs stalkerOutputType et outputFindingName.

Voici à quoi ressemblerait le lancement manuel de la tâche pour un website à https://example.com/, en ciblant le point de terminaison https://example.com/example.txt, sans gestionnaire personnalisé :

parameters:
- name: stalkerOutputType
value: website
- name: outputFindingName
value: MyWebsiteFinding
- name: targetIp
value: "1.1.1.1"
- name: port
value: 443
- name: domainName
value: example.com
- name: path
value: "/"
- name: ssl
value: true
- name: endpoint
value: "/example.txt"

Tâches intégrées​

Red Kite inclut d'emblée une solide sélection de tâches intégrées, maintenues par Red Kite.

Les tâches intégrées sont gérées par Red Kite et ne peuvent donc pas être modifiées. Pour adapter l'une de nos tâches, dupliquez-la et modifiez la copie. Lorsque vous êtes prêt, utilisez la copie et désactivez l'originale.

NomDescriptionTypeLangage
DomainNameResolvingJobRésout un nom de domaine en adresse IPCodePython
TcpPortScanningJobAnalyse les ports TCP d'une adresse IPCodePython
TcpIpRangeScanningJobAnalyse une plage d'adresses IP à la recherche de ports ouvertsCodePython
BannerGrabbingJobIdentifie le service qui s'exécute sur un portCodePython
WebsiteCrawlingJobExplore un site web pour trouver ses points de terminaison validesCodePython
WebsiteScreenshotJobPrend une capture d'écran d'une page web.CodePython
AmassDomainDiscoveryJobUtilise Amass pour trouver des informations liées à un domaineCodePython
CertificateValidationJobAnalyse un certificat pour le validerCodePython
DomainSecurityScannerJobValide la configuration courriel d'un domaine, comme DKIM, DMARC, etc.CodePython
IpGeolocationJobGéolocalise une adresse IP.CodePython
SubdomainBruteforceJobTrouve par force brute les sous-domaines d'un domaine pour découvrir de nouveaux domaines.CodePython
WafIdentificationJobDétermine si un WAF protège un site web, et lequel.CodePython

DomainNameResolvingJob​

Une tâche DomainNameResolvingJob prend un nom de domaine et le résout en une ou plusieurs adresses IP.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
domainNamestringUn FQDN à résoudre en adresse IP

Findings pouvant être produits :

  • HostnameIpFinding

TcpPortScanningJob​

Analyse les ports TCP d'un hôte.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
targetIpstringL'adresse IPv4 de l'hôte à analyser.
threadsnumberLe nombre de fils d'exécution actifs pour l'analyse. 1 <= t <= 1000
socketTimeoutSecondsnumberLe temps d'attente, en secondes, avant que l'analyseur considère un port comme fermé et abandonne. Un nombre à virgule flottante. 0 < t <= 3
portMinnumberLe premier port à analyser. 1 <= portMin < portMax
portMaxnumberLe dernier port à analyser. portMin < portMax <= 65535
portsnumber[]Un tableau JSON. Chaque port qu'il contient sera analysé. Ex. : [3389, 8000, 8080, 8443]

Findings pouvant être produits :

  • PortFinding

TcpIpRangeScanningJob​

Analyse une plage d'adresses IP (ex. : 1.2.3.4/24) à la recherche de ports ouverts. Elle découvre ainsi des hôtes et signale les ports ouverts.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
targetIpstringL'IP de la plage à analyser
targetMasknumberLe masque de la plage, par exemple 16 pour /16
ratenumberLa vitesse d'analyse de Masscan (paquets/seconde)
portMinnumberLe premier port à analyser. 1 <= portMin < portMax
portMaxnumberLe dernier port à analyser. portMin < portMax <= 65535
portsnumber[]Un tableau JSON. Chaque port qu'il contient sera analysé. Ex. : [3389, 8000, 8080, 8443]

Findings pouvant être produits :

  • HostFinding
  • PortFinding

BannerGrabbingJob​

Identifie le service qui s'exécute sur un port et récupère sa bannière. Elle peut parfois trouver le système d'exploitation de l'hôte, et parfois aussi d'autres noms de domaine.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
targetIpstringL'adresse IP à vérifier
portsnumber[]Les ports sur lesquels chercher un service
nmapOptionsstringUne longue chaîne contenant les options passées à nmap

Findings pouvant être produits :

  • PortServiceFinding
  • HostnameIpFinding
  • OperatingSystemFinding

WebsiteCrawlingJob​

Explore un site web pour trouver ses différents points de terminaison valides. Elle peut aussi trouver des informations sur les technologies du site web.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
targetIpstringL'adresse IP du site web
portnumberLe port du site web
domainNamestringLe nom de domaine du site web
pathstringLe chemin de base du site web
sslboolSi le site web utilise HTTPS
maxDepthnumberLa profondeur d'exploration
crawlDurationSecondsnumberLa durée maximale d'exploration, en secondes
fetcherConcurrencynumberLe nombre de récupérateurs simultanés pour obtenir les données
inputParallelismnumberLe nombre d'entrées traitées simultanément
extraOptionsstringOptions supplémentaires de Katana pour adapter l'exécution

Findings pouvant être produits :

  • WebsitePathFinding
  • WebsiteTechnologyFinding

WebsiteScreenshotJob​

Prend une capture d'écran d'une page web.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
targetIpstringL'adresse IP du site web
portnumberLe port du site web
domainNamestringLe nom de domaine du site web
pathstringLe chemin de base du site web
sslboolSi le site web utilise HTTPS
endpointstringLe point de terminaison du site web à cibler
findingstring(Facultatif, par défaut : WebsiteScreenshotFinding) Le nom du finding émis
findingTitlestring(Facultatif, par défaut : Website screenshot) Le titre du finding émis

Findings pouvant être produits :

  • WebsiteScreenshotFinding

AmassDomainDiscoveryJob​

Utilise Amass, de l'OWASP, pour trouver des relations entre domaines, des sous-domaines, des adresses IP, des organisations, etc.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
domainNamesstring[]Un tableau de FQDN à résoudre en adresses IP
timeoutMinutesnumberUn délai d'expiration pour Amass, en minutes

Findings pouvant être produits :

  • HostnameFinding
  • HostnameIpFinding
  • IpFinding
  • AmassDomainReportFinding
  • AmassHostReportFinding
  • RirOrgFinding

De plus, Amass utilise le fichier datasources.yaml pour stocker les clés d'API de plusieurs sources de données possibles. Pour utiliser cette fonctionnalité dans la tâche de Red Kite, vous pouvez fournir dynamiquement les valeurs de datasources.yaml comme paramètres, à partir des secrets de Red Kite, en respectant la syntaxe prévue.

Définir la clé d'API d'une source de données pour Amass​

Pour définir une clé d'API dans le contenu de datasources.yaml à partir d'un paramètre Red Kite, respectez simplement la convention de nommage s_NAME_path_to_key : le préfixe s_, le nom de la source de données ciblée à la place de NAME, un trait de soulignement _, puis le chemin yaml complet vers la clé d'API à définir. La tâche cherche les paramètres nommés de cette façon pour remplir dynamiquement le fichier yaml.

Dans l'exemple suivant, nous définissons la clé d'API de la source de données Shodan.

D'abord, créez un secret contenant la clé d'API de Shodan. Donnez-lui un nom parlant, comme ShodanApiKey.

Ensuite, utilisez le secret ShodanApiKey dans un paramètre de tâche. Pour ce faire, il faut repérer l'emplacement de la clé dans la structure du fichier datasources.yaml.

Voici, pour référence, une partie du fichier datasources.yaml où nous voulons définir la clé d'API de Shodan :

datasources:
- name: 360PassiveDNS
ttl: 3600
creds:
account:
apikey: null
# [...]
- name: Shodan # Le nom de la source de données ciblée
ttl: 10080
creds:
account:
apikey: null # L'endroit où la clé d'API est définie
- name: Spamhaus
ttl: 1440
creds:
account:
username: null
password: null
# [...]
global_options:
minimum_ttl: 1440

La structure complète du fichier est disponible dans le dépôt.

Ici, pour définir la clé d'API de Shodan, vous devez nommer votre paramètre de tâche s_Shodan_creds_account_apikey et lui donner la valeur du secret créé, ShodanApiKey.

Pour un lancement ponctuel de la tâche, vos paramètres ressembleraient donc à ceci :

parameters:
- name: domainNames
value:
- example.com
- www.example.com
- name: timeoutMinutes
value: 120
- name: s_Shodan_creds_account_apikey # Le nom de variable qui indique l'emplacement dans datasources.yaml
value: ${ secrets.ShodanApiKey } # L'injection de la valeur du secret

Pour inclure votre secret ShodanApiKey dans l'abonnement qui lance cette tâche (nommé Extended discovery for domain names), ajoutez-le de la même façon à ses paramètres.

CertificateValidationJob​

Analyse un certificat pour le valider.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
targetIpstringL'adresse IP du site web
portnumberLe port du site web
domainNamestringLe nom de domaine du site web
pathstringLe chemin de base du site web
sslboolSi le site web utilise HTTPS

Findings pouvant être produits :

  • CertificateFinding

DomainSecurityScannerJob​

Valide la configuration courriel d'un domaine, comme DKIM, DMARC, etc.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
domainNamesstring[]Les domaines à valider

Findings pouvant être produits :

  • DomainSecurityReportFinding

IpGeolocationJob​

Géolocalise une adresse IP.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
targetIpstringL'adresse IP à géolocaliser

Findings pouvant être produits :

  • IpGeolocationFinding

SubdomainBruteforceJob​

Trouve par force brute les sous-domaines d'un domaine pour découvrir de nouveaux domaines inconnus.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
domainNamestringLe domaine à analyser par force brute

Findings pouvant être produits :

  • HostnameFinding
  • HostnameIpFinding
  • WildcardDomainFinding

WafIdentificationJob​

Détermine si un WAF protège un site web, et lequel.

Variables d'entrée :

Nom de la variableTypeDescription de la valeur
targetIpstringL'adresse IP du site web
portnumberLe port du site web
domainNamestringLe nom de domaine du site web
pathstringLe chemin de base du site web
sslboolSi le site web utilise HTTPS

Findings pouvant être produits :

  • WafFinding