黑客攻防是21世纪网络安全面临的重要挑战之一。近年来,新闻报道的很多事件似乎也都在证明这件事情,例如网络罪犯窃取大量钱财、勒索蠕虫病毒肆虐、敌对势力互相影响选举结果、交战双方互相破解彼此的工具等。这些大都是黑客的“杰作”,而它们对日益数字化的世界所造成的影响才刚刚被察觉。
我接触或者共事过的网络安全人员可能有数万名,涉及Null-Byte网络社区以及政府的几乎每一个部门。通过这些经历我了解到,很多有远大抱负的网络安全人员对于Linux系统都毫无经验或了解甚少,而这种经验上的欠缺正是他们成为安全专家所面临的主要障碍。几乎所有“最好”的黑客工具都是在Linux系统中编写的,因此一些基本的Linux系统操作技能是成为专业网络安全人员的必备条件。我编写本书的目的正是帮助那些有远大抱负的网络安全人员克服这一障碍。
黑客攻防是IT行业内非常高深的领域。正因如此,从事网络安全工作需要对IT概念和技术有广泛而深入的理解,Linux系统正是其中最基本的一项。如果你想从事网络安全方面的工作,那么我强烈建议你在使用和理解Linux系统方面投入一定的时间和精力。
本书并不是针对资深网络安全人员或经验丰富的Linux系统管理人员而编写的。相反,本书的目标读者是那些在黑客攻防、信息安全和渗透测试领域刚刚起步的人。同时,本书不会对Linux系统或黑客攻防进行完整论述,而只是进行入门级介绍。本书从Linux系统的基本内容开始,扩展讲解了一些基本的bash和Python脚本编程技术。在适当的地方,我会尝试通过一些网络攻防实例来介绍Linux系统原理。
这里,我们将回顾一下信息安全领域白帽黑客行为的发展历程,并且详细介绍安装虚拟机的流程,以便读者能够在不卸载当前操作系统的情况下,在自己的系统上安装Kali Linux系统。
在本书的前半部分,你将熟悉Linux系统的基本概念。
第1章将引领你熟悉文件系统和终端,并介绍一些基本命令。第2章将为你展示如何通过文本操作来对软件及文件进行查找、检查和修改。
第3章将介绍如何管理网络,包括网络扫描、查看连接信息以及隐藏网络和DNS信息。
第4章将介绍如何添加、移除和更新软件,以及如何简化系统。在第5章中,你将学习如何通过文件和目录权限操作来控制访问,以及一些用来实现权限提升的技术。
第6章将介绍如何管理进程,包括启用和停止进程,以及分配资源来实现更高的控制权限。在第7章中,你将学习如何管理环境变量来实现最佳性能、便捷性乃至隐匿性,包括查找和过滤变量,更改PATH变量,以及创建新环境变量。
第8章将介绍bash脚本编程,这对于任何认真钻研的网络安全人员来说都是一项重要的技能。你将学习bash的基本内容,并创建一个脚本,用来对稍后将要进行渗透测试的目标端口进行扫描。
第9章和第10章将介绍一些必备的文件系统管理技能,教你如何对文件进行压缩和存档以保持系统洁净,如何复制整个存储设备,以及如何获取文件和已连接磁盘的相关信息。
本书后半部分将深入介绍黑客攻防的相关主题,从而针对相应的攻击进行有效的防御。在第11章中,你将了解黑客会如何利用和操控日志系统来获取目标活动信息,并且掩盖行踪。第12章将介绍三个核心Linux系统服务:Apache网络服务器、OpenSSH和MySQL。你将学习创建一个网络服务器、构建一个树莓派侦察设备,并且学习数据库及其漏洞等相关内容。第13章将展示如何通过代理服务器、Tor网络、VPN连接和加密电子邮件来实现安全和匿名。
第14章将介绍无线网络的相关内容。你将学习基本的网络命令,之后将了解黑客会如何破解Wi-Fi接入点,如何探测并连接蓝牙信号,从而有效遏制这类攻击。
第15章将从内核工作原理以及黑客会如何利用Linux系统驱动的视角来深入剖析Linux系统本身。在第16章中,你将学习必备的调度技能,以实现脚本自动化。
第17章将讲解Python语言的核心概念,进而引导你学习如何编写两款网络安全工具:一个用于监控TCP/IP连接的扫描器和一个简单的口令破解器。
随着近年来信息安全行业的发展,白帽黑客行为呈现急剧增长的趋势。白帽黑客行为是指以发现脆弱性和改善安全性为目的而尝试对系统进行渗透测试的行为。
随着组织的安全意识越来越强,以及安全漏洞所导致的后果的严重性呈指数级增长,很多大型组织都开始考虑将安全服务承包出去。这些关键的安全服务之一就是渗透测试。从本质上来说,渗透测试就是以揭露一家公司网络和系统的漏洞为目的而进行的一次受委托的合法攻击。
一般来说,组织会先通过漏洞评估来发现其网络、操作系统和服务中的潜在漏洞。这里强调“潜在”,是因为这种漏洞扫描结果中会包含大量的误报(即所谓的漏洞实际并不存在)。而渗透测试人员的任务就是尝试对这些漏洞进行攻击或渗透测试。只有这样,组织才能知道漏洞是否真实存在,然后投入时间和金钱来修复真正的漏洞。
那么,为什么网络安全人员会选择使用Linux系统,而不是其他操作系统?主要是因为Linux系统为网络安全人员提供了更高层次的控制能力。
与Windows系统不同,Linux系统是开源的,这就意味着你能够接触到操作系统源码,可以按照自己的意愿对其进行控制和修改。如果你想要系统以一种非预期的方式运行,那么能够进行源码修改是基本的要求。
想要有效地实现网络安全防御,你必须对自己的操作系统有所了解,并且熟悉黑客攻击的常用方法。Linux系统是完全透明的,这就意味着我们可以对它的所有工作部分进行观察和操控。
而Windows系统并不是这样。微软尽可能地加大了理解操作系统内部工作机理的难度,因此你永远无法了解“表层之下”的运行情况。而在Linux系统中,你可以清晰直观地观察操作系统的每一部分,这就使得在Linux系统上工作更有效率。
Linux系统是精细化的,这就意味着你可以对系统进行近乎无限制的控制。在Windows系统中,你只能控制微软允许你控制的部分;而在Linux系统中,一切都可以通过终端进行最微小或最宏观层面上的控制。另外,在Linux系统上使用任何一种脚本语言进行脚本编程都十分简单和高效。
超过90%的网络安全工具都是在Linux系统上编写的。当然存在一些例外情况,比如Cain、Abel和Wikto,但这些例外情况反而更能证明这一事实。甚至当一些网络安全工具(比如Metasploit或nmap)移植到Windows系统上时,并非所有Linux系统上的功能都能移植过去。
这可能看起来像是一个比较激进的言论,但我坚信信息技术的未来属于Linux和UNIX系统。微软在20世纪80年代和90年代曾经创造辉煌,但Windows系统的发展趋势正陷入减缓甚至停滞。
随着互联网的兴起,Linux/UNIX系统因其稳定性、可靠性和鲁棒性而被选择为承载网络服务器的操作系统。如今,三分之二的网络服务器都选择使用Linux/UNIX系统,其在市场上处于支配地位。路由器、交换机以及其他设备中的嵌入式系统几乎都使用Linux内核,并且在VMware和Citrix都构建于Linux内核之上的情况下,Linux系统同样支配着虚拟化市场。
超过80%的移动设备都运行着UNIX或Linux系统(iOS属于UNIX系统,而Android属于Linux系统),因此如果你相信计算的未来依赖于移动设备,比如平板电脑和手机(否则将很难继续讨论),那么未来便属于UNIX/Linux系统。在移动设备方面,Windows系统仅占有7%的市场份额。这是你想要赶上的机遇吗?
在开始之前,你需要在自己的系统上下载并安装Kali Linux系统,即在本书中我们将一直使用的Linux发行版系统。Linux系统最初作为UNIX系统的开源选项,在1991年由Linus Torvalds开发问世。由于它是开源的,因而其内核、工具和应用都是由志愿开发人员编写而成的。这就意味着不存在负责监督发展进程的公司实体,因此通常会缺乏惯例约定和标准化。
Kali Linux系统是Offensive Security团队基于一款名为Debian的Linux发行版系统而开发的。市面上有很多Linux发行版系统,而Debian是最好的一个。你可能对一款流行的桌面Linux发行版系统Ubuntu非常熟悉,Ubuntu同样是基于Debian构建的。其他发行版系统则包括Red Hat、CentOS、Mint、Arch和SUSE。尽管它们都使用相同的Linux内核(操作系统的核心部分,用于控制CPU、RAM等部件),但针对不同的用途,每一款都有自己的工具、应用以及图形接口选项(GNOME、KDE等)。因此,每一款Linux发行版系统的感观体验都会稍有不同。Kali是针对渗透测试人员等网络安全人员而设计的,其中包含了非常完备的网络安全工具集合。
我强烈建议你在针对本书进行练习时使用Kali系统。尽管可以选择另一款发行版系统,但是你可能需要下载并安装很多我们将会用到的工具,而这可能会花费不少时间。另外,如果所选择的发行版系统不是基于Debian构建的,那么可能会有其他一些细微的差别。你可以从网址https://www.kali.org/下载并安装Kali系统。
在上述网站主页中,单击页面顶端的 下载 (Downloads)链接。在下载页面上,你将面临多种下载选择,重要的是选择正确的下载选项。在表格的左侧,你将看到镜像名称,即对应链接能够下载的版本名称。例如,所列的第一个镜像名称是“Kali Linux 64 Bit”,代表它是一个完整的Kali Linux系统,并且适用于64位系统——大部分现代系统都使用64位的Intel或AMD CPU部件。要确定自己系统所使用的CPU类型,可以到 控制面板 → 系统与安全 → 系统 中查看,CPU相关信息将列举在其中。如果你的系统是64位的,那么请下载并安装64位版本的完整Kali系统(非Light或Lxde类型,或者其他类型)。
如果你的系统是在一个使用32位CPU的老旧计算机上运行的,那么可能需要安装32位版本,此类选项会在页面下方出现。
你可以选择通过HTTP或Torrent(种子)方式下载。如果选择HTTP方式,Kali系统会按照正常的下载过程,直接下载到系统中并放置到下载文件夹内。Torrent下载是很多文件分享站点都会使用的一种点对点下载方式,你需要使用一款种子下载应用(比如BitTorrent)来进行下载。然后,Kali系统文件会下载到种子下载应用存放其下载文件的文件夹中。
还有针对其他CPU类型的版本,比如在众多移动设备中广泛应用的ARM架构。如果你正在使用树莓派设备、平板电脑或其他移动设备(手机用户可能更偏向于使用Kali NetHunter系统),那么可以向下滚动到下载ARM镜像的位置并单击Kali ARM Images,下载并安装Kali系统的ARM架构版本。
现在你下载了Kali系统,但是在安装之前,我想讨论一下虚拟机相关的内容。通常对于初学者来说,在虚拟机中安装Kali系统是学习实践的最佳方案。
利用虚拟机(Virtual Machine, VM)技术,可以在单一硬件(比如笔记本电脑或台式机)上运行多个操作系统。这意味着可以继续运行你所熟悉的Windows或macOS操作系统,同时在以上系统中运行一个Kali Linux系统的虚拟机,而不需要覆盖现有操作系统来学习Linux系统。
VMware、Oracle、微软以及其他厂商提供了大量虚拟机应用,这些应用都很优秀,但在这里我将介绍如何下载并安装Oracle公司的免费软件VirtualBox。
你可以从https://www.virtualbox.org/下载VirtualBox软件,如图1所示。单击左侧菜单中的 下载 (Downloads)链接,并针对自己计算机中安装VirtualBox虚拟机的当前操作系统,选择VirtualBox软件包。请确保下载的是最新版本。
图1 VirtualBox主页
当下载完成时,单击安装文件,你将进入安装向导对话框,如图2所示。
单击 下一步 (Next),你将进入配置安装对话框,如图3所示。
图2 安装向导对话框
图3 配置安装对话框
在这个对话框中,单击 下一步 (Next)即可。持续单击 下一步 (Next),直到出现网络接口警告界面,然后单击 是 (Yes)。
单击 安装 (Install)开始安装流程。在这一过程中,你可能会收到几次关于安装设备软件的提示,这些设备都是虚拟机之间通信所必需的虚拟网络设备。每次提示都需要单击 安装 (Install)。
当安装完成时,单击 结束 (Finish)。
现在,让我们开始安装虚拟机。VirtualBox在安装完成之后应该会直接开启——如果没有,则需要用户手动打开——你会进入VirtualBox管理器中,如图4所示。
图4 VirtualBox管理器
由于我们要创建一个新的虚拟机来安装Kali Linux系统,因此单击左上角的 新建 (New)。这样的操作将开启如图5所示的创建虚拟机对话框。
为你的虚拟机命名(任何名称都可以,这里我简单地将其命名为Kali),然后从类型(Type)下拉菜单中选择Linux,从第三个下拉菜单中选择Debian(64-bit)(除非你正在使用的是32位版本的Kali系统,在这种情况下请选择32位版本的Debian)。单击 下一步 (Next),你将看到如图6所示的对话框。在这里,你需要选择为新虚拟机分配多大的内存空间。
图5 创建虚拟机对话框
图6 分配内存
根据经验,我不建议分配超过整个系统内存25%大小的内存,也就是如果你在物理或主机系统上安装了4GB大小的内存,那么为虚拟机分配1GB大小的内存即可,或者如果你在物理系统上拥有16GB大小的内存,那么就选择分配4GB大小的内存。为虚拟机分配的内存越大,它就能运行得越快。但是你还必须为自己的主机操作系统以及可能想要同时运行的其他虚拟机保留足够的内存空间。虚拟机在不用的时候不会使用任何内存,但是它们会占用硬盘空间。
单击 下一步 (Next),你将进入硬盘界面。选择 创建虚拟硬盘 (Create Virtual Hard Disk),并单击 创建 (Create)。
在下一个界面中,你可以决定正在创建的硬盘是以动态还是固定容量的方式进行分配。如果选择 动态分配 ,那么如非必要,系统不会为虚拟硬盘分配你所指定的最大容量,这样可以为主机系统节省更多的空闲硬盘空间。我建议选择动态分配。
单击 下一步 (Next),你需要选择分配给虚拟机的硬盘空间大小,以及虚拟机的位置(如图7所示)。
图7 分配硬盘空间
默认值为8GB。我通常会觉得这个值有一点小,建议最少分配20~25GB。请记住,如果你选择了动态分配硬盘空间,那么它在非必要的情况下并不会用到这么大的空间,而且在已分配的情况下进行硬盘扩展会非常困难,因此最好将硬盘空间分配得大一些。
单击 创建 (Create),现在一切就绪!
此时,你会看到如图8所示的界面。现在需要安装Kali系统。注意在VirtualBox管理器的左侧有一个指示Kali虚拟机当前处于关机状态的标志。单击 启动 (Start)按钮(一个绿色箭头图标)。
图8 VirtualBox欢迎界面
然后,VirtualBox管理器会询问启动盘的位置。之前我们已经下载了一份带有.iso后缀的光盘镜像,它现在应该在下载文件夹中(如果你是使用种子方式下载Kali系统的,那么.iso文件应该在种子下载应用的下载文件夹中)。单击右侧的文件夹图标,导航至下载文件夹,并选择Kali镜像文件(如图9所示)。
图9 选择启动盘
然后单击 开始 (Start)。恭喜,你刚刚在一台虚拟机中安装了Kali Linux系统!
现在,Kali系统将开启一个如图10所示的界面,其中提供了一些启动选项。对于初学者,我建议使用 图形安装 (Graphical install)。利用键盘按键,在菜单中进行上下选择。
图10 选择安装方式
如果在利用VirtualBox软件安装Kali系统时出现错误,那么很可能是因为你没有在系统BIOS中开启虚拟化支持。每个系统及其BIOS都略有不同,因此可以通过向厂商咨询或在线查询的方式来找到自己的系统和BIOS的操作方式。另外,在Windows系统中,你可能需要禁用其他虚拟化软件,比如Hyper-V。再次强调,针对自己的系统进行网络检索,即可引导你完成上述操作。
接下来,系统会要求你选择语言。请确保选择你最熟悉的语言,然后单击 继续 (Continue)。之后再选择你的位置,单击 继续 (Continue),然后选择键盘布局。
在单击 继续 (Continue)之后,VirtualBox将执行一个检测硬件和网络适配器的流程。在这个过程中请耐心等待。最后,你将进入一个要求你配置网络的界面,如图11所示。
它所需要的第一项是你的主机名称。你可以随意命名,但是在此我保留了默认名称“kali”。
接下来,你需要输入域名(这里可以选择不输入内容)。接着,单击 继续 (Continue)。如图12所示的界面非常重要。在这里,你需要输入想设置的root用户口令。
图11 输入主机名称
图12 设置口令
Linux系统中的root用户是具有完全权限的系统管理员。你可以设置任何你觉得安全的口令。如果是正在网上使用的物理系统,那么我会建议你设置一个足够长而复杂的口令,以限制攻击者对其进行攻击。由于这是一台虚拟机,人们只有先进入主机操作系统才能对其进行访问,因此这台虚拟机上的口令认证显得没有那么重要,但是你仍应该仔细选择。
单击 继续 (Continue),你需要输入自己的时区。执行相应操作,然后继续。
在下一个界面需要选择磁盘分区(顾名思义,一个分区就是硬盘的一个部分或分片)。选择 引导-使用整个磁盘 (Guided-use entire disk),Kali系统将检测硬盘并自动创建一个分区器。
然后,Kali系统会发出警告,你所选磁盘上的所有数据都将被擦除……但不必担心!这是一个虚拟磁盘,并且磁盘是新建且空白的,所以本次操作实际上并不会产生任何影响。单击 继续 (Continue)。
现在,Kali系统会询问你想要将所有文件放置到一个分区还是多个分区中。如果这是一个生产系统,那么你可能需要选择不同的分区来存放/home、/var和/tmp文件夹,但考虑到我们是将该系统作为虚拟环境中的学习系统,因此单纯选择 将所有文件放置到一个分区中 (All files in one partition)也是安全的。
现在,你需要决定是否将以上更改写入磁盘。选择 结束分区操作并将更改写入磁盘 (Finish partitioning and write changes to disk)。Kali系统会进行多次提示,询问你是否想要将更改写入磁盘,请选择 是 (Yes)并单击 继续 (Continue),如图13所示。
图13 将更改写入磁盘
现在,Kali将开始安装操作系统。这个过程可能会花费一段时间,所以请保持耐心。现在你可以休息一会儿,喝点喜欢的饮料。
安装完成之后,系统会给出提示,询问你是否想要使用网络镜像。这并不是必需的,因此请单击 否 (No)。
之后,Kali系统会给出提示,询问是否想要安装GRUB(GRand Unified Bootloader,宏统一引导加载程序),如图14所示。你可以利用引导加载程序来引导进入不同的操作系统,这就意味着当引导启动主机时,你可以选择Kali系统或另一个操作系统进行加载。请选择 是 (Yes)并单击 继续 (Continue)。
图14 安装GRUB
在下一个界面中,Kali系统会给出提示,询问你想要以自动还是手动的方式来安装GRUB引导加载程序。考虑到某些尚未明确的原因,如果你选择第二个选项,那么Kali系统将在安装之后挂起并显示一个空白界面。选择 手动进入设备 (Enter device manually),如图15所示。
在随后的界面中,选择安装GRUB引导加载程序的设备(可能是形如/dev/sda的格式)。单击进入下一个界面,它会通知你安装已经完成。
图15 手动进入设备
恭喜!Kali系统已经安装完毕。单击 继续 (Continue),Kali系统将会尝试重启,并且在最终进入Kali 2018的登录界面之前,你将会看到若干行代码在空白而漆黑的屏幕上一闪而过,如图16所示。
图16 Kali系统登录界面
以root身份登录,系统会要求你输入口令。请输入你为root用户设置的口令。
在以root身份登录之后,你将会进入Kali系统主界面,如图17所示。
图17 Kali系统主界面
现在,你已经做好准备,即将开始踏上令人激动的网络安全探索之旅!