引言
作为一名IT专业人士和网络安全爱好者,我一直对系统和技术的运作方式充满好奇——尤其是那些不轻易透露其秘密的系统和技术。怀着对天气和风暴追踪的热情,我常常想知道,在严重风暴来袭时,紧急警报系统(EAS)和美国国家海洋和大气管理局(NOAA)气象广播是如何如此迅速地传输和接收警报的。在本文中,我们将探讨紧急警报系统(EAS)、其特定区域消息编码(SAME)格式,以及如何利用一些巧妙的编程、树莓派和NOAA气象广播来模拟真实的紧急警报,作为一次网络安全和无线电信号的实践。
注意:本文内容强调了一个关键的政府系统,该系统旨在在紧急情况下向公众发出警报。篡改、广播或伪造EAS中使用的受限无线电信号是违法的。本文中执行的所有操作均在受控环境中进行,以降低无线电信号泄漏的风险。
什么是EAS?
如果你住在美国中西部或周边地区,你可能经历过不少春季雷暴,甚至可能遭遇过恶劣天气。如果是这样,那么你很可能也经历过由政府紧急警报系统(EAS)触发的老式CRT电视或收音机上发出的刺耳且令人不悦的声音。
龙卷风警报期间紧急警报系统的一个示例幻灯片和伴随的声音。
紧急警报系统正如其名:旨在在紧急情况下向公众发出警报。然而,推动EAS的技术是一段引人入胜的历史,我们将在本文中深入探讨。
紧急警报系统简史
紧急警报系统标志
紧急警报系统于1997年1月正式启动,以取代其前身——1963年创建的紧急广播系统(EBS)。EAS最初是为国家紧急情况(如核攻击)而创建的,但现在用于传递来自国家气象局的各种警报,如恶劣天气警报。
在现代,EAS与无线紧急警报(WEA)、NOAA气象广播以及各种其他在线网络馈送协同工作。这一切都被整合到FMEA系统中,称为综合公共警报与预警系统(IPAWS)。在大多数日常对话中,由于其丰富的历史,大多数人通常将这些系统简单地称为EAS。在本文中,我们将主要关注EAS和NOAA气象广播,因为它们在接收警报方面使用了相似的技术。
警报是如何传输和接收的?
IPAWS和下游路径系统的架构图

在现代,大多数政府发布的警报都是通过IPAWS网络馈送发送的,广播电台、电视台和有线提供商需要订阅该馈送以转发任何和所有国家警报。软件开发者可以利用IPAWS-OPEN以通用警报协议(CAP)格式(XML)接收警报。IPAWS-OPEN还可以传输和转发国家气象局的警报。
要查看CAP警报的示例,你可以访问显示国家内任何活跃CAP格式警报的公共weather.gov API。此外,在URL后附加?area={STATE}将按提供的两字母州名过滤警报。所有CAP信息(以及更多内容)都在OASIS开放规范中记录,NWS的实现链接在此处。
此外,在美国及其领土上战略性地布置了(截至撰写本文时)77个主要入口点(PEP)系统,这些系统会轮询数字IPAWS-OPEN馈送,以及参与的广播电台、电视台和有线提供商。这些参与者使用像Sage Digital ENDEC 3644这样的解码器系统或类似设备。
用于EAS系统的SAGE Digital ENDEC解码器图片
然而,如果在危机期间互联网变得不可访问,从而阻塞了对数字CAP馈送的访问,那么EAS的真正威力就开始显现。正如FEMA关于通用警报协议的细节中所指出的,电台也会以“雏菊链”结构监控其他电台的EAS警报。
特定区域消息编码(SAME)
在FEMA关于IPAWS的网站上,你还会开始发现对其他EAS协议的引用,如特定区域消息编码(SAME)和那些令人不悦的EAS音调(音量警告)。
当CAP解码器接收到警报并对其进行解码时,它不仅负责将警报传输到其直接管辖范围内,还负责将其转发给其他EAS电台。这创建了一个从某个源头传播信息并迅速通过无线电波转发到其他电台的快速网络。
主要入口点电台还有额外的要求,例如必须配备备用通信设备和发电机。这些设备允许它们在《联邦法规》§ 11.18 EAS指定中描述的“重大”灾难期间继续运行。传输的代码就是SAME协议所在之处,也是NOAA气象广播和经典无线电驱动的EAS协议的驱动力。
在《联邦法规》§ 11.31 EAS协议中,你可以找到关于SAME代码的详细技术信息,但最相关的信息列在下面。
EAS消息的结构
消息由激活EAS的4部分消息组成:
前导码,后跟EAS(SAME)头代码
音频注意信号(同时传输853和960 Hz)
消息本身(通常为文本转语音)
前导码,后跟EAS消息结束(EOM)代码
消息的关键部分是EAS头,这是EAS设备(以及NOAA气象广播,更多内容见后文)实际解码以确定其本地管辖范围是否受到警报影响的部分。这些头是编码的ASCII文本字符,以精确频率编码和传输:
音频频移键控速率:每秒520.83位
标记(二进制1)频率:2083.3 Hz
间隔(二进制0)频率:1562.5 Hz
标记和间隔时间必须精确为1.92毫秒
EAS头必须以三个为一批进行传输,每次传输头时,EAS解码器都应能够接收消息。这确保了无线电噪声不会严重影响警报的转发。
头的模板文本列在下面:
[PREAMBLE]ZCZC-ORG-EEE-PSSCCC-+TTTT-JJJHHMM-LLLLLLLL
[PREAMBLE]是16个十六进制0xAB字节的流,本质上用于在准备警报本身之前清除EAS解码器系统。
ZCZC是静态文本,作为标识符。
ORG是激活EAS的发起方。这些列在此处。
EEE是事件代码,最终告诉你EAS被激活的原因。这些列在此处。
PSSCCC是一个6位数字字符串,代表受警报影响的国家区域。SAME头在一个警报中最多可以支持31个位置。
P代表一个形状异常的县的细分,或设计用于更具体的定位(通常为“西北”、“东南”或其他分区)。在实践中,P并不常用。
SS代表被定位的2位FIPS州代码。这些列在此处。州代码为00代表所有州(整个国家)。
CCC代表一个3位县/市FIPS代码,可以在NWS网站上轻松找到。在浏览这些列表时,SAME位置代码是州和县(SSCCC)的组合,因此对于俄亥俄州的富兰克林县,它将是俄亥俄州的39和县的049。
+TTTT代表消息的有效时间期,以15分钟为增量开始,然后每小时以30分钟为增量。有趣的事实:这就是为什么天气警报总是落在均匀分布的时间段上。)
JJHHMM代表消息最初以UTC发送的儒略历日、小时和分钟。
LLLLLLLL代表EAS消息的发起办公室,或谁在转发它。这个字符串由EAS编码器设备自动附加到消息上。
整合所有部分
点击此处查看GitHub仓库
https://github.com/JacobSecOps/Emergency-Alert-Generator
为了实现一种稳健且可重用的生成警报的方法,我开始构建一个自定义的Python程序,该程序接收所有必要的参数并导出有效的波形(.wav)文件,该文件可以通过无线电波或通过一些专用软件进行解码(更多内容稍后)。
在探索了波形采样、与最低有效位编号对齐以及确保振幅匹配预期格式之后,我能够构建一个足够稳健的程序,以使用有效的SAME头和EOM字符串创建模拟的EAS警报。
除了生成EAS警报本身之外,这个Python项目还实现了一些便利功能,使其相当易于使用:
0xAB前导码自动应用于头和EOM字符串。
州和县FIPS代码从人口普查API获取,该API允许你指定州和县的名称,并让API返回正确的代码。
指定注意音调的长度。虽然大多数警报默认为8秒,但根据EAS规范,这些音调可以播放长达24秒。
编码一个在警报中的适当位置附加的文本转语音消息。
作为说明,我并不是第一个创建此类工具的人,然而,从我所做的所有研究来看,我是第一个直接与人口普查API集成并为其创建命令行工具的EAS生成器的作者。以下是我在研究过程中发现的其他几个项目:
模拟测试
为了进行模拟测试,我计划为俄亥俄州的富兰克林县生成一个龙卷风警报警报消息。这将由KILN办公室发起,该办公室是位于俄亥俄州威尔明顿的国家气象局办公室。
使用新开发的Python程序,我可以简单地运行以下命令来生成一个新的.wav文件进行测试:
python eas_generator.py--state"Ohio" \--county"Franklin" \--message"This isatest of the EAS Generator" \--day98\--hour2\--minute25\--origin"WXR" \--event"TOR" \--duration"0015" \--identification"NWS/KILN" \--attention-tone8\--output"tornado_warning_franklin_co_eas_example.wav"
这将生成一个带有编码SAME头的tornado_warning_franklin_co_eas_example.wav,头为ZCZC-WXR-TOR-039049+0015-0980250-KILN/NWS-。然后,我们将波形导入Audacity以分析警报的结构。
Audacity频谱图视图中输出EAS警报的截图。

