반응형
/*
homepage: http://beist.org
e-mail: beist@hanmail.net
msn: beist@hotmail.com
beist와 관련된 사이트 :
http://wowhacker.com (wowcode at wowhacker team)
http://hackerschool.org (very good hacking portal site)
*/
안녕하세요?
오늘은 간단하고도 재미있는 팁에 대해서 쓰려합니다. 로그 필터링을 역이용하여
로그를 안남기고 특정 자료를 요청하는 방법입니다.
인터넷이 발전하면서 예전부터 모리스 웜, 코드레드 웜 등 바이러스 성 웜이
나타나고 있습니다. 아시다시피 이 웜들은, target system 혹은, 무작위 system 에
악영향을 미치는 것들입니다.
이러한 웜들은 공격을 성공한 system 에서, 또 무작위로 IP 를 추출하여 주위,
혹은 먼거리의 서버들을 Scan, Attack 을 다시 시도합니다. 그런 식으로,
자동으로 다른 서버들에 공격을 감행하는 것입니다.
나날이 발전하는 인터넷 덕분에, 이러한 웜이 기승을 부릴 때마다 인터넷의
system 들은 많은 피해를 입어왔습니다. 또, 많은 system 이 감염될수록 그에
따라 이 웜의 진행 속도, 규모는 기하급수적으로 늘게되며, 그로 인해서
시스템에 직접적으로 피해를 입히거나, 아니면 간접적으로 피해를 입히게
됩니다.
직접적으로는 system 이 해킹당하여 웜이 지배하고 있는 경우이고, 간접적으로는
해킹을 당하진 않았더라도, 웜이 시도하는 수많은 접근을 받게되므로, 피해를
입을수도 있습니다. 예를 들어, 코드레드 웜 같은 경우는, Windows IIS Web
Server 를 Target 으로 공격하는데, IP 를 추출하여 무작위 공격을 감행하므로
Windows 만이 아니라 Linux 시스템, 다른 시스템들도 공격하게 됩니다.
그리고 대부분의 Web Server 에서는 Logging 기능을 갖추고 있습니다.
즉, 코드레드 웜이 접근을 할 때 한 행동을 모두 log 파일에 남긴다는 것입니다.
코드레드 웜의 접근이 얼마되지 않을 경우에는 그렇게 신경쓸일이 아니지만,
웜이 전성기 일때는 어마어마한 로그가 쌓이게 됩니다.
log 파일에 정상적인 접근이 아니라 코드레드 같은 비정상적 접근이 자꾸 쌓이게
되면 후에, log 파일을 분석하거나 할 때 어려움을 겪게 됩니다. 또, 불필요한
접근과 로그를 남기게 되므로, 쓸데없이 시스템 자원 소모를 하게 됩니다.
기타 이러저러한 이유로, 대부분의 웹서버에서는 코드 레드 웜의 접근 로그를
남기지 않는 설정을 합니다. (혹은 다른 웜 종류의 접근 로그)
바로, 이 코드 레드 웜의 접근 로그를 (혹은 다른 종류의 웜 로그) 남기지 않는다는
웹 서버 설정을 이용하여, 우리는 정상적인 웹 접근도 로그를 남기지 않도록
요청할 수 있습니다.
여기서는 리눅스 Apache Web Server 에서의 환경으로, 간략하게 설명하겠습니다.
일반적으로 Apache Web Server 에서 코드 레드 웜의 로그 기록을 막는 방법은
httpd.conf 를 이용해서 합니다.
httpd.conf 에서 다음 두 줄을 넣으면 ".ida" 이 포함하는 요청을 access_log 에
기록을 하지 않습니다.
SetEnvIf Request_URI .ida CR-nosave
CustomLog logs/access_log combined env=!CR-nosave
(코드레드 웜은, IIS 를 공격 시에 .ida 취약성을 이용하여 공격하기 때문에,
접근 시에 .ida 문자열을 포함하게 됩니다.)
일반적으로 funk.html 이라는 파일을 요청하게 되면 access_log 파일에 다음과 같이
로그가 남게 됩니다. (funk.html 이 존재하는 파일이라고 가정합니다.)
[root@beist conf]# tail /usr/local/apache/logs/access_log
IP - - [26/Jan/2003:15:56:45 +0900] "GET /funk.html HTTP/1.1"
200 1420 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
그렇다면 임의의 test.ida 라는 파일을 만들어두고, 웹에서 test.ida 파일을 요청한
후, access_log 에 기록이 남았는지 확인해보겠습니다.
[root@beist conf]# grep -r "test.ida" /usr/local/apache/logs/access_log
test.ida 의 요청은 access_log 에 기록이 되지 않은 것을 확인할 수 있습니다. 바로
이 점을 이용한다면, 우리는 우리가 보고 싶은, 혹은 접근하고 싶은 파일에 로그를
남기지 않고 접근할 수가 있습니다.
예를 들어
[root@beist.conf]# cp /etc/passwd /usr/local/apache/htdocs/beist.html
이렇게 /etc/passwd 파일을 beist.html 란 파일로 복사를 하고, 이 beist.html 파일을
로그에 남기지 않도록 웹에서 요청을 해보겠습니다.
[root@beist conf]# telnet beist.org 80
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
GET http://beist.org/test.ida/../beist.html HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 26 Jan 2003 07:04:33 GMT
Server: Apache
X-Powered-By: PHP/4.2.2
Connection: close
Content-Type: text/html
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
/* 생략 */
Connection closed by foreign host.
성공적으로 beist.html 파일을 요청하였습니다. 그러면 access_log 에 기록이 되었는지
확인해보겠습니다.
[root@beist conf]# grep -r "beist.html" ../logs/access_log
기록이 안되었습니다. 요청을 http://beist.org/test.ida/../beist.html 이렇게 하였는데,
요청 문자열 중 .ida 가 포함하므로 access_log 에 기록이 안되는 것입니다. test.ida/ 와
같이 디렉토리를 명시하였으므로 ../ 문자열을 이용하여 상위디렉토리로 거슬러 올라간 후
beist.html 을 요청한 것입니다. 즉 실질적으로는 http://beist.org/beist.html 을
요청하게 될 것입니다.
이런 방법으로 access_log 파일에 로그를 남기지 않고 원하는 파일에 접근할 수 있었습니다.
알림 사항.
1. 위의 설정 방법에서는 access_log 에만 기록이 남지 않습니다. error_log 파일에는
기록이 되므로 주의하세요. 어떤 서버는 access_log, error_log 둘 다 기록이 안되게 설정
하는 곳도 있습니다.
2. error_log 에는 기록이 남는다고 하여도 걱정할 것은 없습니다. 왜냐하면, error_log 에는
비정상적인 요청만이 로그를 남기게 되는 곳이고, test.ida/../beist.html 와 같이, 실제로
존재하는 파일이거나, 요청하는데 특별한 이상이 없는 파일이면, error_log 에도 기록이 안될
것이기 때문입니다.
3. 80 번으로 들어오는 트래픽에서 .ida 문자열같은 특정 문자열이 존재할 경우 아예 접근을
차단하는 방법도 있습니다.
4. 꼭 코드 레드 웜의 로그 필터링만이 아니라 다른 웜들의 필터링도 해당 사항이 될 것입니다.
5. 웜 로그 필터링을 설정하지 않은 서버에서는 해당되지 않습니다.
이러한 보안 설정은, 서버에 유익하면서도, 해커에게도 유익한 보안 설정이 됩니다.
homepage: http://beist.org
e-mail: beist@hanmail.net
msn: beist@hotmail.com
beist와 관련된 사이트 :
http://wowhacker.com (wowcode at wowhacker team)
http://hackerschool.org (very good hacking portal site)
*/
안녕하세요?
오늘은 간단하고도 재미있는 팁에 대해서 쓰려합니다. 로그 필터링을 역이용하여
로그를 안남기고 특정 자료를 요청하는 방법입니다.
인터넷이 발전하면서 예전부터 모리스 웜, 코드레드 웜 등 바이러스 성 웜이
나타나고 있습니다. 아시다시피 이 웜들은, target system 혹은, 무작위 system 에
악영향을 미치는 것들입니다.
이러한 웜들은 공격을 성공한 system 에서, 또 무작위로 IP 를 추출하여 주위,
혹은 먼거리의 서버들을 Scan, Attack 을 다시 시도합니다. 그런 식으로,
자동으로 다른 서버들에 공격을 감행하는 것입니다.
나날이 발전하는 인터넷 덕분에, 이러한 웜이 기승을 부릴 때마다 인터넷의
system 들은 많은 피해를 입어왔습니다. 또, 많은 system 이 감염될수록 그에
따라 이 웜의 진행 속도, 규모는 기하급수적으로 늘게되며, 그로 인해서
시스템에 직접적으로 피해를 입히거나, 아니면 간접적으로 피해를 입히게
됩니다.
직접적으로는 system 이 해킹당하여 웜이 지배하고 있는 경우이고, 간접적으로는
해킹을 당하진 않았더라도, 웜이 시도하는 수많은 접근을 받게되므로, 피해를
입을수도 있습니다. 예를 들어, 코드레드 웜 같은 경우는, Windows IIS Web
Server 를 Target 으로 공격하는데, IP 를 추출하여 무작위 공격을 감행하므로
Windows 만이 아니라 Linux 시스템, 다른 시스템들도 공격하게 됩니다.
그리고 대부분의 Web Server 에서는 Logging 기능을 갖추고 있습니다.
즉, 코드레드 웜이 접근을 할 때 한 행동을 모두 log 파일에 남긴다는 것입니다.
코드레드 웜의 접근이 얼마되지 않을 경우에는 그렇게 신경쓸일이 아니지만,
웜이 전성기 일때는 어마어마한 로그가 쌓이게 됩니다.
log 파일에 정상적인 접근이 아니라 코드레드 같은 비정상적 접근이 자꾸 쌓이게
되면 후에, log 파일을 분석하거나 할 때 어려움을 겪게 됩니다. 또, 불필요한
접근과 로그를 남기게 되므로, 쓸데없이 시스템 자원 소모를 하게 됩니다.
기타 이러저러한 이유로, 대부분의 웹서버에서는 코드 레드 웜의 접근 로그를
남기지 않는 설정을 합니다. (혹은 다른 웜 종류의 접근 로그)
바로, 이 코드 레드 웜의 접근 로그를 (혹은 다른 종류의 웜 로그) 남기지 않는다는
웹 서버 설정을 이용하여, 우리는 정상적인 웹 접근도 로그를 남기지 않도록
요청할 수 있습니다.
여기서는 리눅스 Apache Web Server 에서의 환경으로, 간략하게 설명하겠습니다.
일반적으로 Apache Web Server 에서 코드 레드 웜의 로그 기록을 막는 방법은
httpd.conf 를 이용해서 합니다.
httpd.conf 에서 다음 두 줄을 넣으면 ".ida" 이 포함하는 요청을 access_log 에
기록을 하지 않습니다.
SetEnvIf Request_URI .ida CR-nosave
CustomLog logs/access_log combined env=!CR-nosave
(코드레드 웜은, IIS 를 공격 시에 .ida 취약성을 이용하여 공격하기 때문에,
접근 시에 .ida 문자열을 포함하게 됩니다.)
일반적으로 funk.html 이라는 파일을 요청하게 되면 access_log 파일에 다음과 같이
로그가 남게 됩니다. (funk.html 이 존재하는 파일이라고 가정합니다.)
[root@beist conf]# tail /usr/local/apache/logs/access_log
IP - - [26/Jan/2003:15:56:45 +0900] "GET /funk.html HTTP/1.1"
200 1420 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
그렇다면 임의의 test.ida 라는 파일을 만들어두고, 웹에서 test.ida 파일을 요청한
후, access_log 에 기록이 남았는지 확인해보겠습니다.
[root@beist conf]# grep -r "test.ida" /usr/local/apache/logs/access_log
test.ida 의 요청은 access_log 에 기록이 되지 않은 것을 확인할 수 있습니다. 바로
이 점을 이용한다면, 우리는 우리가 보고 싶은, 혹은 접근하고 싶은 파일에 로그를
남기지 않고 접근할 수가 있습니다.
예를 들어
[root@beist.conf]# cp /etc/passwd /usr/local/apache/htdocs/beist.html
이렇게 /etc/passwd 파일을 beist.html 란 파일로 복사를 하고, 이 beist.html 파일을
로그에 남기지 않도록 웹에서 요청을 해보겠습니다.
[root@beist conf]# telnet beist.org 80
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
GET http://beist.org/test.ida/../beist.html HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 26 Jan 2003 07:04:33 GMT
Server: Apache
X-Powered-By: PHP/4.2.2
Connection: close
Content-Type: text/html
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
/* 생략 */
Connection closed by foreign host.
성공적으로 beist.html 파일을 요청하였습니다. 그러면 access_log 에 기록이 되었는지
확인해보겠습니다.
[root@beist conf]# grep -r "beist.html" ../logs/access_log
기록이 안되었습니다. 요청을 http://beist.org/test.ida/../beist.html 이렇게 하였는데,
요청 문자열 중 .ida 가 포함하므로 access_log 에 기록이 안되는 것입니다. test.ida/ 와
같이 디렉토리를 명시하였으므로 ../ 문자열을 이용하여 상위디렉토리로 거슬러 올라간 후
beist.html 을 요청한 것입니다. 즉 실질적으로는 http://beist.org/beist.html 을
요청하게 될 것입니다.
이런 방법으로 access_log 파일에 로그를 남기지 않고 원하는 파일에 접근할 수 있었습니다.
알림 사항.
1. 위의 설정 방법에서는 access_log 에만 기록이 남지 않습니다. error_log 파일에는
기록이 되므로 주의하세요. 어떤 서버는 access_log, error_log 둘 다 기록이 안되게 설정
하는 곳도 있습니다.
2. error_log 에는 기록이 남는다고 하여도 걱정할 것은 없습니다. 왜냐하면, error_log 에는
비정상적인 요청만이 로그를 남기게 되는 곳이고, test.ida/../beist.html 와 같이, 실제로
존재하는 파일이거나, 요청하는데 특별한 이상이 없는 파일이면, error_log 에도 기록이 안될
것이기 때문입니다.
3. 80 번으로 들어오는 트래픽에서 .ida 문자열같은 특정 문자열이 존재할 경우 아예 접근을
차단하는 방법도 있습니다.
4. 꼭 코드 레드 웜의 로그 필터링만이 아니라 다른 웜들의 필터링도 해당 사항이 될 것입니다.
5. 웜 로그 필터링을 설정하지 않은 서버에서는 해당되지 않습니다.
이러한 보안 설정은, 서버에 유익하면서도, 해커에게도 유익한 보안 설정이 됩니다.
반응형