While I keep all of my posts in Polish as they are unique in that way, I couldn’t find any posts about BPHS1 repairs in the Web, so I’d love to share my story, as these are quite decent headphones. Audio-Technica are a production-grade headset, which is very popular in casting on a professional level. I’ll try to keep things short, providing as much images as I can.
The order
The backstory with my case is that I bought these headphones with a broken mic for an extremely cheap price (208,67 PLN). I got them for 308,14 PLN, but the seller wasn’t aware of the state of a mic, also windscreen was missing. Turns out you can buy these microphones if you contact Audio-Technica directly (I’ve contacted their support for EU which is served in UK), because parts aren’t available on their part website. They will send you a personalised link, which will add the part you need. Product codes you need are:
386500470 – Audio-Technica BPHS1 Mic Unit – 4,33 EUR net
385403650 – Audio-Technica BPHS1 Windscreen 1,13 EUR net
I’ve ended up paying 10,70 EUR with a shipment to Poland, which I find crazy cheap.
The fix
You start by unscrewing this screw. If you are handy with stuff like this (unlike me), it will be the only screw you will have to touch.
Bend this piece of metal, so you can take off the mic casing; it’s from both sides.
When you take off the case, it should look like this:
Colours on the other side are signed as these:
That’s how pins are located on the microphone side:
Originally there was a piece of paper isolating GND from MIC+ and MIC-, but it’s very brittle; I highly suggest putting electrical tape inbetween:
That should be enough in order to put it back and make it work. Don’t forget to bend back the pieces of metal holding casing on the microphone.
EAP-TLS jest najbezpieczniejszą metodą uwierzytelniania w sieciach komputerowych i niedawno miałem okazję takie rozwiązanie wdrożyć. Metoda ta jest oparta na certyfikatach i zakłada dwustronną weryfikację certyfikatów, czyli klient sprawdza certyfikat serwera RADIUS oraz serwer RADIUS sprawdza certyfikat klienta (wygenerowanego dla komputera lub użytkownika). Ta metoda nie wymaga żadnych haseł, więc jest najwygodniejszą metodą i najbezpieczniejszą (gdzie np. PEAP-MSCHAPv2 wykorzystuje szyfrowanie MD4 (złamane w 1995), czy EAP-TTLS/PAP nie szyfruje poświadczeń w ogóle). Minusem EAP-TLS jest wymóg posiadania urzędu certyfikacji i wdrożenia certyfikatów na serwery RADIUS oraz wszystkie urządzenia końcowe, które mają podpinać się do sieci Wi-Fi. To nie jest jednak tak trudne, jak mogłoby się wydawać. Ponadto, po wdrożeniu certyfikatów można je użyć w innym celu, na przykład do uwierzytelnienia w sieci przewodowej czy w ramach VPN (np. SSTP czy IKEv2). Róznice we wdrożeniu 802.1x dla sieci przewodowej są niewielkie i postaram się o nich wspomnieć w trakcie.
Poniżej postaram się opisać kroki potrzebne do wdrożenia certyfikatów dla użytkowników i komputerów. W skrócie należy:
wdrożyć urząd certyfikacji, najlepiej na osobnej maszynie (tak, by to była jedyna rola serwera, najlepiej dwustopniowy, choć w małych firmach wystarczy jeden stopień) – ta część nie będzie opisywana w ramach tego poradnika
stworzyć szablony dla komputerów/użytkowników lub użyć istniejących oraz dać możliwość automatycznego żądania certyfikatów (auto-enrollment)
stworzyć politykę GPO, która definiuje konfigurację, dzięki której komputery będą automatycznie ządać certyfikatów o konkretnej nazwie szablonu z urzedu certyfikacji
zainstalować usługę serwera zasad sieciowych (Network Policy Server), czyli po prostu serwer RADIUS i skonfigurować odpowiednio reguły dla zapytań – opiszę w ramach poradnika samą konfigurację, bo instalacja roli sprowadza się do wybrania jej w Menedżerze serwera i klikanie dalej do momentu, aż się zainstaluje rolę
po stronie kontrolera access pointów Extreme dodać certyfikat głównego urzędu certyfikacji (i podrzędnych, jeśli są wdrożone w firmie)
skonfigurować w kontrolerze profil AAA wskazujący na serwer(y) RADIUS do zapytań
stworzyć profil Wi-Fi korzystający z wyżej wspomnianego profilu AAA
przypisać profile Wi-Fi
(opcjonalne) dodać ustawienie do GPO, które dodaje profil Wi-Fi dla wszystkich komputerów klienckich
Szablony certyfikatów dla komputerów/użytkowników
Microsoft dostarcza wytyczne, które wskazują nam jakie parametry certyfikaty dla komputerów i użytkowników powinny zawierać, by móc je wykorzystywać w EAP-TLS. Na początku wchodzimy do Certification Authority:
Następnie po rozwinięciu sekcji urzędu przechodzimy do Certificate Templates i wybieramy Manage:
Skopiuj szablon Computer i stwórz własny, np z nazwą RADIUS-Computer dla szablonu komputerów, w przypadku użytkowników skopiuj szablon User i nazwij go np. RADIUS-User. Następnie edytuj szablon klikając na niego prawym i na Properties:
Następnie zmieniamy nazwę do wyświetlania do szablonu oraz jego ogólną nazwę. Ja dodatkowo zwiększyłem czas ważności certyfikatu do 5 lat:
Poniżej wymagane parametry do certyfikatu komputera do zmiany:
I parametry dla certyfikatu użytkownika:
Po zapisaniu ustawień należy wyjść i w Certificate Templates kliknąć prawym i wybrać New -> Ceritifcate Template to Issue:
Następnie należy wybrać utworzony przez nasz szablon i wybrać OK.
Polityka GPO do auto-enrollmentu certyfikatów
Poniżej można zobaczyć ustawienia, obiektu GPO, które należy ustawić dla komputera…
…i dla użytkownika.
Konfiguracja serwera zasad sieciowych (NPS, który służy nam jako RADIUS)
Usługę można zainstalować one-linerem w PowerShellu z uprawnieniami administratora:
W zależności od tego, w jaki sposób będą wykonywane zapytania do RADIUSa należy dodać jednego lub więcej klientów. W przypadku, gdy switche czy access pointy mają kontroler, który umożliwia pełnienie rolę proxy dla zapytań, wystarczy dodać jednego klienta o adresie kontrolera. Gdy takiej możliwości nie ma, należy dodać klienty dla każdego access pointa/switcha. Na początek polecam sobie ustawić jakieś banalnie proste hasło we współdzielonym sekrecie, jak np. 1234567890. Nie ma znaków specjalnych i na początek nie ma co się obawiać o to. Jak wszystko będzie działać, wtedy można zmienić na coś silnego. Teraz nie chcemy się obawiać, że po którejś stronie zrobiliśmy babola.
Następnie w Connection Request Policies zrobiłem regułę z następującymi ustawieniami:
W zakładce Settings zostawiłem ustawienia domyślne. Następnie należy dodać politykę w Network Policies. Jedna jest dla komputerów, druga dla użytkowników.
Poniżej warunki dla polityki dla certyfikatów komputerów:
Poniżej warunki dla polityki dla certyfikatów użytkowników:
Jedyne, co zmieniamy w zakładce Constraints to Authentication methods. Należy wybrać tylko metodę: Microsoft: Smart Card or other certificate i edytować ustawienia tak, by wybrać certyfikat serwera z szablonu RADIUS-Computer. W moim przypadku NPS jest wdrożony na kontrolerze domeny, więc jest wybór i musi być właściwy.
W zakładce Settings zmiany są zależne od sprzętu, z którym pracujemy. Czasami, jeśli pakiety RADIUSa są za duże zmniejsza się MTU pakietów na 1344 (zależne od sprzętu), by rozwiązać problem. Można też ustawić w Vendor Specific parametry, które pozwalają kontrolerowi/access pointom/switchom na przykład wybrać VLAN, do którego mają być wrzuceni użytkownicy w ramach tej polityki. W naszym przypadku nie dodajemy tutaj nic.
Dobrą praktyką jest wdrożenie takich dwóch serwerów. W przypadku tego wdrożenia wdrożyłem NPS na dwóch kontrolerach domeny, dzięki czemu zawsze jeden jest dostępny w razie aktualizacji.
Dodanie certyfikatu CA do kontrolera Extreme WiNG
Całość zrobiłem przez SSH, dlatego, bo było najprościej.
Na początku stworzyłem plik tar z moim certyfikatem CA:
root@ubuntuapps:/var/www/static# tar -cvf serba-ca.tar serba-ca.crt
serba-ca.crt
Następnie wrzuciłem je na serwer WWW, bo to jest najprostsza opcja kopiowania plików do kontrolera.
vx9000-XXXXXX>en
vx9000-XXXXXX#file-sync load-file trustpoint serba-ca http://192.168.X.Y/serba-ca.tar
--------------------------------------------------------------------------------
CONTROLLER STATUS MESSAGE
--------------------------------------------------------------------------------
vx9000-XXXXXX Success Successfully initiated load file
--------------------------------------------------------------------------------
vx9000-XXXXXX#show file-sync load-file-status
Download of serba-ca trustpoint is in progress
vx9000-XXXXXX#show file-sync load-file-status
Download of serba-ca trustpoint is in progress
vx9000-XXXXXX#show file-sync load-file-status
Download of serba-ca trustpoint is in progress
vx9000-XXXXXX#show file-sync load-file-status
Download of serba-ca trustpoint is complete
vx9000-XXXXXX#config
Enter configuration commands, one per line. End with CNTL/Z.
vx9000-XXXXXX(config)#vx9000 AA-BB-CC-DD-EE-FF
vx9000-XXXXXX(config-device-AA-BB-CC-DD-EE-FF)#trustpoint https wing
vx9000-XXXXXX(config-device-AA-BB-CC-DD-EE-FF)#trustpoint radius-ca serba-ca
vx9000-XXXXXX(config-device-AA-BB-CC-DD-EE-FF)#commit
vx9000-XXXXXX(config-device-AA-BB-CC-DD-EE-FF)#end
Konfiguracja połączenia access pointów z RADIUS oraz konfiguracja profilu Wi-Fi na kontrolerze Extreme WiNG VX9000
Na początku należy stworzyć profil AAA, w którym wrzucimy nasze serwery RADIUS, więc wchodzimy w kontrolerze Extreme WiNG w Policies -> AAA i klikamy plusa, by stworzyć politykę:
Następnie w zakładce General dodajemy wpisy dla serwerów NPS. W tym przypadku dodaje drugi kontroler. Istotne jest to, by w polu secret hasło współdzielone zgadzało się z tym ustawionym w NPSie. W Request Proxy Mode wybieramy Through Wireless Controller, dzięki czemu zapytania są wysyłane tylko z jednego adresu IP.
Następnie w zakładce RADIUS upewniamy się, że mamy takie ustawienia, jak powyżej – w szczególności Authentication Protocol. Server Pooling można ustawić na dwa sposoby: Fail Over, czyli zawsze w kolejności listy będą wykonywane zapytania do serwerów RADIUS, lub Load-Balance, gdzie zapytania będą równomiernie rozrzucane w systemie round robin na wszystkie serwery RADIUS na liście.
Tworzenie profilu Wi-Fi i przypisanie do access pointów
W Wireless klikamy +, wypełniamy nazwę profilu SSID, po czym klikamy ADD.
Z najistotniejszych rzeczy, w przypadku WPA2-Enterprise PMF – Protected Management Frames są opcjonalne, lecz w przypadku WPA3-Enterprise pole musi być ustawione na mandatory. Ponadto zawsze warto zaznaczyć opcję Fast BSS Transition, bo dzięki temu roaming pomiędzy access pointami jest płynniejszy. Ponadto warto zaznaczyć Multi Band Operation. Tutaj opis, co ta funkcja robi.
Następnie, w zakładce Security wybieramy Select Authentication EAP, w AAA policy wskazujemy nasz stworzony profil. W sekcji Encryption wybieramy CCMP lub GCMP256 (wymagane do WPA3-Enterprise 192-bit, lecz wtedy trzeba wyłączyć Fast BSS Transition) i podajemy pre-shared key, który sobie generujemy. W EAP types zaznaczamy opcję Allow i wybieramy w Select EAP-Type TLS jako jedyna akceptowalna opcja.
W Client Load Balancing nie trzeba niczego zmieniać, ale chciałem pokazać jakie są dostępne ustawienia. Po tym można zapisać profil.
W WiNG można przypisywać profile Wi-Fi na podstawie profili lub na podstawie urządzeń. Po kliknięciu w urządzenie otwieramy ustawienia urządzenia, lecz przed tym widzimy też jaki profil dane urządzenie wykorzystuje. Ustawienia profilu i urządzenia wyglądają mniej więcej tak samo i dają dostęp do prawie wszystkich tych samych ustawień (z wyjątkiem unikalnych dla urządzenia, tych nie będzie w profilach). My dodamy SSID do profilu.
Załóżmy, że chcemy teraz ustawić profil dla modelu AP305C-1-WR. Wtedy musimy edytować profil default-ap305c-1. Wybieramy go.
Wybieramy Interface -> Radio, następnie klikamy na radio1.
W ustawieniach WLAN klikamy w sekcji WLAN/BSS Mappings przycisk Add i wybieramy nasz SSID, po czym zapisujemy.
Ten proces powtarzamy dla drugiego radia. Następnie ustawiamy te same ustawienia w innych profilach APków, które mamy do dyspozycji.
Na koniec należy odświeżyć ustawienia access pointów. Można to wyklikać, klikając Refresh przy każdym urządzeniu.
Drugą opcją jest połączenie się przez SSH do kontrolera Wi-Fi i wykonanie odpowiednich poleceń.
Cannot handle term 'xterm-256color'. Setting term to dumb.
vx9000-XXXXXX>en
vx9000-XXXXXX#reload on sitename exclude-controllers
//lub jeśli chcemy odświeżyć tylko wybrane apki, które np mają w nazwie "ap305c"
vx9000-XXXXXX#reload on sitename containing ap305c
Testy i tworzenie polityki GPO do przypisania profilu Wi-Fi komputerom
Najlepszym rozwiązaniem jest skonfigurowanie ręcznie profilu Wi-Fi na laptopie, który ma się do tej sieci łączyć, a potem wyeksportować profil ustawień do formatu XML i zaciągnąć go do ustawień Wi-Fi w GPO. W moim przypadku to było konieczne, ponieważ chciałem skorzystać z sieci WPA3-Enterprise (bez trybu 192-bit) i takiej opcji nie ma dostępnej do wyboru w ustawieniach przez Group Policy Management Editor.
Zaczynamy od dodania profilu ręcznie na laptopie:
Klikamy strzałkę, by wejść do szczegółów połączenia:
Następnie otwieramy ustawienia zaawansowane:
W nich ustawiamy następująco:
W Advanced settings wybieramy tryb uwierzytelniania komputera lub użytkownika, jak wolimy:
Zapisujemy i przechodzimy do ustawień Smart Card or other Certificate i wybieramy tutaj w sekcji Trusted Root Certification Authorities nasz urząd certyfikacji. Dzięki temu użytkownik nie będzie musiał zatwierdzać, że ufa temu urzędowi:
Przechodzimy do zaawansowanych ustawień certyfikatu klikając przycisk Advanced i wybieramy ponownie nasz urząd certyfikacji. To spowoduje, że komputer będzie próbował użyć certyfikatu komputera/użytkownika tylko takiego, który jest podpisany przez ten urząd:
Po tym wszystkim należy wyeksportować profil do XML:
PS C:\Users\radoslaw.serba\Desktop> netsh wlan export profile name="example_internal" folder="C:\"
Interface profile "example_internal" is saved in file "C:\WiFi-example_internal.xml" successfully.
Na końcu należy dodać następującą politykę GPO z ustawieniem w Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Wireless Network (IEEE 802.11) Policies. Dla sieci przewodowej to będzie Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Wired Network (IEEE 802.3) Policies. Klikamy prawym w puste pole i wybieramy Create A New Wireless Network Policy for Windows Vista and Later Releases:
W zakładce General w Policy Name nazywamy jakoś politykę i w sekcji z profilami klikamy Import… by zaimportować nasz plik XML:
W zakładce Network Permissions ustawienia pozostawiłem bez zmian:
Po przypisaniu obiektu GPO do OU tak, by klient go pobrał, w ustawieniach pojawi się profil tylko do odczytu:
Troubleshooting
W trakcie wdrażania napotkałem się na sporo problemów. Miejsca, które warto sprawdzać w trakcie wdrożenia to:
dziennik zdarzeń klienta: Applications and Services Logs -> Microsoft -> Windows -> WLAN-AutoConfig, dla połączeń przewodowych dziennik to Wired-AutoConfig
dziennik zdarzeń serwera NPS (jest gotowy widok stworzony automatycznie po wdrożeniu NPSa): Custom Views -> Network Policy and Access Services
Wireshark na serwerze NPS
Logi APków/kontrolera APków
Logi NPS (poniżej miejsce, gdzie można ustawić lokalizacje pliku)
W przypadku dziennika zdarzeń po stronie klienta najpopularniejszy błąd to ten:
Błędy EAP, które tu mogą się pojawić można znaleźć tutaj.
Computer-Name – nazwa komputera, który przetwarza zapytanie do NPS
EAP-Friendly-Name – tu zobaczymy metodę autoryzacji, w naszym przypadku jest to EAP-TLS
Fully-Qualified-User-Name – w tym przypadku jest no użytkownik, którego używamy do logowania, może być to też komputer (w pełnej formie)
Client-IP-Address – jest to to samo, co znajdziemy w pakiecie Access-Request jako NAS-IP-Address, czyli adres access pointa/kontrolera APków, który wysyła zapytanie do NPSa (na podstawie tego wiemy, że do nas wysyła zapytanie to, a nie na przykład brama VPN czy np. switch)
Client-Friendly-Name – nazwa, którą nazwaliśmy ten adres w NPS -> Radius Clients and Servers -> RADIUS Clients
SAM-Account-Name – w tym przypadku jest no użytkownik, którego używamy do logowania, może być to też komputer (w skróconej formie)
NP-Policy-Name – nazwa zasady, do której wpadło zapytanie
Reason-Code – odpowiedź od serwera RADIUS, 0 oznacza akceptację połączenia, inne wartości można sprawdzić na liście poniżej
Logi z kontrolera Wi-Fi
W trybie uprzywilejowanym możemy zobaczyć, co się dzieje na urządzeniach na żywo w bardzo granularny sposób, to znaczy możemy wybrać domenę w kontrolerze, konkretny AP czy eventy związane z konkretnym adresem MAC
//dzięki temu śledzimy dosłownie wszystko, co się dzieje związanego z logowaniem się po Wi-Fi z użyciem EAP
vx9000-XXXXXX#remote-debug wireless rf-domain mysite clients all max-events 999 duration 999 events eap radius wpa-wpa2 management
//to samo, lecz śledzimy jeden adres MAC
vx9000-XXXXXX#remote-debug wireless rf-domain mysite clients AA-BB-CC-DD-EE-FF max-events 999 duration 999 events eap radius wpa-wpa2 management
Przykładowe logi:
Printing upto 999 messages from each remote system for upto 999 seconds. Use Ctrl-C to abort
[ap305c-1-XXXXXX] %%%%>20:32:49.656: eap:no eap response from wireless client AA-BB-CC-DD-EE-FF after max-retries (eap.c:420)
[ap305c-1-XXXXXX] %%%%>20:32:49.657: radius:alarm num_eap_c_tout ++ 4 (eap.c:430)
[ap305c-1-XXXXXX] 20:32:49.657: mgmt:tx deauthentication [reason: eap handshake timeout (code:23)] to AA-BB-CC-DD-EE-FF (mgmt.c:2060)
[ap305c-1-XXXXXX] 20:32:52.182: mgmt:rx auth-req from AA-BB-CC-DD-EE-FF on radio 1 (mgmt.c:4576)
[ap305c-1-XXXXXX] 20:32:52.182: mgmt:tx auth-rsp to AA-BB-CC-DD-EE-FF on radio 1. status: success (mgmt.c:1427)
[ap305c-1-XXXXXX] 20:32:52.185: mgmt:rx association-req from AA-BB-CC-DD-EE-FF on radio ap305c-1-XXXXXX:R2 signal-strength is -90dBm (mgmt.c:4550)
[ap305c-1-XXXXXX] 20:32:52.185: mgmt:Client AA-BB-CC-DD-EE-FF negotiated FT-EAP with PMF on wlan (example_internal) (mgmt.c:4066)
[ap305c-1-XXXXXX] 20:32:52.186: mgmt:tx association-rsp success to FC-B0-DE-57-01-FB on wlan (example_internal) (ssid:example_internal) with ftie 0 (mgmt.c:4157)
[ap305c-1-XXXXXX] 20:32:52.187: eap:sending eap-code-request code 1, type 1 to AA-BB-CC-DD-EE-FF (eap.c:964)
[ap305c-1-XXXXXX] 20:32:52.187: eap:sending eap-id-req to AA-BB-CC-DD-EE-FF (eap.c:993)
[ap305c-1-XXXXXX] 20:32:52.210: eap:rx eap-start from AA-BB-CC-DD-EE-FF (eap.c:655)
[ap305c-1-XXXXXX] 20:32:52.210: eap:sending eap-code-request code 1, type 1 to AA-BB-CC-DD-EE-FF (eap.c:964)
[ap305c-1-XXXXXX] 20:32:52.210: eap:sending eap-id-req to AA-BB-CC-DD-EE-FF (eap.c:993)
[ap305c-1-XXXXXX] 20:32:52.214: eap:rx eap id-response from AA-BB-CC-DD-EE-FF (eap.c:697)
[ap305c-1-XXXXXX] 20:32:52.214: radius:aaa-policy sso user:host/komputer.serba.local mac:AA-BB-CC-DD-EE-FF server_is_candidate: 1 1 0 0 0 0 0 0 0 0 0 0
(radius.c:4894)
[ap305c-1-XXXXXX] 20:32:52.215: radius:access-req sent to wireless controller to be proxied to dc1.serba.local:1812. (attempt 1) for AA-BB-CC-DD-EE-FF (user:host/komputer.serba.local) (radius.c:3078)
[ap305c-1-XXXXXX] 20:32:52.215: eap:rx eap id-response from AA-BB-CC-DD-EE-FF (eap.c:697)
[ap305c-1-XXXXXX] 20:32:52.215: eap:rx eap-id-response from AA-BB-CC-DD-EE-FF in state 162!=EAP_ID_SENT. Ignoring (eap.c:700)
[ap305c-1-6BCE40] 20:32:52.220: radius:RAD_MSG_AUTHENTICATOR (radius.c:1192)
Wireshark
Wireshark na NPSie to świetne rozwiązanie do wykrywania potencjalnych problemów, ze względu na to, że możemy podejrzeć pakiety RADIUSa i zobaczyć jakie parametry są podawane w zapytaniach oraz czy serwer na nie odpowiada i jeśli tak to jak. Brak odpowiedzi serwera RADIUS na zapytanie od kontrolera oznacza, że klucz współdzielony się nie zgadza po obu stronach i najlepiej go ustawić jeszcze raz na obu.
W tym zapytaniu widzimy:
User-Name to naż użytkownik, lecz jeśli zaczyna się na host/ to jest to konto komputera
Calling-Station-Id – adres MAC karty sieciowej laptopa
Called-Station-Id – adres MAC karty sieciowej APka + SSID, do którego się łączy laptop
NAS-Port-Type – typ połączenia, w naszym przypadku bezprewodówka
Framed-MTU – wielkość pakietu
NAS-Identifier – w tym polu jest nazwa hosta naszego access pointa, do którego się łączy klient
NAS-Port-Id – nazwa interfejsu, do którego łączy się klient w access poincie
Connect-Info – szczegóły jakości połączenia, którą może używać klient
NAS-IP-Address – adres IP, z którego przychodzi zapytanie (w naszym przypadku kontroler Wi-Fi)
Co prawda, nie mam tutaj dobrego przykładu wykrycia problemu, aczkolwiek trzeba w pierwszej kolejności wypatrywać, czy pojawiają się pakiety Access-Reject, bo to oznacza, że NPS odrzucił zapytanie od klienta.
Tymczasowe wyłączenie weryfikacji CRL
W trakcie mojego wdrożenia miałem problem z tym, że serwery nie były w stanie się połączyć z adresem, na którym była lista odwołań certyfikatów, efektywnie blokując wszystkim możliwość połączenia się z siecią.
Tutaj można znaleźć jakie wpisy należy dodać do rejestru, by wyłączyć weryfikację. W moim przypadku pomogło to zweryfikować problem, a tutaj znajdziemy więcej informacji, jak NPS sprawdza te listy.
Kody błędów NPSa
Kopiuję je z innej stronki, ponieważ nie byłem w stanie znaleźć żadnej stronki Microsoftu, która ma wszystkie wylistowane. Blogi mają to do siebie, że jednego dnia istnieją, potem znikają, więc wolę je zachować.
00: IAS_SUCCESS
01: IAS_INTERNAL_ERROR
02: IAS_ACCESS_DENIED
03: IAS_MALFORMED_REQUEST
04: IAS_GLOBAL_CATALOG_UNAVAILABLE
05: IAS_DOMAIN_UNAVAILABLE
06: IAS_SERVER_UNAVAILABLE
07: IAS_NO_SUCH_DOMAIN
08: IAS_NO_SUCH_USER
09: The request was discarded by a third-party extension DLL file.
10: A third-party extension DLL has failed and cannot perform its function.
16: IAS_AUTH_FAILURE
17: IAS_CHANGE_PASSWORD_FAILURE
18: IAS_UNSUPPORTED_AUTH_TYPE
19: No reversibly encrypted password is stored for the user account
20: Lan Manager Authentication is not enabled.
21: An IAS extension dynamic link library (DLL) that is installed on the NPS server rejected the connection request.
22: The client could not be authenticated because the EAP type cannot be processed by the server.
23: Unexpected error. Possible error in server or client configuration.
32: IAS_LOCAL_USERS_ONLY
33: IAS_PASSWORD_MUST_CHANGE
34: IAS_ACCOUNT_DISABLED
35: IAS_ACCOUNT_EXPIRED
36: IAS_ACCOUNT_LOCKED_OUT
37: IAS_INVALID_LOGON_HOURS
38: IAS_ACCOUNT_RESTRICTION
48: IAS_NO_POLICY_MATCH
49: Did not match connection request policy
64: IAS_DIALIN_LOCKED_OUT
65: IAS_DIALIN_DISABLED
66: IAS_INVALID_AUTH_TYPE
67: IAS_INVALID_CALLING_STATION
68: IAS_INVALID_DIALIN_HOURS
69: IAS_INVALID_CALLED_STATION
70: IAS_INVALID_PORT_TYPE
71: IAS_INVALID_RESTRICTION
72: The user cannot change his or her password because the change password option is not enabled for the matching remote access policy
73: The Enhanced Key Usage (EKU) extensions, section of the user or computer certificate are not valid or are missing.
80: IAS_NO_RECORD
96: IAS_SESSION_TIMEOUT
97: IAS_UNEXPECTED_REQUEST
112: The remote RADIUS server did not process the authentication request.
113: The local NPS proxy attempted to forward a connection request to a member of a remote RADIUS server group that does not exist.
115: The local NPS proxy did not forward a RADIUS message because it is not an accounting request or a connection request.
116: The local NPS proxy server cannot forward the connection request to the remote RADIUS server because either the proxy cannot open a Windows socket over which to send the connection request, or the proxy server attempted to send the connection request but received Windows sockets errors that prevented successful completion of the send operation.
117: The remote RADIUS (Remote Authentication Dial-In User Service) server did not respond.
118: The local NPS proxy server received a RADIUS message that is malformed from a remote RADIUS server, and the message is unreadable.
256: The certificate provided by the user or computer as proof of their identity is a revoked certificate. Because of this, the user or computer was not authenticated, and NPS rejected the connection request.
257: Due to a missing dynamic link library (DLL) or exported function, NPS cannot access the certificate revocation list to verify whether the user or client computer certificate is valid or is revoked.
258: The revocation function was unable to check revocation for the certificate.
259: The certification authority that manages the certificate revocation list is not available. NPS cannot verify whether the certificate is valid or is revoked. Because of this, authentication failed.
260: The message supplied for verification has been altered.
261: NPS cannot contact Active Directory Domain Services (AD DS) or the local user accounts database to perform authentication and authorization. The connection request is denied for this reason.
262: The supplied message is incomplete. The signature was not verified.
263: NPS did not receive complete credentials from the user or computer. The connection request is denied for this reason.
264: The Security Support Provider Interface (SSPI) called by EAP reports that the system clocks on the NPS server and the access client are not synchronized.
265: The certificate that the user or client computer provided to NPS as proof of identity chains to an enterprise root certification authority that is not trusted by the NPS server.
266: The message received was unexpected or badly formatted.
267: The certificate provided by the connecting user or computer is not valid because it is not configured with the Client Authentication purpose in Application Policies or Enhanced Key Usage (EKU) extensions. NPS rejected the connection request for this reason.
268: The certificate provided by the connecting user or computer is expired. NPS rejected the connection request for this reason.
269: The Security Support Provider Interface (SSPI) called by EAP reports that the NPS server and the access client cannot communicate because they do not possess a common algorithm.
270: Based on the matching NPS network policy, the user is required to log on with a smart card, but they have attempted to log on by using other credentials. NPS rejected the connection request for this reason.
271: The connection request was not processed because the NPS server was in the process of shutting down or restarting when it received the request.
272: The certificate that the user or client computer provided to NPS as proof of identity maps to multiple user or computer accounts rather than one account. NPS rejected the connection request for this reason.
273: Authentication failed. NPS called Windows Trust Verification Services, and the trust provider is not recognized on this computer. A trust provider is a software module that implements the algorithm for application-specific policies regarding trust.
274: Authentication failed. NPS called Windows Trust Verification Services, and the trust provider does not support the specified action. Each trust provider provides its own unique set of action identifiers. For information about the action identifiers supported by a trust provider, see the documentation for that trust provider.
275: Authentication failed. NPS called Windows Trust Verification Services, and the trust provider does not support the specified form. A trust provider is a software module that implements the algorithm for application-specific policies regarding trust. Trust providers support subject forms that describe where the trust information is located and what trust actions to take regarding the subject.
276: Authentication failed. NPS called Windows Trust Verification Services, but the binary file that calls EAP cannot be verified and is not trusted.
277: Authentication failed. NPS called Windows Trust Verification Services, but the binary file that calls EAP is not signed, or the signer certificate cannot be found.
278: Authentication failed. The certificate that was provided by the connecting user or computer is expired.
279: Authentication failed. The certificate is not valid because the validity periods of certificates in the chain do not match. For example, the following End Certificate and Issuer Certificate validity periods do not match: End Certificate validity period: 2007-2010; Issuer Certificate validity period: 2006-2008.
280: Authentication failed. The certificate is not valid and was not issued by a valid certification authority (CA).
281: Authentication failed. The path length constraint in the certification chain has been exceeded. This constraint restricts the maximum number of CA certificates that can follow this certificate in the certificate chain.
282: Authentication failed. The certificate contains a critical extension that is unrecognized by NPS.
283: Authentication failed. The certificate does not contain the Client Authentication purpose in Application Policies extensions, and cannot be used for authentication.
284: Authentication failed. The certificate is not valid because the certificate issuer and the parent of the certificate in the certificate chain are required to match but do not match.
285: Authentication failed. NPS cannot locate the certificate, or the certificate is incorrectly formed and is missing important information.
286: Authentication failed. The certificate provided by the connecting user or computer is issued by a certification authority (CA) that is not trusted by the NPS server.
287: Authentication failed. The certificate provided by the connecting user or computer does not chain to an enterprise root CA that NPS trusts.
288: Authentication failed due to an unspecified trust failure.
289: Authentication failed. The certificate provided by the connecting user or computer is revoked and is not valid.
290: Authentication failed. A test or trial certificate is in use, however the test root CA is not trusted, according to local or domain policy settings.
291: Authentication failed because NPS cannot locate and access the certificate revocation list to verify whether the certificate has or has not been revoked. This issue can occur if the revocation server is not available or if the certificate revocation list cannot be located in the revocation server database.
292: Authentication failed. The value of the User-Name attribute in the connection request does not match the value of the common name (CN) property in the certificate.
293: Authentication failed. The certificate provided by the connecting user or computer is not valid because it is not configured with the Client Authentication purpose in Application Policies or Enhanced Key Usage (EKU) extensions. NPS rejected the connection request for this reason.
294: Authentication failed because the certificate was explicitly marked as untrusted by the Administrator. Certificates are designated as untrusted when they are imported into the Untrusted Certificates folder in the certificate store for the Current User or Local Computer in the Certificates Microsoft Management Console (MMC) snap-in.
295: Authentication failed. The certificate provided by the connecting user or computer is issued by a CA that is not trusted by the NPS server.
296: Authentication failed. The certificate provided by the connecting user or computer is not valid because it is not configured with the Client Authentication purpose in Application Policies or Enhanced Key Usage (EKU) extensions. NPS rejected the connection request for this reason.
297: Authentication failed. The certificate provided by the connecting user or computer is not valid because it does not have a valid name.
298: Authentication failed. Either the certificate does not contain a valid user principal name (UPN) or the value of the User-Name attribute in the connection request does not match the certificate.
299: Authentication failed. The sequence of information provided by internal components or protocols during message verification is incorrect.
300: Authentication failed. The certificate is malformed and Extensible Authentication Protocl (EAP) cannot locate credential information in the certificate.
301: NPS terminated the authentication process. NPS received a cryptobinding type length value (TLV) from the access client that is not valid. This issue occurs when an attempt to breach your network security has occurred and a man-in-the-middle (MITM) attack is in progress. During MITM attacks on your network, attackers use unauthorized computers to intercept traffic between your legitimate hosts while posing as one of the legitimate hosts. The attacker’s computer attempts to gain data from your other network resources. This enables the attacker to use the unauthorized computer to intercept, decrypt, and access all network traffic that would otherwise go to one of your legitimate network resources.
302: NPS terminated the authentication process. NPS did not receive a required cryptobinding type length value (TLV) from the access client during the authentication process.
Szybka ściągawka, szczególnie przydatne w sytuacji, w której masz wystawiony na świat CRL check point, by móc online sprawdzać certyfikaty (na przykład, w przypadku używania certyfikatów SSL wystawionych przez wewnętrzny urząd certyfikacji):
certutil -f -URL http://example.com/CA-Name.crl
Otworzy się w Windowsie okienko, w którym możemy sprawdzić status ważności list CRL, klikamy Retrieve. Wszystkie wpisy muszą mieć status OK. W przypadku, gdy jest niedostępny choć jeden wpis lub jest nieważny (status Expired), certyfikat nie zostanie zweryfikowany i otrzymamy następujący błąd (np. w przypadku próby połączenia z serwerem VPN):
Da się to ominąć, choć nie polecam. W przykładzie powyżej używałem połączenia SSTP i dla niego jest parametr DWORD NoCertRevocationCheck w rejestrze w:
Przykład powyżej przedstawia sposób przechowywania znacznej części administratorów w polskich firmach prywatnych i państwowych. Oczywiście nie widać momentu jak wpisuję hasło do arkusza, ale darujmy sobie to. W sumie nie tylko mowa o administratorach, bo spotkałem się z przełożonymi korzystającymi z takich praktyk. Mój komentarz jest następujący: TO JEST DRAMAT. Postaram się wyjaśnić dlaczego łapię się za głowę jak to widzę i przy okazji postaram się przedstawić bezpieczny sposób na hasła w sieci i nie tylko. Jest to mechanizm, który sam sobie wypracowałem i posługuję się nim od ponad roku.
Jakie są najlepsze praktyki w zabezpieczaniu kont w sieci?
W skrócie:
hasła do różnych serwisów powinny być różne,
hasła powinny składać się z cyfr, znaków specjalnych, dużych i małych liter oraz powinny być dłuższe niż 12 znaków oraz hasło nie powinno składać się ze spójnych elementów (np. hasła z generatorów haseł), powinno zawierać pewien element losowości,
hasła powinny być przechowywane w pęku kluczy stworzonym przez menedżerze haseł,
hasła te powinny być zmieniane co jakiś czas (celowo nie określam przedziału czasowego),
pęk kluczy powinien być zabezpieczony hasłem lub kluczem publicznym lub kluczem sprzętowym (zaleca się wykorzystywanie co najmniej 2 form zabezpieczenia),
pęk kluczy powinien być zabezpieczony przed utratą w postaci kopii zapasowej (na przykład poprzez synchronizację na chmurze),
dwustopniowe uwierzytelnienie powinno być skonfigurowana w miejscach, gdzie to jest możliwe oraz powinna być realizowana przez mechanizm, który umożliwia tworzenie kopii zapasowej.
To może być trochę przerażające, ale to są naprawdę najlepsze opcje na bezpieczeństwo w sieci. Zakładam, że nie każdego stać i nie każdy ma ochotę kupować klucze sprzętowe by być bezpieczniejszym. Nie ma potrzeby do czegoś takiego się zmuszać, wszystko powinno się w tej kwestii robić z rozsądkiem.
Zanim wejdę w temat, krótkie wyjaśnienie:
Uwierzytelnienie (authentication) to proces, w którym udowadniamy, że my to my, możemy to zrobić poprzez „coś, co wiemy”, czyli na przykład znamy jakieś hasło, „coś, co mamy”, czyli na przykład token z aplikacji do logowania lub klucz sprzętowy lub poprzez „coś, czym jesteśmy”, czyli na przykład korzystając biometryki (używając odcisków palców na czytniku, korzystając z Intel RealSense 3D skanując nasz kształt twarzy przez specjalną kamerę, skanując tęczówki oka).
Autoryzacja (authorization) to proces, w którym system sprawdza, czy mamy prawo dostępu. Na przykład po zalogowaniu się do systemu ten wie, że my to my, lecz nie wie czy mamy dostęp do usług. Na przykład, jeśli nie opłacę subskrypcji za Netflixa i zaloguję się na swoje konto, ale nie będę mógł oglądać żadnych filmów. To przykład nieudanej autoryzacji.
Niektórzy używają pojęcia autentykacja – to jest kalka z angielskiego i dotyczy ona uwierzytelnienia.
„hasła do różnych serwisów powinny być różne”
Załóżmy, że używamy 1 hasła: Zaq12wsx!cokolwiek Jest to hasło, które spełnia prawie wszystkie wymagania, które przedstawiłem (z wyjątkiem losowości, bo jest ona trochę kiepska). Te hasło używamy na wielu różnych stronach. Facebook, Google, Instagram, cokolwiek innego. Nagle jeden z tych serwisów zostaje zaatakowany przez grupę hakerów, która wykrada bazę danych. Potem okazuje się, że strona nie przechowywała haseł w bezpieczny sposób (czyli na przykład przechowywała hasła w czystym tekście albo korzystała z kiepskiego mechanizmu haszującego). W ten sposób w większości wypadków ktoś ma w bazie nasz adres email i hasło – czyli najpopularniejszą formę logowania. Załóżmy, że z tej listy to był Instagram – w takiej sytuacji mając te same loginy i hasła atakujący może się zalogować na Facebooka, konto Google i cokolwiek innego tam, gdzie ustawiliśmy te same hasła. To jest małe piwo. Duże piwo zaczyna się wtedy jeśli używaliśmy tego samego hasła na kontach firmowych i ktoś zorientuje się jaki adres mailowy posiadamy w pracy lub nazwę użytkownika. Wtedy się mogą zacząć prawdziwe kłopoty.
Rozwiązanie? Inne hasła. Ale z drugiej strony spójrzmy prawdzie w oczy – ile jesteśmy w stanie haseł zapamiętać? 1? 5? 10? Będzie dobrze jak 5. Problem w tym, że większość z nas nie korzysta z 5 serwisów, tylko na przykład z 50. W moim przypadku zliczyłem ponad 150 kont w Internecie. Powodzenia w zapamiętaniu tych 150 haseł. To nie jest możliwe, dlatego trzeba sobie te hasła zabezpieczać. Dlatego hasła należy przechowywać w jednym, wspólnym miejscu.
mocne hasło i dwustopniowe uwierzytelnianie
Dzięki temu nasze hasło jest trudniej odgadnąć. Najprościej jest używać menedżera haseł i kopiować wygenerowane hasła – moje hasła są w większości 32-znakowe i nie ma szans, bym pamiętał chociaż jedno. Jest kilka kont, do których potrzebuję szybkiego dostępu typu na przykład Koleje Śląskie jak bym chciał szybko przez telefon kupić bilet na pociąg, ale poza tym wszędzie te hasła są po prostu długie i je wszystkie kopiuje z bazy. Po 10 sekundach od skopiowania hasła z KeePassa te jest usuwane ze schowka w systemie. Hasło same w sobie powinno mieć ogólnie więcej niż 12 znaków, duże, małe litery, cyfry i znaki specjalne. Do testowania haseł można skorzystać ze strony howsecureismypassword.net, która pozwala nam wpisać hasło, a strona powie nam w ile przeciętny komputer powinien takie hasło złamać:
Przykład dobrego hasła:
Kmn6X;c?F4Mx'=^"
Te hasło jest całkowicie losowe. Co prawda, nie może być wykorzystane wszędzie, bo zawiera znaki, których nie możemy dodać np. w pliku konfiguracyjnym. Takie znaki to często: { } [ ] ( ) / \ ' " ` ~ , ; : . < >, ale na szczęście generatory haseł pozwalają nam wykluczyć takie znaki z generacji, dzięki czemu można otrzymać to:
Cr*f6y_8EV4ey!&r
Przykład trudnego, ale nie całkowicie losowego hasła:
23N2iePatrz5ieNaP6likany%
Ciężko, by takie hasło było związane z jakąś pracą, bo jest całkowicie losowe + znaki w haśle są czasami w losowych miejscach. To sprawia, że hasło jest trudniejsze do złamania, ale jednocześnie trudniej je zapamiętać.
Przykład słabego hasła:
NazwaNaszejFirmy2021!123
Hasło składa się z prostych słów, które łatwo zapamiętać, przez co sprawia, że łatwiej je zapamiętać. To dobre dla nas, lecz też ułatwia to sprawę atakującym. Trzeba na to uważać z jakich słów składają się hasła, bo jeśli kontekst hasła pasuje do tego gdzie ono jest używane – sprawia to, że łatwiej jest je odgadnąć.
Teraz pytanie: czy każdy powinien używać takiego trudnego hasła? To zależy gdzie takie hasło będziesz używać:
strony internetowe – całkowicie losowe,
bazy danych, aplikacje – całkowicie losowe,
menedżer haseł – trudne, ale nie musi być całkowicie losowe,
strony „niskiego ryzyka” – trudne, ale nie musi być całkowicie losowe.
Dlaczego tak? Pierwsze dwa zawsze mogą być kopiowane z menedżera haseł i nie trzeba tych haseł pamiętać. Tak samo jest z drugim. W przypadku menedżera haseł te hasło musimy pamiętać (jest wyjątek, opiszę go w dalszej części posta). Tutaj musimy sami zdecydować jak dobrą mamy pamięć lub papier, na którym zapisujemy tekst.
W przypadku stron „niskiego ryzyka” – mam na myśli strony, w których jeśli stracimy dostęp, nikt nam nie wyrządzi szkody. Dla mnie taką stroną jest strona Kolei Śląskich, bo w przypadku, gdy ktoś przejąłby moje konto to mógłby zobaczyć jak się nazywam i ewentualnie mógłby kupić mi bilet na pociąg 😂
Żarty żartami, ale definitywnie do niskiego ryzyka nie należą strony takie jak na przykład Facebook. Typowy argument, który ja słyszę to: ale przecież ja nie mam nic do ukrycia, tam i tak nic nie ma, przecież nie jestem żadnym przestępcą, to co mogłoby się stać. Cóż, mogłoby i dam przykład. Załóżmy, że ja jestem atakującym. Mógłbym zalogować się na Facebooka ofiary i napisać do 2 znajomych, z którymi ofiara ostatnio pisała, że wykopałem się kasy i potrzebuje 50 zł na tydzień. W dużej mierze raczej osoba odpisze, że nie ma problemu, bo większość ludzi ma uśpioną czujność i nie zadzwoni na komórkę, by sprawdzić czy to na pewno prawdziwa prośba. Czyli w ten sposób wyjąłem od ofiary 100 zł, bo koniec końców pewnie odda te pieniądze. A to tylko jedna osoba. Oczywiście to tylko początek rzeczy, jakie można robić podszywając się pod kogoś i chyba lepiej się o tym nie przekonywać jak to mogłoby się skończyć, gdy ktoś przegląda nasze wiadomości prywatne…
Hasło do menedżera haseł może być losowym i trudnym hasłem pod warunkiem, że będziemy w stanie je wprowadzić w wygodny sposób. W innym wypadku większość ludzi po prostu nie będzie korzystać z takiego rozwiązania. W takich sytuacjach szczególnie warto się wyposażyć w klucz sprzętowy, jakim jest np. YubiKey:
Dzięki temu poza podaniem hasła w KeePassie należy wybrać klucz sprzętowy przypisany do bazy:
Alternatywą dla kluczy sprzętowych jest klucz publiczny – generujemy taki za pomocą Pageanta, gdy na przykład używamy PuTTY na Windowsie – to zdecydowanie wystarczy. Używałem czegoś takiego w poprzedniej pracy. Dla cierpliwych zawsze można skorzystać ze wszystkich trzech opcji, ale moim zdaniem nie jest warto.
„hasła powinny być przechowywane w pęku kluczy stworzonym przez menedżerze haseł”
Niektórzy używają Excela ale to jest kiepskie rozwiązanie z tego względu, że nie każdy zabezpiecza go hasłem, poza tym nie każdy ma nowego Office, co sprawiałoby to, że Office szyfrowałby dokument aktualnymi bezpiecznie mechanizmami (bodajże Office 2007 i 2003 mają bardzo łatwe do złamania mechanizmy). Poza tym Excel nie jest przeznaczony do przechowywania haseł, do tego są pęki haseł w programach typu KeePassXC (to taki lepszy KeePass). KeePass jest przykładowym rozwiązaniem i nie jest wyłącznym menedżerem haseł, które rozwiązuje ten problem. Jest wiele innych, czasami opartych o chmurę rozwiązań, które też są bezpieczne.
KeePass poza samym przechowywaniem haseł pozwala na obsługę 2FA kont, łatwe generowanie haseł, pozwala zabezpieczyć bazę haseł dwu- i trzystopniowo (hasło, klucz publiczny, klucz sprzetowy), da się go zintegrować z przeglądarką, dzięki czemu wpisywanie haseł jest prostsze. Zresztą przedstawiłem już nawet przykład powyżej.
Oczywiście trzeba pamiętać, że KeePass i jego baza nie jest czymś nie do złamania. Fakt, zawartość jest szyfrowana przez AES 256-bitowy, ale to nie zmienia faktu, że takie hasło da się złamać. Ten sam program jest w stanie łamać hasła do arkuszy w Excelu i jest nim hashcat. To ogólnie narzędzie do łamania haseł w różnych algorytmach, i po prostu bazy KeePassa i arkusze Excela są jedynie drobnym elementem listy tego, co on obsługuje. Tutaj jest gotowy skrypt do łamania arkuszy Excela.
Hasła się łamie na dwa sposoby: słownikowo i siłowo. Słownik zakłada, że posiada się dużą bazę haseł (na przykład jedną wielką sklejkę haseł z wycieków różnych serwisów internetowych z przeciągu kilku lat 😉) lub serwerek z mocną kartą graficzną do obliczeń i jeśli hasło było krótkie lub łatwe – zostanie złamane dosyć szybko.
Pokażę jak to wygląda w praktyce zakładając, że definiuję metodę siłową, która natrafi na hasło, które jest w arkuszu:
R:\supra\Pulpit\hashcat-6.0.0>hashcat.exe -a 3 -w 3 -m 9600 hash.lst ^Z?l?l?d?dwsx!
hashcat (v6.0.0) starting...
* Device #1: CUDA SDK Toolkit installation NOT detected.
CUDA SDK Toolkit installation required for proper device support and utilization
Falling back to OpenCL Runtime
* Device #1: WARNING! Kernel exec timeout is not disabled.
This may cause "CL_OUT_OF_RESOURCES" or related errors.
To disable the timeout, see: https://hashcat.net/q/timeoutpatch
OpenCL API (OpenCL 1.2 CUDA 11.0.140) - Platform #1 [NVIDIA Corporation]
========================================================================
* Device #1: GeForce RTX 2070, 6912/8192 MB (2048 MB allocatable), 36MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Applicable optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
* Slow-Hash-SIMD-LOOP
Watchdog: Temperature abort trigger set to 90c
Host memory required for this attack: 696 MB
The wordlist or mask that you are using is too small.
This means that hashcat cannot use the full parallel power of your device(s).
Unless you supply more work, your cracking speed will drop.
For tips on supplying more work, see: https://hashcat.net/faq/morework
Approaching final keyspace - workload adjusted.
[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit =>
Session..........: hashcat
Status...........: Running
Hash.Name........: MS Office 2013
Hash.Target......: $office$*2013*100000*256*16*cb973f1be246fbd96939c90...da8883
Time.Started.....: Fri Jul 17 12:12:55 2020 (2 secs)
Time.Estimated...: Fri Jul 17 12:13:03 2020 (6 secs)
Guess.Mask.......: Z?l?l?d?dwsx! [9]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 10937 H/s (31.52ms) @ Accel:4 Loops:512 Thr:1024 Vec:1
Recovered........: 0/1 (0.00%) Digests
Progress.........: 0/67600 (0.00%)
Rejected.........: 0/0 (0.00%)
Restore.Point....: 0/67600 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:31744-32256
Candidates.#1....: Zar12wsx! -> Zqx84wsx!
Hardware.Mon.#1..: Temp: 71c Fan: 46% Util:100% Core:1935MHz Mem:7000MHz Bus:16
$office$*2013*100000*256*16*cb973f1be246fbd96939c909bce5905e*18fe55fc3f134776687f79551c68a3f6*b519e82fa04c357910f2022f6ddd8f2f2ba0ac81436c2b83d96ca7eb0eda8883:Zaq12wsx!
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MS Office 2013
Hash.Target......: $office$*2013*100000*256*16*cb973f1be246fbd96939c90...da8883
Time.Started.....: Fri Jul 17 12:12:55 2020 (6 secs)
Time.Estimated...: Fri Jul 17 12:13:01 2020 (0 secs)
Guess.Mask.......: Z?l?l?d?dwsx! [9]
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 11630 H/s (28.61ms) @ Accel:4 Loops:512 Thr:1024 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 67600/67600 (100.00%)
Rejected.........: 0/67600 (0.00%)
Restore.Point....: 0/67600 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: Zar12wsx! -> Zqx84wsx!
Hardware.Mon.#1..: Temp: 71c Fan: 54% Util:100% Core:1935MHz Mem:7000MHz Bus:16
Started: Fri Jul 17 12:12:52 2020
Stopped: Fri Jul 17 12:13:02 2020
/////////////////////////////////////////////////////////////////////////
Hashcat.potfile
$office$*2013*100000*256*16*cb973f1be246fbd96939c909bce5905e*18fe55fc3f134776687f79551c68a3f6*b519e82fa04c357910f2022f6ddd8f2f2ba0ac81436c2b83d96ca7eb0eda8883:Zaq12wsx!
/////////////////////////////////////////////////////////////////////////
W zaznaczonym miejscu widać hasło. Jak widać poniżej, taka metoda też jest dostępna dla KeePassa:
W przypadku posiadania dwustopniowego uwierzytelniania raczej ta opcja w hashcat to przycisk do papieru. Nie sądzę, by było możliwe łamanie dwóch ciągów znaków jednocześnie w wydajny sposób i w czasie, który pozwoli na łatwe złamanie siłą rzeczy dwóch haseł jednocześnie. Jeśli się mylę – dajcie znać.
„hasła te powinny być zmieniane co jakiś czas”
Tutaj nie ma za dużo do obgadywania. Hasła co jakiś czas należy zmieniać i to jest trochę jak wymienianie wypalonych żarówek w pokoju, lecz klepiemy na klawiaturze. W firmach sensownym okresem czasu jest 3-6 miesięcy. Prywatnie nie zmieniałbym częściej niż rok, nawet dwa. Wyjątkiem od tej reguły jest wyciek – wtedy zmieniamy hasło natychmiast. Oczywiście trzymając się poprzedniej reguły dotyczącej różnych haseł na różnych serwisach nie trzeba zmieniać tych haseł wszędzie – wystarczy w miejscu, gdzie to hasło wyciekło.
„pęk kluczy powinien być zabezpieczony hasłem lub kluczem publicznym lub kluczem sprzętowym (zaleca się wykorzystywanie co najmniej 2 form zabezpieczenia)”
Ten punkt jest opcjonalny. Nie każdego stać na to i nie każdy musi to mieć prywatnie, ale moim zdaniem służbowo jako administrator w firmie każdy powinien coś takiego posiadać. Dwa klucze sprzętowe, które są moim zdaniem godne uwagi to YubiKey 5 NFC i SoloKey Solo V2 (które powinno już być dostępne). Klucze powinno się kupować w parach, to znaczy zawsze dwie sztuki, bo jak uszkodzimy klucz to na zapasowym mamy kopię naszych kluczy prywatnych/HMAC itd. W przypadku YubiKey 5 NFC koszt to około 500 zł mając to na względzie. Solo V2 dostaniemy za połowę tej ceny. W cenie YubiKey dostaniemy definitywnie dużą odporność na uszkodzenia i wodoszczelność (której nie ma w Solo V2), w zamian w Solo V2 otrzymamy sprzęt z otwartym oprogramowaniem układowym (firmware YubiKey jest zamknięty) oraz nieco większe możliwości pod kątem autoryzacji w Windowsie od YubiKey).
Konfiguracja kluczy jest dosyć prosta, udało mi się wszystko ustawić tego samego wieczoru, którego odebrałem urządzenia 😊
„pęk kluczy powinien być zabezpieczony przed utratą w postaci kopii zapasowej”
Podałem jako przykład chmurę, bo to wydaje się najrozsądniejsze. W ten sposób możemy mieć dostęp do pęku kluczy z telefonu, bo na Androidzie jest aplikacja KeePass2Android, która jest w stanie pobierać pęk kluczy z chmury i go aktualizować. Ponadto obsługuje klucze sprzętowe! To jest moim zdaniem coś. Najlepiej mieć do tego własną chmurę, ale zdając sobie sprawę z tego, że nie każdego na to stać lub nie każdy chce musieć coś takiego ustawiać – zawsze można wybrać Google Drive czy Dropbox. To też są rozwiązania, które raczej będą okej. Ja osobiście korzystam z Nextcloud, bo uważam to za najlepsze rozwiązanie do prywatnej chmury ze względu na możliwości i fakt, że te oprogramowanie jest otwartoźródłowe. Ponadto jest wtyczka, która pozwala na otwieranie baz KeePassa bezpośrednio ze stronki Nextcloud, lecz niestety ona raczej nie obsługuje zabezpieczenia kluczem sprzętowym 😔
Jeśli hasła dotyczą tylko lokalnych systemów/baz – dobrym rozwiązaniem też może być przechowywanie bazy na udziale sieciowym. Jeśli ktoś chce – zawsze można korzystać z dysków zewnętrznych, ale to jest dosyć uporczywe, bo trzeba ciągle pamiętać o kopiowaniu najnowszej wersji pliku i posiadaniu jego kopii gdzieś indziej. Chmura sama w sobie to rozwiązuje. Jeśli komputer padnie – jest na chmurze. Jeśli chmura padnie – jest na dysku lokalnie. Poza tym mam kopię na dwóch komputerach, więc mogę spać spokojnie.
„dwustopniowe uwierzytelnienie powinno być skonfigurowana w miejscach, gdzie to jest możliwe oraz powinna być realizowana przez mechanizm, który umożliwia tworzenie kopii zapasowej”
W każdym szanującym się dzisiaj serwisie mamy możliwość korzystania z dwustopniowego uwierzytelniania (2FA, two-factor authentication) lecz większość ludzi z tego nie korzysta. BŁĄD. To jest mechanizm, który pozwala nam znacznie zwiększyć bezpieczeństwo w sieci. W skrócie działa to tak: wpisujemy login i hasło, następnie wpisujemy token (ciąg cyfr, najczęściej 6) z telefonu lub używamy klucza sprzętowego do potwierdzenia, że to naprawdę my chcemy się zalogować. Tokeny same w sobie są generowane na podstawie tajnego kodu przechowywanego przez aplikację oraz aktualnego czasu. Nie wymagają one połączenia z Internetem. W skrócie, musimy mieć ustawioną aktualną godzinę, w innym wypadku generowane tokeny nie będą działać. Odnosi się to do tokenów z aplikacji, nie z SMSów.
Korzystanie z tokenów na telefonie odbywa się przez wiadomości SMS lub aplikację i w drugim przypadku wymaga od nas jedynie posiadania telefonu z Androidem lub iOSem (sic!). Na telefonie musimy zainstalować odpowiedni program, następnie należy dodać metodę uwierzytelniania w postaci tokenu. Następnie należy aplikacją do tokenów zeskanować kod QR wyświetlany na ekranie lub podać tajny kod wygenerowany przez kreator do programu z tokenami. To doda możliwość generowania tokenów. Następnie taki token należy przepisać do okienka w kreatorze dodawania metody uwierzytelniania i voilà – gotowe.
Najpopularniejszą aplikacją do tokenów jest Google Authenticator, lecz ja osobiście polecam Authy. Google Authenticator nie posiada mechanizmu kopii zapasowej tajnych kodów, przez co jak zgubilibyśmy telefon, tracimy wszystkie tokeny i mamy problem. Duży problem. Z Authy takiego problemu nie ma, ponieważ tajne kody są przechowywane w chmurze. Aplikacja i tokeny w niej wyglądają mniej więcej tak:
Alternatywą jest klucz sprzętowy. Wpisujemy login i hasło, następnie musimy dotknąć klucz sprzętowy w odpowiednim miejscu lub podać kod PIN klucza. Przykład logowania do konta Google możecie zobaczyć poniżej:
Na innych serwisach możemy dostać nieco inny prompt, przykład z cloudflare.com:
Kopia takiego klucza jest realizowana w prosty sposób: po prostu na dwóch kluczach sprzętowych zapisuje się dokładnie ten sam klucz prywatny, klucz HMAC itd. Wtedy jeśli jeden przestaje działać, drugi dalej może być używany. Przy konfiguracji YubiKey zapisałem sobie plik tekstowy z kluczami, które znajdują się wewnątrz urządzenia. Dzięki temu będę mógł przepisać dane na kolejne urządzenie jeśli uszkodzę jakoś jeden klucz, a potem będę musiał kupić nowy, by zachować status 2 kluczy w jednym czasie. Klucz sprzętowy ma jedną zasadniczą wadę – można go łatwo zgubić. Warto więc przechowywać kopię klucza w bezpiecznym miejscu, a główny klucz w miejscu, które na pewno nie zniknie – ja trzymam go przy kluczach, bo tak na dobrą sprawę to jest taki trochę klucz, lecz elektroniczny. Ponadto używałbym takiego klucza tylko w sprzęcie, któremu ufam – nie wiem jakie oprogramowanie może pracować w czyimś komputerze i niekoniecznie chciałbym to testować.
najważniejsze pytanie – czy naprawdę nam jest to potrzebne?
To niegrzeczne, ale odpowiem pytaniem – a czy Tobie jest potrzebne bezpieczeństwo w sieci?
Definitywnie nie każdy musi mieć klucze sprzętowe. Nie powiem, że to jest bajer, to jest przydatna rzecz, ale nie każdy musi tak bardzo dbać o swoje bezpieczeństwo i to rozumiem. Jednak jak wspomniałem na początku, kradzież tożsamości z punktu widzenia ofiary to okropna rzecz i nikomu tego nie życzę. Dlatego moim zdaniem, dla własnego spokoju warto spędzić jeden lub dwa popołudnia przeglądając historię przeglądania Internetu w przeglądarce, spisać portale, na których się logujemy, utworzyć pęk kluczy, pozmieniać hasła do wszystkiego (na każdej stronie inne), zrobić kopię bazy kluczy i już jesteśmy bezpieczniejsi niż większość świata. To wymaga zaangażowania, ale nie wymaga wielkiego wysiłku, by o to zadbać.
Koniec końców trzeba sobie zadać pytanie – co bardziej się opłaca? Zmarnować trochę czasu na bawienie się w menedżera haseł i zmienianie haseł na trudniejsze, a potem ich kopiowanie przy logowaniu się do serwisów czy zmienianie ich po tym, jak ktoś w naszym imieniu wykorzysta naszych znajomych lub zrobi coś jeszcze gorszego i ten cały wstyd, który zostaje po całej sytuacji?
W większości niestandardowych systemów takich jak np. FreeNAS VMware Workstation przy tworzeniu maszyny tworzy interfejs(y) sieciowe wykorzystując domyślnie sterownik e1000, który pozwala na wyciągnięcie 1 Gbit/s po stworzeniu sieci pomiędzy maszynami wirtualnymi/hostem. To jest problem, bo czasami jeśli chce się zrobić testy na iSCSI, sprzęt mamy wydajny i coś wolno działa. Generalnie ten sterownik jest problemem i jest proste rozwiązanie na zmianę tego sterownika na wydajny vmxnet3, który pozwala na wyciągnięcie na luzie 10 Gbit/s. Problem w tym, że nie każdy system to wspiera. W moim przypadku wiem, że wspiera.
Rozwiązanie jest proste: wystarczy znaleźć plik o formacie *.vmx dla naszej maszyny wirtualnej (w moim przypadku jest to maszyna freenas.vmx, edytować plik i zmienić zmienną ethernetX.virtualDev = "e1000" (X – numer interfejsu sieciowego) na ethernetX.virtualDev = "vmxnet3". To załatwia sprawę, ale trzeba pamiętać, że system wykryje te interfejsy jako nowe przechowując nadal starą konfigurację, więc trzeba się upewnić, że nie ma się w swoim systemie przypisanych żadnych ustawień do tych „starych” interfejsów.
Dosyć prosta sprawa: na każdym urządzeniu w domyślnej konfiguracji istnieje konto admin do konfiguracji i warto po prostu zmienić nazwę użytkownika, by nieco utrudnić próbę włamania się na urządzenie (na wszelki wypadek). Robi się to w CLI:
Dzięki programowi Orca można osiągnąć taki efekt, że w trakcie kreatora instalacji nie trzeba podawać adresu serwera ShadowControl przy instalacji agenta, ponieważ może on być zapisany wewnątrz instalatora i wygląda to tak:
Dzięki temu można zainstalować agenta i po instalacji on sam się podepnie do konsoli. Program Orca możemy znaleźć w Windows 10 SDK – wystarczy przy instalacji zaznaczyć opcję MSI Tools i nic innego. Dzięki temu w folderze Windows 10 SDK będziemy mieć instalator do Orca:
Wystarczy przejść instalator i będziemy mieli program Orca na swoim komputerze. Po tym należy go otworzyć, przeciągnąć na niego instalator ShadowControl, a następnie wybrać po lewej pole Property, a następnie kliknąć na środku na wolne pole PPM i wybrać opcję Add row…
Następnie w polu Property należy zdefiniować APPL_ADDR i w polu Value wpisać adres IP lub FQDN naszej konsoli ShadowControl. Po tym zapisujemy i w File > Save nasz plik instalacyjny.
Po tym taki instalator możemy zainstalować przez GPO lub przez np. polecenie msiexec: