Visual Studio 2005:n uudet tietoturvaominaisuudet

Tällä sivulla
JohdantoJohdanto
Alkuperäisen koodin tietoturvaparannuksetAlkuperäisen koodin tietoturvaparannukset
Hallitun koodin tietoturvaparannuksetHallitun koodin tietoturvaparannukset
Muut tietoturvaparannuksetMuut tietoturvaparannukset
LopuksiLopuksi

Yhteenveto: Visual Studio 2005:n avulla kehittäjien on entistä helpompaa kirjoittaa turvallisia sovelluksia. Voit kirjoittaa turvallista ei-hallittua koodia tai luoda sekä ottaa käyttöön Code Access Security -ominaisuutta hyödyntäviä hallittuja sovelluksia IDE-työkalujen avulla. (11 painettua sivua)

Sisällys

Johdanto

Kehittäjät haluavat luoda turvallisia sovelluksia, mutta useimmat heistä eivät halua käyttää kohtuuttomasti aikaa sovellusten suojaamisen opettelemiseen. Mieluiten kehittäjät kirjoittaisivat koodin sekä ongelman ratkaisevat algoritmit ja julkaisisivat tuotteen huolehtimatta tietoturvasta sen enempää. Tällä hetkellä tämä ei kuitenkaan ole mahdollista, vaan meidän on oltava tietoisia tekemiemme päätösten vaikutuksista tietoturvaan. Kun tämä otetaan huomioon, sovellusten luomiseen ja julkaisemiseen käytettävät työkalut voivat helpottaa turvallisten sovellusten julkaisemista huomattavasti. Tässä artikkelissa käyn läpi joitakin Visual Studio 2005:n ominaisuuksia, jotka voivat auttaa luomaan turvallisia ja vakaita sovelluksia. Useimpien Visual Studio 2005:n työkalujen ja parannusten käyttäminen vaatii vain vähän ylimääräistä työtä, mutta saattaa tehostaa sovellustesi yleistä tietoturvaa huomattavasti.

YlösYlös

Alkuperäisen koodin tietoturvaparannukset

Visual C++ on ainoa Visual Studio -kääntäjä, jossa voit valita kohdeprosessorin suoraan (eli luoda ei-hallittuja alkuperäisiä exe- ja dll-tiedostoja).

Tässä osassa käsitellään alkuperäisen koodin tietoturvaparannuksia. Nämä tiedot koskevat Visual C++:aa, ellei toisin mainita.

Ylivoimaisesti suurin osa alkuperäisestä koodista löydetyistä tietoturvaongelmista liittyy puskurin ylivuotoihin. Puskurin ylivuodot ilmenevät, kun puskurin koon ylittävät tiedot "valuvat yli" ja korvaavat osan muistista, josta koodia voidaan suorittaa. Tämä muodostuu ongelmaksi, kun älykäs hyökkääjä selvittää, miten paljon puskurille on tarkalleen luotava ylivuotoa, jotta hän voi sijoittaa haluamansa komennon sellaiseen muistin osaan, josta hän pystyy kaappaamaan ohjelman suorittamisen.

Tässä artikkelissa kuvataan tähän jokseenkin yksinkertaistettuun puskurin ylivuodon kuvaukseen perustuen neljä Visual Studio 2005:n ominaisuutta, jotka on suunniteltu auttamaan koodin mahdollisten heikkouksien löytämisessä ja estämään hyökkääjää hyödyntämästä heikkouksia, jos sellaisia sattuu koodiin jäämään.

Code Analysis /analyze

Code Analysis on Visual Studio 2005 Team Editionin ohjelmistokehittäjille suunniteltu ominaisuus. Tämä ominaisuus periytyy PREfast-apuohjelmasta, jota käytettiin aiemmin Microsoftilla sisäisesti. Se julkaistiin Microsoft Device Driver Kit (DDK) -paketin mukana. Koodinanalysointiominaisuus analysoi C- ja C++-lähdekoodia, käy läpi jokaisen funktion kaikki mahdolliset suorituspolut ja simuloi suoritusta arvioidakseen kunkin polun mahdolliset ongelmat. Koodin analysointi ei suorita koodia eikä pysty löytämään kaikkia mahdollisia virheitä, mutta se saattaa löytää sellaisia virheitä, jotka kääntäjä voi jättää huomiotta. Se pystyy löytämään ongelmia esimerkiksi siirroista ja tietolajeista, suorituskyvystä, tietoturvasta, lausekkeista, silmukoista, muistin varauksesta, muotoilumerkkijonoista, palautusarvoista ja poikkeusten käsittelystä.

Kun Code Analysis on käytössä Visual Studio 2005 Enterprise Editionissa, tunnistetut virheet tulevat näkyviin Error List -ikkunassa. Voit ottaa koodin analysoinnin käyttöön käyttämällä /analyze-valitsinta tai määrittämällä Property Pages -valintaikkunan Code Analysis Node -kohdan General-osassa Enable code analysis for C/C++ -asetukseksi Yes(/analyze) kuvan 1 mukaisesti.

Kuva 1. Koodin analysoinnissa käytettävissä olevat tietoturvasäännöt

Application Verifier

Application Verifier (AppVerifier) toimitettiin alun perin Application Compatibility Toolkit -paketin osana. AppVerifier on joukko suorituksenaikaisia analysointitestejä, jotka auttavat tunnistamaan ohjelmien suoritusvirheitä. Application Verifier -toiminnon tunnistamat virheet liittyvät yleensä sovellusten yhteensopivuuden, vakauden ja tietoturvan ongelmiin. Ne kuuluvat yleensä johonkin seuraavista kolmesta luokasta: kahvan, lukitusten ja keon tarkistaminen. AppVerifier-asetukset sijaitsevat Property Pages -valintaikkunan Application Verifier -solmussa.

Voit käynnistää Application Verifier -toiminnon valitsemalla Debug-valikosta Start with Application Verifier. Application Verifier käyttää keskeytyksiä antaessaan tietoja virheiden löytymisestä eri tarkistuskerroksissa. Kehittäjät voivat määrittää Application Verifier -toiminnon tekemään tietyt toimet, kun keskeytys tapahtuu. Näitä toimia voivat olla pysähtyminen virheiden kohdalla ja virheiden kirjaaminen. Kuvassa 2 on Property Pages -valintaikkunan Application Verifier -asetukset.

Kuva 2. Application Verifier toiminnon keskeytystoimet

Buffer Security Check /GS

Visual C++:n Buffer Security Check -kääntäjäasetus (/GS) on suunniteltu auttamaan siinä, että haitalliseksi suunniteltua koodia voidaan estää hyödyntämästä puskurin ylivuotoja sovelluksissa. Suuri osa koodin heikkouksista on puskurin ylivuotoja. /GS-asetus asettaa salatun arvon (testiarvon) puskurin loppuun. Tämä arvo tarkistetaan koodin suorittamisen aikana. Jos arvo on muuttunut, ohjelman suoritus keskeytetään ja tehdään tietoturvapoikkeus.

/GS-asetus ei estä puskurin ylivuotoa, mutta se suojaa koodin mahdolliselta kaappaamiselta pysäyttämällä ohjelman suorituksen.

Safe CRT Libraries -kirjastot

Safe CRT Libraries -kirjastot ovat C- ja C++-vakiokirjastojen korjattuja versioita. Ne on suunniteltu parantamaan Visual C++:lla käännettyjen sovellusten tietoturvaa lisäämällä asianmukaiset puskurin tarkistukset hyökkäyksille tunnetusti alttiina oleville funktioille sekä heikentämällä tai poistamalla alttiina olevia suorituksenaikaisia funktioita.

Nämä muutokset vaikuttavat kaikkiin tärkeimpiin ohjelmointikirjastoihin, mukaan lukien C Runtime Library (CRT), Standard C++ Library (SCL), Microsoft Foundation Classes (MFC) ja Active Template Library (ATL). Osana näitä korjauksia MFC ja ATL luotiin uudelleen niin, että ne käyttävät nyt Safe C Library -funktioita, joten MFC- ja ATL-sovellusten kääntäminen uudelleen Visual C++ 2005:llä lisää joitakin Safe CRT Libraries -kirjastojen etuja automaattisesti.

