Kovanje dnevnika JVM

1. Pregled

U ovom kratkom članku istražit ćemo jedan od najčešćih sigurnosnih problema u sustavu Windows JVM svijet - Kovanje trupaca. Pokazat ćemo i primjer tehnike koja nas može zaštititi od ove sigurnosne brige.

2. Što je kovanje trupaca?

Prema OWASP, kovanje trupaca jedna je od najčešćih napadačkih tehnika.

Ranjivosti pri kovanju dnevnika javljaju se kad podaci uđu u aplikaciju iz nepouzdanog izvora ili ih neki vanjski entitet upiše u datoteku dnevnika aplikacije / sustava.

Kao i po OWASP smjernice Kovanje ili ubrizgavanje dnevnika tehnika je pisanja neovlaštenog korisničkog unosa u datoteke dnevnika, tako da napadaču može omogućiti krivotvorenje unosa u dnevnik ili ubrizgavanje zlonamjernog sadržaja u zapisnike.

Jednostavno rečeno, kovanjem dnevnika napadač pokušava dodati / izmijeniti sadržaj zapisa istražujući sigurnosne rupe u aplikaciji.

3. Primjer

Razmotrimo primjer gdje korisnik predaje zahtjev za plaćanje s weba. S razine aplikacije, nakon obrade ovog zahtjeva, zabilježit će se jedan unos s iznosom:

privatni konačni logger logger = LoggerFactory.getLogger (LogForgingDemo.class); public void addLog (iznos niza) {logger.info ("Pripisani iznos = {}", iznos); } javna statička void glavna (String [] args) {LogForgingDemo demo = new LogForgingDemo (); demo.addLog ("300"); }

Ako pogledamo konzolu, vidjet ćemo otprilike ovako:

web - 2017-04-12 17: 45: 29,978 [glavna] INFO com.baeldung.logforging.LogForgingDemo - Pripisani iznos = 300

Pretpostavimo sada da napadač unese kao “\ N \ nweb - 2017-04-12 17: 47: 08,957 [glavna] INFO Iznos je uspješno preokrenut”, tada će zapisnik biti:

web - 2017-04-12 17: 52: 14,124 [glavna] INFO com.baeldung.logforging. LogForgingDemo - Pripisani iznos = 300 web - 2017-04-12 17: 47: 08,957 [glavna] INFO Iznos uspješno poništen

Namjerno je napadač uspio stvoriti krivotvoreni unos u zapisniku aplikacija koji je oštetio vrijednost dnevnika i zbunio sve aktivnosti tipa revizije u budućnosti. To je bit kovanja trupaca.

4. Prevencija

Najočitije rješenje je ne upisivanje korisničkog unosa u datoteke dnevnika.

Ali, to možda neće biti moguće u svim okolnostima jer su podaci dani korisniku neophodni za otklanjanje pogrešaka ili reviziju aktivnosti aplikacije u budućnosti.

Moramo se poslužiti nekom drugom alternativom za rješavanje ove vrste scenarija.

4.1. Uvesti provjeru valjanosti

Jedno od najlakših rješenja je uvijek provjera valjanosti unosa prije prijave. Jedan od problema s ovim pristupom je taj što ćemo tijekom provjere valjanosti morati provjeriti puno podataka što će utjecati na ukupnu izvedbu sustava.

Također, ako provjera valjanosti ne uspije, podaci se neće evidentirati i zauvijek će se izgubiti, što često nije prihvatljiv scenarij.

4.2. Zapisivanje baze podataka

Druga mogućnost je prijava podataka u bazu podataka. To je sigurnije od drugog pristupa od tada "\ N" ili newline ovom kontekstu ne znači ništa. Međutim, ovo će pokrenuti još jednu zabrinutost zbog performansi, jer će se velik broj veza baza podataka koristiti za bilježenje korisničkih podataka.

Štoviše, ova tehnika uvodi još jednu sigurnosnu ranjivost - naime SQL ubrizgavanje. Da bismo se time pozabavili, mogli bismo na kraju napisati mnogo dodatnih redaka koda.

4.3. ESAPI

Koristeći ESAPI je najviše dijeljena i najprikladnija tehnika u ovom kontekstu. Ovdje se svaki korisnički podatak kodira prije upisivanja u zapisnike. ESAPI je API otvorenog koda dostupan od OWASP:

 org.owasp.esapi esapi 2.1.0.1 

Dostupan je u središnjem spremištu Maven.

Podatke možemo kodirati pomoću ESAPI‘S Davač sučelje:

javno kodiranje niza (niz poruka) {message = message.replace ('\ n', '_') .replace ('\ r', '_') .replace ('\ t', '_'); poruka = ​​ESAPI.encoder (). encodeForHTML (poruka); povratna poruka; }

Ovdje smo stvorili jednu metodu omotača koja zamjenjuje sve povratke nosača i uvlačenje linija podvlakama i kodira modificiranu poruku.

U ranijem primjeru ako kodiramo poruku pomoću ove funkcije omotača, dnevnik bi trebao izgledati otprilike ovako:

web - 2017-04-12 18: 15: 58,528 [glavna] INFO com.baeldung.logforging. LogForgingDemo - Pripisani iznos = 300 __web - 2017-04-12 17: 47: 08,957 [glavna] INFO Iznos uspješno poništen

Ovdje je oštećeni fragment niza kodiran i može se lako prepoznati.

Jednom važno napomenuti je da se koristi ESAPI moramo uključiti ESAPI.svojstva datoteka u stazi razreda, inače ESAPI API će izbaciti iznimku tijekom izvođenja. Dostupno je ovdje.

5. Zaključak

U ovom smo brzom vodiču saznali o kovanju dnevnika i tehnikama za prevladavanje ove sigurnosne brige.

Kao i uvijek, puni izvorni kod dostupan je preko GitHub-a.


$config[zx-auto] not found$config[zx-overlay] not found