코드레드와 Nimda 등 Windows NT/2000 기반의 IIS 를 공격하는 무차별적인 웜공격으로 인하여 부하가 유발되고 로그 파일이 불필요한 데이터로 채워지는 경우가 있다.
로그 파일의 크기가 커지는 것은 둘째치고서라도 당장 계속적으로 커지는 로그 파일 때문에 서버에 부하를 유발하는 것이 더욱 큰 문제이다. 서버에서 로그를 남기는 방식은 매번 클라이언트의 요청이 있을 때마다 웹 서버에서 패킷 헤더에 있는 클라이언트의 정보를 받아낸 후 로그 파일을 open 한 후 로그 파일을 읽어 파일의 제일 끝으로 이동하여 로그 정보를 추가한 후 파일을 close 하는 것인데, 불 필요한 요청이 있을 때마다 이 작업을 계속하여야 하므로 서버에 부하를 유발함은 당연한 현상이다. 따라서 아예 로그를 남기지 않도록 하거나 로그를 남긴다 하더라도 불필요한 정보를 남기지 않도록 하는 것이 미소하게나마 서버의 성능을 높이는 것이 될 것이다. 그럼 실제로 불필요한 정보는 아예 로그를 남기지 않는 방법에 대해 알아보도록 하자.
이를테면 코드레드의 경우 아래와 같이 무차별적인 로그가 남게 되는데
2001/08/01 23:39:50.765446 152.158.99.4:58781 -> 211.233.38.193:80 [AP]
GET/default.ida?NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN

이러한 로그를 막기 위해서는 httpd.conf 파일을 열어
CustomLog 윗 줄에
SetEnvIf Request_URI "/default.ida$" cord-red 와 같이 정의한 후
CustomLog /usr/local/apache/logs/access.log combined 라고 설정되어 있는 부분을
CustomLog /usr/local/apache/logs//access.log combined env=!cord-red 라고 수정을 한다.
! 는 not 의 의미이므로 위 설정은 환경변수 cord-red로 정의된 요청을 거부하라는 뜻이다.
위와 같이 설정 후 아파치를 재시작하면 코드 레드와 관련된 로그가 남지 않게 된다. 코드레드에 이은 Nimda 웜의 경우도 같은 방식으로 설정하여 로그에 남지 않도록 설정할 수 있다.
또한 같은 원리를 이용하여 iptables 를 이용하여 아예 패킷 자체를 차단할 수도 있는데, 코드 레드의 경우 default.ida 문자열을 요청한다는 특징을 이용하여
iptables –A INPUT -i eth0 -p tcp --tcp-flags ACK ACK --dport 80 \
-m string --string '/default.ida?' -j REJECT --reject-with tcp-reset 와 같이 iptables 의 –strings 를 이용하여 특정 문자열이 포함된 패킷을 차단하는 방법도 있기는 하지만 이 방법은 커널과 iptables 를 다시 컴파일 하여야 하는 문제가 있다. Nimda Worm 역시 이외 cmd.exe 와 root.exe 를 포함하므로 같은 방식으로
iptables -A INPUT -p tcp --tcp-flags ACK ACK --dport 80 -m string --string "cmd.exe" -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp --tcp-flags ACK ACK --dport 80 -m string --string "root.exe?" -j REJECT --reject-with tcp-reset 와 같이 차단할 수 있다
2005/07/01 15:27 2005/07/01 15:27

트랙백 주소 :: 이 글에는 트랙백을 보낼 수 없습니다