Go to file
2020-02-12 16:54:14 +01:00
balboa Implementing config variables in the application 2020-02-10 16:11:25 +01:00
broker Implementing config variables in the application 2020-02-10 16:11:25 +01:00
models Adding balboa enrichment for domains and hostnames + documentation 2020-02-07 17:39:33 +01:00
parser Update README with info about Balboa queries 2020-02-07 17:45:37 +01:00
utils Moving SaveDomains to parser package 2020-01-28 16:05:36 +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 Implementing config variables in the application 2020-02-10 16:11:25 +01:00
go.sum Implementing config variables in the application 2020-02-10 16:11:25 +01:00
main.go Shodan ports in config 2020-02-12 16:54:14 +01:00
main_test.go First work on test for connection to CertStream 2020-01-26 17:27:40 +01:00
README.md Shodan ports in config 2020-02-12 16:54:14 +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:

// config.yml
shodan:
  key: String (Required)
  ports:
    - 80
    - 443

// do not forget to set up kafka and create the topic
kafka:
  protocol: "tcp" (String)
  host: "localhost" (String)
  port: 9092 (Int)
  topic: "styx" (String)
  partition: 0 (Int)

balboa:
  url: String (Required)

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"`
}