( kisg | 2020. 09. 27., v – 19:10 )

Nem ellenőriztem, de tweet szerint nem konkrétan ezt használták ki az EternalBlue-ban? Vagy az csak clickbait?

Az input ellenőrzésről: sokan itt szoftverfejlesztő fejjel gondolkodnak, tehát feltételezik, hogy elég a "publikus API-ban szereplő" függvényeket mint belépési pontokat védeni, hiszen kívülről "hagyományos módon" egy privát függvényt nem lehet meghívni.

Azonban egy támadó szemszögéből bármi, ami futtatható memórialapon van potenciálisan használható kód, tehát ha pl. egy DLL-t / .so-t valaki betölt egy process címterébe, akkor onnan abból bármilyen kódot meghívhat, még a szimbólumtáblában sem kell feltétlenül szerepelnie. Ez ellen védekezni teljesen más szemléletet igényel. 

A másik, hogy egy támadónak nem szükséges, hogy a kód amit ír minden esetben működjön, elég ha már néhány %-ban sikerül, ha elég sokszor tud észrevétlenül próbálkozni.

Ugyanakkor az input (és output!) validációnak is vannak korlátai: fentebb sok vita volt pl. NULL checkről. Azt gondolom, hogy ez nem kérdés, legyen NULL check és értelmes input validáció. De legyünk tisztában azzal, hogy ez mi ellen véd, és mik a korlátai. Pl. honnan tudjuk, hogy a nem NULL érték nem szemétre mutat? Mit teszünk ha mégis? Lekezeljük-e legalább korrekt módon a SEGV signalt? Csak olyan string műveleteket használunk, ami maximum megadott lépést tesz? (pl. strnlen az strlen helyett) 

A legtöbb komolyabb szoftverben van elég kiterjedt memória validáció beépítve, de élesben ezeknek a nagy része mégis ki van kapcsolva, és nem véletlenül: ezeknek a validációknak jelentős futásidejű költsége van, ami pl. egy JS engine vagy OS kernel esetében azt jelentené, hogy az egész gép jelentősen lassabb, több energiát használ, illetve notebook esetén jóval hamarabb lemerül.

Ebből már talán látszik, hogy ez (is) egy bonyolult terület, és egyik irányból sem lehet egy félmondattal elintézni.

Ui: A grsecurity fanboyságot már úgysem mosom le magamról, de érdemes megnézni, hogy milyen fordítópluginjaik vannak, amik pont a szoftverek (illetve főleg a kernel) önvédelmét hivatottak segíteni.