购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 音频隐写方法及信息提取

国内CTF比赛刚刚兴起时,音频隐写方面的赛题鲜有出现。经过这几年的发展,音频隐写类题目越来越多。本节将介绍音频隐写的常用工具,并总结常用的比赛套路。

2.2.0 常见的音频文件格式解析

音频文件后缀包括mp3、wav、wma和ape等,国内比赛中以MP3和WAV格式最为常见,下面分别进行介绍。

1.MP3文件格式

MP3是一种有损音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer Ⅲ)。MP3利用人耳对高频声音信号不敏感的特性,对高频信号加大压缩比(甚至忽略信号),而对低频信号使用小压缩比,以保证信号不失真。这相当于抛弃人耳基本听不到的高频声音,只保留能听到的低频部分,从而将声音用1:10甚至1:12的压缩率压缩。

MP3文件大体分为三部分:TAG_V2(ID3V2)、帧(Frame)、TAG_V1(ID3V1)。ID3V2和ID3V1不是必需的,MP3主要由帧构成,帧是MP3文件最小的组成单位,如表2.2.1所示。

表2.2.1 MP3文件格式

每个帧都有一个帧头(Frame Header),长度是4字节。帧头后面可能紧跟两字节的CRC校验值,这两个字节是否存在,取决于帧头信息第16比特的值,值为0表示帧头后面无校验,值为1表示有校验。CRC校验后面就是帧的实体数据。帧头信息如表2.2.2所示。

表2.2.2 MP3帧头信息

使用010 Editor模板解析MP3文件时,对帧头的解析和表2.2.2略有不同。在010 Editor模板解析结果中,帧同步占12比特(不同于表中帧同步占11比特),MPEG音频版本占1比特,版本占2比特,其他字段与表2.2.2中相同。帧的实体数据称为Frame data(也叫作Main_data),它的长度是否变化取决于帧头的比特率是否变化,一首MP3歌曲可以有三个版本:96Kbit/s、128Kbit/s和192Kbit/s。其中,Kbit/s(比特率)表示音乐每秒的数据量,Kbit/s值越高,音质越好,文件也越大。MP3标准规定,比特率不变的MP3文件称作CBR,大多数MP3文件都是CBR的。

2.WAV文件格式

WAV的全称是Waveform Audio File Format(WAVE),它是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。它采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,也被称为无损音频。但是严格意义上来讲,WAV也可以存储其他压缩格式的音频数据。

为了与RIFF保持一致,WAV文件的数据采用块(chunk)来存储,一般最少由3个块组成:RIFF块、Format块和Data块。

RIFF块也称为WAVRIFFHEADER,包括ID(4字节,以“RIFF”为标识)、Size(4字节,整个文件的长度减去ID和Size的长度)和Type(4字节,内容一般为“WAVE”,表示后面需要两个块:Format块和Data块)三个部分。

Format块以“fmt”开头,包括音频格式、声道数、采样率等信息。

Data块以“data”开头,接下来的4字节表示数据块长度,然后是音频采样数据。每个字节按照时间顺序写入,对于使用多个字节的采样,用小端模式存放;对于多声道的采样,用交叉存放的方式。例如,立体双声道的采样存储顺序为:声道1的第1个采样,声道2的第1个采样;声道1的第2个采样,声道2的第2个采样;依此类推。

了解了MP3和WAV文件格式之后,我们总结CTF比赛中一些常见考法,下面逐一介绍。

2.2.1 基于波形图的隐写

根据音频文件的采样数据可以得到音频播放时的波形图,如果音频是单声道,那么只会有一幅波形图;如果是双声道,则会有两个波形图。利用工具Audacity可以查看音频文件,这个工具免费且功能非常强大(网址为:https://www.audacityteam.org/)。

【例题】stego100.wav

【题目描述】 找到文件中的flag。

【解题思路】 打开Audacity,将文件拖入,如图2.2.1所示,单击“确定”即可。文件导入后如图2.2.2所示,中间的图像就是波形图,有上下两个波形图意味着是双声道。使用图2.2.2中方框内的按钮,可以实现波形图的放大和缩小(单击按钮后,单击鼠标左键放大,单击鼠标右键缩小)。一般而言,双声道文件的两个声道波形完全一致,这样在播放时会有立体声的效果。但是,本题中两个声道波形不一样,上面的声道更有规则,将其放大,如图2.2.3所示。猜测很可能是摩斯码,短横表示点,长横表示划,手工对波形进行莫尔斯电码的转换:.....-...-.-.----...---.....-........-----.-.-.-...-----.-------..---....-........---.-.....------...-..--...---------...-------..--------..-----.-.,解码后的flag为5BC925649CB0188F52E617D70929191C。

图2.2.1 在Audacity中打开音频文件设置

图2.2.2 在Audacity中导入音频文件

2.2.2 基于频谱图的隐写

在波形图中可以看到声音随时间的变化,还可以从信号频率角度查看声音的变化,图2.2.4中的频域图像也称为频谱图(图片源自https://zhuanlan.zhihu.com/p/19763358)。比赛中也经常在音频文件的频谱图中隐藏信息。

图2.2.3 观察某一声道

图2.2.4 时域和频域

【例题】sound.wav

【题目描述】 找到文件中的flag。

【解题思路】 用Audacity打开文件,在波形图中没有发现特殊信息,于是尝试查看频谱图。如图2.2.5所示,单击方框中的按钮后选择频谱图,即可看到flag,如图2.2.6所示。

图2.2.5 查看频谱图

图2.2.6 在频谱图中隐藏的flag

2.2.3 音频LSB隐写

采用WAV等格式可以无损保存音频信息,这也意味着可以对音频采用LSB隐写。下面介绍几种常见的音频LSB隐写工具。

1)S-Tools采用加密机制将信息隐藏在BMP或GIF图像文件中,也可以隐藏在WAV的声音文件中。现阶段支持的加密方法包括IDEA、DES、3DES等。S-Tools是离散嵌入方案,它利用密钥随机选择信息隐藏的位置。

2)Steghide支持JPEG、BMP、WAV和AU文件,可将隐藏信息进行压缩和加密,在载体文件中找到一系列像素点(或采样点)位置,信息将被隐藏在这些位置上。挑选出这些点中不需要改变的像素(或采样点)位置(它们碰巧已经包含要隐藏的信息),由图论匹配算法找出需要做改变的那些像素(或采样点)位置,最后修改其像素值(或采样值)以便嵌入隐藏信息。

3)Hide4PGP将数据嵌入BMP、WAV、VOC文件中,其创新之处是可以将数据嵌入到最低几位。例如,对于采样位数为16的音频文件,Hide4PGP可以在低4位中嵌入信息,但对于8位的音频文件,只能在最低位嵌入信息。

4)Invisible Seerets4可以将数据嵌入JPEG、PNG、BMP、HTML和WAV等文件中。对于WAV格式的文件采用连续LSB嵌入,嵌入容量由载体信号的长度决定。

5)Steganos Security Suite是一套功能完整、简单易用的工具,可支持在BMP、VOC、WAV和ASCII文件中隐藏数据。它将信息嵌入到字节的最低位,从文件头之后开始,直到文件的结尾。当嵌入的隐藏数据较短时,Steganos会生成噪声并将其写入至文件末尾,因而难以检测。这种方法将修改整个文件,所以不要选择过大的载体文件,一个较大的载体文件需要更多的噪声来填充。

