추적되고 있는지 확인하는 데 getauxval을 사용할 수 있습니까?

추적되고 있는지 확인하는 데 getauxval을 사용할 수 있습니까?

곧 떠날 예정이 문제, Linux에서 SQL Server 2017을 부팅하기 위해 커널을 패치했습니다. 이제 더 나아갔지만 문을 닫았어

strstr("TracerPid:\t0\n", "TracerPid:")                                                                 = "TracerPid:\t0\n"
strtol(0x7fe0cf01840b, 0x7ffd380d5eb0, 10, 0)                                                           = 0
free(0x7fe0cf018400)                                                                                    = <void>
fclose(0x7fe0cf011980)                                                                                  = 0
getpid()                                                                                                = 3474
getpid()                                                                                                = 3474
getauxval(31, 9, 5, 0x7fe0d034ea67)                                                                     = 0x7ffd380dcfe0
strncpy(0x7ffd380d5f00, "/opt/mssql/bin/sqlservr", 4095)                                                = 0x7ffd380d5f00
realpath(0x7ffd380d5f00, 0x7ffd380d6f00, 0, 0x7fe0d0323720)                                             = 0x7ffd380d6f00
getpid()                                                                                                = 3474
abort( <no return ...>
--- SIGABRT (Aborted) ---

proc나는 SQL Server가 폴백과 동일한 작업을 수행하기 위해 다른 마법을 수행한다는 것을 확인한 후 아무도 소프트웨어를 작동시키려고 하지 않는 "추가 보안"을 위해 믿습니다 .

getauxval(3)이제 이것이 프로세스가 추적되고 있는지 확인하는 데 사용될 수 있는지 궁금합니다 . 것 같다CAPABILITIESCAP_SYS_ADMIN이것이 가능 하다는 것을 보여라 .CAP_SYS_PTRACE

답변1

나는 첫 번째 주장이 뭔가를 말하고 있다고 믿습니다 GETAUXVAL().

getauxval(31, 9, 5, 0x7fe0d034ea67)

열려 있는/usr/include/x86_64-linux-gnu/bits/auxv.h, 이해합니다

#define AT_EXECFN       31              /* Filename of executable.  */

그래서 그들은 실행 파일의 파일 이름을 얻으려고 합니다. 실제로는 문서의 경로 이름과 아래 예제입니다. 이 경우 이는 대상이 아닌 추적기의 경로 이름입니다. 그런 다음 그들은 realpath경로가 동일한지 확인하기 위해 전화했습니다. 무엇을 볼 수 있나요 getauxval(),

$ LD_SHOW_AUXV=1 strace sleep 1
AT_SYSINFO_EHDR: 0x7ffd6d96f000
AT_HWCAP:        bfebfbff
AT_PAGESZ:       4096
AT_CLKTCK:       100
AT_PHDR:         0x5640b6cad040
AT_PHENT:        56
AT_PHNUM:        9
AT_BASE:         0x7fc9ce4fc000
AT_FLAGS:        0x0
AT_ENTRY:        0x5640b6d09440
AT_UID:          1000
AT_EUID:         1000
AT_GID:          1000
AT_EGID:         1000
AT_SECURE:       0
AT_RANDOM:       0x7ffd6d909669
AT_HWCAP2:       0x0
AT_EXECFN:       /usr/bin/strace
AT_PLATFORM:     x86_64

관련 정보