Post

웹 보안 이론 4

LFI(Local File Inclusion) & RFI(Remote File Inclusion)

개념

  • LFI
  • 서버의 로컬 파일을 읽거나 실행할 수 있게 하는 취약점.
  • 웹 애플리케이션의 취약한 파라미터에 악의적인 파일 경로를 삽입하여 악성 스크립트를 실행.

  • RFI
    • 웹 애플리케이션이 외부 URL을 포함할 수 있도록 허용하는 취약점.
    • 공격자가 외부 URL에 있는 악성 파일을 삽입하고 실행.

공격 기법

  • LFI
    1. 파일 경로 조작: 상대/절대 경로를 이용하여 민감한 파일 접근.
    2. 특수 문자 이용: %00(널 바이트) 등의 특수 문자를 이용해 필터링 우회.
    3. PHP Wrapper 이용:
      • php://filter를 활용하여 파일 내용을 Base64로 변환 후 출력.
    4. 로그 파일 Poisoning:
      • 웹 서버 로그 파일에 악성 코드를 삽입한 후 실행.
  • RFI
    1. 악성 URL 삽입: 취약한 파라미터에 공격자가 제어하는 외부 URL 삽입.
    2. 원격 파일 로드: 악성 스크립트가 포함된 외부 파일 실행.

우회 기법

  • LFI
    1. 인코딩: URL 인코딩, 더블 URL 인코딩 등.
    2. 널 바이트: 파일 확장자 검증 우회.
    3. 경로 변형: ../ 등을 사용해 상위 디렉토리로 이동.
    4. 대체 문자: .., / 등을 %2e, %2f로 대체.
  • RFI
    1. DNS Rebinding: 방화벽 우회.
    2. URL Shortener: 악성 URL을 숨김.
    3. HTTP Request Smuggling: 방화벽이나 필터링 우회.

소스코드

  • LFI 취약 코드
1
2
3
4
5
6
7
8
<?php
    $file = $_GET['page'];
    if (isset($file)) {
        include($file . '.php');
    } else {
        include('home.php');
    }
?>
  • RFI 취약 코드
1
2
3
4
5
6
7
8
<?php
    $page = $_GET['page'];
    if(isset($page)){
        include($page);
    } else {
        include('home.php');
    }
?>

LFI VS RFI

항목LFIRFI
목적로컬 파일 읽기/실행외부 URL에서 악성 파일 실행
공격 방식업로드된 파일 포함외부 서버의 악성 스크립트 실행
위험성중요 정보 유출, Dos 공격피싱 공격, 웹 사이트 변조

명령어 입력(Command Input) 공격

개념

  • 웹 애플리케이션의 취약점을 이용해 공격자가 운영 체제 명령을 실행하는 공격 기법.
  • 주로 사용자 요청을 처리하기 위해 시스템 명령어를 사용하는 경우 발생.
  • 예시:
    1
    2
    
    String fileName = request.getParameter("fileName");
    Runtime.getRuntime().exec("ls -l " + fileName);
    
  • 파일 업로드 기능에서 저장 경로를 지정하거나, 이미지 크기 조정 작업 등에 시스템 명령어를 사용하는 과정에서 악용 가능.

위험성

  1. 데이터 유출
    • 공격자가 민감한 데이터를 탈취하여 악용.
    • 예: 데이터베이스 정보, 사용자 계정 정보 등.
  2. 시스템 장악
    • 서버의 권한을 탈취하여 운영 체제를 제어.
    • 공격자는 임의의 명령 실행, 파일 삭제, 시스템 설정 변경 등을 수행.
  3. 서비스 마비
    • 시스템 자원을 과도하게 소모하거나 주요 서비스를 중단시킴.
    • 예: 서버의 디스크를 가득 채우는 공격.
  4. 악성코드 유포
    • 서버를 통해 악성코드를 배포하여 추가 피해를 발생.
    • 예: 웹 페이지 방문자를 대상으로 랜섬웨어 배포.

공격 기법

  1. HTTP 요청 파라미터
    • URL 쿼리 문자열, POST 데이터, HTTP 헤더 등에서 악성 명령 삽입.
    • 예:
      1
      
      http://example.com/upload?fileName=; rm -rf /
      
  2. 쿠키
    • 쿠키 값에 악성 명령을 삽입하여 서버가 처리하는 시점에 실행.
    • 예:
      1
      
      Set-Cookie: session=abc123; ls -al
      
  3. 파일 업로드
    • 파일 이름 또는 파일 내용에 악의적 명령을 포함.
    • 예:
      1
      
      evil.jpg; rm -rf /
      
  4. 외부 라이브러리
    • 외부 라이브러리에서 사용자 입력 값을 검증하지 않고 처리.
    • 예: 이미지 처리 라이브러리의 취약점을 이용해 명령 실행.

우회기법

  1. 특수문자 필터링 우회
    • 필터링되지 않은 문자나 대체 문자를 사용하여 명령어 실행.
    • 예: |, &, ;
  2. 명령어 연결
    • 여러 명령을 연결하여 실행.
    • 예:
      1
      
      ls -l; cat /etc/passwd
      
  3. 공백 우회
    • 공백 대신 %20이나 \t 등 다른 문자를 사용.
    • 예:
      1
      
      cat%20/etc/passwd
      
  4. 이스케이프 시퀀스
    • 이스케이프 문자를 사용하여 필터링을 우회.
    • 예:
      1
      
      \; echo "hacked"
      

방어 방법

  1. 입력값 검증
    • 사용자 입력값에서 명령어 관련 특수문자를 제거하거나 철저히 검증.
    • 예: 필터링 및 인코딩.
  2. 화이트리스트 기반 접근
    • 허용된 값만 처리하도록 정책 설정.
    • 예: 파일 확장자 및 입력 데이터 제한.
  3. 외부 명령어 사용 제한
    • 시스템 명령어 사용을 최소화하거나 안전한 대안 사용.
    • 예: OS 명령 호출 대신 라이브러리 함수 사용.
  4. 권한 제한
    • 시스템 명령을 실행하는 프로세스에 최소 권한 부여.
    • 예: 특정 사용자 계정으로 명령 실행 제한.
  5. WAF(Web Application Firewall)
    • 명령어 입력 공격 패턴을 탐지하고 차단.
    • 예: 공격 시도 탐지 및 실시간 차단.
  6. 보안 로그 및 모니터링
    • 서버 로그를 정기적으로 점검하여 이상 활동 탐지.
    • 예: 비정상적인 명령 실행이나 파일 업로드 기록 확인.