QRadar CE – Under the Hood

IBM is bringing free QRadar to a wider audience with Community Edition. Community Edition is a fully-featured version of QRadar that is low memory, low EPS, and includes perpetual license.

If you have read my previous article, you should have a working QRadar CE appliance.

Which is a nice start – but If you want to actually try your newly installed appliance in a real environment – even if you just testing it – the default install will probably not suit your needs. So You most likely have to reinstall the whole thing again, to get what you really need.

However to be able to decide what you really need, you should have a look to se what you just got with the default install.

Disk Partitions

The default install will result something like this:

Filesystem                          Size  Used Avail Use% Mounted on
/dev/mapper/centos_qradar--ce-root   50G   18G   33G  35% /
devtmpfs                            3.0G     0  3.0G   0% /dev
tmpfs                               3.0G   12K  3.0G   1% /dev/shm
tmpfs                               3.0G   13M  3.0G   1% /run
tmpfs                               3.0G     0  3.0G   0% /sys/fs/cgroup
/dev/sda1                          1014M  164M  851M  17% /boot
/dev/mapper/centos_qradar--ce-home  144G   33M  144G   1% /home
tmpfs                               602M     0  602M   0% /run/user/0

What you can see here?

  • The total disk usage is not even exceeding 20Gb.

While the minimal requirements say 130Gb. In practice the installation will fail if you assign less than 80Gb for your root disk!

  • Most of the stuff using space from the root partition.

This sounds fishy, so let’s check it:

# du -hs /* 
0	/bin
131M	/boot
12K	/dev
38M	/etc
160K	/home
0	/lib
0	/lib64
0	/media
0	/mnt
7.7G	/opt
0	/proc
212K	/root
13M	/run
0	/sbin
0	/srv
8.7G	/store
25M	/storetmp
0	/sys
180M	/tmp
1.4M	/transient
277M	/usr
276M	/var

This clearly show you that the default CentOS install in not suitable for QRadar at all. You will need to redesign this part, as most ot the stuff lives in /opt/, and all of the further data will go under /store/ directory. As these are hard-coded locations, better not poke them. Adapt your setup instead:

The obvious solution would be to assign a separate virtual disk to /store/. The size should be planned according to your needs, but thanks to the virtualization technology, You can increase the virtual disk size on demand.

However, the install script will silently fail if it’s found a /store directory. So you can fix this issue by moving the files to a separate disk after a successfull install. As this should be done in recovery mode, you probably better off with a big single disk.

  • Most of your space assigned to /home.

In a multi user environment, this may sound right. However QRadar is an appliance where no real user files will reside. So this is totally wrong.

You do not need separate partition for /home.

  • LVM is used insted of standard partitions.

While LVM is a good and practical thing if we using it on a real hardware. But it is completely useless inside a VM, as You can use your virtualisation features instead.

Use separate virtual (thin) disks instead of LVM partitions.

Running Processes

As the output of ps auxf will break my blog template design, or at least it would be unreadable, so I just link it as a separate file. Check it to see what you should get just after the install process.

Note that this beast is always doing something, so the process list may wary. But the main processes are:

  • docker containers

As all of the QRadar apps are running inside a docker container.

  • PostgreSQL

Where the main offense database lives.

  • Apache HTTPD

For the HTTP based console access.

  • Apache Tomcat

As a java web application server

  • Java based things

As most of the stuff inside is java based

  • NGINX

As a reverse proxy for the docker based apps

As you can see, this appliance is a really complex set of services, with a javacript based GUI: the QRadar Console. It may seems over complicated, however in case a real life enterprise solution, most of these services can be offloaded to a different machine for the scalability. This is reflected by the output of: netstat -tulpn too.

This also means that this appliance is very fragile, as all of these services are exposed to the network you attached to. You should place it to a separated and secured network segment, and only allow the really needed traffic. Even if the appliance is working with cyber threats, it is not meant to defend itself against any kind of attack scenario.

Packetfilter

The packetfilter (iptables) rules, used by the appliance is confirming my statement above. Here you can see filter table, the corresponding NAT table, and the default set of IPV6 rules.

Network Interfaces

The interface list (ifconfig output) looks something like this:

appProxy: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.4.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:70:d2:9c:e6  txqueuelen 0  (Ethernet)
        RX packets 1558  bytes 541988 (529.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1664  bytes 665068 (649.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.2.1  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 2001:db8:1::1  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::1  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::42:3dff:fe0a:7f5c  prefixlen 64  scopeid 0x20<link>
        ether 02:42:3d:0a:7f:5c  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 544 (544.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5  bytes 670 (670.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

dockerApps: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.3.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:85:cc:c8:f7  txqueuelen 0  (Ethernet)
        RX packets 110  bytes 183385 (179.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 82  bytes 12229 (11.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

dockerInfra: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.5.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:63:14:07:a0  txqueuelen 0  (Ethernet)
        RX packets 1698  bytes 421457 (411.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2094  bytes 632371 (617.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.21.218  netmask 255.255.255.0  broadcast 192.168.21.255
        ether 00:0c:29:f3:e7:3f  txqueuelen 1000  (Ethernet)
        RX packets 11296  bytes 10511747 (10.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7295  bytes 3680005 (3.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 228626  bytes 178746776 (170.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 228626  bytes 178746776 (170.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Note that the 192.168.21.218 is the IP address of the QRadar appliance assigned by me. The other IP’s are QRadar specific, and you have very limited possibilities to change those.


After a successful installation, your CentOS turned into a QRadar appliance! From this point, you should manage it accordingly!


As all the official documentation said, this version is not for production. You have no real support if doing so. However you can try in your real environment, you can feed it with real logs and events, and you can learn how to use it.

 


As I’m currently working for IBM, please read my disclaimer.