EgeBalci/sgn

GitHub: EgeBalci/sgn

SGN 是一款用 Go 重写的多态 shellcode 编码器,在经典 Shikata ga nai 基础上新增 64 位支持、decoder stub 混淆和伪随机编码,使编码后的 payload 在静态检测下与随机数据无异。

Stars: 1933 | Forks: 243


SGN 是一个多态二进制编码器,用于 offensive security 目的,例如生成静态无法检测的二进制 payload。它使用加法反馈循环对给定的二进制指令进行编码,类似于 [LSFR](https://en.wikipedia.org/wiki/Linear-feedback_shift_register)。本项目是对[原版 Shikata ga nai](https://github.com/rapid7/metasploit-framework/blob/master/modules/encoders/x86/shikata_ga_nai.rb) 的 Golang 重写,并进行了许多改进。 ## 如何实现?为什么? 对于 offensive security 社区而言,原版 shikata ga nai encoder 被认为是目前最好的 shellcode 编码器。但多年来,安全研究人员发现了静态检测该编码器的几个缺陷(相关工作:[FireEye 文章](https://www.fireeye.com/blog/threat-research/2019/10/shikata-ga-nai-encoder-still-going-strong.html))。本项目的主要动机是创建一个更好的编码器,将给定的二进制文件编码到与完全随机数据无异的程度,使得检测 decoder 的存在成为不可能。借助 [keystone](http://www.keystone-engine.org/) 汇编器库,实现了以下改进。 - [x] 64 位支持。`终于可以正确编码 x64 shellcodes 了!` - [x] 更小的新 decoder stub。`LFSR 密钥缩减至 1 字节` - [x] 使用伪随机 schema 编码 stub。`Decoder stub 也使用伪随机 schema 进行编码` - [x] 无可见的循环条件 `Stub 在解码自身时完全不使用任何循环条件!!` - [x] Decoder stub 混淆。`使用 keystone 添加了随机垃圾指令生成器` - [x] 安全寄存器选项。`不会破坏任何寄存器(可选 preamble,可能会降低多态性)` ## 安装 你可以从[这里](https://github.com/EgeBalci/sgn/releases)获取预编译的二进制文件。要从源代码构建,请按照以下步骤操作。 **依赖项:** 构建源代码的唯一依赖是 [keystone engine](https://github.com/keystone-engine/keystone),请按照[这些](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE.md)说明安装该库。一旦系统上安装了 libkeystone,只需运行 go install 即可 ツ ``` go install github.com/EgeBalci/sgn@latest ``` ***DOCKER 安装*** [![Docker](http://dockeri.co/image/egee/sgn)](https://hub.docker.com/r/egee/sgn/) ``` docker pull egee/sgn docker run -it egee/sgn ``` **用法** `-h` 参数已经解释得很清楚了,如果你想了解幕后的运行情况,请使用 `-v` `( ͡° ͜ʖ ͡°)_/¯`

``` __ _ __ __ _ ___ / / (_) /_____ _/ /____ _ ___ ____ _ ___ ___ _(_) (_-

LFSR 本身在概率空间方面非常强大。为了获得更高的多态性,在未编码的原始 payload 开头会附加垃圾指令。下图展示了 LFSR 特征多项式的友矩阵,并将种子表示为列向量,展示了 Fibonacci 配置中寄存器经过 k 步后的状态。

## [挑战](https://github.com/EgeBalci/sgn/wiki/Challange_Guidelines) 考虑到该编码器的概率空间,我个人认为任何基于规则的静态检测机制都无法检测到使用 SGN 编码的二进制文件。事实上,如果有人能编写出可以检测所有编码输出的 YARA 规则,我愿意将这个项目的捐赠资金作为象征性的奖品发放。请查看[***这里***](https://github.com/EgeBalci/sgn/wiki/Challange_Guidelines)了解申领捐赠资金的指南和规则。 [***当前捐赠金额***](https://www.blockchain.com/tr/btc/address/1615NKMjpHShh3hWHrazWybgJxpqZgz4f2) [![QR](https://github.com/EgeBalci/sgn/raw/master/img/btc_qr.png)](https://www.blockchain.com/tr/btc/address/1615NKMjpHShh3hWHrazWybgJxpqZgz4f2) 如果你尝试后失败了,请考虑捐赠 `[̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅]`
标签:DNS 反向解析, DNS 解析, EVTX分析, Golang, Keystone引擎, SGN, Shellcode, Shikata Ga Nai, x86, 中高交互蜜罐, 二进制编码, 代码混淆, 反检测, 多态编码器, 安全测试, 安全编程, 恶意软件开发, 技术调研, 攻击性安全, 数据展示, 日志审计, 红队, 网络安全, 请求拦截, 隐私保护