OWASP TOP 10 ԿԱՄ ԻՆՉՊԵՍ ՊԵՏՔ Է ԱՆՎՏԱՆԳ ԻՄՊԼԵՄԵՆՏԱՑՆԵԼ ԳՈԾՈՂՈՒԹՅՈՒՆՆԵՐԻ ՀԱՋՈՐԴԱԿԱՆՈՒԹՅՈՒՆԸ

OWASP TOP 10 ԿԱՄ ԻՆՉՊԵՍ ՊԵՏՔ Է ԱՆՎՏԱՆԳ ԻՄՊԼԵՄԵՆՏԱՑՆԵԼ ԳՈԾՈՂՈՒԹՅՈՒՆՆԵՐԻ ՀԱՋՈՐԴԱԿԱՆՈՒԹՅՈՒՆԸ

L3v0n

Owasp ֊ ը բաց կազմակերպություն  է , որին մասնակցում են միջազգային մասնգետների մեծ խումբ կամավորության սկզբունքի վրա և տվյալ կազմակերպության խնդիրն է ի մի բերել բոլոր խոցելիությունները , որոնք որոշ ժամանակահատվածում կիրառվել են տարբեր հարձակման վեկտորի մեջ ։ Եվ նաև նրանց հաջորդ խնդիրն է դրանք կատեգորիզացնել, այսինքն ամեն ամեն վեկտոր վերցնել մեկ կատեգորիայի ներքո ։ Ներկա պահին գոյություն ունի 10 կատեգորիա, որոնցից յուրաքանչյուրի մեջ մտնում է մի քանի հարձակման մեթոդոլիգիա կամ վեկտոր ։ Owasp կատեգորիաներն են ՝


  1. Injection (ներարկում)
  2. Աուֆենֆիկացիոն Թերի   մեխանիզմ (Broken Authentication)
  3. Խոցելի տեղեկատվության արտահոսք (Sensitive Data exposure)
  4. XML արտաքին միջամտություն (XXE 2017-XML External Entities)
  5. Մուտքի Թերի  կառավարում (Broken Access Control)
  6. Անտվատգության կարգավորումների թերի կոնֆիգուրացում (Security Misconfiguration)
  7. Միջկայաքային սքրիփթինգ XSS
  8. Վտանգավոր դեսերիալազցիա (Insecure deserialization)
  9. Կոմպոնենտների օգատագործում հայտնի խոցելիություններով
  10.  Ոչ լիարժեք լոգավորման համակարգ (Insufficient Logging & Monitoring)

Injection

Ներարկումը ներկայացնում է նոր  արտաքին կոդի կամ նոր գործողության  կանոնների  հաջորդական  ներարկում արդեն եղած գոյություն ունեցող կոդի կամ գործողությունների կանոնների մեջ ։ Կա ներարկման մի քանի տեսակ դրանք են ՝

  1. HTML ներարկում
  2. SQL ներարկում
  3. OS ներարկում
  4. PHP ներարկում
  5. SMTP/IMAP ներարկում
  6. Host Header injection
  7. LDAP Injection
  8. Document ներարկում

HTML ներարկում

Սա այն դեպքն է երբ ձեր լուծումը պարունակում է real time rendering ֆունկցիոնալություն և դուք օրինակի համար տվյալ հատվածը պետք է ուղարկեք ձեր տվյալների շտեմարան ։ Այստեղ երրորդ մարդու կողմից կարող է ներդրվել վնասակար կոդ և տվյալ կոդը կարող է իմպլետացվել ձեր շտեմարանում ։ 

vueJS գրադարանի html real time rendering


SQL ներարկում

SQL ներարկումները դրանք հատուկ SQL հրամաններն են, որոնք ուղիղ կերպով փոխներգործում են SQL տիպի շտեմարանների հետ ։ Տվյալ օրինակում,որը իմպլեմենտացված է NodeJS միջավայրում հինմվելով միայն query կանչերի վրա մեր սերվերը միանում է և ուղի կերպով կատարում է SQL հրամաը , որը համարվում է անընդունելի ։


SQL ներարկում NodeJS միջավայրում


OS ներարկում


