Skip to content

조회 수 7520 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

오늘은 PHP보안에 있어 중요하지만 또한 많은 사람이 모르고 있는 open_basedir이라는 옵션에 대해 이야기 해보도록 하자.

우선 내가 운영하는 서버의 경우 php.ini에 다음과 같은 무식한 옵션이 있었다.

 

disable_functions = php_uname, putenv, getmyuid, getmypid, passthru, leak, listen, diskfreespace,
tmpfile, link, ignore_user_abord, shell_exec, popen, dl, set_time_limit, exec, system,
highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd,
posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups,
posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam,
posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo,
posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times,
posix_ttyname, posix_uname

 

이 얼마나 무식한가? 하지만 저것도 다 막은것이 아니다.

심지어 fopen같은 경우에는 사용하는 웹어플리케이션이 너무 많아 막을수가 없었다.

뭐랄까, 도둑이 들까봐, 창문 잠그고 굴둑도 막아버렸는데, 대문을 활짝 열어놓은 기분이랄까?

PHP에는 safe_mode라는 훌륭한 보안 모드가 있다. 하지만 이것을 사용하면 대부분의 웹어플리케이션이 비정상 작동을 하게 된다.

제로보드가 잠식하고 있는 우리나라의 웹호스팅 업계에서는 엄두도 낼수 없는 옵션이다.

다음과 같은 코드를 작성하여 실행해 보자.

 

<?
    $fp=fopen("/etc/passwd", "r");
    while(!feof($fp)) {
        print(fread($fp, 4096));
        flush();
    }
?> 

 

어떤 결과가 나오는가? 아주 멋지게 우리가 필요로 하는 정보를 내뿜어 준다.

disable_function에 fopen을 추가해 보자. 수많은 난관을 만나게 된다. 당장에 테터툴즈가 설치가 안되더라;

php.ini에 있는 open_basedir에 현재 서비스 하고 있는 페이지의 Document Root를 넣어보자. (예 : /var/www)

그리고 다시 시도해보자. 되는가? 잔인한 Fatal Error를 만나게 될것이다.

하지만 마찬가지로, PHP에서 세션을 저장하거나 업로드 파일을 올릴때 사용하는 /tmp등도 접근할수 없게 된다.

어떻게 해야 할까? 옵션을 지정할때 :를 구분자로 주어 여러개 지정할수 있다.

 

open_basedir /var/www:/tmp

 

와 같이 설정해보자. 어떤가? 잘 되는것을 확인할수 있다.

안된다면 upload_tmp_dir 와 session.save_path 가 /tmp로 지정되어있는지부터 확인하여야 할것이다.

만약에 웹호스팅을 하고 있다면? open_basedir옵션이 없으면 더더욱 골치가 아파지게 된다.

누구든지 다른 사람의 계정의 파일을 열어볼수 있다면? “항상 적은 내부에 있다”

apache의 설정파일에서 VirtualHost부분을 찾아서 다음과 같이 php_admin_value로 값을 설정하자.

 

<VirtualHost *>
    DocumentRoot /home/USER
    ServerName USER.domain
    <IfModule mod_php5.c>
        php_admin_value open_basedir /home/USER:/tmp
    </IfModule>
</VirtualHost>

 

이런식으로 모든 가상호스트에 대해 설정을 하면 동일한 결과를 볼수 있다.

하지만 이것은 PHP의 함수들에 대한 제제일뿐이다. system(“cat /etc/passwd”)같은 명령은 어찌할수가 없다.

system명령을 disable_function에 추가해 버릴까? 이부분에 대해서는 다음에 좀더 이야기 해보도록 하자.

PS : upload_tmp_dir, session.save_path 을 /tmp가 아닌, 다른곳으로 변경한다면, 웹인젝션을 시도하는 나쁜놈들이 좀더 헷갈리게 할수 있겠죠?

 

출처 : http://theeye.pe.kr/archives/232


  1. CentOS Portsentry 1.2 소스설치 오류

    Date2014.01.19 ByADMINPLAY Views7052
    Read More
  2. PHP 보안의 약방의 감초 open_basedir

    Date2014.01.02 ByADMINPLAY Views7520
    Read More
  3. Portsentry 1.1 설치하기

    Date2012.01.16 ByADMINPLAY Views15094
    Read More
  4. [그누보드관련] $_POST 는 이미 오염된(?) 변수다.

    Date2010.11.18 ByADMINPLAY Views16121
    Read More
  5. iptables와 mod_security 연동을 통한 ip 차단

    Date2010.09.15 ByADMINPLAY Views19763
    Read More
  6. Modsecurity 무료 웹방화벽 설치

    Date2010.09.12 ByADMINPLAY Views24049
    Read More
  7. Modsecurity-apache 2.5.X 설치중 에러 server: /usr/lib/...

    Date2010.09.12 ByADMINPLAY Views21285
    Read More
  8. Modsecurity-apache 2.5.12

    Date2010.09.12 ByADMINPLAY Views18707
    Read More
  9. modsecurity-2.5 configure: *** apr library not found.

    Date2010.09.12 ByADMINPLAY Views21131
    Read More
  10. iptables를 이용한 SSH brute force 공격방어

    Date2010.05.29 Byl2zeo Views19686
    Read More
  11. PHP 보안관련 설정 권고사항

    Date2010.05.19 ByADMINPLAY Views20208
    Read More
  12. php 수호신 설치

    Date2010.05.03 ByADMINPLAY Views20824
    Read More
  13. denyhosts (ssh, ftp 등의 접근 차단)

    Date2010.05.03 ByADMINPLAY Views21358
    Read More
  14. 웹어플리케이션 보안

    Date2010.05.03 ByADMINPLAY Views17148
    Read More
  15. php.ini 보안 설정

    Date2010.05.03 ByADMINPLAY Views20373
    Read More
  16. 해킹 당했는지 알아보는 방법

    Date2010.05.03 ByADMINPLAY Views19977
    Read More
  17. [적용] iptables 접속 차단 스크립트

    Date2010.05.03 ByADMINPLAY Views25616
    Read More
  18. 보안 체킹 프로그램 - portsentry

    Date2010.04.27 ByADMINPLAY Views16166
    Read More
  19. /etc/passwd 구조

    Date2010.03.31 Byl2zeo Views34919
    Read More
  20. 매직키를 이용한 응급복구법

    Date2010.03.31 Byl2zeo Views32083
    Read More
Board Pagination Prev 1 2 3 4 5 Next
/ 5

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234