Osoitteen estäminen ja tilin lukitseminen ovat kaksi eri mekanismia, ja ne epäonnistuvat vastakkaisiin suuntiin. Osoite-esto pysäyttää yhden lähteen ja jättää kohdetilin saavutettavaksi muualta; tililukitus pysäyttää kyseisen identiteetin kaikkialla, myös käyttäjän omalla kannettavalla.

VPN:ssä, joka delegoi todennuksen PAM:lle, laskuri on se, mihin PAM-pino yltää, ei se, mitä kuuntelija kirjasi.

Kaksi laskuria, kaksi eri uhria

Nopeudenrajoitin katsoo lähdettä ja kysyy, kuinka monta yritystä sieltä tuli äskettäin. Lukitus katsoo identiteettiä ja kysyy, kuinka monta epäonnistumista tili on kerännyt. Ensimmäinen suojaa palvelun saatavuutta, toinen tunnistetietoja; kumpikaan ei korvaa toista.

Siksi lause estämme IP-osoitteen viiden epäonnistumisen jälkeen ei ole vastaus tunnistetietojen täyttöä koskevaan raporttiin. Hyökkääjä vaihtaa lähteitä, jokainen saa vähän yrityksiä, eikä tiliä lasketa koskaan. Päinvastoin lukitus ilman lähdevalvontaa antaa hyökkääjän pitää tilin lukittuna loputtomasti epäonnistumalla tahallaan.

Kahdella valvonnalla on myös erilaiset palautumistarinat. Osoite-esto vanhenee ajastimella, jonka kanssa kenenkään ei tarvitse ajatella; tililukitus voi vaatia ylläpitäjän, dokumentoidun odotusajan tai itsepalvelun palautuksen.

Etsi varasto, joka omistaa laskurin jo

Ennen kuin lisäät mitään, selvitä, onko epäonnistumisvarasto jo olemassa. Paikallinen Linux-tili, hakemistopalvelu ja ulkoinen identiteettipalvelu pitävät kukin omaa laskuriaan, ja niiden eteen lisätty PAM-moduuli luo toisen sen sijaan, että laajentaisi ensimmäistä.

grep -rnE 'faillock|pam_tally|pam_unix' /etc/pam.d/
ls -l /etc/pam.d/ | head -20

Lue palvelutiedosto, jonka VPN todella nimeää, ja seuraa sen sisällytysrivejä. Monissa jakeluissa VPN-palvelu sisällyttää yhteisen tiedoston, mikä tarkoittaa, että säätämäsi laskuri koskee myös SSH:ta ja paikallisia kirjautumisia.

Jos hakemisto jo pakottaa lukituksen, hyödyllinen kysymys on, miten PAM-keskustelu päätyy siihen päätökseen ja miten VPN siitä raportoi. Päälle lisätty paikallinen laskuri ei muutu hakemiston laskuriksi, ja kaksi käytäntöä voivat olla eri mieltä siitä, milloin tili avautuu.

pam_faillockilla on kolme kutsukohtaa, ei yksi

Moduuli erottaa kolme toimintoa, jotka yksi kopioitu rivi yleensä hämärtää: tarkistus, onko tili jo lukittu, epäonnistumisen kirjaaminen ja historian tyhjentäminen onnistumisen jälkeen.

Tässä vanhemmasta laskurimoduulista siirtyminen yleensä menee pieleen. Toimivasta pam_tally2-esimerkistä rivin kopioiminen pam_faillock-pinoon ei ole uudelleennimeäminen; dokumentoitu asetelma on erilainen, ja väärään kohtaan sijoitettu kutsu voi kirjata epäonnistumisia koskaan tarkistamatta niitä.

faillock --user alice
faillock --user alice --reset

Tarkistustyökalu on nopein tapa nähdä, onko laskuri todellinen: se näyttää tilin kirjatut epäonnistumiset ja voi tyhjentää ne. Jos valvottu epäonnistuminen ei muuta tulostetta, kutsun sijainti on väärä.

Oma palvelunimi ei ole eristys

VPN:n oma PAM-palvelutiedosto tekee aiotun käytännön näkyväksi, mutta ei rajaa vaikutusta. Yhteisen tiedoston sisällytys tuo mukanaan kaiken, mitä tiedosto tekee, mukaan lukien koko järjestelmää koskevat laskurit.

Päätä selvästi, kattaako lukitus vain VPN-pääsyn vai jokaisen palvelun, joka todentaa saman tilin. Molemmat vastaukset ovat perusteltavissa; virhe on uskoa valinneensa toisen, kun pino toteuttaa toista.

Ota sitten huomioon kustannus. Hyökkääjä voi laukaista lukituksen, ja kärsijä on tilin omistaja. Kynnys, odotusaika ja hallinnollinen palautumispolku ovat osa käytäntöä, eikä palautuminen saa riippua VPN:n uudelleenkonfiguroinnista tapahtuman aikana.

Hyväksy järjestys, ei yksittäistä hylkäystä

Testaa nimetyillä identiteeteillä hyväksytyn suunnitelman mukaan ja testaa ketju yksittäisen tapahtuman sijaan: kelvollinen tili todennetaan, tahallaan väärä salasana siirtää laskuria, asetettu lukitus astuu voimaan ja dokumentoitu palautuminen palauttaa pääsyn.

faillock --user test-vpn-01
journalctl -u openvpn-server@lab -n 30 --no-pager | grep -i 'auth\|pam'

Tarkastele onnistumisen käyttäytymistä yhtä huolellisesti kuin epäonnistumisen. Jos onnistunut kirjautuminen ei tyhjennä historiaa, tili lukittuu tavallisten virheiden hitaan kertymisen jälkeen. Jos se tyhjentää kaiken jokaisesta palvelusta, laskuri on heikompi kuin käytäntö väittää.

Lopuksi pysäytä valvomattomat asiakkaat ennen voiton julistamista. Tallennettu tunnistetieto, joka yrittää uudelleen taustalla, luo epäonnistumiset uudelleen minuutteja palautumisen jälkeen ja lukitsee tilin taas. Lähdeperusteinen nopeudenrajoitus voi jäädä lisävalvonnaksi, mutta se ei ole tilin käytäntö.

Aiheeseen liittyvät artikkelit