Go to file
2020-03-02 16:27:51 +01:00
balboa Implementing config variables in the application 2020-02-10 16:11:25 +01:00
broker Couple of quickfixes to allow run a dry installion (deactivating ES and balboa) 2020-02-19 15:26:47 +01:00
elasticsearch Adding code and setting up elastic search 2020-02-17 12:08:49 +01:00
filters Removing print statements 2020-02-20 14:53:18 +01:00
models Enh/modular arch 2020-02-25 10:05:31 +01:00
plugins Enh/modular arch 2020-02-25 10:05:31 +01:00
utils Enh/modular arch 2020-02-25 10:05:31 +01:00
.gitignore Adding configuration documentation and the config file in the gitignore 2020-02-10 14:40:33 +01:00
connectors_test.go First work on test for connection to CertStream 2020-01-26 17:27:40 +01:00
go.mod First work for the dgraph connection + fixing some error logging 2020-03-02 16:27:51 +01:00
go.sum First work for the dgraph connection + fixing some error logging 2020-03-02 16:27:51 +01:00
main.go First work for the dgraph connection + fixing some error logging 2020-03-02 16:27:51 +01:00
main_test.go First work on test for connection to CertStream 2020-01-26 17:27:40 +01:00
README.md Cleaning up example config 2020-02-19 10:03:49 +01:00
schema.go First work for the dgraph connection + fixing some error logging 2020-03-02 16:27:51 +01:00

Styx

Install

go get -u gitlab.dcso.lolcat/LABS/styx
cd $GOPATH/src/gitlab.dcso.lolcat/LABS/styx
go build
./styx

Example configuration:

certstream:
  activated: true

pastebin:
  activated: true

shodan:
  activated: true
  key: "SHODAN_KEY"
  ports:
    - 80
    - 443

kafka:
  activated: true
  protocol: "tcp"
  host: "localhost"
  port: 9092
  topic: "styx"
  partition: 0

balboa:
  url: http://127.0.0.1:8030
  activated: true

elasticsearch:
  activated: true
  url: http://localhost:9200
  index: "pastebin"

Datastructure

Meta

Node --[Edge]-- Node

type Node struct {
	ID       string `json:"id"`
	Type     string `json:"type"`
	Data     string `json:"data"` // For plain Node, the data is the ID of another typed node or a unique value like a domain or a host name.
	Created  string `json:"created"`
	Modified string `json:"modified"`
}

// Edge defines a relation between two nodes.
type Edge struct {
	ID        string `json:"id"`
	NodeOneID string `json:"nodeOneID"`
	NodeTwoID string `json:"nodeTwoID"`
	Timestamp string `json:"timestamp"`
	Source    string `json:"source"`
}

Certstream

Node --[Edge]-- CertNode --[Edge]-- CertStreamRaw Node(domain) --[Edge]-- CertNode


// CertStreamRaw is a wrapper around the stream function to unmarshall the
// data receive in a Go structure.
type CertStreamRaw struct {
	ID       string           `json:"id"`
	Type     string           `json:"type"`
	Data     CertStreamStruct `json:"data"`
	Created  string           `json:"created"`
	Modified string           `json:"modified"`
}

// CertNode represents our custom struct of data extraction from CertStream.
type CertNode struct {
	ID               string     `json:"id"`
	Fingerprint      string     `json:"fingerprint"`
	NotBefore        string     `json:"notBefore"`
	NotAfter         string     `json:"notAfter"`
	CN               string     `json:"cn"`
	SourceName       string     `json:"sourceName"`
	SerialNumber     string     `json:"serialNumber"`
	BasicConstraints string     `json:"basicConstraints"`
	RawUUID          string     `json:"rawUUID"`
	Chain            []CertNode `json:"chainedTo"`
}

Pastebin

Node --[Edge]-- PasteNode --[Edge]-- FullPaste

// PasteNode is a node from PasteBin.
type PasteNode struct {
	ID       string    `json:"id"`
	Type     string    `json:"type"`
	Data     FullPaste `json:"data"`
	Created  string    `json:"create"`
	Modified string    `json:"modified"`
}

// FullPaste wrapes meta and information from Pastebin.
type FullPaste struct {
	Meta PasteMeta `json:"meta"`
	Full string    `json:"full"`
}

Shodan

Node --[Edge]-- ShodanNode --[Edge]-- Node(s) (hostnames and domains)

type ShodanNode struct {
	ID       string           `json:"id"`
	Type     string           `json:"type"`
	Data     *shodan.HostData `json:"data"`
	Created  string           `json:"created"`
	Modified string           `json:"modified"`
}

Balboa

Balboa enrichment happens on domains and hostnames extracted from Certstream and Shodan streams and the node is created only if Balboa returns data.

Node --[Edge]-- ShodanNode --[Edge]-- Node (domain) --[Edge]-- BalboaNode

type BalboaNode struct {
	ID       string           `json:"id"`
	Type     string           `json:"type"`
	Data     []balboa.Entries `json:"data"`
	Created  string           `json:"created"`
	Modified string           `json:"modified"`
}