UserAgent e Common Log Format — Con Log Injection

Vincenzo Tilotta
Nov 7 · 3 min read

Il mondo della sicurezza informatica spesso ha a che fare con soggetti sostanzialmente "ancorati" al passato per cui ci si trova a scontrarsi con problematiche che non interessano a nessuno ma che sfortunatamente celano degli "inganni" non proprio banali. Ci troviamo di fronte a sistemi di sicurezza o log reader che ovviamente seguono gli standard. Cosa succede se lo standard è fallato ? I log di sistema e applicativi sono a tutti gli effetti parte dell’applicazione, il problema è che non gli si da molta importanza. Proviamo a giocare con il log:

Una banale chiamata HTTP di tipo GET

Adesso immaginate solo per un momento come dovrebbe funzionare un sistema di log viewer/analisys al fine di mostrarvi o analizzare il log. Il punto in cui andremo ad intervenire è quello dello user-agent. Vi chiederete e quindi ? Quindi proveremo semplicemente a manipolare lo user agent e perché no anche la chiamata HTTP (non in tutti i web server è possibile farlo) al fine di fare a "fettine" il nostro log.

NOTA: per editare lo user agent ho provato ad utilizzare sistemi di pen testing ma spesso questi trasformano il carattere ' " ', vi consiglio di editarlo con https://chrome.google.com/webstore/detail/random-user-agent/einpaelgookohagofgnnkcfjbkkgepnp

Adesso andiamo a modificare lo user-agent in maniera tale da formare N colonne con separatore spazio, utilizzando questo (senza il primo doppio apice):

colonna1" colonna0 colonna-1 colonna-2

Ottenendo:

split delle colonne nel log

Ovviamente se il vostro sistema di log reader è "furbo" dovrebbe scartare le colonne successive aggiunte, in questo caso la perdita d'informazione farebbe escludere all'analisi il tentativo di injection. Il log sopra era di un web server per cui non ho potuto fare injection anche nella GET (fortunatamente). Lo stesso ragionamento andrebbe fatto anche con il vostro sistema di logging applicativo.

  • Cosa succede quando facciamo Injection nelle chiamate al fine di manipolare il log e non l'applicazione stessa ?
  • Cosa avrebbe fatto il vostro log reader nel caso in cui la GET sarebbe stata "splittata" come lo user agent ?

Rispondere alle domande sopra non è semplice, anche perché i contesti in cui ci si trova sono molteplici. Ovviamente se riuscite a fare passare il \n o endline alla fine dello useragent sarete anche in grado di creare un log "falso". In teoria potreste anche farlo senza \n e quindi replicare il log (camuffandolo) semplicemente con lo spazio.

Sicuramente i log così per come li conosciamo adesso sono poco strutturati per fare analisi accurate. Il tentativo di leggerli per strutturarli è solo un modo per mettere la testa sotto la sabbia. Applicazioni di qualunque genere dovrebbero scrivere i log dentro un DB o comunque un file strutturato (db vi sembra pesante per un web server ? sqlite!!!).

Buona giornata

Vincenzo

scienza

La pubblicazione di Medium per la scienza

Vincenzo Tilotta

Written by

Hacker, Programmatore e futuro regista!

scienza

scienza

La pubblicazione di Medium per la scienza

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade