OpenVPN-i juhtimispakettide jälgimine: tls-auth enne TLS-i
tls-auth HMAC asub juhtimisümbrikul, mitte TLS käepigistuse sees. Sobitage võti, suund ja digest ning seejärel kontrollige kaitset eemaldamata.
tls-auth tõrget teatatakse tavaliselt käepigistuse probleemina, kuigi see pole kunagi seda olnud. HMAC-i kontrollitakse juhtimispaketil enne mis tahes TLS töötlemist, seega vale võti või suund tekitab tõrke, mis näeb välja nagu sertifikaadiprobleem ja otsustatakse kaks kihti varem. Ümbriku käsitlemine eraldi objektina teeb diagnoosi lühikeseks: lugege väljad, kinnitage, et kontroll käivitub varakult, ja võrrelge seejärel kolme asja, milles mõlemad otsad peavad kokku leppima.
Lugege ümbrikku selles järjekorras, milles see ehitatakse
Juhtimispakett kannab seansi identifikaatorit, valikulist tls-auth HMAC-i, korduse ja kinnituse teavet ning usaldusväärset sõnumi identifikaatorit, mille järel tuleb sõnumitüübi kasulik koormus. Kui sõnum on käepigistuse sõnum, on kasulikuks koormuseks TLS šifreeritud tekst. See on kogu seos: TLS materjal liigub sõnumi sees, mida ümbrik juba kaitseb. Vaadake OpenVPN-i võrguprotokolli viidet, mis loetleb juhtimiskanali väljad selles järjekorras.
Usaldusväärsuse kihti aetakse kergesti segi krüptograafiaga. Kinnitused, kordussaadetised ja sõnumi identifikaator on olemas selleks, et juhtimissõnumid jõuaksid ebausaldusväärse transpordi kohal üks kord ja õiges järjekorras. Need ei ole autentimine ja õige sõnumi identifikaator ei tõesta midagi selle kohta, kes paketi saatis.
Hoidke see rühmitamine kontseptuaalsena. See ei ole baitide järjekorra diagramm ja sellest ei piisa sildi arvutamiseks, sest HMAC-i sisenevad väljad sõltuvad teostusest, versioonist ja režiimist.
Näidake, et kontroll käivitub enne käepigistust
Vastuvõtja, kellel on jagatud võti, saab HMAC-i kontrollida ja võltsitud paketi kohe kõrvale heita, ilma käepigistuse olekut eraldamata või avaliku võtmega töötamata. Kaitse katab ka algseid käepigistuse pakette ja just seetõttu ilmneb vale võti ebaõnnestunud ühendusena, mitte hilinenud autentimisveana.
Suurendage deemonite detailsust ja jälgige juhtimiskanalit, mitte tun-seadet:
openvpn --config /etc/openvpn/server.conf --verb 6
Otsite juhtimiskanali HMAC-i kontrolli tõrget, millest teatatakse paketi tasandil, enne mis tahes TLS hoiatust. TLS hoiatus logis tähendab, et ümbrik võeti vastu ja tõrge liikus sissepoole, mis on teine uurimine teise lahendusega.
Suuna käsitlemine on samuti siin. Kui staatilist võtmefaili kasutatakse koos tls-auth-iga, võtavad kaks otsa vastupidised võtmesuunad ja protokoll kasutab seda jaotust, et tabatud paketti ei saaks saatjale tagasi peegeldada. Suuna tagurpidi keeramine jätab võtme samaks ja laseb ikkagi igal paketil ebaõnnestuda. Muutke korraga ühte otsa ja taaskäivitage seejärel mõlemad deemonid, et paar laaditaks koos.
Sobitage võti, suund ja digest mõlemas otsas
Kolm väärtust peavad sobima ja ainult üks neist on fail. Staatilise võtme sisu peab mõlemas otsas olema identne, suund peab olema vastupidine ja HMAC-i jaoks kasutatav digest peab klappima. Kontrollige konfiguratsiooni enne võtmematerjali puutumist, sest üks tagurpidi keeratud suund seletab rohkem tõrkeid kui kahjustatud fail:
grep -E 'tls-auth|tls-crypt|key-direction|auth ' /etc/openvpn/server.conf
Looge jagatud saladus tööriistaga, mitte redaktoriga, ja hoidke õigused kitsad:
openvpn --genkey secret /etc/openvpn/ta.key
chmod 600 /etc/openvpn/ta.key
Vanemad versioonid võtsid võtme genereerimiseks vastu veidi teistsuguse valikute järjekorra ja nende versioonide jaoks kirjutatud profiilid on endiselt ringluses. Genereeritud fail on mõlemal juhul sama liiki objekt, seega kontroll on selles, kas mõlemad otsad hoiavad identseid baite, mitte selles, milline kirjapilt need tekitas.
Ärge ajage segi tls-auth-i ja tls-crypt-i. Mõlemad kaitsevad juhtimiskanalit, kuid tls-crypt krüpteerib selle lisaks ja peidab käepigistuse vaatlejate eest ning asendab suundade jaotuse oma võtmekäsitlusega. Ühte kasutav profiil ei suhtle teise jaoks seadistatud partneriga ja ükski digest-i häälestus ei sulge seda lünka.
Reprodutseerige silt ainult tegelikust vormingust
Baiditäpne reprodutseerimine on VPN-i käitamisest eraldi ülesanne ja see toimib ainult tegelike sisenditega: paketi ehitanud teostus ja versioon, valitud digest, suund ning tegelikud baidid, sealhulgas seansi identifikaator ja kinnituste massiiv. Väljade loendi tekstiline esitus ei ole need baidid.
Sildi pikkus tuleneb digest-ist, seega fikseeritud pikkuse eeldus puruneb hetkel, mil keegi seda muudab. Räsi pakett nii, nagu seda teeb teostus, mitte nii, nagu esitab seda blogipostituse tabel, ja võrdle samalt partnerilt võetud salvestisega, mitte käsitsi tuletatud ootusega.
Hoidke see harjutus tootmisprofiilidest eemal. Miski sildi reprodutseerimises ei ütle, kas juurutus peaks kaitse lubama.
Võtke lahknevus tagasi kaitset eemaldamata
Ahvatlev katse on tls-auth kustutada, näha, et ühendus õnnestub, ja järeldada, et võti oli vale. See vastus maksab teile kaitse ja ei õpeta midagi selle kohta, milline kolmest väärtusest lahknes. Selle asemel hankige serveri poolelt kinnitatud sobiv konfiguratsioon ja võrrelge sellega.
Valmistage muudatus ette nii, et see oleks tagasipööratav. Hoidke eelmine serveri konfiguratsioon ja võtmefail, rakendage parandatud paar, kontrollige, et klient lõpetab käepigistuse, ja alles siis eemaldage varukoopia. Kui kliendid pärast muudatust ebaõnnestuvad, taastage eelmised failid, mitte ärge improviseerige katkestuse ajal kolmandat varianti. Taastamine peaks olema üks käsk, mida te juba teate enne alustamist.
Lõpuks pidage meeles, mida läbitud kontroll tähendab. See tõestab, et partneril on jagatud võti, mitte et tema sertifikaat või konto on volitatud, ja see ei ütle midagi kokkulepitud andmekanali šifri kohta. Volitamine ja andmekaitse luuakse hiljem, seega puhas ümbrikukontroll on lähtepunkt, mitte otsus.