2008년 3월 16일 일요일

웹 어플리케이션 취약점 종류 및 해결 방법

1) upload 취약점

.php .ph 등의 file을 업로드 한 후 bindshell을 통해 웹서버 권한을 획득하는 기법이다. 이러한 스크립트가 파일이 저장되는 디렉토리에 대해서 소스처리 하는 방법이다.

아파치(Apache) 설정 예제는 다음과 같다.




AddType application/x-httpd-php3-source .phps .php .ph .php3 .cgi .sh
.pl .html .htm .shtml .vbs .ins
AddType application/x-httpd-php-source .phps .php .ph .php3 .cgi .sh
.pl .html .htm .shtml .vbs .ins



Order allow,deny
Deny from all



2) setup file 노출

아파치의 httpd.conf에 다음 줄을 추가하여 패스워드, 데이터베이스 등의 설정파일이 노출되는 문제를 해결할 수 있다.

AddType application/x-httpd-php .php .php3 .ph .inc


3) 디렉토리, 파일 인가(Directory, File Permission)

웹 어플리케이션 설치 시 Directory 및 해당 File이 모든 유저에 대해 쓰기권한이 적용되는 경우가 존재한다. nobody를 제외한 유저들의 쓰기 권한을 제거하고, 해당 글이 저장되는 파일에 대한 인가(permission)을 검사한다.


4) shell 실행 함수 및 파일 오픈관련 함수

system(), passthru(), exec(), popen(), escapeshellcmd(),` `(Backticks) 및 fopen(), include() 함수 등을 사용할 경우, 메타캐릭터 문자인 .<>*|'&;$!#()[]{}:"/^\n\r 를 제거해주도록 하자.


5) 버퍼 오버플로우(Buffer Overflow)

아래와 같은 종류의 함수를 사용할 때는 버퍼 크기에 주의하도록 한다.

gets (),getenv(), strcpy (), strcat (), sprintf (),
fscanf (), scanf (), sscanf (), vscanf(),vsscanf (),
vfscanf(),vsprintf (),realpath (), getopt (), getopt_long(),
getpass (), streadd (),strecpy (), strtrns ()

되도록이면 bcopy(), fgets(), memcpy(), strncpy(), snprintf(), strccpy(), strcadd(), vsnprintf()으로 대체해서 사용하도록 한다.


6) SQL Injection

웹 어플리케이션은 보통 데이터베이스와 연동이 되는 경우가 많다.

SQL Injection은 사용자의 입력이 필요한 곳에 SQL Query 문을 넣어 악의적인 명령어를 수행하는 기법이다. 이에 대한 해결책으로는 사용자의 입력이 필요한 부분에 <>*|'&;$!#()[]{}:"/^\n\r 등의 쉘 메타캐릭터를 사용하지 못하도록 제거하는 것이다.

PHP의 설정화일인 php.ini에서는 보안을 강화하는 옵션이 존재한다. 다음 옵션을 조정하여 보안을 강화시킨다.

allow_url_fopen = Off
magic_quotes_gpc = On
register_globals = Off

현재 국내에서 사용되는 KorWeblog 그누보드, 제로보드, 테크노트등의 취약점이 존재하므로, 보안패치를 적용하지 않은 사용자들은 즉시 보안패치를 적용하도록 하자.

댓글 없음: