본문 바로가기

블로그

LG CNS 기술블로그 DX Lounge에서 최신 IT 소식을 만나보세요!

보안

취약한 앱 설정으로 발생한 Directory Traversal(디렉터리 접근) 공격···조치법은?

2024.01.12

애플리케이션 설정이 취약하면 어떤 일이 발생할까요? 애플리케이션 취약점 점검 시, 여러 기준을 두고 취약점이 존재하는지 확인하는데요. 서비스 내 사용하는 파라미터를 조작하거나 비정상 패킷을 날려보면, 서버가 정상 로직이 아닌 비정상적 방식으로 작동하는 걸 볼 수 있습니다. 이에 대한 필터링이 없을 경우 공격자는 다음 공격을 위한 단서를 얻을 수 있고, 서버 가용성에 문제를 일으키는 등의 악의적인 행위를 할 수 있게 되는데요.

이번 글에서는 취약한 설정으로 인해 발생할 수 있는 공격 중 ‘Directory Traversal(디렉터리 접근 공격)’에 대해 알아보겠습니다. Directory Traversal은 기존 웹 서비스에서 보여줘야 하는 범위 이상의 디렉터리 혹은 파일에 접근을 시도하는 것을 의미합니다. 구체적인 공격 사례들과 함께 조치 방법을 살펴보겠습니다.

Case 1. Apache Directory Traversal (CVE-2021-41773 & CVE-2021-42013)

필터링 취약점 사례입니다. 2021년 Apache 2.4.49와 2.4.50 버전에서 상위 디렉터리 경로의 접근을 시도하는 문자열 필터링이 제대로 이뤄지지 않아, 허용된 웹 루트 내 접근이 아닌 시스템 파일에까지 접근할 수 있는 취약점이 발견된 건인데요.

[예시 페이로드]

http://[취약한 버전의 아파치 서버]/cgi-bin/%2e%2e/%2e%2e/%2e%2e/etc/passwd`%2e%2e(..)에 대한 경로가 제대로된 웹 URL 형태로 인식되지 못한다면 결국 시스템 내 /etc/passwd에 접근이 가능해집니다. 해당 취약점은 httpd.conf에서 디렉터리에 대한 접근 권한 설정 부분이 취약한 경우 발생합니다. Require 권한의 모든 엑세스가 열려있는 상황에서 해당 CVE(Common Vulnerabilities and Exposure) 취약점이 발생합니다.

[그림 1]

Case 2. Nginx Alias Traversal

디렉터리에 직접 접근해 디렉터리의 존재 유무를 알아내거나, 서비스의 취약한 설정과 취약점을 통해 서비스 시스템 파일에 접근할 수 있습니다. 이를 막기 위해 대부분의 웹 서비스들은 ../와 같이 상위 경로 디렉터리로 이동하려는 행위를 기본적으로 차단합니다. 예를 들어 [그림 2]와 같이 기본 설정의 Nginx 서버는 URL 위 ../ 입력 시 400 에러 메시지가 나옵니다. 이는 ../를 통한 Directory Traversal 공격이 기본적으로 유효하지 않음을 나타냅니다.

[그림 2]

Nginx 기반의 웹 서버에서 기본적인 공격 패턴을 시도해 보겠습니다.

도메인주소/URL 경로/../../../../etc/passwd → 400

URL 상위 디렉터리로 이동하는 것은 기본적으로 차단됩니다. 하지만 간혹 개발자의 Nginx 취약한 설정을 통해 웹 서비스 상위 디렉터리에 접근이 가능한 경우도 있습니다. 먼저 Nginx Location 기능은 특정 URL 경로 또는 패턴에 대해 정의하는 구문입니다. 도메인 주소가 (http://lgcns-sample.com)이고 /static으로 접근한다면 alias 지시문을 통해 서버 내 /static 디렉터리로 접근하는 경로는 /var/www/static으로 매핑돼 처리됩니다.

[그림 3]

하지만 location에서 설정한 매핑할 디렉터리 주소가 /(슬래시)로 닫히지 않는 경우 /static이라는 디렉터리 문자열만 매핑하게 되어 ../라고 하는 문자열을 상위 경로로 인식하게 됩니다. 예를 들어 lgcns-sample.com/static../log/nginx/access.log 라는 구문을 날리면 /static../log/nginx/access.log → /var/~~static~~/log/nginx/access.log → /var/log/nginx/access.log와 같이 접근이 될 것입니다. 해당 접근이 가능하다는 것은 원래 접근할 수 없는 디렉터리 및 파일에도 접근이 가능하다는 뜻입니다. [그림 4]와 같이 경로를 가정해 보도록 하겠습니다.

[그림 4]

location/static 경로에서 /(슬래시)로 닫히지 않기 때문에 ‘/static’ 글자만 매핑 시켜준다면 /home/ 경로로 접근이 가능해집니다. /home/test라는 가정의 홈 디렉터리로 이동할 수 있다면 ssh 키 혹은 bash_history를 다운받을 수도 있습니다.

[그림 5]

취약점 공격, 조치 방법은?

조치 방법은 생각보다 간단합니다. Location alias 구문을 사용할 경우, 매핑 시킬 경로를 항상/(슬래시)로 닫아주면 됩니다.

[그림 6]

Nignx 측에서는 해당 공격을 취약점으로 인정하지 않고, 사용자의 취약한 설정으로 인해 발생하는 문제라고 언급했습니다.

지금까지 Apache의 CVE-2021-41773와 Nignx의 CVE-2021-42013 Directory Traversal 취약점에 대해 알아보았는데요. 취약점에 대한 지속적인 관심과 적절한 대응이 중요하다는 사실, 잊지 마세요!

글 ㅣ LG CNS RED팀 김종훈 선임

챗봇과 대화를 할 수 있어요