Yksi tietoturvaasiantuntijan eduista on työskentely useiden tiimien kanssa. Auditoinnin jälkeen tietoturva-asiantuntijoilla on mahdollisuus työskennellä tietokannan ylläpitäjien ja analyytikoiden kanssa. Jotta sovellus toimisi oikein ja turvallisesti, nämä tiimit yrittävät käsitellä tietoturva-aukkoja, joilla on yhteinen perusta. Näiden tiimien väliset vuoropuhelut herättävät joitakin ongelmia todellisen IP: n kanssa.
Välityspalvelin ja todellinen IP-käsitteet
Nykypäivän verkkosovellukset toimivat useilla sovelluspalvelimilla ja tietokantajärjestelmillä. Kuvittele, että kaksi sovelluspalvelinta jakavat saman lähdekoodin. Kumpi tahansa näistä palvelimista on valmiina vastaamaan käyttäjän pyyntöihin kuormitustilanteesta riippuen. Kuormituksen tasapainotusmekanismi, joka käsittelee HTTP-pyynnöt sovelluspalvelimien edessä, päättää, mikä pyyntö välitetään mille sovelluspalvelimelle. Tämä asettaa suuren kysymyksen väliohjelmistojen järjestelmänvalvojille ja ohjelmistokehittäjille: mikä on käyttäjän todellinen IP-osoite?
Välityspalvelimet ovat vastuussa tiedon siirtämisestä kahden järjestelmän välillä. Kuormantasaaja on välityspalvelimesta vastaava mekanismi. Toisin sanoen vain yksi järjestelmä kommunikoi sekä käyttäjän että sovelluspalvelimen kanssa. Verkkoliikenteen osalta web A- tai web B -palvelimet kommunikoivat aina kuormituksen tasapainottajan IP-osoitteen kanssa. Samaa voidaan sanoa käyttäjille. Tietoturva-ammattilaisille kuormituksen tasaajat aiheuttavat vakavia ongelmia aikaperusteisissa SQL-injektiohyökkäyksissä. Mutta pääpaino tässä on IP-huijaus.
X-Forwarded-For ja IP-suhde
Harkitse X-Forwarded-Forin, kehittäjän ja väliohjelmiston välistä suhdetta. Oletetaan esimerkiksi, että sovelluksen kehittäjän tehtävänä on tallentaa kaikki toiminnot, kuten käyttäjien väärät salasanayritykset, IP-osoitteillaan. Aluksi kehittäjä määrittää käyttäjän IP-osoitteen, kun HTTP-pyyntö täytetään käyttämänsä ohjelmointikielen tarjoama mahdollisuus ja yrittää jatkaa näiden tietojen käyttöä sovellus.
Koska sen IP-osoite on kiinteä koko kehitysprosessin ajan, se näkee aina saman osoitteen testien aikana, koska yleensä käyttäjien tietokoneet yritysverkot toimivat staattisen IP: n kanssa MAC-osoitteen kautta. Yksikkö suorittaa joitakin hyväksyntätestejä; näiden kanssa tulee kuitenkin ongelmia. Testiyksikkö välittää tämän ongelman ohjelmistokehittäjälle.
Tässä vaiheessa kehittäjä voi kirjoittaa ohjaimen kehitysympäristöön ja nähdä HTTP-pyynnön välitettynä sovellukselle raakamuodossa, koska kaikilla on sama IP-osoite. Tämä johtaa työskentelyyn X-Forwarded-Forin kanssa.
Otsikkotiedot nimeltä X-Forwarded-For lähetetään sovelluspalvelimelle. Tässä vaiheessa ohjelmistokehittäjä näkee IP-osoitteensa, jota he hallitsevat ipconfigilla, ei lokeissa näkyvää kuormitustasainta. Monet ohjelmoijat ajattelevat voivansa ratkaista tämän ongelman seuraavanlaisen koodilohkon avulla:
toimintohanki IP-osoite() {
$ipKeys = joukko(
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_X_CLUSTER_CLIENT_IP',
"HTTP_FORWARDED_FOR", 'HTTP_FORWARDED',
'REMOTE_ADDR'
);
jokaiselle ($ipKeys kuten $avain) {
jos (array_key_exists($key, $_SERVER) totta) {
jokaiselle (räjähtää(',', $_SERVER[$key]) kuten $ip) {
$ip = trimmaus($ip);
jos (validate_ip($ip)) {
palata $ip;
}
}
}
}
palataisset($_SERVER['REMOTE_ADDR'])? $_SERVER['REMOTE_ADDR']: väärä;
}
Tämä ei riitä – kehittäjän on tarkistettava, onko saapuva arvo kelvollinen IP-osoite.
Kaikki yllä oleva kuului kehittäjän hoitamaan osaan. Mutta jotta sovellus toimisi kunnolla ja turvallisesti, tiimit tekevät yhteistyötä teoriassa, mutta sisällä todellisuudessa äärimmäisissä kohdissa toisistaan – yritä käsitellä tietoturva-aukkoja, joissa on a yhteinen perusta. Yritä nyt tarkastella asiaa kuormituksen tasaajan konfiguroinnista vastaavan henkilön näkökulmasta.
Järjestelmänvalvojat saattavat ajatella, että kehittäjät tallentavat tietoja, kuten X-Forwarded-For, koska HTTP-pyynnön tietoihin ei voida luottaa. Nämä järjestelmänvalvojat lähettävät usein X-Forwarded-For; ne kuitenkin lähettävät myös pyynnön lähettäneen järjestelmän TCP-lähdeosoitteen toisena otsikkoarvona. True-Client-IP-rakenne on hyvä esimerkki tästä.
Kun yhdistät kaikki nämä asiat, kaksi eri yksikköä seuraa eri polkuja samalle ongelmalle, jota kutsutaan asiakkaan IP-huijaukseksi. Tuloksena on kriittinen ongelma, jossa IP-loki ja IP-pohjainen valtuutus eivät toimi.
Kuinka asiakkaan IP-huijaus havaitaan tunkeutumistesteissä?
Useimmat penetraatiotestaajat käyttävät Firefoxia turvatarkistuksiinsa. He määrittävät Firefoxin yksinkertaisella X-Forwarded-For: 127.0.0.1 -lisäosalla kaikille HTTP-pyynnöille. Ja siten mahdollisuus havaita tällaiset haavoittuvuudet kaikissa läpäisytesteissä kasvaa. Tarkastuksen suorittaminen OWASP-tarkistuslista varmistaa, että tarkistat tällaiset haavoittuvuudet. X-Forwarded-For-haavoittuvuuden havaitsemiseksi tarvitset kuitenkin sovelluksessa moduulin, joka näyttää IP-osoitteesi tai suoritetut toimet.
Kuinka ratkaista X-Forwarded-For-haavoittuvuus
Organisaatiot tarvitsevat pakollisen suojatun sovelluskehitysasiakirjan kaikille ohjelmistotiimeille ja ulkoistamisyrityksille. Jos esimerkiksi tarvitset käyttäjän IP-osoitteen, yrityksen tulee suunnitella etukäteen ja tehdä siitä sääntö otsikkotiedoista, joita se käyttää täällä. Muuten eri tiimit tuottavat erilaisia ratkaisuja. Jos tällaista tilannetta ei voida käsitellä, ulkoistavat sovellukset tulevat peliin, mikä vaikeuttaa lähdekoodien mittaamista. Yleensä yritykset eivät halua seurata tällaista polkua.
Mutta tämän ongelman ratkaisemiseksi voit käyttää seuraavaa F5-sääntöä:
kun HTTP_REQUEST {
HTTP:: otsikko poista X-Forwarded-varten
HTTP:: otsikkolisäys X-Forwarded-varten [IP:: kauko_osoite]
}
Tämä poistaa HTTP-pyynnön X-Forwarded-For-kentän ulkomaailmasta. Sitten se lähettää pyynnön lisäämällä siihen pyynnön lähettäneen järjestelmän IP-osoitteen. Tällä tavalla luodaan luotettava luettelo ohjelmistoista, jotka toimivat X-Forwarded-Forin mukaan.
Yhteenvetona voidaan todeta, että suurin tavoite tässä on tarkistaa HTTP-pyynnöt ja luoda luotettava ympäristö. Yllä oleva koodilohko on hyvä esimerkki, jota voit käyttää tähän.
Kyberturvallisuuden viitekehykset ja dokumentaatio yrityksille
Yksiköt, jotka näyttävät olevan riippumattomia toisistaan, ovat itse asiassa osia kokonaisuudesta. Siksi kaiken on toimittava systemaattisesti. Jokaisen yksikön välillä on noudatettava etukäteen määriteltyjä sääntöjä. Jos tällaista toimivaa järjestelmää ei oteta käyttöön, saattaa ilmetä monia ongelmia, kuten X-Forwarded-For-haavoittuvuus. Tätä varten kaikki tulee harkita etukäteen ja käyttää mahdollisimman kattavaa dokumentaatiota.
Ja jokaisen tämän suuren järjestelmän yksikön on omaksuttava ja otettava käyttöön kyberturvallisuuskehykset. Lähtökohtasi tulisi olla näiden kehysten toimintalogiikan tutkiminen ja oppiminen.