Si un portàtil amb signatures antivirus que van deixar d’actualitzar-se fa setmanes encara pot obrir la vostra aplicació interna, poques vegades el document de política és el que està malament. Tres sistemes separats s’han de posar d’acord abans que es denegi l’accés: un mesura l’extrem, un altre converteix aquesta mesura en un veredicte de permetre o denegar, i un tercer descarta realment el trànsit. Quan un dispositiu no conforme hi entra de totes maneres, exactament un d’aquests enllaços falta o confia en proves que no hauria. Les comprovacions següents van en aquest ordre i cadascuna té un punt d’aturada.

El bloc és l’últim pas, no el primer

L’autenticació i l’estat del dispositiu responen preguntes diferents. Un inici de sessió correcte demostra que s’ha presentat una credencial; no diu res sobre el programari que s’executa a la màquina que l’ha presentada. Aquest buit és la raó per la qual un perfil de client copiat pot portar una sessió d’aspecte saludable a un amfitrió no saludable.

La feina de conformitat d’extrems ja té vocabulari per a aquesta cadena. El model de referència NEA de l’RFC 5209 divideix la tasca en un col·lector, un pas d’avaluació i un punt d’aplicació, i diu clarament que un client que menteix sobre el seu propi estat queda fora del model. Aquest advertiment importa més que el diagrama: un mòdul de plataforma fiable no converteix una mesura autodeclarada en un fet.

Manteniu el col·lector honest pel que fa a l’abast. Ha d’informar dels atributs que la vostra política nomena, al dispositiu que demana accés, i de poca cosa més. Un agent d’inventari que llista cada paquet instal·lat és una eina diferent d’un col·lector d’estat, i la diferència és alhora un problema de retenció i de precisió. Si l’informe no es pot lligar a una identitat de dispositiu, l’avaluador endevina quina màquina acaba d’aprovar.

Un tauler que mostra un estat vermell no és un control. Pregunteu a què pot arribar encara un usuari denegat: el wiki, el recurs compartit, el port de la base de dades? La remediació necessita una sola superfície estreta, i tota la resta va darrere del bloc.

Llegeix l’informe abans de llegir la regla

Comença per la font i no per la marca verda del client. A Windows, la mesura local ve del Defender o del producte que s’hagi registrat al Security Center, i tots dos es poden llegir sense consola del proveïdor:

Get-MpComputerStatus | Select-Object AMServiceEnabled, RealTimeProtectionEnabled, AntivirusSignatureLastUpdated
Get-CimInstance -Namespace root/SecurityCenter2 -ClassName AntiVirusProduct | Select-Object displayName, productState

La segona ordre retorna un enter anomenat productState. Els seus bits estan documentats de manera vaga i els proveïdors empaqueten de forma diferent les banderes d’activació i d’actualització, així que corroboreu-lo en lloc d’analitzar-lo. Les suites de tercers també deixen l’entrada del Security Center després de desinstal·lar-se, i aleshores informen sobre programari que ja no és al disc.

L’edat és el camp que la gent s’estalvia. Una marca de temps de signatura només significa alguna cosa respecte del rellotge de la màquina que fa l’avaluació, així que convertiu-la en un interval en lloc d’ullar-la:

$sig = (Get-MpComputerStatus).AntivirusSignatureLastUpdated
[int](New-TimeSpan -Start $sig -End (Get-Date)).TotalHours

Ara la política té un número per llegir. Si la vostra regla diu 72 hores, aquest és el número que fa servir, i un portàtil adormit una setmana falla sense que ningú interpreti una etiqueta. Anoteu el llindar al costat de l’ordre, perquè tots dos es desalineen quan es substitueix l’eina de l’extrem.

Converteix cada estat de dispositiu en un veredicte escrit

La majoria de disputes sobre l’estat són en realitat disputes sobre la fila desconeguda. Decideix-ho abans del primer incident, en una taula que nomena la prova, el veredicte i el propietari, perquè ningú improvisi a la consola de la passarel·la.

