Installation Linux Malware Detect (Maldet)
Linux Malware Detect (LMD) is a malware scanner for Linux released under the GNU GPLv2 license, that is designed around the threats faced in shared hosted environments. It uses threat data from network edge intrusion detection systems to extract malware that is actively being used in attacks and generates signatures for detection.
In addition, threat data is also derived from user submissions with the LMD checkout feature and from malware community resources. The signatures that LMD uses are MD5 file hashes and HEX pattern matches, they are also easily exported to any number of detection tools such as ClamAV.
Installation
Installation is very straightforward. Ensure to change the version number below to the one you have actually downloaded:
# cd /usr/local/src # wget http://www.rfxn.com/downloads/maldetect-current.tar.gz # tar -zxvf maldetect-current.tar.gz # cd maldetect-1.4.2 # ./install.sh
After the installation has been completed succesfully, you will be presented with the following output.
Linux Malware Detect v1.4.2 (C) 2002-2011, R-fx Networks (C) 2011, Ryan MacDonald inotifywait (C) 2007, Rohan McGovern This program may be freely redistributed under the terms of the GNU GPL installation completed to /usr/local/maldetect config file: /usr/local/maldetect/conf.maldet exec file: /usr/local/maldetect/maldet exec link: /usr/local/sbin/maldet exec link: /usr/local/sbin/lmd cron.daily: /etc/cron.daily/maldet maldet(6073): {sigup} performing signature update check... maldet(6073): {sigup} local signature set is version 2013102428301 maldet(6073): {sigup} new signature set (2013102428301) available maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/md5.dat maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/hex.dat maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/rfxn.ndb maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/rfxn.hdb maldet(6073): {sigup} downloaded http://www.rfxn.com/downloads/maldet-clean.tgz maldet(6073): {sigup} signature set update completed maldet(6073): {sigup} 10849 signatures (8981 MD5 / 1868 HEX)
Configuration
Maldet can be configured by editing the file below:
# vi /usr/local/maldetect/conf.maldet
The default file looks as follows:
# [ EMAIL ALERTS ] ## # The default email alert toggle # [0 = disabled, 1 = enabled] email_alert=1 # The subject line for email alerts email_subj="maldet alert from $(hostname)" # The destination addresses for email alerts # [ values are comma (,) spaced ] email_addr="youremail@yourdomain.com" # Ignore e-mail alerts for reports in which all hits have been cleaned. # This is ideal on very busy servers where cleaned hits can drown out # other more actionable reports. email_ignore_clean=0 ## # [ QUARANTINE OPTIONS ] ## # The default quarantine action for malware hits # [0 = alert only, 1 = move to quarantine & alert] quar_hits=1 # Try to clean string based malware injections # [NOTE: quar_hits=1 required] # [0 = disabled, 1 = clean] quar_clean=1 # The default suspend action for users wih hits # Cpanel suspend or set shell /bin/false on non-Cpanel # [NOTE: quar_hits=1 required] # [0 = disabled, 1 = suspend account] quar_susp=0 # minimum userid that can be suspended quar_susp_minuid=500
You may edit the following values to configure Maldet to your needs
- email_alert : If you would like to receive email alerts, then it should be set to 1.
- email_subj : Set your email subject here.
- email_addr : Add your email address to receive malware alerts.
- quar_hits : The default quarantine action for malware hits, it should be set 1.
- quar_clean : Cleaing detected malware injections, must set to 1.
- quar_susp : The default suspend action for users wih hits, set it as per your requirements.
- quar_susp_minuid : Minimum userid that can be suspended.
Cronjob for automated scan
During installation, a daily cron job script is installed in /etc/cron.daily/maldet
.
The cronjob installed by LMD is used to perform daily update of signature files, keep the session, temp and quarantine data to no more than 14 days old and it runs a daily scan of recent file system changes. If inotify-based real time monitoring is enabled, the daily cron job also scans the recently updated/created files for malware. The folder structures for the most popular control panel configurations: Ensim, Plesk, DirectAdmin, Cpanel, Interworx, have been imcluded.
You should ensure compatibility with your servers’ structure of homedirs and make sure it corresponds with this cron file. Take special note of the control panel specific sections in this cron file.
#!/bin/bash # clear quarantine/session/tmp data every 14 days /usr/sbin/tmpwatch 336 /usr/local/maldetect/tmp >> /dev/null 2>&1 /usr/sbin/tmpwatch 336 /usr/local/maldetect/sess >> /dev/null 2>&1 /usr/sbin/tmpwatch 336 /usr/local/maldetect/quarantine >> /dev/null 2>&1 /usr/sbin/tmpwatch 336 /usr/local/maldetect/pub/*/ >> /dev/null 2>&1 # check for new release version /usr/local/maldetect/maldet -d >> /dev/null 2>&1 # check for new definition set /usr/local/maldetect/maldet -u >> /dev/null 2>&1 # if were running inotify monitoring, send daily hit summary if [ "$(ps -A --user root -o "comm" | grep inotifywait)" ]; then /usr/local/maldetect/maldet --alert-daily >> /dev/null 2>&1 else # scan the last 2 days of file changes if [ -d "/home/virtual" ] && [ -d "/usr/lib/opcenter" ]; then # ensim /usr/local/maldetect/maldet -b -r /home/virtual/?/fst/var/www/html 2 >> /dev/null 2>&1 /usr/local/maldetect/maldet -b -r /home/virtual/?/fst/home/?/public_html 2 >> /dev/null 2>&1 elif [ -d "/etc/psa" ] && [ -d "/var/lib/psa" ]; then # psa /usr/local/maldetect/maldet -b -r /var/www/vhosts/?/httpdocs 2 >> /dev/null 2>&1 /usr/local/maldetect/maldet -b -r /var/www/vhosts/?/subdomains/?/httpdocs 2 >> /dev/null 2>&1 elif [ -d "/usr/local/directadmin" ]; then # DirectAdmin /usr/local/maldetect/maldet -b -r /var/www/html/?/ 2 >> /dev/null 2>&1 /usr/local/maldetect/maldet -b -r /home?/?/domains/?/public_html 2 >> /dev/null 2>&1 else # cpanel, interworx and other standard home/user/public_html setups /usr/local/maldetect/maldet -b -r /home?/?/public_html 2 >> /dev/null 2>&1 fi fi
In order to activate email alerts when malware is detected, you need to open the Maldet configuration file, which is located at:
/usr/local/maldetect/conf.maldet
.
email_alert=1 email_subj="Maldet alert from $(hostname)" email_addr="email@domain.com"
iNotify Monitoring
The inotify monitoring feature is designed to monitor users in real-time for file creation/modify/move operations. This option requires a kernel that supports inotify_watch (CONFIG_INOTIFY) which is found in kernels 2.6.13+ and CentOS/RHEL 5 by default. If you are running CentOS 4 you should consider an inbox upgrade with: http://www.rfxn.com/upgrade-centos-4-8-to-5-3/
There are three modes that the monitor can be executed with and they relate to what will be monitored, they are USERS|PATHS|FILES.
- e.g: maldet –monitor users
- e.g: maldet –monitor /root/monitor_paths
- e.g: maldet –monitor /home/mike,/home/ashton
The options break down as follows:
- USERS – The users option will take the homedirs of all system users that are above inotify_minuid and monitor them. If inotify_webdir is set then the users webdir, if it exists, will only be monitored.
- PATHS – A comma spaced list of paths to monitor
- FILE – A line spaced file list of paths to monitor
you can run maldet as a daemon as follows. The example below displays the syntax for a comma spaced list of paths to monitor
maldet -m /var,/home
maldet(5330): {mon} set inotify max_user_instances to 128 maldet(5330): {mon} set inotify max_user_watches to 61440 maldet(5330): {mon} added /var to inotify monitoring array maldet(5330): {mon} added /home/xmodulo to inotify monitoring array maldet(5330): {mon} starting inotify process on 1 paths, this might take awhile... maldet(5330): {mon} inotify startup successful (pid: 4154) maldet(5330): {mon} inotify monitoring log: /usr/local/maldetect/inotify/inotify_log
Usage
To scan a folder, for example /home you should enter:
maldet -a /home.
you can examine the malware scan report by running the following command and appending the scan report ID.
maldet --report number-xxxx.xxxxx
To quarantine the infected files, run the following command with the scan report ID. The infected files will then be quarantined for cleaning.
# maldet -q SCAN ID # maldet –quarantine SCANID
Clean all malware results from a previous scan
# maldet -n SCAN ID # maldet --clean SCAN ID
Restore a file that you have already quarantined
# maldet -s FILENAME # maldet --restore FILENAME
Ignore Files
There are three ignore files available in Linux Malware Detect. These can be used to exclude files from daily malware scans.
ignore_paths
This is a line spaced file for paths that are to be execluded from search results
/usr/local/maldetect/ignore_paths
ignore_sigs
This is a line spaced file for signatures that should be removed from file scanning
/usr/local/maldetect/ignore_sigs
ignore_inotify
This is a line spaced file for paths that are to be excluded from inotify monitoring
/usr/local/maldetect/ignore_inotify