profile image

L o a d i n g . . .

파일 업로드 취약점 공격

  • 웹 서비스 첨부 파일, 환경 설정 미흡을 이용하여 악의적인 스크립트가 포함된 파일을 업로드 한 후에 웹 서버에 침투를 하는 공격
  • 공격자는 서버 사이드 스크립트(PHP, JSP, .NET 등)을 이용하여 웹쉘(WebShell)을 제작
  • 웹쉘(WebShell)은 원격에서 웹 서버를 제어하기 위한 목적으로 만들어졌으나, 지금은 웹쉘 = 악성코드라고 분류를 하여 안티 바이러스에서 탐지함
  • 게시판 첨부 파일, 이력서 첨부 파일, 이미지 첨부 파일, 웹 채팅방 파일 공유 기능 등에서 발생
  • 직접 만들어 사용할 수 있으나, https://github.com/tennc/webshell 같은 깃허브에서 쉽게 구할 수 있음

 

 

 

파일 업로드 취약점 공격의 목적

1. 웹 서버를 통해 데이터베이스의 정보를 획득

  • 데이터베이스에 직접 공격을 할 수 없기 때문에, 웹 서버를 침투한 후 소스코드내 데이터베이스 연결 정보를 통해 개인 정보 쿼리(Query)
  • 웹 서버를 통해 데이터베이스의 2차 공격 진행도 가능함

 

출처 : 보안프로젝트

 

sql injection 과 다른점 : 웹에서 노출되는 정보들을 하나씩 가져오는 sql injection 과 달리 파일 업로드 취약점은 웹쉘을 통해 시스템에 아예 침투하고 난 뒤 원하는 데이터들을 마음껏 가져오는 것

 

 

2. 웹 서버를 시작으로 근접 네트워크 침투

  • 데이터베이스에 직접 공격을 할 수 없기 때문에, 웹 서버를 침투한 후 내부 시스템의 정보 획득
  • 내부 포탈 서버, 로그 서버 등 내부 시스템을 대상으로 포트포워딩(Port Forwarding), 터널링 기법을 통해 공격자와 직접 연결을 함

출처 : 보안프로젝트

 

 

 

파일 업로드 취약점 대응 방안

1) 시큐어 코딩 - 소스코드 레벨 대응

  • 첨부 파일 확장자 검증은 서버 사이드 스크립트에서 검증해야 함.
  • 첨부파일 확장자 검증은 "블랙 리스트의 차단"이 아닌 "화이트 리스트의 허용"으로 해야 함

 

시큐어 코딩 - 소스코드 레벨 대응 (PHP)

<?php
$tmp_name = $_FILES['Filedata']['tmp_name'];
$filename = $_FILES['Filedata']['name'];
$filename_ext = strtolower(array_pop(explode('.',$filename)));
$allow_ext = array("jpg", "png", "hwp", "pptx", "docx", "xlsx", "pdf");
if(!in_array($filename_ext, $allow_ext)) {
echo "허용되지않는 확장자 파일입니다.";
exit;
}
// 파일 이름의 예: "../upload/20191109231417212120083.hwp"
$newPath = '../upload/'.date('YmdHis').mt_rand().'.'.$filename_ext;
@move_uploaded_file($tmp_name, $newPath);
?>

 

 

2) 시스템 보안 레벨

: 파일이 올라가는 서버의 경우 분리를 시켜서 관리를 하고, 모든 실행 권한을 뻬버리는게 좋다.

-> 비용적으로 부담이 됌.

 

  • Apache 설정 파일인 httpd.conf에 해당 디렉토리에 대한 문서 타입을 컨트롤하기 위해 Directory 섹션의 AllowOverride 지시자에서 FileInfo 또는 All 추가
#httpd.conf 파일 내용
AccessFileName .htaccess
<Directory "/var/www/htdocs/upload/">
AllowOverride FileInfo
</Directory>

 

 

  • 파일 업로드 디렉토리에 .htaccess 파일을 만들고 다음과 같이 AddType 지시자를 이용, 현재 서버에서 운영되는 Server Side Script 확장자를 text/html로 MIME Type을 재조정하여 업로드 된 Server Side Script가 실행되지 않도록 설정
#.htaccess파일 내용
<.htaccess>
<FilesMatch “\.(ph|inc|lib)”>
Order allow, deny
Deny from all
</FilesMatch>
AddType text/html .html .htm .php .php3 .php4 .phtml .phps .in .cgi .pl .shtml .jsp

 

 

3) 웹셀 차단 솔루션 - 지속적인 모니터링

복사했습니다!