Verkkopalvelun (WS) tietoturva SOAP-esimerkillä

⚡ Älykäs yhteenveto

Verkkopalvelun (WS) suojaus on standardi, joka suojaa SOAP-verkkopalvelupuhelun aikana vaihdettavia tietoja. Tässä resurssissa selitetään tietoturvauhkia ja vastatoimia, WS-suojausstandardeja, turvallisen verkkopalvelun rakentamista tunnistetietojen avulla ja verkkopalvelun suojauksen parhaita käytäntöjä.

  • 🔐 Ydinstandardi: WS-Security lisää SOAP-protokollaan suojauskerroksen, joka määrittää, miten tunnistetiedot ja salausavaimet kulkevat SOAP-otsikon sisällä.
  • 🌐 HTTPS-rajoitukset: HTTPS/SSL suojaa pisteestä pisteeseen -liikenteen, mutta usean palvelimen virroissa vain WS-Security pitää viestin suojattuna päästä päähän.
  • 🎫 Valtakirjatunnukset: Tunnistetiedot välitetään käyttämällä UsernameToken-tunnusta käyttäjätunnukselle ja salasanalle tai BinarySecurityToken-tunnusta Kerberos- tai X.509-varmenteille.
  • 🛠️ Suojatun koonnin esimerkki: .Net ASMX -verkkopalvelu lisää AuthHeader-luokan, jotta SOAP-otsakkeessa on käyttäjätunnus ja salasana todennusta varten.
  • 📋 Parhaat käytännöt: Auditointi- ja lokipyynnöt, track liiketoiminta, todenna asiallisesti äläkä koskaan tallenna tai kirjaa arkaluonteisia tunnistetietoja.

Verkkopalvelun verkkopalveluiden tietoturva

Mikä on WS Security?

WS Security on standardi, joka käsittelee tietoturvaa, kun tietoja vaihdetaan osana web-palvelua. Tämä on SOAP:n keskeinen ominaisuus, joka tekee siitä erittäin suositun web-palveluiden luomisessa.

Tietoturva on tärkeä ominaisuus missä tahansa verkkosovelluksessa. Koska lähes kaikki verkkosovellukset ovat alttiina internetille, verkkosovelluksiin kohdistuu aina tietoturvauhka. Siksi kehitystyössäping Verkkopohjaisten sovellusten kanssa on aina suositeltavaa varmistaa, että sovellus on suunniteltu ja kehitetty turvallisuus mielessä pitäen.

Turvallisuusuhat ja vastatoimet

Ymmärtääksemme verkkosovellukselle haitallisia tietoturvauhkia, tarkastellaan yksinkertaista verkkosovelluksen skenaariota ja katsotaan, miten se toimii turvallisuuden kannalta.

Yksi HTTP:n käytettävissä olevista turvatoimenpiteistä on HTTPS-protokolla. HTTPS on turvallinen tapa kommunikoida asiakkaan ja palvelimen välillä verkossa. HTTPS käyttää Secure Sockets Layeria eli SSL:ää turvalliseen kommunikointiin. Sekä asiakkaalla että palvelimella on digitaalinen varmenne, jolla ne tunnistavat itsensä aidoiksi, kun asiakkaan ja palvelimen välillä tapahtuu kommunikointia.

HTTPS-tietoturvauhkat ja vastatoimet

Tavallisessa HTTPS-viestinnässä asiakkaan ja palvelimen välillä tapahtuvat seuraavat vaiheet:

  1. Asiakas lähettää pyynnön palvelimelle asiakasvarmenteen kautta. Kun palvelin näkee asiakasvarmenteen, se tekee merkinnän välimuistijärjestelmäänsä, jotta se tietää, että vastauksen pitäisi palata vain tälle asiakkaalle.
  2. Tämän jälkeen palvelin todentaa itsensä asiakkaalle lähettämällä varmenteensa. Tämä varmistaa, että asiakas kommunikoi oikean palvelimen kanssa.
  3. Kaikki tämän jälkeen asiakkaan ja palvelimen välinen kommunikaatio salataan. Tämä varmistaa, että jos muut käyttäjät yrittävät murtaa suojauksen ja saada tarvittavat tiedot haltuunsa, he eivät pysty lukemaan niitä, koska ne ovat salattuja.

Mutta edellä mainittu suojaustyyppi ei toimi kaikissa tilanteissa. Voi tulla aika, jolloin asiakas voi olla yhteydessä useisiin palvelimiin. Alla oleva esimerkki näyttää asiakkaan, joka on yhteydessä sekä tietokantaan että web-palvelimeen samanaikaisesti. Tällaisissa tapauksissa kaikki tiedot eivät voi kulkea HTTPS-protokollan läpi.

Tietoturvauhkat ja vastatoimet useille palvelimille

Tässä kohtaa SOAP astuu kuvaan näiden esteiden voittamiseksi WS Security -spesifikaation avulla. Tämän spesifikaation avulla kaikki tietoturvaan liittyvät tiedot määritellään SOAP-otsikkoelementissä. Otsikkoelementti voi sisältää seuraavat tiedot:

  1. Jos SOAP-tekstin sisällä oleva viesti on allekirjoitettu millä tahansa suojausavaimella, tämä avain voidaan määrittää otsikkoelementissä.
  2. Jos jokin SOAP-rungon elementti on salattu, otsikko sisältää tarvittavat salausavaimet, jotta viesti voidaan purkaa, kun se saavuttaa määränpään.

Usean palvelimen ympäristössä yllä oleva SOAP-todennustekniikka auttaa seuraavalla tavalla:

  • Koska SOAP-runko on salattu, vain verkkopalvelua isännöivä verkkopalvelin voi purkaa sen salauksen. Tämä johtuu siitä, miten SOAP-protokolla on suunniteltu.
  • Oletetaan, että viesti välitetään tietokantapalvelimelle HTTP-pyynnössä; sitä ei voida purkaa, koska tietokannassa ei ole oikeita mekanismeja siihen.
  • Vasta kun pyyntö todella saavuttaa web-palvelimen SOAP-protokollana, se pystyy tulkitsemaan viestin ja lähettämään asianmukaisen vastauksen takaisin asiakkaalle.

Seuraavissa aiheissa näemme, miten WS Security -standardia voidaan käyttää SAIPPUA.

Verkkopalvelun suojausstandardit

Kuten edellisessä osiossa käsiteltiin, WS-Security-standardi perustuu siihen, että suojausmääritelmä sisällytetään SOAP-otsikkoon. SOAP-otsikon tunnistetietoja hallitaan kahdella tavalla.

Ensin se määrittelee erityisen elementin nimeltä UsernameToken. Tätä käytetään käyttäjätunnuksen ja salasanan välittämiseen verkkopalvelulle. Toinen tapa on käyttää binaaritunnusta BinarySecurityTokenin kautta. Tätä käytetään tilanteissa, joissa käytetään salaustekniikoita, kuten Kerberos tai X.509.

Alla oleva kaavio näyttää, miten suojausmalli toimii WS Securityssa.

Verkkopalvelun tietoturvastandardien työnkulku

Alla on lueteltu yllä mainitun työnkulun vaiheet:

  1. Verkkopalveluasiakas voi lähettää pyynnön suojaustunnuspalvelulle. Tämä palvelu voi olla välittäjänä toimiva verkkopalvelu, joka on erityisesti rakennettu toimittamaan käyttäjätunnuksia/salasanoja tai varmenteita varsinaiselle SOAP-verkkopalvelulle.
  2. Suojaustunnus välitetään sitten verkkopalveluasiakkaalle.
  3. Verkkopalvelun asiakasohjelma kutsuu sitten verkkopalvelua, mutta tällä kertaa varmistaen, että suojaustunnus on upotettu SOAP-viestiin.
  4. Tämän jälkeen verkkopalvelu ymmärtää SOAP-sanoman todennustunnisteella ja voi sitten ottaa yhteyttä Security Token -palveluun tarkistaakseen, onko suojaustunnus aito vai ei.

Alla oleva koodinpätkä näyttää WSDL-dokumenttiin kuuluvan todennusosan muodon. Alla olevan koodinpätkän perusteella SOAP-viesti sisältää kaksi lisäelementtiä: käyttäjätunnuksen ja salasanan.

<xs:element name="UsernameToken">
   <xs:complexType>
      <xs:sequence>
         <xs:element ref="Username"/>
         <xs:element ref="Password" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="Id" type="xs:ID"/>
   </xs:complexType>
</xs:element>

Kun SOAP-viesti välitetään asiakkaiden ja palvelimen välillä, viestin käyttäjätiedot sisältävä osa voi näyttää yllä olevan kaltaiselta. wsse-elementin nimi on SOAP-protokollalle määritelty erityinen elementin nimi, ja se tarkoittaa, että se sisältää tietoturvaan liittyviä tietoja.

Kuinka rakentaa suojattuja verkkopalveluita

Tarkastellaan nyt SOAP-verkkopalvelun tietoturvaesimerkkiä. Rakennamme verkkopalvelun tietoturvan aiemmin SOAP-luvussa esitetyn esimerkin pohjalta ja lisäämme siihen tietoturvakerroksen.

Esimerkissämme luomme yksinkertaisen verkkopalvelun, jota käytetään merkkijonon palauttamiseen verkkopalvelua kutsuvalle sovellukselle. Mutta tällä kertaa, kun verkkopalvelua kutsutaan, tunnistetiedot on annettava kutsuvalle palvelulle. Noudatetaan alla olevia vaiheita SOAP-verkkopalvelun luomiseksi ja siihen suojausmääritelmän lisäämiseksi.

Vaihe 1) Ensimmäinen askel on luoda tyhjä Asp.Net Web-sovellus. Napsauta Visual Studio 2013:ssa valikkovaihtoehtoa Tiedosto-> Uusi projekti.

Rakenna uusi suojattu verkkopalveluprojekti

Kun napsautat Uusi projekti -vaihtoehtoa, Visual Studio antaa sinulle toisen valintaikkunan, jossa voit valita projektin tyypin ja antaa tarvittavat tiedot projektista. Tämä selitetään seuraavassa vaiheessa.

Vaihe 2) Tässä vaiheessa

  1. Varmista, että valitset ensin C# ASP.NET-verkkosovelluksen verkkomalli. Projektin on oltava tätä tyyppiä, jotta verkkopalveluprojekti voidaan luoda. Valitsemalla tämän vaihtoehdon Visual Studio suorittaa tarvittavat vaiheet lisätäkseen tarvittavat tiedostot, joita mikä tahansa verkkopohjainen sovellus tarvitsee.
  2. Anna projektillesi nimi, joka meidän tapauksessamme on annettu "webservice.asmx.” Varmista sitten, että annat sijainnin, johon projektitiedostot tallennetaan.

Build Secure Web Services -projektin tiedot

Kun olet valmis, näet luodun projektitiedoston Visual Studio 2013:n ratkaisunhallinnassa.

Luo suojattuja verkkopalveluita ratkaisujen selain

Vaihe 3) Tässä vaiheessa lisäämme web-palvelutiedoston projektiimme.

  1. Napsauta ensin hiiren kakkospainikkeella projektitiedostoa alla olevan kuvan mukaisesti.

Luo suojattuja verkkopalveluita napsauttamalla hiiren kakkospainikkeella projektia

  1. Kun olet napsauttanut projektitiedostoa hiiren kakkospainikkeella, voit valita vaihtoehdon ”Lisää->Verkkopalvelu (ASMX)” lisätäksesi verkkopalvelutiedoston. Anna verkkopalvelutiedoston nimeksi vain Tutorial Service.

Luo suojattuja verkkopalveluita ja lisää verkkopalvelu

Yllä oleva vaihe avaa valintaikkunan, johon voit syöttää verkkopalvelutiedoston nimen. Kirjoita siis alla olevaan valintaikkunaan tiedostonimeksi TutorialService.

