Coder Social home page Coder Social logo

csirtgadgets / bearded-avenger Goto Github PK

View Code? Open in Web Editor NEW
179.0 31.0 52.0 1.44 MB

CIF v3 -- the fastest way to consume threat intelligence

Home Page: https://csirtgadgets.com/collective-intelligence-framework

License: Mozilla Public License 2.0

Python 88.29% Shell 5.91% Makefile 1.13% Ruby 0.80% Tcl 0.21% HTML 3.51% Dockerfile 0.14%
security threatintel threat-hunting threat-sharing cif cifv3

bearded-avenger's Introduction

Getting Started

Do NOT try to install from the master repo.

For installation instructions and various unix distribution guides, use the DeploymentKit.

https://github.com/csirtgadgets/bearded-avenger-deploymentkit/wiki

Integrations

Several integrations, plugins, and extensions have been written to bridge CIFv3 with other tools. Here are some examples to consider building an ecosystem:

Getting Help

Getting Involved

There are many ways to get involved with the project. If you have a new and exciting feature, or even a simple bugfix, simply fork the repo, create some simple test cases, generate a pull-request and give yourself credit!

If you've never worked on a GitHub project, this is a good piece for getting started.

Getting Started with Development

https://github.com/csirtgadgets/bearded-avenger/wiki

COPYRIGHT AND LICENSE

Copyright (C) 2017 the CSIRT Gadgets Foundation

Free use of this software is granted under the terms of the Mozilla Public License (MPLv2).

bearded-avenger's People

Contributors

amerck avatar amesbury avatar andy1ee11o2 avatar anthonyvallee avatar bart-o avatar ch3k1 avatar chusta avatar ckrez avatar deanpemberton avatar dominotree avatar fl0x2208 avatar giovino avatar irenad avatar jessebowling avatar justinazoff avatar mdavis332 avatar meetzoo avatar sfinlon avatar snyk-bot avatar vladoros avatar wesyoung avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bearded-avenger's Issues

debian packaging

  • clean up pyinstaller code, create binaries
  • edit makefile to create debian packages based on binaries (somewhat done)
  • create debian ppa
  • create script to publish packages to ppa on release

https://packagecloud.io/

cache feeds differently than in v2

in cifv2 we cache a feed appended with the feed name in the feed config. This causes us to download the same feed multiple times if we were to do something like this:

dga-feed-cryptolocker:
  remote: http://osint.bambenekconsulting.com/feeds/dga-feed.txt
  pattern: ^([^,]+)\,Domain used by (Cryptolocker[^,]+)\,([^,]+)\,([^\r\n]+)
dga-feed-p2p-gameover-zeus:
  remote: http://osint.bambenekconsulting.com/feeds/dga-feed.txt
  pattern: ^([^,]+)\,Domain used by (P2P Gameover Zeus[^,]+)\,([^,]+)\,([^\r\n]+)

This results in dga-feed.txt downloaded multiple times:

ls -lh /var/smrt/cache/osint.bambenekconsulting.com-dga*
-rw-rw-r-- 1 cif cif 83M Sep 20 20:15 /var/smrt/cache/osint.bambenekconsulting.com-dga-feed-cryptolocker
-rw-rw-r-- 1 cif cif 83M Sep 20 20:15 /var/smrt/cache/osint.bambenekconsulting.com-dga-feed-p2p-gameover-zeus

In v3 let's attempt to only download dga-feed.txt one time, cache it and then parsed the single cached feed.

cif-smrt feature: manipulate parsed data

How hard would it be to be able manipulate parsed feed data before mapping it to a cif parameter. Here's an example:

cybercrime rss feed:

<item>
<title>datatransfer.0xhost.net/25asejd14c2f5r7d4e5f63g2v5d41s/adsf544s2d5f778rg45j6hv32bn41h5j4f/solar/index.php?login</title>
<link>http://cybercrime-tracker.net/index.php</link>
<pubDate>22-07-2015</pubDate>
<description>Solar</description>
</item>

The date format is not one DateTime::Format::DateParse; likes.

It would be neat to be able to do something like this on parsed data:

pubDate:
  pattern: '(\S+)'
  subparse: (\d{1,2})-(\d{1,2})-(\d{4})
  new: $3-$2-$1
  values: lasttime

Multiple failures when following quickstart guide

  • Failure because pip not present
  • Failure pip install -r requirements.txt not run with sudo, Python.h unavailable

Solution:
sudo apt-get install python-pip python-dev
sudo pip install -r requirements.txt

cif client output plugin to a local CIF instance

Create the ability for the cif client to pull a feed from one CIF server and push that data into another CIF server (localhost). Example command:

cif -C org_a_cif.yml --feed fqdn --tags botnet -f cif_api --recipient-config localhost_cif.yml