Evidence the assessor hasVerdictWhat it protects against
Timestamp inside the policy window, protective service runningAdmit to normal applicationsNothing yet; the other checks still apply
Timestamp older than the windowDeny, admit remediation page onlySignature rollback and dormant laptops
Service disabled or reporting offDeny, escalate to the endpoint ownerAn agent reporting stale success
No report at all for this sessionTreat as deny, never as healthyAgents that fail open under load

La fila de baix és on els productes difereixen. Algunes passarel·les refusen la connexió i expliquen per què; altres deixen aixecar el túnel i apliquen una política restringida; unes poques tornen a l’últim informe bo conegut. Només les dues primeres són defensables, i val la pena provar quina fa la vostra.

Manteniu la identitat i el permís en carrils propis. Un portàtil que passa totes les proves d’estat encara necessita l’autorització humana correcta per a l’aplicació, i un certificat de dispositiu demostra la possessió d’una clau, no l’estat del sistema de fitxers. Col·lapsar els tres en un sol booleà és com un compte d’assistència acaba amb accés permanent a producció.

Comprova el camí d’aplicació amb una petició, no amb un tauler

L’aplicació és una propietat d’una petició, així que mesureu-la amb una. Posa una màquina no conforme al túnel i fes la crida que faria un usuari real:

curl -sS -o /dev/null -w '%{http_code}
' --max-time 5 https://app.internal.example/health

Un 200 d’un dispositiu que hauria d’estar bloquejat vol dir que la decisió no va arribar mai al camí de dades. Dues causes habituals: la política està lligada a un grup al qual el compte de prova no es va unir mai, o l’aplicació és abastable per una ruta que el VPN no posseeix.

Comprova primer la suposició d’encaminament. Si el nom intern es resol a una adreça a què el client ja arriba per la LAN local, el túnel és irrellevant i no s’aplicarà cap política. Compareu aquesta adreça amb la ruta que empeny la passarel·la. A OpenVPN, la política per client viu en fitxers clauats pel nom comú, així que és fàcil d’inspeccionar:

ls /etc/openvpn/ccd/
cat /etc/openvpn/ccd/laptop-17

Un fitxer que conté disable desconnecta aquell client del tot, mentre que una línia push "route ..." estreny allò a què pot arribar. Tots dos són aplicació, i tots dos són visibles per a qui depura l’informe.

Prova els quatre casos en un sol compte de proves

La comprovació final és una matriu petita, no un camí feliç. Porta un compte de prova per quatre estats: actual, signatura caducada, protecció desactivada, agent no instal·lat. Per a cadascun, anota el veredicte al registre d’avaluació, l’estat HTTP que retorna l’aplicació i si es va carregar la pàgina de remediació.

foreach ($case in 'current', 'stale', 'disabled', 'absent') {
  Get-MpComputerStatus | Select-Object AMServiceEnabled, AntivirusSignatureLastUpdated
  curl.exe -sS -o NUL -w "%{http_code}
" --max-time 5 https://app.internal.example/health
}

Dos detalls són fàcils de passar per alt. Primer la repetició: un informe capturat mentre la màquina era sana no s’ha d’acceptar per a una sessió posterior al mateix dispositiu, així que busqueu una marca de temps lligada a la connexió actual. Després la retirada: desinstal·lar l’agent hauria de produir la mateixa denegació que un informe caducat, no un pas net, i aquest és el cas que més sovint no es prova mai.

Quan la matriu coincideixi amb la taula, lliura tres elements a qui gestioni la passarel·la després: les ordres, el llindar i els quatre resultats esperats. Aquest lliurament és el resultat real, perquè un disseny d’estat que només viu en un document de política es desvia el primer cop que l’eina de l’extrem canvia el seu camp d’informació.

Articles relacionats