Linux 如何隐藏机密信息,在别人眼皮下私传(手动滑稽~)
Linux工具隐藏术,将一文本隐藏在另一文本中,可在不引起怀疑的情况下把秘密传递到对方手中。
隐藏术简介:
可以将隐秘信息藏在不同类型的媒体文件中,必要时可对数据进行简单加密,以防止其他普通人获知。但比较遗憾的是,steghide目前仅支持支持JPEG、BMP、WAV和AU文件这几类格式的文件,所以,还是很有限的,如图,官方文档解释:steghide官网 再一个是steghide的嵌入式加密,对于技术人士还是较轻松爆破的。
1. 安装steghide:
Debian系列:在Debian系列安装steghide是非常方便的,apt/apt-get包管理会自主的处理掉依赖问题。博主选择的是kali来做示范:
# apt install steghide -y
# apt install -y libjpeg-dev libmcrypt-dev libmhash-dev(观看别人博文都包含该依赖,博主并没有遇到,所以读者遇到依赖的话可以试试。)
倘若是在red hat系列上,会较为麻烦,由于,在Centos中yum没有steghide的包,我们仅能选择 scr.rpm或rpm包安装,博主推荐rpm包安装,因为src.rpm 是source包,要编译后才可以使用的;安装后是源码,rebuild后才会生成rpm包,博主在写博文期间曾尝试过这种安装,过程艰辛不说,还未能取得成功(笑哭)。而 rpm直接是binary包,无需编译就可安装。
steghide官网下载链接: 注意:选择适配的Linux rpm安装包下载!!
如果是Centos的话,就选择博主截图中俩安装包下载:
① src.rpm包编译安装:
首先得安装rpmbuild工具,rpmbuild是用来将源代码打包成.rpm格式的工具。
# yum install rpm-build rpmdev* -y
接下来就是对src.rpm包进行安装,获取源码:
# rpm -ivh steghide-0.5.1-42.fc34.src.rpm
如出现如下报错,则说明没有mock:
warning: steghide-0.5.1-42.fc34.src.rpm: Header V4 RSA/SHA256 Signature, key ID 9867c58f: NOKEY
Updating / installing...
1:steghide-0.5.1-42.fc34 warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
################################# [100%]
warning: user mockbuild does not exist - using root
warning: group mock does not exist - using root
mockmock是linux下创建chroot环境的工具,进行RPM构建所需,所以我们进行安装:
# yum -y install epel-release
由于mock是在epel仓库里的,所以还需要先装epel仓库
# yum -y install mock
# useradd -s /sbin/nologin mockbuild
重新编译获取源码,并进入/rpmbuild/SPECS 目录进行rpm包构建:
# cd rpmbuild/SPECS/
# rpmbuild -bb steghide.spec
注:-ba 编译后做成.rpm和src.rpm*
-bb 编译后做成*.rpm
-bs 只做成*.src.rpm
如果报错:
error: line 5: Unknown tag: Copyright: GPL
则修改.spec 文件中Coperight为License:
# vim steghide.spec
再次编译构建:
# rpmbuild -bb steghide.spec
但博主在此又遇到了新的问题:
**********
libjpeg could not be found on your system. Steghide will be compiled without
support for jpeg files. You will not be able to read or write jpeg files!
libjpeg can be downloaded from http://www.ijg.org/
**********
**********
libmcrypt could not be found on your system. Steghide will be compiled without
support for encryption. You will not be able to extract encrypted data!
libmcrypt can be downloaded from http://mcrypt.sourceforge.net/
**********
**********
zlib could not be found on your system. Steghide will be compiled without
the ability to compress and uncompress embedded data!
zlib can be downloaded from http://www.gzip.org/zlib/
**********
**********
libmhash could not be found on your system but is needed to compile steghide.
libmhash can be downloaded from http://mhash.sourceforge.net/.
**********
configure: error: libmhash not found
error: Bad exit status from /var/tmp/rpm-tmp.VcGupG (%prep)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.VcGupG (%prep)
博主根据报错信息,对依赖进行了调整,依旧未能解决该报错问题:
# yum install libjpeg libmcrypt zlib mhash
如果,读到这里的朋友,有晓得如何解决的话,欢迎留言或者私信博主,非常的感谢您!
若解决了依赖问题后,会在rpmbuilde文件下生成RPMS文件,并将编译构建好的rpm包放在该路径下,我们只需要执行rpm安装即可:
rpm -Uvh steghide.rpm
② rpm包安装:
# rpm -ivh steghide/steghide-0.5.1-1.i386.rpm
如果出现类似如下的报错:
error: Failed dependencies:
ld-linux.so.2 is needed by steghide-0.5.1-1.i386
libc.so.6 is needed by steghide-0.5.1-1.i386
libc.so.6(GLIBC_2.0) is needed by steghide-0.5.1-1.i386
libc.so.6(GLIBC_2.1) is needed by steghide-0.5.1-1.i386
libc.so.6(GLIBC_2.1.3) is needed by steghide-0.5.1-1.i386
libc.so.6(GLIBC_2.2) is needed by steghide-0.5.1-1.i386
libgcc_s.so.1 is needed by steghide-0.5.1-1.i386
libgcc_s.so.1(GCC_3.0) is needed by steghide-0.5.1-1.i386
libjpeg.so.62 is needed by steghide-0.5.1-1.i386
libm.so.6 is needed by steghide-0.5.1-1.i386
libm.so.6(GLIBC_2.0) is needed by steghide-0.5.1-1.i386
libmcrypt.so.4 is needed by steghide-0.5.1-1.i386
libmhash.so.2 is needed by steghide-0.5.1-1.i386
libstdc++.so.5 is needed by steghide-0.5.1-1.i386
libstdc++.so.5(CXXABI_1.2) is needed by steghide-0.5.1-1.i386
libstdc++.so.5(GLIBCPP_3.2) is needed by steghide-0.5.1-1.i386
libstdc++.so.5(GLIBCPP_3.2.2) is needed by steghide-0.5.1-1.i386
libz.so.1 is needed by steghide-0.5.1-1.i386
则选择忽略依赖强制安装:
rpm -ivh steghide/steghide-0.5.1-1.i386.rpm --nodeps --force
安装结束就可以使用隐写术了 !
首先,我们对要加密的文件进行md5sum值的确定,MD5 全称是报文摘要算法(Message-Digest Algorithm 5),md5是对被加密文件内容进行校验, 与文件名无关, 也就是文件内容相同, 其md5值相同. md5值是一个128位的二进制数据, 转换成16进制则是32(128/4)位的进制值。
之所以测量md5,是 为确保对方解密出来的文件内容和是一致的,即steghide对加密
信息进行了准确无误的隐藏。
博主在该篇博文中是用.jpg图像和.wav音频文件为例对文本信息进行隐藏的:
echo "今晚的行动暗号是:偷袭珍珠港" > secret.txt
C:\root> md5sum Monsters.wav
11877bceee51d5aa1e354b8a265a42f2 Monsters.wav
文件Monsters.wav的MD5值,被加入隐藏信息后,该值会更改。
C:\root> echo "今晚的行动暗号是:偷袭珍珠港" > secret.txt
C:\root> cat secret.txt
今晚的行动暗号是:偷袭珍珠港
C:\root> md5sum secret.txt
647f6b8ea5cd46955175ebe3f7d6e999 secret.txt
文件secret.txt的MD5值,如果对方解密出来后的secret.txt的MD5值是一致的,说明就是我们要隐藏的信息内容。
C:\root> steghide embed -cf Monsters.wav -ef secret.txt
Enter passphrase:
Re-Enter passphrase:
embedding "secret.txt" in "Monsters.wav"... done
输入密码加密
分解命令:
steghide:隐藏文件程序
embed:它告诉程序我们将要嵌入信息
-cf:指定封面文件,也就是媒体文件( Monsters.wav)
-ef:嵌入文件,也就是我们要隐藏的文件(secret.txt )
您也可以使用密码对机密文件进行加密,以增加安全性。
如果现在检查文件的md5sum,我们将看到与之前不同的值,这表明文件的内容已更改。
C:\root> steghide info Monsters.wav
"Monsters.wav":
format: wave audio, PCM encoding
capacity: 504.3 KB
Try to get information about embedded data ? (y/n) y
Enter passphrase:
embedded file "secret.txt":
size: 43.0 Byte
encrypted: rijndael-128, cbc
compressed: yes
steghide info 查看嵌入文件信息
C:\root> rm secret.txt
我们先删除secret.txt 文件信息
C:\root> steghide extract -sf Monsters.wav
Enter passphrase:
wrote extracted data to "secret.txt".
extract指示我们的程序从给定文件中提取数据
-sf 标志表示隐秘文件,也就是我们要从中提取数据的文件
输入密码,获取机密文件。
C:\root> cat secret.txt
今晚的行动暗号是:偷袭珍珠港
查看机密文件消息
C:\root> md5sum secret.txt
647f6b8ea5cd46955175ebe3f7d6e999 secret.txt
C:\root> md5sum Monsters.wav
2302b2e2ed3cf8a4d32d72e7fd285175 Monsters.wav
通过查看机密文件MD5的值,发现和之前MD5是相同的,说明secret.txt中的内容被准确无误的隐藏了下来。
而Monsters.wav 的MD5值被改变,是因为嵌入了secret.txt,MD5值随着文件内容改变而改变的。
MD5值也常被用来对Linux中文件进行正确性和安全性的检测,因为对文件进行任何修改都会使得MD5的哈希值发生变化,文件越大被修改可能性也越大。因此,可以通过对外来不信任文件进行计算MD5检验和,并与正确文件的比对,来及时的发现文件是否被动手机,如被内置了病毒,木马等恶意程序。
例2:
Steghide爆破密码:
在前面,我们已经提到了steghide技术实际上是项老技术了,有着较大的局限性,当我们拿到隐藏文件的时候,该如何破解呢,首先,要清楚的是,steghide的加密是弱密码,我们完全可以采用爆破来获取密码。
首先,我们可采用MD5值对可疑文件进行判断,然后再通过字典进行爆破:
python代码爆破:
# vim violent-cracking-steghide.py
# !/usr/bin/env python3
# -*- coding:UTF-8 -*-
from subprocess import *
def foo():
stegoFile='Monsters.wav'#隐写的图片或音视频文件
extractFile='secret.txt'#爆破的机密文件
passFile='brutesteghide.txt'#字典
errors=['could not extract','steghide --help','Syntax error']
cmdFormat='steghide extract -sf "%s" -xf "%s" -p "%s"'
f=open(passFile,'r')
for line in f.readlines():
cmd=cmdFormat %(stegoFile,extractFile,line.strip())
p=Popen(cmd,shell=True,stdout=PIPE,stderr=STDOUT)
content=str(p.stdout.read(),'gbk')
for err in errors:
if err in content:
break
else:
print (content),
print ('the passphrase is %s' %(line.strip()))
f.close()
return
if __name__ == '__main__':
foo()
print ('ok')
pass
stegoFile项为被爆破的文件名,extractFile项为爆破后的机密文档,passFile项为爆破时所需的字典,读者使用时需更改对应的文件名。博主随后会附加爆破所需的字典,如未能爆破,读者可更换更强大的字典测试。
授权:
# chmod +x violent-cracking-steghide.py
运行:
# python3 violent-cracking-steghide.py
爆破到的密码:
the passphrase is ******
查看机密文件内容:
# cat secret.txt
今晚的行动暗号是:偷袭珍珠港