mirror of
https://github.com/zeek/zeek.git
synced 2025-10-12 03:28:19 +00:00
79 lines
2 KiB
JavaScript
79 lines
2 KiB
JavaScript
|
|
refine connection GSSAPI_Conn += {
|
|
%member{
|
|
analyzer::Analyzer *ntlm;
|
|
analyzer::Analyzer *krb5;
|
|
%}
|
|
|
|
%init{
|
|
ntlm=0;
|
|
krb5=0;
|
|
%}
|
|
|
|
%cleanup{
|
|
if ( ntlm )
|
|
{
|
|
ntlm->Done();
|
|
delete ntlm;
|
|
ntlm=0;
|
|
}
|
|
|
|
if ( krb5 )
|
|
{
|
|
krb5->Done();
|
|
delete krb5;
|
|
krb5=0;
|
|
}
|
|
%}
|
|
|
|
function forward_blob(val: GSSAPI_NEG_TOKEN_MECH_TOKEN, is_orig: bool): bool
|
|
%{
|
|
if ( val->oid()->meta()->length() >= 7 &&
|
|
memcmp("NTLMSSP", val->oid()->content().begin(), 7) == 0 )
|
|
{
|
|
// ntlmssp
|
|
if ( ! ntlm )
|
|
ntlm = analyzer_mgr->InstantiateAnalyzer("NTLM", bro_analyzer()->Conn());
|
|
|
|
if ( ntlm )
|
|
ntlm->DeliverStream(${val.mech_token}.length(), ${val.mech_token}.begin(), is_orig);
|
|
}
|
|
else if ( val->oid()->meta()->length() == 9 &&
|
|
(memcmp("\x2a\x86\x48\x86\xf7\x12\x01\x02\x02", val->oid()->content().begin(), val->oid()->meta()->length()) == 0 ||
|
|
memcmp("\x2a\x86\x48\x82\xf7\x12\x01\x02\x02", val->oid()->content().begin(), val->oid()->meta()->length()) == 0 ) )
|
|
{
|
|
// krb5 && ms-krb5
|
|
if ( ! krb5 )
|
|
krb5 = analyzer_mgr->InstantiateAnalyzer("KRB", bro_analyzer()->Conn());
|
|
|
|
// 0x0100 is a special marker
|
|
if ( krb5 && memcmp("\x01\x00", ${val.mech_token}.begin(), 2) == 0 )
|
|
{
|
|
krb5->DeliverPacket(${val.mech_token}.length()-2, ${val.mech_token}.begin()+2, is_orig, 0, 0, 0);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
%}
|
|
|
|
function proc_gssapi_neg_result(val: GSSAPI_NEG_TOKEN_RESP_Arg): bool
|
|
%{
|
|
if ( gssapi_neg_result )
|
|
{
|
|
BifEvent::generate_gssapi_neg_result(bro_analyzer(),
|
|
bro_analyzer()->Conn(),
|
|
binary_to_int64(${val.neg_state.encoding.content}));
|
|
}
|
|
|
|
return true;
|
|
%}
|
|
}
|
|
|
|
refine typeattr GSSAPI_NEG_TOKEN_MECH_TOKEN += &let {
|
|
fwd: bool = $context.connection.forward_blob(this, is_orig);
|
|
};
|
|
|
|
refine typeattr GSSAPI_NEG_TOKEN_RESP_Arg += &let {
|
|
proc: bool = $context.connection.proc_gssapi_neg_result(this) &if(seq_meta.index==0);
|
|
};
|
|
|