Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Тақрибан 9 сол пеш Cloudflare як ширкати хурд буд ва ман барои он кор намекардам, ман танҳо муштарӣ будам. Як моҳ пас аз оғози Cloudflare, ман огоҳинома гирифтам, ки вебсайти ман jgc.orgЧунин ба назар мерасад, ки DNS кор намекунад. Cloudflare тағирот ворид кард Буферҳои протокол, ва DNS шикаста буд.

Ман дарҳол ба Матто Принс бо унвони "DNS-и ман куҷост?" навиштам ва ӯ ҷавоби тӯлонии пур аз тафсилоти техникӣ фиристод (тамоми мукотибаро дар ин ҷо хонед), ки ман ба он ҷавоб додам:

Аз: Ҷон Грэм-Камминг
Сана: 7 октябри 2010, 9:14
Мавзӯъ: Re: DNS-и ман дар куҷост?
Ба: Матто Принс

Гузориши олӣ, ташаккур. Агар мушкиле пайдо шавад, ҳатман занг мезанам. Эҳтимол пас аз ҷамъоварӣ кардани тамоми маълумоти техникӣ дар ин бора навиштан лозим аст. Ман фикр мекунам, ки одамон аз як ҳикояи ошкоро ва ростқавл баҳравар хоҳанд шуд. Хусусан, агар шумо ба он графикҳо замима кунед, то нишон диҳед, ки трафик пас аз оғози кор чӣ гуна афзоиш ёфтааст.

Ман дар сайти худ мониторинги хуб дорам ва дар бораи ҳар як нокомӣ СМС мегирам. Мониторинг нишон медиҳад, ки нокомӣ аз соати 13:03:07 то 14:04:12 рух додааст. Санҷишҳо ҳар панҷ дақиқа гузаронида мешаванд.

Ман боварӣ дорам, ки шумо инро мефаҳмед. Оё мутмаин ҳастед, ки ба шумо шахси шахсии худ дар Аврупо лозим нест? 🙂

Ва ӯ ҷавоб дод:

Аз: Матто Принс
Сана: 7 октябри 2010, 9:57
Мавзӯъ: Re: DNS-и ман дар куҷост?
Ба: Ҷон Грэм-Камминг

Сипос. Мо ба ҳар касе, ки навиштааст, ҷавоб додем. Ман ҳоло ба офис меравам ва мо дар блог чизе менависем ё дар тахтаи эълони худ як паёми расмӣ мегузорем. Ман комилан розӣ ҳастам, ростқавлӣ ҳама чиз аст.

Ҳоло Cloudflare як ширкати воқеан бузург аст, ман барои он кор мекунам ва ҳоло ман бояд дар бораи хатои худ, оқибатҳои он ва амалҳои мо ошкоро нависам.

Воқеаҳои 2 июл

Рӯзи 2 июл мо дар Қоидаҳои идорашавандаи WAF-ҳо як қоидаи навро ҷорӣ кардем, ки бинобар ин Захираҳои CPU тамом мешуданд дар ҳар як коркарди асосии протсессор трафики HTTP/HTTPS дар шабакаи Cloudflare дар саросари ҷаҳон. Мо ҳамеша қоидаҳои идорашавандаи WAF-ро дар посух ба осебпазирӣ ва таҳдидҳои нав такмил медиҳем. Масалан, мо май шитоб мекардем қоида илова кунедбарои муҳофизат аз осебпазирии ҷиддӣ дар SharePoint. Тамоми нуқтаи WAF мо қобилияти зуд ва дар саросари ҷаҳон ҷойгир кардани қоидаҳо мебошад.

Мутаассифона, навсозии рӯзи панҷшанбеи гузашта як ифодаи муқаррариро дар бар гирифт, ки захираҳои аз ҳад зиёди HTTP/HTTPS CPU-ро ҳангоми бозгашт сарф кард. Дар натиҷа, функсияҳои асосии прокси, CDN ва WAF мо осеб диданд. График нишон медиҳад, ки захираҳои протсессор барои хидматрасонии трафики HTTP/HTTPS дар серверҳои шабакаи мо тақрибан ба 100% мерасад.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019
Истифодаи CPU дар як нуқтаи ҳузур дар вақти ҳодиса

Дар натиҷа, мизоҷони мо (ва мизоҷони мо) бо саҳифаи хатогии 502 дар доменҳои Cloudflare анҷом ёфтанд. 502 хатогиҳо аз ҷониби веб-серверҳои пешрафтаи Cloudflare тавлид карда шуданд, ки то ҳол ядроҳои ройгон доштанд, аммо натавонистанд бо равандҳои коркарди трафики HTTP/HTTPS муошират кунанд.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Мо медонем, ки ин ба мизоҷони мо чӣ қадар нороҳатӣ овардааст. Мо сахт шарм дорем. Ва ин нокомӣ моро аз бархӯрди муассир бо ҳодиса бозмедорад.

