#什么是RASP

RASP技术(应用运行时自我保护),直接注入到被保护应用的服务中提供函数级别的实时防护,可以在不更新策略以及不升级被保护应用代码的情况下检测/防护未知漏洞,尤其适合大量使用开源组件的互联网应用以及使用第三方集成商开发的金融类应用。

对比传统WAF,RASP作为PHP扩展安装,可以联系上下文来精准拦截攻击,只有造成危害的攻击才会拦截,对于传统WAF触发策略就拦截来说能减少很多误报误杀,但其也有不足之处,比如无法防护静态文件,导致敏感文件被下载,其性能也需要提高,在高并发网站上不建议安装RASP,RASP不能防御CC攻击,反而因为请求都需要RASP检测而导致服务器负载过大。

#安装和配置openRASP

安装过程非常简单,官方文档https://rasp.baidu.com/doc/install/manual/php.html 已经写的非常详细了这里不再作过多赘述。

华为云Elasticsearch镜像(如果你打算安装联机版的话):https://mirrors.huaweicloud.com/elasticsearch/

值得注意的是安装完成后需要手动开启拦截,找到你RASP的安装目录,比如你安装时执行的是php install.php -d /opt/rasp 命令,那么就去/opt/rasp目录下找到official.js,然后按照情况开启各种算法,我会在文章结尾放上本站配置的插件。

#检查RASP是否安装到位

安装RASP后需要重启PHP让RASP生效。

在网站目录下新建一个php文件,并写入:

<?php echo phpinfo(); ?>

如果安装成功的话可以在PHPInfo看到RASP已经正常加载。

接下来进行木马测试,写一个简单的一句话木马:

<?php eval($_GET['shell']) ?>

在浏览器请求/?shell=echo 1;

正常情况下会被RASP拦截并记录日志,如果RASP未正常工作则会输出1。

接下来测试XSS拦截效果,写一个简单的PHP:

<?php echo $_GET['text']; ?>

浏览器请求/?text=<img></img>

正常情况会被RASP拦截。

附:幽灵PHP大马过WAF被RASP拦截:

#附件

#官方插件配置

参考配置: http://download.gymxbl.com/rasp/plugins.zip

#拦截扫描器插件

注:这不是RASP的本职工作!本质上该插件是UA黑名单,安装时只需要新建一个002-detect-scanner.js文件并写入即可。

const plugin_version = '2018-1000-1000'
const plugin_name    = '002-detect-scanner'

var plugin = new RASP(plugin_name)
var clean  = {
  action: 'ignore',
  message: '无风险',
  confidence: 0
}

// BEGIN ALGORITHM CONFIG //

var algorithmConfig = {}

// END ALGORITHM CONFIG //

plugin.register('request', function(params, context) {
  // 已知的扫描器识别
  var foundScanner = false
  var scannerUA    = [
    "attack", "scan", "vulnerability", "injection", "xss",
    "exploit", "grabber", "cgichk", "bsqlbf", "sqlmap", 
    "nessus", "arachni", "metis", "sql power injector", 
    "bilbo", "absinthe", "black widow", "n-stealth", "brutus", 
    "webtrends security analyzer", "netsparker", "jaascois", "pmafind", 
    ".nasl", "nsauditor", "paros", "dirbuster", "pangolin", "nmap nse", 
    "sqlninja", "nikto", "webinspect", "blackwidow", "grendel-scan", 
    "havij", "w3af", "hydra"]
  var headers      = context.header

  if (headers['acunetix-product'] || headers['x-wipp']) {
    foundScanner = true
  } else {
    var ua = headers['user-agent']
    if (ua) {
      for (var i = 0; i < scannerUA.length; i++) {
        if (ua.indexOf(scannerUA[i].toLowerCase()) != -1) {
          foundScanner = true
          break
        }
      }
    }
  }
  // 扫描器识别 DEMO //    
  if (foundScanner) {
    return {
      action:     'block',
      message:    '已知的扫描器探测行为,UA 特征为: ' + scannerUA[i],
      confidence: 90
    }
  }
  return clean
})

plugin.log('002-detect-scanner 加载完成')

#Nginx敏感文件配置

将下列规则写到Nginx的配置文件中去:

location ~* \.(ini|docx|doc|log|data|jsp|asp|aspx|sql|zip|rar|c|py|psd|7z|tar.gz|gz|tar|sh|)$ { 
     return 444; 
}
if ($host = !你的域名){
   return 444;
}

努力学习ing