Answers:
您可以将审计后的框架用于这类事情。它们不是非常“用户友好”或直观的,因此需要您进行一些挖掘。
首先,请确保您已安装并运行auditd,并且您的内核支持它。
对于Ubuntu,您可以使用apt-get install auditd
例如进行安装。
然后添加用于审核的策略,以监视所有connect
系统调用,如下所示:
auditctl -a exit,always -F arch=b64 -S connect -k MYCONNECT
如果您使用的是32位Linux安装,则必须将b64更改为b32。
此命令将在审计框架中插入一个策略,并且现在所有connect()syscall都将记录到您的审计日志文件中(通常是/var/log/audit/audit.log
),供您查看。
例如,使用netcat连接news.ycombinator.com端口80将产生以下结果:
type=SYSCALL msg=audit(1326872512.453:12752): arch=c000003e syscall=42 success=no exit=-115 a0=3 a1=24e8fa0 a2=10 a3=7fff07a44cd0 items=0 ppid=5675 pid=7270 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts4 ses=4294967295 comm="nc" exe="/bin/nc.openbsd" key="MYCONNECT"
type=SOCKADDR msg=audit(1326872512.453:12752): saddr=02000050AE84E16A0000000000000000
在这里,您可以看到/bin/nc.openbsd应用程序发起了connect()调用,如果您获得大量的connect调用,并且只想grep某个IP或端口,则必须进行一些转换。SOCKADDR行包含一个saddr参数,它以0200开头,后跟十六进制的端口号(0050),即80,然后是十六进制的IP(AE84E16A),即news.ycombinator.com的IP 174.132.225.106。
审核框架会生成大量日志,因此请记住在完成任务后将其禁用。要禁用上述策略,只需将-a替换为-d即可:
auditctl -d exit,always -F arch=b64 -S connect -k MYCONNECT
关于审核框架的良好文档:http :
//doc.opensuse.org/products/draft/SLES/SLES-security_sd_draft/part.audit.html
在以下位置将IP地址转换为十六进制,十进制,二进制等,或从十六进制,十进制,二进制等转换IP地址
。
通用十六进制/十进制转换器:http:
//www.statman.info/conversions/hexadecimal.html
来自IT安全堆栈交换的已审核内容简介。 http://security.blogoverflow.com/2013/01/a-brief-introduction-to-auditd/
编辑1:
另一种快速处理方法(瑞典语:fulhack)是创建一个快速循环,将连接数据转储给您,如下所示:
while true;do
ss -ntap -o state established '( dport = :80 )'
sleep 1
done
此命令使用ss
命令(套接字统计信息)将当前已建立的连接转储到端口80,包括启动它的进程。如果有很多数据,您可以| tee /tmp/output
在完成后添加以在屏幕上显示输出以及将其写入/ tmp / output以便以后进行处理/挖掘。如果它不能赶上快速的haproxy连接,请尝试删除它,sleep 1
但是如果它使用率很高的机器,则要避免大量日志记录。根据需要修改!
ausearch -i
这些saddr
十六进制字符串为您自动解码。
您还可以复制从“ ausearch -i”获得的大量日志,以仅查看那些已成功连接到Internet上另一主机的套接字。我编写了一个简单的脚本,以获取创建套接字以连接到Internet上的主机的每个进程和命令,以及该目标主机的连接地址和套接字“创建”的当前时间。这里是:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "You must run this script as root boy!"
exit 1
fi
> proccessConnections.dat
connections=`ausearch -i | grep host: | awk -F "msg=audit" '{print $2}' | awk -F ": saddr" '{print $1}'`
connectionsNumber=`echo "$connections" | wc -l`
echo "Number of connections: $connectionsNumber"
echo "$connections" > conTemp.dat
let counter=1
while read connectInfo; do
success=`ausearch -i | grep "$connectInfo" | grep "type=SYSCALL" | grep success=yes`
addressInfo=`ausearch -i | grep "$connectInfo" | grep type=SOCKADDR | awk -F ': ' '{print $2}'`
processInfo=`ausearch -i | grep "$connectInfo" | grep "type=SYSCALL" | awk -F 'comm=' '{print $2}' | awk -F 'key' '{print $1}'`
if [[ $success != "" ]]
then
echo "[$counter - $connectionsNumber] (success) comm=$processInfo - $addressInfo - $connectInfo"
echo "[$counter - $connectionsNumber] (success) comm=$processInfo - $addressInfo - $connectInfo" >> proccessConnections.dat
else
echo "[$counter - $connectionsNumber] (no success) comm=$processInfo - $addressInfo - $connectInfo"
echo "[$counter - $connectionsNumber] (no success) comm=$processInfo - $addressInfo - $connectInfo" >> proccessConnections.dat
fi
let counter++
done < conTemp.dat