Snort Rule Development
A Snort rule is a powerful tool to identify and flag potential malicious activity in network traffic.
While Snort rules resemble Suricata rules with a structure comprising a rule header and rule options, the Snort documentation provides comprehensive guidance for crafting effective rules. See Snort Documentation and Suricata Rules Differences for further reference.
To explore these rules in practice, SSH into the provided target system to replicate and understand the commands demonstrated in this section.
Example 1: Detecting Ursnif (Inefficiently)
alert tcp any any -> any any (msg:"Possible Ursnif C2 Activity"; flow:established,to_server; content:"/images/", depth 12; content:"_2F"; content:"_2B"; content:"User-Agent|3a 20|Mozilla/4.0 (compatible|3b| MSIE 8.0|3b| Windows NT"; content:!"Accept"; content:!"Cookie|3a|"; content:!"Referer|3a|"; sid:1000002; rev:1;)This rule detects Ursnif malware by matching specific patterns in HTTP traffic:
flow:established,to_server;matches established TCP connections to the server.content:"/images/", depth 12;looks for/images/within the first 12 bytes.Additional
contentfields match other patterns, like"_2F","_2B", and specific HTTP headers.!incontent:!"Accept";indicates the absence of certain headers.
Test the rule on ursnif.pcap:
sudo snort -c /root/snorty/etc/snort/snort.lua --daq-dir /usr/local/lib/daq -R /home/htb-student/local.rules -r /home/htb-student/pcaps/ursnif.pcap -A cmgExample 2: Detecting Cerber
alert udp $HOME_NET any -> $EXTERNAL_NET any (msg:"Possible Cerber Check-in"; dsize:9; content:"hi", depth 2, fast_pattern; pcre:"/^[af0-9]{7}$/R"; detection_filter:track by_src, count 1, seconds 60; sid:2816763; rev:4;)This rule targets Cerber malware:
dsize:9;restricts the rule to datagrams with a 9-byte payload.content:"hi", depth 2, fast_pattern;searches the first two bytes forhi.pcrechecks for seven hex characters followinghi.detection_filterlimits alert frequency by source.
Run the rule on cerber.pcap:
sudo snort -c /root/snorty/etc/snort/snort.lua --daq-dir /usr/local/lib/daq -R /home/htb-student/local.rules -r /home/htb-student/pcaps/cerber.pcap -A cmgExample 3: Detecting Patchwork
alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"OISF TROJAN Targeted AutoIt FileStealer/Downloader CnC Beacon"; flow:established,to_server; http_method; content:"POST"; http_uri; content:".php?profile="; http_client_body; content:"ddager=", depth 7; http_client_body; content:"&r1=", distance 0; http_header; content:!"Accept"; http_header; content:!"Referer|3a|"; sid:10000006; rev:1;)This rule detects Patchwork APT malware by matching HTTP patterns:
flow:established,to_server;specifies outbound connections.http_method; content:"POST";requires HTTPPOSTrequests.http_client_bodyandhttp_headerfilter for specific content and missing headers.
Test with patchwork.pcap:
sudo snort -c /root/snorty/etc/snort/snort.lua --daq-dir /usr/local/lib/daq -R /home/htb-student/local.rules -r /home/htb-student/pcaps/patchwork.pcap -A cmgExample 4: Detecting Patchwork (SSL)
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"Patchwork SSL Cert Detected"; flow:established,from_server; content:"|55 04 03|"; content:"|08|toigetgf", distance 1, within 9; classtype:trojan-activity; sid:10000008; rev:1;)This SSL rule detects Patchwork malware through certificate patterns:
content:"|55 04 03|";targets ASN.1 common name fields in X.509 certificates.distanceandwithinfurther refine the search.
Run with patchwork.pcap:
sudo snort -c /root/snorty/etc/snort/snort.lua --daq-dir /usr/local/lib/daq -R /home/htb-student/local.rules -r /home/htb-student/pcaps/patchwork.pcap -A cmgLast updated