바이너리가 "루트로 실행"된다는 것은 무엇을 의미하며 프로세스에 대해 이를 결정하는 방법은 무엇입니까?

바이너리가 "루트로 실행"된다는 것은 무엇을 의미하며 프로세스에 대해 이를 결정하는 방법은 무엇입니까?

예를 들어 일부 네트워크/웹 서버가 "루트로 실행"되면 Frontline Data Packet 파서에서 "루트로 실행"되는 Linux 프로그램(이 경우 바이너리)의 취약점이 위험하다고 들었습니다. "루트로 실행"되지 않는 프로그램보다 공격자가 시스템을 더 심각하게 손상시킬 수 있습니다.

나는 사용자 A가 바이너리를 실행하더라도 다른 사용자의 컨텍스트에서 실행된다는 것을 의미하는 비트가 설정된 setuid바이너리 에 대해 잘 알고 있습니다 . setuid하지만 내 혼란은 프로그램이 어떻게 "루트로 실행됩니까?"라는 표현에 있는 것 같습니다. 프로그램 자체가 process컴퓨터에서 루트 사용자의 신원을 가정합니까? process루트로 실행되는 프로세스가 더 위험한 이유는 무엇입니까 ? 내 Linux 시스템에서 어떤 프로세스가 루트로 실행되고 있는지 정확히 어떻게 알 수 있나요? 예를 들어 일부 실행 파일은 다음과 같습니다.소유하다사용자 또는 그룹 별로 root, 그러나 이는 본질적으로 프로그램 로더에 의해 메모리에 로드될 때 항상 "루트로 실행"된다는 것을 의미합니까?

답변1

이 프로그램은 "루트로 실행"!
프로그램이...프로그램인 경우 루트(이 컨텍스트에서는)가 사용자입니다.

  • 뿌리사용자루트(사용자)로 프로그램을 실행합니다.
  • 루트가 아닌사용자(그렇다면) 루트로 프로그램을 실행하십시오.

이 경우, 이용자는 (자신의 신분에 관계없이)실제 정체성)은 루트 사용자와 동일한 권한을 갖는 것으로 간주됩니다.
따라서 프로그램은 루트 소유 프로세스의 우선 순위를 종료/변경하고, 루트 액세스 권한에 따라 파일/디렉터리/장치 노드에 액세스하고, 보다 유리한 보안 제한을 활용할 수 있습니다.

이는 다음과 같은 경우에 발생할 수 있습니다:

  • 이 프로그램은 루트가 소유한 실행 파일이며실행시 사용자 ID 설정놓다,
  • sudo사용자가 다음을 사용하여 프로그램을 시작하는 경우
  • 물론, 루트 사용자가 프로그램을 시작하는 경우입니다.

a의 첫 번째 열은 ps -ef다음과 같습니다.효과적인시스템에서 실행되는 모든 프로세스의 소유자입니다. 읽을 수 있다면뿌리그런 다음 루트 권한이 있는 사용자를 대신하여 프로세스가 실행됩니다.

위에 나열된 기능으로 인해 잠재적으로 위험할 수 있습니다. 프로그램에 버그가 있거나 어떤 유형의 프로그램이 일부 취약점을 악용하는 경우 루트 권한을 부적절하게 사용할 가능성이 높습니다.

또한 루트 권한으로 프로그램을 실행하면 프로그램이 삭제될 수 있습니다.setuidsyscall을 사용하여 결국 어느 시점에서 이러한 권한을 다시 얻습니다.seteuid시스템 호출.
따라서 프로세스의 소유자는 프로세스 수명 동안 반드시 고정되어 있는 것은 아닙니다.

답변2

사람들이 "루트로 실행"이라고 말하면 다음 중 일부 또는 전부를 의미합니다.

  • setuid 비트가 할당된 프로그램은 사용자 A에 의해 실행됩니다.
  • 데몬으로 실행되도록 운영 체제에서 설정한 프로그램입니다.
  • 탐지되지 않은 커널 루트 툴킷을 통해 루트로 실행되는 프로그램입니다.

가장 일반적인 경우는 아마도 악용 가능한 코드를 사용하는 데몬 프로세스일 것입니다. 예로는 OpenSSH 데몬이나 Apache와 같은 다른 서버의 취약점이 있습니다.

관련 정보