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.
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.
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.
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.
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).
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).
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).
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.
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".
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.
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.
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.
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.
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.
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).
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.
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.
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.
19. ábra Az állapot lekérése (kattints a képre)
A "Response" mezőben megtalálható a virtuális PLC állapota.
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.
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.
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.
23. ábra Hot restart
A "Hot restart" kérésének a hálózati forgalma látható a következő ábrán.
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.
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
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. . . .
Bemutatjuk most a saját (!) Wifi-s hálózatunk tesztelésének az alapjait. Megnézzük, hogy hogyan lehet biztonságos jelszót választani. Feltörhetetlen rendszer nem létezik, de megismerve a tesztelés folyamatát, válaszokat kaphatunk arra vonatkozólag, h. . . .