Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Hapit 9 ka tuig ang milabay Cloudflare usa ka gamay nga kompanya, ug wala ako nagtrabaho alang niini, usa ra ako ka kustomer. Usa ka bulan pagkahuman sa paglansad sa Cloudflare, nakadawat ako usa ka pahibalo nga ang akong website jgc.orgAng DNS daw dili molihok. Ang Cloudflare nakahimo og kausaban sa Mga Protocol Buffer, ug adunay guba nga DNS.

Gisulatan dayon nako si Matthew Prince nga adunay titulo nga "Asa ang akong DNS?" ug gibalik niya ang taas nga tubag nga puno sa mga teknikal nga detalye (basaha ang tibuok sulat dinhi), nga akong gitubag:

Gikan sa: John Graham-Cumming
Petsa: Oktubre 7, 2010, 9:14
Subject: Re: Asa akong DNS?
Ngadto kang: Matthew Prince

Nindot nga report, salamat. Tawagan gyud nako kung adunay mga problema. Lagmit angayan nga isulat ang usa ka post bahin niini sa higayon nga imong nakolekta ang tanan nga teknikal nga impormasyon. Sa akong hunahuna ang mga tawo malingaw sa usa ka bukas ug matinud-anon nga istorya. Ilabi na kung imong ilakip ang mga graph niini aron ipakita kung giunsa ang pag-uswag sa trapiko sukad sa paglansad.

Ako adunay maayo nga pag-monitor sa akong site, ug nakadawat ako usa ka SMS bahin sa matag kapakyasan. Ang pag-monitor nagpakita nga ang kapakyasan nahitabo gikan sa 13:03:07 hangtod 14:04:12. Ang mga pagsulay gihimo matag lima ka minuto.

Sigurado ko nga masabtan nimo kini. Sigurado ka ba nga wala nimo kinahanglan ang imong kaugalingon nga tawo sa Europe? 🙂

Ug siya mitubag:

Gikan sa: Matthew Prince
Petsa: Oktubre 7, 2010, 9:57
Subject: Re: Asa akong DNS?
Ngadto kang: John Graham-Cumming

Salamat. Gitubag namo ang tanan nga nagsulat. Paingon na ko sa opisina karon ug magsuwat mi sa blog o magpin ug opisyal nga post sa among bulletin board. Ako hingpit nga mouyon, ang pagkamatinud-anon mao ang tanan.

Karon ang Cloudflare usa ka dako nga kompanya, nagtrabaho ako alang niini, ug karon kinahanglan nako nga isulat sa dayag ang bahin sa among sayup, ang mga sangputanan niini ug ang among mga aksyon.

Mga panghitabo sa Hulyo 2

Niadtong Hulyo 2, gilusad namo ang bag-ong lagda sa Managed Rules for WAFs tungod niini Ang mga kapanguhaan sa CPU nahutdan sa matag processor core nga nagproseso sa trapiko sa HTTP/HTTPS sa Cloudflare network sa tibuok kalibutan. Kanunay namong gipauswag ang gidumala nga mga lagda alang sa WAFs isip tubag sa bag-ong mga kahuyangan ug mga hulga. Sa Mayo, pananglitan, kami nagdali idugang ang lagdaaron mapanalipdan batok sa usa ka seryoso nga kahuyang sa SharePoint. Ang kinatibuk-ang punto sa among WAF mao ang abilidad sa paspas ug tibuok kalibutan nga pag-deploy sa mga lagda.

Ikasubo, ang pag-update sa miaging Huwebes adunay usa ka regular nga ekspresyon nga nag-usik sa sobra nga HTTP/HTTPS nga mga kapanguhaan sa CPU sa backtracking. Ang among kinauyokan nga proxy, CDN, ug WAF nga mga gimbuhaton nag-antus tungod niini. Gipakita sa graph nga ang mga kapanguhaan sa processor alang sa pagserbisyo sa trapiko sa HTTP/HTTPS moabot sa hapit 100% sa mga server sa among network.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019
Paggamit sa CPU sa usa ka punto sa presensya sa panahon sa usa ka insidente

Ingon usa ka sangputanan, ang among mga kliyente (ug mga kliyente sa among mga kliyente) natapos sa usa ka panid sa sayup nga 502 sa mga domain sa Cloudflare. Ang mga kasaypanan sa 502 namugna sa Cloudflare front-end nga mga web server nga aduna pa'y libre nga mga cores apan dili makahimo sa pagpakigsulti sa mga proseso nga nagdumala sa trapiko sa HTTP/HTTPS.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Nahibal-an namon kung unsa ka daghang kahasol ang nahimo niini sa among mga kostumer. Naulaw kaayo mi. Ug kini nga kapakyasan nakapugong kanamo sa epektibo nga pag-atubang sa insidente.

