Jump to content

Статия: Описание на User Account Control (UAC)


Препоръчан пост

Описание на User Account Control (UAC)


Грозното патенце на всяка Windows Vista/7 система




User Account Control е по всяка вероятност най-неразбраната, подценявана и може би дори мразена функция в Windows Vista и Windows 7. Цялата омраза, която се сипе по нея, е незаслужена. Поне в по-голямата си част. Напълно съм съгласен, че понякога може да дразни, но това е функция, която е внедрена в Windows с определена цел. Не, тази цел не е да се гъбарка с потребителите, а да спомага за по-плавния преход от стандартен (ограничен) акаунт към администраторски такъв. User Account Control (която занапред ще наричам UAC, за да спестя време на себе си и клавишни натискания на клавиатурата) е създадена, не защото от Microsoft се чудят какво да правят и по цял ден кроят планове как да направят мръсно на потребителите, потривайки ръце с присвити очи и ехидна усмивка на лице, а защото от функцията има реална полза. В този материал ще опиша какво представлява UAC, как работи, защо е необходима и какви са ѝ настройките. Знам, че вече обръщах внимание на UAC в блога ми и в статията за защита от злонамерен софтуер, но UAC е толкова незаслужено подценявана и лекомислено пренебрегвана, че сметнах за нужно да ѝ посветя отделна тема

С тази тема нямам намерение да ви чета конско защо не използвате UAC (е... може би мъничко), а да ви информирам, за да сте наясно със ситуацията и от какво се лишавате, когато забранявате UAC.

Малко предистория и информация за акаунтите
Както би трябвало да знаете в Windows се работи с т.нар. акаунти. Те са два вида: администраторски и стандартни (ограничени). Администраторските акаунти предлагат на потребителя пълен достъп до всички функции на операционната система, т.е. потребителят може да прави каквото си поиска. Стандартните акаунти (нарични "ограничени" в Windows XP) са със занижени права, т.е. потребителите не могат да правят каквото си поискат, а само определени неща. Тези неща са общо взето всички, които засягат само текущия потребител. Пример за такива неща са: смяна на тапета на работния плот, промяна на настройките мишката, смяна на звуковите схеми и др. В общи линии всичко, което касае само текущия потребител и не се отнася за цялата система, е достъпно в стандартния акаунт. За всичко, което би се отразило на цялата система, е нужен администраторски достъп
Целта на тези акаунти е защита от зловреден код. Идеята е потребителят да работи и извършва обичайните дейности под ограничен акаунт и да преминава към администраторски само тогава, когато дадено действие го изисква. По този начин и зловредният код би се изпълнил под ограничен акаунт и би имал достъп до сравнително малко неща. Иронично е, че зловредният код като цяло има по-голяма нужда от администраторски достъп от програмите, които се използват в ежедневието. Проблемът под Windows 2000 и XP беше, че работата под ограничен акаунт не беше особено удобна, защото изпълнението на действие като администратор не беше реализирано по особено гъвкав начин. Единият начин да се извършни администраторско действие беше да се премине под администраторски акаунт - излизане от ограничения акаунт (или бързо превключване, ако се ползва Windows XP), влизане в администраторския акаунт, извършване на действието, излизане от администраторския акаунт (или бързо превключване, ако се ползва Windows XP) и влизане обратно в ограничения акаунт. Другият вариант беше да се използва контекстното меню и опцията Run as..., която извеждаше прозорец, в който потребителят посочва съотвения администраторски акаунт и парола и така стартира файла от името на въпросния администратор. Това беше определено по-бърз метод от преминаването от един акаунт в друг, но пък не беше приложим за всяка ситуация, която изискваше администраторски права. Друг проблем при този метод е, че администраторският акаунт трябва да има някаква парола, в противен случай изпълнението се проваля
Затова и в Windows Vista беше внедерена функцията User Account Control, а в Windows 7 беше доусъвършенствана.