Tietoja Safe CRT Libraries -kirjastoista on MSDN Magazine -artikkelissa Repel Attacks on Your Code with the Visual Studio 2005 Safe C and C++ Libraries, jonka on kirjoittanut Martyn Lovell (Microsoft Visual C++ Development Lead).

YlösYlös

Hallitun koodin tietoturvaparannukset

Hallittu koodi aiheuttaa hieman erilaisia tietoturvaongelmia kuin alkuperäinen koodi, mutta CLR:n (Common Language Runtime) muistinkäsittelytavasta johtuen perinteiset puskurin ylivuodot eivät ole niin suuri ongelma kuin yleensä. Tässä osassa käyn läpi joitakin Visual Studio 2005:n tietoturvaominaisuuksia, jotka ovat tärkeimpiä hallittuja sovelluksia kirjoittaville kehittäjille.

FxCop

Kehittäjät ovat käyttäneet FxCop-erillistyökalua jo vuosien ajan tarkistaakseen, että kokoonpanot ovat .NET Framework Design Guidelines -ohjeiden mukaisia. Tämä työkalu on nyt sisäänrakennettuna Visual Studio 2005:ssä.

FxCop tekee analyysin jäsentämällä MSIL-komentovirran ja etsimällä kutsugraafista käyttäjän määrittämien sääntöjen rikkomuksia, yleensä .NET Framework Design Guidelines -ohjeiden mukaisesti. Näitä sääntöjä ovat muun muassa tietoturvasäännöt, kirjaston suunnittelusäännöt sekä globalisoinnin, yhteentoimivuuden, ylläpidettävyyden, nimeämisen, suorituskyvyn, luotettavuuden ja käytön säännöt.

Voit käyttää FxCop-toimintoja Visual Studio 2005:ssä hallitun sovelluksesi Project Properties -sivun Code Analysis -välilehdestä. Kuvassa 3 näkyy joitakin tietoturvasääntöjä, jotka voit tarkistaa osana analyysiä.

Kuva 3. Code Analysis sääntöjen käyttäminen Visual Studio 2005:ssä

Voit ottaa Code Analysis -säännöt käyttöön valitsemalla Enable Code Analysis -valintaruudun hallitun projektisi Code Analysis -ominaisuussivulla. Tämän tekeminen tuo uusia varoituksia Visual Studio 2005 Error List -ikkunaan. Voit vähentää luettelon kohteiden määrää valitsemalla analysoitavaksi vain ne sääntöjoukot, joista olet kiinnostunut (esimerkiksi Security Rules ja Reliability Rules).

Code Access Security ja pienin tarvittava käyttöoikeus

.NET Framework -sovellukset suoritetaan Code Access Security -tietoturvamallin alaisuudessa. Tämä on tilanteeseen perustuva malli, jossa tietoturvaoikeudet myönnetään kokoonpanon sijainnin ja allekirjoituksen sekä muiden vastaavien tekijöiden perusteella. Näitä tekijöitä verrataan käytäntöön, joka on määritetty käyttäjän, koneen tai toimialueen tasolla. Näihin eri tekijöihin liittyvät käytännöt mahdollistavat sen, että sovellukset suoritetaan käyttäen erittäin tarkasti myönnettyjä käyttöoikeuksia. Tätä käsitettä kuvataan osittaiseksi luottamussuhteeksi.

Yksi osittaista luottamussuhdetta käyttävien sovellusten käyttöönoton vaikeuksista on sovellusten testaaminen niiden kehittämisen aikana. Kehittäjällä on yleensä täydet oikeudet luomansa sovelluksen suorittamiseen, mutta jotta hän voisi testata, miten sovellus toimisi intranetissä tai Internetissä, hänen olisi siirrettävä se kyseisiin sijainteihin näiden olosuhteiden testaamista varten. Visual Studio 2005 auttaa tässä tarjoamalla useita työkaluja ja ominaisuuksia, joiden avulla kehittäjät voivat testata sovelluksiaan sekä tehdä niiden virheenkorjauksen IDE-ympäristössä ja varmistaa, että sovellukset toimivat oikein sillä luottamustasolla, jonka käytäntö myöntää niille käyttöönoton aikana.

ClickOnce-käyttöönotto

