本想通过查看日志分析系统有什么隐藏的BUG,在查找的过程中发现一些奇怪的问题。
奇怪的404请求
查看日志发现很多奇怪的404请求。为什么会有这么多系统根本不支持的访问记录呢?而且千奇百怪?查阅资料才知这可能是代理扫描软件在不断扫描你的系统。
全世界每一秒都有大量的,人工,半人工,全自动的程序在扫瞄 ip 段,注意是 ip 段,而不是唯一 ip,这跟你有没有公布无关,除非你不出现在公网上。
代理扫描软件在检测你的服务器是否支持代理,从而可以利用你的服务器来做跳板访问其它网站。
what?跳板是什么?
目的
就是为了隐藏自己的地址,让别人无法查找到自己的位置。为了更好地隐蔽自己,一些网络攻击者通常并不直接从自己的系统向目标发动攻击,而是先攻破若干中间系统,让它们成为“跳板”,再通过这些“跳板系统”完成攻击行动。
确定目标
攻击者在通过扫描工具进行定点(IP)扫描或者对某IP段扫描的过程中发现了该系统(服务器)的某个漏洞,然后准备实施攻击。
比如,笔者通过对某IP段的扫描,发现该IP段IP地址为211.52.*.84的主机存在MYSQL漏洞,可以通过提权获取系统权限进而控制该服务器。
设计跳板
跳板通俗讲就是一条通往目标主机的主机链,理论上讲当然是链越长就越安全,但是链太长的话连接的速度太慢,因为其中的中转太多。攻击者往往会评估入侵风险,从而制定或者设计跳板。一般的原则是,如果是政府、军队等敏感部门往往跳板会比较多,甚至这些跳板主机会纵横七大洲四大洋。另外,入侵国内服务器往往也会需要国外的跳板主机。
更多
跳板技术是博大精深,感兴趣的可以深入了解!
系统安全性
系统只要部署在公网上,就存在被代理扫描软件扫描漏洞的风险,那么如何提交主机的安全性呢,最基本的可以隐藏自己服务器的类型和版本,这样一来提高了被扫描漏洞的难度,不会被针对性扫描,具体的解决方法有:
- express 里 diable x-powered-by
- app.disable('x-powered-by');
- res.removeHeader("X-Powered-By");
- res.setHeader('X-Powered-By', 'sky pig1024');
- nginx 里关掉 server_tokens
- http对象添加server_tokens off;达到隐藏服务器版本的目的
- 如果是编译安装的版本还可以修改服务名词,具体百度
404错误
不知道是否因为代理软件扫描的原因,在代理软件扫描出现404时,如果访问/posts也有可能出现404。在本地通过修改404中间件的顺序模拟,先进入/post,再进入404,最后进入error,此时在404中间件和error中间件时由于多次render,报错Can't set headers after they are sent
。
这个错误不好排查,目前在项目中埋点,需要慢慢调试呀!
其他错误
formidable错误
今日查看日志,发现一个错误导致服务器自动重启了一次,具体如下:
// formidable/lib/incoming_form.js:157
var bytesParsed = this._parser.write(buffer);
// TypeError: this._parser.write is not a function
错误不总是出现,不太好重现!