![바이너리가 "루트로 실행"된다는 것은 무엇을 의미하며 프로세스에 대해 이를 결정하는 방법은 무엇입니까?](https://linux55.com/image/213762/%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC%EA%B0%80%20%22%EB%A3%A8%ED%8A%B8%EB%A1%9C%20%EC%8B%A4%ED%96%89%22%EB%90%9C%EB%8B%A4%EB%8A%94%20%EA%B2%83%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9D%84%20%EC%9D%98%EB%AF%B8%ED%95%98%EB%A9%B0%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%97%90%20%EB%8C%80%ED%95%B4%20%EC%9D%B4%EB%A5%BC%20%EA%B2%B0%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
예를 들어 일부 네트워크/웹 서버가 "루트로 실행"되면 Frontline Data Packet 파서에서 "루트로 실행"되는 Linux 프로그램(이 경우 바이너리)의 취약점이 위험하다고 들었습니다. "루트로 실행"되지 않는 프로그램보다 공격자가 시스템을 더 심각하게 손상시킬 수 있습니다.
나는 사용자 A가 바이너리를 실행하더라도 다른 사용자의 컨텍스트에서 실행된다는 것을 의미하는 비트가 설정된 setuid
바이너리 에 대해 잘 알고 있습니다 . setuid
하지만 내 혼란은 프로그램이 어떻게 "루트로 실행됩니까?"라는 표현에 있는 것 같습니다. 프로그램 자체가 process
컴퓨터에서 루트 사용자의 신원을 가정합니까? process
루트로 실행되는 프로세스가 더 위험한 이유는 무엇입니까 ? 내 Linux 시스템에서 어떤 프로세스가 루트로 실행되고 있는지 정확히 어떻게 알 수 있나요? 예를 들어 일부 실행 파일은 다음과 같습니다.소유하다사용자 또는 그룹 별로 root
, 그러나 이는 본질적으로 프로그램 로더에 의해 메모리에 로드될 때 항상 "루트로 실행"된다는 것을 의미합니까?
답변1
이 프로그램은 "루트로 실행"!
프로그램이...프로그램인 경우 루트(이 컨텍스트에서는)가 사용자입니다.
- 뿌리사용자루트(사용자)로 프로그램을 실행합니다.
- 루트가 아닌사용자(그렇다면) 루트로 프로그램을 실행하십시오.
이 경우, 이용자는 (자신의 신분에 관계없이)실제 정체성)은 루트 사용자와 동일한 권한을 갖는 것으로 간주됩니다.
따라서 프로그램은 루트 소유 프로세스의 우선 순위를 종료/변경하고, 루트 액세스 권한에 따라 파일/디렉터리/장치 노드에 액세스하고, 보다 유리한 보안 제한을 활용할 수 있습니다.
이는 다음과 같은 경우에 발생할 수 있습니다:
- 이 프로그램은 루트가 소유한 실행 파일이며실행시 사용자 ID 설정놓다,
sudo
사용자가 다음을 사용하여 프로그램을 시작하는 경우- 물론, 루트 사용자가 프로그램을 시작하는 경우입니다.
a의 첫 번째 열은 ps -ef
다음과 같습니다.효과적인시스템에서 실행되는 모든 프로세스의 소유자입니다. 읽을 수 있다면뿌리그런 다음 루트 권한이 있는 사용자를 대신하여 프로세스가 실행됩니다.
위에 나열된 기능으로 인해 잠재적으로 위험할 수 있습니다. 프로그램에 버그가 있거나 어떤 유형의 프로그램이 일부 취약점을 악용하는 경우 루트 권한을 부적절하게 사용할 가능성이 높습니다.
또한 루트 권한으로 프로그램을 실행하면 프로그램이 삭제될 수 있습니다.setuid
syscall을 사용하여 결국 어느 시점에서 이러한 권한을 다시 얻습니다.seteuid
시스템 호출.
따라서 프로세스의 소유자는 프로세스 수명 동안 반드시 고정되어 있는 것은 아닙니다.
답변2
사람들이 "루트로 실행"이라고 말하면 다음 중 일부 또는 전부를 의미합니다.
- setuid 비트가 할당된 프로그램은 사용자 A에 의해 실행됩니다.
- 데몬으로 실행되도록 운영 체제에서 설정한 프로그램입니다.
- 탐지되지 않은 커널 루트 툴킷을 통해 루트로 실행되는 프로그램입니다.
가장 일반적인 경우는 아마도 악용 가능한 코드를 사용하는 데몬 프로세스일 것입니다. 예로는 OpenSSH 데몬이나 Apache와 같은 다른 서버의 취약점이 있습니다.