哈希与哈希算法基础

哈希与哈希算法基础

哈希值

首先,让我们了解一下基础知识并熟悉哈希这样的概念!

哈希算法 是一个数学函数,它接收任意大小的数据并产生称为 hash or 消息摘要。输出是输入数据的唯一表示,可以用来验证数据没有被篡改。哈希算法用于保证数据的完整性和真实性。

简单来说,哈希是一段数据的唯一数字指纹。它就像代表数据的代码。该代码是由称为 a 的数学函数生成的 哈希函数。如果数据发生一点点变化,哈希值就会不同。

哈希有以下主键特征:

  1. 确定性:哈希函数对于给定的输入应该始终产生相同的输出。这意味着,如果对相同的数据进行两次哈希处理,则两次都应该得到相同的哈希值。
  2. 不可逆性:从哈希值重建原始输入数据在计算上应该是不可行的。此属性对于安全性很重要,因为它可以保护原始数据不被只能访问哈希值的攻击者发现。
  3. 均匀度:哈希函数应该在所有可能的输入中生成均匀分布的哈希值。这意味着每个哈希值出现的可能性应该相同,并且哈希值的分布不应该存在任何模式或偏差。
  4. 不可预测性:根据其他输入的哈希值或哈希函数本身的属性来预测输入的哈希值在计算上应该是不可行的。此属性对于安全性很重要,因为它使攻击者很难创建冲突(两个不同的输入产生相同的哈希值)。
  5. 抵抗碰撞攻击:哈希函数应该能够抵抗冲突攻击,其中涉及找到产生相同哈希值的两个不同输入。冲突攻击可用于创建欺诈性数字签名或绕过访问控制,因此设计哈希函数来抵御冲突非常重要。

您可以在维基百科页面上找到哈希的其他特征:https://en.wikipedia.org/wiki/Hash\_function

数据验证。黑名单和白名单。

在防病毒软件中,哈希算法用于检测恶意软件或排除误报警报。防病毒软件维护已知恶意软件哈希的数据库(blacklist)和可信软件哈希值(whitelist)。扫描文件时,会将其哈希值与数据库中的哈希值进行比较。

用于数据验证的最常用的哈希算法是 MD5, SHA-1, SHA-256 and SHA-512.

在防病毒黑名单和白名单中使用哈希值有助于加快扫描过程,因为防病毒程序不需要对每个文件进行详细分析来确定它是否是恶意的。相反,它可以将文件的哈希值与黑名单/白名单中的哈希值进行比较,以快速识别已知威胁或可信应用程序。

黑名单

在网络安全和防病毒软件中,黑名单是已知恶意文件或这些文件的一部分的列表。当防病毒程序扫描计算机或网络时,它将遇到的文件和实体与黑名单进行比较,以识别任何威胁。如果文件或实体与黑名单上的条目匹配,防病毒程序将采取措施将其删除或隔离,以防止其造成损害。

虽然黑名单可用于检测和预防已知威胁,但它们并不总是能有效防范新的和未知的威胁。攻击者可以使用各种技术(例如混淆或多态性)来修改文件或实体的代码或行为,以逃避防病毒程序的检测。

因此,防病毒程序经常使用多种技术的组合,例如 whitelisting 和基于行为的检测,以补充黑名单的使用,并针对更广泛的威胁提供更全面的保护。

白名单

在网络安全和防病毒软件的背景下,白名单是已知安全的受信任文件的列表。如果文件或实体与白名单上的条目匹配,防病毒程序将允许其打开/运行,而无需采取任何操作,因为它被认为是安全的。

白名单对于防止防病毒和安全程序中的误报很有用。当程序或文件实际上是安全的但被标记为恶意或有害时,就会发生误报。通过使用白名单,安全程序可以绕过这些误报,从而节省时间并防止不必要的警报。

使用哈希值和黑名单/白名单可以有效地防范已知威胁并防止防病毒和安全程序中出现误报。

为什么防病毒软件使用多种哈希算法?

防病毒程序使用多种哈希算法有以下几个原因:

  1. 抗碰撞攻击虽然黑名单可以有效地检测和预防已知威胁,但它们并不是万无一失的。攻击者可以使用各种技术来逃避检测,例如修改数据以避免匹配黑名单中的签名。这些技术被称为“碰撞攻击”。 <br> 冲突攻击是一种加密攻击,攻击者试图找到两个不同的输入(例如文件或消息),这两个输入在运行哈希函数(冲突)时会产生相同的哈希值。冲突攻击的目标是创建一对输入,可用于颠覆依赖哈希值完整性的系统,例如数字签名、密码身份验证或数据完整性检查。如果攻击者能够发现冲突,他就可以利用它来绕过依赖哈希函数的安全措施。 <br> 为了降低碰撞攻击的风险,防病毒软件使用强大的哈希函数来抵抗攻击,并同时使用多个哈希函数。例如,如果防病毒程序仅使用 MD5 哈希算法,则攻击者可能会创建与合法文件具有相同 MD5 哈希值的恶意文件,并欺骗防病毒程序将恶意文件视为安全文件。然而,使用多种哈希算法(例如 MD5、SHA-1 和 SHA-256)使攻击者更难创建同时针对所有算法的冲突攻击。
  2. 效率不同的哈希算法具有不同的计算要求,并且根据文件大小、类型或其他因素,某些算法可能比其他算法更有效。使用多种哈希算法允许防病毒程序针对给定情况选择最合适的算法,从而节省时间和处理能力。例如,SHA-256 可能比 MD5 的计算强度更大,因此防病毒程序可能选择对较小的文件使用 MD5,对较大的文件使用 SHA-256。
  3. 灵活性不同的哈希算法是针对不同的用例和应用程序设计的。通过使用多种哈希算法,防病毒程序可以适应不同的需求和场景,例如检测恶意软件、验证文件完整性或检测篡改或修改。例如,取证调查员可能会使用与防病毒程序不同的哈希算法来确保数据在调查期间不会被修改。

使用多种哈希算法是网络安全和防病毒软件开发的最佳实践,因为它在检测和预防网络威胁方面提供了稳健性、兼容性、效率和灵活性。

防病毒软件如何识别相似但不相同的数据和文件?

相似但不相同的文件可能会成为网络安全问题,因为攻击者可以利用它们来逃避防病毒软件的检测。

例如,攻击者可能会获取已知的恶意软件文件并对其代码或结构进行轻微修改,例如更改变量名称或重新排序指令。这些修改足以创建与原始恶意软件文件相似但不相同的新文件,并且依赖于传统的基于哈希的检测方法的防病毒软件可能无法检测到该新文件。

此外,攻击者可能会使用相似但不相同的文件来创建多态恶意软件,这些恶意软件可以在每次感染时更改其代码或结构以避免检测。使用传统的防病毒技术很难检测到多态恶意软件,这些技术依赖于识别恶意软件代码中的特定模式或签名。

为了解决这个问题,防病毒软件使用 模糊散列.

模糊哈希是一些防病毒软件用来检测相似但不相同的文件(包括多态恶意软件)的技术。通过将文件分成更小的部分,并将这些部分的哈希值与其他文件的哈希值进行比较,模糊哈希可以识别具有相似代码或结构的文件,即使它们不相同。

模糊散列的工作原理是识别文件中频繁出现的字节序列。然后使用加密哈希函数对这些序列(也称为“块”)进行哈希处理以生成哈希值。然后将块的哈希值与其他文件的哈希值进行比较,以识别相似的块。

模糊哈希的优点在于,即使文件被修改或混淆,它也可以检测相似性,这使其成为识别已知恶意软件变体的强大工具。例如,如果攻击者通过更改变量或函数的名称来修改已知的恶意软件文件,则传统的基于哈希的检测方法可能无法检测到修改后的文件。然而,模糊哈希仍然可以通过识别与原始恶意软件文件相似的块来检测修改后的文件。

与 MD5、SHA-1 或 SHA-512 等加密哈希算法不同,模糊哈希算法根据输入数据的相似性生成可变长度哈希值。

模糊哈希的优点

  1. 检测相似文件:模糊哈希可以检测相似的文件,即使它们被稍微修改过,这对于识别已知恶意软件的变体很有用。
  2. 减少误报:模糊哈希可以减少传统基于哈希的检测方法产生的误报数量。这是因为模糊哈希可以检测与已知恶意软件相似但不相同的文件。
  3. 抗混淆能力:模糊哈希对于攻击者用来逃避检测的混淆技术更具弹性。这是因为模糊哈希算法将文件分成更小的部分并为每个部分生成哈希值,从而使攻击者更难以以逃避检测的方式修改文件。

