Showing posts with label ossec. Show all posts
Showing posts with label ossec. Show all posts

Friday, December 28, 2012

OSSEC error 'remote_commands'...

While upgrading one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 agents from ossec version 2.6 to 2.7, I was testing agent configuration and I got cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following error message:
ossec-logcollector(2301): ERROR: Definition not found for: 'logcollector.remote_commands'.
It didn't appear before, and more importantly, I haven't had a slightest idea what's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem! So, I decided to dig a bit furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to find out. BTW, I removed timestamp column from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log entry as it is not important here.

So, what I found is that this is a new configuration variable introduced in 2.7 version of OSSEC. It is expected to be defined in internal_options.conf file. The reason I got it is that my internal_options.conf was from 2.6.

This variable is a boolean flag (accepted values are 0 and 1) and its purpose is to allow administrator to control whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 agent will accept commands from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 manger, or not. This value is used when configuration is loaded, here. If it is set to 0 cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n any command configurations will be ignored, e.g. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ones like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following one:

    host-deny
    host-deny.sh
    srcip
    yes
For each ignored configuration entry, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re will be appropriate notification message in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log file, something like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following message:
Remote commands are not accepted from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 manager. Ignoring it on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 agent.conf

Tuesday, October 30, 2012

Installing ossec client on CentOS 6...

Ok, I did this already, but I managed to forget it. Still, it isn't strange, after all, it's not that you are adding new machines every day. Anyway, here are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 steps that are need in order to install OSSEC client on a CentOS machine, more specifically CentOS 6. I decided to write this post if someone also needs cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se instructions, but certainly for me so that next time I have to do it I don't have to think a lot. Note that I like to install RPM packages because it is easier to update cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m instead compiling from source, and also someone else is worrying about new releases. Additionally, it's not so good to install development environment on production machines that don't need it, for security reasons. Ok, here we go.

First, make sure that you have EPEL repository added. The easiest way to do this is using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command (note, bold is what you type, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rest is what you get from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 machine):
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Retrieving http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
warning: /var/tmp/rpm-tmp.7IMdWB: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Preparing...                ##################################### [100%]
1:epel-release   ##################################### [100%]
Second, fetch necessary packages. I didn't want to install Atomicorp's repository, so I only fetched ossec packages using wgetossec-hids and ossec-hids-client are what you need. Select cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 newest versions you can find. Next, install cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m using yum command:
# yum localinstall ossec-hids-client-2.6-15.el6.art.x86_64.rpm ossec-hids-2.6-15.el6.art.x86_64.rpm
I assumed that yum is executed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same directory where you placed downloaded packages. Also, if you downloaded some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r versions, change names appropriately.

Open ossec's configuration file, /var/ossec/etc/ossec-agent.conf, and change cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 line that has element. It has to point to your server's IP address. You can also add files to be monitored in addition to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing ones, or remove some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing ones if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are not used on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 machine you are installing ossec client.

Now, go to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OSSEC server and run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re agent management tool. It is probably in /var/ossec/bin:
# ./manage_agents


****************************************
* OSSEC HIDS v2.5-SNP-100907 Agent manager.     *
* The following options are available: *
****************************************
   (I)mport key from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server (I).
   (Q)uit.
Choose your action: I or Q: A

- Adding a new agent (use '\q' to return to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main menu).
  Please provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following:
   * A name for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new agent: centos6.domain.local
   * The IP Address of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new agent: 192.168.10.41
   * An ID for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new agent[030]:
Agent information:
   ID:030
   Name:centos6.domain.local
   IP Address:192.168.10.41

Confirm adding it?(y/n): y
Agent added.
Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool doesn't display all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 options you have on your disposal. Next what you need to do is to extract a key that you'll import into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 client. This is also done using manage_clients tool, so eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r start it again, or in case you didn't exit after you added an agent just continue:
 ****************************************
* OSSEC HIDS v2.5-SNP-100907 Agent manager.     *
* The following options are available: *
****************************************
   (I)mport key from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server (I).
   (Q)uit.
Choose your action: I or Q: e

Available agents:
   ID: 002, Name: somehost, IP: 10.0.10.1
   ID: 030, Name: centos6.domain.local, IP: 192.168.10.41
Provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ID of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 agent to extract cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key (or '\q' to quit): 030
Agent key information for '030' is:

** Press ENTER to return to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main menu.
Again, option to export cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 key isn't listed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 help message! Anyway, copy cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 very long string that is printed (agent's key) and you can quit from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 tool and logout from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OSSEC server.

Go now to ossec client, change directory to /var/ossec/bin and run manage_client tool:
# ./manage_client


****************************************
* OSSEC HIDS v2.6 Agent manager.     *
* The following options are available: *
****************************************
   (I)mport key from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server (I).
   (Q)uit.
Choose your action: I or Q: I

* Provide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Key generated by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server.
* The best approach is to cut and paste it.
*** OBS: Do not include spaces or new lines.

Paste it here (or '\q' to quit):


Agent information:
   ID:030
   Name:centos6.domain.local
   IP Address:192.168.10.41

Confirm adding it?(y/n): y
Added.
Finally, restart ossec client:
# /etc/init.d/ossec-hids restart
Shutting down ossec-hids:                      [  OK  ]
Starting ossec-hids:                           [  OK  ]
You should see you new client in OSSEC's Web interface which should confirm that it is running OK.

Friday, August 17, 2012

How to communicate with OSSEC deamons via Unix socket...

OSSEC daemons, when started, open Unix sockets for a local communication. For example, ossec-execd opens cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following socket:
/var/ossec/var/queue/alerts/execq
On which, it waits for commands. If you try to send it message using echo, or in some similar way, you'll receive an error message:

$ echo 1 message > /opt/ossec/var/queue/alerts/execq
bash: /opt/ossec/var/queue/alerts/execq: No such device or address
because, it's not a pipe. But, it is possible to "manually" send it command using socat utility. socat is very capable utility with, equivalently complex syntax. In this case you should run it like follows:
$ socat - UNIX-CLIENT:/opt/ossec/var/queue/alerts/execq 
What we are saying in this case is that we want socat to relay messages between stdin (first address, minus) and unix socket in which it is a client (i.e. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 socket already has to be opened/created).

Now, whatever you type, will go to ossec-execd. This can be monitored eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r in ossec's logs, or if we start ossec-execd in debug mode (without forking), in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 terminal.

Sunday, August 12, 2012

About active responses in OSSEC

I already wrote about OSSEC's active response feature, and I said that I'm going to write a bit more after I study a bit more thorougly how it works. After I did analysis of log collecting feature of OSSEC, I decided to finally look at this too. So, here is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 essey about what I found out by analysing code of OSSEC 2.6 with respect to active response. This essay will intergrate also cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous post, so, you don't have to read that previous one if you didn't already. Since active responses are bound to rules - triggering rule triggers active response - I'll touch also on rules, but not in a lot of details. Only as much is necessary to explaing active response.
I'll start with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 purpose of active response, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n I'll continue to configuration of active response, and I'll finish with implementation details and conclusions.

Purpose of active response

The idea behind active response in OSSEC's is to activelly block potential offenders and in that way to allow system to defend itself instead of passively monitoring what's happening. In some way this classifies OSSEC also as an IPS. As with all ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r IPSes, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 feature is great but can bite you in case you are not careful, or, if you are using it without realising how it actually works. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 current implementation of OSSEC, active response is restricted to act on offending IP addresses and users.

Configuring active response

Active response configuration consists of two parts. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first part you define all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 commands, and in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second part - active response - you define how and when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are called. When writing configuration you should first list all of you commands, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n active responses that reference cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m. The reason is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code was written, i.e., you will get undefined command error in case you don't list commands before cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are used.
Note that final component, and important, connection between rules and active responses. Namely, rules are those that get triggered, and if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are triggered cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n active responses bound to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m will be activated. In this post, we'll use manual method of activation, but I'll also describe how active responses are connected to rules.
It is interesting, and important, that when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration files are analyzed, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code writes all enabled active responses into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file shared/ar.conf, which is placed underneath cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 main OSSEC directory (by default it is /var/ossec). We'll come to exact format and purpose of that file later.
The following text is based on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analysis of config/active-response.[ch], analysisd/active-response.[ch] files, util/agent_control.c and some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs.

Defining commands

All cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 commands that will be run as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 active response should be defined using element placed directly beneath top-level element. The structure should look something like this:

    ...
   
   
   
    ...
   
   
   
    ...
Each element can have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following subelements:
  • name - This will be identifier by which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command will be referenced in active response definitions, i.e. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second part. Obviously, this is a mandatory subelement. You shouldn't use dashes here because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way parsing is done throughout OSSEC and that will most likely confuse it! It is also advasible to avoid using spaces for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same reasons!
  • expect - Mandatory to specify. The value can be eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r user or srcip. Due to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 use of OS_Regex, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way it calls OSRegex_Compile, those two strings are case insensitive, i.e. you can capitalize cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m as you wish, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 meaning is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same.
  • executable - Mandatory element, defines cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 exact name of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable. The path where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable is placed is predefined during compilation time. Default value is active-response/bin.
  • timeout_allowed - Allowed values are yes and no. Basically, this tells OSSEC if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 effect of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command (after it is called) should be reversed, i.e., it's effect have to be cleared by new invocation. This is optional and default value is no. To signal to a script if it is called for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first time, or as a part of a reversal process, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first argument to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script will be add or delete.

Defining active responses

The second part of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration defines active responses cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365mselves. Active responses are configured (again) in OSSEC's configuration file using elements that are placed directly within top-level element, like this:

    ...
   
   
   
    ...
   
   
   
    ...
Under each element cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following subelements can be used to more specifically define active response:
  • command - string value that references one element. This is mandatory to specify.
  • location - one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following values: AS, analysisd, analysis-server, server, local, defined-agent, all, or any. AS, analysisd, analysis-server, server are synonyms, and so are all and any. You must specify this.
  • agent_id - in case cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 location is defined-agent, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n this defines which agent and is mandatory to specify.
  • rules_id - comma separated list of rule IDs to which this active response should be bound. This is an optional element without a default value.
  • rules_group - name of a rule group to which this active response will be bound.
  • level - Integer between 0 and 20, inclusive. If some rule has level equal to or grater than this value than it is bound to active response.
  • timeout - Numerical value without constraints.
  • disabled - Can have values yes or no.
  • repeated_offenders - This element and its value are ignored.
