Ի՞նչ է dns կեղծումը: Մենք պլագին ենք գրում Microsoft DNS սերվերի համար՝ IDN կեղծիքից պաշտպանվելու համար: Ազատ ծրագրային ապահովման վրա հիմնված համակարգերի պաշտպանություն

DNS կեղծումը DNS համակարգը խաբելու պարզ մեթոդ է, DNS անվան լուծման բլոկ՝ օգտագործելով կեղծ տեղեկատվություն, որը ստացվել է հոսթից, որը պատասխանատու չէ այդ տեղեկատվության համար: Յուրաքանչյուր DNS փաթեթ ունի 16-բիթանոց id համար, id համարը DNS փաթեթի այն մասն է, որը թույլ է տալիս նույնականացնել յուրաքանչյուր DNS փաթեթ, որն անցնում է 53 պորտով, և հարցումը կարող է կատարվել նաև մեկից ավելի անգամ: ID-ն տարբեր dns հարցումների միջև տարբերելու միակ միջոցն է և կապված է այն բանի հետ, թե ինչ են օգտագործում dns սերվերները՝ որոշելու համար, թե որն էր սկզբնական հարցումը: BIND-ի դեպքում այս թիվը յուրաքանչյուր հարցման համար ավելանում է 1 մակարդակով: TCP seq id-ի նման հարձակումը կարող է իրականացվել, թեև դա ավելի դժվար է: Նույնիսկ եթե BIND-ը չի կարող քեշավորել ձեր ուղարկած տեղեկատվությունը, այն կուղարկի պատասխանը սկզբնական հոսթին: Այն դեպքում, երբ ircd-ն PTR հարցում է կատարում՝ ի պատասխան դրան միացող հոսթի, պատասխանի փաթեթը կարող է ձևակերպվել այնպես, որ պարունակի Լրացուցիչ տեղեկություն, որտեղից ircd-ը կկատարի ներքին քեշավորում։ Այս գրոհը պահանջում է արմատային մուտք dns սերվերի վրա, որը պատասխանատու է dns տեղեկատվության in-addr. arpa բլոկի համար: Բացի այդ, ircd-ը կարող է քեշավորել միայն մեկ տիրույթ: Կա ևս մեկ հարձակում, քանի որ id-ը բաղկացած է 16 բիթից: Օգտագործողը կարող է անցնել ամբողջը: idspace: Ձեր dns-ը կեղծելու համար, ասենք DALNet"e-ում, դուք պետք է ուղարկեք 65000 գեներացված հարցումներ ns սերվերին, հենց որ համակարգիչը պատասխան ստանա հարցումին, դուք պետք է կարդացեք փաթեթը, և դրա մեջ գրվելու է ճիշտ id: ID-ն ստանալուն պես պետք է գտնել ցանկացած «փաթեթ»: ստեղծման գործիք DNS փաթեթ ստեղծելու համար: Մնում է միայն կեղծել DNS փաթեթները, ուղարկել դրանք ns. dal.net և ստանալ կեղծ TCP կապ:

Խնդրի ընդհանուր շարադրանքը Համացանցի արագ աճի հետ կապված՝ պաշտպանելու խնդիրը տեղեկատվական ռեսուրսներդառնում են ավելի կարևոր: Եթե ​​դուք միացված եք ինտերնետին, ձեր համակարգը կարող է հարձակման ենթարկվել: Եկեք նայենք, թե ինչպես է աշխատում DNS-ը: Սեգմենտից դուրս հասցեավորումն իրականացվում է IP հասցեների միջոցով, սակայն սերվերների մուտքը սովորաբար իրականացվում է դոմենային անունների միջոցով: Այս առումով ստեղծվել է դոմենային անունները IP հասցեների փոխակերպելու (քարտեզագրման) համակարգ՝ DNS սերվերներ (Domain Name System): Այս համակարգը պատասխանատու է հեռավոր հոսթի IP հասցեն իր անունով գտնելու համար: DNS համակարգի գործառնական սկզբունքը հետևյալն է. հեռավոր հոսթը հատուկ հարցում է ուղարկում մոտակա DNS սերվերի IP հասցեին, որը նշում է սերվերի անունը, որի IP հասցեն պետք է գտնել: Հարցում ստանալուց հետո DNS սերվերը որոնում է իր տվյալների բազայում պահանջվող տիրույթի անվան առկայության համար: Եթե ​​անունը գտնվի, DNS սերվերը պատասխան է տալիս՝ նշելով որոնված IP հասցեն: Եթե ​​հարցումում նշված անունը չի գտնում DNS սերվերը իր անվան տվյալների բազայում, DNS հարցումը DNS սերվերի կողմից ուղարկվում է արմատային DNS սերվերներից մեկին, և այս պարբերությունում նկարագրված ընթացակարգը կրկնվում է մինչև անունը գտնվի: Եկեք դիտարկենք կեղծ DNS սերվերի աշխատանքի ընդհանուր սխեման. սպասել DNS հարցմանը; ստանալով DNS հարցում, դրանից հանելով անհրաժեշտ տեղեկատվություն և ցանցի միջոցով կեղծ DNS պատասխան փոխանցելով հարցում կատարող հոսթին իրական DNS սերվերի անունից (IP հասցեից), որը ցույց է տալիս կեղծ DNS սերվերի IP հասցեն: ; հոսթից փաթեթ ստանալու դեպքում, փաթեթի IP վերնագրում դրա IP հասցեն փոխելով կեղծ DNS սերվերի IP հասցեի և փաթեթը սերվերին փոխանցելու դեպքում (այսինքն՝ կեղծ DNS սերվերը աշխատում է սերվերի հետ. իր անունից); սերվերից փաթեթ ստանալու դեպքում, փաթեթի IP վերնագրում իր IP հասցեն փոխելով կեղծ DNS սերվերի IP հասցեով և փաթեթը փոխանցելով հոսթին (հոսթի համար կեղծ DNS սերվերը իրական սերվերն է. )

