耙子在干净的地方行走,或如何收集附近Wi-Fi设备的MAC地址

我开始所有公开演讲(幸运的是,演讲不多)是通过明确或隐含地提到以下论点:“我们的行业很复杂,问题可以在任何甚至最明显的步骤上都可以发现,并且乐观地认为一切都会变得简单而容易-天真” 。奇怪的是,这个由多年的填充锥获得的简单想法有时对于更有经验的专家来说是一个启示,尽管似乎所有对他们自己的想法和实践的绝对正确性的狂热热情和信念应该已经经受了很长时间了。我会告诉你一个故事,这是一个简单的项目的示例。




有一天,一个朋友给我扔了一个有趣的创业公司的链接。伙计们建议服务和销售部门的小企业代表为他们的客户设置一个访问点(带有强制门户),以分发Internet,同时收集路过的人的智能手机的MAC地址。该操作的目的非常简单-大量的广告网络可让您定位设备地址列表,因此,将广告公司定向给路过的用户,我们很可能会吸引新的访问者(因为它很近并且“我已经看到了”) 。那些。虚拟传单的这种分发。一位朋友问这是怎么做的以及我们是否可以再做一次。

快速浏览该主题揭示了此类数据收集的机制。 WiFi适配器以空中收听模式启动,并在各个通道中运行,捕获数据包,对其进行分析并汇总接收到的数据。为此也有现成的开放式实用程序,例如aircrack-ng的airodump -ng。那些。为了进行重复,我们只需要运行此实用程序,最好在单独的紧凑型可穿戴设备上运行,然后将接收到的数据推送到数据库中,即可从数据库中获得广告网络的现成MAC地址列表。看来任务很简单,最多只能完成一次-两个晚上的悠闲工作,几乎一切都准备就绪。

当然,从来没有这样。

如您所知,木星所允许的东西是公牛所不允许的。当使用单一付款人时,首先必须牺牲计算资源和内存。此外,资源的牺牲是开发和调试便利性的牺牲-并非每个系统都允许将编译工具拖到设备上。

最初,我们希望采用简单且便宜的产品,例如Orange Pi Zero盒子,将airodump-ng放在此处,然后将实用程序发出的数据转发到服务器,在服务器上可以将它们安全地放入数据库中。我曾在一个具有专用中心的分布式系统上工作(尽管在那里,虚拟机充当了主力,并在必要时通过同一中心通过了云API,但并非如此),所以我将部分代码成功地迁移到了一个新项目中。

将数据转发到服务器的工具是编写的简单的Erlang应用程序,该应用程序应该从以太阻尼器中提取数据(解析),对其进行序列化(Erlang的本机序列化),然后通过Web套接字将其通过HTTPS传输到服务器(不会引起怀疑) DPI系统,而不是发明自己的协议)。 Orange Pi中使用的Allwinner H2 +处理器功能强大,可以直接在设备上进行组装和调试。同样,从理论上讲,一切都很好。

实践已经开始。

1.事实证明,Orange Pi中的内置WiFi仅适用于拾取访问点并将数据扔到服务器中。好吧,更确切地说,不是适配器本身,而是内核中芯片组的支持。对于大多数物联网项目,这可能就足够了。但是,我们已经做好了这一打击的准备,因为对aircrack-ng网站的初步研究得出了一个非常明确和模棱两可的结论:“它不会在任何地方都起作用,如果那不是我们的错,我们将附上经过测试的芯片组列表”。几乎所有的Atheros设备(由高通公司购买)和Ralink(由联发科技公司购买)都在列表中,这在从笨拙的中国ARM转向路由器芯片组更禁欲的MIPS的情况下启发了一些前景。

但是,尽管这一切都是源于鼻涕,但是原型-您需要立即解决问题。因此,在我们的技术时代(无线通讯更轻巧的时候),我们利用这种奇特的东西作为Wi-Fi USB适配器。研究兼容性列表并将其与最近商店的种类进行比较,就会发现受害者- 版本C1中DLink DWA-160(这很重要,因为其他硬件版本使用了不同的芯片,并且在执行工作方面引起了头痛)。双频,不需要与驾驶员共舞,因为长期以来一直在内核中提供支持,所以在其他项目中稍后运行时,这个口哨便派上了用场,所以我买了它们,可能是我们省级城市中可用的所有(五件)。



确保设备正常工作后,我将其连接到单板设备,并关闭了内置的WiFi适配器,并期望可以通过以太网接口访问Internet。



第二只猪被空打产下。创建此工具集是为了黑客攻击WiFi渗透检查,即是由黑客为黑客编写的。我不知道,由于他们偏爱哪种逻辑,他们更喜欢使用无线以太坊管理器,而不是以传统的unix-way方法的形式,吐出结构化的文本以进行进一步处理,而是创建一个功能完善的术语界面,几乎实时地在该界面上显示信息(并考虑到终端设置)通过发现的网络和设备,但他们只是这样做了。是的,我发现所有这些事情的准备程度都未知,但是再次出现在我脑海中的原型蜘蛛严格禁止拖动另一种语言,切换到另一种语言(我们记得,服务器部分已经部分准备好并编写了远非Python-e),或者,上帝禁止,在tcpdump的基础上自己实现airodump-ng。因此,我必须寻找解决方法。

幸运的是,无线黑客开始怀疑界面中经常出现的愚蠢行为是这样的活动,因此他们实施了定期上载发现的所有内容,并以CSV文件的形式进行汇总。具有设定的间隔。您已经可以忍受了。当然,天真选项-运行实用程序并在计时器上重新读取文件-是立即手动给出的。在笔记本电脑上工作时,当转移到单板上时,由于显而易见的原因,它在读取文件的过程中开始失败-有时该实用程序根本没有时间卸载所有内容,并且某些数据无法挽回地丢失了。

解决方案是内核中的inotify机制,通知文件操作-当我的代码看到数据文件的更改后,它会稍有延迟地开始读取(而是具有纯粹的心理价值,使作者放心)。实验表明,在这种情况下,不会发生读取失败和数据丢失的情况。好吧,不错的CSV parsim,放入了内部结构并发送到服务器。我们将其保存在PostgreSQL的服务器上(感谢jsonb),之后便可以进行查询,卸载表格等。我们将使用对称密钥添加最简单的授权,这样我们就不会在其中塞满垃圾,并且可以将数据绑定到设备已安装的位置,一切似乎都很好,您可以进行战斗。

是的,现在如何。该链的测试程序集(以及代码编写和调试确实花费了两个晚上)揭示了一个有趣的事实-我们办公室每天捕获的地址数量与公共可及之处相距甚远,大约有数千个波动。是的,当然,附近有一家小旅馆(当时是隔离前隔离的时间,请不要感到惊讶),但是仍然有很多。

刷新了有关MAC地址结构的知识并回顾了移动设备经常生成本地地址以隐藏其真实MAC地址这一事实,我用一个简单的过滤器修改了服务器部分,该过滤器清除了输入端的所有广播和本地地址。该列表减少了一个数量级,看起来已经像是事实。一切准备就绪,可以进行现场试验。

如您所知,当将地点从温暖舒适的办公室更改为无情的战斗条件时,原型往往会停止正常运行,因此在实施过程中应配备一名袖珍工程师,以纠正所有新出现的问题。另一方面,众所周知,在操作开始时不需要用铃鼓额外跳舞的装置很可能很快就无法破坏。当然,这已经反映在墨菲的法律中,但是,可惜,这些法律的作者懒得检查哪一条,因此,我们将同意“平均法”一词。

首次安装后立即发现了许多缺陷。

首先,大多数中国的原型开发板都带有长期的microSD存储器,而不是NAND / NOR闪存芯片。仅功能强大的SoC例外,此任务显然是多余的。 SD,MicroSD是操作员的头等大事-焊盘的氧化,SD卡的故障,触点对机壳内部温度的依赖性(这是相当大的,中国芯片的能源效率不是很高,而且板卡通常是完全基于峰值功耗,因此,无需额外的散热器,这是不可能的)。因此,事实证明,当设备断电时,系统进入无法操作的状态-带有ERTS字节码的文件已损坏,重新启动后,应用程序无法正常工作。

第二个令人不愉快的时刻-在安装点,互联网是由LTE路由器提供的,从某种程度上来说,它的质量中等,与办公室用线不同。网络不断触发,应用程序经常重新连接,甚至死于队列中累积的消息。

当然,这两个问题都是可以解决的,例如,通过搜索优质的microSD卡和文件系统设置的最佳组合可以消除数据丢失,并且可以通过初步的数据聚合,发送会话短,超时等补偿连接不稳定性。但是,已经发现的问题是反思是否选择正确道路的机会。将设备挂在外部电池上并扔到背包中后,需要与服务器建立永久连接,从而结束了事件数据的收集,背包的所有者参加了大型活动,当然,您无法期望连接的稳定性。

因此,下一步是放弃服务器部分,直接在设备上定位数据仓库。此外,为了避免使用SD卡进行冗长而冗长的实验,决定在下一次迭代中使用带有闪存芯片的面包板模型。

那一刻,我记得在我的收藏中有一个很棒的立陶宛战友8Devices的Carambola 2棋盘。而且,如果您去他们的网站,您可以在称为Centipede的同一芯片上找到更紧凑的设备。以前使用此类设备进行的实验表明,Erlang完全适合分配的16 MB闪存(还有少量应用程序剩余空间)。唯一的缺点(甚至是一个优点)是低功耗MIPS和交叉编译的需要,这使得构建Erlang应用程序变得不那么重要了。但这已经是一条著名的路线,所以我订购了两台Centipede,到目前为止,我已经将与服务器兼容的现有版本移植到Carambol。



当组件到达时,新阶段开始了。开箱即用的空载成功支持了AR9331芯片,可以从以太网接口获取数据,已经收集并成功测试了最新版本的OpenWRT和ERTS。应用程序被重写-部分代码移至设备代码,数据在单独的进程中累积,并以序列化的Erlang术语的形式定期转储到文件中。为此绘制了最简单的基于Web的界面,该界面通过websocket接收数据。使用OpenWRT安全编译inotifyerlexec的端口

只有一件事感到困惑-数据上还有300 KB。如果您仅存储客户端设备的MAC地址,这个数字就不小了,但是airodump-ng会为您提供更多有趣的信息,包括访问点地址,其ESSID等,这些信息也很容易记住。以防万一。好吧,我们会根据情况采取行动。

我们收集,检查。即时发现问题。

Openwrt众所周知,这是一种极简的Linux构建,专门针对内存有限的设备而设计。结果,从那里扔掉可以无痛地扔掉,并且简化了可以简化的过程,包括多人游戏模式。那些。这是一种常见的做法,当代码从root开始并具有最大权限时,这当然会促进与组,用户及其行为控制有关的问题。是的,是的,IoT的缩写字母S负责安全性。麻烦是erlexec我用来运行和管理airodump-ng的,无法从根目录下执行操作-为此,它需要一个额外的用户,代表该用户将生成分配给它的进程。并正确地创建具有不同特权级别的其他用户时...,它可以防止airodump到达网络设备。从库中释放此限制似乎是一个缓慢的过程,因此erlexec被ports取代了-端口是在Erlang中启动第三方进程的内置机制。有点琐事,但不愉快。

因此,设备会被接收,刷新并甚至在温室条件下工作。我们抓住电池,将箱子扔进背包,去购物中心。第二天,我们看一下结果-一个惨败,一个零长度的数据文件-要么空间不足,要么电源失真在一个非常好的时刻都无法正常工作。我们更正代码,以使保存分两个阶段进行:首先创建一个临时文件,然后替换当前文件。

但是,人们并没有动手检查此选项的可操作性-出现了下一个玩具-Mediatek 7688上的Onion Omega2 +。像他们的兄弟LinkIt Smart 7688设计师一样,还有很多东西,但最重要的是两倍的闪存,这意味着您不必再担心缺少数据存储空间。好的

我们点餐,等一下。月。二。耐心burst发-我们写信给美国人“锌在哪里”。安静。在PayPal上引发争议。美国人正在醒来。他们说:“哦,我们的订单接受系统失败了,现在我们将发送所有内容。”他们发送,我们等待三个星期。嗯,设备就在手边,甚至可以用。



在这里,我们需要做个小题大作-尽管事实上我在步行距离之内有几个LinkIt Smart板,但我并没有将它们视为平台,因为在传奇的一开始,尝试将它们用作捕获设备就失败了。然后,以用于特定版本内核的组装模块的形式提供了芯片驱动程序,这显然导致了不可操作性。在最新版本的OpenWRT中,出现了对7688的本机支持和一个开放的驱动程序,因此这是重新考虑使用这些设备的方法的时机。

但是,习惯上直接在芯片上使用WiFi以达到其预期目的-毕竟,该设备至少需要一些控制接口,并且在现场至少是为了了解其是否工作。查看获得的数据也将很有用。

因此,我们结合了先前的方法-我们将MiniDoc上显示的唯一USB接口用于WiFi哨声以扫描空间,并使用内置的WiFi-将设备控制为低功耗接入点。我们收集,检查一切正常。

但是食欲与进食有关。首先,Erlang序列化形式的数据文件是很多真正的疯子,并且经过广泛培训的专业人员需要更简单的东西。同样,除了添加来自airodump的数据之外,我还希望确切的测量时间,并且最好是至少某种类型的对设备在空间中位置的引用。

我们将其插入WiFi哨声和USB集线器设备之间。设置(并且取决于OpenWRT中设备在总线上的位置)的设置,但这些设置很小。正确。幸运的是,我们已经从废墟中取出了USB-GPS接收器,并且已经通过了时间测试并且带有书面代码NMEA-0183解析(当然,无论如何都必须更正代码)。我们检查-该设备未被系统安全地检测到,显然缺少驱动程序。我们收集USB串行驱动程序并将其拖放到设备上-也保持静音。然后我们回想一下,在大型系统中,检测到的GPS哨声不是ttyUSBx,而是ttyACMx,即USB GSM调制解调器。好吧,第二个添加驱动程序的调用成功了。

我们采用代码,将其集成到应用程序中。将sqlite3添加到应用程序中作为存储。现在,无需检查状态中记录的可用性,通常,将数据处理简化为少量的行。综上所述,我们教增加数据以获取GPS读数时的知识,我们会纠正不完整的数据集(如果GPS尚未捕获卫星并且空中扫描数据已经存在时可能发生的情况)在脸上显示JS代码。我们检查了工作-它似乎还活着。您可以宣布临时胜利。



连续几个星期不间断的工作-空中电台和客户的大量数据。现在,我很想将这种设备提供给信息安全专家,以控制所委托地区的广播,并提供给州以控制公民电话的移动。当然,这是个玩笑,他们自己已经知道了一切。

因此,上面描述的所有苦难只是一个宠物项目,其复杂性非常低(几乎马上就知道要做什么和如何做),缺乏硬件开发(物理方面很不错)并且无法获得或多或少完整的产品。不,当然,不能排除这些行的作者是一个业余爱好者,真正的大师在晚上喝茶和一杯白兰地之间的一个晚上就这样走了,但是到目前为止,经验只表明了一件事:IT复杂,乐观受到财务和声誉的惩罚那些说“一切都很简单”的人要么是天才,要么是骗子,而第二种可能性更大。

All Articles