模糊散列的局限性

  • 误报:模糊哈希可能会产生误报,其中合法文件被标记为恶意文件,因为它们具有与已知恶意软件相似的代码或结构。如果文件共享公共库或框架,则可能会发生这种情况。
  • 性能:模糊散列可能需要大量计算,尤其是对于大文件。这会减慢扫描过程并影响系统性能。
  • 尺寸限制:模糊哈希可能不适用于非常小的文件或低熵文件,因为可能没有足够的唯一块来生成有意义的哈希。
  • 篡改:如果攻击者专门针对模糊哈希并修改文件以避免检测,那么模糊哈希可能不会有效。例如,攻击者可以故意更改文件的结构,以防止它被模糊哈希识别。

加密哈希算法和模糊哈希算法有什么区别?

密码哈希算法和模糊哈希算法都用于网络安全,但它们具有不同的目的和特征。

SHA-256 和 MD5 等加密哈希算法旨在通过生成几乎不可能进行逆向工程的固定长度、唯一哈希值来提供数据完整性和真实性。加密哈希算法用于验证数据的完整性。

模糊哈希算法(例如 SSDEEP)旨在识别相似但不相同的数据,例如已被恶意软件作者修改或重新打包的文件。模糊哈希使用滑动窗口技术将数据分解为小块并生成可变长度的概率哈希,将其与已知恶意软件哈希的数据库进行比较,以识别潜在的恶意文件。

加密哈希算法被设计为抗冲突的,这意味着很难找到产生相同哈希输出的两个输入。模糊哈希算法不需要具有抗冲突性,因为它们旨在检测文件之间的相似性,而不是产生唯一的哈希输出。

加密哈希算法和模糊哈希算法之间的主要区别在于它们的确定性级别。加密哈希算法生成对于每个输入都是唯一的固定长度、确定性哈希,而模糊哈希算法生成对于相似输入相似的可变长度、概率哈希。

我们将在我们的解决方案中使用哪些模糊哈希算法?

在我们的解决方案中,我们将使用 SSDEEP 和 TLSH。

ssdeep 是一种模糊哈希算法,用于识别相似但不相同的数据,例如恶意软件变体。它的工作原理是生成表示输入数据相似性的哈希值,而不是像加密哈希函数那样的唯一标识符。 ssdeep 的输出是可变长度和概率的,这使得它能够检测两个文件之间的微小差异。 ssdeep 常用于恶意软件分析和检测,也集成到各种安全工具和防病毒软件中。

TLSH (趋势科技局部敏感哈希)是一种模糊哈希算法,用于识别相似但不相同的数据,例如恶意软件变体。它的工作原理是创建一个哈希值来捕获输入数据的独特特征,例如字节频率和顺序。 TLSH 的输出是可变长度和概率的,这使得即使输入数据已被修改或混淆,它也可以检测相似性。 TLSH 常用于恶意软件分析和检测,也集成到各种安全工具和防病毒软件中。

ssdeep 和 TLSH 都使用距离度量来确定两个哈希值之间的相似性。但是,ssdeep 和 TLSH 使用的距离度量不同。

ssdeep 使用“模糊哈希距离”度量来计算两个哈希值之间的距离。该距离度量基于两个哈希之间的匹配和不匹配块的数量以及哈希的大小。 距离度量是一个范围从 0 到 100 的百分比值,其中 0 表示两个哈希值相同,100 表示两个哈希值完全不同。

另一方面,TLSH 使用“总差异”指标来计算两个哈希值之间的距离。该距离度量基于两个输入数据集的局部敏感特征之间的差异。 “total diff”指标的输出是 0 到 1000 之间的值,其中 0 表示两个哈希值相同,1000 表示两个哈希值完全不同。

构建哈希模块

对于我们的解决方案,我们将使用开源库:

  1. 极地SSL: https://polarssl.org/PolarSSL 是一个免费的开源软件库,用于实现传输层安全性 (TLS)、安全套接字层 (SSL)、数据报传输层安全性 (DTLS) 等加密协议。它提供各种加密算法和协议,包括哈希函数、对称和非对称加密、数字签名和密钥交换算法。 PolarSSL 设计轻量且高效,适合在资源受限的环境中使用。
  2. ssdeep: http://ssdeep.sf.net/
  3. TLSH: https://github.com/trendmicro/tlsh/

在项目中实现库后,我们添加一段简单的代码:

struct HashData
{
 BYTE md5[16];
 BYTE sha1[20];
 BYTE sha512[64];
 std::string ssdeep;
 std::string tlsh;
};

HashData hash(const void* buff, uint64_t size)
{
 HashData snap = {};

 hashes::md5(buff, size, snap.md5);
 hashes::sha1(buff, size, snap.sha1);
 hashes::sha4(buff, size, snap.sha512);

 snap.ssdeep = hashes::ssdeepHash(buff, size);
 snap.tlsh = hashes::tlshHash(buff, size);

 return snap;
}

检查哈希模块

是时候测试哈希模块了!为此,我们将创建一个包含以下内容的文本文件:

All the World`s a Stage by William Shakespeare
All the world`s a stage,
And all the men and women merely players;
They have their exits and their entrances,
And one man in his time plays many parts,
His acts being seven ages. At first, the infant,
Mewling and puking in the nurse`s arms.
Then the whining schoolboy, with his satchel
And shining morning face, creeping like snail
Unwillingly to school. And then the lover,
Sighing like furnace, with a woeful ballad
Made to his mistress` eyebrow. Then a soldier,
Full of strange oaths and bearded like the pard,
Jealous in honor, sudden and quick in quarrel,
Seeking the bubble reputation
Even in the cannon`s mouth. And then the justice,
In fair round belly with good capon lined,
With eyes severe and beard of formal cut,
Full of wise saws and modern instances;
And so he plays his part. The sixth age shifts
Into the lean and slippered pantaloon,
With spectacles on nose and pouch on side;
His youthful hose, well saved, a world too wide
For his shrunk shank, and his big manly voice,
Turning again toward childish treble, pipes
And whistles in his sound. Last scene of all,
That ends this strange eventful history,
Is second childishness and mere oblivion,
Sans teeth, sans eyes, sans taste, sans everything.

测试 1:创建两个具有相同内容(上面的文本)的相同文件并计算哈希值。

SSDEEP 表示这些文件 100% 相同。 TLSH 表示文件之间存在 0% 的差异。

测试 2:创建两个具有相同内容的相同文件,在第二个文件中进行更改并计算哈希值

第二个文件内容:

All the World`s a Stage by William Shakespeare
O lovely maidens, fall in love,
But not with Muscovites,
For Muscovites are foreign folk,
They do not treat you right.
A Muscovite will love for sport,
And laughing go away;
They have their exits and their entrances,
And one man in his time plays many parts,
His acts being seven ages. At first, the infant,
Mewling and puking in the nurse`s arms.
Then the whining schoolboy, with his satchel
And shining morning face, creeping like snail
Unwillingly to school. And then the lover,
Sighing like furnace, with a woeful ballad
Made to his mistress` eyebrow. Then a soldier,
Full of strange oaths and bearded like the pard,
Jealous in honor, sudden and quick in quarrel,
Seeking the bubble reputation
Even in the cannon`s mouth. And then the justice,
In fair round belly with good capon lined,
With eyes severe and beard of formal cut,
Full of wise saws and modern instances;
And so he plays his part. The sixth age shifts
Into the lean and slippered pantaloon,
With spectacles on nose and pouch on side;
His youthful hose, well saved, a world too wide
For his shrunk shank, and his big manly voice,
Turning again toward childish treble, pipes
And whistles in his sound. Last scene of all,
That ends this strange eventful history,
Is second childishness and mere oblivion,
Sans teeth, sans eyes, sans taste, sans everything.

SSDEEP 表示这些文件有 88% 相同。 TLSH 表示,这些文件之间存在 4.7% 的差异。

测试 3:计算两个完全不同的文本文件的哈希值

第二个文件内容:

"Katerina", poem of Taras Shevchenko
(translated by John Weir)

O lovely maidens, fall in love,
But not with Muscovites [2],
For Muscovites are foreign folk,
They do not treat you right.
A Muscovite will love for sport,
And laughing go away;
He`ll go back to his Moscow land
And leave the maid a prey
To grief and shame...
It could be borne
If she were all alone,
But scorn is also heaped upon
Her mother frail and old.
The heart e`en languishing can sing –
For it knows how to wait;
But this the people do not see:
“A strumpet!“ they will say.
O lovely maidens, fall in love,
But not with Muscovites,
For Muscovites are foreign folk,
They leave you in a plight.
Young Katerina did not heed
Her parent`s warning words,
She fell in love with all her heart,
Forgetting all the world.

The orchard was their trysting-place;
She went there in the night
To meet her handsome Muscovite,
And thus she ruined her life.
Her anxious mother called and called
Her daughter home in vain;
There where her lover she caressed,
The whole night she remained.
Thus many nights she kissed her love
With passion strong and true,
The village gossips meanwhile hissed:
“A girl of ill repute!”
Let people talk, let gossips prate,
She does not even hear:
She is in love, that`s all she cares,
Nor feels disaster near.
Bad tidings came of strife with Turks,
The bugles blew one morn:
Her Muscovite went off to war,
And she remained at home.
A kerchief o`er her braids they placed
To show she`s not a maid,
But Katerina does not mind,
Her lover she awaits.
He promised her that he’d return
If he was left alive,
That he`d come back after the war –
And then she`d be his wife,
An army bride, a Muscovite
Herself, her ills forgot,
And if in meantime people prate,
Well, let the people talk!
She does not worry, not a bit –
The reason that she weeps
Is that the girls at sundown sing
Without her on the streets.
No, Katerina does not fret –
And jet her eyelids swell,
And she at midnight goes to fetch

The water from the well
So that she won`t by foes be seen;
When to the well she comes,
She stands beneath the snowball-tree
And sings such mournful songs,
Such songs of misery and grief,
The rose .itself must weep.
Then she comes home - content that she
By neighbours was not seen.
No, Katerina does not fret.
She`s carefree as can be -
With her new kerchief on her head
She looks out on the street.
So at the window day by day
Six months she sat in vain....
With sickness then was overcome,
Her body racked with pain.
Her illness very grievous proved.
She barely breathed for days ...
When it was over - by the stove
She rocked her tiny babe.
The gossips` tongues now got free rein.
The other mothers jibed
That soldiers marching home again
At her house spent the night.
“Oh, you have reared a daughter fair.
And not alone beside
The stove she sits - she`s drilling there
A little Muscovite.
She found herself a brown-eyed son...
You must have taught her how!...
Oh fie on ye, ye prattle tongues,
I hope yourselves you`ll feel
Someday such pains as she who bore
A son that you should jeer!
Oh, Katerina, my poor dear!
How cruel a fate is thine!

SSDEEP 表示这些文件完全不同,匹配率为 0%。然而,TLSH 表示这些文件仅存在 27.1% 的差异。

这是为什么呢?毕竟,我们考虑两个完全不同的文本文件之间的距离,对吧?

问题是,正如我们上面所说,TLSH 算法考虑了频率。尽管文本不同,但它们都是用相同的语言写成的,使用相同的字母表,并且有许多相同的单词。该哈希算法的这一功能有助于检测恶意文件的修改。

测试 4:比较 2 个 Windows 系统文件

SSDEEP 表示这些文件完全不同,匹配率为 0%。然而,TLSH 算法表示这些文件仅存在 14.5% 的差异。部分原因是这些文件很可能是由同一家公司的同一编译器构建的,可能使用相同的代码模式。这些文件具有类似的 VERSION_INFO 和 MZ 标头。

测试 5:比较 2 个系统文件和我们的 hashpair.exe 文件

SSDEEP 表示这些文件完全不同,匹配率为 0%。 TLSH 算法表明这些文件差异很大,相差 73.3%。这些文件是由不同的公司使用不同的库和不同的编译器编译的。这些文件具有不同的 VERSION_INFO 和不同的 MZ 标头。因此,TLSH 算法允许您对可执行文件进行分类,有助于识别相似的恶意文件或同一家族的恶意文件。

使用的工具列表

  1. 合并软件: https://winmerge.orgWinMerge 是一个用于 Windows 的开源差异和合并工具。 WinMerge 可以比较文件夹和文件,以易于理解和处理的可视文本格式呈现差异。
  2. 记事本++: https://notepad-plus-plus.org/downloadsNotepad++ 是一个免费的(如“自由言论”和“免费啤酒”)源代码编辑器和记事本替代品,支持多种语言。在 MS Windows 环境中运行,其使用受 GNU 通用公共许可证管辖。

GITHUB

您可以在我们的github上找到整个项目的代码:https://github.com/SToFU-Systems/DSAVE

接下来是什么?

我们感谢您的支持,并期待您继续参与我们的社区。

下一篇我们将和大家一起写一个最简单的PE资源解析器。

文章作者如有任何问题可发送至邮箱:articles@stofu.io

感谢您的关注,祝您有美好的一天!

返回博客

联系方式

开始对话

几条清晰的线条就足够了。描述一下系统、压力、被阻碍的决策。或者直接写信给midgard@stofu.io。

0 / 10000
未选择文件