Այն ժամանակ, երբ հավելվածների անվտանգության խոցելիության ինդեքսները պայքարում են տարբեր հարձակման վեկտորների կտրուկ աճին հետ չմնալու համար, զարմանալի չէ, որ հավելվածների ինժեներները անտեսեն անվտանգության նոր սպառնալիքների հայտնաբերումը:

Անվտանգության ուղեցույցներ:

Որպեսզի համոզվենք, որ հավելվածների ինժեներները թարմացված են անվտանգության սպառնալիքների վերաբերյալ, կազմակերպությունները սովորաբար տրամադրում են անվտանգության ուղեցույցներ: Նման օրինակներից է WSO2 Secure Engineering Guidelines-ը, որը պատրաստվում է հրապարակվել OWASP-ի լավագույն 10–2017 թարմացումներով, քանի որ ես գրում եմ այս բլոգի գրառումը: Անվտանգության ուղեցույցներին հավատարիմ մնալը պարտադիր է, բայց դրանք երկար ցուցակներ են, որոնց պետք է հետևել: Նոր ինժեներներին ավելի շատ ժամանակ կպահանջվի այս ուղեցույցներին ծանոթանալու համար: Ավելին, ո՞վ է հաստատելու այս ուղեցույցներին հետևելու դեպքում:

Կոդի վերանայում և ստատիկ կոդի վերլուծություն:

Նույնիսկ եթե այն լիովին վստահելի չէ, ձեռքով կոդի վերանայման խիստ գործընթաց ունենալը ճանապարհներից մեկն է: Եթե ​​դուք պատասխանատու եք հավելվածների անվտանգության համար, ապա ձեզ բավականաչափ հարմարավետ չեք զգա՝ ամբողջությամբ կախված ձեռքով կոդերի ակնարկներից:

Մյուս տարբերակը ավտոմատ ստատիկ կոդերի անալիզատորների օգտագործումն է: Սովորաբար, ստատիկ անալիզատորները կփնտրեն անվտանգության հայտնի թուլություններ՝ օգտագործելով լեզվին հատուկ կանոններ և ստորագրություններ: Որոշ ստատիկ անալիզատորներ կկատարեն աղտոտվածության վերլուծություն՝ համոզվելու համար, որ անվստահելի (փչացած) տվյալները չեն փոխանցվում զգայուն լվացարանին:

Հենց որ խոսեք ստատիկ կոդերի ավտոմատ անալիզատորի մասին, ինժեներները կսկսեն մտածել բոլոր «կեղծ դրականների» մասին, որոնք կարող են առաջացնել այս գործիքները: Մեղմացնող կամ ճնշող մեկնաբանություններ ավելացնելու և այդ մեկնաբանությունները կրկին վերանայելու ջանքերը հսկայական են: Նման ճնշման մանրամասների պահպանումը յուրաքանչյուր հավելվածի տարբերակի համար ևս մեկ դժվար գործ է, որը կպահանջի խոցելիության կառավարման առանձին համակարգեր: Բացի այս բոլոր անախորժություններից, կարող են լինել «կեղծ բացասականներ», որոնք կհանգեցնեն անվտանգության ծախսատար դեպքերի:

Բայց ինչո՞ւ կեղծ դրական և բացասական:

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

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

Անվտանգության մասին տեղյակ ծրագրավորման լեզուն փրկելու է:

Ի՞նչ կպատահի, եթե ծրագրավորման լեզուն ինքնին տեղյակ լինի իր կողմից բացահայտված անվտանգության զգայուն բոլոր գործողությունների մասին և հնարավորություն ունենա առանձնացնել տվյալների վստահելի աղբյուրները անվստահելի տվյալների աղբյուրներից:

Բացի այդ, ի՞նչ անել, եթե այս լեզուն օգտագործում է «անվտանգ լռելյայն» և թույլ չի տա ինժեներներին անապահով օգտագործել լեզվի առանձնահատկությունները՝ առանց համապատասխան վավերացումների:

Այո, մեզ այլևս պետք չէ ստատիկ կոդերի անալիզատոր՝ անվտանգության ծախսատար սխալներ գտնելու համար, և այո, մենք այլևս կարիք չունենք անվտանգության ստուգումների համար ամբողջությամբ ապավինել կոդերի ձեռքով ակնարկներին:

Այնուամենայնիվ, պրակտիկ չէ փոխել մեկ տարվա վաղեմության ծրագրավորման լեզուն և տեղեկացնել այն անվտանգությանը: Սա կխախտի օգտվողների հավելվածների մեծ մասը, քանի որ փոփոխությունները կտրուկ անհամատեղելի կլինեն: Փոխարենը, մեզ անհրաժեշտ է ծրագրավորման լեզու, որը մշակված է անվտանգության ուշադրության կենտրոնում:

Ballerina, անվտանգության մասին տեղեկացված ծրագրավորման լեզու՝ դիզայնի ինտեգրացիաների և միկրոծառայությունների միջոցով անվտանգ մշակելու համար:

Բալերինան հավաքված, տիպի համար անվտանգ, միաժամանակյա ծրագրավորման լեզու է, որը նպատակաուղղված է միկրոծառայությունների մշակմանը և ինտեգրմանը:

Եթե ​​Ձեզ անհրաժեշտ է ինտեգրել բազմաթիվ ծառայություններ կամ գրել ամպային մայրենի միկրոծառայություններ, Ballerina-ն կհեշտացնի ձեր կյանքը՝ ապահովելով ամեն ինչ՝ սկսած համաժամանակությունից, ճկունությունից, ստուգելիությունից, gRPC-ից, բաշխված գործարքից, հաղորդագրություններից մինչև անվտանգություն, ներկառուցված և լավ պատրաստված լեզվով:

Պատճառով կարող եք այցելել Ballerina.io և Ballerina by Examples էջը՝ կարդալու միկրոսերվիսների և ինտեգրման վրա հիմնված գործառույթների մասին, որոնք առաջարկում է Ballerina-ն:

Այնուամենայնիվ, այս գրառումը կենտրոնացած է միայն անվտանգության վրա, և միայն անվտանգության վրա

Ballerina-ի ստանդարտ գրադարանը նախագծվել է անվտանգության մեծ ուշադրության կենտրոնում:

Ballerina ստանդարտ գրադարանի բոլոր գործառույթները, որոնք առաջացնում են անվստահելի տվյալներ, հստակորեն նշված են: Հետևաբար, լեզվի կոմպիլյատորը հնարավորություն կունենա բացահայտելու, թե ինչ գործողությունների արդյունքում կարող են առաջանալ անվստահելի տվյալներ: Ցանցային ընթերցումները, տվյալների բազայի ընթերցումները և ֆայլերի ընթերցումները անվստահելի տվյալների աղբյուրների ընդամենը մի քանի բարձր մակարդակի օրինակներ են:

Ballerina ստանդարտ գրադարանի գործառույթների անվտանգության զգայուն բոլոր պարամետրերը հստակորեն նշված են՝ լեզվի կոմպիլյատորին հնարավորություն տալով իմանալ, թե որտեղ չպետք է փոխանցվեն աղտոտված տվյալները:

Հետևյալ օրինակի քաղվածքը HTTP հարցումների և պատասխանների մշակմանն առնչվող բնիկ գործառույթներից է (ճիշտ ասած՝ MIME մշակում): sensitive ծանոթագրությունն օգտագործվում է նշելու համար, որ headerName պարամետրը զգայուն է անվտանգության նկատմամբ, մինչդեռ tainted անոտացիան օգտագործվում է նշելու համար, որ getHeader(-) ֆունկցիան վերադարձնում է անվստահելի արժեք:

Համակցությամբ վերոհիշյալ տեղեկատվությունը կստեղծի ֆունկցիայի անվտանգության ստորագրությունը: Այլ գործառույթների անվտանգության ստորագրությունները կստացվեն ավտոմատ կերպով՝ հիմնվելով գրադարանի ստանդարտ գործառույթների օգտագործման վրա, առանց ծրագրավորողների կողմից բացահայտորեն ավելացնելու անոտացիաները:

Հետևաբար, քանի որ գրադարանի ստանդարտ գործառույթները պատշաճ կերպով ծածկված են, Ballerina-ի ծրագրավորողները կարող են օգտվել գրադարանի անվտանգության ստանդարտ ստորագրություններից՝ ավտոմատ կերպով իրենց կոդի համար անվտանգության ստորագրություններ ստանալու համար:

Բծերի վերլուծություն - Օրինակներ

Կեղտոտ անալիզատորի օգտակարությունը կարելի է ավելի պարզաբանել մի քանի օրինակներով: Հետևյալ ծածկագիրը ստեղծում է «Բարև աշխարհ» բալերիական պարզ ծառայություն.

Ծրագիրը գործարկելուց հետո այն կբացահայտի մեկ ռեսուրսով HTTP ծառայություն, որը կարելի է կանչել՝ ուղարկելով HTTP GET հարցում http://localhost:9090/hello/sayHello հասցեին:

Ի՞նչ կլինի, եթե մենք փոխենք այս ծրագիրը՝ ընդունելով «անունը» որպես հարցման պարամետր և այն կցենք «Բարև»-ին պատասխանում.

Թեև փոփոխությունն ավելի գրավիչ է դարձնում ծրագիրը, ցանկացած ոք, ով ուշադրություն է դարձնում անվտանգությանը, կիմանա, որ այս ծառայության վրա հիմնված հավելվածն այժմ խոցելի է Cross Site Scripting (XSS) նկատմամբ:

Այնուամենայնիվ, Ballerina-ի կազմողը գիտի, որ respond գործողությամբ ուղարկված HTTP պատասխանը չպետք է անվստահելի արժեք լինի: Բացի այդ, Ballerina-ն գիտի, որ HTTP GET հարցման պարամետրից հանված name-ը անվստահելի արժեք է: Հետևաբար, եթե փորձեք գործարկել այս հավելվածը, Ballerina կոմպիլյատորը կառաջացնի հետևյալ սխալը.

error: ./helloworld_xss.bal:9:24: tainted value passed to sensitive parameter ‘payload’
compilation contains errors

Ծրագրավորողը պետք է կատարի պարամետրի պատշաճ վավերացում՝ նախքան անվստահելի տվյալները HTTP պատասխանի օգտակար բեռին փոխանցելը: untaint միանվագ արտահայտությունը կարող է օգտագործվել՝ նշելու, որ ընթացիկ տվյալները պետք է համարվեն վստահելի.

Մեկ այլ օրինակ կարելի է ցույց տալ՝ օգտագործելով Ballerina տվյալների բազայի միակցիչը: Հետևյալ կոդում HTTP GET հարցման պարամետրը կցվում է SQL հարցմանը, որը կհանգեցնիSQL Injection խոցելիության:

Ballerina-ի կազմողը տեղյակ է, որ select գործողության SQL Query պարամետրը անվտանգության զգայուն է: Հետևաբար, կոմպիլյատորն իր տեղում թույլ չի տա աղտոտված տվյալներ:

error: ./helloworld_sqli.bal:21:40: tainted value passed to sensitive parameter ‘sqlQuery’
compilation contains errors

Ճիշտ մոտեցումը sql:Parameter-ի օգտագործումն է՝ ճիշտ պարամետրացված SQL հարցումներ ստեղծելու համար: JDBC Client Ballerina-ի օրինակը ցույց է տալիս նման ճիշտ օգտագործումը:

Նմանապես, օգտագործելով աղտոտվածության վերլուծությունը, Ballerina-ն կանխում է անվտանգության բազմաթիվ կարևոր խոցելիությունները, ներառյալ.

  • Ուղու մանիպուլյացիա
  • Ֆայլերի մանիպուլյացիա
  • Ֆայլի չարտոնված մուտք
  • Չվավերացված վերահղում (Բաց վերահղում)

Տեխնիկական մանրամասներն այն մասին, թե ինչպես է աշխատում Ballerina բիծ-անալիզատորը, պատմություն է մեկ այլ գրառման համար:

Ապահով լռելյայններ

Ballerina-ի կոմպիլյատորը, գործարկման ժամանակը և ստանդարտ գրադարանը կիրառում են անվտանգության բազմաթիվ այլ ստուգումներ և անվտանգ լռելյայններ՝ կանխելու անվտանգության կարևոր խոցելիությունները:

Բերելով նման օրինակ՝ OWASP Top 10 — 2017 թարմացումը զգալի փոփոխություն կատարեց 2013 թվականի տարբերակում: Այս փոփոխություններից մեկը ներառում է XML արտաքին սուբյեկտների (XXE) գրոհի ավելացումը, որը կարևոր հարձակում է, որը հնարավոր է դարձել սխալ կազմաձևված XML վերլուծիչների շնորհիվ:

Բալերինան, ունենալով առաջին կարգի աջակցություն XML և JSON տվյալների համար, համոզվում է, որ լռելյայն ներքին XML վերլուծման մեխանիզմը կանխում է XML External Entities (XXE) հարձակումը, ինչպես նաև XML Entity Expansion հարձակումը, առանց մշակողների կողմից անվտանգության իրականացման համար բարդ կազմաձևման փոփոխություններ կատարելու: Համապատասխան միավոր թեստերը և ինտեգրման թեստերը կարող են վերանայվել հետագա տեխնիկական մանրամասների համար:

Անվտանգության մոնիտորինգ և արձագանք

Քանի որ անվտանգությունը շատ հաճախ փոփոխվող տիրույթ է, կարևոր է հետևել հարձակման նոր վեկտորներին և խոցելիություններին՝ ավելի լավ անվտանգություն ապահովելու համար: Անվտանգության թիմը, որը պատասխանատու է Ballerina-ի պլատֆորմը անվտանգ պահելու համար (ներառյալ ես) մշտապես հետևում է այս տեսակի զարգացումներին:

Այդպիսի օրինակներից է Zip Slip հարձակումը, որը կամայական ֆայլի գրման խոցելիություն է արխիվային արդյունահանման միջոցով, որը վերջերս հայտնաբերվել է Java-ի վրա հիմնված հավելվածներում:

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

Նույնականացում և թույլտվություն

Ballerina-ի ծառայությունները կարող են կազմաձևվել, որպեսզի կատարեն նույնականացման և թույլտվության ստուգումներ: Ինտեգրման կետերը կարող են կազմաձևվել այնպես, որ օգտագործեն ներկառուցված անվտանգության շրջանակը՝ պահանջվող նշաններ ստեղծելու կամ փոխանակելու համար: Դա ինքնին հետաքրքիր քննարկում է միկրոծառայությունների անվտանգության տարբեր մոդելների վերաբերյալ: Ուստի համապատասխան բովանդակությունը կտեղափոխեմ առանձին գրառում

Լրացուցիչ հղում

Եթե ​​դուք փնտրում եք ավելի շատ մանրամասներ Ballerina-ի օգտագործման մասին՝ աշխարհն ապահով վայր դարձնելու համար, համոզվեք, որ այցելեք Ինչպես գրել անվտանգ բալերինայի ծրագրեր» էջը: Վստահեցնում եմ ձեզ, որ դա չի 500+ էջանոց անվտանգության ուղեցույցների ցանկ:

Եթե ​​բախվում եք բալերինայի հետ կապված անվտանգության հետ կապված որևէ մտահոգության և ցանկանում եք խոսել անվտանգության թիմի հետ սահմանափակ ալիքով, գրեք security @ ballerina.io-ին: