Skip to content

Commit 4fbfce2

Browse files
committed
update the docs and CHANGELOG about new features
1 parent fdd0042 commit 4fbfce2

File tree

5 files changed

+122
-33
lines changed

5 files changed

+122
-33
lines changed

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
1+
1.1.7 (Feb 28th, 2025)
2+
- Add global P2P support. Thanks to @d-strat
3+
- Add new "GRE tunnel scan" detections.
4+
- Add the option to enable/disable local and online whitelists from slips.yaml.
5+
- Fix false positive "Connection to a private IP outside of local network" detection. Slips now doesn't alert on DNS servers outside of local network.
6+
- Fix false positive "Connection to a private IP" detection when the connection is DHCP.
7+
- Fix false positive "Device changing IP" detection alerting about special IPs.
8+
- Fix false positive "Invalid DNS answer" detection alerting about .arpa domains.
9+
- Fix false positive "non-HTTP established connection on port 80".
10+
- Fix false positive "non-SSL established connection on port 443".
11+
- Improve "Connection to unknown port" detections. Now the threat level depends on the flow state.
12+
- Improve "DNS without connection" evidence. Slips now only detects when the query type is A or AAAA.
13+
- Improve the description of malicious flow by MLflowdetection module.
14+
- Improve the detections of the MLflowdetection module.
15+
- Improve the existing "GRE tunnel" detections.
16+
- Improve whitelists: Slips is now whitelisting CNAME, SNI, related queries, and DNS resolutions of attackers and victims.
17+
118
1.1.6 (Jan 31st, 2025)
219
* 3x speedup of the profiler process responsible for analyzing the given flows.
320
* Fix false positive "connection without DNS" detection.

docs/detection_modules.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -652,14 +652,7 @@ Available detection are:
652652
- Unencrypted HTTP traffic
653653
- Non-HTTP connections on port 80.
654654

655-
Slips detects established connections on port 80 that are not using SSL
656-
using zeek's conn.log flows
657655

658-
if slips finds a flow using destination port 80 and the 'service' field
659-
in conn.log isn't set to 'http', if means zeek didnt recognize that flow as http.
660-
Slips makes sure no matching flows were detected as HTTP by zeek
661-
within 5 mins before or after the given flow. if not, slips sets an evidence saying
662-
"non http established conn on port 80"
663656

664657

665658
### Multiple empty connections
@@ -729,6 +722,19 @@ When found, slips alerts pastebin download with threat level low because not all
729722
When slip sees an HTTP unencrypted traffic in zeek's http.log it generates
730723
an evidence with threat_level low
731724

725+
726+
### Non-HTTP connections on port 80
727+
728+
Slips detects established connections on port 80 that are not using HTTP
729+
using zeek's conn.log flows
730+
731+
if slips finds a flow using destination port 80 and the 'service' field
732+
in conn.log isn't set to 'http', if means zeek didnt recognize that flow as http.
733+
Slips makes sure no matching flows were detected as HTTP by zeek
734+
within 5 mins before or after the given flow. if not, slips sets an evidence saying
735+
"non http established conn on port 80"
736+
737+
732738
## Leak Detector Module
733739

734740
This module work only when slips is given a PCAP

docs/features.md

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ The detection techniques are:
4040
- GRE tunnels
4141
- GRE tunnel scan
4242
- SSH version changing
43+
- Invalid DNS resolutions
4344

4445
The details of each detection follows.
4546

@@ -88,29 +89,35 @@ Then for every source address in conn.log, slips checks if the MAC of it was use
8889

8990
If so, it alerts "Device changing IPs".
9091

92+
9193
## GRE tunnels
9294

93-
Slips uses zeek tunnel.log to alert on GRE tunnels when found. Whenever one is found, slips sets an evidence
95+
Slips uses zeek tunnel.log to alert on GRE tunnels when found. Whenever one
96+
any action other than "Tunnel::DISCOVER" is found, slips sets an evidence
9497
with threat level low
9598

9699
## GRE tunnel scans
97100

