侧边栏壁纸
博主头像
山外川博主等级

行动起来,活在当下

  • 累计撰写 8 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

利用高熵字符串检测钓鱼网站的分析

Administrator
2024-07-25 / 0 评论 / 0 点赞 / 94 阅读 / 7355 字 / 正在检测是否收录...

钓鱼网站是一种伪装成合法网站,旨在窃取用户敏感信息的恶意网站。传统的防御措施包括URL过滤、黑名单和特征码检测。然而,随着钓鱼技术的不断发展,这些方法变得不够有效。Bradley J Kemp在其文章《6 Ways to Detect Phishing Sites Using High Entropy Strings》中提出了一种新颖的方法,通过检测网页中的高熵字符串来识别钓鱼网站。本文将详细探讨如何根据页面HTML代码筛选出与之相似的钓鱼网站,并提供一种实用的方法来实现这一目标。

一、高熵字符串的概念

熵是信息理论中的一个概念,用于衡量字符串中的信息量。高熵字符串通常包含大量随机字符,例如密码、加密数据、哈希值等。钓鱼网站为了隐藏其恶意代码,往往会在其HTML代码中嵌入高熵字符串,这些字符串看起来像是随机生成的,从而使其难以被传统的字符串匹配检测方法识别。

二、HTML代码中高熵字符串的检测方法

  1. 数据收集和预处理

    • 从目标网页提取HTML代码。

    • 去除HTML代码中的注释、空白字符和格式化标记,只保留纯文本内容。

  2. 字符串分割

    • 将纯文本内容按照一定的长度分割成多个子字符串。常用的分割长度为4到10个字符。

  3. 计算熵值

  4. 阈值设定

    • 根据经验设定一个熵值阈值。熵值超过该阈值的字符串可以认为是高熵字符串。

  5. 高熵字符串检测

    • 对HTML代码中的每个子字符串进行熵值计算,筛选出所有高于阈值的高熵字符串。

三、从Fofa和Hunter中收集数据

Fofa和Hunter是两个强大的互联网资产搜索引擎,能够帮助找到潜在的钓鱼网站。以下是如何使用它们来找到相似的钓鱼网站的实例。

使用Fofa

Fofa是一个网络空间搜索引擎,可以通过特定的搜索语法查找特定的互联网资产。假设要寻找包含高熵字符串的钓鱼网站,可以使用以下步骤:

  1. 搜索语法

    • 使用关键词或特定的技术特征进行搜索。例如:

      title="login" && body="random"
  2. 数据提取

    • 提取搜索结果中的URL,并获取其HTML代码。

使用Hunter

Hunter是另一种网络空间搜索引擎,功能类似于Fofa。以下是使用Hunter的步骤:

  1. 搜索语法

    • 使用类似的关键词或特征进行搜索。例如:

      "high entropy string" site:example.com
  2. 数据提取

    • 提取搜索结果中的URL,并获取其HTML代码。

四、筛选相似钓鱼网站的实用方法

  1. 特征提取

    • 从已知钓鱼网站的HTML代码中提取高熵字符串,构建一个特征库。

  2. 特征匹配

    • 对新检测的网站进行高熵字符串检测,并将其与特征库进行匹配。

    • 计算匹配度。若匹配度超过设定阈值,则认为该网站为钓鱼网站。

  3. 实现步骤

    import math
    from collections import Counter
    ​
    def calculate_entropy(string):
        # 计算字符串的熵值
        prob = [string.count(c) / len(string) for c in set(string)]
        entropy = -sum(p * math.log2(p) for p in prob)
        return entropy
    ​
    def extract_high_entropy_strings(html_content, threshold=3.5, window_size=8):
        # 提取高熵字符串
        high_entropy_strings = []
        for i in range(len(html_content) - window_size + 1):
            substring = html_content[i:i + window_size]
            if calculate_entropy(substring) > threshold:
                high_entropy_strings.append(substring)
        return high_entropy_strings
    ​
    def match_phishing_sites(html_content, known_phishing_features, threshold=0.5):
        # 匹配钓鱼网站
        high_entropy_strings = extract_high_entropy_strings(html_content)
        matches = [s for s in high_entropy_strings if s in known_phishing_features]
        match_ratio = len(matches) / len(high_entropy_strings)
        return match_ratio > threshold
    ​
    # 示例使用
    html_content = "<html> ... </html>"  # 从目标网站获取的HTML内容
    known_phishing_features = ["feature1", "feature2", "feature3"]  # 已知钓鱼网站的高熵字符串特征库
    ​
    is_phishing = match_phishing_sites(html_content, known_phishing_features)
    if is_phishing:
        print("该网站可能是钓鱼网站")
    else:
        print("该网站可能是安全的")

五、实战案例

为了验证上述方法的有效性,从Fofa和Hunter中找到了几个疑似钓鱼网站,并对其进行了高熵字符串检测。

案例1:网站A

从Fofa搜索到的网站A,其HTML代码包含以下高熵字符串:

<script>var token="ajdk38s9d8sdja9sd8";</script>

通过的算法检测,该字符串的熵值为4.1,超过了设定的阈值3.5,初步判断为高熵字符串。进一步匹配特征库,发现该字符串与已知钓鱼网站的特征高度匹配,最终判断该网站为钓鱼网站。

案例2:网站B

从Hunter搜索到的网站B,其HTML代码包含以下高熵字符串:

<input type="hidden" value="kdsj83kds9a3kdkd">

经过检测,该字符串的熵值为3.8,同样超过了阈值。匹配特征库后,发现其与已知钓鱼网站的特征部分匹配。虽然匹配度较低,但仍需进一步分析和监控。

六、分析与讨论

通过上述方法,能够有效地检测钓鱼网站。然而,该方法也存在一些局限性:

  1. 高熵字符串的误报率:一些合法网站可能也包含高熵字符串,例如验证码、会话ID等。因此,需要结合其他特征(如域名信誉、SSL证书等)来降低误报率。

  2. 计算资源消耗:熵值计算需要较高的计算资源,尤其是对于大型网页。因此,优化算法和提高计算效率是一个重要的研究方向。

  3. 动态网页的挑战:许多钓鱼网站采用动态生成内容,导致高熵字符串的分布不稳定。对于这种情况,需要结合动态分析和行为分析来提高检测效果。

七、结论

利用高熵字符串检测钓鱼网站是一种新颖且有效的方法。本文详细介绍了该方法的原理、实现步骤和应用实例。尽管该方法存在一些局限性,但结合其他检测手段,能够显著提高钓鱼网站的检测准确率。未来的研究可以在优化算法、降低误报率和动态网页检测方面进一步探索。

0

评论区