4840 - Pentesting OPC UA

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Basic Information

OPC UA, što znači Open Platform Communications Unified Access, je važan otvoreni protokol koji se koristi u raznim industrijama kao što su proizvodnja, energetika, vazduhoplovstvo i odbrana za razmenu podataka i kontrolu opreme. Omogućava interoperabilnost opreme različitih proizvođača, naročito sa PLCs.

Njegova konfiguracija može podržati jake bezbednosne mere, ali se često, zbog kompatibilnosti sa starijim uređajima, te mere ublažavaju, izlažući sisteme rizicima. Takođe, pronalaženje OPC UA servisa može biti teško jer network skeneri možda neće detektovati servise ako su na nestandardnim portovima.

Podrazumevani port: 4840 (binary opc.tcp). Mnogi proizvođači izlažu odvojene discovery endpoint-e (/discovery), HTTPS binding-e (4843/443), ili proizvođački specifične slušačke portove kao što su 49320 (KepServerEX), 62541 (OPC Foundation reference stack) i 48050 (UaGateway). Očekujte više endpoint-a po hostu, pri čemu svaki reklamira transport profile, security policy i podršku za user-token.

Built-in NodeIdWhy it matters
i=2253 (0:Server)Sadrži ServerArray, vendor/product stringove i namespace URI-e.
i=2256 (ServerStatus)Otkriva uptime, trenutno stanje, i opcionalno build informacije.
i=2267 (ServerDiagnosticsSummary)Prikazuje brojeve sesija, abortirane zahteve, itd. Odlično za fingerprinting brute-force pokušaja.
i=85 (ObjectsFolder)Ulazna tačka za pretraživanje izloženih tagova uređaja, metoda i alarme.
PORT     STATE SERVICE REASON
4840/tcp open  unknown syn-ack

Pentesting OPC UA

Da biste otkrili bezbednosne probleme u OPC UA serverima, skenirajte ih pomoću OpalOPC.

opalopc -vv opc.tcp://$target_ip_or_hostname:$target_port

Discovery & Enumeration Playbook

  1. Locate all OPC UA transports
nmap -sV -Pn -n --open -p 4840,4843,49320,48050,53530,62541 $TARGET

Ponovite na UDP grupnim adresama ako okruženje koristi LDS-ME multicast discovery.

  1. Fingerprint endpoints
  • Pozovite FindServers/GetEndpoints preko svakog transporta da zabeležite SecurityPolicyUri, SecurityMode, UserTokenType, application URI i product stringove.
  • Enumerišite namespace-ove kako biste mogli da razrešite vendor-specifične NodeId-ove; iskoristite kolizije namespace-a da naterate klijente da učitaju šeme koje kontroliše napadač.
  1. Walk the address space
  • Počnite od ObjectsFolder (i=85) i rekurzivno Browse/Read da pronađete promenljive koje se mogu upisivati, Method node-ove i historian/log node-ove.
  • Upitajte ServerStatus.BuildInfo da razumete poreklo firmware-a, i ServerCapabilities.OperationLimits da procenite koliko je lako iscrpeti resurse servera.
  • Ako je dozvoljen anonimni pristup, odmah testirajte Call na maintenance metodama (npr. ns=2;s=Reset, ns=2;s=StartMotor). Mnogi vendori zaborave da vežu role/permissions za custom metode.
  1. Session abuse
  • Ponovo upotrebite ili klonirajte vrednosti AuthenticationToken iz drugih sesija (uhvaćene putem MITM ili izloženih dijagnostika) da hijack-ujete postojeće subscriptions.
  • Primorajte server na SessionDiagnostics flooding kreiranjem desetina neaktivnih sesija; neki stacks se sruše kada se premaši MaxSessionCount limit.

Automated assessment with OpalOPC

  • Skener može raditi interaktivno ili headless, što je zgodno za CI/CD stil OT baseline-a. Prosledite njegova mašinski čitljiva otkrića u vaš reporting pipeline da u par minuta istaknete anonymous logins, weak policies, certificate validation errors i writable variables.
  • Kombinujte OpalOPC output sa manualnim browsingom: vratite pronađenu listu endpoint-a u vaše custom alate, pa selektivno weaponizujte visokoprivilegovane node-ove (npr. MotorControl/StartStop, RecipeManager/Upload).

Attacking legacy security policies (Basic128Rsa15)

  • Bleichenbacher-style oracle: Sistemi koji i dalje dopuštaju zastarelu Basic128Rsa15 politiku (često uključenu preko build flagova kao CMPOPCUASTACK_ALLOW_SHA1_BASED_SECURITY) otkrivaju razlike u validaciji padding-a. Iskoristite ovo tako što ćete preplaviti CreateSession / OpenSecureChannel handshakes sa crafted PKCS#1 v1.5 blob-ovima da povratite privatni ključ serverovog sertifikata, a zatim se predstavljate kao server ili dešifrujete saobraćaj.
  • Authentication bypass: OPC Foundation-ov .NET Standard stack pre 1.5.374.158 (CVE-2024-42512) i zavisni proizvodi dozvoljavaju neautentifikovanim napadačima da forsiraju tu legacy politiku i potom preskoče application-level authentication. Kada ste u posedu key material-a možete prezentovati arbitrarne UserIdentityTokens, replay-ovati potpisane ActivateSession zahteve i upravljati postrojenjem kao pouzdana engineering workstation.
  • Operational workflow:
  1. Enumerišite politike sa GetEndpoints i zabeležite sve Basic128Rsa15 unose.
  2. Dogovorite tu politiku eksplicitno (SecurityPolicyUri u CreateSession), zatim pokrenite svoj oracle loop dok se povraćeni ključ ne verifikuje.
  3. Iskoristite ključ da falsifikujete sesiju sa visokim privilegijama, promenite role, ili tiho downgrade-ujete druge klijente delujući kao rogue reverse proxy.
  • CODESYS Runtime Toolkit (<3.5.21.0) ponovo je omogućavao Basic128Rsa15 kad integratori kompajliraju sa CMPOPCUASTACK_ALLOW_SHA1_BASED_SECURITY. Promenite taj flag, ponovo pokrenite oracle workflow iznad i možete doći u posed runtime privatnog ključa da biste se predstavljali kao pouzdane engineering workstation sve dok nije primenjen patch 3.5.21.0 ili noviji.
  • OPC Foundation je istovremeno objavio CVE-2024-42513 za HTTPS bindings. Čak i ako meta tvrdi da koristi TLS, proverite da li tiho ne pada na Basic128Rsa15 za binary transport iza proxy-ja.

2024-2025 exploit watchlist

  • open62541 fuzz_binary_decode (CVE-2024-53429): SecureChannel chunk-ovi koji prijavljuju prevelike ExtensionObject body-je nateraju decoder da dereferencira oslobođenu memoriju, tako da pre-auth napadač može ponavljano srušiti UA servere koji embeduju open62541 ≤1.4.6. Ponovo iskoristite Claroty corpus (opcua_message_boofuzz_db) ili kreirajte sopstveni Boofuzz harness da spam-ujete mutirane OpenSecureChannel zahteve dok watchdog ne ubije proces, zatim re-enumerišite jer se mnogi integratori vraćaju na anonymous mode nakon reboot-a.
  • Softing OPC UA C++ SDK / edgeConnector / edgeAggregator (CVE-2025-7390): TLS client-auth pipeline prihvata bilo koji sertifikat koji replay-uje trusted Common Name, pa možete izraditi disposable cert, kopirati CN od plant engineer-a i prijaviti se sa arbitrarim UserNameIdentityToken ili IssuedIdentityToken podacima. Kombinujte ovo sa downgrade-om na Basic128Rsa15 da uklonite integrity checks i perzistentno se predstavljate kao operatori dok se trustlist-i ne obnove.

Crafting OPC UA clients for exploitation

  • Custom clients: Drop-in libraries (python-opcua/asyncua, node-opcua, open62541) omogućavaju da sami implementirate exploit logiku. Uvek nametnite odgovarajući namespace index cilja da izbegnete slučajne cross-namespace write-ove kada vendori prerasporede namespace-ove posle firmware update-a.
  • Node abuse checklist:
  • HistoryRead na produkcionim tag-ovima za snapshot-ovanje proprietarnih recepata.
  • TranslateBrowsePathsToNodeIds da prevedete ljudski čitljiva imena asset-a u NodeId-ove koji se mogu ubaciti u gadget-e poput Claroty framework-a.
  • Call + Method node-ovi da pokrenu maintenance zadatke (upload firmware-a, kalibracija, reboot uređaja).
  • RegisterNodes zloupotreba da pinujete često pristupane node-ove i onda izgladnjete legitimne klijente tako što nikada ne oslobodite handle-ove.
  • Session hardening tests: Pokušajte da vezujete desetine subscriptions sa izuzetno niskim publishing intervalima (ispod 50 ms) plus prevelikim monitored-item redovima. Mnogi stacks pogrešno izračunavaju RevisedPublishingInterval i ruše se zbog scheduler overflow-a.

Fuzzing & exploit development tooling

Claroty Team82 je objavio open-source opcua-exploit-framework koji pakuje godine Pwn2Own-grade istraživanja u ponovo upotrebljive module:

  • Modes: sanity (lagana čitanja/browse), attacks (npr. thread pool starvation, file upload DoS), corpus (replay fuzzing payload-e), server (rogue OPC UA server za backdoor-ovanje klijenata).
  • Usage pattern:
# Run a DoS attack against a Prosys Simulation Server endpoint
python3 main.py prosys 10.10.10.10 53530 /OPCUA/SimulationServer thread_pool_wait_starvation

# Replay an entire Boofuzz corpus against open62541
python3 main.py open62541 192.168.1.50 4840 / opcua_message_boofuzz_db input_corpus_minimized/opcua.db
  • Rogue server scenario: Bundlovani asyncua-based server vam omogućava da targetirate client softver služeći malicious address space-ove (na primer, odgovore sa oversized ExtensionObject-ima da biste pokrenuli parsing bugove u UA Expert klonovima).
  • Target coverage: Ugrađeni profili mapiraju na Kepware, Ignition, Unified Automation, Softing SIS, Triangle Microworks, Node-OPCUA, Python OPC UA, Milo, open62541, itd., tako da brzo možete menjati stack-ove bez prepisivanja payload-ova.
  • Integration tips: Povežite njegov output sa sopstvenim fuzzer-ima—prvo prskajte corpus payload-e, zatim pustite OpalOPC da re-verifikuje da li se crash vratio u insecure defaults (anonymous login, setpoint write access, itd).

Exploiting authentication bypasses

Ako se otkriju authentication bypass ranjivosti, možete konfigurisati OPC UA client u skladu sa tim i videti šta možete pristupiti. Ovo može omogućiti sve, od prostog čitanja process vrednosti do stvarnog upravljanja teškom industrijskom opremom.

Da biste dobili nagoveštaj o uređaju kojem imate pristup, pročitajte vrednosti node-a “ServerStatus” u address space-u i guglujte za uputstvo za upotrebu.

Shodan

  • port:4840
  • port:62541 "OPC UA"
  • ssl:"urn:opcua"
  • product:"opc ua"

Kombinujte pretragu sa vendor string-ovima ("Ignition OPC UA", "KepServerEX") ili sertifikatima ("CN=UaServerCert") da prioritetizujete visokovredne asset-e pre nego što započnete intruzivno testiranje.

References

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks