홈페이지 취약점 분석 이야기 파일 지도 사진 깨알






>> 목록보이기
#PHP Easter Egg #PHP 버전 #expose_php #X-Powered-By #ServerTokens #조치방안

PHP 부활절달걀(PHP Easter Egg)

"이스터 에그(Easter egg)는 영화, 책, CD, DVD, 소프트웨어, 비디오 게임 등에 숨겨진 메시지나 기능을 뜻한다. 이스터 에그라는 이름은 서양권에서 부활절에 달걀을 미리 집안이나 정원에 숨겨두고 아이들에게 부활절 토끼가 숨겨놓은 달걀을 찾도록 하는 부활절 달걀 찾기 풍습에서 유래했다. 최초의 이스터 에그는 1978년에 발매된 아타리 2600용 비디오 게임 Adventure에서 유래한 것으로 알려져 있는데, 그 내용은 특정 픽셀 단위로 지나가면 이스터 에그를 넣은 프로그래머의 이름이 나온다."
- 위키피디아

소프트웨어 개발자들은 설명서에는 나오지 않는 기능을 숨겨놓는 경우가 종종 있다. 개발자 이름을 숨겨놓기도 하고, 도움을 준 사람들에게 고마움을 표하기도 한다. Android에서는 설정에서 "안드로이드 버전"을 여러번 누르면 버전에 따라 각기 다른 이스터에그가 나타난다. 다음 그림은 Android 7.0 Nougat의 이스터에그이다. Nougat의 'N'과 일본어 네코(neko)에서 영감을 받았을 것으로 추정되는 고양이 그림이 나타난다.

안드로이드 7.0 누가 부활절달걀, 네코, 고양이
[ 안드로이드 7.0 누가(Nougat)의 이스터에그: 'N' 자 밑에 고양이가 있다. ]

일반적으로 이스터 에그는 개발자의 유머로 여기지만, 심각한 보안 사태를 일으킨 사례도 있다. 바로 레노버에서 노트북에 '슈퍼피시(Superfish)'라는 애드웨어(adware)를 선탑재SW로 심어서 판매한 사건이다 (관련기사: 레노버, 노트북에 악성 SW 깔아 팔다 덜미, 블로터닷넷, 2015.02.22). 슈퍼피시는 사용자가 원하지 않는다해도 광고를 띄우는 악성코드이다. 가장 큰 문제는 SSL Strip과 동일한 기법을 이용하여 SSL 통신 내용을 훔쳐봤다는 것이다. 물론 광고를 삽입하기 위한 것이지만 해커들이 충분히 악용할 수 있는 소지가 있었다.

PHP 개발자들도 Easter Egg 기능을 제공한 바 있다 - 현재 PHP 5.5 이상에서는 제거되었다. PHP 이스터에그는 파일없이 이미지를 생성하기 위한 기능(PHP 로고, Zen Engine 로고)과 개발에 참여한 사람들의 이름을 표시(PHP Credits)하는 기능등 총 4개가 있었다. 버전에 따라서는 3개만 지원하기도 한다.

  1. ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP Credits
  2. ?=PHPE9568F34-D428-11d2-A769-00AA001ACF42: PHP 로고 1
  3. ?=PHPE9568F35-D428-11d2-A769-00AA001ACF42: Zend Engine 로고
  4. ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42: PHP 로고 2

다음은 첫번째 PHP easter egg를 iframe에 출력하였다. 웹 페이지 URL은 "http://www.memozee.com/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000"이다.

[ www.memozee.com의 PHP Credits 이스터에그 ]

다음은 PHP 로고 이스터에그이다. 이미지 URL은 "http://www.memozee.com/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42"이다.

PHP Logo 1 [ www.memozee.com의 PHP 로고 이스터에그 ]

다음은 Zend Engine 이스터에그이다. 이미지 URL은 "http://www.memozee.com/?=PHPE9568F35-D428-11d2-A769-00AA001ACF42"이다.

Zend Engine 로고 [ www.memozee.com의 Zend Engine 로고 이스터에그 ]

