1. 시큐어 코딩 - 소스코드 레벨 대응
첨부 파일 확장자 검증은 서버 사이드 스크립트에서 검증해야 함
첨부파일 확장자 검증은 "블랙리스트 차단" → "화이트 리스트 허용"으로 해야 함
// 블랙리스트
function file_upload_check_1($file, $file_extentions =
array("asp", "aspx". "dll", "exe", "jsp", "php"), $directory = "images")
//화이트리스트
function file_upload_check_2($file, $file_extensions =
array("jpeg", "jpg", "png", "gif"), $directory = "images")
<?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/20191110083.hwp"
// 파일 이름을 특정한 방식으로 바꾸어서 저장한다.
$newPath = '../upload/'.date('YmdHis').mt_rand().'.'.$filename_ext;
@move_uploaded_file($tmp_name, $newPath);
2. 시스템 보안 설정
Apache 설정 파일인 httpd.conf에 업로드되는 파일을 저장하는 디렉터리에 대한
문서 타입을 컨트롤하기 위해 Directory 섹션의 AllowOverride 지시자에서 FileInfo 또는 All 추가
AccessFileName .htaccess
<Directory "/var/www/htdocs/upload/">
AllowOverride FileInfo
</Directory>
파일 업로드 디렉토리에 .htaccess 파일 만들고
AddType 지시자를 이용해서 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. 웹쉘차단 솔루션 활용
- PHPDETECT
데이터베이스에서 가지고 있는 웹쉘 파일 해시값을 통해 스크리닝
소스코드 내 문자열 스크리닝 - NeoPI
악성코드 여부 판단 (일치계수, 긴 문자열, 엔트로피 수치)
악성코드일 확률을 점수화한다.
IC(Index of Coincidence)
문장에 사용하는 텍스트 비율을 통계를 통해 암호화 여부를 확인한다.
정상적인 텍스트 비율이 아닌 많은 특수문자나 비정상적인 텍스트가 사용되었는지
Entropy
엔트로피는 어떠한 데이터를 표현하기 위한 평균 정보량을 의미.
데이터가 많을수록 엔트로피가 높은 파일이고, 암호화된 텍스트가 많으면 파일의 엔트로피가 높아짐.
LongestWord
가장 긴 문자열을 식별하여 웹쉘을 찾아내는 방식 - php-malware-finder
악성코드에서 자주 사용되는 패턴을 찾아 특정 수 이상이 발견될 시 의심 (Yara Rule)
Base64, Hex와 같은 인코딩 방식을 인식하여 관련 파일을 해독/분석 후에 탐지 범위를 넓힘
화이트리스트 방식을 채택하여 검증함으로 오탐을 줄임 - webshell-scanner-client
golang으로 만들어진 오픈소스 솔루션
바이두에서 제공하는 서비스로 현재 무료 API를 제공
'Security Project' 카테고리의 다른 글
46. metasploit 시스템 침투 심화 (0) | 2023.01.25 |
---|---|
45. 시스템 침투 / 포트포워딩 (0) | 2023.01.24 |
43. 파일 업로드 취약점 조건 및 우회 (0) | 2023.01.23 |
42. 파일업로드 취약점 이해와 공격 목적 (0) | 2023.01.15 |
41. Error based SQL Injection 실습 (0) | 2023.01.11 |
댓글