先放项目地址再作说明^ ^: 一个改良版的FTP密码嗅探器,详见nfsniff_Result.c
一次基于Netfilter的LKM编写,主要实现捕获如mail.ustc.edu.cn等使用明文传输用户名和密码的网站的用户名和密码;并在接收到特定的ICMP数据包之后将捕获的用户名和密码发给攻击者。
Netfilter hook
先简要介绍下Netfilter:
在1~5每个hook点,有很多已经预先按照优先级注册了的回调函数(即hook函数),这些hook函数埋伏在这些点,形成了一条链。
Netfilter中定义了五个关于IPv4的hook:
- NF_INET_PRE_ROUTING ,用于在完整性校验之后,选路确定之前
- NF_INET_LOCAL_IN ,在选路确定之后,且数据包的目的是本地主机
- NF_INET_FORWARD ,目的地是其它主机地数据包
- NF_INET_LOCAL_OUT ,来自本机进程的数据包离开本地主机的过程中
- NF_INET_POST_ROUTING ,在数据包离开本地主机“上线”之前
“钩子”的使用方法
- “钩子”的使用首先实例化一个nf_hook_ops对象,
- 然后对其进行必要的初始化设置,
最后通过nf_register_hook()函数将其注册到二维数组nf_hooks中。
我们首先初始化nf_hook_ops中的常用字段:
- 然后在模块加载和退出函数中注册和移除钩子函数:
FTP Sniffer
- 利用Netfilter hook,做了一点微小的工作:
一个改良版的FTP密码嗅探器,详见nfsniff_Result.c
展示一下效果:
在浏览器上登录mail.ustc.edu.cn之后,加载进内核模块,执行getpass.c,获取用户名和密码: