소개
Linux 시스템에서 관리자는 일상적인 유지 관리, 백업 및 시스템 업데이트를 수행하기 위해 자동화된 작업 스케줄러를 자주 사용합니다. 이 목적을 위한 가장 일반적인 유틸리티는 Cron 입니다. Cron 은 매우 유용하지만, 잘못 구성된 예약 작업은 심각한 보안 취약점을 초래할 수 있습니다.
예약된 작업은 신뢰 수준과 쓰기 권한이 일치하지 않을 때 위험해집니다. 권한이 있는 작업이 권한이 낮은 사용자가 수정할 수 있는 무언가를 실행하면, 해당 스케줄은 지연된 권한 상승 메커니즘으로 변질됩니다.
이 실습에서는 시스템 관리자가 root 사용자로 자동 실행되는 유지 관리 스크립트를 생성했지만, 실수로 파일 권한을 너무 느슨하게 설정한 시나리오를 살펴봅니다. 이러한 잘못된 구성을 식별하고 그 의미를 이해하며, 자신의 명령 페이로드를 주입하여 일반 사용자에서 root로 권한을 상승시키는 방법을 배웁니다.
Cron 작업 열거
이 단계에서는 시스템 전체의 Cron 작업을 열거하는 방법을 배웁니다. Cron 은 Unix 계열 운영 체제에서 시간 기반 작업 스케줄러입니다. 시스템 관리자는 이를 사용하여 작업 (명령 또는 셸 스크립트) 이 고정된 시간, 날짜 또는 간격으로 주기적으로 실행되도록 예약합니다.
시스템 전체의 cron 작업은 종종 /etc/crontab 파일이나 /etc/cron.d/ 디렉터리 내에 정의됩니다. 이러한 구성 파일은 일정, 명령이 실행될 사용자 계정, 그리고 실행할 명령 자체를 지정합니다.
즉, cron 항목은 코드가 언제 실행될지, 어떤 계정으로 실행될지, 어떤 파일이나 명령이 실행될지라는 세 가지 중요한 사실을 한 번에 드러냅니다.
/etc/cron.d/ 디렉터리를 검사하여 사용자 지정 예약 작업이 있는지 확인해 봅시다. cat 명령을 사용하여 유지 관리 cron 작업 파일의 내용을 읽습니다.
cat /etc/cron.d/maintenance
출력:
* * * * * root /usr/local/bin/maintenance.sh
출력은 5 개의 별표 (* * * * *) 로 표시된 대로 1 분마다 실행되도록 예약된 cron 작업을 보여줍니다. 이 작업은 root 사용자로 실행되도록 구성되어 있으며 /usr/local/bin/maintenance.sh에 위치한 bash 스크립트를 실행합니다.
쓰기 가능한 스크립트 식별
이 단계에서는 cron 작업에 의해 실행되는 스크립트를 조사하여 잠재적인 보안 취약점을 식별합니다. root와 같이 권한이 높은 사용자가 스크립트를 실행하면, 해당 스크립트 내부의 모든 명령도 root 권한으로 실행됩니다.
이것이 바로 쓰기 가능한 스크립트 경로가 주요 권한 상승 신호인 이유입니다. 스크립트 내용에 대한 제어권은 곧 권한이 있는 예약 작업에 대한 간접적인 제어권이 됩니다.
일반 사용자가 이 스크립트를 수정할 수 있다면, 시스템이 root로 실행할 자신만의 명령을 주입할 수 있습니다. 이는 일반적인 권한 상승 벡터입니다.
ls 명령에 -l 플래그를 사용하여 자세한 목록을 확인하고 유지 관리 스크립트의 파일 권한을 확인해 봅시다.
ls -l /usr/local/bin/maintenance.sh
출력:
-rwxrwxrwx 1 root root 78 Oct 10 10:00 /usr/local/bin/maintenance.sh
출력 시작 부분의 rwxrwxrwx 권한을 확인하십시오. 이는 파일이 소유자, 그룹 및 시스템의 모든 사용자에 의해 읽기, 쓰기 및 실행이 가능하다는 것을 의미합니다. 모든 사람이 쓸 수 있기 때문에 현재 일반 사용자가 내용을 수정할 수 있습니다.
루트 명령 페이로드 주입
이 단계에서는 취약한 파일 권한을 악용하여 유지 관리 스크립트에 자신의 명령을 주입합니다.
스크립트가 1 분마다 root로 실행되므로, 추가하는 모든 명령도 root로 실행됩니다. 초보자에게 친숙하고 신뢰할 수 있는 증명을 위해 id 명령의 출력을 프로젝트 디렉터리의 파일에 기록하는 명령을 추가하겠습니다.
echo 명령을 사용하여 이 페이로드를 스크립트에 추가합니다. >> 연산자는 원래 내용을 삭제하지 않고 파일 끝에 페이로드를 추가하도록 보장합니다.
echo "id > /home/labex/project/cron_pwned.txt" >> /usr/local/bin/maintenance.sh
tail 명령을 사용하여 파일 끝을 읽음으로써 페이로드가 성공적으로 추가되었는지 확인할 수 있습니다.
tail -n 2 /usr/local/bin/maintenance.sh
출력:
echo "Maintenance run at $(date)" >> /var/log/maintenance.log
id > /home/labex/project/cron_pwned.txt
루트 소유 작업이 실행될 때까지 대기
이 단계에서는 cron 작업이 주입된 페이로드를 실행할 때까지 기다립니다.
cron 작업은 1 분마다 한 번씩 실행됩니다. 실행될 때 id 명령을 root로 실행하고 그 결과를 ~/project/cron_pwned.txt에 저장합니다.
최대 60 초 동안 기다린 후 증명 파일을 읽습니다.
cat /home/labex/project/cron_pwned.txt
익스플로잇이 올바르게 작동했다면 다음과 유사한 출력이 표시됩니다.
uid=0(root) gid=0(root) groups=0(root)
축하합니다. cron 작업을 하이재킹하여 root로 명령을 실행하는 데 성공했습니다.
요약
이 실습에서는 Linux 환경에서 권한을 상승시키기 위해 보안이 취약한 시스템 유지 관리 작업을 식별하고 악용하는 방법을 배웠습니다. 먼저 시스템 전체의 cron 작업을 열거하여 root 사용자로 실행되는 작업을 찾았습니다. 그런 다음 대상 스크립트를 조사하여 파일 권한이 취약하여 모든 사용자가 수정할 수 있음을 발견했습니다. 쓰기 가능한 스크립트에 페이로드를 주입함으로써 자동화된 프로세스를 성공적으로 하이재킹하고 root 권한을 획득했습니다. 이 연습은 특히 권한이 있는 자동화된 프로세스에 의해 실행되는 스크립트의 경우, 적절한 파일 권한 관리의 중요성을 강조합니다.



