• 生命在于学习——代码审计基础


    在这里插入图片描述
    图片来源于安全客。
    注意:本篇文章仅用于自我学习与交流,不会过多或不涉及具体操作,不得用于其他用途。

    一、代码审计简介

    顾名思义就是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。——来自百度百科
    代码审计就是从安全角度对代码进行的安全测试评估,结合丰富的安全知识、编程经验、测试技术、利用静态分析和人工审核的方法寻找代码在架构和编码上的安全缺陷,在代码形成软件产品前将业务软件的安全风险降到最低。
    实际上感觉就是真正的给你一个网站源码,从网站去找漏洞,而不是按照漏洞去找网站。

    二、代码审计测试方法

    代码审计采用人工审计和静态分析工具辅助的方式进行。
    人工审计:既能解决内部问题也能解决外部问题,这也是目前最有效率的解决方案,并且在理论上手工代码审计是非常有效的,但人工审计的效率不高,所以我们会采用自动化分析工具辅助人工的方式来提高审计的效率。
    静态分析工具(也可以叫代码审计工具):通过一组全面规则,测试机制(里面是已经编写好的程序)和方针在软件开发过程、测试中发现软件的安全缺陷。
    人工审计和工具最好是结合使用。

    三、代码审计的通用思路

    1、逆向追踪

    逆向追踪,或叫回溯变量,一般是检查敏感函数的参数,然后回溯变量,判断变量是否可控并且没有经过严格的过滤,这是一个逆向追踪的过程。
    优点:只需要搜索相应敏感关键字,即可以快速的挖掘想要的漏洞,具有可定向挖掘和高效优点。
    缺点:由于没有通读代码,对程序的整体框架了解不够深入,在挖掘漏洞时定位利用点会花费一点时间,另外对逻辑漏洞挖掘覆盖不到。

    2、正向追踪

    正向追踪,或叫跟踪变量
    先找出那些文件在接收外部传入的参数,然后跟踪变量的传递过程,观察是否有变量传入到高危函数里面,或者传递的过程中是否有代码逻辑漏洞,这是一种正向追踪的方式。
    优点:挖掘方式比逆向挖掘更全。
    缺点:可能没有逆向追踪快

    3、直接挖掘功能点

    根据自身的经验判断该类应用通常在哪些功能中会出现漏洞,直接阅读该部分功能代码。
    优点:比较快速,准确
    缺点:需要一定的经验,且可能会因为经验遗漏一点漏洞

    4、通读全文

    一般MVC设计的网站 , 或者一些框架 适合这种审计方法 , 可能还需要结合一下断点调试技术
    index 文件, index是一个程序的入口文件, 所以通常我们只要读一读index文件就可以大致了解整个程序的架构, 运行的流程, 包含的文件, 建议最好先将几个核心目录的index文件都简单读一遍
    函数集文件, 一般在index文件中都会包含函数集文件, 通常命名为functions, common等关键字, 这些文件里面都是一些公共的函数, 提供给其他文件统一调用。
    配置文件, 通常命名中包括 config 关键字,里面包含一些功能性配置选项以及数据库配置信息, 还可以注意下参数值是用单引号还是双引号, 如果是双引号, 则很可能会存在代码执行漏洞; 还需要关注以下数据库编码。
    安全过滤文件, 文件过滤文件对我们做代码审计至关重要, 关系到我们挖掘到的可疑点能不能利用, 通常命名中有 filter, safe, check 等关键字, 这类文件主要是对参数进行过滤。
    优点:可以更好的了解程序的架构以及业务逻辑,能够挖掘到更多,更高质量的逻辑漏洞。
    缺点:花费的时间比较多,如果程序比较大,读起来会比较累。
    个人更喜欢通读一下,但前提是对基础代码运行和架构框架有一定的的基础。

    四、漏洞产生的原因

    1、配置不当,很多中间件框架都会有自己的配置文件,当配置文件中的某些设置配置不当时,很容易产生漏洞。
    2、变量控制不严格 ,对前端传入的数据没有严格的过滤和限制。
    3、变量到达有利用价值的函数,用户可以接触到这些变量并会被带入执行。

    五、漏洞关键字

    这就很多了。
    SQL:简单的增删改查关键词。
    文件上传漏洞:$_FILES 、move_uploaded_file
    命令执行漏洞关键字: shell_exec、exec、passthru , system 、popen
    包含漏洞关键字: include、include_once、require、require_once
    xss漏洞关键字: echo、print、print_r、var_dump、var_export
    ssrf漏洞关键字: curl_exec 、file_get_contents、fsockopen
    代码执行:主要由 eval()、assert()、preg_replace()、call_user_func()、call_user_func_array()、array_map()等函数的参数过滤不严格导致
    命令执行:shell_exec、exec、passthru , system 、popen

  • 相关阅读:
    C语言推荐书籍
    华为机试 - 最小传输时延
    (210)Verilog HDL:设计一个电路之Rule 110
    好奇喵 | Tor浏览器——访问.onion网址,揭开Dark Web的神秘面纱
    【约定】企业项目中使用的约定
    删除的文件还能找回来吗?
    氧化铁载苯乙烯和甲基丙烯酸P(St-MAA)磁性微球/PS微球载纳米铁降解硝基苯的研究制备
    重磅!软件架构大师Chris Richardson、​MIT计算机与AI实验室Daniel Jackson将出席软件研发技术大会...
    Linux·【ftp】【nfs】【ssh】服务器搭建
    BLE Mesh蓝牙mesh传输大数据包传输文件照片等大数据量通讯
  • 原文地址:https://blog.csdn.net/qq_15131581/article/details/126932061