<?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>Thomas DEBIZE, Auteur</title>
	<atom:link href="https://www.riskinsight-wavestone.com/author/thomas-debize/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.riskinsight-wavestone.com</link>
	<description>Le blog cybersécurité des consultants Wavestone</description>
	<lastBuildDate>Wed, 07 Jul 2021 15:22:12 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.riskinsight-wavestone.com/wp-content/uploads/2024/02/Blogs-2024_RI-39x39.png</url>
	<title>Thomas DEBIZE, Auteur</title>
	<link>https://www.riskinsight-wavestone.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>S7comm : un outil de communication avec les Automates Programmables Industriels Siemens</title>
		<link>https://www.riskinsight-wavestone.com/2016/05/s7comm-un-outil-de-communication-avec_24/</link>
		
		<dc:creator><![CDATA[Thomas DEBIZE]]></dc:creator>
		<pubDate>Wed, 25 May 2016 13:43:46 +0000</pubDate>
				<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[Deep-dive]]></category>
		<category><![CDATA[Ethical Hacking & Incident Response]]></category>
		<category><![CDATA[automatisation]]></category>
		<category><![CDATA[outil]]></category>
		<category><![CDATA[programmable]]></category>
		<category><![CDATA[s7comm]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=15506</guid>

					<description><![CDATA[<p>La sécurité des Systèmes d’Informations Industriels (SII) est aujourd’hui au centre des préoccupations dans les entreprises concernées. Ces systèmes permettent une action directe dans le monde « physique » à l’aide d’instructions provenant du monde « logique » et pilotent...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2016/05/s7comm-un-outil-de-communication-avec_24/">S7comm : un outil de communication avec les Automates Programmables Industriels Siemens</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="separator" style="clear: both; text-align: center;">
<figure id="post-15913 media-15913" class="align-center"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-15913" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/indu.jpg" alt="" width="320" height="213" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/indu.jpg 320w, https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/indu-287x191.jpg 287w, https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/indu-59x39.jpg 59w" sizes="(max-width: 320px) 100vw, 320px" /></figure>
</div>
<p>La sécurité des <span class="Miseenvaleur" style="color: #00477f;"><b>Systèmes d’Informations Industriels (SII)</b></span> est aujourd’hui au centre des préoccupations dans les entreprises concernées. Ces systèmes permettent une <span class="Miseenvaleur" style="color: #00477f;"><b>action directe dans le monde « physique »</b></span> à l’aide d’instructions provenant du <span class="Miseenvaleur" style="color: #00477f;"><b>monde « logique »</b></span> et pilotent les <span class="Miseenvaleur" style="color: #00477f;"><b>outils de production</b></span> de nombreuses entreprises.</p>
<p>Du fait du <span class="Miseenvaleur" style="color: #00477f;"><b>manque de sécurité </b></span>de ces systèmes, de nombreuses attaques ont été recensées dans le monde ces dernières années. La dernière en date ayant eu le plus gros impact est <span class="Miseenvaleur" style="color: #00477f;"><b><b><b>l&rsquo;attaque du réseau électrique de l&rsquo;Ukraine en décembre dernier [1]</b></b></b></span>. De nombreuses personnes se sont retrouvées sans électricité suite à une attaque du réseau industriel.</p>
<p>Le plus bas niveau des SI industriels est le <span class="Miseenvaleur" style="color: #00477f;"><b><b>réseau de production</b></b></span>. Les <span class="Miseenvaleur" style="color: #00477f;"><b>capteurs et les actionneurs</b></span> sont reliés aux entrées/sorties des automates industriels. Les protocoles utilisés pour communiquer avec ces automates sont généralement des protocoles propriétaires. Parmi les plus utilisés, on retrouve : <span class="Miseenvaleur" style="color: #00477f;"><b>Modbus, S7comm, DNP3, Profibus, Hart</b></span>… Ces protocoles manquent souvent des principales fonctions de sécurité à savoir <span class="Miseenvaleur" style="color: #00477f;"><b><b>l’authentification et le chiffrement des flux</b></b></span>. Il est donc possible de rejouer des requêtes et de réaliser des actions malveillantes directement sur les automates.<br />
<span class="Miseenvaleur" style="color: #00477f;"><b>Modbus</b></span>, protocole de <span class="Miseenvaleur" style="color: #00477f;"><b>Schneider Electric</b></span> publiquement documenté et libre de droits, est une norme de référence pour les communications industrielles. De nombreux outils utilisant ce protocole existent pour communiquer avec les automates Schneider :</p>
<div class="Enum1" style="margin-left: 88.9pt; mso-list: l2 level1 lfo6; tab-stops: 35.4pt; text-indent: -18pt;">
<ul>
<li><span style="font-family: 'symbol'; font-size: 12pt; text-indent: -18pt;"><span style="font-family: 'times new roman'; font-size: 7pt; font-stretch: normal;">       </span></span><span style="text-indent: -18pt;">Le module Metasploit </span><i style="text-indent: -18pt;">modbusclient</i><span style="text-indent: -18pt;"> [2], permettant de lire et d&rsquo;écrire sur les coils / registres de l&rsquo;automate</span></li>
<li><span style="font-family: 'symbol'; font-size: 12pt; text-indent: -18pt;"><span style="font-family: 'times new roman'; font-size: 7pt; font-stretch: normal;">       </span></span><span style="text-indent: -18pt;">Le module Metasploit </span><i style="text-indent: -18pt;">modicon_command</i><span style="text-indent: -18pt;"> [3], permettant d&rsquo;arrêter / démarrer l&rsquo;automate à distance</span></li>
<li><span style="font-family: 'symbol'; font-size: 12pt; text-indent: -18pt;"><span style="font-family: 'times new roman'; font-size: 7pt; font-stretch: normal;">       </span></span><span style="text-indent: -18pt;">Le module Metasploit </span><i style="text-indent: -18pt;">modicon_stux_transfer </i><span style="text-indent: -18pt;">[4], permettant de récupérer / télécharger le code de l&rsquo;automate</span></li>
<li><span style="font-family: 'symbol'; font-size: 12pt; text-indent: -18pt;"><span style="font-family: 'times new roman'; font-size: 7pt; font-stretch: normal;">       </span></span><span style="text-indent: -18pt;">Le script perl </span><i style="text-indent: -18pt;">mbtget</i><span style="text-indent: -18pt;"> [5], permettant de lire et d&rsquo;écrire sur les coils / registres de l&rsquo;automate</span></li>
<li><span style="font-family: 'symbol'; font-size: 12pt; text-indent: -18pt;"><span style="font-family: 'times new roman'; font-size: 7pt; font-stretch: normal;">       </span></span><span style="text-indent: -18pt;">La librairie python </span><i style="text-indent: -18pt;">Pymodbus</i><span style="text-indent: -18pt;"> [6], permettant de communiquer avec des automates Schneider</span></li>
</ul>
</div>
<div class="MsoNormal">En revanche, le protocole <span class="Miseenvaleur" style="color: #00477f;"><b>S7 Communication (S7comm) </b></span>est quant à lui nettement moins fourni en outils,  bien qu&rsquo;utilisé par tous les automates <span class="Miseenvaleur" style="color: #00477f;"><b>Siemens</b></span>.<br />
Il existe cependant la <span class="Miseenvaleur" style="color: #00477f;"><b>bibliothèque Snap7</b></span> [7] ainsi qu&rsquo;un wrapper Python utilisant ce protocole.</div>
<div class="MsoNormal">Nous nous sommes ainsi lancés dans le <span class="Miseenvaleur" style="color: #00477f;"><b>développement d&rsquo;un nouveau script baptisé « s7comm »</b></span>, permettant facilement de dialoguer avec les automates Siemens.</div>
<div class="MsoNormal"></div>
<div class="MsoNormal" style="break-after: avoid; page-break-after: avoid;"><span class="Miseenvaleur" style="color: #00477f;"><b>Présentation de s7comm </b></span>s7comm [8] est un <span class="Miseenvaleur" style="color: #00477f;"><b>script python</b></span> utilisant la librairie Snap7 permettant de <span class="Miseenvaleur" style="color: #00477f;"><b>lire et écrire sur les sorties des automates Siemens</b></span>.</div>
<div class="MsoNormal">Les <span class="Miseenvaleur" style="color: #00477f;"><b>différents arguments </b></span>sont directement spécifiés en ligne de commande, exactement comme pour le script <span class="Miseenvaleur" style="color: #00477f;"><b>mbtget</b></span> pour le protocole <span class="Miseenvaleur" style="color: #00477f;"><b>Modbus</b></span> :</div>
<div></div>
<div style="background: #dce5ec; border: 1pt solid #308987; margin-left: 42.55pt; margin-right: 0cm; padding: 1pt 4pt;">
<div class="LignedecommandeCxSpFirst" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-left: 0cm;"><span lang="EN-US">$ python<br />
s7comm.py -a address -m mode -n number -d data ip_address</span><b></b></div>
<div class="LignedecommandeCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-left: 0cm;"></div>
<div class="LignedecommandeCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-left: 0cm;">-a     Adresse à partir de laquelle les<br />
données vont être lues / écrites</div>
<div class="LignedecommandeCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-left: 0cm;">-m [r|w]     Choix du mode de<br />
fonctionnement : lecture ou écriture sur l&rsquo;automate</div>
<div class="LignedecommandeCxSpMiddle" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-left: 0cm;">-n     Nombre de données à lire /<br />
écrire</div>
<div class="LignedecommandeCxSpLast" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-left: 0cm;">-d     Données en bit à écrire (exemple<br />
0110)<span style="font-size: 11pt;"> </span></div>
</div>
<div></div>
<div class="MsoNormal">Les <span class="Miseenvaleur" style="color: #00477f;"><b>deux principales </b></span>fonctions utilisées de la <span class="Miseenvaleur" style="color: #00477f;"><b>bibliothèque Snap 7 </b></span>sont les suivantes :</div>
<div class="MsoNormal"><span lang="EN-US" style="font-family: 'courier new'; mso-ansi-language: EN-US;">             s7.read_area(snap7.types.areas[&lsquo;PA&rsquo;], 0, start, size)</span></div>
<div class="Enum1" style="margin-left: 49.6pt; mso-list: none; tab-stops: 35.4pt; text-indent: 0cm;">Cette fonction permet de <span class="Miseenvaleur" style="color: #00477f;"><b>lire des données sur les sorties de l&rsquo;automate</b></span> en utilisant le protocole S7comm.<br />
Elle admet quatre arguments :</div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l5 level1 lfo3; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]-->1. Le <span class="Miseenvaleur" style="color: #00477f;"><b>type</b></span> de données : dans ce cas, il s&rsquo;agit des <span class="Miseenvaleur" style="color: #00477f;"><b>sorties numériques </b></span>(« tout ou rien », tor)<span class="Miseenvaleur" style="color: #00477f;"><b> de l&rsquo;automate</b></span>.</div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l5 level1 lfo3; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]-->2. Le <span class="Miseenvaleur" style="color: #00477f;"><b>numéro de la base de données</b></span> : dans le cas des sorties numériques, cette option n&rsquo;est pas utilisée et a donc toujours la valeur 0.</div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l5 level1 lfo3; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]-->3. Le <span class="Miseenvaleur" style="color: #00477f;"><b>byte d&rsquo;offset </b></span>: il s&rsquo;agit du premier byte lu.</div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l5 level1 lfo3; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]--><span style="font-family: 'times new roman' , 'serif'; font-size: 12pt;">4.<span style="font-family: 'times new roman'; font-size: 7pt; font-stretch: normal;">      </span></span><!--[endif]-->Le <span class="Miseenvaleur" style="color: #00477f;"><b>nombre</b></span> de bytes à lire.</div>
<div></div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l5 level1 lfo3; tab-stops: 35.4pt; text-indent: -18pt;"><span lang="EN-US" style="font-family: 'courier new'; mso-ansi-language: EN-US;">s7.write_area(snap7.types.areas[&lsquo;PA&rsquo;], 0, start, data)</span></div>
<div class="Enum1" style="margin-left: 49.6pt; mso-list: none; tab-stops: 35.4pt; text-indent: 0cm;">Cette fonction permet <span class="Miseenvaleur" style="color: #00477f;"><b>d&rsquo;écrire des données sur les sorties de l&rsquo;automate</b></span>.</div>
<div class="Enum1" style="margin-left: 49.6pt; mso-list: none; tab-stops: 35.4pt; text-indent: 0cm;">Elle a quatre arguments :</div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l3 level1 lfo4; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]-->1. Le <span class="Miseenvaleur" style="color: #00477f;"><b>type de données </b></span>: dans ce cas, il s&rsquo;agit des sorties numériques de l&rsquo;automate.</div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l3 level1 lfo4; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]-->2. Le <span class="Miseenvaleur" style="color: #00477f;"><b>numéro de la base de données</b></span> : dans le cas des sorties numériques, cette option n&rsquo;est pas utilisée et a donc toujours la valeur 0.</div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l3 level1 lfo4; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]-->3. Le <span class="Miseenvaleur" style="color: #00477f;"><b>byte d&rsquo;offset </b></span>: il s&rsquo;agit du premier byte sur lequel on va écrire.</div>
<div class="Enum2" style="margin-left: 99.8pt; mso-list: l3 level1 lfo4; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]-->4. Les <span class="Miseenvaleur" style="color: #00477f;"><b>données</b></span> à écrire sous forme de bytearray.</div>
<div></div>
<div class="MsoNormal">Chaque sortie de l&rsquo;automate a une <span class="Miseenvaleur" style="color: #00477f;"><b>valeur sur un bit</b></span>. <span class="Miseenvaleur" style="color: #00477f;"><b>Huit sorties</b></span> peuvent donc être écrites sur un byte. Plusieurs opérations doivent donc être réalisées <span class="Miseenvaleur" style="color: #00477f;"><b>avant d&rsquo;envoyer la commande</b></span> puisque les arguments <span style="font-family: 'courier new';">« address »</span> et <span style="font-family: 'courier new';">« number »</span> donnés en ligne de commande font référence à des bits. Notamment, si le premier bit à lire n&rsquo;est pas le premier bit du byte, il y a un offset à prendre en compte.</div>
<div class="MsoNormal">Pour finir, voici deux exemples d&rsquo;utilisation :</div>
<div></div>
<div class="Enum1" style="margin-left: 88.9pt; mso-list: l1 level1 lfo5; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]-->1. Lecture de 8 bits à partir de l&rsquo;adresse 0 :</div>
<div class="Enum1" style="margin-left: 67.05pt; mso-list: none; tab-stops: 35.4pt; text-indent: 0cm;">
<figure id="post-15922 media-15922" class="align-center"><img decoding="async" class="size-full wp-image-15922 alignnone" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/last-1.png" alt="" width="320" height="135" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/last-1.png 320w, https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/last-1-71x30.png 71w" sizes="(max-width: 320px) 100vw, 320px" /></figure>
</div>
<div class="Enum1" style="margin-left: 88.9pt; mso-list: l1 level1 lfo5; tab-stops: 35.4pt; text-indent: -18pt;"><!-- [if !supportLists]--><span style="font-family: 'times new roman' , 'serif'; font-size: 12pt;">2.<span style="font-family: 'times new roman'; font-size: 7pt; font-stretch: normal;">      </span></span><!--[endif]-->Écriture de la valeur 1 sur 8 bits à partir de l&rsquo;adresse 0</div>
<div class="Enum1" style="margin-left: 67.05pt; mso-list: none; tab-stops: 35.4pt; text-indent: 0cm;">
<figure id="post-15924 media-15924" class="align-center"><img decoding="async" class="size-full wp-image-15924 alignnone" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/last.png" alt="" width="320" height="25" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/last.png 320w, https://www.riskinsight-wavestone.com/wp-content/uploads/2016/03/last-71x6.png 71w" sizes="(max-width: 320px) 100vw, 320px" /></figure>
</div>
<div class="MsoNormal"><b><span style="color: #00477f;">Conclusion</span></b></div>
<div class="MsoNormal">À travers la publication de <span class="Miseenvaleur" style="color: #00477f;"><b>l’outil s7comm</b></span>  comme de cet article, nous souhaitons rappeler la relative facilité à communiquer avec des <span class="Miseenvaleur" style="color: #00477f;"><b>automates industriels</b></span>.<br />
Un attaquant, une fois arrivé sur le SI industriel, peut directement <span class="Miseenvaleur" style="color: #00477f;"><b>perturber le procédé industriel</b></span>. Vos commentaires et contributions sont les bienvenus afin de fiabiliser et d’améliorer cet outil.<b></b></div>
<div></div>
<div></div>
<div class="MsoNormal" style="break-after: avoid; line-height: 11.5pt; page-break-after: avoid; text-autospace: none; vertical-align: middle;"><span style="color: #9c9d9e;">Sources :</span></div>
<div class="Tableau">[1] <a href="https://ics.sans.org/blog/2016/01/09/confirmation-of-a-coordinated-attack-on-the-ukrainian-power-grid">https://ics.sans.org/blog/2016/01/09/confirmation-of-a-coordinated-attack-on-the-ukrainian-power-grid</a></div>
<div class="Tableau">[2] <a href="https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/scada/modbusclient.rb">https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/scada/modbusclient.rb</a></div>
<div class="Tableau">[3] <a href="https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/admin/scada/modicon_command.rb">https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/admin/scada/modicon_command.rb</a></div>
<div class="Tableau">[4] <a href="https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/admin/scada/modicon_stux_transfer.rb">https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/admin/scada/modicon_stux_transfer.rb</a></div>
<div class="Tableau">[5] <a href="https://github.com/sourceperl/mbtget/blob/master/scripts/mbtget">https://github.com/sourceperl/mbtget/blob/master/scripts/mbtget</a></div>
<div class="Tableau">[6] <a href="https://github.com/bashwork/pymodbus">https://github.com/bashwork/pymodbus</a></div>
<div class="Tableau">[7] <span class="MsoHyperlink"><a href="http://python-snap7.readthedocs.org/en/latest/installation.html">http://python-snap7.readthedocs.org/en/latest/installation.html</a></span></div>
<div class="Tableau">[8] <a href="https://github.com/alexandrinetorrents/s7comm">https://github.com/alexandrinetorrents/s7comm</a></div>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2016/05/s7comm-un-outil-de-communication-avec_24/">S7comm : un outil de communication avec les Automates Programmables Industriels Siemens</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
