Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ma kahi kokoke i 9 mau makahiki i hala aku nei he hui liʻiliʻi ʻo Cloudflare, a ʻaʻole wau i hana no ia mea, he mea kūʻai wale nō wau. I hoʻokahi mahina ma hope o ka hoʻokuʻu ʻana iā Cloudflare, loaʻa iaʻu kahi leka hoʻomaopopo i kaʻu pūnaewele jgc.orgʻAʻole hana ʻo DNS. Ua hoʻololi ʻo Cloudflare i Nā Kūlana Kūlana, a aia kahi DNS haki.

Ua kākau koke wau iā Matthew Prince me ke poʻo inoa "ʻAuhea koʻu DNS?" a hoʻihoʻi ʻo ia i kahi pane lōʻihi piha i nā kikoʻī loea (heluhelu i ka palapala a pau maanei), i pane aku ai au:

Mai: John Graham-Cumming
Lā: ʻOkakopa 7, 2010, 9:14
Kaupapa: Re: ʻAuhea koʻu DNS?
To: Matthew Prince

Hōʻike maikaʻi, mahalo. E kelepona loa au inā he pilikia. Pono paha e kākau i kahi pou e pili ana i kēia i ka wā i hōʻiliʻili ai ʻoe i nā ʻike loea āpau. Manaʻo wau e hauʻoli ka poʻe i kahi moʻolelo ākea a pololei. ʻOi loa inā hoʻopili ʻoe i nā kiʻi iā ia e hōʻike i ka ulu ʻana o ke kaʻa mai ka hoʻomaka ʻana.

He nānā maikaʻi koʻu ma kaʻu pūnaewele, a loaʻa iaʻu kahi SMS e pili ana i kēlā me kēia hemahema. Hōʻike ka nānā ʻana i ka hāʻule ʻana mai 13:03:07 a i 14:04:12. Hana ʻia nā hoʻokolohua i kēlā me kēia ʻelima mau minuke.

Manaʻo wau e ʻike ʻoe. ʻIke ʻoe ʻaʻole pono ʻoe i kāu kanaka ponoʻī ma ʻEulopa? 🙂

Pane aku la ia.

Mai: Matthew Prince
Lā: ʻOkakopa 7, 2010, 9:57
Kaupapa: Re: ʻAuhea koʻu DNS?
Na: John Graham-Cumming

Mahalo iā ʻoe. Ua pane mākou i nā mea a pau i kākau. Ke hele nei au i ke keʻena i kēia manawa a e kākau mākou i kekahi mea ma ka blog a i ʻole e paʻi i kahi pou kūhelu ma kā mākou papa hoʻolaha. ʻAe loa wau, ʻo ka ʻoiaʻiʻo ka mea a pau.

I kēia manawa he hui nui ʻo Cloudflare, hana wau no ia, a i kēia manawa pono wau e kākau ākea e pili ana i kā mākou kuhi hewa, kona hopena a me kā mākou hana.

Nā hanana o Iulai 2

Ma ka lā 2 o Iulai, ua hoʻopuka mākou i kahi lula hou ma Managed Rules for WAFs ma muli o ia Ua pau nā kumuwaiwai CPU ma kēlā me kēia kaʻina hana koʻikoʻi kaʻina HTTP/HTTPS ma ka pūnaewele Cloudflare ma ka honua holoʻokoʻa. Ke hoʻomaikaʻi mau nei mākou i nā lula i hoʻokele ʻia no nā WAF i ka pane ʻana i nā nāwaliwali a me nā hoʻoweliweli hou. I Mei, no ka laʻana, wikiwiki mākou hoʻohui i ka lulano ka pale ʻana i kahi nāwaliwali koʻikoʻi ma SharePoint. ʻO ka manaʻo holoʻokoʻa o kā mākou WAF ʻo ia ka hiki ke hoʻonohonoho koke i nā lula.

ʻO ka mea pōʻino, ua loaʻa ka hōʻano hou o ka Pōʻalima i kahi ʻōlelo maʻamau i hoʻopau nui loa i nā kumuwaiwai HTTP/HTTPS CPU ma ka backtracking. ʻO kā mākou mea koho koʻikoʻi, CDN, a me nā hana WAF i pilikia ma muli o ka hopena. Hōʻike ka pakuhi i ka hiki i ka 100% nā kumuwaiwai no ka lawelawe ʻana i ka hele ʻana o HTTP/HTTPS ma kahi o XNUMX% ma nā kikowaena o kā mākou pūnaewele.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019
Ka hoʻohana ʻana o ka CPU i kahi manawa o kahi hanana

ʻO ka hopena, ua pau kā mākou mea kūʻai (a me kā mākou mea kūʻai aku) me kahi ʻaoʻao hewa 502 i nā kāʻei kapu Cloudflare. Ua hoʻokumu ʻia nā hewa 502 e nā kikowaena pūnaewele mua ʻo Cloudflare i loaʻa nā cores manuahi akā ʻaʻole hiki ke kamaʻilio me nā kaʻina hana e lawelawe ana i ka holo HTTP/HTTPS.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ua ʻike mākou i ka nui o ka pilikia i loaʻa i kā mākou mea kūʻai. Hilahila loa makou. A ʻo kēia hemahema ka mea i pale iā mākou mai ka hoʻoponopono pono ʻana i ka hanana.