Какво е UAC
UAC е функция в Windows Vista и Windows 7, която има за цел да направи прехода от ограничена среда в администраторска такава максимално плавен и безболезнен, като общо взето елиминира нуждата потребителят ръчно да стартира файлове като администратор или да превключва акаунти.

Как точно става това и как работи UAC
По принцип когато потребител влезе в своя акаунт, Windows създава т.нар. user access token, който съдържа определена информация за въпросния акаунт и най-вече различни идентификатори за сигурност, които операционната система използва, за да контролира достъпа на този акаунт. Иначе казано, тези т.нар. token-и са един вид лични документи (като лична карта или паспорт). Това важи за всички версии на Windows, базирани на NT ядрото: NT, 2000, XP, Vista и 7. Когато потребител влезе в стандартен (ограничен) акаунт, се създава т.нар. standard user token, който е с орязани права. Когато потребител влезе в администраторски акаунт, се създава т.нар. administrator token, който е с пълни права. Логично. Под Windows Vista и Windows 7 обаче, ако UAC е активирана и потребител влезе в администраторски акаунт, Windows създава и двата token-a. Администраторският остава на заден план, а стандартният се използва, за да се стартира Explorer.exe. Така Explorer.exe се стартира със занижени права. Всички процеси, които бъдат стартирани след това, са под-процеси на Explorer.exe и понеже всеки под-процес наследява правата си от процеса, който го е стартирал, всички процеси след това са също със занижени права. Когато даден процес или действие има нужда от администраторски права той си поисква администраторския token. Това кара Windows да поиска разрешение от потребителя дали да предостави администраторския token на въпросния процес, което представлява специален диалогов прозорец:
http://pics.softvisia.com/design/pics/13428/01-winbin.png

Въпросният диалогов прозорец се разполага на т.нар. безопасен работен плот (secure desktop). Безопасният работен плот е специален и изключително базов откъм функции работен плот, до който достъп има само операционната система. Той всъщност представлява снимка (screenshot) на истинския работен плот, която бива затъмнена и поставена над/пред него. На него бива изведен само прозорецът, искащ потвърждение за администраторските права, и евентуално лентата за езиците (ако имате активен повече от един език)
Ако потребителят не се съгласи и кликне "No", Windows отказва администраторския token на процеса. Ако потребителят се съгласи и кликне "Yes", Windows предоставя администраторския token на процеса
Ако този процес е вече стартиран със занижени права, той бива рестартиран с повишени такива (администраторски). Един процес не може да бъде "понижаван" или "повишаван" директно. Веднъж стартиран ли е с даден token няма начин да получи други права, докато не бъде стартиран наново с нови права. Пример за такава ситуация е Task Manager, който се стартира винаги със занижени права. Ако кликнете бутона "Show processes from all users", Task Manager бива затворен и стартиран отново с администраторски права. Това го споменавам по-скоро информативно.

Ако използвате стандартен акаунт, прозорецът на UAC ще поиска да посочите конкретен администраторски акаунт и да въведете парола:
http://pics.softvisia.com/design/pics/13428/04-suauac.png

Как UAC предпазва потребителя
Както вече споменах, UAC сама по себе си не предоставя особена защита. Тя просто улеснява прехода от ограничена среда (акаунт) към администраторска такава. Така че по-правилният въпрос би бил как точно ограничен акаунт предпазва потребителя. Под ограничен акаунт процесите нямат достъп определени системни зони. За такива се считат:
- основата на дял C:;
- потребителските папки на други потребители в папка \Users\;
- папката Program Files;
- папката Windows и всички нейни подпапки;
- дърветата на други потребители в системния регистър;
- HKEY_LOCAL_MACHINE дървото в системния регистър.
Процес (или зловреден код) без администраторски права не може да се нагнезди дълбоко в системата, защото няма достъп до нужните папки и ключове в системяния регистър. Т.е. никоя гадинка не може да направи сериозни поражения по системата.

