Misc篇-隐写术

发布于 2024-05-12  146 次阅读


Misc简介

Misc(Miscellaneous),即杂项,一般指CTF中无法分类在Web、PWN、Crypto、Reversel中的 题 目。当然,少数CTF比赛也存在额外分类,但MisC是一个各种各样的形式题目的大杂烩。虽然MisC类 型的题目干奇百怪,但它是初学者最容易上手的CTF题目类型之一,考察了各领域的基本知识,也是培养 信息安全技术兴趣的极好材料。

CTF中的Misc可以分为以下几个类型: 1.为了让参赛者参与其中(签到题,游戏题等) 2.考察在安全领域中经常会用到但不属于传统分类的知识(内容安全,网络编程,安全运维等) 3.考察思维发散能力(“脑洞题”) 4.考察参赛者知识的广度和深度 5.考察快速学习能力

隐写术

隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知 晓信息的传递事件或者信息的内容。隐写术的英文叫做Steganography,来源于特里特米乌斯的一本讲 述密码学与隐写术的著作Steganographia,该书书名源于希腊语,意为“隐秘书写”

一般来说,隐写的信息看起来像一些其他的东西,例如一张购物清单,一篇文章,一篇图画或者其他 “伪装”(covr)的消息。隐写的信息通常用一些传统的方法进行加密,然后用某种方法修改一个"伪装文本” (covertext),使其包含被加密过的消息,形成所谓的“隐秘文本”(stegotext)。例如,文字的大小、间距、字体,或者掩饰文本的其他特性可以被修改来包含隐藏的信息。只有接收者知道所使用的隐藏技术,才能够恢覆信息,然后对其进行解密。

文件附加

大部分文件有其固定的文件结构,常见的图片格式如PNG、JPG等都是由一系列特定的数据块组成的。 例如,PNG文件由IHDR(文件头数据块)、PLTE(调色板数据块)、IDAT(图像数据块)、IEND(图 像结束数据)四种标准数据块和一些辅助数据块组成,其中HDR,DAT和IEND为必须部分。每个数据 块由Length(长度)、Chunk Type Code (数据块类型码)、 Chunk Data (数据块数据)和 CRC (循环冗余 校验码)四部分组成。

某PNG文件的内容组成

一般来说,固定格式的文件都有固定格式的开头,有些文件还有固定格式的结尾,而相应格式的查看器 般都只解析从这一文件头到这一文件尾之间的内容。

PNG文件总是由固定的字节(89 50 4E 47 0D 0A 1A 0A)开始,我们一般可以根据这个来识 别该文件是一个PNG文件。图像结束数据IEND用来标记PNG文件已经结束。IEND数据块的长度总是00 00 00 00,数据标识总是49 45 4E 44,因此CRC固定为AE 42 60 82。所以,一般PNG文件以固定字节00 00 00 00 49 45 4E 44 AE 42 60 82作为结束,其后的内容会被大部分图片查看软件忽略,所以可以在 lEND数据块后增加其他内容,这样并不会影响图片的查看,增加的内容普通情况下不会被发现。

PNG文件头

例如我们可以在文件结尾添加任意内容,如直接在PNG图片结尾添加字符“hello ctf”。 发现其与修改前没有任何变化,刚刚添加的“hello ctf”并不会显示在图片上,也不会对图片的外观造成任何影响

修改前文件尾

修改后文件尾

修改前图片文件

修改后图片文件

常见的文件头与文件尾

  • JPEG (jpg),文件头:FFD8FF,文件尾:FFD9
  • PNG (png),文件头:89504E47,文件尾:AE426082
  • GIF (gif),文件头:47494638,文件尾:003B
  • ZIP (zip),文件头:504B0304,文件尾:504B
  • RAR(rar),文件头:52 61 72 21
  • Wave(wav),文件头,57 41 56 45
  • AVI(avi),文件头:41 56 49 20、
  • MPEG(mpg):文件头,00 00 01 BA。
  • MPEG(mpg):文件头,00 00 01 B3。
  • Quicktime(mov):文件头,6D 6F 6F 76。

不仅是字符,我们甚至可以将其他文件整个添加到图片后,通过图片查看器也不会看到任何变化。

除了人工观察,我们也可以使用Binwalk工具分离图片中附加的其他文件。Binwalk:其实是一款开源的固件分析工具,可以根据固件中出现的各类文件的一些特征,识别或提取这些文件,因此在CTF中Binwalk常常用于从一个文件中提取出它包含的其他文件。

PNG后附加了zip

Binwalk输出结果

LSB

LSBLeast Significant Bit(最低有效位) 。在大多数PNG图 像中,每个像素都由R、G、B三原色组成(有的图片还包含A通道表示 透明度),每种颜色一般用8位数据表示( 0x00~ 0xFF ),如果修改其 最低位,人眼是不能区分出这种微小的变化的。我们可以利用每个像 素的R、G、B颜色分量的最低有效位来隐藏信息,这样每个像素可以携 带3位的信息

在CTF中,检测LSB隐写痕迹的常用工具是 Stegsolve 。Stegsolve 还可以查看图片不同的通道,对图片进行异或对比等操作。用 Stegsolve打开生成的隐写图片out.png,提取R、G、B三个通道的最低 有效位,可以提取隐藏在图片中的字符串。

对于PNG和BMP图片中的LSB等常见的隐写方式,我们也可使用 zsteg 工具( https://github.com/zed-0xff/zsteg )直接进行自动化 的识别和提取。

盲水印

数字水印技术可以将信息嵌入图片、音频等数字载体中,但以人 类的视觉或者听觉无法分辨,只有通过特殊的手段才能读取。

图片中的盲水印可以添加在图片的空域或频域。空域技术是直接 在信号空间中嵌入水印信息,其实现方式比较简单,LSB可以算是一种 在空域中添加水印的方式。 这里主要介绍在频域中添加的盲水印。什么是 频域 ?如图是一段音乐的时域,我们平常听到的音乐就是一段在时域上不断振动 的波

但是这段音乐同样可以表示成图所示的乐谱,每个音符在 不同的线间可以表示不同的音高,即频率。一段乐谱就可以看作一段 音乐在频域中的表示,可以反映音乐频率的变化。如果时域中的波形 简化成一段正弦波,那么在频域中用一个音符即可表示。

要把时域或空域中表示的信号转换到频域,就要用到 傅里叶变换 (Fourier Transform) 。傅里叶变换源自对傅里叶级数的研究。在对 傅里叶级数的研究中,复杂的周期函数可以用一系列简单的正弦波之 和表示。将信号函数进行傅里叶变换,可以分离出其中各频率的正弦 波,不同成分频率在频域中以峰值形式表示,就可以得到其频谱。相 关内容可以参考“信号与系统”的教材。

得到图片的频域图像后,将水印编码后随即分布到各频率,然后 与原图的频域进行叠加,将叠加水印的频谱进行傅里叶逆变换,即可 得到添加了 盲水印 的图片。这种操作相当于往原来的信号中加入了噪 声,这些噪声遍布全图,在空域上并不容易对图片造成破坏。

要提取出图片中的盲水印,只需把原图和带水印的图在频域中相 减,然后根据原来的水印编码方式进行解码,即可提取出水印。 CTF 中 一 般 可 以 使 用 BlindWaterMark(https://github.com/chishaxie/BlindWaterMark工具对图片进行盲水印的添加和提取。类似技术在音频中也常常出 现,对于音频中的频谱隐写,我们可以简单地使用Adobe Audition等 工具直接查看频谱从而拿到flag

总结

很多题目都是考了不同或者多方向的知识点,总之,学得越多越好

後悔しない
最后更新于 2024-05-12