Git Product home page Git Product logo

geomodel's Introduction

geomodel

Overview

geomodel is an extension to MozDef designed to trend authentication events over time for users, and identify potentially malicious account usage by comparing authentication events to an established GeoIP model for the user.

Over time, the system builds a model for a user containing known localities that user typically authenticates from. By default, a locality is defined as a region with a radius of 500km, but is configurable.

Authentication events that occur from an address Geo-located to a region that is outside the established localities for the user (e.g., not within 500km of any known login region) results in a new entry for the user, and a corresponding event notification in MozDef.

Events have associated severity values. If a new locality is identified for the user, the event has a severity of 1. Additionally, if the new locality was also in a new country, it has a severity of 2.

In addition to identifying new localities, geomodel will also analyze data for a given user to identify authentication occuring within a time window from locations that exceed a certain distance apart. For example, if authentication is seen occuring for a user from 2 locations that are over 2000km apart, and they occurred less than 4 hours apart, a severity 3 event will be created.

Authentication events are expired from the model after 30 days by default. This can be configured to increase or reduce the lifetime of data in the model for a user.

State index

geomodel uses an ES index to store state information across intervals and runs for each user. Each known principal/user is represented by a document in this index, and these documents are updated over time. ES is the only backend supported for state storage, however the interfaces have been abstracted so others can be added as required.

Plugins

geomodel uses a plugin system to indicate which events should be queried from the MozDef ES data store, and if required normalize the events. The plugins configuration option in the configuration file indicates the directory that contains the plugins.

Plugins are python scripts that read a JSON document on STDIN, parse the data if required, and return a geomodel.pluginResult JSON document via STDOUT. The JSON document that is sent on STDIN is a geomodel.pluginRequest struct, which essentially just contains the raw JSON events queried from MozDef.

Plugins contain certain comment lines that are parsed by geomodel when the plugin is loaded.

# @@ okta
# @T _type okta
# @T category okta

At least one @@ line is required, and at least one @T line is required. @@ indicates the name of the plugin generating data, and will be used in any MozDef events as required. @T adds a terms query to the plugin. In the previous example, geomodel will feed data into the plugin from MozDef that is returned using a query where _type matches okta, and category matches okta.

Once the plugins inform geomodel how to query MozDef, geomodel runs the queries and pipes and returned events into the plugins according to the state interval specified in the configuration file. The plugin results are returned to geomodel where the system incorporates the data into the existing ES state index, and creates any required events.

See plugins included in repo for examples.

Events and alerting

When a new location is identified for a user in the model, an event is generated and sent to MozDef. The following is an example summary field in this event.

[email protected] NEWLOCATION Taipei, Taiwan access from 118.160.1.187 (test)
[deviation:12.5] last activity was from San Francisco, United States (10371 km away)
within hour before

geomodel's People

Contributors

pwnbus avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.