ClickOnce on Visual Studio 2005:een rakennettu tekniikka, jonka avulla kehittäjien on helppo luoda sovelluksia otettavaksi käyttöön sellaisille käyttäjille, joiden tilien käyttöoikeudet ovat rajoitetut. Nämä sovellukset voidaan suorittaa paikallisesti, jaetusta intranet-resurssista tai Web-sivun HTTP-linkin avulla. Verkkosijainneista suoritetut sovellukset kopioidaan välimuistiin ja suoritetaan paikallisesti, mutta niiden käyttöoikeuksien mukaisesti, jotka käyttäjällä on niiden todelliseen sijaintiin. Kun kehittäjä sijoittaa sovelluksen uuden version verkkosijaintiin, kyseinen sijainti tarkistetaan ensimmäisenä, kun käyttäjä käynnistää sovelluksen ja välimuisti päivitetään.

Visual Studio 2005:n avulla kehittäjät voivat testata näitä osittaisessa luottamussuhteessa olevia sovelluksia IDE-ympäristössä. Tämä voi säästää paljon aikaa ja vaivaa, kun sovellukset luodaan ja otetaan käyttöön CAS:n avulla.

Debug in Zone

ClickOnce-ominaisuuden hyödyntämisessä on tärkeää, että kehittäjät pystyvät testaamaan sovelluksiaan helposti käyttäen samoja käyttöoikeuksia, jotka sovellukselle myönnetään sen käyttöönoton yhteydessä. Debug in Zone -ominaisuuden avulla kehittäjät voivat määrittää sovelluksen tarvitseman luottamuksen määrän suunnitellessaan sovellusta ja tehdessään sen virheenkorjauksen. Tämä mahdollistaa sovelluksen testaamisen niin kuin se otettaisiin käyttöön verkkosijainnista eri luottamustasoja käyttäen. Tätä toimintoa käytetään hallitun sovelluksen Project Properties -sivujen Security-välilehden avulla.

Voit käyttää tätä ominaisuutta avaamalla projektin Security-välilehden ja määrittämällä sovelluksen olevan osittaista luottamussuhdetta käyttävä sovellus (This is a partial trust application). Tässä välilehdessä voit valita vyöhykkeen, johon sovellus asennetaan, sekä määrittää, mitkä käyttöoikeudet sovelluksesi tarvitsee käyttöönoton yhteydessä. Nämä asetukset näkyvät kuvassa 4.

Kuva 4. Määritä sovelluksen tietoturvaoikeudet projektin Security-välilehdessä

Parannetut tietoturvapoikkeukset virheenkorjauksen aikana

Kun olet määrittänyt vyöhykkeen, kyseisen vyöhykkeen tietoturvapoikkeuksia muodostetaan sovelluksen suorituksen aikana. Kuvassa 5 näkyvä uusi tietoturvapoikkeuksen valintaikkuna esittelee, millaisia tietoja voit odottaa tulevan näyttöön, kun sovellustesi virheenkorjaamisen aikana ilmenee tietoturvapoikkeuksia.

Kuva 5. Visual Studio 2005:n tietoturvapoikkeukset

Tietoturvapoikkeusten ikkunassa on paljon muutakin kuin pelkkiä ilmoituksia. Ikkuna sisältää neuvoja ja toimia, joiden avulla voit muuttaa sovellusta niin, että se toimii osittaisessa luottamussuhteessa. Esimerkiksi FileIOPermission ei ole sallittu vyöhykkeellä, jossa kuvan 4 ohjelma suoritettiin. Yksi ehdotuksista tämän ongelman korjaamiseksi on käyttää sovellukselle eristettyä säilöä.

IntelliSense in Zone (Visual Basic -ominaisuus)

IntelliSense in Zone on Visual Basiciin liittyvä tietoturvaominaisuus. Security in Zone rajoittaa IntelliSensen tarjoamat vaihtoehdot vain niihin API-liittymiin, jotka tietyllä alueella sallitaan. Ne toiminnot, jotka eivät ole käytettävissä nykyisellä vyöhykkeellä, näkyvät harmaina. Tämä auttaa osittaista luottamussuhdetta käyttävien sovellusten kehittäjiä valitsemaan vain ne API-liittymät, joiden tiedetään olevan sallittuja tietylle vyöhykkeelle.

PermCalc

PermCalc on erillinen sovellus, jonka avulla .NET-kehittäjät analysoivat hallitun sovelluksen onnistuneeseen suorittamiseen vaadittavia käyttöoikeuksia. Tämä toiminto on nyt lisätty Visual Studio 2005:een. Sitä voidaan käyttää hallitun sovelluksen Project Properties -ikkunan Security-välilehdestä.

Voit käyttää PermCalc-toimintoa IDE-ympäristössä määrittämällä sovelluksen asennusvyöhykkeen ja valitsemalla sitten Calculate Permissions. Jos sovelluksesi edellyttää enemmän käyttöoikeuksia kuin vyöhykkeelle on käytettävissä, sivun käyttöoikeustaulukon Settings-sarakkeessa on sana Include, kuten kuvassa 6. Näiden kohteiden vieressä on varoitussymboli, mikä ilmaisee, että vaadittu käyttöoikeus ei ole oletusarvon mukaan käytettävissä valitulla vyöhykkeellä. Jos PermCalc-apuohjelma selvittää, että sovelluksen oikea suorittaminen edellyttää täyttä luottamusta, näyttöön tulee siitä ilmoittava sanomaruutu.

Kuva 6. Calculate Permissions selvittää, mitkä käyttöoikeudet sovelluksen oikea suorittaminen edellyttää

YlösYlös

Muut tietoturvaparannukset

Visual Studio 2005:ssä on useita tietoturvaparannuksia, joista on hyötyä sekä alkuperäisissä että hallituissa projekteissa. Seuraavaksi tarkastelemme kehittämistä pienimmillä tarvittavilla käyttöoikeuksilla ja testaamista tietoturvan suhteen.

Kehitä ja tee virheenkorjaus käyttäen pienimpiä tarvittavia käyttöoikeuksia

Yksi tapa, jolla tietokoneiden käyttäjät voivat estää haittaohjelmia vaikuttamasta järjestelmiinsä, on pienentää ohjelmien suorittamisen käyttöoikeustasoa. Jos käyttäjällä, joka suorittaa haittaohjelman, on järjestelmänvalvojan oikeudet, haittaohjelma pystyy käyttämään kaikkia tietokoneen osia. Yleisen tietoturvan näkökulmasta järjestelmänvalvojan oikeuksia edellyttävää suorittamista tulee välttää.

Lisäksi järjestelmänvalvojan oikeuksin kirjautuneet kehittäjät eivät huomaa ongelmia, jotka rajoitetumpia käyttöoikeuksia käyttävät käyttäjät kohtaavat suorittaessaan sovelluksen. Esimerkiksi sovellus, joka kirjoittaa Program Files- tai System-kansioihin, toimii ongelmitta, kun käyttäjällä on järjestelmänvalvojan oikeudet. Peruskäyttäjän kirjoitusoikeuksia näihin kansioihin on kuitenkin rajoitettu, joten sovellus ei pysty tallentamaan tietoja näihin sijainteihin, jos käyttäjällä on vain peruskäyttäjän oikeudet.

Aiemmissa Visual Studion versioissa oli vaikeaa luoda sovelluksia ja tehdä niiden virheenkorjaus, kun käytetyillä käyttäjätileillä oli rajalliset käyttöoikeudet. Tämä johtui siitä, että Visual Studio toimi itse parhaiten sellaisten käyttäjätilien kanssa, joilla on laajat käyttöoikeudet. Visual Studio 2005:ssä tätä on muutettu. Visual Studio 2005 toimii hyvin peruskäyttäjän käyttöoikeuksin, ja voit kehittää sovelluksia sekä tehdä niiden virheenkorjauksen tällä tavoin yhtä helposti kuin jos sinulla olisi järjestelmänvalvojan tai virheenkorjauksen käyttöoikeudet.

Muista, että saatat kohdata myös Visual Studio 2005:ssä ongelmia sellaisten laajennusten kanssa, jotka on suunniteltu edellyttämään laajempien käyttöoikeuksien tilejä. Jos kohtaat tällaisia tilanteita, kerro laajennusten valmistajille, että heidän laajennuksensa vaatii laajempia käyttöoikeuksia kuin se todennäköisesti tarvitsee. Useimmissa tapauksissa säilön tai rekisterin pyyntöjen uudelleenohjaaminen oikeaan sijaintiin mahdollistaa laajennuksen oikean toiminnan.

