Ovatko ne ajureita vai windows servicejä? Esim. joku joka avaa etäyhteyden käyttäjän tietämättä koneeseen
Mitä nämä haittaohjelmat ovat?
Anonyymi
31545
0Äänestä
Muut lukivat myös
Ketjusta on poistettu 1 sääntöjenvastainen viesti.
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 3
Vanhimmat
Haittaohjelmat ovat ihan tavallista ohjelmakoodia.
Veikkaanpa,+että+suuri+osa+tänne+kirjoittelevista+ei+ymmärrä,+miten+haittaohjelmat+(siis+toisen+ohjelman+omaan+käyttöönsä+"kaappaavat"+ohjelmat)+toimivat+!
32-+bittisen+x86+-ympäristön+osalta,+valaistaanpa+asiaa+hiukan:
Valitettavasti+on+kirjoitettu+ja+edelleen+kirjoitetaan+paljon+ohjelmakoodia+C:llä+ja/tai+C++:lla.
Nämä+ohjelmointikielet+todellisuudessa+kuuluisivat+tekniikan+museoon,+eivät+käyttöön+!
C:llä+ja/tai+C++:lla+koodatuista+ohjelmista+löytyy+varsin+yleisesti+puskurin+ylivuotohaavoittuvuuksia+(koska+kielen+rakenne+ei+mitenkään+tue+haavoittuvuuksien+ennalta+estämistä).
int+vulnerable_subroutine(char+*+Name)+{++++//+Varoitusesimerkki+siitä,+miten+EI+pidä+koodata
char+CopyOfName[200];
+++strcopy(CopyOfName,+Name);
+++printf("Nimi+on+%s\n",+CopyOfName);
+++return+0;
}
Ylläolevassa+ohjelmakoodissa++täysin+vastuuttomasti+kopioidaan+parametrissa+Name+syötetty+merkkijono+muuttujan+CopyOfName+arvoksi,+ja+sitten+kirjoitetaan+konsoliin+(tai+sinne,+minne+stdout+on+uudelleenohjattu)+em.+nimi/merkkijono.
Max.+199+merkkiin+saakka+tämä+toimii+ilman+mitään+ongelmia.
Mutta+kun+annat+parametrin+Name+arvoksi+merkkijonon,+jonka+pituus+ylittää+199+merkkiä,+tapahtuu+jotain+mielenkiintoista:
Osa+syötetystä+merkkijonosta+ylikirjoittaa+pinomuistissa+olevan+funktion+paluuosoitteen,
minkä+jälkeen+funktio+"palaa"+paikkaan,+josta+sitä+ei+koskaan+kutsuttu+!
32-bit+sovelluksissa+em.+ylivuotohaavoittuvuus+mahdollistaa+sen,+että+hyökkääjä+voi+kontrolloida+sitä,+mihin+funktio+lopulta++"palaa".
64-bit+sovelluksissa+tilanne+olisi+muuten+aivan+sama,+mutta+yhdellä+varsin+olennaisella+erolla:
64-bit+x86+CPU:t+vaativat+muistiosoitteiden+olevan+jotain+sellaista,+joita+kutsutaan+englanniksi+termillä+"canonical+address".
Tuo+termi+tarkoittaa+sitä,+että+64-bit+CPU+voi+muistiosoitteiden+osalta+ollakin+esim.+40,+44,+48,+52+tai+vaikkapa+56+-bittinen+(riippuen+prosessorin+tarkasta+tyypistä)+!
Ja+tuon+lisäksi:
esim.+48+-bittinen+muistiosoite+(jossa+bitit+on+numeroitu+LSB+=+bit+0,+ja+MSB+=+bit+47),
tallennetaan+64+-bittiseen+osoittimeen+siten,+että+bitti+47+(siis+osoitteen+todellinen+MSB)+on+kopioitava+jokaiseen+bittiin+väliltä+48..63.
Eli+jos+bitti+bit47+=+0,+niin+kaikkien+bittien+48..63+on+myös+oltava+0,
ja+vastaavasti:
jos+bitti+bit47+=+1,+niin+kaikkien+bittien+48..63+on+myös+oltava+1.
em.+säännön+rikkominen+aiheuttaa+välittömästi+poikkeuksen,+jolloin+suoritus+siirtyy+poikkeuskäsittelijään+!
koska+C+-kieli+käyttää+merkkijonotyyppiä+"null+-terminated+string",+niin+hyökkääjä+ei+voi+sisällyttää+binäärisiä+nollia+(++=+chr(0)+++)+merkkijonoon,+koska+se+terminoisi+strcpy:n+tekemän+kopioinnin+ensimmäiseen+merkkiin,+jonka+tavu-arvo+=+0!
Eli+hyökkääjä+ei+(64-bit+ohjelmassa)+kykene+syöttämään+sellaista+muistiosoitetta,+jossa+bit47+(48-bitin+muistiosoitetta+käyttävässä+CPU:ssa)+=+0+!
Entä+tilanne,+jossa+bit47=1+?
Sellaisen+osoitteen+voisi+käytännössä+syöttää,+jos+jokainen+seuraava+merkki+olisi+chr(255)+eli+binääriarvoltaan+0xFF+!
MUTTA:
Ainakin+Win64+-ympäristössä+(Linuxista+en+tiedä,+joku+64-bit+linuxeja+paremmin+tunteva+kertokoon)+ylin+bitti+63+=+0,+kun+kyse+on+ns.+userland+-koodista+(eli+normaali+EXE+tai+DLL.
Ja+tuo+"canonical+address"+vaatimus+tarkoittaa,+että+jos+bitti+63=0,+niin+kaikki+bitit+bit47+..+bit62+ovat+myös+=+0+!
(em.+pätee,+kun+CPU:n+muistiosoitus+on+48+-bittinen.+Jos+se+olisi+vaikkapa+52+-bittinen,+niin+periaate+olisi+aivan+sama,+mutta+tällöin,+jos+bit+63+=+0,+niin+kaikki+bitit+bit51+..+bit62+pitäisi+myös+olla+=+0+).
Entä,+jos+ylin+bitti+63+=+1+?
No+(edelleen+48-bit+muistiosoitettu+CPU)+silloin+kaikki+bitit+bit47+..+bit62+pitää+myös+olla+=+1.
Teoriassa+siis+mahdollista,+mutta+käyttöjärjestelmä+varaa+sellaiset+osoitteet,+joissa+bit63+=+1,+niin+systeemikoodiin+(laiteajurit,+windows+kernel+jne.)
Jos+userland+-koodista+(jota+EXE+ja+DLL+-tiedostojen+sisältämä+koodi+edustaa)+yritetään+palata
RET+-käskyllä+systeemikoodille+varattuun+muistialueeseen,+niin+eikös+tuo+johda+myös+poikkeukseen+?+(Sovellusohjelma+tai+kirjasto+yritti+suorittaa+laittoman+toiminnon)+?
Tarkoittaako+tämä+siis+sitä,+että+puskurin+ylivuotohaavoittuvuuksia+ei+64+-bit+koodissa+voi+olla+?
Vai+onko+tähän+joku+ns.+porsaanreikä+olemassa,+ja+jos,+niin+mikä+?
Käytä pelkåästään fyysisiä osoitteita aina älä ikinä sivutettua muistia, suoria pointereita video muistiinkin DMA;n siirrät jos tarttee, ei mitään virtuaalimuisteja.
Sivutus pois käytöstä kokonaan.. ja I/O osoitteiden virtualisointi, sekin kokonaan pois päältä, pelkästään fyysisiä osoitteita kaikkki, ian kaikkisesti aaamen.