이들 PHP 부활절 달걀이 특별한 취약점을 가지고 있는 것은 아니다. 보안전문가들이 문제삼는 부분은 PHP 버전을 추정할 수 있다는 점이다. 예를 들어 위의 memozee.com의 PHP Credits 이스트에그를 잘 살펴보면 PHP 5.1을 사용하고 있음을 추정할 수 있다. 이스터에그 이미지와 Credits로 부터 - 특히 PHP Credits는 버전마다 조금씩 다르기 때문에 - 비교적 정확한 PHP 버전을 추정할 수 있다.

이것이 공격자에게 도움을 줄 소지가 있는 경우를 살펴본다면 다음과 같은 시나리오를 생각할 수 있다. 해당 사이트가 PHP를 사용하고 있는 것을 발견했고, 첨부파일 업로드 기능이 있으며, 원본 파일 이름으로 파일을 서버에 저장하는 경우라고 하자. 이 때, PHP 버전을 정확히 알고 있으면 널바이트삽입(null-byte injection) 공격 가능성을 점쳐볼 수 있다. 만약 널바이트삽입 취약점이 있는 경우라면 확장자 검증을 우회하여 PHP 웹쉘을 업로드할 수 있을 것이다.

조치 방안

PHP easter egg가 특별한 취약점은 아니지만, 제거하고 싶다면 PHP 설정파일(php.ini)에 다음 한줄을 추가하고 웹 서버를 재기동하면 된다.

expose_php = Off

추가 조치사항

Apache 웹서버를 기준으로 보면 PHP 버전정보가 노출되는 곳은 두 군데가 더 있다. 바로 X-Powered-By 헤더와 Server 헤더이다. 이 두 헤더도 다음과 같이 두 줄을 아파치 설정파일에 추가하고 웹서버를 재기동한다.

ServerTokens Prod
Header unset X-Powered-By

ServerTokens 설정에서 만들어지는 Server: 헤더를 아예 제거하고자 할 경우에는 다음과 같이 처리한다.

Header unset Server
Header unset X-Powered-By

참고할만한 바깥고리

[처음 작성한 날: 2016.11.25]    [마지막으로 고친 날: 2016.11.26] 


< 이전 글 : 인터넷(Internet)과 보안에 대해 짧게 생각해보다 (2016.11.25)

> 다음 글 : WH-COOKIE-01: 잘못된 쿠키 사용 사례를 보여주는 웹해킹훈련장 (2016.11.24)


크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문
 __
/ PHP가 무능한 아마추어들이 구상하고  \
| 만든 소소한 악이라면, 펄은 유능하지만  |
| 변태적인 프로들이 구상하고 만든  |
| 거대하고 교활한 악이다.  |
|  |
\ - 존 리벤스, 프로그래머  /
 --
 \                   .,
   \         .      .TR   d'
     \      k,l    .R.b  .t .Je
       \   .P q.   a|.b .f .Z%
           .b .h  .E` # J: 2`     .
      .,.a .E  ,L.M'  ?:b `| ..J9!`.,
       q,.h.M`   `..,   ..,""` ..2"`
       .M, J8`   `:       `   3;
   .    Jk              ...,   `^7"90c.
    j,  ,!     .7"'`j,.|   .n.   ...
   j, 7'     .r`     4:      L   `...
  ..,m.      J`    ..,|..    J`  7TWi
  ..JJ,.:    %    oo      ,. ....,
    .,E      3     7`g.M:    P  41
   JT7"'      O.   .J,;     ``  V"7N.
   G.           ""Q+  .Zu.,!`      Z`
   .9.. .         J&..J!       .  ,:
      7"9a                    JM"!
         .5J.     ..        ..F`
            78a..   `    ..2'
                J9Ksaw0"'
               .EJ?A...a.
               q...g...gi
              .m...qa..,y:
              .HQFNB&...mm
               ,Z|,m.a.,dp
            .,?f` ,E?:"^7b
            `A| . .F^^7'^4,
             3.MMMMMMMMMMMQzna,
         ...f"A.JdT     J:    Jp,
          `JNa..........A....af`
               `^^^^^'`
.. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ .. ...... ... ... ] .. [ .../ ..../ ......./ .. ./// ../ ... .. ... .. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ .. ./// ../ ... .. ... ...| ..../ ./ ... / ..| ....| ........ / ... / .... ...... ... ... ] .. [ .../ ..../ ......./ .....| ..../ ./ ... / ..| ....| ........ / ... / .... ...| ..../ ./ ... / ..| ....| ........ / ... / .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .