From 8b05a42e6ba77f04f88f5e60aea4c0171c0ece02 Mon Sep 17 00:00:00 2001 From: rncwnd Date: Tue, 2 Jul 2024 22:01:20 +0100 Subject: [PATCH 1/2] Move logic into traits --- pcaps/NTP_sync.pcap | Bin 0 -> 3851 bytes pcaps/SSHv2.cap | Bin 0 -> 11721 bytes pcaps/http.cap | Bin 0 -> 25803 bytes pcaps/http_image.cap | Bin 0 -> 25499 bytes pcaps/http_redirects.pcapng | Bin 0 -> 47804 bytes pcaps/telnet-cooked.pcap | Bin 0 -> 9244 bytes src/main.rs | 7 +++++-- src/protocols/dns.rs | 18 +++++++++++++++++- src/protocols/mod.rs | 13 +++++++++---- src/protocols/ssh.rs | 5 ++++- src/util.rs | 5 ++++- 11 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 pcaps/NTP_sync.pcap create mode 100644 pcaps/SSHv2.cap create mode 100644 pcaps/http.cap create mode 100644 pcaps/http_image.cap create mode 100644 pcaps/http_redirects.pcapng create mode 100644 pcaps/telnet-cooked.pcap diff --git a/pcaps/NTP_sync.pcap b/pcaps/NTP_sync.pcap new file mode 100644 index 0000000000000000000000000000000000000000..997d9fbf5a658bf09d0b38e05c0273255abc6148 GIT binary patch literal 3851 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⪻Tjs|$ z28P{V&Wl`#xx2O~cl&vhS;2R`?)}@S;8n+bmw&&Jz|9uT?*~uzd{#aluDG=HiA~6w zJiWNZdw*)!Gu_{JV=80VdY#n~mcljRRVD+~efE^XmIURfo@{)UN%v)0_21MZrq8#Oo(cpJM!wm}Q)+ zdF0VN#mnD*?^2NXe#ZI)Gv5pDXyK~3exB5)^EL}4?T>Me!p57jp-4Z?wO(;m#9FF>Y@uZH1ds6FC00dZp}^I{$W#Vt3w= zRo>0VpLg-xe3o!LCe6WV=jq_bxh7VxAG}juvOXna*3BtSHvVuWDyRLAh=F?jCdupDZtoBreWR>|T3 z32vFUW(*AGKCkCwKJNXIXRW_u`TgW&v(ucft$+EL_5WMGWb1V&_Zog%-8W~=mS6D; zn+wif-Z_2k>TAg+d*tdCFg>{XceZz-o9UL<>31%qviG-s-caH9$eL%jnA*h>hGlF9 zO#N|3Ude=SpKE(bW9xQ~^tToH&o_26nq8iql=np?>t)k=S-H+9TX{to>kIW-FSUC+ zt7eq+o|4<~CowJLx^bTUVgt_kouQ3q{wI58vVUHfw#H^dPp7!<=ZDMp1TA8TxN6U~ zZ`Std`g`ZZv&^(!zd*wE^pV7q8}yHYLPmHE-jcuwToNn?nB3kn457->g4!-`P8#B-rzpwF}Jsc74*{X|k;U)IP>}EpuhvvFzTf^@2OoK7Hd; zxMW`Y<%az_kj+uZy>84h$QW$%GBlf)!)#XPWng&2v)57Enlbxn=G?Q|tGZTQlkS=@ zW5-3OefsWiO~0C$ICePLHV8d-2&)T>t=``B*L1a)56I>z$h~e%n@zwrFGaKYHr(dR z3=B8kZEKV`dvf!%t~=Luy!({@+#&wksk+^`yc%NT)=zc zO`1!m@>Y<|mf}d`C7AUAc(&{?+Io-~XKrtm;tvquYN!>2mEp__qdhwCm*J*hUo1iO zg%m%`7psmlFm#y~<|&^#yoF68|K-KWR8_1!h$ShNj-`6B{4=y}9Fqwg4?mEc7pfH5wIVtCPQ)e=O!;cd={8l38B1~U^=e!PsR-YjI z!UX1vGoKk4TvPTePI7U)w66Z&SNVGRA^=0gz|J`ajPk9vnipMuEp75eT@tR||!$T*K&9YobZCp&7!Lw6` zw}ZkC6o!!WH**fmX4Q8L4C28OiYF$D*kvES`{qeea#`nudnO&;(-PX0UVYmz@l5i9 zd-|JJWb+0mCWa~o1~5K^Zgb9K@Ql=9P??47=L;~KU7Z;i zu7yo!o4fM=D^$FgRLz+7VXl7T_l>;COR`}Aan zo1B+lt(hye_uI|X?|M4~IO@)LsWr^*swl162eL`05wA_)nWMu;P(yo`1SXIMTZxI%mJAPNh7mjV6HZeVqjRFw%R_z za?7)MEgIPd6%SbM{joK>_#@`GwxGeL;?7BngMGsD=ZFd9-tS6vTC1yPE9TqH^yq4> zVEu)t=l8a3t~Awi_z7}J-U7V7vH<%EZRSnN8RVG&7QPqjAA?vR3^Hr!ek8Nd)1Ss; z@EpzIXK21!0QQxnfI?{k$Q%#`nYA3*EY#3uV9;Q!0=a8hFer3D=D|W6q&t9xfnnci z5DSDsX8pW}*InTGp2JT;=77wDhW5hSTcun;C0c1Z$Q%#`ne`jlEKGM*gWVMbG6!TH zes`(jI z2%a}N44OJ6!d<1vW?{Ok7VNG7;@q{<2Cuuob1;WNBZfq{YY(znnC_|ryUU+AcU_N0 Pau=pq^ZuYkMm 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 adJq$kJ3uBuedKAe{{I)yEekfu3=9CxFI6`H literal 0 HcmV?d00001 diff --git a/pcaps/http_image.cap b/pcaps/http_image.cap new file mode 100644 index 0000000000000000000000000000000000000000..0908f59f1f25ff7c2cc5c36612862f595add1d99 GIT binary patch literal 25499 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 GnF;{Au5B*> literal 0 HcmV?d00001 diff --git a/pcaps/http_redirects.pcapng b/pcaps/http_redirects.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..cd8958dbeffda793d5d99ae17830fb7c9af2efd6 GIT binary patch literal 47804 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 FI{=fd@Hzkh literal 0 HcmV?d00001 diff --git a/pcaps/telnet-cooked.pcap b/pcaps/telnet-cooked.pcap new file mode 100644 index 0000000000000000000000000000000000000000..34515d415da7a543efe73bde6e50a22c4e43d1e5 GIT binary patch literal 9244 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 O^L;_YOc^K~X957$xEDSE literal 0 HcmV?d00001 diff --git a/src/main.rs b/src/main.rs index a6835e0..59be6ff 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,8 +31,8 @@ fn main() { Some(pf) => Capture::from_file(pf).expect("Invalid pcap file provided"), None => { warn!("Using example.pcap as no pcap was provided"); - Capture::from_file(PathBuf::from("./pcaps/ssh_test.pcap")) - .expect("./pcaps/ssh_test.pcap does not exist") + Capture::from_file(PathBuf::from("./pcaps/dns.cap")) + .expect("./pcaps/dns.cap does not exist") } }; info!("Pcap loaded"); @@ -57,6 +57,9 @@ fn main() { stats.known_packets += 1; trace!("Known packet type found: {:?}", x); let extracted = extract_info(x, sliced.payload.to_vec()); + if extracted.is_some() { + stats.analyzed += 1; + } if opt.print_analysis { info!("{:?}", extracted); } diff --git a/src/protocols/dns.rs b/src/protocols/dns.rs index ad8a45e..8ed11a2 100644 --- a/src/protocols/dns.rs +++ b/src/protocols/dns.rs @@ -1,4 +1,4 @@ -use crate::util::*; +use crate::{util::*, ExtractedInfo, KnownProtocol, ProtocolType}; use nom::{ bytes::complete::{tag, take}, combinator::map, @@ -15,6 +15,22 @@ pub enum DNSType { Response, } +impl KnownProtocol for DNSType { + fn extract_info(&self, payload: Vec) -> ExtractedInfo { + ExtractedInfo::DNSQuery(analyse_dns_query(payload)) + } + + fn classify_proto(payload: Vec) -> Result { + if is_dns_query(&payload) { + return Ok(ProtocolType::DNS(DNSType::Query)); + } + if is_dns_response(&payload) { + return Ok(ProtocolType::DNS(DNSType::Response)); + } + Err(()) + } +} + #[derive(Debug, PartialEq, Eq)] pub struct DNSValue { pub txid: u16, diff --git a/src/protocols/mod.rs b/src/protocols/mod.rs index fd85658..f44671e 100644 --- a/src/protocols/mod.rs +++ b/src/protocols/mod.rs @@ -1,6 +1,12 @@ use dns::{DNSType, DNSValue}; mod dns; +mod ssh; + +pub trait KnownProtocol { + fn classify_proto(payload: Vec) -> Result; + fn extract_info(&self, payload: Vec) -> ExtractedInfo; +} #[derive(Debug)] pub enum ProtocolType { @@ -24,9 +30,8 @@ pub fn extract_info(ptype: ProtocolType, payload: Vec) -> Option) -> Result { - match dns::is_dns(payload) { - Ok(x) => return Ok(ProtocolType::DNS(x)), - Err(_) => {} + if let Ok(x) = dns::is_dns(payload) { + return Ok(ProtocolType::DNS(x)); }; - return Err(()); + Err(()) } diff --git a/src/protocols/ssh.rs b/src/protocols/ssh.rs index 8b13789..7599008 100644 --- a/src/protocols/ssh.rs +++ b/src/protocols/ssh.rs @@ -1 +1,4 @@ - +pub fn is_ssh(payload: Vec) -> bool { + // Check for ASCII "SSH" + payload[0] == 0x53 && payload[1] == 0x53 && payload[2] == 0x48 +} diff --git a/src/util.rs b/src/util.rs index 3e87538..cbcf991 100644 --- a/src/util.rs +++ b/src/util.rs @@ -11,6 +11,7 @@ pub struct Stats { pub unknown_packets: usize, pub errored_packets: usize, pub empty_payload: usize, + pub analyzed: usize, } impl Stats { @@ -21,6 +22,7 @@ impl Stats { unknown_packets: 0, errored_packets: 0, empty_payload: 0, + analyzed: 0, } } @@ -37,9 +39,10 @@ impl Display for Stats { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!( f, - "Total: {}\nKnown: {}\nUnknown: {}\nErrored: {}\nEmpty: {}", + "Total: {}\nKnown/Analyzed: {}({})\nUnknown: {}\nErrored: {}\nEmpty: {}", self.total_packets, self.known_packets, + self.analyzed, self.unknown_packets, self.errored_packets, self.empty_payload From 241c52a051dfe7fecb889052dbc2ffbbb095df48 Mon Sep 17 00:00:00 2001 From: rncwnd Date: Tue, 2 Jul 2024 22:02:36 +0100 Subject: [PATCH 2/2] Add a gitignore for nix and cargo --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target