Jeśli laptop, którego sygnatury antywirusowe przestały się aktualizować tygodnie temu, nadal potrafi otworzyć twoją wewnętrzną aplikację, rzadko winny jest dokument polityki. Zanim dostęp zostanie odrzucony, muszą się zgodzić trzy odrębne systemy: coś mierzy punkt końcowy, coś zamienia ten pomiar w werdykt zezwól albo odmów, a coś faktycznie odrzuca ruch. Gdy niezgodne urządzenie i tak się dostanie, brakuje dokładnie jednego z tych ogniw albo ufa ono dowodom, którym nie powinno. Poniższe kontrole idą w tej kolejności i każda ma punkt zatrzymania.

Blokada to ostatni krok, a nie pierwszy

Uwierzytelnianie i stan urządzenia odpowiadają na różne pytania. Udane logowanie dowodzi, że przedstawiono poświadczenie; nie mówi nic o oprogramowaniu działającym na maszynie, która je przedstawiła. Właśnie ta luka pozwala skopiowanemu profilowi klienta przenieść zdrowo wyglądającą sesję na niezdrowy host.

Praca nad zgodnością punktów końcowych ma już słownik dla tego łańcucha. Model referencyjny NEA w RFC 5209 dzieli zadanie na kolektor, etap oceny i punkt egzekwowania i mówi wprost, że klient, który kłamie o własnym stanie, znajduje się poza modelem. To zastrzeżenie jest ważniejsze niż diagram: zaufany moduł platformy nie zamienia samodzielnie zgłoszonego pomiaru w fakt.

Utrzymuj kolektor uczciwym co do zakresu. Powinien raportować atrybuty, które nazywa twoja polityka, na urządzeniu proszącym o dostęp, i niewiele więcej. Agent inwentaryzacji, który wymienia każdy zainstalowany pakiet, to inne narzędzie niż kolektor stanu, a różnica jest jednocześnie problemem przechowywania i dokładności. Jeśli raportu nie da się powiązać z jedną tożsamością urządzenia, oceniający zgaduje, którą maszynę właśnie przepuścił.

Pulpit pokazujący czerwony stan nie jest kontrolą. Zapytaj, do czego odrzucony użytkownik wciąż dotrze: wiki, udział plików, port bazy danych? Naprawa wymaga jednej wąskiej powierzchni, a wszystko inne należy za blokadą.

Przeczytaj raport, zanim przeczytasz regułę

Zacznij od źródła, a nie od zielonego znacznika klienta. W Windows lokalny pomiar pochodzi z Defendera albo z produktu, który zarejestrował się w Security Center, i oba można odczytać bez konsoli dostawcy:

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

Druga komenda zwraca liczbę całkowitą o nazwie productState. Jej bity są luźno udokumentowane, a dostawcy różnie pakują flagi włączenia i aktualności, więc potwierdź ją, zamiast ją analizować. Pakiety firm trzecich zostawiają też wpis w Security Center po odinstalowaniu, a on raportuje o oprogramowaniu, którego nie ma już na dysku.

Wiek to pole, które ludzie pomijają. Znacznik czasu sygnatury coś znaczy tylko wobec zegara maszyny wykonującej ocenę, więc zamień go na interwał, zamiast szacować na oko:

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

Teraz polityka ma jedną liczbę do odczytania. Jeśli twoja reguła mówi 72 godziny, to jest liczba, której używa, a laptop śpiący tydzień zawodzi bez czyjegokolwiek interpretowania etykiety. Zapisz próg obok komendy, bo oba rozjeżdżają się, gdy narzędzie punktu końcowego zostanie wymienione.

Zamień każdy stan urządzenia w pisemny werdykt

Większość sporów o stan to w rzeczywistości spory o nieznany wiersz. Rozstrzygnij go przed pierwszym incydentem, w tabeli, która nazywa dowód, werdykt i właściciela, żeby nikt nie improwizował przy konsoli bramy.

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

To dolny wiersz pokazuje różnice między produktami. Niektóre bramy odmawiają połączenia i wyjaśniają dlaczego; inne pozwalają tunelowi wstać i stosują ograniczoną politykę; kilka wraca do ostatniego znanego dobrego raportu. Tylko dwa pierwsze są do obrony, i warto sprawdzić, który robi twój.

Utrzymuj tożsamość i uprawnienie na osobnych pasach. Laptop, który przechodzi każdy test stanu, nadal potrzebuje właściwej ludzkiej autoryzacji dla aplikacji, a certyfikat urządzenia dowodzi posiadania klucza, nie stanu systemu plików. Zgniatanie trzech w jeden boolean to droga, którą konto helpdesku dostaje trwały dostęp do produkcji.

Sprawdź ścieżkę egzekwowania żądaniem, a nie pulpitem

Egzekwowanie jest właściwością żądania, więc zmierz je jednym. Wstaw niezgodną maszynę do tunelu i wykonaj wywołanie, które wykonałby prawdziwy użytkownik:

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

Odpowiedź 200 z urządzenia, które powinno być zablokowane, oznacza, że decyzja nigdy nie dotarła do ścieżki danych. Dwie zwykłe przyczyny: polityka jest przypięta do grupy, do której konto testowe nigdy nie dołączyło, albo aplikacja jest osiągalna trasą, której VPN nie posiada.

Najpierw sprawdź założenie routingu. Jeśli wewnętrzna nazwa rozwiązuje się na adres, do którego klient już dociera przez lokalny LAN, tunel jest nieistotny i żadna polityka nie zadziała. Porównaj ten adres z trasą, którą pcha brama. W OpenVPN polityka dla klienta żyje w plikach kluczowanych nazwą wspólną, więc łatwo ją przejrzeć:

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

Plik zawierający disable odłącza tego klienta całkowicie, a linia push "route ..." zawęża to, do czego może dotrzeć. Oba są egzekwowaniem i oba są widoczne dla każdego, kto debuguje raport.

Przetestuj cztery przypadki na jednym koncie testowym

Ostatnia kontrola to mała macierz, nie szczęśliwa ścieżka. Przeprowadź jedno konto testowe przez cztery stany: aktualny, wygasła sygnatura, ochrona wyłączona, agent niezainstalowany. Dla każdego zapisz werdykt w dzienniku oceny, status HTTP zwracany przez aplikację i to, czy strona naprawy się wczytała.

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
}

Dwa szczegóły łatwo przeoczyć. Najpierw powtórzenie: raportu zarejestrowanego, gdy maszyna była zdrowa, nie wolno przyjąć dla późniejszej sesji na tym samym urządzeniu, więc szukaj znacznika czasu związanego z bieżącym połączeniem. Potem usunięcie: odinstalowanie agenta powinno dać tę samą odmowę co nieaktualny raport, a nie czyste przejście, i właśnie ten przypadek najczęściej nigdy nie jest testowany.

Gdy macierz zgadza się z tabelą, przekaż trzy rzeczy temu, kto będzie prowadził bramę: komendy, próg i cztery oczekiwane wyniki. Właśnie to przekazanie jest prawdziwym wynikiem, bo projekt stanu, który żyje tylko w dokumencie polityki, zsuwa się za pierwszym razem, gdy narzędzie punktu końcowego zmieni swoje pole raportowania.

Powiązane artykuły