Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

Hi omnes! Nomen meum est Dmitry Samsonov, administrator Odnoklassniki ut princeps ratio laboro. Plus quam septem milia corporis ministrantium habemus, XI milia vasorum in nube et in CC applicationibus, quae in variis conformationibus septingenta ligaturas formant. Magna pars servientium CentOS VII currunt.
Die 14 mensis Augusti anno 2018, notitia de FragmentSmack vulnerabilitatis divulgata est
(CVE, 2018 5391,) et SegmentSmack (CVE, 2018 5390,). Hae vulnerabilitates sunt cum vectore retis et score satis alto (7.5), quae minatur negationem servitii (DoS) ob lassitudinem resource (CPU). Fragmentum fixum pro FragmentSmack tunc non propositum fuit, praeterea multo serius processit quam evulgatio notitiarum de vulnerabilitate. Ut SegmentSmack aboleatur, suggerebatur nucleum renovare. Involucrum ipsum renovationis eodem die dimissum est, omnia quae supererant ut instituerent.
Imo non sumus contra nucleum omnino adaequationis! Sed a feugiat nulla.

Quomodo renovamus nucleum in productione

In genere nihil complicatum;

  1. Download fasciculi;
  2. Eos in numerum servorum instrue (including servers hosting our cloud);
  3. Nihil fac fractum;
  4. Fac ut omnia nuclei normae sine mendis adhibeantur;
  5. Paucis diebus expecta;
  6. Perscriptio servo perficientur;
  7. Switch instruere novos ministros ad novum nucleum;
  8. Renovare omnibus servientibus per centrum datae (una centri notitia temporis ad minimize effectum usorum in casu quaestionum);
  9. Reboot omnes servers.

Itera pro omnibus nucleis habemus. In momento est;

  • Stock CentOS 7 3.10 - pro servientibus regularibus;
  • Vanilla 4.19 unum nubes-nubesquia opus est BFQ, BBR, etc.;
  • Elrepo kernel-ml 5.2 - for valde oneratus distributoresquoniam 4.19 instabiles usus est, sed eadem lineamenta sunt necessaria.

Ut coniectare possetis, milia rebooting ministrantium longissimum tempus accipit. Cum non omnes vulnerabilitates criticae pro omnibus servientibus sint, ea tantum reboo quae directe e Interrete pervia sunt. In nube, ne flexibilitatem finiat, vascula extrinsecus pervia singulis servientibus novo nucleo ligamus, sed omnes exercitus sine exceptione reboant. Feliciter procedendum est simplicius quam cum servientibus regularibus. Exempli gratia, continentia stata sine servo per reboot ad alium movere potest.

Sed adhuc multum laboris est, et plures septimanas capere potest, et si aliquae difficultates sunt cum nova versione, usque ad plures menses. Oppugnatores hoc optime intelligunt, itaque consilio B egent.

FragmentSmack/SegmentSmack. Workaround

Fortunate, aliquot vulnerabilities tale consilium B exstat, et vocatur Workaround. Saepissime haec mutatio est in nucleo/applicationibus uncinis qui effectum possibilis obscurare possunt vel abusionem vulnerabilium omnino tollere.

In FragmentSmack / SegmentSmack propositum fuit hoc Workaround:

«Mutare potes valores defaultorum 4MB et 3MB in net.ipv4.ipfrag_al_thresh et net.ipv4.ipfrag_low_thresh (et eorum versos pro ipv6 net.ipv6.ipfrag_thresh et net.ipv6.ipfrag_thresh) ad 256 kB et 192 kB respective vel deprimere. Probationes parvas demonstrant ad guttas significantes in CPU usu in oppugnatione secundum ferramenta, occasus, condiciones. Nihilominus, exstare aliquid momenti ob ipfrag_timum=262144 bytes, cum duo tantum 64K fragmenta in coeundi queue ad tempus convenire possunt. Exempli gratia, periculum est quod applicationes quae operantur cum magnis UDP packets frangent".

Parametri se in nucleo documenta describitur:

ipfrag_high_thresh - LONG INTEGER
    Maximum memory used to reassemble IP fragments.

ipfrag_low_thresh - LONG INTEGER
    Maximum memory used to reassemble IP fragments before the kernel
    begins to remove incomplete fragment queues to free up resources.
    The kernel still accepts new fragments for defragmentation.

Magnas UDPs in servitiis productionis non habemus. Negotiatio in LAN redacta nulla est, negotiatio in LURIDUS redacta est, sed non significativa. Signa nulla sunt - ex Workaround evolvi potes!

FragmentSmack/SegmentSmack. Primus sanguis

Primum problema quod invenimus fuit quod continentes nubes interdum novos occasus partim (tantum ipfrag_thresh) applicuerunt, et interdum omnino non applicuerunt - in initio simpliciter crepuerunt. Fieri non potuit quaestionem stabiliter repraesentet (omnes occasus manually sine ullis difficultatibus applicabantur). Intellectus quare continens initium fragore non tam facile est: errores non inventi sunt. Certum erat unum: revolutio occasus quaestionem solvit cum fragoribus continentis.

Cur non satis est exercitum Sysctl adhibere? Continens in retiacula Nominum dicata proprio vivit, saltem pars network parametri Sysctl ut in vase ab hospite differant.

Quam exacte sunt obitus Sysctl in vase applicati? Cum continentia nostra immunis sunt, non potes aliquem Sysctl occasum mutare eundo in ipsum continentem - simpliciter non satis iuribus habes. Currere vasa, nostra nubes eo tempore usus est Docker podman). Parametri continentis novi ad Docker per API delati sunt, inclusis necessariis uncinis Sysctl.
Cum per versiones quaereret, evenit ut Docker API omnes errores non reddidisset (saltem in versione 1.10). Cum initium continentis per "Documenariam currere" conati sumus, tandem aliquid saltem vidimus;

write /proc/sys/net/ipv4/ipfrag_high_thresh: invalid argument docker: Error response from daemon: Cannot start container <...>: [9] System error: could not synchronise with container process.

Valor modulus non valet. Sed quid? Et cur non interdum tantum valet? Contigit quod Docker non spondet ordinem quo parametri Sysctl applicantur (ultima versio probata 1.13.1), ita interdum ipfrag_thresh conabatur ut 256K apponeretur, cum ipfrag_low_thresh adhuc 3M, id est terminus superior inferior erat. quam modus inferior, qua ad errorem.

In illo tempore iam nosmetipsos machinamenta nostra usi sumus ad receptaculum reconfigurandum post initium (congelationem continens post coetus freezer et exequens mandata in spatio nominali continentis via ip netns) , et addimus huic parti parametri Sysctl. Solvitur quaestio.

FragmentSmack/SegmentSmack. Primum sanguis 2

Priusquam tempus intelligeremus usum Workaround in nube, primum rare querelae ab utentibus venire coeperunt. Illo tempore plures septimanae elapsae sunt ab initio utendi Laboraround primis servientibus. Investigatio initialis ostendit querelas esse acceptas contra singula officia, et non omnes servitores earum rerum. Quaestio iterum valde incerta facta est.

Imprimis nos quidem uncinis Sysctl revolvere conati sumus, sed hoc nihil efFecit. Varius manipulationes cum servo et applicatione occasus vel auxilium non fecerunt. Reboot adiuvisti. Linux rebooting tam innaturale est quam in diebus antiquis Fenestra normali fuit. Tamen adiuvit, eamque ad glitch nuclei cretavimus cum novis fundis in Sysctl applicandis. Quam frivolum erat...

Post tres septimanas quaestio recurritur. Configuratio horum ministrantium plane simplex erat: Nginx in modo procuratori/balancer. Non multum negotiationis. Nova introductoria nota: numerus DIV errorum in clientium in dies augetur.Tempus ex Porta). Aliquam lacinia purus ostendit numerum 504 errorum per diem huic ministerio.

Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

Omnes errores circa idem sunt backend - circa unum quod est in nube. Memoria consumptionis graphi involucrum fragmenta in hoc backend vidi sic:

Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

Hoc unum est ex manifestissimis quaestionis manifestationes in graphs operandi ratio. In nube, eodem tempore, quaestio retis alterius cum QoS (Traffic Control) fixa est. In grapho memoriae tabes- sionis ad fragmentorum fasciculorum, prorsus eadem spectabatur;

Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

Assumptio simplex erat: si eandem graphes spectent, eandem habent rationem. Praeterea quaevis problemata huius generis memoriae rarissimae sunt.

Essentia quaestionis fixae erat ut schedula fasciculi fq cum occasus in QoS default usus est. Defalta, pro uno nexu, permittit te ad queue 100 fasciculos addere, et nonnullas nexus, in condicionibus canalis penuriae, queue capacitati claudunt. In hoc casu omittuntur facis. In tc mutant (tc -s qdisc) videri potest sic:

qdisc fq 2c6c: parent 1:2c6c limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028 initial_quantum 15140 refill_delay 40.0ms
 Sent 454701676345 bytes 491683359 pkt (dropped 464545, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  1024 flows (1021 inactive, 0 throttled)
  0 gc, 0 highprio, 0 throttled, 464545 flows_plimit

"464545" fluit_plimit" fasciculae omissae sunt propter queue limitem unius nexus excedentem, et "464545" omissa est summa omnium fasciculorum huius schedulae omissae. Post queue longitudinem usque ad 1 milia augens et vasa restarting, quaestio fieri desiit. Residere potes et pota venuste.

FragmentSmack/SegmentSmack. Ultimus sanguis

Uno post aliquot menses post denunciationem vulnerabilitatem in nucleo, fixus in FragmentSmack tandem apparuit (me admoneam te una cum nuntio Augusto, fixum solum pro SegmentSmack dimissum esse), quod nobis occasionem dedit Workaround deserendi; quae res nobis multum negotii fuit. Hoc tempore iam aliquos ministros ad novum nucleum transferre curavimus et nunc ab initio incipere debebamus. Cur nucleum renovamus non expectato FragmentSmack fix? Revera est processus tutelae contra has vulnerabilitates incidit (et merged) cum processu ipsius adaequationis CentOS (qui plus temporis accipit quam adaequationis tantum acinum). Praeterea SegmentSmack periculosior passibilitas est, et figere statim visus est, ut sensum usquam. Nihilominus nucleum in CentOS enucleare non potuimus propterea quod vulnerabilitas FragmentSmack, quae per CentOS 7.5 apparuit, in versione 7.6 tantum fixa erat, ideo renovationem ad 7.5 desistere et rursus cum renovatione ad 7.6 incipere. Et hoc etiam fit.

Secundo, rariores querelae de quaestionibus usoris nobis redditae sunt. Nunc iam pro certo scimus omnia ad fasciculorum fasciculorum ex clientibus ad quosdam e nostris servientibus cognata esse. Quin etiam exiguus numerus fasciculorum ex tota massa per hos ministros transiit.

Ut supra meminimus e fabula volvens Sysctl non adiuvabat. Reboot adiuvisti, sed ad tempus.
Suspiciones de Sysctl non sublati sunt, sed hoc tempore quam maxime notitias colligere oportuit. Erat etiam ingens defectus facultatis in cliente quaestionis onerationes effingere ut pressius studeret quidnam fieret.

Analysis omnium rerum suppeditarum statisticarum ac tigna non nos propius ad cognoscendum id quod fiebat attulit. Acutus erat defectus facultatis ad problema exprimendum ut nexum specificum "sentire". Denique tincidunt, speciali versione applicationis utentes, firmam problematum productionem consequi curaverunt in experimenta machinae coniunctae per Wi-FI. Hoc in inquisitione breakthrough. Cliens Nginx coniungitur, quod procuratorem ad backend, quod erat applicatio Javae nostra.

Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

Dialogus quaestionum talis erat (fixus in Nginx parte procuratoris);

  1. Clientem: peto ut informationes accipias de lima eximendo.
  2. Java servo: responsio.
  3. Client: POST cum lima.
  4. Java servo: errorem.

Eodem tempore, Servor Java stipendio scribit 0 bytes notitiarum ab cliente receptas esse, et procuratorem Nginx scribit postulationem plus quam XXX secundis accepisse (XXX secundis esse opportunum applicationis clientis). Why the timeout and why 30 bytes? Ex prospectu HTTP, omnia ut decet, operatur, sed tabella tabella evanescere videtur a retis. Praeter haec evanescit inter clientem et Nginx. Tempus est armandi te cum Tcpdump! Sed primum debes intelligere retis figuram. Nginx procuratorem post L30 librari NFware. Cuniculus fasciculos ex librario L3 servo liberare adhibetur, qui caput suum ad fasciculos adiungit;

Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

In hoc casu, retiaculum huic servo in forma Vlan-tagged commercii venit, quae etiam agros suos facis;

Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

Atque haec negotiatio etiam dissolvi potest (parvus ille cento ineuntes in negotiationibus redactis de quibus diximus cum perpendendis periculis ex Workaround) , quod etiam argumenta capitis mutatur:

Cavete a nuditatibus quae operas circumeunt. Pars I: FragmentSmack/SegmentSmack

Iterum: fasciculi involucro cum Vlan tag includuntur, cum cuniculo encapsulantur, comminuuntur. Ut melius quomodo id fiat, iter fasciculum ex cliente ad Nginx procuratorem tractemus.

  1. Fasciculus attingit L3 librarius. Ad rectam usam intra centrum datae, fasciculus in cuniculo incidatur et ad card retis mittitur.
  2. Cum fasciculum + cuniculi capitis in MTU non aptum est, fasciculus in fragmenta incidit et ad retia mittitur.
  3. Transitus post L3 librarius, cum fasciculum acceptum, Vlan tag ad illud addit et in eum mittit.
  4. Commutatio in conspectu Nginx procuratoris videt (substructio in uncinis portubus) quod server fasciculum Vlan-encapsulatum exspectat, ita emittit ut sine Vlan tag remoto.
  5. Linux fragmenta singulorum fasciculorum accipit et in unam sarcinam magnam mergit.
  6. Deinde fasciculus ad interfaciem Vlan pervenit, ubi primum tabulatum ab eo removetur - Vlan encapsulation.
  7. Linux igitur eam ad interfaciem cuniculi mittit, ubi alterum tabulatum ab eo removetur - Tunnel encapsulation.

Difficilis eft haec omnia parametri tcpdump.
Incipiamus a fine: suntne mundae (sine capitis capite necessariae) IP fasciculi a clientibus, cum vlan et cuniculo encapsulationis amoventur?

tcpdump host <ip клиента>

Minime, nullae eiusmodi fasciculi in calculonis servi erant. Prius igitur ibi erit quaestio. Suntne aliquae fasciculi cum sola Vlan encapsulatione remota?

tcpdump ip[32:4]=0xx390x2xx

0xx390x2xx est client IP oratio in forma hexametri.
32:4 — Inscriptio et longitudo agri in quo SCR IP scriptum est in cuniculo conleci.

Inscriptio ager violenter eligendus erat, cum in interreti scribunt circiter 40, 44, 50, 54, sed nulla erat ibi IP oratio. Inspicere etiam potes unum e fasciculis in hexametris (parametri -xx vel -XX in tcpdump) et computare locum IP quem scis.

Suntne fragmenta fasciculi Vlan et cuniculi sine encapsulatione remota?

tcpdump ((ip[6:2] > 0) and (not ip[6] = 64))

Haec magica nobis omnia fragmenta, etiam ultimum, ostendent. Probabiliter idem per IP eliquari potest, sed non tentavi, quia non sunt plurimae tales fasciculi, et quae opus erant in communi fluxu facile reperiebantur. Hic sunt:

14:02:58.471063 In 00:de:ff:1a:94:11 ethertype IPv4 (0x0800), length 1516: (tos 0x0, ttl 63, id 53652, offset 0, flags [+], proto IPIP (4), length 1500)
    11.11.11.11 > 22.22.22.22: truncated-ip - 20 bytes missing! (tos 0x0, ttl 50, id 57750, offset 0, flags [DF], proto TCP (6), length 1500)
    33.33.33.33.33333 > 44.44.44.44.80: Flags [.], seq 0:1448, ack 1, win 343, options [nop,nop,TS val 11660691 ecr 2998165860], length 1448
        0x0000: 0000 0001 0006 00de fb1a 9441 0000 0800 ...........A....
        0x0010: 4500 05dc d194 2000 3f09 d5fb 0a66 387d E.......?....f8}
        0x0020: 1x67 7899 4500 06xx e198 4000 3206 6xx4 [email protected].
        0x0030: b291 x9xx x345 2541 83b9 0050 9740 0x04 .......A...P.@..
        0x0040: 6444 4939 8010 0257 8c3c 0000 0101 080x dDI9...W.......
        0x0050: 00b1 ed93 b2b4 6964 xxd8 ffe1 006a 4578 ......ad.....jEx
        0x0060: 6966 0000 4x4d 002a 0500 0008 0004 0100 if..MM.*........

14:02:58.471103 In 00:de:ff:1a:94:11 ethertype IPv4 (0x0800), length 62: (tos 0x0, ttl 63, id 53652, offset 1480, flags [none], proto IPIP (4), length 40)
    11.11.11.11 > 22.22.22.22: ip-proto-4
        0x0000: 0000 0001 0006 00de fb1a 9441 0000 0800 ...........A....
        0x0010: 4500 0028 d194 00b9 3f04 faf6 2x76 385x E..(....?....f8}
        0x0020: 1x76 6545 xxxx 1x11 2d2c 0c21 8016 8e43 .faE...D-,.!...C
        0x0030: x978 e91d x9b0 d608 0000 0000 0000 7c31 .x............|Q
        0x0040: 881d c4b6 0000 0000 0000 0000 0000 ..............

Haec sunt duo fragmenta unius fasciculi (idem ID 53652) cum photographo (verbum Exif in primo fasciculo conspicuum est). Ob hoc quod in hoc gradu fasciculi sunt, sed non in eri forma infusi, quaestio clare est cum ecclesia. Denique documenta huius documenta sunt!

Fasciculus decoder nullas difficultates patefecit quae aedium impedirent. Hic probavit: hpd.gasmi.net. Primo, cum aliquid ibi farcire conaris, decoder non placet forma fasciculi. Contigit inter Srcmac et Ethertypum (non relatum ad informationem fragmenti). His ablatis, decoder incepit opus. Sed volutpat nulla erat.
Quicquid dicat, nihil aliud repertum est quam Sysctl. Omnes residuae fuerunt viam invenire servitoribus problemati cognoscendi ad scalam intellegendam et de ulterioribus actionibus decernendi. Requisita calculi satis cito inventa est;

