第二章 Kali Linux入门

不像其它的操作系统,由于Kali Linux的磁盘镜像文件是Live ISO,Kali Linux入门很容易,你可能直接引导下载的镜像文件,而不需要前期的安装过程。这就意为着你可用同样的镜像文件来进行测试、用于可引导的USB或DVD-ROM来进行取证、或者在物理或虚拟机上进行永久的操作系统安装。

由于这种简单的特性,可以很容易地忘掉必须考虑的预防措施。Kali用户往往是恶意用户的目标,无论是国家资助的团体、有组织的犯罪分子,还是***个人。Kali linux的开源特性使得构建和分发假版本相对容易,因此你必须养成从原始来源下载并验证下载的完整性和真实性的习惯。这一点对安全专业人员尤其重要,他们通常能够访问敏感网络,并被委托处理客户端数据。

2.1 下载Kali ISO 镜像文件

2.1.1 下载地点

Kali Linux ISO镜像文件唯一的官方下载源是Kali网站的下载部分。由于Kali Linux的普及性,很多网站都提供了Kali镜像文件下载,但他们可能不值得被信任,实际上有可能被恶意软件感染或其它会导致你系统遭受不可修复的破坏。下载地址为:https://www.kali.org/downloads/

该网站通过HTTPS访问,这样使得它很难被仿制。也能让执行中间人***变得不那么有效,因为***者还需要一个由受害者浏览器所信任的传输层安全(TLS)认证授权的www.kali.org签署的证书。由于认证授权的存在正好可以防止这类问题,他们把证书只会投递到那些身份已经被核实人那儿,而这些人可以提供证据表明他们控制着相应的网站。

cdimage.kali.org 这个链接基于下载页面而指向了cdimage.kali.org域,它会重定向到离你最近的站点,这样可以提高下载速度,减轻Kali中心服务器的负担。有交的镜像列表可以下面的文件中找到:http://cdimage.kali.org/README.mirrorlist

2.1.2 怎么下载

官方的下载页显示了ISO镜像文件的列表,如图2.1所示:

2.1.png

图2.1 镜像文件下载列表

所有的磁盘镜像文件都被标上了32-或者64-bit,指出了该镜像文件所适用于现代大多数桌面和笔记本电脑的CPU。如果你下载用于当前计算机的镜像,其很可能包含了64-bit的处理器。如果你不确定,尽管放心,所有的64-bit处理器都能运行32-bit指令。你也可以下载32-bit镜像文件。不过,事实并非如此。请参考侧边栏获取更详细的信息。

如果你计划安装Kali到嵌入式设备、智能手机、Google笔记本、无线接入点或其它使用ARM处理器的设备,你必须使用Linux armel或armhf镜像。

我的CPU是32-bit还是64-bit?在Windows中,你可以通过运行“系统信息”程序查看(在附件->系统工具)。在系统摘要页,你可以检查“系统类型”字段:对于64-bit CPU会包含“x64-based PC”字样,而对于32-bit CPU会包含”x86-based PC”字样。

在OS X/macOS下,没有标准的程序 可以显示这些信息,但你可以通过在终端运行uname –m命令,并检查其输出结果来确定。如果是64-bit内核(只能运行在64-bit CPU上),命令会返回x86_64字样,而如果系统是32-bit内核,则命令会输出i386或其它类似的字样(i486,i586或i686)。任何32-bit内核都能运行在64-bit CPU上,但由于苹果公司掌控着硬件和软件,你不太可能找到这种配置。

在Linux下,你可能检查虚拟文件/proc/cpuinfo文件中的字段。如果其中包含了lm属性,那么你的CPU是64-bit;其它情况就是32-bit。下面这条命令可以告诉你CPU的类型:

$ grep -qP '^flags\s*:.*\blm\b' /proc/cpuinfo && echo 64-bit || echo 32-bit

64-bit

现在你知道你是需要32-bit的还是64-bit的镜像文件了,还剩下最后一步:选择镜像文件的种类。默认的Kali Linux镜像文件和Kali Linux轻量化版本都既可以是以Live ISO形式直接运行Live系统,也可以用其进行安装。不同点只是在于预安装的应用程序集。默认的镜像文件使用GNOME桌面环境和大量的适用于大多数***测试者的软件包,而轻量级的镜像文件使用的是Xfce桌面环境(对系统资源要求很低)和有限的软件包集合,允许你选择你只需要的软件集。剩下的镜像文件使用了其它的桌面环境,但是其软件集与十四夜的镜像文件中的一样。

一旦你决定了你需要的镜像文件,你就可以点击各自行中的“ISO”下载镜像文件了。另外,你也可以点击“Torrent”从BitTorrent对等网上下载,这个需要你有一种关联了.torrent文件扩展名的BitTorrent客户端。

在你所选ISO镜像文件下载的时候,你可以关注一下sha256sum列中所写的校验和。一旦你下载完镜像文件,使用这个校验和来验证你所下载的镜像文件是否与Kali开发团队线上提供的相匹配(见下一节)。

2.1.3 校验完整性和真实性

安全专家必须校验他们的工具的完整性,这样不但能用来保护他们的数据和网络,同时也是保护其客户数据和网络的需要。虽然Kali下载页面是用TLS保护的,但实际的下载链接是提向了一个非加密的URL,其对于潜在的中间人***没有防护。事实上,Kali依赖于外部的镜像站点来分发镜像文件,这就意味着你不能盲目地相信你所下载的内容。你所定向到的站点有可能被损害了,或者你自己可能是***的受害者。

为了减轻这种状况,Kali项目一直都提供他们分发的镜像文件的校验和。但是要让这个校验有效,你必须确保你所获得的校验和是由Kali Linux开发者公布的有效校验和。你可以不同的方法来确认。

依赖于TLS保护的站点

当你从使用TLS保护的下载页面取回校验和时,它的起源是被X.509证书安全模式间接所保证的:你所看到的有效的站点内容由申请了TLS证书的人所控制的。

现在你可以生成你下载的镜像文件的校验和,并且要确保其与Kali站点给的值相匹配:

$ sha256sum kali-linux-2017.1-amd64.iso

49b1c5769b909220060dc4c0e11ae09d97a270a80d259e05773101df62e11e9d kali-linux-2016.2-amd64.iso

如果你所生成的校验和与Kali Linux下载页面的值相匹配,就意味着你获得了正确的文件。如果校验和不一样,那么就有问题,虽然这并不表明有破坏或有***;在通过因特网下载时,偶然情况下会有损坏的情况。如果可以,可从其它镜像站点重新下载一次(可从”cdimage.kali.org”获得有效镜像站点的更多信息)

依赖于可信的PGP站点

如果你不相信HTTPS进行身份验证,你可能有一点点偏执,但也是正常的。有很多不好的管理证书授权的例子,颁发了流氓的证书,最终被滥用了。

你也可能是“友好的”中间人***的受害者,这种***在许多公司网络上实施,使用自定义的、内置浏览器的信息商店,向加密的网站提供虚假证书,允许企业审计者监视加密的流量。

对于这种情况,我们还提供了一个GnuPG密钥,用于签名我们提供的镜像文件的校验和。密钥的标识 符及其指纹如下所示:

pub rsa4096/0xED444FF07D8D0BF6 2012-03-05 [SC] [expires: 2018-02-02]

Key fingerprint = 44C6 513A 8E4F B3D3 0875 F758 ED44 4FF0 7D8D 0BF6

uid [ full ] Kali Linux Repository <devel@kali.org>

sub rsa4096/0xA8373E18FC0D0DCB 2012-03-05 [E] [expires: 2018-02-02]

这个密钥是可信全球网络的一部分,因为它至少是由我(Rapha L Hertzog)签署的,而且由于我作为Debian开发人员,大量使用了GnuPG,所以我是可信网络的一部分。

PGP/GPG安全模型是很独特的。任何人都可以用任何身份生成任何密钥,但是只有在已信任的另一个密钥签名的情况下,才能信任该密钥。当你签署一个密钥时,你证明你遇到了密钥的持有者,并且你知道这种关联的是标识是正确的。然后定义你所信任的初始密钥集,其中就是你自己所使用的密钥。

这种模型有自己的局限性,因此你可以选择在HTTPS(或从密钥服务器)上下载Kali的公钥,并你决定信任它,因为它的指纹与我们在多个地方公布的内容一致,包括在本书中的正上方:

$ wget -q -O - https://www.kali.org/archive-key.asc | gpg --import

[ or ]

$ gpg --keyserver hkp://keys.gnupg.net --recv-key ED444FF07D8D0BF6

gpg: key 0xED444FF07D8D0BF6: public key ”Kali Linux Repository <devel@kali.org>” imported

gpg: Total number processed: 1

gpg: imported: 1 (RSA: 1)

[...]

$ gpg --fingerprint 7D8D0BF6

[...]

Key fingerprint = 44C6 513A 8E4F B3D3 0875 F758 ED44 4FF0 7D8D 0BF6

[...]

取回密钥后,你可以使用它验证分发镜像文件的校验和。让我们下载带有校验和(SHA256SUMS)和相关签名文件(SHA256SUMS.gpg)的文件,并验证签名:

$ wget http://cdimage.kali.org/current/SHA256SUMS

[...]

$ wget http://cdimage.kali.org/current/SHA256SUMS.gpg

[...]

$ gpg --verify SHA256SUMS.gpg SHA256SUMS

gpg: Signature made Thu 16 Mar 2017 08:55:45 AM MDT

gpg: using RSA key ED444FF07D8D0BF6

gpg: Good signature from ”Kali Linux Repository <devel@kali.org>”

如果你获得了“Good signature”的信息,你可以信任SHA256SUMS文件的内容,并使用它验证你下载的文件。否则就有问题了。你应该检查是否从合法的Kali Linux镜像站点下载了这些文件。

注意你可以使用下列命令行来校验下载的文件是否具有相同的校验和,该校验和就列在SHA256SUMS中,该文件与要下载的ISO镜像文件在同一目录:

$ grep kali-linux-2017.1-amd64.iso SHA256SUMS | sha256sum -c

kali-linux-2017.1-amd64.iso: OK

如果你没有得到OK信息,那就意味着你下载的文件与Kali团队发布的文件有差别,你不能相信并使用它。

2.1.4 拷贝镜像文件到DVD光盘或U盘中

除非你想在虚拟机中运行Kali Linux,否则ISO镜像文件使用上有一些限制。你必须把镜像文件刻录到DVD光盘或都把它拷贝到U盘中,这些才可以引导机器运行Kali Linux。

我们不会讨论如何将ISO镜像文件刻录到DVD光盘中,因为这个过程因平台和环境的不同而不财,但在大多数情况下,右击ISO文件会显示上下文菜音,然后运行DVD刻录程序即可,试试就知道了。

警告:在本节,你将学习如何用Kali Linux镜像文件覆写任意的磁盘。在执行这个操作之前,始终要对目标磁盘进行反复检查,因为一个错误可能会导致数据完全丢失,并且可能会损坏你的安装程序,无法修复。

在Windows上创建可引导的Kali U盘

作为需要预先准备的工具,你需要下载并安装Win32 Disk Imager软件:

https://sourceforge.net/projects/win32diskimager/

把你的U盘插入到Windows电脑中,注意与之相关联的驱动器号(比如“E:\”)。

运行Win32 Disk Imager,并选择你想拷贝到U盘的Kali Linux镜像文件。检查指定给U盘的相应盘符。一旦你确认选择了正确的盘符,点击Write按钮,并确认你覆写的U盘,如图2.2所示:



2.2-1.png

2.2-2.png

2.2-3.png

图2.2 操作Win32 Disk Imager

一旦拷贝操作完成,从Windows系统中安全拔出U盘。这样你就能使用这个U盘来启动Kali Linux了。

在Linux中创建可引导的Kali U盘

在Linux环境中创建可引导Kali Linux U盘很容易。在很多Linux分发版中,GNOME桌面环境是默认安装的,其中附带有Disks实用工具(在gnome-disk-utility软件包中,在Kali镜像中已经安装)。这个工具会显示一个磁盘列表,当你插入或拔出一个磁盘时,这个列表会动态刷新。当你选择列表中的U盘时,将显示其详细信息,这将有助于你确认所选磁盘是正确的。注意你可以从标题栏中找到其设备名称,如图2.3所示:

2.3.png

图2.3 GNOME 磁盘

点击菜单按钮并在弹出的菜单中选择Restore Disk Image…,然后选择你先前下载的ISO镜像文件,再点击Start Restoring…按钮,如图2.3所示。

2.4.png

图2.4 恢复磁盘镜像对话框

在拷贝镜像文件到U盘期间,你可以来上一杯咖啡。图2.5显示了镜像文件的恢复过程。

2.5.png

图2.5镜像文件恢复过程

从命令行创建可引导U盘:虽然从图形界面进行操作相当的直观,但是对习惯命令行操作的用户来讲,从命令进行这个操作也是非常简单的。

当你插入U盘时,Linux内核将会检测到这个U盘,并且对其指定了一个名字,这个名字记录在内核日志文件中。你可以使用dmesg命令查看日志文件来找到这个名字。

$ dmesg

[...]

[234743.896134] usb 1-1.2: new high-speed USB device number 6 using ehci-pci

[234743.990764] usb 1-1.2: New USB device found, idVendor=08ec, idProduct=0020

[234743.990771] usb 1-1.2: New USB device strings: Mfr=1, Product=2,

SerialNumber=3

[234743.990774] usb 1-1.2: Product: Store’n’go

[234743.990777] usb 1-1.2: Manufacturer: Verbatim

[234743.990780] usb 1-1.2: SerialNumber: 0390627052A2F897

[234743.991845] usb-storage 1-1.2:1.0: USB Mass Storage device detected

[234743.992017] scsi host7: usb-storage 1-1.2:1.0

[234744.993818] scsi 7:0:0:0: Direct-Access VBTM Store’n’go 6.51

PQ: 0 ANSI: 0 CCS

[234744.994425] sd 7:0:0:0: Attached scsi generic sg1 type 0

[234744.995753] sd 7:0:0:0: [sdb] 3903487 512-byte logical blocks: (2.00 GB

/1.86 GiB)

[234744.996663] sd 7:0:0:0: [sdb] Write Protect is off

[234744.996669] sd 7:0:0:0: [sdb] Mode Sense: 45 00 00 08

[234744.997518] sd 7:0:0:0: [sdb] No Caching mode page found

[234744.997524] sd 7:0:0:0: [sdb] Assuming drive cache: write through

[234745.009375] sdb: sdb1

[234745.015113] sd 7:0:0:0: [sdb] Attached SCSI removable disk

现在你知道U盘的名字是/dev/sdb,这样你就可以使用dd命令来进行拷贝:

# dd if=kali-linux-light-2017.1-amd64.iso of=/dev/sdb

2070784+0 records in

2070784+0 records out

1060241408 bytes (1.1 GB, 1011 MiB) copied, 334.175 s, 3.2 MB/s

注意你需要root权限才能成功完成这个操作,并且你还要确信这个U盘是没有被使用。也就是说,你要确认U盘的任何一个分区都没有被挂载。上述命令假定是在ISO镜像文件所在目录运行的,其它情况下需要提供全路径。

作为参考,if表示“input file”而of表示“output file”。dd命令从输入文件中读取数据,然后把它写回到输出文件中。这个命令不会显示任何过程信息,因此在其运行过程中,你必须得有耐心(一般不会超过半小时)。如查你要确认命令是否在工作,可以查看一下U盘的活动LED灯。当命令完成后,上述操作才会写统计信息。在OS X/macOS上,你可以在操作过程中按下CTRL+T来获得数据被拷贝了多少的统计信息。

译者注:在Linux上,可以打开另一个终端,运行如下命令可以查看上述操作已拷贝多少数据的信息:

# watch -n  5 killall -USR1 dd

在OS X/macOS上创建可引导Kali U盘

OS X/macOS是基于UNIX的,因此在其上创建可引导Kali U盘的过程与在Linux中的方法类似。一旦你下载并且校验了所选的Kali镜像文件,使用dd命令就可把镜像文件拷贝到U盘中。

要想确定U盘的名字,运行diskutil list程序可以列出你系统中的有效磁盘。之后,插入U盘,再次运行diskutil list命令。这次操作的输出将会列出添加的磁盘,通过比较两次输出,你就可以确定所插U盘的名字了。查找输出中新添加的行来确定U盘的标识,注意/dev/diskX中的X表示磁盘的ID号。

同样你需要确认这个U盘没有被挂载,这可以通过运行unmount命令来完成(假定/dev/disk6是U盘的设备名字):

$ diskutil unmount /dev/disk6

现在就可以执行dd命令了。这一次,可以添加一个参数——bs来指定块大小。这个参数定义了从输入文件中读入数据并写到输出文件中的块的大小。

# dd if=kali-linux-light-2017.1-amd64.iso of=/dev/disk6 bs=1M

1011+0 records in

1011+0 records out

1060241408 bytes transferred in 327.061 secs (3242328 bytes/sec)

也就是这些操作。你的U盘已经制作完成,可以使用它启动或安装Kali Linux了。

在OS X/macOS上从其它磁盘启动:要在OS X/macOS系统中从其它磁盘启动,需要在按下电源启动键后立即按住Option键来弹出启动菜单,然后选择你想要从其启动的磁盘。更多信息可以参见http://support.apple.com/kb/ht1310