Indítsuk el az Ubuntu Desktop virtuális gépet úgy, hogy legyen hálózati kapcsolata (pl.: NAT), mert különböző telepítéseket kell elvégezni a virtuális gépen. A cikkben az Ubuntu 22.04 Desktop verzió került felhasználásra. Ez a virtuális gép előállítható "iso" file-ból, de akár innen is letölthető.
Fontosnak tartjuk megjegyezni azt, hogy a "virtuális PLC" alatt azt értjük, hogy olyan kommunikációs megoldásokkal, protokollokkal látjuk el az Ubuntu Desktop virtuális gépünket, mintha egy PLC (pl.: Siemens S7-1200 1212) lenne.
Először a főbb IT protokollok kerülnek telepítésre. A távoli bejelentkezés miatt szükséges a "Telnet", illetve az "SSH" telepítése, illetve előfordulhat az, hogy log file-okat, firmware-eket kell fel-/letölteni, ezért szükséges még az FTP-t is installálni. Ma már az olcsóbb PLC-k is rendelkezhetnek webszerverrel, ezért egy webkiszolgáló használatát is lehetővé tesszük a virtuális PLC-n.
A telepítésnél használni fogjuk a "git"-et, ezért a telepítés ezzel kezdődik. Adjuk ki a következő utasítást.
sudo apt install git
A "git" telepítésének a folyamata a következő ábrán látható.
1. ábra A "git" telepítésének a folyamata
Ezután telepítsük az első IT protokollt, az FTP-t. Adjuk ki az FTP telepítéséhez a következő utasítást.
sudo apt install vsftpd
2. ábra Az FTP telepítésének a folyamata
Noha a "telnet" protokoll már erősen elavult, az ipari rendszerekben a mai napig még megtalálhatók. Ezért telepítsük a "telnet"-et is, adjuk ki a következő utasítást.
sudo apt install telnetd
3. ábra A "telnet" telepítésének a folyamata
Most az SSH-t telepíük, amely már titkosított protokoll. Az SSH telepíéséhez adjuk ki a következő utasítást.
sudo apt install openssh-server
4. ábra Az SSH telepítésének a folyamata
Végül telepítsünk egy webes kiszolgálót, az "nginx"-et (de akár az Apache is lehet).
sudo apt install nginx
Ellenőrizzük le most, hogy a most telepített protokollok elérhetők-e távolról. Indítsuk el a Kali Linux virtuális gépet úgy, hogy egy hálózatban legyen a két virtuális gép. Ezután a Kali Linux terminálablakában futtassunk egy port scant. Egyik legelterjedtebb port scan az nmap, használjuk mi is ezt az alkalmazást. Végezzünk teljes port scant (-p-).
sudo nmap -p- IP cím
A "-p-" kapcsolóval minden egyes TCP port állapota vizsgálatra kerül.
5. ábra Port scan elvégzése az "nmap" alkalmazással
Látható az 5. ábrán, hogy az összes olyan IT protokoll telepítésre került, amely egy "átlagos" PLC-ben megtalálható. Például a Siemens S7-1200-as PLC-k tartalmaznak (függ a firmware-től) olyan webszervert, amely a 443-as porton érhető el. Az Nginx-nél alkalmazható a 443-as port is, ennek a beállításával ebben a cikkben nem foglalkozunk.
Folytassuk most a telepítéseket, a következő részben a különböző főbb OT protokollok kerülnek sorra. Az "S7" Siemens protokoll emulálására szükség lesz a "Snap7"-re. A Snap7 legújabb verziója "z7" file-ként tölthető le, a kicsomagoláshoz szükséges lesz a "p7zip" telepítésére (illetve javasolt még az "Midnight Commander" telepítése is).
sudo apt install p7zip
A Midnight Commander telepítéséhez a következő utasítás kiadása szükséges.
sudo apt install mc
6. ábra A "z7" telepítésének a folyamata
Szükséges alkalmaznunk a Pythont is, mert például a Modbus használatánál ez kötelező lesz, illetve a Python csomagok telepítésénél a "pip" elengedhetetlen, ezzel menedzselhetők a különböző Python csomagok. Ezért a további telepítés ezzel folytatódik.
sudo apt install python3-pip
7. ábra A "python3-pip" telepítésének a folyamata
A "twisted" (hálózati megoldások, illetve a pymodbus miatt kell) telepítéséhez a következő utasítást adjuk ki.
sudo apt install twisted
8. ábra A "twisted" telepítésének a folyamata
Célszerű telepíteni a "testresources"-t is (pymodbus miatt), adjuk ki ehhez a következő parancsot.
sudo apt install testresources
9. ábra A "testresources" telepítésének a folyamata
Telepítsük a "pytest" csomagot is (a cpppo csomag miatt kell).
sudo apt install pytest
10. ábra A "pytest" telepítésének a folyamata
Ahhoz, hogy az Ethernet/IP-t is használni tudjuk a virtuális PLC-n, szükséges telepíteni a "cpppo" Python csomagot is. Adjuk ki a következő utasítást.
sudo apt install cpppo
11. ábra A "cpppo" telepítésének a folyamata
Most már a "pymodbus" csomag telepítése van hátra. Ennek a segítségével az iparban elterjedt, szinte mindenhol használt Modbus/TCP protokoll emulálható. Készíthetünk saját alkalmazást is Python nyelven, de akár a Github-on is találunk szerver/kliens alkalmazásokat, amelyek a fent említett kommunikációs megoldást használják.
Adjuk ki a következő utasítást, hogy a későbbiekben a Modbus/TCP-t használni tudjuk.
pip3 install pymodbus
12. ábra A "pymodbus" telepítésének a folyamata
Ahhoz, hogy a Siemens protokoll elérhető legyen a virtuális PLC-n, le kell töltenünk a snap7 tömörített file-t, majd a kicsomagolás után a következő lépések végrehajtása is szükséges.
A telepítéshez szükséges file-ok itt érhetők el:
https://sourceforge.net/projects/snap7/files/
A "z7" tömörített file letöltési linkje a következő:
https://sourceforge.net/projects/snap7/files/1.4.2/snap7-full-1.4.2.7z/download
Töltsük le ezt a file-t, és csomagoljuk ki a főkönyvtárba, majd listázzuk ki a "build/unix" könyvtár tartalmát. Ehhez a következő utasítások kiadása szükséges.
cd build/unix
ls -l
13. ábra A "build/unix" könyvtár tartalma
Fordítsuk le azt az "*.mk" file-t, amelyet az általunk használt architektúrán használni fogunk. Az Ubuntu VM-en a következő utasítást kell alkalmazni.
make -f x86_64_linux.mk
A kiválasztott file fordítási folyamata látható a 14. ábrán.
14. ábra A "x86_64_linux.mk" file fordítása
A következő utasítások kiadása szükséges.
cd ../bin/x86_64-linux
sudo cp libsnap7.so /usr/lib
sudo ldconfig
15. ábra A letöltött snap7 file fordításának a folyamata
Végül még a "snap7" telepítése kell, ehhez adjuk ki a következő utasítást.
sudo pip3 install python-snap7
16. ábra A "snap7" telepítésének a folyamata
Próbáljuk most ki a snap7-et, amely a Siemens S7 protokolljáért "felel". Létrehozunk most egy S7 protokollt alkalmazóó szervert a virtuális gépen. Ahhoz, hogy a Python nyelven elérjük a hálózati interfészt, szükséges a root jogosultság, ezért a Python-t így indítsuk el:
sudo python3
Használni fogjuk a "snap7" csomagot.
import snap7
Ezután hozzunk létre egy snap7-es szervert.
s7s = snap7.server.Server()
Létrehozzuk a kérdéses szolgáltatást.
s7s.create()
Elindítjuk a 102-es porton megtalálható, a Siemens S7-es protokollját alkalmazó szervert.
s7s.start()
A "get_status()" függvénnyel az előbb létrehozott szerver állapota kérdezhető le (ez egyébként elhagyható, a szerver állapota ellenőrizhető port scannel is).
s7s.get_status()
17. ábra Az S7 Siemens kommunikációs protokoll már működik az Ubuntu virtuális gépen
Indítsuk el egy másik terminálablakban az Ethernet/IP szolgáltatást is, adjuk ki a következő utasítást.
python3 -m cpppo.server.einp -v
Az Ethernet/IP szolgáltatás már elérhetó a virtuális PLC-n (18. ábra).
18. ábra Az Ethernet/IP szolgáltatás elindítása a virtuális PLC-n
Futtassunk a Kali Linux VM alatt elérhető nmap alkalmazással egy újabb port scant.
sudo nmap -p- IP cím
Látható a 19. ábrán, hogy a port scan felfedezett két új nyitott TCP portot, a 102-esen található S7-et, illetve a 44818-on lévő Ethernet/IP-t.
19. ábra A port scan eredménye. két ipari protokoll is elérhető már a virtuális PLC-n
Végül, indítsuk el a Modbus szervert is. Fontos, hogy ehhez egy Python nyelven írt alkalmazás szükséges, amely a következő cikkünkben kerül ismertetésre.
sudo python3 server2.py
20. ábra A virtuális PLC-n fut a Modbus/TCP szerver
Ha most egy újabb port scant hajtunk végre a Kali Linux VM-en, akkor már látható lesz az 502-es TCP port is (21. ábra).
21. ábra Újabb port scan eredménye a Kali Linux terminálablakán
Végül telepítsük az OPC UA implementálását tartalmazó csomagot. Ehhez upgrade-eljük az "ipython" csomagot (ez a lépés egyébként kihagyható).
pip3 install --upgrade pip ipython
22. ábra Az "ipython" csomag frissítése
Most telepítsük az "opcua" csomagot.
pip3 install opcua
23. ábra Az "opcua" csomag telepítése
Alkalmazzuk most a telepített "opcua" csomagot, root jogosultsággal indítsuk el a Pythont.
sudo python3
Most importáljuk be az "opcua" csomagot.
import opcua
Hozzuk létre a szervert.
serverOPCUA = opcua.server.server.Server()
Indítsuk el az OPC UA szervert.
serverOPCUA.start()
Az OPC UA szerver elindult a 4840-es TCP porton. Az "opcua" csomag alkalmazásánál nincs arra lehetőség, hogy lekérdezzük a szerver állapotát.
24. ábra A virtuális PLC-n fut a Modbus/TCP szerver
Indítsunk újra egy port scant a Kali Linux virtuális gépen. Megjegyezzük, hogy a többi ipari protokollt megvalósító szolgáltatás leállításra került.
sudo nmap -p- IP cím
24. ábra A port scan eredménye, látható a 4840-es TCP port állapota. az OPC UA szerver működik
Megjegyezzük azt, hogy a felhasznált Ubuntu 22.04-es virtuáis gépen nem alkalmaztuk a tűzfalat. Ha használnánk tűzfalat, akkor az adott TCP portokat engedélyezni kell, hogy a távolról az adott portokon lévő szolgáltatások használhatók legyenek.
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. . . .