Ինչու պորտերի սկանավորումը փոխվում է sudo-ով գործարկելիս
Երբ հում սոկետները հասանելի չեն, Nmap-ը լուռ փոխարինում է SYN սկանավորումը TCP connect սկանավորմամբ, ուստի root-ը և սովորական օգտատերը տարբեր ուղիներ են չափում։
Nmap-ը միշտ չէ, որ ուղարկում է այն փաթեթը, որը դուք կարծում եք՝ պահանջել եք։ Երբ հում սոկետները հասանելի չեն, այն լռելյայն SYN սկանավորումը փոխարինում է TCP connect սկանավորմամբ, ուստի սովորական օգտատիրոջով գործարկումը և sudo-ի տակ գործարկումը կարող են տարբեր հարցերի պատասխանել նույն պորտի մասին։ Արդյունքները նման են արտոնությունների խնդրի, բայց սովորաբար մեթոդի փոփոխություն են։ Մեթոդը բացահայտ դարձնելը երկու գործարկումները համեմատելու միակ միջոցն է։
Երկու զոնդ, մեկ պորտ, տարբեր կոդային ուղիներ
SYN սկանավորումն ինքն է կառուցում TCP վերնագիրը, ուղարկում այն հում սոկետից և կարդում պատասխանը ցանցից այն բանից առաջ, երբ միջուկի TCP կույտը երբևէ գրանցի ավարտված կապ։ connect սկանավորումը խնդրում է օպերացիոն համակարգին բացել սովորական սոկետ և հաղորդում է այն, ինչ connect()-ը վերադարձնում է։ Երկուսն էլ կարող են պորտը բաց անվանել, սակայն միայն մեկը թողնում է կիսաբաց փորձ, և միայն մեկն է ենթարկվում ուղարկող գործընթացին կապված սոկետի մակարդակի քաղաքականությանը։
Հում ուղին պահանջում է CAP_NET_RAW, դրա համար էլ լռելյայն սկանավորումը լուռ թուլանում է, երբ այդ հնարավորությունը բացակայում է։ Nmap-ի սեփական սկանավորման տեխնիկաների ուղեցույցը փաստագրում է փոխարինումը՝ connect սկանավորումը պահուստն է, քանի որ այն ընդհանրապես հատուկ արտոնություններ չի պահանջում։ Փոխանակումը տեղի է ունենում առանց նախազգուշացման գործարկումների մեծ մասում, և հենց դա է այն դարձնում այդքան հեշտ սխալ կարդալու համար։ Երբ իմանաք, որ պահուստը գոյություն ունի, «բաց որպես root, փակ որպես օգտատեր» այլևս չի հնչում որպես արտոնությունների սխալ և սկսում է հնչել որպես երկու տարբեր չափում։
Ինչ է sudo-ն իրականում փոխում սկանավորման մեջ
Արտոնությունների բարձրացումը վերականգնում է հում սոկետի ուղին, և դա փոխում է ավելին, քան վճիռը։ Ելքի պորտի ընտրությունը, փաթեթների ժամանակացույցը, վերահաղորդման վարքագիծը և զտված պատասխանի դասակարգման ձևը բոլորը գալիս են տարբեր կոդից։ SYN-ների արագությունը սահմանափակող միջանկյալ սարքը երկու գործարկումներին վերաբերվում է անհավասար, նույնիսկ երբ նպատակակետ հոսթը նույնն է։
Նպատակակետի կողմի մատյանագրումը նույնպես տարբերվում է։ Ավարտված ձեռքսեղմումը տեսանելի է ծառայությանը և ցանկացած սոկետային հաշվառման, մինչդեռ վերակայված կիսաբաց զոնդը հաճախ տեսանելի չէ։ Եթե գործարկումները համեմատում եք հոսթի հետ, որի մատյանները նույնպես կարդում եք, տեսած տարբերության մի մասը հենց դիտարկումն է։
Մեթոդը հաստատուն պահեք երկու գործարկումներում
Պարտադրեք նույն տեխնիկան երկու կանչերում, և համեմատությունը սկսում է ինչ-որ բան նշանակել։ -sT դրոշը բացահայտ պահանջում է connect սկանավորում, -Pn-ը հեռացնում է հոսթերի հայտնաբերումը, -n-ը հեռացնում է անունների լուծումը, և մեկ -p-ը հեռացնում է պորտերի ցանկի տարբերությունները։
nmap -sT -Pn -n -p 8443 198.51.100.77
sudo nmap -sT -Pn -n -p 8443 198.51.100.77
Փոխարինեք հասցեն և պորտը հոսթով, որը ձեզ թույլատրված է փորձարկել. վերևի փաստաթղթային միջակայքը օրինակ է, ոչ թե թիրախ։ Եթե երկու գործարկումները հիմա համընկնում են, սկզբնական տարբերությունը եկել է սկանավորման մեթոդից։ Եթե դրանք դեռ չեն համընկնում, ուրիշ բան է դասակարգում երթևեկությունը, և հաջորդ բաժինը այն տեղն է, որտեղ պետք է նայել։
Հաշվի համատեքստը միայն արտոնության դրոշ չէ
VPN տեղակայումը կարող է փաթեթները դասակարգել ըստ UID-ի, ըստ cgroup-ի կամ սոկետը բացած գործընթացին կապված կանոնի։ Այնուհետև root-ի և օգտատիրոջ երթևեկությունը դուրս է գալիս տարբեր երթուղային աղյուսակներով կամ բախվում տարբեր կանոնների հավաքածուների, և սկանավորման մեթոդի ոչ մի կարգապահություն չի հաշտեցնի դրանք։
Ուսումնասիրեք քաղաքականությունը, ոչ թե արտոնությունը։ Linux-ում nftables-ը դա արտահայտում է meta skuid-ով, իսկ iptables-ը՝ սեփականատիրոջ համընկնմամբ, և դրանցից ցանկացածը կարող է մեկ UID ուղարկել թունելով, մինչ մյուսը շարունակում է օգտագործել ֆիզիկական լռելյայն երթուղին։
sudo nft list ruleset | grep -n skuid
sudo iptables-save | grep -n uid-owner
ip rule show
ip route get 198.51.100.77
Նախքան արդյունքների համեմատումը հաստատեք զոնդը
Նախքան եզրակացություններ անելը, ապացուցեք, թե որ զոնդն է աշխատել։ Nmap-ը տեխնիկան անվանում է իր ելքի մեջ, և --reason-ը ավելացնում է յուրաքանչյուր վիճակի հետևի ապացույցը, և հենց այդ մասն է ասում ձեզ՝ ձեռքսեղմումն իրոք ավարտվե՞լ է։
nmap --reason -sT -Pn -n -p 8443 198.51.100.77
sudo nmap --reason -sS -Pn -n -p 8443 198.51.100.77
getcap "$(command -v nmap)"
capsh --print | grep -i net_raw
Երկու գործարկում, որոնք նույն վիճակի մասին հաղորդում են տարբեր պատճառներով, հակասություն չեն, և երկու գործարկում, որոնք տարբեր վիճակների մասին հաղորդում են նույն պատճառով, մատնանշում են երթուղավորումը կամ քաղաքականությունը, ոչ թե սկանավորումը։ Նպատակը, պորտը, անվանատարածքը և ժամանակացույցը պահեք նույնը, ապա փոխեք մեկ փոփոխական միաժամանակ։ Ծառայությունը root-ով գործարկելը քաղաքականության անհամապատասխանության վերանորոգումը չէ. վերանորոգումը նախատեսված քաղաքականությունը ծառայության սեփականատիրոջ միջոցով արտահայտելն է։