A Microsoft által rosszul módosított nyílt forrású kód okozhatta a Windows Defender legújabb sérülékenységét

 ( trey | 2018. április 5., csütörtök - 8:01 )

Apparently, Microsoft forked that version of unrar and incorporated the component into its operating system's antivirus engine. That forked code was then modified so that all signed integer variables were converted to unsigned variables, causing knock-on problems with mathematical comparisons. This in turn left the software vulnerable to memory corruption errors, which can crash the antivirus package or allow malicious code to potentially execute.

In other words, Redmond pulled a fork-and-bork.

Előzmények itt. Részletek itt.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

:D Ezt úgy hívják, hogy indiai C&P development :D Akkor az MS termékek lehet hogy tele vannak pasztázva a github kódjaival :D

Lehet? :D XD :P

---
http://plazmauniverzum.hu <> A látható anyag 99.999%-a plazma <>

Na, felvették Kurt Roeckx-t a Microsofthoz?

Came here to say that, de hál' Istennek nem.

https://i.imgur.com/NoJQafu.png

Lennart Poetteringre is rakeresnel? Erdekelne, hogy rajta van-e hivatalosan is a MS fizetesi listajan, vagy titokban fizetik (esetleg mas ceg), vagy meggyozodesbol csinalja a hulyesegeit.

--
Any A.I. smart enough to pass a Turing test is smart enough to know to fail it. -Ian McDonald

Erre nincs valami polici, hogy milyen forrásból milyen kódot lehet átvenni, és azt hogy kell kezelni?
Az se elegáns, mikor én gyorsan csinálok valamit és kiguglizok egy kódrészt, befogadva a saját eszközömbe, amit nem kereskedelmileg árulok, csak a munkahelyemen használnak, de hogy egy nagy szoftver cég is ezt csinálja, kicsit érdekes.
OK tudom, sokan alapoznak szabad szoftveres alapokra, de a Microsoftnak elvileg lennének saját rendszerei/eszközei bőségesen.
Megjelölte a fejlesztő a kódban a forrást legalább, vagy nyomoztak a kód után, hogy honnan is származik?

Ha jól értem, egy open source unrar kódot használtak. (Talán pont ezt. Ennek a licensze kifejezetten engedi az ilyen felhasználást.)
Abból, hogy át is írták, arra következtetek, hogy még volt valami audit is, nem csak copy-paste.

Elképzelhető tehát, hogy minden úgy történt ahogy az kell, csak a konkrét programozók szintjén ment valami nagyon félre.

Én egyébként nem hiszem, hogy azzal beljebb lennénk, ha saját unrar implementációt fejlesztettek volna...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Mi értelme az open source kódnak, ha semmi értelmes helyen nem lehet használni? Licenc engedi? Akkor miért is ne használja bárki, ahol lehet?

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Azért a Microsoftból többet néztem volna ki (még ha itt nem is néznek ki belőlük sokat), pláne egy ilyen kritikus program fejlesztésénél. Fogták, kicsit belenyúltak "biztosjóleszígykotrapali" módon és "hadforduljon". Ahelyett, hogy vagy fogtak volna egy saját bevált kódot, vagy írtak volna egy új modult, amiről tudják (vagy legalább sejtik), hogy mit is fog csinálni.

Miért írna bárki is meg olyat, ami kész van és használható?

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Akkor miért nyúlnak hozzá, ha kész van és használható?

Nem tudom, nem voltam ott se az írásnál se a code review résznél. A "vagy írtak volna egy új modult"-ra akartam reagálni.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Miből tudja biztosan, hogy tényleg használható? Az, hogy pl 7zipben jól működött eddig a kód (vagy pl 7z-t a kutya nem akart meghekkelni eddig) és nem került olyan környezetbe, ahol gondot okozott, még ez a külsős kód okozhat galibát egy kritikusabb környezetben, mint pl egy vírusirtó. Azt hittem van valami szabályzat fejlesztésre/tesztelésre, idegen kódok kizárására, de tévedtem.

Van szabályzat, emlékeim szerint elég szigorú, de mégsem csak annyi van a policy-ben, hogy “Tilos.”

Ismételten megkérdem: Mi értelme az open source kódnak, ha nem lehet használni?

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Mert a használatát nyomon kell követni és javításokat portolni amit elulasztanak az indiánok általában. Televágnak zárt kódokat hibákat tartalmazó nyílt kódokal :(

"Televágnak zárt kódokat hibákat tartalmazó nyílt kódokal :("

Hát ez így elég szarul hangzik ennél a cikknél, ahol arról van szó, hogy televágtak zárt kódot olyan nyílt kóddal, amit előbb televágtak hibákkal.

--
trey @ gépház

...de a zárt kód írói rakták bele a bogarat.

Így van.

--
trey @ gépház

Akkor nem értem, emberek miért mutogatnak az opensauce projektre.

Nem tudom, hogy kikre gondolsz, de ha rám, akkor nagyon félreértettél itt valamit.

--
trey @ gépház

ha jól vettem le, a kóddal nincs baj, a baj azzal van, hogy belenyúltak. tehát az open source kód, köszöni, rendben van.

amúgy meg, az egészbe ilyen szinten belefonni, hogy open source, elég bugyuta dolog volt. ha letöltök egy atom stabil open source programot, beleírok, szétverem, majd leírom, hogy milyen szar az open source, mert hibázik, az rendben van?


"I'd rather be hated for who I am, than loved for who I am not."

Ok, de az alapfelállás onnan indult röviden, hogy irgum-burgum, kereskedelmi szoftverben open source kód, hogy képzeli az MS, miért nem ír sajátot.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

ah, értem, ez hülyeség, miért ne használhatna.


"I'd rather be hated for who I am, than loved for who I am not."

Ha BSD/public domain/egyeb, megengedo licenc, akkor miert ne?
Ha GPL, es nem adtak ki a relevans, modositott forrast, akkor irgumburgum.

Szemely szerint en orulok neki, ha nyilt forrast hasznal. Visszajuthat valami az eredeti projectbe (bugfixek es a kodkovetes miatt celszeru), illetve a MS regen hirhedt volt arrol, hogy semmivel sem kompatibilis, igy legalabb van ra esely.

--
Any A.I. smart enough to pass a Turing test is smart enough to know to fail it. -Ian McDonald

GPL-t is csak akkor kell kiadnod, ha terjeszted (Windows Defender esetén persze fenn áll ez az eset), viszont akkor mindent. Nagyjából emiatt ódzkodik az ipar a GPL-től, mert olyan, mint a rák, mindenhova odaterjed. Elég, ha egy sort másolsz át GPL-es kódból, onnan kezdve mindent GPL alatt kellene terjesztened.

Viszont ez a lib nem volt GPL-es. (Meg egyébként se szoktak libeket GPL alá rakni, pont emiatt).

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Igen, a GPL-t csak akkor kell kiadnod, ha terjeszted. De otthon amugy is sokkal bovebb lehetosegeid vannak. Amugy az elozo munkahelyemen volt olyan belso hasznalatu tool, aminek egy reszet GPL-es projectbol masoltam, mert megtetszett a kezelofelulete (manager rabolintott), es a review-n is figyelmeztettek a kollegaim, hogy tudom-e, h GPL, es mik a korlatai. Szoval - legalabbis ilyen kis minta alapjan a szakmabeliek - ismerik a dolgot. (Egyik ugyfeltol kaptunk egy kezirasfelismero libet, ami tudott szamokat, latin betuket, kinai karaktereket, meg meg valamit. Ezt akarta egy kinai kollega tesztelni mielott beepitjuk, hogy egyaltalan van-e ertelme. Talaltam egy GPL-es kezirasfelismeros appot, aminek a UI-a eleg baratsagos volt, ebbol dobtam ki az o engine-uket, es tettem bele a licenceltet.)

Egyebkent azt a programot kell kiadnod, ha ez egy kulon, sandboxban futo program, akkor eleg lenne ezt. Marpedig mar eleve abban kellett volna futtatni - ez mara elegge vilagossa valt.

--
Any A.I. smart enough to pass a Turing test is smart enough to know to fail it. -Ian McDonald

Nem az open source kód felhasználásával van baj, még csak a módosításával (ha jól csinálják...) sincs baj. Szvsz. _itt_ az igazi gond, hogy simán fogtak egy standard könyvtárat és betették formátum supportnak egy víruskeresőbe - ami marha veszélyes.

A víruskereső fájlformátum kezelőjének fel kell készülnie hibás, a formátumot nem tartó fájlok kezelésére is - egyszerűen azért, mert adsz vele egy távolról kihasználható, feleslegesen nagy támadási felületet (btw, a sandboxolásos ötlet sem lenne rossz...).

A példánál maradva: nem tudom, hogy az itt használt kód mit kezd egy Zip bomb (kis méretű tömörített fájlt kibontva tetszőlegesen nagy fájlt kapsz) szerű dologgal. És nincs is abból a szokásosnál nagyob gond, ha egy ilyenre nincs felkészítve a kód, amíg annak az exploitolásához explicit user interakció kell és max. a user azonosítójával fut. Ha ugyanezt automatizáltan ki lehet használni (küldök egy e-mailt, elérek egy fájlszervert stb.) és SYSTEM-ként fut, az már baj. (http://joxeankoret.com/download/breaking_av_software_44con.pdf)

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)

"but changed all the signed ints to unsigned for some reason"

Engem ez a "some reason" érdekelne. Mi lehetett az "ok"?

--
trey @ gépház

Az engem is, de valószínűleg soha nem tudjuk meg, ha csak az elkövetkező nem nyilatkozik róla.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Engem az erdekelne, hogy signed -> unsigned miert tudja eltorni a kodot (nyilvan ha a negativ szamok nincsenek hasznalva)?

Forditva jogos lenne, hiszen szukited az ertekkeszletet, de igy kicsit fura. Vagy _itt_ megvaltoztattak, _ott_ meg nem, aztan amiatt lehetett a gond?

Ha van egy ilyened:
if(a>=0)
akkor az signed eseten egy ellenorzes (pl. el fog-e meg ferni valami adatod egy pufferben), unsigned eseten meg mindig teljesul. Ez siman viheti olyan agra a programodat, ahova nem kene.
(persze az a<0 ugyanigy baj)

A masik: ha egy kifejezes kiertekelesekor van valahol unsigned tipusu ertek, akkor mar unsigned-al szamolja a tovabbiakat (ahogy pl. 16 bitesbol 32 bites lesz szamolaskor). Szoval ha nem mindent irtak at unsigned-ra, az is okozhat egy bonyolultabb helyen galibat.

Par alacsonyszintu fuggvenynel/kernel hivasnal a negativ ertek hibat jelezhet. Ha ezt ideiglenesen bepakolod egy unsigned valtozoba, nem fogod eszrevenni ezt az amugy jelentett hibat.
Pl.: man 2 open
int open(const char *pathname, int flags);
RETURN VALUE
open(), openat(), and creat() return the new file descriptor, or -1 if an error occurred (in which case, errno is set appropriately).

int fd;
if((fd=open(...))==-1)
{
hibakezeles..
}
else
{
hasznalod_a_filet;
}

Ha itt atirod az fd-t unsigned-ra, nem letezo file-t probalsz hasznalni.

--
Any A.I. smart enough to pass a Turing test is smart enough to know to fail it. -Ian McDonald

Meg ugye még ott van, hogy -1 < 0, de -1 > 0U.
Ha pl a nullát tartalmazó változó eddig signed volt, most meg unsigned lett, akkor ilyen simán előfordulhat a kódban.

Microsoft didn't want all that negativity at their workplace.

( redditről https://www.reddit.com/r/programming/comments/89y1x6/they_forked_this_one_up_microsoft_modifies/ )

Tapasztalat alapján többnyire a compiler warningok ész nélküli irtása során szokott ilyen történni.

+1 Szinte biztos ezert csinaltak. Nekem is volt ilyen tapasztalatom. Elkezdtek gyomlalni beagyazott rendszer kodjaban, mondom ti ezt komolyan gondoljatok? Es komolyan gondoltak..

Idézet:
A stack buffer overflow in Avast! because strncpy() was replaced with strcpy() in some open source code. https://code.google.com/p/google-security-research/issues/detail?id=575 … ¯\_(ツ)_/¯

--
trey @ gépház