用于检测对REST API的扫描/攻击的启发式方法

时间:2015-08-06 04:35:56

标签: regex rest security heuristics

我正在开发一个REST API,并且我编写了一个控制器来处理未处理的""未处理的"路线("资源类型"不存在的路线)。

我已经创建了一些代码来以启发式的方式检测潜在的攻击尝试并记录它们(以后进行阻止IP或提供机器学习系统等操作)。

我只是在分析请求的路线(而不是它的身体)。我正在使用的正则表达式如下:

const SUSPICIOUS_PATH_COMPONENTS = '\.\.|sys|shadow|passwd';
const SUSPICIOUS_FILE_EXTENSIONS = '\.jsp|\.asp|\.php|\.pl';
const SUSPICIOUS_AUTH_ATTEMPT    = 'admin|root|auth|login|password';
const SUSPICIOUS_CONFIG_ATTEMPT  = 'config|setting';
const SUSPICIOUS_OF_INJECTION    = 'cgi|script|eval|execute|code|insert|update|delete|select|phpinfo';
const SUSPICIOUS_OTHER_KEYWORDS  = 'pass|install|super|secure|security|token';

// Heuristic regexp used to detect security threats
const SUSPICIOUS_PATH_REGEX  = '/'
    . self::SUSPICIOUS_PATH_COMPONENTS . '|'
    . self::SUSPICIOUS_FILE_EXTENSIONS . '|'
    . self::SUSPICIOUS_AUTH_ATTEMPT    . '|'
    . self::SUSPICIOUS_CONFIG_ATTEMPT  . '|'
    . self::SUSPICIOUS_OF_INJECTION    . '|'
    . self::SUSPICIOUS_OTHER_KEYWORDS
. '/i';

如果路由与正则表达式匹配,那么我在日志中插入一行:

$this->get('logger')->notice(
       'SECURITY: Potential malicious scan ('.$httpMethod.' request)',
        [
            'route' => $route,
            'client_ips' => $request->getClientIps(),
            'user_agent' => $request->headers->has('User-Agent') ? $request->headers->get('User-Agent') : '',
            'request_body' => preg_replace('/[^\x00-\x7F]+/', '', substr($request->getContent(), 0, 1024))
        ]
    );

我的问题是,如果有人有关于如何改进此启发式方法的想法,以及如何改进日志记录(您认为我应该记录其他/更多内容吗?)

感谢您的时间和建议。

0 个答案:

没有答案