OpenVPN-ի script-security մակարդակները 0-ից 3, և ինչ է բացում յուրաքանչյուրը
script-security-ի յուրաքանչյուր մակարդակ ընդլայնում է, թե ինչ կարող է կատարել պրոֆիլը՝ սկզբում ադմինիստրատիվ օգնականներ, ապա օգտագործողի սկրիպտներ, ապա գաղտնաբառեր միջավայրում։ Կարդացեք հրահանգները։
Ներմուծեք պրոֆիլ սեղանադիր հաճախորդի մեջ, և առաջին ձախողությունը հաճախ այն տողն է, որը հաճախորդը հրաժարվում է հարգել՝ սկրիպտի կեռ, որը նա չի գործարկի, կամ script-security արժեք, որը նա համարում է չափազանց թույլատրող։ Թիվը բարձրացնելը վերացնում է երկխոսությունը։ Բայց դա նաև ընդլայնում է, թե ինչ կարող է այդ պրոֆիլը կատարել ձեր մեքենայում, ինչը տարօրինակ բան է տալ միայն զգուշացումը փակելու համար։ Հետևեք ներմուծմանը մինչև հրահանգը, և որոշումը դառնում է շոշափելի։
Ներմուծման երկխոսությունից մինչև հրահանգ
Պրոֆիլը հրահանգներով տեքստային ֆայլ է, և հաճախորդը կարդում է դրանք նախքան որևէ թունելի գոյությունը։ up, down կամ tls-verify-ի նման հրահանգը անվանում է արտաքին ծրագիր, որը OpenVPN-ը պետք է գործարկի որոշակի պահին։ Արդյոք OpenVPN-ը պատրաստ է գործարկել այն, առանձին կարգավորում է՝ script-security անունով, և պրոֆիլը սովորաբար սահմանում է նաև այն։
Այսպիսով զգուշացումը գաղտնագրության կամ վկայագրերի մասին չէ։ Այն կոնֆիգուրացիոն ֆայլի մասին է, որը հաճախորդից խնդրում է ինչ-որ բան կատարել հոսթի վրա, և հաճախորդի մասին, որը ստուգում է՝ արդյոք նրա ընթացիկ թույլտվության մակարդակը թույլ է տալիս այդ հարցումը։
Այս փուլում երկու տարբեր ձախողություն նույն տեսքն ունեն։ Պրոֆիլը, որը պահանջում է մակարդակ, որը հաճախորդը չի տա, առաջացնում է մերժում։ Պրոֆիլը, որը պահանջում է մակարդակ, որը հաճախորդը տալիս է, բայց սկրիպտը բացակայում է, փոխարենը առաջացնում է ձախողում գործարկման պահին, և երկուսը շփոթվում են աջակցության թեմաներում։ Մեկը թույլտվության հարց է, մյուսը՝ փաթեթավորման։
Ինչ է իրականում բացում յուրաքանչյուր մակարդակ
Մակարդակ 0-ը ամբողջությամբ արգելում է արտաքին ծրագրերի կանչերը, ինչը հետևողական է այն հաճախորդի համար, որը առանց օգնության ինքն է կարգավորում իր ինտերֆեյսը, և անհետևողական՝ նրա համար, որը դիմում է օպերացիոն համակարգին։ Մակարդակ 1-ը՝ լռելյայնը, թույլատրում է ներկառուցված գործարկվող ֆայլերը, որոնք անհրաժեշտ են ինտերֆեյսի և երթուղու կարգավորմանը։ Ոչ մի մակարդակ չի գործարկում օգտագործողի տված որևէ բան։
| Level | What OpenVPN may execute | What it exposes |
|---|---|---|
| 0 | No external programs at all | Interface and route setup must not depend on helpers |
| 1 (default) | Built-in helpers such as ip, ifconfig, route or netsh | Privileged commands the platform already ships |
| 2 | Built-in helpers plus user-defined scripts | Whatever the named script does with the client's privileges |
| 3 | Everything above, plus passwords in environment variables | Credentials visible to child processes and their logs |
Մակարդակ 2-ը հետաքրքիր սահմանն է, որովհետև այն թույլատրում է օգտագործողի կողմից սահմանված սկրիպտներ։ Այդ պահից հաճախորդի արտոնությունները տարածվում են կոդի վրա, որը գուցե երբեք չեք կարդացել, կանչվում է պահերին, որոնք դուք չեք ընտրել, միջավայրում, որը պարունակում է կապի մանրամասները։ Մակարդակ 3-ը ավելի հեռու է գնում և թույլատրում է գաղտնաբառերը փոխանցել միջավայրի փոփոխականներով, այդ պատճառով ձեռնարկը նկարագրում է այն որպես հնարավոր անապահով։
Այս թվերից ոչ մեկը ուժի կարգավորում չէ։ Մակարդակ 3-ի պրոֆիլը ավելի լավ գաղտնագրում չունի, քան մակարդակ 1-ինը՝ այն պարզապես ունի ավելի մեծ գործարկման մակերես, և թունելը նույնն է։
Որոշեք, թե ինչի է արժանի պրոֆիլը
Նախ հարցրեք, թե ինչի համար է սկրիպտը, հետո՝ թե որ մակարդակն է նրան պետք։ Կեռ, որը մղում է DNS կարգավորումները կամ միացումից հետո վերանորոգում է երթուղին ինչ-որ բան գործարկելու օրինական պատճառ է։ Կեռ, որը ժամանակավոր պանակում կանչում է անծանոթ բինար ֆայլ, կանգ առնելու պատճառ է։
Սկրիպտի ուղին նույնքան կարևոր է, որքան սկրիպտը։ Հարաբերական ուղին լուծվում է այն պանակի նկատմամբ, որը հաճախորդն օգտագործում է, և գրելի պանակը մեկանգամյա ներմուծումը դարձնում է մշտական գործարկման տեղ։ Օգտագործողի կողմից չփոփոխվող պանակում բացարձակ ուղիներն այն ձևն են, որը պետք է նախընտրել։
Սկրիպտները ժառանգում են նաև հաճախորդի միջավայրը, որտեղ ապրում են հավատարմագրերը և կապի մետատվյալները։ Հենց այդ ժառանգությունն է մակարդակ 3-ը վտանգավոր դարձնում իր միջավայրը գրանցող սկրիպտի հետ համակցված, և դա է պատճառը, որ սկրիպտներով միացված հաճախորդից ախտորոշիչ արտահանումը երկրորդ հայացքի արժանի է նախքան տոմսի մեջ տեղադրվելը։ Հեռացրեք միջավայրը նախքան այն կիսելը։
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnՓոխեք մեկ բան, ապա հետևեք նաև ապամոնտաժմանը
Եթե պրոֆիլն իսկապես սկրիպտի կարիք ունի, փոխեք միայն մակարդակը և միայն այդ պրոֆիլի համար։ Գործարկեք հաճախորդը առաջին պլանում մանրամասն ելքով, որպեսզի սկրիպտի սեփական սխալները տեսանելի լինեն՝ ծառայության կառավարիչը դրանք չկուլ տա։
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
Փորձարկեք ամբողջ կյանքի ցիկլը, ոչ միայն միացումը։ Ձախողվող անջատման կեռը երթուղիները թողնում է մատնացույց անելու մեռած թունելին, ինչը ստեղծում է մեքենա, որը միացված է երևում և ոչ մի տեղ չի հասնում։ Նախքան փոփոխությունը ավարտված հայտարարելը մեկ անգամ նորից միացեք և մեկ անգամ անջատվեք, և յուրաքանչյուրից հետո ստուգեք երթուղավորման աղյուսակը։
Պահեք բնօրինակ պրոֆիլի պատճենը։ Եթե հարթակի հաճախորդը չի իրականացնում նույն սկրիպտային մոդելը, հրահանգների ջնջումը մինչև ներմուծման հաջողությունը կարող է հեռացնել այն DNS կամ երթուղու ինտեգրումը, որն անհրաժեշտ էր թունելին, և արդյունքում ստացված կապը կնույնականանա անթերի՝ ոչինչ չլուծելով։
Գրանցման ենթակա որոշումը նեղ է՝ որ սկրիպտը, որ ուղիով, որ մակարդակում թույլատրված, որ պրոֆիլի համար։ Պրոֆիլում մնացած ամեն ինչ անփոփոխ է մնում, և դա մի նախադասություն է, որը գրաքննիչը կարող է ստուգել։