Անհրաժեշտ պայմանԱյս հարձակման տարբերակի իրականացումը DNS հարցման ընդհատումն է: Դա հնարավոր է միայն այն դեպքում, եթե հարձակվողը գտնվում է կամ հիմնական տրաֆիկի ճանապարհին կամ իրական DNS սերվերի հատվածում: Ցանցում հարձակվողի գտնվելու վայրի այս պայմաններից մեկի կատարումը դժվարացնում է նման հեռահար հարձակումը գործնականում (հարձակվողը, ամենայն հավանականությամբ, չի կարողանա մուտք գործել DNS սերվերի հատված, և առավել եւս՝ միջսեգմենտային հաղորդակցման ալիք։ ) Այնուամենայնիվ, եթե այս պայմանները կատարվեն, հնարավոր է ինտերնետում միջսեգմենտային հեռահար հարձակում իրականացնել: Այս հարձակման արդյունքը IP հասցեի և դոմենի անվան միջև պարտադրված համապատասխանության ներմուծումն է քեշի մեջ: DNS սերվերներ. Հաջող հարձակման արդյունքում հյուսիսում գտնվող բոլոր DNS օգտվողները սխալ տեղեկատվություն կստանան տիրույթի անունների և IP հասցեների մասին: Այս հարձակումը բնութագրվում է միևնույն տիրույթի անունով մեծ թվով DNS փաթեթներով: Դա պայմանավորված է DNS փոխանակման որոշ պարամետրեր ընտրելու անհրաժեշտությամբ:

Ինչպես ցույց է տալիս գոյություն ունեցող պաշտպանական տեխնիկայի վերլուծությունը, հարձակումներին կարելի է հակազդել օգտագործելով հետևյալ մեթոդները. DNS-ն անցնելով TCP-ին UDP-ից TCP տեղափոխումը որոշակիորեն կդանդաղեցնի համակարգը: TCP-ն օգտագործելիս անհրաժեշտ է ստեղծել վիրտուալ կապ, և հարկ է նաև հաշվի առնել, որ վերջնական ցանցի ՕՀ-ն նախ ուղարկում է DNS հարցում՝ օգտագործելով UDP արձանագրությունը, և եթե նրանք ստանում են հատուկ պատասխան DNS սերվերից, ապա ցանցային ՕՀ-ն։ կուղարկի DNS հարցում՝ օգտագործելով TCP: TCP արձանագրության օգտագործումը կդժվարացնի փաթեթների կեղծման հարձակումը, բայց կդանդաղեցնի գործողությունը: DNS տրաֆիկի վերլուծությամբ: Դուք կարող եք հակազդել հարձակումներին՝ վերլուծելով երթեւեկությունը: Կեղծ IP հասցեներով կեղծ փաթեթներ անընդհատ ուղարկվում են DNS սերվեր: Եթե ​​ստացված կեղծ փաթեթը համապատասխանում է հարցումի արժեքներին, ապա կեղծ IP-ն ընդունվում է որպես ճշմարիտ: Եթե ​​սերվերից որևէ փաթեթ չի գաղտնալսվում, ապա հարձակումը բնութագրվում է նույն անունով մեծ թվով DNS փաթեթներով: Դա պայմանավորված է DNS փոխանակման որոշ պարամետրեր ընտրելու անհրաժեշտությամբ: Վերլուծելով DNS տրաֆիկը, դուք կարող եք անտեսել նման փաթեթները՝ IP հասցեի կեղծումից խուսափելու համար:

Եզրակացություններ Ուսումնասիրելով DNS սերվերի աշխատանքը, դուք կարող եք դա տեսնել Ընթացիկ տարբերակըբավականին ոչ օպտիմալ է և խոցելի է հարձակումների համար տարբեր տեսակներ. Հարձակումներին կարելի է հակազդել՝ վերլուծելով DNS տրաֆիկը կամ DNS-ի գործարկումը UPD-ից TCP-ի փոխարկելով: Մեթոդներից ոչ մեկը լիարժեք պաշտպանություն չի ապահովում հարձակումներից, երկու մեթոդներն էլ միայն դժվարացնում են հարձակումը: Երկու մեթոդներն էլ պահանջում են լրացուցիչ ռեսուրսներ սերվերից: DNS սերվերի աշխատանքը TCP-ին փոխանցելու դեպքում սերվերների միջև փոխանակման ժամանակը նույնպես մեծանում է, քանի որ UDP արձանագրությունն ավելի արագ է, քան TCP արձանագրությունը: Վրա այս պահին, հակազդեցության առաջարկվող մոդելներն ամենաարդյունավետն են, և նպատակահարմար է օգտագործել դրանք համակցված՝ առավելագույն հնարավոր անվտանգության հասնելու համար։

