Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Jedna od prednosti stručnjaka za sigurnost je rad s brojnim timovima. Nakon revizije, stručnjaci za sigurnost imat će priliku surađivati ​​s administratorima baza podataka i analitičarima. Da bi aplikacija radila ispravno i sigurno, ovi timovi pokušavaju riješiti sigurnosne propuste koji imaju zajedničku osnovu. Dijalozi između ovih timova pokreću neke probleme sa stvarnim IP-om.

Proxy i stvarni IP koncepti

Današnje web aplikacije izvode se na više poslužitelja aplikacija i sustava baza podataka. Zamislite dva aplikacijska poslužitelja koji dijele isti izvorni kod. Zahtjevi korisnika spremni su za ispunjavanje bilo kojeg od ovih poslužitelja ovisno o situaciji opterećenja. Mehanizam za uravnoteženje opterećenja, koji obrađuje HTTP zahtjeve ispred aplikacijskih poslužitelja, odlučuje koji će zahtjev proslijediti kojem aplikacijskom poslužitelju. Ovo postavlja veliko pitanje za sistemske administratore srednjeg softvera i programere softvera: koja je prava IP adresa korisnika?

Proxiji su zaduženi za prijenos podataka između dva sustava. Uravnoteživač opterećenja je mehanizam zadužen za proxy. Drugim riječima, samo jedan sustav komunicira i s korisnikom i s aplikacijskim poslužiteljem. Što se tiče mrežnog prometa, web A ili web B poslužitelji uvijek komuniciraju s IP adresom balansera opterećenja. Isto se može reći i za korisnike. Za sigurnosne stručnjake, balanseri opterećenja uzrokuju ozbiljne probleme u vremenskim napadima SQL injekcije. Ali glavni fokus ovdje je IP spoofing.

X-Forwarded-For i IP odnos

Razmotrite odnos između X-Forwarded-For, programera i međuprograma. Na primjer, recimo da je zadatak programera aplikacije zabilježiti sve aktivnosti, poput pokušaja netočne lozinke korisnika, s njihovim IP adresama. Najprije će programer odrediti IP adresu korisnika kada se HTTP zahtjev susreće s mogućnost koju pruža programski jezik koji koristi i pokušat će nastaviti koristiti te podatke u primjena.

Budući da će njegova IP adresa biti fiksna tijekom procesa razvoja, uvijek će vidjeti istu adresu tijekom testova jer općenito, korisnička računala u korporativne mreže rade sa statičkim IP-om preko MAC adrese. Jedinica će izvršiti neke testove prihvaćanja; međutim, s tim će biti problema. Testna jedinica proslijedit će ovaj problem programeru softvera.

U ovoj fazi programer može napisati kontroler u razvojnom okruženju i vidjeti kako se HTTP zahtjev prenosi aplikaciji u sirovom obliku, budući da svi imaju istu IP adresu. To će rezultirati radom s X-Forwarded-For.

Podaci zaglavlja pod nazivom X-Forwarded-For bit će poslana aplikacijskom poslužitelju. U ovoj fazi programer će vidjeti svoju IP adresu, koju kontrolira pomoću ipconfig, a ne balanser opterećenja koji vidi u zapisima. Mnogi programeri misle da mogu riješiti ovaj problem blokom koda poput ovog:

funkcijagetIPaddress() {
$ipKeys = niz(
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_PROSLIJEĐENO',
'HTTP_X_CLUSTER_CLIENT_IP',
'HTTP_FORWARDED_FOR', 'HTTP_PROSLIJEĐENO',
'REMOTE_ADDR'
);
za svakoga ($ipKeys kao $ključ) {
ako (array_key_exists($key, $_SERVER) pravi) {
za svakoga (eksplodirati(',', $_SERVER[$key]) kao $ip) {
$ip = trim($ip);
ako (validate_ip($ip)) {
povratak $ip;
}
}
}
}
povratakisset($_SERVER['REMOTE_ADDR'])? $_SERVER['REMOTE_ADDR']: lažno;
}