Note one interesting thing. Namely, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no ID bound to a specific active response. This means that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 relationship between command and active response is 1:1. It seems somehow meaningless, beacuse, it is not possible to have some command (i.e. one element) bind to multiple active responses commands each with a different set of parameters. Or, I'm missing something important?
When OSSEC agent starts it reads and parses and elements and writes shared/ar.conf file (actually, when any component of ossec starts if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous paragraph is true). In that file each line defines one active response. Lines have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following printf like format:
%s - %s - %d
The first string is name of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 active response and of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command (becaues active response doesn't have it's own name, as I explained). The second string is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 executable. Finally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 third is a timeout value if it is defined. If not, 0 will be written in that field.

Manually triggering active responses - execution flow

To manually test how active response works you can use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 utility agent_control whose source can be found in util/ top-level directory of OSSEC source. Note that only responses that require IP address can be activated. This tool should be run on a manager node and it actually connects to local ossec-remoted instance and sends it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate commands that will trigger requested active response.
To trigger active reponse, using cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 utility, you have to specify three things:
  1. Offending IP address (option -b).
  2. ID of an agent where active response will be triggered (option -u).
  3. Which active response to run (option -f).
For example, to tell an agent whose ID is 003 that it should run firewall-drop600 active response and pass it IP adress 192.168.1.1, you would invoke agent_control in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following way:
agent_control -u 003 -f firewall-drop600 -b 192.168.1.1
What will happen than is that agent_control will connect to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 local ossec-remoted instance and send it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following command:
(msg_to_agent) [] NNS 002 firewall-drop600 - 192.168.1.1 (from_cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365_server) (no_rule_id)
The interesting thing here is that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is possibility to run active response on all nodes but this functionality is not enabled in agent_control utility. It boils down not to specify agent ID, in which case all agents are assumed and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous command would look now like this:
(msg_to_agent) [] ANN (null) firewall-drop600 - 192.168.1.1 (from_cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365_server) (no_rule_id)
ossec-remoted accepts message from agent_control utility and based on that message sends a message over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 network to agent. This message is encrypted, but in our case (running firewall-drop600 with IP address 192.168.1.1 as an argument) it will have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following format:
#!-execd firewall-drop600 - 192.168.1.1 (from_cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365_server) (no_rule_id)
The three characters at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 beginning (#!-) are message header, and "execd " is a command. More commands can be seen in headers/rc.h file. Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no agent ID in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message. That is because this information is used only by ossec-remoted so that it knows to whom it should send cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message. So, no matter if you sent cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message to some specific agent, or all of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message will look cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same.
The message is received and preparsed by ossec-clientd in function receive_msg (in file client-agent/receiver.c) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n sent to ossec-execd (in top-level directory os_execd) via local message queue starting with a letter f, i.e. message header and command are stripped off by ossec-clientd.
It is interesting that ossec-execd, when started, reads standard configuration file (in XML) and, based on active response configuration, creates shared/ar.conf (unless changed during compilation). Then, it enters main loop, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re when active response is triggered for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first time, it reads shared/ar.conf instead of main XML configuration file. It has also one additional interesting behavior. Namely, if unknown active response is triggered it will first reread shared/ar.conf and if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 active response isn't found cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it will signal error. This, I suppose, can be used to dynamically update a set of active responses.
But, back to our example. ossec-execd receives message and assumes that everything to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first space is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command name. Using that token it cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n searches for a command. There are two interesting thing here:
  1. The list of commands is taken from shared/ar.conf file that is dynamically created, not from ossec.conf or some similar.
  2. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command isn't found, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 shared/ar.conf is read again, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 search is peformed again. Only now, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no command, an error is reported and processing of a message is stopped. Note that no return message is sent to manager!
When cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command is found, standard execve(2) structures are created, but twice. One for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first execution and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r for timeout value. Only later it is checked if timeout is supported/requested by command, and if it is not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n memory is released. The arguments are copied from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message (spaces are used to separate arguments) with additional argument inserted first. Namely, add is inserted if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command is called first time, while delete is inserted in case it is called as a consequence of a timeout.
Finally, before executing command, one more check is performed. Namely, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command was run, and timeout is hanging waiting to trigger, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n command will not be called again, nor new timeout value will be called. The message from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 manager will be ignored!

Automatic triggering of active responses

An active response is tirggered when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rule it is bound to is triggered. A single rule can have multiple active responses attached to it. Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are three ways in which you can bind rule and active response:
  1. Using level element in active response. Namely, if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rule has attached level that is greater than or equal to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 level of active response cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 active response is attached to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rule.
  2. If a rule ID is listed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rules_id element of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 active response, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 active response is attached to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rule.
  3. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 group name to which rule belongs is listed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rules_group element of active response, than cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are bound togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r. The check is done very simply, namely it only checks that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value specified in rules_group occurs within group name. For example, if group name is "syslog,pam" cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n rules_group value "syslog" will match, as well as "pam", but "apache" will not. Note that even cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value "syslog,pam" will match!
Rules and active responses are bound togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code in analysisd/rules.c) when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ossec-analysisd is started.

Some implementation details

Configuration reading and parsing is implemented in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 config/active-response.c file.
The data contained in each element is kept in a structure active_response defined in src/config/active-response.h file. The elements of that structure quite closely mimic cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration layout, i.e. this structure is defined as follows:
/** Active response data **/
typedef struct _ar{
    int timeout;
    int location;
    int level;
    char *name;
    char *command;
    char *agent_id;
    char *rules_id;
    char *rules_group;
    ar_command *ar_cmd;
}active_response;
That's it, not much. :)

Conclusion

Ok, I think I managed to document active response in OSSEC at least better cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 majority of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing documents. Tell me what you think. :)
Next, let me say that I'm impressed with XML parsers shipped with OSSEC. It seems to be very featerfull even though it is written in C, which is usually not used for XML processing.
One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interesting things of OSSEC is that it reads cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same configuration files multiple times. For example, in ossec-analysisd deamon, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration file is first read by active response initialization code (active-response.c) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 deamon itself. The reason why is this so interesting is that, during parsing of element cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file shared/ar.conf is written each time. In ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r words, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 operation isn't idempotent. This is also problematic from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 performance reasons standpoint, but probably less so.
While reading cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code I sumbled on several interesting things, not directly related to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 topic of this post. But since cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are important, I'll mention cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m here and maybe I devote some future post to some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m:
  • Top level directory addagent is misleading. It actually contains binary manage-agents which is much more encompassing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n that. So, it should be renamed.
  • In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 top-level directory util/ cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some tools that should be moved or integrated with manage-agents utility.

Implementing OSSEC log reader for Linux audit logs...

After writing log readers for mod_security and regex, I was asked in a private mail if I could implement log reader for Linux audit logs, so I decided to try. Basically, first I was thinking about implementing something more general but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n I decided to keep it simple and not to overdesign it. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 conclusion section I'll return to this more complex type of log reader.

Format of linux audit logs

Log records in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Linux audit files can consist of one or more log lines. For example, here is a record that consists of three lines:
type=NETFILTER_CFG msg=audit(1344674083.473:7422): table=filter family=2 entries=0
type=NETFILTER_CFG msg=audit(1344674083.473:7422): table=filter family=10 entries=0
type=SYSCALL msg=audit(1344674083.473:7422): arch=c000003e syscall=56 success=yes exit=5246 a0=60000011 a1=0 a2=0 a3=0 items=0 ppid=5239 pid=5245 auid=5056 uid=5056 gid=1000 euid=0 suid=0 fsuid=0 egid=1000 sgid=1000 fsgid=1000 tty=pts7 ses=5 comm="chrome-sandbox" exe="/opt/google/chrome/chrome-sandbox" subj=unconfined_u:unconfined_r:chrome_sandbox_t:s0-s0:c0.c1023 key=(null)
and here is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one that consist of two lines:
type=AVC msg=audit(1344110282.960:999): avc: denied { write } for pid=4690 comm="plugin-containe" name=".pulse-cookie" dev="dm-3" ino=2883770 scontext=unconfined_u:unconfined_r:mozilla_plugin_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file
type=SYSCALL msg=audit(1344110282.960:999): arch=c000003e syscall=2 success=no exit=-13 a0=7fc060e29240 a1=80142 a2=180 a3=394f64947c items=0 ppid=4463 pid=4690 auid=5056 uid=5056 gid=1000 euid=5056 suid=5056 fsuid=5056 egid=1000 sgid=1000 fsgid=1000 tty=(none) ses=5 comm="plugin-containe" exe="/usr/lib64/xulrunner-2/plugin-container" subj=unconfined_u:unconfined_r:mozilla_plugin_t:s0-s0:c0.c1023 key=(null)
In all those cases, log records share cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same ID (I'll call it a log record ID from now on) which is a number after a timestamp (I placed it in bold in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous two examples).

Design

At least in principle, it is easy to parse those logs. We just extract that field (first number after colon). What makes it complicated is that it isn't garantueed (at least I'm not aware) that log records will not be mixed (i.e. first lines 1 of two records, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir second lines). Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code for reading log files can be called when partial log lines, or records, are written! Finally, we don't know how many lines in each record cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re will be!

So, after we get a new log record ID, we have to wait a bit to see if we are going to receive anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r one. After that time passes, without receiving anything, we pass what we have up to now. Again, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a choice here! We can reset timeout if we receive something new, or we can count from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first line. Basically, we can have timeout or window.

Finally, no matter how we implement wait time, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is additional quirck in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way reading log files works. Namely, we can not set timeout mechanism that will call us after some time. We are called by logcollector.c module in regular intervals defined in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration file (defaulting to 2 s). So, we are going to implement timeout, not in time units, but in a number of those calls. So, if you say window is 1, this means that when we find new log record ID, we'll wait that we are called once more, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we'll join and send a record. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 interval is defined to be 2s, that means waiting time of 2s. If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 window is 2, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we'll send record after cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 second call, or after 4s. Timeout, on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r hand, will function a bit differently. If we say that timeout is 1, that means that at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment we find a new log record ID we start timer (initialized to 1). At cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next call we first decrement all timers, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n if we get that same log record ID again, we'll reinitialize timer. Finally, we  send all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 records that have expired timers.

Note that we are here introducing runtime per-log reader data (timers, saved logs), which is different than configuration per-log reader data (that comes exclusively from configuration files)! This will be reflected later in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implementation.

Finally, since this is a Linux specific feature, it is completly disabled if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source is compiled on (or for) windows!

Configuration

So, this is how to configure this log reader in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OSSEC's configuration files. To say that some log file is audit type, you'll use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following element:
linux_auditd
Both timeout and window are specified in time units (T and W must be numbers) defined by logcollector.loop_timeout variable (defined in internal_options.conf). You have to specify one of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m. It is error to define both, or none!

Implementation notes

For keeping logs until timeout or window expires, I'm using doubly linked list. It is inefficient, but for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time being it will do. More specifically, I'm using OSSEC's list implemenation in shared/list_op.c.
For testing purposes, I also added code that is enabled by defining BUILD_TEST_BINARY. In that case read_linux_audit is compiled which accepts log file that should be read. To emulate how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log grows, binary first opens a new temporary file, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n reads a random number of lines from original file, writes it to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 temporary file, and calls read_linux_audit function, after which, it pauses. This is repeated until all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 input from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original log file is exhausted.
To build test binary, first build evertyhing. Then, go to logcollector directory and run cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re 'make test'. You'll cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n have binary read_linux_audit.
The testing was as follows:
  1. Run read_linux_audit on a sample audit.log and redirect output to some temporary file. Count a number of lines in a temporary file, it has to be smaller cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original file.
  2. Using simple shell pipe "cut -f2 -d: audit.log | cut -f1 -d\) | sort | uniq | wc -l" I got how many uniqe lines. There was a difference between this and previous step.
  3. Search for a difference (using diff for example) and analyze why it happened. :D

Conclusion

As I said in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 introduction section, I was thinking about implementing a more general reader. Namely, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 idea was that you give cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reader regular expression, and this regular expression is executed against every line. All cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 lines that have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same return value are treated as a part of a single record and thus are concatenated. Probably when this reader is finished, I suppose writing that more complex one wouldn't be a problem.

I also fixed few small bugs in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code I sent previously, and, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new patch can be found here.

Friday, August 10, 2012

Adding new log types to OSSEC...

I'm using OSSEC for log monitoring, and while it is a great tool cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some drawbacks. One is that (not so) occasionally Java stack traces are dumped into syslog and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y are not properly handled/parsed by OSSEC. The ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r drawback is that I want OSSEC to monitor mod_security logs, which are multi line logs with variable number of lines belonging to each HTTP request/response processed by mod_security. So, I wanted to modify OSSEC in order to allow it to handle those cases, too. To be able to modify OSSEC I started with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analysis of its source (version 2.6) and based on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analysis, I wrote this text. The goal of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analysis was to get acquainted on how OSSEC handles log files, document this knowledge, and to propose solution that would handle Java stack traces and mod_security logs.

Configuring log files monitoring

First, ehere are some global parameters that control global log monitoring behavior of each OSSEC agent, or server. More specifically, logcollector.loop_timeout in internaloptions.conf defines how much time (in seconds) OSSEC will wait before checking if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are additions to all log files that it monitors. Default value is 2s, with minimal allowed value of 1 second and maximum 120s.
This is actually cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most important parameter. There are two additional ones, logcollector.open_attempts with allowed values between 2 and 998, and logcollector.debug with allowed values 0, 1 and 2.

Supported log types in OSSEC

If I correctly understand it, OSSEC treats log files as consisting of records. Each record being independent from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous, or any later ones. Rules, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n, act on records. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 majority of cases cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 record is identical to a single line of a log file. This is, I suppose, legacy from syslog in which each line was (and still is) separate log entry. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mean time OSSEC was extended so that it supports more different log files:
  • multiline log (read_multiline). The problem with this log format is that it expects that each record consists of a fixed number of lines.
  • snort full log (read_snortfull). This is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 closest one to what I need with respect to mod_security, i.e. this one reads several lines, combines cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m, and sends cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m to log analyzer.
  • some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rs I won't analyze now.
The length of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 record is restricted to 6144 characters (constant OS_MAXSTR defined in headers/defs.h). Everything above that length will be cut off and discarded, with an error message logged.

Configuring log files

So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are different log types and to tell ossec for some file which type it is, you use element associated with each monitored file. Each monitored file is defined in element directly beneath element in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ossec configuration file, for example:

   ...
  
      syslog
      path_to_log_file
  

   ...
The configuration file, along with all of its elements, is read by configuration loader placed in src/config subdirectory. The localfile element is processed in function Read_Localfile (file localfile-config.c). For each one logreader structure (defined in localfile-config.h) is allocated and initialized. This structure has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following content:
typedef struct _logreader
{
    unsigned int size;
    int ign;

    #ifdef WIN32
    HANDLE h;
    int fd;
    #else
    ino_t fd;
    #endif
    /* ffile - format file is only used when
     * cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file has format string to retrieve
     * cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 date,
     */
    char *ffile;
    char *file;
    char *logformat;
    char *djb_program_name;
    char *command;
        char *alias;
    void (*read)(int i, int *rc, int drop_it);
    FILE *fp;
}logreader;
Analyzing localfile-config.c file I came to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following conclusions:
  • Underneath element cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following elements are accepted/valid: <>, , , , and .
  • defines cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file, with full path, that is being monitored.
  • tells OSSEC in which format are records stored. The following are hardcoded values in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Read_Local.c file: syslog, generic, snort-full, snort-fast, apache, iis, squid, nmapq, mysql_log, mssql_log, postgresql_log, djb_multilog, syslog-pipe, command, full_command, multi-line, and eventlog. What's interesting is that some of those (marked in bold) don't appear later in log collector!
  • cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 syntax of accepted multi-line log_format is:
    multiline[ ]*:[ ]*[0-9]*[ ]* 
    note that it is not an error, i.e. you can avoid writing any number, but that number defines how many lines should be concatenated before being sent to analyzer module, so it is important you don't skip it. The number part is made available in logformat field of logreader structure. Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore, when check is made to determine which type of logformat is some logff structure, to detemine it is a multiline cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first character is checked if it is a digit. If it is, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n it is a multiline format. This is actually a hack because in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 original design it wasn't planned to have parameters to certain log types!
  • is used to run some external process, collect its output, and send it to central log. Each line outputed by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command will be treated as a separate log record. Empty lines are removed, i.e. ignored. Note that command is passed to shell using popen library call. So, you can place shell commands cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re too.
  • in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a reference to a full_command log type format, but it is not supported in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration file. The difference is that this form reads command's output as a single log record.
  • cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of element is stored into logreader.ign field. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 use of this field is strange because it is overwritten with number of failed attempts to open log file. I would assume that this parameter would, somehow, allow rate limiting.
  • When defining cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of element certain variables can be used. In case of Windows operating systems, that means % variables (e.g. %SYSTEM% and similar). In case of Unix/Linux glob patterns are allowed (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are not allowed on Windows). Also, strftime time format specifiers can be used and in that case strftime function will be called with time format specifier and current local time to produce final log's file name.
  • defines an alias for a log file. It is used in read_command.c and read_fullcommand.c files, only. Probably to be substituted instead of command in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 output sent to log collector (for readability purposes, instead of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 whole complex command line you see just its short version).
  • The function pointer should point to a function returning nothing (void). But, all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 read functions return void * pointer and this return value is forced during assignment of a function to this field. Finally, this return value is never used.
  • The return code (*rc parameter) of read functions is also used in a strange way and only once it is different than 0.
Reading and processing log files

Actual monitoring of log files is done by logcollector module (contained in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 src/logcollector subdirectory). If you look at process list you'll see it under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 name ossec-logcollector.
C's main() function of Logcollector module obtains array of logreader structures from config module and calls main function LogCollectorStart(). LogCollectorStart() references logreader structures through logff array pointer.
logreader structures are cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n initialized.
Functions to read different type of files are placed in separate files prefixed with string read_. Each file has one globally visible entry function that has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following prototype:
void *read_something(int pos, int *rc, int drop_it);
The function return value isn't used, and most (but not all!) functions just return NULL. pos is index into structure that defines which particular file should be checked by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 function. Basically, it indexes array logff. So, logff[pos] is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log file that has to be processed. rc is output parameter that contains return code. Finally, drop_it is a flag that tells reader function to drop record (drop_it != 0) or to process it as usual (drop_it == 0).
So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 conclusion is that I should/would create cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following log readers:
  • regex reader that uses regex to define start of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 block, so everything between one line that matches given regex is treated as a log record until cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first line that matches cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 regex again. The variation of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365me is to have separate regex for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 block.
  • modsec_audit reader. A separate log reader that would combine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 multiline output of modsec into a single line/record understood by ossec. In particular, I'll read only audit log of mod_security, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is also debug log which I'll ignore for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time being.
Plan

So, as I said, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 goal was to solve Java and mod_security log problems. While studying cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source I decided to implement two log readers. I'll leave Java for now, since I think it is better solved with modifying syslog (concatenating next line if it doesn't start at column 1). So, one reader that will process mod_security's audit log files and anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r one that will use regex to search for start and end of each record. To do so, obviously those two have to be implemented, but also appropriate configurations has to be defined.
Since I definitely decided to go with attributes instead of hacks (as multiline is) I also decided to convert multiline to use attribute to define number of lines that has to be concatenated.
So, new multiline definition in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration file will be:
multiline
And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 attribute lines is mandatory, it defines how many lines in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log file makes one log record! On cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r hand, mod_security for now will use very simple configuration style:
modsec_audit
Finally, regex based log type will use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following type:
regex
And if end_regex isn't specified, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value of start_regex will be assumed to be also end_regex. start_regex attribute is mandatory.

Well, basically, that's for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 plan.

Implementation

I first implemented code that reads and parses configuration. In order to do that I had to change files src/config/localfile-config.[ch] and src/error_messages/error_messages.h files. Note that I introduced a new field void *data into logreader structure who's purpose is to keep private data of each log reader. In that way I'm not cluttering structure with lots of attributes used only sporadically. Alternatively, I could use union and place everything cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, but for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 time being this will do.

Then I modified src/logcollector/read_multiline.c to take its parameter from a new place in logreader structure, i.e. from private *data pointer. The small problem with how I did it is that it is dependent on 32/64-bit architecture as I'm directly manipulating with pointers, which is actually one big no-no. :) But, for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 prototype it will do.

Next, I copied read_multiline.c into read_modsec_audit.c and modified it to work with mod_security audit logs. Note that mod_security, for each request and response (that are treated as a single record) creates a series of lines and blocks. Block are separated by blank lines, but everything is kept between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following lines:
-- 62a78a12-A--

...

-- 62a78a12-Z--
Blank lines before and after those that mark beginning and an end are ignored. Random looking number (62a78a12) is an identifier that binds multiple blocks togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r in log files. In my implementation I assume cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no interleaving of those!

Finally, I implemented read_regex.c. This one is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 read_modsec_audit.c but instead of fixed delimiters for start and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end or a record, delimiters are provided via configuration file in a form of regular expressions. Note that it would be possible to make read_modsec_audit a special case of read_regex via appropriate use of regular expressions in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration file.

When modules were finished I just had to integrate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m into logcollector.[ch] (and modify how multiline is detected). And cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 implementation was finished.

All cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 changes are provided in new_log_types-v00.patch.

Some conclusions and ideas for a future work

There are few shortcomings of this implementation. First, it is implemented on Linux and only slightly tested even on that platform. So, it is very likely buggy and non-portable across different platforms. Next, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is certainly a non-portable part with respect to 32-bit vs. 64-bit pointers. I marked that part in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 code. Finally, security review has to be done, after all, this is security sensitive application!

It seems to me that multiline module doesn't seem to work right, i.e. cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some corner cases when it misbehaves. Namely, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a check that a single line doesn't exceed maximum line size, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is no check if more than one line exceeds that threshold. And, probably, if it exceeds, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reading will get out of sync, i.e. wrong lines will be grouped togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r.

For regexp module written as a part of this treatise probably additional attributes should be included, like flags so that you can say, e.g., if cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 match should be case sensitive or not. Or, that you can remember matches from start_regex (using () operator) and reuse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m in end_regex regular expression.
For cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end, I don't want to criticize too much, but cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 build system of OSSEC isn't what you would call: flexible. This isn't a problem for production environment, but for development it is since, to test a single change, you have to rebuild all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source. Also, OSSEC assumes you run it from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 installation directory, which is owned by a root. Again, this is a problem for a development, more specifically testing. I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a lot of room for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 improvement.

Thursday, January 19, 2012

OSSEC active response...

This is still work in progress (I need to add more about configuration part). But since OSSEC is so badly documented and I don't know when this will be finished I'm publishing it now.
Prompted by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem caused by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 OSSEC active response, I decided to try to debug why an error is occurring in logs and fine tune it. But in order to do that I had first to understand how it works. There is a section in OSSEC manual about active response, but what wasn't immediately clear to me is who runs active response and where this is configured. But soon I found out that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 active response is run on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 client via agent (actually this part wasn't problematic) but that active response is configured on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 one that instructs agents to run active response.

On server you'll find active response configuration in $OSSEC/etc/ossec.conf. In that file you have several parts of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 configuration:
  1. Set of blocks. Each one defines a command for active response and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 arguments it expects. Note that those commands have to exist on agents.
  2. Set of blocks that define circumstances under which cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re will be active response and which command will be executed.
Scripts for active response

Scripts for active response receive five arguments. The first argument is eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r add or delete. If add is specified, given IP address should be added to a ban list, in case delete is specified address should be removed from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ban list. The second argument is a user name. The third argument is offending IP address. Fourth argument is Unix timestamp (microsecond resolution) when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script was called. Final argument is rule number that triggered active response.
firewall-drop.sh script

This script ships with OSSEC and it adds or removes IP addresses from firewall. It is a relatively simple shell script that accepts command line arguments as specified in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 introduction of this section and installs IP address in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ban list (or removes it from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re, depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command line arguments). The script could be run on Linux, FreeBSD, NetBSD, Solaris and AIX. The following description is specific to Linux behavior even though some things will be common across different platforms.

This script logs its activity into active-responses.log file (in my case in /var/ossec/logs directory). For each invocation one line is emitted into that file. Here is an example of one log entry:
Thu Jan 19 13:52:29 CET 2012 /var/ossec/active-response/bin/firewall-drop.sh add - 193.41.36.141 1326977549.1358625 3301
First group of fields is timestamp when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log entry was generated. Next is a full path and name of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script itself. Finally, all five arguments given to script are also recorded.

Ocasionally, you'll also see error messages like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following one:
Thu Jan 19 06:17:19 CET 2012 Unable to run (iptables returning != 1): 1 - /var/ossec/active-response/bin/firewall-drop.sh delete - 208.115.236.82 1326949601.551727 3301
This log entry is a bit misleading. What happened is that iptables command returned exit code 1 (judging from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 log entry it could be interpreted as if it returned something else and 1 was expected, but that's not true). What is important to note is that you'll usually see multiple log entries like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 previous one grouped togecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only thing that will differ between cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 number 1 (shown in bold above). What basically happens is that in case of an error returned by iptables command cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script tries to run it five times, so, you'll usually see five records and each of those records is numbered.

There are two places where this error might occur. The first one is when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IP address is removed from INPUT chain, while cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r is when it is removed from FORWARD chain.

The only reason this error can occur is because someone or something already removed IP address (or added it). But, this should not happen. Still, it happened to em but I don't know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reason for that.

Looking into this script it was clear that it could be improved from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logging perspective. Currently, if you manually run this command from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command line it will write part of error messages to stdout and some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to log file.

Manual control of scripts

Scripts for active response can be started from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 server using agent_control tool. Note that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 help message of this tool isn't updated to reflect real arguments (bug?) so I had to look into source to infer how to call it. Let me give you several examples of its use.

To list all available agent use this command in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following way:
# ./agent_control -l
   ID: 000, Name: agent0.somedomain.local (server), IP: 127.0.0.1, Active/Local
   ID: 001, Name: agent1.somedomain.local, IP: 192.168.1.2, Active
   ID: 002, Name: agent2.somedomain.local, IP: 192.168.1.3, Active
   ID: 003, Name: agent3.somedomain.local, IP: 192.168.1.4, Disconnected
The output of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 command is a list of known agents, eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r active or non-active. In case you want only active agents use -lc option instead.

Next, if you want to find out some information about a certain agent, you can query it in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following way:
# ./agent_control -i 002

OSSEC HIDS agent_control. Agent information:
   Agent ID:   002
   Agent Name: agent2.somedomain.local
   IP address: 192.168.1.3
   Status:     Active

   Operating system:    Linux agent2.somedomain.local 2.6.32-131.17.1.el6.x86_64..
   Client version:      OSSEC HIDS v2.5-SNP-100907
   Last keep alive:     Thu Jan 19 13:26:01 2012

   Syscheck last started  at: Thu Jan 19 12:10:16 2012
   Rootcheck last started at: Thu Jan 19 06:33:06 2012
To activate active response on a certain agent use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following form of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 agent_control command:
./agent_control -b 1.1.1.1 -f firewall-drop600 -u 002
Here, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 IP address to be blocked is argument of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 -b option (in this case 1.1.1.1). There could be more responses available (defined in ossec.conf on server) and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 option -f selects which one to run. To see which responses are available use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 option -L, like this:
# ./agent_control -L

OSSEC HIDS agent_control. Available active responses:

   Response name: host-deny600, command: host-deny.sh
   Response name: firewall-drop600, command: firewall-drop.sh
Agent on which this command should initiate active response is specified via ID given as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 parameter to option -u. Note that, if you look into help output of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 agent_control, this option is not listed, at least not in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 version 2.6.0. There is a bit of inconsistency here, as some commands use agent ID as a parameter, while this one requires separate parameter. It would be more uniform if all command would instead use -u option.

Note that when you manually initiate active response cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n fourth argument to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script will be '(from_cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365_server)' and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fifth argument will be '(no_rule_id)'.

Also, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 rule that was added can not be removed with agent_control, you have to wait for it to timeout when it will be automatically removed.

Tuesday, January 17, 2012

Interesting problem with OSSEC, active response and mail delivery...

We had a problem that manifested itself in such a way that mail messages didn't come from certain domains, or more specifically from certain mail servers. Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore, no clue was given in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mail log to know what went wrong and to make things worse, logs from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 remote mail server were inaccessible to see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re what actually happened. Finally, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 worse thing was that this happened sporadically. It turned out that this was consequence of a circumstances and a bug with ossec active response. This post explains what happened.

We changed DNS domain several months ago, let me call cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new domain newdomain.hr, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old one olddomain.hr. DNS was reconfigured so that it correctly handled requests for a new domain, but we had to leave old domain because of some Web server. The cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old domain was changed so that when someone asked which is a mail exchanger for olddomain.hr it would receive response: mail.newdomain.hr. Finally, domain olddomain.hr was removed from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mail server. This was cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first error, and now I think that it is better eicá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r to leave old domain on mail server or to not return any response! Actually, if you want to get rid of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old domain, it is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best to remove it from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mail server and that DNS server doesn't return any response for a mail exchanger of a given domain. If you know how mail works, you'll know that by changing MX record for old domain from mail.olddomain.hr to mail.newdomain.hr didn't change anything!

Anyway, that's cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 part concerning mail. Now, about OSSEC. It has a possibility of active response, i.e. to block offending IP addresses for a certain amount of time, 10 minutes by default. One class of offending IP addresses are those that try to deliver mail messages which require mail server to be open relay. Since mail server is properly configured it rejects those messages with a message 'Relay denied'. After mail server rejects  such delivery attempt OSSEC kicks in and blocks offending IP address for 10 minutes.

This, by itself didn't have to be a problem because blocking rules are automatically removed after 10 minutes. But, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a bug in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 removal script that manifested itself in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logs like follows (found on agent in /var/ossec/logs/active-responses.log):
Unable to run (iptables returning != 1): 1 - /var/ossec/active-response/bin/firewall-drop.sh delete - 203.83.62.99 1326738019.2370422 3301
For some reason removal of IP address from block list wasn't successful and that basically meant that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source mail host is blocked indefinitely!

Majority of mail servers that to generate such 'Relay denied' messages are truly spammers and if some of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m were indefinitely blocked that was actually good. But, this particular source mail server that was blocked is very popular one with many users serving many different domains, so now when some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r user tried to send an email that was legal and had correct address, IPtables blocked access and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mail couldn't be delivered. There was nothing in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 logs of destination mail server. Also, sending user didn't receive any response message since mail was being temporary put on hold on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source server.

This particular problem was solved by completely removing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old domain. Now, source mail servers won't even try to deliver mails for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old domain and thus OSSEC won't block legitimate servers. Furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rmore, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sending users will get notification immediately about non-existent mail address.

Tuesday, December 20, 2011

Problem with inactive agent in OSSEC Web Interface

I was just debugging OSSEC Web interface. Namely, it incorrectly showed that one host was not responding event though cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re were log entries that showed ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise. The problem was that this particular host was transferred to anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r network, and thus, its address was changed.

I figured out that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 list of available agents within Web interface is generated from a files found in /var/ossec/queue/agent-info directory. There, you'll find one file per agent. The file name itself consists of agent name and IP address separated by a single dash. In order to display if an agent is connected or not cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 PHP code from Web interface (which itself is placed in /usr/share/ossec-wui directory) obtains time stamp of a file belonging to a particular client and if this time stamp is younger that 20 minutes, it proclaims agent OK, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise, it shows it as inaccessible.

In this case it turned out that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old agent wasn't removed using manage_client tool (selecting option R, for remove). So, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 old information remained, which wasn't updated and thus cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Web interface reported inactive agent.

About Me

scientist, consultant, security specialist, networking guy, system administrator, philosopher ;)

Blog Archive