Ominaisuuksien testaaminen

Tietoturvaongelmien testaaminen on erittäin tärkeä osa sellaisen sovelluksen luomista, joka on tarkoitettu käytettäväksi verkkoon yhteydessä olevissa ympäristössä. Visual Studio 2005 Team System sisältää useita testaustyökaluja, joiden avulla voit luoda entistä turvallisempia sovelluksia.

Yksikkötestaus

Eräs yksikkötestauksen käyttötarkoituksista on varmistaa, että menetelmän palautusarvo on odotettu ja menetelmälle välitettyjen arvojen mukainen. Käyttäjätietojen käsittelemisessä on tärkeä varmistaa, että tiedot ovat odotuksen mukaiset. Kaksi ennen kyseisten tietojen käsittelemistä tarkistettavaa asiaa ovat tietojen laji ja pituus. Yksikkötestien avulla voit lähettää satunnaista tietoa funktiolle ja varmistaa, että sovellus käsittelee tiedot oikealla tavalla ja toimii odotetusti.

Lisäksi yksikkötesteissä voidaan ottaa käyttöön koodikattavuus. Koodikattavuus auttaa varmistamaan, että sovelluksen koodi on testattu. Tämä auttaa estämään harvoin käytetyn koodin, kuten poikkeuskäsittelyn, jäämisen testauksen ulkopuolelle. Sovelluksen normaalin toiminnan ulkopuolella oleva koodi saattaa edelleen olla alttiina hyökkäyksille. Hyökkääjät ovat lukuisissa tapauksissa hyödyntäneet koodia, joka on suunniteltu suoritettavaksi normaalin toiminnan keskeytyessä.

Visual Studio 2005 sisältää useita testaustyökaluja, joiden avulla voit luoda yksikkötestejä. Voit luoda yksikkötestin manuaalisesti Visual C++-, Visual C#- tai Visual Basic -kielellä kuvassa 7 näkyvässä Add New Test -valintaikkunassa.

Kuva 7. Uuden yksikkötestin luominen Visual Studio 2005:n Add New Test valintaikkunasta

Testien manuaalisen luomisen lisäksi voit luoda testit ohjatun Unit Test Wizard -toiminnon avulla. Tämä voi auttaa sinua perehtymään siihen, miten tällaiset testit toimivat, ja antaa lähtökohdan omille testeillesi.

Suorituskyvyn (kuormituksen) testaus

Kuormituksen testaaminen on tärkeää, koska sen avulla voit tehdä virheenkorjauksen skenaarioille, kuten mahdollisille palvelunestohyökkäyksille, jotka saatetaan käynnistää Web-sovelluksiasi vastaan. Add New Test -valintaikkunan Load Test -malli käynnistää kuvassa 8 näkyvän ohjatun New Load Test Wizard -toiminnon. Sovelluksen odotetun kuormituksen testauksen lisäksi voit testata tämän työkalun avulla epätavallisia skenaarioita. Tee tämä lähettämällä erittäin suuri määrä pyyntöjä sovelluksellesi, jotta näet, miten se kestää kuormitusta. Tarkkailemalla sovellustasi tarkasti voit tunnistaa hyökkäyksiä ja suunnitella niille tarvittaessa vastatoimia.

Kuva 8. Kuormitustestin valmistelu Visual Studio 2005:ssä

YlösYlös

Lopuksi

Tässä julkaisussa on lyhyt yleiskatsaus joistakin tietoturvaominaisuuksista, jotka tekevät Visual Studio 2005:stä kehittäjille tärkeän uuden työkalun. Luotpa pientä apuohjelmaa tai laajaa erikoissovellusta, asiakkaidesi tietokoneiden ja luomiesi sovellusten tietoturva on ensisijaisen tärkeää. Näiden uusien Visual Studio 2005:een sisältyvien työkalujen avulla voit luoda, testata ja ottaa käyttöön turvallisia sovelluksia helpommin kuin koskaan.


Brian Johnson on MSDN:n Program Manager. Hänen vastuualueitaan ovat MSDN:n Visual Studio-, Visual C++-, Security- ja .NET Framework Developer Center -keskukset.


YlösYlös