[Threat Analysis] 다시 돌아온 DDoS, 더욱 고도화된 양상으로 진화
6.25 사이버테러 분석 보고서 1부_DDoS 공격 분석
|
2013년 6월 25일 오전 10시, 주요 정부 기관 및 언론사에 DDoS(Distributed Denial of Service, 분산 서비스 거부) 공격이 발생했다. 이번 DDoS 공격은 악성코드와 좀비 PC를 이용한 전통적인 DDoS 공격 방식 외에 일부 타깃 웹사이트에 대한 공격에는 웹사이트 접속만으로 DDoS 공격을 발생시키는 악성 스크립트 방식이 이용돼 주목을 끌었다. 이 같은 방식이 국가적 대형 DDoS 공격에 이용된 것은 처음이다. 또한 특정 언론사, 특정 정당의 시도당 및 관련 도메인에 대한 아파치 레인지(Apache Range) DoS 취약점을 이용한 공격도 나타났다.
|
[그림 1]은 6.25 사이버테러에서 나타난 DDoS 공격 양상을 타임라인 별로 정리한 내용이다. 오전 10시부터 주요 정부 기관을 대상으로 벌어진 이번 DDoS 공격의 방식은 크게 두 가지로 구분된다. ▲좀비 PC를 통한 DDoS 공격 방식과 ▲악성 스크립트를 이용한 DDoS 공격 방식이 그것이다.
우선, 악성코드 유포를 통한 좀비 PC를 이용한 DDoS 공격 방식은 지난 2011년 3.4 DDoS 공격 당시와 같이 웹하드를 통해 DDoS 공격 관련 악성코드가 배포된 것으로 확인됐다. 공격자는 특정 웹하드의 설치 파일과 업데이트 파일을 통해 개인 사용자 PC를 악성코드에 감염시켜 좀비 PC로 만들었다. 이후 C&C 서버를 통해 6월 25일 오전 10시에 좀비 PC들이 특정 DNS(Domain Name Service) 서버에 DDoS 공격을 수행하도록 명령을 내린 것으로 확인됐다. DNS 서버는 웹 사이트 이용자들이 정부 기관의 주소를 입력하면 이를 실제 웹사이트로 연결시켜주는 기능을 하는데, 이 DNS 서버가 공격을 받아 일부 정부기관 웹사이트들의 접속이 원활하지 못했던 것이다.
안랩이 최초로 확인한 ‘악성 스크립트를 이용한 DDoS 공격 방식’은 좀비 PC를 이용한 공격과 달리, 공격자가 특정 웹사이트에 악성 스크립트를 삽입해 놓음으로써 사용자들이 해당 사이트를 방문하면 미리 설정해 놓은 웹사이트로 공격 트래픽을 발생시키는 방식이다. 사용자가 악성 스크립트가 설치된 해당 웹사이트에 접속(방문)하고 있는 동안에 사용자의 PC에서 공격 트래픽이 발생한다.
[그림 1] 6.25 DDoS 공격 주요 타임라인
6.25 DDoS 공격 유발 악성코드 분석
1. 주요 파일 분석 정보
특정 웹하드 업체의 설치파일(RARSFX)을 변조하여 해당 파일이 압축 해제되면서 SimDiskup.exe가 실행되도록 설정돼 있다. 다음은 6.25 DDoS 공격 방식 중 악성코드를 기반으로 한 공격에 이용된 파일의 상세 분석 내용이다.
[그림 2] 파일 관계 및 공격 시나리오
(1) servmgr.exe – 드롭퍼
드롭퍼인 servmgr.exe는 [그림 3]과 같이 리소스 영역에 4개의 PE 파일을 갖고 있다. servmgr.exe는 실행되면 다음과 같이 동작한다.
① 시스템 버전 정보 체크
② OpenFileMappingA를 호출해 감염 여부 확인
③ 시스템 버전에 따라 동작
servmgr.exe는 [표 1]과 같이 타깃 시스템 환경에 따라 기능은 동일하지만 시스템 환경에 맞는 각기 다른 파일을 생성한다는 점이 특징적이다. 또한 시스템 버전 정보가 6.0(Vista) 이상일 경우, GetVersionExA로 UAC 우회를 위한 파일을 추가로 생성한다.
[표 1] 동일한 기능을 위해 시스템 환경에 따라 생성되는 파일
④ 배치 파일 %Temp%\ud.bat 생성 후 자기 자신 삭제
[그림 3] servmgr.exe의 리소스 섹션에 존재하는 PE 파일
(2) ole(정상 윈도우 서비스명).dll
① 해당 악성코드는 'system32\ole(정상 윈도우 서비스명).dll' 경로에 저장된다. 단, 감염될 때마다 파일명이 달라지는데 일정하게 ole라는 문자로 파일명이 시작되며, 감염된 시스템의 정상 윈도우 DLL 파일명을 조합해 파일명이 만들어지는 것으로 추정된다. 이 DLL 파일은 서비스로 동작하면서 조건이 일치하면 다음과 같은 경로에 파일을 생성하고 실행한다.
② 단, 위의 경로에 파일을 생성하고 실행하기 전 다음의 URL에 접속하여 파일을 다운로드한다.
③ 다운로드한 파일을 %temp%\~MR숫자2자리.tmp로 저장한 후, 시그니처('BM6W')와 시간 정보(6월 25일 10:00)를 확인하여 조건에 부합하면 '%system32%\wuauieop.exe'라는 경로에 파일을 생성하고 실행한다.
[그림 4] DDoS 공격 수행을 위한 시간 정보 확인
(3) wuauieop.exe
DDoS 공격 관련 기능을 갖고 있는 파일은 wuauieop.exe이다. 위의 과정을 거쳐 %system% 폴더에 생성된 wuauieop.exe라는 이름의 파일이 실질적인 DDoS 공격을 수행한다. 파일 내부에 2개의 공격 대상 IP가 고정되어 있다. 다음과 같이 각각 쓰레드(thread)가 구동되어 무한 루프로 동작하여 공격이 이루어진다.
또한 2개의 쓰레드 루틴에서 랜덤하게 도메인 네임을 생성하는 다음과 같은 코드가 존재한다. 이를 통해 도메인 네임을 랜덤화하여 DDoS 공격 효과를 증대시킨 것으로 추정된다.
(4) ~SimDisk.exe
~SimDisk.exe는 네트워크 접속 정보의 감시 및 추적, 분석을 까다롭게 하기 위해 이용하는 tor 프로그램의 소스코드를 사용한 자체 빌드 버전의 설치본 파일이다. ~SimDisk.exe가 실행되면 다음과 같은 경로에 랜덤한 이름으로 파일을 생성한다.
2. 악성코드 기반 DDoS 공격 트래픽 분석
이번 6.25 DDoS 공격 중 악성코드를 기반으로 한 공격 방식도 크게 2가지로 구분된다. ▲DNS Query 및 DNS 증폭 DDoS 공격과 ▲아파치 레인지(Apache Range) 취약점을 이용한 공격이 그것이다.
(1) DNS DDoS 트래픽 분석
■ DNS ANY Query DDoS 공격
DNS 서버에 대한 서비스 거부 공격을 수행하는 DNS DDoS 트래픽은 아래와 같은 2개의 DNS 서버를 공격했다. 주요 정부 기관에서 이들 도메인 네임 서버를 사용하고 있었기 때문에 이번 공격의 대상이 된 것으로 보인다.
다음은 DNS ANY Query DDoS 공격 트래픽의 주요 특징이다.
|
① 일반적으로 정상 트래픽의 경우 A Query인데 반해 모두 ANY Query를 전송했다.
② 랜덤 호스트명을 이용한 DNS Query를 두 개의 NS(152.99.1.10, 152.99.200.6)로 동시에 요청한다.
③ DNS 서버 부하를 위해 데이터 크기를 1300~1400byte로 조정한다. 일반적인 DNS Query는 소량의 트래픽이나, 공격 네임 서버로의 대역폭(Bandwidth) 소모를 유발하기 위해 약 1400byte의 데이터를 사용했다. |
한편, 수집된 패킷은 초당 약 712회의 DNS Query를 전송하는 것으로 확인됐다.
[그림 5] DNS ANY Query 패킷 요약
■ DNS 증폭 DDoS 공격
공격 대상 NS에 직접 ANY Query를 전송하는 방식과 달리, 인터넷 상의 NS(reflector)를 동원하는 DNS 증폭 DDoS 공격을 수행하는 악성코드가 발견됐다. 해당 악성코드는 6월 25일 20:43:16(GMT+9) 경에 제작된 것으로 파악되며, DNS 증폭 분산 서비스 공격을 목적으로 제작됐다.
DNS 증폭 DDoS 공격이란 공개적으로 접근 가능한 DNS 서버를 이용해 대량의 DNS 응답 패킷을 공격 대상에 전송하는 공격 형태이다.
해당 악성코드에 감염된 다수의 PC에서 IP 스푸핑(Spoofing)을 이용해 DNS ANY 레코드 쿼리의 출발지 주소를 타깃 DNS 서버로 위장한다. 이후 해당 결과를 Open Resolver(Reflector)가 적용된 DNS 서버를 통해 타깃으로 유도하여, 대역폭 및 네임 서버 자원을 고갈시키는 등의 DNS 증폭 공격(DNS Amplification DDoS)을 수행한다. 한편 이 공격에는 2만여 개의 DNS 서버가 동원되었으나, 해당 DNS 서버들의 일부는 Open DNS Resolver 서버가 아닌 것으로 확인됐다.
[그림 6]은 DNS 증폭 공격 과정으로, 그 내용은 다음과 같다.
|
① ripe.net에 대한 ANY 레코드 요청
② 소스 IP 스푸핑
③ 패킷 분할(Fragmentation)
④ 추가적인 TCP 커넥션이 발생되어 부하가 가중된다. |
[그림 6] DNS 증폭 공격 과정
DNS 증폭 DDoS 공격 패킷은 [그림 7]과 같이 DNS Query 출발지를 변조하는 등의 특징을 보인다.
[그림 7] 출발지가 변조된 DNS Query
또한 [그림 8]과 같이 ripe.net의 ANY 쿼리 결과를 사용한다. 일반적인 요청 결과에 비해 매우 큰 데이터 크기의 응답값으로, 증폭 공격의 효과를 극대화하기 위한 것이다.
[그림 8] ripe.net ANY 레코드 쿼리를 요청하도록 지정
[그림 9]는 해당 악성코드에 감염된 PC에서 수집한 패킷 통계로, 초당 약 4400개의 DNS ANY 쿼리가 전송되는 것으로 확인됐다(단, 각 수치는 시스템의 사양에 따라 차이가 있을 수 있다).
[그림 9] 공격 패킷 통계
ripe.net의 ANY 응답 결과를 전달할 때 사용하는 중계 DNS 서버(reflector) 목록은 악성코드의 ‘.data’ 영역에 포함되어 있으며, [그림 10]의 VA값 0x40A044(FileOffset 0xA044)로부터 IP 목록을 가져온다.
[그림 10] 중계 DNS 서버 (reflector) 목록 획득 과정
[그림 11]은 FileOffset 0xA044 위치로, IP 목록이 저장돼 있다. 참조하기 위한 번호 EDX값을 구하기 위해 0x4C82로 나누는 점 등으로 미루어 공격에 사용하는 Resolver IP의 수는 1만 9586개로 추정할 수 있다.
[그림 11] 중계 DNS 서버(reflector) 정보(IP 주소)
(2) 아파치 레인지 취약점 공격
악성코드를 기반으로 한 6.25 DDoS 공격과 관련해 특정 정당 및 관련 도메인들에 대한 아파치 레인지 취약점 공격 시도가 파악됐다. 해당 악성코드는 외국인들을 대상으로 한 하숙/고시원 정보 제공 사이트(common/tpl/widget_layout.html)를 접속하고 C&C 서버로부터 공격 대상 URL을 전송받아 아파치 HTTPD 취약점을 공격하는 패킷을 전송한다.
이번 공격에 이용된 것은 아파치 HTTPD 취약점으로, 다수의 중복된 range 값을 헤더에 입력해 이를 처리하는 아파치 서버에 부하를 주는 방식이다. 이에 의해 메모리 자원이 고갈되고 CPU 점유율이 증가해 서비스 거부 상태에 이른다. 해당 취약점에 영향을 받은 아파치(Apache) 버전은 2.2.20 이전 버전으로 알려져 있으며, 1.3 버전에도 잠재적인 영향이 있을 수 있다.
공격 대상은 C&C 서버로부터 전송된다. C&C 서버의 응답은 다음과 같은 특징을 보인다.
[그림 12] C&C 서버로부터 공격 대상 URL 목록 수신
실제 공격 패킷은 [그림 13]과 같이 페이지를 요청(GET)할 때 중복되는 레인지(Range) 값을 대량으로 전송한다. 이로써 레인지 헤더에 6000byte 이상의 값을 입력해 CPU 및 메모리 자원을 고갈시키며 서비스 거부 상태를 야기한다.
[그림 13] 페이지 요청(GET) 시 전송하는 중복된 레인지(Range) 값
악성 스크립트 기반의 DDoS 공격
6.25 DDoS 공격의 가장 큰 특징은 기존의 좀비 PC를 이용한 공격 외에 악성 스크립트를 이용한 공격 방식이 이용됐다는 점이다. 이 경우, 일반 사용자가 웹 브라우저를 통해 변조된 해당 웹사이트를 방문하는 것만으로 악성 트래픽이 발생된다.
1. 악성 스크립트 기반 DDoS 공격 시나리오
[그림 14]는 스크립트 기반 DDoS 공격의 진행 과정으로, 주요 내용은 다음과 같다.
① 공격자는 사전에 다수의 불특정 사용자들이 방문하는 경유지 서버를 해킹한다.
② 경유지 서버에서 사용하는 정상적인 페이지에 DDoS 공격 스크립트를 삽입한다.
③ 불특정 다수의 사용자들이 웹 브라우저를 통해 경유지 서버(변조된 웹사이트)를 방문하면, 사용자 PC 상에서 DDoS 공격 스크립트가 실행된다.
④ 스크립트에 설정된 공격 대상 서버에 다량의 HTTP GET을 요청해 악성 트래픽을 유발한다.
[그림 14] 스크립트 기반의 DDoS 공격 시나리오
악성 스크립트를 이용한 DDoS 공격 방식은 사용자가 해당 웹사이트를 방문한 상태일 때 트래픽이 발생하는 방식이다. 따라서 사용자가 접속한 브라우저를 닫거나 다른 사이트로 이동할 경우, 악성 스크립트 실행이 중단되기 때문에 브라우저를 통한 HTTP GET 요청도 함께 종료된다. 악성 스크립트를 기반의DDoS 공격에 대한 피해를 최소화하기 위해 개인 사용자 및 기업 웹사이트 관리자는 다음과 같은 조치를 취할 수 있다.
|
스크립트 기반 DDoS 공격 조치 방안
1. 일반 사용자 조치 방안
2. 웹사이트 관리자 조치 방안 |
2 악성 스크립트 기반 DDoS 공격 트래픽 분석
[그림 15]는 악성 스크립트 기반의 6.25 DDoS 공격과 관련된 HTTP GET 요청 패킷 정보다.
[그림 15] HTTP GET 요청 패킷 정보
공격 스크립트는 [그림 16]과 같이 setInterval 주기가 ‘0’이 되도록 구현되어 있다. 단, HTTP GET 요청이 발생하는 주기는 브라우저마다 다소의 차이가 있을 수 있다.
[그림 16] HTTP GET 요청 시도를 위한 스크립트 설정
분석 환경(IE 10)에서 재현한 결과, [그림 17]과 같이 대략 초당 60여개 정도의 HTTP GET 요청을 시도하는 것으로 확인됐다. 한편, 구글 크롬 브라우저에서는 초당 40여 개 정도의 요청이 발생하는 것으로 분석됐다.
[그림 17] 초당 60회의 HTTP GET 요청
공격자는 다수의 사용자가 방문하는, 외국인을 대상으로 한 하숙/고시원 정보 제공 사이트 서버를 해킹해 공격의 경유지로 삼았다. 해당 웹사이트의 메인 페이지와 공통 자바 스크립트 파일에 각각의 타깃 공격용 스크립트를 삽입한 것이다.
makeHTTPRequest 함수에 실제 공격 URL을 구성해 HTTP GET 요청 트래픽을 발생시킨다. 공격 대상인 3개 사이트의 하위 URL 총 60개를 대상으로 HTTP GET 요청을 반복적으로 수행한다.
[그림 18] 경유지 서버의 메인 페이지 변조 후
[그림 19] 경유지의 자바 스크립트 파일 변조 후
유기적이고 고도화된 체계로 적극 대응
안랩은 공격 징후를 포착한 즉시 긴급 대응 체계를 가동해 DDoS 유발 악성코드를 분석하는 한편, 해당 악성코드 샘플과 유포지 정보를 관계기관에 공유했다. 또한 신속하게 전용 백신을 배포하고 상세 분석 보고서를 제공하는 등 피해 확산 방지 및 사전 대응에 나섰다.
6.25 DDoS 공격과 관련한 악성코드 및 악성 스크립트는 모두 V3로 진단이 가능하며, 공격 패킷에 대한 시그니처는 안랩 트러스가드(AhnLab TrusGuard)에 적용돼 있다. 이 밖에도 안랩 자체 테스트 결과, 안랩 트러스와처(AhnLab TrusWatcher)는 이번 DDoS 공격을 유발한 신종 악성코드를 행위 기반 분석 기술로 실시간 탐지했다.@
- AhnLabASEC