JVM Logging Smiing

1. Oversikt

I denne raske artikkelen vil vi utforske et av de vanligste sikkerhetsproblemene i JVM verden - Loggsmiing. Vi viser også et eksempel på teknikk som kan beskytte oss mot dette sikkerhetsproblemet.

2. Hva er logging smiing?

I følge OWASP, logging smiing er en av de vanligste angrepsteknikkene.

Sikkerhetsproblemer med loggsmiing oppstår når data kommer inn i et program fra en ikke-klarert kilde eller dataene skrives til en applikasjons- / systemloggfil av en eller annen ekstern enhet.

Iht OWASP retningslinjer logging smiing eller injeksjon er en teknikk for å skrive uvalidert brukerinngang til loggfiler slik at den kan tillate en angriper å smi loggoppføringer eller injisere skadelig innhold i loggene.

Enkelt sagt, ved å logge smiing, prøver en angriper å legge til / endre postinnhold ved å utforske sikkerhets smutthull i applikasjonen.

3. Eksempel

Tenk på et eksempel der en bruker sender inn en betalingsforespørsel fra nettet. Fra søknadsnivå, når denne forespørselen blir behandlet, logges en oppføring med beløpet:

privat slutt Logger logger = LoggerFactory.getLogger (LogForgingDemo.class); offentlig ugyldig addLog (strengbeløp) {logger.info ("Beløp kreditert = {}", beløp); } public static void main (String [] args) {LogForgingDemo demo = new LogForgingDemo (); demo.addLog ("300"); }

Hvis vi ser på konsollen, vil vi se noe slikt:

web - 2017-04-12 17: 45: 29,978 [main] INFO com.baeldung.logforging.LogForgingDemo - Beløp kreditert = 300

Anta at en angriper gir innspill som “\ N \ nweb - 2017-04-12 17: 47: 08 957 [hoved] INFO Beløpet reversert vellykket”, da vil loggen være:

web - 2017-04-12 17: 52: 14,124 [main] INFO com.baeldung.logforging. LogForgingDemo - Beløp kreditert = 300 nett - 2017-04-12 17: 47: 08,957 [main] INFO Beløpet reversert

Angriperen har med vilje vært i stand til å opprette en forfalsket oppføring i applikasjonsloggen som ødelegger verdien for loggene og forvirrer eventuelle revisjonstypeaktiviteter i fremtiden. Dette er essensen av tømmerstokk.

4. Forebygging

Den mest åpenbare løsningen er ikke å skrive noen brukerinndata i loggfiler.

Men det er kanskje ikke mulig under alle omstendigheter, ettersom brukeroppgitte data er nødvendige for feilsøking eller revisjon av applikasjonsaktiviteten i fremtiden.

Vi må bruke et annet alternativ for å takle denne typen scenario.

4.1. Innfør validering

En av de enkleste løsningene er alltid å validere inngangen før du logger. Et problem med denne tilnærmingen er at vi må validere mye data ved kjøretid som vil påvirke den generelle systemytelsen.

Hvis validering mislykkes, vil ikke dataene også logges og gå tapt for alltid, noe som ofte ikke er et akseptabelt scenario.

4.2. Databaselogging

Et annet alternativ er å logge inn dataene i databasen. Det er sikrere enn den andre tilnærmingen siden ‘\ N ' eller newline betyr ingenting for denne sammenhengen. Dette vil imidlertid vekke en annen ytelsesproblem siden et stort antall databaseforbindelser vil bli brukt til å logge brukerdata.

Dessuten introduserer denne teknikken en annen sikkerhetsproblem - nemlig SQL Injection. For å takle dette kan det hende vi ender med å skrive mange ekstra kodelinjer.

4.3. ESAPI

Ved hjelp av ESAPI er den mest delte og tilrådelige teknikken i henhold til denne sammenhengen. Her blir hver brukerdata kodet før du skriver inn i loggene. ESAPI er et open source API tilgjengelig fra OWASP:

 org.owasp.esapi esapi 2.1.0.1 

Den er tilgjengelig i Central Maven Repository.

Vi kan kode dataene ved hjelp av ESAPI‘S Koder grensesnitt:

offentlig strengkode (strengmelding) {message = message.replace ('\ n', '_') .place ('\ r', '_') .place ('\ t', '_'); melding = ESAPI.encoder (). encodeForHTML (melding); returmelding; }

Her har vi laget en innpakningsmetode som erstatter alle vognreturer og linjefôr med understrekninger og koder for den modifiserte meldingen.

I det tidligere eksemplet, hvis vi koder meldingen ved hjelp av denne innpakningsfunksjonen, bør loggen se slik ut:

web - 12-04-2017 18: 15: 58,528 [main] INFO com.baeldung.logforging. LogForgingDemo - Kredittbeløp = 300 __web - 2017-04-12 17: 47: 08,957 [main] INFO Beløpet tilbakeført

Her er det ødelagte strengfragmentet kodet og kan lett identifiseres.

En gang viktig poeng å merke seg er at å bruke ESAPI vi trenger å inkludere ESAPI. Eiendommer filen i klassestien ellers ESAPI API vil kaste et unntak ved kjøretid. Den er tilgjengelig her.

5. Konklusjon

I denne raske opplæringen lærte vi om logging og teknikker for å overvinne denne sikkerhetsproblemet.

Som alltid er hele kildekoden tilgjengelig på over på GitHub.


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