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)可以用来确定进程是否正在被跟踪?看来CAPABILITIES表明这在CAP_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

相关内容