Рэгулярны выраз паклаў Cloudflare. 27 хвілін.
2 ліпеня 2019 г., 13:42 UTC: адно новае правіла для брандмаўэра вэб-прыкладанняў Cloudflare запускаецца ў больш чым 180 гарадах прыкладна за дзве секунды.
2 ліпеня 2019 г., 13:42 UTC: адно новае правіла для брандмаўэра вэб-прыкладанняў Cloudflare запускаецца ў больш чым 180 гарадах прыкладна за дзве секунды. Гэта правіла XSS у рэжыме мадэлявання, таму яно нічога не блакуе, але ўсё роўна выконваецца пры кожным запыце і заканчваецца на .*(?:.*=.*). PCRE адкочваецца, кожнае ядро працэсара, якое абслугоўвае HTTP, дасягае 100 %, і кожны сайт, які праксіруецца праз Cloudflare, вяртае 502 на працягу 27 хвілін; трафік падае на 82 %. Аварыйны выключальнік знаходзіцца за Cloudflare Access, які знаходзіцца за Cloudflare. Пасля смерці, з уласнага апісання Cloudflare: ахоўнік працэсара, выдалены тыднямі раней пры рэфактарынгу, прызначаным для эканоміі працэсара, працэдура, якая дазваляла любому правілу прапускаць паэтапнасць, рухавік без гарантыі складанасці, 11 прычын і 7 выпраўленняў. Вердыкт па выпраўленні: SHIP IT.
Чытаць пісьмовае выданне (англійская) ↗
Што ахоплівае гэта відэа
- 13:31–13:42 UTC: PR аб'яднаны, CI зялёны (без тэсту працэсара), Quicksilver адпраўляе правіла ў больш чым 180 гарадоў; правілы WAF прапускаюць этапы DOG → PIG → Canary
- 13:45–14:07: першая старонка; працэсар 100 % па ўсім свеце, трафік −82 %, 502 паўсюль; унутраная панэль кіравання знаходзіцца за Cloudflare Access, які не працуе; тэрмін дзеяння некаторых уліковых дадзеных скончыўся; рэдка выкарыстоўваецца абыход
- 14:07–14:09: глабальнае спыненне WAF; трафік і працэсар нармальныя праз 27 хвілін; 14:52 WAF вяртаецца без правіла
- 2 ліпеня (15:50 UTC) і 12 ліпеня: Cloudflare публікуе нататку ў той жа дзень і поўны разбор інцыдэнту; ахоўнік працэсара дададзены зноў, 3 868 правілаў перачытаны, паэтапныя разгортванні, пераход на рухавік рэгулярных выразаў з лінейным часам
Перакладзеная стэнаграма
Перакладзена з арыгінальнай англійскай агучкі. Даступнае аўдыя і субтытры кантралююцца YouTube.
0:00 Адзін рэгулярны выраз запускаецца на кожным серверы Cloudflare адразу, і на працягу наступных дваццаці сямі хвілін сайты за ім з'яўляюцца старонкай 502, што для брандмаўэра з'яўляецца самым строгім магчымым параметрам. 2 ліпеня 2019 года, 13:42 UTC. Cloudflare публікуе на працягу двух гадзін: не атака, а дрэнны разгортванне, трафік упаў на 82 працэнты. Праз дзесяць дзён тэхнічны дырэктар Джон Грэм-Камінг публікуе поўны разбор інцыдэнту, уключаючы рэгулярны выраз, і Hacker News дае яму 698 балаў,
0:26 што для збою з'яўляецца авацыяй стоячы. Як гэта адбываецца, чаму гэта магчыма, і хто насамрэч нясе віну. Гэта The Daily Diff, разбор інцыдэнту. 13:31. Запыт на аб'яднанне аб'ядноўваецца: адно новае правіла брандмаўэра супраць міжсайтавага скрыптынг, у рэжыме мадэлявання, таму ён нічога не блакуе. 13:37, тэсты праходзяць; ніводны не вымярае працэсар. 13:42, правіла адпраўляецца ў 180 гарадоў за дзве секунды, таму што правілы WAF прапускаюць этапы dog, pig і canary, якія атрымліваюць іншыя выпускі.
0:54 13:45, першая старонка. 13:49, Hacker News мае тэму пра старонку стану, на якой усё яшчэ напісана, што ўсе сістэмы працуюць. Правіла заканчваецца на кропка-зорачка, кропка-зорачка, роўна, кропка-зорачка: што заўгодна, потым што заўгодна, потым знак роўнасці. PCRE здагадваецца прагна, церпіць няўдачу і адсочвае кожны іншы падзел. x роўна x займае 23 крокі. Дваццаць x пасля роўнасці: 555.
1:15 Дваццаць x, без знака роўнасці: 4067 крокаў, каб нічога не знайсці. Запусціце гэта на кожны запыт, і кожнае ядро будзе на ста працэнтах, нічога не робячы, старанна. Два ахоўнікі павінны былі гэта злавіць. Ліміт працэсара на правілы быў выдалены па памылцы тыднямі раней, пры рэфактарынгу, прызначаным для таго, каб WAF выкарыстоўваў менш працэсара. І працэдура дазваляе любому правілу прапускаць паэтапнасць, таму што правілы існуюць, каб спыняць жывыя атакі; гэтая не была надзвычайнай сітуацыяй, і яна ўсё роўна стала глабальнай.
1:37 14:00, WAF ідэнтыфікаваны; без атакі. 14:02, нехта прапануе глабальнае спыненне: адзін кампанент, выключаны, па ўсім свеце. Выключальнік знаходзіцца за Cloudflare Access. Cloudflare Access знаходзіцца за Cloudflare. Тэрмін дзеяння некаторых уліковых дадзеных скончыўся з-за невыкарыстання, таму самая хуткая сетка ў інтэрнэце праводзіць пяць хвілін на абыход, які ніхто не трэніраваў. 14:07, забойства. 14:09, трафік нармальны. git blame: разгортванне з адной хуткасцю, глабальнае; ахоўнік працэсара, адрэфактараваны па
2:04 выпадковасці; рухавік рэгулярных выразаў без верхняй мяжы. Не інжынер, які напісаў правіла: разбор інцыдэнту пералічвае адзінаццаць прычын і нікога не называе. Радыус паразы: 27 хвілін, 82 працэнты трафіку, 100 працэнтаў працэсара на кожным ядры, у кожным горадзе. Прыборная панэль і API знаходзяцца за тым жа краем, таму кліенты не могуць нават адключыць яго. Hacker News, пад разборам інцыдэнту: у іх была адна праблема, выкарыстоўвалі рэгулярны выраз, цяпер у іх дзве. Стары жарт. Усё яшчэ кампілюецца.
2:28 Вердыкт, разбор інцыдэнту: SHIP IT. Ахоўнік працэсара вернуты, усе 3868 правілаў чытаюцца ўручную, правілы праходзяць паэтапнасць, і рухавік пераходзіць на той, які мае гарантыі лінейнага часу, апублікаваныя Кэнам Томпсанам у 1968 годзе. Панядзелак: без кропка-зорачка кропка-зорачка ў тым, што выконваецца на запыт, і трымайце аварыйны выключальнік удалечыні ад таго, што ён выключае. Дашліце мне інцыдэнт, пра які вам усё яшчэ не дазволена гаварыць, у каментарах або на daily diff dot dev.
2:53 І гэта ўвесь diff на сёння. Я Ніка з Axrisi. Аб'ядноўвайце адказна.
Крыніцы
- John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
- Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
- Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
- Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
- Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
- Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
- Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
- TechCrunch, Jul 2, 2019techcrunch.com



