Documentation ¶
Index ¶
- Constants
- func NewSniffer(options *types.SnifferDriverOptions, dispatcher PacketDispatcher) types.PacketSource
- type Connection
- type ConnectionFactory
- type ConnectionInterface
- type ConnectionOptions
- type DefaultConnFactory
- type Dispatcher
- func (i *Dispatcher) CloseAllConnections() int
- func (i *Dispatcher) CloseOlderThan(t time.Time) int
- func (i *Dispatcher) Connections() []ConnectionInterface
- func (i *Dispatcher) GetObservedConnectionsChan(count int) chan bool
- func (i *Dispatcher) ReceivePacket(p *types.PacketManifest)
- func (i *Dispatcher) Start()
- func (i *Dispatcher) Stop()
- type DispatcherOptions
- type OrderedCoalesce
- type PacketDispatcher
- type Sniffer
- type Supervisor
- type SupervisorOptions
- type TimedRawPacket
Constants ¶
const ( // Stop looking for handshake hijack after several // packets have traversed the connection after entering // into TCP_DATA_TRANSFER state FIRST_FEW_PACKETS = 12 // TCP states TCP_UNKNOWN = 0 TCP_CONNECTION_REQUEST = 1 TCP_CONNECTION_ESTABLISHED = 2 TCP_DATA_TRANSFER = 3 TCP_CONNECTION_CLOSING = 4 TCP_INVALID = 5 TCP_CLOSED = 6 // initiating TCP closing finite state machine TCP_FIN_WAIT1 = 0 TCP_FIN_WAIT2 = 1 TCP_TIME_WAIT = 2 TCP_CLOSING = 3 // initiated TCP closing finite state machine TCP_CLOSE_WAIT = 0 TCP_LAST_ACK = 1 )
Variables ¶
This section is empty.
Functions ¶
func NewSniffer ¶
func NewSniffer(options *types.SnifferDriverOptions, dispatcher PacketDispatcher) types.PacketSource
NewSniffer creates a new Sniffer struct
Types ¶
type Connection ¶
type Connection struct { ConnectionOptions ClientStreamRing *types.Ring ServerStreamRing *types.Ring ClientCoalesce *OrderedCoalesce ServerCoalesce *OrderedCoalesce PacketLogger types.PacketLogger // contains filtered or unexported fields }
Connection is used to track client and server flows for a given TCP connection. We implement a basic TCP finite state machine and track state in order to detect hanshake hijack and other TCP attacks such as segment veto and sloppy injection.
func (*Connection) Close ¶
func (c *Connection) Close()
Close can be used by the the connection or the dispatcher to close the connection
func (*Connection) GetClientFlow ¶
func (c *Connection) GetClientFlow() *types.TcpIpFlow
func (*Connection) GetLastSeen ¶
func (c *Connection) GetLastSeen() time.Time
GetLastSeen returns the lastSeen timestamp after grabbing the lock
func (*Connection) ReceivePacket ¶
func (c *Connection) ReceivePacket(p *types.PacketManifest)
ReceivePacket implements a TCP finite state machine which is loosely based off of the simplified FSM in this paper: http://ants.iis.sinica.edu.tw/3bkmj9ltewxtsrrvnoknfdxrm3zfwrr/17/p520460.pdf The goal is to detect all manner of content injection.
func (*Connection) SetPacketLogger ¶
func (c *Connection) SetPacketLogger(logger types.PacketLogger)
type ConnectionFactory ¶
type ConnectionFactory interface {
Build(ConnectionOptions) ConnectionInterface
}
type ConnectionInterface ¶
type ConnectionInterface interface { Close() GetClientFlow() *types.TcpIpFlow SetPacketLogger(types.PacketLogger) GetLastSeen() time.Time ReceivePacket(*types.PacketManifest) }
type ConnectionOptions ¶
type DefaultConnFactory ¶
type DefaultConnFactory struct { }
func (*DefaultConnFactory) Build ¶
func (f *DefaultConnFactory) Build(options ConnectionOptions) ConnectionInterface
type Dispatcher ¶
type Dispatcher struct { PacketLoggerFactory types.PacketLoggerFactory // contains filtered or unexported fields }
Inquisitor sets up the connection pool and is an abstraction layer for dealing with incoming packets weather they be from a pcap file or directly off the wire.
func NewDispatcher ¶
func NewDispatcher(options DispatcherOptions, connectionFactory ConnectionFactory, packetLoggerFactory types.PacketLoggerFactory) *Dispatcher
NewInquisitor creates a new Inquisitor struct
func (*Dispatcher) CloseAllConnections ¶
func (i *Dispatcher) CloseAllConnections() int
CloseAllConnections closes all connections in the pool.
func (*Dispatcher) CloseOlderThan ¶
func (i *Dispatcher) CloseOlderThan(t time.Time) int
CloseOlderThan takes a Time argument and closes all the connections that have not received packet since that specified time
func (*Dispatcher) Connections ¶
func (i *Dispatcher) Connections() []ConnectionInterface
connectionsLocked returns a slice of Connection pointers.
func (*Dispatcher) GetObservedConnectionsChan ¶
func (i *Dispatcher) GetObservedConnectionsChan(count int) chan bool
func (*Dispatcher) ReceivePacket ¶
func (i *Dispatcher) ReceivePacket(p *types.PacketManifest)
type DispatcherOptions ¶
type DispatcherOptions struct { BufferedPerConnection int BufferedTotal int LogDir string LogPackets bool MaxPcapLogRotations int MaxPcapLogSize int TcpIdleTimeout time.Duration MaxRingPackets int Logger types.Logger DetectHijack bool DetectInjection bool DetectCoalesceInjection bool MaxConcurrentConnections int }
InquisitorOptions are user set parameters for specifying the details of how to proceed with honey_bager's TCP connection monitoring. More parameters should soon be added here!
type OrderedCoalesce ¶
type OrderedCoalesce struct { // MaxBufferedPagesTotal is an upper limit on the total number of pages to // buffer while waiting for out-of-order packets. Once this limit is // reached, the assembler will degrade to flushing every connection it // gets a packet for. If <= 0, this is ignored. MaxBufferedPagesTotal int // MaxBufferedPagesPerConnection is an upper limit on the number of pages // buffered for a single flow. Should this limit be reached for a // particular flow, the smallest sequence number will be flushed, along // with any contiguous data. If <= 0, this is ignored. MaxBufferedPagesPerFlow int Flow *types.TcpIpFlow StreamRing *types.Ring PageCache *pageCache DetectCoalesceInjection bool // contains filtered or unexported fields }
func NewOrderedCoalesce ¶
func (*OrderedCoalesce) Close ¶
func (o *OrderedCoalesce) Close()
Close returns all used pages to the page cache
type PacketDispatcher ¶
type PacketDispatcher interface { ReceivePacket(*types.PacketManifest) GetObservedConnectionsChan(int) chan bool Connections() []ConnectionInterface Stop() }
type Sniffer ¶
type Sniffer struct {
// contains filtered or unexported fields
}
Sniffer sets up the connection pool and is an abstraction layer for dealing with incoming packets weather they be from a pcap file or directly off the wire.
func (*Sniffer) GetStartedChan ¶
func (*Sniffer) SetSupervisor ¶
func (i *Sniffer) SetSupervisor(supervisor types.Supervisor)
type Supervisor ¶
type Supervisor struct {
// contains filtered or unexported fields
}
func NewSupervisor ¶
func NewSupervisor(options SupervisorOptions) *Supervisor
func (Supervisor) GetDispatcher ¶
func (b Supervisor) GetDispatcher() PacketDispatcher
func (Supervisor) GetSniffer ¶
func (b Supervisor) GetSniffer() types.PacketSource
func (Supervisor) Run ¶
func (b Supervisor) Run()
func (Supervisor) Stopped ¶
func (b Supervisor) Stopped()
type SupervisorOptions ¶
type SupervisorOptions struct { SnifferDriverOptions *types.SnifferDriverOptions DispatcherOptions DispatcherOptions SnifferFactory func(*types.SnifferDriverOptions, PacketDispatcher) types.PacketSource ConnectionFactory ConnectionFactory PacketLoggerFactory types.PacketLoggerFactory }
type TimedRawPacket ¶
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
modified to use our Sequence type instead of int64 Package blocks contains logic to detect overlap between segments of a contiguous data stream.
|
modified to use our Sequence type instead of int64 Package blocks contains logic to detect overlap between segments of a contiguous data stream. |
cmd
|
|
Honeybadger types package
|
Honeybadger types package |