现在的问题是,我们如何测试它?显然,在验证其工作之前,我们希望尽量避免在无线电波上广播噪声,因此找到软件解决方案是必要的。
一些研究产生了两个可能的工具,可用于验证EAS SAME头是否可以正确解调和解码。它们是:
SeaTTY
https://www.dxsoft.com/en/products/seatty/
multimon-ng
https://github.com/EliasOenal/multimon-ng
使用SeaTTY进行测试
SeaTTY是一款有趣的软件,我对其研究的时间并不长,但从我所收集的少量信息来看,它可以通过无线电波接收完整的天气报告、航行警告和其他信息。就我们的目的而言,我们可以将模式更改为NWS-SAME,然后选择从文件解码。
ModeNWR-SAME解码模式的SeaTTY软件设置截图
从文件解码后,我们看到缓冲区窗口显示了我们原始的警报,以及消息结束字符串NNNN:
成功将EAS警报解码回其纯ASCII文本的SeaTTY软件截图
这意味着,从理论上讲,我们应该能够传输这个警报并通过气象广播接收它。然而,让我们也通过multimon-ng进行测试,以确认我们可以正确地将波形通过音频处理工具。
使用sox和multimon-ng进行测试
为了尽可能接近我们的实地测试而不实际通过无线电波传输(目前),我们可以使用sox和multimon-ng的组合来解调波形,看看我们是否可以打印原始警报。Multimon-ng有一个内置的模式来解码EAS SAME头,因此这应该很简单。
在Windows Subsystem for Linux环境中安装了适当的软件包后,我们就可以运行以下命令:
soxtornado_warning_franklin_co_eas_example -c1-r22050-t raw -e signed -b16- gain +6| multimon-ng -a EAS -t raw -
该命令的参数详细说明如下:
-c 1 这强制使用单声道(单通道)音频。技术上EAS可以支持立体声,但就我们的目的而言,我们将坚持使用单声道。
-r 22050 这将采样率设置为22,050 Hz,以便multimon-ng可以处理它。
-t raw 这输出没有WAV头的原始音频。
-e signed 我们的编码类型。在这种情况下,我们使用有符号整数。
-b 16 每样本的位数。16位PCM是标准,也是我们之前Python脚本输出的内容。
这直接输出到标准输出,因此我们可以将其管道传输到multimon-ng,并使其像酷孩子一样成为一行命令。
gain +6 虽然可能不是严格必要的,但这会提高音量,使其更容易解码。
然后,我们将其传递到multimon-ng,我们必须为EAS声明解码器模式-a,指定输入为原始音频-t raw,并从标准输入读取-。
结果:我们的sox + multimon-ng命令成功解码EAS警报的终端输出截图
在结果屏幕上,我们可以看到原始的EAS SAME头以及EOM字符串都被显示出来,这证实了我们得到了期望的结果。
使用NOAA气象广播进行实际实验室测试
既然我们已经完成了所有的模拟测试,我们现在可以在配备适当设备的实验室环境中尝试真实测试。在进行测试之前,让我们快速了解一下我们为这次测试准备了哪些设备:
Raspberry PI 3B+
Midland NOAA气象广播
Midland NOAA气象广播的图片
RTL-SDR无线电接收器
RTL-SDR无线电接收器的图片
虽然RTL-SDR严格来说并不是必需的,但它对于确保我们的信号在视觉上以正确的频率传输非常有用。我们将使用SDR#来查看我们传输时的频率瀑布图。
我们如何安全传输?
我已经多次提到,传输非政府发布的EAS警报可能会导致监禁。因此,这是最后的警告:不要在家尝试这个!
话虽如此,在配备非常低功率发射机的受控实验室场景中,进行我们的实验以确认我们可以触发气象广播应该是安全的。
虽然树莓派肯定不是射频发射机,但信不信由你,它实际上可以传输非常低的射频信号(大约在10毫瓦的范围内),频率高达约1 GHz。我们很幸运,因为NOAA气象广播在七个低FM频率之一上接收传输:
162.400 MHz
162.425 MHz
162.450 MHz
162.475 MHz
162.500 MHz
162.525 MHz
要通过树莓派传输,我们可以使用两个很棒的GitHub项目rpitx和pifmrds来完成繁重的工作。这将通过GPIO 4或引脚7进行传输。为了保持传输范围尽可能小,我们将放弃在引脚上附加任何天线或电线,并将气象广播和RTL-SDR物理上靠近树莓派放置。
rpitx:https://github.com/F5OEO/rpitx
pifmrds:https://github.com/ChristopheJacquet/PiFmRds
树莓派GPIO引脚图片,特别是引出了GPIO 4或引脚7。
在我进行实际发送EAS警报的样本测试中,我无法从房子的一侧到另一侧(没有天线或电线)接收到信号,这给了我信心,可以尝试真实操作。
在NOAA气象广播上触发真实的龙卷风警报
在这个视频演示中,我们可以看到用于测试的树莓派和NOAA气象广播。我们还将RTL-SDR插入笔记本电脑,以在我们传输警报时监控所选频率。在屏幕的左下角,我们通过SSH登录到树莓派以运行命令来传输我们的警报。在右下角是气象广播调谐频率的SDR#瀑布图,以查看警报何时被传输。
在这个例子中,我发现虽然树莓派可以作为射频发射机运行,但晶体振荡器并不完美。因此,经过反复试验,我发现162.500 MHz是传输的最佳频率,并将气象广播调谐到该频率。
我们在树莓派上运行的最终触发警报的命令如下:
sudopifmrds -freq162.500-audio tornado_warning_franklin_co_eas_example.wav
当它被发送时,广播噪音立即停止,我们开始听到熟悉的EAS音调通过广播传来,我们可以在SDR#的瀑布图上看到它们脉冲。在所有三个EAS音调被发送后,气象广播关闭,认为有来自官方KILN国家气象局办公室发布的龙卷风警报。
发送EAS警报时SDR#瀑布图的截图。这是从下往上读的,底部是更早的时间。这个截图是在注意音调期间拍摄的
眼尖耳利的观众可能会在视频中注意到,每次头重复时,EAS音调都会“变响”。这很可能是由我们使用树莓派引起的,它需要一些时间来校准振荡器。SDR#瀑布图也证明了这一点,因为信号传输时间越长,信号就越鲜艳。这是一个很好的例子,说明了为什么EAS头在官方警报中会发送多次,因为直到第三次头被传输后,气象广播才真正关闭。
在这个例子中,我还省略了文本转语音语音,突出了它实际上并不是广播关闭或EAS解码器捕获有效警报所必需的。真正的每周测试(RWT)警报通常会省略语音,因为这些警报类型仅用于每周测试设备。
恶劣天气(龙卷风)警报器的相关性
这个项目最初是在2025年3月30日俄亥俄州和富兰克林县受到恶劣天气影响时产生的灵感。当时我与住在哥伦布附近的一位朋友交谈,他说尽管他的城镇远在警告多边形之外,但龙卷风警报器还是响了。以下是爱荷华州立大学环境监测网关于这次天气事件的截图示例:2025年3月30日影响俄亥俄州费耶特、富兰克林、麦迪逊和皮卡韦县的雷达反射率复合图和龙卷风警告多边形图片
在突出显示的“绿色框”区域,当龙卷风警报器远离多边形时,它们却响了。这个警告框最初是在2025-03-31T0138 CDT(如上图所示)发布的。然后,在其生命周期内,它收到了两次更新,警告多边形在背面被“削减”(如下面的白色轮廓所示)。然后,它在晚上9:14 CDT过期。2025年3月30日雷达反射率复合图和龙卷风警告多边形更新的图片。
我为什么要提这个?嗯,每当有足够高严重性的警报(如龙卷风警告)更新时,国家气象局实际上会再次提交EAS警报。从技术上讲,这是相同的警报,但在某些情况下,NOAA气象广播以及最值得注意的是:龙卷风警报器会“再次触发”。我的朋友从未处于这次风暴警告的龙卷风路径中,但警报器却一直响个不停,最终被禁用,然后过一段时间又会再次响起。
原因是什么?这是因为户外警告警报器(俗称“龙卷风警报器”)是基于与气象广播和EAS本身相同的EAS-SAME技术构建的。
正如我们在本文中所探讨的,基于天气的EAS警报针对整个县(或在罕见情况下针对主要子区域)。因此,即使你的县被警告框“剪切”,而你在县的另一侧,龙卷风警报器很可能仍会被触发。在某些情况下,民事当局实际上会在风暴不真正威胁其管辖范围时关闭警报器,但如上所述,提交给EAS的更新会再次触发它们,这就是我朋友所描述的警告正常生命周期进展时的情况。然而,值得注意的是:他的手机从未收到过无线紧急警报(WEA)推送。这是这里所使用的技术的另一个有趣之处。
我们在这个场景中看到的是新旧技术的融合。2007年10月,国家气象局停止了对整个县的严重天气警告,转而选择在地图上绘制多边形,他们称之为“基于风暴的警告”。这很有用,因为它减少了未受直接影响的人们的警告数量。尽管如此,旧的EAS和气象广播技术尚未完全采用这项技术,这导致了在这些情况下警报器“时开时关”。然而,像WEA这样的新系统利用手机的GPS来确定你是否在多边形内,这解释了为什么他从未收到过紧急警报推送。
作为额外的说明,所有NWS的天气通知都通过NOAA气象广播传输,并使用SAME头。其中只有一小部分实际上会触发EAS,通常保留给极端严重性的情况,即生命或财产即将受到威胁。如果你阅读龙卷风警告或“破坏性”标记的严重雷暴警告的警报文本,你可能会看到“EAS激活请求……”的文本。这就是触发EAS并使户外警告警报器响起的一个例子。
EAS与网络安全
鉴于我从事IT和网络安全工作,为什么我觉得有必要探索这个?除了EAS是一项控制很多幕后工作的酷技术之外,有人可能会认为,广播系统的老派性质和它们的结构方式是不安全的,更倾向于使用新技术途径进行警报传播。事实上,EAS是近30年前最初部署时最智能设计的IT相邻系统之一。在需要时,使用雏菊链功能在全国范围内大约5分钟内传输警报的能力在国家紧急情况下非常重要。此外,它及其父IPAWS系统、EAS和SAME代码构成了我们在遭遇严重天气时理所当然地认为的很多天气警报的通信骨干。
此外,在最近几年中,EAS解码器已扩展使用更现代的安全功能来验证警报的真实性,使用数字签名。本文中部分提到,EAS软件使用证书链,就像大多数现代IT安全一样。这样,即使某个流氓个人想要在有效无线电频率上“广播”假的EAS警报,如果没有有效签名,大多数EAS设备都应该忽略它,或者记录一个错误,如:
EventLog: Digital Signature VERIFICATION ERROR: Signer UNTRUSTED!Check for correct CAP decoder CA file.
相比之下,NOAA气象广播突出了该系统过去的工作方式。过去曾发生过EAS系统被黑客攻击的情况。在下面的视频示例中,黑客通过KRTV发送了一个虚假的局部区域紧急(LAE)警报,声称僵尸正在从坟墓中爬出并攻击平民。
EAS Fandom Wiki上强调的有趣情况是,SAME音调后来在威斯康星州拉克罗斯的另一家电视台上播放,当时新闻记者正在报道发生在KRTV上的情况。这家其他新闻台在报道这一情况并播放相同的SAME音调时,实际上再次触发了EAS,突出了为什么FEMA和FCC对SAME音调的任何滥用都进行了严格监控。
学习与收获
对紧急警报系统及其相关技术的深入探索是一个相当有趣的探索过程。但这样做揭示了一个最稳健的通信系统之一,该系统用于在紧急情况下保障人们的安全。了解EAS消息如何编码、传输和通过网络传播,以及生成有效警报的Python程序都是极具洞察力的。
当将其与网络安全联系起来时,我想到了以下几点:
在这种情况下,更准确的说法应该是调制与解调,因为它是FM无线电驱动的。
EAS(和许多其他技术)使用最低有效位编号,这在编写脚本时让我困惑了一段时间。
树莓派可以作为低功率FM发射机运行。这项技术有无数个项目和深入探索的潜力,这是我未来希望探索的内容。
尽管世界上有所有的网络安全工具,但错误的按钮一按就可能被击败。
原文地址:
https://medium.com/@oglesbeejacob/hacking-the-airwaves-de578e40f53b