3

装了防火墙就可以高枕无忧了吗?

 3 years ago
source link: https://blog.csdn.net/orbit/article/details/5362125
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
装了防火墙就可以高枕无忧了吗?_oRbIt 的专栏-CSDN博客

    最近和几个朋友聊天,无意间又谈到了防火墙的安全性,一个朋友说看了我以前写的一篇博文“你的防火墙安全吗?”,他觉得我的文章有些言过其实,换句话说就是危言耸听。于是我们之间发生了这样一段对话:

我:“你怎么就能确定你的计算机是安全的?”
他:“我安装的防火墙软件总是能够拦截到非法的网络访问。”
我:“你有方法能够获知你计算机上全部非法的网络访问吗?如果没有,那你怎么确定你的防火墙拦截了全部非法访问?”
他:“......”
我:“你的防火墙拦截到的都是过时的技术,不要抱太高的希望。”
他:“那你的计算机安全吗?你用什么防火墙?”
我:“我用自己写的一个简陋的防火墙,但技术上肯定比大多数使用TDI Hook技术的防火墙安全。尽管如此,我也不敢掉以轻心,未曝光的漏洞很多,只要接在网络上就可能中招。”
他:“我知道漏洞很多,但是目前的情况是恶意软件很多,真正破坏计算机的病毒很少,只要能拦截非法的网络访问就可以看作是安全的。”
我:“你很相信你的防火墙软件?”
他:“当然!我以前也做过网络驱动程序,知道怎么比较防火墙,现在用的XX就是最先进的。”
我:“好,假设某恶意软件利用某个未公开的漏洞将一个驱动程序安装到你的系统中,从内核中直接访问网络呢?”
他:“那它至少要用系统的网络功能吧,只要用就可以被拦截。”
我:“如果不用呢?”
他:“怎么可能?”
我:“怎么不可能,可以不使用TDI层封装好的TCP/IP协议,直接在NDIS或更低一层上实现一个TCP/IP协议就行了。”
他:“你又骗我!”(怎么会多了个“又”呢?)
我:“打个赌吧,我可以不用任何代码注入,从内核中直接连接网络下载一个程序并执行,并让你的防火墙感知不到。”
他:“你能做到?”
我:“当然,我一年多前就实现了这样一个东东,一直放在我的计算机上没什么用,现在刚好从你身上赚点好处,嘿嘿。”
他:“赌什么?”
我:“你的PSP 30x100给我玩一个月,如果我输了,我去买一个PSP,先让你白玩一个月。”
他:“成交!”

一周以后,我在朋友的电脑上装好了我的驱动程序,然后将他指定的一个程序用工具压进一个JPEG位图文件后上传到某网络硬盘上,并将下载链接写到注册表中的某个位置上。静静等了两三分钟后,那个程序的窗口出现在我朋友的电脑上,他深信不疑的防火墙没有任何反应。他吃惊的程度超出了我的想象,我想不是因为心疼他的PSP,而是因为精神支柱倒了,呵呵。

我的朋友想不通我怎么有闲心和毅力在Windows内核中绕开TDI构建另一个TCP/IP协议栈,嗯,我才没有闲心从头开始搞一个TCP/IP协议栈,有很多成熟的开源TCP/IP协议栈,费点心将其移植到Windows的内核中就行了。最完整最强大的就是从开源的BSD socket移植,从linux内核移植也可以,但是工作量也是巨大的,想想就行了,千万别真的去做。我选的是某嵌入式系统中常用的一个微型TCP/IP协议栈,很小巧,占用内存也小,但是最大只支持1024个TCP连接,不过好像够用了,关键是稳定。除此之外,该协议栈源代码还提供了一套和巴克利套接字接口90%兼容的socket API,呵呵,有了这套API,能干的事情就多了,就可以在此基础上实现一个DNS协议和HTTP协议。

扯远了,现在言归正传。我不是第一个想到直接在内核中构建TCP/IP协议绕过TDI防火墙检测的人,几年前在rootkit.com上就有人放出了一个名为NTRoot的驱动,不使用Windows的socket在内核中启动一个telnet服务,通过端口检测查看不到占用的端口,其它计算机却可以telnet到这个机器上执行一些简单的命令。当然这个TCP/IP协议栈十分简陋,没有实现TCP/IP协议中的很多特性,也很不稳定,但这个“概念”肯定会激发很多人,我可以将一个微型的开源TCP/IP协议栈移植到Windows内核,别人肯定也可以,而且是几年前就开始了。因此我一直强调一个观点,就是:不要以为装了防火墙就可以高枕无忧。

罗嗦了这么多,如果把大家吓得不敢上网了,那一定不是我的本意。我的目的是提醒大家注意个人信息的保护,你一定不希望自己三天两头到腾讯去申诉QQ号被盗,也不希望自己辛苦几年攒下的网游行头一夜之间被人卖个精光,当然更不希望某天发现自己的银行账户上只剩几毛钱了,信息安全问题将成为新世纪网络问题的焦点。网络是精彩的,想远离网络是不现实的,恶意程序如此狡诈,到底怎么办才能安全上网?要回答这个问题,首先要了解一下恶意软件是如何攻入用户的计算机,国外某安全网站做过一个统计,42%的用户是在浏览网页时被“挂马”网页上的漏洞利用代码攻破计算机的。这些网页有的本身就是恶意网站,用各种诱人的链接欺骗用户访问,有些是正常的网站被黑客攻破,然后在网页上“挂马”,前些年就有国内某著名门户网站首页被黑客“挂马”,导致数百万用户被恶意程序攻击。另外,还有27%的用户是运行从网络上下载的来历不明的被捆绑了木马程序的软件而被攻破计算机的,某软件的破解程序,盗版的Windows安装盘,升级补丁等都是很好的木马捆绑对象。通过接收电子邮件被攻破计算机的用户比例是14%。

当然其它还有很多方法会导致用户的计算机被攻破,但是这三项原因就占到了83%,如果能防住这三项,就能极大地增加计算机的安全性。问题是怎么防?用防火墙或其它反病毒软件吗?当然不能依赖它们,原因我前面说过,我推荐大家的方法就是隔离,或者说区别访问。现在很多家庭都有两台以上的电脑,将其中一台专门用于浏览网页,接收电子邮件和安装从网络下载的程序,另外一台电脑专用于安全网络访问,比如QQ、网上银行、网上支付等等。如果只有一台电脑的家庭怎么办?或者对于一台笔记本电脑每天从家背到公司,再从公司背回家的IT人士怎么办?难道要背两台?当然不是,你可以在一台电脑上安装两个操作系统用来区分访问,一个用于不安全的网络访问,一个用于安全的网络访问。这样做还有一个好处就是一个系统崩溃了,可以用另一个系统恢复,不过缺点就是需要不停地重启电脑,如果不想频繁重启电脑就只有用虚拟机了。虚拟机是一种模拟器类软件,可以在计算机上虚拟多个计算机,这些虚拟的计算机与主机互相是独立的,虚拟的计算机之间也是互相独立的,但是都可以通过网络接口互联,如果你的主机内存够大,可以在一台计算机上同时虚拟几台虚拟计算机组成一个小网络。虚拟机软件有很多,比较著名的有VmWare、Virtual PC和Virtual Box。VmWare和Virtual PC都是商业软件,VmWare是功能最强的虚拟机软件,通过设置可以支持DirectX 3D,最新的VmWare 7甚至支持Windows 7的玻璃效果。Virtual PC是微软出品的虚拟机软件,给测试用户提供的测试版本,包括操作系统,通常都是用虚拟机发布的,用户不需要安装,直接用虚拟机加载就可以使用。Virtual Box也是一款非常好的虚拟机软件,而且是开源的,深受很多人的欢迎。很多人可能对虚拟机有偏见,认为用虚拟机很慢,其实不然,随着计算机硬件的发展,虚拟机中间代理带来的性能损失几乎可以忽略,在一台2G内存的计算机上给虚拟机配置1G内存,并禁止虚拟机使用硬盘交换文件后运行Windows 7,感觉和主机上没什么区别。我是搞嵌入式开发的,我的主机上安装的都是嵌入式开发环境,为了防止编译器之间互相影响,我的Visual Studio 2008就是安装在虚拟机中的,最新版本的TabSiPlus就是在虚拟机上安装64位Windows 7进行开发和测试的。

最后强调一点,对于信息安全,没有好的方法,装两个系统或使用虚拟机都只是一个形式,真正的安全取决于你的态度,“态度决定一切”,平时多了解一些计算机安全方面的知识,不要总是做“小白”。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK