Daugumoje paaiškinimų du faktai apie SSTP susilieja, ir būtent tas susiliejimas daro įrašus painius. Programos paketas išlieka apsaugotame kanale, o tą kanalą nešanti TCP jungtis visą laiką išlaiko savo adresus. Per laidą eina nešėjas su savo kroviniu, niekada ne vieno iš jų pakaitalas. Pereikite krūvą iš išorės į vidų ir pažymėkite kiekvieną ribą, kurią kertate.

Pradėkite nuo išorinio nešėjo

Pirmas dalykas laide yra įprasta TCP jungtis į 443 prievadą su tikrais adresais, kuriuos maršrutizatoriai persiunčia. Būtent ši jungtis išlieka po tinklo adresų vertimo ir yra tai, ką prieigos tiekėjas gali suskaičiuoti. Naudingosios apkrovos apsauga nepašalina nešėjo, ir ji nepaslepia apimties ar laiko.

Viskas po šio taško yra nešama, o ne maršrutizuojama. Nešėjas veikia toliau net tada, kai vidinis apsikeitimas nepavyksta.

Sekite inkapsuliavimą į vidų

Apsaugotame kanale yra SSTP valdymo apsikeitimas, paskui PPP sesija, paskui tinklo paketas, kurį klientas nori gauti. Kiekvienas sluoksnis turi savo derybas, savo klaidų pranešimus ir savo būsenos mašiną. Todėl gedimas iš vieno požiūrio gali atrodyti kaip TLS gedimas, o iš kito kaip PPP gedimas. Skaitydami sluoksnius iš eilės sužinosite, kuri būsenos mašina sustojo.

Vienas įrašas retai parodo visą krūvą. Išorinės antraštės matomos tik už galinio taško, o vidinės tik po dekapsuliavimo. Šis asimetriškumas kyla iš to, kur stovite, o ne iš protokolo.

Toliau pateikta schema sugrupuoja sluoksnius, kad apie juos apskritai būtų galima kalbėti. Tai ne baitų išdėstymas, ji nežada vieno įrašo vienam paketui ir nieko nesako apie tai, kiek kriptografinių operacijų atlieka įgyvendinimas.

outer IP header
  TCP to port 443
    TLS record layer
      SSTP control and data packets
        PPP frames
          inner IP packet
            application transport and payload

Pažymėkite stebėtoją prieš skaitydami įrašą

Du tos pačios sesijos įrašai atsako į skirtingus klausimus, ir sąsaja, kurioje jie padaryti, nulemia, į kuriuos. Prieigos kelyje matote nešėją ir TLS įrašus, ir galite matuoti dydžius bei intervalus nematydami vidinio adreso. Galiniame taške, po dekapsuliavimo, vidinis paketas yra įprastas srautas pagal privačią perdavimo politiką.

Užrašykite sąsają ir kryptį kiekviename įraše prieš jį aiškindami. Pėdsakas iš fizinio adapterio niekada neparodys vidinės programos adresų kaip įprastų išorinių laukų, o šio nebuvimo skaitymas kaip šifravimo gedimo yra dažna klaida. Pėdsakas iš tunelio vidaus visai neparodo nešėjo, todėl negali atsakyti į klausimą apie tiekėjo požiūrį. Ta pati disciplina galioja galinio taško žurnalams, kurie fiksuoja derybų eiliškumą, o ne turinį.

Išsaugokite patikras, kurių schema negali įrodyti

Sluoksnių tvarka neįrodo, kad diegimas tikrina serverio sertifikatą, derasi dėl palaikomos TLS versijos ar suteikia teisę paskyrai. Kiekvienas iš jų yra konfigūracijos sprendimas, kuris nepavyksta nepriklausomai nuo inkapsuliavimo.

Patikrinkite juos klientu, kuris praneša, dėl ko derėjosi, o ne spręskite iš brėžinio. Pradėkite nuo TLS rankos paspaudimo, paskui SSTP apsikeitimo, paskui PPP ir sustokite pirmame etape, kuris praneša apie klaidą. Pirmoji komanda išspausdina grandinę ir suderintą versiją, o antroji išvardija įraše esančius rankos paspaudimus.

openssl s_client -connect vpn.corp.internal:443 -servername vpn.corp.internal
tshark -r sstp.pcap -Y "tls.handshake.type == 1"

Susiję straipsniai