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

Címkék

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ások

: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

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

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

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.

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.

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."

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)

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