Այս տիպի ներարկումը ստիպում է գրված կոդի հատվածին փոխներգործել ուղիղ այն օպերացիոն համակարգի միջավայրի հետ, որտեղ որ գտնվում է web հավելվածը ։ Տվյալ օրինակում մենք տեսնում ենք NodeJS միջավայր, որի իր մեջ ներդրված node-child package մոդուլը, որի միջոցով միանում է մեր սերվերային լուծման տերմինալին ։

OS ներարկում Nodejs միջավայրի միջոցով


PHP ներարկում


PHP ներարկումը իրենից ներկայացնում է հատուկ գլոբալ PHP կանչերի կոդի ներդրում, որի միջոցով հնարավոր է հասնել հաջողության : Տվյալ օրինակում կիրառված է eval մեթոդը և դրա կատարումը կարող է առաջ բերել անցանկանալի հետևանքների ։


PHP ներարկում

IMAP / SMTP ներարկում

IMAP և SMTP պրոտոկոլները նախատեսված են լուծելու էլ փոստի և հեռահաղաորդակցության խնդիրը ։ Եվ սրանց միջոցով ներարկում կատարելը կարող է առաջ բերել այնպիսի խնդիր ինչպիսիք են ներքին փակ էլ փոստերի տվյալների հայտնաբերումը ։ Սա հիմանկանում  կարող է կատարվել, եթե SMTP սերվերի  և կլիենտ կողմի միջև չկա միջանկյալ պաշտպանական շերտ ։ Եվ ամբողջ կապը կլինետ կողմը կատարում է query ների միջոցով ։ Օրինակ ՝

http://<webmail>/read_email.php?message_id=4791


HOST HEADER ներարկում

Սա համարվում է ավելի ճկուն ներարկման տեսակ և որպես այսպիսին կարող է առաջ բերել նոր հարձակման վետորներ այդ թվում web cache poision , որը իրենից ներկայացնում է ձեր սերվեր հարցումների քեշերի համալրում վնասակար կոդով, որը կարող է ուղարկվել ձեզ կամ սերվերից բոլոր օգտվողներին, օրինակի համար xss ներարկում պարունակող հրամանները , որը օրինակ կգողանա կայքի բոլոր հաճախորդների SESSION տվյալները կամ տոկեն տվյալները և կուղարկի երրորդ անձանց ։ HOST HEADER INJECTION տեսակի հարձակումը կատարվում է հարցման մեջ պարունակվող հատուկ HOST բանալիի միջոցով , որը գտնվում է HTTP կանչի Header-ների մեջ ։


HOST HEADER ներարկում

LDAP ներարկում

LDAP - ն հատուկ պրոտոկոլ է նախատեսված մեծ ընկերությունների համար, ովքեր ունեն իրենց ներքին ինտրանետ ցանցը ։ Այն օգնում է ցանցի ներսում փնտրել ցանկացած տեղեկատվությունը, որին կա հասանելիություն ։ Եվ տվյալ պրոտոկոլը իմպլեմենատցված է  սերվերային և կլինետական լուծումներով ։ Եթե սերվերային լուծումը չի ստուգում և չի կատարում կանչի ստուգում , ապա կարելի է կառուցել հատուկ կանչ , որը որ օրինակի համար սերվերը կմշակի և կվերադարձնի փակ տեղեկատվությունը ։ 


LDAP ներարկում

Փասթաթղթային  ներարկում

Այստեղ գործում է հատուկ ֆունկցիոնալություն, որը աշխատում է փասթաթղթի բացման դեպքում և կարող դիմել երրորդ հեռակա սերվերին այնտեղից ներբեռնելով վնասակար կոնտենտ , սա համարվում է բավական ճկուն ներարկման ձև, քանի որ իր մեջ կարող է պարունակել գործողությունների կոպլեքս հաջորդականություն ։


Broken Authentication

Աուֆենֆիկացիան դա մեխանիզմ է, որը թույլ է տալիս իդենտիֆիկացնել օգտատիրոջը մեր համակարգի մեջ ։ Տվյալ մեխանիզմի ոչ լիարժեք իմպլեմենտացված կարգավիճակը թույլ է տալիս դասակարգել գործողությունները  ըստ իրենց վնակարության ՝

  1. Սեսսիաների թերի իմպլեմենտացում(session missconfiguration) ։
  2. Գաղտնբառի վերականգնման ֆունկցոիանլություն
  3. Գաղտնաբառային քաղաքականություն (password policy)
  4. Խոցելի տվյալների(գաղտնաբառ) պահպանում առանց գաղտնագրման
  5. Brutforce հարձակման մեխանիզմի թույլտվություն

Սեսսիաների թերի իմպլեմենտացում(session missconfiguration) 

Սեսսիաները դրանք հատուկ տիպի ինդենտիֆիկացման մեթոդիկա է, որը աշխատում է հետևյալ կերպ ։ Երբ օգատատերը միանում է ծառայությանը , սերվերում ստեղծվում է հատուկ օբյեկտ, որը իր մեջ պարունակում է տեղեկատվություն ՝ օգատատիրոջ դերի մասին (role), օբյեկտի սպառման մասին տեղկեատվության մասին, հատուկ իդենտիֆիկատորի մասին և այլ տեղեկատվության մասին ։ Այստեղից միայն ստեղծված օբյեկտի մի բանալին է ուղարկվում օգտատատիրոջը, որը կարող է պահվել դիտարկիչի լոկալ պահոցում(localStorage) կամ Cookie համակարգի մեջ ։ Այս դասկարգումը իր մեջ պարունակում է հետևյալ հարձակման վեկտորնեը ։

Ա. Հարձակում url հղման միջոցով(url rewriting or session hijack) ֊ սա համարվում է ամենավատ վեկտորը քանի որ եթե դուք ավելացնում էք ձեր session id ն ձեր url ի մեջ , ապա գալիս է մի վտանգ , որ տվյալ url տեղեկատվությունը հասանելի է բոլորին ցանցի մեջ և այն գտնվում ոչ գաղտնագրված վիճակում ։ Եվ  բացի դա ձեր հարցումները կարող են էկրանի վրայից նկարել և այլ մեքենայից դիմեն տվյալ համակարգին ձեր անվան կողմից : Իրենց դեմ պայաքերու համար հարկավոր է header element֊ին կցել http_only

url rewriting

Բ․  Հարձակում Սեսսիոն արժեքը գուշակելու միջոցով(Session Fixation

) ֊ Լինում են դեպքեր երբ կախված ինչ ֊ որ արժեքներից, որը ստանում է օգտատերը մուտքից  և ելքից հետո գեներացվում է սեսսիոն ժամանակահատված և դա լինում է օրինակ հիմված այն արժեքի վրա որը ստացել է օգտատերը իր հատվածում ։ Դրանից օգտվելով երրորդ անձը կարող է կանխագուշակել հաջորդ սեսիոն արժեքը ։


Սեսսիաների դեմ հարձակման դեպքու կարելի է պաշտպանվել մի քանի եղանակով ։ Դրանք են ՝ միացնել session ժամանակ, միշտ միացված պահել http_only header ը, որը կարգելի js ին օգատգործել տվյալ session id ն իր կողմից և սրանով մենք հուշում ենք համակարգին, որը cookie ֆայլերը կարող են փոփոխվել միայն js սերվերային հատվածի կողմից ։ Հաջորդ պաշտպանական մեխանիզմը որը ցանկալի է կիրառել դա secure http header ի առկայությունն է , որը կզգուշացնի միջավայրին cookie սեսիաները ուղարկել կամ ստանալ միայն օգատգործելով ssl գաղտնագրում ։ Նաև պետք  է արգելել որպեսզի բացառենք միայն session ի միջոցով փոխենք օգատատիրոջ գաղտնաբառերը ։ 


Գաղտնաբառի վերականգնման ֆունկցիոնալություն

Գաղտնաբառի վերականգման ֆունկցիոնալությունը իրենից ներակայցնում է կոմպլեքս գործողությունների հաջորդականություն, որը թույլ է տալիս երրորդ անձին ձեր գաղտնաբառի միջոցով մուտք ստանալ ձեր տվյալներին ։ Սեսսիոն հարձակման ժամանակ մենք  կարող ենք թույլ տալ ուղղակի սեսսիոն բանալի ունենալով փոխել գաղտնբառը , բայց այդ մեթդի իմպլետացումը ողջունելի չի ։ Կարելի է դիտարկել մի քանի հարձակման վեկտոր ՝ csrf : Պաշտպանեվոլւ համար տվյալ հարձակումից, միացրեք captcha համակարգ, սահմանափակեք գաղտնաբառի փոփոխության դիմուների քանակը, տեղեկացրեք կցված էլ փոստին նմանատիպ գործողության մասին ։ 