netstat -s | grep "packet reassembles failed”

Est etiam in snmpd sub OID=1.3.6.1.2.1.4.31.1.1.16.1 (ipSystemStatsReasmFails).

Numerus defectuum ab IP re-conventuum algorithm detectorum (quacumque de causa: opportuno, erroribus, etc.).

Inter catervam ministrantium in qua quaestio investigabatur, duobus calculis velocius auctus est, duobus tardius, et duobus amplius omnino non crevit. Comparando dynamicos huius calculi cum dynamicis errorum HTTP in Java servo correlationem patefecit. Hoc est, metrum viverra posse.

Habens certam notam problematum magni ponderis est ut accurate determinare possis an subsidia Sysctl revolutio, cum ex antecedente historia scimus hoc ex applicatione statim intelligi non posse. Hoc signum permitteret nos cognoscere omnes areas problematum in productione antequam illud usorum cognosceret.
Postquam Sysctl revolutus est, errores vigilantia cessaverunt, ita causa problematum probata est, tum quod reverti adiuvat.

Revoluvimus fragmentationem uncinorum in aliis servientibus, ubi nova vigilantia exortum est, et alicubi etiam plus memoriae pro fragmentis collocavimus quam ante defaltam (erat UDP statistics, cuius iactura partialis in curriculo generali notabilis erat) .

Maxime quaestiones

Cur in nostrum libratorem L3 redactae sunt? Pleraque fasciculorum quae ab usoribus ad librarios perveniunt sunt SYN et ACK. Magnitudines harum fasciculorum parvae sunt. Sed quia participatio talium fasciculorum amplissima est, in prospectu suo non animadvertimus praesentiam magnarum fasciculorum quae fragmentum esse coeperunt.

Configurationis causa fuit fractis scriptor advmss de servientibus cum Vlan interfaces (paucissimi erant ministri cum tagged commercii in productione illo tempore). Advmss nos permittit ad clientelam deferre informationes quas in nostram partem facis minores esse magnitudine ut, postquam capita capitis illis adnectuntur, teri non habeant.

Cur Sysctl reverti non adiuvit, sed reboot fecit? Revolvens Sysctl copiam memoriae mutavit in fasciculis mergendi available. Eodem tempore, ut videtur, hoc ipsum memoriae superfluum est ad fragmentorum tarditatem nexuum, quae ad fragmenta diu morata in queue perducunt. Id est, processum in circuitus.
Reboot purgavit memoriam et omnia in ordinem redierunt.

Potuitne facere sine Workaround? Ita, sed magnum est periculum utentes relinquendi sine servitio in eventu impetus. Utique, usus Workaround in variis quaestionibus consecutus est, incluso tarditate cuiusdam muneris utentium, sed tamen actiones iustificatas esse credimus.

Multi gratias Andrey Timofeev (atimofeyevad auxilium in inquisitione facienda, necnon Alexey Krenev (devicex ") — ad opus titanicum adaequationis Centos et nucleos ministrantium. Processus hic ab initio pluries incipiendus est, quam ob rem in multos menses trahi.

Source: www.habr.com

Add a comment