6)SilentEye(官网地址为https://achorein.github.io/silenteye)可以对JPG、BMP和WAV使用LSB隐写信息,采用AES128和AES256加密。SilentEye的功能多样,可以采用离散嵌入方式隐藏数据。为了确定要从图像中读取多少位,需要计算嵌入的隐藏数据大小并将其写入载体文件中,这些信息保存在SilentEye头部信息中。此外,还包含数据格式(如文本、字符集/文件、文件名)的信息。SilentEye的头部信息可以位于载体文件的头部、中间或者尾部。

在上述6个工具中,SilentEye在图像和音频隐写中出现较多,如果比赛中的音频是WAV格式,且波形图和频谱图没有明显线索,那么可以优先尝试SilentEye。上述工具的使用都需要密码,因此关键是如何找到对应的密码。

【例题】sarilang.zip

【题目来源】 原创。

【题目描述】 找到文件中的flag。

【解题思路】 解压后得到一个WAV文件,先将文件拖入010 Editor进行分析,在文件尾发现提示,如图2.2.7所示。

图2.2.7 音频追加插入隐写

SilentEye安装完成后,打开主界面(如图2.2.8所示)。将音频拖入中间的窗口位置后,如图2.2.9所示。

图2.2.8 SilentEye主界面

图2.2.9 拖入音频文件

单击图2.2.9左下角的“Decode”按钮,尝试用SilentEye和密钥12345678提取文件,如图2.2.10所示。注意Key对应两个输入框,因此需要输入两次12345678,再单击图2.2.10中右下角的“Decode”按钮,会出现图2.2.11的提取结果,单击txt.zip即可保存到任意文件夹。我们对txt.zip解压后得到txt.txt文件,把其中的0替换成点(.),1替换成!,2替换成?,先进行Short Ook!解码,再进行Brainfuck解码,即可得到flag。

图2.2.10 利用SilentEye提取音频隐写信息

图2.2.11 提取结果

2.2.4 MP3文件隐写

MP3音频隐写除了利用波形图和频谱图,还可以用专门的隐写工具或者利用其头部冗余字段实现隐写。

MP3Stego是最早出现的一款基于MP3的隐写软件,它在MP3编码过程的内循环中实现秘密信息的嵌入,通过编码参数块长度的奇偶性来实现秘密信息的嵌入。该算法的优点是通过将嵌入操作引入的噪声融入量化噪声,使得该算法具有很好的不可感知性。

UnderMP3Cover是另一种典型的压缩域音频隐写工具,它是通过修改全局增益的最低有效位来实现隐写的,本质上就是LSB隐写方法。

【例题】apple.zip

【题目来源】 实验吧平台。

【题目描述】 找到文件中的flag。

【解题思路】 解压后得到一幅PNG图像,中间有一个二维码,扫码后得到:\u7f8a\u7531\u5927\u4e95\u592b\u5927\u4eba\u738b\u4e2d\u5de5。“\u”是Unicode编码,可使用工具包中的“文本与Unicode码转换小工具”解码,使用方法如图2.2.12所示。注意,图中分隔符号要根据实际情况进行修改,并选择正确的进制。

图2.2.12 通过离线工具解码Unicode编码

下面我们简单介绍一下Unicode编码。在严格的ASCII码中,每个字符用7比特表示。而计算机上普遍使用8比特表示一个字符,8比特最多可以表示256个字符,明显不能满足通过一种编码表示各种语言的需要。Unicode使用16比特表示一个字符,这使得Unicode能够表示世界上绝大多数的文字和符号。

将扫码得到的Unicode字符串转换为中文:羊由大井夫大人王中工。这是一种加密方式,称为“当铺密码”。当铺密码的基本原理就是:一个汉字中有多少个出头的笔画,就对应相应的数字。据此进行解密,上述汉字即可转换成数字:9158753624。

继续对该PNG图像进行分析。将图像拖入010 Editor后,在PNG图像的尾部发现一个RAR压缩包,提取并解压该包后得到apple.mp3文件,结合之前发现的数字,很可能需要用MP3Stego提取信息。

我们使用MP3Stego中的Decode.exe。这里有一个使用技巧,需要把MP3文件复制到和Decode.exe相同的文件夹下,否则可能运行失败。如图2.2.13所示,运行后自动生成apple.mp3.pcm和apple.mp3.txt两个文件,打开apple.mp3.txt发现隐写信息:Q1RGe3hpYW9fcGluZ19ndW99,经过Base64解码就得到flag:CTF{xiao_ping_guo}。

MP3除了使用专门工具,还可以利用其文件格式中的冗余信息实现信息隐藏。例如,MP3文件中每个帧的帧头都有隐私比特(Private Bit),修改该比特不会对MP3播放产生影响,因此可以在每一帧中隐藏1比特信息。

图2.2.13 MP3Stego的使用方法

【例题】3.mp3

【题目来源】 2019泰山杯。

【题目描述】 找到文件中的flag。

【解题思路】 将该文件用010 Editor打开,没有发现明显的追加插入;用Audacity打开,波形图和频谱图也没有明显异常。在010 Editor中,仔细观察每一帧的头部信息,发现private_bit不相同(而该字段一般均默认为0),因此在该字段可能存在隐写,如图2.2.14所示。

图2.2.14 MP3每一帧的头部解析结果

修改010 Editor中的MP3模板文件(工具包中MP3.bt文件的第373行已经被修改,可以直接使用),提取出每帧的private_bit,解析结果会显示在Output窗口中。在Output窗口中单击鼠标右键,选择“Copy All”复制所有运行结果,如图2.2.15所示。

在解析结果中,“0,0”是我们需要的输出结果,逗号前的整数表示第几帧,逗号后的整数表示该帧中private_bit字段的值。在输出结果中还有其他解析结果,我们只保留需要的内容,删除其他字符串,如图2.2.16所示。接下来,我们想提取每一行中逗号后的整数,可以利用编辑器的正则表达式替换功能,将逗号前的整数和逗号替换为空字符串,替换规则如图2.2.17所示。将替换后得到的01字符串和换行符全部复制,粘贴到Koczkatamas工具包的BIN行,即可按8比特一组解析,最后得到:flag{1j5^XNt_Seem_s0_cl3ver_t0_f ind_f1ag!}。

图2.2.15 复制模板运行后的所有结果

图2.2.16 整理后的解析结果

图2.2.17 正则表达式替换

2.2.5 拨号音识别

亚力山大·格雷厄姆·贝尔(Alexander Graham Bell)是美国的发明家和企业家,他获得了世界上第一台可用电话机的专利权,创建了贝尔电话公司(AT&T公司的前身),被誉为“电话之父”。

最早的电话机是磁石电话机,靠自备电池供电,用手摇发电机发送呼叫信号。1891年出现了旋转拨号盘式自动电话机,它可以发出直流拨号脉冲,控制自动交换机动作,选择被叫用户,自动完成交换功能。20世纪60年代末期,出现了按键式全电子电话机,采用双音多频方式传输信号。

常见的电话拨号分为脉冲拨号和双音多频拨号。目前,无论是固定电话还是手机,基本都采用双音多频方式拨号。

1.脉冲拨号的原理

拨号时,转动拨号盘上相应的数字,拨号盘在回转的过程中控制电话机内电路节点的“断”和“续”,从而使流过电话电路中的电流时有时无,发出代表对方电话号码的电脉冲。比如:

❑拨号“1”时,电路“断”“续”1次,代表数字“1”。

❑拨号“8”时,电路“断”“续”8次,代表数字“8”。

❑拨号“0”时,电路“断”“续”10次,代表数字“0”。

每拨一位号码,电路“断”“续”多次。但是,这种拨号方式速度较慢,所发出的直流脉冲信息容易导致交换机识别错误。

2.双音多频拨号原理

双音多频信号(Dual Tone Multi-Frequency, DTMF)由高频群和低频群组成,高低频群各包含4个频率。电话上的每个按键(数字键和功能键)对应一个唯一的DTMF信号,每个DTMF信号由高频群中的一个高频信号和低频群中的一个信号叠加组成。

根据CCITT(Consultative Committee of International Telegraph and Telephone,国际电报电话咨询委员会)的建议,国际上采用697Hz、770Hz、852Hz和941Hz作为低频群,采用1209Hz、1336Hz、1477Hz和1633Hz作为高频群。用这8种频率可形成16种不同的组合,代表16种不同的数字键或功能键,具体组合见表2.2.3。

表2.2.3 电话各按键的DTMF信号

【例题】du~du~du~.wav

【题目来源】 2021“华能睿渥”杯。

【题目描述】 找到文件中的flag。

【解题思路】 查看音频的波形图和频谱图,没有发现明显的隐写信息。播放音频,发现是歌曲《桥边姑娘》,但也没有发现flag。因为文件是WAV格式,所以尝试用SilentEye提取。将音频拖入SilentEye,按图2.2.18的步骤提取LSB隐写的信息,得到1.mp3文件。

图2.2.18 无密钥提取

播放1.mp3,并结合题目名称,我们猜测接下来要识别拨号按键。在Audacity中查看1.mp3的频谱图,如图2.2.19所示,左侧的数值代表频率(Hz)。

我们可以对照表2.2.3来确定对应的按键。但是,图2.2.19中左侧的数值单位过大,不利于识别,因此我们可以手工放大数值区域。具体方法是:将鼠标移动到1k~2k之间,单击鼠标右键,如图2.2.20所示,再选择“放大”。经过反复整理后的结果如图2.2.21所示。最后识别的拨号为:53672516386126。

图2.2.19 拨号音频谱图

图2.2.20 放大坐标的数值

图2.2.21 根据频谱图识别电话按键

如果比赛时可以连接互联网,使用网站http://dialabc.com/sound/detect/index.html也能辅助识别拨号按键。我们向该网站上传1.mp3,发现文件解析出现错误。此时,可以利用Audacity将1.mp3导出为WAV格式,如图2.2.22所示。向网站上传转换后的WAV文件,解析结果见图2.2.23。

图2.2.22 导出为WAV格式

2.2.6 音频隐写总结

最后,我们对音频隐写解题思路做个总结。

1)使用010 Editor解析音频文件,查找较为明显的插入隐藏或文件格式冗余信息隐藏(例如MP3的private_bit隐写)。

2)使用Audacity查看波形图和频谱图等。

3)如果是WAV等无损音频文件,可以考虑LSB隐写,常使用SilentEye工具;如果是MP3文件,考虑使用MP3隐写专用工具(MP3Stego等)。

图2.2.23 网站解析结果 v62A8y6WkXkN9OlaPQ/AIkXbxZVChkpDn0JnJW/pK1ZvC5EvzHmgll/p20p2X73g

点击中间区域
呼出菜单
上一章
目录
下一章
×