Գաղտնաբառի քաղաքականություն

Գաղտնաբառի փոփոխության քաղաքականության մեջ ներառեք հետևյալ կետերը,  գաղտնաբառերը միշտ պահեք ութ և ավել հատուկ սիմվոլներով և տառերով, օգատգործեք մեծատառ և փոքրատառ նիշեր նաև հատուկ սիմվոլներ ։ Արգելեք օգատգործել որպես տվյալ հեռախոսահամար  և այլ խոցելի տեղեկատվություն ։


Խոցելի տվյալների(գաղտնաբառ) պահպանում առանց գաղտնագրման

Տեղեկատվությունը, որը հարկավոր է պահել շտեմարանի մեջ պարտադիր պետք է լինի հեշավորված ։ Եվ բացի տվյալ հեշը օգագործվի նաև salt(համադրություն) ։ 


Brutforce հարձակման մեխանիզմի թույլտվություն

Ան հանդիսանում է հավանական գաղտնաբառերի և տվյալների փորձարկում մեր համակրգի վրա ։ Այս դեպքում կա մի քանի հարձակման վեկտոր

  1. Creditianals suffering - Երբ հարձակմանը մսնակցում է մեկ գաղտնբառ կամ գաղտնաբառերի շտեմարան , որոնք որևիցե մի տեղ արտհասել են և դրանք հանդիսանում են իրական տվյալներ
  2. Password Spraying ֊ Երբ օգատգործվում է բառացանկ , որը որ ըստ վիճակագրության հանդիսնաում է բավականին հաճախ ։


Այս տիպի հարձակումներից խուսափելու համար հարկավոր է կատարել մի հետևյալ քայլերը ։ Մինչ օգտատիրոջ նոր գաղտնաբառ նշանակելը հարկավոր է այն ստուգել բոլոր տիպի արտահոսած շտեմարանների մեջ ։ Կամ ժամանակ առ ժամանակ ստուգելոց հետո , եթե կհայտնաբերվի նույն արժեքը այլ տեղեր ։ Ապա հարկավոր է տեղեկացնել էլ փոստի միջոցով տվյալ օգտատիրոջը ։

Sensitive Data exposure

Սրա մեջ է մտնում այնպիսի տեղեկատվությունը որը ենթակա չէ հրապարակման և այն կարող է օգնել երրորդ կողմին հասնել այնպիսի նպտակների ինչպիսին է ձեր ենթակառուցվածքի իմպլեմենտացաված համակակարգի մասին պատկեր ստանալը, հակառակորդի կողմից մրցակացային տվյալ ձեռք բերելը , ոռ հրապրակային տվյալ ձեռք բերելը ։


Կան մի քանի տեսակի հարձակման վեկտորներ ՝

  1. WebStorage Attack
  2. Transport Layer Attack
  3. Encryption Attack 
  4. Unprotected Route Attack


WebStorage Attack

Այս հարձակման դեպքում մեր տվյալները գտնվում են դիտարկիչային լոկալ պահոցում, որը մեզ տրամադրում է html 5֊ը ։ Այս դեպքում իմպլետացնելով այլ հարձակում , ինչպիսին է csrf հարձակումը , կարելի է աշխատեցնել XSS֊ը, եթե այն կա հավելվածի մեջ և ստանալ տեղեկատվությունը ։


Transport Layer Attack

Այս փուլում  կարող է գործի դրվել, տեղեկատվություն փոխանցվող մոտեցումը, եթե տվյալ միացումը լինի ոչ գաղտնագրված վիճակում, ապա հնարավոր միջանկյալ մասում գտնվելով կարդալ փոխանցվող և ստացվող տեղեկատովությունը ։ 


Encryption Attack

Կարող է լինել դեպքեր երբ հարձակվողը ունի հնրավրություն օգատգործելու SSL խոցելիություն , որպեսզի հնարավոր լինի կարդա ստացվող և փոխանցվող տեղեկատվությունը ։ Ինչ է իրենից ներկայացնում սա, եկեք ուսումնասիրենք այն ։ SSL հաղորդագրությունները իրենց պարունակում են cipher text(գաղտնագրված հաղորդագրության կտոր) ։ Այն գաղտնագրվում է երկու մեքենաների միջև շփման սկզբնական փուլում, հինվելով մակ հասցեի վրա ։ Տվյալ փուլում գաղտնագրման պրոցեսը ունի վերջի բլոկը արժեքի բարձրություն և SSL v3 ը թույլ է տալիս այն մանպիուլացնել և ավելացնել մեր ուզած արժեքը ։ Դնելով մեր արժեքը համակարգի որևէ կամայական տվյալ կարող ենք վերցնել և կարդալ cipher֊ի կամայական մաս օգտագործելով դրված արժեքը ։ 

