sql >> Databáze >  >> NoSQL >> MongoDB

Preemptivní zabezpečení s protokolováním auditu pro MongoDB

Zabezpečení databáze je široké téma, které sahá od preventivních měření až po zamezení vstupu nežádoucích návštěvníků. I když byste byli schopni plně zabezpečit své servery MongoDB, přesto byste rádi věděli, zda se někdo pokusil proniknout do vašeho systému. A pokud se jim podaří prolomit vaše zabezpečení a nainstalovat hack výkupného MongoDB, budete potřebovat auditní stopu pro pitvu nebo pro přijetí nových preventivních opatření. Protokol auditu vám umožní sledovat každého, kdo se pokouší přihlásit, a zjistit, co udělal ve vašem systému.

Verze MongoDB Enterprise obsahuje možnost povolit protokol auditu, ale verze pro komunitu tuto funkci postrádá. Společnost Percona vytvořila vlastní funkci protokolování auditu na svém serveru Percona odvozeném od MongoDB pro MongoDB. Přístupy MongoDB a Percona se od sebe liší a my vám vysvětlíme, jak je oba nakonfigurovat a používat.

Protokolování auditu MongoDB

Protokol auditu MongoDB se snadno nastavuje:chcete-li povolit protokolování auditu do souboru JSON, jednoduše přidejte do svého konfiguračního souboru následující sekci a restartujte MongoDB:

auditLog:
   destination: file
   format: JSON
   path: /var/lib/mongodb/auditLog.json

MongoDB podporuje soubor, konzolu a syslog jako cíle. Pro formáty souborů existují dvě možnosti:JSON a BSON. V JSON vypadají řádky protokolu auditu podobně jako toto:

{ "atype" : "authCheck", "ts" : { "$date" : "2017-02-15T22:20:08.322-0000" }, "local" : { "ip" : "127.0.0.1", "port" : 27017 }, "remote" : { "ip" : "127.0.0.1", "port" : 63357 }, "users" : [], "roles" : [], "param" : { "command" : "update", "ns" : "test.inserttest", "args" : { "update" : "preauth_case", "updates" : [ { "q" : { "createdByUserId" : -2 }, "u" : { "$set" : { "statusCode" : "Update" } }, "multi" : false, "upsert" : false } ], "ordered" : true } }, "result" : 0 }

Výše uvedená konfigurace by umožnila protokol auditu pro každou akci provedenou kterýmkoli uživatelem vašeho systému. Pokud máte vysokou souběžnost, dramaticky by se snížil výkon vašeho clusteru MongoDB. Naštěstí je zde možnost filtrovat události, které mají být protokolovány.

Filtry pro protokolování auditu lze umístit na typ dotazu, dotazování uživatele/role nebo na kolekci, která je dotazována. Dokumentace k protokolování auditu na MongoDB je velmi široká a dlouhá s mnoha příklady. Níže uvedeme některé z nejdůležitějších příkladů.

Ověřování proti konkrétní sbírce:

    filter: '{ atype: "authenticate", "param.db": "test" }'

Protokol pro více typů auditu:

    filter: '{ atype: { $in [ "update", "delete" ]}, "param.db": "test" }'

Zaprotokolovat všechny kontroly autentizace pro vložení/aktualizace/odstranění v konkrétní kolekci:

    filter: '{ atype: "authCheck", "param.ns": "test.orders", "param.command": { $in: [ "find", "insert", "delete", "update", "findandmodify" ] } }'

Jak můžete vidět, filtry mohou být poměrně flexibilní a vy byste mohli filtrovat zprávy, které potřebujete pro svůj audit trail.

Somenines Staňte se MongoDB DBA – Uvedení MongoDB do produkce Zjistěte, co potřebujete vědět, abyste mohli nasadit, monitorovat, spravovat a škálovat MongoDBDdownload zdarma

Server Percona pro protokolování auditu MongoDB

Protokolování auditu serveru Percona pro MongoDB je omezeno na soubor JSON. Většina uživatelů se bude přihlašovat pouze k souborům JSON, ale není jasné, zda Percona v budoucnu přidá další možnosti protokolování.

V závislosti na verzi serveru Percona pro MongoDB se může vaše konfigurace lišit. V okamžiku psaní mají všechny verze následující syntaxi:

audit:
   destination: file
   format: JSON
   path: /var/lib/mongodb/auditLog.json

