Configuration Introduction¶
How the Magic Happens
Mole IDS can be configured issuing arguments when you execute Mole IDS form the command line. But, you can also use a configuration file, which will make your life a little bit easy.
Mole IDS uses a YAML file to define its options and it is called mole.yml.
mole.yml can be placed next to the Mole IDS binary or in /etc/mole/mole.yml.
Although, you can also define the mole.yml location using the command line
flag --config <path>.
Mole IDS configuration falg
./mole --config <path_to_mole.yml> ids --iface ens33
At the moment the configuration file is splited up in four sections:
- interface: Configuration related to the interface.
- engine: Configuration related to the engine.
- rules: Rules related options.
- logger: logger configurations.
Interface¶
The interface section indicates which interface will be used by Mole IDS, if the want to use PF_RING features or you can define a BPF filter.
interface:
iface: ens33
pf_ring: true
bpf: udp and dst port not 53
On the previous example Mole will listen traffic from the ens33 interface.
PF_RING will be used as capturing driver and only the traffic defined in the
bpf filter will be captured.
When setting interface.pf_ring to false Mole IDS will use libpcap to capture
packages from the interface.
If Mole IDS was compiled without PF_Ring support and you configure it to use the PF_Ring driver, Mole IDS will fall down to libpcap.
engine¶
The engine sections has no options at the moment, this section is defined for future purposes.
rules¶
This section defines where and how the Yara rules should be loaded. In this secction
we defined two entry for loading the rules, one for loading them from a directory
so Mole IDS will load all *.yar files in that folder without recursion. Second,
you can provide a Yara rules index file and Mole will load those rules. Moreover,
there is a section for the user to define a set of variables. Those variables can
be used later on in the rules.
rules:
rules_dir: ./rules
rules_index: ./index.yar
variables:
$HOME_NET: "10.0.0.0/8"
If you are wondering yourself how to use the variables, I'll show you down below, but if you want to know more about rules, pleae go to writing rules section.
rule ExampleRule {
meta:
type = "alert"
proto = "tcp"
src = "$HOME_NET"
sport = "any"
dst = "any"
sport = "80"
strings:
$host = "google.com"
condition:
$host
}
logger¶
Finally, we defined a logging section. This section defines two types of logger,
the first one is for Mole IDS where Mole IDS will log all the internal messages,
on the other hand, the sencod type of log is for the Mole IDS users. That log will
contain a JSON object with the matching alert information.
logger:
log_to: /dev/stdout
log_level: "info"
mole:
format: eve
to: /var/log/mole/alert.json
log_to and log_level indicates to Mole IDS where and in which level should log
the internal stuff. On th other hand, there is a mole entry where the alert logs
are defined. mole.format is used to output the alerts in different formats and
mole.to indicates where Mole IDS will write the alerts.
Warning
At the moment there is one unique format avaliable, which is eve. That format
writes the logs in JSON format, but the content of the logs mimics the
eve.json format from Suticata IDS.
Following there is an example of an alert output.
{
"level": "info",
"ts": 1594760683.2996953,
"msg": "mole",
"mole_event": {
"timestamp": "2020-07-14T23:04:42.919469+0200",
"event_type": "alert",
"in_iface": "ens33",
"src_ip": "172.16.150.208/32",
"src_port": 6009,
"dst_ip": "216.58.211.46/32",
"dst_port": 80,
"proto": "tcp",
"alert": {
"name": "HTTPGetGoogle",
"id": "",
"tags": [
"tcp",
"http"
],
"meta": {
"description": "Detect http get method to google.com",
"type": "alert",
"proto": "tcp",
"src": "172.16.0.0/16",
"sport": "0:65535",
"dst": "0.0.0.0/0",
"dport": "80"
}
},
"matches": [
{
"name": "$method",
"data": "R0VU",
"base": 0,
"offset": 0
},
{
"name": "$host",
"data": "Z29vZ2xlLmNvbQ==",
"base": 0,
"offset": 22
}
]
}
}
Full example¶
interface:
iface: ens33
pf_ring: true
bpf: udp and dst port not 53
engine:
rules:
rules_dir: ./rules
rules_index: ./index.yar
variables:
$HOME_NET: "10.0.0.0/8"
logger:
log_to: /dev/stdout
log_level: "info"
mole:
format: eve
to: /var/log/mole/alert.json