Luo suojattu verkkopalvelu -nimivalintaikkuna

Vaihe 4) Lisää seuraava koodi Tutorial Service asmx-tiedostoosi. Alla olevaa koodinpätkää käytetään lisäämään mukautettu luokka, jota käytetään muuttamaan SOAP-otsikkoa, kun SOAP-viesti luodaan. Koska haluamme nyt lisätä suojaustunnukset SOAP-otsikkoon, tämä vaihe on pakollinen.

Luo Secure Web Services AuthHeader -koodi

      return "This is a Guru99 Web Service";
   }

   public class AuthHeader : SoapHeader
   {
      public string UserName;
      public string Password;
   }
}

Code Selitys:

  1. Luomme nyt erillistä luokkaa nimeltä AuthHeader joka on tyyppiä SoapHeader-luokkaAina kun haluat muuttaa SOAP-otsikossa välitettävää, on luotava luokka, joka käyttää .Netin sisäänrakennettua SoapHeader-luokkaa. Mukauttamalla SOAP-otsikkoa voimme nyt välittää käyttäjätunnuksen ja salasanan, kun verkkopalvelua kutsutaan.
  2. Määrittelemme sitten muuttujat 'UserName' ja 'Password', jotka ovat tyyppiä merkkijono. Niissä säilytetään verkkopalvelulle välitetyt käyttäjätunnuksen ja salasanan arvot.

Vaihe 5) Seuraavana vaiheena seuraava koodi on lisättävä samaan TutorialService.asmx-tiedostoTämä koodi itse asiassa määrittelee verkkopalvelumme toiminnan. Tämä funktio palauttaa merkkijonon “Tämä on Guru99 Web service” asiakkaalle. Mutta tällä kertaa merkkijono palautetaan vain, jos asiakassovellus välittää tunnistetiedot web-palvelulle.

Luo suojattuja verkkopalveluita -opastusohjelmaPalvelukoodi

public class TutorialService : System.Web.Services.WebService
{
   public AuthHeader Credentials;

   [SoapHeader("Credentials")]

   [WebMethod]
   public string Guru99WebService()
   {

      if (Credentials.UserName.ToLower() != "Guru99" ||
      Credentials.Password.ToLower() != "Guru99Password")
      {
         throw new SoapException("Unauthorized",
         SoapException.ClientFaultCode);
      }
      else
      return "This is a Guru99 Web service";
   }

Code Selitys:

  1. Täällä luomme AuthHeader-luokan objektia, joka luotiin aikaisemmassa vaiheessa. Tämä kohde luovutetaan meille Guru99Webservice jossa käyttäjätunnus ja salasana voidaan tutkia tarkasti.
  2. [SoapHeader]-attribuuttia käytetään nyt määrittämään, että kun verkkopalvelua kutsutaan, sen on välitettävä käyttäjänimi ja salasana.
  3. Tässä koodilohkossa tutkimme itse asiassa käyttäjätunnusta ja salasanaa, jotka annetaan verkkopalvelun kutsumisen yhteydessä. Jos käyttäjätunnus on yhtä kuin "Guru99” ja salasana on yhtä kuin ”Guru99Password”, sitten viesti ”Tämä on Guru99 Web service” välitetään asiakkaalle. Muuten asiakkaalle lähetetään virhe, jos annetaan väärä käyttäjätunnus ja salasana.

Jos koodi suoritetaan onnistuneesti, seuraava tulos näytetään, kun suoritat koodin selaimessa.

lähtö:

Luo suojattujen verkkopalveluiden tuotos

Yllä oleva tuloste näkyy, kun ohjelma suoritetaan, mikä tarkoittaa, että verkkopalvelu on nyt käytettävissä. Napsautamme Palvelu-painiketta. Descriptioni linkki.

Build Secure Web Services -palvelun kuvaus

Palvelukuvauksesta näet nyt, että käyttäjätunnus ja salasana ovat osa palvelua wsdl tiedosto. Nämä parametrit on lähetettävä, kun verkkopalvelua kutsutaan.

Verkkopalvelun suojauksen parhaat käytännöt

Seuraavat turvallisuusnäkökohdat on otettava huomioon työskenneltäessä verkkopalveluiden kanssa:

  1. Auditointi ja lokien hallinta – Käytä sovelluslokia kaikkien verkkopalveluihin tulevien pyyntöjen kirjaamiseen. Tämä antaa yksityiskohtaisen raportin siitä, kuka on käynnistänyt verkkopalvelun, ja voi auttaa vaikutusten analysoinnissa, jos tietoturvaloukkaus tapahtuu.
  2. Verkkopalveluun tulevien puheluiden kulku – Yritä tarkkailla verkkopalveluiden kutsujen kulkua. Oletusarvoisesti sovellus voi kutsua useita verkkopalvelupyyntöjä, joiden välillä välitetään todennustunnisteita. Kaikkia verkkopalveluiden välisiä kutsuja on valvottava ja kirjattava lokiin.
  3. Arkaluontoista informaatiota – Älä sisällytä lokitietoihisi arkaluonteisia tietoja, kuten salasanoja, luottokorttinumeroita tai muita luottamuksellisia tietoja. Jos jokin tapahtuma sisältää näitä tietoja, ne on hävitettävä ennen lokiin kirjaamista.
  4. Track Liiketoiminta OperaTIONS - Tracmerkittävät liiketoimintatoiminnot. Voit esimerkiksi varustaa sovelluksesi niin, että se tallentaa pääsyn erityisen arkaluonteisiin menetelmiin ja liiketoimintalogiikkaan. Otetaan esimerkiksi verkkokauppa.ping sovellus. Tyypillisessä sovelluksessa on useita vaiheita, kuten ostettavien tuotteiden valitseminen, ostoskoriin lisääminen ja lopuksi ostos. Koko tämän liiketoiminnan työnkulun on oltava tracverkkopalvelun tarjoama.
  5. Oikea todennus – Todennus on mekanismi, jolla asiakkaat voivat vahvistaa henkilöllisyytensä verkkopalvelussa käyttämällä tiettyä tunnistetietojoukkoa, joka voi todistaa kyseisen henkilöllisyyden. Käyttäjän tunnistetietoja ei tule koskaan tallentaa, ja siksi, jos verkkopalvelua kutsutaan WS Securityn avulla, on huomattava, että verkkopalvelun ei tule tallentaa SOAP-otsikossa lähetettyjä tunnistetietoja. Verkkopalvelun tulisi hylätä ne.

UKK

Tekoäly voi valvoa verkkopalveluliikennettä reaaliajassa, havaita epätavallisia pyyntömalleja ja merkitä todennäköisiä hyökkäyksiä, kuten injektio- tai token-väärinkäyttöä. Se voi myös skannata WSDL- ja SOAP-kokoonpanoja heikon todennuksen tai puuttuvan salauksen varalta.

Kyllä. Normaalilla liikenteellä koulutetut koneoppimismallit voivat havaita poikkeavuuksia, kuten tunnistetietojen täyttämistä, väärin muotoiltuja SOAP-otsikoita tai toistohyökkäyksiä. Tietoturvatiimien tulisi silti tarkistaa hälytykset ennen pyyntöjen estämistä, jotta vältetään laillisten asiakkaiden toiminnan häiriintyminen.

HTTPS salaa yhteyden kahden pisteen välillä, joten tiedot paljastuvat, kun ne saavuttavat välipalvelimen. WS-Security suojaa itse SOAP-viestin, säilytäping se suojasi päästä päähän, jopa kulkiessaan useiden palvelimien kautta.

UsernameToken on SOAP-otsikkoon sijoitettu WS-Security-elementti, joka sisältää käyttäjätunnuksen ja valinnaisesti salasanan. Sen avulla verkkopalvelu voi todentaa soittajan ennen pyynnön käsittelyä.

Tiivistä tämä viesti seuraavasti: