CISP/09_第九章 计算环境安全/9.2 信息收集与系统攻击.md
2024-10-04 14:45:46 +08:00

5.9 KiB
Raw Permalink Blame History

信息收集与系统攻击

一、信息收集
    理解信息收集的概念及公开渠道信息收集、网络服务信息收集的方式及防御措施。

二、缓冲区溢出攻击
    理解缓冲区溢出的基本概念及危害;
    理解缓冲区溢出攻击的技术原理及防御措施。

一、信息收集

1、信息收集的概念

  1. 信息收集的概念

    • 情报学中一个领域
  2. 传统的信息收集

    • 案例:著名的照片泄密案

      image-20241004141400419

    日本情报专家据此解开了中国当时最大的石油基地 - 大庆油田的秘密
    1、他们根据照片上王进喜的衣着判断只有在北纬46度至48度的区域内冬季才有可能穿这样的衣服因此推断大庆油田位于齐齐哈尔与哈尔滨之间
    2、通过照片中王进喜所握手柄的架式推断出油井的直径
    3、从王进喜所站的钻井与背后油田间的距离和井架密度推断出油田的大致储量和产量。
    有了如此多的准确情报,日本人迅速设计出适合大庆油田开采用的石油设备。当中国政府向世界各国征求开采大庆油田的设备方案时,日本人一举中标。庆幸的是,日本当时是出于经济危机,根据情报分析结果,向我国高价推销炼油设施,而不是用于军事战略意图。

  3. 互联网时代的信息收集

    • 信息技术的发展使得数据大量被生产出来
  4. 收集哪些信息

    • 目标系统的信息系统相关资料
      • 域名、网络拓扑、操作系统、应用软件、相关脆弱性
    • 目标系统的组织相关资料
      • 组织架构及关联组织
      • 地理位置细节
      • 电话号码、邮件等联系方式
      • 近期重大事件
      • 员工简历
    • 其他可能令攻击者感兴趣的任何信息

2、信息收集的方法

  1. 公开信息收集 - 搜索引擎

    • 快速定位

      • 某开源软件xxxx.jsp脚本存在漏洞Google 搜索xxxx.jsp可以找到存在此脚本的Web网站。
    • 信息挖掘

      • 定点采集

        Google搜索 .doc+website 挖掘信息

      • 隐藏信息

        .mdb.ini.txt.old.bak.001.…...

      • 后台入口

  2. 网络信息收集

    • 正常服务如whois
    • 系统功能
      • Ping
      • tracert
  3. 系统及应用信息收集

    • 服务旗标
    • 欢迎信息
    • 端口扫描
    • TCP/IP协议指纹识别

3、信息收集与分析的防范

  1. 公开信息收集防御
    • 信息展示最小化原则,不必要的信息不要发布
  2. 网络信息收集防御
    • 部署网络安全设备IDS、防火墙等
    • 设置安全设备应对信息收集阻止ICMP
  3. 系统及应用信息收集防御
    • 修改默认配置(旗标、端口等)
    • 减少攻击面

二、缓冲区溢出攻击

1、缓冲区溢出攻击原理

缓冲区溢出攻击利用编写不够严谨的程序,通过向程序的缓冲区写入超过预定长度的数据,造成缓存的溢出,从而破坏程序的堆栈,导致程序执行流程的改变。

2、缓冲区溢出的危害

  • 最大数量的漏洞类型
  • 漏洞危害等级高

3、缓冲区溢出基础

  1. 堆栈概念
    • 一段连续分配的内存空间
  2. 堆栈特点
    • 后进先出
    • 堆栈生长方向与内存地址方向相反
  3. 指针
    • 指针是指向内存单元的地址
  4. 寄存器
    • 暂存指令、数据和位址
    • ESP栈顶
    • EBP栈底
    • EIP返回地址

4、缓冲区溢出简单示例

  • 程序作用:将用户输入的内容打印在屏幕上

    Buffer.c
    
    #include <stdio.h>
    int main()
    {
        char name[8];
        printf("Please input your name:");
        gets(name);
        printf("you name is: %s!", name);
        return 0;
    }
    

    这段程序的功能是显示输人的用户名称。在程序中用于存放用户输人名称的变量name长度定义为8位由于程序缺少必要的输入长度校验当用户的输入值超过8位时printf (" you name is : %s! "name)执行时会导致一个缓存溢出。例如输入用户姓名为“aaaaaaaaaaaaaaaaaaaaaaaa”时由于输人值超过name定义的长度程序申请缓冲区当程序将用户输人值保存到name的地址空间时会继续向内存后续地址空间写入其余输入内容进而覆盖了程序栈中存储的返回地址EIP如图9-6所示。

    image-20241004144200293

    程序在需要调用返回地址时把EIP中存储的“aaaa”的ASCII码0x61616161作为下一条指令地址CPU会试图执行0x61616161处的指令而由于该内存并非运行程序所能访问因此这个操作会被系统拒绝因此产生错误如图9-7所示。

    image-20241004144249294

5、缓冲区溢出攻击过程

  • 如果可精确控制内存跳转地址,就可以执行指定代码,获得权限或破坏系统。

    image-20241004144357860

6、缓冲区溢出的防范

  1. 用户
    • 补丁
    • 防火墙
  2. 开发人员
    • 编写安全代码,对输入数据进行验证
    • 使用相对安全的函数
  3. 系统
    • 缓冲区不可执行技术
    • 虚拟化技术