mirror of
https://github.com/zeek/zeek.git
synced 2025-10-08 17:48:21 +00:00
First commit of binpac based AYIYA analyzer.
- ayiya-analyzer.pac needs work to do something with the actual packet. - Lots more cleanup to do, but it parses the protocol at least.
This commit is contained in:
parent
4062fc1776
commit
bcadb67731
8 changed files with 215 additions and 2 deletions
90
src/AYIYA.cc
Normal file
90
src/AYIYA.cc
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
#include "AYIYA.h"
|
||||||
|
#include "TCP_Reassembler.h"
|
||||||
|
|
||||||
|
AYIYA_Analyzer::AYIYA_Analyzer(Connection* conn)
|
||||||
|
: Analyzer(AnalyzerTag::SYSLOG_BINPAC, conn)
|
||||||
|
{
|
||||||
|
interp = new binpac::AYIYA::AYIYA_Conn(this);
|
||||||
|
did_session_done = 0;
|
||||||
|
//ADD_ANALYZER_TIMER(&AYIYA_Analyzer::ExpireTimer,
|
||||||
|
// network_time + Syslog_session_timeout, 1, TIMER_Syslog_EXPIRE);
|
||||||
|
}
|
||||||
|
|
||||||
|
AYIYA_Analyzer::~AYIYA_Analyzer()
|
||||||
|
{
|
||||||
|
delete interp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AYIYA_Analyzer::Done()
|
||||||
|
{
|
||||||
|
Analyzer::Done();
|
||||||
|
|
||||||
|
if ( ! did_session_done )
|
||||||
|
Event(udp_session_done);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AYIYA_Analyzer::DeliverPacket(int len, const u_char* data, bool orig, int seq, const IP_Hdr* ip, int caplen)
|
||||||
|
{
|
||||||
|
Analyzer::DeliverPacket(len, data, orig, seq, ip, caplen);
|
||||||
|
interp->NewData(orig, data, data + len);
|
||||||
|
}
|
||||||
|
|
||||||
|
//void AYIYA_Analyzer::ExpireTimer(double t)
|
||||||
|
// {
|
||||||
|
// // The - 1.0 in the following is to allow 1 second for the
|
||||||
|
// // common case of a single request followed by a single reply,
|
||||||
|
// // so we don't needlessly set the timer twice in that case.
|
||||||
|
// if ( t - Conn()->LastTime() >= Syslog_session_timeout - 1.0 || terminating )
|
||||||
|
// {
|
||||||
|
// Event(connection_timeout);
|
||||||
|
// sessions->Remove(Conn());
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// ADD_ANALYZER_TIMER(&AYIYA_Analyzer::ExpireTimer,
|
||||||
|
// t + Syslog_session_timeout, 1, TIMER_Syslog_EXPIRE);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//Syslog_TCP_Analyzer_binpac::Syslog_TCP_Analyzer_binpac(Connection* conn)
|
||||||
|
//: TCP_ApplicationAnalyzer(AnalyzerTag::Syslog_TCP_BINPAC, conn)
|
||||||
|
// {
|
||||||
|
// interp = new binpac::Syslog_on_TCP::Syslog_TCP_Conn(this);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//Syslog_TCP_Analyzer_binpac::~Syslog_TCP_Analyzer_binpac()
|
||||||
|
// {
|
||||||
|
// delete interp;
|
||||||
|
// }
|
||||||
|
|
||||||
|
//void Syslog_TCP_Analyzer_binpac::Done()
|
||||||
|
// {
|
||||||
|
// TCP_ApplicationAnalyzer::Done();
|
||||||
|
//
|
||||||
|
// interp->FlowEOF(true);
|
||||||
|
// interp->FlowEOF(false);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//void Syslog_TCP_Analyzer_binpac::EndpointEOF(TCP_Reassembler* endp)
|
||||||
|
// {
|
||||||
|
// TCP_ApplicationAnalyzer::EndpointEOF(endp);
|
||||||
|
// interp->FlowEOF(endp->IsOrig());
|
||||||
|
// }
|
||||||
|
|
||||||
|
//void Syslog_TCP_Analyzer_binpac::DeliverStream(int len, const u_char* data,
|
||||||
|
// bool orig)
|
||||||
|
// {
|
||||||
|
// TCP_ApplicationAnalyzer::DeliverStream(len, data, orig);
|
||||||
|
//
|
||||||
|
// assert(TCP());
|
||||||
|
//
|
||||||
|
// if ( TCP()->IsPartial() || TCP()->HadGap(orig) )
|
||||||
|
// // punt-on-partial or stop-on-gap.
|
||||||
|
// return;
|
||||||
|
//
|
||||||
|
// interp->NewData(orig, data, data + len);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//void Syslog_TCP_Analyzer_binpac::Undelivered(int seq, int len, bool orig)
|
||||||
|
// {
|
||||||
|
// TCP_ApplicationAnalyzer::Undelivered(seq, len, orig);
|
||||||
|
// interp->NewGap(orig, len);
|
||||||
|
// }
|
55
src/AYIYA.h
Normal file
55
src/AYIYA.h
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#ifndef AYIYA_h
|
||||||
|
#define AYIYA_h
|
||||||
|
|
||||||
|
#include "UDP.h"
|
||||||
|
#include "TCP.h"
|
||||||
|
|
||||||
|
#include "ayiya_pac.h"
|
||||||
|
|
||||||
|
class AYIYA_Analyzer : public Analyzer {
|
||||||
|
public:
|
||||||
|
AYIYA_Analyzer(Connection* conn);
|
||||||
|
virtual ~AYIYA_Analyzer();
|
||||||
|
|
||||||
|
virtual void Done();
|
||||||
|
virtual void DeliverPacket(int len, const u_char* data, bool orig,
|
||||||
|
int seq, const IP_Hdr* ip, int caplen);
|
||||||
|
|
||||||
|
static Analyzer* InstantiateAnalyzer(Connection* conn)
|
||||||
|
{ return new AYIYA_Analyzer(conn); }
|
||||||
|
|
||||||
|
static bool Available()
|
||||||
|
{ return true; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
friend class AnalyzerTimer;
|
||||||
|
void ExpireTimer(double t);
|
||||||
|
|
||||||
|
int did_session_done;
|
||||||
|
|
||||||
|
binpac::AYIYA::AYIYA_Conn* interp;
|
||||||
|
};
|
||||||
|
|
||||||
|
// #include "Syslog_tcp_pac.h"
|
||||||
|
//
|
||||||
|
//class Syslog_TCP_Analyzer_binpac : public TCP_ApplicationAnalyzer {
|
||||||
|
//public:
|
||||||
|
// Syslog_TCP_Analyzer_binpac(Connection* conn);
|
||||||
|
// virtual ~Syslog_TCP_Analyzer_binpac();
|
||||||
|
//
|
||||||
|
// virtual void Done();
|
||||||
|
// virtual void DeliverStream(int len, const u_char* data, bool orig);
|
||||||
|
// virtual void Undelivered(int seq, int len, bool orig);
|
||||||
|
// virtual void EndpointEOF(TCP_Reassembler* endp);
|
||||||
|
//
|
||||||
|
// static Analyzer* InstantiateAnalyzer(Connection* conn)
|
||||||
|
// { return new Syslog_TCP_Analyzer_binpac(conn); }
|
||||||
|
//
|
||||||
|
// static bool Available()
|
||||||
|
// { return (Syslog_request || Syslog_full_request) && FLAGS_use_binpac; }
|
||||||
|
//
|
||||||
|
//protected:
|
||||||
|
// binpac::Syslog_on_TCP::Syslog_TCP_Conn* interp;
|
||||||
|
//};
|
||||||
|
//
|
||||||
|
#endif
|
|
@ -4,6 +4,7 @@
|
||||||
#include "PIA.h"
|
#include "PIA.h"
|
||||||
#include "Event.h"
|
#include "Event.h"
|
||||||
|
|
||||||
|
#include "AYIYA.h"
|
||||||
#include "BackDoor.h"
|
#include "BackDoor.h"
|
||||||
#include "BitTorrent.h"
|
#include "BitTorrent.h"
|
||||||
#include "BitTorrentTracker.h"
|
#include "BitTorrentTracker.h"
|
||||||
|
@ -127,6 +128,16 @@ const Analyzer::Config Analyzer::analyzer_configs[] = {
|
||||||
Syslog_Analyzer_binpac::InstantiateAnalyzer,
|
Syslog_Analyzer_binpac::InstantiateAnalyzer,
|
||||||
Syslog_Analyzer_binpac::Available, 0, false },
|
Syslog_Analyzer_binpac::Available, 0, false },
|
||||||
|
|
||||||
|
//{ AnalyzerTag::6to4, "6to4",
|
||||||
|
// 6to4_Analyzer::InstantiateAnalyzer,
|
||||||
|
// 6to4_Anylzer::Available, 0, false },
|
||||||
|
{ AnalyzerTag::AYIYA, "AYIYA",
|
||||||
|
AYIYA_Analyzer::InstantiateAnalyzer,
|
||||||
|
AYIYA_Analyzer::Available, 0, false },
|
||||||
|
//{ AnalyzerTag::Teredo, "Teredo",
|
||||||
|
// Teredo_Analyzer::InstantiateAnalyzer,
|
||||||
|
// Teredo_Analyzer::Available, 0, false },
|
||||||
|
|
||||||
{ AnalyzerTag::File, "FILE", File_Analyzer::InstantiateAnalyzer,
|
{ AnalyzerTag::File, "FILE", File_Analyzer::InstantiateAnalyzer,
|
||||||
File_Analyzer::Available, 0, false },
|
File_Analyzer::Available, 0, false },
|
||||||
{ AnalyzerTag::Backdoor, "BACKDOOR",
|
{ AnalyzerTag::Backdoor, "BACKDOOR",
|
||||||
|
|
|
@ -33,11 +33,15 @@ namespace AnalyzerTag {
|
||||||
DHCP_BINPAC, DNS_TCP_BINPAC, DNS_UDP_BINPAC,
|
DHCP_BINPAC, DNS_TCP_BINPAC, DNS_UDP_BINPAC,
|
||||||
HTTP_BINPAC, SSL, SYSLOG_BINPAC,
|
HTTP_BINPAC, SSL, SYSLOG_BINPAC,
|
||||||
|
|
||||||
|
// Decapsulation Analyzers
|
||||||
|
//6to4,
|
||||||
|
AYIYA,
|
||||||
|
//Teredo,
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
File, Backdoor, InterConn, SteppingStone, TCPStats,
|
File, Backdoor, InterConn, SteppingStone, TCPStats,
|
||||||
ConnSize,
|
ConnSize,
|
||||||
|
|
||||||
|
|
||||||
// Support-analyzers
|
// Support-analyzers
|
||||||
Contents, ContentLine, NVT, Zip, Contents_DNS, Contents_NCP,
|
Contents, ContentLine, NVT, Zip, Contents_DNS, Contents_NCP,
|
||||||
Contents_NetbiosSSN, Contents_Rlogin, Contents_Rsh,
|
Contents_NetbiosSSN, Contents_Rlogin, Contents_Rsh,
|
||||||
|
|
|
@ -186,6 +186,9 @@ endmacro(BINPAC_TARGET)
|
||||||
|
|
||||||
binpac_target(binpac-lib.pac)
|
binpac_target(binpac-lib.pac)
|
||||||
binpac_target(binpac_bro-lib.pac)
|
binpac_target(binpac_bro-lib.pac)
|
||||||
|
|
||||||
|
binpac_target(ayiya.pac
|
||||||
|
ayiya-protocol.pac ayiya-analyzer.pac)
|
||||||
binpac_target(bittorrent.pac
|
binpac_target(bittorrent.pac
|
||||||
bittorrent-protocol.pac bittorrent-analyzer.pac)
|
bittorrent-protocol.pac bittorrent-analyzer.pac)
|
||||||
binpac_target(dce_rpc.pac
|
binpac_target(dce_rpc.pac
|
||||||
|
@ -277,6 +280,7 @@ set(bro_SRCS
|
||||||
Anon.cc
|
Anon.cc
|
||||||
ARP.cc
|
ARP.cc
|
||||||
Attr.cc
|
Attr.cc
|
||||||
|
AYIYA.cc
|
||||||
BackDoor.cc
|
BackDoor.cc
|
||||||
Base64.cc
|
Base64.cc
|
||||||
BitTorrent.cc
|
BitTorrent.cc
|
||||||
|
|
25
src/ayiya-analyzer.pac
Normal file
25
src/ayiya-analyzer.pac
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
connection AYIYA_Conn(bro_analyzer: BroAnalyzer)
|
||||||
|
{
|
||||||
|
upflow = AYIYA_Flow;
|
||||||
|
downflow = AYIYA_Flow;
|
||||||
|
};
|
||||||
|
|
||||||
|
flow AYIYA_Flow
|
||||||
|
{
|
||||||
|
datagram = PDU withcontext(connection, this);
|
||||||
|
|
||||||
|
function process_ayiya(pdu: PDU): bool
|
||||||
|
%{
|
||||||
|
connection()->bro_analyzer()->ProtocolConfirmation();
|
||||||
|
|
||||||
|
// Not sure what to do here.
|
||||||
|
printf("packet: %s\n", ${pdu.packet}.data());
|
||||||
|
return true;
|
||||||
|
%}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
refine typeattr PDU += &let {
|
||||||
|
proc_ayiya = $context.flow.process_ayiya(this);
|
||||||
|
};
|
14
src/ayiya-protocol.pac
Normal file
14
src/ayiya-protocol.pac
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
type PDU = record {
|
||||||
|
identity_byte: uint8;
|
||||||
|
signature_byte: uint8;
|
||||||
|
auth_and_op_crap: uint8;
|
||||||
|
next_header: uint8;
|
||||||
|
epoch: uint32;
|
||||||
|
identity: bytestring &length=identity_len;
|
||||||
|
signature: bytestring &length=signature_len;
|
||||||
|
packet: bytestring &restofdata;
|
||||||
|
} &let {
|
||||||
|
identity_len = (1 << (identity_byte >> 4));
|
||||||
|
signature_len = (signature_byte >> 4) * 4;
|
||||||
|
} &byteorder = littleendian;
|
10
src/ayiya.pac
Normal file
10
src/ayiya.pac
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
%include binpac.pac
|
||||||
|
%include bro.pac
|
||||||
|
|
||||||
|
analyzer AYIYA withcontext {
|
||||||
|
connection: AYIYA_Conn;
|
||||||
|
flow: AYIYA_Flow;
|
||||||
|
};
|
||||||
|
|
||||||
|
%include ayiya-protocol.pac
|
||||||
|
%include ayiya-analyzer.pac
|
Loading…
Add table
Add a link
Reference in a new issue