Mitä nämä haittaohjelmat ovat?

Anonyymi

Ovatko ne ajureita vai windows servicejä? Esim. joku joka avaa etäyhteyden käyttäjän tietämättä koneeseen

3

1428

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Haittaohjelmat ovat ihan tavallista ohjelmakoodia.

      • Anonyymi

        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ä ?


    • Anonyymi

      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.

    Ketjusta on poistettu 1 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Metsäkoneen kuljettaja huuteli tutkijalle

      "voisit kyllä ottaa rintaliivit pois ennen kuin tulet minulle juttelemaan, hän sanoo." https://yle.fi/a/74-20106446 On
      Suomussalmi
      704
      9910
    2. Suomi on täysin sekaisin

      Jo ties monettako päivää hirveä itku ja poru jostain helvetin nilviäisistä. https://www.is.fi/taloussanomat/art-2000010
      Maailman menoa
      404
      4321
    3. Kaikki ei vieläkään usko luontokatoon.

      Suomussalmen Hukkajoella foliohattu metsäkoneen kuljettaja tuhosi tuhansia harvinaisia jokihelmisimpukoita eli raakkuja
      Kajaani
      90
      2976
    4. Sano vain suoraan, että nyt riittää

      ettei kiinnosta. Sano, että lopeta! En ihmettelisi, jos olet saanut tarpeeksesi ja toivot minun ymmärtävän lopettaa. Eh
      Ikävä
      43
      2855
    5. Mari Rantanen asettaa sairaan lapsen edun oman uransa edelle - (tekikö Marin samaa)

      Noin toimii kunnon vastuuntuntoinen äiti, mutta siitäkin nämä mt-ongelmaiset vasemmistolaiset häntä täällä haukkuvat. "
      Maailman menoa
      229
      2654
    6. Ohhoh! Ex-pääministeri Sanna Marinin Joni-rakas paljasti ilouutisen: "Tässä kuussa..."

      Sanna Marin on ollut naimisissa Markus Räikkösen kanssa. Nyt hänen seurassaan on usein julkkishiusmuotoilija Joni Willb
      Kotimaiset julkkisjuorut
      55
      2644
    7. Mitä ajattelet aina

      Kun hän tulee näköpiiriin?
      Ikävä
      153
      1835
    8. Luokatonta toimintaa

      Tyrmistyttävää toimintaa Stora Enson korjuu yrittäjältä Hukkajoella. Täyttä piittaamattomuutta laeista ja luontoarvoista
      Suomussalmi
      70
      1691
    9. Ensimmäisestä kohtaamisesta saakka

      minulla on ollut hämmentynyt olo. Miten voit tuntua siltä, että olisin tuntenut sinut aina? Sinun kanssasi on yhtä aikaa
      Ikävä
      14
      1620
    10. Maailmankuulu homopingviini on kuollut

      Minä niin toivoin että pariskunta olisi saatu kunniavieraiksi ensi kesän Prideen. 💔 "Maailmankuulu homopingviini on k
      Lapua
      6
      1423
    Aihe