loader
Foto

Siemens S7 protokoll vizsgálata

A korábban bemutatott programok egyikével és a virtuális Siemens PLC segítségével elkezdődhet az S7 kommunikáció vizsgálata. Természetesen a legjobb az lenne, ha nem virtuális PLC-t alkalmaznánk, hanem például egy S7-1200-as 1212-est. Viszont ez nem áll mindenkinek rendelkezésre, ezért döntöttünk úgy, hogy egy virtuális PLC-t (snap7) kerül alkalmazásra. Ez a megoldás nem hátráltat minket abban, hogy az S7 protokoll gyakorlati alapjait megismerjük. Az S7 protokoll a TCP 102-es portján kommunikál, a vizsgálatoknál a "s7comm" és a "tcp.port == 102" filtereket érdemes alkalmazni.

Először -noha nem kötelező- a "netdiscover" alkalmazás segítségével derítsük fel, milyen eszközök vannak a hálózaton. 

sudo netdiscover

Az eredmény látható az első ábrán. Hangsúlyozzuk, ez a lépés nem kötelező, csak érdekesség, mert a koráábbi cikkekben mindig az "nmap" került alkalmazásra a hálózat felderítésére.

kep
1. ábra   A hálózat felderítése
 

Indítsuk el a Python-t, és hozzunk létre egy Siemens S7 szervert.  Ehhez a következő utasítások kiadása szükséges.

sudo python3
import snap7
s7s = snap7.server.Server()
s7s.create()
s7s.start()
s7s.get_Status()

Ez a folyamat látható a következő ábrán.

kep
2. ábra   A virtuális  Siemens PLC elindítása az Ubuntu 22.04 operációs rendszeren
 

Indítsuk ezután el a korábbi cikkünkben bemutatott programok egyikét. Adjuk meg a virtuális PLC IP címét, majd kapcsolódjunk a PLC-hez. Ha nem tudjuk a virtuális PLC IP címét, akkor az megszerezhető az "ip a" utasítás kiadásával.

kep
3. ábra   Kapcsolódás a virtuális PLC-hez
 

A virtuális PLC-hez történő kapcsolódás OT hálózati forgalma látható a következő ábrán. Célszerű használni a következő Wireshark filtert.

s7comm

Látható a Wireshark grafikus felületén az S7 kommunikációs protokoll fejléce, illetve a paramétermezők (4. ábra). Látható a Wireshark grafikus felületén, hogy a PLC-hez történő kapcsolódáshoz a 0xF9 funkciókód kellett.

kep
4. ábra   Hálózati forgalom a virtuális PLC-hez történő kapcsolódás során (kattints a képre)
 

Most kapcsolódjunk le a virtuális PLC-ről, ekkor a következő hálózati forgalom generálódik. Érdekesség, hogy ez a folyamat nem az S7-en keresztül történik, hanem "csak" a TCP-n, a 102-es porton (5. ábra).

kep
5. ábra   Lekapcsolódás a virtuális PLC-ről (kattints a képre)
 

Kapcsolódjunk most újra a virtuális PLC-hez, és navigáljunk a "CPU Info" fülre, ahol a PLC különböző adatai kérhetők le. Tekintettel arra, hogy ezek az adatok elengedhetetlenek egy (esetleges) sikeres támadás kivitelezéséhez, ezek tehát érzékeny adatok, és mégis titkosíttatlanul "közlekednek" ezek az ipari hálózaton. Kérjük le először a "Unit Info"-t (6. ábra).

kep
6. ábra   Érzékeny adatok lekérésének felülete
 

Kattintsunk a "Read" nyomógombra, és az érzékeny adatok láthatók lesznek a "CPU Info" felületen (7. ábrán).

kep
7. ábra   A virtuális PLC adatainak a lekérése sikeres volt
 

Az érzékeny adatok lekérése sikeres volt, és mi látható a Wireshark felületén, azaz, mi volt a hálózati forgalom? A 8. ábrán látható a hálózati forgalom része, ahol a "UserData" "Response"-nál megtalálhatók az érzékeny adatok. A Wireshark grafikus felületén látható, hogy a lekérés során először egy "Request" csomag érkezik a PLC-hez, majd a szimulált ipari eszköz visszaküldi a "Response"-t, amelyben az érzékeny adatok találhatók.

kep
8. ábra   A virtuális PLC adatai a hálózti forgalomban (kattints a képre)
 

Most a " Catalog" felületen is kérdezzük le az "Order Code"-ot (9. ábra). Ennél a lekérésnél is igaz az, hogy a "Request"-re történik a "Response".

kep
9. ábra   Order Code a Catalog felületen
 

Ennek a lépésnek a hálózati forgalmának a részlete látható a következő ábrán. A hálózati forgalomból kényelmesen kiolvasható a funkciókód (4) is.

kep
10. ábra   Az Order Code lekéréséhez szükséges funkciókód (kattints a képre)
 

