80¹ø Æ÷Æ® °ø°Ý ¡ÈÄ02.txt
¼¼¹ú½_80¹ø_Æ÷Æ®_°ø°Ý_¡ÈÄ02.txt (28.1K), Down : 5, 2017-07
¼¼¹ú½_80¹ø_Æ÷Æ®_°ø°Ý_¡ÈÄ02.doc (93.0K), Down : 2, 2017-07
¼¼¹ú½_80¹ø_Æ÷Æ®_°ø°Ý_¡ÈÄ02.pdf (89.4K), Down : 10, 2017-07
80번 포트 공격 징후 02
+---------------------------------------------------------------+
원문서 제목 : "Fingerprinting Port 80 Attacks:
A look into web server, and web application attack signatures. Part Two"
원문서 저자 : Zenomorph *****@***********.com
원문서 작성일 : 2002. 03. 05. Cgisecurity.com
문 서 번역일 : 2003. 06. 03.
문 서 번역자 : 광주광역쉬에서 세벌쉭
코 멘 트 : 본 번역본은 순전히 개인적인 호기심에서 번역한 것이다.
조금이라도 의심스러운 해석은 원문서를 참조하기 바란다.
+---------------------------------------------------------------+
I. Introduction
II. More Common Fingerprints
III. More Advanced Fingerprints
IV. Cross Site Scripting examples
V. Modified Headers
VI. More Encoding
VII. Web Server Codes and Logging
VIII. Conclusion
IX. References
I. Introduction:
=============
80번 포트는 웹사이트를 위한 표준 포트이다. 그것은 다른 수많은 보안에 관한 논란 거리들을 가지고 있다. 이러한 보안홀들은 공격자가 웹사이트에 대한 관리자 접근이나 웹서버 자체를 획득하는 것을 허용한다. 이 두번째 문서에서는 보통의 관리자와 개발자에게 무언가 도움을 주고자 한다. 존재하는 취급 형태에 대한 더많은 이해와 그것들을 어떻게 발견 할 수있는지에 관하여 언급 하고자 한다.
II. More Common Fingerprints:
===========================
이 부분은 웹 어플리케이션(추후 웹 어플) 과 웹서버들에 대해서 사용되어지는 보다 일반전인 공격 징후들에 관한 예제들을 들어 보고자 한다. 이 부분은 당신에게 모든 가능한 징후들을 보여 주는 것을 가정하지 않는다. 대신에 공격자가 당신의 시스템에 침투를 시도하는 더 많은 방법들을 보여 줄 것이다. 공격자들의 존재가 어떻게 숨겨지는에 관한 것도 포함되어 있다. 이러한 기호들은 첫번째 문서에서 설명하지 않는 것들 중에서 선택하였다. 이 부분은 각 기호가 무엇을 의미하는지에 대한 설명과 공격에서 그것이 사용되어지는 예제들을 포함하고 있다.
" * " Requests
-------------
asterisk 는 시스템 명령의 인자로 사용한다. 예제 :
* http://host/index.asp?something=..\..\..\..\WINNT\system32\cmd.exe?DIR+e:\WINNT\*.txt
이 요청은 e:\WINNT 디렉토리 상에 존제하는 모든 텍스트 화일들에 대한 리스트를 요청한다. 이 와 같은 요청은 로그 화일 리스트 와 다른 중요한 화일들을 수집하기 위해서 사용한다. 많은 웹 어플들은 유용한 요청으로 이러한 문자를 사용하지 않는다. 그래서 이것은 로그에 에스터리스크 표시를 만든다.
* http://host/blah.pl?somethingelse=ls%20*.pl
이 요청은 유닉스 시스템상에서 .pl 로 끝나는 모든 펄 스크립트에 대한 디렉토리의 리스트를 요청한다.
" ~ " Requests
-------------
~ 문자는 시스템 상에서 누가 유용한 사용자인지를 알아 보기위해서 사용한다. 예제 :
* http://host/~joe
이 요청은 리모트 시스템 사에서 joe 라는 유저를 찿아 보게 된다. 사용자들은 웹 스패스를 가지고 있을 것이다. 만일 공격자가 웹 페이지를 방문하기위해 조작을 하거나 403 error(Denied error)를 얻게 된다면 사용자는 존재하는 것이다. 이제 사용자는 유효한 사용자 이름을 가지게 되었다. 패스워드를 추측하거나 유효한 패스워드를 획득할때까지 부르트 포스 공격을 감행할 것이다. 다른 유용한 사용자를 확인하는 다른 방법들이 있지만 이 문서는 80번 포트 요청에 관한 것이기 때문에 이것만 언급한다(이것은 잘 알려진 방법이다). 만일 시스템이 이 형식으로 사용자 페이지를 가지고 있는지에 따라서 IDS 로그상에서 유효한 요청으로서 쉽게 오인되어질 것이다.
" ' " Requests
-------------
만일 이 특별한 문자가 당신의 로그상에 있다면 어떤이가 당신의 소프트웨어에 SQL injection 공격을 시도하고 있을 가능성이 있다. 부실하게 작성된 프로그램들은 공격자가 SQL 명령들을 스크립트 안에 삽입하는 것을 허용한다. 만일 시스템 명령을 실행하는 것들이 가능 하다면 공격자가 당신 시스템에서 관리자 접속을 획득할 가능성이 있다(때로는 관리자들을 유닉스 상에서 SQL 을 루트 계정으로 실행을 한다. 만일 당신이 MS-SQL 실행 했다면 관리자 권한으로 실행하기 바란다.) 예제:
* http://host/cgi-bin/lame.asp?name=john`;EXEC master.dbo.xp_cmdshell'cmd.exe dir c:'--
이 요청은 윈도우 엔티 머신에서 cmd.exe 쉘을 실행한다. 이 경우에 공격자는 리모트 시스템 상에서 완전히 자유로운 통치자 되는 것이다. 사용자를 추가 하고, 트로이를 업로드하고 샘 패스워드 화일을 훔칠 수도 있을 것이다.
SQL 공격에 관한 더 많은 정보를 얻기 위해서 www.cgisecurity.com/lib 를 방문한다. 주제에 관한 다양한 사이트들에서 수집한 몇몇 문서들을 확인해 보라. SQL injection 에 관한 더많은 예제들은 www.owasp.org 에서 확인해 보기 바란다.
" #, {} , ^ , and [] " Requests
----------------------------
이 특별한 문자들은 공격자가 몇몇 소스코드들을 펄이나 씨 프로그램으로 화일로 출력을 하였다면 당신의 로그에 보여 질수 있다. 한번 화일이 만들어지고 컴파일/인터프리터되어졀다면 공격자는 그들이 쉽게 접근 할수 있는 포트에 쉘을 바인드 바인드 할 수 있다.
나는 이것을 실행하기위한 완벽한 예제를 보여주지 않을 것이다. 그래서 나는 바인드쉘 프로그램을 이곳에 보여 주지 않는다. 이 문서는 사람들이 트로이안을 어떻게 하면 쉽게 따라 할수 있는가에 대한 것이 아니다. 이러한 이유로 예제를 포함하지 않기로 결정했다. [ 과 ] 는 또한 유닉스 명령 상에서 ls -al [a-f]* 처럼 사용할수 있다. 이것은 문자 a 와 f 사이로 시작하는 모든 화일들을 리스트 할 것이다. # 은 만일 공격자가 펄 스크립트 백도어를 업로딩 한다면 보여진다.
(Ex: #!/usr/bin/perl 화일 맨 위쪽에).
" ( and ) " Requests
------------------
이 값은 크로스 사이트 스크립트 공격에 사용한다. 크로스 사이트 스크립팅은 최근에 많은 주의를 요하고 있다. 많은 대형 사이트들이 이 공격유형에 여전히 노출되어 있다. 예제:
* http://host/index.php?stupid=
이 예제는 index.php 에 보내 질 것이다. 여기서 출력피이지는 따라오는 자바스크립를 출력 할 것이다. 다음 당신의 브라우저는 이 자바스크립트를 실행 할 것이고 팝업 윈도우를 보여 줄것이다. 크로스 사이트 스크립팅은 중간 취급자들과 관련이 있다. 공격자가 당신으로부터 쿠키를 훔치는것을 허용하는 가능성을 가지고 있다. 이것을 막는 분명한 방법은 출력이 그것들 안에 < 나 > 을 포함하지 않는다는 것을 확인하는 것이다. 이 방법만이 자바 스크립트가 실행되어지지 않을 것이다.
" + " Request
-------------
많은 예전 문서들에서 언급되어진 것과 갈이 + 는 %20 과 비슷하게 빈스페이스로 사용한다. 공격에 사용되어진 이값은 백도어가 있는 호스트에서 cmd.exe 와 함께 사용한다. 공격자나 웜은 cmd.exe 를 웹루트에 있는 화일에 복사한다. 한번 이화일이 복사되어지면 공격자는 당신의 윈도우 머신에 관한 전반적인 사항에 대한 제어권을 가지게 된다. 공격자는 스크립트상에 인자를 전달하기 위해서 + 를 사용할 것이다. 만일 이 문자 당신의 로그상에 나타나면 흥분을 감추지 말라. 이 문자는 웹 어플에서 전반적으로 사용한다. 그것은 쉽게 오인되어질 수 있다. 만일 당신 로그상에 나타나는것을 관리하고자 한다면 당신은 그것을 재차 조사해보기를 원할수 있다. 하지만 흥분에 빠질 아무런 이유가 없는 것이다. 예제:
* http://site/scripts/root.exe?/c+dir+c:\
이 특별한 예제는 호출되어진 백도어 root.exe 에 관한것을 보여 준다. 이 백도어는 호스트가 장악되어진 후에 sadmind/IIS 웜, 코드 레드, 님다에 의해서 인스톨 되어진다. + 문자는 cmd.exe 복사과 관련이 있는 윈도우 백도어들에서 사용한다.
웜에 관한 추가적인 정보
http://www.cert.org/incident_notes/IN-2001-09.html
III. More Advanced Fingerprints
============================
이부분은 공격자들이 요청하는 화일에 초점을 맞추고자 한다.그리고 나타나는 몇개의 다른 기호들도 포함한다. 이 것은 공격자가 요청하는 화일들이나 요청들에 대한 완벽한 리스트가 아니다. 하지만 당신의 시스템에 시도되어지고 있는것이 무엇인지에 대한 좋은 근거를 보여 줄것이다.
Lots of "/" Requests
-------------------
만일 당신의 로그에서 수많은 / 문자들을 보게 된다면 공격자가 잘 알려진 아파치 버그를 익스플로잇하기위해서 시도하고 있다는 것을 알수 있는 좋은 기회이다. 1.3.20 이전의 모든 아파치 버전이 영향을 받는 이 버그는 디렉토리 리스팅을 허용한다. 만일 당신의 로그에서 이것을 보게되면 당신을 익스플로잇 하기 위한 시도이다(이것은 로그를 빠르게 채운다)예제:
*http://host////////////////////////////////////////////////////////////////////////////////////////
이 익스플로잇이 작업하는 방법은 공격자가 슬래쉬를 한번씩 추가하는 스크립트를 실행는 것이다. 영향을 받는 시스템 상에서 실제로 공격자는 화일 리스트를 수집 할 수 있다.
* 공격자가 요청하는 일반 화일과 디렉토리들
===========================================
"autoexec.bat"
-------------
이 화일은 윈도우즈의 특정버전에서 매번 부팅될때마다 시작되어 진다. 공격자가 원하는 박스를 공격한 후에, 로그와 침입에 관한 어떤 흔적을 옮기기위해서 툴을 인스톨 할것이다. 공격자는 이 화일을 수정하고 이 화일에 명령을 삽입 할 것이다. 다음번에 머신이 재부팅되어지면 로그와 흔적은 깨끝이 지워지고 공격자는 집에서 영화 한편을 보고 있을 것이다. 윈도우즈 95 와 98에서 웹서버를 운영하고 있는 사람은 이 문제에 영향을 받을 것이다. 만일 윈도우즈 시스템을 사용해서 웹서버를 운영할 계획이라면 보안 목적을 위한 NTFS이 있는 NT/2000 시스템 상에서만 공개된 웹 서버를 운영해야 한다.
"root.exe"
---------
이것은 Sadmin/IIS, Code Red, and Nimda 웜에 의해서 남겨진 백도어이다. 이 백도어는 cmd.exe의 복사본을 root.exe로 리네임 시킨후 웹루투내부에 남겨 놓는다. 만일 공격자나 웜이 이 화일에 접근을 하게 되면 문제를 일의 키게 되어 질 수 있다. 이 화일 일반적으로 존재하는 디렉토리는 "/scripts/" and "/MSADC/" 이다.
"nobody.cgi 1.0 A free Perl script from VerySimple "
----------------------------------------------
이것은 cgi 프로그램이다. 이것은 원래 관리자에게 쉘백도어를 제공하는 목적으로 만들어 졌다. 부적절하게 이 프로그램을 사용하면 대단한 위험에 직면 할 수 있다면 경고를 가지고 있다. 이제 이 공격자가 프로그램은 웹서버의 권한으로 명령을 수행 하는데 사용되는 일반적인 백도어이다. 내가 얼마나 자주 이것이 나타나는 것을 보았는지를 알게되면 놀랄 것이다. 채팅 룸에 있을때 이 스크립트를 사용하는 3가지의 다른 경우를 보았다. 이제품에 대한 링크를 제공하지 않을 것이다.
"[drive-letter]:\WINNT\system32\LogFiles\"
-------------------------------------------
IIS 서버 로그들을 담고 있는 디렉토리이다. 공격자는 웹어플의 보안홀을 통해서 당신의 로그를 보기위해서 시도 할수도 있다. 만일 당신이 system32/LogFiles 에 대한 참조를 보게 된다면 당신의 시스템은 이미 탈취되어진 것이다.
"[drive-letter]:\WINNT\system32\repair\"
-----------------------------------------
윈도우 엔티 시스템 상에서 백업 패스워드 화일 포함하고 있는 디렉토리이다. 이 화일은 "sam._"(NT4) 나r "sam"(Win2k)" 로 명명 되어져 있다. 만일 공격자가 이 화일을 취득하기 위해서 조치를 취하게 된다면 당신 몇가지 실제적인 문제에 당면하게 될 것이다.
Novell File systems
"[server-name]:SYSTEM:PUBLIC"
-------------------------------
이것은 노벨 화일 시스템 상에어서의 예이다. 노벨에대한 고도의 지식을 가지고있는 능력일는 해커는 리모트에서 화일을 보기위해 시도 할 가능성이 있다. 인트라넷 서버 이름같은 정보를 얻는 것은 그렇게 쉽지 않다.
IV. Cross Site Scripting Examples
===============================
크로스 사이트 스크립팅 공격은 사용자로하여금 다른 사이트에 있는 특정 정보를 보도록 할때 공격자에 의해서 사용된다.(Cross site scripting attacks are often used by an attacker to make the user think that certain information is actually coming from another site). 이 공격은 주로 신용 사기에 사용되어지거나 공격자가 회사의 특정 물건에 대해서 주식이나 제품등의 가격을 보다 낮게할 목적으로 시도되어진다. 이 공격 형태의 한가지 문제점은 공격자가 보여주기위해서 제공하는 링크를 사용자가 클릭해야만 한다는 것이다. 공격자는 이것이 보다 믿음직스럽게 보이기 위해서 이미 존재하는 보안홀을 사용할 것이다. 이 공격은 매우 일반적인 것이다. 많은 메이저 사이트들은 이공격에 형태에 영향을 받는다. 아래 예제는 공격자가 사용자를 바보로 만들때 사용하는 몇가지 요청에 대한 예제이다 :
Example 1: The IMG tag
* http://host/search/search.cgi?query=
웹사이트의 셋업 상태와 서치 엔진이 html 태그들을 위한 요청을 필터링하지 않는지에 따라서, host2 에 있는 이미지를 갖고 있는 html 을 생산한다. 그리고 이 링크를 클릭한 사용자에게 그것을 제공한다. 오리지널 웹페이지에 따라서 사용자가 이것이 요효한 문서라고 생각하게 하는 것이 가능할 수 있다. 한가지 문제점은 위에 있는 URL이 매우 분명하다는 것이다. 그냥 그런 사람도 먼가가 잘못되었다는 것을 알아차릴 것이다. 이 요청이 다른 방법으로 코딩된다면 사용자가 링크를 클릭할때 전혀 의심을 하지 않을 것이다. 몇달전 나는 perl.com 에 관련이 있는 예제를 보였다. 이것으로 O'Reilly 에 있는 스텝을 속이는데 성공했다(단지 한시간 동안).
Example 2:
* http://host/something.php?q=
만일 사용자가 이 링크를 클릭하게 된다면 사이트 도메인 네임이 나타나는 자바스크립트 팝업 박스가 표시되어질 것이다. 이 예제는 해롭지는 않지만 공격자는 거짓형태를 만들거나 사용자가 획득하는 정보에 무언가를 추가 할 수 있을 것이다. 위에 요청은 표준 사용자들에게 쉽게 의심을 받을 것이다. 하지만 헥사코드, 유니코드 또는 %u 윈도우즈 코딩을 사용하는 사용자는 이것이 유효한 사이트 링크라고 생각하게 만들수가 있다.
Example 3:
* Http://www.cgisecurity.com/papers/header-based-exploitation.txt
아래에서 당신의 로그에서 조사한 몇가지 것을 평가해 보자.
x.x.x.x - - [10/Dec/2001:09:03:39 -0500] "GET / HTTP/1.1" 200 10453 "http://www.cgisecurity.com" "Mozilla/4.0
(compatible; MSIE 5.5; Windows NT 5.0; T312461)"
우리는 이 로그에서 11번째와 12번째에 있는것을 알아볼것이다.
11번째 "http://www.cgisecurity.com" Referrer Field
12번째 "Mozilla/4.0" User Agent Field
이 필드들은 당신의 브라우저에 의해서 자동으로 채워진다. 만일 내가 내 사이트를 지시하는 www.hosta.com 링크를 가지고 있고 그것을 클릭 했다면 내 브라우저는 이정보를 저장하고 그것을 나의 웹사이트로 포워드 할 것이다. 이 정보는 레퍼러 필드로 알려져있다. 레퍼러 필드는 당신의 브라우져에 의해서 자동적으로 채워진다. 즉 이정보는 서버가 아니라 클라이언트에의해서 제공되어 진다는 것이다. 이것은 이 정보는 사용자에의 입력에 관한것 이라는 것이다. 비록 이 정보가 사용자 입력이기 때문에 우리는 원한다면 언제라도 이것을 변경 할 수가 있다.
이것을 취급 하는 것은 로그로부터 값을 수집하는 특정 소프트웨이다.(예를들면 웹 통계 소프트웨어) 어떤 소크트웨어는 메타문자들을 구별해 내지 못하기 때문에 이 코드의 삽입은 가능하다.
Example 1:
su-2.05# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0
Referer: (그렇다. 레퍼러는 틀리게 쓰여졌다)
User-Agent:
이 예제에서 공격자는 "Referrer" 와 User-Agent 필드에 SSI 태그를 삽입 하고 있다. 소프트웨어가 텍스트나 이미지 폼으로 출력하는냐에 따라서 화일 삽입 이나 명령 실행을 가능하게 할 것이다.(물론 이 예제는 변경 가능하다). 만일 텍스트로 보여지고 shtml 화일 안에 디스플레이 되고 레퍼러 나 유저 에에전 필드가 보여진다면(대부분의 경우 그렇게 한다), 이 두 요청은 화일 안에 포함되어 질 것이다. 그리고 id 명령의 결과와 somefile.log 내용을를 표시 할 것이다(한번더 서버 설정에 따라서)
- * Http://www.cgisecurity.com/papers/header-based-exploitation.txt
어떤 이유에서건 당신이 이와 같은 요청을 당신의 로그에서 발견 한다면 어떤 녀석이 당신을 익스플로잇 시도 하고 있을 가능성이 있다.
Example 2:
su-2.05# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0
Referer:
User-Agent:
만일 사용자가 이 통계 페이지를 방문하고 레퍼러가 출력 되어진다면 사용자 쿠키들을 훔칠 가능성이 있다. 만일 위험성이 있는 소프트웨어를 운영하고 있다면 당신의 아파치 로그에서 규칙적으로 이 필드를 검사해 보기를 권하는 바이다.
체크해볼만한 충분한 가치가 있는 Websleuth 라고 불리우는 http 헤더를 수정할 수 있는 훌륭한 툴이 있다.
VI. More Encoding:
=================
이 챕터는 공격자나 웜이 발견되어지는 것을 회피하기위해 사용하는 일반적인 코딩 방법들에 대해서 다루고 있다. 헥사코드, 유니코드, 그리고 윈도우즈 %u 코드를 다룬다. 또한 여기는 어떻게 할것인가가 아닌 당신의 로그안에 있는 것에 대한것을 이해 하는데 도움을 주는 사항들이 포함 될 것이다.
A. Hex Encoding:
---------------
Example: %xx
아래에 있는 헥사값뜰은 이전 문서에서 언급하고 있는 몇몇 문자에 관한 것이다. 만일 당신이 로그 화일에서 이들 문자들을 보게 된다면 공격자가 그의 요청을 숨기기를 시도 하거나 IDS 제품을 회피하기를 시도 하고 있는 것이다.
%2e = . (Example: .. 요청들)
%3e = > (Example: Html/Javascript/SSI 삽입. 이전 문서에서 언급했다.)
%3c = < (Example: Html/Javascript/SSI 삽입. 이전 문서에서 언급했다.)
%2a = * (Examples: 이 문서의 챕터 2 에 있다.)
%2b = + (Example: cmd.exe 백도어 요청. 스페이스처럼 사용되어진다.)
%60 = ` (Examples: 명령 실행. 이전문서에서 언급했다.)
%21 = ! (Example: SSI 삽입. 이전문서에서 언급했다.)
%7c = | (Example: 명령 실행. 이전문서에서 언급했다.)
%3b = ; (Example: 명령 실행. 이전문서에서 언급했다.)
%7e = ~ (Examples: 이 문서의 챕터 2 에 있다.)
%3f = ? (Example: Php/이전 문서에서 언급했다.)
%5c = \ (Example: 윈도우즈 디릭토리 변경 가능성)
%2f = / (Example: 유닉스 시스템 디렉토리 변경 가능성)
%7b = { (Example: trojan/backdoor 업로드 시도 가능성, 명령 인자 가능성)
%7d = } (Example: trojan/backdoor 업로드 시도 가능성, 명령 인자 가능성)
%28 = ( (Example: 크로스 사이트 스크립팅 시도)
%29 = ) (Example: 크로스 사이트 스크립팅 시도)
%5b = [ (Example: trojan/backdoor 업로드 시도 가능성, 명령 인자 가능성)
%5d = ] (Example: trojan/backdoor 업로드 시도 가능성, 명령 인자 가능성)
%5e = ^ (Example: trojan/backdoor 업로드 시도 가능성, 명령 인자 가능성)
유닉스 상에서 문자들의 완벽한 리스트는 "man ascii" 명령을 실행 함으로써 얻을 수 있다. 아래 예제는 디렉토를 변경해서 서버의 패스워드 화일을 조작하기 위한 시도이다.
Example 1 :
* http://host/script.ext?template=%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64
이 요청은 다음과 같이 구성되어져 있다.
1. %2e%2e%2f%2e%2e%2f%2e%2e%2f = ../../../
2. %65%74%63 = etc
3. %2f = /
4. %70%61%73%73%77%64 = passwd
이것의 조합은 IDS 제품을 회피하기 위해 아마도 사용되어 질것이다. rain.forrest.puppies 의 "Whisker"같은 툴은 발견되어지는 것을 회피하기 위해서 이 테크닉을 사용한다.
B. Unicode Encoding:
-------------------
Example: %xx%xx
보안을 취급하는 대부분의 사람들은 이와 같은 형태의 코딩에 대해서 들어 보았을 것이다. 이러한 코딩형태를 사용하는 유명한 IIS 익스플로잇은 유니코드 요청이 보여 주는 예이다 :
* http://127.0.0.1/scripts/..%c0%af../winnt/system32/cmd.exe?+/c+dir+c:\
이미 수많은 문서들이 존재하기 때문에 이 코딩 방법을 다루지는 않겠다. 유니코드에 관한 추가적인 정보는 "RFC 2279" 를 읽어 보시면 될 것이다.
http://www.ietf.org/rfc/rfc2279.txt
C. "%u" Encoded Requests:
-------------------------
Example: %uxxxx
마이크로소프트 IIS 웹서버는 이러한 형태의 인코딩을 사용한다. 마이크로소프트의 이러한 특징적인 코딩방법을 통해서 공격자는 IDS 제품을 회피할 가능성이 있다. 다음은 웜이나 공격자가 %u 코딩방법을 사용하거나 사용하지않고 취약 시스템에 보내는 것에 대한 예제이다.
* http://host/lame.asp?asp=a.txt
이 요청은 lame.asp를 사용해서 a.txt 화일 읽기를 시도 하고있다.
* http://host/lame.asp?asp=%u0061.txt
이 요청은%u 를 사용한 마이크로소프트 코딩방법으로 위와 같다. 역시 같은 시도를 하고 있다. IDS 제품이 이와 같은 요청을 놓칠 가능성이 역시 존재한다. 그런일이 발생한다면 공격자에게 그의 작업을 계속하도록 할 것이다. 이러한 코딩 형태는 일반 ASCII 문자들을 결합하는데 사용되어질수 있다. 어떤 IDS 제품은 이러한 요청을 발견하지 못한다.
이 인코딩방법에 대한 더많은 정보를 획득하기위해서 다음 링크를 방문해 보기 바란다.
http://www.eeye.com/html/Research/Advisories/AD20010705.html
VII. Web server Codes and Logging:
================================
공격자가 당신의 웹어플을 익스플로잇 시도할때 당신의 소프트웨어는 공격자에게 보여지거나 보여지지 않는 에러 메시지를 생산한다. 이 부분은 당신의 로그상에 나타나는 에러 메시지의 형태들에 대해서 다룰 것이다. 이 부분은 기본적인 로긴과정을 다루고 초보자들에게 더 의미가 있는 것들을 다룰 것이다. 만일 당신이 로깅과정에 대한 충분한 이해가 되어있다면 다음 챕터로 ....
403 Denied Errors
------------------
이 특별한 에러는 당신이 모두가 읽을수는 없는 파일은 가지고 있을때 나타난다. 웹마스터는 chmod 명령으로 화일을 읽기 가능하게 변경하는 것을 잊어 버리는 실수를 할 수가 있다. 많은 경우 화일은 모두가 읽지는 못하게 표시되어져있을때(예를 들명 패스워드 화일) 어떤이가 당신의 웹사이트에 있는 그 화일을 요청한다. 이것은 화일 옮기기 위한 시도 있수도 있다. 당신의 로그를 점더 자세히 조사해 보라.
[Wed Feb 20 10:23:33 2002] [error] [client 192.168.1.1] (13)Permission denied: file permissions deny server access:/some/path/htdocs/secret/apache-unreleased-overflow.c(당신의 error_log 상에 나타나는 메시지)
|-- 403 Code
192.168.1.1 - - [20/Feb/2002:10:23:33 -0500] "GET /secret/apache-unreleased-overflow.c HTTP/1.0" 403 206
(access_log 상에 나타나는 메시지)
404 Not Found errors
-------------------
대형 이나 중형의 웹사이트를 운영할때 사람들은 다는 사이트로부터 곧장 당신 웹사이트에 있는 어떤것으로 링킹을 시도 하기도 한다. 시간이 지나도 이동되지 않을때 화일에 대한 이 오래된 참조는 더이상 유효하지 않는 것이다. 이러한 경우 당신은 access_log 상에서 이러한 참조를 볼수 있거나 보다 쉽게 error_log 화일에서 볼수 있을 것이다. 유효하지 않거나 불명확한 화일에 대한 요청은 당신이 화일명을 변경했거나 잘못된 이름을 지정했다는 것을 알수 있게 할 것이다. IDS 시스템들은 404 에러의 대부분을 추출하지 않는다. 왜냐하면 즉각적인 조치를 필요하는 것으로 간주 하지 않기 때문이다. 404 코드에서 추출할 것은 쓸데 없는 일이다. 404 코드는 웹사이트가 취급하고 있는 일상적인 일이기 때문이다. 99.99 퍼센트의 시간동안 웹사이트들은 공격이나 조사되어질 필효가 전혀 없다. 대신에 IDS 소프트 웨어는 화일이름들의 기호 일치시키고 아래에 언급하는 것들을 하는 경향이 있다.
아래에 있는 로그는 유명한 formail cgi 스크립트를 찿기 위해서 내 사이트를 스캐닝 하고 있는 것이다. formail 이 다양한 보안 이슈들을 가지고 있다는 것은 잘 알려져 있다. 최근에서 사람들에게 원하지않는 메일을 보내는 스팸어에 의해서 사용되어지는 것이 발견 되어지기도 했다.
[Wed Feb 20 10:30:42 2002] [error] [client 192.168.2.2] script not found or unable to stat: /usr/local/apache/cgi-bin/formail.pl
(error_log 에 나타나는 메시지.)
|-- 404 Code
192.168.2.2 - - [20/Feb/2002:10:30:42 -0500] "GET /cgi-bin/formail.pl HTTP/1.0" 404 3683 "-" "Mozilla/4.78 [en] (Win98; U)""Mozilla/4.78 [en] (Win98; U)"
(access_log 에 나타나는 메시지)
이것은 당신의 머신이나 서브넷이 스캔당하고 있다는 경고이다. 분명히 404는 당신의 로그상에 나타나기 때문에 이것이 공격을 받고 있다는 것을 의미하지는 않는다. 잘못링크가 된 일상적인 화일들을 위해 당신 로그를 조사해 보고 일상적이지 않는것들은 조사해 보기 바란다.
아래 예제는 Nimda, Code red 웜이 남겨놓은 백도어를 요청하는 예제이다.
[Tue Dec 18 05:11:04 2001] [error] [client 192.168.3.3] File does not exist: /usr/local/apache/htdocs/MSADC/root.exe
(error_log 에 나타나는 메시지.)
|--- 404 code
192.168.3.3 - - [18/Dec/2001:05:11:04 +0000] "GET /MSADC/root.exe?/c+dir HTTP/1.0" 404 3147
(access_log 에 나타나는 메시지)
Often times people scan for these files hoping to get an easily backdoored machine. From here
they would have complete control of your IIS machine.
500 Server Error
---------------
공격자가 명령실행이나 리모트 화일 읽기 능력을 위한 소프트웨어를 테스트 할때 그들은 문서에 이러한 목표에 도움을 주기 위해서 문자를 삽입한다. 때때로 스크립트는 이런 추가적인 데이타 삽입을 처리하지 못할 것이고 대신에 비정상적으로 종료하게 된다. 이때 로그상에 서버 에러(500 코드)같은 것이 보인다. 500 코드가 전적으로 공격자가 당신을 스캔하고 있드는것을 의미 하지는 않는다. 특정시스템을 잘못된 설정으로 유도하는 스크립트를 업로드하는 사용자는 이 에러를 받을 수 있다.
|--- 500 Code
192.168.4.4 - - [18/Dec/2001:05:11:04 +0000] "GET /cgi-bin/port80.cgi HTTP/1.0" 500 529 "-""Mozilla/4.78 [en] (Win98; U)"
(access_log)
[Thu Dec 13 15:30:23 2001] [error] [client 192.168.4.4] Premature end of script headers:/usr/local/apache/cgi-bin/port80.cgi
(error_log)
공격자가 시도하고 있는것이 무엇인지에 따라서 error_log 상에 무슨 이유때문에 로그가 있는지 결정되어질 것이다.
Htaccess error codes
--------------------
모든 에러메시지가 당신의 시스템을 공격하고 있다는 것을 표시하지는 않는다. 사용자가 잘못된 사용자이름이나 패스워드를 사용하기 때문일수도 있는 것이다. 공격자는 보호된 지역에 접근하기 위해서 당신의 패스워드를 클랙하기 위해서 WWWhack 같은 프로그램을 실행 할것이다. 예제 :
192.168.5.5 - miked [30/Jan/2002:13:37:26 -0500] "GET /secret HTTP/1.0" 401 397 "-" "Mozilla/4.78 [en]C-CCK-MCD snapN45b1 (Win98; U)"
(access_log)
[Wed Jan 30 13:37:26 2002] [error] [client 192.168.5.5] user miked: authentication failure for "/secret": password mismatch
(error_log)
유저네임 miked 인 사용자(192.158.5.5)에 의한 로긴이 실폐 했다는 것이다. 만일 당신이 동일 IP 로 부터의 수많은 로긴 실폐를 본다면 어떤녀석이 패스워드 블루트 포스 공격을 감해 하고 있다는 신호이다. 자신의 패스워드를 잃어 버린 사람은 1~4회를 시도한다. 만일 1 IP 주소가 존재하지 않는 계정에대한 접속을 시도하거나 여러 사용자 이름으로 접속을 시도한다면 어떤녀석이 패스워드 크래킹을 하고 있다는 신호가 될 것이다.
완벽한 에러코드에관한 리스트는 아래 링크에서
http://www.w3.org/Protocols/HTTP/HTRESP.html
Extended logging options with apache
-----------------------------------
아파치는 mod_log_config 라고 불리우는 로깅을 위해사용되는 모듈을 가지고 일다. 이 모듈은 관리자에게 로긴에 어떤 형테를 사용할것인지를 선택하는 능력을 가지고 있다. 관리자는 어떤 헤더들이 로그되어질지에 관한것도 선택할 수 있게 한다. 때로는 확장된 HTTP 헤더를 사용하는 공격의 형테가 공표되기도 한다(예: Content-Encoding, Host, Etag, Content-MD5, Warning, WWW-Authenticate, 등). 디폴트로 아파치는 이들 필드들을 로그하지 않는다. "LogFormat" Directive 는 관리자에게 어떤 로그는 선택하고 선택하지 않을지에 대한 능력을 제공한다. 이것은 보안홀에관 문제가 발생하거나 어플리케이션 문제가 발생할때 특히 유용하게 써먹을 수가 있다.
Mod Log Config:
http://httpd.apache.org/docs/mod/mod_log_config.html
LogFormat Directive:
http://httpd.apache.org/docs/mod/mod_log_config.html#logformat
HTTP 헤더들에 관한 더많은 정보에 관해서는 :
RFC 1945: Hypertext Transfer Protocol -- HTTP/1.0
http://www.ietf.org/rfc/rfc1945.txt
RFC 2068: Hypertext Transfer Protocol -- HTTP/1.1
http://www.ietf.org/rfc/rfc2068.txt
VIII. Conclusion:
==============
다시 한번 말하건데 이 문서는 포트 80번에 관한 모든 익스플로잇을 다루고 있지는 않다. 하지만 대부분의 일반적인 공격 형태를 다루고 있다. 당신의 로그에서 무엇을 조사해 보아야 할지, 어플을 프로그래밍 할때 무엇을 유의해야 할지, IDS 규칙에 무엇을 삽입해야 하는지에 대한 언급이다.
나는 첫번째 나의 문서에 대해서 많은이들이 흥미를 보여서 이 두번째 문서를 작성하게 되었다. 문서를 쉽게 이해하고 이러한 보안 이슈들에 대해서 더 많은 자각이 있는 바라 마지 않는다. 만일 이 문서에 대해서 언급 할것이 있거나 제안 할것이 있다면.... *****@***********.com.
IX. References and links mentioned within
=====================================
Apache Related:
Mod Log Config: http://httpd.apache.org/docs/mod/mod_log_config.html
LogFormat Directive: http://httpd.apache.org/docs/mod/mod_log_config.html#logformat
IIS %u Encoding: http://www.eeye.com/html/Research/Advisories/AD20010705.html
HTTP Related:
Status Codes
http://www.w3.org/Protocols/HTTP/HTRESP.html
RFC 1945: Hypertext Transfer Protocol -- HTTP/1.0
http://www.ietf.org/rfc/rfc1945.txt
RFC 2068: Hypertext Transfer Protocol -- HTTP/1.1
http://www.ietf.org/rfc/rfc2068.txt
Misc:
http://www.w3.org
SQL injection:
http://www.spidynamics.com/
"SQL injection Are Your Web Applications Vulnerable?" Kevin Spett, 2002
http://www.ngssoftware.com
"Advanced SQL injection In SQL Server Applications" Chris Anley, 2002
Unicode:
http://www.w3.org/TR/REC-html40/charset.html
Special Thanks:
OWASP (Open Web Application Security Project - www.owasp.org)
Mark Curphey
Dennis Groves
Joel Gridley (a.k.a. Jarmaug)
Mike D. For the failed login attempts :)
PhantasmP
zenomorph for providing you with this hopefully useful paper
Published to the Public March 2002
Copyright December 2002 Cgisecurity.com
ÇѾøÀÌ Àç¹ÌÀÖ°í....