곧 떠날 예정이 문제, 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