A "Request" hatására érkező "Response" válaszban megtalálható az "Order Code", és természetesen a verziószám is.

kep
11. ábra   Az Order Code a hálózati forgalmban (kattints a képre)
 

Most kérdezzük le az "SZL" mező tartalmát, akár módosíthatjuk az ID és az Index tartalmát is. Meghagyva most a default értékeket, kattintsunk a "Read" nyomógombra.

kep
12. ábra   SZL mező kiolvasása a vizsgálóprogram felületén
 

Ennek a folyamatnak a hálózati forgalma látható a Wireshark grafikus felületén, és ennek a lépésnek a funkciókódja: 4.

kep
13. ábra   SZL mező lekérése a "Request" csomagban (kattints a képre)
 

Kérdezzük most le a PLC rendszeridejét és dátumát. Kattintsunk ezért a "Misc" nevű lapon lévő "Read PLC Date/Time" nyomógombra.

kep
14. ábra   A PLC idejének és dátumának lekérdezése
 

A hálózati forgalom "Request" része látható a következő ábrán (funkciókód: 7).

kep
15. ábra   Kérés küldése a virtuális PLC felé (kattints a képre)
 

A "Response" részben megtalálhatók a lekért adatok.

kep
16. ábra   A virtuális PLC elküldi a "Response" mezőben a rendszeridőt és a dátumot (kattints a képre)
 

Kérdezzük le most a virtuális PLC állapotát. Kattintsunk a "Get Unit Status" nyomógombra.

kep
18. ábra   A virtuális PLC állapotának lekérdezése a vizsgálóprogram felületén
 

Ennek a lépésnek (tehát a nyomógomb lenyomása) a hálózati forgalma (funkciókód is) látható a következő ábrán.

kep
19. ábra   Az állapot lekérése (kattints a képre)
 

A "Response" mezőben megtalálható a virtuális PLC állapota.

kep
20. ábra   A Response mezőben megtalálható a virtuális PLC állapota (kattints a képre)
 

Most már tudjuk, hogy a virtuális PLC fut,működik. Adódik tehát most az, hogy távolról állítsuk le. Erre a programban szintén van lehetőség, és figyelve a hálózati forgalmat is, megismerhetjük azt a hálózati csomagot, amelynek segítségével a PLC távolról leállítható (ez nem minden Siemens PLC-nél igaz). Indítsuk el megint a Wireshark-ot, és nyomjuk meg a "Stop" nyomógombot. Látható a vizsgálóprogram felületén, hogy a PLC megállt.

kep
21. ábra   A virtuális PLC leállítása
 

A PLC leállításához szükséges hálózati csomagok láthatók a következő ábrán.

kep
22. ábra   A virtuális PLC leállítása a hálózati forgalomban (kattints a képre)
 

Ezután távolról indítsuk újra a PLC-t. Erre két lehetőségünk is van (Hot/Cold). Érdemes a vizsgálatunk során mind a két lehetőséget kipróbálni úgy, hogy a Wireshark grafikus felületén megvizsgáljuk a hálózati forgalmakat.

kep
23. ábra   Hot restart
 

A "Hot restart" kérésének a hálózati forgalma látható a következő ábrán.

kep
24. ábra   A Hot restart kérése (kattints a képre)
 

Erre a kérésre érkező válaszban látható, hogy a PLC elindult.

kep
25. ábra   A Hot restart sikeres volt, a válaszban látható a "RUN" (kattints a képre)
 

Hasonlóan működik a "Cold restart" is.

Ebben a cikkben bemutatásra került az, hogyan lehet a Siemens S7 kommunikációs protokollját gyakorlati szinten megismerni. Aki nem szeretné ezeket a lépéseket végrehajtani, de szívesen kipróbálná a Wireshark különböző filtereit, az itt tudja letölteni a küönböző pcap file-okat.
https://github.com/webelektronika/SiemensSnap7

 

Az s7comm filterek itt találhatók:
https://www.wireshark.org/docs/dfref/s/s7comm.html

 



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

Az nmap (grafikus megjelenítésnél a ZenMap) használata az IT biztonság, illetve az üzemeltetés területén dolgozó szakembereknél szinte elkerülhetetlen. Az ingyenes szoftver segítségével tesztelhetők a számítógépeink, a számítógéphálózatunk, vizsgálha. . . .

A Python programozási nyelv nagyon elterjedt a fejlesztők körében. Használják beágyazott rendszereknél, webes alkalmazásoknál, IT biztonság különböző területein, stb. Látható, hogy nagyon széles a felhasználási területe ennek a nyelvnek, ideje volt m. . . .

Elkezdjük most részletesebben megismerni az nmap használatát. Az nmap nagyon fontos eszköz az IT biztonsággal, illetve az üzemeltetéssel foglalkozó szakembereknél. De hogyan működik? Hogyan lehet és érdemes a scannelési tulajdonságokat beállítani? M. . . .