Пречи ли UAC на работата на стари програми, които не са официално съвместими с Vista/7
Не би трябвало. Когато UAC е включена, също е включена и виртуализация. Някои по-стари и/или просто некадърно написани програми не използват правилните папки да складират свои файлове (настройки, дневници и др.). Правилните папки са папките в AppData (Application Data в Windows XP), които всеки потребител си има и където всяка програма може да си създаде папка и да си складира там каквото си пожелае. Някои програми продължават да се опитват да използват папките Program Files и/или Windows и да създават там свои файлове. Ако въпросната програма е стартирана с администраторски права, това няма да е проблем. Ако обаче програмата е стартирана със занижени права, тя няма да може да прави промени по файлове/папки в Program Files и/или Windows. Операционната система няма да й го позволи. За да се предотвратят проблеми с такива програми Windows предлага виртуализация на тези папки и ключовете в системния регистър, до които програми със занижени права нямат достъп по принцип. Когато подобна програма се опита да създаде файл в защитена папка, операционната система не й отказва достъп директно, а пренасочва всичко към специална папка VirtualStore, която се намира в X:\Users\<името-на-вашия-акаунт>\AppData\Local\ (където X: е системният дял; най-често - C:). Т.е. през очите на самата програма всичко е наред. Тя не среща спънки и си мисли, че създава файловете/папките точно там, където иска. Операционната система е тази, която си прави труда да пренасочва всички операции, за да работи въпросната програма нормално и да й се струва, че всичко тече по мед и масло. Тази папка обикновено съдържа точно подпапки Program Files и Windows. Ето снимка на подпапката Program Files от моята папка VirtualStore:
http://pics.softvisia.com/design/pics/13428/05-vspf.png

Да проверим какво има в папка AEDiction например:
http://pics.softvisia.com/design/pics/13428/06-vspfaed.png

Т.е. тези файлове/папки биха се намирали в папката на AEDictionary в Program Files, ако UAC беше спряна или програмата се стартираше винаги с администраторски права. Под Windows XP например тези файлове/папки биха се създали без проблем, защото под нея операционна система всички програми имат администраторски права по подразбиране. Авторът на програмата не е публикувал нова версия, която да е съвместима с Windows Vista/7 и затова се налага да се ползва виртуализация.
Това разбира се не би следвало да се счита от авторите на софтуер като постоянно решение. Задължение на всеки автор е да създава съвместим с актуалните операционни системи софтуер.

Какви са разликите в прозорците на UAC
Може би не сте забелязали, но има 3 различни прозореца на UAC. Описвам прозорците на Windows 7. Под Vista са по-различни, но нямам намерение да се спирам на тях по ред причини.

Първият тип прозорец е с тъмносиня лента в горната част и щитът в горната лява част е разделен на 4 части - 2 сини и 2 жълти (по диагонал). Този прозорец се появява, когато се изисква потвърждение за процес с цифров подпис, който принадлежи на операционната система - т.нар. Windows binaries. За тях - в следващия абзац.
http://pics.softvisia.com/design/pics/13428/01-winbin.png

Вторият тип прозорец е също с тъмно синя лента, но щитът е изцяло син и с въпросителен знак. Този прозорец се появява, когато се изисква потвърждение за процес с цифров подпис, но процесът/файлът не принадлежи на операционната система.
http://pics.softvisia.com/design/pics/13428/02-signed.png

Третият тип прозорец е с оранжева лента, щитът също е оранжев, но с удивителен знак. Този прозорец се появява, когато се изисква потвърждение за процес без цифров подпис.
http://pics.softvisia.com/design/pics/13428/03-unsigned.png

Какви са настройките на UAC
Настройките (режимите на работа) на UAC се намират в контролния панел -> System and Security (Система и защита) -> Change User Account Control settings (Промяна на настройките за управление на потребителските акаунти). Те са общо 4:
http://pics.softvisia.com/design/pics/13428/07-uacsettings.png

Най-високото ниво е Always notify (Винаги уведомявай). Този режим е равносилен на начина на работа на UAC под Windows Vista. Под нея нямаше толкова фини настройки и това беше поведението на UAC, когато беше включена. При този режим Windows винаги ще иска потвърждаване на администраторските права, независимо кой процес и за какво ги изисква.
Второто ниво е това по подразбиране в Windows 7. При този режим Windows няма да извежда прозорец на UAC, когато става въпрос за т.нар. Windows binaries. Т.е. ако файлът/процесът, който изисква администраторските права, отговаря на следните 3 условия, операционната система ще му ги предостави автоматично, без да се допитва до потребителя:
- файлът има т.нар. манифест (manifest) вграден в себе си или като отделен файл, който да указва автоматично повишаване на правата;
- файлът се намира в папка Windows (или в някоя от подпапките й разбира се);
- файлът е цифрово подписан с валиден подпис на Windows.
Третото ниво е същото като второто (предишното), но с разликата, че не се използва безопасният работен плот. Т.е. работният плот/екранът не се затъмнява и диалоговият прозорец на UAC се показва както всеки друг. Това не е препоръчително. Защо не е препоръчително ще обясня след мъничко.
Четвъртото, и последно, ниво е Never notify (Никога не уведомявай). Това всъщност означава изключена UAC. Информативно: нужно е рестартиране на компютъра, за да влезе в сила настройката и UAC да бъде спряна.

Тук е редно да направя 2 забележки:
1) нужно е цифровият подпис да е конкретно на Windows. Казвам го, защото има и файлове, които са подписани с подпис на Microsoft. Това са два отделни подписа, но само конкретно този на Windows се зачита от UAC. Този подпис общо взето е доказателство, че файлът е не само на Microsoft, но е и част от операционната система. Т.е. не е просто някой друг файл като например winword.exe (Microsoft Word).
2) не всички файлове на Windows разполагат с въпросния манифест за автоматично повишаване на правата. Има файлове, които нарочно са лишени от такъв. Такива са например regedit.exe и cmd.exe. Вторият разбираемо е лишен от автоматично повишаване, защото той се ползва изключително често за стартиране на други процеси, а както вече споменах - всеки нов процес наследява правата си от процеса, който го е стартирал. Така всеки ще може да използва cmd.exe да стартира безпроблемно всякакви процеси с администраторски права. Това в ръцете на лоши чичковци би било фатално.


Защо е важно да се използва безопасният работен плот
Когато се използва безопасният работен плот, се продотвратяват евентуални намеси и влияния от други процеси, защото, както вече споменах по-горе, единствено операционната система има достъп до безопасния работен плот и се приемат само най-базовите команди от страна на потребителя - т.е. най-основното и необходимо, за да се кликне "да" или "не". Нека дам пример какво може да се случи, ако не се използва безопасният работен плот: не са необходими администраторски права, за да се замени за постоянно или временно курсорът на мишката и всеки потребител може да си създава свои курсори. Всеки курсор разполага с т.нар. гореща точка (hot spot). Това е пикселът, който се счита за връх и който всъщност извършва кликанията. Тази гореща точка се задава при създаване на курсора и може да се намира навсякъде. Възможно е дадена страница в Интернет да се опита да стартира злонамерен файл, който да изисква администраторски права. Сайтът обаче заменя и курсора със свой, който е специално създаден да ви подведе - вие да мислите, че сте посочили бутон "No" в прозореца на UAC и че ще кликнете точно него, но в действителност да кликнете бутон "Yes", защото горещата точка на курсора не е там, където си мислите, че е. Така сайт може да ви подведе да разрешите стартирането на опасен файл и да му дадете администраторски права. Ако се използва безопасният работен плот, това няма как да се случи.
Това е просто пример и не е често срещано явление. Мисълта ми е, че има причина безопасният работен плот да е включен по подразбиране.

Кога са нужни администраторски права? Кога се появява прозорецът на UAC?
Общо взето има 3 случая, в които UAC се допитва до потребителя:
1) когато променяте системни (не потребителски) настройки, макар реално това да важи само за максималното ниво на UAC;
2) когато инсталирате или деинсталирате програма или драйвер;
3) когато дадено приложение/процес изисква администраторски права, за да извърши промени по системни файлове/папки или места в системния регистър.

Защо е толкова важно да не се изключва UAC и защо вдигам толкова шум
UAC предоставя чудесно ниво на защита, като в замяна не изисква почти нищо. Т.е. коефциентът на полезно действие (КПД) на UAC е много високо. Не разбирам защо хората се дразнят толкова. Казвам го за амнайсти път: в ежедневната работа на един средностатистически потребител има изключително малко запитвания от страна на UAC - 1-2. Че може би дори и 0. Толкова ли е много? Нека анализираме споменатите по-горе ситуации.
Средностатистическите потребители рядко променят системни настройки, но дори и да променят, ако работите с настройки на UAC по подразбиране, няма да бъдете притеснявани от въпроси за това.
Средностатистическите потребители не инсталират драйвери и програми всеки ден. Драйверите и програмите се инсталират веднъж - след инсталация на Windows. Т.е. тогава има висока концетрация на запитвания от страна на UAC. След това има нужда от намеса на UAC при актуализирането им, а нови версии на програми и особено драйвери не излизат всеки ден. А и на всичкото отгоре доста хора не са свикнали да актуализират драйверите и програмите си, което още повече намалява въпросите на UAC.
Почти няма програми, които да изискват администраторски права, за да си вършат работа. Това са основно дефрагментатори, програми за чистене и "оптимизация", някои програми за диагностика (AIDA64, HWMonitor, SpeedFan и др.) и настройка на системата (Process Explorer и Autoruns например, но само ако понечите да извършите нещо по-специално - да речем да забраните услуга/драйвер или стартираща се с Windows програма). И все пак това са програми, които или не бива да се използват въобще (оптимизиращите програми), или се стартират рядко и при конкретна необходимост. Всички често използвани приложения работят абсолютно нормално с UAC и не задават въпроси:
- мултимедийни (видео и/или аудио) плеъри;
- видео/аудио конвертори;
- програми за обработка на изображения/видео/аудио;
- програми за заснемане на работния плот или записване на видео от него;
- програми за разглеждане на изображения;
- Интернет браузъри;
- програми за изтегляне на файлове (download мениджъри и програми за P2P мрежи);
- FTP клиенти;
- програми за писмена (чат) или гласова комуникация;
- програми за запис на дискове;
- архиватори;
- текстови редактори;
- офис пакети;
- PDF четци;
- програми за виртуални машини;
- програми за разширяване на интерфейса;
- и др.
Дори инсталирането на актуализации (updates) за Windows не задейства прозорец на UAC. Направо не схващам каква е цялата тази излишна драматизация, сякаш е непосилно и уникално дразнещо да се клика на 1-2 пъти дневно върху един бутон. Дявол го взел, има хора, които са готови да жертват 1-2 (че и повече) минути дневно да "оптимизират" системата с някакви измислени и некадърно написани програми, които не правят нищо полезно, но не са готови да жертват няколко секунди да отговорят на запитвания на UAC. Направо е... уникално. Чак думите ми убягват да изложа точно мислите си.
Разни изказвания от рода на "аз съм опитен потребител и знам как да се защитавам" не са достатъчни. Няма значение колко е опитен даден потребител. Използването на UAC е един вид спасителна мрежа, защото има някои ситуации, когато нещата не зависят от потребителя или той/тя просто допуска грешка. Случва се на всеки. Човешко е. Нека дам примери, за да не съм голословен.
Пример 1: търсите крак/генератор за някоя програма и намирате някакъв, който всъщност не е въобще крак/генератор, а чист зловреден код. Уверени сте в себе си и по някаква причина сте спрели временно антивирусната или тя няма все още дефинициии за въпросната заплаха. Стартирате гадинката и тя успява да впие корени дълбоко в системата.
Пример 2: по някаква причина използвате версия на програма, в която има някаква уязвимост. Попадате на сайт, който се възползва от тази уязвимост. Ако UAC е включена и програмата работи със занижени права, тя няма да може да направи много поразии. В противен случай никой не знае.
Това са просто 2 примера. Варианти има бол. Мисълта ми е, че никой не е застрахован и колкото и човек да е опитен е възможно обстоятелствата да се стекат така, че системата да се окаже компрометирана. UAC е един допълнителен слой на защита, който всъщност не изисква почти никакви усилия от страна на потребителя, но въпреки това има потенциала да предотврати сериозни поражения.

