루트는 사용자가 애플리케이션이나 서비스를 실행하기 위해 운영 체제 내에서 격리된 환경을 만들 수 있는 Linux의 기능입니다. 이를 통해 시스템의 다른 부분에 영향을 주지 않고 테스트 및 디버깅을 수행할 수 있습니다.
이 문서에서는 루트에 대해 자세히 알아보고 그 장점, 사용 시나리오, Linux 운영 체제에서 루트를 구성하는 절차, 필요한 경우 루트에서 벗어나는 방법에 대해 살펴봅니다.
Linux에서 루트란 무엇인가요?
루트 또는 변경 루트는 오래되었지만 효과적인 소프트웨어 컨테이너화 방법입니다. 이를 통해 사용자는 애플리케이션과 서비스를 미리 정해진 리소스가 있는 제한된 환경에 배치하여 안전하게 격리할 수 있습니다. 이 기술은 파일 시스템의 루트 디렉터리를 컨테이너 내의 특정 위치로 변경하여 애플리케이션/서비스와 호스트 시스템을 완전히 분리할 수 있도록 합니다.
루트는 프로그램의 루트 디렉터리를 변경한다는 점에서 도커와 유사하지만, 도커와 달리 네트워킹이나 사용자 관리와 같은 추가 기능을 제공하지 않습니다. 대신, 주요 기능은 추가 보안 조치를 위해 액세스 및 가시성을 제한하는 것입니다.
본질적으로 별도의 폴더를 설정하고 프로그램의 모든 요구 사항을 이 폴더로 전송한 다음 마지막으로 루트 명령을 실행합니다. 이렇게 하면 루트 파일 시스템에 액세스하지 않으면서도 애플리케이션이 의도한 대로 작동할 수 있습니다.
요약하자면, 프로그램을 루팅하는 목적은 프로그램의 안정성을 보장하고 중요한 시스템 파일의 잠재적 손상을 방지하는 것입니다. 실제 시스템에 영향을 미치지 않는 통제된 테스트 환경을 허용하는 동시에 다양한 조건에서 프로그램이 어떻게 작동하는지에 대한 귀중한 통찰력을 제공합니다. 또한 패키지를 중요한 파일과 격리하여 패키지 내의 취약점으로 인해 발생할 수 있는 사이버 위협의 위험을 최소화합니다.
이 프로그램은 “루트 감옥”이라고 하는 특수 디렉터리로 가져온 파일에만 액세스할 수 있습니다. 이는 프로그램과 해당 프로세스가 기본 시스템에 장애를 일으키는 것을 방지하기 위한 것입니다.
루트 자일이란 무엇인가요?
다른 말로 표현하면 다음과 같습니다: 루트 자일은 일반 파일 시스템의 어떤 부분에도 액세스하거나 볼 수 없이 특정 프로그램을 실행할 수 있는 안전한 독립된 환경입니다. 이러한 유형의 설정은 프로그램을 내부에 효과적으로 “루트”하여 액세스를 제한하고 지정된 영역을 벗어나지 못하도록 하기 때문에 “루트”라고 합니다.
이제 앞으로 나아가서 루트 감옥을 만들고 그 안에서 프로세스를 실행하는 과정을 살펴봅시다.
루트 자일을 만들고 그 안에서 프로그램을 실행하는 방법
루트 자일은 파일, 바이너리 및 기타 필요한 리소스를 포함하여 프로그램이 올바르게 작동하는 데 필요한 모든 것을 포함하는 디렉터리입니다.
일반적인 Linux 설정과 달리 루트 환경에서는 외부 파일 및 시스템 리소스에 대한 액세스가 엄격하게 제한됩니다.
필요한 모든 구성 요소와 함께 Bash 실행 파일을 루트 감옥으로 전송해야 합니다.
루트 감옥을 생성하고 그 안에서 Bash 셸을 실행하려면 다음 단계를 따르세요:
which bash
ldd /usr/bin/bash
이제 바이너리의 위치와 종속성을 확인했으므로 `mkdir`로 필요한 하위 디렉터리를 만들고 `cp`를 사용하여 모든 관련 파일을 각 하위 디렉터리에 복사하여 해당 파일을 원하는 디렉토리로 이동합니다.
요약하면, 프로그램과 해당 종속 파일을 대상 디렉터리에 복사한 후 `sudo`를 사용하여 관리자 권한으로 `chroot` 명령을 실행할 수 있습니다. 그러면 지정된 디렉터리에 루트 계정에 직접 연결된 것처럼 시스템과 상호 작용할 수 있는 환경이 만들어집니다. 이 환경의 기본 셸은 Bash이지만 명령에서 “bash”를 원하는 셸 이름으로 대체하여 다른 셸을 지정할 수 있습니다.
루트 감옥을 만들고 그 안에서 애플리케이션을 실행하려면 다음 단계를 따르세요:
루트 탈옥 방법
루트 탈옥은 불안정한 소프트웨어를 테스트하고 특정 디렉터리 또는 파일에 대한 액세스를 제한하여 SSH 서버의 보안을 강화하는 데 효과적일 수 있습니다. 연결된 사용자는 지정된 디렉터리 외부의 민감한 영역에 액세스하는 기능을 제한하는 루팅을 통해 보안을 유지할 수 있습니다.
SSH 연결을 통해 원격 시스템에 액세스했지만 시스템이 루팅된 것을 발견한 모의 침투 테스터라면 이러한 상황이 실망스러울 수 있으며 노력에 장애가 되는 것처럼 보일 수 있습니다.
잘못 구성된 루트 감옥에서 탈출하는 몇 가지 방법에는 C 프로그래밍 기술을 사용하거나 프로세스를 자동화하는 툴을 활용하는 방법이 있습니다. 이를 위한 몇 가지 간단한 기술은 다음과 같습니다:
여러 개의 루트 호출 중첩.
주어진 텍스트는 프로세스가 ‘루트’ 시스템 호출에 중첩 호출을 하고 있으며 저장된 파일 설명자를 사용하고 있는 상황을 설명합니다.
“마운트 루트 메서드”라는 문구는 몇 가지 다른 의미를 가질 수 있지만, 문맥에 따라 파일 시스템을 디렉터리에 마운트하거나 첨부하는 것과 관련된 컴퓨터 과학의 프로세스를 나타낼 수 있습니다.즉, 특정 명령이나 도구를 사용하여 파일 시스템을 컴퓨터의 저장소 계층 구조 내의 특정 위치에 연결할 수 있습니다.
`procfs escape` 명령은 셸 세션에서 종료하고 상위 프로세스로 돌아가는 데 사용됩니다. 이 명령을 사용하면 자식 프로세스에서 벗어나 부모 프로세스에서 실행을 재개할 수 있습니다. 자식 프로세스 내에서 일부 작업을 수행하지만 부모 프로세스를 제어할 수 있는 기능이 있을 때 유용할 수 있습니다.
프로세스 추적에서 이스케이프되었습니다.
이러한 방법 중 하나를 사용하여 루트 이스케이프를 수행하려면 시스템에서 에스컬레이션된 권한이 있어야 한다는 점에 유의하세요. 이러한 탈출 방법에 대한 자세한 내용은 chw00t의 GitHub 리포지토리 , 루트 탈출 자동화 도구로 이동하여 알아보세요.
이제 리눅스에서 루트에 대한 모든 것을 알았습니다
이제 루트의 정의, 기능, 구현 프로세스 등 루트에 대해 배웠습니다. 이제 이러한 기술을 활용하여 터미널 내에서 특정 애플리케이션을 위한 격리된 환경을 쉽게 만들 수 있습니다. 그러나 루팅된 환경에서 벗어날 수 있는 다양한 방법이 있다는 것을 기억하세요.
위의 내용은 루팅이 보안 수단으로 의도된 것이 아니므로 시스템의 무결성을 위협할 수 있는 잠재적 위험을 피하기 위해 신중한 고려가 필요하다는 점을 강조합니다.
컨테이너화 소프트웨어 또는 가상 머신과 같은 전용 샌드박싱 솔루션은 샌드박싱과 보안에 중점을 두므로 사용하는 것이 좋습니다. 이러한 솔루션은 시스템의 안정성과 신뢰성을 손상시키지 않으면서 제로데이 공격을 포함한 대부분의 위협에 대한 보호 기능을 제공할 수 있습니다.
컨테이너화 또는 가상화 소프트웨어 사용 여부를 결정하는 한 가지 방법은 두 가지 옵션을 모두 테스트하여 필요에 가장 적합한 옵션을 결정하는 것입니다.