Tento rozdíl v konfiguraci byl však nedávno vyřešen, ale stále musí být uvolněn. Po vydání by se měl znovu řídit direktivou MongoDB auditLog:

auditLog:
   destination: file
   format: JSON
   path: /var/lib/mongodb/auditLog.json

Formát Percona je mírně odlišný:

{ "atype" : "authenticate", "ts" : { "$date" : { "$numberLong" : "1487206721903" } }, "local" : { "host" : "n3", "port" : 27017 }, "remote" : { "host" : "172.16.140.10", "port" : 50008 }, "users" : [ { "user" : "admin", "db" : "admin" } ], "params" : { "user" : "admin", "db" : "admin", "mechanism" : "SCRAM-SHA-1" }, "result" : 0 }

Na rozdíl od MongoDB protokolování všeho se Percona rozhodla protokolovat pouze důležité příkazy. Soudě podle zdroje pluginu Percona audit jsou podporovány následující dotazy:autentizace, vytvoření/aktualizace/smazání uživatelů, přidání/aktualizace/odebrání rolí, vytvoření/vypuštění databáze/indexu a většina důležitých příkazů správce.

Zdá se také, že filtrování protokolu auditu Percona Server pro MongoDB nedodržuje stejný standard jako MongoDB. Je docela nejasné, jaká je přesná syntaxe a možnosti filtru, protože dokumentace Percona je o tom velmi stručná.

Povolení auditlogu bez filtrování by vám poskytlo více než dost záznamů v souboru protokolu. Odtud můžete filtr zúžit, protože se řídí syntaxí JSON položek protokolu.

Využití protokolu auditu

Abyste si to usnadnili, může být nejlepší vložit protokol auditu do rámce pro analýzu protokolů. Zásobník ELK je vynikající prostředí pro provádění analýz a umožňuje vám poměrně snadno přejít na podrobnější úrovně. Použití mapovače pole by vám dokonce umožnilo provést auditní stopu uvnitř ELK.

Jak je popsáno v úvodu, můžeme protokol auditu použít pro různé bezpečnostní účely. Nejzřetelnější je, když to potřebujete jako referenci během pitvy. Protokol auditu MongoDB poskytuje podrobný přehled o tom, co se přesně stalo. Auditní deník Percona obsahuje o něco méně informací, ale pro většinu pitev by měl stačit. Použití protokolu auditu pro pitvu je skvělé, i když bychom tomu problému raději zabránili.

Dalším účelem protokolu auditu je vidět probíhající trendy a na určitou zprávu protokolu auditu můžete nastavit pasti. Dobrým příkladem by bylo zkontrolovat počet (neúspěšných) pokusů o autentizaci a pokud překročí určitou hranici, jednat podle toho. V závislosti na situaci se mohou přijatá opatření lišit. Jednou akcí by mohlo být automatické zablokování IP adresy, ze které požadavky přicházejí, ale v jiném případě můžete s uživatelem konzultovat, proč bylo heslo zapomenuto. Opravdu záleží na případu a prostředí, ve kterém pracujete.

Dalším pokročilým preventivním měřením by bylo použití MongoDB jako honeypotu a využití protokolu auditu k zachycení nežádoucích uživatelů. Stačí odhalit MongoDB a umožnit komukoli připojit se k vašemu serveru MongoDB. Poté pomocí protokolu auditu zjistěte, co uživatelé udělají, pokud budou moci dělat věci nad rámec jejich běžných pravomocí, a v případě potřeby je zablokujte. Většina lidí raději volí jednodušší než obtížnou cestu, takže honeypot by mohl odrazit útok a hacker se přesune k dalšímu cíli.

Závěr

Kromě vysvětlení, jak nastavit protokol auditu pro MongoDB Enterprise a Percona Server pro MongoDB, jsme také vysvětlili, co byste mohli potenciálně dělat se zaznamenanými daty v protokolu auditu.

Ve výchozím nastavení ClusterControl nepovolí protokol auditu, ale je relativně snadné jej povolit pro celý cluster pomocí našeho Config Manageru. Před nasazením nového clusteru jej můžete také povolit v konfiguračních šablonách.

Šťastné shlukování!


  1. Autentizace pomocí Spring Security a MongoDB

  2. Vytvoření nové sady z řady Sorted Set v Redis

  3. Dotaz na Mongodb na měsíc, den, rok... data a času

  4. Jak uložit a načíst slovník pomocí redis