Aplikácia MOVEit, ktorá bola minulý mesiac masovo využívaná, opravuje novú kritickú zraniteľnosť

Viac ako 15 rokov stará karikatúra. Vtedy boli pripravené príkazy nové – aspoň pre open-source databázy ako MySQL a programovacie prostredia ako PHP. Dnes na to naozaj neexistuje žiadne ospravedlnenie.

...
Udivuje ma, že weboví vývojári dodnes nerozumejú osvedčeným postupom v tejto oblasti...

Udivuje ma, že weboví vývojári dodnes nerozumejú osvedčeným postupom v tejto oblasti a používajú konštrukcie, ktoré vyžadujú viac zdrojov (z určovania cesty za behu), sú menej robustné a niektoré databázy znemožňujú optimalizáciu dopytov, pokiaľ (ako napríklad oracle) nenaznačíte, že váš SQL je hlúpy, čo je jednoducho hlúpe – ak dokážete ísť do tohto úsilia, môžete robiť správne plány a viaže.

A bude to len horšie, pretože stále viac kódu sa abstrahuje do (zle napísaných, ale populárnych) rámcov, ktoré neustále robia veci hlúpo a nemáte ani potuchy, že sa to deje, kým niekto nespustí fuzzer na jednej z vašich stránok a nezistí, ako blízko je všetko rozbiť.

Zahŕňať odkazy XKCD, ktoré sa teraz objavujú v komentároch, tým, že ich zahrniete do článku?

Vzhľadom na tieto výsledky sa zdá, že reakciou na incident by malo byť toto opraviť a potom pracovať na jeho čo najrýchlejšom odstránení. Toto množstvo chýb SQL Injection poukazuje na zásadné problémy s tým, ako je celý tento systém zostavený.

Udivuje ma, že weboví vývojári dodnes nerozumejú osvedčeným postupom v tejto oblasti a používajú konštrukcie, ktoré vyžadujú viac zdrojov (z určovania cesty za behu), sú menej robustné a niektoré databázy znemožňujú optimalizáciu dopytov, pokiaľ (ako napríklad oracle) nenaznačíte, že váš SQL je hlúpy, čo je jednoducho hlúpe – ak dokážete ísť do tohto úsilia, môžete robiť správne plány a viaže.

História

MOVEit bol vydaný v roku 2002 spoločnosťou Standard Networks.[13] V roku 2006 spoločnosť uvoľnila integráciu medzi MOVEit a antivirusový softvér zastaviť prenos infikovaných súborov.[14]

Ipswitch získal MOVEit v roku 2008, keď spoločnosť kúpila Standard Networks.[15] MOVEit Cloud bol ohlásený v roku 2012 ako a založené na cloudeprenos súboru softvér na správu.[16] MOVEit Cloud bol prvý cloud spravovaný softvér na prenos súborov podnikovej triedy. Je škálovateľný a môže zdieľať súbory medzi systémami, skupinami alebo osobami.[17]

V roku 2013 boli klienti MOVEit uvoľnení pre iOS a Android platformy. Vydanie obsahovalo sprievodcu konfiguráciou, ako aj e-mail šifrovanie.[1][18]

Ipswitch Analytics bol vydaný v roku 2015 na monitorovanie a vykazovanie údajov prostredníctvom softvéru MOVEit. Analytické údaje zahŕňajú monitor aktivity a automatické vytváranie správ. Ipswitch Analytics má prístup k údajom zo serverov na prenos súborov a automatizáciu MOVEit.[19][20] V tom istom roku bol vydaný Ipswitch Failover. Softvér sa môže vrátiť ciele bodov obnovy (RPO) v sekundách s cieľom doby zotavenia (RTO) menej ako minúta, čo zvyšuje dostupnosť MOVEit.[21]

Nie je to len webdevs. Pracoval som na programoch Java, ktoré používali StringBuffer/Builder, a programoch C, ktoré snprintf'd do polia s pevnou veľkosťou pre 95 % dopytov – s jedným alebo dvomi parametrizovanými dopytmi, ktoré rovnakých vývojárov. Niektorí ľudia sa zdajú byť mŕtvi pri vytváraní dopytov SQL striktne komplikovanejších, ako je potrebné.

Zahŕňať odkazy XKCD, ktoré sa teraz objavujú v komentároch, tým, že ich zahrniete do článku?

Problém začal, ako hovoríte, s PHP, ktoré aspoň spočiatku robilo všetky SQL príkazy inline a dynamicky. Vôbec som nedržal krok s PHP, predpokladám, že už dávno umožnili robiť veci správne.

Dokonca aj v MySQL boli hostiteľské premenné vecou prakticky od prvej verzie (ktorú som používal). Ak sa použijú hostiteľské premenné, SQL injekcie vôbec nehrozí. Problém začal, ako hovoríte, s PHP, ktoré aspoň spočiatku robilo všetky SQL príkazy inline a dynamicky. Vôbec som nedržal krok s PHP, predpokladám, že už dávno umožnili robiť veci správne.

Toto nie je chyba, ako niektorí hovoria, samotného SQL. Použil som databázy, ktoré vznikli v 70-tych rokoch minulého storočia, a vždy si vymieňali údaje s aplikáciami v hostiteľovi premenné alebo aspoň vyhradené dátové vyrovnávacie pamäte s pevnou veľkosťou (napríklad IMS, aj keď to nie je relačné). A niektoré DBMS, ako napríklad teraz starodávna DB2, majú samostatné povolenia, aby vôbec povolili akúkoľvek formu dynamického SQL (okrem cez pomocné programy ako DSNTEP2 a DSNTIAUL, aj keď som ich videl zneužiť vlastným spôsobom), čo by na vás DBA urobil šialeným pohybom, ak by ste sa o to pokúsili žiadosť.

Udivuje ma, že weboví vývojári dodnes nerozumejú osvedčeným postupom v tejto oblasti a používajú konštrukcie, ktoré vyžadujú viac zdrojov (z určovania cesty za behu), sú menej robustné a niektoré databázy znemožňujú optimalizáciu dopytov, pokiaľ (ako napríklad oracle) nenaznačíte, že váš SQL je hlúpy, čo je jednoducho hlúpe – ak dokážete ísť do tohto úsilia, môžete robiť správne plány a viaže.

A bude to len horšie, pretože stále viac kódu sa abstrahuje do (zle napísaných, ale populárnych) rámcov, ktoré neustále robia veci hlúpo a nemáte ani potuchy, že sa to deje, kým niekto nespustí fuzzer na jednej z vašich stránok a nezistí, ako blízko je všetko rozbiť.

... očividne sme už zaplátaní...

Schneider Electric ani Siemens Electric nie sú energetické spoločnosti. Obaja vyrábajú zariadenia používané energetickými spoločnosťami, ale to je len časť ich podnikania.

Podľa mojich skúseností nástroje tohto typu spadajú do jednej z dvoch kategórií: (1) Prepracované produkty, ktoré majú veľa testovania, spoľahlivosti a sú drahé, ťažko implementovateľné a škaredé použitie alebo (2) produkty, ktoré sa časom vytvárajú okolo jadra, ktoré je staré desaťročia, netestovateľné a pôvodne bol sotva prototypom použiteľným pre demo, ale vyzerajú skvele a jednoducho sa nakonfigurovať.

Inovácia produktu, ktorý patrí do kategórie 2, je časovo náročná a nákladná záležitosť, čo znamená, že k nej dochádza len vtedy, ak je spoločnosť donútená.

Schneider o sebe rád hovorí ako o „energetickej spoločnosti“, hoci nevyrábajú, nedistribuujú ani nepredávajú významné množstvá energie. (Najbližšie sú pravdepodobne ich UPS, APC).

Zahŕňať odkazy XKCD, ktoré sa teraz objavujú v komentároch, tým, že ich zahrniete do článku?

Vyrábajú tiež meniče, distribučné transformátory a mnohé ďalšie. Neprevádzkujú však žiadne zariadenia na výrobu alebo distribúciu energie, ich biznisom je výroba produktov, ktoré pomáhajú iným riadiť výrobu a spotrebu energie. (Aj keď ide o taký masívny konglomerát, nie je možné povedať, že nevlastnia žiadnu časť žiadnej energetickej spoločnosti niekde na svete.)

Kedysi som pracoval pre jednu z nespočetných spoločností, ktoré Schneider zhltol, ale naše podnikanie nemalo nič spoločné s energiou.

Dokonca aj v MySQL boli hostiteľské premenné vecou prakticky od prvej verzie (ktorú som používal). Ak sa použijú hostiteľské premenné, SQL injekcie vôbec nehrozí. Problém začal, ako hovoríte, s PHP, ktoré aspoň spočiatku robilo všetky SQL príkazy inline a dynamicky. Vôbec som nedržal krok s PHP, predpokladám, že už dávno umožnili robiť veci správne.

Toto nie je chyba, ako niektorí hovoria, samotného SQL. Použil som databázy, ktoré vznikli v 70-tych rokoch minulého storočia, a vždy si vymieňali údaje s aplikáciami v hostiteľovi premenné alebo aspoň vyhradené dátové vyrovnávacie pamäte s pevnou veľkosťou (napríklad IMS, aj keď to nie je relačné). A niektoré DBMS, ako napríklad teraz starodávna DB2, majú samostatné povolenia, aby vôbec povolili akúkoľvek formu dynamického SQL (okrem cez pomocné programy ako DSNTEP2 a DSNTIAUL, aj keď som ich videl zneužiť vlastným spôsobom), čo by na vás DBA urobil šialeným pohybom, ak by ste sa o to pokúsili žiadosť.

