OWASP TOP 10 ԿԱՄ ԻՆՉՊԵՍ ՊԵՏՔ Է ԱՆՎՏԱՆԳ ԻՄՊԼԵՄԵՆՏԱՑՆԵԼ ԳՈԾՈՂՈՒԹՅՈՒՆՆԵՐԻ ՀԱՋՈՐԴԱԿԱՆՈՒԹՅՈՒՆԸ
L3v0nOwasp ֊ ը բաց կազմակերպություն է , որին մասնակցում են միջազգային մասնգետների մեծ խումբ կամավորության սկզբունքի վրա և տվյալ կազմակերպության խնդիրն է ի մի բերել բոլոր խոցելիությունները , որոնք որոշ ժամանակահատվածում կիրառվել են տարբեր հարձակման վեկտորի մեջ ։ Եվ նաև նրանց հաջորդ խնդիրն է դրանք կատեգորիզացնել, այսինքն ամեն ամեն վեկտոր վերցնել մեկ կատեգորիայի ներքո ։ Ներկա պահին գոյություն ունի 10 կատեգորիա, որոնցից յուրաքանչյուրի մեջ մտնում է մի քանի հարձակման մեթոդոլիգիա կամ վեկտոր ։ Owasp կատեգորիաներն են ՝
- Injection (ներարկում)
- Աուֆենֆիկացիոն Թերի մեխանիզմ (Broken Authentication)
- Խոցելի տեղեկատվության արտահոսք (Sensitive Data exposure)
- XML արտաքին միջամտություն (XXE 2017-XML External Entities)
- Մուտքի Թերի կառավարում (Broken Access Control)
- Անտվատգության կարգավորումների թերի կոնֆիգուրացում (Security Misconfiguration)
- Միջկայաքային սքրիփթինգ XSS
- Վտանգավոր դեսերիալազցիա (Insecure deserialization)
- Կոմպոնենտների օգատագործում հայտնի խոցելիություններով
- Ոչ լիարժեք լոգավորման համակարգ (Insufficient Logging & Monitoring)
Injection
Ներարկումը ներկայացնում է նոր արտաքին կոդի կամ նոր գործողության կանոնների հաջորդական ներարկում արդեն եղած գոյություն ունեցող կոդի կամ գործողությունների կանոնների մեջ ։ Կա ներարկման մի քանի տեսակ դրանք են ՝
- HTML ներարկում
- SQL ներարկում
- OS ներարկում
- PHP ներարկում
- SMTP/IMAP ներարկում
- Host Header injection
- LDAP Injection
- Document ներարկում
HTML ներարկում
Սա այն դեպքն է երբ ձեր լուծումը պարունակում է real time rendering ֆունկցիոնալություն և դուք օրինակի համար տվյալ հատվածը պետք է ուղարկեք ձեր տվյալների շտեմարան ։ Այստեղ երրորդ մարդու կողմից կարող է ներդրվել վնասակար կոդ և տվյալ կոդը կարող է իմպլետացվել ձեր շտեմարանում ։
SQL ներարկում
SQL ներարկումները դրանք հատուկ SQL հրամաններն են, որոնք ուղիղ կերպով փոխներգործում են SQL տիպի շտեմարանների հետ ։ Տվյալ օրինակում,որը իմպլեմենտացված է NodeJS միջավայրում հինմվելով միայն query կանչերի վրա մեր սերվերը միանում է և ուղի կերպով կատարում է SQL հրամաը , որը համարվում է անընդունելի ։
OS ներարկում
Այս տիպի ներարկումը ստիպում է գրված կոդի հատվածին փոխներգործել ուղիղ այն օպերացիոն համակարգի միջավայրի հետ, որտեղ որ գտնվում է web հավելվածը ։ Տվյալ օրինակում մենք տեսնում ենք NodeJS միջավայր, որի իր մեջ ներդրված node-child package մոդուլը, որի միջոցով միանում է մեր սերվերային լուծման տերմինալին ։
PHP ներարկում
PHP ներարկումը իրենից ներկայացնում է հատուկ գլոբալ PHP կանչերի կոդի ներդրում, որի միջոցով հնարավոր է հասնել հաջողության : Տվյալ օրինակում կիրառված է eval մեթոդը և դրա կատարումը կարող է առաջ բերել անցանկանալի հետևանքների ։
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-ների մեջ ։
LDAP ներարկում
LDAP - ն հատուկ պրոտոկոլ է նախատեսված մեծ ընկերությունների համար, ովքեր ունեն իրենց ներքին ինտրանետ ցանցը ։ Այն օգնում է ցանցի ներսում փնտրել ցանկացած տեղեկատվությունը, որին կա հասանելիություն ։ Եվ տվյալ պրոտոկոլը իմպլեմենատցված է սերվերային և կլինետական լուծումներով ։ Եթե սերվերային լուծումը չի ստուգում և չի կատարում կանչի ստուգում , ապա կարելի է կառուցել հատուկ կանչ , որը որ օրինակի համար սերվերը կմշակի և կվերադարձնի փակ տեղեկատվությունը ։
Փասթաթղթային ներարկում
Այստեղ գործում է հատուկ ֆունկցիոնալություն, որը աշխատում է փասթաթղթի բացման դեպքում և կարող դիմել երրորդ հեռակա սերվերին այնտեղից ներբեռնելով վնասակար կոնտենտ , սա համարվում է բավական ճկուն ներարկման ձև, քանի որ իր մեջ կարող է պարունակել գործողությունների կոպլեքս հաջորդականություն ։
Broken Authentication
Աուֆենֆիկացիան դա մեխանիզմ է, որը թույլ է տալիս իդենտիֆիկացնել օգտատիրոջը մեր համակարգի մեջ ։ Տվյալ մեխանիզմի ոչ լիարժեք իմպլեմենտացված կարգավիճակը թույլ է տալիս դասակարգել գործողությունները ըստ իրենց վնակարության ՝
- Սեսսիաների թերի իմպլեմենտացում(session missconfiguration) ։
- Գաղտնբառի վերականգնման ֆունկցոիանլություն
- Գաղտնաբառային քաղաքականություն (password policy)
- Խոցելի տվյալների(գաղտնաբառ) պահպանում առանց գաղտնագրման
- Brutforce հարձակման մեխանիզմի թույլտվություն
Սեսսիաների թերի իմպլեմենտացում(session missconfiguration)
Սեսսիաները դրանք հատուկ տիպի ինդենտիֆիկացման մեթոդիկա է, որը աշխատում է հետևյալ կերպ ։ Երբ օգատատերը միանում է ծառայությանը , սերվերում ստեղծվում է հատուկ օբյեկտ, որը իր մեջ պարունակում է տեղեկատվություն ՝ օգատատիրոջ դերի մասին (role), օբյեկտի սպառման մասին տեղկեատվության մասին, հատուկ իդենտիֆիկատորի մասին և այլ տեղեկատվության մասին ։ Այստեղից միայն ստեղծված օբյեկտի մի բանալին է ուղարկվում օգտատատիրոջը, որը կարող է պահվել դիտարկիչի լոկալ պահոցում(localStorage) կամ Cookie համակարգի մեջ ։ Այս դասկարգումը իր մեջ պարունակում է հետևյալ հարձակման վեկտորնեը ։
Ա. Հարձակում url հղման միջոցով(url rewriting or session hijack) ֊ սա համարվում է ամենավատ վեկտորը քանի որ եթե դուք ավելացնում էք ձեր session id ն ձեր url ի մեջ , ապա գալիս է մի վտանգ , որ տվյալ url տեղեկատվությունը հասանելի է բոլորին ցանցի մեջ և այն գտնվում ոչ գաղտնագրված վիճակում ։ Եվ բացի դա ձեր հարցումները կարող են էկրանի վրայից նկարել և այլ մեքենայից դիմեն տվյալ համակարգին ձեր անվան կողմից : Իրենց դեմ պայաքերու համար հարկավոր է header element֊ին կցել http_only
Բ․ Հարձակում Սեսսիոն արժեքը գուշակելու միջոցով(Session Fixation
) ֊ Լինում են դեպքեր երբ կախված ինչ ֊ որ արժեքներից, որը ստանում է օգտատերը մուտքից և ելքից հետո գեներացվում է սեսսիոն ժամանակահատված և դա լինում է օրինակ հիմված այն արժեքի վրա որը ստացել է օգտատերը իր հատվածում ։ Դրանից օգտվելով երրորդ անձը կարող է կանխագուշակել հաջորդ սեսիոն արժեքը ։
Սեսսիաների դեմ հարձակման դեպքու կարելի է պաշտպանվել մի քանի եղանակով ։ Դրանք են ՝ միացնել session ժամանակ, միշտ միացված պահել http_only header ը, որը կարգելի js ին օգատգործել տվյալ session id ն իր կողմից և սրանով մենք հուշում ենք համակարգին, որը cookie ֆայլերը կարող են փոփոխվել միայն js սերվերային հատվածի կողմից ։ Հաջորդ պաշտպանական մեխանիզմը որը ցանկալի է կիրառել դա secure http header ի առկայությունն է , որը կզգուշացնի միջավայրին cookie սեսիաները ուղարկել կամ ստանալ միայն օգատգործելով ssl գաղտնագրում ։ Նաև պետք է արգելել որպեսզի բացառենք միայն session ի միջոցով փոխենք օգատատիրոջ գաղտնաբառերը ։
Գաղտնաբառի վերականգնման ֆունկցիոնալություն
Գաղտնաբառի վերականգման ֆունկցիոնալությունը իրենից ներակայցնում է կոմպլեքս գործողությունների հաջորդականություն, որը թույլ է տալիս երրորդ անձին ձեր գաղտնաբառի միջոցով մուտք ստանալ ձեր տվյալներին ։ Սեսսիոն հարձակման ժամանակ մենք կարող ենք թույլ տալ ուղղակի սեսսիոն բանալի ունենալով փոխել գաղտնբառը , բայց այդ մեթդի իմպլետացումը ողջունելի չի ։ Կարելի է դիտարկել մի քանի հարձակման վեկտոր ՝ csrf : Պաշտպանեվոլւ համար տվյալ հարձակումից, միացրեք captcha համակարգ, սահմանափակեք գաղտնաբառի փոփոխության դիմուների քանակը, տեղեկացրեք կցված էլ փոստին նմանատիպ գործողության մասին ։
Գաղտնաբառի քաղաքականություն
Գաղտնաբառի փոփոխության քաղաքականության մեջ ներառեք հետևյալ կետերը, գաղտնաբառերը միշտ պահեք ութ և ավել հատուկ սիմվոլներով և տառերով, օգատգործեք մեծատառ և փոքրատառ նիշեր նաև հատուկ սիմվոլներ ։ Արգելեք օգատգործել որպես տվյալ հեռախոսահամար և այլ խոցելի տեղեկատվություն ։
Խոցելի տվյալների(գաղտնաբառ) պահպանում առանց գաղտնագրման
Տեղեկատվությունը, որը հարկավոր է պահել շտեմարանի մեջ պարտադիր պետք է լինի հեշավորված ։ Եվ բացի տվյալ հեշը օգագործվի նաև salt(համադրություն) ։
Brutforce հարձակման մեխանիզմի թույլտվություն
Ան հանդիսանում է հավանական գաղտնաբառերի և տվյալների փորձարկում մեր համակրգի վրա ։ Այս դեպքում կա մի քանի հարձակման վեկտոր
- Creditianals suffering - Երբ հարձակմանը մսնակցում է մեկ գաղտնբառ կամ գաղտնաբառերի շտեմարան , որոնք որևիցե մի տեղ արտհասել են և դրանք հանդիսանում են իրական տվյալներ
- Password Spraying ֊ Երբ օգատգործվում է բառացանկ , որը որ ըստ վիճակագրության հանդիսնաում է բավականին հաճախ ։
Այս տիպի հարձակումներից խուսափելու համար հարկավոր է կատարել մի հետևյալ քայլերը ։ Մինչ օգտատիրոջ նոր գաղտնաբառ նշանակելը հարկավոր է այն ստուգել բոլոր տիպի արտահոսած շտեմարանների մեջ ։ Կամ ժամանակ առ ժամանակ ստուգելոց հետո , եթե կհայտնաբերվի նույն արժեքը այլ տեղեր ։ Ապա հարկավոր է տեղեկացնել էլ փոստի միջոցով տվյալ օգտատիրոջը ։
Sensitive Data exposure
Սրա մեջ է մտնում այնպիսի տեղեկատվությունը որը ենթակա չէ հրապարակման և այն կարող է օգնել երրորդ կողմին հասնել այնպիսի նպտակների ինչպիսին է ձեր ենթակառուցվածքի իմպլեմենտացաված համակակարգի մասին պատկեր ստանալը, հակառակորդի կողմից մրցակացային տվյալ ձեռք բերելը , ոռ հրապրակային տվյալ ձեռք բերելը ։
Կան մի քանի տեսակի հարձակման վեկտորներ ՝
- WebStorage Attack
- Transport Layer Attack
- Encryption Attack
- 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