Kung usa ka niini nga mga kustomer, lagmit nahadlok ka, nasuko ug nasuko. Dugang pa, wala pa mi global nga mga kasamok. Ang taas nga konsumo sa CPU tungod sa usa ka lagda sa WAF nga adunay dili maayo nga pulong nga regular nga ekspresyon nga miresulta sa sobra nga backtracking. Ania ang sad-an nga ekspresyon: (?:(?:"|'|]|}||d|(?:nan|infinity|true|false|null|undefined|symbol|math)|`|-|+)+[)]*;?((?:s|-|~|!|{}||||+)*.*(?:.*=.*)))

Samtang kini makapaikag sa kaugalingon nga katungod (ug hisgutan ko kini sa mas detalyado sa ubos), ang serbisyo sa Cloudflare nahulog sa 27 minuto dili lamang tungod sa dili maayo nga regular nga ekspresyon. Nagdugay kami sa paghulagway sa han-ay sa mga panghitabo nga mitultol sa kapakyasan, mao nga hinay kami sa pagtubag. Sa katapusan sa post, akong ihulagway ang backtracking sa usa ka regular nga ekspresyon ug isulti kanimo kung unsa ang buhaton niini.

Unsay nahitabo

Magsugod ta sa han-ay. Tanang oras dinhi kay sa UTC.

Sa 13:42 p.m., usa ka enhinyero sa firewall team mihimo og gamay nga kausaban sa mga lagda sa detection XSS gamit ang usa ka awtomatikong proseso. Tungod niini, gihimo ang usa ka tiket sa paghangyo sa pagbag-o. Gidumala namo ang maong mga tiket pinaagi sa Jira (screenshot sa ubos).

Human sa 3 minutos, mitungha ang unang panid sa PagerDuty, nagreport sa problema sa WAF. Kini usa ka sintetikong pagsulay nga nagsulay sa pagpaandar sa WAFs (kami adunay gatusan niini) gawas sa Cloudflare aron mamonitor ang normal nga operasyon. Gisundan dayon kini sa mga panid sa mga alerto bahin sa uban nga Cloudflare end-to-end nga mga pagsulay sa serbisyo nga napakyas, mga isyu sa trapiko sa kalibutan, kaylap nga 502 nga mga sayup, ug usa ka tonelada nga mga taho gikan sa among mga Points of Presence (PoP) sa mga lungsod sa tibuuk kalibutan nga nagpakita nga kulang. sa mga kapanguhaan sa CPU.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Nakadawat ko og ubay-ubay niini nga mga alerto, migawas gikan sa usa ka miting, ug padulong na sa lamesa sa dihang ang pangulo sa among departamento sa pagpalambo sa mga solusyon miingon nga nawad-an kami og 80% sa among trapiko. Midagan ko sa among mga inhenyero sa SRE, nga nagtrabaho na sa problema. Sa sinugdan naghunahuna kami nga kini usa ka matang sa wala mailhi nga pag-atake.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Ang mga inhenyero sa Cloudflare SRE nagkatibulaag sa tibuok kalibutan ug nagmonitor sa sitwasyon sa tibuok orasan. Kasagaran, kini nga mga alerto nagpahibalo kanimo sa piho nga lokal nga mga isyu nga limitado ang sakup, gisubay sa mga internal nga dashboard, ug nasulbad daghang beses matag adlaw. Apan kini nga mga panid ug mga pahibalo nagpakita sa usa ka butang nga seryoso kaayo, ug ang mga inhenyero sa SRE mideklarar dayon sa lebel sa kagrabe nga P0 ug mikontak sa mga management ug system engineers.

Ang among mga inhenyero sa London naminaw ug lecture sa main hall niadtong higayona. Kinahanglang mabalda ang lecture, ang tanan nagpundok sa usa ka dako nga conference room, ug daghang mga espesyalista ang gitawag. Dili kini kasagarang problema nga masulbad sa mga SRE sa ilang kaugalingon. Dinalian ang pag-apil sa husto nga mga espesyalista.

Sa 14:00 among nahibal-an nga ang problema anaa sa WAF ug walay pag-atake. Gibira sa performance team ang data sa CPU ug nahimong klaro nga ang WAF ang mabasol. Gikumpirma sa laing empleyado kini nga teorya gamit ang strace. Adunay laing nakakita sa mga troso nga adunay problema sa WAF. Sa 14:02 p.m., ang tibuok team miduol kanako sa dihang gisugyot nga gamiton ang global kill, usa ka mekanismo nga gitukod sa Cloudflare nga nagsira sa usa ka component sa tibuok kalibutan.

Giunsa namo paghimo ang global nga pagpatay alang sa WAF lahi nga istorya. Dili kini ingon ka yano. Gigamit namo ang among kaugalingong mga produkto, ug sukad sa among serbisyo access wala migana, dili namo ma-authenticate ug maka-log in sa internal control panel (sa dihang naayo na ang tanan, among nahibaw-an nga nawad-an og access ang pipila ka membro sa team tungod sa security feature nga nag-disable sa mga kredensyal kung ang internal control panel dili gamiton para sa usa ka dugay).

Ug dili kami makaadto sa among mga internal nga serbisyo, sama sa Jira o ang sistema sa pagtukod. Nagkinahanglan kami og usa ka workaround nga mekanismo, nga kanunay namong gigamit (kini kinahanglan usab nga buhaton). Sa katapusan, ang usa ka engineer nakahimo sa pag-disable sa WAF sa 14:07, ug sa 14:09, ang trapiko ug ang lebel sa CPU mibalik sa normal bisan asa. Ang ubang mga mekanismo sa pagpanalipod sa Cloudflare nagtrabaho sama sa normal.

Dayon gisugdan namo ang pagpasig-uli sa WAF. Dili ordinaryo ang sitwasyon, mao nga nagpahigayon kami og negatibo nga mga pagsulay (gipangutana ang among kaugalingon kung ang pagbag-o ba gyud ang problema) ug positibo nga mga pagsulay (pagsiguro nga ang rollback nagtrabaho) sa usa ka lungsod gamit ang lahi nga trapiko, pagbalhin sa nagbayad nga mga kostumer gikan didto.

Sa 14:52 kami kombinsido nga kami nakasabut sa rason ug naghimo sa usa ka pagtul-id, ug nakapahimo sa WAF pag-usab.

Giunsa ang pagtrabaho sa Cloudflare

Ang Cloudflare adunay usa ka grupo sa mga inhenyero nga gipahinungod sa pagdumala sa mga lagda alang sa mga WAF. Gipaningkamutan nila nga mapauswag ang mga rate sa pagkakita, makunhuran ang mga sayup nga positibo, ug dali nga pagtubag sa mga bag-ong hulga sa ilang pagtungha. Sa miaging 60 ka adlaw, adunay 476 ka hangyo sa pagbag-o nga giproseso alang sa gidumala nga mga lagda alang sa WAF (aberids nga usa matag 3 ka oras).

Kini nga partikular nga pagbag-o kinahanglan nga i-deploy sa simulation mode, diin ang tinuod nga trapiko sa kliyente moagi sa lagda, apan walay bisan unsa nga gibabagan. Gigamit namo kini nga paagi aron sulayan ang pagka-epektibo sa mga lagda ug sukdon ang bakak nga positibo ug bakak nga negatibo nga mga rate. Apan bisan sa simulation mode, ang mga lagda kinahanglan gayud nga ipatuman, ug sa kini nga kaso ang lagda adunay usa ka regular nga ekspresyon nga nag-usik sa sobra nga mga kapanguhaan sa processor.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Sama sa imong makita gikan sa hangyo sa pagbag-o sa ibabaw, kami adunay usa ka plano sa pag-deploy, usa ka plano sa pag-rollback, ug usa ka link sa usa ka internal nga standard operating procedure (SOP) alang sa kini nga matang sa pag-deploy. Ang SOP alang sa pag-usab sa usa ka lagda nagtugot niini nga mamantala sa tibuok kalibutan. Sa tinuud, sa Cloudflare, ang mga butang nahimo nga hingpit nga lahi, ug ang SOP nagdikta nga una namon ipadala ang software alang sa pagsulay ug internal nga paggamit sa usa ka internal nga punto sa presensya (PoP) (nga gigamit sa among mga empleyado), dayon sa gamay nga gidaghanon sa mga kliyente sa. usa ka hilit nga lokasyon, dayon sa daghang mga kliyente, ug unya sa tibuuk kalibutan.

Mao kini ang hitsura niini. Gigamit namon ang git sa sulod pinaagi sa BitBucket. Ang mga inhenyero nga nagtrabaho sa mga pagbag-o nagsumite sa code, nga gitukod sa TeamCity, ug kung ang pagtukod moagi, ang mga tigrepaso gi-assign. Kung maaprobahan ang usa ka hangyo sa pagbitad, ang kodigo gitigum ug ang usa ka serye sa mga pagsulay gipadagan (pag-usab).

Kung makompleto ang pagtukod ug mga pagsulay, usa ka hangyo sa pagbag-o ang gihimo sa Jira ug ang angay nga manedyer o nanguna kinahanglan nga aprobahan ang pagbag-o. Human maaprobahan, mahitabo ang deployment ngadto sa gitawag nga “PoP menagerie”: DOG, PIG ug Kanhi (iro, baboy ug kanaryo).

Ang DOG PoP usa ka Cloudflare PoP (sama sa matag usa sa atong mga siyudad) nga gigamit lamang sa mga empleyado sa Cloudflare. Ang PoP alang sa internal nga paggamit nagtugot kanimo sa pagdakop sa mga problema sa dili pa magsugod ang trapiko sa customer ngadto sa solusyon. Mapuslanon nga butang.

Kung malampuson ang pagsulay sa DOG, ang code mobalhin sa yugto sa PIG (guinea pig). Kini ang Cloudflare PoP, diin ang usa ka gamay nga kantidad sa libre nga trapiko sa kostumer nag-agos pinaagi sa bag-ong code.
Kung maayo ang tanan, ang code moadto sa Canary. Adunay kami tulo ka Canary PoP sa lainlaing bahin sa kalibutan. Diha kanila, ang trapiko sa mga bayad ug libre nga mga kliyente moagi sa bag-ong code, ug kini ang katapusang pagsusi sa mga sayup.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019
Proseso sa Pagpagawas sa Software sa Cloudflare

Kung ok ang code sa Canary, gibuhian namon kini. Ang pag-agi sa tanan nga mga yugto - DOG, PIG, Canary, sa tibuuk kalibutan - mokabat ug daghang oras o adlaw, depende sa pagbag-o sa code. Tungod sa pagkalainlain sa network ug mga kliyente sa Cloudflare, among gisulayan pag-ayo ang code sa wala pa kini ipagawas sa tibuuk kalibutan sa tanan nga mga kliyente. Apan wala gisunod sa WAF kini nga proseso tungod kay ang mga hulga kinahanglan nga tubagon dayon.

Mga hulga sa WAF
Sa milabay nga pipila ka tuig, adunay usa ka mahinungdanon nga pagtaas sa mga hulga sa komon nga mga aplikasyon. Kini tungod sa mas daghang magamit nga mga himan sa pagsulay sa software. Pananglitan, bag-o lang mi nagsulat mahitungod sa naglibog).

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019
Source: https://cvedetails.com/

Kasagaran, usa ka pruweba sa konsepto ang gihimo ug gipatik dayon sa Github aron ang mga koponan nga nagmintinar sa aplikasyon dali nga masulayan kini ug masiguro nga kini adunay igong seguridad. Busa, gikinahanglan sa Cloudflare ang abilidad sa pagtubag sa bag-ong mga pag-atake sa labing madali nga panahon aron ang mga kustomer adunay oportunidad sa pag-ayo sa ilang software.

Usa ka maayong pananglitan sa dali nga tubag sa Cloudflare mao ang pag-deploy sa mga proteksyon sa pagkahuyang sa SharePoint sa Mayo (basaha dinhi). Hapit diha-diha dayon pagkahuman sa mga anunsyo, namatikdan namon ang daghang mga pagsulay nga pahimuslan ang pagkahuyang sa mga instalasyon sa SharePoint sa among mga kostumer. Ang among mga lalaki kanunay nga nag-monitor sa mga bag-ong hulga ug pagsulat sa mga lagda aron mapanalipdan ang among mga kostumer.

Ang lagda nga hinungdan sa problema kaniadtong Huwebes kinahanglan nga manalipod batok sa cross-site scripting (XSS). Ang ingon nga mga pag-atake nahimong mas kanunay sa bag-ohay nga mga tuig.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019
Source: https://cvedetails.com/

Ang sumbanan nga pamaagi alang sa pagbag-o sa usa ka gidumala nga lagda alang sa usa ka WAF mao ang pagpahigayon sa padayon nga integration (CI) nga pagsulay sa dili pa ang global deployment. Kaniadtong Huwebes gibuhat namon kini ug gilusad ang mga lagda. Sa ala 13:31 s.h., usa ka enhinyero ang nagsumite ug aprobado nga pull request nga may kausaban.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Sa 13:37 gikolekta sa TeamCity ang mga lagda, gipadagan ang mga pagsulay ug gihatagan ang go-ahead. Ang WAF test suite nagsulay sa kinauyokan nga gamit sa WAF ug naglangkob sa daghang gidaghanon sa mga unit test alang sa indibidwal nga mga gimbuhaton. Pagkahuman sa mga pagsulay sa yunit, gisulayan namon ang mga lagda alang sa WAF gamit ang daghang mga hangyo sa HTTP. Gisusi sa mga hangyo sa HTTP kung unsang mga hangyo ang kinahanglan nga babagan sa WAF (aron mabalda ang pag-atake) ug kung diin mahimo’g tugutan (aron dili mapugngan ang tanan ug malikayan ang mga sayup nga positibo). Apan wala namo gisulayan ang sobra nga paggamit sa CPU, ug ang pagsusi sa mga troso sa miaging WAF build nagpakita nga ang rule test execution time wala motaas, ug lisud ang pagduda nga walay igo nga mga kahinguhaan.

Ang mga pagsulay milabay ug ang TeamCity nagsugod sa awtomatikong pagdeploy sa kausaban sa ala 13:42 sa hapon.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Quicksilver

Ang mga lagda sa WAF nagpunting sa diha-diha nga pag-ayo sa hulga, mao nga among i-deploy kini gamit ang gipang-apod-apod nga key-value store sa Quicksilver, nga nagpakaylap sa mga pagbag-o sa tibuok kalibutan sa mga segundo. Ang tanan sa among mga kliyente naggamit niini nga teknolohiya sa dihang ilang giusab ang configuration sa dashboard o pinaagi sa API, ug kini salamat niini nga kami motubag sa mga kausaban uban sa kilat nga gikusgon.

Wala kaayo kami maghisgot bahin sa Quicksilver. Kaniadto among gigamit Tycoon sa Kyoto isip usa ka tibuok-kalibotang gipang-apod-apod nga key-value store, apan adunay mga problema sa operasyon niini, ug misulat kami sa among kaugalingong tindahan, nga gisundog sa labaw sa 180 ka siyudad. Gigamit na namo ang Quicksilver aron iduso ang mga pagbag-o sa configuration ngadto sa mga kliyente, pag-update sa mga lagda sa WAF, ug pag-apod-apod sa JavaScript code nga gisulat sa mga kliyente ngadto sa Cloudflare Workers.

Nagkinahanglan ra kini og pipila ka segundo gikan sa pag-klik sa usa ka buton sa usa ka dashboard o pagtawag sa usa ka API aron makahimo usa ka pagbag-o sa pag-configure sa tibuuk kalibutan. Ang mga kustomer ganahan niini nga katulin sa pag-setup. Ug ang mga Trabaho naghatag kanila sa hapit dihadiha nga global nga pag-deploy sa software. Sa aberids, ang Quicksilver nagpakaylap sa mga 350 nga pagbag-o matag segundo.

Ug ang Quicksilver paspas kaayo. Sa aberids, nakab-ot namo ang 99th percentile sa 2,29 segundos aron ipakaylap ang mga kausaban sa matag computer sa tibuok kalibotan. Ang katulin sa kasagaran usa ka maayong butang. Human sa tanan, kung imong gipalihok ang usa ka function o gilimpyohan ang cache, kini mahitabo hapit dayon ug bisan diin. Ang pagpadala sa code pinaagi sa Cloudflare Workers mahitabo sa samang katulin. Gisaad sa Cloudflare ang mga kostumer niini nga paspas nga pag-update sa husto nga oras.

Apan sa kini nga kaso, ang katulin nagdula usa ka mabangis nga komedya kanamo, ug ang mga lagda nausab bisan diin sa pila ka segundo. Tingali nakamatikod ka nga ang WAF code naggamit sa Lua. Gigamit sa Cloudflare ang Lua sa produksiyon ug mga detalye Lua sa WAF kita nahisgotan na. Gigamit sa Lua WAF PCRE sa sulod ug magamit ang backtracking alang sa pagpares. Wala kini mga mekanismo aron mapanalipdan batok sa mga ekspresyon nga dili makontrol. Sa ubos maghisgot ako og dugang mahitungod niini ug kung unsa ang atong gibuhat mahitungod niini.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Sa wala pa ipakatap ang mga lagda, hapsay ang tanan: gihimo ug giaprobahan ang hangyo sa pagbitad, gikolekta ug gisulayan sa pipeline sa CI/CD ang code, gisumite ang hangyo sa pagbag-o sumala sa SOP nga nagdumala sa deployment ug rollback, ug nahuman ang pagdeploy.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019
Proseso sa Pag-deploy sa Cloudflare WAF

Naay nahitabo
Sama sa akong giingon, nag-deploy kami daghang mga bag-ong lagda sa WAF matag semana, ug kami adunay daghang mga sistema sa lugar aron mapanalipdan batok sa mga negatibo nga sangputanan sa ingon nga pag-deploy. Ug kung adunay mahitabo nga sayup, kasagaran kini usa ka kombinasyon sa daghang mga kahimtang sa usa ka higayon. Kon makakita ka ug usa lang ka rason, kini, siyempre, makapasalig, apan kini dili kanunay tinuod. Kini ang mga hinungdan nga nag-uban nga misangpot sa pagkapakyas sa among serbisyo sa HTTP/HTTPS.

  1. Ang usa ka enhinyero nagsulat ug usa ka regular nga ekspresyon nga mahimong moresulta sa sobra backtracking.
  2. Ang usa ka bahin nga makapugong sa regular nga ekspresyon gikan sa pag-usik sa sobra nga CPU nasayop nga gikuha sa usa ka refactoring sa WAF pipila ka semana ang milabay-ang refactoring gikinahanglan aron ang WAF mokonsumo og gamay nga mga kapanguhaan.
  3. Ang regular nga ekspresyon nga makina walay garantiya sa pagkakomplikado.
  4. Ang test suite dili makamatikod sa sobra nga konsumo sa CPU.
  5. Gitugotan sa SOP ang dili dinalian nga mga pagbag-o sa lagda nga ilunsad sa tibuuk kalibutan nga wala’y daghang proseso nga lakang.
  6. Ang plano sa rollback nanginahanglan pagpadagan sa usa ka tibuuk nga pagtukod sa WAF kaduha, nga nagdugay.
  7. Ang una nga alerto bahin sa mga problema sa trapiko sa kalibutan ulahi na kaayo.
  8. Nagdugay kami sa pag-update sa status page.
  9. Kami adunay mga problema sa pag-access sa mga sistema tungod sa usa ka glitch, ug ang pamaagi sa bypass dili maayo nga natukod.
  10. Ang mga inhenyero sa SRE nawad-an og access sa pipila ka mga sistema tungod kay ang ilang mga kredensyal na-expire tungod sa mga hinungdan sa seguridad.
  11. Ang among mga kustomer walay access sa Cloudflare dashboard o API tungod kay sila moagi sa usa ka Cloudflare nga rehiyon.

Unsa ang nausab sukad sa miaging Huwebes

Una, bug-os namong gipahunong ang tanang trabaho sa mga release para sa WAF ug gibuhat ang mosunod:

  1. Gipaila namo pag-usab ang sobra nga paggamit sa CPU nga proteksyon nga among gitangtang. (Andam na)
  2. Manu-manong pagsusi sa tanang 3868 ka lagda sa gidumala nga mga lagda alang sa WAF aron makit-an ug matul-id ang ubang posibleng mga kaso sa sobra nga pag-atras. (Natapos ang pag-verify)
  3. Among gilakip ang performance profiling para sa tanang lagda sa test set. (Gipaabot: Hulyo 19)
  4. Pagbalhin sa usa ka regular nga ekspresyon nga makina Re2 o taya - ang duha naghatag og mga garantiya sa runtime. (Gipaabot: Hulyo 31)
  5. Gisulat namon pag-usab ang SOP aron ipakaylap ang mga lagda sa mga yugto, sama sa ubang software sa Cloudflare, apan sa samang higayon adunay katakus sa emerhensya nga pag-deploy sa kalibutan kung nagsugod na ang mga pag-atake.
  6. Gipalambo namo ang abilidad sa dinalian nga pagtangtang sa Cloudflare dashboard ug API gikan sa Cloudflare nga rehiyon.
  7. Pag-automate sa mga update sa panid Kahimtang sa Cloudflare.

Dugay na nga termino nga kami nagpalayo sa Lua WAF nga akong gisulat pipila ka tuig ang milabay. Pagbalhin sa WAF sa bag-ong sistema sa firewall. Niining paagiha ang WAF mahimong mas paspas ug makadawat og dugang nga lebel sa proteksyon.

konklusyon

Kini nga kapakyasan nagpahinabog kasamok alang kanamo ug sa among mga kostumer. Naglihok dayon kami aron matul-id ang sitwasyon ug karon nagtrabaho sa mga sayup sa mga proseso nga hinungdan sa pagkahagsa, ingon man usab sa pagkalot sa mas lawom aron mabantayan ang mga potensyal nga problema sa mga regular nga ekspresyon sa umaabot kung mobalhin sa bag-ong teknolohiya.

Naulaw kaayo kami bahin niini nga pagkaguba ug nangayo kami pasaylo sa among mga kostumer. Kami nanghinaut nga kini nga mga pagbag-o makasiguro nga ang usa ka butang nga sama niini dili na mahitabo pag-usab.

Aplikasyon. Pag-backtrack sa mga regular nga ekspresyon

Aron masabtan kung giunsa ang ekspresyon:

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

mikaon sa tanan nga mga kapanguhaan sa CPU, kinahanglan nimo nga mahibal-an ang gamay kung giunsa ang naandan nga regular nga ekspresyon nga makina nagtrabaho. Ang problema dinhi mao ang sumbanan .*(?:.*=.*). (?: ug katugbang ) mao ang usa ka non-capturing nga grupo (nga mao, ang ekspresyon sa parentesis gi-grupo isip usa ka ekspresyon).

Sa konteksto sa sobra nga pagkonsumo sa CPU, kini nga sumbanan mahimong gihulagway nga .*.*=.*. Niini nga porma, ang sumbanan tan-awon nga dili kinahanglan nga komplikado. Apan labaw sa tanan, sa tinuod nga kalibutan, ang mga ekspresyon (sama sa komplikadong mga ekspresyon sa WAF nga mga lagda) nga naghangyo sa makina sa pagpares sa usa ka tipik nga gisundan sa laing tipik mahimong mosangpot sa malaglagong backtracking. Ug mao na.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Sa regular nga ekspresyon . nagpasabot nga kinahanglan nimong ipares ang usa ka karakter, .* - pagpares sa zero o labaw pa nga mga karakter "nga hakog", nga mao, pagkuha sa usa ka maximum nga mga karakter, aron nga .*.*=.* nagpasabot sa pagpares sa zero o labaw pa nga mga karakter, dayon pagpares sa sero o labaw pa nga mga karakter, pangitaa ang literal nga = karakter, pagpares sa zero o labaw pa nga mga karakter.

Atong kuhaon ang linya sa pagsulay x=x. Kini katumbas sa ekspresyon .*.*=.*. .*.* sa dili pa ang patas nga timaan motakdo sa una x (usa sa mga grupo .* соответствует x, ug ang ikaduha - zero nga mga karakter). .* pagkahuman = katapusan nga mga duwa x.

Kini nga pagtandi nanginahanglan 23 nga mga lakang. Unang grupo .* в .*.*=.* molihok nga hakog ug motakdo sa tibuok hilo x=x. Ang makina mobalhin sa sunod nga grupo .*. Wala na miy mga karakter nga maparehas, mao nga ang ikaduhang grupo .* katumbas sa zero nga mga karakter (kini gitugotan). Unya ang makina mobalhin sa karatula =. Wala nay mga simbolo (unang grupo .* gigamit ang tibuok nga ekspresyon x=x), walay pagtandi nga mahitabo.

Ug unya ang regular nga ekspresyon nga makina mobalik sa sinugdanan. Nagpadayon siya sa una nga grupo .* ug itandi kini с x= (imbes x=x), ug dayon kuhaon ang ikaduhang grupo .*. Ikaduhang grupo .* gitandi sa ikaduha x, ug wala na usab kami mga karakter nga nahabilin. Ug sa dihang naabot na usab ang makina = в .*.*=.*, walay buhat. Ug mibalik siya pag-usab.

Niining higayona ang grupo .* pareha gihapon x=, apan ang ikaduhang grupo .* wala na x, ug zero nga mga karakter. Ang makina naningkamot sa pagpangita sa usa ka literal nga karakter = sa sumbanan .*.*=.*, apan dili mogawas (human sa tanan, ang una nga grupo nag-okupar na niini .*). Ug mibalik siya pag-usab.

Niining higayona ang unang grupo .* nagkinahanglan lamang sa unang x. Apan ang ikaduhang grupo .* "makalolooy" nga nagdakop =x. Nakatag-an na ba ka kung unsa ang mahitabo? Ang makina naningkamot sa pagpares sa literal =, napakyas ug naghimo sa laing backtracking.

Unang grupo .* pareha gihapon sa una x... Ang ikaduha .* nagkinahanglan lamang =. Siyempre, ang makina dili makatugma sa literal =, tungod kay ang ikaduhang grupo nakahimo na niini .*. Ug pag-usab sa backtracking. Ug kami naningkamot sa pagpares sa usa ka hugpong sa tulo ka mga karakter!

Ingon nga resulta, ang unang grupo .* pareha ra sa una x, ikaduha .* - nga adunay zero nga mga karakter, ug ang makina sa katapusan motugma sa literal = sa ekspresyon с = sa linya. Sunod mao ang kataposang grupo .* gitandi sa ulahi x.

23 nga mga lakang lamang alang sa x=x. Tan-awa ang usa ka mubo nga video bahin sa paggamit sa Perl Regexp:: Debugger, nga nagpakita kung giunsa mahitabo ang mga lakang ug pag-atras.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Daghan na kini nga trabaho, apan unsa kaha kung sa baylo x=x kita adunay x=xx? Kana 33 ka lakang. Ug kung x=xxx? 45. Dili linear ang relasyon. Ang graph nagpakita sa pagtandi gikan sa x=x sa x=xxxxxxxxxxxxxxxxxxxx (20 x human sa =). Kung naa mi 20x pagkahuman =, ang makina mokompleto sa pagpares sa 555 ka mga lakang! (Dugang pa, kung napildi kami x= ug ang hilo naglangkob lang sa 20 x, ang makina mohimo og 4067 nga mga lakang aron masabtan nga walay mga posporo).

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Kini nga video nagpakita sa tanan nga backtracking alang sa pagtandi x=xxxxxxxxxxxxxxxxxxxx:

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Ang kasamok mao nga samtang ang gidak-on sa hilo nagdugang, ang oras sa pagpares motubo nga super-linearly. Apan ang mga butang mahimong mas grabe pa kung ang regular nga ekspresyon gamay nga giusab. Ingnon ta nga naa mi .*.*=.*; (nga mao, adunay literal nga semicolon sa katapusan sa pattern). Pananglitan, sa pagpares sa usa ka ekspresyon sama sa foo=bar;.

Ug dinhi ang pag-backtrack mahimong tinuod nga katalagman. Alang sa pagtandi x=x kini mokuha ug 90 ka lakang, dili 23. Ug kana nga gidaghanon paspas nga mitubo. Aron itandi x= ug 20 x, 5353 nga mga lakang ang gikinahanglan. Ania ang tsart. Tan-awa ang mga kantidad sa axis Y itandi sa miaging tsart.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Kung interesado ka, tan-awa ang tanan nga 5353 nga napakyas nga mga lakang sa pagpares x=xxxxxxxxxxxxxxxxxxxx и .*.*=.*;

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Pinaagi sa paggamit sa tapolan kay sa hakog nga pagpares, ang gidak-on sa backtracking mahimong makontrol. Kung usbon nato ang orihinal nga ekspresyon sa .*?.*?=.*?, alang sa pagtandi x=x mokuha kini og 11 ka lakang (dili 23). Kon bahin sa x=xxxxxxxxxxxxxxxxxxxx... Ang tanan tungod ? human sa .* nagsulti sa makina sa pagpares sa usa ka minimum nga gidaghanon sa mga karakter sa dili pa magpadayon.

Apan ang tapulan nga mga mapping dili hingpit nga makasulbad sa problema sa backtracking. Kon atong ilisan ang malaglagong pananglitan .*.*=.*; sa .*?.*?=.*?;, ang oras sa pagpatuman magpabilin nga pareho. x=x nagkinahanglan gihapon ug 555 ka lakang, ug x= ug 20 x - 5353.

Ang bugtong butang nga mahimo (gawas sa bug-os nga pagsulat pag-usab sa sumbanan alang sa mas dako nga espesipiko) mao ang pagbiya sa regular nga ekspresyon nga makina uban sa iyang backtracking nga mekanismo. Kini ang atong buhaton sa sunod nga mga semana.

Ang solusyon sa kini nga problema nahibal-an sukad sa 1968, sa dihang gisulat ni Kent Thompson ang usa ka artikulo Mga Pamaagi sa Pagprograma: Regular nga ekspresyon sa pagpangita sa algorithm (“Mga Pamaagi sa Pagprograma: Regular nga Expression Search Algorithm”). Ang artikulo naghulagway sa usa ka mekanismo nga nagtugot kanimo sa pag-convert sa usa ka regular nga ekspresyon ngadto sa non-deterministic finite state machines, ug human sa state changes sa non-deterministic finite state machines, mogamit ug algorithm kansang oras sa pagpatuman nagdepende sa linearly sa gipares nga string.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Mga Pamaagi sa Pagprograma
Regular nga Expression Search Algorithm
Ken Thompson

Bell Telephone Laboratories, Inc., Murray Hill, New Jersey

Gihubit niini ang usa ka pamaagi sa pagpangita alang sa usa ka piho nga hugpong sa mga karakter sa teksto ug naghisgot sa pagpatuman niini nga pamaagi sa porma sa compiler. Gikuha sa compiler ang regular nga ekspresyon isip source code ug naghimo sa IBM 7094 nga programa isip object code. Ang object program nagkuha og input sa porma sa search text ug nagpagawas og signal sa matag higayon nga ang usa ka string sa text ipares sa gihatag nga regular nga ekspresyon. Ang artikulo naghatag mga pananglitan, mga problema ug mga solusyon.

Ang algorithm
Ang nangaging mga algorithm sa pagpangita miresulta sa backtracking kung ang usa ka partially malampuson nga pagpangita napakyas sa pagmugna og resulta.

Sa compilation mode, ang algorithm wala magtrabaho sa mga simbolo. Gipasa niini ang mga instruksyon sa gihugpong nga code. Kusog kaayo ang pagpatuman - pagkahuman sa pagpasa sa datos sa taas sa karon nga lista, awtomatiko nga pangitaon ang tanan nga posible nga sunud-sunod nga mga karakter sa regular nga ekspresyon.
Ang compilation ug search algorithm gilakip sa time-sharing text editor isip contextual search. Siyempre, kini layo sa bugtong aplikasyon sa ingon nga pamaagi sa pagpangita. Pananglitan, ang usa ka variant sa kini nga algorithm gigamit ingon usa ka pagpangita sa simbolo sa usa ka lamesa sa assembler.
Gituohan nga ang magbabasa pamilyar sa mga regular nga ekspresyon ug sa IBM 7094 computer programming language.

Tigkompiler
Ang compiler naglangkob sa tulo ka mga hugna nga nagdagan nga managsama. Ang unang yugto mao ang syntax filtering, nga nagtugot lamang sa syntactically correct nga regular nga mga ekspresyon nga moagi. Kini nga lakang nagsal-ot usab sa "·" operator aron ipares ang mga regular nga ekspresyon. Sa ikaduhang lakang, ang regular nga ekspresyon nakabig ngadto sa postfix nga porma. Sa ikatulo nga yugto, ang object code gihimo. Ang una nga 2 nga mga yugto klaro, ug dili kami maghisgot niini.

Ang artikulo ni Thompson wala maghisgot mahitungod sa nondeterministic finite state machines, apan kini nagpatin-aw sa linear time algorithm og maayo ug nagpresentar sa usa ka ALGOL-60 nga programa nga nagmugna og assembly language code alang sa IBM 7094. Ang pagpatuman lisud, apan ang ideya yano kaayo.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

kasamtangan nga dalan sa pagpangita. Girepresentar kini sa ⊕ icon nga adunay usa ka input ug duha ka output.
Gipakita sa Figure 1 ang mga gimbuhaton sa ikatulo nga lakang sa pag-compile kung gibag-o ang usa ka pananglitan sa regular nga ekspresyon. Ang unang tulo ka mga karakter sa pananglitan mao ang a, b, c, ug ang matag usa nagmugna og stack entry S[i] ug usa ka NNODE field.

NNODE sa kasamtangan nga code aron makamugna ang resulta nga regular nga ekspresyon sa usa ka stack entry (tan-awa ang Figure 5)

Ingon niini ang hitsura sa usa ka regular nga ekspresyon .*.*=.*, kon imong mahanduraw kini sama sa mga hulagway gikan sa artikulo ni Thompson.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Sa Fig. 0 adunay lima ka mga estado nga nagsugod gikan sa 0, ug 3 nga mga siklo nga nagsugod gikan sa mga estado 1, 2 ug 3. Kining tulo nga mga siklo katumbas sa tulo .* sa usa ka regular nga ekspresyon. 3 ovals nga adunay mga tulbok katumbas sa usa ka simbolo. Oval nga may karatula = mohaum sa literal nga karakter =. Katapusan na ang State 4. Kung atong maabot kini, nan ang regular nga ekspresyon gipares.

Aron makita kung giunsa magamit ang ingon nga diagram sa estado alang sa regular nga pagpares sa ekspresyon .*.*=.*, atong tan-awon ang string matching x=x. Ang programa magsugod gikan sa estado 0, ingon sa gipakita sa Fig. 1.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Aron molihok kini nga algorithm, ang makina sa estado kinahanglan naa sa daghang mga estado nga dungan. Ang usa ka non-deterministic finite machine maghimo sa tanan nga posible nga mga transisyon nga dungan.

Sa wala pa kini adunay panahon sa pagbasa sa input data, kini moadto sa duha ka unang estado (1 ug 2), sama sa gipakita sa Fig. 2.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Sa Fig. 2 nagpakita kon unsay mahitabo sa dihang siya motan-aw sa una x в x=x. x mahimong mapa ngadto sa ibabaw nga punto, gikan sa estado 1 ug balik ngadto sa estado 1. O x mahimong mapa ngadto sa punto sa ubos, gikan sa estado 2 ug balik sa estado 2.

Human sa pagpares sa una x в x=x naa pa ta sa states 1 ug 2. Dili ta makaabot sa state 3 or 4 kay nagkinahanglan ta ug literal nga karakter. =.

Ang algorithm unya gikonsiderar = в x=x. Sama sa x sa wala pa kini, mahimo kini ipares sa bisan hain sa labing taas nga duha nga mga galong gikan sa estado 1 hangtod sa estado 1 o gikan sa estado 2 hangtod sa estado 2, apan ang algorithm mahimong magkatugma sa literal. = ug mobalhin gikan sa estado 2 ngadto sa estado 3 (ug diha-diha dayon 4). Kini gipakita sa Fig. 3.

Mga detalye sa Cloudflare outage sa Hulyo 2, 2019

Ang algorithm dayon nagpadayon sa katapusan x в x=x. Gikan sa estado 1 ug 2 ang parehas nga mga pagbalhin posible balik sa estado 1 ug 2. Gikan sa estado 3 x mahimong motugma sa punto sa tuo ug mobalik sa estado 3.

Niini nga yugto, ang matag karakter x=x gikonsiderar, ug tungod kay nakaabot na kami sa estado 4, ang regular nga ekspresyon motakdo nianang hilo. Ang matag karakter giproseso kausa, mao nga kini nga algorithm linear sa gitas-on sa input string. Ug walay backtracking.

Dayag, human makaabot sa estado 4 (sa diha nga ang algorithm mitakdo x=) ang bug-os nga regular nga ekspresyon gipares, ug ang algorithm mahimong mohunong nga wala kini gikonsiderar x.

Kini nga algorithm nagdepende sa linearly sa gidak-on sa input string.

Source: www.habr.com

Idugang sa usa ka comment