Агар шумо яке аз ин муштариён мебудед, шумо эҳтимол тарс, хашмгин ва хафа шудаед. Гузашта аз ин, мо надорем вайроншавии глобалӣ. Истеъмоли зиёди CPU аз як қоидаи WAF бо ифодаи муқаррарии нодуруст ифода ёфтааст, ки боиси бозгашти аз ҳад зиёд гардид. Ин аст ифодаи гунаҳкор: (?:(?:"|'|]|}||d|(?:nan|infinity|true|false|null|undefined|symbol|math)|`|-|+)+[)]*;?((?:s|-|~|!|{}||||+)*.*(?:.*=.*)))

Гарчанде ки ин ба таври худ ҷолиб аст (ва ман дар ин бора дар зер муфассалтар сӯҳбат мекунам), хидмати Cloudflare на танҳо аз сабаби ифодаи муқаррарии бад 27 дақиқа қатъ шуд. Барои тавсифи пайдарпайии ҳодисаҳое, ки ба нокомӣ овардаанд, ба мо чанд вақт лозим шуд, бинобар ин мо дар посух додан суст будем. Дар охири пост, ман бозгаштро бо ифодаи муқаррарӣ тавсиф мекунам ва ба шумо мегӯям, ки бо он чӣ кор кунед.

Чӣ рӯй дод

Биёед бо тартиб оғоз кунем. Ҳама вақтҳо дар UTC мебошанд.

Соати 13:42, як муҳандиси гурӯҳи брандмауэр ба қоидаҳои муайянкунӣ каме тағирот ворид кард XSS бо истифода аз раванди автоматӣ. Мувофиқи он, чиптаи дархости тағирот эҷод карда шуд. Мо чунин чиптаҳоро тавассути Jira идора мекунем (скриншот дар зер).

Пас аз 3 дақиқа, саҳифаи аввали PagerDuty пайдо шуд, ки дар бораи мушкилот бо WAF гузориш медиҳад. Ин як озмоиши синтетикӣ буд, ки фаъолияти WAF-ҳоро (мо садҳо онҳоро дорем) берун аз Cloudflare месанҷад, то кори муқаррариро назорат кунад. Пас аз он дарҳол саҳифаҳои огоҳӣ дар бораи нокомии дигар санҷишҳои хидматрасонии Cloudflare, мушкилоти глобалии трафик, 502 хатогиҳои густурда ва як тонна гузоришҳо аз Нуқтаҳои ҳузури мо (PoP) дар шаҳрҳои саросари ҷаҳон, ки камбудиро нишон доданд захираҳои CPU.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Ман чанде аз ин огоҳиҳоро гирифтам, аз маҷлис берун шудам ва дар роҳ ба сари миз будам, вақте сардори шӯъбаи таҳияи ҳалли мо гуфт, ки мо 80% трафики худро аз даст додем. Ман ба назди муҳандисони SRE-и мо, ки аллакай дар ҳалли мушкилот кор мекарданд, давидам. Дар аввал мо фикр мекардем, ки ин як навъ ҳамлаи номаълум аст.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Муҳандисони Cloudflare SRE дар саросари ҷаҳон парокандаанд ва вазъро шабонарӯз назорат мекунанд. Одатан, ин огоҳиҳо шуморо аз масъалаҳои мушаххаси маҳаллӣ, ки доираи маҳдуд доранд, огоҳ мекунанд, дар панелҳои дохилӣ пайгирӣ карда мешаванд ва дар як рӯз чанд маротиба ҳал карда мешаванд. Аммо ин саҳифаҳо ва огоҳиномаҳо чизи воқеан ҷиддиро нишон доданд ва муҳандисони SRE фавран дараҷаи вазнинии P0-ро эълон карданд ва бо муҳандисони идоракунӣ ва система тамос гирифтанд.

Дар ин лахза инженерони лондонии мо дар зали калон лекция мешуниданд. Лекцияро катъ кардан лозим омад, хама дар зали калони конференция чамъ шуданд ва бештар мутахассисонро даъват карданд. Ин як мушкили маъмулӣ набуд, ки SRE-ҳо худашон ҳал карда метавонанд. Ба ин кор мутахасси-сони дурустро чалб кардан зарур буд.

Дар соати 14:00 мо муайян кардем, ки мушкилот дар WAF аст ва ҳеҷ гуна ҳамла вуҷуд надорад. Дастаи иҷроиш маълумоти CPU-ро кашид ва маълум шуд, ки WAF айбдор аст. Корманди дигар ин назарияро бо истифода аз strace тасдиқ кард. Каси дигар дар гузоришҳо дид, ки дар WAF мушкилот вуҷуд дорад. Дар соати 14:02, тамоми даста ба назди ман омаданд, вақте ки истифодаи куштори глобалӣ, механизме, ки дар Cloudflare сохта шудааст, ки як ҷузъро дар саросари ҷаҳон хомӯш мекунад.

Чӣ гуна мо барои WAF куштори ҷаҳонӣ кардем, ин қиссаи дигар аст. Ин на он қадар оддӣ аст. Мо маҳсулоти худамонро истифода мебарем ва аз хидмати худ Дастрасӣ кор накард, мо натавонистем аутентификатсия кунем ва ба панели идоракунии дохилӣ ворид шавем (вақте ки ҳама чиз ислоҳ шуд, мо фаҳмидем, ки баъзе аъзоёни даста аз сабаби хусусияти амниятӣ, ки маълумоти эътимодномаро ғайрифаъол мекунад, дастрасӣ аз даст додаанд, агар панели идоракунии дохилӣ барои муддати дароз).

Ва мо натавонистем ба хидматҳои дохилии худ, ба монанди Jira ё системаи сохтмон дастрасӣ пайдо кунем. Ба мо механизми ҳалли мушкилот лозим буд, ки мо онро кам истифода мебурдем (инро низ бояд кор карда баромад). Ниҳоят, як муҳандис тавонист WAF-ро соати 14:07 хомӯш кунад ва соати 14:09 сатҳи трафик ва CPU дар ҳама ҷо ба ҳолати муқаррарӣ баргашт. Механизмҳои боқимондаи муҳофизати Cloudflare ба таври муқаррарӣ кор мекарданд.

Пас аз он мо ба барқарорсозии WAF шурӯъ кардем. Вазъият ғайримуқаррарӣ буд, аз ин рӯ мо дар як шаҳр санҷишҳои манфӣ (аз худ мепурсидем, ки оё тағирот воқеан мушкил аст) ва санҷишҳои мусбӣ (боварӣ ҳосил кунед, ки бозгашт кор мекард) дар як шаҳр бо истифода аз трафики алоҳида ва интиқоли муштариёни пулакӣ аз он ҷо гузаронида шуд.

Дар соати 14:52 мо итминон ҳосил кардем, ки сабабашро фаҳмидем ва ислоҳ кардем ва боз WAF-ро фаъол кардем.

Чӣ тавр Cloudflare кор мекунад

Cloudflare дорои як гурӯҳи муҳандисонест, ки ба идоракунии қоидаҳои WAF бахшида шудаанд. Онҳо мекӯшанд, ки сатҳи ошкоркуниро беҳтар созанд, мусбатҳои бардурӯғро коҳиш диҳанд ва ба таҳдидҳои нав ҳангоми пайдо шудани онҳо зуд вокуниш нишон диҳанд. Дар 60 рӯзи охир 476 дархости тағирот барои қоидаҳои идорашавандаи WAF коркард шудааст (ба ҳисоби миёна ҳар 3 соат як).

Ин тағироти мушаххас бояд дар реҷаи моделиронӣ ҷойгир карда шавад, ки трафики воқеии муштарӣ аз қоида мегузарад, аммо ҳеҷ чиз баста намешавад. Мо ин режимро барои санҷидани самаранокии қоидаҳо ва чен кардани сатҳи мусбати бардурӯғ ва манфии бардурӯғ истифода мебарем. Аммо ҳатто дар ҳолати моделиронӣ, қоидаҳо бояд воқеан иҷро шаванд ва дар ин ҳолат қоида як ифодаи муқаррариро дар бар мегирад, ки захираҳои аз ҳад зиёди протсессорро истеъмол мекард.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Тавре ки шумо аз дархости тағирот дар боло мебинед, мо нақшаи ҷойгиркунӣ, нақшаи бозгашт ва истинод ба расмиёти дохилии стандартии амалиётӣ (SOP) барои ин навъи ҷойгиркунӣ дорем. SOP барои тағир додани қоида имкон медиҳад, ки он дар саросари ҷаҳон нашр шавад. Воқеан, дар Cloudflare, корҳо комилан ба таври дигар анҷом дода мешаванд ва SOP дикта мекунад, ки мо аввал нармафзорро барои озмоиш ва истифодаи дохилӣ ба нуқтаи дохилии ҳузур (PoP) (ки кормандони мо истифода мебаранд), сипас ба шумораи ками мизоҷони худ мефиристем. як макони ҷудогона, сипас ба шумораи зиёди муштариён ва танҳо баъд ба тамоми ҷаҳон.

Чунин ба назар мерасад. Мо git-ро дар дохили BitBucket истифода мебарем. Муҳандисоне, ки дар тағирот кор мекунанд, кодеро пешниҳод мекунанд, ки ба TeamCity сохта шудааст ва вақте ки сохтмон мегузарад, баррасиҳо таъин карда мешаванд. Пас аз тасдиқи дархости кашидан, код ҷамъ карда мешавад ва як қатор санҷишҳо гузаронида мешаванд (боз).

Агар сохтан ва санҷишҳо бомуваффақият анҷом дода шаванд, дар Jira дархости тағирот эҷод карда мешавад ва менеҷер ё роҳбари мувофиқ бояд тағиротро тасдиқ кунад. Пас аз тасдиқ, ҷойгиркунӣ ба истилоҳ "PoP menagerie" сурат мегирад: DOG, PIG ва Канарӣ (саг, хук ва канарейка).

DOG PoP як Cloudflare PoP аст (мисли дигар шаҳрҳои мо), ки танҳо аз ҷониби кормандони Cloudflare истифода мешавад. PoP барои истифодаи дохилӣ ба шумо имкон медиҳад, ки мушкилотро пеш аз ворид шудани трафики муштариён ба ҳалли мушкилот ҳал кунед. Чизи муфид.

Агар санҷиши DOG муваффақ бошад, код ба марҳилаи PIG (гвинеяи хук) мегузарад. Ин Cloudflare PoP аст, ки дар он миқдори ками трафики муштарӣ тавассути рамзи нав ҷараён мегирад.
Агар ҳамааш хуб бошад, код ба Канария меравад. Мо дар қисматҳои гуногуни ҷаҳон се Canary PoP дорем. Дар онҳо трафики муштариёни пулакӣ ва ройгон аз рамзи нав мегузарад ва ин охирин санҷиши хатогиҳост.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019
Раванди барориши нармафзор дар Cloudflare

Агар код дар Канария хуб бошад, мо онро мебарорем. Гузаронидани тамоми марҳилаҳо - DOG, PIG, Canary, тамоми ҷаҳон - вобаста аз тағир додани код, якчанд соат ё рӯзро мегирад. Аз сабаби гуногунии шабака ва муштариёни Cloudflare, мо пеш аз интишори он дар саросари ҷаҳон ба ҳамаи муштариён кодро бодиққат озмоиш мекунем. Аммо WAF ин равандро мушаххасан риоя намекунад, зеро таҳдидҳо бояд ба зудӣ ҷавоб дода шаванд.

Таҳдидҳои WAF
Дар тӯли чанд соли охир, афзоиши назарраси таҳдидҳо дар барномаҳои умумӣ ба назар мерасад. Ин ба дастрасии бештари воситаҳои санҷиши нармафзор вобаста аст. Масалан, мо ба наздикӣ дар бораи он навишта будем фуҷур).

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019
Манбаъ: https://cvedetails.com/

Бисёр вақтҳо, далели консепсия эҷод карда мешавад ва фавран дар Github нашр карда мешавад, то дастаҳое, ки барномаро нигоҳ медоранд, метавонанд онро зуд озмоиш кунанд ва ба таври кофӣ муҳофизат карда шаванд. Аз ин рӯ, Cloudflare ба қобилияти вокуниш ба ҳамлаҳои нав ниёз дорад, то муштариён имкони ислоҳи нармафзори худро дошта бошанд.

Намунаи олии вокуниши фаврии Cloudflare ин татбиқи муҳофизати осебпазирии SharePoint дар моҳи май мебошад (дар инҷо хонед). Тақрибан дарҳол пас аз эълони эълонҳо, мо шумораи зиёди кӯшишҳоро барои истифода аз осебпазирӣ дар насбҳои SharePoint муштариёни худ мушоҳида кардем. Бачаҳои мо пайваста таҳдидҳои нав ва қоидаҳои навиштанро назорат мекунанд, то муштариёни моро муҳофизат кунанд.

Қоидае, ки рӯзи панҷшанбе боиси мушкилот шуд, бояд аз скриптҳои байнисоҳавӣ (XSS) муҳофизат мекард. Чунин ҳамлаҳо низ дар солҳои охир хеле бештар шудааст.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019
Манбаъ: https://cvedetails.com/

Тартиби стандартии тағир додани қоидаи идорашаванда барои WAF ин гузаронидани санҷиши пайвастаи ҳамгироӣ (CI) пеш аз густариши глобалӣ мебошад. Панҷшанбеи гузашта мо ин корро кардем ва қоидаҳоро ҷорӣ кардем. Дар соати 13:31, муҳандис дархости тасдиқшудаи ҷалбро бо тағирот пешниҳод кард.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Дар соати 13:37 TeamCity қоидаҳоро ҷамъоварӣ кард, санҷишҳо анҷом дод ва ба пеш иҷозат дод. Маҷмӯаи санҷишии WAF функсияҳои асосии WAF-ро месанҷад ва аз шумораи зиёди санҷишҳои воҳидҳо барои вазифаҳои инфиродӣ иборат аст. Пас аз санҷишҳои воҳид, мо қоидаҳои WAF-ро бо истифода аз шумораи зиёди дархостҳои HTTP озмоиш кардем. Дархостҳои HTTP тафтиш мекунанд, ки кадом дархостҳо бояд аз ҷониби WAF баста шаванд (барои ҷилавгирӣ аз ҳамла) ва ба онҳо иҷозат дода шавад (то ҳама чизро манъ накунанд ва аз мусбатҳои бардурӯғ канорагирӣ кунанд). Аммо мо истифодаи аз ҳад зиёди CPU-ро санҷида натавонистем ва баррасии гузоришҳои сохташудаи WAF-и қаблӣ нишон медиҳад, ки вақти иҷрои санҷиши қоидаҳо зиёд нашудааст ва гумон кардан душвор буд, ки захираҳои кофӣ вуҷуд надоранд.

Санҷишҳо гузаштанд ва TeamCity ба таври худкор тағиротро соати 13:42 оғоз кард.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Quicksilver

Қоидаҳои WAF ба бартарафсозии фаврии таҳдидҳо тамаркуз мекунанд, аз ин рӯ мо онҳоро бо истифода аз мағозаи тақсимшудаи калидии Quicksilver ҷойгир мекунем, ки тағиротро дар тӯли сонияҳо дар саросари ҷаҳон паҳн мекунад. Ҳама муштариёни мо ин технологияро ҳангоми тағир додани конфигуратсия дар панели идоракунӣ ё тавассути API истифода мебаранд ва ба шарофати он мо ба тағирот бо суръати барқ ​​​​вокуниш медиҳем.

Мо дар бораи Quicksilver чандон сӯҳбат накардаем. Пештар мо истифода мебурдем Киото магнат ҳамчун як мағозаи калидӣ дар саросари ҷаҳон паҳн шудааст, аммо бо он мушкилоти амалиётӣ вуҷуд дошт ва мо мағозаи худро навиштем, ки дар зиёда аз 180 шаҳр такрор карда шудааст. Ҳоло мо Quicksilver-ро барои ворид кардани тағйироти конфигуратсия ба мизоҷон, навсозии қоидаҳои WAF ва паҳн кардани коди JavaScript, ки аз ҷониби муштариён ба Cloudflare Workers навишта шудааст, истифода мебарем.

Аз пахш кардани тугма дар панели идоракунӣ ё занг задан ба API барои тағир додани конфигуратсия дар саросари ҷаҳон танҳо чанд сония лозим аст. Мизоҷон ин суръати насбро дӯст медоштанд. Ва Коргарон ба онҳо паҳнкунии нармафзори глобалии қариб фаврӣ медиҳанд. Ба ҳисоби миёна, Quicksilver дар як сония тақрибан 350 тағиротро паҳн мекунад.

Ва Quicksilver хеле зуд аст. Ба ҳисоби миёна, мо 99 фоизи 2,29 сонияро ба даст овардем, то тағиротро ба ҳар як компютер дар саросари ҷаҳон паҳн кунем. Суръат одатан чизи хуб аст. Дар ниҳоят, вақте ки шумо функсияро фаъол мекунед ё кэшро тоза мекунед, он қариб фавран ва дар ҳама ҷо рӯй медиҳад. Ирсоли код тавассути Cloudflare Workers бо ҳамон суръат сурат мегирад. Cloudflare ба муштариёни худ ваъда медиҳад, ки навсозиҳои зудро дар вақти лозима.

Аммо дар ин сурат суръат ба сари мо шӯхии бераҳмона бозид ва қоидаҳо дар як сония дар ҳама ҷо дигар шуданд. Шумо шояд пай бурда бошед, ки рамзи WAF Lua-ро истифода мебарад. Cloudflare Lua-ро дар истеҳсолот ва тафсилот ба таври васеъ истифода мебарад Луа дар WAF мо ҳастем аллакай мухокима карда шуд. Луа WAF истифода мебарад PCRE дохилӣ ва барои мувофиқат backtracking татбиқ мекунад. Он механизмҳои муҳофизат аз ифодаҳое, ки аз назорат берун мешаванд, надорад. Дар зер ман дар бораи ин ва мо дар ин бора чӣ кор карда истодаем, бештар гап мезанам.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Пеш аз ҷойгиркунии қоидаҳо, ҳама чиз осон буд: дархости кашидан сохта ва тасдиқ карда шуд, лӯлаи CI/CD рамзро ҷамъоварӣ ва озмоиш кард, дархости тағирот мувофиқи SOP, ки ҷойгиркунӣ ва бозгаштро танзим мекунад, пешниҳод карда шуд ва ҷойгиркунӣ анҷом ёфт.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019
Раванди густариши Cloudflare WAF

Чӣ хато рафт
Тавре ки ман гуфтам, мо ҳар ҳафта даҳҳо қоидаҳои нави WAF-ро ҷорӣ мекунем ва мо системаҳои зиёде дорем, ки аз оқибатҳои манфии чунин ҷойгиркунӣ муҳофизат карда шаванд. Ва ҳангоме ки чизе нодуруст меравад, ин одатан якҷояшавии якчанд ҳолатҳо дар як вақт аст. Агар шумо танҳо як сабаб пайдо кунед, ин, албатта, итминонбахш аст, аммо ин на ҳамеша дуруст аст. Инҳоянд сабабҳое, ки якҷоя боиси нокомии хидмати HTTP/HTTPS-и мо шуданд.

  1. Муҳандис як ибораи муқаррариро навишт, ки метавонад боиси аз ҳад зиёд шавад ақибнишинӣ.
  2. Хусусияте, ки метавонист ифодаи муқаррариро аз беҳуда сарф кардани CPU пешгирӣ кунад, дар рефакторинги WAF чанд ҳафта пеш иштибоҳан хориҷ карда шуд - рефакторинг барои он лозим буд, ки WAF захираҳои камтарро истеъмол кунад.
  3. Муҳаррики ифодаи муқаррарӣ кафолати мураккаб надошт.
  4. Маҷмӯи санҷишӣ истеъмоли аз ҳад зиёди CPU-ро муайян карда натавонист.
  5. SOP имкон медиҳад, ки тағироти ғайритаъхирии қоидаҳо дар саросари ҷаҳон бидуни раванди чандқадам амалӣ карда шаванд.
  6. Нақшаи баргардонидан ду маротиба сохтани пурраи WAF-ро талаб мекард, ки вақти зиёдро талаб мекард.
  7. Аввалин огоҳӣ дар бораи мушкилоти глобалии трафик хеле дер оғоз карда шуд.
  8. Мо барои навсозии саҳифаи ҳолат чанд вақт гирифтем.
  9. Мо бо сабаби хатогӣ дар дастрасӣ ба системаҳо мушкилот доштем ва тартиби гузариш хуб муқаррар карда нашудааст.
  10. Муҳандисони SRE дастрасӣ ба баъзе системаҳоро аз даст доданд, зеро мӯҳлати эътиборномаи онҳо бо сабабҳои амниятӣ тамом шудааст.
  11. Мизоҷони мо ба панели Cloudflare ё API дастрасӣ надоштанд, зеро онҳо аз минтақаи Cloudflare мегузаранд.

Аз рӯзи панҷшанбеи гузашта чӣ тағйир ёфт

Аввалан, мо ҳама корҳоро оид ба релизҳо барои WAF комилан қатъ кардем ва корҳои зеринро иҷро карда истодаем:

  1. Мо муҳофизати аз ҳад зиёди CPU-ро, ки хориҷ карда будем, дубора ҷорӣ мекунем. (Тайёр)
  2. Санҷиши дастӣ ҳамаи 3868 қоидаҳо дар қоидаҳои идорашаванда барои WAF барои дарёфт ва ислоҳи дигар ҳолатҳои эҳтимолии бозгашти аз ҳад зиёд. (Тафтиш анҷом ёфт)
  3. Мо профили иҷроишро барои ҳама қоидаҳо дар маҷмӯи санҷиш дохил мекунем. (Интизор меравад: 19 июл)
  4. Гузариш ба муҳаррики ифодаи муқаррарӣ re2 ё зангин - ҳарду кафолати вақти корӣ медиҳанд. (Интизор меравад: 31 июл)
  5. Мо SOP-ро аз нав менависем, то қоидаҳоро марҳила ба марҳила ҷойгир кунем, ба монанди дигар нармафзор дар Cloudflare, аммо дар айни замон қобилияти густариши фавқулоддаи глобалиро дорем, агар ҳамлаҳо аллакай оғоз шуда бошанд.
  6. Мо қобилияти фавран хориҷ кардани панели Cloudflare ва API-ро аз минтақаи Cloudflare таҳия карда истодаем.
  7. Автоматикунонии навсозии саҳифа Ҳолати Cloudflare.

Муддати дароз мо аз Lua WAF, ки ман чанд сол пеш навишта будам, дур мешавем. Гузаронидани WAF ба системаи нави девор. Ҳамин тариқ, WAF тезтар мешавад ва сатҳи иловагии муҳофизатро мегирад.

хулоса

Ин нокомӣ барои мо ва муштариёни мо мушкилот ба бор овард. Мо барои ислоҳи вазъият зуд амал кардем ва ҳоло дар болои камбудиҳои равандҳое, ки боиси садама шуданд, кор карда истодаем ва инчунин амиқтар кофта истодаем, то аз мушкилоти эҳтимолӣ бо ибораҳои муқаррарӣ дар оянда ҳангоми гузаштан ба технологияи нав эмин шаванд.

Мо аз ин қатъшавӣ хеле хиҷил ҳастем ва аз муштариёни худ узр мехоҳем. Умедворем, ки ин тағйиротҳо дигар такрор нашаванд.

Ариза. Бозгашти ифодаҳои муқаррарӣ

Барои фаҳмидани он, ки чӣ тавр ифода карда мешавад:

(?:(?:"|'|]|}||d
(?:nan|infinity|true|false|null|undefined|symbol|math)|`|-
|+)+[)]*;?((?:s|-|~|!|{}||||+)*.*(?:.*=.*)))

тамоми захираҳои CPU-ро хӯрд, шумо бояд каме дар бораи кор кардани муҳаррики ифодаи муқаррарии муқаррарӣ каме донед. Мушкилот дар ин ҷо намуна аст .*(?:.*=.*). (?: ва мувофиқ ) гурӯҳи ғайрифаъол аст (яъне ифодаи дар қавс ҳамчун ифодаи ягона гурӯҳбандӣ шудааст).

Дар заминаи истеъмоли аз ҳад зиёди CPU, ин намунаро метавон ҳамчун тавсиф кард .*.*=.*. Дар ин шакл, намуна ба таври нолозим мураккаб менамояд. Аммо муҳимтар аз ҳама, дар ҷаҳони воқеӣ, ифодаҳо (ба монанди ибораҳои мураккаб дар қоидаҳои WAF), ки аз муҳаррик талаб мекунанд, ки бо порча ва пас аз порчаи дигар мувофиқат кунад, метавонад ба бозгашти фалокатовар оварда расонад. Ва барои хамин.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Дар ифодаи муқаррарӣ . маънои онро дорад, ки шумо бояд ба як аломат мувофиқат кунед, .* - ба сифр ё зиёда аломатҳои "тамаъкорона" мувофиқат кунед, яъне ҳадди аксар аломатҳоро сабт кунед, то .*.*=.* маънои онро дорад, ки ба сифр ё зиёда аломатҳо мувофиқат мекунанд, пас ба сифр ё зиёда аломатҳо мувофиқат мекунанд, аломати literal = -ро пайдо мекунанд, ба сифр ё бештар аломатҳо мувофиқат мекунанд.

Биёед хати санҷишро гирем x=x. Он ба ифода мувофиқат мекунад .*.*=.*. .*.* пеш аз он ки аломати баробар ба аввал мувофиқат кунад x (яке аз гуруххо .* мувофиқат мекунад x, ва дуюм - аломатҳои сифр). .* пас аз = мувофиқатҳои охирин x.

Ин муқоиса 23 қадамро талаб мекунад. Гурӯҳи якум .* в .*.*=.* хасисона амал мекунад ва ба тамоми сатр мувофик мекунад x=x. Мотор ба гурухи дигар мегузарад .*. Мо дигар аломатҳои мувофиқ надорем, бинобар ин гурӯҳи дуюм .* бо аломатҳои сифр мувофиқат мекунад (ин иҷозат дода мешавад). Баъд мотор ба суи нишона харакат мекунад =. Дигар рамзҳо вуҷуд надоранд (гурӯҳи якум .* тамоми ифодаро истифода бурд x=x), ҳеҷ муқоиса ба амал намеояд.

Ва он гоҳ муҳаррики ифодаи муқаррарӣ ба ибтидо бармегардад. Вай ба гурухи якум мегузарад .* ва мукоиса мекунад с x= (ба ҷои x=x), баъд гурухи дуюмро кабул мекунад .*. Гурухи дуюм .* бо дуюм мукоиса карда мешавад x, ва мо боз ягон аломат надорем. Ва вакте ки двигатель боз мерасад = в .*.*=.*, ҳеҷ чиз кор намекунад. Ва боз ба ақиб бармегардад.

Ин дафъа гурух .* то ҳол мувофиқат мекунад x=, балки гурухи дуюм .* дигар на x, ва аломатҳои сифр. Мотор кӯшиш мекунад, ки аломати аслӣ пайдо кунад = дар намуна .*.*=.*, вале намебарояд (охир, гурухи якум аллакай онро ишгол кардааст .*). Ва ӯ боз ақибнишинӣ мекунад.

Ин дафъа гурухи якум .* танҳо x-и аввалро мегирад. Аммо гурӯҳи дуюм .* «тамаъкорона» ба даст меорад =x. Оё шумо аллакай тахмин кардаед, ки чӣ мешавад? Мотор мекӯшад, ки ба маънои аслӣ мувофиқат кунад =, ноком мешавад ва боз як ақибнишинӣ мекунад.

Гурӯҳи якум .* то ҳол ба аввалин мувофиқат мекунад x... Дуюм .* танҳо мегирад =. Албатта, муҳаррик наметавонад ба маънои аслӣ мувофиқат кунад =, зеро гурухи дуюм аллакай ин корро кардааст .*. Ва боз ақибнишинӣ. Ва мо кӯшиш мекунем, ки сатри се аломатро мувофиқ созем!

Дар натича гурухи якум .* танҳо ба аввал мувофиқат мекунад x, дуюм .* - бо аломатҳои сифр, ва муҳаррик дар ниҳоят ба ҳарф мувофиқат мекунад = дар ифода с = дар мувофиқат. Оянда гурӯҳи охирин аст .* бо охирин мукоиса карда мешавад x.

23 қадам танҳо барои x=x. Видеои кӯтоҳро дар бораи истифодаи Perl тамошо кунед Regexp :: Debugger, ки нишон медиҳад, ки чӣ тавр қадамҳо ва бозгашт ба амал меоянд.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Ин аллакай кори зиёде аст, аммо ба ҷои он чӣ мешавад x=x дорем x=xx? Ин 33 қадам аст. Ва агар x=xxx? 45. Муносибат хаттӣ нест. График муқоисаро аз x=x ба x=xxxxxxxxxxxxxxxxxxxx (20 x после =). Агар мо 20 x пас аз =, муҳаррик мувофиқатро дар 555 қадам анҷом медиҳад! (Ғайр аз ин, агар мо аз даст дода бошем x= ва сатр аз 20 иборат аст x, двигатель 4067 кадам мегузорад, то фахмад, ки ягон гугирд нест).

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Ин видео ҳама ақибро барои муқоиса нишон медиҳад x=xxxxxxxxxxxxxxxxxxxx:

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Мушкилот дар он аст, ки вақте ки андозаи сатр зиёд мешавад, вақти мувофиқат ба таври фаврӣ меафзояд. Аммо агар ифодаи муқаррарӣ каме тағир дода шавад, вазъ метавонад боз ҳам бадтар шавад. Фарз мекунем, ки мо доштем .*.*=.*; (яъне дар охири қолаб нуқтаи вергул мавҷуд буд). Масалан, барои мувофиқ кардани ифодаи монанди foo=bar;.

Ва дар ин ҷо ақибнишинӣ як фалокати воқеӣ хоҳад буд. Барои мукоиса x=x на 90, балки 23 кадам мегузорад. Ва ин ракам зуд меафзояд. Барои муқоиса x= ва 20 x, 5353 кадам лозим аст. Ана диаграмма. Ба арзишҳои меҳвар нигаред Y нисбат ба диаграммаи қаблӣ.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Агар шумо таваҷҷӯҳ дошта бошед, ҳамаи 5353 қадамҳои мувофиқи номуваффақро санҷед x=xxxxxxxxxxxxxxxxxxxx и .*.*=.*;

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Бо истифода аз танбал, на мувофиқати хасисона, дараҷаи ақибнишиниро метавон назорат кард. Агар мо ифодаи аслиро ба .*?.*?=.*?, барои муқоиса x=x он 11 қадам (на 23) мегирад. Дар бобати x=xxxxxxxxxxxxxxxxxxxx... Ҳама ба хотири он ? после .* ба муҳаррик мегӯяд, ки пеш аз ҳаракат ба шумораи ҳадди ақали аломатҳо мувофиқат кунад.

Аммо харитасозии танбалӣ мушкилоти бозгаштро пурра ҳал намекунад. Агар мисоли фалокатоварро иваз кунем .*.*=.*; ба .*?.*?=.*?;, мухлати ичро як хел мемонад. x=x то ҳол талаб 555 қадамҳои, ва x= ва 20 x - 5353.

Ягона коре, ки метавон анҷом дод (ба ҷуз аз нав навиштани намуна барои мушаххасоти бештар) даст кашидан аз муҳаррики ифодаи муқаррарӣ бо механизми бозгашти он мебошад. Ин аст он чизе ки мо дар тӯли чанд ҳафтаи оянда мекунем.

Роҳи ҳалли ин мушкилот аз соли 1968, вақте ки Кент Томпсон мақола навишт, маълум аст Усулҳои барномасозӣ: Алгоритм ҷустуҷӯи ифодаи муқаррарӣ («Усулҳои барномасозӣ: Алгоритми ҷустуҷӯи ифодаҳои муқаррарӣ»). Дар мақола механизме тасвир шудааст, ки ба шумо имкон медиҳад ифодаи муқаррариро ба мошинҳои ҳолати ниҳоии ғайридетерминистӣ табдил диҳед ва пас аз тағирёбии ҳолат дар мошинҳои ҳолати ниҳоии ғайридетерминистӣ, алгоритмеро истифода баред, ки вақти иҷроаш аз сатри мувофиқат хаттӣ вобаста аст.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Усулҳои барномасозӣ
Алгоритми ҷустуҷӯи ифодаи муқаррарӣ
Кен Томпсон

Bell Telephone Laboratories, Inc., Мюррей Хилл, Ню Ҷерсӣ

Он усули ҷустуҷӯи сатри мушаххаси аломатҳоро дар матн тавсиф мекунад ва татбиқи ин усулро дар шакли компилятор баррасӣ мекунад. Компилятор ифодаи муқаррариро ҳамчун рамзи сарчашма мегирад ва барномаи IBM 7094 -ро ҳамчун рамзи объект истеҳсол мекунад. Барномаи объектӣ вурудро дар шакли матни ҷустуҷӯ қабул мекунад ва ҳар дафъае, ки сатри матн бо ифодаи муқаррарии додашуда мувофиқат мекунад, сигнал медиҳад. Дар мақола мисолҳо, мушкилот ва ҳалли онҳо оварда шудааст.

Алгоритм
Алгоритмҳои ҷустуҷӯии қаблӣ боиси ақибнишинӣ мешуданд, агар ҷустуҷӯи қисман бомуваффақият натиҷа надод.

Дар реҷаи компиляция алгоритм бо аломатҳо кор намекунад. Он дастурҳоро ба коди тартибдодашуда интиқол медиҳад. Иҷро хеле зуд аст - пас аз интиқол додани маълумот ба болои рӯйхат, он ба таври худкор ҳамаи аломатҳои пайдарпайи имконпазирро дар ифодаи муқаррарӣ ҷустуҷӯ мекунад.
Алгоритми ҷамъоварӣ ва ҷустуҷӯ ба муҳаррири матни мубодилаи вақт ҳамчун ҷустуҷӯи контекстӣ дохил карда шудааст. Албатта, ин аз ягона татбиқи чунин тартиби ҷустуҷӯ дур аст. Масалан, варианти ин алгоритм ҳамчун ҷустуҷӯи рамз дар ҷадвал дар ассемблер истифода мешавад.
Тахмин меравад, ки хонанда бо ибораҳои муқаррарӣ ва забони барномасозии компютерии IBM 7094 шинос аст.

Мураттиб
Тартибдиҳанда аз се марҳилаи мувозӣ иборат аст. Марҳилаи аввал филтркунии синтаксис мебошад, ки танҳо имкон медиҳад, ки ифодаҳои муқаррарии аз ҷиҳати синтаксисӣ дуруст гузаранд. Ин қадам инчунин оператори "·" -ро барои мувофиқ кардани ифодаҳои муқаррарӣ дохил мекунад. Дар қадами дуюм, ифодаи муқаррарӣ ба шакли постфикс табдил дода мешавад. Дар марҳилаи сеюм рамзи объект сохта мешавад. 2 марҳилаи аввал аён аст ва мо дар бораи онҳо таваққуф намекунем.

Мақолаи Томпсон дар бораи мошинҳои ҳолати ниҳоии ғайримуқаррарӣ сухан намегӯяд, аммо он алгоритми вақти хатиро хуб шарҳ медиҳад ва барномаи ALGOL-60-ро пешниҳод мекунад, ки рамзи забони ассемблерро барои IBM 7094 тавлид мекунад. Иҷроиш мушкил аст, аммо идея хеле содда аст.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

роҳи ҷустуҷӯи ҷорӣ. Он бо аломати ⊕ бо як вуруд ва ду баромад нишон дода мешавад.
Дар расми 1 вазифаҳои марҳилаи сеюми тартибдиҳӣ ҳангоми табдил додани мисоли ифодаи муқаррарӣ нишон дода шудаанд. Се аломати аввал дар мисол a, b, c мебошанд ва ҳар кадом як вуруди стек S[i] ва майдони NNODE эҷод мекунанд.

NNODE ба рамзи мавҷуда барои тавлиди ифодаи муқаррарии натиҷавӣ дар як вуруди стек (ниг. Расми 5)

Ин аст он чизе ки ифодаи муқаррарӣ ба назар мерасад .*.*=.*, агар шумо онро тавре тасаввур кунед, ки дар расмҳои мақолаи Томпсон.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Дар расми. 0 панҷ ҳолати аз 0 саршаванда ва 3 давра вуҷуд доранд, ки аз ҳолати 1, 2 ва 3 оғоз мешаванд. Ин се давра ба се ҳолат мувофиқат мекунанд. .* дар ифодаи муқаррарӣ. 3 байзавии дорои нуқтаҳо ба як аломат мувофиқат мекунад. Байзавии бо аломати = ба аломати аслӣ мувофиқат мекунад =. Давлат 4 ниҳоӣ аст. Агар мо ба он расем, пас ифодаи муқаррарӣ мувофиқат мекунад.

Барои дидани он, ки чӣ гуна чунин диаграммаи ҳолатро барои мувофиқати ифодаи муқаррарӣ истифода бурдан мумкин аст .*.*=.*, мо мувофиқати сатрро дида мебароем x=x. Барнома аз ҳолати 0 оғоз мешавад, тавре ки дар расм нишон дода шудааст. 1.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Барои кор кардани ин алгоритм, мошини давлатӣ бояд дар як вақт дар якчанд ҳолат бошад. Мошини ниҳоии муайяннашаванда ҳама гузариши имконпазирро дар як вақт анҷом медиҳад.

Пеш аз он ки вақти хондани маълумоти воридотӣ дошта бошад, он ба ҳарду ҳолати аввал мегузарад (1 ва 2), тавре ки дар расм нишон дода шудааст. 2.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Дар расми. 2 нишон медиҳад, ки вақте ки ӯ ба аввал назар мекунад, чӣ рӯй медиҳад x в x=x. x метавонад ба нуқтаи боло харита, аз ҳолати 1 ва бозгашт ба ҳолати 1. Ё x метавонад ба нуқтаи поён харита карда, аз ҳолати 2 ва бозгашт ба ҳолати 2.

Пас аз мувофиқати аввал x в x=x мо то ҳол дар ҳолати 1 ва 2 ҳастем. Мо ба ҳолати 3 ё 4 расида наметавонем, зеро ба мо аломати аслӣ лозим аст =.

Пас аз он алгоритм баррасӣ мекунад = в x=x. Мисли x пеш аз он, он метавонад ба яке аз ду ҳалқаҳои боло аз ҳолати 1 то ҳолати 1 ё аз ҳолати 2 ба ҳолати 2 мувофиқат карда шавад, аммо алгоритм метавонад ба асли аслӣ мувофиқат кунад. = ва аз ҳолати 2 ба ҳолати 3 (ва фавран 4) гузаред. Ин дар расм нишон дода шудааст. 3.

Тафсилоти қатъи Cloudflare дар 2 июли соли 2019

Пас аз он алгоритм ба охирин мегузарад x в x=x. Аз иёлатҳои 1 ва 2 ҳамон гузаришҳо ба ҳолати 1 ва 2 имконпазиранд. Аз ҳолати 3 x метавонад ба нуқтаи тарафи рост мувофиқат кунад ва ба ҳолати 3 баргардад.

Дар ин марҳила, ҳар як аломат x=x баррасӣ ва азбаски мо ба ҳолати 4 расидем, ифодаи муқаррарӣ ба ин сатр мувофиқат мекунад. Ҳар як аломат як маротиба коркард карда мешавад, аз ин рӯ ин алгоритм дар дарозии сатри вуруд хаттӣ аст. Ва ҳеҷ ақибнишинӣ.

Аён аст, ки пас аз расидан ба ҳолати 4 (вақте ки алгоритм мувофиқат мекунад x=) тамоми ифодаи муқаррарӣ мувофиқат мекунад ва алгоритм метавонад бидуни баррасӣ қатъ шавад x.

Ин алгоритм ба таври хаттӣ аз андозаи сатри вуруд вобаста аст.

Манбаъ: will.com

Илова Эзоҳ