0

I have apparently malicious php script somewhere in my webserver, Debian 8.3, Apache 2.4 Legal Apache process can be seen like this:

16169 www-data  20   0  482156  59180  41952 S  7.3  1.5   0:01.08 apache2
14791 www-data  20   0  483288  63456  45088 S  0.7  1.6   0:02.08 apache2

The illegal httpd process can be seen like this:

19214 www-data  20   0  142700 112156   2052 S  0.7  2.8   0:00.89 httpd

We can see user, which launched the process and image name, which is obviously faked, because when I do some tracking via PID:

root@VS1:~/skripty# lsof -p 19214
COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF    NODE NAME
httpd   19214 www-data  cwd    DIR      8,1     4096       2 /
httpd   19214 www-data  rtd    DIR      8,1     4096       2 /
httpd   19214 www-data  txt    REG      8,1    10416 3278761 /usr/bin/perl
httpd   19214 www-data  mem    REG      8,1    27136 3281419 /usr/lib/x86_64-linux-gnu/perl/5.20.2/auto/File/Glob/Glob.so
httpd   19214 www-data  mem    REG      8,1    89368 3281423 /usr/lib/x86_64-linux-gnu/perl/5.20.2/auto/POSIX/POSIX.so
httpd   19214 www-data  mem    REG      8,1    18632 3281416 /usr/lib/x86_64-linux-gnu/perl/5.20.2/auto/Fcntl/Fcntl.so
httpd   19214 www-data  mem    REG      8,1    43408 3281417 /usr/lib/x86_64-linux-gnu/perl/5.20.2/auto/Socket/Socket.so
httpd   19214 www-data  mem    REG      8,1    18728 3281425 /usr/lib/x86_64-linux-gnu/perl/5.20.2/auto/IO/IO.so
httpd   19214 www-data  mem    REG      8,1    35176 1313952 /lib/x86_64-linux-gnu/libcrypt-2.19.so
httpd   19214 www-data  mem    REG      8,1  1738176 1313950 /lib/x86_64-linux-gnu/libc-2.19.so
httpd   19214 www-data  mem    REG      8,1   137440 1313946 /lib/x86_64-linux-gnu/libpthread-2.19.so
httpd   19214 www-data  mem    REG      8,1  1051056 1313954 /lib/x86_64-linux-gnu/libm-2.19.so
httpd   19214 www-data  mem    REG      8,1    14664 1313953 /lib/x86_64-linux-gnu/libdl-2.19.so
httpd   19214 www-data  mem    REG      8,1  1827768 3281415 /usr/lib/x86_64-linux-gnu/libperl.so.5.20.2
httpd   19214 www-data  mem    REG      8,1   140928 1313947 /lib/x86_64-linux-gnu/ld-2.19.so
httpd   19214 www-data    0r   CHR      1,3      0t0    5593 /dev/null
httpd   19214 www-data    1w   CHR      1,3      0t0    5593 /dev/null
httpd   19214 www-data    2w   CHR      1,3      0t0    5593 /dev/null
httpd   19214 www-data    3u  IPv4 29921164      0t0     TCP *:27451 (LISTEN)

Please note, that this server is right now behind internal firewall, so there is no way to comunicate with outside world through SMTP on port 25. If I unblock this firewall rule, LSOF and NETSTAT will show me tens, or even hundreds of active SMTP connections. This malware is apparently designed for spamming. What I can not see from LSOF is the origin of perl script. I can kill the process but it wil reapear again. It is even shutting down itself.

So what I allready did:

  1. blocked any outside communication on port 25 to preserve me from banning
  2. searched for any suspitious code blocks like eval, base64_decode and handfully checked scripts for suspitious code blocks.
  3. In php.ini I blocked following: disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,shell_exec,system,passthru,
  4. Hardened file/folder permissions to make the php applications (wordpresses, expression engine). Any php file has owner of root and permissions set to 444. Any folder owner is www-data with 500 permissions. For special directories, like uploads, there is 700 rule. To fix that, I set up cronjob for every folder which is running every 1 minute and cleans up any *.php file and puts harmless index.php file into every folder/subfolder. I needed to exclude som cache folders and I suspect that that might be my current attack vector.

Important note: When I stop Apache 2.4 server and manually kill fake httpd process, no new malicious httpd processes will spawn.

This leads me to a conclusion, to manualy enable/disable my virtualhosts (10 at this time) to se, which one is causing launching of malicious httpd process.

If you have better idea, I will gladly follow your advices.

Thanks

EDIT: This is allready a fresh new server but when I migrated on some old webapps, which I cleaned by automatic tools and eyeballing the source code, I apparently missed something. In the old server, there were a lot of other issues (like litecoin mining, image data for webshops which do not belonged to me, thousands of html files generated by robots). Right now I have no other known issue except this fake process. Server is hard (or at least) hardened enough then before. This is my last problem with him. I need to track perl script executing.

EDIT 2

root@VS1:~# pstree -p -u
systemd(1)─┬─acpid(461)
           ├─agetty(751)
           ├─apache2(28369)─┬─apache2(26542,www-data)
           │                ├─apache2(27556,www-data)
           │                ├─apache2(27895,www-data)
           │                ├─apache2(28231,www-data)
           │                ├─apache2(28233,www-data)
           │                ├─apache2(30282,www-data)
           │                ├─apache2(30283,www-data)
           │                ├─apache2(30285,www-data)
           │                ├─apache2(30286,www-data)
           │                └─apache2(30288,www-data)
           ├─atd(447,daemon)
           ├─cron(450)
           ├─dbus-daemon(454,messagebus)
           ├─httpd(30628,www-data)
           ├─init(29268,www-data)
           ├─logger(15714)
           ├─mysqld_safe(15713)─┬─logger(15853)
           │                    └─mysqld(15852,mysql)─┬─{mysqld}(15854)
           │                                          ├─{mysqld}(15855)
           │                                          ├─{mysqld}(15856)
           │                                          ├─{mysqld}(15857)
           │                                          ├─{mysqld}(15858)
           │                                          ├─{mysqld}(15859)
           │                                          ├─{mysqld}(15860)
           │                                          ├─{mysqld}(15861)
           │                                          ├─{mysqld}(15862)
           │                                          ├─{mysqld}(15863)
           │                                          ├─{mysqld}(15864)
           │                                          ├─{mysqld}(15866)
           │                                          ├─{mysqld}(15867)
           │                                          ├─{mysqld}(15868)
           │                                          ├─{mysqld}(15869)
           │                                          ├─{mysqld}(15870)
           │                                          ├─{mysqld}(15871)
           │                                          ├─{mysqld}(15872)
           │                                          ├─{mysqld}(15873)
           │                                          ├─{mysqld}(15874)
           │                                          ├─{mysqld}(15875)
           │                                          ├─{mysqld}(15876)
           │                                          ├─{mysqld}(28177)
           │                                          ├─{mysqld}(28253)
           │                                          ├─{mysqld}(28259)
           │                                          ├─{mysqld}(28275)
           │                                          ├─{mysqld}(30162)
           │                                          ├─{mysqld}(30166)
           │                                          ├─{mysqld}(30172)
           │                                          └─{mysqld}(30173)
           ├─named(2130,bind)─┬─{named}(2132)
           │                  ├─{named}(2133)
           │                  └─{named}(2134)
           ├─rpc.idmapd(446)
           ├─rpc.statd(432,statd)
           ├─rpcbind(423)
           ├─rsyslogd(460)─┬─{in:imklog}(498)
           │               ├─{in:imuxsock}(497)
           │               └─{rs:main Q:Reg}(499)
           ├─sshd(14432)───sshd(28238)───bash(28240)───pstree(30964)
           ├─systemd-journal(142)
           ├─systemd-logind(452)
           ├─systemd-udevd(145)
           └─vmtoolsd(448)

0 Answers0