Code Monkey home page Code Monkey logo

hide_proc's Introduction

使用hook技术(kprobe、ftrace、 livepatch)实现进程、内核模块的隐藏。 测试环境是ubuntu 20.04 kernel v5.4。
本研究项目,仅用于研究和演示目的,禁止用于非法目的。 使用前,请认真阅读相关法律,如《中华人民共和国网络安全法》等相关法律,由使用不当引起的后果与本作者无关。

要求:
   1. 隐藏多个进程
   2. 根据程序的全路经或者进程的comm隐藏
   3. bypass 通用检测工具
   4. bypass 通用取证


隐藏的内容:
  进程的隐藏:
   1. /proc 目录下不显示隐藏进程pid目录及子目录 (已实现)
   2. 进程的fork/execv等信息不通过 cn_proc 发送 (已实现)
   3. 进程的fork/execv等信息不通过 audit 发送 (已实现)
   4. 不能使用trace相关工具查看到该进程的相关信息(实现, puzzle kprobe, disable (e)bpf for detect rootkit)
   5. kernel 版本大于5.0.1, 不能使用fanotify查看到相关信息
   6. Check syscalls about other proccess.
    
  内核模块的隐藏:
   1. /proc/module 文件中不显示该内核模块 (已实现)
   2. /proc/kallsyms 中不显示该内核模块中的符号 (已实现)
   3. /sys/module 目录下不显示该内核模块  (已实现)
   4. /sys/kernel/livepatch/ 目录下不显示该内核模块 (已实现)
   5. 不能通过 /sys/kernel/tracing/enabled_functions 查看到相关信息 (已实现)
   6. /proc/sys/kernel/tainted 文件不能显示该内核模块相关信息 (已实现)
   7. 内核的日志信息中 不显示该内核模块信息 (已实现)
  

使用SM4算法增加加密壳,增加只执行一次的功能, 增加反分析功能:
   1. 实现一个load壳,直接调用init_module系统调用加载ko模块, 不使用命令insmod或者modprobe。
   2. 使用SM4对ko模块进行加密处理。
   3. load的main函数执行前进行简单的反动态分析。 
     (1)禁止产生core文件。
     (2)判断自己是否是被跟踪状态,如果是,则杀掉父进程,直接(安全)删除
      (3) 判断父进程是否是bash/sudo/pid==1,否则杀掉父进程,直接(安全)删除。
     (4)然后使用ptrace PTRACE_TRACEME, 反运行中调式。
   4. 程序执行完成, 删除自己。
  
   
对抗使用内核模块检测该模块(可选):
   禁止加载ko: 可设置modules_disabled为1, 通过参数force_modules_disabled=1设置 
   禁止关机/重启/kdump: 通过参数force_reboot_disabled=1设置 


icmp隐通道使用例子:
   参考 hc/README



使用示例:
sudo ./load key  ['hidden_base_exe=0 hidden_proc_name="hide_main,hide_send,hidden_comm,hidden_comm1" hidden_module_name="hidden_ko,hidden_ko2" force_modules_disabled=1']


TODO:
    1. 应用/内核功能分离。内核模块仅仅起到辅助支撑作用,其目的是隐藏应用层程序的痕迹 、帮助应用层实现不易实现的功能。
    2. 内核模块框架化,具体的功能可以根据需要加载。
    3. puzzle 功能。就是迷惑检测工具,例如,让检测工具检测到特定的程序如nginx被入侵了,其实nginx并没有。
    4. stolen time 功能。 经验丰富的取证人员,能根据消耗时间的轻微异常,发现入侵痕迹。偷其他正常程序的时间片,完成自己的功能。
    5. 隐藏/proc/net/tcp(6) /proc/net/udp(6)中 和 NETLINK_SOCK_DIAG协议中网络连接的信息。
    6. 从acct系统中隐藏进程相关信息。(已实现)
    7. puzzle 使用火线的功能。
    8. 根据内核模块名隐藏指定的(多个)模块。 (已实现)
    9. 丰富内核/应用层隐通道的功能。
    10. 双层加壳,增加静态分析难度。

hide_proc's People

Contributors

z789 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar aweMinchoo avatar  avatar jack avatar xavier avatar Frank avatar arttnba3 avatar  avatar

Watchers

 avatar  avatar xavier avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.