Udivuje ma, že weboví vývojári dodnes nerozumejú osvedčeným postupom v tejto oblasti a používajú konštrukcie, ktoré vyžadujú viac zdrojov (z určovania cesty za behu), sú menej robustné a niektoré databázy znemožňujú optimalizáciu dopytov, pokiaľ (ako napríklad oracle) nenaznačíte, že váš SQL je hlúpy, čo je jednoducho hlúpe – ak dokážete ísť do tohto úsilia, môžete robiť správne plány a viaže.

A bude to len horšie, pretože stále viac kódu sa abstrahuje do (zle napísaných, ale populárnych) rámcov, ktoré neustále robia veci hlúpo a nemáte ani potuchy, že sa to deje, kým niekto nespustí fuzzer na jednej z vašich stránok a nezistí, ako blízko je všetko rozbiť.

Pôvodné rozhranie MySQL v PHP/FI 2.0 a PHP 3->4.0 neumožňovalo pripravené príkazy. Existovali funkcie na správne ukončenie reťazcov, ale túto prácu ste museli urobiť sami (existovala možnosť „magické úvodzovky“, ktorá ako-tak-takmer-automaticky to urobil, ale bol zastaraný a odstránený, pretože nestačil a vytvoril sa pre zlý kód s hrozným predpoklady)

PHP 5 pridalo nový modul MySQLi (vylepšené MySQL), ktorý podporuje pripravené príkazy, PHP 5.5 zastaralo starý modul a od PHP 7 je starý modul MySQL preč.

Mám na to dva názory. Na jednej strane, áno, vývojári musia byť absolútne lepšie vzdelaní v tom, že dopyty, s ktorými pracujú, sú nie dáta – je to kód a tak s ním treba aj zaobchádzať. Keď pristúpite k SQL z tohto spôsobu myslenia, je úplne zrejmé, aké šialené by bolo začleniť do týchto dopytov neupravené vstupy používateľov.

Na druhej strane, používanie (dobrých) rámcov môže pomôcť vývojárom vyhnúť sa bežným nástrahám. Niečo ako rolovanie vlastnej aritmetickej logiky dátumu alebo kryptomeny - použite osvedčené, obľúbené riešenia. Ak zistíte, že aktívne bojujete proti tomu, čo od vás vyžaduje knižnica/rámec, prehodnoťte, čo robíte, pretože v najlepšom prípade je to neefektívne a v horšom prípade aktívne škodlivé.

A pre kontext PHP5 bolo dlho v zuboch (hoci sa bežne používalo) pred viac ako 10 rokmi. Neexistuje žiadne ospravedlnenie.

...študent, ktorého celé meno je „Robert“); DROP TABLE Študenti;--?“ (bez úvodzoviek).

Mám na to dva názory. Na jednej strane, áno, vývojári musia byť absolútne lepšie vzdelaní v tom, že dopyty, s ktorými pracujú, sú nie dáta – je to kód a tak s ním treba aj zaobchádzať. Keď pristúpite k SQL z tohto spôsobu myslenia, je úplne zrejmé, aké šialené by bolo začleniť do týchto dopytov neupravené vstupy používateľov.

Na druhej strane, používanie (dobrých) rámcov môže pomôcť vývojárom vyhnúť sa bežným nástrahám. Niečo ako rolovanie vlastnej aritmetickej logiky dátumu alebo kryptomeny - použite osvedčené, obľúbené riešenia. Ak zistíte, že aktívne bojujete proti tomu, čo od vás vyžaduje knižnica/rámec, prehodnoťte, čo robíte, pretože v najlepšom prípade je to neefektívne a v horšom prípade aktívne škodlivé.

Nazvime to SanitaryString. Namiesto bezpečného ukladania reťazca do pamäte, ako to robí SecureString, by to pomohlo presadzovať sanitárne postupy reťazcov tým, že povoľuje priradenia iba z reťazcových konštánt a iných SanitaryStringov.

Najnovší blogový príspevok

Vlákno trvalého súkromného občana Trumpovho škandálu (hlavné a vedľajšie).
October 15, 2023

Ale kto platí za právnika? Teoreticky. Posledným etickým prezidentom GOP bol Eisenhover, ak sa ma pýtate. Nespomínam si, že by som mal veľa prob...

Vlákno trvalého súkromného občana Trumpovho škandálu (hlavné a vedľajšie).
October 15, 2023

Ale kto platí za právnika? Teoreticky. Posledným etickým prezidentom GOP bol Eisenhover, ak sa ma pýtate. Nespomínam si, že by som mal veľa prob...

Mali by sa Američania podriadiť všadeprítomnému dohľadu?
October 15, 2023

Ale všadeprítomné video je len jeden útok na súkromie. Myslím si, že ešte viac firewallov na ochranu osobných údajov musí byť zakotvených v zákone...