aws deployment testing

  • build aws deployment scripts
  • create live api-testing scripts
    • populate database
    • test ping / query / submission

archiving older data

  • find and merge older data (configurable) using firsttime/lasttime/reporttime into weekly or monthly using count
  • should run on router? (router should figure out if something's been merged or not if multiple routers are running and merging data)

expand out arrow parser

2016-03-28 18:55:42,289 - DEBUG - cif.smrt.parser[66] - {"additional_data": null, "altid": "safebrowsing.clients.google.com", "altid_tlp": "white", "application": null, "asn": null, "asn_desc": null, "cc": null, "city": null, "confidence": 7, "description": "attackpage", "firsttime": "2016-03-28T22:55:41.916676Z", "group": "everyone", "indicator": "globalnursesonline.com", "itype": "fqdn", "lasttime": "1970-08-22T08:05:04.000000Z", "latitude": null, "longitude": null, "peers": null, "portlist": null, "protocol": null, "provider": "malwaredomains.com", "reference": null, "reference_tlp": null, "reporttime": "2016-03-28T22:55:41.916659Z", "tags": ["exploit", "malware"], "tlp": "green"}
2016-03-28 18:55:42,289 - DEBUG - cif.smrt.parser[58] - {'confidence': 7, 'tlp': 'green', 'description': 'attackpage', 'tags': ['exploit', 'malware'], 'altid_tlp': 'white', 'altid': 'safebrowsing.clients.google.com', 'indicator': 'gsiworld.neostrada.pl', 'provider': 'malwaredomains.com', 'lasttime': '20160304'}
2016-03-28 18:55:42,289 - DEBUG - cif.smrt.parser[66] - {"additional_data": null, "altid": "safebrowsing.clients.google.com", "altid_tlp": "white", "application": null, "asn": null, "asn_desc": null, "cc": null, "city": null, "confidence": 7, "description": "attackpage", "firsttime": "2016-03-28T22:55:41.916676Z", "group": "everyone", "indicator": "gsiworld.neostrada.pl", "itype": "fqdn", "lasttime": "1970-08-22T08:05:04.000000Z", "latitude": null, "longitude": null, "peers": null, "portlist": null, "protocol": null, "provider": "malwaredomains.com", "reference": null, "reference_tlp": null, "reporttime": "2016-03-28T22:55:41.916659Z", "tags": ["exploit", "malware"], "tlp": "green"}
2016-03-28 18:55:42,289 - DEBUG - cif.smrt.parser[58] - {'confidence': 7, 'tlp': 'green', 'description': 'attackpage', 'tags': ['exploit', 'malware'], 'altid_tlp': 'white', 'altid': 'safebrowsing.clients.google.com', 'indicator': 'guy-ouellette.net', 'provider': 'malwaredomains.com', 'lasttime': '20160304'}
2016-03-28 18:55:42,289 - DEBUG - cif.smrt.parser[66] - {"additional_data": null, "altid": "safebrowsing.clients.google.com", "altid_tlp": "white", "application": null, "asn": null, "asn_desc": null, "cc": null, "city": null, "confidence": 7, "description": "attackpage", "firsttime": "2016-03-28T22:55:41.916676Z", "group": "everyone", "indicator": "guy-ouellette.net", "itype": "fqdn", "lasttime": "1970-08-22T08:05:04.000000Z", "latitude": null, "longitude": null, "peers": null, "portlist": null, "protocol": null, "provider": "malwaredomains.com", "reference": null, "reference_tlp": null, "reporttime": "2016-03-28T22:55:41.916659Z", "tags": ["exploit", "malware"], "tlp": "green"}

api: feeds route

feeds logic should go from code to the API so you can do things like:

/feeds?itype=ipv4&confidence=35

and it does the timestamp logic for you vs query. get this out of the client code make them easier to maintain.

problem: confidence scale is not documented

  1. this is probably informational, it's usually adjacent to a primary indicator
    1. could be the MX or NS record of a FQDN name
  2. i trust who observed this, it's probably an ip address or fqdn combined with a timestamp
  3. i trust who saw this and what they think it was
    1. probably a url or binary hash
    2. could be an ip address when combined with a port, protocol and timestamp
  4. i [as a human analyst, non-machine generated] saw this, i know what it is
    1. most likely a url, binary hash
    2. a search

Expand on the definition of --limit in the SDK

Consider having two "limit" knob's in the SDK:

  1. --query-limit - this adjusts the default database query limit specified by the client.
    • max-query-limit is set on the server (e.g. 225k)
    • default-sdk-query-limit is set within the SDK (e.g. 50K)
    • --query-limit allows 0 - 225k effectively
  2. --output-limit - this adjusts the output limit specified in the SDN
    • default-output-limit is NULL
    • --output-limit allows 0 through MAX records

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.