mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-04-28 08:29:58 -07:00
Fix clippy lints and warnings in Rust 1.89
This will also require Rust 1.89 due to if-let.
This commit is contained in:
@@ -76,14 +76,14 @@ pub struct Event {
|
||||
/// many hours at a time with dozens of [Analyzers](Analyzer) working in parallel.
|
||||
pub trait Analyzer {
|
||||
/// Returns a user-friendly, concise name for your heuristic.
|
||||
fn get_name(&self) -> Cow<str>;
|
||||
fn get_name(&self) -> Cow<'_, str>;
|
||||
|
||||
/// Returns a user-friendly description of what your heuristic looks for,
|
||||
/// the types of [Events](Event) it may return, as well as possible false-positive
|
||||
/// conditions that may trigger an [Event]. If different [Events](Event) have
|
||||
/// different false-positive conditions, consider including them in its
|
||||
/// `message` field.
|
||||
fn get_description(&self) -> Cow<str>;
|
||||
fn get_description(&self) -> Cow<'_, str>;
|
||||
|
||||
/// Analyze a single [InformationElement], possibly returning an [Event] if your
|
||||
/// heuristic deems it relevant. Again, be mindful of any state your
|
||||
|
||||
@@ -14,11 +14,11 @@ pub struct ConnectionRedirect2GDowngradeAnalyzer {}
|
||||
|
||||
// TODO: keep track of SIB state to compare LTE reselection blocks w/ 2g/3g ones
|
||||
impl Analyzer for ConnectionRedirect2GDowngradeAnalyzer {
|
||||
fn get_name(&self) -> Cow<str> {
|
||||
fn get_name(&self) -> Cow<'_, str> {
|
||||
Cow::from("Connection Release/Redirected Carrier 2G Downgrade")
|
||||
}
|
||||
|
||||
fn get_description(&self) -> Cow<str> {
|
||||
fn get_description(&self) -> Cow<'_, str> {
|
||||
Cow::from("Tests if a cell releases our connection and redirects us to a 2G cell.")
|
||||
}
|
||||
|
||||
|
||||
@@ -98,11 +98,11 @@ impl ImsiRequestedAnalyzer {
|
||||
}
|
||||
|
||||
impl Analyzer for ImsiRequestedAnalyzer {
|
||||
fn get_name(&self) -> Cow<str> {
|
||||
fn get_name(&self) -> Cow<'_, str> {
|
||||
Cow::from("Identity (IMSI or IMEI) requested in suspicious manner")
|
||||
}
|
||||
|
||||
fn get_description(&self) -> Cow<str> {
|
||||
fn get_description(&self) -> Cow<'_, str> {
|
||||
Cow::from(
|
||||
"Tests whether the ME sends an Identity Request NAS message without either an associated attach request or auth accept message",
|
||||
)
|
||||
|
||||
@@ -24,11 +24,11 @@ impl IncompleteSibAnalyzer {
|
||||
}
|
||||
|
||||
impl Analyzer for IncompleteSibAnalyzer {
|
||||
fn get_name(&self) -> Cow<str> {
|
||||
fn get_name(&self) -> Cow<'_, str> {
|
||||
Cow::from("Incomplete SIB")
|
||||
}
|
||||
|
||||
fn get_description(&self) -> Cow<str> {
|
||||
fn get_description(&self) -> Cow<'_, str> {
|
||||
Cow::from("Tests whether a SIB1 message contains a full chain of followup sibs")
|
||||
}
|
||||
|
||||
|
||||
@@ -24,11 +24,11 @@ impl NasNullCipherAnalyzer {
|
||||
}
|
||||
|
||||
impl Analyzer for NasNullCipherAnalyzer {
|
||||
fn get_name(&self) -> Cow<str> {
|
||||
fn get_name(&self) -> Cow<'_, str> {
|
||||
Cow::from("NAS Null Cipher Requested")
|
||||
}
|
||||
|
||||
fn get_description(&self) -> Cow<str> {
|
||||
fn get_description(&self) -> Cow<'_, str> {
|
||||
Cow::from(
|
||||
"Tests whether the MME requests to use a null cipher in the NAS security mode command",
|
||||
)
|
||||
@@ -48,18 +48,18 @@ impl Analyzer for NasNullCipherAnalyzer {
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
if let NASMessage::EMMMessage(EMMMessage::EMMSecurityModeCommand(req)) = payload {
|
||||
if req.nas_sec_algo.inner.ciph_algo == EPSEncryptionAlgorithmEEA0Null {
|
||||
return Some(Event {
|
||||
event_type: EventType::QualitativeWarning {
|
||||
severity: Severity::High,
|
||||
},
|
||||
message: format!(
|
||||
"NAS Security mode command requested null cipher(packet {})",
|
||||
self.packet_num
|
||||
),
|
||||
});
|
||||
}
|
||||
if let NASMessage::EMMMessage(EMMMessage::EMMSecurityModeCommand(req)) = payload
|
||||
&& req.nas_sec_algo.inner.ciph_algo == EPSEncryptionAlgorithmEEA0Null
|
||||
{
|
||||
return Some(Event {
|
||||
event_type: EventType::QualitativeWarning {
|
||||
severity: Severity::High,
|
||||
},
|
||||
message: format!(
|
||||
"NAS Security mode command requested null cipher(packet {})",
|
||||
self.packet_num
|
||||
),
|
||||
});
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
@@ -37,10 +37,10 @@ impl NullCipherAnalyzer {
|
||||
Some(&rat.security_algorithm_config)
|
||||
}
|
||||
};
|
||||
if let Some(security_config) = maybe_security_config {
|
||||
if security_config.ciphering_algorithm.0 == CipheringAlgorithm_r12::EEA0 {
|
||||
return true;
|
||||
}
|
||||
if let Some(security_config) = maybe_security_config
|
||||
&& security_config.ciphering_algorithm.0 == CipheringAlgorithm_r12::EEA0
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// Use map/flatten to dig into a long chain of nested Option types
|
||||
@@ -62,10 +62,10 @@ impl NullCipherAnalyzer {
|
||||
.as_ref()
|
||||
.and_then(|scg| scg.mobility_control_info_scg_r12.as_ref())
|
||||
.and_then(|mci| mci.ciphering_algorithm_scg_r12.as_ref());
|
||||
if let Some(cipher) = maybe_cipher {
|
||||
if cipher.0 == CipheringAlgorithm_r12::EEA0 {
|
||||
return true;
|
||||
}
|
||||
if let Some(cipher) = maybe_cipher
|
||||
&& cipher.0 == CipheringAlgorithm_r12::EEA0
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,10 +90,10 @@ impl NullCipherAnalyzer {
|
||||
Some(&to_5gc.security_algorithm_config_r15)
|
||||
}
|
||||
};
|
||||
if let Some(security_algorithm) = maybe_security_algorithm {
|
||||
if security_algorithm.ciphering_algorithm.0 == CipheringAlgorithm_r12::EEA0 {
|
||||
return true;
|
||||
}
|
||||
if let Some(security_algorithm) = maybe_security_algorithm
|
||||
&& security_algorithm.ciphering_algorithm.0 == CipheringAlgorithm_r12::EEA0
|
||||
{
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
@@ -119,11 +119,11 @@ impl NullCipherAnalyzer {
|
||||
}
|
||||
|
||||
impl Analyzer for NullCipherAnalyzer {
|
||||
fn get_name(&self) -> Cow<str> {
|
||||
fn get_name(&self) -> Cow<'_, str> {
|
||||
Cow::from("Null Cipher")
|
||||
}
|
||||
|
||||
fn get_description(&self) -> Cow<str> {
|
||||
fn get_description(&self) -> Cow<'_, str> {
|
||||
Cow::from("Tests whether the cell suggests using a null cipher (EEA0)")
|
||||
}
|
||||
|
||||
|
||||
@@ -16,19 +16,15 @@ impl LteSib6And7DowngradeAnalyzer {
|
||||
&self,
|
||||
ie: &'a InformationElement,
|
||||
) -> Option<&'a SystemInformation_r8_IEsSib_TypeAndInfo> {
|
||||
if let InformationElement::LTE(lte_ie) = ie {
|
||||
if let LteInformationElement::BcchDlSch(bcch_dl_sch_message) = &**lte_ie {
|
||||
if let BCCH_DL_SCH_MessageType::C1(BCCH_DL_SCH_MessageType_c1::SystemInformation(
|
||||
system_information,
|
||||
)) = &bcch_dl_sch_message.message
|
||||
{
|
||||
if let SystemInformationCriticalExtensions::SystemInformation_r8(sib) =
|
||||
&system_information.critical_extensions
|
||||
{
|
||||
return Some(&sib.sib_type_and_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
if let InformationElement::LTE(lte_ie) = ie
|
||||
&& let LteInformationElement::BcchDlSch(bcch_dl_sch_message) = &**lte_ie
|
||||
&& let BCCH_DL_SCH_MessageType::C1(BCCH_DL_SCH_MessageType_c1::SystemInformation(
|
||||
system_information,
|
||||
)) = &bcch_dl_sch_message.message
|
||||
&& let SystemInformationCriticalExtensions::SystemInformation_r8(sib) =
|
||||
&system_information.critical_extensions
|
||||
{
|
||||
return Some(&sib.sib_type_and_info);
|
||||
}
|
||||
None
|
||||
}
|
||||
@@ -36,11 +32,11 @@ impl LteSib6And7DowngradeAnalyzer {
|
||||
|
||||
// TODO: keep track of SIB state to compare LTE reselection blocks w/ 2g/3g ones
|
||||
impl Analyzer for LteSib6And7DowngradeAnalyzer {
|
||||
fn get_name(&self) -> Cow<str> {
|
||||
fn get_name(&self) -> Cow<'_, str> {
|
||||
Cow::from("LTE SIB 6/7 Downgrade")
|
||||
}
|
||||
|
||||
fn get_description(&self) -> Cow<str> {
|
||||
fn get_description(&self) -> Cow<'_, str> {
|
||||
Cow::from(
|
||||
"Tests for LTE cells broadcasting a SIB type 6 and 7 which include 2G/3G frequencies with higher priorities.",
|
||||
)
|
||||
@@ -62,13 +58,16 @@ impl Analyzer for LteSib6And7DowngradeAnalyzer {
|
||||
for carrier_info in &carrier_info_list.0 {
|
||||
if let Some(CellReselectionPriority(p)) =
|
||||
carrier_info.cell_reselection_priority
|
||||
&& p == 0
|
||||
{
|
||||
if p == 0 {
|
||||
return Some(Event {
|
||||
event_type: EventType::QualitativeWarning { severity: Severity::High },
|
||||
message: "LTE cell advertised a 3G cell for priority 0 reselection".to_string(),
|
||||
});
|
||||
}
|
||||
return Some(Event {
|
||||
event_type: EventType::QualitativeWarning {
|
||||
severity: Severity::High,
|
||||
},
|
||||
message:
|
||||
"LTE cell advertised a 3G cell for priority 0 reselection"
|
||||
.to_string(),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,13 +75,16 @@ impl Analyzer for LteSib6And7DowngradeAnalyzer {
|
||||
for carrier_info in &carrier_info_list.0 {
|
||||
if let Some(CellReselectionPriority(p)) =
|
||||
carrier_info.cell_reselection_priority
|
||||
&& p == 0
|
||||
{
|
||||
if p == 0 {
|
||||
return Some(Event {
|
||||
event_type: EventType::QualitativeWarning { severity: Severity::High },
|
||||
message: "LTE cell advertised a 3G cell for priority 0 reselection".to_string(),
|
||||
});
|
||||
}
|
||||
return Some(Event {
|
||||
event_type: EventType::QualitativeWarning {
|
||||
severity: Severity::High,
|
||||
},
|
||||
message:
|
||||
"LTE cell advertised a 3G cell for priority 0 reselection"
|
||||
.to_string(),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -96,17 +98,15 @@ impl Analyzer for LteSib6And7DowngradeAnalyzer {
|
||||
for carrier_info in &carrier_info_list.0 {
|
||||
if let Some(CellReselectionPriority(p)) =
|
||||
carrier_info.common_info.cell_reselection_priority
|
||||
&& p == 0
|
||||
{
|
||||
if p == 0 {
|
||||
return Some(Event {
|
||||
event_type: EventType::QualitativeWarning {
|
||||
severity: Severity::High,
|
||||
},
|
||||
message:
|
||||
"LTE cell advertised a 2G cell for priority 0 reselection"
|
||||
.to_string(),
|
||||
});
|
||||
}
|
||||
return Some(Event {
|
||||
event_type: EventType::QualitativeWarning {
|
||||
severity: Severity::High,
|
||||
},
|
||||
message: "LTE cell advertised a 2G cell for priority 0 reselection"
|
||||
.to_string(),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user