DNS թունավորումը կամ DNS կեղծումը կիբերհարձակման տեսակ է, որն օգտագործում է համակարգի խոցելիությունը DNS սերվերում՝ օրինական սերվերներից երթևեկությունը կեղծ սերվերներին վերահղելու համար:

Ինչպես է աշխատում DNS թունավորումը կամ DNS կեղծումը

DNS քեշի թունավորման ծածկագիրը հաճախ հանդիպում է սպամ հաղորդագրություններում ուղարկված URL-ներում: Այս հաղորդագրություններում հարձակվողները փորձում են վախեցնել օգտատերերին և դրանով իսկ ստիպել նրանց սեղմել կցված հղման վրա, ինչը, իր հերթին, կվարակի նրանց համակարգիչը։ Բաններներ և պատկերներ, ինչպես ներդիրում էլ, իսկ կասկածելի կայքերում կարող են նաև վերահղել օգտատերերին այս կոդը: Վարակվելուց հետո համակարգիչները օգտատերերին կուղղորդեն կեղծ կայքեր, որոնք ընդօրինակում են բնօրինակ վեբ էջերը՝ այդպիսով ենթարկելով նրանց այնպիսի ռիսկերի, ինչպիսիք են վարակը: լրտեսող ծրագրեր, keyloggers կամ worms.

Ռիսկերը

DNS թունավորումն առաջացնում է տարբեր ռիսկեր՝ սկսած տվյալների գողությունից: Բանկերի և հանրաճանաչ առցանց խանութների կայքերը հեշտությամբ փոխարինվում են, ինչը նշանակում է, որ ցանկացած գաղտնաբառ ԿՐԵԴԻՏ քարտկամ անձնական տվյալները կարող են վտանգված լինել: Եվ եթե ՏՏ անվտանգության ծառայություններ մատուցողների կայքերը կեղծվեն, օգտատիրոջ համակարգիչը կարող է ենթարկվել լրացուցիչ ռիսկերի, ինչպիսիք են վիրուսներով կամ տրոյաններով վարակվելը, քանի որ անվտանգության համակարգերը օրինական թարմացումներ չեն ստանա: Վերջապես, DNS քեշի թունավորումը լուծելը շատ դժվար է, քանի որ վարակված սերվերի մաքրումը չի վերացնում խնդիրը, և վտանգված սերվերին միացող համակարգիչները մաքրելը կհանգեցնի նրանց նորից վարակվելու: Անհրաժեշտության դեպքում օգտվողները կարող են լուծել խնդիրը՝ մաքրելով իրենց DNS քեշը:

DNS-ի թունավորումը կանխելու համար օգտատերերը պետք է խուսափեն անհայտ հղումների վրա սեղմելուց և պարբերաբար ստուգեն իրենց համակարգիչը չարամիտ ծրագիր. Միշտ դա արեք՝ օգտագործելով ձեր համակարգչում տեղադրված ծրագիրը, և ոչ թե առցանց տարբերակը, որը նույնպես կարող է կեղծվել:

IDN-ի կեղծումը ընտրվածին «նման» տիրույթի անունների ստեղծումն է, որը սովորաբար օգտագործվում է օգտագործողին ստիպելու համար հետևել հարձակվողի ռեսուրսի հղմանը: Հաջորդը, եկեք նայենք հարձակման ավելի կոնկրետ տարբերակին:

Պատկերացնենք, որ հարձակման ենթարկված ընկերությանը պատկանում է organisation.org տիրույթը, և այս ընկերության ներսում օգտագործվում է portal.organization.org ներքին ռեսուրսը։ Հարձակվողի նպատակն է ստանալ օգտատիրոջ հավատարմագրերը, և դա անելու համար նա հղում է ուղարկում էլեկտրոնային փոստի կամ ընկերության կողմից օգտագործվող մեսենջերի միջոցով:

Նման հաղորդագրություն ստանալով՝ մեծ է հավանականությունը, որ չնկատեք, որ հղումը սխալ տեղ է տանում։ Հղման վրա սեղմելուց հետո կպահանջվի մուտք/գաղտնաբառ, և տուժողը, կարծելով, որ գտնվում է ներքին ռեսուրսի վրա, մուտքագրելու է իր տվյալները։ հաշիվ. Հարձակվողի շանսերը հատկապես մեծ են, եթե նա արդեն թափանցել է պարագիծ՝ վտանգելով ցանկացած աշխատակցի համակարգը և այժմ պայքարում է համակարգի ադմինիստրատորի արտոնությունների համար։

Այստեղ անհնար է բացարձակ «անխոհեմություն» գտնել, բայց դուք կարող եք փորձել կասեցնել այս հարձակումը անվան լուծման փուլում՝ DNS հարցման միջոցով:

Պաշտպանության համար մենք պետք է հաջորդաբար հիշենք այն անունները, որոնք հանդիպում են գաղտնալսված DNS հարցումներում: Ընկերությունն օգտագործում է իր ներքին ռեսուրսները, ինչը նշանակում է, որ մենք արագ կգտնենք այն portal.organization.org-ի հարցումով: Հենց որ մենք հանդիպենք նախկինում հանդիպածի «նման» անունին, մենք կարող ենք փոխարինել DNS պատասխանը՝ հարձակվողի IP հասցեի փոխարեն սխալ վերադարձնելով:
Ի՞նչ ալգորիթմներ կարող են լինել «նմանությունը» որոշելու համար:

  • UTS39 Confusable Detection (http://www.unicode.org/reports/tr39/#Confusable_Detection) Unicode-ը ոչ միայն արժեքավոր խորհրդանիշների աղյուսակ է, այլև ստանդարտների և առաջարկությունների մի խումբ: UTS39-ը սահմանում է unicode տողերի նորմալացման ալգորիթմ, որի դեպքում տողերը, որոնք տարբերվում են հոմոգլիֆներով (օրինակ՝ ռուսերեն «a» և լատիներեն «a») կկրճատվեն նույն ձևով։
  • Բառեր, որոնք տարբերվում են ներքին տառերի վերադասավորմամբ: Բավականին հեշտ է շփոթել organisation.org-ը և orgainzation.org-ը
  • Առաջին մակարդակի տիրույթի փոխարինում: Անվան առաջին մակարդակը սովորաբար որևէ նշանակություն չունի, և «կազմակերպություն» տեսնելով ընկերության աշխատակիցը կարող է անտեսել .org կամ .net տարբերությունը, թեև այստեղ հնարավոր են բացառություններ։
Ամենայն հավանականությամբ, կորպորատիվ սերվերը չի կապվի, որը ստանդարտ է վեբ հոստերի կամ պրովայդերների համար, այլ microsoft dns սերվեր՝ ակտիվ գրացուցակի լայն կիրառման պատճառով։ Եվ առաջին խնդիրը, որը ես հանդիպեցի Microsoft DNS սերվերի համար զտիչ գրելիս, այն էր, որ ես չկարողացա գտնել API՝ DNS հարցումները զտելու համար: Այս խնդիրը կարող է լուծվել տարբեր ձևերով, ես ընտրեցի dll ներարկում և IAT կեռիկ վարդակից api-ի համար:

Մեթոդաբանությունը հասկանալու համար անհրաժեշտ կլինի PE ձևաչափի իմացություն, ավելի մանրամասն կարող եք կարդալ, օրինակ. Գործարկվող ֆայլը բաղկացած է վերնագրերից, բաժինների աղյուսակից և հենց բաժիններից: Բաժիններն իրենք տվյալների բլոկ են, որոնք բեռնիչը պետք է հիշի հարաբերական հասցեով (Relative Virtual Address - RVA), և բոլոր ռեսուրսները, կոդը և այլ տվյալները պարունակվում են բաժիններում: Նաև վերնագրի ներսում կան հղումներ (RVA) դեպի մի շարք աղյուսակներ, որոնք անհրաժեշտ են հավելվածի աշխատանքի համար։ Այս հոդվածի նպատակների համար երկուսը կարևոր կլինեն՝ ներմուծման աղյուսակը և արտահանման աղյուսակը։ Ներմուծման աղյուսակը պարունակում է գործառույթների ցանկ, որոնք անհրաժեշտ են հավելվածի աշխատանքի համար, բայց գտնվում են այլ ֆայլերում: Արտահանման աղյուսակը «հետընթաց» աղյուսակ է, որը պարունակում է գործառույթների ցանկ, որոնք արտահանվում են այդ ֆայլից, կամ արտահանման վերահասցեավորման դեպքում՝ ֆայլի անվանումը և կախվածությունը լուծելու գործառույթի անվանումը:

Մենք կկատարենք dll-ի ներարկումն առանց ձանձրալի CreateRemoteThread-ի: Ես որոշեցի օգտագործել PE արտահանման վերահասցեավորում. սա վաղուց հայտնի տեխնիկա է, երբ ցանկալի գործընթացում բեռնելու համար գրացուցակում ստեղծվում է dll՝ exe ֆայլով, որի անունը հավասար է ներմուծման ցանկացած dll-ի անվանմանը: exe ֆայլի աղյուսակը (հիմնականը չօգտագործել HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\KnownDLLs): Ստեղծված dll-ում արտահանման աղյուսակը թիրախային dll-ից պատճենվում է, բայց արտահանվող ֆունկցիայի կոդի ցուցիչի փոխարեն պետք է գրել RVA առաջընթաց տողի վրա, ինչպիսին է «endpoint!sendto»: Microsoft dns սերվերն ինքնին ներդրված է որպես ծառայություն HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\DNS, որը գտնվում է %systemroot%\system32\dns.exe-ում:

Վերջնական ներարկման ալգորիթմը DNS սերվերում կլինի հետևյալը.

  • Ստեղծեք գրացուցակ %systemroot%\system32\dnsflt (ցանկացած այլ գրացուցակ հնարավոր է, անհրաժեշտ չէ տեղադրել գրացուցակը system32-ում):
  • Պատճենեք %systemroot%\system32\dnsapi.dll այնտեղ - սա այն dll-ն է, որտեղից dns.exe-ն ինչ-որ բան ներմուծում է, կարող եք ընտրել ցանկացած այլ «անհայտ dll»:
  • Վերանվանեք պատճենված dll-ը endpoint.dll-ի - մենք կօգտագործենք այս անունը առաջի տողում:
  • Մենք վերցնում ենք մեր ներարկված dll-ը և ավելացնում ենք ճիշտ արտահանման աղյուսակը, պատճենում ենք մեր dll-ը %systemroot%\system32\dnsflt-ում:
  • Ռեեստրի բանալի HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\DNS փոխեք նոր երկուական հասցեն ImagePath %systemroot%\system32\dnsflt\dns.exe-ում:
  • Ստեղծեք սիմհղում %systemroot%\system32\dnsflt\dns.exe-ից մինչև %systemroot%\system32\dns.exe
Ինչու՞ վերջին քայլը: Փաստն այն է, որ Windows-ն ունի ներկառուցված firewall և, ըստ լռելյայն, in windows սերվերՄիայն %systemroot%\system32\dns.exe հավելվածն իրավունք ունի լսել պորտ 53: Եթե ​​փորձեք այն գործարկել այլ գրացուցակից, դուք ցանցի մուտքի իրավունք չեք ունենա: Ինչու ես նույնիսկ պատճենեցի այն: Որպեսզի նվազագույնի հասցվի ազդեցությունը ամբողջ համակարգի վրա և չդիպչի օրիգինալ dnsapi.dll-ին: Պարզվում է, որ եթե գիտեք, թե ինչպես ստեղծել սիմհղում դեպի հավելված, կարող եք ձեռք բերել դրա ցանցային իրավունքները: Լռելյայնորեն, միայն ադմինիստրատորներն ունեն սիմհղումներ ստեղծելու իրավունքներ, բայց բավականին զարմանալի է բացահայտել, որ օգտատիրոջը սիմհղումներ ստեղծելու իրավունք տալով, դուք նրան հնարավորություն եք տալիս շրջանցել ներկառուցված firewall-ը:

DllMain-ից գործընթացում բեռնելուց հետո կարող եք ստեղծել թեմա և ստեղծել ընդհատում: Ի շատ պարզ դեպքմեր dns ծառայությունը հաճախորդին կհայտնի անվան IP հասցեն՝ ուղարկելով UDP փաթեթ 53 նավահանգստից sendto ֆունկցիայի միջոցով ws2_32.dll-ից: Ստանդարտը ենթադրում է, որ TCP պորտը 53-ը կարող է օգտագործվել, եթե պատասխանը չափազանց մեծ է, և ակնհայտորեն, sendto-ի անջատումն այս դեպքում անօգուտ կլինի: Այնուամենայնիվ, tcp-ով գործը հնարավոր է կարգավորել նմանատիպ ձևով, չնայած այն ավելի աշխատատար է: Առայժմ ես ձեզ կասեմ UDP-ի ամենապարզ դեպքը: Այսպիսով, մենք գիտենք, որ dns.exe-ի կոդը կներմուծի sendto ֆունկցիան ws2_32.dll-ից և այն կօգտագործի DNS հարցումին պատասխանելու համար: Կան նաև բավականին շատ գործառույթներ, որոնք կարող են ընդհատել տարբեր ճանապարհներ, դասականը splicing-ն է, երբ իր ֆունկցիայի մեջ առաջին sendto հրահանգները փոխարինվում են jmp-ով, իսկ ավարտից հետո անցում է կատարվում նախկինում պահպանված sendto հրահանգներին և այնուհետև sendto ֆունկցիայի ներսում։ Splicing-ը կաշխատի նույնիսկ այն դեպքում, եթե GetProcAddress-ն օգտագործվում է sendto կանչելու համար, այլ ոչ թե ներմուծման աղյուսակ, բայց եթե օգտագործվում է ներմուծման աղյուսակ, ապա ավելի հեշտ է օգտագործել IAT կեռիկը միացման փոխարեն: Դա անելու համար դուք պետք է գտնեք ներմուծման աղյուսակը ներբեռնված dns.exe պատկերում: Աղյուսակն ինքնին ունի որոշակի շփոթեցնող կառուցվածք, և մանրամասների համար դուք պետք է գնաք PE ձևաչափի նկարագրությանը:

Հիմնական բանը այն է, որ պատկերը բեռնելու գործընթացում համակարգը ներմուծման աղյուսակում գրելու է ցուցիչ դեպի sendto ֆունկցիայի սկիզբը: Սա նշանակում է, որ sendto զանգը ընդհատելու համար պարզապես անհրաժեշտ է ներմուծման աղյուսակում սկզբնական sendto-ի հասցեն փոխարինել ձեր ֆունկցիայի հասցեով:

Այսպիսով, մենք ստեղծեցինք գաղտնալսում և սկսեցինք ստանալ տվյալներ: Sendto ֆունկցիայի նախատիպն ունի հետևյալ տեսքը.

Int sendto(_In_ SOCKET s, _In_ const char *buf, _In_ int len, _In_ int flags, _In_ const struct sockaddr *to, _In_ int tolen);
Եթե ​​s-ը 53-րդ պորտի վարդակից է, ապա buf ցուցիչը կպարունակի dns-ի չափի len պատասխան: Ձևաչափն ինքնին նկարագրված է RFC1035-ում, ես համառոտ նկարագրելու եմ, թե ինչ է պետք անել, որպեսզի հասնենք հետաքրքրող տվյալներին:

Ստանդարտում հաղորդագրության կառուցվածքը նկարագրված է հետևյալ կերպ.

Վերնագրում սկսած անհրաժեշտ տեղեկատվությունհաղորդագրության տեսակը, սխալի կոդը և տարրերի քանակը բաժիններում: Վերնագիրն ինքնին այսպիսի տեսք ունի.

Կառուցվածք DNS_HEADER ( uint16_t id; // նույնականացման համարը uint8_t rd: 1; // ցանկալի ռեկուրսիա uint8_t tc: 1; // կրճատված հաղորդագրություն uint8_t aa: 1; // հեղինակավոր պատասխանի uint8_t օպերատիվ կոդը՝ 4; // qr: uint8_ հաղորդագրության նպատակը 1; // հարցում/պատասխանի դրոշ uint8_t կոդ՝ 4; // պատասխանի կոդը uint8_t cd՝ 1; // ստուգում է անջատված uint8_t գովազդը՝ 1; // վավերացված տվյալները uint8_t z: 1; // դրա z! վերապահված uint8_t ra: 1 ; // հասանելի ռեկուրսիա uint16_t q_count; // հարցերի մուտքերի քանակը uint16_t ans_count; // պատասխանների մուտքերի քանակը uint16_t auth_count; // հեղինակային մուտքերի քանակը uint16_t add_count; // ռեսուրսների մուտքերի քանակը );
Հարցերի բաժինը պետք է ապամոնտաժվի՝ պատասխանին հասնելու համար: Բաժինն ինքնին բաղկացած է վերնագրում նշված բլոկների քանակից (q_count): Յուրաքանչյուր բլոկ բաղկացած է անունից, տեսակից և հարցումների դասից: Անունը կոդավորված է որպես տողերի հաջորդականություն, որոնցից յուրաքանչյուրը սկսվում է տողի երկարությամբ բայտով: Վերջում կա զրոյական երկարությամբ շարան։ Օրինակ, homedomain2008.ru անունը կունենա հետևյալ տեսքը.

Պատասխաններ բաժինը նման տեսք ունի՝ բլոկը բաղկացած է անունից, տեսակից, դասից, ttl-ից և լրացուցիչ տվյալներից: IP հասցեն կպարունակվի հավելումում: տվյալները։ Մեկ այլ դժվարություն է առաջանում անունը վերլուծելիս. Ըստ երևույթին, հաղորդագրության չափը նվազեցնելու համար, պիտակի երկարության փոխարեն, կարող եք հղում գտնել տվյալների այլ տարածքի: Այն կոդավորվում է հետևյալ կերպ. եթե երկարության 2 ամենակարևոր բիթերը հավասար են 11-ի, ապա հաջորդ բայթը, ինչպես նաև երկարության ամենանվազ նշանակալի բիթերը, պետք է մեկնաբանվեն որպես բայթերով օֆսեթ՝ բայթերի սկզբի համեմատ։ հաղորդագրություն. Անվան հետագա վերլուծությունը պետք է կատարվի՝ անցնելով այս օֆսեթը:

Այսպիսով, մենք ընդհատել ենք անհրաժեշտ API-ն, վերլուծել ենք DNS-ի պատասխանը, այժմ մենք պետք է որոշում կայացնենք՝ հետագայում բաց թողնել այս պատասխանը կամ վերադարձնել սխալ: Յուրաքանչյուր անվան համար, որը դեռ չկա տվյալների բազայում, պատասխանից պետք է ստուգել՝ արդյոք այն «կասկածելի է», թե ոչ:
Մենք «կասկածելի» կհամարենք այն անունները, որոնց համար Unicode Technical Standard tr39-ի կմախքի ֆունկցիայի արդյունքը համընկնում է տվյալների շտեմարանի որևէ անունի արդյունքի հետ, կամ այն ​​անունները, որոնք տարբերվում են տվյալների բազայում առկաներից՝ ներքին տառերը վերադասավորելով։ . Ստուգումներ իրականացնելու համար մենք կպահենք 2 աղյուսակ։ Առաջինը բաղկացած կլինի տվյալների բազայի բոլոր անունների կմախքի արդյունքներից, երկրորդ աղյուսակում մենք կգրենք տողերը, որոնք ստացվել են տվյալների շտեմարանի տողերից՝ յուրաքանչյուր պիտակից հեռացնելով առաջին և վերջին նիշը, բացառությամբ առաջին մակարդակի, իսկ հետո տեսակավորելով մնացածը։ յուրաքանչյուր պիտակի նիշերը: Հիմա, եթե երկու աղյուսակներից մեկում նոր անուն է ներառված, ապա մենք դա համարում ենք կասկածելի։

Կմախքի ֆունկցիայի նպատակն է որոշել երկու տողերի նմանությունը, դրա համար յուրաքանչյուր տողի համար նիշերը նորմալացվում են: Օրինակ, Xlœ-ը կվերածվի Xloe-ի, և այդպիսով, համեմատելով ֆունկցիայի արդյունքը, կարող եք որոշել unicode տողերի նմանությունը։

Վերոնշյալի իրականացման օրինակ կարելի է գտնել github-ում:
Ակնհայտ է, որ ուրվագծված լուծումը գործնականում չի կարող ապահովել նորմալ պաշտպանություն, քանի որ գաղտնալսման հետ կապված աննշան տեխնիկական խնդիրներից բացի, ավելի մեծ խնդիր կա «նման» անունների հայտնաբերման հետ կապված: Լավ կլիներ կարգավորել.

  • Փոխակերպումների և հոմոգլիֆների համակցություններ.
  • Կմախքի կողմից հաշվի չառնված նիշերի ավելացում/փոխարինում:
  • UTS tr39-ը չի սահմանափակվում միայն կմախքով, դուք կարող եք նաև սահմանափակել նիշերի հավաքածուները մեկ պիտակի մեջ:
  • Ճապոնական ամբողջ լայնությամբ կետ և այլ պիտակների բաժանարար:
  • Եվ նաև այնպիսի հրաշալի բաներ, ինչպիսիք են

Գաղտնի տվյալներին կամ բանկային հաշիվներին հասանելիություն ստանալու համար ինչ-որ մեկին անձնավորելու մարտավարությունը հաջողությամբ կիրառվում է ոչ միայն իրական աշխարհում հանցագործների, այլև վիրտուալ տարածքում նրանց գործընկերների կողմից: Այս պրակտիկան կոչվում է խարդախություն. կոլեկտիվ կատեգորիա, որը ներառում է IP հասցեների կեղծման (վստահելի աղբյուրի IP հասցեի միջոցով հաղորդագրություններ համակարգիչներին ուղարկելու), էլփոստի կեղծման (ճշմարիտ ուղարկողին քողարկելու համար տառերի վերնագրի կեղծում) և DNS կեղծման հասկացությունները ( փոխելով DNS սերվերի կարգավորումները՝ դոմենի անունը հարձակվողների IP հասցեին վերահղելու համար):

Ինչպե՞ս է աշխատում խարդախությունը:

Խաբեբայությունը այլ անձին անձնավորելու մեթոդ է՝ ցանցին կամ կոնկրետ օգտագործողին խաբելու նպատակով՝ տեղեկատվության աղբյուրի հավաստիության նկատմամբ վստահություն սերմանելու նպատակով: Օրինակ, հաքերները, էլեկտրոնային փոստի կեղծման միջոցով, կարող են մոլորեցնել օգտվողին ուղարկողի ինքնության վերաբերյալ և մուտք ունենալ դեպի գաղտնի տվյալները: Կամ նրանք կարող են փորձել օգտագործել IP և DNS հարցումների կեղծման տեխնիկան՝ խաբելու օգտատիրոջ ցանցը և վերահղելու նրան խարդախ կայքեր, որոնք դիմակավորված են որպես իրական, ինչի արդյունքում օգտատիրոջ համակարգիչը վարակվում է:

Ինչպե՞ս ճանաչել կեղծիքը:

Էլփոստի կեղծումը ճանաչելու ամենադյուրին ճանապարհն այն է, որ ուղղակի թիրախը հենց օգտատերն է: Ցանկացած էլփոստի հաղորդագրություն Նամակը, որը օգտատիրոջից անձնական տեղեկություններ է խնդրում, կարող է խարդախության փորձ լինել, հատկապես, եթե այն պահանջում է հավատարմագրեր: Հիշեք, որ ոչ մի հեղինակավոր մասնավոր կամ պետական ​​կազմակերպություն այս կերպ չի պահանջում անձնական տվյալներ: Ուշադրություն դարձրեք ուղարկողի հասցեին՝ համոզվելու համար, որ այն օրինական է: Այնուամենայնիվ, օգտատերը գրեթե երբեք չի իմանա, որ ինքը դարձել է IP կամ DNS խարդախության զոհ, չնայած մանրամասներին և կայքի սովորական վարքագծի փոփոխություններին մեծ ուշադրություն դարձնելու սովորությունը կարող է չափազանց օգտակար լինել: Եթե ​​կայքը կամ նրա վարքագիծը ամենաչնչին կասկածի տեղիք է տալիս, ապա ավելի լավ է հրաժարվել պլանավորված գործողությունից՝ տվյալների պահպանման և պահպանման համար։ ֆինանսական ռեսուրսներապահովության մեջ։

Ինչպե՞ս վերացնել կեղծիքը:

Խաբեությունը ներառում է իրական աղբյուրի քողարկումը, ուստի այն այնքան էլ հեշտ չէ «վերացնել»։ Դուք կարող եք պաշտպանվել միայն առողջ բանականությանը հետևելով և դիտարկելով հիմնական կանոններըանվտանգ աշխատանք ցանցում, օրինակ՝ ոչ մի դեպքում չկիսելով ձեր անձնական տվյալները էլեկտրոնային փոստով: փոստ, նույնիսկ եթե ուղարկողի հեղինակությունը կասկածի տակ չէ:

Ինչպես կանխել կեղծիքը
  • Մի պատասխանեք հաղորդագրություններին, որոնք խնդրում են ուղարկել ձեր անձնական կամ մուտքի տվյալները
  • Ուշադիր ստուգեք ուղարկողի հասցեն
  • Ուշադրություն դարձրեք տարօրինակ վարքագծին կամ ձեզ ծանոթ կայքերի մանրամասների տարբերություններին
Պաշտպանեք ձեզ կեղծիքից

Մի կողմից, խարդախությունից պաշտպանելը կարող է լինել նույնքան պարզ, որքան անվտանգ առցանց զննարկման հիմնական սկզբունքներին հետևելը: Այնուամենայնիվ, շատ ավելին կարող եք անել ձեր սեփական անվտանգությունն ապահովելու համար: Առաջին հերթին, դուք կարող եք վստահել ձեր ԱՀ-ի և դրա վրա պահվող տվյալների պաշտպանությանը հզոր հակավիրուսային լուծում, ինչպիսին է Avast-ի կողմից մշակված մեկը, որը հուսալիորեն պաշտպանում է խարդախ կայքերից և արգելափակում է վիրուսները, որոնք փորձում են ներթափանցել ձեր ցանց:

DNS կեղծում ( DNS կեղծում)

DNS համակարգ ( Դոմեյն Անվան Համակարգ) նորադարձներ Տիրույթի անունը(օրինակ՝ www.test.com) իր IP հասցեին (օրինակ՝ 192.168.0.1) և հակառակը: Այս հարձակումն օգտագործում է տեխնոլոգիա՝ զոհի DNS հարցումներին կեղծ պատասխաններ ուղարկելու համար: Հարձակումը հիմնված է երկու հիմնական մեթոդների վրա.

DNS ID-ի կեղծում

DNS արձանագրության փաթեթի վերնագիրը պարունակում է նույնականացման դաշտ, որը համապատասխանում է հարցումներին և պատասխաններին: DNS ID-ի կեղծման նպատակն է իր պատասխանն ուղարկել DNS հարցմանը, նախքան իրական DNS սերվերի պատասխանը: Դա անելու համար դուք պետք է գուշակեք հարցման ID-ն: Տեղայնորեն սա իրականացվում է պարզապես լսելով ցանցային տրաֆիկ. Այնուամենայնիվ, այս առաջադրանքը հեռակա կարգով կատարելը շատ ավելի դժվար է: Կան տարբեր մեթոդներ.

    ստուգելով բոլոր առկա նույնականացման դաշտի արժեքները: Շատ գործնական չէ, քանի որ հնարավոր արժեքների ընդհանուր թիվը 65535 է (դաշտի չափը 16 բիթ);

    ուղարկելով մի քանի հարյուր DNS հարցումներ ճիշտ հերթականությամբ: Ակնհայտ է, որ այս մեթոդը այնքան էլ հուսալի չէ.

    գտնելով սերվեր, որը առաջացնում է կանխատեսելի նույնացուցիչներ (օրինակ՝ 1-ով ավելանալով): Այս տեսակի խոցելիությունը բնորոշ է Bind և-ի որոշ տարբերակներին Windows համակարգեր 9x.

Ամեն դեպքում անհրաժեշտ է արձագանքել իրական DNS սերվերին։ Դրան կարելի է հասնել, օրինակ, սերվերի դեմ ծառայության մերժման հարձակման միջոցով:

Հաջող հարձակում իրականացնելու համար հարձակվողը պետք է վերահսկի DNS սերվերը (ns.attaquant.com), որը հեղինակավոր է attaquant.com գոտու համար: Թիրախային DNS սերվերը (ns.cible.com) պետք է ստեղծի կանխատեսված նույնականացման համարները(յուրաքանչյուր խնդրանքով ավելանալով 1-ով):

Հարձակումը պահանջում է չորս քայլ.

Արդյունքում, թիրախային DNS սերվերի քեշը կպարունակի հարձակվողին անհրաժեշտ համընկնում, իսկ www.spoofed.com հասցեն պահանջող հաջորդ հաճախորդներին կտրվի հարձակվողի մեքենայի հասցեն: Այն կարող է տեղակայել իրական կայքի պատճենը, որի օգնությամբ հարձակվողը կարող է գողանալ գաղտնի տեղեկատվություն։

DNS Cache Poisoning-ի փոփոխություն

DNS սերվերները օգտագործում են քեշ՝ ժամանակի ընթացքում նախորդ հարցումների արդյունքները պահելու համար: Դա արվում է համապատասխան տիրույթների լիազորված սերվերներին հարցումների անընդհատ կրկնությունից խուսափելու համար։ DNS-ի կեղծմանն ուղղված հարձակման երկրորդ տեսակը DNS սերվերի քեշի փոփոխությունն է: Ահա մի օրինակ.

Մենք օգտագործում ենք նույն տվյալները, ինչ նախորդ օրինակում: Ահա այս հարձակման տարբերակի հիմնական կետերը.

    ուղարկել DNS հարցում՝ www.attaquant.com անունը լուծելու համար cible.com տիրույթի DNS սերվերին.

    թիրախային DNS սերվերը www.attaquant.com անունը լուծելու հարցում է ուղարկում հարձակվողի DNS սերվերին.