tcp协议是最底层的,一般来说无需修改,直接使用。但是在某些场景下,直接使用会带来一些安全性的问题:比如物联网设备。
物联网设备需要经常的发送消息到服务器,如果直接使用标准TCP协议,攻击者在抓包后很容易获得服务器的端口,然后进行以下操作:
- 饱和攻击,将所有设备离线!
- 报文解析,通过对报文的处理来逆向报文,伪造数据进而造成损失!
这里提供一个思路,根据tcp 协议,在协议中有一个可选头,可选头可以附带自定义的数据。通过这个字段来将数据进行封包,然后先校验这个标识,如果未通过,则默认为垃圾消息,进行丢弃处理。
这样的好处在于,即使攻击者抓取端口,但攻击成本会提高数倍:
- 即使知道端口,但因为所有数据将会没有响应,所以攻击者也不知道端口状态,所有攻击如牛入泥海
- 由于有自定义的标识,伪造数据包后使用标准tcp封包发送将会被丢弃,进而提高攻击难度
经过在网上找了一圈资料,把以上思路进行了实现,写了一个基于netfilter的插件,基本实现了上述功能:
贴上地址,希望可以启发一下大家的思路,如果有用请点赞
通过linux netfilter 扩展的 TCP自定义封包过滤器。