Az S7 (S7 Communication, Wireshark filter: s7comm) a Siemensnek a saját protokollja, amely a Siemens S7-300/400 család programozható logikai vezérlői (PLC-k) között alkalmazható, de ugyanakkor a későbbi PLC-éknél, az S7-1200, S7-1500-as családoknál is használható. Sajnos nagyon kevés (érdemi) információ van az Interneten erről az ipari protokollról, szinte mindent tapasztalat, illetve mérések útján lehet "beszerezni".
Az S7 protokoll (protokollazonosító: 0x32) funkció/parancs alapú, amely azt jelenti, hogy az átvitel általában egy S7 kérésből és egy (ahhoz tartozó) megfelelő válaszból áll. Ezt a protokollt a PLC programozásra, PLC-k közötti adatcserére, SCADA (felügyeleti vezérlő és adatgyűjtő) rendszerek PLC-adatainak elérésére és diagnosztikai célokra használják.
Az S7 kommunikáció (legalább) a következő protokollokból áll:
Ahhoz, hogy a PLC-hez kapcsolódni lehessen, három lépés szükséges.
A protokoll ID egységesen 0x32, ezt követi az üzenet típusa, amelyet ROSCTR típusnak is neveznek. Az üzenetnek négy típusa lehet:
Indítsuk el az Ubuntu virtuális gépet (IP: 192.168.1.108), illetve a Kali Linux-ot is. Ezután az Ubuntu virtuális gépen (amely a PLC-t emulálja), indítsuk el a Python-t, és írjuk be a következő sorokat.
A "sudo" a root jog miatt kell, ugyanis a hálózati kártya csak ezzel a jogosultsággal érhető el.
sudo Python3
Importáljuk a "snap7" könyvtárat, amely a Siemens kommunikációs protokolljának implementálásáért felel.
import snap7
Állítsuk be az S7 szervert.
s7s = snap7.server.Server()
Hozzuk létre a szervert.
s7s.create()
Indítsuk el a szervert.
s7s.start()
A "get_status()" függvénnyel lekérdezhető a szerver állapota.
5. ábra S7 szerver létrehozása és elindítása
Futtassunk most a Kali Linux-on egy teljes port scan-t (-p-), hogy vizsgálatra kerüljenek olyan portok is, amelyek nem default-ak az "nmap" port scan-nél.
sudo nmap -p- 192.168.1.108
A port scan futási eredménye látható a következő ábrán.
6. ábra A port scan eredménye, látható, hogy a TCP 102-es port nyitott
Látható a port scan eredményén, hogy a TCP 102--es port nyitott állapotban van, ezért érdemes futtatni az "s7-info" nmap script-et.
sudo nmap -p 102 --script=s7-info 192.168.1.108
Ennek a script-nek az alkalmazásával megismerhető a kérdéses IP címen lévő Siemens PLC neve, konkrét típusa, verziószáma, stb. Ezek érzékeny adatok, és a későbbiekben láthatő lesz a Wireshark grafikus felületén az, hogy ezek nem titkosítottak.
7. ábra Az "s7-info" script futási eredménye, megismerésre került a "PLC" konkrét típusa is
A port scan futása során keletkező hálózati forgalomban keressük meg az S7 kommunikációs protokollt. Ehhez alkalmazzuk a következő filtert a Wireshark-on.
s7comm
A Wireshark grafikus ablakában már csak a kérdéses csomagok láthatók (8.ábra).
8. ábra A script futása során keletkezett hálózati forgalom (részlet)
Ha most a kapcsolat felépítését szeretnénk megkeresni a hálózati forgalomban, akkor a funkciókód alapján tudunk keresni. A funkciókód értéke 0xf0, ezért a következő filter alkalmazása szükséges.
s7comm.param.func == 0xf0
Látható a 9. ábrán a "Job", illetve az arra adott válasz.
9. ábra A kapcsolat kiépítése a Kali Linux és a virtuális PLC között
Végül könnyen megtalálhatók a kérdéses érzékeny adatok is, amelyeknek az ismerete megkönnyti az esetleges támadás kivitelezését is.
s7comm
Az érzékeny adatok könnyen megtalálhatók az OT hálózati forgalomban.
10. ábra Az érzékeny adatok az OT hálózaton, titkosítás nélkül
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. . . .