Любопитен факт за онези от вас, които са запознати с тестовете на Matousec и се ръководят по тях: една Windows 7 система по подразбиране (току-що инсталирана), без абсолютно никакви допълнителни настройки се справя с над половината от тестовете. Това е вградена и безплатна защита, която не изисква никакви допълнителни ресурси от хардуера и никаква потребителска намеса, но издържа над 50% от тестовете.

Стартиране на дадени приложения с Windows и с администраторски права
Допускам, че е възможно да има потребители, които да забраняват UAC само и само, за да могат да стартират програми с Windows с администраторски права. По нормалния начин това не е възможно, защото UAC няма как се допита до потребителя, след като все още няма зареден работен плот. И все пак начин има и ще го опиша с надеждата, че тези потребители, които спират UAC само заради това, ще го оставят включен и ще ползват този метод. Ето го и него:
- отворете меню Start (Старт) -> кликнете All Programs (Всички програми) -> Accessories (Принадлежности) -> System Tools (Системни инструменти) -> Task Scheduler;
- вдясно кликнете Create Task;
- в поле Name въведете име по желание и в долната част на прозореца поставете отметка на Run with highest privileges;
- идете на подпрозорец Triggers и кликнете бутон New... в долната част;
- от падащото меню в горната част изберете At log on; ако желаете да се отнася само за конкретен потребител изберете Specific user, кликнете бутон Change User..., посочете го и потвърдете с OK; потвърдете с OK;
- идете на подпрозорец Actions и кликнете бутон New... в долната част;
- кликнете бутон Browse... и посочете съответното приложение, което желаете да се стартира; добавете аргументи в долното поле, ако има нужда; потвърдете с OK;
- идете на подпрозорец Conditions и махнете отметката на Start the task only if the computers is on AC power;
- идете на подпрозорец Settings и махнете отметката на Stop the task if it runs longer than;
- потвърдете с OK.
Готово. Задачата е добавена и приложението ще се зарежда заедно с Windows и с администраторски права.
Тук обаче има една лека уловка: всички подобни задачи се стартират с приоритет, по-нисък от нормалния - Below normal (Под нормалното). Ако това ви устройва, значи всичко е наред.
Ако обаче искате приложението да се стартира с нормален приоритет, ще трябва да се потрудите още малко:
- стартирайте отново Task Scheduler, ако сте го затворили;
- вляво изберете Task Scheduler Library;
- маркирайте въпросната задача, изберете Export... в дясната част и изберете къде да се запази .xml файла със задачата;
- отворете запазения .xml файл в текстов редактор по избор (Notepad или който използвате);
- намерете секцията <Priority>7</Priority>, която трябва да е към края на файла, и сменете седмицата (7) между отварящия и затварящия тагове с петица (5);
- запазете файла;
- в Task Scheduler маркирайте отново задачата, вдясно кликнете Delete (Изтрий) и потвърдете с Yes (Да);
- вдясно кликнете Import Task..., посочете запазения преди малко .xml файл и потвърдете с OK.

Заключение
Не мога да забранявам на когото и да било да изключва UAC. Всеки си преценява сам за себе си. Важно е обаче да знаете какво губите, когато изключвате UAC и да сте наясно с рисковете.

---

Можете да копирате статията навсякъде, но само ако посочите източника.

Венцислав "Night_Raven" Димитров

Link to comment
Сподели другаде

Гост
Отговори на тази тема

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   Не можете да качите директно снимка. Качете или добавете изображението от линк (URL)

Loading...
×
×
  • Създай ново...