Tweets by @buherablog
profile for buherator at IT Security Stack Exchange, Q&A for IT security professionals

A BitBetyár Blog

Túljártál a nagyokosok eszén? Küldd be a mutatványodat! (e-mail a buherator gmailkomra jöhet)

Full-Disclosure / Névjegy / Coming out


Promó

H.A.C.K.

Címkék

0day (110) adobe (87) adobe reader (21) anonymous (26) apple (60) az olvasó ír (49) blackhat (20) botnet (22) bug (200) buherablog (44) buhera sörözés (39) bukta (49) deface (38) dns (22) dos (29) esemény (82) facebook (26) firefox (64) flash (33) gondolat (31) google (59) google chrome (36) hacktivity (37) hírek (117) incidens (224) internet explorer (88) iphone (35) java (50) jog (22) kína (21) kriptográfia (68) kultúra (21) linux (24) malware (43) microsoft (142) móka (48) mozilla (23) office (26) oracle (40) os x (43) patch (197) php (20) politika (31) privacy (58) programozás (22) safari (34) sql injection (62) windows (85) xss (77) Címkefelhő

Licensz

Creative Commons Licenc

A DuQu Keretrendszer rejtélye

2012.03.11. 21:14 | buherator | 9 komment

A Kaspersky blogján jelent meg egy érdekes bejegyzés, melyben az AV szakértők a nyilvánosság segítségét kérik a DuQu egy kódrészletének elemzéséhez. A kérdéses programrész a C&C kommunikációt és az új funkciók betöltését valósítja meg, de egyelőre nem világos, hogy a bináris kód milyen nyelvből és milyen fordítóval készült.

A kód legfontosabb tulajdonságai, hogy teljesen objektum-orientált, az objektumok függvénypointereit tartalmazó tábla az osztálypéldányokban tárolódik, és futásidőben változtatható, a beépített és a felhasználó által kreált objektumok között nem lehet különbséget tenni, a Windows API közvetlenül kerül felhasználásra, a futás pedig alapvetően eseményvezérelt. .Net-es segítségnek vagy JIT kódnak nincs nyoma.

A fentiek alapján elsőre felmerülő nyelveket a szakértők  - akik azt sem tartják lehetetlennek, hogy egy teljesen új nyelv készült a trójaihoz - kizárták, a közösség pedig már egészen vad teóriákkal állt elő az ősrégi IBM fordítók által generált kommunikációs stackektől a különböző perverz Lisp implementációkig. 

A felfokozott hagulatot William Pitcock igyekszik letörni, aki szerint a kasperskys arcoknak simán le kéne tenniük a crackpipát, ugyanis a kérdéses programrész egyszerűen a Microsoft COM technológiájával készült. A magam részéről távol állok attól, hogy meg tudjam mondani a tutit a kérdésben, minden esetre ahogy általában, most is hajlok arra, hogy a lehető legegyszerűbb megfejtés lesz a nyerő.

Ha Pitcocknak igaza van, az elég kellemetlen a Kaspersky szakértőire nézve, de nem szabad kizárnunk azt a lehetőséget sem, hogy a biztonsági cégnél csak megpróbálják kiugrasztani a nyulat a bokorból.

Címkék: com kaspersky duqu

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

lpt1 2012.03.12. 18:30:20

Ki ez a William Pitcock?

boldii 2012.03.13. 00:58:45

Én sem akarok úgy beszélni, mintha bármit is tudnék a COM csodáiról, illetve sajnos távol állt tőlem már az elején is, hogy pusztán IDA-ból megítéljem mivel is készült a jelölt kód, de kicsit aggresszív a kommentelő.

Mégha igaza is lenne, azért felhívom a figyelmet, hogy immár kb. 5 napja kint a poszt és egyedül William szerint triviális a megoldás, nem sok konkurens cég rohant, hogy elmesélje ő mennyivel okosabb... Ez meg talán önmagában gyanúsabb, mint a fenti megjegyzés.

Ugyanakkor ettől még lehet, hogy COM, csak lehet, hogy ettől még valami trükk is van a rendszerben.

No mindenesetre FYI érdemes nézegetni az eredeti Kaspersky post kommentjeit is, pl. a COM ötletre már volt válasz:

"Re: C code with use of COM?

The are actually no 'vtables' in COM / C++ meaning. There is only a list of function pointers inside the instance, it's not even separated from the data.
Reply
"

ColT · http://kilatasgaleria.blog.hu/ 2012.03.13. 20:40:31

Ennyire nem lehetne loserek a vírus írói, hogy MS cuccot használnak :D

buherator · http://buhera.blog.hu 2012.03.13. 20:51:27

@ColT: Igen, MinGW-t kellet volna használniuk, a forráskódokat meg kirakni SourceForge-ra GPL licensz alatt!

sghctoma · http://sghctoma.extra.hu 2012.03.14. 12:56:38

@boldii:
idohiany miatt nem nagyon tudtam belefolyni ebbe a dologba, igy az eredeti post kommentjeit sem olvastam, de az a valasz, amit beideztel, nem igazan korrekt.. nem letezik olyan, hogy " 'vtables' in COM / C++ meaning".. az, hogy egy fordito hogyan valositja meg a vtable koncepciot (illetve, hogy egyaltalan megvalositja-e) sehol nincs megkotve.. igazabol azt nem ertem, hogy miert kell teljesen uj nyelvrol beszelni, mikor siman lehet, hogy csak nem valamelyik "standard" forditoval csinaltak a binarist.. ha malware-t irnek, tuti nem szopatnam magam valami egzotikus nyelvvel, viszont szopatnam a reversereket es a virusirtokat egy egzotikus compiler/linker, vagy akar csak valami MS doksik melyerol elohalaszot specko declspec hasznalataval..

boldii 2012.03.14. 17:31:28

@sghctoma: Szia,azt én sem tudom már, hogy hol jött elő a teljesen új programnyelv koncepció, nem emlékszem végül a cikkben így van-e említve, vagy csak Kaspersky twittelte így.
Egyetértek abban is, hogy lehet, hogy csak valami fura fordító volt, vagy akár csak valami extrém fordítási beállítás, ugyanakkor a kérdés ekkor is marad, hogy milyen fordító, milyen beállítás? Amit az itcafe-n írtál mintát, azt érdemes kipróbálni szerinted?

Ellenben nem hiszem, hogy direkt a reverse-t nehezítették, vagyis ez csak részben igaz. Az a fura a kódjaikban is, hogy "annyira" nem nehezítették sehol a dolgok vizsgálatát, inkább érthetetlen módon rakták össze a dolgokat. Egyik helyen így csinálják, másik helyen úgy, itt tömörítgetnek egy picit, ott meg nem, stb. Szóval inkább olyan szedettvedett a cucc, mint tudatosan a reverse ellen alakított. Ezért simán lehet, hogy ez a modulrész egy tök külön fejlesztés egy külön fejlesztőtől, vagy hasonló.

sghctoma · http://sghctoma.extra.hu 2012.03.14. 18:57:24

@boldii:
"Egyetértek abban is, hogy lehet, hogy csak valami fura fordító volt, vagy akár csak valami extrém fordítási beállítás, ugyanakkor a kérdés ekkor is marad, hogy milyen fordító, milyen beállítás?"

Velemenyem szerint ez szelmalomharc, es igazabol a fontossagat sem nagyon latom. Persze a hacker kivancsi fajta, en is szeretek utanajarni a dolgoknak, de itt annyifele kombinaciorol beszelunk (mar akkor is, ha csak a mainstream forditok beallitasi lehetosegeit nezzuk), hogy nem hiszem, hogy van ertelme ennyi eroforrast beleolni. Es en reszben erre ertettem a szopatast. Egy specko forditonal/linkernel termeszetesen sokkal kifinomultabb anti-re modszerek leteznek, de mokas lehet latni, ahogy a fel vilag napokat tolt el azzal, hogy megprobalja kitalalni, hogy mivel forgattam a cuccot.

Par dolog, ami beugrott, mikor elolvastam az eredeti postot:
Azt az event passing-es mokat nem hiszem, hogy bele kene keverni, es rogton feltetelezni, hogy az nyelvi feature. Nem egy hasonlo hazi megoldast lehet latni pl. jatekokban, C/C++-hoz.

Igazabol ket dolog fura a kodban. Az egyik az, hogy az objektumokban helyezi el az egesz vtable-t, es nem csak egy pointert pakol az objektum elejere/vegere.

A masik pedig, hogy nem egysegesen hasznalja a calling convention-oket (ezt nem is feltetlenul a fordito csinalja, erre postoltam azt a snippet-et a prohardveren), illetve a fastcall (thiscall) szeru konvencional cserelgeti a hasznalt regisztereket (na, olyen forditot nem ismerek, amiben ezt lehetne allitgatni).

"Amit az itcafe-n írtál mintát, azt érdemes kipróbálni szerinted?"
Az csak annyit demonstral, hogy a cl-nel alapertelmezett __thiscall-t le lehet cserelni. En __stdcall-ra csereltem, az eredeti blogon levo IDA screenshotokon ha jol remlik, __cdecl van.

Szerintem amit lehet csinalni, az az, hogy irni egy minimal C++ programot egy darab osztallyal, aminek van egy virtualis metodusa, es raereszteni a leheto legtobb compilert. Aztan mindegyikbol disas lista, es kozelebbrol megvizsgalni (kulonos tekintettel a thiscall szeru konvencio regiszter-hasznalatara) azokat a forditokat, amik a vtable-t ugy ahogy van, beledobjak az objektum elejere (mar ha lesz ilyen). Persze ez most feltetelezi, hogy C++-rol van szo, nyilvan ki lehet probalni hasonlot tobbfele nyelvvel is. De en tenyleg nagyon meglepodnek, ha ez nem valami mainstream nyelv lenne.

boldii 2012.03.15. 22:11:36

Hétfőn érkezik a megoldás.