Bash를 종료할 때 sudo에 발생할 수 있는 보안 위험

Bash를 종료할 때 sudo에 발생할 수 있는 보안 위험

나는 최근에 bash가 종료될 때 명령을 실행하기 위해 bash의 내장 trap명령을 사용하는 방법에 대해 읽었습니다. 예를 들어 trap "notify-send test" EXITbash가 종료될 때 즉시 데스크탑 알림을 보내는 것입니다. 가장 먼저 떠오르는 것은 공격자가 이를 이용할 수 있는가 하는 것입니다. 몇 가지 연구와 시행착오 끝에 다음을 발견했습니다.

sudo 매뉴얼 페이지는 다음과 같이 말합니다.

보안 정책은 사용자가 인증 없이 일정 기간 동안 sudo를 다시 실행할 수 있도록 자격 증명 캐싱을 지원할 수 있습니다. 기본적으로 sudoers 정책은 터미널당 15분 동안 자격 증명을 캐시합니다.

나는 이 두 가지 정보를 결합하여 다음과 같은 명령을 생각해냈습니다. 사용자가 15분 이내에 sudo를 사용하면 trap 'printf "" | sudo -S COMMAND &>/dev/null' EXITbash가 종료될 때 이 명령이 자동으로 실행됩니다.COMMAND

예를 들어. sudo가 bash 세션에서 15분 이하 동안 사용되는 경우 ~/.bashrc와 같은 파일에 명령을 넣으면 trap 'printf "" | sudo -S touch ~/test &>/dev/null' EXIT사용자가 소유한 사용자의 홈 디렉터리에 test 파일이 생성됩니다.root

내가 아는 한, 공격자는 시작 시 bash가 실행되는 위치에 이 명령을 삽입하여 권한 상승을 수행한 다음 누군가 bash 세션에서 sudo를 사용할 때까지 기다린 다음 새 권한을 악용하고 백도어를 설치하는 등의 작업을 수행할 수 있습니다. 주의해야 할 점은 이 명령이 bash 종료를 지연시키므로 사용자는 긴 명령이나 무한 루프 실행을 알 수 있지만 명령을 실행하면 쉽게 피할 수 있다는 것입니다. 배경

여기서 뭔가 빠졌나요? 내가 모르는 몇 가지 보안 제한 사항이 있나요? Linux 5.19.0-31-generic x86_64 커널을 사용하여 Ubuntu 22.10 노트북에서 테스트한 결과 예상대로 작동하여 파일이 생성되었습니다. 또한 시스템 디렉토리에 파일을 생성하고 apt를 통해 패키지를 설치해 보았지만 모든 것이 작동했습니다. (패키지 설치시 약간의 딜레이가 있으나 이는 예상되는 현상입니다.)

감사해요.

답변1

아니요, 가능한 악용 측면에서 아무것도 놓치지 않았습니다. 사용자에게 통과 권한이 있는 한 작동합니다 sudo.

그러나 여기에는 세 가지 다른 중요한 사항이 누락된 것 같습니다.

  • 이것은 쉽게 숨겨진 공격이 아닙니다. 언급한 종료 시간 문제 외에도 sudo기본값은 로깅입니다.모두명령은 이를 통해 실행되므로 거의 항상 명확한 종이 흔적이 있으며 모든 명령 출력도 사용자에게 표시됩니다.
  • 대상 사용자의 셸 시작 파일을 조작할 수 있다는 것은 실제로 상당히 심각한 악용을 의미합니다. 공격자가 이 지점에 도달한 경우,아마도문제의 사용자로서 임의의 코드를 실행하는 다른 방법이 있으므로 이보다 숨기기 쉬운 다른 권한 상승 옵션이 있을 수 있습니다.
  • 자격 증명 캐시가 sudo있음임의로 선택할 수 있는. 이 기능을 끌 수 있으며, 제정신이고 보안에 민감한 대부분의 사용자는 그렇게 할 것입니다. Ubuntu는 이를 고위험 공격 벡터로 간주하지 않고(위의 두 가지 사항으로 인해) 게으른 사용자의 삶을 더 쉽게 만들기 때문에 기본적으로 활성화하도록 선택합니다.

관련 정보