查看原文
其他

ChatGPT在信息安全攻击与防御的实践

V1nt 山石网科安全技术研究院 2023-03-02
‍01背景介绍‍‍‍‍

ChatGPT是OpenAI开发的一个大型预训练语言模型。它是GPT-3模型的变体,GPT-3经过训练,可以在对话中生成类似人类的文本响应。ChatGPT 旨在用作聊天机器人,我们可以对其进行微调,以完成各种任务,如回答问题、提供信息或参与对话。
与许多使用预定义的响应或规则生成文本的聊天机器人不同,ChatGPT经过了训练,可以根据接收到的输入生成响应,从而生成更自然、更多样化的响应。
自去年11月发布以来,ChatGPT 便在全球引起了一时的轰动,发布仅五天,用户就超过100万人。发布两个月,活跃用户数突破1亿,成为史上用户增长最快破亿的应用。
关于ChatGPT的注册和详细使用方法就暂不在这篇文章赘述了,网上都可以查到。在这篇文章里我们将深入探讨 ChatGPT AI 在安全测试中的机遇和挑战,以及网安人该如何有效利用ChatGPT。‍

02‍社会工程学利用

在社会工程学攻击手段中,钓鱼邮件、钓鱼短信可以说是最经典的一种攻击手法,而错别字、语法混乱是网络钓鱼和诈骗电子邮件最明显的特征之一。而CHATGPT可以帮助攻击者更容易构造一封恶意的钓鱼邮件:


可以看到生成的钓鱼文案还是挺像模像样的。



03‍ 代码安全审计‍‍‍‍
来到代码审计部分,就采取DVWA靶场的漏洞代码作为例子,看看ChatGPT能不能有效准确地漏洞类型和漏洞位置,首先先从简单部分开始,以命令注入漏洞。
请描述下面代码中的安全漏洞

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    $html .= "<pre>{$cmd}</pre>";
}

?>
可以看到它成功做到了识别命令注入漏洞,并正确识别用户输入的来源和最终触发(shell_exec)。
再来看看中等难度的DVWA靶场漏洞代码:
请描述下面代码中的安全漏洞

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // Set blacklist
    $substitutions = array(
        '&&' => '',
        ';'  => '',
    );

    // Remove any of the charactars in the array (blacklist).
    $target = str_replace( array_keys( $substitutions ), $substitutions, $target );

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    $html .= "<pre>{$cmd}</pre>";
}

?>

这次ChatGPT也表现得很好,推出了黑名单过滤的逻辑,并且也给出来绕过方式和详细的解释。
再来看看DVWA impossible难度的代码:
请描述下面代码中的安全漏洞

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
 // Check Anti-CSRF token
 checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

 // Get input
 $target = $_REQUEST[ 'ip' ];
 $target = stripslashes( $target );

 // Split the IP into 4 octects
 $octet = explode( ".", $target );

 // Check IF each octet is an integer
 if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
  // If all 4 octets are int's put the IP back together.
  $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

  // Determine OS and execute the ping command.
  if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
   // Windows
   $cmd = shell_exec( 'ping  ' . $target );
  }
  else {
   // *nix
   $cmd = shell_exec( 'ping  -c 4 ' . $target );
  }

  // Feedback for the end user
  $html .= "<pre>{$cmd}</pre>";
 }
 else {
  // Ops. Let the user name theres a mistake
  $html .= '<pre>ERROR: You have entered an invalid IP.</pre>';
 }
}

// Generate Anti-CSRF token
generateSessionToken();

?>

这个回答里面是有些问题的,首先这里已经添加了token参数的检验,基本上已经杜绝了CSRF漏洞的利用;其次在代码中,限制了输入数据的格式,也就是说这里采用了白名单的做法,只有输入的格式跟白名单的一样才能通过验证,也基本上杜绝了命令注入。
所以尽管ChatGPT这回答看起来很符合逻辑、措辞官方,但就代码审计而言这些都是无效的回答,而且还会让代码审计人员消耗时间来判断每个点是否错误。
换个思路,如果我们让ChatGPT帮我们对比两段代码直接的安全程度差异呢
请描述下面两段代码在代码安全方面的差异

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
 // Get input
 $target = $_REQUEST[ 'ip' ];

 // Determine OS and execute the ping command.
 if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
  // Windows
  $cmd = shell_exec( 'ping  ' . $target );
 }
 else {
  // *nix
  $cmd = shell_exec( 'ping  -c 4 ' . $target );
 }

 // Feedback for the end user
 $html .= "<pre>{$cmd}</pre>";
}

?>


<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
 // Check Anti-CSRF token
 checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

 // Get input
 $target = $_REQUEST[ 'ip' ];
 $target = stripslashes( $target );

 // Split the IP into 4 octects
 $octet = explode( ".", $target );

 // Check IF each octet is an integer
 if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
  // If all 4 octets are int's put the IP back together.
  $target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

  // Determine OS and execute the ping command.
  if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
   // Windows
   $cmd = shell_exec( 'ping  ' . $target );
  }
  else {
   // *nix
   $cmd = shell_exec( 'ping  -c 4 ' . $target );
  }

  // Feedback for the end user
  $html .= "<pre>{$cmd}</pre>";
 }
 else {
  // Ops. Let the user name theres a mistake
  $html .= '<pre>ERROR: You have entered an invalid IP.</pre>';
 }
}

// Generate Anti-CSRF token
generateSessionToken();

?>

可以看到这回答相比刚刚的要好很多,基本上都没讲错。‍


04‍ 安全规则与漏洞修复‍‍‍‍‍‍
Chat GPT 能够根据用户提供的输入快速轻松地生成 WAF 规则。例如,利用 Chat GPT 创建了一个 WAF 规则来检测 SQL 注入。
那么漏洞代码修复方面ChatGPT做得咋样呢,让ChatGPT对刚刚DVWA靶场中的最简单的命令注入漏洞修复看看:
下面代码中存在的漏洞该如何进行修复

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    $html .= "<pre>{$cmd}</pre>";
}

?>
从结果来看还是很不错的,大差不差,总的来说,命令注入漏洞确实已经通过escapeshellarg函数进行了修复。

05‍安全脚本代码生成

比如说让它编写一段python程序扫描指定目录下的webshell文件。

用C++编写一个shellcode加载器:
或者让它快速帮我们编写burpsuite插件,举个例子看看,比如编写一个在每个参数都添加xss payload的插件:
再来一个示例,攻击者可以通过点击劫持漏洞诱骗用户点击看似无害的按钮或链接,但实际上执行了恶意操作,例如下载恶意软件或泄露个人敏感信息。下面是一个关于如何在 ChatGPT 中编写查找点击劫持漏洞poc的示例。
使用python编写反弹shell脚本:

06‍   总结‍‍‍‍‍
ChatGPT对于我们来说可以是个很出色、高效的工具,通过提问任何问题帮我们快速了解各个方向的基本概念以及指导,能有效提升工作效率,比如可以通过它给出的回答配合自己的需求快速修改编写poc、自动化脚本等,并且可以帮助我们提供思路,扩宽思维。通过以上示例可以发现ChatGPT比较明显的优势在于正式流畅的文案生成方面和代码功能实现方面,不过需要注意的是ChatGPT还是存在一些必然的局限性,比如遇到一些比较复杂的问题时,会一本正经的“胡说八道”,这时不能被牵着鼻子走得出错误的结果,需要我们配合自身足够的专业能力去辨别错误,并且引导它去往正确的方向分析,但是这个引导过程可能会挺漫长,比较需要技巧。
所以ChatGPT更主要地只是起到一个辅助的作用,必须清楚地了解到其优点和局限性,才能最有效地利用其功能。    
   
       ‍

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存