Inā ʻo ʻoe kekahi o kēia mau mea kūʻai aku, makaʻu paha ʻoe, huhū a huhū. Eia kekahi, ʻaʻole mākou i loaʻa i kahi nā pilikia honua. ʻO ka hoʻohana ʻana i ka CPU kiʻekiʻe ma muli o hoʻokahi lula WAF me kahi ʻōlelo maʻamau ʻōlelo maikaʻi ʻole i hopena i ka backtracking nui. Eia ka olelo hewa: (?:(?:"|'|]|}||d|(?:nan|infinity|true|false|null|undefined|symbol|math)|`|-|+)+[)]*;?((?:s|-|~|!|{}||||+)*.*(?:.*=.*)))

ʻOiai he mea hoihoi ia i kona pono ponoʻī (a e kamaʻilio wau e pili ana iā ia i nā kikoʻī ma lalo), ua iho ka lawelawe Cloudflare no 27 mau minuke ʻaʻole wale no ka ʻōlelo maʻamau. Ua liʻuliʻu mākou e wehewehe i ke kaʻina o nā hanana i alakaʻi i ka hāʻule, no laila ua lohi mākou i ka pane. Ma ka hopena o ka pou, e wehewehe au i ka backtracking ma kahi ʻōlelo maʻamau a haʻi iā ʻoe i ka mea e hana ai me ia.

He aha ka hana

E hoʻomaka kākou ma ke ʻano. Aia nā manawa a pau ma UTC.

Ma ka hola 13:42 p.m., ua hoʻololi iki kekahi ʻenekinia o ka hui pā ahi i nā lula ʻike XSS me ka hoʻohana ʻana i ka hana ʻakomi. No laila, ua hana ʻia kahi palapala noi hoʻololi. Mālama mākou i nā tiketi ma o Jira (kiʻi ma lalo).

Ma hope o 3 mau minuke, ua ʻike ʻia ka ʻaoʻao mua o PagerDuty, e hōʻike ana i kahi pilikia me WAF. He ho'āʻo synthetic kēia e hoʻāʻo ai i ka hana o WAF (he mau haneli mākou) ma waho o Cloudflare e nānā i ka hana maʻamau. Ua ukali koke ʻia kēia e nā ʻaoʻao o nā mākaʻikaʻi e pili ana i nā hoʻāʻo lawelawe ʻo Cloudflare end-to-end i hāʻule ʻole, nā pilikia kaʻa kaʻa honua, nā hewa 502 ākea, a me kahi ton o nā hōʻike mai kā mākou Points of Presence (PoP) i nā kūlanakauhale a puni ka honua e hōʻike ana i kahi hemahema. o nā kumuwaiwai CPU.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ua loaʻa iaʻu kekahi o kēia mau mākaʻikaʻi, hoʻokuʻu ʻia mai kahi hālāwai, a ke hele nei au i ka papaʻaina i ka wā i ʻōlelo ai ke poʻo o kā mākou ʻoihana hoʻomohala hoʻonā ua nalowale mākou he 80% o kā mākou kaʻa. Ua holo au i kā mākou mau ʻenekini SRE, ka poʻe e hana nei i ka pilikia. I ka wā mua, manaʻo mākou he ʻano hoʻouka kaua ʻike ʻole ʻia.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Hoʻopuehu ʻia nā mea ʻenehana Cloudflare SRE a puni ka honua a nānā i ke kūlana a puni ka uaki. ʻO ka maʻamau, hoʻolaha kēia mau māka iā ʻoe i nā pilikia kūloko o ka palena palena, nānā ʻia ma nā dashboards kūloko, a hoʻoholo ʻia i nā manawa he nui i kēlā me kēia lā. Akā ua hōʻike kēia mau ʻaoʻao a me nā hoʻolaha i kahi mea koʻikoʻi, a ua haʻi koke nā mea ʻenekinia SRE i ka pae koʻikoʻi P0 a ua hoʻopili i nā ʻenekini hoʻokele a me nā ʻōnaehana.

E hoʻolohe ana ko mākou mau ʻenekinia Lākana i kahi haʻiʻōlelo ma ka hale nui i kēlā manawa. Pono e hoʻopau ʻia ka haʻiʻōlelo, ʻākoakoa nā mea a pau i loko o kahi lumi kūkā nui, a ua kāhea ʻia nā mea loea. ʻAʻole kēia he pilikia maʻamau i hiki i nā SRE ke hoʻoponopono iā lākou iho. He mea koʻikoʻi ke komo ʻana i nā loea kūpono.

Ma 14:00 ua hoʻoholo mākou aia ka pilikia me ka WAF a ʻaʻohe hoʻouka. Ua huki ka hui hana i ka ʻikepili CPU a ua maopopo ka hewa o ka WAF. Ua hōʻoia kekahi limahana i kēia kumumanaʻo me ka hoʻohana ʻana i ka strace. Ua ʻike kekahi i loko o nā lāʻau he pilikia me WAF. Ma ka hola 14:02 p.m., ua hele mai ka hui holoʻokoʻa iaʻu i ka wā i manaʻo ʻia e hoʻohana i ka pepehi kanaka honua, kahi hana i kūkulu ʻia i Cloudflare e pani i kahi ʻāpana honua.

Pehea mākou i pepehi ai i ka honua no WAF he moʻolelo ʻē aʻe. ʻAʻole ia he maʻalahi. Hoʻohana mākou i kā mākou huahana ponoʻī, a mai kā mākou lawelawe ka hookipaia ʻaʻole i hana, ʻaʻole hiki iā mākou ke hōʻoia a komo i loko o ka panel mana kūloko (i ka wā i hoʻopaʻa ʻia ai nā mea a pau, ua ʻike mākou ua nalowale kekahi mau lālā o ka hui ma muli o kahi hiʻohiʻona palekana e hoʻopau i nā hōʻoia inā ʻaʻole hoʻohana ʻia ka papa mana kūloko no kahi manawa lōʻihi).

A ʻaʻole hiki iā mākou ke hele i kā mākou lawelawe kūloko, e like me Jira a i ʻole ka ʻōnaehana kūkulu. Pono mākou i kahi hana hoʻoponopono, kahi a mākou i hoʻohana pinepine ai (pono e hana ʻia kēia). ʻO ka hope, ua hoʻopau kekahi ʻenekinia i ka WAF ma 14:07, a i ka hola 14:09, ua hoʻi hou nā pae kaʻa a me ka CPU ma nā wahi āpau. ʻO ke koena o nā ʻōnaehana pale o Cloudflare i hana maʻamau.

A laila hoʻomaka mākou e hoʻihoʻi i ka WAF. ʻAʻole maʻamau ke kūlana, no laila ua holo mākou i nā hoʻokolohua maikaʻi ʻole (e nīnau iā mākou iho inā ʻo ka hoʻololi maoli ka pilikia) a me nā hoʻokolohua maikaʻi (e hōʻoia i ka hana ʻana o ka rollback) ma hoʻokahi kūlanakauhale me ka hoʻohana ʻana i nā kaʻa kaʻawale, e hoʻololi ana i nā mea kūʻai mai laila.

Ma ka hola 14:52 ua maopopo mākou i ke kumu a ua hoʻoponopono, a hiki i ka WAF hou.

Pehea e hana ai ʻo Cloudflare

Loaʻa iā Cloudflare kahi hui o nā ʻenehana i hoʻolaʻa ʻia i ka hoʻokele ʻana i nā lula no WAF. Hoʻoikaika lākou e hoʻomaikaʻi i nā helu ʻike, hōʻemi i nā hopena maikaʻi ʻole, a pane koke i nā hoʻoweliweli hou i ko lākou puka ʻana. I nā lā he 60 i hala iho nei, aia he 476 mau noi hoʻololi i hana ʻia no nā lula mālama ʻia no WAF (he awelika o hoʻokahi i kēlā me kēia 3 hola).

Pono e kau ʻia kēia hoʻololi kūikawā ma ke ʻano simulation, kahi e hele ai nā mea kūʻai aku maoli i ka lula, akā ʻaʻohe mea i pale ʻia. Hoʻohana mākou i kēia ʻano no ka hoʻāʻo ʻana i ka maikaʻi o nā lula a me ke ana ʻana i nā kumukūʻai maikaʻi ʻole a hoʻopunipuni. Akā i loko o ke ʻano simulation, pono e hoʻokō ʻia nā lula, a i kēia hihia aia ka lula i kahi ʻōlelo maʻamau e ʻai nui ana i nā kumuwaiwai processor.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

E like me kāu e ʻike ai mai ka noi hoʻololi ma luna nei, loaʻa iā mākou kahi hoʻolālā hoʻolālā, kahi hoʻolālā rollback, a me kahi loulou i kahi kaʻina hana maʻamau kūloko (SOP) no kēia ʻano hoʻolālā. ʻO ka SOP no ka hoʻololi ʻana i kahi lula hiki ke paʻi ʻia ma ka honua holoʻokoʻa. ʻOiaʻiʻo, ma Cloudflare, hana ʻokoʻa nā mea, a ke kauoha nei ka SOP e hoʻouna mua mākou i ka polokalamu no ka hoʻāʻo ʻana a me ka hoʻohana ʻana i loko i kahi wahi o loko (PoP) (kahi a kā mākou limahana e hoʻohana ai), a laila i kahi helu liʻiliʻi o nā mea kūʻai aku. kahi kaʻawale, a laila i ka heluna nui o nā mea kūʻai aku, a laila wale nō i ka honua holoʻokoʻa.

Penei kona ano. Hoʻohana mākou i ka git i loko ma o BitBucket. ʻO nā mea ʻenekinia e hana ana i nā hoʻololi e hoʻouna i nā code, i kūkulu ʻia i TeamCity, a i ka hala ʻana o ke kūkulu ʻana, hāʻawi ʻia nā mea loiloi. Ke ʻae ʻia kahi noi huki, hōʻuluʻulu ʻia ke code a holo ʻia kahi ʻano o nā hoʻokolohua (hou).

Inā hoʻopau maikaʻi ke kūkulu ʻana a me nā hoʻāʻo ʻana, ua hana ʻia kahi noi hoʻololi ma Jira a pono ka luna kūpono a i ʻole ke alakaʻi e ʻae i ka hoʻololi. Ma hope o ka ʻae ʻia, hoʻokomo ʻia i loko o ka mea i kapa ʻia ʻo "PoP menagerie": DOG, PIG a me Kanaka (ʻīlio, puaʻa a me ka canary).

ʻO DOG PoP he Cloudflare PoP (e like me nā kūlanakauhale ʻē aʻe) i hoʻohana wale ʻia e nā limahana Cloudflare. ʻO ka PoP no ka hoʻohana kūloko e hiki iā ʻoe ke hopu i nā pilikia ma mua o ka hoʻomaka ʻana o ka holo ʻana o ka mea kūʻai aku i ka hopena. Mea pono.

Inā kūleʻa ka hōʻike DOG, neʻe ke code i ka pae PIG (guinea pig). ʻO Cloudflare PoP kēia, kahi e kahe ai ka liʻiliʻi o nā mea kūʻai aku manuahi ma o ka code hou.
Inā maikaʻi nā mea a pau, hele ke code i Canary. Loaʻa iā mākou ʻekolu Canary PoP ma nā wahi like ʻole o ka honua. I loko o lākou, ke hele nei ke kaʻa o nā mea kūʻai aku a me nā mea kūʻai ʻole i ke code hou, a ʻo kēia ka nānā hope loa no nā hewa.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019
Kaʻina hana hoʻokuʻu polokalamu ma Cloudflare

Inā maikaʻi ke code ma Canary, hoʻokuʻu mākou. Ke hele nei i nā pae āpau - DOG, PIG, Canary, ke ao holoʻokoʻa - lawe i nā hola a i ʻole nā ​​​​lā, e pili ana i ka hoʻololi code. Ma muli o ka ʻokoʻa o ka pūnaewele a me nā mea kūʻai aku o Cloudflare, hoʻāʻo maikaʻi mākou i ka code ma mua o ka hoʻokuʻu ʻana iā ia ma ke ao holoʻokoʻa i nā mea kūʻai aku a pau. Akā ʻaʻole hahai pono ʻo WAF i kēia kaʻina hana no ka mea pono e pane koke ʻia nā hoʻoweliweli.

WAF hooweliweli
I nā makahiki i hala iho nei, ua piʻi nui ka hoʻoweliweli i nā noi maʻamau. ʻO kēia ma muli o ka loaʻa ʻana o nā mea hana hoʻāʻo polokalamu. No ka laʻana, ua kākau mākou e pili ana ʻāhuehue).

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019
Source: https://cvedetails.com/

ʻO ka pinepine, hana ʻia kahi hōʻoia o ka manaʻo a paʻi koke ʻia ma Github i hiki i nā hui mālama i ka noi ke hoʻāʻo koke iā ia a hōʻoia i ka paʻa pono. No laila, pono ʻo Cloudflare i ka hiki ke pane i nā hoʻouka hou me ka wikiwiki e hiki ai i nā mea kūʻai ke loaʻa ka manawa e hoʻoponopono ai i kā lākou polokalamu.

ʻO kahi hiʻohiʻona maikaʻi o ka pane wikiwiki o Cloudflare ʻo ka hoʻolaha ʻana o SharePoint vulnerability protections i Mei (heluheluʻia maanei). Ma hope koke iho o ka hoʻolaha ʻia ʻana, ʻike mākou i ka nui o nā hoʻāʻo e hoʻohana i ka nāwaliwali o kā mākou mea kūʻai aku SharePoint. Ke nānā mau nei kā mākou poʻe i nā hoʻoweliweli hou a kākau i nā lula e pale i kā mākou mea kūʻai.

ʻO ke kānāwai i hoʻokumu i ka pilikia i ka Pōʻalima, ua manaʻo ʻia e pale aku i ka palapala hōʻailona cross-site (XSS). ʻO ia mau hoʻouka ʻana, ua ʻoi aku ka maʻamau i nā makahiki i hala iho nei.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019
Source: https://cvedetails.com/

ʻO ke kaʻina hana maʻamau no ka hoʻololi ʻana i kahi lula i mālama ʻia no kahi WAF e hana i ka hoʻāʻo hoʻohui mau (CI) ma mua o ka hoʻolaha ʻana i ka honua. I ka Poaha aku nei, ua hana makou i keia a ua hoopuka i na rula. Ma ka hola 13:31 p.m., ua hoʻouna kekahi ʻenekinia i kahi noi huki i ʻāpono ʻia me kahi loli.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ma ka hola 13:37, hōʻiliʻili ʻo TeamCity i nā lula, holo i nā hoʻokolohua a hāʻawi i ka ʻae. Hoʻāʻo ka WAF hoʻāʻo suite i ka hana koʻikoʻi o ka WAF a loaʻa i kahi helu nui o nā hoʻokolohua ʻāpana no nā hana pākahi. Ma hope o nā hoʻokolohua ʻāpana, ua hoʻāʻo mākou i nā lula no ka WAF me ka hoʻohana ʻana i ka nui o nā noi HTTP. E nānā nā noi HTTP i nā noi e pāpā ʻia e ka WAF (e hoʻopaʻa i ka hoʻouka ʻana) a hiki ke ʻae ʻia (i ʻole e ālai i nā mea āpau a pale i nā hopena hoʻopunipuni). Akā ʻaʻole mākou i hoʻāʻo no ka hoʻohana nui ʻana o ka CPU, a ʻo ka nānā ʻana i nā moʻolelo o nā hana WAF mua e hōʻike ana ʻaʻole i hoʻonui ʻia ka manawa hoʻokō kānāwai, a paʻakikī ke kānalua ʻaʻole lawa nā kumuwaiwai.

Ua hala nā hoʻāʻo a ua hoʻomaka ʻo TeamCity e hoʻopololei i ka hoʻololi ma 13:42 p.m.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Quicksilver

Kūleʻa nā lula WAF i ka hoʻoponopono hoʻoweliweli koke ʻana, no laila ke kau nei mākou iā lākou me ka hoʻohana ʻana i ka hale kūʻai waiwai nui o Quicksilver, e hoʻolaha ana i nā loli ma ke ao holoʻokoʻa i kekona. Ke hoʻohana nei kā mākou mea kūʻai aku i kēia ʻenehana ke hoʻololi lākou i ka hoʻonohonoho ʻana i ka dashboard a i ʻole ma o ka API, a mahalo ʻia mākou e pane aku i nā loli me ka wikiwiki o ka uila.

ʻAʻole mākou i kamaʻilio nui e pili ana iā Quicksilver. Ma mua mākou i hoʻohana ai ʻO Kyoto Tycoon ma ke ʻano he hale kūʻai waiwai kī ma ka honua holoʻokoʻa, akā aia nā pilikia hana me ia, a ua kākau mākou i kā mākou hale kūʻai ponoʻī, i hana hou ʻia ma mua o 180 mau kūlanakauhale. Ke hoʻohana nei mākou i ka Quicksilver e hoʻohuli i nā hoʻololi hoʻonohonoho i nā mea kūʻai aku, e hoʻopou i nā lula WAF, a e puʻunaue i ka code JavaScript i kākau ʻia e nā mea kūʻai aku iā Cloudflare Workers.

He mau kekona wale nō ia mai ke kaomi ʻana i kahi pihi ma ka dashboard a i ʻole ke kāhea ʻana i kahi API no ka hana ʻana i kahi hoʻololi hoʻonohonoho honua. Ua makemake nā mea kūʻai i kēia wikiwiki o ka hoʻonohonoho. A hāʻawi ʻo Workers iā lākou i ka hoʻolaha lako polokalamu honua. Ma ka awelika, hoʻolaha ʻo Quicksilver ma kahi o 350 mau loli i kēlā me kēia kekona.

A wikiwiki loa ʻo Quicksilver. Ma ka awelika, ua loaʻa iā mākou ka 99th percentile o 2,29 kekona e hoʻolaha i nā loli i kēlā me kēia kamepiula a puni ka honua. ʻO ka wikiwiki ka mea maʻamau. Ma hope o nā mea a pau, ke hiki iā ʻoe ke hana a hoʻomaʻemaʻe paha i ka cache, hiki koke ia a ma nā wahi āpau. Hoʻouna ʻia ke code ma o Cloudflare Workers i ka wikiwiki like. Hoʻohiki ʻo Cloudflare i kāna mau mea kūʻai aku i nā mea hou i ka manawa kūpono.

Akā i kēia hihia, hoʻokani ʻino ka wikiwiki iā mākou, a ua hoʻololi nā lula i nā wahi āpau i loko o kahi mau kekona. Ua ʻike paha ʻoe e hoʻohana ana ka code WAF i ka Lua. Hoʻohana nui ʻo Cloudflare iā Lua i ka hana a me nā kikoʻī Lua in WAF ʻO mākou ua kūkākūkā mua ʻia. Hoʻohana ʻo Lua WAF PCRE i loko a hoʻohana i ka backtracking no ka hoʻohālikelike ʻana. ʻAʻohe ona ʻano hana e pale aku ai i nā ʻōlelo i puka ʻole i ka mana. Ma lalo wau e kamaʻilio hou aku e pili ana i kēia a me kā mākou e hana nei.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ma mua o ka kau ʻana o nā lula, ua holo mālie nā mea a pau: ua hana ʻia ka noi huki a ʻae ʻia, ua hōʻiliʻili a hoʻāʻo ʻia ka paipu CI/CD i ke code, ua waiho ʻia ka noi hoʻololi e like me ka SOP e hoʻokele ana i ka hoʻolaha ʻana a me ka rollback, a ua hoʻopau ʻia ka waiho ʻana.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019
Kaʻina Hoʻolaha Cloudflare WAF

Ua hewa kekahi mea
E like me kaʻu i ʻōlelo ai, hoʻolaha mākou i nā ʻumi o nā lula WAF hou i kēlā me kēia pule, a he nui nā ʻōnaehana i kahi e pale aku ai i nā hopena maikaʻi ʻole o ia hoʻolaha. A i ka wā e hewa ai kekahi mea, ʻo ia ka hui pū ʻana o kekahi mau kūlana i ka manawa hoʻokahi. Inā ʻike ʻoe i hoʻokahi kumu, ʻoiaʻiʻo, he mea hōʻoluʻolu kēia, akā ʻaʻole ʻoiaʻiʻo mau. ʻO kēia nā kumu i alakaʻi ʻole ʻia ai kā mākou lawelawe HTTP/HTTPS.

  1. Ua kākau kekahi ʻenekinia i kahi ʻōlelo maʻamau i hiki ke hopena i ka nui hoʻi hope.
  2. ʻO kahi hiʻohiʻona i hiki ke pale i ka hōʻike maʻamau mai ka hoʻopau ʻana i nā kumuwaiwai CPU nui i hoʻopau hewa ʻia ma kahi WAF refactoring i kekahi mau pule ma mua - pono ka refactoring e hoʻopau i ka WAF i nā kumuwaiwai liʻiliʻi.
  3. ʻAʻohe mea paʻakikī i ka mīkini ʻōlelo maʻamau.
  4. ʻAʻole hiki i ka suite hoʻāʻo ke ʻike i ka hoʻohana nui ʻana o ka CPU.
  5. Hiki i ka SOP ke hoʻololi i nā lula koʻikoʻi ʻole e ʻōwili ʻia ma ka honua holoʻokoʻa me ka ʻole o ke kaʻina hana he nui.
  6. Pono ka hoʻolālā rollback e holo i kahi kūkulu WAF piha ʻelua, a lōʻihi ka manawa.
  7. ʻO ka makaʻala mua e pili ana i nā pilikia kaʻa kaʻa honua ua hoʻomaka lohi loa.
  8. Ua lawe mākou i kekahi manawa e hoʻohou i ka ʻaoʻao kūlana.
  9. Ua pilikia mākou i ke komo ʻana i nā ʻōnaehana ma muli o kahi glitch, a ʻaʻole i hoʻokumu maikaʻi ʻia ke kaʻina hana bypass.
  10. Ua nalowale nā ​​ʻenehana SRE i ke komo ʻana i kekahi mau ʻōnaehana no ka pau ʻana o kā lākou hōʻoia ma muli o nā kumu palekana.
  11. ʻAʻole i loaʻa i kā mākou mea kūʻai aku i ka dashboard Cloudflare a i ʻole API no ka mea hele lākou ma kahi ʻāina Cloudflare.

He aha ka mea i loli mai ka Pōʻalima aku nei

ʻO ka mea mua, ua hoʻopau loa mākou i nā hana a pau ma ka hoʻokuʻu ʻana no WAF a ke hana nei mākou penei:

  1. Ke hoʻokomo hou nei mākou i ka pale overuse CPU a mākou i wehe ai. (Makaukau)
  2. Nānā lima i nā lula 3868 i nā lula i mālama ʻia no ka WAF e ʻimi a hoʻoponopono i nā hihia ʻē aʻe o ka hoʻihoʻi nui ʻana. (Ua pau ka hōʻoia ʻana)
  3. Hoʻokomo mākou i ka profiling hana no nā lula āpau i ka hoʻonohonoho hoʻāʻo. (Manaʻo ʻia: Iulai 19)
  4. Ke hoʻololi nei i ka ʻenekini hōʻike maʻamau re2 ai ole ia, lepo - hāʻawi lāua ʻelua i nā hōʻoia o ka wā holo. (Manaʻo ʻia: Iulai 31)
  5. Ke kākau hou nei mākou i ka SOP e kau i nā lula i nā pae, e like me nā polokalamu ʻē aʻe ma Cloudflare, akā i ka manawa like ka hiki ke hoʻonohonoho wikiwiki i ka honua inā ua hoʻomaka mua nā hoʻouka.
  6. Ke hoʻomohala nei mākou i ka hiki ke wehe koke i ka dashboard Cloudflare a me API mai ka ʻāina Cloudflare.
  7. Ke hoʻololi ʻana i nā ʻaoʻao Kūlana Cloudflare.

No ka wā lōʻihi ke neʻe nei mākou mai ka Lua WAF aʻu i kākau ai i kekahi mau makahiki i hala. Ke neʻe nei iā WAF i ʻōnaehana pā ahi hou. Ma kēia ala e ʻoi aku ka wikiwiki o ka WAF a loaʻa iā ia kahi pae palekana hou aʻe.

hopena

Ua pilikia kēia hemahema iā mākou a me kā mākou mea kūʻai aku. Ua hana wikiwiki mākou e hoʻoponopono i ke kūlana a ke hana nei mākou i nā hemahema o nā kaʻina i hoʻokumu ʻia ai ka pōʻino, a me ka ʻeli ʻana i ka hohonu no ka pale ʻana i nā pilikia kūpono me nā ʻōlelo maʻamau i ka wā e hiki mai ana i ka neʻe ʻana i ka ʻenehana hou.

Hilahila loa makou i keia pau ana a kala aku i na mea kuai. Manaʻo mākou e hōʻoia kēia mau hoʻololi ʻaʻole e hana hou ʻia kahi mea like.

Palapala noi. Hoʻihoʻi i nā ʻōlelo maʻamau

No ka hoʻomaopopo ʻana i ke ʻano o ka ʻōlelo:

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

Ua ʻai ʻoe i nā kumuwaiwai CPU a pau, pono ʻoe e ʻike liʻiliʻi e pili ana i ka hana ʻana o ka ʻenekini hōʻike maʻamau. ʻO ka pilikia ma ʻaneʻi ke kumu .*(?:.*=.*). (?: a pili ) he hui hopu ʻole (ʻo ia hoʻi, ua hui pū ʻia ka ʻōlelo i loko o nā pale ma ke ʻano he ʻōlelo hoʻokahi).

Ma ka pōʻaiapili o ka hoʻohana nui ʻana o ka CPU, hiki ke wehewehe ʻia kēia ʻano .*.*=.*. Ma kēia ʻano, ʻano paʻakikī ke ʻano o ke kumu. Akā ʻo ka mea nui, ma ke ao maoli, hiki i nā ʻōlelo (e like me nā ʻōlelo paʻakikī i nā lula WAF) e noi ana i ka ʻenekini e hoʻohālikelike i kahi ʻāpana a ukali ʻia e kahi ʻāpana ʻē aʻe hiki ke alakaʻi i ka backtracking pōʻino. A ʻo ia ke kumu.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ma ka olelo mau . ʻo ia hoʻi, pono ʻoe e hoʻohālikelike i hoʻokahi ʻano, .* - hoʻohālikelike i nā huaʻōlelo ʻaʻohe a ʻoi aku ka "makemake", ʻo ia hoʻi, ka hopu ʻana i ka nui o nā huapalapala, no laila .*.*=.* 'o ia ho'i e ho'olike me ka 'ole a 'oi aku ka nui o nā hua'ōlelo, a laila e ho'olike me ka 'ole a 'oi aku ka nui o nā hua'ōlelo, e huli i ka literal = 'ano, e ho'olike me ka 'ole a 'oi aku paha nā huapalapala.

E lawe kāua i ka laina hoʻāʻo x=x. Kulike ia me ka olelo .*.*=.*. .*.* ma mua o ka pili ana o ka hoailona like me ka mua x (kekahi o na hui .* соответствует x, a me ka lua - zero characters). .* ma hope = nā pāʻani hope loa x.

Pono kēia hoʻohālikelike i nā ʻanuʻu 23. Hui mua .* в .*.*=.* hana me ke kuko a pili i ke kaula holoʻokoʻa x=x. Neʻe ka ʻenekini i ka hui aʻe .*. ʻAʻohe a mākou mau huaʻōlelo e hoʻohālikelike, no laila ka hui ʻelua .* pili i nā huaʻōlelo ʻaʻohe (ʻae ʻia kēia). A laila neʻe ka ʻenekini i ka hōʻailona =. ʻAʻohe hōʻailona hou (hui mua .* hoʻohana i ka ʻōlelo holoʻokoʻa x=x), ʻaʻohe mea hoʻohālikelike.

A laila hoʻi ka ʻenekini hōʻike maʻamau i ka hoʻomaka. Hele ʻo ia i ka hui mua .* a hoohalike с x= (ma kahi o x=x), a laila lawe i ka hui ʻelua .*. Hui lua .* ua hoohalikeia me ka lua x, a ʻaʻohe mau huaʻōlelo i koe. A hiki hou ke enekini = в .*.*=.*, ʻaʻohe mea e hana. A hoʻi hou ʻo ia i hope.

ʻO kēia manawa ka hui .* pili mau x=, akā, ʻo ka hui ʻelua .* aʻole kahi mea hou aku x, a me nā hua ʻole. Ke hoʻāʻo nei ka ʻenekini e ʻimi i kahi ʻano maoli = i ke kumu .*.*=.*, akā ʻaʻole i puka mai (ma hope o nā mea a pau, ua noho mua ka hui mua .*). A hoʻi hou ʻo ia i hope.

ʻO kēia manawa ka hui mua .* lawe wale i ka x mua. Akā ʻo ka hui ʻelua .* "makemake" hopu =x. Ua kuhi mua paha ʻoe i ka mea e hiki mai ana? Ho'āʻo ka ʻenekini e hoʻohālikelike i ka literal =, hāʻule a hana hou i hope.

ʻO ka hui mua .* pili nō i ka mea mua x. Ka lua .* lawe wale =. ʻOiaʻiʻo, ʻaʻole hiki i ka ʻenekini ke hoʻohālikelike i ka literal =, no ka mea, ua hana mua ka hui ʻelua i kēia .*. A hoʻi hou i hope. A ke hoʻāʻo nei mākou e hoʻohālikelike i kahi kaula o ʻekolu mau huaʻōlelo!

ʻO ka hopena,ʻo ka hui mua .* pili wale i ka mea mua x, ka lua .* - me nā huaʻōlelo ʻaʻohe, a pili ka ʻenekini i ka literal = i ka hōʻike manaʻo с = ma ka laina. ʻO ka hui hope loa .* ua hoohalikeia me ka hope x.

23 kapuai wale no x=x. E nānā i kahi wikiō pōkole e pili ana i ka hoʻohana ʻana iā Perl Regexp::Debugger, e hōʻike ana i ke ʻano o nā ʻanuʻu a me ka backtracking.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

He hana nui kēia, akā pehea inā x=x e loaʻa iā mākou x=xx? He 33 ʻanuʻu kēlā. A ina x=xxx? 45. ʻAʻole laina laina ka pilina. Hōʻike ka pakuhi i kahi hoʻohālikelike mai x=x i luna x=xxxxxxxxxxxxxxxxxxxx (20 x mahope =). Inā loaʻa iā mākou he 20 x ma hope =, hoʻopau ka ʻenekini i ka hoʻohālikelike ʻana i nā ʻanuʻu 555! (Eia kekahi, inā ua nalowale mākou x= a he 20 wale nō ke kaula x, e hana ka enekini i 4067 mau ʻanuʻu no ka hoʻomaopopo ʻana ʻaʻohe pāʻani).

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Hōʻike kēia wikiō i nā backtracking a pau no ka hoʻohālikelike x=xxxxxxxxxxxxxxxxxxxx:

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

ʻO ka pilikia, ʻo ka piʻi ʻana o ka nui o ke kaula, e ulu nui ka manawa hoʻohālikelike. Akā hiki ke ʻoi aku ka hewa inā hoʻololi iki ka ʻōlelo maʻamau. E ʻōlelo kākou ua loaʻa .*.*=.*; (ʻo ia hoʻi, aia kahi semicolon maoli ma ka hope o ke kumu). No ka laʻana, e hoʻohālikelike i kahi ʻōlelo like foo=bar;.

A he pōʻino maoli nō ka hoʻihoʻi ʻana. No ka hoohalike ana x=x he 90 kapuaʻi, ʻaʻole 23. A ke ulu wikiwiki nei kēlā helu. E hoohalike x= a me 20 x, 5353 nā ʻanuʻu e pono ai. Eia ka pakuhi. E nānā i nā waiwai axis Y hoʻohālikelike ʻia me ka pakuhi mua.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Inā makemake ʻoe, e nānā i nā ʻanuʻu like ʻole he 5353 x=xxxxxxxxxxxxxxxxxxxx и .*.*=.*;

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ma ka hoʻohana ʻana i ka palaualelo ma mua o ka hoʻohālikelike ʻana, hiki ke mālama ʻia ka nui o ka backtracking. Inā mākou e hoʻololi i ka ʻōlelo kumu i .*?.*?=.*?, no ka hoohalike ana x=x he 11 mau ʻanuʻu (ʻaʻole 23). No ka mea x=xxxxxxxxxxxxxxxxxxxx... ʻO nā mea a pau no ka mea ? mahope .* haʻi i ka ʻenekini e hoʻohālikelike i ka helu liʻiliʻi o nā huaʻōlelo ma mua o ka neʻe ʻana.

Akā ʻaʻole hiki i ka palaualelo palapala ʻāina ke hoʻopau loa i ka pilikia backtracking. Inā mākou e pani i ka laʻana catastrophic .*.*=.*; maluna o .*?.*?=.*?;, e mau ana ka manawa hoʻokō. x=x ke koi nei i 555 mau ʻanuʻu, a x= a me 20 x - 5353.

ʻO ka mea wale nō e hiki ke hana (ma waho aʻe o ke kākau hou ʻana i ke kumu no ka kikoʻī nui aʻe) ʻo ka haʻalele ʻana i ka mīkini hōʻike maʻamau me kāna ʻano hoʻihoʻi. ʻO kēia kā mākou e hana ai i nā pule e hiki mai ana.

Ua ʻike ʻia ka hopena o kēia pilikia mai ka makahiki 1968, i ka wā i kākau ai ʻo Kent Thompson i kahi ʻatikala Nā ʻenehana papahana: algorithm huli ʻōlelo maʻamau ("Ka Papahana Papahana: Algorithm Huli Hōʻike Maʻamau"). Hōʻike ka ʻatikala i kahi mīkini e hiki ai iā ʻoe ke hoʻololi i kahi ʻōlelo maʻamau i nā mīkini mokuʻāina palena ʻole, a ma hope o ka hoʻololi ʻana o ka mokuʻāina i nā mīkini mokuʻāina palena ʻole, e hoʻohana i kahi algorithm nona ka manawa hoʻokō e hilinaʻi ma ka laina i hoʻohālikelike ʻia.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Nā ʻano papahana
Algorithm Huli Huli Mau
Ken Thompson

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

Hōʻike ʻo ia i kahi ala no ka ʻimi ʻana i kahi kaula kikoʻī o nā huaʻōlelo ma ka kikokikona a kūkākūkā i ka hoʻokō ʻana o kēia ʻano hana ma ke ʻano compiler. Lawe ka mea hōʻuluʻulu i ka ʻōlelo maʻamau ma ke ʻano he kumu kumu a hana i ka papahana IBM 7094 ma ke ʻano he code object. Lawe ka papahana mea i ka hoʻokomo ma ke ʻano o ka ʻimi kikokikona a hoʻopuka i kahi hōʻailona i kēlā me kēia manawa e hoʻohālikelike ʻia kahi kaula kikokikona me kahi ʻōlelo maʻamau. Hāʻawi ka ʻatikala i nā laʻana, nā pilikia a me nā hoʻonā.

ʻO Algorithm
Ua hoʻihoʻi ʻia ka huli ʻana ma mua o ka huli ʻana inā ʻaʻole i loaʻa ka hopena i ka huli ʻana.

Ma ke ʻano hoʻohui, ʻaʻole hana ka algorithm me nā hōʻailona. Hāʻawi ia i nā ʻōlelo aʻoaʻo i ka code i hōʻuluʻulu ʻia. He wikiwiki loa ka hoʻokō ʻana - ma hope o ka hāʻawi ʻana i ka ʻikepili i luna o ka papa inoa o kēia manawa, ʻimi ʻakomi ʻo ia i nā huaʻōlelo like ʻole a pau i ka ʻōlelo maʻamau.
Hoʻokomo ʻia ka hui ʻana a me ka huli ʻana i ka algorithm i loko o ka mea hoʻoponopono kikokikona kaʻana like ʻana ma ke ʻano he ʻimi ʻokoʻa. ʻOiaʻiʻo, mamao loa kēia mai ka hoʻohana wale ʻana o ia kaʻina ʻimi. No ka laʻana, hoʻohana ʻia kahi ʻano like ʻole o kēia algorithm ma ke ʻano he hulina hōʻailona ma kahi papaʻaina ma assembler.
Manaʻo ʻia ua kamaʻāina ka mea heluhelu i nā ʻōlelo maʻamau a me ka ʻōlelo polokalamu kamepiula IBM 7094.

Mea hōʻuluʻulu
ʻO ka mea hoʻopili he ʻekolu pae e holo like ana. ʻO ka hana mua, ʻo ia ke kānana syntax, kahi e hiki ai ke hele i nā ʻōlelo maʻamau me ka syntactically pololei. Hoʻokomo pū kēia ʻanuʻu i ka mea hoʻohana "·" e hoʻohālikelike i nā ʻōlelo maʻamau. Ma ka ʻanuʻu ʻelua, ua hoʻololi ʻia ka ʻōlelo maʻamau i ke ʻano postfix. I ke kolu o ka pae, hana ʻia ke code object. ʻIke ʻia nā pae mua 2, ʻaʻole mākou e noho ma luna o lākou.

ʻAʻole ʻōlelo ka ʻatikala a Thompson e pili ana i nā mīkini mokuʻāina nondeterministic, akā wehewehe maikaʻi ia i ka linear time algorithm a hāʻawi i kahi papahana ALGOL-60 e hoʻopuka ana i ka code ʻōlelo hui no ka IBM 7094. He paʻakikī ka hoʻokō, akā maʻalahi loa ka manaʻo.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

ala huli i kēia manawa. Hōʻike ʻia ia e kahi ⊕ ikona me hoʻokahi hoʻokomo a me ʻelua mau puka.
Hōʻike ka Kiʻi 1 i nā hana o ke kolu o ka hōʻuluʻulu ʻana i ka wā e hoʻololi ai i kahi laʻana hōʻike maʻamau. ʻO nā huaʻōlelo mua ʻekolu i loko o ka laʻana he a, b, c, a hana kēlā me kēia i kahi waihona hoʻokomo S[i] a me kahi kahua NNODE.

NNODE i ke code i loaʻa e hoʻopuka i ka huaʻōlelo maʻamau i loko o kahi helu helu hoʻokahi (e nānā i ke kiʻi 5)

ʻO kēia ke ʻano o ka ʻōlelo maʻamau .*.*=.*, inā e noʻonoʻo ʻoe e like me nā kiʻi mai ka ʻatikala a Thompson.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ma Fig. 0 he ʻelima mokuʻāina e hoʻomaka ana mai ka 0, a me 3 pōʻaiapuni e hoʻomaka ana mai ka mokuʻāina 1, 2 a me 3. Ua pili kēia mau pōʻaiapuni ʻekolu i ʻekolu. .* ma ka olelo mau. 3 ovals me nā kiko e pili ana i hoʻokahi hōʻailona. Oval me kahi hōʻailona = pili i ke ano maoli =. ʻO ka mokuʻāina 4 ka hope. Inā mākou e hōʻea, a laila ua kūlike ka ʻōlelo maʻamau.

No ka ʻike ʻana pehea e hiki ai ke hoʻohana ʻia ke kiʻi mokuʻāina no ka hoʻohālikelike ʻana i nā ʻōlelo maʻamau .*.*=.*, e nānā kākou i ka hoʻolike ʻana i ke kaula x=x. Hoʻomaka ka papahana mai ka mokuʻāina 0, e like me ka hōʻike ʻana ma Fig. 1.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

No ka hana ʻana o kēia algorithm, pono ka mīkini mokuʻāina i kekahi mau mokuʻāina i ka manawa like. ʻO ka mīkini palena ʻole e hana i nā hoʻololi āpau i ka manawa like.

Ma mua o ka loaʻa ʻana o ka manawa e heluhelu ai i ka ʻikepili hoʻokomo, hele ia i nā mokuʻāina mua ʻelua (1 a me 2), e like me ka hōʻike ʻana ma ka Fig. 2.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

Ma Fig. Hōʻike ka 2 i ka mea e hana ai ke nānā ʻo ia i ka mua x в x=x. x hiki ke palapala 'āina i ka lae luna, e hele ana mai ka moku'āina 1 a ho'i i ka moku'āina 1. A i 'ole x hiki ke palapala 'āina i ka helu ma lalo, e hele ana mai ka moku'āina 2 a ho'i i ka moku'āina 2.

Ma hope o ka hoʻohālikelike ʻana i ka mea mua x в x=x aia mākou ma nā mokuʻāina 1 a me 2. ʻAʻole hiki iā mākou ke hōʻea i ka mokuʻāina 3 a i ʻole 4 no ka mea pono mākou i kahi ʻano maoli. =.

A laila e noʻonoʻo ka algorithm = в x=x. E like me x ma mua, hiki ke hoʻohālikelike ʻia i kekahi o nā puka lou ʻelua mai ka mokuʻāina 1 a i ka mokuʻāina 1 a i ʻole mai ka mokuʻāina 2 a i ka mokuʻāina 2, akā hiki i ka algorithm ke hoʻohālikelike i ka literal. = a neʻe mai ka mokuʻāina 2 a i ka mokuʻāina 3 (a me 4 koke). Hōʻike ʻia kēia ma Fig. 3.

Nā kikoʻī o ka pau ʻana o Cloudflare ma Iulai 2, 2019

A laila neʻe ka algorithm i ka mea hope loa x в x=x. Mai ka mokuʻāina 1 a me 2 hiki ke hoʻololi like i ka mokuʻāina 1 a me 2. Mai ka mokuʻāina 3 x hiki ke hoʻohālikelike i ke kiko ma ka ʻākau a hoʻi i ka mokuʻāina 3.

I kēia pae, kēlā me kēia ʻano x=x noʻonoʻo ʻia, a ʻoiai ua hiki mākou i ka mokuʻāina 4, ua pili ka ʻōlelo maʻamau i kēlā kaula. Hana ʻia kēlā me kēia ʻano i hoʻokahi manawa, no laila he laina laina kēia algorithm i ka lōʻihi o ke kaula hoʻokomo. A ʻaʻohe hoʻi hope.

ʻIke loa, ma hope o ka hōʻea ʻana i ka mokuʻāina 4 (i ka wā i kūlike ai ka algorithm x=) ua kūlike ka ʻōlelo maʻamau holoʻokoʻa, a hiki ke hoʻopau ʻia ka algorithm me ka noʻonoʻo ʻole x.

Pili kēia algorithm i ka laina laina i ka nui o ke kaula hoʻokomo.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka