iris

Iris - P2P System for Confidential Sharing of Threat Intelligence and Collaborative Defense for Slips

https://github.com/happystoic/iris

Science Score: 44.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.2%) to scientific vocabulary

Keywords

collaborative-defense distributed go golang idn indicators-of-compromise ipfs ips libp2p p2p p2p-network peer-to-peer slips threat-intelligence
Last synced: 6 months ago · JSON representation ·

Repository

Iris - P2P System for Confidential Sharing of Threat Intelligence and Collaborative Defense for Slips

Basic Info
  • Host: GitHub
  • Owner: HappyStoic
  • License: mit
  • Language: Go
  • Default Branch: main
  • Homepage:
  • Size: 1.28 MB
Statistics
  • Stars: 9
  • Watchers: 2
  • Forks: 5
  • Open Issues: 0
  • Releases: 0
Topics
collaborative-defense distributed go golang idn indicators-of-compromise ipfs ips libp2p p2p p2p-network peer-to-peer slips threat-intelligence
Created about 4 years ago · Last pushed over 1 year ago
Metadata Files
Readme License Citation

README.md

Iris: A Global P2P network for Sharing Threat Intelligence

Iris is a P2P system for collaborative defense proposed by Bc. Martin Řepa as a diploma thesis work (see the thesis for theoretical details). This repository hosts a reference implementation written in Golang using LibP2P project along with integration of Iris into Slips IPS and Fides Trust Model.

For more details regarding architecture/implementation, we refer reader to docs/architecture.md or the thesis itself.

Motivation

shortened thesis abstract:

Despite the severity and amount of daily cyberattacks, the best solutions our community has so far are centralised, threat intelligence shared lists; or centralised, commercially-based defence products. No system exists yet to automatically connect endpoints globally and share information about new attacks to improve their security.

Iris allows collaborative defence in cyberspace with emphasis on security and privacy concerns. It is a pure and completely decentralised P2P network that allows peers to (i) share threat intelligence files, (ii) alert peers about detected attacks, and (iii) ask peers about their opinion on potential attacks. Iris addresses the problem of confidentiality of local threat intelligence data by introducing the concept of Organisations. Organisations are cryptographically-verified and trusted groups of peers within the P2P network. They allow Iris to send content only to pre-trusted groups of peers.

Dependencies

To run a standalone peer, you need: * a running redis instance * golang (>1.17)

User Guide

OrgSig Tool

For pleasure manipulation with organisations, we present a tool called orgsig. Orgsig is a small program written in Golang that can generate organisations or sign existing peers ID using already generated organisation.

```bash

make orgsig go build cmd/orgsig.go ./orgsig --help Running v0.0.1 orgsig

Usage of ./orgsig: -load-key-path string Path to a file with organisation private key. If not set, new private-key is generated. -peer-id string Public ID of a peer to sign. Flag --sign-peer must be set for this option to be valid. -save-key-path string If set, value will be used as a path to save organisation private-key. -sign-peer Flag to sign peer ID. Flag peer-id can be used to set peerID, otherwise, cli will ask. The signature will be printed to stdout. ```

Running a Peer

Starting a peer with reference configuration is as simple as running (assuming a Redis instance is running on local host):

make run

Debugging, Running Multiple Peers

To run silmutaniously multiple peers, you can use already prepared docker-compose file with pre-configured 4 peers. The network of 4 peers can be started with (note that you must have docker installed):

```bash

make network ```

This command starts docker-compose with 4 peers in separate containers and one container with separate Redis instance. Every peer connects to a different Redis channel and waits for messages from Fides (Fides mock has not yet been implemented). The peers will connect to each other and thus form a small network. Configuration files of every peer can be found in dev/ directory. To interact with the peers, you must act as Fides Trust Model and send to the peers manually a message by publishing some messages through Redis channels. Example PUBLISH commands can be found in dev/redisobj.dev.

Todo/Future Work:

  • Fides Trust Model Mock for better testing and debugging
  • Complete reference integration of Iris, Fides and Slips inside docker-compose
  • Signal handling for graceful shutdown
  • After a peer connects to the network, search immediately for members of trustworthy organisations. So far only connector does it.
  • Implement message (bytes?) rate-limiting per individual peers to mitigate flooding attacks (or adaptive gossips?)
  • Use more the Reporting Protocol to report misbehaving peers
  • Implement purging of keys after some time (configurable?) in peers' message cache
  • responseStorage goroutines should not wait for responses from peers that disconnected during the waiting. Otherwise, when that happens it's gonna unnecessarily wait until the timeout occurs
  • storageResponse goroutines should wait only for responses from peers where requests were successfully sent (err was nil)
  • implement purging of file metadata after files expire (viz currently not used field ElapsedAt)
  • Is reference basic manager really trimming peers based on their reliability? Need to be checked
  • Plus Future Work mentioned in the thesis itself

Owner

  • Name: Martin Řepa
  • Login: HappyStoic
  • Kind: user

Nobody smart plays fair

Citation (CITATION.cff)

cff-version: 1.2.0
title: >-
  Global P2P Network for Confidential Sharing of Threat Intelligence and Collaborative Defense
message: 'If you use this software, please cite it as below.'
type: software
url: "https://github.com/HappyStoic/iris"
authors:
  - given-names: Martin
    family-names: Repa
    email: repa.martin@protonmail.ch
    affiliation: >-
      Stratosphere Laboratory, AIC, FEL, Czech
      Technical University in Prague
    orcid: ''

GitHub Events

Total
Last Year

Dependencies

Dockerfile docker
  • debian bullseye-slim build
  • golang latest build
docker-compose.yml docker
go.mod go
  • github.com/benbjohnson/clock v1.3.0
  • github.com/beorn7/perks v1.0.1
  • github.com/btcsuite/btcd v0.22.0-beta
  • github.com/cespare/xxhash/v2 v2.1.2
  • github.com/cheekybits/genny v1.0.0
  • github.com/containerd/cgroups v1.0.2
  • github.com/coreos/go-systemd/v22 v22.3.2
  • github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c
  • github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f
  • github.com/docker/go-units v0.4.0
  • github.com/elastic/gosigar v0.14.2
  • github.com/flynn/noise v1.0.0
  • github.com/francoispqt/gojay v1.2.13
  • github.com/fsnotify/fsnotify v1.5.1
  • github.com/go-redis/redis/v8 v8.11.4
  • github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0
  • github.com/godbus/dbus/v5 v5.0.6
  • github.com/gogo/protobuf v1.3.2
  • github.com/golang/protobuf v1.5.2
  • github.com/google/gopacket v1.1.19
  • github.com/google/uuid v1.3.0
  • github.com/gorilla/websocket v1.4.2
  • github.com/hashicorp/errwrap v1.0.0
  • github.com/hashicorp/go-multierror v1.1.1
  • github.com/hashicorp/golang-lru v0.5.4
  • github.com/hashicorp/hcl v1.0.0
  • github.com/huin/goupnp v1.0.2
  • github.com/ipfs/go-cid v0.1.0
  • github.com/ipfs/go-datastore v0.5.0
  • github.com/ipfs/go-ipfs-util v0.0.2
  • github.com/ipfs/go-ipns v0.1.2
  • github.com/ipfs/go-log v1.0.5
  • github.com/ipfs/go-log/v2 v2.5.0
  • github.com/ipld/go-ipld-prime v0.9.0
  • github.com/jackpal/go-nat-pmp v1.0.2
  • github.com/jbenet/go-temp-err-catcher v0.1.0
  • github.com/jbenet/goprocess v0.1.4
  • github.com/klauspost/compress v1.14.1
  • github.com/klauspost/cpuid/v2 v2.0.9
  • github.com/koron/go-ssdp v0.0.2
  • github.com/libp2p/go-addr-util v0.2.0
  • github.com/libp2p/go-buffer-pool v0.0.2
  • github.com/libp2p/go-cidranger v1.1.0
  • github.com/libp2p/go-conn-security-multistream v0.3.0
  • github.com/libp2p/go-eventbus v0.2.1
  • github.com/libp2p/go-flow-metrics v0.0.3
  • github.com/libp2p/go-libp2p v0.17.0
  • github.com/libp2p/go-libp2p-asn-util v0.1.0
  • github.com/libp2p/go-libp2p-autonat v0.8.0
  • github.com/libp2p/go-libp2p-blankhost v0.3.0
  • github.com/libp2p/go-libp2p-connmgr v0.3.0
  • github.com/libp2p/go-libp2p-core v0.13.0
  • github.com/libp2p/go-libp2p-discovery v0.6.0
  • github.com/libp2p/go-libp2p-kad-dht v0.15.0
  • github.com/libp2p/go-libp2p-kbucket v0.4.7
  • github.com/libp2p/go-libp2p-mplex v0.4.1
  • github.com/libp2p/go-libp2p-nat v0.1.0
  • github.com/libp2p/go-libp2p-noise v0.3.0
  • github.com/libp2p/go-libp2p-peerstore v0.6.0
  • github.com/libp2p/go-libp2p-pnet v0.2.0
  • github.com/libp2p/go-libp2p-quic-transport v0.15.2
  • github.com/libp2p/go-libp2p-record v0.1.3
  • github.com/libp2p/go-libp2p-swarm v0.9.0
  • github.com/libp2p/go-libp2p-tls v0.3.1
  • github.com/libp2p/go-libp2p-transport-upgrader v0.6.0
  • github.com/libp2p/go-libp2p-yamux v0.7.0
  • github.com/libp2p/go-maddr-filter v0.1.0
  • github.com/libp2p/go-mplex v0.3.0
  • github.com/libp2p/go-msgio v0.1.0
  • github.com/libp2p/go-nat v0.1.0
  • github.com/libp2p/go-netroute v0.1.6
  • github.com/libp2p/go-openssl v0.0.7
  • github.com/libp2p/go-reuseport v0.1.0
  • github.com/libp2p/go-reuseport-transport v0.1.0
  • github.com/libp2p/go-sockaddr v0.1.1
  • github.com/libp2p/go-stream-muxer-multistream v0.3.0
  • github.com/libp2p/go-tcp-transport v0.4.0
  • github.com/libp2p/go-ws-transport v0.5.0
  • github.com/libp2p/go-yamux/v2 v2.3.0
  • github.com/lucas-clemente/quic-go v0.24.0
  • github.com/magiconair/properties v1.8.5
  • github.com/marten-seemann/qtls-go1-16 v0.1.4
  • github.com/marten-seemann/qtls-go1-17 v0.1.0
  • github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd
  • github.com/mattn/go-isatty v0.0.14
  • github.com/matttproud/golang_protobuf_extensions v1.0.1
  • github.com/miekg/dns v1.1.45
  • github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b
  • github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc
  • github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1
  • github.com/minio/sha256-simd v1.0.0
  • github.com/mitchellh/mapstructure v1.4.3
  • github.com/mr-tron/base58 v1.2.0
  • github.com/mroth/weightedrand v0.4.1
  • github.com/multiformats/go-base32 v0.0.4
  • github.com/multiformats/go-base36 v0.1.0
  • github.com/multiformats/go-multiaddr v0.5.0
  • github.com/multiformats/go-multiaddr-dns v0.3.1
  • github.com/multiformats/go-multiaddr-fmt v0.1.0
  • github.com/multiformats/go-multibase v0.0.3
  • github.com/multiformats/go-multicodec v0.2.0
  • github.com/multiformats/go-multihash v0.1.0
  • github.com/multiformats/go-multistream v0.2.2
  • github.com/multiformats/go-varint v0.0.6
  • github.com/nxadm/tail v1.4.8
  • github.com/onsi/ginkgo v1.16.5
  • github.com/opencontainers/runtime-spec v1.0.2
  • github.com/opentracing/opentracing-go v1.2.0
  • github.com/pelletier/go-toml v1.9.4
  • github.com/pkg/errors v0.9.1
  • github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1
  • github.com/prometheus/client_golang v1.11.0
  • github.com/prometheus/client_model v0.2.0
  • github.com/prometheus/common v0.32.1
  • github.com/prometheus/procfs v0.7.3
  • github.com/raulk/clock v1.1.0
  • github.com/raulk/go-watchdog v1.2.0
  • github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572
  • github.com/spaolacci/murmur3 v1.1.0
  • github.com/spf13/afero v1.8.0
  • github.com/spf13/cast v1.4.1
  • github.com/spf13/jwalterweatherman v1.1.0
  • github.com/spf13/pflag v1.0.5
  • github.com/spf13/viper v1.10.1
  • github.com/subosito/gotenv v1.2.0
  • github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1
  • github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7
  • go.opencensus.io v0.23.0
  • go.uber.org/atomic v1.9.0
  • go.uber.org/multierr v1.7.0
  • go.uber.org/zap v1.20.0
  • golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce
  • golang.org/x/mod v0.5.1
  • golang.org/x/net v0.0.0-20220114011407-0dd24b26b47d
  • golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
  • golang.org/x/sys v0.0.0-20220111092808-5a964db01320
  • golang.org/x/text v0.3.7
  • golang.org/x/tools v0.1.8
  • golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
  • google.golang.org/protobuf v1.27.1
  • gopkg.in/ini.v1 v1.66.2
  • gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
  • gopkg.in/yaml.v2 v2.4.0
  • gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
  • lukechampine.com/blake3 v1.1.7
go.sum go
  • 1641 dependencies