混淆版rust mimikatz bypass卡巴斯基

rust = rust + LLVM
orust = rust + OLLVM
rust后端使用LLVM, 所以可以使用OLLVM做混淆, 我之前在思考怎样把OLLVM用到rust上, 前几天看到已经有相关文章了, 感谢@ny0c
不过文章中有几处地方可能是作者故意留坑, 我将告知大家正确的流程:

  • 编译LLVM
    编译LLVM时, 不要编译动态库, 编译动态库后生成的lib文件后缀将是.dll.a, 导致后续编译rust时缺少库文件, 正确的编译命令如下
cmake -G "Ninja" -S ./llvm-project/llvm -B ./build_dyn_x64 -DCMAKE_INSTALL_PREFIX=./llvm_x64 -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lld;" -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_INSTALL_UTILS=ON -DLLVM_INCLUDE_TESTS=OFF -DLLVM_BUILD_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_BUILD_BENCHMARKS=OFF

这样编译后也无需修改src/bootstrap/compile.rs

  • 自定义toolchain
    自定义toolchain时有一些细节没提到, 编译出来的stage1-tools-bin文件夹中cargo.exe, 要放到stage1/bin目录下, 其他文件放到stage1/libexec目录下, 这样才是一个比较完整的toolchain

还有一些细节我想提出来:

  • 打包toolchain的细节
    编译好了toolchain, 怎么打包存放或者分发呢? 先按照上面将完整toolchain配置好, 然后复制stage1文件夹出去, 然后删除rust文件夹下的build目录, 再删除stage1/lib/rustlib/src/rust文件, 这个文件是个链接, 随后复制整个rust文件夹到stage1/lib/rustlib/src. 因为stage1目录下引用了rust目录, rust目录下又存在stage1目录, 导致循环引用, 我在使用WinRAR时是无法打包的
  • 编译的库路径问题
    大家都知道, rust默认编译后会将一些敏感目录打包进二进制文件, rust的库也存在类似的问题. 一般的解决方案是使用--remap-path-prefix去映射, 但是在编译rust的本身的库的时候, 是无法完全控制的, 为什么说无法完全控制呢? 因为确实可以控制一部分, 在编译rust的config.toml的文件里rust选项下有个remap-debuginfo选项, 取消注释, 并且设置为true即可去除部分路径, 这条配置启用之后, rust本身的调试路径将会映射到/rust/$sha/..., 但是部分rust依赖的crate并不能靠这条命令完成映射
    有两个解决方法, 一是在编译时, 重新编译这些库, 并且配置好--remap-path-prefix, 命令如下
cargo +llvm-obf build -Z build-std=panic_abort,std,core,alloc,proc_macro --target x86_64-pc-windows-gnu --release

但是我在实际使用中发现Hello World项目这样编译后, 并不能正常输出Hello World了, 而且这样做会将rust标准库等一起混淆, 二进制文件体积会增大, 所以听听第二种方法
第二种方法使用如下命令编译, 并且也配置好--remap-path-prefix, 减少大部分路径

cargo +llvm-obf b -r --target x86_64-pc-windows-gnu

这样编译后Hello World正常运行, 但是存在少数路径, 是库文件依赖的crate导致的, 建议写一个程序, 将敏感路径替换成等字节的非敏感字符, 或者直接右键记事本替换也是可以的, 不过一定要是等字节(字节大小相同)

mimikatz bypass 卡巴斯基

github有个rust版本的mimikatz实现了部分功能, 项目地址: https://github.com/memN0ps/mimikatz-rs
使用这个项目配合orust, bypass 卡巴斯基, 只是实现卡巴斯基不杀, 但是实测卡巴斯基会保护敏感进程, 所以实战中也要看杀软
1.png

思考

这次实验, 我发现了LLVM pass的强大能力, 我未来将会投入时间去研究LLVM pass, 结合rust的赋能, 这将是画龙点睛.
再许个愿望, 有时间了维护一下rust的mimikatz项目, 很可惜估计是没有时间, 搞不好下一秒就是Hell