To neće biti dovoljno—programer mora provjeriti je li dolazna vrijednost važeća IP adresa.

Sve gore pripadalo je dijelu kojim se bavi programer. Ali da bi aplikacija radila ispravno i sigurno, timovi — rade zajedno u teoriji, ali u stvarnosti, na ekstremnim točkama jedna od druge—pokušajte se nositi sa sigurnosnim propustima koje imaju a zajednička osnova. Sada pokušajte pogledati problem iz perspektive osobe odgovorne za konfiguraciju balansera opterećenja.

Administratori sustava mogu pomisliti da programeri bilježe informacije kao što je X-Forwarded-For jer se podacima u HTTP zahtjevu ne može vjerovati. Ti administratori često prenose X-Forwarded-For; međutim, oni također prenose izvornu TCP adresu sustava koji je poslao zahtjev kao drugu vrijednost zaglavlja. True-Client-IP struktura je dobar primjer za to.

Kada spojite sve te stvari zajedno, dvije različite jedinice slijede različite staze za isti problem, poznat kao lažiranje IP-a klijenta. Rezultat je kritičan problem u kojem nikakvo IP bilježenje i autorizacija temeljena na IP-u neće funkcionirati.

Kako se lažiranje IP-a klijenta otkriva u penetracijskim testovima?

Većina testera penetracije koristi Firefox za svoje sigurnosne provjere. Oni konfiguriraju Firefox s jednostavnim dodatkom, X-Forwarded-For: 127.0.0.1 za sve HTTP zahtjeve. I tako se povećava mogućnost otkrivanja takvih ranjivosti u svim penetracijskim testovima. Obavljanje revizije prema OWASP popis za provjeru osigurava provjeru takvih ranjivosti. Međutim, da biste otkrili ranjivost X-Forwarded-For, potreban vam je modul u aplikaciji koji prikazuje vašu IP adresu ili poduzete radnje.

Kako riješiti ranjivost X-Forwarded-For

Organizacije trebaju obavezni dokument o sigurnom razvoju aplikacija za sve softverske timove i vanjske tvrtke. Na primjer, ako trebate korisničku IP adresu, tvrtka bi trebala planirati unaprijed i postaviti pravilo o informacijama zaglavlja koje će ovdje koristiti. Inače će različiti timovi proizvesti različita rješenja. Ako se takva situacija ne može riješiti, na scenu će doći aplikacije vanjskih izvođača, što otežava mjerenje izvornih kodova. Općenito, poduzeća ne žele slijediti takav put.

Ali da biste riješili ovaj problem, možete koristiti sljedeće F5 pravilo:

kada HTTP_REQUEST {
HTTP:: zaglavlje uklonite X-Forwarded-Za
HTTP:: umetanje zaglavlja X-Forwarded-Za [IP:: remote_addr]
}

Ovo uklanja polje X-Forwarded-For u HTTP zahtjevu iz vanjskog svijeta. Zatim šalje zahtjev dodavanjem IP adrese sustava koji mu je poslao zahtjev. Na taj način se stvara pouzdan popis za softver koji djeluje prema X-Forwarded-For.

Ukratko, najveći cilj ovdje je izvršiti neke provjere HTTP zahtjeva i stvoriti pouzdano okruženje. Gornji blok koda je dobar primjer koji možete koristiti za ovo.

Okviri kibernetičke sigurnosti i dokumentacija za poduzeća

Jedinice koje se čine neovisne jedna o drugoj zapravo su dijelovi cjeline. Zato sve mora raditi sustavno. Unaprijed određena pravila moraju se primjenjivati ​​između svake jedinice. Ako se takav radni sustav ne usvoji, mogu se pojaviti mnogi problemi kao što je ranjivost X-Forwarded-For. Za to je potrebno unaprijed sve razmotriti i koristiti što opširniju dokumentaciju.

I svaka jedinica u ovom velikom sustavu mora usvojiti i implementirati okvire kibernetičke sigurnosti. Vaša početna točka trebala bi biti istraživanje i učenje logike rada ovih okvira.