Friday, February 18th, 2011...1:32 am

Autorization Manager – bestia i jak ją obejść

Jump to Comments

Ostatnio miałem przyjemność szkolić pewną grupę z Powershell. Miło było , przynajmniej mi ale mam nadzieję że i uczestnikom.

Dygresja mała; mam nadzieję że nie wynieśli ze szkolenia wrażeń takich jak opisuje Maciej, z którymi się zgadzam chociaż trochę mocno teoretyczni bo w żadnym tego typu szkoleniu nie uczestniczyłem (znaczy się w takim organizowanym przez ośrodek i z trenerem itp. )

Tuż po szkoleniu napatoczył się problem, o którym w trakcie szkolenia mówiłem, a pomimo że w kilku miejscach można znaleźć różne opisy go dotyczące to pomyślałem że dołożę jeszcze jeden (reperując też statystyki pisania trochę dołujące). Do rzeczy więc.

Powershell jak wiadomo (a może niektórzy nie wiedzą) buduje swój model bezpieczeństwa w oparciu o  kilka elementów:

  • brak skojarzenia PS1 z wykonywalnym plikiem (szczegół a jednak)
  • konieczność umieszczenia skryptu w znanej ścieżce (path), lub wskazanie wprost wykonania lokalnego pliku (.\ ) – dla dociekliwych a nie wiedzących jeszcze dlaczego polecam ćwiczenie myślowe proste.
  • politykę wykonania, czyli tak zwaną execution policy. I o tej ostatniej chwilę.

Polityka wykonania to w uproszczeniu konfiguracja zaufania do wykonywanych skryptów (upraszczam jak napisałem). Domyślnie takowa jest niezdefiniowana, co odpowiada ustawieniu Restricted, czyli nie można wykonywać skryptów ogólnie,
a tylko działać w Powershell interaktywnie. Nastepnie mamy przejściowe polityki AllSigned, która wymaga aby wszystkie skrypty były podpisane cyfrowo przez zaufany certyfikat, RemoteSigned – to co wcześniej ale w odniesieniu do skryptów nie pochodzących z danego systemu, i na końcu Unrestricted czyli pozwalamy na wykonywanie skryptów wszystkich.

W zasadzie jest jeszcze jedno ustawienie, czyli Bypass, które całość opisanego powyżej mechanizmu po prostu pomija. I tak można.

Zestaw odpowiednich cmdlet do zarządzania tymi ustawieniami dostępny jest w Powershell – polecam Get-Command i verb ExecutionPolicy.

Problem, z którym się zetknąłem to fakt, że w środowisku klienta, wykonanie przez usługę skryptu Powershell kończyło się komunikatem:

AuthorizationManager check failed

Pomimo rozlużnienia polityki bezpieczeństwa Powershell do Unrestricted nic nie pomagało. Jako że robiłem za tak zwany remote support poprosiłem moje zdalne ręce
o to żeby sprawdził czy skrypt który wykonuje problem nie jest z kategorii zdalnych właśnie.

Jak to jest rozpoznawane w systemie? Rzecz jest prosta. Jeżeli zapisujecie w systemie jakiś plik, który pobraliście z internetu lub odebraliście pocztą, plik ten uzyskuje mały bonus w postaci alternatywnego strumienia NTFS (a taki opis na szybko znalazłem). Jeżeli spojrzycie na taki plik przy pomocy Streams.exe (lub alternatywnie Notepad.exe z wywołaniem strumienia) zobaczycie informację, o strefie, z której plik został pobrany:

alt

Mechanizm ten znany jest jako Attachment Execution Services.

Uaktualnienie #1Tutaj (KB 883260) można poczytać trochę więcej o tym jak kontrolować zachowanie powyższego .

W zasadzie, w przypadku polityki Unrestricted nawet plik oznaczony jako pochodzący z zewnętrznego systemu powinien zostać uruchomiony, jednak w tym wypadu rezultatem był komunikat jak powyżej. Cóż poradzić, usunąć tą informację by się przydało. Usunąć ją można rzeczonym powyżej poleceniem streams.exe lub prawym klawiszem klikając w plik i używając klawisza Unblock tam dostępnego.

alt

I w tym wypadku problem to rozwiązało, pozostawiając niestety niedosyt tego, że prawdziwe źródło problemu pozostało nieznane. Pomimo dłuższego poszukiwania nie udało mi się znaleźć głębszego opisu działania mechanizmu authorization manager powershell. Więc pozostawmy ten artykuł w serii porad, jak rozwiązać problem gdy już wystąpi.

A dlaczego akurat ten skrypt sprawiał takie problemy ??? To proste, został wysłany poprzez e-mail.

5 Comments

  • […] trakcie porannej prasówki we wpisie Tomka (Autorization Manager – bestia i jak ją obejść) trafiłem na link do tego wpisu: Szkolenia programistyczne, czyli maszyna ssąco-uciszająca . […]

  • “RemoteSigned – to co wcześniej ale w odniesieniu do skryptów nie pochodzących z danego systemu”
    Tomku mam pytanie na podstawie jakiego parametru nastepuje rozpoznawanie że skrypt nie pochodzi z danego systemu?

  • A może Zone.Identifier trzeba było zmienić na coś z przedziału -1 do 4 i wtedy sprawdzić jak zadziała Unrestricted?

  • @Basia – chyba musze podkręcić jasność pisania 🙂 ale może faktycznie to zakręciłem … ogólnie rozpoznawane jest to właśnie po zawartości informacji przechowywanej w dodatkowym strumieniu danych.

  • #Krzysiu
    Dobre pytanie .. dobre, czujność ponad wszystko:) – o ile dobrze pamietam wszytko co ma zapisane jako zone.info liczbę większą niż 3 jest niezaufane.

Leave a Reply