{"repo":"C4o/Juggler","free":true,"listed":false,"github":"https://github.com/C4o/Juggler","clone":"git clone https://github.com/C4o/Juggler.git","description":"A system that may trick hackers. 针对黑客的拟态欺骗系统。","language":"Go","stars":455,"topics":["golang","lua","hacker","waf","custom-response","deception","honeyd","honeypot"],"license":"Apache-2.0","category":"dev-tools","readme_excerpt":"Juggler - 一个也许能骗到黑客的系统 应用场景 现在很多WAF拦截了恶意请求之后，直接返回一些特殊告警页面（之前有看到t00ls上有看图识WAF）或一些状态码（403或者500啥的）。 但是实际上返不返回特殊响应都不会有啥实际作用，反而会给攻击者显而易见的提示。 但是如果返回的内容跟业务返回一致的话，就能让攻击者很难察觉到已经被策略拦截了。 场景一：攻击者正在暴力破解某登陆口 那现在我们可以这么做 场景二：攻击者正在尝试找xss 我们可以这么做 肯定有人会觉得，我们WAF强的不行，直接拦截就行，不整这些花里胡哨的，那这可以的。 但是相对于直接的拦截给攻击者告警，混淆视听，消费攻击者的精力，让攻击者怀疑自己，这样是不是更加狡猾？这也正是项目取名的由来，juggler，耍把戏的人。 当然，上面需求实现的前提，是前方有一个强有力的WAF，只有在攻击请求被检出后，攻击请求才能到达我们的拦截欺骗中心，否则一切都是扯犊子。 性能 跟gin进行对比，性能损失大概10%。 虽然每个请求的真实处理还是在golang中完成，但是每个请求的一些临时变量都会在lua虚拟机走一遍。 gin逻辑 juggler逻辑 使用方式 项目流程图 示例插件 特点 插件编写灵活 插件支持lua所有常见语法，暂时不支持goto。可以调用预先注册好的变量、函数、模块。 实现个很简单的响应状态码404的页面。 插件和响应文件被动式更新 加载时会初始化所有的插件和响应内容文件。 使用inotify来监听文件行为，实现被动式的更新，不用写那个多主动轮询的for循环。 丰富三方插件库可自行定义 juggler中的lua插件除了lua本身的一些变量，其他的都是由golang实现后注册进lua虚拟机供lua进行调用的。 例如定义一个生成随机数的golang-lua函数 lua使用方式 已实现需求 每个请求可操作的变量和函数 1. 项目全局根变量：rock 项目所有的变量的，类型是table。 2. http请求：rock.var 包含了部分的当前请求的参数，具体参数见golua/request.go，已经覆盖了常见的参数了 3. http响应：rock.resp 处理响应，通过每个请求的 gin.Context存在userdata的值进行操作 内置模块、函数和对应需求 1. 正则匹配：re 统一拦截规则可能会需要根据不同uri区分子业务来返回对应的欺骗页面 re中实现缓存，所以性能优于golang原生（虽然golang中的正则匹配性能一直被诟病 2. 时间相关：time 服务器的Date时间特定格式、使用unix时间戳计算、日志打印格式化时间 3. 加密：crypto 业务上会有些接口，每次报错会返回一个随机md5，为了完全仿真，我们返回的数据的md5必然也要随机 4. 随机数：random lua中使用随机数对table内容进行随机筛选，由于lua自带的随机数函数太不随机，所以自己实现 5. 日志打印：log、ERROR、DEBUG、INFO ERROR、DEBUG、INFO都是日志等级 联动WAF使用 本项目在现实中的应用 WAF体系 本项目为拦截图中的拦截欺骗中心，接收并处理所有恶意请求。 日志分析风控系统 项目地址：https://github.com/C4o/FBI-Analyzer 实时日志传输模块 项目地址：https://github.com/C4o/LogFarmer 404StarLink 2.0 - Galaxy Juggler 是 404Team 星链计划2.0中的一环","default_branch":null,"files":null,"tree":[],"storefront":"/r/C4o","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/C4o/Juggler/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}