1. File Inclusion 취약점이란?
웹 애플리케이션이 파일을 동적으로 포함할 때, 사용자가 직접 입력한 값이 포함될 경우 악의적인 파일을 불러오거나 실행할 수 있는 취약점을 의미합니다.
여기서 동적이라는 의미는 사용자의 입력이나 변수 값에 따라 다른 파일을 불러와 실행하는 것을 의미합니다.
즉, 정해진 파일이 아니라, 사용자의 요청이나 특정 조건에 따라 불러오는 파일이 달라지는 방식입니다.
공격자는 해당 취약점을 통해, 3가지의 악의적인 행위를 수행할 수 있습니다.
1. 악성 스크립트 포함시켜 서버내에서 악성 코드를 실행
2. 서버내에 중요한 파일(/etc/passwd) 유출
3. 웹 업로드
2. File Inclusion 유형
File Inclusion 취약점은 로컬 파일 포함(Local File Inclusion, LFI)과 원격 파일 포함(Remote File Inclusion, RFI) 두 가지로 나뉩니다.
1. Local file inclusion (LFI)
- 서버에 있는 로컬 파일을 포함시키는 취약점
- 서버의 /etc/passwd를 읽는 경우가 이에 해당
- 이를 활용해../../../../etc/passwd 같은 경로 탐색(Path Traversal) 공격도 가능
2. Remote file inclusion (RFI)
- 공격자가 외부의 악성 파일을 포함하는 방식
- 원격 코드를 실행하여 웹쉘(Web Shell) 설치 가능
File Inclusion 실습
실습 환경의 경우 리눅스 환경에서 DVWA 환경을 구축한 후 가장 취약한 환경인 Low 레벨 환경에서 실습을 진행하였습니다. 또한 해당 실습을 위해서는 세팅에서 allow_url_include enable 설정이 필요합니다.
세팅은 완료했으니, 다시 File Inclusion탭에 들어가 실습을 진행합시다.
file1, file2 들어가 보니, URL에 어떤 경로에 접속하여 페이지가 보이는지 유추가 가능합니다.
1. file1 들어가면, file1.php에서 가져옴
2. file2 들어가면, file2.php에서 가져옴
LFI 실습
로컬에 있는 etc/passwd 들어가면 그거도 가져오는지 해봅시다.
이런 식으로, etc/passwd가 노출된 것을 확인할 수 있습니다.
이렇게 서버안에 있는 로컬파일을 가져오게 만드는 방법을 LFI(Local File Inclusion)이라고 합니다.
추가로 이런 식으로 ../ 를 6번 이상 작성하여, etc/passwd를 확인하는 방법도 있습니다.
이렇게 디렉토리 구조를 거슬러 올라가면서 원하는 파일에 접근하는 공격 기법을 path 트래버셜 공격이라고 합니다.
(참고) 왜 ../을 6번 이상 작성하냐면, 대부분의 웹 애플리케이션의 디렉터리 구조가 root까지 최대 6단계 정도의 깊이를 가지고 있기 때문입니다.
RFI 실습
이런식으로 google.com을 입력하면, 접속할 수 있는 것을 볼 수 있는데
이를 악용하면 외부에서 호스팅 된 악성 스크립트나 파일을 웹 애플리케이션에서 실행시킬 수 있습니다.
이를 악용하면, 공격자가 원격 웹서버에서 악성 코드를 실행시키는 것도 가능한데,
이걸 RFI(Remote File Inclusion)라고 합니다.
대응방안
1. 사용자 입력 검증
- 시큐어 코딩을 통해 특정 확장자, 특정 파일, 특정 경로만 접근할 수 있도록 화이트 리스트 방식을 사
- 정규식을 이용해 경로 탐색(../, /etc/passwd) 등을 차단
2. 외부 URL 포함 차단
- allow_url_include 설정을 Off로 변경 (PHP)
3. 서버 설정 강화
- 웹 방화벽(WAF) 적용