Częstym pomysłem ludzi administrujących Windows jest uruchomienie jakiegoś skryptu lub programu z prawami administratora. Wynika to z chęci wykonania pewnych operacji z wyższymi uprawnieniami, obejścia problemu z programem, który nie działa na koncie zwykłego użytkownika, lub jeszcze innych, czasami kompletnie abstrakcyjnych/bezsensownych powodów. W Windows od wersji 2000 pojawiło się narzędzie RunAs, które w Windows XP (w wersji Pro) wzbogaciło się o opcję /savedcred. Wiele osób wpada na genialny pomysł, by w skrypcie umieścić właśnie runas /savedcred i...
Dlaczego runas /savedcred nie należy używać...
...i pomysł ten trzeba im jak najszybciej wybić z głowy. RunAs NIE jest odpowiednikiem sudo.
Po pierwsze do uruchomienia czegoś z prawami innego użytkownika potrzebne jest hasło (no dobrze, nie zawsze, ale w tym przypadku JEST). Hasło to musi być gdzieś przechowywane, oczywiście nie w formie jawnej, tylko w formie jakoś chronionej. W Windows istnieje coś co się nazywa DPAI (Data Protection API), którego całkiem sensowny i przyjazny opis znajduje się tutaj.
W skrócie wygląda to tak, że na podstawie danych uwierzytelniających użytkownika generowany jest klucz, którym szyfrowany jest masterkey. Na podstawie masterkey i klucza szyfrowania unikalnego dla każdego chronionego obiektu (oraz opcjonalnej dodatkowej entropii) generowany jest klucz symetryczny, który jest następnie wykorzystywany do zaszyfrowania określonej porcji danych. Dane te są dostępne dla WSZYSTKICH procesów pracujących w kontekście użytkownika, który zapamiętał hasło. Dane chronione są przed OBCYMI, a nie TYM użytkownikiem. Czyli nie ważne, czy polecenie wygląda tak:
runas /user:admin /savedcred program.exe
czy też:
runas /user:admin /savedcred cmd.exe
to runas uzyska dostęp do zapamiętanego hasła, ponieważ jest uruchamiany w kontekście tego samego użytkownika, który je zapamiętał. Jasne? Innymi słowy pomysły z wykorzystaniem runas /savedcred w celu umożliwienia użytkownikowi uruchamiania tylko konkretnego programu z prawami innego użytkownika świadczą o niezrozumieniu zasady działania runas, a dla atakujacego jest to najłatwiejszy sposób eskalacji swoich uprawnień.