bash 명령어에서 SUID 권한 악용 방법 (사이버 보안)

NmapBeginner
지금 연습하기

소개

사이버 보안 분야에서 bash 명령어에서 SUID(Set User ID) 권한을 이해하고 활용하는 것은 필수적인 기술입니다. 이 튜토리얼은 SUID 취약점을 활용하는 과정을 안내하여 사이버 보안 지식을 향상시키고 시스템을 잠재적인 위협으로부터 보호하는 데 도움을 드립니다.

SUID 권한 이해

SUID(Set User ID) 는 Linux/Unix 시스템에서 특수한 파일 권한으로, 사용자가 파일의 소유자 권한으로 파일을 실행할 수 있도록 허용합니다. 이는 강력한 기능이지만, 적절히 관리되지 않으면 보안 위험이 될 수 있습니다.

SUID 란 무엇인가요?

SUID 는 실행 파일의 권한 비트 중 하나입니다. SUID 비트가 설정된 파일을 사용자가 실행하면, 해당 프로세스는 사용자 자신의 ID 가 아닌 파일 소유자의 효과적인 사용자 ID 로 실행됩니다. 이는 암호 변경이나 시스템 리소스 접근과 같은 특정 작업을 수행하기 위해 높은 권한이 필요한 프로그램에 유용합니다.

SUID 권한 실제 적용

SUID 권한이 어떻게 작동하는지 보여주는 간단한 예를 살펴보겠습니다. change_password라는 프로그램이 사용자가 자신의 암호를 변경할 수 있도록 한다고 가정해 보겠습니다. 이 프로그램은 일반적으로 root 사용자가 소유하고 권한이 제한된 암호 파일을 접근해야 합니다.

## 간단한 "change_password" 프로그램 생성
$ cat > change_password << EOF
#!/bin/bash
echo "사용자: \$USER의 암호 변경"
passwd \$USER
EOF
$ chmod +x change_password

기본적으로 change_password 프로그램은 root 사용자가 소유한 암호 파일을 접근할 수 없습니다. 하지만 change_password 프로그램에 SUID 비트를 설정하면 root 사용자의 효과적인 사용자 ID 로 실행되어 암호 파일을 접근할 수 있습니다.

## "change_password" 프로그램에 SUID 비트 설정
$ chmod +s change_password

이제 사용자가 change_password 프로그램을 실행하면, 사용자는 직접 암호 파일을 접근할 수 없더라도 사용자 자신의 암호를 변경할 필요한 권한을 갖게 됩니다.

잠재적인 보안 위험

SUID 는 유용한 기능이지만, 잠재적인 보안 위험도 수반합니다. SUID 프로그램에 취약점이 있거나 잘못 구성된 경우 공격자가 시스템에서 높은 권한을 얻을 수 있습니다. 따라서 시스템에서 SUID 프로그램을 주의 깊게 관리하고 모니터링하는 것이 중요합니다.

다음 섹션에서는 Bash 쉘에서 SUID 취약점을 식별하고 악용하는 방법을 살펴보겠습니다.

SUID Bash 취약점 악용

SUID 권한을 악용하는 일반적인 방법 중 하나는 Bash 쉘의 취약점을 노리는 것입니다. Bash 는 많은 Linux 배포판에서 기본 쉘이며, 종종 SUID 프로그램의 인터프리터로 사용됩니다.

SUID Bash 바이너리 식별

SUID Bash 취약점을 악용하기 위한 첫 번째 단계는 대상 시스템에서 SUID 가 활성화된 Bash 바이너리를 식별하는 것입니다. 다음 명령어를 사용하여 모든 SUID 가 활성화된 파일을 나열할 수 있습니다.

$ find / -type f -perm -4000 -exec ls -l {} \; 2> /dev/null

이 명령어는 전체 파일 시스템에서 SUID 비트가 설정된 파일을 검색하고 해당 파일의 권한과 소유자 정보를 표시합니다.

Bash Shellshock 취약점 악용

SUID Bash 바이너리를 악용하는 데 사용될 수 있는 잘 알려진 취약점 중 하나는 Bash Shellshock 취약점 (CVE-2014-6271) 입니다. 이 취약점을 통해 공격자는 Bash 환경 변수에 악성 코드를 주입하여 임의의 코드를 실행할 수 있습니다.

SUID 가 활성화된 Bash 바이너리에서 Shellshock 취약점을 악용하는 방법의 예는 다음과 같습니다.

## SUID Bash 바이너리 식별

## Shellshock 취약점 악용

이 예에서 먼저 SUID 가 활성화된 Bash 바이너리 (/usr/bin/sudo) 를 식별한 다음 x 환경 변수에 악성 코드를 주입하여 Shellshock 취약점을 악용합니다. 이를 통해 root 사용자의 높은 권한으로 id 명령어를 실행할 수 있습니다.

기타 SUID Bash 취약점

Shellshock 취약점 외에도 SUID 가 활성화된 Bash 바이너리에 악용될 수 있는 다른 취약점이 있을 수 있습니다. 이러한 유형의 취약점을 식별하고 완화하기 위해 최신 보안 권고 사항과 연구를 지속적으로 확인하는 것이 중요합니다.

다음 섹션에서는 SUID 권한 상승과 관련된 위험을 완화하기 위한 전략에 대해 논의하겠습니다.

SUID 권한 상승 위험 완화

SUID 권한 상승과 관련된 위험을 완화하기 위해서는 기술적 및 조직적 조치를 모두 포함하는 포괄적인 접근 방식을 채택하는 것이 중요합니다.

기술적 조치

SUID 프로그램 최소화

SUID 권한 상승 위험을 줄이는 가장 효과적인 방법 중 하나는 시스템에서 SUID 프로그램의 수를 최소화하는 것입니다. 정기적으로 SUID 가 활성화된 파일 목록을 검토하고 불필요하거나 사용하지 않는 프로그램을 제거합니다.

## 모든 SUID가 활성화된 파일 목록
$ find / -type f -perm -4000 -exec ls -l {} \; 2> /dev/null

최소 권한 구현

필요한 권한만큼 SUID 프로그램이 실행되도록 구성합니다. 필요한 작업이 수행된 후 권한을 내리는 setuid()setgid() 시스템 호출을 사용하여 이를 달성할 수 있습니다.

// 실행 후 권한을 내리는 예시 C 프로그램
#include <unistd.h>
#include <sys/types.h>

int main() {
    // 권한이 필요한 작업 수행
    // ...

    // 권한 내리기
    setuid(getuid());
    setgid(getgid());

    // 줄어든 권한으로 계속 실행
    // ...
    return 0;
}

정기적인 감사 및 업데이트

시스템에서 SUID 가 활성화된 파일을 지속적으로 모니터링하고 감사하며, 이러한 파일이 최신 상태이고 알려진 취약점이 없는지 확인합니다. 즉시 보안 패치 및 업데이트를 적용하여 악용 위험을 완화합니다.

조직적 조치

액세스 제어 구현

SUID 프로그램 사용을 규정하는 명확한 액세스 제어 정책을 수립합니다. 필요한 사용자 및 그룹에만 이러한 프로그램에 대한 액세스를 제한하고 필요에 따라 정책을 정기적으로 검토하고 업데이트합니다.

보안 인식 교육 제공

SUID 권한 상승과 관련된 위험 및 보안 모범 사례 준수의 중요성에 대해 직원을 교육합니다. 의심스러운 활동이나 잠재적인 취약점을 보고하도록 장려합니다.

사고 대응 및 모니터링

SUID 권한 상승 공격이 성공한 경우 수행할 단계를 명시하는 포괄적인 사고 대응 계획을 개발합니다. 이러한 사고를 신속하게 감지하고 대응하기 위해 강력한 모니터링 및 로깅 메커니즘을 구현합니다.

이러한 기술적 및 조직적 조치를 결합하여 SUID 권한 상승과 관련된 위험을 크게 줄이고 LabEx 시스템의 전반적인 보안을 강화할 수 있습니다.

요약

이 사이버 보안 튜토리얼은 bash 명령어에서 SUID 권한을 악용하는 방법에 대한 포괄적인 개요를 제공했습니다. 기본 개념을 이해하고 SUID 취약점을 식별하며 완화 전략을 구현함으로써 사이버 보안 방어를 강화하고 잠재적인 공격자를 앞서 나갈 수 있습니다.