Kovanie guľatiny JVM

1. Prehľad

V tomto rýchlom článku sa pozrieme na jeden z najbežnejších bezpečnostných problémov v JVM svet - Kovanie kmeňov. Ukážeme si tiež ukážkovú techniku, ktorá nás môže chrániť pred týmto bezpečnostným problémom.

2. Čo je kovanie guľatiny?

Podľa OWASP, kovanie guľatiny je jednou z najbežnejších útočných techník.

Zraniteľnosti pri vytváraní protokolu sa vyskytujú, keď údaje vstupujú do aplikácie z nedôveryhodného zdroja alebo ak údaje externá entita zapisuje do súboru denníka aplikácie / systému.

Podľa OWASP pokyny na falšovanie alebo vkladanie protokolov je technika zápisu neplatných vstupov používateľov do súborov protokolov, aby útočníkovi umožnila falšovať položky protokolu alebo vložiť do protokolov škodlivý obsah.

Jednoducho povedané, pomocou kovania protokolov sa útočník pokúsi pridať / upraviť obsah záznamu preskúmaním bezpečnostných medzier v aplikácii.

3. Príklad

Zvážte príklad, keď používateľ zadá žiadosť o platbu z webu. Na úrovni aplikácie sa po spracovaní tejto žiadosti zaznamená jeden záznam s čiastkou:

súkromný konečný logger logger = LoggerFactory.getLogger (LogForgingDemo.class); public void addLog (suma reťazca) {logger.info ("pripísaná suma = {}", suma); } public static void main (String [] args) {LogForgingDemo demo = nový LogForgingDemo (); demo.addLog ("300"); }

Keď sa pozrieme na konzolu, uvidíme niečo také:

web - 2017-04-12 17:45: 29 978 [hlavné] INFO com.baeldung.logforging.LogForgingDemo - pripísaná suma = 300

Teraz predpokladajme, že útočník poskytne vstup ako „\ N \ nweb - 2017-04-12 17:47: 08 957 [hlavné] INFO Suma bola úspešne obrátená“, potom bude protokol:

web - 2017-04-12 17: 52: 14,124 [hlavné] INFO com.baeldung.logforging. LogForgingDemo - pripísaná suma = 300 web - 2017-04-12 17:47: 08 957 [hlavný] INFO Suma bola úspešne vrátená

Útočník bol úmyselne schopný vytvoriť sfalšovaný záznam v protokole aplikácie, ktorý poškodil hodnotu protokolov a zamenil akékoľvek činnosti typu auditu v budúcnosti. To je podstata kovania guľatiny.

4. Prevencia

Najzrejmejším riešením je nezapisovať žiadny vstup používateľa do súborov denníka.

To však nemusí byť možné za každých okolností, pretože údaje poskytnuté používateľom sú potrebné na ladenie alebo audit aktivity aplikácie v budúcnosti.

Na riešenie tohto druhu scenára musíme použiť inú alternatívu.

4.1. Zaviesť validáciu

Jedným z najjednoduchších riešení je vždy overenie vstupu pred prihlásením. Jedným z problémov tohto prístupu je, že za behu budeme musieť overiť veľa údajov, čo ovplyvní celkový výkon systému.

Ak tiež overenie zlyhá, údaje sa nebudú zaznamenávať a navždy sa stratia, čo často nie je prijateľný scenár.

4.2. Protokolovanie databázy

Ďalšou možnosťou je prihlásiť sa do databázy. To je bezpečnejšie ako odvtedy iný prístup „\ N“ alebo newline pre tento kontext nič neznamená. To však vyvolá ďalšie obavy z výkonu, pretože na zaznamenávanie údajov používateľov sa použije obrovské množstvo databázových pripojení.

Táto technika navyše zavádza ďalšiu bezpečnostnú chybu - a to SQL Injection. Aby sme to zvládli, mohli by sme skončiť s písaním mnohých ďalších riadkov kódu.

4.3. ESAPI

Použitím ESAPI je najviac zdieľaná a odporúčaná technika v tomto kontexte. Tu sú všetky údaje používateľa zakódované pred zápisom do protokolov. ESAPI je open source API dostupné z OWASP:

 org.owasp.esapi esapi 2.1.0.1 

Je k dispozícii v centrálnom úložisku Maven.

Údaje môžeme kódovať pomocou ESAPI‘S Kódovač rozhranie:

public String encode (reťazcová správa) {message = message.replace ('\ n', '_') .replace ('\ r', '_') .replace ('\ t', '_'); message = ESAPI.encoder (). encodeForHTML (správa); spätná správa; }

Tu sme vytvorili jednu obalovú metódu, ktorá nahradí všetky návraty vozíka a posunutie riadkov podčiarknutiami a upravenú správu zakóduje.

V predchádzajúcom príklade, ak kódujeme správu pomocou tejto funkcie wrapper, protokol by mal vyzerať asi takto:

web - 2017-04-12 18:15: 58 528 [hlavné] INFO com.baeldung.logforging. LogForgingDemo - pripísaná suma = 300 __web - 2017-04-12 17:47: 08 957 [hlavné] INFO Suma bola úspešne vrátená

Tu je poškodený fragment reťazca zakódovaný a dá sa ľahko identifikovať.

Akonáhle je dôležité si uvedomiť, že je potrebné použiť ESAPI musíme zahrnúť ESAPI.vlastnosti súbor v triede, inak ESAPI Rozhranie API vyvolá za behu výnimku. Je k dispozícii tu.

5. Záver

V tomto rýchlom výučbe sme sa dozvedeli o kovaní protokolov a technikách na prekonanie tohto bezpečnostného problému.

Celý zdrojový kód je ako vždy k dispozícii na stránkach GitHub.


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