230 likes | 442 Views
基于 CUDA 的 WPA/WPA2-PSK 无线网络密码暴力破解. 组长:陈凯 组员:程彬、吕波. 目录. 目录 一、背景介绍 二、目标 三、任务分解 四、系统实现 五、优化 六、结果分析. 背景介绍. 背景介绍. 破解过程描述: 1 、 监听 AP 与 STA 之间的通信,获得 4 次握手包和 AP 的 SSID 2 、 穷举每个可能的密钥,利用 SSID ,计算 PMK
E N D
基于CUDA的WPA/WPA2-PSK无线网络密码暴力破解 组长:陈凯 组员:程彬、吕波
目录 目录 一、背景介绍 二、目标 三、任务分解 四、系统实现 五、优化 六、结果分析
背景介绍 破解过程描述: 1、监听AP与STA之间的通信,获得4次握手包和AP的SSID 2、穷举每个可能的密钥,利用SSID,计算PMK 3、利用握手包中的AP MAC、STATION MAC、 Anonce、 Snonce和PMK计算出PTK,并取得前16字节MIC _Key 4、利用握手包中的802.1x data和MIC_Key,计算出MIC,并与握手包中的MIC对比,相同则猜测正确,否则尝试下一个秘钥
目标 ◆监听通信,获取WPA2握手包信息并发送到服务器进行暴力破解,并将明文密码发回
任务解析 ◆最耗时的部分是第一步计算PMK的过程,需要4096次迭代 ◆整个过程所需要的访存量不多(只需要穷举的各种passphrase排列),为典型的计算密集型任务, ◆因此可以使用GPU进行并行计算,获取大量可能的PMK(针对某一个SSID);然后将得到的PMK与PMK对应的passphrase异步拷贝回CPU memory,由CPU完成剩下两步计算,并对比已有的MIC。
任务分解 任务分解 整个任务分解为两级(大)流水线: GPU + CPU 并行 GPU: 穷举计算PMK CPU :使用所有可能的PMK计算最终MIC
系统实现 • 整个系统由两大部分组成 • Client : 监听握手包并解析出所需信息 • Server: 接收文件或网络输入,穷举计算MIC并对比 • 其中 Server 包含 CPU 和 GPU 计算PMK和CPU计算MIC的代码
系统实现 • Client 监听握手包获取信息流程 • 使用工具 airdump-ng 监听某SSID的通信 • 挑选一个合适距离的已连接用户 • 使用airplay-ng向已连接用户发送 authenticate 指令,使其断开连接并自动重连 • 在此用户重连时,抓取WPA 4次握手包 • 读取握手包信息,获取所有破解所需信息
系统实现 • Server 获取信息计算MIC流程 • 从client生成的中间文件或网络接收所需信息 • 使用预先生成的字典(或在线生成的生日字典)以及接收到的SSID,使用GPU穷举计算PMK • 对生成的所有PMK,取前32 bytes,使用ap, spa 等消息计算PTK和MIC • 对比收到信息中的MIC,如果相等,则将字典中相应passphrase发回
优化 • PMK – GPU 基本优化 • 减少内存使用:每次只将一部分字典组合拷贝至device计算 • 足够并行度:每次仍处理足够数量的组合 • 优化访存:使用异步内存拷贝 • 增加并行度:使用多个 CUDA stream ,开启多个 kernel 同时计算
优化 • 计算PMK的算法 - pbkdf2_sha1 • PMK为32 bytes,然而SHA1_DIGEST_SIZE 为20,因此需要两次计算 • 每相邻两个thread计算同一个PMK的前20和后20 bytes • 每次计算时需要4096次 hmac_sha1 • 需要大量临时变量! • Hmac_sha1 • 每次计算实际上需要进行两次 SHA1
优化 • pbkdf2_sha1与hmac_sha1优化 • 减少临时变量(local memory)使用:使用 shared memory替换 • 增加内存复用,一块shared memory 内存重复利用 • 然而仍然有很多的内存使用!
优化 • 进一步优化 • PMK的两次计算并无依赖关系,因此可以并行计算:使用2个线程计算一个PMK • 如上,同时减少了 shared memory 的使用 • 10.5KB/block 9.25KB/block • 循环展开:SHA1计算时硬编码,免去循环 • 把不变的信息如 SSID存入constant memory
结果分析 • 在我的实验室台式机上测试 • CPU: i5-2300 CPU @ 2.80GHz • RAM: 8GB • GPU: GT 430, only 96 cuda cores • RAM: 512M • PMK-CPU :约 190 PMKs per second • PMK-GPU :约 802 PMKs per second • 加速比:4.22
结果分析 • 在我的实验室台式机上测试 • CPU: i5-2300 CPU @ 2.80GHz • RAM: 8GB • GPU: GT 430, 96 cuda cores • RAM: 512M • PMK to MIC (PMKPTKMIC) • 约115600 times/second • 占全部计算时间的0.164% • 因此CPU计算部分不是瓶颈
结果分析 • 在服务器上测试 • CPU: E5-2620 @ 2.0GHz • RAM: 32G • GPU: K20c • PMK-CPU :约 140 PMKs per second • PMK-GPU :约 8800 PMKs per second • 加速比: 62.87
结果分析 • 主要限制 • 大量的 shared memory • 9.25 KB per block(from visual profiler) • 大量的 local memory • 61 registers per thread • 80% local memory overhead • 以上导致的低 occupancy • 只有 20%
结果分析 • 进一步可能的优化 • 拆分 hmac_sha1 • 使用不同 kernel计算其中的不同阶段 • 将中间数据存放在global memory中 • 可以减少每个thread使用的内存大小,提高occupancy • 重用更多buffer • 进一步跟踪数据流,将某些可合并的内存复用
谢谢! • Questions?