98-
Slips uses zeek tunnel.log to alert on GRE tunnels with DISCOVER actions when found.
101+
Slips uses zeek tunnel.log to alert on GRE tunnels scan. Slips considers any log with "Tunnel::DISCOVER" action a GRE scan.
102+
99103
The threat level of this evidence is low.
100104

101105

106+
102107
### SMTP login bruteforce
103108

104109
Slips alerts when 3+ invalid SMTP login attempts occurs within 10s
105110

106111

107112
### Connection to private IPs
108113

114+
109115
Slips detects when a private IP is connected to another private IP with threat level info.
110116

111-
But it skips this alert when it's a DNS connection on port
117+
But it skips this alert when it's a DNS or a DHCP connection on port
112118
53, 67 or 68 UDP to the gateway IP.
113119

120+
114121
### Connection to private IPs outside the current local network
115122

116123
Slips detects the currently used local network and alerts if it find a
@@ -144,19 +151,31 @@ When there's a weird HTTP method, slips detects it as well.
144151

145152
### Non-SSL connections on port 443
146153

147-
Slips detects established connections on port 443 that are not using HTTP
154+
Slips detects established connections on port 443 that are not using SSL
148155
using zeek's conn.log flows
149156

150157
if slips finds a flow using destination port 443 and the 'service' field
151-
in conn.log isn't set to 'ssl', it alerts
158+
in conn.log isn't set to 'ssl', it alerts.
159+
160+
Sometimes zeek detects a connection from a source to a destination IP on port 443 as SSL, and another connection within
161+
5 minutes later as non-SSL. Slips detects that and does not set an evidence for any of them.
162+
163+
Here's how it works
164+
165+
166+
<img src="https://raw.githubusercontent.com/stratosphereips/StratosphereLinuxIPS/develop/docs/images/how_non_ssl_evidence_works.png.png" >
152167

153168
## Non-HTTP connections on port 80.
154169

155170
Slips detects established connections on port 80 that are not using SSL
156-
using zeek's conn.log flows
171+
using zeek's conn.log flows.
157172

158173
if slips finds a flow using destination port 80 and the 'service' field
159-
in conn.log isn't set to 'http', it alerts
174+
in conn.log isn't set to 'http', it sets and evidence.
175+
176+
If a flow without http as a service is found, slips first checks past and future flows from the
177+
same src ip + dst ip + port to see if there's a flow with http as a service, if there is, slips ignores the alert.
178+
This is done to avoid FPs coming from zeek.
160179

161180

162181
### Connections without DNS resolution
@@ -197,17 +216,34 @@ Slips detects successful SSH connections using 2 ways
197216
2. if all bytes sent in a SSH connection is more than 4290 bytes
198217

199218
### DNS resolutions without a connection
200-
This will detect DNS resolutions for which no further connection was done. A resolution without a usage is slightly suspicious.
219+
220+
This will detect DNS resolutions for which no further connection was done.
221+
A resolution without a usage is slightly suspicious.
201222

202223
The domains that are excepted are:
203224

204225
- All reverse DNS resolutions using the in-addr.arpa domain.
205226
- All .local domains
206227
- The wild card domain *
207228
- Subdomains of cymru.com, since it is used by the ipwhois library to get the ASN of an IP and its range.
208-
- Ignore WPAD domain from Windows
209-
- Ignore domains without a TLD such as the Chrome test domains.
229+
- WPAD domain from Windows
230+
- domains without a TLD such as the Chrome test domains.
231+
- DNS resolutions of any type other than AAAA and A
232+
233+
Slips doesn't detect 'DNS resolutions without a connection' when running
234+
on an interface except for when it's done by this instance's own IP and only after 30 minutes has passed to
235+
avoid false positives (assuming the connection did happen and yet to be logged).
236+
237+
238+
When running on interface and files. For each DNS flow found, slips waits 30 mins zeek time
239+
for the connection to be found before setting an evidence.
210240

241+
This is done by comparing each ts of every new dns flow to the pending detection, once 30 mins difference between the 2
242+
flows is detected, slips sets the evidence.
243+
244+
To avoid accumulating so many pending DNS flows for 30 mins, slips checks if the connection of the pending DNS flows
245+
arrived every 10 and 20 mins too, if not found, slips waits extra 10 mins (so that would be 30 mins total) and sets the
246+
evidence.
211247

212248
### Connection to unknown ports
213249

@@ -232,6 +268,7 @@ Otherwise, Slips triggers and "unknown port" evidence.
232268

233269
For example, even though 5223/TCP isn't a well known port, Apple uses it in Apple Push Notification Service (APNS).
234270

271+
The threat level of this evidence depends on the state of hte flow. established connections have higher threat levels.
235272

236273
### Data exfiltration
237274

@@ -365,6 +402,13 @@ Then whenever slips sees the same IP using another SSH version, it compares the
365402

366403
If they are different, slips generates an alert
367404

405+
## Invalid DNS resolutions
406+
407+
Some DNS resolvers answer the DNS query to adservers with 0.0.0.0 or 127.0.0.1 as the ip of the domain to block the domain.
408+
Slips detects this and sets an informational evidence.
409+
410+
This detection doesn't apply to queries ending with ".arpa" or ".local"
411+
368412

369413
## Detection modules
370414

docs/flowalerts.md

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ The detection techniques are:
77
- Long connections
88
- Successful SSH connections
99
- Connections without DNS resolution
10-
- DNS resolutions to IPs that were never used
10+
- DNS resolutions without a connection
1111
- Connections to unknown ports
1212
- Data exfiltration
1313
- Malicious JA3 hashes
@@ -32,6 +32,7 @@ The detection techniques are:
3232
- High entropy DNS TXT answers
3333
- Devices changing IPs
3434
- GRE tunnels
35+
- GRE tunnel scan
3536
- Invalid DNS answers
3637
The details of each detection follows.
3738

@@ -86,6 +87,7 @@ Slips detects successful SSH connections using 2 ways
8687
2. If all bytes sent in a SSH connection is more than 4290 bytes
8788

8889
## DNS resolutions without a connection
90+
8991
This will detect DNS resolutions for which no further connection was done.
9092
A resolution without a usage is slightly suspicious.
9193

@@ -95,8 +97,9 @@ The domains that are excepted are:
9597
- All .local domains
9698
- The wild card domain *
9799
- Subdomains of cymru.com, since it is used by the ipwhois library to get the ASN of an IP and its range.
98-
- Ignore WPAD domain from Windows
99-
- Ignore domains without a TLD such as the Chrome test domains.
100+
- WPAD domain from Windows
101+
- domains without a TLD such as the Chrome test domains.
102+
- DNS resolutions of any type other than AAAA and A
100103

101104
Slips doesn't detect 'DNS resolutions without a connection' when running
102105
on an interface except for when it's done by this instance's own IP and only after 30 minutes has passed to
@@ -113,21 +116,33 @@ To avoid accumulating so many pending DNS flows for 30 mins, slips checks if the
113116
arrived every 10 and 20 mins too, if not found, slips waits extra 10 mins (so that would be 30 mins total) and sets the
114117
evidence.
115118

119+
120+
116121
## Connection to unknown ports
117122

118-
Slips has a list of known ports located in ```slips_files/ports_info/ports_used_by_specific_orgs.csv```
123+
Slips has a list of known ports located in ```slips_files/ports_info/services.csv```
119124

120-
It also has a list of ports that belong to a specific organization in ```slips_files/ports_info/ports_used_by_specific_orgs.csv```
125+
and a list of ports that belong to a specific organization in ```slips_files/ports_info/ports_used_by_specific_orgs.csv```
126+
127+
These are the cases where Slips marks the port as known and doesn't trigger an alert
128+
129+
1. If the port is in the list of well known ports in `services.csv`.
130+
2. If Slips has that port's info in `ports_used_by_specific_orgs.csv` and the source and destination addresses belong to that organization.
121131

122-
For example, even though 5223/TCP isn't a well known port, Apple uses it in Apple Push Notification Service (APNS).
123132

124-
any port that isn't in the above 2 files is considered unknown to Slips.
133+
Slips considers an IP belongs to an org if:
125134

126-
Slips will detect established connections only to unknown ports.
135+
1. Both `saddr` and `daddr` have the organization's name in their MAC vendor (e.g. Apple.)
136+
2. Both `saddr` and `daddr` belong to the range specified in the`ports_used_by_specific_orgs.csv` for that organization.
137+
3. If the SNI, hostname, rDNS, ASN of this IP belong to this organization.
138+
4. If the IP is hardcoded in any of the organizations IPs in `slips_files/organizations_info/`.
139+
140+
Otherwise, Slips triggers and "unknown port" evidence.
141+
142+
For example, even though 5223/TCP isn't a well known port, Apple uses it in Apple Push Notification Service (APNS).
143+
144+
The threat level of this evidence depends on the state of hte flow. established connections have higher threat levels.
127145

128-
Rejected connections (not established) are detected as 'Multiple reconnection attempts'. for more details check
129-
[Multiple reconnections](https://stratospherelinuxips.readthedocs.io/en/develop/flowalerts.html#multiple-reconnection-attempts)
130-
below
131146

132147
## Data Upload
133148

@@ -317,7 +332,7 @@ When there's a weird HTTP method, slips detects it as well.
317332

318333
## Non-SSL connections on port 443
319334

320-
Slips detects established connections on port 443 that are not using HTTP
335+
Slips detects established connections on port 443 that are not using SSL
321336
using zeek's conn.log flows
322337

323338
if slips finds a flow using destination port 443 and the 'service' field
@@ -337,7 +352,7 @@ Here's how it works
337352

338353
Slips detects when a private IP is connected to another private IP with threat level info.
339354

340-
But it skips this alert when it's a DNS connection on port
355+
But it skips this alert when it's a DNS or a DHCP connection on port
341356
53, 67 or 68 UDP to the gateway IP.
342357

343358
## Connection to private IPs outside the current local network
@@ -383,16 +398,20 @@ If so, it alerts "Device changing IPs".
383398

384399
## GRE tunnels
385400

386-
Slips uses zeek tunnel.log to alert on GRE tunnels when found. Whenever one is found, slips sets an evidence
401+
Slips uses zeek tunnel.log to alert on GRE tunnels when found. Whenever one
402+
any action other than "Tunnel::DISCOVER" is found, slips sets an evidence
387403
with threat level low
388404

389405
## GRE tunnel scans
390406

391-
Slips uses zeek tunnel.log to alert on GRE tunnels with DISCOVER actions when found.
407+
Slips uses zeek tunnel.log to alert on GRE tunnels scan. Slips considers any log with "Tunnel::DISCOVER" action a GRE scan.
408+
392409
The threat level of this evidence is low.
393410

394411

395412
## Invalid DNS resolutions
396413

397414
Some DNS resolvers answer the DNS query to adservers with 0.0.0.0 or 127.0.0.1 as the ip of the domain to block the domain.
398415
Slips detects this and sets an informational evidence.
416+
417+
This detection doesn't apply to queries ending with ".arpa" or ".local"

docs/usage.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,9 @@ contains that ioc. For example, if you whitelist the flow of the domain slack.co
374374
request to the DNS server 1.2.3.4 asking for slack.com will still be shown.
375375

376376

377+
This whitelist can be enabled or disabled by changing the ```enable_local_whitelist``` key in `config/slips.yaml`.
378+
379+
The attacker and victim of every evidence are checked against the whitelist. In addition to all the related IPs, DNS resolutions, SNI, and CNAMEs of the attacker and teh victim. If any of them are whitelisted, the flow/evidence is discarded.
377380

378381
### Flows Whitelist
379382
If you whitelist an IP address, Slips will check all flows and see if you are whitelisting to them or from them.
@@ -426,7 +429,7 @@ Slips still shows the flows to and from these IoC.
426429
The tranco list is updated daily by default in Slips, but you can change how often to update it using the
427430
```online_whitelist_update_period``` key in config/slips.yaml.
428431

429-
432+
Tranco whitelist can be enabled or disabled by changing the ```enable_online_whitelist``` key in `config/slips.yaml`.
430433

431434
### Whitelisting Example
432435
You can modify the file ```config/whitelist.conf``` file with this content:

0 commit comments

Comments
 (0)