#[repr(u32)]
pub enum KRB5Event {
MalformedData = 0,
- WeakCrypto,
+ WeakEncryption,
}
pub struct KRB5State {
tx.sname = Some(kdc_rep.ticket.sname);
tx.etype = Some(kdc_rep.enc_part.etype);
self.transactions.push(tx);
- self.check_crypto(kdc_rep.enc_part.etype);
+ if test_weak_encryption(kdc_rep.enc_part.etype) {
+ self.set_event(KRB5Event::WeakEncryption);
+ }
});
self.req_id = 0;
},
tx.sname = Some(kdc_rep.ticket.sname);
tx.etype = Some(kdc_rep.enc_part.etype);
self.transactions.push(tx);
- self.check_crypto(kdc_rep.enc_part.etype);
+ if test_weak_encryption(kdc_rep.enc_part.etype) {
+ self.set_event(KRB5Event::WeakEncryption);
+ }
});
self.req_id = 0;
},
}
}
- fn check_crypto(&mut self, alg:EncryptionType) {
- match alg {
- EncryptionType::AES128_CTS_HMAC_SHA1_96 |
- EncryptionType::AES256_CTS_HMAC_SHA1_96 |
- EncryptionType::AES128_CTS_HMAC_SHA256_128 |
- EncryptionType::AES256_CTS_HMAC_SHA384_192 |
- EncryptionType::CAMELLIA128_CTS_CMAC |
- EncryptionType::CAMELLIA256_CTS_CMAC => (),
- _ => { // all other ciphers are weak or deprecated
- SCLogDebug!("Kerberos5: weak encryption {:?}", alg);
- self.set_event(KRB5Event::WeakCrypto);
- }
- }
- }
-
pub fn free(&mut self) {
// All transactions are freed when the `transactions` object is freed.
// But let's be explicit
}
}
+/// Return true if Kerberos `EncryptionType` is weak
+pub fn test_weak_encryption(alg:EncryptionType) -> bool {
+ match alg {
+ EncryptionType::AES128_CTS_HMAC_SHA1_96 |
+ EncryptionType::AES256_CTS_HMAC_SHA1_96 |
+ EncryptionType::AES128_CTS_HMAC_SHA256_128 |
+ EncryptionType::AES256_CTS_HMAC_SHA384_192 |
+ EncryptionType::CAMELLIA128_CTS_CMAC |
+ EncryptionType::CAMELLIA256_CTS_CMAC => false,
+ _ => true, // all other ciphers are weak or deprecated
+ }
+}
+
+
Ok(s) => {
match s {
"malformed_data" => KRB5Event::MalformedData as i32,
- "weak_crypto" => KRB5Event::WeakCrypto as i32,
+ "weak_encryption" => KRB5Event::WeakEncryption as i32,
_ => -1, // unknown event
}
},
// written by Pierre Chifflier <chifflier@wzdftpd.net>
use json::*;
-use krb::krb5::{KRB5State,KRB5Transaction};
+use krb::krb5::{KRB5State,KRB5Transaction,test_weak_encryption};
#[no_mangle]
pub extern "C" fn rs_krb5_log_json_response(_state: &mut KRB5State, tx: &mut KRB5Transaction) -> *mut JsonT
js.set_string("realm", &realm);
js.set_string("sname", &sname);
js.set_string("encryption", &encryption);
+ js.set_boolean("weak_encryption", tx.etype.map_or(false,test_weak_encryption));
return js.unwrap();
}