Մեկ այլ դեպք է երբ մենք գաղտնագրված ենք պահում ինչ֊որ տեղեկատվություն շտեմարանի մեջ և երրորդ մարդը մուտք ստանալով դրան օգտագործում է հատուկ rainbow tables ապագաղտնագրլեու համար ։ Այս դեպքում հնրավոր է ապագաղտնագրել ձեր hash արժեքը հատուկ ցուցակի միջոցով , որտեղ արդեն ներառված են նախկինում hash to plain text արժեքները ։ Սրա դեմ կարելի է պայքարել հեշավորման հետ օգտագործելով Salt արժեք ։


Unprotected Route Attack

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

XML EXTERNAL ENTITES

Xml-ի տարբերություն HTML֊ից հանդիսանում է տվյալնեռի փոխանցման լեզու համացանցի միջոցով ։ Այս հարձակաման տեսակը ունի  հատուկ ENTITI tag, որը կարող է պահել տեղեկատվությունը հեռակա միջավայրում ։ Եվ սա մանպիպուլյացիայի ենթարկելով հնարավոր է ձեր ամբողջ տեղեկատվությունը ։Ուղարեկլ այլ տեղ երբ ձեր կողմից կառուցված XML դատան կլինի շտեմարանում ։


Broken Access Control


Սա համարվում է գործընթաց , որը իր մեջ ներառում է ֆունկցիոնալության մուտքի ստացում , այն դեպքում երբ դուք աուֆենֆիկացիոն պրոցես չէք անցել կամ չունեք բավարար թույլտվություն  ։



Security Missconfiguration


Սա կատարվող այն սխալներն են որոնք կարող են վեռաբեռվել պրոդուկտի ցանկացած փուլում ։ Այս խմբի տակ կարող է հայտնվել այն բոլոր տեղեկատվությունը , որը կապված Error handling մեխանիզմի հետ ։ Կարելի է ներառել նաև այնպիսի մոտեցում ինչպիսիք են , օգտահաշաիվների լռելյայն թողելը, արդեն պատրաստի պրոդուկտի վրա ։ Պրոդուկտի վրա անջատված է անվտագության թարմացումների համակարգը ։


XSS

XSS֊ը դա հատուկ տիպի կոդ է , որը գտնվում է js կամ այլ կոդերի միջավայրում , և թույլ է տալիս օրինակի համար միայն գրառում թողնելով մեկ տեղ որտեղ կա xss բացթողում կարելի է cookie տվյալները ուղարկել այլ տեղ , ով կբացի տվյալ էջը ։ Սրա դեմ կարելի է առնել , եթե ակտիվացված է csp կամ cors համակարգը ։


Insecure deseralization

Ցանկացած համակարգի մեջ երբ ներմուծում են ենք գործողությունների հաջորդականություն , այն վերածվում մեքենայական կոդի և պահվում օպերատիվ հիշողության մեջ մեքենայական կոդի տեսքով ։ Բայց  երբ որ այն պետք է նորից հետ վերցնել այն վերածվում է մեքենայական կոդից մեր միջավայրի համապատասխան կոդի ։ Հենց մեքենայական կոդից դեպի միջավայրային կոդը կոչվում է դեսերիալիզացիա ։ 


Կոմպոնենտների օգատագործում հայտնի խոցելիություններով

Սա համարվում է ամենատարածված սխալը, երբ օգտագործված կոմպոնոնտները ժամանակ առ ժամանակ չեն անցնում թեսթավորում , ստուգելու համար արդյոք նրանք ունեն թուլություններ, որոնք նոր են բացահայտվել ։


 Ոչ լիարժեք լոգավորման համակարգ (Insufficient Logging & Monitoring)

Մանրամասն ՝
https://owasp.org/www-project-top-ten/2017/A10_2017-Insufficient_Logging%2526Monitoring