Linux에서 프로세스 숨기기

왜요?



호스트의 손상 후 탐지를 피하고 누군가가 /proc 또는 ps를 검사할 때 무해한 것으로 프로세스를 숨기려고 합니다.

언제?



호스트는 Linux이고 실행 파일은 C 또는 FFI 지원 언어입니다.

어떻게?



스푸핑할 데이터에는 두 가지 클래스가 있습니다.
  • /proc/pid/cmdline의 내용 . 이것이 ps -f 로 표시되는 것입니다.
  • /proc/pid/comm 의 내용과 /proc/pid/status 의 첫 줄입니다. 이것은 ps 없이 -f 로 나타나는 것입니다.

  • 인 님




    import os
    
    proc NimMain() {.cdecl, importc.}
    
    proc syscall(number: clong): clong
        {.importc, varargs, header: "sys/syscall.h".}
    var NR_PRCTL
        {.importc: "__NR_prctl", header: "unistd.h".}: int
    var PR_SET_NAME
        {.importc: "PR_SET_NAME", header: "sys/prctl.h".}: int
    
    proc main(argc: int, argv: cstringArray, envp: cstringArray): int
            {.cdecl, exportc.} =
        NimMain()
    
        const FAKE_COMMAND = "spoofed"
    
        # handles /proc/pid/comm and /proc/pid/status
        discard syscall(NR_PRCTL, PR_SET_NAME, cstring(FAKE_COMMAND))
    
        # handles /proc/pid/cmdline
        let totalLength = len(argv[0])
        var i = 0
        for ch in FAKE_COMMAND:
            argv[0][i] = FAKE_COMMAND[i]
            i += 1
        argv[0][i] = '\x00'
        for j in i .. totalLength:
            argv[0][j] = '\x00'
    
        sleep(60000)
    


  • 이것을 --nomain 로 컴파일해야 합니다.
  • argc 및 envp가 메모리에서 연속적이므로 이는 실제FAKE_COMMAND보다 긴argv[0]/proc/pid/environ의 내용을 덮어쓴다는 의미입니다. 이 문제를 해결하려면 실행 파일의 이름이 스푸핑하려는 것보다 더 긴지 확인하십시오.
  • 좋은 웹페이지 즐겨찾기