[Special Report 2] 악성코드와의 끝없는 싸움 - ARP Spoofing
1. 개요
몇 년 사이에 많은 악성코드들이 발견되고 있다. 그 가운데 기억에 남는 악성코드가 있다면 아마도 2007, 2008년까지 유행했던 ‘ARP Spoofing과 결합한 Onlinegamehack’일 것이다. 그 당시에도 침해 사이트와 응용 프로그램(Internet Explorer, Flash, PDF 등)의 취약성을 이용한 악성코드 유포가 빈번하게 발생했었는데 여기에 "ARP Spoofing"이라는 해킹기법이 더해 지면서 악성코드의 빠른 확산과 고객(특히 기업)에 상당한 피해를 입혔다.
한동안 잠잠했던 ‘ARP Spoofing과 결합한 Onlinegamehack’이 올해 9월초부터 침해 사이트를 통해서 다시 유포 중인 것이 운영 중인 Active Honeypot에서 확인되었다. 보안업체들은 수집된 변종들을 엔진에 대응하고 있으며, 유포 URL은 국가기관 및 고객사에 공유하여 피해 예방을 해 왔다. 하지만 지금도 많은 고객(기업)들에서 해당 악성코드 감염으로 인한 피해가 발생하고 있는 상황이다. 그래서 올해 다시 이슈가 되고 있는 ‘ARP Spoofing과 결합한 Onlinegamehack’의 유포 기법 그리고 악성코드의 동작방식에 대해 정리했다.
이번 ‘ARP Spoofing과 결합한 Onlinegamehack’를 이해하기 위해서 우선 ARP와 ARP Spoofing에 대해서 간단하게 살펴보자.
2. ARP(Address Resolution Protocol)
ARP란 각 PC의 IP에 대해서 물리주소(Mac 주소)를 매핑시키는 프로토콜로 네트워크에서는 IP기반이 아닌 IP에 매핑된 Mac 주소를 기반으로 통신한다.

[그림 1] 정상 네트워크의 구조
예를 들어 192.168.26.134가 192.168.26.1과 통신을 한다고 가정했을 때
(1) 134번 IP는 통신할 IP가 192.168.26.1이라는 것은 알고 있음.
(2) 하지만 실제로는 IP통신이 아닌 해당 IP에 매핑되는 Mac주소로 통신을 함.
(3) 그런데 134번은 192.168.26.1의 Mac주소를 모름
(4) 따라서 134번은 192.168.26.1의 Mac주소를 찾기 위해 Broadcast(FF:FF:FF:FF:FF:FF)를 발생함.
(5) 이에 대한 응답으로 192.168.26.1의 Mac주소는 00:50:56:C0:00:08로 Reply함
위 과정을 설명한 것이 바로 아래 [그림 2]이다.

[그림 2] 정상 네트워크에서의 ARP 패킷
자, 그럼 정상 네트워크에 ARP Spoofing이 발생했을 경우 어떻게 달라지는지 살펴보자.
3. ARP(Address Resolution Protocol) Spoofing
각 PC의 Mac Table에 매핑된 모든 IP에 대한 Mac 주소가 공격자 PC의 Mac주소로 변조되어 모든 PC들의 통신이 공격자 PC를 통해서 이루어지는 기법을 의미한다.

[그림 3] ARP Spoofing이 발생한 네트워크
[그림 3]에서처럼 ARP Spoofing이 발생한 네트워크라면 공격자는 [그림 4]처럼 지속적으로 ARP Reply를 발생하여 동일한 네트워크에 속해 있는 다른 PC들이 공격자가 보낸 ARP Reply의 정보로 자신들의 Mac Table의 Cache를 업데이트하도록 한다.

[그림 4] 공격자가 보낸 ARP Reply 패킷
공격이 성공하면 각 PC의 Mac Table의 Cache는 공격자 PC의 Mac 주소로 업데이트되며 이로 인해 모든 트래픽은 공격자 PC를 통해서 통신하려는 각 PC로 Relay된다. 결국 공격자는 자신의 PC를 통과하는 모든 트래픽에 대해서 스니핑(Sniffing)이 가능하게 된다.
그럼, 이제부터 ARP Spoofing과 결합된 Onlinegamehack에 대해서 알아보자.
4. ARP Spoofing과 결합된 Onlinegamehack

[그림 5] ARP Spoofing과 결합된 Onlinegamehack의 전체구조
① 공격자는 불특정 웹 사이트를 대상으로 웹 공격(SQL Injection, XSS 등)을 수행하여 취약한 사이트의 웹 페이지에 yahoo.js 링크 삽입
② 악성코드 배포를 위한 숙주 사이트 3개를 구축 및 운영
③ 취약한 사이트는 웹 페이지에 삽입된 yahoo.js에 의해서 악성코드 숙주 사이트와 링크
④ 로컬 PC가 취약한 Internet Explorer를 사용하여 yahoo.js가 삽입된 사이트에 접속
⑤ 취약한 Internet Explorer에 의해서 접속한 사이트에 삽입되었던 yahoo.js 링크가 실행되면서 로컬 PC에 yahoo.js가 다운로드 & 실행
⑥ 실행된 yahoo.js에 의해서 로컬 PC에는 추가로 ad.htm, news.html, count.html이 다운로드 & 실행
⑦ ad.htm, news.html은 Internet Explorer의 취약성을 이용하여 s.exe 다운로드 & 실행하는 Exploit
⑧ 로컬 PC에 다운로드된 s.exe가 실행되면 smx4pnp.dll을 생성한 후 실행
⑨ 실행된 smx4pnp.dll에 의해서 로컬 PC에는 추가로 ma.exe, tt.exe가 다운로드 & 실행
⑩ ma.exe는 특정 온라인 게임 사용자의 계정정보를 탈취하는 Onlinegamehack 악성코드
⑪ tt.exe는 ARP Spoofing기능을 가진 악성코드
아래 그림은 최근 한 달간 Active Honeypot에서 탐지된 정보를 근거로 ARP Spoofing과 결합된 Onlinegamehack의 유포에 대해서 타임라인을 작성한 것이다.

[그림 6] ARP Spoofing과 결합된 Onlinegamehack의 유포탐지 타임라인
[그림 6]에 보이는 타임라인 이전에도 다운로더(Downloader)만의 유포 시도는 꾸준히 있어 왔는데 그것은 ARP Spoofing과 결합된 악성코드를 유포하기 위한 테스트 정도로 파악됐다. 그러나 2010년 9월 1일부터는 본격적으로 ARP Spoofing과 결합된 악성코드가 침해 사이트를 통해서 유포되기 시작했다. 특히 수시로 삽입된 Script URL과 Download URL의 도메인을 변경해 왔음을 알 수가 있었다.
5. 악성 스크립트(yahoo.js) 분석

[그림 7] 침해 사이트의 특정 페이지에 삽입된 yahoo.js
[그림 7]에서 보는 것처럼 ARP Spoofing과 결합된 Onlinegamehack감염의 시발점이 되는 yahoo.js는 침해 사이트의 특정 페이지에 script src태그와 함께 링크형식으로 삽입되어 있었으며 아래 그림처럼 난독화된 자바 스크립트이다.

[그림 8] 난독화된 yahoo.js
[그림 8]에서 보는 것처럼 yahoo.js는 2단계의 난독화된 코드로 되어 있으며 난독화를 해독한 후의 최종 스크립트 코드는 아래 [표 1]과 같다.

[표 1] 난독화 해독 후 yahoo.js 코드
[표 1]을 보면 yahoo.js는 총 3개의 스크립트를 추가로 다운로드하는데 해당 스크립트들의 역할은 아래와 같다.

[그림 9] 난독화된 ad.htm과 news.html
[그림 9]에서 보는 것처럼 난독화된 ad.htm과 news.html은 각각 MS10-018, MS10-002취약점을 사용하며 해당 스크립트들이 실행되면 특정 사이트로부터 s.exe를 다운로드 및 실행한다.
MS10-018 취약점을 이용하는 ad.htm의 ShellCode를 분석해 보면 아래 복호화 루틴에 의해서 암호화되어 있던 일부 코드를 복호화하는데 위에서 언급한 것처럼 특정 사이트로부터 s.exe를 다운로드 및 실행하기 위한 코드가 존재함을 알 수가 있었다.

[그림 10] ShellCode의 복호화 루틴

[그림 11] 암 & 복호화된 ShellCode
다운로드된 s.exe는 다운로드 기능을 가진 DLL을 특정 경로에 생성하는 드롭퍼(Dropper)이다. s.exe에 대한 상세분석은 추후 언급하기로 한다. ad.htm과 news.html파일이 이용하는 취약점에 대한 상세정보는 아래 주소를 참고한다.


[그림 12] count.html의 기능
count.html의 역할은 감염 PC의 현황을 파악하기 위한 스크립트 코드로 보여진다.
6. s.exe 분석
s.exe는 Onlinegamehack과 ARP Spoofing 기능을 가진 악성코드를 다운로드하는 DLL을 특정 폴더에 생성하는 드롭퍼(Dropper)이며, 전체적인 동작구조는 아래 그림과 같다.

[그림 13] s.exe의 동작구조
s.exe의 변종은 다수 존재하고 파일크기는 15kb ~ 50kb로 다양하다. 그리고 일부 변종에서는 위 그림에서 보는 것처럼 생성할 smx4pnp.dll을 암호화된 형태로 가지고 있으며 복호화 루틴을 실행하여 MZ-PE구조를 갖춘 DLL로 복호화한다.

[그림 14] s.exe의 복호화 루틴
%USERPROFILE%\Microsoft\smx4pnp.dll은 CreateThread()를 사용하여 악성코드 다운로드 기능을 실행한다.

[그림 15] CreateThread() : 파일 다운로드 기능

[그림 16] 파일 다운로드
[그림 16]을 보면 "http://%u. %u. %u. %u:81/s.txt"에서 %u는 gethostbyname()를 사용하여 URL에 대한 IP로 설정되며 해당 URL에서 s.txt를 다운로드한다. s.txt는 Onlinegamehack과 ARP Spoofing 기능을 가진 악성코드를 다운로드하기 위한 URL 리스트가 저장된 텍스트 파일이다.

[그림 17] 악성코드 유포 URL의 타임라인
[그림 17]는 smx4pnp.dll가 s.txt, ma.exe, tt.exe를 다운로드할 때 사용했던 URL들에 대한 타임라인을 정리한 것으로 도메인은 수시로 변경됨을 알 수가 있고 현재까지 악성코드를 유포 중인 IP대역은 98.126.*6.***, 98.126.*0.*** 등이며 해당 대역의 IP정보를 조회해 보면 미국에 할당된 IP대역인 것으로 확인된다. 그리고 해당 도메인들에 대한 whois를 조회해 본 결과 모두 최근에 생성된 것으로 판단된다.

[그림 18] WHOIS Query Result

[그림 19] DNS Query Result

[그림 20] 악성코드 유포에 사용 중인 추가 IP
7. ma.exe(Onlinegamehack) 분석
ma.exe는 특정 온라인 게임 사용자의 계정정보를 탈취할 목적을 가진 악성코드로 동작구조는 아래와 같다.

[그림 21] ma.exe의 동작구조
ma.exe가 실행된 후 생성한 2개의 DLL은 [그림 21]에서 보는 것처럼 특정 게임 또는 게임 사이트 로그인 시 사용되는 사용자의 계정정보를 탈취하여 특정 URL로 전송하는데 [그림 21]의 파일생성에서 첫 번째 DLL를 분석해 보면
탈취한 계정정보를 전송하는데 사용되는 URL은 암호화된 상태이며 아래 복호화 루틴에 의해서 복호화된다.

[그림 22] URL 복호화 루틴

[그림 23] 암호화된 URL 복호화 전 & 후

[그림 24] 테스트 시 계정정보 유출패킷

[그림 25] Onlinegamehack의 계정정보 유출현황
[그림 21]에서 ma.exe가 실행되면 두 개의 DLL을 생성함을 알 수 있었으며, [그림 25]에서는 해당 두 DLL들이 다수의 온라인 게임을 대상으로 사용자의 계정정보 유출 시도함을 알 수가 있다.
8. tt.exe(ARP Spoofing) 분석

[그림 26] tt.exe의 동작구조
아래 그림을 보면 정상 PC의 ARP Table에 설정된 G/W(게이트웨이)의 Mac 주소가 악성코드에 감염된 PC의 Mac 주소로 변경되어 있음을 알 수가 있다. 이렇게 되면 4번 IP에서 In/Out되는 모든 패킷이 악성코드에 감염된 PC를 통해서 Relay되므로 스니핑(Sniffing)이 가능해 진다.

[그림 27] ARP Table 비교

[그림 28] 악성코드에 감염된 PC에서 발생한 ARP Reply

[그림 29] 재조립되어 4번 IP에 Relay된 패킷일부

[그림 30] 재조립된 패킷에 삽입된 악성 스크립트 링크
[그림 29]에서 보는 것처럼 재조립된 패킷이 4번 IP에 Relay되고 응용 프로그램(ex, Internet Explorer)에 의해서 해당 패킷의 내용이 보여지면서 삽입된 악성 스크립트 링크도 함께 실행된다. 그리고 yahoo.js가 실행되면서 추가로 악성코드를 다운로드 및 실행하게 되는데 이로 인해 마치 사용자가 방문한 사이트에 침해사고가 발생하여 악성코드를 유포하는 것으로 오해할 수 있다.

[그림 31] yahoo.js가 특정 사이트에 추가로 다운로드 하는 파일들
그리고 [그림 27]에서 한가지 특이한 점을 발견할 수 있는데 악성코드에 감염된 PC의 Mac Table의 정보가 Static으로 설정되어 있다. 이를 위해서 악성코드는 감염된 PC의 네트워크 대역으로 ARP Request Broadcast를 발생시켜 네트워크에 존재하는 PC들로부터 ARP Reply를 받아 해당 PC들의 Mac 주소를 Static으로 설정한다.

[그림 32] 악성코드에 감염된 PC에서 발생한 ARP Request Broadcast
9. 결론
지금까지 ‘ARP Spoofing과 결합한 Onlinegamehack’의 유포 및 동작방식 그리고 변종 악성코드들의 유포내역 등 전반적인 부분에 대해서 살펴 보았다. 이번 이슈를 정리하는 동안 개인보다는 기업에서 피해사례가 더 많았다는 것과 PC가 집단 네트워크를 이루고 있는 환경을 대상으로 했다는 것을 알 수가 있었다.

[그림 33] ARP Spoofing과 Onlinegamehack의 피해효과
만약 감염된 PC가 IE의 보안 업데이트만 잘 되어 있었다면? 이번 ARP Spoofing과 결합한 Onlinegamehack 역시 IE의 보안 취약점을 사용했기에 감염된 PC가 보안 업데이트만 잘 되어 있었다면 기업 PC와 네트워크 모두 안전했을 것이다. 그만큼 보안 업데이트가 가장 기본적인 것이면서도 중요하다는 것을 다시 한번 깨닫게 해주는 사례이다.@
- 안철수연구소안철수연구소 ASEC대응팀 주임연구원 안창용