
The caveat we’ve experienced over the years is that when you receive an LSM alert that might involve malicious malware or hacker activity on the server running LSM, you sometimes have milliseconds to log onto the server to hopefully catch the application opening sockets red handed.
If you are delayed or the application just runs that fast, by the time you are on the server, the port closed and the application is now in hiding.
I often agree necessity is the mother of invention, and I would like to share what we’ve done to extend the Linux Socket Monitor (LSM) to provide running process information, not just the netstat lines.
The extension requires modifying three files in /usr/local/lsm – I do suggest you backup all three files:
- /usr/local/lsm/conf.lsm
- /usr/local/lsm/lsm
- /usr/local/lsm/status.lsm
For /usr/local/lsm/conf.lsm we are going to be adding four (4) lines:
PORTS="$INSPATH/dat/ports.list" PIDS="$INSPATH/dat/pids.list" DIFF_NET_FILE="$INSPATH/dat/diff_net.list" PID_PROC_INFO="$INSPATH/dat/pid_proc.info"
For /usr/local/lsm/status.lsm the following needs to be added after the code
cat <
EOF
cat <
Finally, in /usr/local/lsm/lsm add the following after the following two lines:
echo "changes found in internet server sockets"
ALERT="true"
tmpf $PIDS
tmpf $PORTS
tmpf $DIFF_NET_FILE
tmpf $PID_PROC_INFO
echo $DIFF_NET > $DIFF_NET_FILE
grep -Po ">.*?\:(\d+)" $DIFF_NET_FILE |awk -F":" '{print $2}' > $PORTS
for port in `cat $PORTS`; do
netstat -anp | grep :$port | awk '{print $7}' | awk -F\/ '{print $1}' >> $PIDS
done
for pid in `cat $PIDS`; do
echo "========= START =========" >> $PID_PROC_INFO
echo "lsof -p $pid" >> $PID_PROC_INFO
lsof -p $pid >> $PID_PROC_INFO
echo "Information from /proc/$pid" >> $PID_PROC_INFO
cat /proc/$pid/cmdline >> $PID_PROC_INFO
cat /proc/$pid/environ >> $PID_PROC_INFO
ls /proc/$pid/exe >> $PID_PROC_INFO
cat /proc/$pid/status >> $PID_PROC_INFO
ls -lab /proc/$pid/fd >> $PID_PROC_INFO
echo "--------- END ---------" >> $PID_PROC_INFO
done
Special thanks to pdreissen in the Parallels H-Sphere forum for assistance with the grep and awk command to parse $DIFF_NET ports.
If this was your server, and you are the security administrator, what other information would you add?
Share your thoughts in the comments below.