Tavis Ormandy - "Portoltam a Windows Defender-t Linuxra"

Címkék

Tavis Ormandy, a Google alkalmazásában álló ismert biztonsági szakember nem kisebb fába vágta fejszéjét, mint a Windows Dynamic Link Libraries (Windows DLL-ek) portolása Linuxra. A kezdeti kódbázis elérhető a GitHub-on. Az elméletet igazolandó portolta a Windows Defender-t Linuxra:

Tavis Ormandy írta:

This repository contains a library that allows native Linux programs to load and call functions from a Windows DLL.

As a demonstration, I've ported Windows Defender to Linux.

Hozzászólások

<troll>LoL Linux kell ahhoz, hogy windows komponenseket teszteljenek, most már értem, hogy miért dolgozik a MS a WSL-en gőzerővel... :D </troll>
--
:wq

DLL betoltest linuxon a wine utan az mplayer is csinslt kozel 20 eve. Mi az ujdonsag?

Az, hogy MIERT csinalta ezt a libet, le is irja, hogy konkretan fuzzing-ra hasznalja (ez egyfajta automatizalt vaktesztelesi modszer), nem user felhasznalasra keszult, hanem arra, hogy individualis libeket lehessen egyszeruen es hatekonyan security tesztelni Windows helyett Linuxon.

Csak sajnos a hirt elolvasok nagy szazaleka ott leragad, hogy nem tudja ertelmezni ezt, meg persze ott a clickbait, hogy Windows Defender - tokmindegy, nem ez a lenyeg.

Szo sincs arrol, hogy ez valamifele wine-szeruseg lenne.

Nem biztos, hogy megértettem a leírást, mert ott user space -> kernel átmenetet is ír. De sebaj.

Viszont én a leíráshoz hasonló dolgot figyeltem meg több taszk futtatása esetén. Ha gyakori a taszkváltás, sok semaphore és event van, akkor a Windows baromira belassul. Egy bizonyos teszt 4-10-szer gyorsabban ment Linux-on, mint Windows-on.

Na akkor mérjünk:


PS C:\> function Benchmark($Count, $Expression) {
    1..$Count |
    ForEach-Object {Measure-Command -Expression $Expression} |
    Measure-Object -Property TotalMilliseconds -Average -Sum -Maximum -Minimum
}

PS C:\> Benchmark 100 {Get-WmiObject -Class CIM_Process}

Count    : 100
Average  : 72,739809
Sum      : 7273,9809
Maximum  : 92,0155
Minimum  : 69,8858
Property : TotalMilliseconds

PS C:\> Benchmark 100 {Get-WmiObject -Class CIM_Process -Filter "Name = 'powershell.exe'"}

Count    : 100
Average  : 65,571801
Sum      : 6557,1801
Maximum  : 69,5814
Minimum  : 62,2024
Property : TotalMilliseconds

PS C:\> Benchmark 100 {Get-WmiObject -Class CIM_Process | Where-Object {$_.Name -eq "powershell.exe"}}

Count    : 100
Average  : 112,736381
Sum      : 11273,6381
Maximum  : 153,2535
Minimum  : 103,8209
Property : TotalMilliseconds

PS C:\> Benchmark 100 {Get-WmiObject -Class CIM_Process | Select-Object -First 1}

Count    : 100
Average  : 31,265305
Sum      : 3126,5305
Maximum  : 38,056
Minimum  : 24,4049
Property : TotalMilliseconds

Az látszik, hogy valamivel gyorsabb, ha már a lekérdezésben szűröm a listát, viszont jelentősen lassabb, ha a kapott listát szűröm, utólag. A kérdés az, hogy a lassulást a pipe okozza-e. A választ az utolsó lekérdezés adja meg, ami egyszerűen kiválasztja az első elemet. Ez nem csak a Where-Object-es szűrésnél gyorsabb, de még a lekérdezésben szűrő kérésnél is. Ez azt bizonyítja, hogy nemhogy nem várja be a pipe az utolsó elemet, az akár meg is szakítható, ha újabb elemek feldolgozására már nincs szükség.

ffmpeg-gel dekódolt nyers videoképkockákat pájpoltam. Eof egyáltalán nem jön. Szerintem flush-t a küldő oldal tol. Egyébként én is valami bufferelési gondra gyanakszom, ha a bufferméret pont egy frame-nyi lenne, nem sokkal kisebb, akkor tuti sokkal jobb lenne. De még nem volt időm rendesen ránézni.